scipy 对pinv求解的等价形式是什么?

ct2axkht  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(151)

线性系统A @ x = b可以(至少)用两种方法求解:
1.显式地求逆,并将其应用于b,即x = np.linalg.inv(A) @ b
1.请使用x = np.linalg.solve(A, b)
从性能和数值两个方面考虑,后者通常是首选的。是否存在solve的伪逆函数pinv的类似形式?换句话说,我正在寻找一个函数psolve,使得psolve(A, b) == np.linalg.pinv(A) @ b

ahy6op9u

ahy6op9u1#

您可以使用numpy.linalg.lstsqscipy.linalg.lstsq
例如,在下面的示例中,使用numpy.linalg.pinv计算x1,使用numpy.linalg.lstsq计算x2

In [251]: A = np.arange(1, 10).reshape(3, 3)

In [252]: b = np.array([0, -1, 9])

In [253]: x1 = np.linalg.pinv(A) @ b

In [254]: x1
Out[254]: array([ 2.91666667,  0.5       , -1.91666667])

In [255]: x2, res, rnk, s = np.linalg.lstsq(A, b, rcond=None)

In [256]: x2
Out[256]: array([ 2.91666667,  0.5       , -1.91666667])

相关问题