2014-03-28 32 views
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 

非常感谢。

我做这个节目,我有一个2×N个矩阵,其中列有行星的ID和他们的时期,行是行星的数目,例如类似的东西:

1 0.44 
1 0.8 
1 0.9 
2 0.9 
2 1.2 
3 2.0 
3 3.0 

诀窍从一个星球系统改变为另一个系统的方法是,将一个系统的所有行星与另一个系统的星球重新命名为同一个号码,然后将另一个系统的行星改为另一个号码,这样我就可以将共振条件从一个系统改变为另一个系统。

程序很简单:

  1. 读取文件并保存列和行号,
  2. 创建和保存山坳*行对象的矩阵,
  3. 另存为载体的`名字`和`行星period`,
  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循环(与行星之一)行星的数量必须每次都改变,但我不明白如何改变这一点。
+0

只是好奇,你是什么意思,两个行星之间的比例是相称的,想知道更多关于这个和它背后的数学。 –

+0

哪部分你有困难?你可以写一个简单的嵌套循环来检查每个星球与所有其他星球。或者你在检查共振条件时有困难?如果是后者,我建议你从[轨道共振](http://en.wikipedia.org/wiki/Orbital_resonance)Wikipedia页面开始,然后探索其数学参考。有许多不同种类的共振,其中一些相当涉及数学。对于AD.Net和Jim Mischel, –

+0

的条件是平均运动共振,这意味着两个行星的轨道周期之间的比率等于两个整数之间的比率。例如:1:2,3:2,5:1等等。如果我只用x:1共振开始,条件是x必须是一个'小'整数。问题是,在if循环中,我必须声明后一个条件? –

回答

1

首先,每个实数可以表示为具有任何有限精度的整数的比率。特别是当我们用十进制数字表示数字越来越多时,我们会做什么。因此,您不仅需要检查轨道周期是否处于某个整数到整数的比例,而且如果这两个整数相对较小。这是任意决定,这是'小'。其次,请记住,如果一个不是另一个的副本,那么通常情况下两个浮点值不同。例如,3*(1/3)可能不等于1.这是精度有限的结果:以二进制表示时,1/3是无限重复的,所以当它存储在内存中时,它会在某处被截断。所以你不应该检查期间比率是否为等于到某个比率,而是如果它足够接近某个比率。它的随心所欲说什么是'够接近'。所以最快的方法是建立一些比较小的整数比例数组,然后对其进行排序并删除重复项(3:3 = 2:2,并且在数组中不需要多重比较)。 (请记住,重复不等于每一个,但那些彼此足够接近。)然后,对于每两个行星计算轨道周期比率和二进制搜索表中的最接近的值。如果足够接近,你会发现一个共振。