我正在尝试找到一种方法来检测共振的行星的轨道参数(周期、偏心率、半长轴......)。
我知道如果两个行星之间的比率是可公度的,这意味着它们处于共振状态,但是假设我想知道它们在哪个共振中,我该怎么做呢?
例如,我有 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
非常感谢。
我制作了这个程序,我有一个 2xN 矩阵,其中的列是行星的 ID 及其周期,行是行星的数量,例如:
1 0.44
1 0.8
1 0.9
2 0.9
2 1.2
3 2.0
3 3.0
从一个行星系统更改为另一个系统的诀窍是将一个系统的所有行星重命名为相同的数字,将另一个系统的行星重命名为另一个数字,这样,我就可以将共振条件从一个系统更改为另一个系统一。
程序很简单:
- 读取文件并保存列和行号,
- 创建并保存 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 等);
- 在第二个 for 循环(有行星的那个)中,行星的数量每次都必须改变,但我不明白如何改变它。