0

これは天文学ですが、私の質問はおそらく非常に初歩的なものだと思います。私はあまり経験がありません。申し訳ありません。

星形成銀河の色 (y 軸) と赤方偏移 (x 軸) の関係をプロットしています。プロットは、約 0 からおそらく 9 まで上昇し、その後再び約 -2 まで減衰する線です。ピーク (~9 色) は赤方偏移で約 4 であり、ピークをより正確に見つけたいと考えています。赤方偏移は非常に紛らわしい関数によって与えられます。それを区別する方法がわかりません。そうでなければ、そうするだけです。

  • 複雑な赤方偏移 (z) 関数を微分できますか? もしそうなら、どのように?

  • そうでない場合、どうすればピークをグラフィカル/数値的に見積もることができますか?

初歩的な質問で申し訳ありませんがよろしくお願いします。私のコードは以下です。


import numpy as np
import matplotlib.pyplot as plt
import IGM
import scipy.integrate as integrate

SF = np.load('StarForming.npy')

lam = SF[0]

SED = SF[1]

filters = ['f435w','f606w','f814w','f105w','f125w','f140w','f160w']
filters_wl = {'f435w':0.435,'f606w':0.606,'f814w':0.814,'f105w':1.05,'f125w':1.25,'f140w':1.40,'f160w':1.60} # filter dictionary to give wavelengths of filters in microns

fT = {} # this is a dictionary

for f in filters:

data = np.loadtxt(f+'.txt').T

fT[f]= data    

fluxes = {}

for f in filters: fluxes[f] = [] # make empty list for each 

redshifts = np.arange(0.0,10.0,0.1) # redshifts going from 0 to 10

for z in redshifts:

    lamz = lam * (1. + z)
    obsSED = SED * IGM.madau(lamz, z)

    for f in filters:

        newT = np.interp(lamz,fT[f][0],fT[f][1]) # for each filter, refer back

        bb_flux = integrate.trapz((1./lamz)*obsSED*newT,x=lamz)/integrate.trapz((1./lamz)*newT,x=lamz) 
        # 1st bit integrates, 2nd bit divides by area under filter to normalise filter

        # loops over all z, for all z it creates a new SED, redshift wl grid    

        fluxes[f].append(bb_flux)


for f in filters: fluxes[f] = np.array(fluxes[f])

colour = -2.5*np.log10(fluxes['f435w']/fluxes['f606w'])

plt.plot(redshifts,colour)
plt.xlabel('Redshift')
plt.ylabel('Colour')
plt.show
4

1 に答える 1

0

コメントするほどの評判はありませんが、これで問題が解決する可能性があるので、その答えを推測します。すべての y 座標をリストに格納し、max(list) 関数を使用して最大値を見つけます。順序付けられたペアが必要な場合は、座標を (y,x) タプルとして保存し、max(list) を使用します

lst = [(3,2), (4,1), (1, 200)]
max(lst)

利回り (4,1)

于 2016-11-10T20:41:43.180 に答える