[問題]for迴圈,如何忽略某case內部副程式中的錯

看板MATLAB作者 (foreverlong)時間14年前 (2012/01/06 15:00), 編輯推噓0(008)
留言8則, 3人參與, 最新討論串1/1
問題:如何忽略某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

01/06 22:15, , 1F
try.... cache....
01/06 22:15, 1F

01/09 20:22, , 2F
謝謝!但不明白cache的意思...
01/09 20:22, 2F

01/09 20:22, , 3F
help or doc cache沒有說明的敘述
01/09 20:22, 3F

01/10 08:09, , 4F
catch? or cache, 意思是原本遭遇錯誤時會中止, 使用這個
01/10 08:09, 4F

01/10 08:09, , 5F
語法去包在你認為可能出錯的程式段上,它遇到錯誤就會繼續
01/10 08:09, 5F

01/10 08:10, , 6F
在某一個程式語言就如下if(catch(ob=find_object(FILES)))
01/10 08:10, 6F

01/10 16:25, , 7F
太感謝了! 使用if... try...catch...continue..end
01/10 16:25, 7F

01/10 16:27, , 8F
就可以了...謝謝你們提供的意見!!!
01/10 16:27, 8F
文章代碼(AID): #1F1fm90Z (MATLAB)