太陽と惑星の間には、万有引力が働いています。
地球の重さを \(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)