曲线下面积-1D数组(Java)

曲线下面积-1D数组(Java),java,math,numerical-integration,Java,Math,Numerical Integration,我有一个简单的问题,在大多数语言(比如python)中,这是很简单的 我希望从一维固定点数组中获得积分(曲线面积)。Java显然有许多数值积分库,所有这些库似乎都需要一个函数(f{double(x)})作为输入 但是,我似乎找不到任何可以容纳数组(double[]),例如[1,4,10,11]。我将对整个数组进行积分(x值1-n,其中n表示数组的大小) 非常感谢您的任何帮助好吧,他们需要函数,因为连续使用函数是正常的。 因为每一步只有不同的高度(1,2,3,4…?),所以在上面有三角形的矩形。三

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

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

但是,我似乎找不到任何可以容纳数组(double[]),例如[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
public静态双getIntegrationFromArray(double[]ar,double xDist)
{
双基=0;
双上一个=0;
双倍高度=0;
双矩形高度=0;
双tri=0;
双矩形=0;
二重积分=0;
for(int i=0;i
公共静态双通道(双ar[],双xDist){
如果(ar.length==1 | | ar.length==0)
返回0;
二重积分=0;
双上一个=应收账款[0];

对于(inti=1;iIt对于您自己来说并不难实现…同意,但是我更愿意利用优化的库,基于调用此函数的代码的性质,“您将获得函数的积分”-好的,一个积分的近似值…好的,我很感谢为解决这个问题所做的努力。虽然这个问题的目的是想弄清楚为什么没有Java库包含来自数组的有限积分,但我会接受这个答案,直到有人能指出一个类似()的优化版本。谢谢
public static double trapz(double ar[],double xDist){
        if (ar.length==1 || ar.length==0)
            return 0;
        double integral=0;
        double prev=ar[0];
        for (int i=1;i<ar.length;i++)
        {
            integral+=xDist*(prev+ar[i])/2.0;
            prev=ar[i];
        }
        return integral;
    }