如何将一维插值转换为二维插值?

2024-05-20 10:26:26 发布

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

我有一个3个变量的函数,我在其中一个‘z_透镜’上插值,我想把它变成‘m_透镜’和‘z_透镜’上的二维插值

我该怎么做

以下是函数和1d插值:

def delta_t(m_lens, z_lens, y_impact):
    return m_lens * (1 + z_lens) * (0.5 * y_impact * np.sqrt(y_impact ** 2 + 4) + np.log((np.sqrt(y_impact ** 2 + 4) + y_impact) / (np.sqrt(y_impact ** 2 + 4) - y_impact)))


def y_min(m_lens, z_lens, dt_min):
    y_min = fsolve(lambda y: delta_t(m_lens, z_lens, y) - dt_min * u.s, 0)[0]
    return y_min

mm = np.arange(20,100,1)
xx = np.arange(0,5,0.01)
yy = np.array([y_min(20,z_lens,1e-3) for z_lens in xx])
my_ymin = CubicSpline(xx, yy, bc_type='natural')

我试过这个:

def y_min(m_lens, z_lens, dt_min):
    y_min = fsolve(lambda y: delta_t(m_lens, z_lens, y) - dt_min * u.s, 0)[0]
    return y_min
#print(np.sqrt((1 + 5) / 5 ** 0.5 - 2) - y_min(20, 0,1e-3))
mm = np.arange(20,100,1)
xx = np.arange(0,5,0.01)


 yy2d = np.array([y_min(m_lens,z_lens,1e-3) for z_lens in xx and m_lens in mm])
my_ymin = interp2d(xx, mm, yy2d, method='cubic')

得到了这个错误:

ValueError                                Traceback (most recent call last)
<ipython-input-79-cce0ec18337d> in <module>
     15 
     16 
---> 17 yy2d = np.array([y_min(m_lens,z_lens,1e-3) for z_lens in xx and m_lens in mm])
     18 my_ymin = interp2d(xx, mm, yy2d, method='cubic')

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

有人能帮我吗?你如何定义“yy”


Tags: indefnpdtsqrtminarray插值