如何让scipy.optimize.least_squares仅返回解向量x?
如何用scipy.optimize.least_squares仅获取线性方程组的解向量x
嘿,刚接触Python遇到这种小问题很正常,别担心!我来帮你理清思路,搞定这个需求~
首先,你之前尝试的spo.least_squares(test_function, x0)[0]无效,大概率是因为least_squares返回的不是一个可通过索引[0]直接获取解的结构——它返回的是一个OptimizeResult对象,这是一个类似字典的结果容器,你需要通过它的属性来提取解向量。
正确的实现步骤
确保正确导入模块:首先要把scipy的优化模块导入进来,通常我们这么写:
import scipy.optimize as spo import numpy as np定义残差函数:
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调用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
相关产品推荐
相关产品推荐

