Python中两条曲线之间的插值(从Matlab翻译)

2024-05-15 13:55:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有与问题plot interpolate a curve between 2 different types of curves in matlab中描述的相同的问题,但我想用Python来做。我正在使用scipy.interpolate.griddata,但是,它的行为似乎与Matlab中的不同

以下是我翻译代码的尝试:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

a50 = np.array([1.05,0.931818182,0.931818182,0.968181818,1.045454545,1.136363636,1.354545455,1.568181818,1.718181818,1.945454545,2.159090909,2.454545455,2.772727273])

vel50 = np.array([0.85,0.705555556,0.605555556,0.533333333,0.472222222,0.45,0.427777778,0.45,0.477777778,0.533333333,0.611111111,0.711111111,0.827777778])

a25 = np.array([0.5,0.613636364,0.686363636,0.795454545,0.918181818,0.963636364,1.090909091,1.236363636,1.304545455,1.431818182,1.545454545,1.659090909,1.818181818])

vel25 = np.array([0.425555556,0.354444444,0.302222222,0.266666667,0.233333333,0.226666667,0.211111111,0.222222222,0.237777778,0.266666667,0.311111111,0.35,0.402222222])

# Find the range for interpolation

if (a25[0] < a50[0]):
    mesh_min = a50[0]
else:
    mesh_min = a25[0]

if (a25[-1] < a50[-1]):
    mesh_max = a25[-1]
else:
    mesh_max = a50[-1]

print("mesh range:", mesh_min, mesh_max)

T = np.full((len(a25),1),25)
T = np.append(T,np.full((len(a50),1),50))
T = np.array(T).reshape((len(T),1))
a = np.append(a25,a50)
a = np.array(a).reshape((len(a),1))
v = np.append(vel25,vel50)
v = np.array(v).reshape((len(v),1))

points = np.concatenate((T,a), axis=1)

values = np.array(v).reshape(len(v),1)

N = 10
ti,ai = np.mgrid[0:T[-1]:complex(N,0), mesh_min:mesh_max:complex(N,0)]

vi = griddata(points,values,(ti,ai),method='linear') # (ti,yi) -> points at which to interpolate data
print("vi = ", vi)

fig, ax = plt.subplots(1,1)
for i in range(0,len(z)):
    ax.plot(vi[i],'--')

ax.plot(a25,vel25,'-',a50,vel50,'-')

我得到了一些插值数字,但有些不对劲

我对Python实现的理解是,我们提供了一个点(x,y)的网格,其中函数f(x,y)的值是已知的。然后我们需要提供另一个网格,函数将插值到该网格上。我不太确定Matlab希望看到什么。似乎T是一个列向量,包含曲线的“标签”,即T=25或T=50的曲线。然后两条曲线的数据相互追加(a50追加到a25,v50追加到v25)。我不知道如何在Python代码中重现这种情况。这是否可行


Tags: importlenplotnpminarraymaxvi