np.polyfit()
的拟合返回了几个多项式表达式。然后,我用matplotlib
绘制多项式曲线:
y_fit = np.arange(min(y), max(y), .1) # use more points for a smoother plot
x_fit = p[0](y_fit)
axes.plot(x_fit, y_fit, '-', color='green')
我得到的是这个
它们实际上是一个段落的边界。 我希望在绿色闭合多边形内看到一个封闭的蓝色多边形。使用人工智能,很清楚如何将它们相交并删除多余的部分。
我尝试过的一种简单而残酷的方法是用fsolve()
求解成对耦合的非线性方程。 然而,这是不可行的,因为我有很多多项式曲线,因此成对求解它们太昂贵了。而且,很明显并非所有交叉点都很重要。 (有些交叉点甚至没有意义!)
所以我可以这样做(关键交叉点仅)有效?
答案 0 :(得分:2)
您可以通过查找根来找到多项式曲线的交点:
import numpy as np
# fake data
x = np.linspace(0, 4, 20)
y1 = np.cos(x)
y2 = np.sin(x)
# polynomial fits
p1 = np.polynomial.Polynomial.fit(x, y1, 3)
p2 = np.polynomial.Polynomial.fit(x, y2, 3)
# find roots
x_0 = (p1 - p2).roots()
print(x_0)
# select roots in specific range only
x_0 = x_0[(x_0 > 0) & (x_0 < 4)]
# plot
xx = np.linspace(0, 4, 2000)
import matplotlib.pyplot as plt
plt.plot(x, y1, 'b.', x, y2, 'g.')
plt.plot(xx, p1(xx), xx, p2(xx))
plt.plot(x_0, p1(x_0), 'ko')
plt.show()
对于通过np.polyfit
获得的多项式,请使用np.roots
。