如何从Numpy的polyfit中推导出方程?

时间:2016-09-30 23:24:55

标签: python numpy

给定x和y值的数组,以下代码将计算这些数据点的回归曲线。

# calculate polynomial
z = np.polyfit(x, y, 5)
f = np.poly1d(z)

# calculate new x's and y's
x_new = np.linspace(x[0], x[-1], 50)
y_new = f(x_new)

plt.plot(x,y,'o', x_new, y_new)
plt.xlim([x[0]-1, x[-1] + 1 ])
plt.show()

如何使用上述方法推导出该曲线的实际方程?

3 个答案:

答案 0 :(得分:4)

如果要显示等式,可以使用sympy输出乳胶:

from sympy import S, symbols
from matplotlib import pyplot as plt
import numpy as np

x=np.linspace(0,1,100)
y=np.sin(2 * np.pi * x)

p = np.polyfit(x, y, 5)
f = np.poly1d(p)

# calculate new x's and y's
x_new = np.linspace(x[0], x[-1], 50)
y_new = f(x_new)

x = symbols("x")
poly = sum(S("{:6.2f}".format(v))*x**i for i, v in enumerate(p[::-1]))
eq_latex = sympy.printing.latex(poly)

plt.plot(x_new, y_new, label="${}$".format(eq_latex))
plt.legend(fontsize="small")

结果:

enter image description here

答案 1 :(得分:3)

构造一个简单的例子:

In [94]: x=np.linspace(0,1,100)
In [95]: y=2*x**3-3*x**2+x-1

In [96]: z=np.polyfit(x,y,3)
In [97]: z
Out[97]: array([ 2., -3.,  1., -1.])

z系数对应于我用于构建y的[2,-3,1,-1]。

In [98]: f=np.poly1d(z)
In [99]: f
Out[99]: poly1d([ 2., -3.,  1., -1.])

str的{​​{1}}或打印字符串是此多项式方程的表示。但它定义了等式的f系数。

z

你的意思是什么?实际的等式'

In [100]: print(f) 3 2 2 x - 3 x + 1 x - 1 In [101]: str(f) Out[101]: ' 3 2\n2 x - 3 x + 1 x - 1' 会在polyval的特定集合中评估f。因此,要重新创建x,请使用y

polyval(f,x)

答案 2 :(得分:0)

如果您只想在屏幕上看到方程式以了解方程式,只需添加以下行:

print(f)

这里有更多细节:

polyfit 返回多项式拟合系数的向量。 poly1d 获取此向量并从中生成多项式函数。

例如(来自 poly1d 的 Numpy 文档):

p = np.poly1d([1, 2, 3])
>>> print(np.poly1d(p))
   2
1 x + 2 x + 3