我試圖複製下面鏈接的腳本: Parameters estimation on Lotka Volterra model with Scilab的Scilab:對洛特卡沃爾泰拉模型的參數估計的Scilab
而我得到的結果與在它描述的類似的錯誤.. 你可以指導我無誤地運行腳本。 格拉西亞斯 愛馬仕
我試圖複製下面鏈接的腳本: Parameters estimation on Lotka Volterra model with Scilab的Scilab:對洛特卡沃爾泰拉模型的參數估計的Scilab
而我得到的結果與在它描述的類似的錯誤.. 你可以指導我無誤地運行腳本。 格拉西亞斯 愛馬仕
的問題是,不知何故求解達到一個地步,它不能解決每個t
的頌歌,並在某一點停止。因此您的y_calc
的尺寸小於y_exp
。
如果這不是你的問題,在Differences
功能的6號線更改diffmat
到
diffmat = y_calc' - y_exp(1:size(y_calc',1),:)
的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'
聲明會給你無法用的結果。
[使用Scilab的Lotka Volterra模型的參數估計]的可能重複(https://stackoverflow.com/questions/22614164/parameters-estimation-on-lotka-volterra-model-with-scilab) – bummi