24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1728  |  回复: 6

zhangqq72270

木虫 (正式写手)


[交流] 使用lsqnonlin函数优化动力学参数,总是得不到合理的结果

大家好:
         我最近在使用matlab回归动力学参数,首先是使用4阶龙哥库塔算法进行积分,之后使用lsqnonlin进行非线性最小二乘拟合,运行已经写好的m文件,总是得不到合理的结果,不知道是不是自己程序编写有问题,请大神指导,谢谢。
下面粘贴上自己的m文件:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
function zqq100                                                               
% 动力学ODE方程模型的参数估计
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
clc
kz0 = [1.73  -3  4.3  3.4  29.4  26.46  22.8  29.4];         % 参数初值         
lb  = [];                                                    % 参数下限
ub  = [];                                                    % 参数上限
x0  = [72516.987800        7922.540990 2213.519110 2440.339360];
KineticsData;
yexp = ExpData(:,2:5);                    % yexp: 实验数据[x1        x2        x3        x4]  

%再参数化
a = 0; b = 0.022146; d=0.000022146;
tt=a:d:b;
z = func(tt);
Tintegral = quadl(@func,a,b);              %  实际上应该是(1000/T)integral
Taverage  = Tintegral/(b-a) ;              %  实际上应该是(1000/T)average

% 优化参数设置     
options=optimset ('Display','iter','TolX',1e-25,'TolFun',1e-25,'LargeScale','off','MaxIter',2,'MaxFunEvals',inf);   

% 使用函数lsqnonlin()进行参数估计
[kz,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@ObjFunc4LNL,kz0,lb,ub,options,x0,yexp,Taverage);      
ci = nlparci(kz,residual,jacobian);

%把回归参数转化为自己需要的参数                     
k01 = exp(kz(1)+kz(5)*Taverage);                     
ke1 = exp(ci(1,2)-kz(1)+(ci(5,2)-kz(5))*Taverage);
Ea1 = kz(5)*1000*8.314;
Ee1 = (ci(5,2)-kz(5))*1000*8.314;

k02 = exp(kz(2)+kz(6)*Taverage);                     
ke2 = exp(ci(2,2)-kz(2)+(ci(6,2)-kz(6))*Taverage);
Ea2 = kz(6)*1000*8.314;
Ee2 = (ci(6,2)-kz(6))*1000*8.314;

k03 = exp(kz(3)+kz(7)*Taverage);                     
ke3 = exp(ci(3,2)-kz(3)+(ci(7,2)-kz(7))*Taverage);
Ea3 = kz(7)*1000*8.314;
Ee3 = (ci(7,2)-kz(7))*1000*8.314;

k04 = exp(kz(4)+kz(8)*Taverage);                     
ke4 = exp(ci(4,2)-kz(4)+(ci(8,2)-kz(8))*Taverage);
Ea4 = kz(8)*1000*8.314;
Ee4 = (ci(8,2)-kz(8))*1000*8.314;
% ------------------------------------------------------------------
% 输出结果
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk01 = %.4f ± %.4f\n',k01,ke1)
fprintf('\tk02 = %.4f ± %.4f\n',Ea1,Ee1)
fprintf('\tk03 = %.4f ± %.4f\n',k02,ke2)
fprintf('\tk04 = %.4f ± %.4f\n',Ea2,Ee2)
fprintf('\tEa1 = %.4f ± %.4f\n',k03,ke3)
fprintf('\tEa2 = %.4f ± %.4f\n',Ea3,Ee3)
fprintf('\tEa3 = %.4f ± %.4f\n',k04,ke4)
fprintf('\tEa4 = %.4f ± %.4f\n',Ea4,Ee4)
fprintf('  The sum of the squares is: %.1e\n\n',resnorm)


% ------------------------------------------------------------------
function f = ObjFunc4LNL(kz,x0,yexp,Taverage)
tspan = [0.000000 0.006021 0.009538 0.012340 0.014647 0.016594 0.018268 0.019730 0.020395 0.021021 0.021613 0.022146];
[t x] = ode45(@KineticEqs,tspan,x0,[],kz,Taverage);  
y(:,1:4)=x(:,1:4);
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 = KineticEqs(t,x,kz,Taverage)

T = 2E+09*t.^4 - 8E+07*t.^3 + 1E+06*t.^2 + 1593.6*t + 823.94;
D = 1000./T-Taverage;

k(1)=exp(kz(1)-kz(5)*D);
k(2)=exp(kz(2)-kz(6)*D);
k(3)=exp(kz(3)-kz(7)*D);
k(4)=exp(kz(4)-kz(8)*D);


dxdt =  ...                                                                 
[ ( - k(1)*x(1) )
   ( - k(1)*x(1) - k(3)*x(3) + k(2)*x(2) )
   ( - k(1)*x(1) + k(3)*x(3) + k(4)*x(3) )
   ( - k(2)*x(2) - k(3)*x(3) - k(4)*x(3) )
];
% ------------------------------------------------------------------
function z = func(tt)  
z =1000./( 2E+09*tt.^4 - 8E+07*tt.^3 + 1E+06*tt.^2 + 1593.6*tt + 823.94);


