當ODE45發散(不要緊,爲何以及如何)的解決方案,將顯示以下警告,並求解器無法繼續:如何在不查看顯示警告的情況下發現ode45的故障?
警告:如果在t = 8.190397e + 01。在時間t時,不能將步長減小到低於允許的最小值 (2.273737e-13),而無法滿足集成 公差。
我在矩陣(大量的投入)運行ODE45,所以我想找出自動爲其輸入上述條件(失敗)發生。我的意思是,是否有任何其他跡象表明ode45 可以自動將其寫入陣列?東西,可以在if
statment作爲:
if {some variable is returned/is equal to ...} then {the solver has failed}
識別那些故障投入不找顯示警告自動。
一個簡單的例子,演示了這個問題:'[t,y] = ode45(@(t,y)[y(1 )^ 2; y(2)],[0 1],[1; 1]);'。這兩個方程是獨立的。第一個增長率導致步長變得非常小。反過來這會導致'ode45'最終中止。我想問題是,如何編寫自己的ODE函數來確定這將會發生,但通過在步長變得太小之前將方程置零來避免它?顯然,零化後的方程沒有解決方案,但ode45可以繼續其快樂的方式,並獲得剩餘元素的完整解決方案。 – horchler
@horchler我加了更多解釋。現在,我必須檢查每個輸入,看看ode45是否失敗(通過查找顯示的警告)。我想要另一個可以自動處理的符號;比如說,通過編寫一個if語句並在每次運行中檢查失敗。 –