24小时热门版块排行榜    

查看: 518  |  回复: 3

你的CEO

铁虫 (小有名气)

[求助] 有关反应动力学推导的matlab程序

请虫友大神帮小弟看看为啥误差这么大,小弟在此谢过了

*****程序行数较多帖子不能完全 显示,只能添加附件了,烦请大神帮看下,小弟在此谢过了!*********
回复此楼
未来为你而来!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

你的CEO

铁虫 (小有名气)

function KineticsEst1_int
% 动力学参数辨识: 用积分法进行反应速率分析得到速率常数k和反应级数n
% Analysis of kinetic rate data by using the integral method
% Reaction of the type -- rate = kCA^order
% order - reaction order
% rate -- reaction rate vector
% YA -- yield vector for reactant A
% T -- vector of reaction time
% N -- number of data points
% k- reacion rate constant

clear all
clc
format short
global Y_exp Y_sim
tspan = [0,21.065];  % t=w/F(MEOH.0),W:催化剂的质量,F(MEOH.0):甲醇的初始进料流率
k0 = [0 0 0 0];  
lb = [0 0 0 0];
ub = [+inf  +inf  +inf  +inf ];
Y0 = [0 0 0 0 ];
Y_exp =[0.2245 0.0086 0.0013 0.0038;
        0.2503 0.0082 0.0009 0.0018;
        0.267  0.0098 0.0013 0.003;
        0.2814 0.0094 0.0015 0.0012;
        ];                                              %同一空速四个不同组成配比下的反应管出口生成物的收率Y

% 使用函数lsqnonlin()进行参数估计
[k,resnorm,residual,exitflag,output,lambda,jacobian] = lsqnonlin(@ObjFunc,k0,lb,ub,optimset('TolFun',1.0000e-20),tspan,Y0,Y_exp);      
ci = nlparci(k,residual,jacobian)
%[k,resnorm,residual,exitflag,output,lambda,jacobian] = lsqnonlin(@ObjFunc4LNL,k0,lb,ub,optimset('TolFun',1.0000e-6),Y0,Y_exp);      
%ci = nlparci(k,residual,jacobian)
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.4f ± %.4f\n',k(1),ci(1,2)-k(1))
fprintf('\tk2 = %.4f ± %.4f\n',k(2),ci(2,2)-k(2))
fprintf('\tk3 = %.4f ± %.4f\n',k(3),ci(3,2)-k(3))
fprintf('\tk4 = %.4f ± %.4f\n',k(4),ci(4,2)-k(4))

fprintf('\tThe sum of the squares is: %.1e\n\n',resnorm)
%拟合效果图(实验与拟合的比较)
%[t4plot Y4plot] = ode45(@KineticsEqs1,[tspan(1)  tspan(end)],Y0,[],k0)
%figure
%plot(tspan,Y_exp(:,1),'bo',t4plot,Y4plot(:,1),'r--');
%legend('Exp','Model')
%xlabel('空时t=w/F_A_0, h')
%ylabel('收率Y_D_M_M')
%title('拟合效果图')
%figure
%plot(tspan,Y_exp(:,2),'bo',t4plot,Y4plot(:,2),'r--');
%legend('Exp','Model')
%xlabel('空时t=w/F_A_0, h')
%ylabel('收率Y_M_F')
%title('拟合效果图')
%figure
%plot(tspan,Y_exp(:,3),'bo',t4plot,Y4plot(:,3),'r--');
%legend('Exp','Model')
%xlabel('空时t=w/F_A_0, h')
%ylabel('收率Y_F_A')
%title('拟合效果图')
%figure
%plot(tspan,Y_exp(:,4),'bo',t4plot,Y4plot(:,4),'r--');
%legend('Exp','Model')
%xlabel('空时t=w/F_A_0, h')
%ylabel('收率Y_D_M_E')
%title('拟合效果图')

function f = ObjFunc(k,tspan,Y0,Y_exp)           % 目标函数

[t,Y_sim1] = ode45(@KineticsEqs1,tspan,Y0,[],k)   
f1 = 1*(Y_sim1(end,1)-Y_exp(1,1));
f2= 10*(Y_sim1(end,2)-Y_exp(1,2));
f3= 10*(Y_sim1(end,3)-Y_exp(1,3));
f4= 10*(Y_sim1(end,4)-Y_exp(1,4));
[t,Y_sim2] = ode45(@KineticsEqs2,tspan,Y0,[],k)  
f5 = 1*(Y_sim2(end,1)-Y_exp(2,1));
f6 =10*(Y_sim2(end,2)-Y_exp(2,2));
f7 =10*(Y_sim2(end,3)-Y_exp(2,3));
f8 =10*(Y_sim2(end,4)-Y_exp(2,4));
[t,Y_sim3] = ode45(@KineticsEqs3,tspan,Y0,[],k)  
f9 = 1*(Y_sim3(end,1)-Y_exp(3,1));
f10 =10*(Y_sim3(end,2)-Y_exp(3,2));
f11 =10*(Y_sim3(end,3)-Y_exp(3,3));
f12 =10*(Y_sim3(end,4)-Y_exp(3,4));
[t,Y_sim4] = ode45(@KineticsEqs4,tspan,Y0,[],k)  
f13 = 1*(Y_sim4(end,1)-Y_exp(4,1));
f14 =10*(Y_sim4(end,2)-Y_exp(4,2));
f15 =10*(Y_sim4(end,3)-Y_exp(4,3));
f16 =10*(Y_sim4(end,4)-Y_exp(4,4));
f=[f1  f2  f3  f4;
   f5  f6  f7  f8;
   f9  f10 f11 f12;
   f13 f14 f15 f16;
   ]
