太陽と惑星の間には、万有引力が働いています。
地球の重さを \(m_e\) 、太陽の重さを
\(m_s\)、距離を \(r\)、万有引力定数を \(G=6.67259\times 10^{-11}~[\mathrm{N\cdot
m^2/kg^2}]\)として
   \(F=\dfrac{Gm_em_s}{r^2}\)
地球の位置を \((x,y)\)、太陽の位置を
\((0,0)\)とすると、 
   \(\overrightarrow{F}=-\dfrac{Gm_em_s}{r^2}(x,y)/\sqrt{x^2+y^2}\)
引力は、成分ごとに計算すればよく、
   \(F_x=-\dfrac{Gm_em_s}{(x^2+y^2)^{\frac{3}{2}}}x~~,~~~F_y=-\dfrac{Gm_em_s}{(x^2+y^2)^{\frac{3}{2}}}y\)
\(F_x=m_ea_x,~~F_y=m_ea_y\) なので、
    \(a_x=-\dfrac{Gm_s}{(x^2+y^2)^{\frac{3}{2}}}x~~,~~~a_y=-\dfrac{Gm_s}{(x^2+y^2)^{\frac{3}{2}}}y\)
地球の軌道は、2階微分方程式
   \(\dfrac{d^2x}{dt^2}=-\dfrac{Gm_s}{(x^2+y^2)^{\frac{3}{2}}}x(t)~~,~~~\dfrac{d^2y}{dt^2}=-\dfrac{Gm_s}{(x^2+y^2)^{\frac{3}{2}}}y(t)\)  で表現されます。
数値計算法を用いて、地球の軌道を算出しましょう。
太陽と地球の距離を、149600000000メートルとします。
天文学では、\(1.496\times 10^{11}\)メートル、コンピュータでの表記は 1.496E+11 となります。
G=6.67259*10^{-11};me=5.974*10^{24};ms=1.989*10^{30}
x=1.496*10^{11};y=0;vx=0;vy=2.3*10^{4}
dt=86400
xlist=c();ylist=c()
ax <- function(x, y) {
  ax <- -(G*ms*x)/(x^2+y^2)^{3/2}            # x方向の加速度を求める
  return(ax)
}
ay <- function(x, y) {
  ay <- -(G*ms*y)/(x^2+y^2)^{3/2}              # y方向の加速度を求める
  return(ay)
}
for (i in 1:200){
  xlist = c(xlist, x)
  ylist = c(ylist, y)
  vx = vx+ax(x,y)*dt
  vy = vy+ay(x,y)*dt
  x = x+vx*dt
  y = y+vy*dt
}  
df = data.frame(x=xlist,y=ylist)
head(df)
| x | y | 
|---|---|
| 149600000000 | 0 | 
| 149555731631 | 1987200000 | 
| 149467180410 | 3973811598 | 
| 149334329088 | 5959245411 | 
| 149157157655 | 7942910612 | 
| 148935643353 | 9924214469 | 
plot(df$x,df$y,col="blue",asp=1)
G=0.001;me=1;ms=10000
x=10;y=0;vx=0;vy=1
xlist=c();ylist=c()
ax <- function(x, y) {
  ax <- -(G*ms*x)/(x^2+y^2)^{3/2}            # x方向の加速度を求める
  return(ax)
}
ay <- function(x, y) {
  ay <- -(G*ms*y)/(x^2+y^2)^{3/2}              # y方向の加速度を求める
  return(ay)
}
for (i in 1:60){
  xlist = c(xlist, x)
  ylist = c(ylist, y)
  vx = vx+ax(x,y)
  vy = vy+ay(x,y)
  x = x+vx
  y = y+vy
}  
df = data.frame(x=xlist,y=ylist)
head(df)
| x | y | 
|---|---|
| 10.000000 | 0.000000 | 
| 9.900000 | 1.000000 | 
| 9.699511 | 1.989850 | 
| 9.399105 | 2.959201 | 
| 9.000465 | 3.897625 | 
| 8.506435 | 4.794741 | 
plot(df$x,df$y,asp=1)