亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python實現(xiàn)各種插值法(數(shù)值分析)

系統(tǒng) 2790 0

一維插值

插值不同于擬合。插值函數(shù)經(jīng)過樣本點,擬合函數(shù)一般基于最小二乘法盡量靠近所有樣本點穿過。常見插值方法有 拉格朗日插值法、分段插值法、樣條插值法

  • 拉格朗日插值多項式:當(dāng)節(jié)點數(shù)n較大時,拉格朗日插值多項式的次數(shù)較高,可能出現(xiàn)不一致的收斂情況,而且計算復(fù)雜。隨著樣點增加,高次插值會帶來誤差的震動現(xiàn)象稱為龍格現(xiàn)象。
  • 分段插值:雖然收斂,但光滑性較差。
  • 樣條插值:樣條插值是使用一種名為樣條的特殊分段多項式進(jìn)行插值的形式。由于樣條插值可以使用低階多項式樣條實現(xiàn)較小的插值誤差,這樣就避免了使用高階多項式所出現(xiàn)的龍格現(xiàn)象,所以樣條插值得到了流行。
            
# -*-coding:utf-8 -*-
import numpy as np
from scipy import interpolate
import pylab as pl

x=np.linspace(0,10,11)
#x=[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
y=np.sin(x)
xnew=np.linspace(0,10,101)
pl.plot(x,y,"ro")

for kind in ["nearest","zero","slinear","quadratic","cubic"]:#插值方式
 #"nearest","zero"為階梯插值
 #slinear 線性插值
 #"quadratic","cubic" 為2階、3階B樣條曲線插值
 f=interpolate.interp1d(x,y,kind=kind)
 # ‘slinear', ‘quadratic' and ‘cubic' refer to a spline interpolation of first, second or third order)
 ynew=f(xnew)
 pl.plot(xnew,ynew,label=str(kind))
pl.legend(loc="lower right")
pl.show()
          

結(jié)果:

python實現(xiàn)各種插值法(數(shù)值分析)_第1張圖片

二維插值

方法與一維數(shù)據(jù)插值類似,為二維樣條插值。

            
# -*- coding: utf-8 -*-
"""
演示二維插值。
"""
import numpy as np
from scipy import interpolate
import pylab as pl
import matplotlib as mpl

def func(x, y):
 return (x+y)*np.exp(-5.0*(x**2 + y**2))

# X-Y軸分為15*15的網(wǎng)格
y,x= np.mgrid[-1:1:15j, -1:1:15j]

fvals = func(x,y) # 計算每個網(wǎng)格點上的函數(shù)值 15*15的值
print len(fvals[0])

#三次樣條二維插值
newfunc = interpolate.interp2d(x, y, fvals, kind='cubic')

# 計算100*100的網(wǎng)格上的插值
xnew = np.linspace(-1,1,100)#x
ynew = np.linspace(-1,1,100)#y
fnew = newfunc(xnew, ynew)#僅僅是y值 100*100的值

# 繪圖
# 為了更明顯地比較插值前后的區(qū)別,使用關(guān)鍵字參數(shù)interpolation='nearest'
# 關(guān)閉imshow()內(nèi)置的插值運(yùn)算。
pl.subplot(121)
im1=pl.imshow(fvals, extent=[-1,1,-1,1], cmap=mpl.cm.hot, interpolation='nearest', origin="lower")#pl.cm.jet
#extent=[-1,1,-1,1]為x,y范圍 favals為
pl.colorbar(im1)

pl.subplot(122)
im2=pl.imshow(fnew, extent=[-1,1,-1,1], cmap=mpl.cm.hot, interpolation='nearest', origin="lower")
pl.colorbar(im2)
pl.show()
          

python實現(xiàn)各種插值法(數(shù)值分析)_第2張圖片 ?

左圖為原始數(shù)據(jù),右圖為二維插值結(jié)果圖。

二維插值的三維展示方法

            
# -*- coding: utf-8 -*-
"""
演示二維插值。
"""
# -*- coding: utf-8 -*-
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
from scipy import interpolate
import matplotlib.cm as cm
import matplotlib.pyplot as plt

def func(x, y):
 return (x+y)*np.exp(-5.0*(x**2 + y**2))

# X-Y軸分為20*20的網(wǎng)格
x = np.linspace(-1, 1, 20)
y = np.linspace(-1,1,20)
x, y = np.meshgrid(x, y)#20*20的網(wǎng)格數(shù)據(jù)

fvals = func(x,y) # 計算每個網(wǎng)格點上的函數(shù)值 15*15的值

fig = plt.figure(figsize=(9, 6))
#Draw sub-graph1
ax=plt.subplot(1, 2, 1,projection = '3d')
surf = ax.plot_surface(x, y, fvals, rstride=2, cstride=2, cmap=cm.coolwarm,linewidth=0.5, antialiased=True)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('f(x, y)')
plt.colorbar(surf, shrink=0.5, aspect=5)#標(biāo)注

#二維插值
newfunc = interpolate.interp2d(x, y, fvals, kind='cubic')#newfunc為一個函數(shù)

# 計算100*100的網(wǎng)格上的插值
xnew = np.linspace(-1,1,100)#x
ynew = np.linspace(-1,1,100)#y
fnew = newfunc(xnew, ynew)#僅僅是y值 100*100的值 np.shape(fnew) is 100*100
xnew, ynew = np.meshgrid(xnew, ynew)
ax2=plt.subplot(1, 2, 2,projection = '3d')
surf2 = ax2.plot_surface(xnew, ynew, fnew, rstride=2, cstride=2, cmap=cm.coolwarm,linewidth=0.5, antialiased=True)
ax2.set_xlabel('xnew')
ax2.set_ylabel('ynew')
ax2.set_zlabel('fnew(x, y)')
plt.colorbar(surf2, shrink=0.5, aspect=5)#標(biāo)注

plt.show()
          

python實現(xiàn)各種插值法(數(shù)值分析)_第3張圖片

左圖的二維數(shù)據(jù)集的函數(shù)值由于樣本較少,會顯得粗糙。而右圖對二維樣本數(shù)據(jù)進(jìn)行三次樣條插值,擬合得到更多數(shù)據(jù)點的樣本值,繪圖后圖像明顯光滑多了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久亚洲私人国产精品va | 欧美爽爽 | 黄色伊人| 欧美日韩一卡二卡 | 97影院九七影院理论片 | 一本大道久久a久久综合 | 国产大尺度福利视频在线 | 亚洲成色综合一区二区三区四区 | 夜夜操美女 | 中文字幕不卡在线播放 | 久久一区视频 | 欧美一级第一免费高清 | 久久视频免费在线观看 | 日本精品一区二区三本中文 | 亚洲精品久久中文字幕 | 玖玖福利 | 2018天天操| 国产欧美成人xxx视频 | 久久久久国产精品免费网站 | 狠狠地操 | 欧美成人免费在线视频 | 男女啪网站 | 久久久久99精品成人片三人毛片 | 91孕妇精品一区二区三区 | 综合色区| 国产欧美日韩精品第三区 | 欧美黑人猛xxxxbbbb | 国产欧美一区二区三区免费看 | 一本色道久久综合狠狠躁 | 亚洲va在线va天堂va四虎 | 日韩亚洲欧美性感视频影片免费看 | 99国产在线视频 | 天天干天天操 | 国产精品免费视频能看 | 河南毛片| 欧美papa| 手机看片国产免费 | 美女视频黄a视频免费全过程在线 | 国内精品一区二区 | 日本a视频 | 久久九九热 |