![見出し画像](https://assets.st-note.com/production/uploads/images/159405429/rectangle_large_type_2_aab7ef57c7b4b75bf8ceea22f7cca276.jpeg?width=1200)
元少年の自由研究:ブラックホールの重力レンズ効果をみたい!!🕳✨
宇宙好きの皆さん、こんにちは!元少年です。夜空を見上げて、ブラックホールについて思いを馳せたことはありますか?ブラックホールは宇宙の中でも最も神秘的な天体の一つで、その重力は光さえも逃がさないほど強力です。今回は、ブラックホールの重力レンズ効果と時空の歪みをPythonを使ってシミュレーションし、その結果を皆さんと共有したいと思います。
ブラックホールって何?
ブラックホールは、非常に大きな質量が極めて小さな空間に圧縮された天体です。その重力は光さえも脱出できないほど強力で、周囲の時空を大きく歪めます。ブラックホールの境界は「事象の地平面」と呼ばれ、この境界を超えると何も戻ってくることはできません。
シュワルツシルト半径
![](https://assets.st-note.com/img/1729843637-pBTbwzSGLQfiK4N0Iy3MrR2E.png?width=1200)
ブラックホールのサイズは、そのシュワルツシルト半径で決まります。これは、ある質量がブラックホールになるための半径を示します。質量 $${M}$$ の物体のシュワルツシルト半径 $${R_s}$$は、次の式で与えられます:
$${R_s = \frac{2GM}{c^2}}$$
$${G}$$ は万有引力定数、
$${c}$$ は光速です。
重力レンズ効果とは?
重力レンズ効果は、質量を持つ天体がその周囲の時空を歪めることで、背景の光が曲げられる現象です。これは、光が歪んだ時空を通過する際に、その経路が曲がるためです。
![](https://assets.st-note.com/img/1729923468-z1foR5ud9FWYvMrZytXJL8S0.png?width=1200)
光の進路の曲がり
光は通常、直進しますが、強い重力場ではその経路が曲げられます。これは、質量が時空を歪め、その歪んだ時空に沿って光が進むからです。ブラックホールの近くでは、この効果が特に顕著になります。
重力レンズ効果の観測
重力レンズ効果は、遠方の星や銀河の観測で確認されています。例えば、遠くの銀河の光が手前の銀河団の重力によって曲げられ、地球から見ると複数の像として観測されることがあります。
時空の歪みと一般相対性理論
一般相対性理論は、アルベルト・アインシュタインによって提唱された重力の理論で、質量が時空を歪め、その歪みが重力として観測されると説明します。
![](https://assets.st-note.com/img/1729923934-ikQJLdGK3FTIXv7w8oxN50CA.png?width=1200)
時空の曲面としての表現
時空の歪みは、2次元の曲面として視覚化することができます。質量の大きい天体ほど、その周囲の時空を深く歪めます。ブラックホールの場合、この歪みは極端に深くなり、「底なしの井戸」のようなイメージになります。
光の経路と時空の歪み
光は、歪んだ時空に沿って最短経路を進みます。このため、時空が歪んでいると光の経路も曲がります。ブラックホールの近くでは、この曲がりが非常に大きくなり、光がブラックホールの周囲を何周も回ることもあります。
シミュレーションの目的
今回のシミュレーションでは、ブラックホールの重力レンズ効果と時空の歪みを視覚的に表現することを目指します。Pythonを使って、2Dと3Dの両方でブラックホールの影響を可視化し、光がどのように曲げられるか、時空がどのように歪むかを理解することができます。
シミュレーション結果
早速ですが、今回の結果を見てみましょう!!
![](https://assets.st-note.com/img/1729927745-47xoi3VALCwjcKqMS5RdzZEe.png?width=1200)
2D表示
背景にある星々がブラックホールの強力な重力によって引き寄せられ、歪んで見える様子が描かれています。ブラックホールの縁に近づくほど光が大きく曲がり、視覚的に重力レンズ効果が表現されています。特に、ブラックホール周囲で光が密集している光のリングが際立ち、ブラックホールの存在感を一層強調しています。
3D表示
ブラックホールによって引き起こされる時空の歪みが、立体的な曲面で表現されています。光の経路がこの歪んだ時空に沿って進んでいく様子が描かれており、重力の影響で光がどのように曲げられるかを立体的に確認できます。ブラックホールに近づくほど時空の湾曲が強まり、光が一層引き寄せられている様子が観察されます。
それでは、実際にどのようなコードを用いてこのシミュレーションが実現されたのか見ていきましょう!
シミュレーションコードの解説
主要なライブラリのインポート
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.colors as colors
NumPy (numpy):数値計算用ライブラリ。配列や距離計算に使用します。
Matplotlib.pyplot (matplotlib.pyplot):グラフ描画ライブラリで、ブラックホール周辺の重力レンズ効果や時空の歪みを2D・3Dで視覚化します。
mpl_toolkits.mplot3d (mpl_toolkits.mplot3d):Matplotlibの3Dプロット用ツールキット。ブラックホール周辺の時空の歪みを立体的に表現します。
Matplotlib.colors (matplotlib.colors):色設定とカラーマップ調整用モジュール。時空の歪みを色で視覚的に強調するために使用します。
ブラックホールシミュレーターのクラス定義
class BlackHoleSimulator:
def __init__(self, grid_size=100, black_hole_radius=2, schwarzschild_radius=1):
grid_size:シミュレーション領域の分割数。値を大きくすると解像度が上がります。
black_hole_radius:ブラックホールの見た目の半径を設定し、視覚的な大きさを決めます。
schwarzschild_radius:ブラックホールのシュワルツシルト半径。ここに入った光は吸収され、脱出できません。
グリッドと星の初期位置の設定
self.x = np.linspace(-10, 10, grid_size)
self.y = np.linspace(-10, 10, grid_size)
self.X, self.Y = np.meshgrid(self.x, self.y)
シミュレーション領域を-10から10の範囲で設定し、グリッドを作成します。
背景の星々の生成
# 背景の星々の位置
np.random.seed(42)
self.n_stars = 2500 # 星の数を増やす
r = np.random.uniform(0, 10, self.n_stars) # 極座標でランダムに配置
theta = np.random.uniform(0, 2*np.pi, self.n_stars)
self.stars = np.column_stack((r * np.cos(theta), r * np.sin(theta)))
乱数の種:再現性のために設定しています。
星の数:1000個の星を背景にランダム配置します。
self.stars:極座標の $${r}$$ と $${\theta}$$ から、星の2D座標を生成しています。
光の偏向計算
def calculate_deflection(self, positions):
"""
正確な一般相対性理論に基づく光の曲がり計算
"""
r = positions - self.black_hole_pos
dist = np.sqrt(np.sum(r**2, axis=1))
dist = np.maximum(dist, 1e-10)
# シュバルツシルト半径を考慮した修正重力場
deflection = -2 * self.schwarzschild_radius * r / dist[:, np.newaxis]**3
deflection *= (1 + 2 * self.schwarzschild_radius / dist[:, np.newaxis])
# イベントホライズン内の光を完全に吸収
mask = dist < self.schwarzschild_radius
deflection[mask] = 0
return deflection
dist:各位置からブラックホールまでの距離を計算。
光の曲がり:シュワルツシルト半径に基づき、重力による光の偏向を計算します。ブラックホールに近づくほど強く曲げられます。
イベントホライズン:ブラックホールのシュワルツシルト半径内に入る光は吸収され、脱出できなくなります。
時空の歪みの計算
def calculate_spacetime_curvature(self, x, y):
"""
時空の歪みを計算
"""
r = np.sqrt(x**2 + y**2)
r = np.maximum(r, 1e-10)
curvature = -self.black_hole_radius / (r + 1)
return curvature
r = np.sqrt(x**2 + y**2):各点の距離$${r}$$ を計算し、ブラックホール中心からの距離を求めます。
r = np.maximum(r, 1e-10):ゼロ除算を避けるために、最小値を $${1 \times 10^{-10}}$$に設定しています。
curvature = -self.black_hole_radius / (r + 1):距離$${r}$$ に基づいて時空の歪み(曲率)を計算します。ブラックホールに近づくほど曲率の絶対値が大きくなり、強い重力効果を表します。
シミュレーションの限界と改善点
限界
簡略化されたモデル:シミュレーションでは、一般相対性理論の複雑な数式すべてを取り入れているわけではなく、基本的な計算に簡略化しています。
2次元での近似:実際の空間は3次元ですが、シミュレーションを簡略化するために2次元でのモデル化を行っています。
改善点
3Dシミュレーションへの拡張:光の経路や時空の歪みを3次元でシミュレーションすることで、さらに現実的で正確なモデルに近づけられます。
一般相対性理論の詳細な適用:アインシュタイン方程式をより正確に数値的に解くことで、リアルな重力効果のシミュレーションが可能になります。
ブラックホールの回転を考慮:回転するブラックホール(カール・ブラックホール)をシミュレーションに追加することで、より複雑で現実的な現象を再現することができます。
まとめ
今回のシミュレーションを通じて、ブラックホールの重力レンズ効果と時空の歪みを視覚的に理解することができました。光がブラックホールの近くを通過する際にどのように曲げられるか、そして時空がどのように歪んでいるかをPythonを使ってシミュレーションすることで、宇宙の神秘に一歩近づくことができたのではないでしょうか。
ブラックホールはまだ多くの謎に包まれていますが、このようなシミュレーションを通じて、その性質や周囲の現象を学ぶことができます。これからも一緒に宇宙の謎を解き明かしていきましょう!
ここから先は、有料記事になります!✨
この有料記事では、Pythonコードを丁寧に解説し、各部分の役割や機能をわかりやすく説明していきます。さらに、シミュレーションの拡張方法も紹介します。
サポートしていただけると、とても嬉しいです!あなたのご支援が、今後の充実したコンテンツ作成の励みになります。引き続き、一緒に宇宙の旅を楽しみながら、新たな発見をしていきましょう!😊
コード全文
Pythonを使ってブラックホール周辺の重力レンズ効果と時空の歪みをシミュレーションするコードについて詳しく解説します。丁寧に説明していきますので、ぜひ最後までお読みください!!
ここから先は
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?