【问题标题】:Using Matlab to solve a system of ODEs using Euler's method使用 Matlab 求解使用 Euler 方法的 ODE 系统
【发布时间】:2020-04-21 03:45:05
【问题描述】:

我创建了一个函数 Euler.m 来使用 Euler 方法求解一个 ODE 系统。我希望用这个函数来求解匿名函数func=@(t) ([x(t)+4*y(t)-exp(t);x(t)+y(t)+2*exp(t)])定义的ODE系统,初始条件由y0给出。

func=@(t) ([x(t)+4*y(t)-exp(t);x(t)+y(t)+2*exp(t)]);
y0=[4;5/4];
y_exact=@(t) [4*exp(3*t)+2*exp(-t)-2*exp(t);2*exp(3*t)-exp(-t)+exp(t)/4]; %exact solution of ODEs
a=0; % such that 
b=1; % a<t<b
N=120;
[t,y] = Euler(func,a,b,y0,N)

但是,显示以下错误:

"使用解决方案出错>@(t)([x(t)+4*y(t)-exp(t);x(t)+y(t)+2*exp(t)]) 输入参数过多。

解决方案中的错误(第 7 行) [t,y] = Euler(func,a,b,y0,N)"。

为什么会显示这个错误?

【问题讨论】:

  • 错误是你在函数Euler的第7行给func提供了太多的输入。但是,如果您不包含 Euler 函数的代码,您将无法获得答案。

标签: matlab ode


【解决方案1】:

您在编写 ODE 函数 func 时假装已经知道解决方案 x(t),y(t) 是什么。然后你要计算它的近似解。这是完全错误的方法。

右边的函数只是相空间中的一个点,所以你需要

func=@(t,y) ([y(1)+4*y(2)-exp(t);y(1)+y(2)+2*exp(t)]);

其中输入 y 是一个双分量向量。

【讨论】:

  • 谢谢,我现在明白了。那么这可以绘制成图表吗?我使用了命令:tplot=linspace(a,b); yv=y_exact(tplot); plot(tplot,y,tplot,yv,'r');,但显示错误“使用绘图向量时的错误必须是相同的长度”。
  • 试试plot(t,y,tplot,yv,'r');,让欧拉图使用欧拉点对应的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多