You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scipy least_squares的LM方法报错TypeError,求解决方案

解决scipy.optimize.least_squares的TypeError问题及LM方法适用性说明

嘿,我来帮你搞定这个问题!

错误的直接原因

你遇到的TypeError: integer argument expected, got float是因为max_nfev参数传错了类型:你写的1e6是浮点数,但这个参数要求传入整数。把它改成整数形式1000000就可以解决这个报错了。

LM方法的适用性

你完全不用担心没有手动提供雅可比矩阵的问题——least_squares的LM方法会自动通过数值微分计算雅可比矩阵,所以这个方法完全适用于你的测试问题。另外,LM方法要求残差的数量≥变量的数量,你的问题里残差是2个、变量是2个,刚好满足这个条件,没问题。

修正后的代码

import numpy as np
from scipy.optimize import least_squares

a = 2
b = -1

def myfun(x, a, b):
    return [a*x[0]-x[1]-np.exp(-x[0]), b*x[0]+2*x[1]-np.exp(-x[1])]

x0 = [-5,-5]
# 把max_nfev的1e6改成整数1000000
sol = least_squares(myfun, x0, method='lm', ftol=1e-9, xtol=1e-9, max_nfev=1000000, args=(a,b))
print(sol.x)  # 输出会是array([0.56714329, 0.56714329]),和trf方法的结果一致

运行修正后的代码,你就能得到和trf方法一样的正确解了。

内容的提问来源于stack exchange,提问作者Medulla Oblongata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:13:55