% ------------------------------------------------------------------
function dYdt = KineticsEqs1(t,Y,k)
%p=[0.9 0.5 0.7 0.8 0.6];
%m=[0.6 0.4 0.5 0.3 0.25];     m:氧醇比
%n=[5.4 2 2 2.1 2];    % n:氮醇比
yMEOH1=(1+0.6)/(0.6+2.5*Y(1)+2*Y(2)+1.5*Y(3)+2*Y(4)+5.4);
yO21=(0.6-0.5*Y(1)-Y(2)-0.5*Y(3))/(0.6+2.5*Y(1)+2*Y(2)+1.5*Y(3)+2*Y(4)+5.4);
a=Y(1)

dYdt=...
[k(1)*(0.9^2)*yMEOH1^0.5*yO21^1.5;
k(2)*(0.9^2)*yMEOH1^1*yO21^1;
k(3)*(0.9^2)*yMEOH1^1*yO21^1;
k(4)*(0.9^2)*yMEOH1^1.0*yO21^1;
];

function dYdt = KineticsEqs2(t,Y,k)
%p=[0.9 0.5 0.7 0.8 0.6];
%m=[0.6 0.4 0.5 0.3 0.25];     m:氧醇比
%n=[5.4 2 2 2.1 2];    % n:氮醇比
yMEOH2=(1+0.4)/(0.6+2.5*Y(1)+2*Y(2)+1.5*Y(3)+2*Y(4)+2);
yO22=(0.4-0.5*Y(1)-Y(2)-0.5*Y(3))/(0.4+2.5*Y(1)+2*Y(2)+1.5*Y(3)+2*Y(4)+2);
dYdt=...
[k(1)*(0.5^2)*yMEOH2^0.5*yO22^1.5;
k(2)*(0.5^2)*yMEOH2^1*yO22^1;
k(3)*(0.5^2)*yMEOH2^1*yO22^1;
k(4)*(0.5^2)*yMEOH2^1.0*yO22^1;
];

function dYdt = KineticsEqs3(t,Y,k)
%p=[0.9 0.5 0.7 0.8 0.6];
%m=[0.6 0.4 0.5 0.3 0.25];     m:氧醇比
%n=[5.4 2 2 2.1 2];    % n:氮醇比
yMEOH3=(1+0.5)/(0.6+2.5*Y(1)+2*Y(2)+1.5*Y(3)+2*Y(4)+2);
yO23=(0.5-0.5*Y(1)-Y(2)-0.5*Y(3))/(0.5+2.5*Y(1)+2*Y(2)+1.5*Y(3)+2*Y(4)+2);
dYdt=...
[k(1)*(0.7^2)*yMEOH3^0.5*yO23^1.5;
k(2)*(0.7^2)*yMEOH3^1*yO23^1;
k(3)*(0.7^2)*yMEOH3^1*yO23^1;
k(4)*(0.7^2)*yMEOH3^1.0*yO23^1;
];

function dYdt = KineticsEqs4(t,Y,k)
%p=[0.9 0.5 0.7 0.8 0.6];
%m=[0.6 0.4 0.5 0.3 0.25];     m:氧醇比
%n=[5.4 2 2 2.1 2];    % n:氮醇比
yMEOH4=(1+0.8)/(0.6+2.5*Y(1)+2*Y(2)+1.5*Y(3)+2*Y(4)+2.1);
yO24=(0.3-0.5*Y(1)-Y(2)-0.5*Y(3))/(0.3+2.5*Y(1)+2*Y(2)+1.5*Y(3)+2*Y(4)+2.1);
dYdt=...
[k(1)*(0.8^2)*yMEOH4^0.5*yO24^1.5;
k(2)*(0.8^2)*yMEOH4^1*yO24^1;
k(3)*(0.8^2)*yMEOH4^1*yO24^1;
k(4)*(0.8^2)*yMEOH4^1.0*yO24^1;
];
未来为你而来!
2楼2015-09-08 10:43:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

你的CEO

铁虫 (小有名气)

结果:f =
   -0.0066   -0.0231   -0.0040   -0.0217
   -0.0716   -0.0243   -0.0007   -0.0031
    0.0810    0.0129    0.0029   -0.0013
   -0.0387    0.0143    0.0005    0.0160
第一列的结果误差达到30%,偏大了
未来为你而来!
3楼2015-09-08 10:45:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

你的CEO

铁虫 (小有名气)

4楼2015-09-11 07:55:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 你的CEO 的主题更新
信息提示
请填处理意见