微分方程ODE

时间:2015-05-27 21:52:19

标签: matlab

我遇到了一阶微分方程的问题。 我试图通过ode23ode23s来解决这些问题。 微分方程是:

ý&#39 + 3Y + z = 0的

ž' -y + z = 0的

带有初始值: y(0)= 1且z(0)= 1

我还想将其与分析解决方案进行比较:

Y = EXP(-2x)(1-2倍)

Z = EXP(-2x)(1 + 2×)

我想这样做,因为我需要进行比较才能选择更好的求解器:ode23ode23s,无论哪个更接近解析解。

我的代码是:

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}')

但它不起作用。有人能帮助我吗?

1 个答案:

答案 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 ,以明确输入的内容是值为yx的向量。

另请注意,虽然y的初始条件为z,但ode23[1,1],这意味着它正在解决不同的初始值问题。