一、歐拉積分法
歐拉積分法是數(shù)值積分方法中精度最低貌夕,但也是最容易變成實現(xiàn)的一種方法律歼,其可以寫成如下表達(dá)式:其微分方程可定義如下:
當(dāng)
時,則歐拉積分定義為:
假設(shè)
內(nèi)
的值保持不變蜂嗽,即
,因此歐拉積分又稱為一階近似苗膝,
有稱為積分步長或采樣周期。
二植旧、Java實現(xiàn)歐拉積分法
/**
* 二元組
* @param <X>
* @param <Y>
*/
public class Tuple<X, Y> {
public final X xValue;
public final Y yValue;
public Tuple(X x, Y y){
xValue = x;
yValue = y;
}
public String toString(){
return "(" + xValue + ", " + yValue + ")";
}
}
/**
* 歐拉積分法
* @param x0 函數(shù)自變量下確界
* @param x1 函數(shù)自變量上確界
* @param fx 原函數(shù)
* @param dFx 導(dǎo)函數(shù)
* @param step 約等于△x
*/
public List<Tuple<Double, Double>> integral(double x0, double x1, Function<Double, Double> fx, Function<Double, Double> dFx, double step) {
List<Tuple<Double, Double>> result = new LinkedList<>();
// 迭代次數(shù)
double iterations = Math.floor((x1-x0)/step);
double fx0 = fx.apply(x0);
result.add(new Tuple<Double, Double>(x0, fx0));
double xResult = 0;
double yResult = 0;
int index = 1;
while(index<iterations-1) {
int indexM1 = index - 1;
Tuple<Double, Double> tuple = result.get(indexM1);
xResult = tuple.xValue + step;
double xa = tuple.xValue;
double ya = tuple.yValue;
double slope = dFx.apply(xa);
// 歐拉積分定義
yResult = ya + step * slope;
result.add(new Tuple<Double, Double>(xResult, yResult));
index += 1;
}
return result;
}