num4mechaequ 0.1.2 → 0.1.3

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/lib/num4mechaequ.rb +69 -4
  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: 4e3e5fffadd5eea83945129ed1694e89bce4f636a077552c020806fbf60fa5f8
4
+ data.tar.gz: 4f8c45b1ccd5a0c2b88b4caf7c26d0febe7d82cad638aaeaddaae7b9f6b77829
5
5
  SHA512:
6
- metadata.gz: 6c943c0d56cdb23ba471236f6e772c70f20f0bc96303d9a3138ce7247e27c4ad48a52e63047ad055a2fb03522bdf99eeed6bc4b09b3d104ce19a5276046a8656
7
- data.tar.gz: 2428c482848f27714fe833dd741347aa30e29f37191faecf35984a28bdab2c38a4c96787a4d1e7469afb94d927792322570769775bb20c44de330800c250cd7a
6
+ metadata.gz: 5810693ced93a1143f50a9d1b418adc2b64435efd0d4cec33900938b5adb5105f34516f5de78ed115f340312ea40c0f814e9786968f747837abce17c1829c613
7
+ data.tar.gz: 592d88dc5d73c8dc48d1819097b3ce32e6fe33deede84f8308ab255254422e7c9d41f500a4e6c617b2ca29a62ea415c406942f20a5746e68c599b67a55cb2dd4
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
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
+
5
11
  ## [0.1.2] - 2022-07-13
6
12
 
7
13
  ### 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,6 +36,20 @@ 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
  #
@@ -52,7 +68,7 @@ module Num4MechaEquLib
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
@@ -149,7 +165,56 @@ module Num4MechaEquLib
149
165
  # @return [hash[]] 0秒からt秒までの位置(h)と速度(v)の値
150
166
  def pendulumMotion(m, l, t, h0, v0)
151
167
  return SHM(m, l, t, h0, v0)
152
- end
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
153
218
  end
154
219
  end
155
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.2
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.2
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: