我有一个关于一阶微分方程的问题。我正在尝试用ode23和ode23s来解决它们。微分方程是:
y'+3y+z=0
z'-y+z=0
初始值: y(0)=1和z(0)=1
我还想将其与解析解进行比较:
y=exp(-2x)(1-2x)
z=exp(-2x)(1+2x)
我之所以这样做,是因为我需要进行比较,以便选择更好的求解器: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}')但它不起作用。有人能帮帮我吗?
发布于 2015-05-28 06:14:21
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套件传递一个向量x,它的组件是您试图近似的函数值。因此,如下例所示,x的第一个分量是时间t时的值y,x的第二个分量是时间t时的z的值
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],但ode23s具有[1,0],这意味着它正在解决不同的初始值问题。
https://stackoverflow.com/questions/30493782
复制相似问题