Dapatkah saya menggunakan skema loncatan waktu eksplisit untuk menentukan secara numerik apakah ODE kaku?

10

Saya memiliki ODE:

u ( 0 ) = - 1u=1000u+sin(t)
u(0)=11000001

Saya tahu bahwa ODE khusus ini kaku, analitis. Saya juga tahu bahwa jika kita menggunakan metode loncatan waktu (maju) yang eksplisit (Euler, Runge-Kutta, Adams, dll.), Metode tersebut akan menghasilkan kesalahan yang sangat besar jika langkah waktu terlalu besar. Jadi, saya punya dua pertanyaan:

  1. Apakah ini cara ODE kaku ditentukan, secara umum, ketika ekspresi analitik untuk istilah kesalahan tidak tersedia atau tidak dapat diturunkan?

  2. Secara umum, ketika ODE kaku, bagaimana cara menentukan timestep "cukup kecil"?

Paul
sumber
Ada metode standar untuk mendeteksi kekakuan menggunakan metode eksplisit. Saya menempatkan komentar ini di sini karena mungkin sulit untuk menemukan jawaban saya yang lebih terperinci jauh di bawah.
David Ketcheson

Jawaban:

6

Untuk menjawab pertanyaan Anda:

  1. Sejauh yang saya tahu, dalam praktiknya, jika metode eksplisit membutuhkan langkah waktu yang sangat kecil relatif terhadap skala waktu minat Anda (lihat jawaban atas pertanyaan ini tentang apa artinya ODE menjadi kaku ) untuk menghasilkan hasil yang akurat, maka untuk semua maksud dan tujuan, masalah Anda kaku. Untuk menentukan persyaratan ukuran langkah, bergantung pada salah satu dari banyak perpustakaan di luar sana yang ditulis oleh para ahli (paket MATLAB adalah salah satu contoh, juga SUNDIALS, VODE, DASPK, DASSL, LSODE, dll.), Yang memiliki heuristik loncatan waktu adaptif. Manual SUNDIALS menjelaskan aturan keputusan yang mereka gunakan untuk menentukan ukuran langkah waktu yang diambil paket, untuk memberi Anda contoh aturan yang digunakan dalam praktik.

  2. Sekali lagi, saya akan menggunakan perpustakaan dengan waktu adaptif melangkah dalam praktek, karena lebih efisien untuk melakukannya. Namun, jika Anda mengkodekan metode sendiri, menggunakan ukuran langkah tetap, jika Anda melihat osilasi besar, atau solusi Anda "meledak", maka Anda akan curiga bahwa langkah waktu Anda terlalu besar, dan menguranginya. Ulangi sampai Anda mendapatkan solusi numerik yang berperilaku cukup baik. Buku pelajaran seperti Ascher dan Petzold dan Hairer dan Wanner memiliki contoh-contoh bagus tentang fenomena ini.

Geoff Oxberry
sumber
9

Cara yang lebih baik untuk melihatnya adalah bahwa untuk masalah yang kaku, setiap perhitungan eksplisit yang stabil mengarah ke kesalahan yang jauh lebih kecil dari toleransi kesalahan yang diperlukan .

Ada banyak metode yang baik untuk secara otomatis mendeteksi kekakuan menggunakan skema eksplisit, terutama pasangan Runge-Kutta yang tertanam. Lihat misalnya:

Dalam contoh kedua faleichik, ketika ukuran langkah dikurangi, orang akan melihat penurunan dramatis yang tiba-tiba pada tingkat ke bawah jauh di bawah toleransi yang diinginkan khas sebagai ambang batas waktu yang stabil dilintasi. Jadi penduga kesalahan yang baik memang akan mengungkapkan kekakuan masalah. Dalam masalah pertama, kesalahan yang diperoleh dengan ukuran langkah yang stabil akan berada dalam kisaran toleransi yang diinginkan, yang menunjukkan ketidak-kekakuan.

Catat sebagai konsekuensi bahwa masalah menjadi tidak kaku jika diperlukan toleransi kesalahan yang cukup ketat.

David Ketcheson
sumber
2
Itu adalah makalah yang akan saya tautkan sebelum melihat jawaban Anda. +1, tentu saja. :) Biarkan saya juga menambahkan ini , ini , dan akhirnya ini . Ini jelas merupakan masalah yang dipelajari dengan baik ...
JM
9

1. Bisakah kita secara numerik mendeteksi kekakuan hanya dengan menerapkan metode eksplisit?

  • [0,10]τ=1 τ

    masukkan deskripsi gambar di sini

    τ=0.1masukkan deskripsi gambar di sini

    τ=0.1[0,10]

    Jadi, apakah masalahnya kaku? Jawabannya adalah TIDAK ! Langkah kecil di sini diperlukan untuk mereproduksi osilasi solusi dengan benar .

    y(t)=2cosπt,y(0)=1.

  • τ=1

    masukkan deskripsi gambar di sini

    τ=0.1

    masukkan deskripsi gambar di sini

    τ=0.1[0,10]

    Apakah masalah ini kaku? Ya ! Kami telah membuat langkah sangat kecil untuk mereproduksi solusi yang berubah sangat lambat. Ini tidak masuk akal! Besarnya langkah waktu di sini dibatasi oleh sifat stabilitas Euler eksplisit .

    Masalahnya adalah

    y(t)=2y(t)+sint/2,y(0)=1.


Kesimpulan: informasi tentang timesteps dan kesalahan yang sesuai tidak cukup untuk mendeteksi kekakuan. Anda juga harus melihat solusi yang diperoleh. Jika bervariasi perlahan-lahan dan ukurannya sangat kecil, masalahnya kemungkinan besar akan kaku. Jika solusinya berosilasi dengan cepat dan Anda memercayai teknik estimasi kesalahan Anda maka masalah ini tidak kaku.


2. Bagaimana menentukan stepsize maksimum yang memungkinkan untuk mengintegrasikan masalah kaku dengan metode eksplisit?

Jika Anda menggunakan beberapa pemecah eksplisit kotak hitam dengan kontrol langkah otomatis, maka Anda tidak perlu melakukan apa pun: perangkat lunak akan mengambil langkah yang diperlukan secara adaptif.

[Λ,0]Λ=1000

[2,0]τΛτ

τ2|Λ|.

τ1|Λ|,
1/|Λ|<τ2/|Λ|

Tentu saja analisis semacam itu sebagian besar berlaku untuk masalah linier dengan spektrum yang diketahui. Untuk masalah yang lebih praktis, kita harus mengandalkan metode numerik deteksi kekakuan (lihat referensi dan komentar dalam jawaban lain).

faleichik
sumber
Seperti disebutkan dalam beberapa makalah yang terkait dengan David, metode kekuatan untuk menemukan nilai eigen dominan (dimodifikasi dengan tepat) adalah pilihan yang biasa untuk detektor kekakuan berbasis Jacobian.
JM