num4diff 0.4.4 → 0.4.6

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: 459519c218ccc304f0c9faf97dc76448addcba5505e507a78d6a54544c95766c
4
- data.tar.gz: 0727aba63582a07844f6fc3d8340cea6c51ed231e4829a41620be0946a502fff
3
+ metadata.gz: ff5e1dfd13b71508a48cf82c7e4cfdb28f83971c410a4d33aeabf2807c840b04
4
+ data.tar.gz: 67d9c83ef8cef833b636aedd31c0f686d0066272560c670159fef169e91aca4a
5
5
  SHA512:
6
- metadata.gz: 2b78c27839fc39912994c26f11cc1500afbdbb5239fa5cef3adcdc2eb801feb934d005ec25f8c8e5150a5a654b48083f66bc9ddcfe4af338fb7507d59d670013
7
- data.tar.gz: 2a1c335d8f477688a96a05b1288546d6acea5694e7b3c3c29804c6eb91804db0e6c6bee3db26f01d2ea61e8afec8e208c30ace67059a077ac4edb584c51ad29e
6
+ metadata.gz: f2a668107ed2dbe416f00a1a16ef6eda01832894fe5c2b8153efb948b440fa591d9ef4d33b0187da7e6fcf73dadb306c3c3b6f15f4f372cfd6a91b204e6bceae
7
+ data.tar.gz: ed3e97fa67b1dc82dc409a3ed8c4a2606c6f08a6a12d5c1d690e144c3fb31d98c245decb48284abdedc3e8a56e624ef68a8b44dcaa78a88a242d9f8d57421cbe
data/CHANGELOG.md CHANGED
@@ -2,10 +2,21 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.4.5] - 2023-04-24
6
+
7
+ ### Fixed
8
+ - Fix Split into single-step and multi-step solutions.
9
+
10
+ ## [0.4.5] - 2023-04-14
11
+
12
+ ### Fixed
13
+ - Fix function of adamsBashforthMethod
14
+ - Fix function of adamsMoultonMethod
15
+
5
16
  ## [0.4.4] - 2023-04-11
6
17
 
7
18
  ### Added
8
- - Add CHANGELOG.md
19
+ - Add file of CHANGELOG.md
9
20
 
10
21
  ## [0.4.3] - 2023-04-10
11
22
 
@@ -16,8 +27,8 @@
16
27
  ## [0.4.1] - 2023-03-26
17
28
 
18
29
  ### Fixed
19
- - Fix from add_runtime_dependency 'rake'
20
- to add_development_dependency 'rake'
30
+ - Fix from add_runtime_dependency 'ffi-compiler'
31
+ to add_development_dependency 'ffi-compiler'
21
32
 
22
33
  ## [0.3.14] - 2023-02-21
23
34
 
@@ -6,14 +6,18 @@
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
+ static double CNum4Diff_doAdamsBashforthMethod(double a, double b, double y0, double h, Func func);
10
+ static double CNum4Diff_doAdamsMoultonMethod(double a, double b, double y0, double h, Func func);
11
11
  static CNum4Diff _cNum4Diff = {
12
+ .tierMethod = {
12
13
  .FP_eulerMethod = CNum4Diff_doEulerMethod,
13
14
  .FP_heunMethod = CNum4Diff_doHeunMethod,
14
15
  .FP_rungeKuttaMethod = CNum4Diff_doRungeKuttaMethod,
16
+ },
17
+ .multistageMethod = {
15
18
  .FP_adamsBashforthMethod = CNum4Diff_doAdamsBashforthMethod,
16
19
  .FP_adamsMoultonMethod = CNum4Diff_doAdamsMoultonMethod,
20
+ },
17
21
  };
18
22
  /**************************************/
19
23
  /* InterFface部 */
