| 查看: 526 | 回复: 2 | |||
[交流]
【求助】修改程序
|
|
目前下面的程序能得到r=kPA^ n PB^ m中的k、n、m值,但是我想把程序修改成能直接求r=k0e(-Ea/RT)PA^nPB^m,中的k0、Ea、n和m。应该如何修改程序,求大神赐教,不甚感激。 数据如下: T=310+273.15K时 PA0 = [3.7449 3.7500 3.7548 3.7568]; PB0 = [0.0807 0.0835 0.0861 0.0871]; r = [0.0019 0.0022 0.0024 0.0025]; T=330+273.15K时 PA0 = [3.7138 3.7215 3.7448 3.7572]; PB0 = [0.04 0.0458 0.0618 0.071]; r = [0.0041 0.0097 0.0109 0.0111]; Ps:R是常数R=8.3145 r=kPA^nPB^m的程序 function KineticsEst3 % 动力学参数辨识: 用微分法进行反应速率分析得到速率常数k和反应级数n % Reaction of the type -- rate = kCA^order % order - reaction order % rate -- reaction rate vector % CA -- concentration vector for reactant A % T -- vector of reaction time % N -- number of data points % k- reacion rate constant clear all clc global negr0m PA0 PB0 PA0 = [3.7449 3.7500 3.7548 3.7568]; PB0 = [0.0807 0.0835 0.0861 0.0871]; % negr0m = [0.5 0.63 0.83 1.0 1.28 0.33 0.8 1.5 2.21 3.33]; % Problems ... negr0m = [0.0019 0.0022 0.0024 0.0025]; % 用多变量线性回归方法估计动力学参数 y = log(negr0m); x1 = log(PA0); x2 = log(PB0); y = y'; X = [ones(size(y)) x1' x2']; [b,bint] = regress(y,X,0.1); k = exp(b(1)) n = b(2) m = b(3) % 用多变量非线性回归方法(以线性回归的结果作为非线性回归的初值) beta0 = [k n m]; lb = [0 0 0]; ub = [1 3 3]; [beta,resnorm,resid,exitflag,output,lambda,jacobian] = ... lsqnonlin(@ObjFunc,beta0,lb,ub); ci = nlparci(beta,resid,jacobian) % 残差关于拟合值的残差图 negrA0c = Rate(beta,PA0,PB0); plot(negrA0c,resid,'*') xlabel('反应速率拟合值, torr s^-^1') ylabel('残差R, torr s^-^1') refline(0,0) % 参数辨识结果 fprintf('Estimated Parameters:\n') fprintf('\tk = %.4f ± %.4f\n',beta(1),ci(1,2)-beta(1)) fprintf('\tn = %.2f ± %.2f\n',beta(2),ci(2,2)-beta(2)) fprintf('\tm = %.2f ± %.2f\n',beta(3),ci(3,2)-beta(3)) fprintf('\tThe sum of the squares is: %.1e\n\n',resnorm) % ------------------------------------------------------------------ function f = ObjFunc(beta) global negr0m PA0 PB0 f = negr0m - Rate(beta,PA0,PB0); % ------------------------------------------------------------------ function negrA = Rate(beta,PA,PB) negrA = beta(1)*PA.^beta(2).*PB.^beta(3); % k=beta(1),n=beta(2),m=beta(3); |
» 猜你喜欢
孩子确诊有中度注意力缺陷
已经有13人回复
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
» 抢金币啦!回帖就可以得到:
东北大学数字钢铁全国重点实验室刘振宇教授课题组拟招收2026级入学博士研究生1~2名
+2/126
加拿大/英属哥伦比亚大学曹彦凯课题组招收全奖博士/博后 [机器学习/优化/控制方向]
+1/89
加拿大/英属哥伦比亚大学曹彦凯课题组招收全奖博士/博后 [机器学习/优化/控制方向]
+1/88
湘潭大学化学学院陈华杰教授课题组招收有机/高分子方向的博士研究生
+1/82
华东师范大学 程义云 课题组招2026年博士研究生 - 有机化学、材料化学、高分子合成等
+1/79
Call for papers,征稿
+1/70
大叔征婚
+1/59
南昌大学药学博士招生
+1/47
中国科大-合肥国家实验室冷原子量子中继团队招聘启事
+2/10
双一流天津工业大学电信学院李鸿强教授招收2026年申请审核制博士3人
+1/8
大连工业杰青、长江团队-生物质材料方向招收2026级博士生
+1/7
浙江大学-化工学院刘平伟课题组-二维材料/功能聚合物开发
+1/6
长江大学武汉校区诚招工程热物理、油气、电气等新能源博士-2025
+1/5
欢迎报考中山大学课题组,确保2025-2026级硕士研究生名额
+1/5
有没有一款可以听文献的APP
+1/4
液相方法和氨基酸分析仪有什么不一样?
+1/3
东莞理工学院-大连化物所联合招聘光催化方向博士后2名(年薪48W)
+1/3
北京理工大学珠海校区徐先臣课题组招聘博士后/硕博士
+1/2
南京航空航天大学核科学与技术方向招收博士生
+1/2
兰州大学物理学院韩卫华教授课题组招收 2026年博士研究生 (物理、电子以及核能源方向)
+1/1
★ ★
小扶摇(金币+10):太谢谢了,我先研究下,有问题的话还要麻烦下 2010-12-11 09:38:01
zzuwangshilei(金币+2):积极参与,辛苦了 2010-12-11 10:36:53
小扶摇(金币+10):太谢谢了,我先研究下,有问题的话还要麻烦下 2010-12-11 09:38:01
zzuwangshilei(金币+2):积极参与,辛苦了 2010-12-11 10:36:53
|
我把你的程序修改了一下,能运行了,但是需要增加一组实验数据,如果不懂,请给我短消息~ function KineticsEst3_1 % 动力学参数辨识: 用微分法进行反应速率分析得到速率常数k和反应级数n % Reaction of the type -- rate = kCA^order % order - reaction order % rate -- reaction rate vector % CA -- concentration vector for reactant A % T -- vector of reaction time % N -- number of data points % k- reacion rate constant clear all clc global negr0m PA0 PB0 RT PA0 = [3.7449 3.7500 3.7548 3.7568 3.7588 ]; PB0 = [0.0807 0.0835 0.0861 0.0871 0.0891]; RT=8.3*(310+273)*ones(1,5); % negr0m = [0.5 0.63 0.83 1.0 1.28 0.33 0.8 1.5 2.21 3.33]; % Problems ... negr0m = [0.0019 0.0022 0.0024 0.0025 0.0028]; % 用多变量线性回归方法估计动力学参数 y = log(negr0m); x1 = log(PA0); x2 = log(PB0); x3 =log(8.3*(310+273))*ones(1,5); y = y'; X = [ones(size(y)) x1' x2' x3']; [b,bint] = regress(y,X,0.1); k0 = exp(b(1)) n = b(2) m = b(3) Ea = b(4) % 用多变量非线性回归方法(以线性回归的结果作为非线性回归的初值) beta0 = [k0 n m Ea]; lb = [0 0 0 -10]; ub = [1 3 3 10]; [beta,resnorm,resid,exitflag,output,lambda,jacobian] = ... lsqnonlin(@ObjFunc,beta0,lb,ub); ci = nlparci(beta,resid,jacobian) % 残差关于拟合值的残差图 negrA0c = Rate(beta,PA0,PB0,RT); plot(negrA0c,resid,'*') xlabel('反应速率拟合值, torr s^-^1') ylabel('残差R, torr s^-^1') refline(0,0) % 参数辨识结果 fprintf('Estimated Parameters:\n') fprintf('\tk = %.4f ± %.4f\n',beta(1),ci(1,2)-beta(1)) fprintf('\tn = %.2f ± %.2f\n',beta(2),ci(2,2)-beta(2)) fprintf('\tm = %.2f ± %.2f\n',beta(3),ci(3,2)-beta(3)) fprintf('\tEa = %.2f ± %.2f\n',beta(4),ci(4,2)-beta(4)) fprintf('\tThe sum of the squares is: %.1e\n\n',resnorm) %------------------------------------------------------------------ function f = ObjFunc(beta) global negr0m PA0 PB0 RT f = negr0m - Rate(beta,PA0,PB0,RT); % ------------------------------------------------------------------ function negrA = Rate(beta,PA,PB,RT) negrA = beta(1)*PA.^beta(2).*PB.^beta(3).*exp(beta(4)./RT); % k=beta(1),n=beta(2),m=beta(3);3.75883.7588 |
2楼2010-12-11 09:28:21
robert2020:建议使用“引用回复该帖”,不然对方收不到你的信息。 2010-12-16 09:15:35
|
clear all clc global negr0m PA0 PB0 RT PA0 = [3.7377 3.7449 3.7500 3.7548 3.7568 3.5690 3.5859 3.5970 3.6046 3.6119 3.6161]; PB0 = [0.0769 0.0807 0.0835 0.0861 0.0871 0.0389 0.0468 0.0520 0.0554 0.0581 0.0601]; RT1=8.3145*(310+273.15)*ones(1,5); RT2=8.3145*(330+273.15)*ones(1,6); RT=[RT1 RT2]; % negr0m = [0.5 0.63 0.83 1.0 1.28 0.33 0.8 1.5 2.21 3.33]; % Problems ... negr0m = [0.0023 0.0024 0.0024 0.0025 0.0025 0.0040 0.0042 0.0044 0.0046 0.0048 0.0049]; % 用多变量线性回归方法估计动力学参数 y = log(negr0m); x1 = log(PA0); x2 = log(PB0); x3 =log(RT); y = y'; X = [ones(size(y)) x1' x2' x3']; [b,bint] = regress(y,X,0.1); k0 = exp(b(1)) n = b(2) m = b(3) Ea = b(4) % 用多变量非线性回归方法(以线性回归的结果作为非线性回归的初值) beta0 = [k0 n m Ea]; lb = [0 0 0 -10]; ub = [1 3 3 10]; [beta,resnorm,resid,exitflag,output,lambda,jacobian] = ... lsqnonlin(@ObjFunc,beta0,lb,ub); ci = nlparci(beta,resid,jacobian) % 残差关于拟合值的残差图 negrA0c = Rate(beta,PA0,PB0,RT); plot(negrA0c,resid,'*') xlabel('反应速率拟合值, torr s^-^1') ylabel('残差R, torr s^-^1') refline(0,0) % 参数辨识结果 fprintf('Estimated Parameters:\n') fprintf('\tk = %.4f ± %.4f\n',beta(1),ci(1,2)-beta(1)) fprintf('\tn = %.2f ± %.2f\n',beta(2),ci(2,2)-beta(2)) fprintf('\tm = %.2f ± %.2f\n',beta(3),ci(3,2)-beta(3)) fprintf('\tEa = %.2f ± %.2f\n',beta(4),ci(4,2)-beta(4)) fprintf('\tThe sum of the squares is: %.1e\n\n',resnorm) %------------------------------------------------------------------ function f = ObjFunc(beta) global negr0m PA0 PB0 RT f = negr0m - Rate(beta,PA0,PB0,RT); % ------------------------------------------------------------------ function negrA = Rate(beta,PA,PB,RT) negrA = beta(1)*PA.^beta(2).*PB.^beta(3).*exp(-beta(4)./RT); % k=beta(1),n=beta(2),m=beta(3);Ea=beta(4); 为什么最终的结果和 lb = [0 0 0 -10]; ub = [1 3 3 10]; 有很大关系,该如何解决 [ Last edited by 小扶摇 on 2010-12-15 at 13:35 ] |
3楼2010-12-15 13:30:40














回复此楼