6个微分方程组

时间:2014-02-12 04:18:14

标签: matlab

我正在尝试使用matlab解决6个微分方程组。我在一个名为Untitled.m

的函数m文件中创建了一组6个微分方程
function ydot=Untitled(t,y)
ydot = zeros(6,1);
%y(1)=A
%y(2)=B
%y(3)=C
%y(4)=D
%y(5)=P
%y(6)=T;

A=0.50265;
k11=(333/106.7)*1.15*1000*exp(-59660/(8.314*960));
k31=(333/40)*73.6*exp(-47820/(8.314*960));
k32=(333/14.4)*1.79*exp(-30950/(8.314*960));
k21=(106.7/40)*426*exp(-68830/(8.314*960));
k22=(106.7/14.4)*0.000599*exp(-57740/(8.314*960));
Pcat=1450;
g=9.81;
%phi=exp(-(59100*exp(-67210/(8.314*y(6))))*((0.50265*1450*33)/143.64));
H11=393000;
H31=795000;
H32=1200000;
H21=1150000;
H22=151000;
E=1-((285.765*17.56)/((6.1*1450)+(17.56*285.765)));
Fcat=143.64;
Cpcat=1087;
%Cp=1000*(y(1)*3.3+y(2)*3.3+y(3)*3.3+y(4)*1.087);
F=19.95;




ydot(1)= -(A*(1-E)*Pcat*(k11+k31+k32)*(exp(-(59100*exp(-67210/(8.314*y(6))))*((0.50265*1450*33)/143.64)))*y(1)*y(1))/F;
ydot(2)=  (A*(1-E)*Pcat*(k11*y(1)*y(1)-(k21+k22)*y(2))*(exp(-(59100*exp(-67210/(8.314*y(6))))*((0.50265*1450*33)/143.64))))/F;
ydot(3)=  (A*(1-E)*Pcat*(k31*y(1)*y(1)+ k21*y(2))*(exp(-(59100*exp(-67210/(8.314*y(6))))*((0.50265*1450*33)/143.64))))/F;
ydot(4)=  (A*(1-E)*Pcat*(k32*y(1)*y(1)+k22*y(2))*(exp(-(59100*exp(-67210/(8.314*y(6))))*((0.50265*1450*33)/143.64))))/F;
ydot(5)= -(Pcat*g*(1-E));
%dydz(6)= ((1-E)*Pcat*A*(((k11+k31+k32)*phi*y(1)*y(1)*-H1)+ ((k11*y(1)*y(1)-(k21+k22)*y(2))*phi*-H2)+((k31*y(1)*y(1)+ k21*y(2))*phi*H3)+((k32*y(1)*y(1)+k22*y(2))*phi*H4)))/(F*Cp+Fcat*Cpcat)
ydot(6) = (((exp(-(59100*exp(-67210/(8.314*y(6))))*((0.50265*1450*33)/143.64)))*(1-E)*Pcat*A)*(y(1)*y(1)*((k11*H11)+(k31*H31)+(k32*H32))+y(2)*((k21*H21)+(k22*H22)))/((F*(1000*(y(1)*3.3+y(2)*3.3+y(3)*3.3+y(4)*1.087)))+(Fcat*Cpcat)));

然后我创建了另一个文件,用于使用ODE45求解器求解方程式

function ode()

options = odeset('RelTol',1e-1,'AbsTol',[1e-1 1e-1 1e-1 1e-1 1e-1 1e-1 ]);
Y0=[1.0;0.0;0.0;0.0;180000.0;959.81];
zspan=0:0.1:33;

[z,y]= ode45(@Untitled,zspan,Y0,options);

figure
hold on
plot(z,y(:,5));

代码正在编译,但没有求解微分方程组,只给出了变量初始值的直线图。例如,y(1)的初始值是1,所以我得到y = 1的图。

任何人都可以告诉我出了什么问题

1 个答案:

答案 0 :(得分:2)

似乎你的衍生品严重缩放,或者只是简单不正确。

ydot的第5个元素是

-(Pcat*g*(1-E));

仅包含常量,因此常量。因此,这将导致具有负斜率的直线。

ydot的其他5个元素包含

等字词
exp(-59100*exp(-67210/(...))*(...))

这几乎肯定会下溢,这意味着,该值太小而无法用双精度数表示,因此将等于0.这些也会产生直线,这次是水平的,并且值等于它们的值初始值。

exp(-745.1332...)(等于4.940656458412465e-324)是您能够达到的最低值。这个值已经很棘手,因为它是退化的(exp(-724) < realmin)。

所以要么搞砸了你的方程式,要么你需要重新调整方程式,以便解空间内上下溢的概率减小到零。