我正试图使用y=a_1x+b_1
和y=a_2x+b_2
找到行的交集。我无法理解的是如何正确地使A
成为solve()
工作的方阵。我对解线性方程组很熟悉,但这里有些东西我不明白。
def meeting_lines(a1, b1, a2, b2):
a = np.array([[a1], [a2]])
b = np.array([b1, b2])
return np.linalg.solve(a, b)
def main():
a1=1
b1=4
a2=3
b2=2
y, x = meeting_lines(a1, b1, a2, b2)
在这里我期望y=-3
和x=1
。然而,这在numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square
中失败了。
非常感谢你的帮助,想办法解决这个问题已经把我的一天搞砸了!
发布于 2019-04-01 13:52:35
您应该按照如下方式将(x, y)
作为未知数:\begin{align} \left.\begin{matrix} a_1x-y=-b_1\\ a_2x-y=-b_2 \end{matrix}\right\} \rightarrow \overbrace{ \begin{bmatrix} a_1& -1\\ a_2& -1 \end{bmatrix} }^{\boldsymbol{a}} \overbrace{ \begin{bmatrix} x\\ y \end{bmatrix} }^{\boldsymbol{x}} = \overbrace{ \begin{bmatrix} -b_1\\ -b_2 \end{bmatrix} }^{\boldsymbol{b}} \end{align}
,因此,代码应该是:
import numpy as np
def meeting_lines(a1, b1, a2, b2):
a = np.array([[a1, -1], [a2, -1]])
b = np.array([-b1, -b2])
return np.linalg.solve(a, b)
a1=1
b1=4
a2=3
b2=2
x, y = meeting_lines(a1, b1, a2, b2)
print(x, y)
其中产出:
1.0 5.0
https://datascience.stackexchange.com/questions/48345
复制相似问题