num4diff 0.4.1 → 0.4.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95791897f007359af4173789c870f3ffa8452f09fc017a536d48d37fcdc603da
4
- data.tar.gz: 524fa90d4419c943c8a3299536d1cd01e1579dba2b40fa4f7f230cf1c9b3ebb0
3
+ metadata.gz: 459519c218ccc304f0c9faf97dc76448addcba5505e507a78d6a54544c95766c
4
+ data.tar.gz: 0727aba63582a07844f6fc3d8340cea6c51ed231e4829a41620be0946a502fff
5
5
  SHA512:
6
- metadata.gz: 7e92082fecfcf942195fed655174f373b5c681bb8cb4db3824faca0a36a85df8cca4dd1eec0f4257c3139e210f81c9302673ff21447d96f5b5fdc5eab3469573
7
- data.tar.gz: 2f900014fff30736796d7ae47ca4e83abe2e579ce0664879be88e70ff7ab890d4ac602881f9b2c04c5f3223000706ef1b75ac8d43caadd4bf15edcf86afd05fd
6
+ metadata.gz: 2b78c27839fc39912994c26f11cc1500afbdbb5239fa5cef3adcdc2eb801feb934d005ec25f8c8e5150a5a654b48083f66bc9ddcfe4af338fb7507d59d670013
7
+ data.tar.gz: 2a1c335d8f477688a96a05b1288546d6acea5694e7b3c3c29804c6eb91804db0e6c6bee3db26f01d2ea61e8afec8e208c30ace67059a077ac4edb584c51ad29e
data/CHANGELOG.md ADDED
@@ -0,0 +1,56 @@
1
+ # Change Log
2
+
3
+ ## Unreleased
4
+
5
+ ## [0.4.4] - 2023-04-11
6
+
7
+ ### Added
8
+ - Add CHANGELOG.md
9
+
10
+ ## [0.4.3] - 2023-04-10
11
+
12
+ ### Added
13
+ - Add function of adamsBashforthMethod アダムス・バッシュフォース法(3段)
14
+ - Add function of adamsMoultonMethod アダムス・ムルトン法(3段)
15
+
16
+ ## [0.4.1] - 2023-03-26
17
+
18
+ ### Fixed
19
+ - Fix from add_runtime_dependency 'rake'
20
+ to add_development_dependency 'rake'
21
+
22
+ ## [0.3.14] - 2023-02-21
23
+
24
+ ### Added
25
+ - Add file of Gemfile.
26
+
27
+ ## [0.3.4] - 2023-02-18
28
+
29
+ ### Changed
30
+ - @overload
31
+
32
+ ## [0.1.3] - 2022-04-15
33
+
34
+ ### Changed
35
+ - fix from ffi to ffi-compiler
36
+
37
+ ## [0.0.22] - 2022-04-05
38
+
39
+ ### Added
40
+ - Add yardoc
41
+
42
+ ## [0.0.20] - 2022-03-25
43
+
44
+ ### Added
45
+ - Add file of LICENSE.
46
+
47
+ ### Changed
48
+ - chg comment
49
+
50
+ ## [0.0.17] - 2022-03-23
51
+
52
+ ### Fixed
53
+ - fix first fixed.
54
+
55
+
56
+
@@ -6,10 +6,14 @@
6
6
  static double CNum4Diff_doEulerMethod(double yi, double xi, double h, Func func);
7
7
  static double CNum4Diff_doHeunMethod(double yi, double xi, double h, Func func);
8
8
  static double CNum4Diff_doRungeKuttaMethod(double yi, double xi, double h, Func func);
9
+ static double CNum4Diff_doAdamsBashforthMethod(double a, double b, double yi, double h, Func func);
10
+ static double CNum4Diff_doAdamsMoultonMethod(double a, double b, double yi, double h, Func func);
9
11
  static CNum4Diff _cNum4Diff = {
10
- .FP_eulerMethod = CNum4Diff_doEulerMethod,
11
- .FP_heunMethod = CNum4Diff_doHeunMethod,
12
- .FP_rungeKuttaMethod = CNum4Diff_doRungeKuttaMethod,
12
+ .FP_eulerMethod = CNum4Diff_doEulerMethod,
13
+ .FP_heunMethod = CNum4Diff_doHeunMethod,
14
+ .FP_rungeKuttaMethod = CNum4Diff_doRungeKuttaMethod,
15
+ .FP_adamsBashforthMethod = CNum4Diff_doAdamsBashforthMethod,
16
+ .FP_adamsMoultonMethod = CNum4Diff_doAdamsMoultonMethod,
13
17
  };
14
18
  /**************************************/
15
19
  /* InterFface部 */
@@ -35,6 +39,20 @@ double CNum4Diff_rungeKuttaMethod(double yi, double xi, double h, Func func)
35
39
 
36
40
  return _cNum4Diff.FP_rungeKuttaMethod(yi, xi, h, func);
37
41
  }
