Module: Num4MechaEquLib
- Defined in:
- lib/num4mechaequ.rb
Overview
数値計算による力学方程式の解法するライブラリ
Class Method Summary collapse
-
.freeFallMotion(m, c, t, h0, v0) ⇒ hash[]
自由落下による運動方程式(空気抵抗有り).
-
.pendulumMotion(m, l, t, h0, v0) ⇒ hash[]
振り子運動.
-
.projectileMotion(m, theta, t, h0, v0) ⇒ hash[]
放物運動.
-
.SHM(m, k, t, h0, v0) ⇒ hash[]
単振動(simple harmonic motion).
-
.UCM(m, r, w, t) ⇒ hash[]
等速円運動(Uniform Circular motion).
Class Method Details
.freeFallMotion(m, c, t, h0, v0) ⇒ hash[]
自由落下による運動方程式(空気抵抗有り)
72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/num4mechaequ.rb', line 72 def freeFallMotion(m, c, t, h0, v0) @w = c / m hvt = [] yi_1 = [] yi = [h0, v0] 0.step(t, @dt) { |x| yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @motionFunc) hvt.push({"t" => x, "h" => yi_1[0], "v" => m * yi_1[1]}) yi = yi_1 } return hvt end |
.pendulumMotion(m, l, t, h0, v0) ⇒ hash[]
振り子運動
150 151 152 |
# File 'lib/num4mechaequ.rb', line 150 def pendulumMotion(m, l, t, h0, v0) return SHM(m, l, t, h0, v0) end |
.projectileMotion(m, theta, t, h0, v0) ⇒ hash[]
放物運動
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/num4mechaequ.rb', line 96 def projectileMotion(m, theta, t, h0, v0) hvt = [] yxi_1 = [] yyi_1 = [] yxi = [h0, v0 * Math.cos(theta)] yyi = [h0, v0 * Math.sin(theta)] 0.step(t, @dt) { |x| yxi_1 = Num4SimDiffLib.rungeKuttaMethod(yxi, @dt, @projectileXFunc) yyi_1 = Num4SimDiffLib.rungeKuttaMethod(yyi, @dt, @projectileYFunc) hvt.push({"t" => x, "x" => {"h" => yxi_1[0], "v" => m * yxi_1[1]}, "y" => {"h" => yyi_1[0], "v" => m * yyi_1[1]}, } ) yxi = yxi_1 yyi = yyi_1 } return hvt end |
.SHM(m, k, t, h0, v0) ⇒ hash[]
単振動(simple harmonic motion)
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/num4mechaequ.rb', line 49 def SHM(m, k, t, h0, v0) @w = Math.sqrt((k / m)) hvt = [] yi_1 = [] yi = [h0, v0] 0.step(t, @dt) { |x| yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @springFunc) hvt.push({"t" => x, "h" => yi_1[0], "v" => m * yi_1[1]}) yi = yi_1 } return hvt end |
.UCM(m, r, w, t) ⇒ hash[]
等速円運動(Uniform Circular motion)
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/num4mechaequ.rb', line 123 def UCM(m, r, w, t) hvt = [] h = [] v = [] 0.step(t, @dt) { |x| sinwt = Math.sin(w * x) coswt = Math.cos(w * x) h = [r * coswt, r * sinwt] v = [r * w * -sinwt, r * w * coswt] a = [-r * w * w * coswt, -r * w * w * sinwt] hvt.push({"t" => x, "x" => {"h" => h[0], "v" => m * v[0]}, "y" => {"h" => h[1], "v" => m * v[1]}, } ) } return hvt end |