軌道パラメータ(周期、離心率、長半径など)から共鳴している惑星を検出する方法を見つけようとしています。
2 つの惑星の比率が一致している場合、これはそれらが共鳴していることを意味することを知っていますが、それらがどの共鳴状態にあるかを知りたいとしたら、どうすればそれを行うことができますか?
たとえば、N 個の惑星と周期のマトリックスがあります。惑星がどの共鳴にあるかを確認するループを作成するにはどうすればよいですか?
何かのようなもの:
for i=1, N
P(i)/P(i-1)=m
if m (check the resonance condition) then
write (planets parameters)
end if
end for
どうもありがとう。
私はこのプログラムを作成します。列が惑星のIDとその周期である2xNマトリックスがあり、行は惑星の数です。たとえば、次のようなものです。
1 0.44
1 0.8
1 0.9
2 0.9
2 1.2
3 2.0
3 3.0
惑星のあるシステムから別のシステムに変更するトリックは、システムのすべての惑星を同じ番号に変更し、他のシステムの惑星を別の番号に変更することです。そのため、あるシステムから別のシステムに共鳴条件を変更することができます1。
プログラムは簡単です:
- ファイルを読み取り、列と行の番号を保存します。
- col*row オブジェクトのマトリックスを作成して保存します。
- 惑星の「名前」と「期間」をベクトルとして保存し、
- サイクルを開始します。
for r=1,row <--- THIS MUST READ all the file
if (difference in name = 0.) then start the resonance find criterion
for l = 0,4 (number of planet in each system: THIS MUST BE MODIFIED !!)
for i = 1,5
for j = 1,5
if (i*period(l)-j*period(l+1) eq 0) <- RESONANCE CONDITION !!!
then write on file
end for
end for
end for
else write a separation between the first set and second set of planets !
end for
これは私が書いたIDLコードです:
pro resfind
file = "data.dat"
rows =File_Lines(file) ; per le righe
openr,lun,file,/Get_lun ; per le colonne
line=""
readf,lun,line
cols = n_elements(StrSplit(line, /RegEx, /extract))
openr,1,"data.dat"
data = dblarr(cols,rows)
readf,1,data
close,1
name = data(0,*)
period = data(1,*)
openw,2,"find.dat"
for r = 0, rows-2 DO BEGIN ;
if (name(r)-name(r+1) EQ 0) then begin
for l = 0,rows-2 do begin
for j = 1,4 do begin
for i = 1,4 do begin
if (abs(i*period(l)-j*period(l+1)) EQ 0.) then begin
printf,2, 'i resonance:', i , ' j resonance:',j,' planet ID:',l,' planet ID:',l+1
endif
endfor
endfor
endfor
endif else begin
printf,2, ' '
endfor
close,2
end
問題:
- レゾナンスの倍数 (2:4、3:6 など) を削除する方法がわかりません。
- 2 番目の for ループ (惑星のループ) では、惑星の数を毎回変更する必要がありますが、これを変更する方法がわかりません。