We introduce an efficient numerical method for second order linear ODEs whose solution may vary between highly oscillatory and slowly changing over the solution interval. In oscillatory regions the solution is generated via a nonoscillatory phase function that obeys the nonlinear Riccati equation. We propose a defect-correction iteration that gives an asymptotic series for such a phase function; this is numerically approximated on a Chebyshev grid with a small number of nodes. For analytic coefficients we prove that each iteration, up to a certain maximum number, reduces the residual by a factor of order of the local frequency. The algorithm adapts both the step size and the choice of method, switching to a conventional spectral collocation method away from oscillatory regions. In numerical experiments we find that our proposal outperforms other state-of-the-art oscillatory solvers, most significantly at low-to-intermediate frequencies and at low tolerances, where it may use up to $10^6$ times fewer function evaluations. Even in high frequency regimes, our implementation is on average 10 times faster than other specialized solvers.
翻译:对二阶线性代码采用高效的数字方法,对于二阶线性代码,其解决方案在溶液间隔高度悬浮和缓慢变化之间可能存在差异。在悬浮区域,解决方案是通过一个符合非线性里卡蒂方程式的非串流阶段函数生成的。我们建议了一种缺陷校正迭代法,为这种阶段函数提供一个无线性序列;这在数字上接近于切比谢夫网格上,有少量节点。对于分析系数,我们证明每次迭代,最多不超过一定的上限,会以本地频率的某一因子减少剩余值。算法既调整步骤大小,又调整方法的选择,转而采用传统的光谱性合用法,远离悬浮区域。在数字实验中,我们发现我们的提案比其他状态的电动解析解答器(在低端至中间频率和低容忍度的频率上最为显著的接近于低频点),因此,每次迭代之以本地频率的某个因子顺序减少10-6倍。即使在高频系统中,我们的实施速度也平均10倍于其他的解算法。