[問題]for迴圈,如何忽略某case內部副程式中的錯
問題:如何忽略某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
01/06 22:15, 1F
→
01/09 20:22, , 2F
01/09 20:22, 2F
→
01/09 20:22, , 3F
01/09 20:22, 3F
→
01/10 08:09, , 4F
01/10 08:09, 4F
→
01/10 08:09, , 5F
01/10 08:09, 5F
→
01/10 08:10, , 6F
01/10 08:10, 6F
→
01/10 16:25, , 7F
01/10 16:25, 7F
→
01/10 16:27, , 8F
01/10 16:27, 8F