从系列:在MATLAB常微分方程求解
克里夫硅藻土,MathWorks
如果所寻求的解变化缓慢,而附近的解变化迅速,则称问题是刚性的,因此数值方法必须采取小步骤才能得到满意的结果。金宝搏官方网站火焰模型显示了刚度。以“s”结尾的ODE求解器(如ode23和ode15)使用隐式方法,用于解决复杂的问题。这些方法每一步需要更多的工作,但是步骤要少得多。
我想通过运行ode45来说明刚度的重要概念,ode45是MATLAB中主要的ODE求解程序,在我们的flame例子中。微分方程是y '等于y²- y³,我要选择一个非常小的初始条件,10的- 6次方。t的最终值是2 / y0,我要提出一个适度的精度要求,10的- 5次方。
现在让我们运行ODE45其默认输出。现在,看到它的taking--它的移动速度很慢这里。它采取很多步骤。所以我在这里take-按下停止按钮。它的工作很辛苦。让我们在和缩放看到它为什么在这里采取这么多措施,非常密集的步骤。
这是刚度。它满足了我们的精度要求。所有这些步骤都在10 ^(- 6)/ 1范围内,但这些步骤非常小。这些步骤是如此之小,以至于图形甚至不能辨别步骤的大小。
这是刚度。这是一个效率问题。这是我们要求的。它满足了精度要求,但它必须采取非常小的步骤。
让我们尝试另一个ODE solver-- ODE23。只需将其更改为23,看看它做什么。它也采取小步出于同样的原因。如果我们在这里放大,我们将看到同样的这种行为。但它采取以达到所需的精度非常小的步骤。
现在,让我介绍一个新的求解器,ode23s。在S刚度。这是设计来解决刚性问题。只听轰的一声,这是不言而喻了,原来的角落,它只需几个步骤来获得最终结果。在那里,它原来的角落非常快。
稍后我们将看到ode23是如何工作的,但是首先让我们来定义刚度。这是一个没有精确数学定义的定性概念。这取决于问题的解决,也取决于求解器和精度的要求。
但它是一个重要的概念。我们说一个问题是僵硬如果解决方案正在寻求非常缓慢,但也有附近的解决方案非常迅速。金宝搏官方网站所以数值方法必须采取小步骤,以获得满意的效果。
常微分方程生硬的方法必须是隐含的。他们必须涉及到包括从向前时间步长向后看的公式。这些方法的原型是向后欧拉法,或隐式欧拉法。
这个公式,它定义了y (n + 1)但没有告诉我们如何计算它。我们要解这个方程,y (n + 1)我不会详细讲我们是怎么做的。它涉及到一些类似于牛顿法的东西——需要知道导数,或者f的导数的近似值。但是这给了你一个概念,你可以期望在严格的方法中得到什么。
我喜欢做一个类比采取加息在我们这里有西南的狭缝型峡谷之一。显式方法,如ODE23和45采取步骤峡谷的墙壁上来回跨越峡谷的两侧,使下峡谷进展非常缓慢。而隐式的方法,如ode15s,向前看顺着峡谷和你想要去,使峡谷的快速进步向前看。
刚性求解器,ode23s,使用隐式的二阶公式和相关联的三阶误差估计。它计算f的偏导数相对于两者是叔和f在每一步骤,所以这是昂贵的。这是在原油误差容限高效率,像图形的精度。它具有相对低的开销。
通过比较的方式,刚性求解器ode15s,可以被配置为使用所述可变顺序数值微分公式,NDF,或相关的向后分化式BDF。无论情况下,它可节省超过前面的步骤功能的几个值。顺序变化之间自动一个和五个,则计算偏导数较不频繁,并没有看到在较高的公差然后23S高效。