Ich benutze kein Python, aber wenn ich es richtig verstehe, dann
denken Sie unter
so etwas wie
F = i n t e g r a t e ( y , x ),
wobei F. = [ F 1 , . . . , F n ] ist ein Vektor, der das Integral über ein Gitter x abtastet .
F(r)=∫r0y(x)dx
F=integrate(y,x)
F=[F1,...,Fn]x
Allerdings haben Sie keine Proben von und y , sondern haben Sie Proben von x = log ( x ) und y = log ( y ) .xyx^=log(x)y^=log(y)
Natürlich wäre der einfachste Ansatz
aber dies würde fehleranfällig, weil y ( x ) ist nicht glatt, auch wenn y ( x ) ist.
F=integrate(exp(y^),exp(x^)),
y(x)y^(x^)
Die Trapezregel geht nun im Wesentlichen davon aus, dass Ihre Eingabe stückweise linear ist. So ist die einfache Verallgemeinerung wäre für Sie zu übernehmen y ( x ) stückweise linear.y(x)y^(x^)
In diesem Fall definieren , haben Sie
Δ F k = ∫ x k + 1 x k y ( x ) d x = ∫ x k + 1 x k e y ( x ) e x d x = ∫ x k +ΔFk=Fk+1−Fk
ΔFk=∫xk+1xky(x)dx=∫x^k+1x^key^(x^)ex^dx^=∫x^k+1x^ky~(x^)dx^
Dann definieren , haben Sie
y k + t ≈ y k + t Δ y k
und ~ y ( t ) ≈ a e b t , mit einem = e y k + x k und b = Δt=(x^−x^k)/Δx^k
y^k+t≈y^k+tΔy^k
y~(t)≈aebta=ey^k+x^k.
b=Δy^k+Δx^k
So wird das Integral
ΔFk≈aΔx^∫10ebtdt=aΔx^eb−1b
In Matlab würde das ungefähr so aussehen
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]);
Hoffe das hilft!
y(x)y^(x^)x^F(x^1)=0