42
+ double CNum4Diff_adamsBashforthMethod(double a, double b, double yi, double h, Func func)
43
+ {
44
+ assert(func != 0);
45
+ assert(a < b);
46
+
47
+ return _cNum4Diff.FP_adamsBashforthMethod(a, b, yi, h, func);
48
+ }
49
+ double CNum4Diff_adamsMoultonMethod(double a, double b, double yi, double h, Func func)
50
+ {
51
+ assert(func != 0);
52
+ assert(a < b);
53
+
54
+ return _cNum4Diff.FP_adamsMoultonMethod(a, b, yi, h, func);
55
+ }
38
56
  /**************************************/
39
57
  /* 処理実行部 */
40
58
  /**************************************/
@@ -57,7 +75,7 @@ static double CNum4Diff_doHeunMethod(double yi, double xi, double h, Func func)
57
75
  double k2 = 0.0;
58
76
 
59
77
  k1 = h * y; // k1 = h * f(xi, y)
60
- k2 = h * (yi + k1); // k2 = h * f(xi_h, h * f(xi + h, yi + k1)
78
+ k2 = h * (yi + k1); // k2 = h * f(xi + h, h * f(xi + h, yi + k1)
61
79
  return yi + (k1 + k2) / 2.0;
62
80
  }
63
81
  /*
@@ -78,4 +96,50 @@ static double CNum4Diff_doRungeKuttaMethod(double yi, double xi, double h, Func
78
96
  k4 = h * (yi + k3); // k4 = h * f(xi + h, yi + k3)
79
97
  return yi + (k1 + 2 * k2 + 2 * k3 + k4) / 6.0;
80
98
  }
99
+ /*
100
+ * アダムス・バッシュフォース法(3段)
101
+ */
102
+ static double CNum4Diff_doAdamsBashforthMethod(double a, double b, double yi, double h, Func func)
103
+ {
104
+ double xi = a;
105
+ double fi;
106
+ double fi1 = 0;
107
+ double fi2 = 0;
108
+ double y = yi;
109
+
110
+ fi2 = yi;
111
+ xi = xi + h;
112
+ fi1 = CNum4Diff_rungeKuttaMethod(fi2, xi, h, func);
113
+ y = fi1;
114
+ for (xi = xi + h; xi < b; xi += h) {
115
+ fi = CNum4Diff_rungeKuttaMethod(fi1, xi, h, func);
116
+ y = y + h * (23 * fi - 16 * fi1 + 5 * fi2) / 12.0;
117
+ fi2 = fi1;
118
+ fi1 = fi;
119
+ }
120
+ return y;
121
+ }
122
+ /*
123
+ * アダムス・ムルトン法(3段)
124
+ */
125
+ static double CNum4Diff_doAdamsMoultonMethod(double a, double b, double yi, double h, Func func)
126
+ {
127
+ double xi = a;
128
+ double fi;
129
+ double fi1 = 0;
130
+ double fi2 = 0;
131
+ double y = yi;
132
+
133
+ fi2 = CNum4Diff_rungeKuttaMethod(yi, xi, h, func);
134
+ xi = xi + h;
135
+ fi1 = CNum4Diff_rungeKuttaMethod(fi2, xi, h, func);
136
+ y = fi1;
137
+ for (xi = xi + h; xi < b; xi += h) {
138
+ fi = CNum4Diff_rungeKuttaMethod(fi1, xi, h, func);
139
+ y = y + h * (5 * fi + 8 * fi1 -1 * fi2) / 12.0;
140
+ fi2 = fi1;
141
+ fi1 = fi;
142
+ }
143
+ return y;
144
+ }
81
145
 
@@ -12,6 +12,9 @@ struct _CNum4Diff
12
12
  double (*FP_eulerMethod)(double yi, double xi, double h, Func func);
13
13
  double (*FP_heunMethod)(double yi, double xi, double h, Func func);
14
14
  double (*FP_rungeKuttaMethod)(double yi, double xi, double h, Func func);
15
+ double (*FP_adamsBashforthMethod)(double a, double b, double yi, double h, Func func);
16
+ double (*FP_adamsMoultonMethod)(double a, double b, double yi, double h, Func func);
17
+ ;
15
18
  };
16
19
  /**************************************/
17
20
  /* define宣言 */
@@ -22,4 +25,6 @@ struct _CNum4Diff
22
25
  double CNum4Diff_eulerMethod(double yi, double xi, double h, Func func);
23
26
  double CNum4Diff_heunMethod(double yi, double xi, double h, Func func);
24
27
  double CNum4Diff_rungeKuttaMethod(double yi, double xi, double h, Func func);
28
+ double CNum4Diff_adamsBashforthMethod(double a, double b, double yi, double h, Func func);
29
+ double CNum4Diff_adamsMoultonMethod(double a, double b, double yi, double h, Func func);
25
30
  #endif
data/lib/num4diff.rb CHANGED
@@ -9,40 +9,70 @@ module Num4DiffLib
9
9
 
