python - 在 Python 中解决看似(但实际上不是!)超定稀疏线性系统

标签 python scipy linear-algebra

我有一个稀疏矩阵 A(使用 scipy.sparse)和一个向量 b,并且想求解 Ax = b 的 x。 A 的行数多于列数,因此它看起来是多定的;但是,A 的行是线性相关的,因此实际上 A 的行秩等于列数。例如,A 可以是

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

当 b 是

b = np.array([0., 0., 1.])

那么解就是 x = [1., -1.]。我想知道如何使用 scipy.sparse.linalg 中可用的函数在 Python 中解决这个系统。谢谢!

最佳答案

您的系统可能未确定吗?如果不是,而且确实有解,那么最小二乘解就是那个解,你可以试试

from scipy.sparse.linalg import lsqr
return_values = lsqr(A, b)
x = return_values[0]

如果您的系统实际上是欠定的,这应该会为您找到最小的 L2 范数解。如果它不起作用,请将参数 damp 设置为非常小的值(例如 1e-5)。

如果您的系统是完全确定的(即A 是满秩的)并且有解,并且您的矩阵A 很高,正如你描述的那样,那么你可以在正规方程中找到一个等效系统:

A.T.dot(A).dot(x) == A.T.dot(b)

x 中有唯一解。这是一个方形线性系统,因此可以使用线性系统求解器求解,例如 scipy.sparse.linalg.spsolve

关于python - 在 Python 中解决看似(但实际上不是!)超定稀疏线性系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23103370/

相关文章:

python - for循环中不同大小数组的函数

python - 使用 LowLevelCallable : How to pass user_data? 与 scipy quad 集成

c++ - 将 Matlab eig(A,B)(广义特征值/特征向量)重写为 C/C++

algorithm - 有人可以解释这个 RSA 示例的最后部分发生了什么吗?

python - 给定一个任意集合,有没有办法判断它是否有序?

python - 在嵌套列表python中查找所有出现的字符串及其索引

python - 如何使用 scipy 执行具有亚像素精度的图像互相关

python - 计算风险值(value)或 "most probable loss",对于给定的返回分布

python - 使用 scipy.sparse.linalg 线性系统求解器的问题

python - 导入错误 : No module named pip after trying to upgrade pip