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 +4 -4
- data/CHANGELOG.md +14 -3
- data/ext/num4diff/CNum4Diff.c +29 -23
- data/ext/num4diff/CNum4Diff.h +22 -12
- data/lib/num4diff.rb +11 -11
- metadata +5 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ff5e1dfd13b71508a48cf82c7e4cfdb28f83971c410a4d33aeabf2807c840b04
|
|
4
|
+
data.tar.gz: 67d9c83ef8cef833b636aedd31c0f686d0066272560c670159fef169e91aca4a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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 '
|
|
20
|
-
to add_development_dependency '
|
|
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
|
|
data/ext/num4diff/CNum4Diff.c
CHANGED
|
@@ -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
|
|
10
|
-
static double CNum4Diff_doAdamsMoultonMethod(double a, double b, double
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
51
|
+
return _cNum4Diff.multistageMethod.FP_adamsBashforthMethod(a, b, y0, h, func);
|
|
48
52
|
}
|
|
49
|
-
double
|
|
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,
|
|
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
|
|
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 =
|
|
112
|
+
double y = 0.0;
|
|
109
113
|
|
|
110
|
-
fi2 =
|
|
114
|
+
fi2 = y0;
|
|
111
115
|
xi = xi + h;
|
|
112
|
-
fi1 =
|
|
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 =
|
|
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
|
|
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
|
|
135
|
+
double y_pred = 0.0;
|
|
136
|
+
double y = 0.0;
|
|
132
137
|
|
|
133
|
-
fi2 =
|
|
138
|
+
fi2 = y0;
|
|
134
139
|
xi = xi + h;
|
|
135
|
-
fi1 =
|
|
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 =
|
|
139
|
-
|
|
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
|
}
|
data/ext/num4diff/CNum4Diff.h
CHANGED
|
@@ -4,27 +4,37 @@
|
|
|
4
4
|
/**************************************/
|
|
5
5
|
/* 構造体宣言 */
|
|
6
6
|
/**************************************/
|
|
7
|
-
typedef struct _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
|
|
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 (*
|
|
13
|
-
double (*
|
|
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
|
|
26
|
-
double
|
|
27
|
-
double
|
|
28
|
-
double
|
|
29
|
-
double
|
|
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
|
-
:
|
|
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
|
-
:
|
|
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
|
-
:
|
|
53
|
+
:CNum4Diff_Tier_rungeKuttaMethod, [:double, :double, :double, :f], :double
|
|
54
54
|
#
|
|
55
55
|
# アダムス・バッシュフォース法(3段)による数値計算
|
|
56
|
-
# @overload adamsBashforthMethod(a, b,
|
|
56
|
+
# @overload adamsBashforthMethod(a, b, y0, h, func)
|
|
57
57
|
# @param [double] a 下限値
|
|
58
58
|
# @param [double] b 上限値
|
|
59
|
-
# @param [double]
|
|
59
|
+
# @param [double] y0 y(x0=a)の値
|
|
60
60
|
# @param [double] h 刻み幅
|
|
61
61
|
# @param [callback] func xiに対する傾きを計算する関数
|
|
62
|
-
# @return [double]
|
|
62
|
+
# @return [double] [a,b]の積分値
|
|
63
63
|
#
|
|
64
64
|
attach_function :adamsBashforthMethod,
|
|
65
|
-
:
|
|
65
|
+
:CNum4Diff_Multistage_adamsBashforthMethod, [:double, :double, :double, :double, :f], :double
|
|
66
66
|
#
|
|
67
67
|
# アダムス・ムルトン法(3段)による数値計算
|
|
68
|
-
# @overload adamsMoultonMethod(a, b,
|
|
68
|
+
# @overload adamsMoultonMethod(a, b, y0, xi, h, func)
|
|
69
69
|
# @param [double] a 下限値
|
|
70
70
|
# @param [double] b 上限値
|
|
71
|
-
# @param [double]
|
|
71
|
+
# @param [double] y0 y0 y(x0=a)の値
|
|
72
72
|
# @param [double] h 刻み幅
|
|
73
73
|
# @param [callback] func xiに対する傾きを計算する関数
|
|
74
|
-
# @return [double]
|
|
74
|
+
# @return [double] [a,b]の積分値
|
|
75
75
|
#
|
|
76
76
|
attach_function :adamsMoultonMethod,
|
|
77
|
-
:
|
|
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
|
+
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-
|
|
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/
|
|
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:
|