用最小二乘法求解非线性方程组的预处理

计算科学 Python 非线性方程 scipy 非线性规划 最小二乘
2021-12-17 08:10:29

我正在尝试解决一个大型非线性方程组(大约几百个方程和变量,但变量比方程少)。鉴于系统非常稀疏且庞大,我正在使用optimize.least_squareSciPy 的求解器和 Trust Regions 方法。

但是对于某些示例,找到解决方案需要很长时间,有时它会落在我认为的局部最小值或鞍点上。

我认为这些问题可能来自问题条件不佳的事实。所以我尝试在方程上添加权重,以便为所有残差提供大致相同的比例,它提高了速度和收敛性,但并不完全。

所以我想知道:python中是否有一个工具可以检测函数是否条件不良,或者在调用求解器之前对其进行预处理?

这是我用于求解器的参数:

solution = optimize.least_squares(system, xinput, method='trf, loss='soft_l1', f_scale=10, x_scale='jac')
1个回答

执行时间长的问题可能不是条件问题,这通常需要特定问题的知识来解决。您可以利用jac_sparsity输入参数的稀疏结构。这将在与您的雅可比行列式矩阵相同的位置采用零矩阵作为数组或稀疏矩阵。这将显着加快信任域子问题的求解时间,因为它将使用一种专门针对稀疏雅可比行列式的方法