Python中的相交线

2024-10-01 22:28:22 发布

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

from pylab import polyfit, polyval, plot, grid, xlabel, ylabel, show

x1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y1 = [2, 3, 1, 5, 4, 3, 2, 4, 5, 9]
x2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y2 = [8, 7, 8, 5, 4, 3, 4, 3, 2, 1]

m1, b1 = polyfit(x1, y1, 1)
yp1 = polyval([m1, b1], x1)
plot(x1, yp1)

m2, b2 = polyfit(x2, y2, 1)
yp2 = polyval([m2, b2], x2)
plot(x2, yp2)

plot(x1, yp1)
plot(x2, yp2)
grid(True)
xlabel('x')
ylabel('y')
show()

我试图用上面的代码对同一个图上的一些数据进行两次线性拟合。最佳拟合的直线正好相交,我对这个交点很感兴趣。我怎样才能从python得到这一点,然后把它画在图上呢?在

换句话说,我想在yp1和{}相交的地方画一个大的圆,然后打印这个值。在


Tags: plotshowb1gridx1x2y1m1
1条回答
网友
1楼 · 发布于 2024-10-01 22:28:22

这是一个简单的数学问题,并不是Python特有的问题。在

有两个方程和两个未知数(两条直线相交点的纵坐标xs和坐标ys)。在

ys = m1 * xs + b1 
ys = m2 * xs + b2

你可以用矩阵的形式,得到一个方程组,然后用numpy.linalg.solve很容易地解决这个问题。在

转换包括重新排列这些方程的项,例如:

^{pr2}$

矩阵公式现在应该变得很明显:

⎧m1 -1⎫   ⎧xs⎫    ⎧ -b1 ⎫
|     | . |  |  = |     |
⎩m2 -1⎭   ⎩ys⎭    ⎩ -b2 ⎭

这很容易用执行线性代数的库来解决,比如numpy.linalg(您要导入的内容的一个子集)。在

import numpy # part of pylab but I prefer loading specific modules, not a whole blob
# matrix form: A * X = B
A = numpy.array([[m1, -1], [m2, -1]])
B = numpy.array([[-b1], [-b2]])
# notice that X is simply a column vector: array([[xs],[ ys]])
xs,ys = numpy.linalg.solve(A,B)

# final step, plot the point of intersection with e.g. a black single dot:
plt.plot(xs, ys, 'ko ')

关于解线性方程组的更多信息,我建议通过阅读任何基础数学书籍来更新知识。A primer当然在维基百科上也有。在

相关问题 更多 >

    热门问题