Je n'utilise pas python, mais si je comprends bien, alors par
vous pensez quelque chose comme
F = i n t e g r a t e ( y , x )
où F = [ F 1 , . . . , F n ] est un vecteur échantillonnant l'intégrale sur une grille x .
F( r ) = ∫r0y( x ) dX
F = i n t e g r a t e ( y , x )
F =[ F1, . . . , Fn]X
Cependant , vous n'avez pas des échantillons de et y , mais vous avez des échantillons de x = log ( x ) et y = log ( y ) .xyx^=log(x)y^=log(y)
Bien sûr , l'approche la plus simple serait
mais ce serait sujette à l' erreur, car y ( x ) n'est pas lisse, même si y ( x ) est.
F=integrate(exp(y^),exp(x^)),
y(x)y^(x^)
Maintenant, la règle trapézoïdale suppose essentiellement que votre entrée est linéaire par morceaux. Ainsi , la simple généralisation serait pour vous de supposer que y ( x ) est linéaire par morceaux.y(x)y^(x^)
Dans ce cas, la définition , il faut
Δ 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^
t=(x^−x^k)/Δx^k
y^k+t≈y^k+tΔy^k
y~(t)≈aebta=ey^k+x^kb=Δy^k+Δx^k
ΔFk≈aΔx^∫10ebtdt=aΔx^eb−1b
Dans Matlab, cela ressemblerait à quelque chose comme
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]);
J'espère que cela t'aides!
y(x)y^(x^)x^F(x^1)=0