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=中定义参数a和b ].
但我似乎找不到一种方法来处理具有一个固定参数的方程式,例如:
m*x + b = 0
我是不是遗漏了一点,还是必须处理其他解决方案?
提前致谢!
你好,我会尝试帮助解决这个问题。
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))
我想在 numpy 中求解线性方程组,以检查点是否与向量对齐。
给定向量 2 的以下等式:
point[x] = vector1[x] + λ * vector2[x]
point[y] = vector1[y] + λ * vector2[y]
Numpys linalg.solve() 提供了求解以下形式的两个方程的选项:
ax + by = c
通过在numpy.array()[=35=中定义参数a和b ].
但我似乎找不到一种方法来处理具有一个固定参数的方程式,例如:
m*x + b = 0
我是不是遗漏了一点,还是必须处理其他解决方案?
提前致谢!
你好,我会尝试帮助解决这个问题。
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))