java计算积分面积

积分面积函数

积分面积又称为积分函数,是苏联数据家引入的一种特殊积分。具体的介绍请查看积分面积

例如:计算函数为f(x)=ax^2+bx+c在区间[-1,1]上的积分函数.

假设a=1,b=0,c=0的时候,f(x)=x^2为一个经典的开口朝上的抛物线

通过在线计算抛物线的方式计算出是0.6667

示例代码:

java代码如下,复制粘贴就可以使用:

 // 使用辛普森法则估计积分
    public static double simpsonsRule(TriFunction<Double, Double, Double, Double, Double> function, double x1, double x2, int n, double a, double b, double c) {
        if (n % 2 != 0) {
            throw new IllegalArgumentException("Number of subintervals must be even for Simpson's Rule.");
        }

        double h = (x2 - x1) / n;
        double sum = function.apply(x1, a, b, c) + function.apply(x2, a, b, c);

        for (int i = 1; i < n; i++) {
            double x = x1 + i * h;
            sum += (i % 2 == 0) ? 2 * function.apply(x, a, b, c) : 4 * function.apply(x, a, b, c);
        }

        return h * sum / 3.0;
    }

    public static void main(String[] args) {
        TriFunction<Double, Double, Double, Double, Double> function = (x, alpha, beta, ppio) -> alpha * (Math.pow(x, 2)+beta*x+ppio);
        double v = simpsonsRule(function, -1, 1, 200, 1, 0, 0);
        System.out.println(v);
    }

    interface TriFunction<A, B, C, D, R>  {
        R apply(A a, B b, C c, D d);
    }

该方法是使用了“辛普森法则”估计积分的,当n值越大划分的区间越多,值越逼近。


其他积分面积函数实现方式:

1、修改示例代码的TriFunction,修改为函数的入参数类型。

2、修改函数TriFunction的实现方式。

3、修改调用调用入参。

举个例子: 

函数为:f(x)=x^3+ax;

实现方式如下:

 public static double simpsonsRule(TriFunction<Double, Double, Double> function, double x1, double x2, int n, double a) {
        if (n % 2 != 0) {
            throw new IllegalArgumentException("Number of subintervals must be even for Simpson's Rule.");
        }

        double h = (x2 - x1) / n;
        double sum = function.apply(x1, a) + function.apply(x2, a);

        for (int i = 1; i < n; i++) {
            double x = x1 + i * h;
            sum += (i % 2 == 0) ? 2 * function.apply(x, a) : 4 * function.apply(x, a);
        }

        return h * sum / 3.0;
    }

    public static void main(String[] args) {
        TriFunction<Double, Double, Double> function = (x,a) ->  Math.pow(x, 3)+a*x;
        double v = simpsonsRule(function, -1, 1, 200,2);
        System.out.println(v);
    }

    interface TriFunction<A, B, R >  {
        R apply(A a, B b);
    }


区别:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值