num4mechaequ 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/lib/num4mechaequ.rb +118 -9
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33f7db372d5c6d97cce0dfd47d9040d10178f575bc6394b84322079d96f605e6
|
4
|
+
data.tar.gz: a4ef6a9911a6ae1654c095def96600d283bf69e73657c0f39c8fbeb879e42090
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 014cabe8283d052239d19853b1591e2e981b2e1cc7c97a98d58d4d47439fc26393ec7f991d8c99628a8a5d448e6f86aa735b515ea5a40c816d339804497cb49b
|
7
|
+
data.tar.gz: de07a537f9ec64ee9046a6c84e758b3949916bc679fb851711ec00d01850b442bb53a6a46a85448cf62d3cb85c54002d4ce4fb6667b002828429f6a61d37c2cf
|
data/CHANGELOG.md
CHANGED
data/lib/num4mechaequ.rb
CHANGED
@@ -7,8 +7,10 @@ module Num4MechaEquLib
|
|
7
7
|
@g = 9.80665 # 重力加速度(m/s2)
|
8
8
|
@dt = 0.001 # 時間刻み
|
9
9
|
@w = 0.0
|
10
|
+
@l = 0.0
|
11
|
+
@ft = 0.0 # 外力
|
10
12
|
# 単振動
|
11
|
-
@
|
13
|
+
@SHMFunc = Proc.new do | n, yi |
|
12
14
|
f = []
|
13
15
|
f[0] = yi[1] # hの傾き値
|
14
16
|
f[1] = - @w * @w * yi[0] # vの傾き値
|
@@ -18,7 +20,7 @@ module Num4MechaEquLib
|
|
18
20
|
@motionFunc = Proc.new do | n, yi |
|
19
21
|
f = []
|
20
22
|
f[0] = yi[1] # hの傾き値
|
21
|
-
f[1] =
|
23
|
+
f[1] = @w * yi[1] - @g # vの傾き値
|
22
24
|
next f
|
23
25
|
end
|
24
26
|
# 放物運動
|
@@ -34,10 +36,24 @@ module Num4MechaEquLib
|
|
34
36
|
f[1] = - @g # vの傾き値
|
35
37
|
next f
|
36
38
|
end
|
39
|
+
# 減衰振動
|
40
|
+
@DHMFunc = Proc.new do | n, yi |
|
41
|
+
f = []
|
42
|
+
f[0] = yi[1]
|
43
|
+
f[1] = - @l * yi[1] - @w * @w * yi[0]
|
44
|
+
next f
|
45
|
+
end
|
46
|
+
# 強制振動
|
47
|
+
@forcedFunc = Proc.new do | n, yi |
|
48
|
+
f = []
|
49
|
+
f[0] = yi[1]
|
50
|
+
f[1] = - @w * @w * yi[0] + @ft
|
51
|
+
next f
|
52
|
+
end
|
37
53
|
class << self
|
38
54
|
|
39
|
-
#
|
40
55
|
# 単振動(simple harmonic motion)
|
56
|
+
#
|
41
57
|
# @overload SHM(m, k, t, h0, v0)
|
42
58
|
# @param [double] m 重りの重さ
|
43
59
|
# @param [double] k バネ定数
|
@@ -45,6 +61,12 @@ module Num4MechaEquLib
|
|
45
61
|
# @param [double] h0 初期位置値
|
46
62
|
# @param [double] v0 初期速度
|
47
63
|
# @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
|
64
|
+
# @example
|
65
|
+
# m = 1.0
|
66
|
+
# k = 1.0
|
67
|
+
# h0 = 1.0
|
68
|
+
# v0 = 0.0
|
69
|
+
# yi_1 = Num4MechaEquLib.SHM(m, k, 2, h0, v0)
|
48
70
|
#
|
49
71
|
def SHM(m, k, t, h0, v0)
|
50
72
|
@w = Math.sqrt((k / m))
|
@@ -52,15 +74,15 @@ module Num4MechaEquLib
|
|
52
74
|
yi_1 = []
|
53
75
|
yi = [h0, v0]
|
54
76
|
0.step(t, @dt) { |x|
|
55
|
-
yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @
|
77
|
+
yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @SHMFunc)
|
56
78
|
hvt.push({"t" => x,
|
57
79
|
"h" => yi_1[0], "v" => m * yi_1[1]})
|
58
80
|
yi = yi_1
|
59
81
|
}
|
60
82
|
return hvt
|
61
83
|
end
|
62
|
-
#
|
63
84
|
# 自由落下による運動方程式(空気抵抗有り)
|
85
|
+
#
|
64
86
|
# @overload freeFallMotion(m, c, t, h0, v0)
|
65
87
|
# @param [double] m 重りの重さ
|
66
88
|
# @param [double] c 空気抵抗
|
@@ -68,6 +90,12 @@ module Num4MechaEquLib
|
|
68
90
|
# @param [double] h0 初期位置値
|
69
91
|
# @param [double] v0 初期速度
|
70
92
|
# @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
|
93
|
+
# @example
|
94
|
+
# m = 1.0
|
95
|
+
# c = 0.0
|
96
|
+
# h0 = 1.0
|
97
|
+
# v0 = 0.0
|
98
|
+
# yi_1 = Num4MechaEquLib.freeFallMotion(m, c, 2, h0, v0)
|
71
99
|
#
|
72
100
|
def freeFallMotion(m, c, t, h0, v0)
|
73
101
|
@w = c / m
|
@@ -83,8 +111,8 @@ module Num4MechaEquLib
|
|
83
111
|
return hvt
|
84
112
|
|
85
113
|
end
|
86
|
-
#
|
87
114
|
# 放物運動
|
115
|
+
#
|
88
116
|
# @overload projectileMotion(m, theta, t, h0, v0)
|
89
117
|
# @param [double] m 重りの重さ
|
90
118
|
# @param [double] theta 角度(ラジアン指定)
|
@@ -92,6 +120,10 @@ module Num4MechaEquLib
|
|
92
120
|
# @param [double] h0 初期位置値
|
93
121
|
# @param [double] v0 初期速度
|
94
122
|
# @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
|
123
|
+
# @example
|
124
|
+
# m = 1.0
|
125
|
+
# theta = 5 * Math::PI / 180.0
|
126
|
+
# yi_1 = Num4MechaEquLib.projectileMotion(m, theta, 2, 0.0, 3.0)
|
95
127
|
#
|
96
128
|
def projectileMotion(m, theta, t, h0, v0)
|
97
129
|
hvt = []
|
@@ -112,14 +144,20 @@ module Num4MechaEquLib
|
|
112
144
|
}
|
113
145
|
return hvt
|
114
146
|
end
|
115
|
-
#
|
116
147
|
# 等速円運動(Uniform Circular motion)
|
148
|
+
#
|
117
149
|
# @overload UCM(m, r, w, t)
|
118
150
|
# @param [double] m 重りの重さ
|
119
151
|
# @param [double] r 半径
|
120
152
|
# @param [double] w 角速度
|
121
153
|
# @param [double] t 時間
|
122
154
|
# @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
|
155
|
+
# @example
|
156
|
+
# m = 1.0
|
157
|
+
# r = 3
|
158
|
+
# w = 2
|
159
|
+
# yi_1 = Num4MechaEquLib.UCM(m, r, w, 2)
|
160
|
+
#
|
123
161
|
def UCM(m, r, w, t)
|
124
162
|
hvt = []
|
125
163
|
h = []
|
@@ -138,8 +176,8 @@ module Num4MechaEquLib
|
|
138
176
|
}
|
139
177
|
return hvt
|
140
178
|
end
|
141
|
-
#
|
142
179
|
# 振り子運動
|
180
|
+
#
|
143
181
|
# @overload pendulumMotion(m, l, t, h0, v0)
|
144
182
|
# @param [double] m 重りの重さ
|
145
183
|
# @param [double] l 糸の長さ
|
@@ -147,9 +185,80 @@ module Num4MechaEquLib
|
|
147
185
|
# @param [double] h0 初期位置値
|
148
186
|
# @param [double] v0 初期速度
|
149
187
|
# @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
|
188
|
+
# @example
|
189
|
+
# m = 1.0
|
190
|
+
# l = 10
|
191
|
+
# h0 = 1.0
|
192
|
+
# v0 = 0.0
|
193
|
+
# yi_1 = Num4MechaEquLib.pendulumMotion(m, l, 2, h0, v0)
|
194
|
+
#
|
150
195
|
def pendulumMotion(m, l, t, h0, v0)
|
151
196
|
return SHM(m, l, t, h0, v0)
|
152
|
-
end
|
197
|
+
end
|
198
|
+
# 減衰振動(damped harmonic motion)
|
199
|
+
#
|
200
|
+
# @overload DHM(m, k, b, t, h0, v0)
|
201
|
+
# @param [double] m 重りの重さ
|
202
|
+
# @param [double] k 比例定数
|
203
|
+
# @param [double] b 抵抗力の比例定数
|
204
|
+
# @param [double] t 時間
|
205
|
+
# @param [double] h0 初期位置値
|
206
|
+
# @param [double] v0 初期速度
|
207
|
+
# @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
|
208
|
+
# @example
|
209
|
+
# m = 1.0
|
210
|
+
# k = 1.0
|
211
|
+
# h0 = 1.0
|
212
|
+
# v0 = 0.0
|
213
|
+
# yi_1 = Num4MechaEquLib.DHM(m, k, 0.6, 2, h0, v0)
|
214
|
+
#
|
215
|
+
def DHM(m, k, b, t, h0, v0)
|
216
|
+
@l = 2 * m * b
|
217
|
+
@w = Math.sqrt((k / m))
|
218
|
+
hvt = []
|
219
|
+
yi_1 = []
|
220
|
+
yi = [h0, v0]
|
221
|
+
0.step(t, @dt) { |x|
|
222
|
+
yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @DHMFunc)
|
223
|
+
hvt.push({"t" => x,
|
224
|
+
"h" => yi_1[0], "v" => m * yi_1[1]})
|
225
|
+
yi = yi_1
|
226
|
+
}
|
227
|
+
return hvt
|
228
|
+
end
|
229
|
+
# 強制振動
|
230
|
+
#
|
231
|
+
# @overload forcedOscillation(m, k, w0, w, t, h0, v0)
|
232
|
+
# @param [double] m 重りの重さ
|
233
|
+
# @param [double] k 比例定数
|
234
|
+
# @param [double] w0 振動系の固有角振動
|
235
|
+
# @param [double] w 外力の角振動数
|
236
|
+
# @param [double] t 時間
|
237
|
+
# @param [double] h0 初期位置値
|
238
|
+
# @param [double] v0 初期速度
|
239
|
+
# @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
|
240
|
+
# @example
|
241
|
+
# m = 1.0
|
242
|
+
# k = 1.0
|
243
|
+
# f0 = 2.5
|
244
|
+
# h0 = 1.0
|
245
|
+
# v0 = 0.0
|
246
|
+
# yi_1 = Num4MechaEquLib.forcedOscillation(m, k, 0.6, f0, 2, h0, v0)
|
247
|
+
#
|
248
|
+
def forcedOscillation(m, k, w0, w, t, h0, v0)
|
249
|
+
@w = Math.sqrt((k / m))
|
250
|
+
hvt = []
|
251
|
+
yi_1 = []
|
252
|
+
yi = [h0, v0]
|
253
|
+
0.step(t, @dt) { |x|
|
254
|
+
@ft = w / m * Math.cos(w * x)
|
255
|
+
yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @forcedFunc)
|
256
|
+
hvt.push({"t" => x,
|
257
|
+
"h" => yi_1[0], "v" => m * yi_1[1]})
|
258
|
+
yi = yi_1
|
259
|
+
}
|
260
|
+
return hvt
|
261
|
+
end
|
153
262
|
end
|
154
263
|
end
|
155
264
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: num4mechaequ
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- siranovel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: num4simdiff
|
@@ -45,7 +45,7 @@ licenses:
|
|
45
45
|
- MIT
|
46
46
|
metadata:
|
47
47
|
changelog_uri: http://github.com/siranovel/num4mechaequation/blob/main/CHANGELOG.md
|
48
|
-
documentation_uri: https://rubydoc.info/gems/num4mechaequ/0.1.
|
48
|
+
documentation_uri: https://rubydoc.info/gems/num4mechaequ/0.1.4
|
49
49
|
homepage_uri: http://github.com/siranovel/num4mechaequation
|
50
50
|
wiki_uri: https://github.com/siranovel/mydocs/tree/main/num4phyequation/num4mechaequation
|
51
51
|
post_install_message:
|