num4diff 0.0.17 → 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: f446c837fe8380d46e1467a9a2c1365fd6b6e5b5571f44be19d94e3f102d566e
4
- data.tar.gz: f5618c68783af3470c5f8f3304c94d4b9307a9eabcba53f470507a72f4d32d56
3
+ metadata.gz: 0d3136cc91be5e19847b49e534e7fb8292c8e8d6e2e6ea7b64c19a8e4f0f5e87
4
+ data.tar.gz: 5687b8ae545c9df2da7b39fa2ebe6ae6017276edd8d1e5be750c583d7809c5ff
5
5
  SHA512:
6
- metadata.gz: 6ccacc59e40dcab11980802247733c4efce0bfa553a93a9d204a972e574a49e422c36fbf51a46509bf8c6dd931f85b7c9ddfd89c28bcd5fe33841dde735e54e6
7
- data.tar.gz: 8c51b60e4d77cabdac3c4b49c2f41a2b7787f8b6ecf9b7779a98f427dedb92c49a2376ed759fba43eb615cc8e05410e3474f3c996b3e0a7c582b1a449c45a783
6
+ metadata.gz: 1707e0ebc7e844bc39c64baff378a57ed2cffe80ad7ff3b1ebe51b9d6a2095b31b6018996cb8179ce298b4d7c7c04da5b758dcb896279db8b6703e4c5a3e189e
7
+ data.tar.gz: b9a91f1ebeccff6370a47204ec5de6b2a3e2b42e08934e609f512b313aeff78e53658d5b511585bb87ac82d6ecaced36e463446b70fdbf36efa92122607b437a
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 siranovel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -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,19 +1,48 @@
1
1
  require 'ffi'
2
+ require 'ffi-compiler/loader'
2
3
 
4
+ #
5
+ # 数値計算による常微分方程式の解法するライブラリ
6
+ #
3
7
  module Num4DiffLib
4
8
  extend FFI::Library
5
- spec = Gem.loaded_specs["num4diff"]
6
- gem_root = spec.gem_dir
7
- ffi_lib ["#{gem_root}/ext/num4diff/libnum4diff.so"]
8
-
9
+
10
+ ffi_lib FFI::Compiler::Loader.find('num4diff')
11
+ # dy = f(xi)
12
+ # @param [double] xi xiの値
13
+ # @return [double] xiに対するyの値
9
14
  callback :f, [:double], :double
10
- # yi_1 = eulerMethod(yi, x, h, func)
15
+
16
+ #
17
+ # オイラー法による数値計算
18
+ # yi_1 = eulerMethod(yi, xi, h, func)
19
+ # @param [double] yi xiに対するyiの値
20
+ # @param [double] xi xiの値
21
+ # @param [double] h 刻み幅
22
+ # @param [callback] func xiに対する傾きを計算する関数
23
+ # @return [double] xi+hに対するyiの値
24
+ #
11
25
  attach_function :eulerMethod,
12
26
  :CNum4Diff_eulerMethod, [:double, :double, :double, :f], :double
13
- # yi_1 = heunMethod(yi, x, h, func)
27
+ # ホイン法による数値計算
28
+ # yi_1 = heunMethod(yi, xi, h, func)
29
+ # @param [double] yi xiに対するyiの値
30
+ # @param [double] xi xiの値
31
+ # @param [double] h 刻み幅
32
+ # @param [callback] func xiに対する傾きを計算する関数
33
+ # @return [double] xi+hに対するyiの値
34
+ #
14
35
  attach_function :heunMethod,
15
36
  :CNum4Diff_heunMethod, [:double, :double, :double, :f], :double
16
- # yi_1 = rungeKuttaMethod(yi, x, h, func)
37
+ #
38
+ # 4次のルンゲ=クッタ法による数値計算
39
+ # yi_1 = rungeKuttaMethod(yi, xi, h, func)
40
+ # @param [double] yi xiに対するyiの値
41
+ # @param [double] xi xiの値
42
+ # @param [double] h 刻み幅
43
+ # @param [callback] func xiに対する傾きを計算する関数
44
+ # @return [double] xi+hに対するyiの値
45
+ #
17
46
  attach_function :rungeKuttaMethod,
18
47
  :CNum4Diff_rungeKuttaMethod, [:double, :double, :double, :f], :double
19
48
  end
metadata CHANGED
@@ -1,22 +1,66 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: num4diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
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-03-17 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2022-04-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi-compiler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
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'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 12.3.3
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '12.3'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 12.3.3
13
53
  description: numerical solution for ordinaray differential equations
14
54
  email: siranovel@gmail.com
15
55
  executables: []
16
- extensions: []
56
+ extensions:
57
+ - ext/num4diff/Rakefile
17
58
  extra_rdoc_files: []
18
59
  files:
19
- - ext/num4diff/libnum4diff.so
60
+ - LICENSE
61
+ - ext/num4diff/CNum4Diff.c
62
+ - ext/num4diff/CNum4Diff.h
63
+ - ext/num4diff/Rakefile
20
64
  - lib/num4diff.rb
21
65
  homepage: http://github.com/siranovel/num4different
22
66
  licenses:
@@ -40,5 +84,5 @@ requirements: []
40
84
  rubygems_version: 3.0.3.1
41
85
  signing_key:
42
86
  specification_version: 4
43
- summary: num for diffrent!
87
+ summary: num for different!
44
88
  test_files: []
Binary file