num4diff 0.0.22 → 0.1.3

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: 11beab66abec9bf696ee9b5c236dd40e78c5b98d79eea57839149153c01829b9
4
- data.tar.gz: 8389c5b61a387a0eef3cfa7fe251743a25028ba937d74eabf6bd6ab53d81e7d0
3
+ metadata.gz: 0d3136cc91be5e19847b49e534e7fb8292c8e8d6e2e6ea7b64c19a8e4f0f5e87
4
+ data.tar.gz: 5687b8ae545c9df2da7b39fa2ebe6ae6017276edd8d1e5be750c583d7809c5ff
5
5
  SHA512:
6
- metadata.gz: 47df3270e03fd56b3ff55ac29ddcd5b0ed8a1a9d48d2ff113c3bf6081966cbf266fb649f0246fabd3b851dd3db5a80adcd5695702e3f2d4cfad3b84314326c1d
7
- data.tar.gz: df43a0e2609a1d6b8d5f545d38316805bdfb9f006cdf29c8e41c9619f58fe9ef3435ea8d28866c334084a639ca7ec67e10a7d846ae5511358c7544825710684d
6
+ metadata.gz: 1707e0ebc7e844bc39c64baff378a57ed2cffe80ad7ff3b1ebe51b9d6a2095b31b6018996cb8179ce298b4d7c7c04da5b758dcb896279db8b6703e4c5a3e189e
7
+ data.tar.gz: b9a91f1ebeccff6370a47204ec5de6b2a3e2b42e08934e609f512b313aeff78e53658d5b511585bb87ac82d6ecaced36e463446b70fdbf36efa92122607b437a
@@ -0,0 +1,81 @@
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+ #include <assert.h>
4
+ #include "CNum4Diff.h"
5
+
6
+ static double CNum4Diff_doEulerMethod(double yi, double xi, double h, Func func);
7
+ static double CNum4Diff_doHeunMethod(double yi, double xi, double h, Func func);
8
+ static double CNum4Diff_doRungeKuttaMethod(double yi, double xi, double h, Func func);
9
+ static CNum4Diff _cNum4Diff = {
10
+ .FP_eulerMethod = CNum4Diff_doEulerMethod,
11
+ .FP_heunMethod = CNum4Diff_doHeunMethod,
12
+ .FP_rungeKuttaMethod = CNum4Diff_doRungeKuttaMethod,
13
+ };
14
+ /**************************************/
15
+ /* InterFface部 */
16
+ /**************************************/
17
+ /**************************************/
18
+ /* Class部 */
19
+ /**************************************/
20
+ double CNum4Diff_eulerMethod(double yi, double xi, double h, Func func)
21
+ {
22
+ assert(func != 0);
23
+
24
+ return _cNum4Diff.FP_eulerMethod(yi, xi, h, func);
25
+ }
26
+ double CNum4Diff_heunMethod(double yi, double xi, double h, Func func)
27
+ {
28
+ assert(func != 0);
29
+
30
+ return _cNum4Diff.FP_heunMethod(yi, xi, h, func);
31
+ }
32
+ double CNum4Diff_rungeKuttaMethod(double yi, double xi, double h, Func func)
33
+ {
34
+ assert(func != 0);
35
+
36
+ return _cNum4Diff.FP_rungeKuttaMethod(yi, xi, h, func);
37
+ }
38
+ /**************************************/
39
+ /* 処理実行部 */
40
+ /**************************************/
41
+ /*
42
+ * オイラー法
43
+ */
44
+ static double CNum4Diff_doEulerMethod(double yi, double xi, double h, Func func)
45
+ {
46
+ double y = func(xi);
47
+
48
+ return yi + h * y;
49
+ }
50
+ /*
51
+ * ホイン法
52
+ */
53
+ static double CNum4Diff_doHeunMethod(double yi, double xi, double h, Func func)
54
+ {
55
+ double y = func(xi);
56
+ double k1 = 0.0;
57
+ double k2 = 0.0;
58
+
59
+ k1 = h * y; // k1 = h * f(xi, y)
60
+ k2 = h * (yi + k1); // k2 = h * f(xi_h, h * f(xi + h, yi + k1)
61
+ return yi + (k1 + k2) / 2.0;
62
+ }
63
+ /*
64
+ * ルンゲクッタ法
65
+ */
66
+ static double CNum4Diff_doRungeKuttaMethod(double yi, double xi, double h, Func func)
67
+ {
68
+ double y = 0.0;
69
+ double k1 = 0.0;
70
+ double k2 = 0.0;
71
+ double k3 = 0.0;
72
+ double k4 = 0.0;
73
+
74
+ y = func(xi);
75
+ k1 = h * y; // k1 = h * f(xi, y)
76
+ k2 = h * (yi + k1 / 2.0); // k2 = h * f(xi + h / 2, yi + k1 / 2)
77
+ k3 = h * (yi + k2 / 2.0); // k3 = h * f(xi + h / 2, y1 + k2 / 2)
78
+ k4 = h * (yi + k3); // k4 = h * f(xi + h, yi + k3)
79
+ return yi + (k1 + 2 * k2 + 2 * k3 + k4) / 6.0;
80
+ }
81
+
@@ -0,0 +1,25 @@
1
+ #ifndef _CNum4Diff_H_
2
+ #define _CNum4Diff_H_
3
+
4
+ /**************************************/
5
+ /* 構造体宣言 */
6
+ /**************************************/
7
+ typedef struct _CNum4Diff CNum4Diff;
8
+ typedef double (*Func)(double x);
9
+
10
+ struct _CNum4Diff
11
+ {
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
+ };
16
+ /**************************************/
17
+ /* define宣言 */
18
+ /**************************************/
19
+ /**************************************/
20
+ /* プロトタイプ宣言 */
21
+ /**************************************/
22
+ double CNum4Diff_eulerMethod(double yi, double xi, double h, Func func);
23
+ double CNum4Diff_heunMethod(double yi, double xi, double h, Func func);
24
+ double CNum4Diff_rungeKuttaMethod(double yi, double xi, double h, Func func);
25
+ #endif
@@ -0,0 +1,5 @@
1
+ require 'ffi-compiler/compile_task'
2
+
3
+ FFI::Compiler::CompileTask.new('num4diff') do |c|
4
+ c.have_header?('num4diff.h', '.')
5
+ end
data/lib/num4diff.rb CHANGED
@@ -1,16 +1,16 @@
1
1
  require 'ffi'
