带边界条件的超定方程组Python求解及least_squares报错处理
问题原因
scipy.optimize.least_squares的args参数要求传入元组类型的额外参数集合,你当前直接将长度为4的列表b赋值给args,函数会自动把列表内的4个元素拆分为4个独立的位置参数,和第一个自动传入的待求解变量x一起传递给system函数,最终传入的参数总数为5,与你定义的system仅接收2个参数的逻辑冲突,触发报错。
解决方法
将b打包为单元素元组传入args即可,修正后的求解代码如下:
x = least_squares(system, np.asarray((1,1,1)), bounds=(0, 20), args = (b,)).x
求解器适配性说明
least_squares完全适配你当前带边界约束的非线性最小二乘求解场景,无需更换其他求解器:
- 它默认使用的TRF算法原生支持变量边界约束,针对这类小维度的拟合问题求解稳定性和精度都有保障
- 如果要调整求解效果,也可手动指定
method='dogbox'参数,该算法更适合小维度带边界的最小二乘问题
内容的提问来源于stack exchange,提问作者David_D
相关产品推荐
相关产品推荐

