2016-11-10 16 views
0

이것은 천문학적이지만, 제 질문은 아마도 초등학생이라고 생각합니다. 저는 경험이별로 없어요. 사과드립니다.최대를 찾는 방법. point plot on linear plot

별 모양의 은하 (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 
+0

, IGM 모듈은 어디에서 왔습니까? 또한 올바르게 작동하도록 코드를 들여 씁니다. –

+0

시각적 검증을위한 샘플 데이터와 그 플롯은 어디에 있습니까 (누구나 코드를 작성하려고한다면)? – Spektre

답변

0

내가 의견을 충분히 높은 명성을 가지고 있지 않지만,이 방법으로 문제를 해결할 수 있습니다, 그래서 그 대답을 것 같아요. 모든 y 좌표를 목록에 저장 한 다음 max (목록) 함수를 사용하여 max. 당신이 순서쌍을 원하는 경우에, (Y, X) 튜플로 좌표를 저장하고 최대 (목록)을 사용

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

수익률 (4,1) 코드를 시도 할 수도있는 사람들을위한

+0

정밀도가 충분하지 않습니다 ... 일부 보간 재구성이 필요합니다 (서브 픽셀 정밀도와 유사한 이웃 기울기와 교차하는 것처럼) 정밀도는 곡률에 따라 달라 지므로 데이터가 없으면 어떤 보간을 사용할 지 말하기 어렵습니다.) 나는 다음과 같은 것을 염두에 뒀다 : [알고리즘 : 쌍 선형 보간의 역행을 계산하는 방법은?] (http://stackoverflow.com/a/23103173/2521214). [Approximation search] (http://stackoverflow.com/a/36163847/2521214) 등과 같은 또 다른 접근법이 있습니다. – Spektre