python-曲線擬合-原理-代碼_第1頁(yè)
python-曲線擬合-原理-代碼_第2頁(yè)
python-曲線擬合-原理-代碼_第3頁(yè)
python-曲線擬合-原理-代碼_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

概念最小二乘法多項(xiàng)式曲線擬合,根據(jù)給定的m個(gè)點(diǎn),并不要求這條曲線精確地經(jīng)過這些點(diǎn),而是曲線y=f(x)的近似曲線y=φ(x)。原理[原理局部由個(gè)人根據(jù)互聯(lián)網(wǎng)上的資料進(jìn)行總結(jié),希望對(duì)大家能有用]給定數(shù)據(jù)點(diǎn)pi(xi,yi),其中i=1,2,…,m。求近似曲線y=φ(x)。并且使得近似曲線與y=f(x)的偏差最小。近似曲線在點(diǎn)pi處的偏差δi=φ(xi)-y,i=1,2,...,m。常見的曲線擬合方法:按偏差平方和最小的原那么選取擬合曲線,并且采取二項(xiàng)式方程為擬合曲線的方法,稱為最小二乘法。推導(dǎo)過程:1.設(shè)擬合多項(xiàng)式為:2.各點(diǎn)到這條曲線的距離之和,即偏差平方和如下:3.為了求得符合條件的a值,對(duì)等式右邊求ai偏導(dǎo)數(shù),因而我們得到了:.......4.將等式左邊進(jìn)行一下化簡(jiǎn),然后應(yīng)該可以得到下面的等式:.......5.把這些等式表示成矩陣的形式,就可以得到下面的矩陣:6.將這個(gè)范德蒙得矩陣化簡(jiǎn)后可得到:7.也就是說(shuō)X*A=Y,那么A=(X'*X)-1*X'*Y,便得到了系數(shù)矩陣A,同時(shí),我們也就得到了擬合曲線。實(shí)現(xiàn)運(yùn)行前提:Python運(yùn)行環(huán)境與編輯環(huán)境;Matplotlib.pyplot圖形庫(kù),可用于快速繪制2D圖表,與matlab中的plot命令類似,而且用法也根本相同。代碼:[python]viewplaincopy#

coding=utf-8'''''作者:Jairus

Chan程序:多項(xiàng)式曲線擬合算法'''import

matplotlib.pyplot

as

plt

import

math

import

numpy

import

random

fig

=

plt.figure()

ax

=

fig.add_subplot(111)

#階數(shù)為9階order=9#生成曲線上的各個(gè)點(diǎn)x

=

numpy.arange(-1,1,)

y

=

[((a*a-1)*(a*a-1)*(a*a-1)+)*numpy.sin(a*2)

for

a

in

x]

#ax.plot(x,y,color='r',linestyle='-',marker='')#,label="(a*a-1)*(a*a-1)*(a*a-1)+0.5"#生成的曲線上的各個(gè)點(diǎn)偏移一下,并放入到xa,ya中去i=0xa=[]

ya=[]

for

xx

in

x:

yy=y[i]

d=float(random.randint(60,140))/100#ax.plot([xx*d],[yy*d],color='m',linestyle='',marker='.')

i+=1

xa.append(xx*d)

ya.append(yy*d)

'''''for

i

in

range(0,5):

xx=float(random.randint(-100,100))/100

yy=float(random.randint(-60,60))/100

xa.append(xx)

ya.append(yy)'''ax.plot(xa,ya,color='m',linestyle='',marker='.')

#進(jìn)行曲線擬合matA=[]

for

i

in

range(0,order+1):

matA1=[]

for

j

in

range(0,order+1):

tx=

for

k

in

range(0,len(xa)):

dx=

for

l

in

range(0,j+i):

dx=dx*xa[k]

tx+=dx

matA1.append(tx)

matA.append(matA1)

#print(len(xa))#print(matA[0][0])matA=numpy.array(matA)

matB=[]

for

i

in

range(0,order+1):

ty=

for

k

in

range(0,len(xa)):

dy=

for

l

in

range(0,i):

dy=dy*xa[k]

ty+=ya[k]*dy

matB.append(ty)

matB=numpy.array(matB)

matAA=numpy.linalg.solve(matA,matB)

#畫出擬合后的曲線#print(matAA)xxa=

numpy.arange(-1,,)

yya=[]

for

i

in

range(0,len(xxa)):

yy=

for

j

in

range(0,order+1):

dy=

for

k

in

range(0,j):

dy*=xxa[i]

dy*=matAA[j]

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論