num4mechaequ 0.1.1 → 0.1.3

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 +17 -0
  3. data/lib/num4mechaequ.rb +110 -7
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77ffa279b2f10648a0cc852d08f6cf23db176f385bc31b8809540a38a2f316ad
4
- data.tar.gz: 59f69ea0ee861cc39067f4863191205d756e552d35d8af0f039ce94628a33166
3
+ metadata.gz: 4e3e5fffadd5eea83945129ed1694e89bce4f636a077552c020806fbf60fa5f8
4
+ data.tar.gz: 4f8c45b1ccd5a0c2b88b4caf7c26d0febe7d82cad638aaeaddaae7b9f6b77829
5
5
  SHA512:
6
- metadata.gz: aaf91e9df68349bd5c20708a54d0e9d97e312fc904b03ed37076b864d93dc55ec3477e34c872005808df46f176c0988c7421aa54e86879bb27772ef79fc5afcb
7
- data.tar.gz: 4a0ef2f3a5ff4fe31a52af87aceba3c593416d881346b3b087bf6a92c75f45f832d9a792aa5d02c2ae6d3a1292491e152892a7217e4cf9e2816020e307812d9e
6
+ metadata.gz: 5810693ced93a1143f50a9d1b418adc2b64435efd0d4cec33900938b5adb5105f34516f5de78ed115f340312ea40c0f814e9786968f747837abce17c1829c613
7
+ data.tar.gz: 592d88dc5d73c8dc48d1819097b3ce32e6fe33deede84f8308ab255254422e7c9d41f500a4e6c617b2ca29a62ea415c406942f20a5746e68c599b67a55cb2dd4
data/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.1.3] - 2022-07-20
6
+
7
+ ### Added
8
+ - add function of DHM
9
+ - add function of forcedOscillation
10
+
11
+ ## [0.1.2] - 2022-07-13
12
+
13
+ ### Added
14
+ - add function of UCM
15
+ - add function of pendulumMotion
16
+
17
+ ### Fixed
18
+ - change order of parameter of SHM
19
+
20
+ SHM(k, m, t, h0, v0) -> SHM(m, k, t, h0, v0)
21
+
5
22
  ## [0.1.1] - 2022-07-10
6
23
 
7
24
  ### 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
- @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,25 +36,39 @@ 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
55
  #
40
56
  # 単振動(simple harmonic motion)
41
- # @overload SHM(k, m, t, h0, v0)
42
- # @param [double] k バネ定数
57
+ # @overload SHM(m, k, t, h0, v0)
43
58
  # @param [double] m 重りの重さ
59
+ # @param [double] k バネ定数
44
60
  # @param [double] t 時間
45
61
  # @param [double] h0 初期位置値
46
62
  # @param [double] v0 初期速度
47
63
  # @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
48
64
  #
49
- def SHM(k, m, t, h0, v0)
65
+ def SHM(m, k, t, h0, v0)
50
66
  @w = Math.sqrt((k / m))
51
67
  hvt = []
52
68
  yi_1 = []
53
69
  yi = [h0, v0]
54
70
  0.step(t, @dt) { |x|
55
- yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @springFunc)
71
+ yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @SHMFunc)
56
72
  hvt.push({"t" => x,
57
73
  "h" => yi_1[0], "v" => m * yi_1[1]})
58
74
  yi = yi_1
@@ -111,7 +127,94 @@ module Num4MechaEquLib
111
127
  yyi = yyi_1
112
128
  }
113
129
  return hvt
114
- end
130
+ end
131
+ #
132
+ # 等速円運動(Uniform Circular motion)
133
+ # @overload UCM(m, r, w, t)
134
+ # @param [double] m 重りの重さ
135
+ # @param [double] r 半径
136
+ # @param [double] w 角速度
137
+ # @param [double] t 時間
138
+ # @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
139
+ def UCM(m, r, w, t)
140
+ hvt = []
141
+ h = []
142
+ v = []
143
+ 0.step(t, @dt) { |x|
144
+ sinwt = Math.sin(w * x)
145
+ coswt = Math.cos(w * x)
146
+ h = [r * coswt, r * sinwt]
147
+ v = [r * w * -sinwt, r * w * coswt]
148
+ a = [-r * w * w * coswt, -r * w * w * sinwt]
149
+ hvt.push({"t" => x,
150
+ "x" => {"h" => h[0], "v" => m * v[0]},
151
+ "y" => {"h" => h[1], "v" => m * v[1]},
152
+ }
153
+ )
154
+ }
155
+ return hvt
156
+ end
157
+ #
158
+ # 振り子運動
159
+ # @overload pendulumMotion(m, l, t, h0, v0)
160
+ # @param [double] m 重りの重さ
161
+ # @param [double] l 糸の長さ
162
+ # @param [double] t 時間
163
+ # @param [double] h0 初期位置値
164
+ # @param [double] v0 初期速度
165
+ # @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
166
+ def pendulumMotion(m, l, t, h0, v0)
167
+ return SHM(m, l, t, h0, v0)
168
+ end
169
+ #
170
+ # 減衰振動(damped harmonic motion)
171
+ # @overload DHM(m, k, b, t, h0, v0)
172
+ # @param [double] m 重りの重さ
173
+ # @param [double] k 比例定数
174
+ # @param [double] b 抵抗力の比例定数
175
+ # @param [double] t 時間
176
+ # @param [double] h0 初期位置値
177
+ # @param [double] v0 初期速度
178
+ # @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
179
+ def DHM(m, k, b, t, h0, v0)
180
+ @l = 2 * m * b
181
+ @w = Math.sqrt((k / m))
182
+ hvt = []
183
+ yi_1 = []
184
+ yi = [h0, v0]
185
+ 0.step(t, @dt) { |x|
186
+ yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @DHMFunc)
187
+ hvt.push({"t" => x,
188
+ "h" => yi_1[0], "v" => m * yi_1[1]})
189
+ yi = yi_1
190
+ }
191
+ return hvt
192
+ end
193
+ #
194
+ # 強制振動
195
+ # @overload forcedOscillation(m, k, w0, w, t, h0, v0)
196
+ # @param [double] m 重りの重さ
197
+ # @param [double] k 比例定数
198
+ # @param [double] w0 振動系の固有角振動
199
+ # @param [double] w 外力の角振動数
200
+ # @param [double] t 時間
201
+ # @param [double] h0 初期位置値
202
+ # @param [double] v0 初期速度
203
+ # @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
204
+ def forcedOscillation(m, k, w0, w, t, h0, v0)
205
+ @w = Math.sqrt((k / m))
206
+ hvt = []
207
+ yi_1 = []
208
+ yi = [h0, v0]
209
+ 0.step(t, @dt) { |x|
210
+ @ft = w / m * Math.cos(w * x)
211
+ yi_1 = Num4SimDiffLib.rungeKuttaMethod(yi, @dt, @forcedFunc)
212
+ hvt.push({"t" => x,
213
+ "h" => yi_1[0], "v" => m * yi_1[1]})
214
+ yi = yi_1
215
+ }
216
+ return hvt
217
+ end
115
218
  end
116
219
  end
117
220
 
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.1
4
+ version: 0.1.3
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-07-20 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.1
48
+ documentation_uri: https://rubydoc.info/gems/num4mechaequ/0.1.3
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: