Saya mencoba untuk memecahkan persamaan adveksi tetapi memiliki osilasi aneh muncul dalam solusi ketika gelombang memantul dari batas-batas. Jika ada yang pernah melihat artefak ini sebelumnya saya akan tertarik untuk mengetahui penyebabnya dan bagaimana cara menghindarinya!
Ini adalah gif animasi, buka di jendela terpisah untuk melihat animasi (itu hanya akan diputar sekali atau tidak sekaligus itu sudah di-cache!)
Perhatikan bahwa propagasi tampak sangat stabil hingga gelombang mulai memantul dari batas pertama. Menurut Anda apa yang mungkin terjadi di sini? Saya telah menghabiskan beberapa hari mengecek kode saya dan tidak dapat menemukan kesalahan. Ini aneh karena tampaknya ada dua solusi yang menyebar: satu positif dan satu negatif; setelah refleksi dari batas pertama. Solusi tampaknya berjalan di sepanjang titik jala yang berdekatan.
Detail implementasi mengikuti.
Persamaan advection,
di mana adalah kecepatan rambat.
Crank-Nicolson adalah diskritisasi stabil tanpa syarat (pdf link) untuk persamaan adveksi asalkan perlahan bervariasi dalam ruang (hanya berisi komponen frekuensi rendah ketika Fourier ditransformasikan).
Diskritisasi yang telah saya terapkan adalah,
Menempatkan yang tidak diketahui di sisi kanan memungkinkan ini ditulis dalam bentuk linear,
di mana (untuk mengambil rata-rata waktu tertimbang secara merata antara titik sekarang dan masa depan) dan .r = v Δ t
Set persamaan ini memiliki bentuk matriks , di mana,
Vektor dan adalah yang diketahui dan tidak diketahui dari kuantitas yang ingin kita pecahkan.u n + 1
Saya kemudian menerapkan kondisi batas Neumann tertutup di batas kiri dan kanan. Dengan batas yang tertutup maksud saya pada kedua antarmuka. Untuk batas tertutup ternyata (saya tidak akan menunjukkan kerja saya di sini) kita hanya perlu menyelesaikan persamaan matriks di atas. Seperti yang ditunjukkan oleh @DavidKetcheson, persamaan matriks di atas sebenarnya menggambarkan kondisi batas Dirichlet . Untuk kondisi batas Neumann,
Memperbarui
Perilaku ini tampaknya cukup independen dari pilihan konstanta yang saya gunakan, tetapi ini adalah nilai-nilai untuk plot yang Anda lihat di atas:
- = 2
- dx = 0,2
- dt = 0,005
- = 2 (Gaussian hwhm)
- = 0,5
Pembaruan II
Sebuah simulasi dengan koefisien difusi nol, (lihat komentar di bawah), osilasi hilang, tetapi gelombang tidak lagi mencerminkan !? Saya tidak mengerti mengapa?
sumber
Jawaban:
Persamaan yang Anda selesaikan tidak mengizinkan solusi yang berjalan dengan benar, jadi tidak ada kondisi batas yang mencerminkan persamaan ini. Jika Anda mempertimbangkan karakteristiknya, Anda akan menyadari bahwa Anda hanya dapat memaksakan kondisi batas pada batas kanan. Anda mencoba untuk memaksakan kondisi batas Dirichlet yang homogen di batas kiri, yang secara matematis tidak valid.
Untuk mengulangi: metode karakteristik mengatakan bahwa solusi harus konstan di sepanjang garis apapun bentuk untuk setiap konstan . Dengan demikian solusi di sepanjang batas kiri ditentukan oleh solusi di waktu sebelumnya di dalam domain masalah Anda; Anda tidak dapat memaksakan solusi di sana.x−νt=C C
Berbeda dengan persamaan, skema numerik Anda memang mengakui solusi yang tepat. Mode yang tepat disebut sebagai mode parasit dan melibatkan frekuensi yang sangat tinggi. Perhatikan bahwa gelombang yang tepat adalah paket gelombang gigi gergaji, yang dikaitkan dengan frekuensi tertinggi yang dapat diwakili di grid Anda. Gelombang itu murni artifak numerik, dibuat oleh diskresi Anda.
Untuk penekanan: Anda belum menuliskan masalah nilai batas awal penuh yang Anda coba selesaikan. Jika Anda melakukannya, akan menjadi jelas bahwa itu bukan masalah yang diposisikan secara matematis.
Saya senang Anda memposting ini di sini, karena itu adalah ilustrasi yang indah tentang apa yang bisa terjadi ketika Anda mendiskreditkan masalah yang tidak diposisikan dengan baik, dan tentang fenomena mode parasit. +1 besar untuk pertanyaan Anda dari saya.
sumber
Saya belajar banyak dari jawaban di atas. Saya ingin memasukkan jawaban ini karena saya percaya ini menawarkan wawasan yang berbeda untuk masalahnya.
Ini menghasilkan pulsa mengalir ke kanan sampai menghilang di tepi kanan.
dorong di sini untuk animasi di Dirichlet di batas kiri
Saya masih mendapatkan suara yang tidak dapat saya mengerti (ada yang bisa membantu di sini?)
Pilihan lainnya adalah memberlakukan ketentuan batas periodik. Itu bukannya memaksakan kondisi batas Dirichlet di sebelah kiri kita bisa memaksakan paket gelombang yang konsisten dengan batas di sebelah kiri. Itu adalah:
Tautan ini menunjukkan apa yang saya sebut kondisi batas periodik.
Saya membuat animasi dengan python dan skema adalah skema Crank-Nicholson seperti yang ditunjukkan dalam pertanyaan di sini.
Saya masih berjuang dengan pola noise setelah gelombang mencapai batas pertama (kanan).
sumber