Saya tidak menggunakan python, tetapi jika saya mengerti dengan benar maka oleh
Anda sedang memikirkan sesuatu seperti
mana adalah pengambilan sampel vektor integral di atas kisi .F = i n t e g r a t e ( y , x ) F = [ F 1 , . . . , F n ] x
F(r)=∫r0y(x)dx
F=integrate(y,x)
F=[F1,...,Fn]x
Namun Anda tidak memiliki sampel dan , tetapi Anda memiliki sampel dan .y x = log ( x ) y = log ( y )xyx^=log(x)y^=log(y)
Tentu saja pendekatan yang paling sederhana adalah
tetapi ini akan rawan kesalahan, karena tidak mulus, meskipun adalah.y ( x ) y ( x )
F=integrate(exp(y^),exp(x^)),
y(x)y^(x^)
Sekarang aturan trapesium pada dasarnya mengasumsikan input Anda linier. Jadi generalisasi sederhana adalah bagi Anda untuk berasumsi bahwa adalah linear yang sama.y ( x )y(x)y^(x^)
Dalam kasus ini, mendefinisikan , Anda memiliki
Δ 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^
Kemudian, dengan mendefinisikan , Anda memiliki
dan , dengan dan .y k + t ≈ y k + t Δ y k ~ y ( t ) ≈ a e b t a = 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
Jadi integral menjadi
ΔFk≈aΔx^∫10ebtdt=aΔx^eb−1b
Di Matlab ini akan terlihat seperti
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]);
Semoga ini membantu!
(Sunting: Jawaban saya pada dasarnya sama dengan jawaban yang jauh lebih ringkas yang diberikan oleh Damaskus Steel saat saya mengetik. Satu-satunya perbedaan adalah saya berusaha memberikan solusi khusus untuk kasus di mana "khususnya " adalah bagian yang sama -linear didiskritkan ke atas diskrit mesh, dengan )y(x)y^(x^)x^F(x^1)=0