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