java - 曲线下面积 - 一维数组 (Java)

标签 java math numerical-integration

我有一个简单的问题,在大多数语言(例如 python)中,这个问题都很简单。

我希望从一维固定点数组中获取积分(曲线面积)。 Java 显然有许多数值积分库,所有这些库似乎都需要一个函数 (f {double(x)}) 作为输入。

但是我似乎找不到任何容纳数组(双[])的东西,例如[1,4,10,11]。我将对整个数组进行积分(x 值 1-n,其中 n 代表数组的大小)

非常感谢任何帮助

最佳答案

嗯,他们期望函数,因为连续性地使用它们是正常的。 由于每一步只有不同的高度(1,2,3,4...?),因此您会得到上面有三角形的矩形。三角形的高度是当前高度与先前高度之间的差。因此矩形的高度是当前品脱高度减去三角形高度。 编写一个函数来计算并添加两个面积。 对数组中的每个点/项目执行此操作,您将获得“函数”的积分。

编辑:我写了一些代码。不能保证,我只是编写了一些易于理解的代码来说明这个积分问题的想法。还需要进一步改进。

    public static double getIntegralFromArray(double[] ar, double xDist)
    {
        double base = 0;
        double prev = 0;
        double triHeight = 0;
        double rectHeight = 0;
        double tri = 0;
        double rect = 0;
        double integral = 0;
        for (int i = 0; i < ar.length; i++) {
            triHeight=Math.abs(ar[i]-prev); // get Height Triangle
            tri = xDist*triHeight/2;    // get Area Triangle
            if(ar[i]<=prev){
                rectHeight = Math.abs(base-ar[i]); // get Height Rectangle
            }else {
                rectHeight = Math.abs(base-(ar[i]-triHeight)); // get Height Rectangle
            }
            rect = xDist*rectHeight;    // get Area Rectangle
            integral += (rect + tri); // add Whole Area to Integral
            prev=ar[i];
        }
        return integral;
    }

    double[] ar = new double[]{1,2,3,2,2,3,1,3,0,3,3};
    System.out.println(MyMath.getIntegralFromArray(ar, 1));

    Area under 'curve': 21.5

关于java - 曲线下面积 - 一维数组 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38502306/

相关文章:

java - postgresql 中的 IN 子句可以使用多少个参数?

math - LaTeX 中的年金或角度运算符号

algorithm - 人们可以在圆 table 上坐下多少种不同的可能方式?

c - C中的梯形规则,错误答案

matlab - 如何克服数值积分中的奇点(在 Matlab 或 Mathematica 中)

python 对二维数组求和以获得一维数组

java - 使用 Tomcat : Providing multiple projects' dependencies? 部署 Eclipse Web 应用程序

java - Hadoop:客户端可以使用配置类设置的所有设置列表?

java - REST WebService 动态提供图像?

java - 有没有更快的方法根据值排列数字?