10
10
  ffi_lib FFI::Compiler::Loader.find('num4diff')
11
11
  # @overload f(xi)
12
- # @param [double] xi xiの値
12
+ # dy = f(xi)
13
+ # @yield [x] dy = f(x)
14
+ # @yieldparam [double] xi xiの値
13
15
  # @return [double] xiに対するyの値
14
16
  callback :f, [:double], :double
15
17
 
16
18
  #
17
- # @overload eulerMethod(yi, xi, h, func)
18
- # オイラー法による数値計算
19
+ # オイラー法による数値計算
20
+ # @overload eulerMethod(yi, xi, h, func)
21
+ # yi_1 = eulerMethod(yi, xi, h, func)
19
22
  # @param [double] yi xiに対するyiの値
20
23
  # @param [double] xi xiの値
21
24
  # @param [double] h 刻み幅
22
25
  # @param [callback] func xiに対する傾きを計算する関数
23
- # @return [double] xi+hに対するyiの値
26
+ # @return [double] xi+hに対するyi_1の値
24
27
  #
25
28
  attach_function :eulerMethod,
26
29
  :CNum4Diff_eulerMethod, [:double, :double, :double, :f], :double
30
+ #
31
+ # ホイン法による数値計算
27
32
  # @overload heunMethod(yi, xi, h, func)
28
- # ホイン法による数値計算
33
+ # yi_1 = heunMethod(yi, xi, h, func)
29
34
  # @param [double] yi xiに対するyiの値
30
35
  # @param [double] xi xiの値
31
36
  # @param [double] h 刻み幅
32
37
  # @param [callback] func xiに対する傾きを計算する関数
33
- # @return [double] xi+hに対するyiの値
38
+ # @return [double] xi+hに対するyi_1の値
34
39
  #
35
40
  attach_function :heunMethod,
36
41
  :CNum4Diff_heunMethod, [:double, :double, :double, :f], :double
37
42
  #
38
- # @overload rungeKuttaMethod(yi, xi, h, func)
39
- # 4次のルンゲ=クッタ法による数値計算
43
+ # 4次のルンゲ=クッタ法による数値計算
44
+ # @overload rungeKuttaMethod(yi, xi, h, func)
45
+ # yi_1 = rungeKuttaMethod(yi, xi, h, func)
40
46
  # @param [double] yi xiに対するyiの値
41
47
  # @param [double] xi xiの値
42
48
  # @param [double] h 刻み幅
43
49
  # @param [callback] func xiに対する傾きを計算する関数
44
- # @return [double] xi+hに対するyiの値
50
+ # @return [double] xi+hに対するyi_1の値
45
51
  #
46
52
  attach_function :rungeKuttaMethod,
47
53
  :CNum4Diff_rungeKuttaMethod, [:double, :double, :double, :f], :double
54
+ #
55
+ # アダムス・バッシュフォース法(3段)による数値計算
56
+ # @overload adamsBashforthMethod(a, b, yi, h, func)
57
+ # @param [double] a 下限値
58
+ # @param [double] b 上限値
59
+ # @param [double] yi xiに対するyiの値
60
+ # @param [double] h 刻み幅
61
+ # @param [callback] func xiに対する傾きを計算する関数
62
+ # @return [double] xi+hに対するyi_1の値
63
+ #
64
+ attach_function :adamsBashforthMethod,
65
+ :CNum4Diff_adamsBashforthMethod, [:double, :double, :double, :double, :f], :double
66
+ #
67
+ # アダムス・ムルトン法(3段)による数値計算
68
+ # @overload adamsMoultonMethod(a, b, yi, xi, h, func)
69
+ # @param [double] a 下限値
70
+ # @param [double] b 上限値
71
+ # @param [double] yi xiに対するyiの値
72
+ # @param [double] h 刻み幅
73
+ # @param [callback] func xiに対する傾きを計算する関数
74
+ # @return [double] xi+hに対するyi_1の値
75
+ #
76
+ attach_function :adamsMoultonMethod,
77
+ :CNum4Diff_adamsMoultonMethod, [:double, :double, :double, :double, :f], :double
48
78
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: num4diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.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-03-26 00:00:00.000000000 Z
11
+ date: 2023-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi-compiler
@@ -57,6 +57,7 @@ extensions:
57
57
  - ext/num4diff/Rakefile
58
58
  extra_rdoc_files: []
59
59
  files:
60
+ - CHANGELOG.md
60
61
  - Gemfile
61
62
  - LICENSE
62
63
  - ext/num4diff/CNum4Diff.c
@@ -66,7 +67,8 @@ files:
66
67
  homepage: http://github.com/siranovel/num4different
67
68
  licenses:
68
69
  - MIT
69
- metadata: {}
70
+ metadata:
71
+ changelog_uri: http://github.com/siranovel/num4different/blob/master/CHANGELOG.md
70
72
  post_install_message:
71
73
  rdoc_options: []
72
74
  require_paths: