Bagaimana Anda meningkatkan akurasi metode beda hingga untuk menemukan sistem eigens dari ODE linear tunggal

11

Saya mencoba memecahkan persamaan tipe:

(2x2f(x))ψ(x)=λψ(x)

Di mana f(x) memiliki kutub sederhana pada 0 , untuk nilai eigen N dan vektor eigen terkecil . Kondisi batas adalah: ψ(0)=0 dan ψ(R)=0 , dan saya hanya melihat fungsi di atas (0,R] .

Namun, jika saya melakukan metode perbedaan hingga yang sangat sederhana dan merata, Nilai eigen terkecil sangat tidak akurat, (kadang-kadang ada nilai eigen "salah" yang beberapa urutan besarnya lebih negatif daripada yang saya tahu seharusnya ada di sana, sebenarnya "nilai eigen pertama" menjadi yang kedua, tetapi masih buruk).

Apa yang memengaruhi keakuratan skema perbedaan hingga? Saya berasumsi bahwa singularitas adalah apa yang menyebabkan masalah, dan bahwa grid dengan jarak yang tidak merata akan memperbaiki keadaan secara signifikan, adakah makalah yang dapat mengarahkan saya ke arah metode perbedaan terbatas yang tidak seragam dan baik? Tapi mungkin skema perbedaan urutan yang lebih tinggi akan lebih memperbaikinya? Bagaimana Anda memutuskan (atau hanya "coba keduanya dan lihat")

catatan: skema beda hingga saya adalah tridiagonal simetris di mana 3 diagonal adalah:

(12Δ2,1Δ2f(x),12Δ2)

Di mana adalah spasi grid. Dan saya memecahkan matriks menggunakan pemecah simetris langsung (saya berasumsi bahwa keakuratan tidak terpengaruh secara drastis oleh pemecah, apakah saya salah?)Δ

Andrew Spott
sumber
Bukankah jangka menengah dari stensil berbeda hingga Anda menjadi ? 1Δ2f(x)
Wolfgang Bangerth

Jawaban:

6

Jika Anda ingin meningkatkan keakuratan skema beda hingga, Anda selalu dapat mencoba meningkatkan derajat stensil Anda. Namun, pada titik yang sama, hal ini dapat menyebabkan ketidakstabilan angka. Untuk menghindari masalah ini dan masih mendapatkan akurasi tinggi, saya akan menyarankan menggunakan Metode Spektral .

Jika masalah Anda memiliki kutub yang diperbaiki, Anda dapat mencoba mengatasinya dengan memisahkan domain Anda dan menyelesaikan dua masalah yang digabungkan.

chebguif(x)

chebguiu(x)u(x)x=λu[1,1]

Menggunakan <code> chebgui </code> untuk menghitung nilai eigen dan eigenmode dari persamaan diferensial orde kedua yang sederhana.

Memperbarui

Jika Anda ingin menyelesaikan masalah ini tanpa masuk terlalu banyak ke Chebfun, semua detail harus ada di Bab 9 buku Nick Trefethen " Metode Spektral di Matlab ".

Pedro
sumber
Saya mengedit posting asli saya untuk memperjelas bahwa saya tidak benar-benar mencari di kutub, hanya sangat dekat dengannya. Terima kasih atas informasinya, saya harus memeriksa chebfun.
Andrew Spott
3
Dipilih tanpa komentar? Tolong, untuk kepentingan semua, dapatkah Anda menunjukkan bagaimana jawaban ini dapat ditingkatkan?
Pedro
0

Salah satu cara untuk dengan cepat membuat segalanya lebih baik (meskipun kemungkinan tidak jauh lebih baik) adalah dengan mempertimbangkan kesamaan antara metode perbedaan hingga pesanan terendah yang Anda gunakan dan metode elemen hingga pesanan terendah. Jika Anda menghitung matriks tri-diagonal yang Anda dapatkan dari menggunakan fungsi bentuk elemen hingga linier dalam 1d, maka diskritisasi turunan kedua akan terlihat sama persis (hingga faktor tetapi Anda akan mendapatkan istilah berbeda untuk apa berasal dari . Saya tidak tahu bagaimana terlihat dalam kasus Anda, tetapi di mana sekarang Anda menggunakan , itu akan menjadi sesuatu seperti manaf ( x ) ψ ( x ) f ( x ) f ( x i ) x i + 1 x i - 1 f ( x ) φ i ( x ) φ i ( x ) i i ( x ) x i f ( x )Δxf(x)ψ(x)f(x)f(xi)xi1xi+1f(x)φi(x)φi(x)adalah fungsi topi yang mencapai puncak pada . Jika cukup sederhana, maka Anda dapat menghitung integral ini dengan tepat, dan itu akan memberikan matriks yang lebih akurat di mana Anda harus menemukan nilai eigen.xif(x)

Tentu saja, jika Anda sudah melakukan elemen hingga, Anda mungkin juga berinvestasi dalam menggunakan elemen tingkat tinggi yang tidak terlalu sulit dalam 1d juga.

Wolfgang Bangerth
sumber