我必须使用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 =[??????];
-------
我不知道如何在函数代码中编写解决方案,以便在我的代码中使用它。
如果有人可以帮助我,我会非常感激。
提前致谢。
答案 0 :(得分:1)
MATLAB文档有关于此的some good examples。
你必须像这样重新安排你的ODE:
y' = -y + z + u = 0
z' = y + z + u = 0
u' = y + z + u = 0
然后,您y
,y(1)
z
和y(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