Numpy:解一个未知+数的线性方程组

2024-10-03 21:32:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

给出了矢量2的以下方程式:

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

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

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

ax + by = c

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

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

m*x + b = 0

我是否遗漏了一点,或者我必须处理另一个解决方案

提前谢谢


Tags: numpy参数矢量选项向量检查点形式point
2条回答

嗨,我会试着帮你回答这个问题

报告说:

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])
...

假设这将过度决定您的系统,并且可能会。这意味着您有太多的方程,只有一个参数要确定(违反了确定良好的假设)。我的方法是使用最少的sqare

{a2}也有一个最小二乘法。式中,方程为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构建系统。由于舍入和数值差异,您可能需要使用最小二乘法

你可以用Symphy解方程2*x+4=0:

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

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

print(solve(eq))

相关问题 更多 >