所以我正在为我的河外天文学类(class)编写一个编程项目。我们得到了两组文件:第一组包含来自不同年龄恒星群的样本光谱。第二个是斯隆数字巡天 (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'
所以我猜对插值函数使用算术存在问题。但我真的不明白为什么。有没有办法将这两个函数相乘以获得一个新的连续函数?
'interp1d'
是一个函数类型,因此,我们像这样创建它的乘积函数:
def p(x): return popint(x)*sysrint(x)
我是一名优秀的程序员,十分优秀!