马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
function fourlump
clear all
clc
global theta yexp V21 V23 V24 A xx0 M MH x0
k0 = [1.0 5.0 0.5]; % 参数初值
lb = [0 0 0]; % 参数下限
ub = [+inf +inf +inf]; % 参数上限
xx0=[31.423 42.861 6.403 19.315];
M=[93.99229 83.27657 102.8053 116.2428];
NH=[0.2271 0.2271 0.2271 0.0852 0.0852 0.0852 0.1135 0.1135 .1419 0.1419 0.1419 0.1419 0.1703 0.1703 0.1703];
tspan=[0 1];
ExpData= ...
[1 0.002553 0.002189 0.000629 0.001467
2 0.003354 0.000745 0.000684 0.001973
3 0.002758 0.002128 0.000585 0.001336
4 0.003226 0.003156 0.000672 0.001585
5 0.003495 0.002759 0.000707 0.001658
6 0.003105 0.002974 0.000678 0.001677
7 0.003571 0.001938 0.000791 0.001780
8 0.003073 0.002763 0.000675 0.001594
9 0.002857 0.002761 0.000630 0.001569
10 0.003621 0.001888 0.000679 0.001637
11 0.003228 0.002415 0.000629 0.001522
12 0.003121 0.001553 0.000734 0.001877
13 0.002850 0.002348 0.000636 0.001601
14 0.003406 0.001851 0.000648 0.001570
15 0.003142 0.001809 0.000677 0.001687];
yexp=ExpData(:,2:5);
tspan=[0 1];
V21=[0.8837 1.0897 0.9285 0.8446 0.9119 0.8925 0.9612 0.8992 0.8601 0.9473 0.9115 0.9747 0.8795 0.9365 0.9162]';
V23=[0.8853 0.9914 0.8874 0.8228 0.8501 0.8609 0.9220 0.8669 0.8354 0.8654 0.8592 0.9637 0.8455 0.8638 0.9014]';
V24=[0.7570 0.8668 0.7843 0.7332 0.7551 0.7666 0.7936 0.7678 0.7411 0.7644 0.7638 0.8576 0.7503 0.7658 0.8033]';
theta=[166.8411 250.2616 286.0133 155.4816 248.7706 266.5399 169.4721 593.1523 80.9890 377.9487 566.9230 566.9229 180.9717 361.9435 434.3321];
A=[0.1562 0.1562 0.1562 0.0728 0.0728 0.0728 0.0925 0.0925 0.1106 0.1106 0.1106 0.1106 0.1270 0.1270 0.1270]';
yexp=ExpData(:,2:5);
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
lsqnonlin(@ObjFunclump,k0,lb,ub,[],tspan,xx0,x0,theta,V21,V23,V24,yexp)
ci = nlparci(k,resid,jacobian)
function f = ObjFunclump(k,tspan,x0,theta,V21,V23,V24,A,yexp)
for i=1:length(theta)
x0(1)=xx0(1)/((1+2*NH(i))*M(1));
x0(2)=xx0(2)/((1+2*NH(i))*M(2));
x0(3)=xx0(3)/((1+2*NH(i))*M(3));
x0(4)=xx0(4)/((1+2*NH(i))*M(4));
[t x] = ode45(@FCClump,tspan,x0,[],k,theta(i),V21(i),V23(i),V24(i),A(i));
y(i,1) = x(end,1);
y(i,2:4) = x(end,2:4);
end
f1 = y(:,1) - yexp(:,1);
f2 = y(:,2) - yexp(:,2);
f3 = y(:,3) - yexp(:,3);
f4 = y(:,4) - yexp(:,4);
f = [f1;f2;f3;f4];
function dxdt=FCClump(t,x,k,theta,V21,V23,V24,A)
dxdt = ...
[ theta*k(1)*V21*x(2)/(x(1)+x(2)+x(3)+x(4)+A)
-1*theta*(k(1)+k(2)+k(3))*x(2)/(x(1)+x(2)+x(3)+x(4)+A)
theta*k(2)*V23*x(2)/(x(1)+x(2)+x(3)+x(4)+A)
theta*k(3)*V24*x(2)/(x(1)+x(2)+x(3)+x(4)+A)
];
运行后:
??? Error using ==> optim\private\lsqncommon
User supplied function failed with the following error:
Undefined function or variable "y".
Error in ==> lsqnonlin at 147
[x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...
Error in ==> fourlump360 at 39
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ... |