如何找到曲线上方的区域

时间:2018-03-07 12:04:55

标签: c++ matlab curve numerical-integration

我有一个关于找到矩形S2区域(曲线上方)的问题。我希望找到S1/S2 (S - S2)/(S2),其中S = S1 + S2

我有2 vectors double(x; y),我可以找到S1 + S2

S = (x.back() - x[0])*(y.back() - y[0])

然后我想使用数值积分来查找cru S2下的整个区域,然后从z中扣除S2

z = (x.back() - x[0])*(y[0] - 0)S2 = S2 - z

我的问题是:如果我没有函数,如何使用数值积分,但有(x; y)。例如,在matlab中,feval

看起来像这样
% Total area under the curve
ft = fittype('smoothingspline');
cf = fit(x,y,ft);
F = @(x) feval(cf,x);
S2 = quad(F,x(1),x(end));

在C ++中我有:

#include "Functions.h"
std::vector<double>AreaRatio(std::vector<double>&x, std::vector<double>&y) {

double S(0.0), z(0.0), S2(0.), R(0.0);

S = (x.back() - x[0])*(y.back() - y[0]);
z = (x.back()*x[0])*(y[0]-0);
S2 = /.../ 
// Numerical methods (any library) to find the area under the curve, 
// but I don't know how to transfer function into function of Numerical integration, 
// because I have only coordinates. 
R = (S - S2) / S2;
return R;
}

Example

1 个答案:

答案 0 :(得分:1)

不确定,但我认为你需要更进一步回到整合的第一原则......你想要做的就是找到图下的区域...要做到这一点,你需要对待它作为切片[整合是这个概念采取到delta接近0的点]

因此,将区域计算为小矩形或更好的矩形,每个数据点之间有三角形...

即。

    for(loop over data)
    {
        area += (data[1] + data[0]) * time/distance between data[1] and data[0]
    }

一旦你从y_end *(x_end - x1)

中减去它

您使用数字积分为您提供数据的价值 - 但要购买它的外观,或者测量它们或者做其他事情来生成数据。