[英]How can I find the area above the curve
我有一個關於尋找矩形S2
(曲線上方)的區域的問題。 我想找到像(S - S2)/(S2)
S1/S2
,其中S = S1 + S2
。
我有兩個double
(x; y)的vectors
,我可以找到S1 + S2
:
S = (x.back() - x[0])*(y.back() - y[0])
)
然后,我想使用數值積分來找到S2
下的整個區域,然后從S2
減去z
:
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;
}
不確定,但我認為您需要進一步回到集成的首要原則...您看起來想要做的就是找到圖形下的區域...要做的是,您需要將其視為切片[積分是將這一概念帶到增量接近0的地步]
因此,將面積計算為每個數據點之間頂部帶有三角形的小矩形或更好的矩形...
即
for(loop over data)
{
area += (data[1] + data[0]) * time/distance between data[1] and data[0]
}
一旦有了,就從y_end *(x_end-x1)中減去
您可以使用數值積分為數據提供值-但可以通過測量數據或進行其他操作來生成數據外觀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.