亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

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

2024-07-13 10:13:17
字體:
來源:轉載
供稿:網友

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++)  // 鏂滃潯鍑芥暟 		{			inputData[index] = Math.sin(2 * Math.PI * index * MyFunction.factor * 4);		}		func = new MyFunction();		integrator = new SimpsonIntegrator();		System.out.println("初始化完成!");	}	@Override 	  public Object run(List<Object> params) throws Exception 	  {		double result = ((SimpsonIntegrator)(params.get(1))).integrate(steps, (UnivariateFunction)(params.get(0)), lower, upper);		return result;	}	/**   * 獲取運行參數   * @return List對象,第一個元素是求積函數,第二個參數是積分器。   */	@Override 	  public List<Object> getParams() 	  {		List<Object> params = new ArrayList<Object>();		params.add(func);		params.add(integrator);		return params;	}	@Override 	  public void printResult(Object result) throws Exception 	  {		System.out.println(">>> integration value: " + result);	}	UnivariateFunction func = null;	UnivariateIntegrator integrator = null;	class MyFunction implements UnivariateFunction 	  {		@Override 		   public double value(double x) 		   {			//     double y = x * factor;   // 1. 			//     double y = 4.0 * x * x * x - 3.0 * x * x + 2.0 * x - 1.0;  // 2. 			//     double y = -1.0 * Math.sin(x) + 2.0 * Math.cos(x) - 3.0;   // 3. 			double y = inputData[(int)(x / factor)];			// 4. 			//     System.out.println(x + ", " + y); 			return y;		}		private static final double factor = 0.0001;	}	private double[] inputData = null;	private static final int arrayLength = 5000;	private static final double lower = 0.0;	//  private static final double upper = 2.0 * Math.PI;   // 3. 	private static final double upper = (arrayLength - 1) * MyFunction.factor;	// 1. 2. 4. 	private static final int steps = 1000000;}

上述代碼中,注釋為1. 2. 3.的可以正常計算出結果,但注釋為4.的就無法收斂。

基于org.apache.commons.math3.analysis.integration.UnivariateIntegrator的積分器的另一個局限性在于必須編寫一個繼承于UnivariateFunction的函數類,實現其value方法(根據輸入的x值計算出y值),這種做法有利于可用解析式表達的情況,不利于對存放于外存的大量數據做積分處理。

總結

