num4diff 0.4.4 → 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: 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: