我需要使用Matlab解决这个一阶系统ODE

时间:2015-05-28 07:42:57

标签: matlab ode differential-equations

我必须使用Matlab解决这个一阶系统ODE。

y'+ y - z - u = 0.

z' - y + z - u = 0。

你' - y - z - u = 0。

y(0)= 1,z(0)= 0,u(0)= 0

上述一阶ODE系统的解析解是:

y =(1/3)e ^ -x +(1/2)e ^ -2x +(1/6)e ^ 2x

z =(1/3)e ^ -x - (1/2)e ^ -2x +(1/6)e ^ 2x

u =(1/3)e ^ 2x - (1/3)e ^ -x

我有这个代码来解决它并绘制我使用ODE求解器和声明中的解析解得到的数值解。

----------
clear
%options= odeset('RelTol',1e-5); 
options= odeset('RelTol',1e-5,'AbsTol',1e-7); 

[t23,y23]= ode23('functionB',[0 1],[1 0 0],options);
[t23s,y23s]= ode23s('functionB',[0 1],[1 0 0],options);

figure
ya =((1/3)*exp(-t23) + (1/2)*exp(-2*t23) + (1/6)*exp(2*t23));
za =((1/3)*exp(-t23) - (1/2)*exp(-2*t23) + (1/6)*exp(2*t23));
ua =((1/3)*exp(2*t23) + (1/3)*exp(-t23));
plot(t23,ya,t23,za,t23,ua);
title('\bf{Analytical solutions }')

figure
plot(t23,y23(:,1),'m-.',t23,y23(:,2),'g:', t23,y23(:,3),r);
title('\bf{Numerical solutions using} \it{ode23}')


figure
plot(t23s,y23s(:,1),'m-.',t23s,y23s(:,2),'g:', t23s,y23s(:,3),r);
title('\bf{Numerical solutions using} \it{ode23s}')

%legend('ya','ode23','ode23s',0)
%text(3.4,-1.7,'ya = -2sin(t) - cos(2t) ')
%title('\bf{Analytical and numerical solutions using} \it{ode23, ode23s}')
----------

我还有函数functionB:

-------
function dy= functionB(t,y)

%-y+z+u
%y-z+u
%y+z+u

dy =[??????];

-------

我不知道如何在函数代码中编写解决方案,以便在我的代码中使用它。

如果有人可以帮助我,我会非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:1)

MATLAB文档有关于此的some good examples

你必须像这样重新安排你的ODE:

y' = -y + z + u = 0
z' =  y + z + u = 0
u' =  y + z + u = 0

然后,您yy(1) zy(2) u代替y(3),现在您可以像这样编写您的函数:

function dy = functionB(t,y)

dy = zeros(3,1);

dy(1) = -y(1)+y(2)+y(3);
dy(2) =  y(1)-y(2)+y(3);
dy(3) =  y(1)+y(2)+y(3);

end