num4simdiff 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/num4simdiff.rb +44 -39
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb95aa62cec23aba9d5dce5d67ab559e413ca450e8f27b582daee07705d8ab25
|
4
|
+
data.tar.gz: ceccfc8d500e2494a03c7446a2c10e52a04c9b74c9baa158e23bcfbe7ef9917c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8dc2d88b4b0ea780065be4d11188cd7e4abe300281aab215513afe106bfd3ba91a91d5947fc6029a9be0471a364488d7714f5f2ffc230029484a8c8804c09e1b
|
7
|
+
data.tar.gz: ea0a990c0c5a2a9b377eae6b72205db0d20141c1bad6ffe795fdd5bdcdacb92d1871f3ca734d3664bcbb9ac00bfb9270dd0103e03208739dff72464aa819e73a
|
data/CHANGELOG.md
CHANGED
data/lib/num4simdiff.rb
CHANGED
@@ -9,64 +9,64 @@ module Num4SimDiffLib
|
|
9
9
|
|
10
10
|
# @overload f(x, dx)
|
11
11
|
# dy = f(x, dx)
|
12
|
-
# @yield [x] dy = f(x, dx)
|
12
|
+
# @yield [x, dx] dy = f(x, dx)
|
13
13
|
# @yieldparam [double] x xiの値
|
14
14
|
# @yieldparam [double] dx xiの値
|
15
15
|
# @return [double] xiに対するyの値
|
16
16
|
callback :f, [:double, :double], :double
|
17
17
|
|
18
|
-
#
|
19
|
-
# オイラー法による数値計算
|
20
|
-
# @overload eulerMethod(yi, xi, h, func1, func2)
|
21
|
-
# yi_1 = eulerMethod(yi, xi, h, func1, func2)
|
22
|
-
# @param [double] yi xiに対するyiの値(配列)
|
23
|
-
# @param [double] xi xiの値
|
24
|
-
# @param [double] h 刻み幅
|
25
|
-
# @param [callback] func1 xiに対する傾きを計算する関数
|
26
|
-
# @param [callback] func2 xiに対する傾きを計算する関数
|
27
|
-
# @return [double] xi+hに対するyi_1の値(配列)
|
28
|
-
#
|
29
18
|
attach_function :eulerMethodFFI,
|
30
19
|
:CNum4SimDiff_eulerMethod, [:buffer_in, :double, :double, :f, :f], :pointer
|
31
|
-
#
|
32
|
-
# ホイン法による数値計算
|
33
|
-
# @overload heunMethod(yi, xi, h, func1, func2)
|
34
|
-
# yi_1 = heunMethod(yi, xi, h, func1, func2)
|
35
|
-
# @param [double] yi xiに対するyiの値(配列)
|
36
|
-
# @param [double] xi xiの値
|
37
|
-
# @param [double] h 刻み幅
|
38
|
-
# @param [callback] func1 xiに対する傾きを計算する関数
|
39
|
-
# @param [callback] func2 xiに対する傾きを計算する関数
|
40
|
-
# @return [double] xi+hに対するyi_1の値(配列)
|
41
|
-
#
|
42
20
|
attach_function :heunMethodFFI,
|
43
21
|
:CNum4SimDiff_heunMethod, [:buffer_in, :double, :double, :f, :f], :pointer
|
44
|
-
#
|
45
|
-
# 4次のルンゲ=クッタ法による数値計算
|
46
|
-
# @overload rungeKuttaMethod(yi, xi, h, func1, func2)
|
47
|
-
# yi_1 = rungeKuttaMethod(yi, xi, h, func1, func2)
|
48
|
-
# @param [double] yi xiに対するyiの値(配列)
|
49
|
-
# @param [double] xi xiの値
|
50
|
-
# @param [double] h 刻み幅
|
51
|
-
# @param [callback] func1 xiに対する傾きを計算する関数
|
52
|
-
# @param [callback] func2 xiに対する傾きを計算する関数
|
53
|
-
# @return [double] xi+hに対するyi_1の値(配列)
|
54
|
-
#
|
55
22
|
attach_function :rungeKuttaMethodFFI,
|
56
23
|
:CNum4SimDiff_rungeKuttaMethod, [:buffer_in, :double, :double, :f, :f], :pointer
|
57
24
|
class << self
|
58
|
-
|
25
|
+
#
|
26
|
+
# オイラー法による数値計算
|
27
|
+
# @overload eulerMethod(yi, xi, h, func1, func2)
|
28
|
+
# yi_1 = eulerMethod(yi, xi, h, func1, func2)
|
29
|
+
# @param [double] yi xiに対するyiの値(配列)
|
30
|
+
# @param [double] xi xiの値
|
31
|
+
# @param [double] h 刻み幅
|
32
|
+
# @param [callback] func1 xiに対する傾きを計算する関数
|
33
|
+
# @param [callback] func2 xiに対する傾きを計算する関数
|
34
|
+
# @return [double] xi+hに対するyi_1の値(配列)
|
35
|
+
#
|
36
|
+
def eulerMethod(yi, xi, h, func1, func2)
|
59
37
|
yi_ptr = cnvRbAry2pt(2, yi)
|
60
|
-
yi_1_ptr = eulerMethodFFI(yi_ptr,
|
38
|
+
yi_1_ptr = eulerMethodFFI(yi_ptr, xi, h, func1, func2)
|
61
39
|
yi_1 = cnvPt2RbAry(2, yi_1_ptr)
|
62
40
|
return 1 + yi_1[0] + 0.5 * yi_1[1]
|
63
41
|
end
|
64
|
-
|
42
|
+
#
|
43
|
+
# ホイン法による数値計算
|
44
|
+
# @overload heunMethod(yi, xi, h, func1, func2)
|
45
|
+
# yi_1 = heunMethod(yi, xi, h, func1, func2)
|
46
|
+
# @param [double] yi xiに対するyiの値(配列)
|
47
|
+
# @param [double] xi xiの値
|
48
|
+
# @param [double] h 刻み幅
|
49
|
+
# @param [callback] func1 xiに対する傾きを計算する関数
|
50
|
+
# @param [callback] func2 xiに対する傾きを計算する関数
|
51
|
+
# @return [double] xi+hに対するyi_1の値(配列)
|
52
|
+
#
|
53
|
+
def heunMethod(yi, xi, h, func1, func2)
|
65
54
|
yi_ptr = cnvRbAry2pt(2, yi)
|
66
|
-
yi_1_ptr = heunMethodFFI(yi_ptr,
|
55
|
+
yi_1_ptr = heunMethodFFI(yi_ptr, xi, h, func1, func2)
|
67
56
|
yi_1 = cnvPt2RbAry(2, yi_1_ptr)
|
68
57
|
return 1 + yi_1[0] + 0.5 * yi_1[1]
|
69
58
|
end
|
59
|
+
#
|
60
|
+
# 4次のルンゲ=クッタ法による数値計算
|
61
|
+
# @overload rungeKuttaMethod(yi, xi, h, func1, func2)
|
62
|
+
# yi_1 = rungeKuttaMethod(yi, xi, h, func1, func2)
|
63
|
+
# @param [double] yi xiに対するyiの値(配列)
|
64
|
+
# @param [double] xi xiの値
|
65
|
+
# @param [double] h 刻み幅
|
66
|
+
# @param [callback] func1 xiに対する傾きを計算する関数
|
67
|
+
# @param [callback] func2 xiに対する傾きを計算する関数
|
68
|
+
# @return [double] xi+hに対するyi_1の値(配列)
|
69
|
+
#
|
70
70
|
def rungeKuttaMethod(yi, x, h, func1, func2)
|
71
71
|
yi_ptr = cnvRbAry2pt(2, yi)
|
72
72
|
yi_1_ptr = rungeKuttaMethodFFI(yi_ptr, x, h, func1, func2)
|
@@ -74,7 +74,9 @@ module Num4SimDiffLib
|
|
74
74
|
return 1 + yi_1[0] + 0.5 * yi_1[1]
|
75
75
|
end
|
76
76
|
|
77
|
-
|
77
|
+
#
|
78
|
+
# @private
|
79
|
+
#
|
78
80
|
def cnvRbAry2pt(n, ary)
|
79
81
|
yi_ptr = FFI::MemoryPointer.new(:double, n)
|
80
82
|
n.times.map { |i|
|
@@ -82,6 +84,9 @@ module Num4SimDiffLib
|
|
82
84
|
}
|
83
85
|
return yi_ptr
|
84
86
|
end
|
87
|
+
#
|
88
|
+
# @private
|
89
|
+
#
|
85
90
|
def cnvPt2RbAry(n, pt)
|
86
91
|
rbAry = n.times.map { |i|
|
87
92
|
pt.get_double(i * Fiddle::SIZEOF_DOUBLE)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: num4simdiff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- siranovel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi-compiler
|
@@ -69,10 +69,11 @@ licenses:
|
|
69
69
|
- MIT
|
70
70
|
metadata:
|
71
71
|
changelog_uri: http://github.com/siranovel/num4simdiffrent/blob/main/CHANGELOG.md
|
72
|
-
documentation_uri: https://rubydoc.info/gems/num4simdiff/0.0.
|
72
|
+
documentation_uri: https://rubydoc.info/gems/num4simdiff/0.0.2
|
73
73
|
homepage_uri: http://github.com/siranovel/num4simdiffrent
|
74
74
|
post_install_message:
|
75
|
-
rdoc_options:
|
75
|
+
rdoc_options:
|
76
|
+
- "--no-private"
|
76
77
|
require_paths:
|
77
78
|
- lib
|
78
79
|
required_ruby_version: !ruby/object:Gem::Requirement
|