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 st
Tapi saya berharap untuk menggunakan nilai-nilai dan , bukan dan (bila mungkin).l o g ( x ) y x
numerics
integration
DilithiumMatrix
sumber
sumber
Jawaban:
Anda bisa mengubah variabel. Pengaturan , . Integral menjadib ( a ) = l o g ( y ( x ) )a=log(x) b(a)=log(y(x))
Anda harus sedikit berhati-hati karena Anda mengintegrasikan dari . Apa yang harus Anda lakukan persis tergantung pada seperti apa .y ( x )−∞ y(x)
sumber
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
Namun Anda tidak memiliki sampel dan , tetapi Anda memiliki sampel dan .y x = log ( x ) y = log ( y )x y x^=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 )
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
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
Jadi integral menjadi
Di Matlab ini akan terlihat seperti
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
sumber
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=Cixni i ni=ln(yi/yi+1)/ln(xi/xi+1) Ci=ln(yi)−niln(xi) i
sumber
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:log(y1)=m1log(x1)+n1
log(y2)=m1log(x1)+n1
di mana adalah kemiringan garis dan adalah y-intersepnya.m1 n1
Dengan mengurangi keduanya, orang dapat menemukan:
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:
Jika kami memiliki formulasi analitis untuk segmen ini, mudah untuk mengintegrasikan:
dan∫x2x1y(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.
sumber
log([x_2/x_1]^{m_1+1} + 1)
, yaitu ada +1 tambahan dalam argumen logSolusi yang saya gunakan pada dasarnya adalah implementasi dari aturan trapezium dan memanfaatkan
scipy.misc.logsumexp
fungsi untuk menjaga presisi. Jika Anda memiliki beberapa fungsilny
yang mengembalikan logaritmay
maka Anda dapat melakukannya, misalnya:Nilainya
logI
adalah 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 poinxvs
untuk menemukan angka di mana integral bertemu.sumber