【发布时间】:2019-04-13 13:32:48
【问题描述】:
请求的行为
我想用python解决一个非方阵。该矩阵有两个线性相关的向量。
当前状态
我首先尝试使用numpy.linalg.solve(),但这仅适用于方阵。
其他 StackOverflow 帖子推荐使用 numpy.linalg.lstsq()。
问题
但是,我不明白如何正确实现numpy.linalg.lstsq()。该函数正确求解最后一个参数,但不能正确求解其他参数。一个帖子推荐this solution 我也不明白。
我必须以某种方式实现循环吗?
谁能给我一个代码示例?这个矩阵怎么解 使用python有问题?
我当前的代码
import numpy as np
# defining a linear equation system E=F with
# | -2 * x1 - 4 * x2 + 1 * x3 - 9 * x4 + 0 * x5 = +5 |
# | 3 * x1 + 6 * x2 + 0 * x3 + 12 * x4 + 3 * x5 = +15 |
# | 1 * x1 + 2 * x2 + 1 * x3 + 3 * x4 + 1 * x5 = -17 |
# | -5 * x1 - 4 * x2 + 1 * x3 - 9 * x4 + 0 * x5 = +14 |
E=np.array(
[
[-2,-4,1,-9,0],
[3,6,0,12,3],
[1,2,1,3,1],
[-5,-10,3,-23,1]
]
)
F=np.array(
[3,15,-17,14]
)
solutionNonSquare = np.linalg.lstsq(E, F)
print('the solution vector is: {x1, x2, x3, x4, x5}=')
print(solutionNonSquare)
【问题讨论】:
-
你的代码给出了什么答案?你期待什么答案?假设我正确解释了您的问题,您的代码对我来说是正确的,除了 numpy.linalg.lstsq 返回四个量,其中第一个是您想要的最小二乘解决方案。
-
它返回
(array([ -4.34615385, -8.69230769, -19.69230769, 2.30769231, 17.5 ]), array([], dtype=float64), 3, array([3.10597849e+01, 3.82343947e+00, 8.19190114e-01, 4.91552829e-16]))但我希望它返回求解矩阵系统的向量,例如-12,5, 0, -22, 0, 17.5或(array([ -12,5, 0, -22, 0, 17.5 ]), -
没有计算非方阵高斯消元法的函数或变通方法吗?
-
您有 5 个变量的 3 个独立方程。有很多向量可以解决这个系统。您可以添加两个空向量的任意倍数以找到系统的另一个解。您可以使用scipy.linalg.null_space 找到空空间的 a 基
-
您能在此处发布一个代码示例,您将如何使用 scipy.linalg.null_space 求解方程吗?
标签: python numpy matrix linear-algebra