有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

曲线1D数组下的数学区域(Java)

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

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

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

非常感谢您的帮助


共 (2) 个答案

  1. # 1 楼答案

    他们希望函数是连续的,这很正常。 因为你每一步的高度都不一样(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
    
  2. # 2 楼答案

    通过使用trapezoidal rule你可以简单地调用下面的方法来获得图形下的面积(大约)

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