24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1709  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料求调剂 +11 一样YWY 2026-04-05 11/550 2026-04-05 23:36 by 来看流星雨10
[考研] 一志愿北交大材料工程总分358求调剂 +6 cs0106 2026-04-05 6/300 2026-04-05 16:34 by imissbao
[考研] 调剂 +3 好好读书。 2026-04-02 3/150 2026-04-05 13:02 by arrow8852
[考研] 求调剂 +4 wos666 2026-04-03 4/200 2026-04-05 11:48 by arrow8852
[考研] 生物工程求调剂 +6 喜欢还是不甘心 2026-04-05 6/300 2026-04-05 10:28 by 唐沐儿
[考研] 一志愿北京2,材料与化工308求调剂 +10 熊二想上岸 2026-04-04 10/500 2026-04-05 05:20 by houyaoxu
[考研] 325求调剂 +4 春风不借意 2026-04-04 4/200 2026-04-04 14:46 by 湘农储能材料
[考研] 一志愿北京科技大学材料工程085601,求调剂 +17 cdyw 2026-04-02 18/900 2026-04-04 11:14 by w_xuqing
[考研] 293求调剂 +5 末未mm 2026-04-02 6/300 2026-04-03 15:20 by 王保杰33
[考研] 求调剂 +4 15064154688 2026-04-03 5/250 2026-04-03 15:07 by zrongyan
[考研] 289-求调剂 +4 这里是_ 2026-04-03 4/200 2026-04-03 14:23 by 1753564080
[考研] 286求调剂 +7 Faune 2026-03-30 7/350 2026-04-03 10:14 by linyelide
[考研] 0703化学 +7 goldtt 2026-04-02 9/450 2026-04-03 09:36 by 蓝云思雨
[考研] 一志愿a区211,085601-307分求调剂 +13 党嘉豪 2026-03-31 26/1300 2026-04-03 08:33 by 495374996
[考研] 085602化工求调剂(331分) +9 111@127 2026-03-30 9/450 2026-04-02 20:00 by dick_runner
[考研] 362求调剂 +14 西南交材料专硕3 2026-03-31 14/700 2026-04-02 17:50 by yunlongyang
[考研] 302求调剂一志愿北航070300,本科郑大化学 +8 圣日耳曼条 2026-04-01 11/550 2026-04-02 07:40 by chemdavid
[考研] 化学工程专硕324分,一志愿中国矿业大学求调剂 +7 耿耿1314 2026-04-01 7/350 2026-04-02 07:40 by 尚水阁主
[考研] 生物学327,求调剂 +5 书上的梅子 2026-04-01 6/300 2026-04-02 06:47 by ilovexiaobin
[考研] 085404 22408 315分 +5 zhuangyan123 2026-03-31 6/300 2026-03-31 13:48 by limeifeng
信息提示
请填处理意见