从系列:在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值,我们画出来。并在情节上做一些注释。这是我们的阴谋。这是sin t的图像,由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的快速增长函数,我们用中点法得到的值远远大于我们用ode1得到的欧拉法得到的值。
这是一个锻炼。修改ode2,创建ode2t,它实现了同伴方法——梯形方法。在区间的开始处对函数求值,得到s1。用s1贯穿整个区间。求函数在区间的右端点处的值,得到s2。然后,用s1和s2的平均值来计算步长。这就是梯形法。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。