以上就是本文關于Apache Commons Math3學習之數值積分實例代碼的全部內容,希望對大家有所幫助。有什么問題可以隨時留言,小編會及時回復大家的。這里推薦幾本Java方面的書,供廣大編程愛好及工作者進行閱讀參考,免費的哦!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
6080yy精品一区二区三区| 亚洲精品www| 九九视频直播综合网| 91老司机精品视频| 亚洲毛片在线观看.| 亚洲欧美中文字幕在线一区| 成人午夜在线视频一区| 精品国产一区二区三区在线观看| 欧洲精品久久久| 日本精品免费观看| 欧美激情精品久久久久久久变态| 精品国产乱码久久久久久天美| 欧美在线中文字幕| 欧美另类第一页| 在线国产精品播放| 91tv亚洲精品香蕉国产一区7ujn| 精品伊人久久97| 亚洲第一黄色网| 午夜精品一区二区三区视频免费看| 欧美亚洲国产日韩2020| 国产日韩在线免费| 成人免费福利视频| 欧美日韩电影在线观看| 91在线观看免费观看| 国产婷婷成人久久av免费高清| 久久成人人人人精品欧| 国产三级精品网站| 欧美午夜影院在线视频| 国产精品亚洲视频在线观看| 国产精品久久久精品| 欧美性猛交xxxxx水多| 日本精品久久中文字幕佐佐木| 久久这里只有精品99| 亚洲精品久久久一区二区三区| 久久精品国产久精国产思思| 在线观看久久久久久| 在线精品91av| 欧美亚洲日本网站| 亚洲精品在线观看www| 欧美国产日本在线| 久久精品国产欧美激情| 国产成人在线一区二区| 国模视频一区二区| 88国产精品欧美一区二区三区| 成人激情在线播放| 久久久av电影| 久久91亚洲精品中文字幕| 欧美在线欧美在线| 国产做受高潮69| 欧美日韩另类视频| 精品亚洲一区二区| 欧美老女人xx| 日韩免费观看av| 久久97精品久久久久久久不卡| 日韩精品中文字幕在线播放| 欧美性xxxx极品hd欧美风情| 日韩国产精品亚洲а∨天堂免| 国产精品入口免费视频一| 国产亚洲精品va在线观看| 亚洲天堂视频在线观看| 在线观看欧美www| 欧美在线视频网站| 国产精品午夜国产小视频| 久久av.com| 成人国产精品免费视频| 亚洲国产精品va| 久久香蕉频线观| 国产成人极品视频| 亚洲美女免费精品视频在线观看| 亚洲一区二区三区sesese| 国产精品久久久久影院日本| 精品国产一区二区三区久久久狼| 色系列之999| 成人网在线免费看| 成人免费在线视频网站| 亚洲理论电影网| 久久精品国产欧美亚洲人人爽| 亚洲最大福利网| 精品人伦一区二区三区蜜桃免费| 亚洲国产精品系列| 亚洲欧美国产日韩中文字幕| 日韩激情av在线播放| 麻豆精品精华液| 91av在线精品| 色婷婷久久一区二区| 国产亚洲精品日韩| 欧美www在线| 欧美国产极速在线| 久久精品99久久久久久久久| 国产精品91在线| 亚洲精品久久久久久久久| 中文一区二区视频| 国产精品久久久久久久久久尿| 伊人久久大香线蕉av一区二区| 日韩视频免费在线| 欧美精品一区三区| 日韩av免费观影| 中文字幕亚洲第一| 性色av一区二区三区在线观看| 欧美国产日韩视频| 精品综合久久久久久97| 在线观看欧美视频| 亚洲精品720p| 精品成人在线视频| 欧美日韩精品在线| 日韩av成人在线| 久久影视电视剧免费网站清宫辞电视| 97在线精品国自产拍中文| 超碰精品一区二区三区乱码| 欧美激情国产精品| 懂色av一区二区三区| 国产剧情日韩欧美| 国产精品久久久久久亚洲调教| 久久久国产精彩视频美女艺术照福利| 亚洲国产精品va在线看黑人| 午夜精品久久久久久久男人的天堂| 亚洲va码欧洲m码| 美女国内精品自产拍在线播放| 亚洲精品一区中文| 欧美激情视频一区二区| 这里只有精品在线播放| 岛国av一区二区三区| 亚洲二区中文字幕| 亚洲一区二区三区xxx视频| 萌白酱国产一区二区| 久久久午夜视频| 国产精品女主播| 精品国产欧美成人夜夜嗨| 欧美激情视频在线观看| 久久精品视频亚洲| 亚洲高清久久久久久| 亚洲free性xxxx护士hd| 亚洲国产欧美一区二区三区同亚洲| 亚洲欧美国产一区二区三区| 久久久久久久999| 九九久久久久久久久激情| 国产精品99久久久久久人| 精品无人区太爽高潮在线播放| 欧美日韩精品在线播放| 亚洲理论片在线观看| 亚洲人精品午夜在线观看| 国产成人精品综合久久久| 日韩av一区二区在线观看| 91网站在线免费观看| 欧洲成人性视频| 在线观看亚洲视频| 国产成人精品视频| 国产精品中文字幕久久久| 91精品国产综合久久久久久蜜臀| 好吊成人免视频| 中文字幕欧美日韩va免费视频| 国产精品久久久久久久久影视| 国产精品电影网| 精品国产乱码久久久久久虫虫漫画| 日韩精品中文字幕在线观看| 国产亚洲视频中文字幕视频| 日韩av网址在线观看| 日本高清久久天堂| 国产99视频精品免视看7| 欧美电影免费观看网站| 日韩在线免费视频| 久久国产精品久久久久久| 亚洲va电影大全| 日韩美女视频免费看|