2016-11-15 7 views
0

私はMatlabを初めて使い、一定のnに対して微分方程式y '= - y/nを解こうとしています。Ode23は実行を終了しません

function dv = lc(v1) 
dv = -v1/(0.0000047*0.000001); 

をそして、試してみて、このようにそれを解決する:私はこのようなスクリプトで関数を定義

[t,v] = ode23('lc',[0 5],1) 

しかし、操作の実行が終了することはありません。それはちょうど私のRAMを食べて、私はそれを終了するCtrl + Cを押すまで、コーナーで "ビジー"と言う。私はここで間違って何をしていますか?

+0

あなたが使用している「n」は何ですか? –

+0

@EliSadoff私の関数では0.0000047 * 0.000001 – imulsion

+0

'n = 0.2'を試して解決しているかどうかを確認してください。アンダーフローする可能性があります。 –

答えて

1

あなたはアンダーフローの犠牲者です。何が起こるかは、無限の浮動小数点数がないため(Is floating point math broken?参照)、結果は完全に正確ではありません。数字が十分に小さい場合、その数字はコンピュータによって0として扱われる可能性があります。 MATLABがode23に使用するプロセスは、除算を含む有限差分に基づいています。アンダーフローエラーを考慮すると、0の問題が発生するか、結果が無限に近づいて解決策の条件を満たさないと信じられないほど小さな因子でオーバーフローが発生する可能性があります。

関連する問題