看板 MATLAB 關於我們 聯絡資訊
問題:如何忽略某case內部副程中的錯誤,讓程式回到主程式中繼續執行下一個計算。 以for指令給予不同起始猜值F0進行最佳化函數fmincon的計算,fmincon呼叫objfun, objfun呼叫fundae並以ode15s solver求解微分代數分程式,ode15s求得的計算值與實 驗值進行比較(obj=…),期望得到一組最佳的[Vair A B C]。問題出在某些情況下, ode15s solver 無法求解至積分的端點,顯示error,所以錯誤出現在for 迴圈內呼叫的 副程式。 請教高手們,如何才能忽略某次(i迴圈)內部副程式錯誤的,繼續執行下一個(i+1迴圈)的 計算。 錯誤部分說明 積分上下界:tspan=[1 15] 積分結果z<15 出現error 迴圈:i= 1 2 3 其中在i=2的case中會有錯,程式自動停止。如何忽略2的錯誤繼續執行 i=3的case。 謝謝大家~ 主程式 f=[1 0.75 0.5 0.25 0.01]; for i=1:5 Vair0=4.21107*10.^-5; A0=f(i).*0.65; B0=f(i).*1.0099*0.01; C0=f(i).*0.023; F0=[Vair0 A0 B0 C0]' options=optimset('Display','iter','TolFun',1e-6,'Tolx',1e-6,'Algorithm','sqp'); yL=[0.0000002187 0.0065 1.099*0.000001 0.00023]'; yU=[0.0001948 0.65 1.0099*0.01 0.023]'; [z,favl,exitflag,output]=fmincon(@objfun,F0,[],[],[],[],yL,yU,[],options) pause end obj副程式 function obj=objfun(F) . . . . [z,y]=ode15s(@fundae,tspan,y0,option); . . . obj=((y1cal_end-y1exp_end)./y1exp_end).^2+((y2cal_end-y2exp_end)./y2exp_end).^2; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.128.119.31
kdjf:try.... cache.... 01/06 22:15
foreverlong:謝謝!但不明白cache的意思... 01/09 20:22
foreverlong:help or doc cache沒有說明的敘述 01/09 20:22
laechan:catch? or cache, 意思是原本遭遇錯誤時會中止, 使用這個 01/10 08:09
laechan:語法去包在你認為可能出錯的程式段上,它遇到錯誤就會繼續 01/10 08:09
laechan:在某一個程式語言就如下if(catch(ob=find_object(FILES))) 01/10 08:10
foreverlong:太感謝了! 使用if... try...catch...continue..end 01/10 16:25
foreverlong:就可以了...謝謝你們提供的意見!!! 01/10 16:27