多項式擬合

2022-07-30 19:06:14 字數 3677 閱讀 5672

多項式擬合

多項式的一般形式:

y=p_x^n + p_x^ + p_x^ + p_x^ +...+p_

多項式擬合的目的是為了找到一組p0-pn,使得擬合方程盡可能的與實際樣本資料相符合。

假設擬合得到的多項式如下:

f(x)=p_x^n + p_x^ + p_x^ + p_x^ +...+p_

則擬合函式與真實結果的差方如下:

loss = (y_1-f(x_1))^2 + (y_2-f(x_2))^2 + ... + (y_n-f(x_n))^2

那麼多項式擬合的過程即為求取一組p0-pn,使得loss的值最小。

x = [x1, x2, ..., xn] -自變數

y = [y1, y2, ..., yn] -實際函式值y'

= [y1

',y2'

,...,yn

'] -擬合函式值

p = [p0, p1, ..., pn] -多項式函式中的係數

根據一組樣本,並給出最高次冪,求出擬合係數

np.polyfit(x, y, 最高次冪)->p

根據擬合係數與自變數求出擬合值, 由此可得擬合曲線座標樣本資料 [x, y'

]np.polyval(p, x)->y'

多項式函式求導,根據擬合係數求出多項式函式導函式的係數

np.polyder(p)->q

已知多項式係數q 求多項式函式的根(與x軸交點的橫座標)

xs =np.roots(q)

兩個多項式函式的差函式的係數(可以通過差函式的根求取兩個曲線的交點)

q = np.polysub(p1, p2)

案例:求多項式 y = 4x3

+ 3x2

- 1000x + 1曲線拐點的座標。

'''

1. 求出多項式的導函式

2. 求出導函式的根,若導函式的根為實數,則該點則為曲線拐點。

'''import

numpy as np

import

matplotlib.pyplot as mp

p = [4, 3, -1000, 1]

x = np.linspace(-20, 20, 1000)

#y = 4*x**3 + 3*x**2 - 1000*x + 1

y = np.polyval(p, x) #

把x帶入p函式 得到y#求導

案例:使用多項式函式擬合兩隻**bhp、vale的差價函式:

#

多項式擬合

import

numpy as np

import

matplotlib.pyplot as mp

import

datetime as dt

import

matplotlib.dates as md

defdmy2ymd(dmy):

"""把日月年轉年月日

:param day:

:return:

"""dmy = str(dmy, encoding='

utf-8')

t = dt.datetime.strptime(dmy, '

%d-%m-%y')

s = t.date().strftime('

%y-%m-%d')

return

sdates, bhp_closing_prices =\

np.loadtxt(

'bhp.csv',

delimiter=','

, usecols=(1, 6),

unpack=true,

dtype='

m8[d],f8',

converters=) #

日月年轉年月日

vale_closing_prices =\

np.loadtxt(

'vale.csv',

delimiter=','

, usecols=(6,),

unpack=true) #

因為日期一樣,所以此處不讀日期

#print(dates)

#繪製**價的折現圖

mp.figure('

', facecolor='

lightgray')

mp.title(

'', fontsize=18)

mp.xlabel(

'date

', fontsize=14)

mp.ylabel(

'price

', fontsize=14)

mp.grid(linestyle=":"

)#設定刻度定位器

#每週一乙個主刻度,一天乙個次刻度

ax =mp.gca()

ma_loc = md.weekdaylocator(byweekday=md.mo)

ax.xaxis.set_major_locator(ma_loc)

ax.xaxis.set_major_formatter(md.dateformatter(

'%y-%m-%d'))

ax.xaxis.set_minor_locator(md.daylocator())

#修改dates的dtype為md.datetime.datetiem

dates =dates.astype(md.datetime.datetime)

#計算差價

diff_prices = bhp_closing_prices -vale_closing_prices

mp.plot(dates, diff_prices, color='

dodgerblue

', label='

diff prices')

#多項式擬合

多項式擬合缺點 多項式擬合

在網上看別人的心得 一 最小二乘法的基本原理 從整體上考慮近似函式同所給資料點 i 0,1,m 誤差 i 0,1,m 的大小,常用的方法有以下三種 一是誤差 i 0,1,m 絕對值的最大值,即誤差 向量的 範數 二是誤差絕對值的和,即誤差向量r的1 範數 三是誤差平方和的算術平方根,即誤差向量r的2...

多項式擬合

class1.cs 擬合類 using system using system.collections.generic using system.text namespace 最小二乘法擬合多項式 guass i,j sumarr arrx,i,arry,1,length return comput...

MATLAB多項式及多項式擬合

多項式均表示為陣列形式,陣列元素為多項式降冪係數 1.polyval函式 求多項式在某一點或某幾個點的值.p 1,1,1 x 2 x 1 x 1,0,1 y polyval p,x 另外求函式在某一點或某幾個點的值可以用函式feval.x 1,0,1 y feval x exp x x 注意用的乘法...