Top Level Namespace
Defined Under Namespace
Modules: Vivlio
Constant Summary collapse
- SPEED_OF_LIGHT =
万有引力定数 [m³/kg/s²]
2.99792458e8- G =
万有引力定数 G 6.67430(15) (15) は末尾2桁の不確かさを示す:6.67430 ± 0.00015
6.67430e-11- SOLAR_MASS =
光速 [m/s]
1.9884e30- SOLAR_RADIUS =
太陽の質量 [kg]
6.957e8
Instance Method Summary collapse
-
#brownian_motion(steps:, delta: 1.0) ⇒ Array<Array<Float>>
ブラウン運動の軌跡を生成する 各ステップでランダムな方向に delta だけ移動する2次元ランダムウォーク.
-
#energy_from_mass(mass_kg) ⇒ Float
質量からエネルギーを計算する(E = mc²).
-
#gravitational_deflection(mass_kg, radius_m) ⇒ Float
重力による光の曲がり角をラジアンで返す(一般相対性理論).
-
#greet(name) ⇒ Object
サンプルコード: include 記法のデモ用 このファイルは codes/sample.rb として原稿から参照されます.
-
#lorentz_factor(velocity_ratio) ⇒ Float
ローレンツ因子 γ を計算する 速度が光速に近づくほど γ は大きくなり、時間の遅れが顕著になる.
-
#mean_square_displacement(trajectory) ⇒ Float
軌跡の平均二乗変位(MSD)を計算する MSD は粒子の拡散の広がりを示す指標で、ステップ数に比例して増加する.
-
#prime?(n) ⇒ Boolean
与えられた整数が素数かどうかを判定する.
-
#sieve_of_eratosthenes(n) ⇒ Array<Integer>
エラトステネスの篩で n 以下の素数を列挙する.
-
#time_dilation(proper_time, velocity_ratio) ⇒ Float
時間の遅れを計算する(特殊相対性理論) 高速で移動する系では、静止系から見て時間の進みが遅くなる.
-
#to_arcseconds(radians) ⇒ Float
ラジアンを秒角(arcseconds)に変換する 天文学では微小な角度を秒角で表すことが多い(1度 = 3600秒角).
Instance Method Details
#brownian_motion(steps:, delta: 1.0) ⇒ Array<Array<Float>>
ブラウン運動の軌跡を生成する各ステップでランダムな方向に delta だけ移動する2次元ランダムウォーク
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/project_scaffold/codes/brownian_motion.rb', line 10 def brownian_motion(steps:, delta: 1.0) x, y = 0.0, 0.0 trajectory = [[x, y]] steps.times do angle = rand * 2 * Math::PI x += delta * Math.cos(angle) y += delta * Math.sin(angle) trajectory << [x.round(4), y.round(4)] end trajectory end |
#energy_from_mass(mass_kg) ⇒ Float
質量からエネルギーを計算する(E = mc²)
9 10 11 |
# File 'lib/project_scaffold/codes/mass_energy.rb', line 9 def energy_from_mass(mass_kg) mass_kg * SPEED_OF_LIGHT**2 end |
#gravitational_deflection(mass_kg, radius_m) ⇒ Float
重力による光の曲がり角をラジアンで返す(一般相対性理論)
16 17 18 |
# File 'lib/project_scaffold/codes/gravitational_lensing.rb', line 16 def gravitational_deflection(mass_kg, radius_m) 4 * G * mass_kg / (SPEED_OF_LIGHT**2 * radius_m) end |
#greet(name) ⇒ Object
サンプルコード: include 記法のデモ用このファイルは codes/sample.rb として原稿から参照されます
4 5 6 |
# File 'lib/project_scaffold/codes/sample.rb', line 4 def greet(name) puts "こんにちは、#{name}さん!" end |
#lorentz_factor(velocity_ratio) ⇒ Float
ローレンツ因子 γ を計算する速度が光速に近づくほど γ は大きくなり、時間の遅れが顕著になる
10 11 12 |
# File 'lib/project_scaffold/codes/time_dilation.rb', line 10 def lorentz_factor(velocity_ratio) 1.0 / Math.sqrt(1 - velocity_ratio**2) end |
#mean_square_displacement(trajectory) ⇒ Float
軌跡の平均二乗変位(MSD)を計算するMSD は粒子の拡散の広がりを示す指標で、ステップ数に比例して増加する
28 29 30 |
# File 'lib/project_scaffold/codes/brownian_motion.rb', line 28 def mean_square_displacement(trajectory) trajectory.map { |x, y| x**2 + y**2 }.sum / trajectory.size end |
#prime?(n) ⇒ Boolean
与えられた整数が素数かどうかを判定する
7 8 9 10 11 12 |
# File 'lib/project_scaffold/codes/prime.rb', line 7 def prime?(n) return false if n < 2 return true if n < 4 (2..Math.sqrt(n).to_i).none? { n % it == 0 } end |
#sieve_of_eratosthenes(n) ⇒ Array<Integer>
エラトステネスの篩で n 以下の素数を列挙する
7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/project_scaffold/codes/prime2.rb', line 7 def sieve_of_eratosthenes(n) return [] if n < 2 is_prime = Array.new(n + 1, true) is_prime[0] = is_prime[1] = false (2..Math.sqrt(n).to_i).each do |i| next unless is_prime[i] (i * i..n).step(i) { is_prime[it] = false } end is_prime.each_index.select { is_prime[it] } end |
#time_dilation(proper_time, velocity_ratio) ⇒ Float
時間の遅れを計算する(特殊相対性理論)高速で移動する系では、静止系から見て時間の進みが遅くなる
19 20 21 |
# File 'lib/project_scaffold/codes/time_dilation.rb', line 19 def time_dilation(proper_time, velocity_ratio) proper_time * lorentz_factor(velocity_ratio) end |
#to_arcseconds(radians) ⇒ Float
ラジアンを秒角(arcseconds)に変換する天文学では微小な角度を秒角で表すことが多い(1度 = 3600秒角)
24 25 26 |
# File 'lib/project_scaffold/codes/gravitational_lensing.rb', line 24 def to_arcseconds(radians) radians * (180.0 / Math::PI) * 3600 end |