Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2010-06-22, 21:07   #1
星竹石
初级会员
 
注册日期: 2009-06-18
帖子: 6
声望力: 0
星竹石 正向着好的方向发展
箭头 关于带有微分方程组的参数最优化估计问题

最近刚刚接触matlab, 打算用matlab的lsqnonlin函数去解决以下问题:
某一反应体系可以用如下常微分方程组描述
dc1/dt=k1*sqrt(c3)
dc2/dt=k2*c3
dc3/dt=-k1*sqrt(c3)-k2*c3-k3*c3

现c1,c2和c3随时间的变化已经通过实验得到,想拟和出合适的k1, k2和k3.

我自己编了一个小程序,但总是被提示“too many output arguments”, 不知道是怎么回事, 希望大家能帮助一下。

我的程序如下

function KineticsEst5

clear all
clc

k0 = [0.5 0.5 0.5]; % 参数初值
lb = [0 0 0]; % 参数下限
ub = [+inf +inf +inf]; % 参数上限
c0 = [212.650 474.378 208070];
KineticsData2;
yexp = ExpData(:,2:4); % yexp: 实验数据[c1 c2 c3]

% 使用函数lsqnonlin()进行参数估计
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],c0,yexp);
ci = nlparci(k,residual,jacobian);
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
Output

% ------------------------------------------------------------------
function f = ObjFunc4LNL(k,c0,yexp)
tspan = [0 1 2 3 5 7 9 12 14 16 19 21 23 26];
[t c] = ode45(@KineticEqs,tspan,c0,[],k);
y(:,1:3) = c(:,1:3);
f1 = y(:,1) - yexp(:,1);
f2 = y(:,2) - yexp(:,2);
f3 = y(:,3) - yexp(:,3);
f = [f1; f2; f3];

% ------------------------------------------------------------------
function dcdt = KineticEqs(t,c,k)
dcdt = ...
[ ( k(1)*sqrt(c(3)) )
( k(2)*c(3) )
( -k(1)*sqrt(c(3))-k(2)*c(3)-k(3)*c(3) )
];

程序所调用的实验数据如下

% 动力学数据:
% t c1 c2 c3
ExpData = ...
[
0.000 212.650 474.378 208070.000
1.000 2787.164 1745.013 164290.000
2.000 5163.403 2734.322 128720.000
3.000 7536.437 3207.740 114670.000
5.000 10579.022 4986.831 31950.000
7.000 11776.221 6099.661 25140.000
9.000 12455.458 6839.463 12610.000
12.000 12850.537 7157.148 11690.000
14.000 12981.767 7436.120 7910.000
16.000 12982.335 7517.885 9520.000
19.000 13079.799 7527.819 8650.000
21.000 13520.587 7586.632 8200.000
23.000 13565.417 7526.917 7630.000
26.000 13673.061 7477.547 8980.000
]
星竹石 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 17:37


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.