基于Java实现欧拉积分法

一、欧拉积分法

欧拉积分法是数值积分方法中精度最低,但也是最容易变成实现的一种方法,其可以写成如下表达式:y(t_{n-1})=\int_0^{t_{n-1}} y^{\prime}(t)dt其微分方程可定义如下:y^{\prime}(t)=f(t,y(t))\Delta t = t_{n-1} - t_n 时,则欧拉积分定义为:y_{n+1}=y_n+\Delta t ·f(t_n,y_n) 假设\Delta ty^{\prime}(t)的值保持不变,即y(t)的斜率k为f(t_n,y_n),因此欧拉积分又称为一阶近似\Delta t有称为积分步长或采样周期

二、Java实现欧拉积分法
/**
* 二元组
* @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  函数自变量下确界
* @param x1  函数自变量上确界
* @param fx  原函数
* @param dFx  导函数
* @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<>();
    // 迭代次数
    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;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、欧拉积分法 欧拉积分法是数值积分方法中精度最低,但也是最容易变成实现的一种方法,其可以写成如下表达式: 其微分...
    霖娜阅读 682评论 0 2
  • Integration Basics How to integrate the equations of moti...
    FerryLin阅读 2,089评论 0 2
  • [深入浅出多旋翼飞控开发][姿态篇][一][初识姿态估计] 作者:王伟韵QQ : 352707983Github ...
    梦萦蓝天阅读 23,768评论 0 12
  • 数值积分法是求定积分的近似值的数值方法。即用被积函数的有限个采样值的离散或加权平均近似值代替定积分的值,是一种递推...
    TonnyYan阅读 3,114评论 0 0
  • 学习高数的时间有点久了,很多概念都生疏了,所以花了一天时间重新翻了一遍高等数学,就写一篇文档总结一下微积分中的关键...
    硬件工程师技术号阅读 2,623评论 0 9

友情链接更多精彩内容