mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - シュバルツシルト半径の計算!

[ プログラミング, 暦・カレンダー ] [ Ruby, カレンダー ]

こんばんは。

太陽系の太陽・惑星・月のシュバルツシルト半径(Schwarzschild radius)を計算してみました。

0. 前提条件

  • Ruby 2.3.1-p112 での作業を想定。

1. シュバルツシルト半径について

専門ではないので詳細に説明できないが、簡単に言うと、

  • 強い重力による時空の歪みの影響で、一度入ったら光でさえ抜け出せなくなる天体の半径。
  • ブラックホールなら、その大きさを表すものとして使われる。
  • シュバルツシルト半径の計算式は、
    但し、
  • ひいては、天体の視位置を正確に計算する際に、質量の大きな天体の重力場による光の曲がりに関わってくる。

2. Ruby スクリプトの作成

単純に計算式に当てはめて計算しているだけ。

但し、

calc_schwarzschild_radius.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#! /usr/local/bin/ruby
# coding: utf-8
#---------------------------------------------------------------------------------
#= シュバルツシルト半径(Schwarzschild radius) の計算
#  : JPL DE430 の惑星質量データを利用して、太陽・惑星・月のシュバルツシルト半径を求める。
#
#  * JPL データ  : ftp://ssd.jpl.nasa.gov/pub/eph/planets/ascii/de430/header.430_572
#  * 万有引力定数: http://physics.nist.gov/cgi-bin/cuu/Value?bg
#  * シュバルツシルト半径 r = 2 * G * M / c^2
#
# date          name            version
# 2016.07.18    mk-mode.com     1.00 新規作成
#
# Copyright(C) 2016 mk-mode.com All Rights Reserved.
#---------------------------------------------------------------------------------
#++

class CalcSchwarzschildRadius
  MASS = {
    "  太陽" => 1.988475e+30,
    "  水星" => 3.301096e+23,
    "  金星" => 4.867466e+24,
    "  地球" => 5.972365e+24,
    "    月" => 7.346031e+22,
    "  火星" => 6.417120e+23,
    "  木星" => 1.898580e+27,
    "  土星" => 5.684766e+26,
    "天王星" => 8.682168e+25,
    "海王星" => 1.024340e+26,
    "冥王星" => 1.463872e+22
  }                  # 天体の質量   (単位: kg)
  C  = 299792458.0   # 光の速度     (単位: m/s)
  G  = 6.67408e-11   # 万有引力定数 (単位: m^3 kg^-1 s^-2)

  def calc
    puts "[シュバルツシルト半径]"
    MASS.each do |k, m|
      printf("  %s: %13.8f m\n", k, 2 * G * m / (C * C))
    end
  rescue => e
    msg = "[#{e.class}] #{e.message}\n"
    msg << e.backtrace.each { |tr| "\t#{tr}"}.join("\n")
    $stderr.puts msg
    exit 1
  end
end

exit 0 unless __FILE__ == $0
CalcSchwarzschildRadius.new.calc

3. Ruby スクリプトの実行

1
2
3
4
5
6
7
8
9
10
11
12
13
$ ./calc_schwarzschild_radius.rb
[シュバルツシルト半径]
    太陽: 2953.24945925 m
    水星:    0.00049027 m
    金星:    0.00722908 m
    地球:    0.00887006 m
      月:    0.00010910 m
    火星:    0.00095306 m
    木星:    2.81973892 m
    土星:    0.84429184 m
  天王星:    0.12894609 m
  海王星:    0.15213325 m
  冥王星:    0.00002174 m

太陽系惑星の視位置を正確に計算するのに必要な情報だったので、調査・計算してみた次第です。

以上。

Comments