我想在 numpy 中求解线性方程组,以检查点是否与向量对齐。
给出向量 2 的以下等式:
<块引用>point[x] = vector1[x] + λ * vector2[x]
<块引用>point[y] = vector1[y] + λ * vector2[y]
Numpys linalg.solve() 提供了以下列形式求解两个方程的选项:
<块引用>ax + by = c
通过在 numpy.array() 中定义参数 a 和 b。
但我似乎无法找到一种方法来处理具有一个固定参数的方程,例如:
<块引用>m*x + b = 0
我是否遗漏了一点,或者我必须处理其他解决方案?
提前致谢!
答案 0 :(得分:1)
嗨,我会尝试帮助解决这个问题。
<块引用>计算明确确定的线性矩阵方程 ax = b 的“精确”解 x。
注意对矩阵所做的假设!
如果点 [x] 和点 [y] 方程的 lambda
应该相同。然后连接所有的向量。
x_new = np.concatenate([x,y])
vec1_new = np.concatenate([vec1_x,vec1_y])
...
假设这会过度确定您的系统,并且可能会。这意味着你有太多的方程,只有一个参数需要确定(违反了确定的假设)。我的方法是使用最少的平方。
numpy.linagl.lstsq 也有最小二乘法。方程为 y = mx + c
的位置已求解。对于您的情况,这是 y
= point[x]、x
= vector2[x] 和 c
= vector1[x]。
这是从 numpy.linagl.lstsq 示例中复制的:
x = np.array([0, 1, 2, 3])
y = np.array([-1, 0.2, 0.9, 2.1])
A = np.vstack([x, np.ones(len(x))]).T # => horizontal stack
m, c = np.linalg.lstsq(A, y, rcond=None)[0]
如果 lambda 表达式不同。将 vector2[x] 和 vector2[y] 水平堆叠,您可以找到 [lambda_1, lambda_2]
。可能还有更多的方程然后是 lambda,你会找到一个最小二乘解。
请记住,即使您从一条直线和一个固定的 lambda 构建系统。由于四舍五入和数字差异,您可能需要最小二乘法。