从系列:在MATLAB中求解ode
克里夫硅藻土,MathWorks
ODE2实现了一个中点方法,每个步骤有两个函数计算。这种方法的准确度是欧拉法的两倍。定义正弦函数的非线性方程就是一个例子。一个练习包括实现一个相关的梯形方法。
求解常微分方程的数值方法的成本是通过计算函数f每步的次数来衡量的。欧拉法每一步求一次f。这里有一个新方法,每一步计算两次。如果f在这一步的开始求值一次,得到斜率s1,然后用s1在区间的中间进行欧拉阶跃,函数在区间的中间求值,得到斜率s2。然后s2被用来做这个步骤。由于显而易见的原因,这被称为中点方法。
这是ode2。它实现了中点方法,每一步对函数求两次值。结构与ode1相同。同样的参数,同样的for循环,但是现在我们在这一步的开始是s1,在这一步的中间是s2,然后这一步实际上是用s2完成的。
下面是一个关于三角函数的例子。Dy / dt等于√(1 - y²)从原点开始,从0到/ 2。现在,因为我称之为一个三角的例子,你可能会——这是一个可分离变量方程进行积分,或者你可以猜测,猜测答案是正弦t。因为正弦t是余弦函数的导数(t)和的平方根1 - y的平方。
我们来设置一下。F是匿名函数1 - y²的平方根。T0是0。h = / 32。tfinal等于/ 2。y0 = 0。这是我对ode2的调用,有这五个参数,它会产生这个输出。
现在我想把它画出来。让我们让t同意它。这是一个列向量t的值,我们来画一下。在情节上做一些注解。这是我们的阴谋。这是sint的图像,由ode2生成的点。
现在我忍不住要去看这些答案。这应该是sint的值,它应该在/ 2处等于1。我们有0.997。这让你大致了解我们从这个粗糙的数值方法中得到了怎样的精度。
让我们看一下中点方法的动画。微分方程是y ' = 2y,从t0 = 0开始,步长为1,一直到3,从y0 = 10开始,用ode2。这是动画。这是t0和y0。求函数在y处的值。2乘以y0等于20,在这个斜率的区间上移动一半,得到20。求这个函数的值,斜率是40,所以我们用斜率40在区间内做一步直到50。
这是第一步。现在我们将重设绘图窗口。这里是50。求这个函数的值。斜率是100,步长是这个斜率的一半,到这个区间的中间,计算这个函数。斜率是200,所以我们用斜率200做一步,得到250。这是第二步。重设绘图窗口。求这个函数的值。斜率是500。 Take that step halfway across the interval, evaluate the slope there. The slope is 1,000, so we take a step with slope of 1,000 to get up to 1,250 as our final value.
因为这是y的一个快速增长的函数,所以我们用中点法得到的值远远大于用欧拉法得到的值。
这是一个锻炼。修改ode2,创建ode2t,实现相应的梯形方法。在区间开始时求函数值,得到s1。用s1表示整个区间。对区间右端点处的函数求值,得到s2。然后,用s1和s2的平均值。这就是梯形法。