Numpy:用一个未知数 + 数字求解线性方程组

时间:2021-06-16 18:53:28

标签: python numpy math equation

我想在 numpy 中求解线性方程组,以检查点是否与向量对齐。

给出向量 2 的以下等式:

<块引用>

point[x] = vector1[x] + λ * vector2[x]

<块引用>

point[y] = vector1[y] + λ * vector2[y]

Numpys linalg.solve() 提供了以下列形式求解两个方程的选项:

<块引用>

ax + by = c

通过在 numpy.array() 中定义参数 ab

但我似乎无法找到一种方法来处理具有一个固定参数的方程,例如:

<块引用>

m*x + b = 0

我是否遗漏了一点,或者我必须处理其他解决方案?

提前致谢!

1 个答案:

答案 0 :(得分:1)

嗨,我会尝试帮助解决这个问题。

numpy.linagl.solve 说:

<块引用>

计算明确确定的线性矩阵方程 ax = b 的“精确”解 x。

注意对矩阵所做的假设!

Lambda 相同

如果点 [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 不同

如果 lambda 表达式不同。将 vector2[x] 和 vector2[y] 水平堆叠,您可以找到 [lambda_1, lambda_2]。可能还有更多的方程然后是 lambda,你会找到一个最小二乘解。

注意

请记住,即使您从一条直线和一个固定的 lambda 构建系统。由于四舍五入和数字差异,您可能需要最小二乘法。

相关问题