python上的线性代数

2024-05-29 10:20:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用numpy.linalg.solve来解一个线性代数方程,但我收到一条错误消息,说“数组的最后2维必须是正方形”。请给我点光谢谢!!这是我的代码:

import numpy as np
from numpy. linalg import solve

A = np.array([[3,-1,-1,0,0,0], [-1,4,-1,-1,0,0], [0,0,-1,-1,4,-1], [0,0,0,-1,-1,3]],float)

w = np.array([5,5,0,0],float)

v = solve(A,w)

print(v)

Tags: 代码importnumpy消息as错误np线性
3条回答

这个误差基本上说的是线性系统不能显式地求解。这是因为你有6个变量,只有4个方程。换句话说,系数矩阵必须是平方矩阵。 在下列情况下引发错误:

max(a.shape[-2:]) != min(a.shape[-2:]):

正如igavriil已经写过的,numpy.linalg.solve只能用来寻找一个确定的系统(即sqare系数矩阵)的(精确)解。 如果你的系统是欠定或过定的,通常没有精确的解。

如果要找到近似解,可以使用numpy.linalg.lstsq。它使用一种称为“最小二乘拟合”的方法来寻找一种能使总体误差最小化的解决方案。

因此,如果您想要A x=b并且A不是正方形,您可以简单地执行以下操作:

A_pseudoinverse = np.linalg.pinv(A)
x = A_pseudoinverse @ b

这和@jandjob的答案是一样的,或者至少足够接近了。

相关问题 更多 >

    热门问题