作者foreverlong (foreverlong)
看板MATLAB
标题[问题]for回圈,如何忽略某case内部副程式中的错
时间Fri Jan 6 15:00:22 2012
问题:如何忽略某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
1F:→ kdjf:try.... cache.... 01/06 22:15
2F:→ foreverlong:谢谢!但不明白cache的意思... 01/09 20:22
3F:→ foreverlong:help or doc cache没有说明的叙述 01/09 20:22
4F:→ laechan:catch? or cache, 意思是原本遭遇错误时会中止, 使用这个 01/10 08:09
5F:→ laechan:语法去包在你认为可能出错的程式段上,它遇到错误就会继续 01/10 08:09
6F:→ laechan:在某一个程式语言就如下if(catch(ob=find_object(FILES))) 01/10 08:10
7F:→ foreverlong:太感谢了! 使用if... try...catch...continue..end 01/10 16:25
8F:→ foreverlong:就可以了...谢谢你们提供的意见!!! 01/10 16:27