num4mechaequ 0.1.1 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -0
- data/lib/num4mechaequ.rb +110 -7
- 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: 4e3e5fffadd5eea83945129ed1694e89bce4f636a077552c020806fbf60fa5f8
|
4
|
+
data.tar.gz: 4f8c45b1ccd5a0c2b88b4caf7c26d0febe7d82cad638aaeaddaae7b9f6b77829
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
@
|
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,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(
|
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(
|
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, @
|
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.
|
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-
|
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.
|
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:
|