1. 程式人生 > 程式設計 >python多項式擬合之np.polyfit 和 np.polyld詳解

python多項式擬合之np.polyfit 和 np.polyld詳解

python資料擬合主要可採用numpy庫,庫的安裝可直接用pip install numpy等。

1. 原始資料:假如要擬合的資料yyy來自sin函式,np.sin

import numpy as np
import matplotlib.pyplot as plt

xxx = np.arange(0,1000) # x值,此時表示弧度
yyy = np.sin(xxx*np.pi/180) #函式值,轉化成度

2. 測試不同階的多項式,例如7階多項式擬合,使用np.polyfit擬合,np.polyld得到多項式係數

z1 = np.polyfit(xxx,yyy,7) # 用7次多項式擬合,可改變多項式階數;
p1 = np.poly1d(z1) #得到多項式係數,按照階數從高到低排列
print(p1) #顯示多項式

3. 求對應xxx的各項擬合函式值

yvals=p1(xxx) # 可直接使用yvals=np.polyval(z1,xxx)

4. 繪圖如下

plt.plot(xxx,'*',label='original values')
plt.plot(xxx,yvals,'r',label='polyfit values')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend(loc=4) # 指定legend在圖中的位置,類似象限的位置
plt.title('polyfitting')
plt.show()

5. np.polyfit函式:採用的是最小二次擬合,numpy.polyfit(x,y,deg,rcond=None,full=False,w=None,cov=False),前三個引數是必須的

官方文件:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.polyfit.html

6. np.polyld函式:得到多項式係數,主要有三個引數

 A one-dimensional polynomial class.

  A convenience class,used to encapsulate "natural" operations on
  polynomials so that said operations may take on their customary
  form in code (see Examples).

  Parameters
  ----------
  c_or_r : array_like
    The polynomial's coefficients,in decreasing powers,or if
    the value of the second parameter is True,the polynomial's
    roots (values where the polynomial evaluates to 0). For example,``poly1d([1,2,3])`` returns an object that represents
    :math:`x^2 + 2x + 3`,whereas ``poly1d([1,3],True)`` returns
    one that represents :math:`(x-1)(x-2)(x-3) = x^3 - 6x^2 + 11x -6`.
  r : bool,optional
    If True,`c_or_r` specifies the polynomial's roots; the default
    is False.
  variable : str,optional
    Changes the variable used when printing `p` from `x` to `variable`
    (see Examples).


引數1表示:在沒有引數2(也就是引數2預設False時),引數1是一個數組形式,且表示從高到低的多項式係數項,例如引數1為[4,5,6]表示:

引數2表示:為True時,表示將引數1中的引數作為根來形成多項式,即引數1為[4,6]時表示:(x-4)(x-5)(x-6)=0,也就是:

引數3表示:換引數標識,用慣了x,可以用 t,s之類的

用法:

1. 直接進行運算,例如多項式的平方,分別得到

xx=np.poly1d([1,3])
print(xx)
yy=xx**2 #求平方,或者用 xx * xx
print(yy)


2. 求值:

yy(1) = 36

3. 求根:即等式為0時的未知數值

yy.r

4. 得到係數形成陣列:

yy.c 為:array([ 1,4,10,12,9])

5. 返回最高次冪數:

yy.order = 4

6. 返回係數:

yy[0] —— 表示冪為0的係數

yy[1] —— 表示冪為1的係數

總結

以上所述是小編給大家介紹的python多項式擬合之np.polyfit 和 np.polyld詳解,希望對大家有所幫助,也非常感謝大家對我們網站的支援!