Как я могу найти область над кривой

У меня есть вопрос о поиске площади прямоугольника S2 (над кривой). я хочу найти S1/S2 лайк (S - S2)/(S2), где S = S1 + S2,

у меня есть 2 vectors из double (х; у) и я могу найти S1 + S2:

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

Тогда я хочу использовать числовую интеграцию, чтобы найти всю область под Cruve 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;
}

пример

0

Решение

Не уверен, но я думаю, что вам нужно сделать еще один шаг назад к первым принципам интеграции … то, что вы пытаетесь сделать, это найти область под графиком … чтобы сделать это, вам нужно обращаться с ней как срезами [ интеграция — это понятие, взятое до такой степени, что дельта приближается к 0]

Поэтому вычислите площадь как маленькие прямоугольники или лучше прямоугольники с треугольниками сверху между каждой точкой данных …

то есть

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

Как только у вас это получится, вычтите его из y_end * (x_end — x1)

Вы бы использовали численную интеграцию, чтобы дать вам значения данных — но купите их внешний вид, либо измеряя их, либо делая что-то еще для их генерации.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector