Module: Num4SimDiffLib
- Extended by:
- FFI::Library
- Defined in:
- lib/num4simdiff.rb
Class Method Summary collapse
-
.cnvPt2RbAry(n, pt) ⇒ double[]
FFI::Pointer型からruby配列に変換.
-
.cnvRbAry2pt(n, ary) ⇒ pointer
ruby配列からFFI::Pointer型に変換.
-
.eulerMethod(yi, h, func) ⇒ double[]
オイラー法による数値計算.
-
.heunMethod(yi, h, func) ⇒ double[]
ホイン法による数値計算.
-
.rungeKuttaMethod(yi, h, func) ⇒ double[]
4次のルンゲ=クッタ法による数値計算.
Instance Method Summary collapse
-
#f(n, yn) {|n, yn| ... } ⇒ pointer
dy = f(n, yn).
Class Method Details
.cnvPt2RbAry(n, pt) ⇒ double[]
FFI::Pointer型からruby配列に変換
102 103 104 105 106 107 |
# File 'lib/num4simdiff.rb', line 102 def cnvPt2RbAry(n, pt) rbAry = n.times.map { |i| pt.get_double(i * Fiddle::SIZEOF_DOUBLE) } return rbAry end |
.cnvRbAry2pt(n, ary) ⇒ pointer
ruby配列からFFI::Pointer型に変換
89 90 91 92 93 94 95 |
# File 'lib/num4simdiff.rb', line 89 def cnvRbAry2pt(n, ary) yi_ptr = FFI::MemoryPointer.new(:double, n) n.times.map { |i| yi_ptr.put_double(i * Fiddle::SIZEOF_DOUBLE, ary[i].to_f) } return yi_ptr end |
.eulerMethod(yi, h, func) ⇒ double[]
オイラー法による数値計算
43 44 45 46 47 48 49 |
# File 'lib/num4simdiff.rb', line 43 def eulerMethod(yi, h, func) n = yi.size yi_ptr = cnvRbAry2pt(n, yi) yi_1_ptr = eulerMethodFFI(n, yi_ptr, h, func) yi_1 = cnvPt2RbAry(n, yi_1_ptr) return yi_1 end |
.heunMethod(yi, h, func) ⇒ double[]
ホイン法による数値計算
59 60 61 62 63 64 65 |
# File 'lib/num4simdiff.rb', line 59 def heunMethod(yi, h, func) n = yi.size yi_ptr = cnvRbAry2pt(n, yi) yi_1_ptr = heunMethodFFI(n, yi_ptr, h, func) yi_1 = cnvPt2RbAry(n, yi_1_ptr) return yi_1 end |
.rungeKuttaMethod(yi, h, func) ⇒ double[]
4次のルンゲ=クッタ法による数値計算
75 76 77 78 79 80 81 |
# File 'lib/num4simdiff.rb', line 75 def rungeKuttaMethod(yi, h, func) n = yi.size yi_ptr = cnvRbAry2pt(n, yi) yi_1_ptr = rungeKuttaMethodFFI(n, yi_ptr, h, func) yi_1 = cnvPt2RbAry(n, yi_1_ptr) return yi_1 end |
Instance Method Details
#f(n, yn) {|n, yn| ... } ⇒ pointer
16 |
# File 'lib/num4simdiff.rb', line 16 callback :f, [:int, :pointer], :pointer |