num4diff 0.4.5 → 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: fc6954bb9f3eb7e7b35429c7f4429aa60f5a998ce1934dbe79b0117ae1013a51
4
- data.tar.gz: 3caa0e4e7b083a435b374c0739134ac583ab149f30306327783cf239896c263b
3
+ metadata.gz: ff5e1dfd13b71508a48cf82c7e4cfdb28f83971c410a4d33aeabf2807c840b04
4
+ data.tar.gz: 67d9c83ef8cef833b636aedd31c0f686d0066272560c670159fef169e91aca4a
5
5
  SHA512:
6
- metadata.gz: b9e5780c5bbfecb0dd284e561775f78a8cff1530194817f4ac58f22db6f0103e851558a548e3cf04d54e4f4d009a2cad2508d1f5bb6a2e2cf33f8aa59a50174e
7
- data.tar.gz: 2d4736748fa20f35f7ba11fa0e614f165d9b30a73038d4942262c30f3951d33db45bf0ffb46970197b45e3d98e51d639365a3845e69a8ebc52c4db309be9569b
6
+ metadata.gz: f2a668107ed2dbe416f00a1a16ef6eda01832894fe5c2b8153efb948b440fa591d9ef4d33b0187da7e6fcf73dadb306c3c3b6f15f4f372cfd6a91b204e6bceae
7
+ data.tar.gz: ed3e97fa67b1dc82dc409a3ed8c4a2606c6f08a6a12d5c1d690e144c3fb31d98c245decb48284abdedc3e8a56e624ef68a8b44dcaa78a88a242d9f8d57421cbe
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
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
+
5
10
  ## [0.4.5] - 2023-04-14
6
11
 
7
12
  ### Fixed
@@ -9,11 +9,15 @@ static double CNum4Diff_doRungeKuttaMethod(double yi, double xi, double h, Func
9
9
  static double CNum4Diff_doAdamsBashforthMethod(double a, double b, double y0, double h, Func func);
10
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 y0, 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, y0, h, func);
51
+ return _cNum4Diff.multistageMethod.FP_adamsBashforthMethod(a, b, y0, h, func);
48
52
  }
49
- double CNum4Diff_adamsMoultonMethod(double a, double b, double y0, 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, y0, h, func);
58
+ return _cNum4Diff.multistageMethod.FP_adamsMoultonMethod(a, b, y0, h, func);
55
59
  }
56
60
  /**************************************/
57
61
  /* 処理実行部 */
@@ -109,10 +113,10 @@ static double CNum4Diff_doAdamsBashforthMethod(double a, double b, double y0, do
109
113
 
110
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;
@@ -133,10 +137,10 @@ static double CNum4Diff_doAdamsMoultonMethod(double a, double b, double y0, doub
133
137
 
134
138
  fi2 = y0;
135
139
  xi = xi + h;
136
- fi1 = CNum4Diff_rungeKuttaMethod(fi2, xi, h, func);
140
+ fi1 = CNum4Diff_Tier_rungeKuttaMethod(fi2, xi, h, func);
137
141
  y = fi1;
138
142
  for (xi = xi + h; xi < b; xi += h) {
139
- fi = CNum4Diff_rungeKuttaMethod(fi1, xi, h, func);
143
+ fi = CNum4Diff_Tier_rungeKuttaMethod(fi1, xi, h, func);
140
144
  y_pred = y + h * (23 * fi - 16 * fi1 + 5 * fi2) / 12.0;
141
145
  y = y + h * (5 * y_pred + 8 * fi -1 * fi1) / 12.0;
142
146
  fi2 = fi1;
@@ -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
20
  double (*FP_adamsBashforthMethod)(double a, double b, double y0, double h, Func func);
16
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 y0, double h, Func func);
29
- double CNum4Diff_adamsMoultonMethod(double a, double b, double y0, 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,7 +50,7 @@ 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
56
  # @overload adamsBashforthMethod(a, b, y0, h, func)
@@ -62,7 +62,7 @@ module Num4DiffLib
62
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
68
  # @overload adamsMoultonMethod(a, b, y0, xi, h, func)
@@ -74,5 +74,5 @@ module Num4DiffLib
74
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.5
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-13 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
@@ -69,6 +69,7 @@ licenses:
69
69
  - MIT
70
70
  metadata:
71
71
  changelog_uri: http://github.com/siranovel/num4different/blob/main/CHANGELOG.md
72
+ documentation_uri: https://rubydoc.info/gems/num4diff/0.4.6
72
73
  homepage_uri: http://github.com/siranovel/num4different
73
74
  post_install_message:
74
75
  rdoc_options: []