亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

python 一維二維插值實例

瀏覽:64日期:2022-07-29 11:44:32

一維插值

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

拉格朗日插值多項式:當節點數n較大時,拉格朗日插值多項式的次數較高,可能出現不一致的收斂情況,而且計算復雜。隨著樣點增加,高次插值會帶來誤差的震動現象稱為龍格現象。

分段插值:雖然收斂,但光滑性較差。

樣條插值:樣條插值是使用一種名為樣條的特殊分段多項式進行插值的形式。由于樣條插值可以使用低階多項式樣條實現較小的插值誤差,這樣就避免了使用高階多項式所出現的龍格現象,所以樣條插值得到了流行。

在CODE上查看代碼片派生到我的代碼片

#!/usr/bin/env python # -*-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()

結果:

python 一維二維插值實例

二維插值

方法與一維數據插值類似,為二維樣條插值。

在CODE上查看代碼片派生到我的代碼片

# -*- 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的網格 y,x= np.mgrid[-1:1:15j, -1:1:15j] fvals = func(x,y) # 計算每個網格點上的函數值 15*15的值 print len(fvals[0]) #三次樣條二維插值 newfunc = interpolate.interp2d(x, y, fvals, kind=’cubic’) # 計算100*100的網格上的插值 xnew = np.linspace(-1,1,100)#x ynew = np.linspace(-1,1,100)#y fnew = newfunc(xnew, ynew)#僅僅是y值 100*100的值 # 繪圖 # 為了更明顯地比較插值前后的區別,使用關鍵字參數interpolation=’nearest’ # 關閉imshow()內置的插值運算。 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 一維二維插值實例

左圖為原始數據,右圖為二維插值結果圖。

二維插值的三維展示方法

在CODE上查看代碼片派生到我的代碼片

# -*- 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的網格 x = np.linspace(-1, 1, 20) y = np.linspace(-1,1,20) x, y = np.meshgrid(x, y)#20*20的網格數據 fvals = func(x,y) # 計算每個網格點上的函數值 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)#標注 #二維插值 newfunc = interpolate.interp2d(x, y, fvals, kind=’cubic’)#newfunc為一個函數 # 計算100*100的網格上的插值 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)#標注 plt.show()

python 一維二維插值實例

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

補充知識:python中對Dataframe二維查表插值的實現方法

今天在計算風力發電機捕捉風能功率的時候,需要對葉片掃略面積內的風能做個功率效率折減,即Cp系數,Cp的定義如下,即實際利用的風能與輸入風能的比例

python 一維二維插值實例

輸入風能是空氣密度與風速的函數,可以直接計算:

python 一維二維插值實例

那么實際得到的能力是Pin與Cp的乘積。

python 一維二維插值實例

Cp通常是一個二維表,橫坐標是TSR(葉尖速與風速的比值),縱坐標是PITCH Angle(槳葉角)。風機的運行數據中是包含風速 ,轉速以及槳葉角信息的,并且通過直接讀入到DataFrame,那么就需要根據TSR與PA對Cp查表并且插值得到Cp。主要用到scipy.interpolate.interp2d創建插值函數并查表,另外Dataframe不能直接用插值函數,這里做了個for循環分行插值查表。

from scipy.interpolate import interp2ddf_rotormap = pd.read_csv(’filepath’,header = None) #讀取Cp表x = np.array(df_rotormap.iloc[:,0].dropna()) #Cp表的X坐標是TSRy = np.array(df_rotormap.iloc[:,1]) #Cp表的Y坐標是pitch anglez = np.array(df_rotormap.iloc[:,2:]) #Cp表的具體值,y行x列rho = 1.225 #kg/m3s = (141/2)**2*np.pi #m2df_cal[’TSR’] = df_cal[’發電機轉速(PDM1)’]/148*141*np.pi/60/df_cal[’風速’]func_new = interp2d(x,y,z,kind = ’linear’) #定義二維表插值函數,選擇線性插值cp_list = []for i in range(df_cal.shape[0]): cp = float(func_new(df_cal[’TSR’][i],df_cal[’1號槳葉角度’][i])) #輸入X,Y坐標, 輸出插值計算的Cp cp_list.append(cp)df_cal[’cp’] = cp_list #把Cp放回到Dataframe中去df_cal[’air_power’] = 0.5*rho*s*df_cal[’風速’]**3*df_cal[’cp’]

以上這篇python 一維二維插值實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 特级淫片日本高清视频 | 护士xxxx做爰 | 久久久在线视频精品免费观看 | 亚洲综合伊人制服丝袜美腿 | 欧美亚洲国产一区二区三区 | 深夜精品影院18以下勿进 | 91天堂97年嫩模在线观看 | 1024免费看 | 国产v精品欧美精品v日韩 | 国内在线网友露脸自拍 | 国产成人精品高清在线 | 欧美日韩顶级毛片www免费看 | 免费看的黄视频 | 久久www免费人成_看片高清 | 欧美 日韩 国产 在线 | 欧美线人一区二区三区 | 美女黄页在线观看 | 青青久久精品国产免费看 | 亚洲欧洲精品在线 | 91福利国产在线观看一区二区 | 欧美黄色大全 | 久久综合丁香激情久久 | 青青操国产在线 | 香蕉视频黄在线观看 | 免费一级毛片在线观看 | 午夜在线成人 | 亚洲自偷自拍另类12p | 欧美成人做性视频在线播放 | 1769国内精品免费视频视频 | 免费特黄一级欧美大片在线看 | 女色婷婷网 | 日本v片免费一区二区三区 日本wwwwwxxxxx | 泰国午夜理伦三级在线观看 | 久久一级视频 | 国产2021成人精品 | 日本高清aⅴ毛片免费 | 六月婷婷在线视频 | 黄色网址视频 | 黄片毛片免费在线观看 | 黄色一级视频免费看 | 一级特黄录像视频免费 |