曲线下面积 - 一维数组 (Java)
Area Under Curve - 1D Array (Java)
我有一个简单的问题,在大多数语言中(例如 python)会很简单。
我希望从固定点的一维数组中获得积分(曲线面积)。 Java 显然有很多数值积分库,所有这些库似乎都需要一个函数 (f {double(x)}) 作为输入。
但是我似乎找不到任何容纳数组(双[])的东西,例如[1,4,10,11]。我将对整个数组进行积分(x 值 1-n,其中 n 表示数组的大小)
非常感谢任何帮助
嗯,他们期待功能,因为连续使用它们是正常的。
因为你每一步只有不同的高度(1,2,3,4......?)你有矩形,上面有三角形。三角形的高度是当前高度与先前高度之间的差值。因此矩形的高度是当前 pint 高度减去三角形高度。
编写一个函数来计算和添加两个区域。
对数组中的每个 point/item 执行此操作,您将获得 "function".
的积分
编辑:我写了一些代码。不能保证,我只是编写了一些易于理解的代码来说明这个积分概率的想法。必须做进一步的改进。
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
通过使用 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;
}
我有一个简单的问题,在大多数语言中(例如 python)会很简单。
我希望从固定点的一维数组中获得积分(曲线面积)。 Java 显然有很多数值积分库,所有这些库似乎都需要一个函数 (f {double(x)}) 作为输入。
但是我似乎找不到任何容纳数组(双[])的东西,例如[1,4,10,11]。我将对整个数组进行积分(x 值 1-n,其中 n 表示数组的大小)
非常感谢任何帮助
嗯,他们期待功能,因为连续使用它们是正常的。 因为你每一步只有不同的高度(1,2,3,4......?)你有矩形,上面有三角形。三角形的高度是当前高度与先前高度之间的差值。因此矩形的高度是当前 pint 高度减去三角形高度。 编写一个函数来计算和添加两个区域。 对数组中的每个 point/item 执行此操作,您将获得 "function".
的积分编辑:我写了一些代码。不能保证,我只是编写了一些易于理解的代码来说明这个积分概率的想法。必须做进一步的改进。
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
通过使用 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;
}