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

Numpy: Solve linear equation system with one unknown + number

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

给定向量 2 的以下等式:

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

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

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

ax + by = c

通过在numpy.array()[=35=中定义参数ab ].

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

m*x + b = 0

我是不是遗漏了一点,还是必须处理其他解决方案?

提前致谢!

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

numpy.linagl.solve 说:

Computes the “exact” solution, x, of the well-determined, i.e., full rank, linear matrix equation ax = b.

注意对矩阵所做的假设!

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] 可以找到。可能还有更多的方程然后 lambds,你会找到最小二乘解。

备注

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

您可以使用 sympy 求解方程 2*x + 4 = 0:

from sympy.abc import x
from sympy import Eq, solve

eq = Eq(2 * x + 4, 0)

print(solve(eq))