Biarkan saya memulai dengan koreksi. Tidak, odeint
tidak memiliki integrator symplectic. Tidak, integrasi symplectic tidak berarti konservasi energi.
Apa yang dimaksud dengan symplectic dan kapan Anda harus menggunakannya?
Pertama-tama, apa arti symplectic? Symplectic berarti bahwa solusinya ada pada manifold symplectic. Manifold symplectic adalah set solusi yang didefinisikan oleh bentuk-2. Detail manifold symplectic mungkin terdengar seperti matematis omong kosong, jadi intinya adalah ada hubungan langsung antara dua set variabel pada manifold tersebut. Alasan mengapa ini penting untuk fisika adalah karena persamaan Hamiltonian secara alami memiliki bahwa solusi berada pada manifold symplectic dalam ruang fase, dengan pemisahan alami menjadi komponen posisi dan momentum. Untuk solusi Hamiltonian sejati, jalur ruang fase itu adalah energi konstan.
Integrator symplectic adalah integrator yang solusinya berada pada manifold symplectic. Karena kesalahan diskritisasi, ketika memecahkan sistem Hamiltonian itu tidak mendapatkan lintasan yang benar pada manifold. Sebaliknya, yang lintasan itu sendiri terganggu untuk pesanan n dari lintasan yang benar. Lalu ada pergeseran linear karena kesalahan numerik lintasan ini dari waktu ke waktu. Integrator normal cenderung mengalami pergeseran kuadratik (atau lebih), dan tidak memiliki jaminan global yang baik tentang jalur ruang fase ini (hanya lokal).O (Δ tn)n
Ini cenderung berarti bahwa integrator symplectic cenderung menangkap pola lama lebih baik daripada integrator normal karena kurangnya penyimpangan dan ini hampir menjamin periodisitas. Notebook ini menampilkan properti tersebut dengan baik pada masalah Kepler . Gambar pertama menunjukkan apa yang saya bicarakan dengan sifat periodik dari solusi.
Ini diselesaikan dengan menggunakan integrator symplectic urutan ke - 6 dari Kahan dan Li dari DifferentialEquations.jl . Anda dapat melihat bahwa enerji tidak dilestarikan dengan tepat, tetapi variasinya bergantung pada seberapa jauh solusi berlipat ganda dari manifold yang sebenarnya. Tetapi karena solusi numerik itu sendiri berada pada manifold symplectic, cenderung hampir secara berkala (dengan beberapa penyimpangan numerik linier yang dapat Anda lihat), membuatnya menjadi sangat baik untuk integrasi jangka panjang. Jika Anda melakukan hal yang sama dengan RK4, Anda bisa mendapatkan bencana:
Anda dapat melihat bahwa masalahnya adalah tidak ada periodisitas sejati dalam solusi numerik dan karenanya lembur cenderung melayang.
Ini menyoroti alasan sebenarnya untuk memilih integrator symplectic: integrator symplectic baik pada integrasi lama pada masalah yang memiliki properti symplectic (sistem Hamiltonian) . Jadi mari kita bahas beberapa hal. Perhatikan bahwa Anda tidak selalu memerlukan integrator symplectic bahkan pada masalah symplectic. Untuk kasus ini, metode Runge-Kutta ke-5 adaptif dapat dilakukan dengan baik. Inilah Tsit5
:
Perhatikan dua hal. Pertama, ia mendapatkan akurasi yang cukup baik sehingga Anda tidak dapat melihat pergeseran sebenarnya dalam plot ruang fase. Namun, di sisi kanan Anda dapat melihat bahwa ada penyimpangan energi ini, dan jika Anda melakukan integrasi yang cukup lama, metode ini tidak akan berfungsi sebaik metode solusi dengan properti periodik. Tapi itu menimbulkan pertanyaan, bagaimana cara efisiensi-vs vs hanya mengintegrasikan sangat akurat? Yah, ini agak kurang pasti. Dalam DiffEqBenchmarks.jl Anda dapat menemukan beberapa tolok ukur menyelidiki pertanyaan ini. Misalnya, notebook inimelihat kesalahan energi vs runtime pada sistem persamaan Hamiltonian dari model Boson quadruple dan menunjukkan bahwa jika Anda menginginkan akurasi yang sangat tinggi, maka bahkan untuk waktu integrasi yang cukup lama, lebih efisien jika hanya menggunakan RK or Runge-Kutta Nystrom yang tinggi ( Metode RKN). Ini masuk akal karena untuk memenuhi sifat simptektik integrator memberikan beberapa efisiensi dan cukup banyak harus diperbaiki langkah waktu (ada beberapa penelitian membuat kemajuan ke yang terakhir tetapi tidak terlalu jauh).
Selain itu, perhatikan dari kedua notebook ini bahwa Anda juga dapat mengambil metode standar dan memproyeksikannya kembali ke solusi yang berlipat ganda setiap langkah (atau setiap beberapa langkah). Inilah yang dilakukan contoh-contoh menggunakan panggilan balik ManifoldProjection DifferentialEquations.jl . Anda melihat bahwa jaminan hukum konservasi ditegakkan tetapi dengan biaya tambahan untuk menyelesaikan sistem implisit setiap langkah. Anda juga dapat menggunakan pemecah ODE yang sepenuhnya implisit atau matriks massa tunggal untuk menambah persamaan konservasi, tetapi hasil akhirnya adalah bahwa metode ini lebih mahal secara komputasi sebagai pengorbanan.
Jadi untuk meringkas, kelas masalah di mana Anda ingin meraih integrator symplectic adalah mereka yang memiliki solusi pada manifold symplectic (sistem Hamilton) di mana Anda tidak ingin menginvestasikan sumber daya komputasi untuk memiliki yang sangat tepat (toleransi <1e-12
) solusi dan tidak membutuhkan energi yang tepat / dll. konservasi. Ini menyoroti bahwa ini semua tentang properti integrasi jangka panjang, jadi Anda tidak harus berbondong-bondong ke mereka semua mau tak mau seperti yang ditunjukkan beberapa literatur. Tetapi mereka masih merupakan alat yang sangat penting di banyak bidang seperti Astrofisika di mana Anda memiliki integrasi lama yang Anda butuhkan untuk menyelesaikan cukup cepat tanpa memiliki akurasi yang absurd.
Di mana saya menemukan integrator symplectic? Integrator symplectic seperti apa yang ada?
Pada umumnya ada dua kelas integrator symplectic. Ada integrator Runge-Kutta symplectic (yang ditunjukkan pada contoh di atas) dan ada metode Runge-Kutta implisit yang memiliki properti symplectic. Seperti @origimbo menyebutkan, integrator Runge-Kutta symplectic mengharuskan Anda memberi mereka struktur yang dipartisi sehingga mereka dapat menangani posisi dan momentum secara terpisah. Namun, bertentangan dengan komentar tersebut, metode Runge-Kutta implisit bersifat simplektik tanpa memerlukan ini, tetapi sebaliknya membutuhkan penyelesaian sistem nonlinier. Ini tidak terlalu buruk karena jika sistemnya tidak kaku, sistem nonlinear ini dapat diselesaikan dengan iterasi fungsional atau percepatan Anderson, tetapi metode simptektik RK mungkin masih lebih disukai untuk efisiensi (itu '
Yang mengatakan, odeint tidak memiliki metode dari salah satu keluarga ini , jadi itu bukan pilihan yang baik jika Anda mencari integrator symplectic. Di Fortran, situs Hairer memiliki set kecil yang dapat Anda gunakan . Mathematica memiliki beberapa bawaan . Para pemecah ODL GSL memiliki integrator titik Gaussian RK implisit yang IIRC bersifat symplectic, tapi itu satu-satunya alasan untuk menggunakan metode GSL.
Tetapi set integrator symplectic paling komprehensif dapat ditemukan di DifferentialEquations.jl di Julia (ingat ini digunakan untuk notebook di atas). Daftar metode Runge-Kutta symplectic yang tersedia ditemukan di halaman ini dan Anda akan melihat bahwa metode titik tengah implisit juga symplectic (metode Trapesium Runge-Kutta implisit dianggap "hampir symplectic" karena dapat dibalik). Tidak hanya memiliki serangkaian metode terbesar, tetapi juga sumber terbuka (Anda dapat melihat kode dan pengujiannya dalam bahasa tingkat tinggi) dan memiliki banyak tolok ukur . Notebook pengantar yang bagus untuk menggunakannya untuk menyelesaikan masalah fisik adalah notebook tutorial ini. Tapi tentu saja disarankan Anda memulai dengan paket melalui tutorial ODE pertama .
Secara umum Anda dapat menemukan analisis terperinci dari suite persamaan diferensial numerik di posting blog ini . Ini cukup terperinci, tetapi karena harus mencakup banyak topik, masing-masing kurang detail dari ini, jadi jangan ragu untuk memintanya diperluas dengan cara apa pun.