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

如何让scipy.optimize.least_squares仅返回解向量x?

如何用scipy.optimize.least_squares仅获取线性方程组的解向量x

嘿,刚接触Python遇到这种小问题很正常,别担心!我来帮你理清思路,搞定这个需求~

首先,你之前尝试的spo.least_squares(test_function, x0)[0]无效,大概率是因为least_squares返回的不是一个可通过索引[0]直接获取解的结构——它返回的是一个OptimizeResult对象,这是一个类似字典的结果容器,你需要通过它的属性来提取解向量。

正确的实现步骤

  1. 确保正确导入模块:首先要把scipy的优化模块导入进来,通常我们这么写:

    import scipy.optimize as spo
    import numpy as np
    
  2. 定义残差函数:least_squares需要的是残差函数,对于线性方程组Ax = b,残差就是r(x) = Ax - b(也就是每个方程的预测值和真实值的差)。举个例子,假设我们有这样的线性方程组:

    1*x1 + 2*x2 = 7
    3*x1 + 4*x2 = 8
    5*x1 + 6*x2 = 9
    

    对应的残差函数可以这么写:

    def residual(x):
        A = np.array([[1, 2], [3, 4], [5, 6]])
        b = np.array([7, 8, 9])
        return A @ x - b
    
  3. 调用least_squares并提取解:调用函数后,通过result.x就能直接拿到解向量了,完整代码示例:

    # 初始猜测值,随便给一个就行,比如全0
    x0 = np.array([0, 0])
    # 求解
    result = spo.least_squares(residual, x0)
    # 提取解向量x
    x = result.x
    print("解向量x:", x)
    

额外小提示

如果你的问题是纯线性方程组,其实用scipy.linalg.lstsq会更直接,它专门用于最小二乘求解线性系统,代码更简洁:

from scipy.linalg import lstsq

A = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([7, 8, 9])
x, _, _, _ = lstsq(A, b)
print("解向量x:", x)

不过如果你因为后续计算需要用least_squares的框架(比如后续要扩展到非线性问题),那之前的方法完全没问题。

内容的提问来源于stack exchange,提问作者Lukas Jagersberger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:18