No uso Python, pero si entiendo correctamente, entonces por
estás pensando en algo como
donde es un vector que muestrea la integral sobre una cuadrícula .F = i n t e g r un t e ( y , x ) F = [ F 1 , . . . , F n ] x
F(r)=∫r0y(x)dx
F=integrate(y,x)
F=[F1,...,Fn]x
Sin embargo, no tiene muestras de e , sino que tiene muestras de y .y x = log ( x ) y = log ( Y )xyx^=log(x)y^=log(y)
Por supuesto, el enfoque más simple sería
pero esto sería propenso a errores, porque no es uniforme, aunque es.y ( x ) y ( x )
F=integrate(exp(y^),exp(x^)),
y(x)y^(x^)
Ahora la regla trapezoidal esencialmente supone que su entrada es lineal por partes. Entonces, la generalización simple sería asumir que es lineal por partes.y ( x )y(x)y^(x^)
En este caso, al definir , tiene
Δ 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 + 1 x kΔFk=Fk+1−Fk
ΔFk=∫xk+1xky(x)dx=∫x^k+1x^key^(x^)ex^dx^=∫x^k+1x^ky~(x^)dx^
Luego, definiendo , tiene
y , con y .y k + t ≈ y k + t Δ y k ~ y ( t ) ≈ un e b t un = e y k + x k b = Δ y k + Δ x kt=(x^−x^k)/Δx^k
y^k+t≈y^k+tΔy^k
y~(t)≈aebta=ey^k+x^kb=Δy^k+Δx^k
Entonces la integral se convierte en
ΔFk≈aΔx^∫10ebtdt=aΔx^eb−1b
En Matlab esto se vería algo así
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]);
¡Espero que esto ayude!
(Editar: Mi respuesta es esencialmente la misma que la respuesta mucho más concisa que Damascus Steel dio mientras escribía. La única diferencia es que intenté dar una solución particular para el caso donde la " es un poco -linear discretizado sobre una malla discreta , con )y(x)y^(x^)x^F(x^1)=0