数据文件
% 动力学数据:
%       t          y1          y2          y3          y4  
ExpData = ...
[   0.000000        72516.987800        7922.540990            2213.519110          2440.339360
    0.006021        42499.607900        22206.384100        3306.398400          3606.838600
    0.009538        29000.355000        29930.619400        3600.077060          3836.127990
    0.012340        20185.280200        35570.546400        3528.468400          3684.127360
    0.014647        14159.635500        39715.404600        3262.616960          3307.931340
    0.016594        9923.223120            42747.821100        2919.806950          2824.661990
    0.018268        6889.657400            44873.256100        2561.423650          2313.346410
    0.019730        4712.646380            46269.306400        2219.932610          1823.752130
    0.020395        3871.540620            46727.452000        2061.574630          1592.788930
    0.021021        3166.514550            47033.087200        1914.970250          1369.417740
    0.021613        2580.686780            47184.935100        1784.008050          1149.425230
    0.022146        2121.809490            47180.789300        1679.141140          937.562404
]

[ Last edited by zhangqq72270 on 2013-8-14 at 10:15 ]
回复此楼

» 猜你喜欢

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

» 抢金币啦!回帖就可以得到:

查看全部散金贴

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

nanaxiao86

木虫 (著名写手)


祝你的问题早日解决啦~
2楼2013-08-14 10:22:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhangqq72270

木虫 (正式写手)


引用回帖:
2楼: Originally posted by nanaxiao86 at 2013-08-14 10:22:39
祝你的问题早日解决啦~

谢谢
3楼2013-08-14 10:25:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sunshine819

金虫 (小有名气)



小木虫: 金币+0.5, 给个红包,谢谢回帖
强非线性的是不是需要用其他算法,比如GA这类全局搜索的,这种问题如果给的初值不在平衡点的吸引域内是不是就没法获得很好的效果。

» 本帖已获得的红花(最新10朵)

4楼2013-08-16 11:38:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wswsjz

木虫 (职业作家)



小木虫: 金币+0.5, 给个红包,谢谢回帖
努力,再努力!再创佳绩!
5楼2013-08-16 11:48:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhangqq72270

木虫 (正式写手)


送红花一朵
引用回帖:
4楼: Originally posted by sunshine819 at 2013-08-16 11:38:32
强非线性的是不是需要用其他算法,比如GA这类全局搜索的,这种问题如果给的初值不在平衡点的吸引域内是不是就没法获得很好的效果。

现在就是很难找到合适的初始值,不知道你有没有什么好的办法
6楼2013-08-16 14:49:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhangqq72270

木虫 (正式写手)


引用回帖:
5楼: Originally posted by wswsjz at 2013-08-16 11:48:16
努力,再努力!再创佳绩!

一定
7楼2013-08-16 14:49:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zhangqq72270 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 304求调剂 +8 castLight 2026-04-16 8/400 2026-04-19 17:14 by 中豫男
[考研] 291求调剂 +12 关忆北. 2026-04-14 13/650 2026-04-19 16:50 by 中豫男
[考研] 085404 22408 309分求调剂 +10 lzmk 2026-04-14 11/550 2026-04-19 16:42 by 中豫男
[考研] 327求调剂 +27 Xxjc1107. 2026-04-13 30/1500 2026-04-19 08:22 by cuisz
[考研] 294求调剂 +15 淡然654321 2026-04-15 15/750 2026-04-19 08:20 by cuisz
[考博] 申博/考博 +3 啃面包的小书虫 2026-04-17 4/200 2026-04-17 23:54 by 阳阳阳^_^
[有机交流] 二苯甲酮酸类衍生物 50+3 小白爱主人 2026-04-17 6/300 2026-04-17 18:47 by kf2781974
[考研] 一志愿中科大材料与化工,353分还有调剂学校吗 +10 否极泰来2026 2026-04-15 12/600 2026-04-17 17:54 by mapenggao
[考研] 322求调剂 +6 tekuzu 2026-04-17 6/300 2026-04-17 13:48 by Espannnnnol
[考研] 一志愿沪9,生物学326求调剂 +9 刘墨墨 2026-04-15 9/450 2026-04-16 17:14 by 崔崔崔cccc
[基金申请] RY:中国产出的科学垃圾论文,绝对数量和比例都世界第一 +7 zju2000 2026-04-14 18/900 2026-04-16 11:36 by 欢乐颂叶蓁
[考研] 297,工科调剂? +10 河南农业大学-能 2026-04-14 10/500 2026-04-15 21:50 by noqvsozv
[考研] 通信工程求调剂!!! +6 zlb770521 2026-04-14 6/300 2026-04-15 20:00 by 学员JpLReM
[教师之家] 转长聘了 +7 简单化xn 2026-04-13 7/350 2026-04-14 14:50 by xindong
[考研] 考研调剂 +13 长弓傲 2026-04-13 14/700 2026-04-14 14:44 by zs92450
[考研] 085408光电信息工程专硕355一志愿长春光机所调剂 +6 王ymaa 2026-04-13 13/650 2026-04-14 11:33 by 王ymaa
[考研] 085600材料与化工329分求调剂 +24 叶zilin 2026-04-13 25/1250 2026-04-14 09:20 by 试管破裂
[考研] 085600材料与化工349分求调剂 +16 李木子啊哈哈 2026-04-12 17/850 2026-04-14 09:11 by fenglj492
[考研] 一志愿中南大学 0855 机械 286 求调剂 +11 不会吃肉 2026-04-12 11/550 2026-04-13 21:59 by bljnqdcc
[考研] 302求调剂 +10 易!? 2026-04-13 10/500 2026-04-13 19:04 by lbsjt
信息提示
请填处理意见