请问matlab中[x,fval,exitflag,output] = simulannealbnd(fun,...)函数怎么调用,有相应的实例吗?或者帮我看一下下面的程序,怎么改。
function benfendange
clear all
clc
a0=[0.0051 25.1930 0.0174];
lb=[0 0 0];ub=[+inf +inf +inf];
c0=[0.0526 0.0526 0.0526 100 100 100];
cexp=[0.0526 0.0526 0.0526 100.0000 100.0000 100.0000
0.0404 0.0494 0.0516 73.3083 89.8496 98.1203
0.0268 0.0442 0.0507 50.3759 81.2030 94.7368
0.0150 0.0378 0.0484 42.1053 72.9323 93.2331
0.0082 0.0358 0.0464 24.8120 67.6692 89.8496
0.0042 0.0337 0.0439 13.9098 61.6541 80.4511
0.0028 0.0276 0.0429 11.6541 54.8872 80.8271
0.0019 0.0240 0.0407 10.1504 47.7444 77.8195
0.0018 0.0188 0.0393 9.7744 40.6015 76.3158
0.0016 0.0160 0.0381 9.7744 35.7143 75.5639
0.0016 0.0153 0.0365 9.7744 34.5865 72.1805];
%使用lsqnonlin()进行参数估计
[a,fval,exitflag,output]=simulannealbnd(@objfun,a0,lb,ub,c0,cexp);
a
function f=objfun(a,c0,cexp)
tspan=[0 0.1005 0.1984 0.2857 0.3571 0.4471 0.5529 0.6746 0.8042 0.9074 0.9683];
[t,c]=ode45(@kinetic,tspan,c0,[],a);
f1=c(:,1)-cexp(:,1);f2=c(:,2)-cexp(:,2);f3=c(:,3)-cexp(:,3);
f4=c(:,4)-cexp(:,4);f5=c(:,5)-cexp(:,5);f6=c(:,6)-cexp(:,6);
f=[f1;f2;f3;f4;f5;f6];
function dcdt=kinetic(t,c,a)
T1=433.15;T2=413.25;T3=393.15;
R=0.008314;
dcdt=...
[(a(1).*exp(-a(2)./(R.*T1)).*(c(4).^(a(3))).*c(1).*0.943)
(a(1).*exp(-a(2)./(R.*T2)).*(c(5).^(a(3))).*c(2).*0.926)
(a(1).*exp(-a(2)./(R.*T3)).*(c(6).^(a(3))).*c(3).*0.907)
(7.*a(1).*exp(-a(2)./(R.*T1)).*(c(4).^(a(3))).*c(1).*0.943)
(7.*a(1).*exp(-a(2)./(R.*T2)).*(c(5).^(a(3))).*c(2).*0.926)
(7.*a(1).*exp(-a(2)./(R.*T3)).*(c(6).^(a(3))).*c(3).*0.907)
];