|
楼主 |
发表于 2007-6-30 02:22
|
显示全部楼层
我自己来!求人不如求己!!!
function df=m1(t,f)
%OBJFUN Summary of this function goes here
% Detailed explanation goes here
% 全局变量
global Um;
global Ks;
global Yxs;
global m;
% 转换因变量
% f(1):Cx,f(2):Cs
% dCx/dt :df(1) ,dCs/dt :df(2) ,
% ***************
% 建立 2*1 阶矩阵
df=zeros(2,1);
df(1)=Um*f(1)*f(2)/(Ks+f(2));
df(2)=(-1)*df(1)/Yxs+m*f(1);
function data=objfun(k)
%OBJFUN Summary of this function goes here
% Detailed explanation goes here
% 全局参数
global Um;
global Ks;
global Yxs;
global m;
Um=k(1);
Ks=k(2);
Yxs=k(3);
m=k(4);
% 时间
tspan=[3 11 19 27 35 43 51 59 67 75 83];
% 瞬时细胞浓度实验值
Cx=[0.020,0.029,0.041,0.059,0.084,0.12,0.18,0.27,0.41,0.66,1.23];
% 瞬时底物浓度实验值
Cs=[30.00,29.81,29.55,29.16,28.61,27.80,26.61,24.82,22.04,17.42,8.35];
% 瞬时浓度值计算
% Cx,Cs初值
f0=[0.020 30.00];
%options
[t,f]=ode45(@m1,tspan,f0);
% 计算值与实验值的残差平方和 data
test=[Cx;Cs]';
temp1=f-test;
temp2=temp1./test;
data=sum(sum(temp2.^2));
function y=ansfun(k)
% 全局参数
% global Um;
% global Ks;
% global m;
% global Yxs;
% 全局参数的数值范围
Um=k(1);
Ks=k(2);
Yxs=k(3);
m=k(4);
%
format long e;
% 求解过程参数设置
% 初值以及精度
Lb=[1e0 1e2 1e-4 1e-4];
% 范围设置
Ub=[Um Ks Yxs m];
% 参数设置
options=optimset('largescale','off','display','final','tolx',1e-8,'tolfun',1e-8,'MaxFunEvals',6000);
% 求解过程
[p,fval,exitflag,output]=fmincon(@objfun,Lb,[],[],[],[],Lb,Ub,[],options);
y=p;
disp('fval=');
disp(fval);
disp('exitflag=');
disp(exitflag);
disp('output=');
disp(output);
disp('revelent error=');
error=gridfun(p);
disp(error);
main()
k=[1e8 1e8 0.3 4];
ansfun(k); |
评分
-
1
查看全部评分
-
|