国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Apache > 正文

Apache Commons Math3學習之數值積分實例代碼

2024-08-27 18:25:04
字體:
來源:轉載
供稿:網友

Apache.Commons.Math3里面的數值積分支持類采用的是“逼近法”,即,先對大區間做一次積分,再對小區間做一次積分,若兩次積分結果的差值小于某一設定的誤差值,則認為積分完成。否則,將區間再次細分,對細分后的區間進行積分,與前一次積分相比較,如此反復迭代,直至最近的兩次積分差值足夠小。這樣的結果,有可能會導致無法收斂。

為了使用org.apache.commons.math3.analysis.integration包中的積分器類,需要先實現UnivariateFunction接口(本文以MyFunction為例),實現其value方法。然后創建指定的積分器對象,本文以SimpsonIntegrator為例,最后調用其integrate(...)方法即可算出MyFunction的積分。

調用integrate(...)方法時需要提供4個參數:

第1個是最大逼近次數,要適當大一些,否則可能會無法收斂;
第2個是MyFunction類的實例;
第3個是積分區間下限;
第4個是積分區間上限。

SimpsonIntegrator在第一次迭代時一定是分別以積分下限和積分上限作為x調用連詞MyFunction.value(...)方法,下一次則會將區間分成2份(除上下限x值之外,還有一個中間x值),再下一次則是分成4份……

以下是使用辛普森積分類的例子:

import java.util.ArrayList;import java.util.List;import org.apache.commons.math3.analysis.UnivariateFunction;import org.apache.commons.math3.analysis.integration.SimpsonIntegrator;import org.apache.commons.math3.analysis.integration.UnivariateIntegrator;interface TestCase {	public Object run(List<Object> params) throws Exception;	public List<Object> getParams();	public void printResult(Object result) throws Exception;}public class TimeCostCalculator {	public TimeCostCalculator() 	  {	}	/**   * 計算指定對象的運行時間開銷。   *   * @param testCase 指定被測對象。   * @return 返回sub.run的時間開銷,單位為s。   * @throws Exception   */	private double calcTimeCost(TestCase testCase) throws Exception 	  {		List<Object> params = testCase.getParams();		long startTime = System.nanoTime();		Object result = testCase.run(params);		long stopTime = System.nanoTime();		testCase.printResult(result);		double timeCost = (stopTime - startTime) * 1.0e-9;		return timeCost;	}	public void runTest(TestCase testCase) throws Exception 	  {		double timeCost = calcTimeCost(testCase);		System.out.println("時間開銷:: " + timeCost + "s");		System.out.println("-------------------------------------------------------------------------------");	}	public static void main(String[] args) throws Exception 	  {		TimeCostCalculator tcc = new TimeCostCalculator();		tcc.runTest(new CalcSimpsonIntegrator());	}}/**  * 使用辛普森法求解數值積分。Apache.Common.Math3中所用的辛普森法是采用逼近法,即先對整個積分區間用矩形積分,然后將區間分解為4份,再次積分,比較兩次積分的差值,若想對誤差大于某個預訂數值,  * 則認為還需要繼續細分區間,因此會將區間以2倍再次細分后求積分,并將結果與前一次積分的結果比較,直至差值小于指定的誤差,就停止。  * @author kingfox  *  */class CalcSimpsonIntegrator implements TestCase {	public CalcSimpsonIntegrator() 	  {		System.out.print("本算例用于測試使用辛普森法計算積分。正在初始化計算數據 ... ...");		inputData = new double[arrayLength];		for (int index = 0; index < inputData.length; index++)  // 

主站蜘蛛池模板:
江门市|
绍兴市|
佳木斯市|
梧州市|
会东县|
四会市|
子洲县|
景洪市|
平凉市|
兴海县|
昭觉县|
抚州市|
娱乐|
玉屏|
达拉特旗|
团风县|
盈江县|
蛟河市|
克山县|
宝清县|
于都县|
大同县|
长春市|
澜沧|
兖州市|
湘潭县|
乡宁县|
繁峙县|
高唐县|
南丰县|
汽车|
云安县|
长治县|
甘南县|
濮阳市|
沙坪坝区|
阿鲁科尔沁旗|
庐江县|
鹤峰县|
刚察县|
萍乡市|