最近,我一直在比较scipy 中的不同非线性求解器,并且对 Scipy Cookbook 中的 Newton-Krylov 示例印象特别深刻,他们在大约 20 行代码中求解了具有非线性反应项的二阶微分方程。
我修改了示例代码来求解半导体异质结构的非线性泊松方程(也称为泊松-玻尔兹曼方程,参见这些注释中的第 17 页),其形式为,
(这是传递给求解器的残差函数。)
这是一个静电问题,其中和是形式的非线性函数. 这里的细节并不重要,但重点是非线性函数随所以残差函数可以在很大的范围内变化(略有变化.
我用 scipy 的 Newton-Krylov 数值求解这个方程,但它永远不会收敛(实际上它总是会在计算雅可比行列时报告错误)。我从Newton-Krylov求解器切换到fsolve(基于 MINPACK hybrd),它第一次工作!
Newton-Krylov 不能很好地解决某些问题是否有一般原因?输入方程是否需要以某种方式进行调节?
也许需要更多信息才能发表评论,但您为什么认为 fsolve 在这种情况下有效?