代码之家  ›  专栏  ›  技术社区  ›  Mustafa Uçar

如何在python中读取polyfit函数?

  •  2
  • Mustafa Uçar  · 技术社区  · 7 年前

    我想通过给出值来生成一个多项式方程,然后得到一个等式。然而,当我用给定的x值控制它时,我从等式中得到不同的值这里是我的代码和输出:

    points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
    
    x = points[:,0]
    y = points[:,1]
    
    # calculate polynomial
    z = np.polyfit(x, y, 2)
    f = np.poly1d(z)
    

    它给了我这个等式: -0.001416*x^2 + 0.1504*x + 1.72

    输出

    x   expected(y) returned(y)
    
    1     1         1.868984
    2     4         2.015136
    3     1         2.158456
    9     3         2.9589040000000004
    

    是我错了还是我读错了?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Gabriel Jablonski    7 年前

    你似乎误解了多项式拟合的概念。当你打电话 polyfit(x, y, n) ,它所做的是给出最适合点集(x,y)的n次(或更小)多项式。所以通过给polyfit打电话 n = 2 ,它将返回符合给定点的最佳二次多项式。这个多项式只是对集合的一个近似值,因此期望返回值与期望值不同,因为二次多项式不能很好地表示它们。

    下面的代码直观地演示了这是如何实现的。改变你的观点 n 价值 polyfit() 函数,看看你是否能更好地理解这个概念:

    import numpy as np
    import matplotlib.pyplot as plt
    
    points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
    
    x = points[:,0]
    y = points[:,1]
    
    # calculate polynomial
    z = np.polyfit(x, y, 2)
    f = np.poly1d(z)
    
    x_fit = np.linspace(-100, 100, 1000)
    y_fit = [f(_x) for _x in x_fit]
    
    plt.plot(x, y)
    plt.plot(x_fit, y_fit)
    plt.show()