24小时热门版块排行榜    

查看: 2848  |  回复: 7
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

飞鸿印雪jay

银虫 (小有名气)

[求助] 请问这个算是反应动力学方程吗?怎么求得k值?

自己建的数学模型,反应速率方程算不算反应动力学方程?怎么用matlab求解参数k呢?假设浓度C可以试验测定。
请问这个算是反应动力学方程吗?怎么求得k值?
OE%JHWBEA]D{_`_H1%%8ZI8.jpg
回复此楼

» 收录本帖的淘帖专辑推荐

动力学拟合

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

飞鸿印雪jay

银虫 (小有名气)

引用回帖:
5楼: Originally posted by 月只蓝 at 2013-11-10 09:46:19
以下是MATLAB拟合含2个方程的常微分方程组的实例:
http://muchong.com/bbs/viewthread.php?tid=6425538&authorid=1122189

你的是包含5个方程的,程序可类比。

function k1k2k3
format long
clear all
clc
tspan = [0  30  50  80 140 170 200 230 260 290 320 360 400 460 520 580 600];
x0 = [9;0;0;0;0];
k0 = [1  0  0  0  0  0  0  0  0  0];   
lb = [0  0  0  0  0  0  0  0  0  0];
ub = [1  1  1  1  1  1  1  1  1  1];

data=[30        7.939        1.458     7.939        1.458     7.939      
      50        7.687        1.535     7.687        1.535     7.687
      80        7.289        1.602     7.289        1.602     7.289
      140        6.658        1.717    6.658        1.717     6.658
      170        6.531        1.722    6.531        1.722     6.531
      200        6.218        1.671    6.218        1.671     6.218
      230        5.979        1.620    5.979        1.620     5.979
      260        5.591        1.550    5.591        1.550     5.591
      290        5.414        1.488    5.414        1.488     5.414
      320        4.968        1.433    4.968        1.433     4.968
      360        4.692        1.350    4.692        1.350     4.692  
      400        4.438        1.319    4.438        1.319     4.438
      460        4.144        1.294    4.144        1.294     4.144
      520        4.041        1.294    4.041        1.294     4.041
      580        4.052        1.287    4.052        1.287     4.052     
      600        4.052        1.287    4.052        1.287     4.052      
      ];
yexp = data(:,2:6);

[k,resnorm,residual,exitflag,output,lambda,jacobian]=...
lsqnonlin(@ObjFunc,k0,lb,ub,[],tspan,x0,yexp);      
ci = nlparci(k,residual,jacobian);
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.9f ± %.9f\n',k(1),ci(1,2)-k(1))
fprintf('\tk2 = %.9f ± %.9f\n',k(2),ci(2,2)-k(2))
fprintf('\tk3 = %.9f ± %.9f\n',k(3),ci(3,2)-k(3))
fprintf('\tk3 = %.9f ± %.9f\n',k(4),ci(3,2)-k(4))
fprintf('\tk3 = %.9f ± %.9f\n',k(5),ci(3,2)-k(5))
fprintf('\tk3 = %.9f ± %.9f\n',k(6),ci(3,2)-k(6))
fprintf('\tk3 = %.9f ± %.9f\n',k(7),ci(3,2)-k(7))
fprintf('\tk3 = %.9f ± %.9f\n',k(8),ci(3,2)-k(8))
fprintf('\tk3 = %.9f ± %.9f\n',k(9),ci(3,2)-k(9))
fprintf('\tk3 = %.9f ± %.9f\n',k(10),ci(3,2)-k(10))
fprintf('  The sum of the squares is: %.9e\n\n',resnorm)

function f = ObjFunc(k,tspan,x0,yexp)           % 目标函数
[t, Xsim] = ode45(@KineticsEqs,tspan,x0,[],k);
Xsim1=Xsim(:,1);
Xsim2=Xsim(:,2);
ysim(:,1) = Xsim1(2:end);
ysim(:,2) = Xsim2(2:end);

size(ysim(:,1));
size(ysim(:,2));
size(yexp(:,1));
size(yexp(:,2));

f = [(ysim(:,1)-yexp(:,1)) (ysim(:,2)-yexp(:,2))];

function dCdt = KineticsEqs(t,C,k)              % ODE模型方程
dCAdt = (k(1)+k(5)+k(6)+k(7))*C(1);
dCBdt = k(1)*C(1)-(k(2)+k(8)+k(9))*C(2);
dCCdt = k(5)*C(1)+k(2)*C(2)-(k(3)+k(10))*C(3);
dCDdt = k(6)*C(1)+k(9)*C(2)+k(3)*C(3)-k(4)*C(4);
dCEdt = k(7)*C(1)+k(8)*C(2)+k(10)*C(3)+k(4)*C(4);
dCdt = [dCAdt; dCBdt;dCCdt;dCDdt;dCEdt];
大神帮忙改一下啊
6楼2013-11-10 21:30:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 8 个回答

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
微分方程拟合问题,用1stOpt很好解决,搜一下有很多例子。
2楼2013-11-07 18:39:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

飞鸿印雪jay

银虫 (小有名气)

引用回帖:
2楼: Originally posted by dingd at 2013-11-07 18:39:26
微分方程拟合问题,用1stOpt很好解决,搜一下有很多例子。

请问怎么具体求解啊?现在参数k比方程的数目多,不知道怎么求解啊?想用matlab
3楼2013-11-09 21:16:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

feixiaolin

荣誉版主 (文坛精英)

优秀版主

可采用逐步线性回归方法。
4楼2013-11-09 21:47:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见