python中对Dataframe二维查表插值的实现方法

今天在计算风力发电机捕捉风能功率的时候,需要对叶片扫略面积内的风能做个功率效率折减,即Cp系数,Cp的定义如下,即实际利用的风能与输入风能的比例http://www.ftexploring.com/wind-energy/wind-power-coefficient.htm:
在这里插入图片描述
输入风能是空气密度与风速的函数,可以直接计算:
在这里插入图片描述
那么实际得到的能力是Pin与Cp的乘积。
在这里插入图片描述
Cp通常是一个二维表,横坐标是TSR(叶尖速与风速的比值),纵坐标是PITCH Angle(桨叶角)。风机的运行数据中是包含风速 ,转速以及桨叶角信息的,并且通过直接读入到DataFrame,那么就需要根据TSR与PA对Cp查表并且插值得到Cp。主要用到scipy.interpolate.interp2d创建插值函数并查表,另外Dataframe不能直接用插值函数,这里做了个for循环分行插值查表。

from scipy.interpolate import interp2d
df_rotormap = pd.read_csv('filepath',header = None) #读取Cp表
x = np.array(df_rotormap.iloc[:,0].dropna())  #Cp表的X坐标是TSR
y = np.array(df_rotormap.iloc[:,1])  #Cp表的Y坐标是pitch angle
z = np.array(df_rotormap.iloc[:,2:])  #Cp表的具体值,y行x列

rho = 1.225    #kg/m3
s = (141/2)**2*np.pi    #m2
df_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']

你可能感兴趣的:(技术沉淀)