最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Apache Commons Math3學(xué)習(xí)之?dāng)?shù)值積分實例代碼

 更新時間:2017年10月19日 14:23:47   作者:狐帝  
這篇文章主要介紹了Apache Commons Math3學(xué)習(xí)之?dāng)?shù)值積分實例代碼,涉及使用辛普森積分的例子,這里分享給大家,供需要的朋友參考。

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

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

調(diào)用integrate(...)方法時需要提供4個參數(shù):

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

SimpsonIntegrator在第一次迭代時一定是分別以積分下限和積分上限作為x調(diào)用連詞MyFunction.value(...)方法,下一次則會將區(qū)間分成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());
	}
}
/** 
 * 使用辛普森法求解數(shù)值積分。Apache.Common.Math3中所用的辛普森法是采用逼近法,即先對整個積分區(qū)間用矩形積分,然后將區(qū)間分解為4份,再次積分,比較兩次積分的差值,若想對誤差大于某個預(yù)訂數(shù)值, 
 * 則認(rèn)為還需要繼續(xù)細分區(qū)間,因此會將區(qū)間以2倍再次細分后求積分,并將結(jié)果與前一次積分的結(jié)果比較,直至差值小于指定的誤差,就停止。 
 * @author kingfox 
 * 
 */
class CalcSimpsonIntegrator implements TestCase 
{
	public CalcSimpsonIntegrator() 
	  {
		System.out.print("本算例用于測試使用辛普森法計算積分。正在初始化計算數(shù)據(jù) ... ...");
		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;
	}
	/** 
  * 獲取運行參數(shù) 
  * @return List對象,第一個元素是求積函數(shù),第二個參數(shù)是積分器。 
  */
	@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.的可以正常計算出結(jié)果,但注釋為4.的就無法收斂。

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

總結(jié)

以上就是本文關(guān)于Apache Commons Math3學(xué)習(xí)之?dāng)?shù)值積分實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Java 蒙特卡洛算法求圓周率近似值實例詳解、apache zookeeper使用方法實例詳解等,有什么問題可以隨時留言,小編會及時回復(fù)大家的。這里推薦幾本Java方面的書,供廣大編程愛好及工作者進行閱讀參考,免費的哦!

Java初級開發(fā)工程師面試題匯總.PDF

http://www.fzitv.net/books/576989.html

java JDK1.9 API 中文參考文檔+原版文檔 高清完整版 CHM

http://www.fzitv.net/books/575482.html

希望大家能夠喜歡,希望對本站多多支持!

相關(guān)文章

  • SpringBoot中@EnableAsync和@Async注解的使用小結(jié)

    SpringBoot中@EnableAsync和@Async注解的使用小結(jié)

    在SpringBoot中,可以通過@EnableAsync注解來啟動異步方法調(diào)用的支持,通過@Async注解來標(biāo)識異步方法,讓方法能夠在異步線程中執(zhí)行,本文就來介紹一下,感興趣的可以了解一下
    2023-11-11
  • java輸出1~100之間的全部素數(shù)的5種方式總結(jié)

    java輸出1~100之間的全部素數(shù)的5種方式總結(jié)

    這篇文章主要介紹了java輸出1~100之間的全部素數(shù)的5種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • eclipse/intellij idea 遠程調(diào)試hadoop 2.6.0

    eclipse/intellij idea 遠程調(diào)試hadoop 2.6.0

    這篇文章主要介紹了eclipse/intellij idea 遠程調(diào)試hadoop 2.6.0的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • 詳解Struts2標(biāo)簽遍歷

    詳解Struts2標(biāo)簽遍歷

    這篇文章主要介紹了Struts2標(biāo)簽遍歷,以及相關(guān)的用法示例,需要的朋友可以參考下。
    2017-09-09
  • Struts2中異常處理機制分析

    Struts2中異常處理機制分析

    這篇文章主要介紹了Struts2中異常處理機制分析,涉及到了聲明式異常捕捉的相關(guān)內(nèi)容,以及兩種異常映射的分析,需要的朋友可以參考下。
    2017-09-09
  • 淺談導(dǎo)入JavaWeb 項目出現(xiàn)的問題

    淺談導(dǎo)入JavaWeb 項目出現(xiàn)的問題

    這篇文章主要介紹了導(dǎo)入JavaWeb 項目出現(xiàn)的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java多線程中的Executor詳解

    Java多線程中的Executor詳解

    這篇文章主要介紹了Java多線程中的Executor詳解,該接口提供了一種將任務(wù)提交與如何運行每個任務(wù)的機制(包括線程使用、調(diào)度等細節(jié))解耦的方法,它通常使用預(yù)先創(chuàng)建線程而不是創(chuàng)建線程,需要的朋友可以參考下
    2023-12-12
  • 簡單介紹java中equals以及==的用法

    簡單介紹java中equals以及==的用法

    這篇文章主要介紹了簡單介紹java中equals以及==的用法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Druid之連接創(chuàng)建及銷毀示例詳解

    Druid之連接創(chuàng)建及銷毀示例詳解

    這篇文章主要為大家介紹了Druid之連接創(chuàng)建及銷毀示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Mybatis的介紹、基本使用、高級使用

    Mybatis的介紹、基本使用、高級使用

    這篇文章主要介紹了Mybatis的介紹、基本使用、高級使用,Mybatis是一款半自動的ORM持久層框架,具有較高的SQL靈活性,如何使用看這篇就夠了,需要的朋友可以參考下
    2023-03-03

最新評論

桦甸市| 南昌市| 樟树市| 手游| 连城县| 武安市| 宁武县| 虎林市| 鄱阳县| 庄河市| 宕昌县| 靖远县| 汤原县| 靖西县| 阿拉尔市| 兴文县| 安庆市| 莱西市| 额尔古纳市| 建水县| 海林市| 县级市| 宜兰市| 蒙城县| 澄江县| 平利县| 贞丰县| 大理市| 清水县| 雷波县| 冕宁县| 中山市| 仁怀市| 石棉县| 通江县| 招远市| 姚安县| 汨罗市| 自治县| 湟源县| 蒙阴县|