2
+ require 'ffi-compiler/loader'
2
3
 
3
4
  #
4
5
  # 数値計算による常微分方程式の解法するライブラリ
5
6
  #
6
7
  module Num4DiffLib
7
8
  extend FFI::Library
8
- spec = Gem.loaded_specs["num4diff"]
9
- gem_root = spec.gem_dir
10
- ffi_lib ["#{gem_root}/ext/num4diff/libnum4diff.so"]
11
- # y = f(xi)
9
+
10
+ ffi_lib FFI::Compiler::Loader.find('num4diff')
11
+ # dy = f(xi)
12
12
  # @param [double] xi xiの値
13
- # @return [double] y xiに対するyの値
13
+ # @return [double] xiに対するyの値
14
14
  callback :f, [:double], :double
15
15
 
16
16
  #
@@ -19,8 +19,8 @@ module Num4DiffLib
19
19
  # @param [double] yi xiに対するyiの値
20
20
  # @param [double] xi xiの値
21
21
  # @param [double] h 刻み幅
22
- # @param [callback] func xiに対する微分を計算する関数
23
- # @return [double] yi_1 xi+hに対するyiの値
22
+ # @param [callback] func xiに対する傾きを計算する関数
23
+ # @return [double] xi+hに対するyiの値
24
24
  #
25
25
  attach_function :eulerMethod,
26
26
  :CNum4Diff_eulerMethod, [:double, :double, :double, :f], :double
@@ -29,8 +29,8 @@ module Num4DiffLib
29
29
  # @param [double] yi xiに対するyiの値
30
30
  # @param [double] xi xiの値
31
31
  # @param [double] h 刻み幅
32
- # @param [callback] func xiに対する微分を計算する関数
33
- # @return [double] yi_1 xi+hに対するyiの値
32
+ # @param [callback] func xiに対する傾きを計算する関数
33
+ # @return [double] xi+hに対するyiの値
34
34
  #
35
35
  attach_function :heunMethod,
36
36
  :CNum4Diff_heunMethod, [:double, :double, :double, :f], :double
@@ -40,8 +40,9 @@ module Num4DiffLib
40
40
  # @param [double] yi xiに対するyiの値
41
41
  # @param [double] xi xiの値
42
42
  # @param [double] h 刻み幅
43
- # @param [callback] func xiに対する微分を計算する関数
44
- # @return [double] yi_1 xi+hに対するyiの値
43
+ # @param [callback] func xiに対する傾きを計算する関数
44
+ # @return [double] xi+hに対するyiの値
45
+ #
45
46
  attach_function :rungeKuttaMethod,
46
47
  :CNum4Diff_rungeKuttaMethod, [:double, :double, :double, :f], :double
47
48
  end
metadata CHANGED
@@ -1,43 +1,66 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: num4diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.22
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - siranovel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-04 00:00:00.000000000 Z
11
+ date: 2022-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ffi
14
+ name: ffi-compiler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 1.15.0
20
17
  - - "~>"
21
18
  - !ruby/object:Gem::Version
22
- version: '1.15'
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '12.3'
27
40
  - - ">="
28
41
  - !ruby/object:Gem::Version
29
- version: 1.15.0
42
+ version: 12.3.3
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
30
47
  - - "~>"
31
48
  - !ruby/object:Gem::Version
32
- version: '1.15'
49
+ version: '12.3'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 12.3.3
33
53
  description: numerical solution for ordinaray differential equations
34
54
  email: siranovel@gmail.com
35
55
  executables: []
36
- extensions: []
56
+ extensions:
57
+ - ext/num4diff/Rakefile
37
58
  extra_rdoc_files: []
38
59
  files:
39
60
  - LICENSE
40
- - ext/num4diff/libnum4diff.so
61
+ - ext/num4diff/CNum4Diff.c
62
+ - ext/num4diff/CNum4Diff.h
63
+ - ext/num4diff/Rakefile
41
64
  - lib/num4diff.rb
42
65
  homepage: http://github.com/siranovel/num4different
43
66
  licenses:
Binary file