我有一个fun具有n 个输入和n 个输出的非线性函数。我还有一个jac计算雅可比行列式的函数,它是稀疏的。我可以使用哪种 SciPy 方法(如果有)来查找 的根fun?
我很惊讶我找不到一种scipy.optimize采用稀疏矩阵格式的雅可比行列式的方法。但是我相信这可以通过牛顿方法简单地解决,所以如果这种方法不存在我很困惑。这个包中有许多拟牛顿方法可以估计雅可比,但它们似乎不太正确。唯一看起来相似的是newton_krylov它记录了一些关于稀疏预处理器的东西。这是我应该看的吗?如果没有这样的方法,我应该做如下的事情吗?
while not some_stopping_condition(x):
x -= scipy.sparse.spsolve(jac(x), fun(x))
我宁愿使用现有的 SciPy 函数,以防我做一些愚蠢的事情。值得注意的是,碰巧的是,我相信我的特定问题条件不佳,我认为我会受益于能够使用scipy.sparse.lsqr或lsmr采用阻尼参数。
顺便说一句,问题是在 3D 空间中使用 FEM 求解 2D 膜上的大位移弹性方程。问题很稀疏,因为它是 FEM。由于大位移(以及相应的格林拉格朗日应变),该问题是非线性的。条件不佳的原因是,任何节点在垂直于表面的方向上的微小扰动都会对应变能产生很小的变化(表面越平坦,变化越小)。