2017-08-24 6 views
0

上のパラメータ推定: Scilabの:私は、次のリンクのスクリプトを再現しようとしたロトカボルテラモデルのScilab

Parameters estimation on Lotka Volterra model with Scilab

そして、私はそれに記載されたものに結果で同様のエラーが発生します。.. あなたは私を導くことができエラーなしでスクリプトを実行します。 Scilabの5.5.1のためのグラシアス エルメス

+0

[ScilabによるLotka Volterraモデルのパラメータ推定]の可能な複製(https://stackoverflow.com/questions/22614164/parameters-estimation-on-lotka-volterra-model-with-scilab) – bummi

答えて

0

ソリューション以下

問題は、ソルバーは何とかそれはすべてのtにODEを解決し、ある時点で停止することはできませんポイントに到達することです。したがって、y_calcは、y_expのサイズより小さくなります。

これはあなたのための問題ではありません場合は、

diffmat = y_calc' - y_exp(1:size(y_calc',1),:) 

のScilab 6.0.0以上

のためのソリューションode関数にDifferences機能の6行目にdiffmatを変更になりましたときにエラーを発生させますScilab 6.XXで計算できない

try ... catch ... endステートメントを使用して、プログラムで処理させることができます。

だから、間違った(以降、なぜ私が説明します)ソリューションは、あなたはまだODEからの警告になるだろう

try // test if ode works normally 
    [y_calc,odew,odeiw]=ode(y0',t0,t,list(LotkaVolterra,c,n,m,e)) 
catch // if an error is raised 
    y_calc = y_exp' // Put a value when the computations fails 
end 
diffmat = y_calc' - y_exp(1:size(y_calc',1),:) 

Differences機能の5行目を変更しています。

それはあなたが実行中のプログラムを求めているので、私はエラーを離れて投げると、プログラムを継続させるためにtry catchステートメントを使用しました

悪いですなぜ。貴方はするべきではない。つまり、パラメータが不適切に選択されているか、数値的に解決できません。私は、プログラムの裏にある数学に取り組み、なぜいくつかのパラメータがodeアルゴリズムを壊すかもしれないことを知ることを勧めます。

また、私の答えに従わない理由もあります。あなたが見るように、私がエラーをキャッチすると、私はy_calcにいくつかの値を与えます。しかし、これは数学的には不合理です。なぜなら、最適化の問題は、解が初期の問題に近似しているという事実に依存しているからです。私は99%がy_calc = y_exp'ステートメントがあなたに使用できない結果を与えると確信しています。

関連する問題