Non uso Python, ma se capisco correttamente allora con
stai pensando a qualcosa come
F = i n t e g r a t e ( y , x )
dove F = [ F 1 , . . . , F n ] è un vettore che campiona l'integrale su una griglia x .
F(r)=∫r0y(x)dx
F=integrate(y,x)
F=[F1,...,Fn]x
Tuttavia non si dispone di campioni di ed y , ma piuttosto si deve campioni di x = log ( x ) e y = log ( y ) .xyx^=log(x)y^=log(y)
Naturalmente la soluzione più semplice sarebbe
ma questa sarebbe soggetto ad errori, perché y ( x ) non è liscia, anche se y ( x ) è.
F=integrate(exp(y^),exp(x^)),
y(x)y^(x^)
Ora la regola trapezoidale presuppone essenzialmente che il tuo input sia lineare a tratti. Così la semplice generalizzazione sarebbe per voi assumere che y ( x ) è lineare a tratti.y(x)y^(x^)
In questo caso, definendo , si ha
Δ 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^
Poi, definendo , si ha
y k + t ≈ y k + t Δ y k
e ~ y ( t ) ≈ una e b t , con un = e y k + x k e 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
Quindi l'integrale diventa
ΔFk≈aΔx^∫10ebtdt=aΔx^eb−1b
In Matlab questo sarebbe simile
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]);
Spero che sia di aiuto!
y(x)y^(x^)x^F(x^1)=0