我遇到了一阶微分方程的问题。
我试图通过ode23
和ode23s
来解决这些问题。
微分方程是:
ý&#39 + 3Y + z = 0的
ž' -y + z = 0的
带有初始值: y(0)= 1且z(0)= 1
我还想将其与分析解决方案进行比较:
Y = EXP(-2x)(1-2倍)
Z = EXP(-2x)(1 + 2×)
我想这样做,因为我需要进行比较才能选择更好的求解器:ode23
或ode23s
,无论哪个更接近解析解。
我的代码是:
function dy=projectb1(t,y)
%y'=-4y
%z'= 0
%y(1)=y'
%y(2)=z'
dy = [-4*y(2); 0*y(1)];
和
% Comparison of analytical solution
clear
options= odeset('RelTol',1e-4,'AbsTol', [1e-4 1e-4]);
%figure
%t1=cputime;
[t23,y23]= ode23('projectb1',[0 12],[1 1],options);
[t23s,y23s]= ode23s('project1',[0 20],[1 0],options);
%tobl = cputime -t1
figure
ya=exp(-2*t23).*(1-2*t23);
za=exp(-2*t23).*(1+2*t23);
plot(t23,ya,za,'r',t23,y23(:,1),'g-.',t23s,y23s(:,1),'b');
%legend('ya','ode23','ode23s',0)
text(3.4,-1.7,'ya')
title('\bf{Analytical and numerical solutions using} \it{ode23s, ode23}')
但它不起作用。有人能帮助我吗?
答案 0 :(得分:0)
Matlab立即抛出的错误与行
有关plot(t23,ya,za,'r',t23,y23(:,1),'g-.',t23s,y23s(:,1),'b');
这应该是
plot(t23,ya,t23,za,'r',t23,y23(:,1),'g-.',t23s,y23s(:,1),'b');
你错过了额外的t23
。
另一个问题似乎出现在微分方程的定义中。
对于微分方程组,Matlab ODE套件传递一个向量x
,其组件是您尝试近似的函数的值。
因此,如下例所示,x
的第一个组成部分是时间y
的{{1}}值,t
的第二个组成部分是{{}的值1}}时间x
:
z
我将输入t
更改为function dx = projectb1(t,x)
y = x(1);
z = x(2);
dy = -3*y - z;
dz = y - z;
dx = [dy;dz];
end
,以明确输入的内容是值为y
和x
的向量。
另请注意,虽然y
的初始条件为z
,但ode23
有[1,1]
,这意味着它正在解决不同的初始值问题。