从系列:在MATLAB中求解ode
克里夫硅藻土,MathWorks
如果一个问题的解变化缓慢,就说它是刚性的,但也有变化迅速的附近解,因此数值方法必须采取小步骤才能得到令人满意的结果。万博 尤文图斯火焰模型显示了刚度。名称以“s”结尾的ODE求解器,如ode23和ode15,采用隐式方法,用于复杂的问题。这些方法每一步需要更多的工作,但需要更少的步骤。
我想通过运行ode45来说明刚度的重要概念,这是主要的MATLAB ODE求解器,在我们的火焰例子上。微分方程是y ' = y²- y³,我要选择一个非常小的初始条件,10 ^ (- 6)t的最终值是2除以y零,我要给出一个适中的精度要求,10的- 5次方。
现在让我们运行带有默认输出的ode45。看,它移动得非常慢。它需要很多步骤。我按下停止键。它工作非常努力。让我们放大,看看为什么它有这么多步骤,非常密集的步骤。
这是刚度。它满足了我们的精度要求。所有这些步骤都在1的10 ^(- 6)次方范围内,但步骤非常小。这些步骤是如此之小,以至于图形甚至无法分辨步长。
这是刚度。这是一个效率问题。它在做我们要求的事情。它满足了精度要求,但必须采取非常小的步骤。
我们试试另一个ODE解,ode23。把这个改成23,看看效果如何。出于同样的原因,它也采取了非常小的步骤。如果我们放大这里,我们会看到同样的行为。但为了达到预期的精度,它正在采取非常小的步骤。
现在让我介绍一个新的解算器ode23。s代表刚度。这是为了解决棘手的问题。然后砰的一声,它上升了,拐了个弯,只需要几步就能到达最终的结果。在那里它很快地转弯。
我们马上就会看到ode23s是如何工作的,但首先让我们试着定义刚度。这是一个没有精确数学定义的定性概念。这取决于问题本身,也取决于求解器和精度要求。
但这是一个很重要的概念。如果一个问题的求解速度很慢,我们就说这个问题是僵硬的,但如果一个问题的近处解很快,我们就说它是僵硬的。万博 尤文图斯因此,数值方法必须采取小步骤才能得到满意的结果。
常微分方程的刚性方法必须是隐式的。它们必须包含从向前的时间步向向后看的公式。这些方法的原型是反向欧拉方法,或隐式欧拉方法。
这个公式,定义了y (n + 1)但是没有告诉我们如何计算它。我们要解出y (n + 1)我不打算详细讲我们是怎么做的。它涉及到一些类似于牛顿法的东西,需要知道导数,或者f的导数的近似值,但这让你对僵硬法有了一个概念。
我喜欢做一个类比,就像在我们西南地区的峡谷中徒步旅行一样。像ode23和45这样的显式方法在峡谷的壁上行走,在峡谷的两侧来回行走,在峡谷中缓慢前进。而隐式方法,比如ode15s,向前看沿着峡谷往下看,向前看你想去的地方,在峡谷中快速前进。
僵硬解算器,ode23s,使用一个隐式二阶公式和一个相关的三阶误差估计。它在每一步求f关于t和f的偏导数,代价很大。它在粗略的误差公差上很有效,比如图形精度。而且它的开销相对较低。
通过比较,刚性求解器ode15s,可以配置为使用可变阶数值微分公式NDF,或与向后微分公式BDF相关的。这两种情况都不会在前面的步骤中保存函数的几个值。顺序自动在1和5之间变化,它评估偏导数的频率更低,并且在更高的公差下比23更有效。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。