2017-08-24 45 views
0

我試圖複製下面鏈接的腳本: Parameters estimation on Lotka Volterra model with Scilab的Scilab:對洛特卡沃爾泰拉模型的參數估計的Scilab

而我得到的結果與在它描述的類似的錯誤.. 你可以指導我無誤地運行腳本。 格拉西亞斯 愛馬仕

+0

[使用Scilab的Lotka Volterra模型的參數估計]的可能重複(https://stackoverflow.com/questions/22614164/parameters-estimation-on-lotka-volterra-model-with-scilab) – bummi

回答

0

解決方案的Scilab 5.5.1或更小

的問題是,不知何故求解達到一個地步,它不能解決每個t的頌歌,並在某一點停止。因此您的y_calc的尺寸小於y_exp

如果這不是你的問題,在Differences功能的6號線更改diffmat

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

解決方案的Scilab 6.0.0或更高

ode函數現在擡高時出錯它無法在Scilab 6.XX中計算

使用try ... catch ... end聲明,我們可以讓程序處理它。

所以一個錯誤(我會解釋爲什麼後)解決方案,正在改變Differences功能的第5行至

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),:) 

你仍然會得到頌歌警告。

爲什麼它是壞的

既然你問了一個正在運行的程序,我已經使用了try catch語句來扔掉的錯誤,讓程序繼續進行。你不應該。這意味着你的問題是不明確的:參數選擇不當或者它不是數字可解的。我建議研究程序背後的數學,並找出爲什麼某些參數可能會破壞算法。

還有另一個原因,你不應該按照我的答案。如你所見,當我發現錯誤時,我給y_calc一些價值。但這在數學上是荒謬的,因爲優化問題依賴於解決方案最接近初始問題的事實。我99%確定y_calc = y_exp'聲明會給你無法用的結果。