4

我正在尝试找到一种方法来检测共振的行星的轨道参数(周期、偏心率、半长轴......)。

我知道如果两个行星之间的比率是可公度的,这意味着它们处于共振状态,但是假设我想知道它们在哪个共振中,我该怎么做呢?

例如,我有 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

从一个行星系统更改为另一个系统的诀窍是将一个系统的所有行星重命名为相同的数字,将另一个系统的行星重命名为另一个数字,这样,我就可以将共振条件从一个系统更改为另一个系统一。

程序很简单:

  1. 读取文件并保存列和行号,
  2. 创建并保存 col*row 对象的矩阵,
  3. 将行星的“名称”和“周期”保存为向量,
  4. 开始循环:
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

问题:

  1. 我无法理解如何消除共振的倍增(2:4、3:6 等);
  2. 在第二个 for 循环(有行星的那个)中,行星的数量每次都必须改变,但我不明白如何改变它。
4

1 回答 1

1

首先,每个实数都可以表示为具有任何有限精度的整数的比率。当我们在十进制系统中用越来越多的数字表示数字时,这尤其是我们所做的。因此,您不仅需要检查轨道周期是否处于某个整数与整数的比率中,还需要检查两个整数是否相对较小。这是任意决定,这是“小”的。

其次,请记住,如果一个浮点值不是另一个的副本,则两个浮点值通常是不同的。例如3*(1/3)可能不等于 1。这是有限精度的结果:1/3 在以二进制表示时无限重复,因此在存储在内存中时会在某处被截断。所以你不应该检查周期比率是否等于某个比率,而应该检查它是否足够接近某个比率。说什么是“足够接近”是任意的。

因此,最快的方法是构建一个由一些相对较小的整数组成的比率数组,然后对其进行排序并删除重复项(3:3 = 2:2,并且您的数组中不需要多个比率)。(请记住,重复项不是彼此相等,而是彼此足够接近。)然后,为每两个行星计算轨道周期比并二进制搜索您的表以获得最接近的值。如果它足够近,你就会发现共鸣。

于 2014-03-29T09:29:07.743 回答