-1

我到处搜索,我找不到任何东西。

首先,让我说我从未使用过 Mat Lab,所以我不知道我在做什么。

我尝试了几件事,但没有一个奏效。显然 y(0)=2 试图创建一个值为 2 的 0 个单位的列表?

无论如何,有人可以帮助我吗?我需要在 Mat Lab 中编写一个灵活的欧拉方法方程来求解一些这样的方程。

1) y' = 5-3sqrt(y) ; y(0)=2

当 h= .1 , .05 , .025, .01 && t =.5 ,1 , 1.5 , 2 , 2.5 ,3

我不知道我在做什么。

4

1 回答 1

5

让我们假设以恒定的时间步长来实现该方法,例如dt>0。如果我们想把方程积分到一个时间T>0,我们考虑一个时间离散化

tt = 0:dt:T;

我们最好为速度目的预先分配我们的解决方案向量,即

yy=zeros(1,length(tt));

yy将包含我们将产生的解决方案的一阶时间近似(即,很少滥用符号,

yy(1)==y_r(t=0)

yy(end)==y_r(t=T) + global error,

其中函数y_r=y_r(t) 是我们真正的解决方案)。

假设,我们有一个范式的一阶 ODE ,即

 dy_r / dt = f(y_r;t)

和一个初始数据

 y_r(t=0)=y_0

(即我们有一个柯西问题)。因此,我们应该首先初始化我们的解向量

  yy(1) = y_0;

然后,我们可以找到未来的解决方案,即

  N = length(tt);
  for t = 2 : N        // we should look at future times, thus we start from 2
                       // NOTE: this is first order explicit Euler scheme.
       yy(t) = yy(t-1) + dt*f(yy(t-1),t);
  end

我们完成了。我们现在可以绘制解决方案。

  plot(tt,yy);

现在的重点是:您对一阶准确率满意吗?

想想如果你使用这个方案来解决哈密顿问题(比如简单的谐振子),它会给你的系统带来人为的激励(正确地,你可以看到偏离正确的哈密顿轨道)。简而言之,不久之后,您的解决方案完全是人工的。

事实上,当你解决实际问题时,你必须仔细考虑你的问题和你的物理,然后选择一个合适的数值方案来解决你的方程。很快,您可能会被要求实施更准确的方案,例如Runge Kutta(您可以更好地信任它,但只是一点点,至少在其原始形式中)。

于 2012-10-25T08:05:29.347 回答