Nie używam pytona, ale jeśli dobrze rozumiem, to przez
F(r)=∫r0y(x)dx
myślisz coś takiego
F=integrate(y,x)
gdzie
F=[F1,...,Fn] jest wektorem próbkującym całkę na siatce
x.
Jednak nie masz próbek x i y, ale raczej masz próbki x^=log(x) i y^=log(y).
Oczywiście najprostsze podejście byłoby
F=integrate(exp(y^),exp(x^)),
ale byłoby to podatne na błędy, ponieważ
y(x) mimo to nie jest gładka
y^(x^) jest.
Teraz reguła trapezoidalna zasadniczo zakłada twój wkłady(x)jest fragmentarycznie liniowy. Zatem proste uogólnienie byłoby takie założeniey^(x^) jest fragmentarycznie liniowy.
W tym przypadku definiowanie ΔFk=Fk+1−Fk, ty masz
ΔFk=∫xk+1xky(x)dx=∫x^k+1x^key^(x^)ex^dx^=∫x^k+1x^ky~(x^)dx^
Następnie definiowanie t=(x^−x^k)/Δx^k, ty masz
y^k+t≈y^k+tΔy^k
i
y~(t)≈aebt, z
a=ey^k+x^k i
b=Δy^k+Δx^k.
Tak więc całka staje się
ΔFk≈aΔx^∫10ebtdt=aΔx^eb−1b
W Matlabie wyglądałoby to mniej więcej tak
dlogx=diff(logx); dlogy=diff(logy); k=1:length(logx)-1;
b=dlogx+dlogy; a=exp(logx+logy);
dF=a(k).*dlogx.*(exp(b)-1)./b;
F=cumsum([0,dF]);
Mam nadzieję że to pomoże!
(Edycja: Moja odpowiedź jest zasadniczo taka sama, jak o wiele bardziej zwięzła odpowiedź, którą Damascus Steel podał podczas pisania. Jedyna różnica polega na tym, że próbowałem podać konkretne rozwiązanie dla przypadku, w którym „ y(x)„jest fragmentarycznie liniowy y^(x^) dyskretnie dyskretnie x^ siatka, z F(x^1)=0.)