num4diff 0.4.1 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
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: