Integral dalam ruang log-log

10

Saya bekerja dengan fungsi yang, secara umum, jauh lebih halus dan berperilaku lebih baik di ruang log-log --- jadi di situlah saya melakukan interpolasi / ekstrapolasi, dll, dan itu bekerja dengan sangat baik. Apakah ada cara untuk mengintegrasikan fungsi numerik ini dalam ruang log-log?

yaitu saya berharap untuk menggunakan semacam aturan trapesium sederhana untuk melakukan integral kumulatif (misalnya dalam python, gunakan scipy.integrate.cumtrapz), untuk menemukan beberapa stF(r)

F(r)=0ry(x)dx

Tapi saya berharap untuk menggunakan nilai-nilai dan , bukan dan (bila mungkin).l o g ( x ) y xlog(y)log(x)yx

DilithiumMatrix
sumber
Saya menemukan tautan ini ( my.originlab.com/forum/topic.asp?TOPIC_ID=1251 ) yang tampaknya mengarah dengan cara yang sama seperti yang biasa saya lakukan: menghitung kemiringan dan memotong di ruang log-log. Kemudian konversi ke ruang lin-lin, mengintegrasikan, dan mengevaluasi.
MrMas

Jawaban:

6

Anda bisa mengubah variabel. Pengaturan , . Integral menjadib ( a ) = l o g ( y ( x ) )a=log(x)b(a)=log(y(x))

F(r)=log(r)exp(a+b)da

Anda harus sedikit berhati-hati karena Anda mengintegrasikan dari . Apa yang harus Anda lakukan persis tergantung pada seperti apa .y ( x )y(x)

Baja Damaskus
sumber
Terimakasih atas tanggapan Anda! Tapi saya pikir ini efektif hanya melakukan integral dalam ruang linear. Mungkin saya meminta sesuatu yang mustahil ...
DilithiumMatrix
2
Tidak, ini tidak terpisahkan dalam ruang log. Ketika diskritisasi, berukuran sama dalam ruang log, bukan ruang linier. da
Damascus Steel
1
@DilithiumMatrix benar: Diskritisasi nilai berada dalam ruang log, tetapi interpolasi nilai terjadi di ruang linear. Jadi, jika Anda menggunakan aturan trapesium, fungsi yang diintegrasikan secara efektif adalah linear sebagian dalam plot dengan sumbu x logaritmik dan sumbu y linier. yxy
burnpanck
3

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)=0ry(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+1Fk

ΔFk=xkxk+1y(x)dx=x^kx^k+1ey^(x^)ex^dx^=x^kx^k+1y~(x^)dx^

Kemudian, dengan mendefinisikan , Anda memiliki dan , dengan dan .y k + ty 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+ty^k+tΔy^k
y~(t)aebta=ey^k+x^kb=Δy^k+Δx^k

Jadi integral menjadi

ΔFkaΔx^01ebtdt=aΔx^eb1b

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

GeoMatt22
sumber
Terima kasih atas respons Anda (sangat jelas), tetapi seperti yang baru saja saya katakan dalam menanggapi @DamascusSteel --- Saya pikir ini hanya mengembalikan integral ke ruang linear-linear, dan kehilangan manfaat ruang log.
DilithiumMatrix
1
@DilithiumMatrix: Ini bukan jawaban yang sama dengan yang oleh DamascusSteel. Perhatikan bahwa menerapkan aturan trapesium pada jawaban DamascusSteel tidak akan memberikan faktor . exp(b)1b
burnpanck
3

Jika fungsinya terlihat mulus di plot log-log, Anda dapat melakukan interpolasi menggunakan hukum daya pada setiap interval (hukum daya, tentu saja, linear dalam log-log). Dengan demikian, antara titik dan dengan asumsi bahwa dalam interval , Anda memperoleh dan . Kontribusi pada integral dari interval adalah (xi,yi)(xi+1,yi+1)y=Cixniini=ln(yi/yi+1)/ln(xi/xi+1)Ci=ln(yi)niln(xi)i

ΔFi=xixi+1Cixnidx={Cini+1(xi+1ni+1xini+1),ni1Ci(lnxi+1lnxi),ni=1,
di mana Anda jelas membutuhkan toleransi untuk mengidentifikasi kasus khusus dalam implementasi Anda.ni=1
Stefan B. Lindström
sumber
3

Saya pikir ada sedikit kebingungan dengan perubahan variabel pada beberapa jawaban sebelumnya dan juga beberapa kesalahan. Integral dari fungsi log bukanlah log integral. Saya pikir secara umum sulit untuk menulis integral fungsi mengetahui integral log-nya. Jika ada yang tahu bagaimana melakukan itu, saya akan tertarik.

Sementara itu, solusi @ Stefan di atas adalah cara untuk mengintegrasikan fungsi dalam ruang log-log. Titik awalnya adalah bahwa fungsi yang Anda hadapi adalah linier dalam ruang log-log untuk segmen yang cukup kecil.

Orang kemudian dapat menulis persamaan garis di titik akhir segmen: masukkan deskripsi gambar di sini

log(y1)=m1log(x1)+n1
log(y2)=m1log(x1)+n1

di mana adalah kemiringan garis dan adalah y-intersepnya.m1n1

Dengan mengurangi keduanya, orang dapat menemukan:

m1=log(y1)log(y2)log(x1)log(x2)

dan dari substitusi:

n1=log(y1)m1log(x1)

Jika dalam ruang log-log persamaan segmen dekat dengan garis maka dalam ruang normal (linear) persamaan segmen dekat dengan eksponensial:

y(x)xmen

Jika kami memiliki formulasi analitis untuk segmen ini, mudah untuk mengintegrasikan:

x1x2y(x)dx=en1m1+1(x2m1+1x1m1+1),for m1

dan

x1x2y(x)dx=en1logx2x1,for m=1

Ini terasa agak seperti curang, tetapi ini mengambil sampel dalam ruang log-log sehingga kami dapat memperkirakan fungsi dalam ruang linear menjadi eksponensial dengan parameter yang berasal dari ruang log-log.

Elena Pascal
sumber
Ini @elenapascal luar biasa, ini telah mengganggu saya selama lebih dari 3 tahun sekarang, dan saya pikir ini (atau sangat dekat dengan) solusinya. Saya tidak cukup mengikuti hubungan terakhir Anda, saya tidak berpikir integral atas y sama dengan log (x2 / x1)
DilithiumMatrix
Secara khusus, jika saya mengambil log integral di sisi kiri, maka saya mendapatkan istilah yang mirip dengan sisi kanan, tetapi dengan log([x_2/x_1]^{m_1+1} + 1), yaitu ada +1 tambahan dalam argumen log
DilithiumMatrix
Itu sangat mengganggu saya hari ini, hanya setelah saya menulisnya saya menyadari @Stefan telah memposting jawaban yang sama. Untuk m = -1, Anda tinggal menggantinya dalam definisi y: y (x) = e ^ n / x. Itu memberi log. Saya tidak yakin saya mengikuti posting kedua Anda
Elena Pascal
Saya baru menyadari hal yang sama, tetapi saya belum sepenuhnya mengerti sampai saya membaca penjelasan Anda
DilithiumMatrix
1

Solusi yang saya gunakan pada dasarnya adalah implementasi dari aturan trapezium dan memanfaatkan scipy.misc.logsumexpfungsi untuk menjaga presisi. Jika Anda memiliki beberapa fungsi lnyyang mengembalikan logaritma ymaka Anda dapat melakukannya, misalnya:

dari scipy.misc import logsumexp
impor numpy sebagai np

xmin = 1e-15
xmax = 1e-5

# dapatkan nilai x spasi secara logaritma
xvs = np.logspace (np.log10 (xmin), np.log10 (xmax), 10000)

# mengevaluasi fungsi Anda di xvs
lys = lny (xvs)

# melakukan integrasi aturan trapezium
deltas = np.log (np.diff (xvs))
logI = -np.log (2.) + logsumexp ([logsumexp (lys [: - 1] + delta), logsumexp (lys [1:] + delta)])

Nilainya logIadalah log integral yang Anda inginkan.

Jelas ini tidak akan berfungsi jika Anda perlu mengatur xmin = 0. Tetapi, jika Anda memiliki batas bawah positif nol untuk integral Anda cukup bermain-main dengan jumlah poin xvsuntuk menemukan angka di mana integral bertemu.

Matt Pitkin
sumber