num4diff 0.4.5 → 0.4.6

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: 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: []