@@ -21,37 +25,37 @@ static CNum4Diff _cNum4Diff = {
21
25
  /**************************************/
22
26
  /* Class部 */
23
27
  /**************************************/
24
- double CNum4Diff_eulerMethod(double yi, double xi, double h, Func func)
28
+ double CNum4Diff_Tier_eulerMethod(double yi, double xi, double h, Func func)
25
29
  {
26
30
  assert(func != 0);
27
31
 
28
- return _cNum4Diff.FP_eulerMethod(yi, xi, h, func);
32
+ return _cNum4Diff.tierMethod.FP_eulerMethod(yi, xi, h, func);
29
33
  }
30
- double CNum4Diff_heunMethod(double yi, double xi, double h, Func func)
34
+ double CNum4Diff_Tier_heunMethod(double yi, double xi, double h, Func func)
31
35
  {
32
36
  assert(func != 0);
33
37
 
34
- return _cNum4Diff.FP_heunMethod(yi, xi, h, func);
38
+ return _cNum4Diff.tierMethod.FP_heunMethod(yi, xi, h, func);
35
39
  }
36
- double CNum4Diff_rungeKuttaMethod(double yi, double xi, double h, Func func)
40
+ double CNum4Diff_Tier_rungeKuttaMethod(double yi, double xi, double h, Func func)
37
41
  {
38
42
  assert(func != 0);
39
43
 
40
- return _cNum4Diff.FP_rungeKuttaMethod(yi, xi, h, func);
44
+ return _cNum4Diff.tierMethod.FP_rungeKuttaMethod(yi, xi, h, func);
41
45
  }
42
- double CNum4Diff_adamsBashforthMethod(double a, double b, double yi, double h, Func func)
46
+ double CNum4Diff_Multistage_adamsBashforthMethod(double a, double b, double y0, double h, Func func)
43
47
  {
44
48
  assert(func != 0);
45
49
  assert(a < b);
46
50
 
47
- return _cNum4Diff.FP_adamsBashforthMethod(a, b, yi, h, func);
51
+ return _cNum4Diff.multistageMethod.FP_adamsBashforthMethod(a, b, y0, h, func);
48
52
  }
49
- double CNum4Diff_adamsMoultonMethod(double a, double b, double yi, double h, Func func)
53
+ double CNum4Diff_Multistage_adamsMoultonMethod(double a, double b, double y0, double h, Func func)
50
54
  {
51
55
  assert(func != 0);
52
56
  assert(a < b);
53
57
 
54
- return _cNum4Diff.FP_adamsMoultonMethod(a, b, yi, h, func);
58
+ return _cNum4Diff.multistageMethod.FP_adamsMoultonMethod(a, b, y0, h, func);
55
59
  }
56
60
  /**************************************/
57
61
  /* 処理実行部 */
@@ -99,20 +103,20 @@ static double CNum4Diff_doRungeKuttaMethod(double yi, double xi, double h, Func
99
103
  /*
100
104
  * アダムス・バッシュフォース法(3段)
101
105
  */
102
- static double CNum4Diff_doAdamsBashforthMethod(double a, double b, double yi, double h, Func func)
106
+ static double CNum4Diff_doAdamsBashforthMethod(double a, double b, double y0, double h, Func func)
103
107
  {
104
108
  double xi = a;
105
109
  double fi;
106
110
  double fi1 = 0;
107
111
  double fi2 = 0;
108
- double y = yi;
112
+ double y = 0.0;
109
113
 
110
- fi2 = yi;
114
+ fi2 = y0;
111
115
  xi = xi + h;
112
- fi1 = CNum4Diff_rungeKuttaMethod(fi2, xi, h, func);
116
+ fi1 = CNum4Diff_Tier_rungeKuttaMethod(fi2, xi, h, func);
113
117
  y = fi1;
114
118
  for (xi = xi + h; xi < b; xi += h) {
115
- fi = CNum4Diff_rungeKuttaMethod(fi1, xi, h, func);
119
+ fi = CNum4Diff_Tier_rungeKuttaMethod(fi1, xi, h, func);
116
120
  y = y + h * (23 * fi - 16 * fi1 + 5 * fi2) / 12.0;
117
121
  fi2 = fi1;
118
122
  fi1 = fi;
@@ -122,21 +126,23 @@ static double CNum4Diff_doAdamsBashforthMethod(double a, double b, double yi, do
122
126
  /*
123
127
  * アダムス・ムルトン法(3段)
124
128
  */
125
- static double CNum4Diff_doAdamsMoultonMethod(double a, double b, double yi, double h, Func func)
129
+ static double CNum4Diff_doAdamsMoultonMethod(double a, double b, double y0, double h, Func func)
126
130
  {
127
131
  double xi = a;
128
132
  double fi;
129
133
  double fi1 = 0;
130
134
  double fi2 = 0;
131
- double y = yi;
135
+ double y_pred = 0.0;
136
+ double y = 0.0;
132
137
 
133
- fi2 = CNum4Diff_rungeKuttaMethod(yi, xi, h, func);
138
+ fi2 = y0;
134
139
  xi = xi + h;
135
- fi1 = CNum4Diff_rungeKuttaMethod(fi2, xi, h, func);
140
+ fi1 = CNum4Diff_Tier_rungeKuttaMethod(fi2, xi, h, func);
136
141
  y = fi1;
137
142
  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;
143
+ fi = CNum4Diff_Tier_rungeKuttaMethod(fi1, xi, h, func);
144
+ y_pred = y + h * (23 * fi - 16 * fi1 + 5 * fi2) / 12.0;
145
+ y = y + h * (5 * y_pred + 8 * fi -1 * fi1) / 12.0;
140
146
  fi2 = fi1;
141
147
  fi1 = fi;
142
148
  }
@@ -4,27 +4,37 @@
4
4
  /**************************************/
5
5
  /* 構造体宣言 */
6
6
  /**************************************/
7
- typedef struct _CNum4Diff CNum4Diff;
7
+ typedef struct _CNum4Diff CNum4Diff;
8
+ typedef struct _CNum4DiffTier CNum4DiffTier;
9
+ typedef struct _CNum4DiffMultistage CNum4DiffMultistage;
8
10
  typedef double (*Func)(double x);
9
11
 
10
- struct _CNum4Diff
12
+ struct _CNum4DiffTier
13
+ {
14
+ double (*FP_eulerMethod)(double yi, double xi, double h, Func func);
15
+ double (*FP_heunMethod)(double yi, double xi, double h, Func func);
16
+ double (*FP_rungeKuttaMethod)(double yi, double xi, double h, Func func);
17
+ };
18
+ struct _CNum4DiffMultistage
11
19
  {
12
- double (*FP_eulerMethod)(double yi, double xi, double h, Func func);
13
- double (*FP_heunMethod)(double yi, double xi, double h, Func func);
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);
20
+ double (*FP_adamsBashforthMethod)(double a, double b, double y0, double h, Func func);
21
+ double (*FP_adamsMoultonMethod)(double a, double b, double y0, double h, Func func);
17
22
  ;
18
23
  };
24
+ struct _CNum4Diff
25
+ {
26
+ CNum4DiffTier tierMethod;
27
+ CNum4DiffMultistage multistageMethod;
28
+ };
19
29
  /**************************************/
20
30
  /* define宣言 */
21
31
  /**************************************/
22
32
  /**************************************/
23
33
  /* プロトタイプ宣言 */
24
34
  /**************************************/
25
- double CNum4Diff_eulerMethod(double yi, double xi, double h, Func func);
26
- double CNum4Diff_heunMethod(double yi, double xi, double h, Func func);
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);
35
+ double CNum4Diff_Tier_eulerMethod(double yi, double xi, double h, Func func);
36
+ double CNum4Diff_Tier_heunMethod(double yi, double xi, double h, Func func);
37
+ double CNum4Diff_Tier_rungeKuttaMethod(double yi, double xi, double h, Func func);
38
+ double CNum4Diff_Multistage_adamsBashforthMethod(double a, double b, double y0, double h, Func func);
39
+ double CNum4Diff_Multistage_adamsMoultonMethod(double a, double b, double y0, double h, Func func);
30
40
  #endif
data/lib/num4diff.rb CHANGED
@@ -26,7 +26,7 @@ module Num4DiffLib
26
26
  # @return [double] xi+hに対するyi_1の値
27
27
  #
28
28
  attach_function :eulerMethod,
29
- :CNum4Diff_eulerMethod, [:double, :double, :double, :f], :double
29
+ :CNum4Diff_Tier_eulerMethod, [:double, :double, :double, :f], :double
30
30
  #
31
31
  # ホイン法による数値計算
32
32
  # @overload heunMethod(yi, xi, h, func)
@@ -38,7 +38,7 @@ module Num4DiffLib
38
38
  # @return [double] xi+hに対するyi_1の値
39
39
  #
40
40
  attach_function :heunMethod,
41
- :CNum4Diff_heunMethod, [:double, :double, :double, :f], :double
41
+ :CNum4Diff_Tier_heunMethod, [:double, :double, :double, :f], :double
42
42
  #
43
43
  # 4次のルンゲ=クッタ法による数値計算
44
44
  # @overload rungeKuttaMethod(yi, xi, h, func)
@@ -50,29 +50,29 @@ module Num4DiffLib
50
50
  # @return [double] xi+hに対するyi_1の値
51
51
  #
52
52
  attach_function :rungeKuttaMethod,
53
- :CNum4Diff_rungeKuttaMethod, [:double, :double, :double, :f], :double
53
+ :CNum4Diff_Tier_rungeKuttaMethod, [:double, :double, :double, :f], :double
54
54
  #
55
55
  # アダムス・バッシュフォース法(3段)による数値計算
56
- # @overload adamsBashforthMethod(a, b, yi, h, func)
56
+ # @overload adamsBashforthMethod(a, b, y0, h, func)
57
57
  # @param [double] a 下限値
58
58
  # @param [double] b 上限値
59
- # @param [double] yi xiに対するyiの値
59
+ # @param [double] y0 y(x0=a)の値
60
60
  # @param [double] h 刻み幅
61
61
  # @param [callback] func xiに対する傾きを計算する関数
62
- # @return [double] xi+hに対するyi_1の値
62
+ # @return [double] [a,b]の積分値
63
63
  #
64
64
  attach_function :adamsBashforthMethod,
65
- :CNum4Diff_adamsBashforthMethod, [:double, :double, :double, :double, :f], :double
65
+ :CNum4Diff_Multistage_adamsBashforthMethod, [:double, :double, :double, :double, :f], :double
66
66
  #
67
67
  # アダムス・ムルトン法(3段)による数値計算
68
- # @overload adamsMoultonMethod(a, b, yi, xi, h, func)
68
+ # @overload adamsMoultonMethod(a, b, y0, xi, h, func)
69
69
  # @param [double] a 下限値
70
70
  # @param [double] b 上限値
71
- # @param [double] yi xiに対するyiの値
71
+ # @param [double] y0 y0 y(x0=a)の値
72
72
  # @param [double] h 刻み幅
73
73
  # @param [callback] func xiに対する傾きを計算する関数
74
- # @return [double] xi+hに対するyi_1の値
74
+ # @return [double] [a,b]の積分値
75
75
  #
76
76
  attach_function :adamsMoultonMethod,
77
- :CNum4Diff_adamsMoultonMethod, [:double, :double, :double, :double, :f], :double
77
+ :CNum4Diff_Multistage_adamsMoultonMethod, [:double, :double, :double, :double, :f], :double
78
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.4
4
+ version: 0.4.6
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-10 00:00:00.000000000 Z
11
+ date: 2023-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi-compiler
@@ -68,7 +68,9 @@ homepage: http://github.com/siranovel/num4different
68
68
  licenses:
69
69
  - MIT
70
70
  metadata:
71
- changelog_uri: http://github.com/siranovel/num4different/blob/master/CHANGELOG.md
71
+ changelog_uri: http://github.com/siranovel/num4different/blob/main/CHANGELOG.md
72
+ documentation_uri: https://rubydoc.info/gems/num4diff/0.4.6
73
+ homepage_uri: http://github.com/siranovel/num4different
72
74
  post_install_message:
73
75
  rdoc_options: []
74
76
  require_paths: