1

healpy.sphtfunc.map2almHealpy/Healpix のドキュメントに基づくと、天空図の 1 つのピクセル (測定値) と、特定のマップの a_lm 係数の配列を計算するHealpy の関数によって生成される球面調和係数との関係を理解できません。(この質問はアナファストにも当てはまります。)

私の理解では、特定のピクセルは球面調和係数に対応する必要があります。しかし、そうではありません。まったく。

で地図を取るnside = 8。このプログラムは、Healpy を使用して CMB マップを FITS 形式でnside読み取り、値を手動で設定し、マップを読み取って表示し、球面調和係数を計算します。

import math
import matplotlib.pyplot as plt 
import numpy as np
import healpy as hp
import pyfits as pf

filename = "cmb_map.fits"    # the name of the full-sky map 

readmap = hp.read_map(filename)   # readmap i.e. input map
nside = 8    # manually input the side value

''' 
Here outputs: 
NSIDE = 8
ORDERING = RING in fits file
'''

view = hp.mollview(readmap)  # view the map, i.e. display it
'''
Shows sky map of the CMB
'''

totalnumberpixels = hp.nside2npix(nside)
print totalnumberpixels      # For nside = 8, this should be 12*nside**2 = 768

arr = hp.map2alm(readmap)    # This is an array of a_lm values

ここまでは順調ですね。関数は 300 個のhp.map2alm()値、つまり 300 個の球面調和係数 a_lm を返します。

arr.shape

" (300,) " を出力します。

768 ピクセルが 300 の a_lm 値に計算されるのはなぜですか? nsideと球面調和係数の総数との間に数学的な関係はありますか? それぞれnsideが異なる数の a_lm 係数を与えますか?

1 つの a_lm を計算するのに何ピクセルかかりますか? どんな助け/説明も大歓迎です!


編集: 以下で説明するように、ピクセルの総数は ですnpix = 12*nside**2map2almデフォルトを使用しますlmax = 3*nside-1。したがって、球面調和係数の総数は までの奇数の合計になるはず3*nside-1=23です。球面調和係数の総数は、(2*lmax+1)**2 = (6*nside-1)**2 になります。(2*lmax+1)^2=(2*23+1)^2 = (47)^2 = 2209. では、この 300 という数字はどこから来ているのでしょうか? 正確には何をしているのmap2almですか?これはどのようにして単純な近似になるのでしょうか?

私は 2209 a_lm を期待しています。300と計算しました。

4

2 に答える 2

3

ピクセルと球面調和係数の間に直接的な関係はありません。

次のように想像できます。マップ ピクセルはデータであり、データに「適合」する球面調和関数です。球面調和関数は、無限に多くの (正規直交) 関数のシステムです。

ここで、無限に多くの関数をデータ (ピクセル) に「適合」させるのではなく、制限があります。lmax または mmax またはその両方を設定します。(球面調和関数は通常、l と m の 2 つの数値でラベル付け/識別されます)。

l と m は整数で、l は 0 から無限大まで、l ごとに m は -m から m までです。

たとえば、lmax が 2 で m に制限がない場合、1+3+5=9 個の関数を扱っていることになります。したがって、マップのピクセル数に関係なく、9 つの alm 係数 (=「適合」の結果) が得られます。

これまでのところとても良いです。ここで、球面調和関数は複素関数であり、係数も同様です。しかし、地図は純粋に本物です。したがって、球面調和関数 (ウィキペディアで十分です) を読むと、基本的に Y_l,m=(-1)^m Y*_l,-m というプロパティを使用して、球面調和関数の実基底を定義する方法がわかります。星印は複雑な結合を表します。

この基底関数のパラメータとして複素数を使用する場合、いくつ必要ですか? 与えられた l に対して、l+1 個の複素数が必要になります (l=0 から数えることを思い出してください)。与えられた l を合計すると、次のようになります。

l=0 --> 1
l=1 --> 1+2=3
l=2 --> 1+2+3=6
l=3 --> 1+2+3+4=10
etc.

(これを 3*nside-1 まで合計すると、nside 8 で 300 になることに注意してください)

また重要なことは、これらの複素係数のちょうど l+1 に対して、それらの虚数部がゼロになることに注意することです! (Y_l0 に対応するもの)。ここで、独立したパラメーターの数を数えると、たとえば l=3 の場合:

l=3 --> 1+2+3+4=10

したがって、10 個の複素数 = 20 個の独立したパラメーターです。しかし、そのうちの 4 つは実部 20-4=16 しかありません。完全な虚数 Y_lm には 32 個の独立したパラメーターがあり、実部にはその半分があるため、まさに期待通りです。

于 2015-06-14T08:15:57.750 に答える
0

したがって、前述のように、パラメータl_maxは球面調和係数 a_{lm} の数を決定します。lパラメータの a の数は からまでa_0ですa_{lmax}mパラメータは によって決定されますl_{max}, l_{max}-1, l_{max}-2, ...., -l_{max}+2, -l_{max}+1, -l_{max}

mしたがって、あたりの値の総数lは で与えられます2l+1。たとえばl=0、 1ml=1与え、3ml=2与え、5 を与えますm

Healpix map2alm/Healpy で使用される関数は、入力パラメータ を受け取りnside、デフォルトとして を使用して球面調和関数を計算します3*nside-1

ただし、nsideマップごとのピクセルの総数も決定します。ピクセルの総数npixは で与えられnpix = 12*nside**2ます。

レビューする:

npix = 12 * nside ** 2

l_max = 3 * nside - 1

したがって、球面調和係数の総数は ~ の和級数i=0ですi= 2 * lmax + 1。のデフォルト パラメータを使用すると、 からまでmap2almの合計が得られます(つまり)i=0i = 6 * nside - 12(3*nside-1) + 1

与えられたマップでは、ピクセル12 * nside ** 2の総数は であり、球面調和係数の総数a_lmは の合計ですi=0 to i= 6*nside-1

正しい?

于 2015-06-15T19:33:55.977 に答える