如何从两个插值函数的乘积创建新函数?

时间:2017-11-05 20:03:14

标签: python scipy interpolation

所以我正在为我的星际天文课程编写项目。我们给出了两组文件:第一组由来自不同年龄的恒星群的样本光谱组成。第二个是斯隆数字巡天(SDSS)频段的系统响应曲线。

基本上,第一个为我们提供了一系列不同波长的通量测量。第二个告诉我们SDSS将看到多少通量,这种响应也取决于波长。在下面的代码中,我已经获取了一组恒星和一个系统响应曲线的数据。然后我插入这些数据以获得两者的连续曲线。

我现在要做的是采用这两个插值函数并获得它们的产品。然后,我需要将此产品与波长相结合。我在尝试计算产品时遇到了问题:

import matplotlib.pyplot as plt
import numpy
from scipy import interpolate
from scipy.integrate import quad

def main():

 pop = numpy.loadtxt("fnu_m62_0.001Gyr")              # Loads sample spectrum
 popint = interpolate.interp1d(pop[:,0], pop[:,1])    # Interpolates

 sysr = numpy.loadtxt("sdss_response/sys.u")          # Loads SDSS response for u band
 sysrint = interpolate.interp1d(sysr[:,0], sysr[:,1]) # Interpolates

 p = sysrint * popint                   # Takes product of two functions, assigns to p
 plt.plot(pop[:,0], p(pop[:,0]), 'b-')  # Plots p as function of wavelength for the sample population interval

尝试运行此代码会给我:

TypeError: unsupported operand type(s) for *: 'interp1d' and 'interp1d'

所以我猜在插值函数上使用算术存在问题。但我真的不明白为什么。有没有办法将这两个函数相乘以获得一个新的连续函数?

1 个答案:

答案 0 :(得分:1)

'interp1d'是一个函数类型,因此,我们像这样制作产品函数:

def p(x): return popint(x)*sysrint(x)