num4mechaequ 0.1.2 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/lib/num4mechaequ.rb +118 -9
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ece1c1f8ac4951ed3e9225bc0139f6a332f4ecc22d271cdcb149cd191e28840f
4
- data.tar.gz: e9579a5fe2e05b269f0e0aac9c232588bcbe2660268098087311337b694ecd08
3
+ metadata.gz: 33f7db372d5c6d97cce0dfd47d9040d10178f575bc6394b84322079d96f605e6
4
+ data.tar.gz: a4ef6a9911a6ae1654c095def96600d283bf69e73657c0f39c8fbeb879e42090
5
5
  SHA512:
6
- metadata.gz: 6c943c0d56cdb23ba471236f6e772c70f20f0bc96303d9a3138ce7247e27c4ad48a52e63047ad055a2fb03522bdf99eeed6bc4b09b3d104ce19a5276046a8656
7
- data.tar.gz: 2428c482848f27714fe833dd741347aa30e29f37191faecf35984a28bdab2c38a4c96787a4d1e7469afb94d927792322570769775bb20c44de330800c250cd7a
6
+ metadata.gz: 014cabe8283d052239d19853b1591e2e981b2e1cc7c97a98d58d4d47439fc26393ec7f991d8c99628a8a5d448e6f86aa735b515ea5a40c816d339804497cb49b
7
+ data.tar.gz: de07a537f9ec64ee9046a6c84e758b3949916bc679fb851711ec00d01850b442bb53a6a46a85448cf62d3cb85c54002d4ce4fb6667b002828429f6a61d37c2cf
data/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.1.4] - 2023-10-18
6
+
7
+ ### add
8
+ - add sample of yardoc
9
+
10
+ ## [0.1.3] - 2022-07-20
11
+
12
+ ### Added
13
+ - add function of DHM
14
+ - add function of forcedOscillation
15
+
5
16
  ## [0.1.2] - 2022-07-13
6
17
 
7
18
  ### Added
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
- @springFunc = Proc.new do | n, yi |
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] = - @g + @w * yi[1] # vの傾き値
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, @springFunc)
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.2
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-07-10 00:00:00.000000000 Z
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.2
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: