首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微分方程常微分方程

微分方程常微分方程
EN

Stack Overflow用户
提问于 2015-05-28 05:52:19
回答 1查看 95关注 0票数 0

我有一个关于一阶微分方程的问题。我正在尝试用ode23ode23s来解决它们。微分方程是:

y'+3y+z=0

z'-y+z=0

初始值: y(0)=1和z(0)=1

我还想将其与解析解进行比较:

y=exp(-2x)(1-2x)

z=exp(-2x)(1+2x)

我之所以这样做,是因为我需要进行比较,以便选择更好的求解器:ode23ode23s,哪个更接近解析解。

我的代码是:

代码语言:javascript
复制
function dy=projectb1(t,y)

%y'=-4y

%z'= 0
%y(1)=y'
%y(2)=z'

dy = [-4*y(2); 0*y(1)];

和:

代码语言:javascript
复制
% 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}')

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

EN

回答 1

Stack Overflow用户

发布于 2015-05-28 06:14:21

Matlab立即抛出的错误与以下代码行有关

代码语言:javascript
复制
plot(t23,ya,za,'r',t23,y23(:,1),'g-.',t23s,y23s(:,1),'b');

这应该是

代码语言:javascript
复制
plot(t23,ya,t23,za,'r',t23,y23(:,1),'g-.',t23s,y23s(:,1),'b');

你错过了额外的t23

另一个问题似乎是在微分方程的定义中。对于微分方程系统,Matlab套件传递一个向量x,它的组件是您试图近似的函数值。因此,如下例所示,x的第一个分量是时间t时的值yx的第二个分量是时间t时的z的值

代码语言:javascript
复制
function dx = projectb1(t,x)
    y = x(1);
    z = x(2);

    dy = -3*y - z;
    dz =    y - z;

    dx = [dy;dz];
end

我将输入的y更改为x,以明确输入的是yz的值的向量。

另外,请注意,虽然ode23具有初始条件[1,1],但ode23s具有[1,0],这意味着它正在解决不同的初始值问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30493782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档