Module: Num4MechaEquLib
- Defined in:
- lib/num4mechaequ.rb
Overview
数値計算による力学方程式の解法するライブラリ
Class Method Summary collapse
-
.DHM(m, k, b, t, h0, v0) ⇒ hash[]
減衰振動(damped harmonic motion).
-
.forcedOscillation(m, k, w0, w, t, h0, v0) ⇒ hash[]
強制振動.
-
.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
.DHM(m, k, b, t, h0, v0) ⇒ hash[]
減衰振動(damped harmonic motion)
179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/num4mechaequ.rb', line 179 def DHM(m, k, b, t, h0, v0) @l = 2 * m * b @w = Math.sqrt((k / m)) hvt = [] yi_1 = [] yi = [h0, v0] 0.step(t, @dt) { |x| yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @DHMFunc) hvt.push({"t" => x, "h" => yi_1[0], "v" => m * yi_1[1]}) yi = yi_1 } return hvt end |
.forcedOscillation(m, k, w0, w, t, h0, v0) ⇒ hash[]
強制振動
204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/num4mechaequ.rb', line 204 def forcedOscillation(m, k, w0, w, t, h0, v0) @w = Math.sqrt((k / m)) hvt = [] yi_1 = [] yi = [h0, v0] 0.step(t, @dt) { |x| @ft = w / m * Math.cos(w * x) yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @forcedFunc) hvt.push({"t" => x, "h" => yi_1[0], "v" => m * yi_1[1]}) yi = yi_1 } return hvt end |
.freeFallMotion(m, c, t, h0, v0) ⇒ hash[]
自由落下による運動方程式(空気抵抗有り)
88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/num4mechaequ.rb', line 88 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[]
振り子運動
166 167 168 |
# File 'lib/num4mechaequ.rb', line 166 def pendulumMotion(m, l, t, h0, v0) return SHM(m, l, t, h0, v0) end |
.projectileMotion(m, theta, t, h0, v0) ⇒ hash[]
放物運動
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/num4mechaequ.rb', line 112 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)
65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/num4mechaequ.rb', line 65 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, @SHMFunc) 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)
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/num4mechaequ.rb', line 139 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 |