2

拟合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()但是,这是非常不可行的,因为我有很多多项式曲线,因此成对求解它们太昂贵了。此外,很明显并非所有的交叉点都很重要。(有些路口甚至几乎没有意义!)

那么我有可能有效地做到这一点(只获得关键十字路口)吗?

4

1 回答 1

3

您可以通过求根来找到多项式曲线的交点:

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

于 2013-10-20T17:53:34.180 回答