NDSolve 的 “DoubleStep”方法
引言
方法 "DoubleStep" 对任何一步积分法执行 Richardson 外推法的单个应用.
虽然它并不总是最优的,它是对一个方法装备一个误差估计(因而在步长上具有自适应性)并外推以增加局部准确性的阶数的总体方案.
"DoubleStep" 是外推法的一种特殊情况,但是已经作为提高效率的单独方法来实现了.
示例
扩展内置方法
方法 "ExplicitEuler" 使用欧拉方法执行一个积分步骤. 它没有局部误差控制,因此使用固定的步长.
用户自定义的方法和方法属性
积分方法可以被加入到 NDSolve 框架中.
为了让这些方法可以像内置方法一样工作,可能有必要指定各种方法属性. 那么这些属性就可以被其它方法用来建立复合积分器.
阶数和对称性
如果不知道基础方法的阶数,"DoubleStep" 不能执行 Richardson 外推法.
Richardson 外推法的结果的阶数取决于外推法是否具有幂为 或者 的局部误差展开(如果基础方法是对称的,那么就出现后者).
如果没有定义对称性的方法属性,"DoubleStep" 方法在默认情况下假定,基础积分器不是对称的.
刚性检测
用于刚性检测的方案的详细信息可以参阅 "刚性检测".
刚性检测依赖于方法的线性稳定性边界的知识,这是没有被定义的.
计算外推法下一个方法的精确线性稳定性边界可以是相当复杂的. 因此,选择了一个对所有方法适用的默认值. 这相当于考虑对指数在0处的第 p 阶幂级数展开的近似,并且忽视高阶项.
- 如果 "LocalExtrapolation" 是 True,那么根据具有阶数 p + 2(对称)或者 p + 1 的方法选择一个通用值.
- 如果 "LocalExtrapolation" 是 False,那么检查基础方法的属性 "LinearStabilityBoundary". 如果没有指定值,那么具有阶数 p 的方法的默认值被选中.
高阶
下面例子对阶数为4的经典朗格-库塔方法使用 (3) 的两个应用进行外推.
"DoubleStep" 的内部规格构建了一个具有阶数5的方法.
"DoubleStep" 的第二个应用是用来获取一个阶数为6的方法,它采用自适应步长.
一般说来,方法 "Extrapolation" 更适合于从低阶方法构建高阶积分方案.
选项总结
选项名 | 默认值 | |
"LocalExtrapolation" | True | 指定是否根据 (4) 使用局部外推法推进解 |
Method | None | 指定作为基础积分方案来使用的方法 |
"StepSizeRatioBounds" | {,4} | 指定新步长 hn+1 从当前步长 hn 的相对改变的边界,即low ≤ hn+1/h n ≤ high |
"StepSizeSafetyFactors" | Automatic | 指定安全因子,以结合进用于自适应步长的误差估计 (5)中 |
"StiffnessTest" | Automatic | 指定是否采用刚性测试功能 |
选项 "StiffnessTest" 的默认设置 Automatic 表明如果一个非刚性的基础方法被采用,则激活刚性测试.
选项 "StepSizeSafetyFactors" 的默认设置 Automatic 对一个刚性的基础方法,使用值 {9/10,4/5},而对于一个非刚性的基础方法,使用值 {9/10,13/20}.