当前位置: 首页 > article >正文

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);
    }


区别:


http://www.kler.cn/a/147300.html

相关文章:

  • Unity 2022 Nav Mesh 自动寻路入门
  • 大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 了 拦截器实现 Java
  • ChromeDriver 官方下载地址_测试自动化浏览器驱动
  • 【windows笔记】08-Windows中的各种快捷方式、符号链接、目录联接、硬链接的区别和使用方法
  • AndroidStudio-Activity的生命周期
  • Qt / Qt Quick程序打包的一些坑 (四)
  • 优化生产制造业流程,提升生产效率,选择ERP管理系统!
  • 单片机学习10——独立按键
  • 推荐6款本周 yyds 的开源项目
  • 国内外的ERP系统存在显著的差异,差在哪?
  • 【数据结构】二叉树之链式结构
  • 希尔伯特和包络变换
  • Redis使用increment方法返回null的原因以及解决方案
  • Django整合回顾
  • Redis面试内容,Redis过期策略,Redis持久化方式,缓存穿透、缓存击穿和缓存雪崩,以及解决办法
  • 网络运维与网络安全 学习笔记2023.11.27
  • 【C++ Primer Plus学习记录】for循环与while循环
  • 基于阻塞队列的生产者消费者模型
  • C语言:选择法对十个整数排序
  • 爬取极简壁纸
  • css实现鼠标移入背景图片变灰并浮现文字的效果
  • linux 命令 sudo、su 命令
  • 小H喜欢睡觉(C语言实现)
  • 多传感器融合SLAM调研
  • 前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件
  • C#——多线程之异步调用容易出现的问题