Module: Num4SimDiffLib

Extended by:
FFI::Library
Defined in:
lib/num4simdiff.rb

Class Method Summary collapse

Class Method Details

.eulerMethod(yi, h, func) ⇒ double[]

オイラー法による数値計算

Examples:

func = Proc.new do | n, yi |
  f = []
  f[0] = yi[0]
  f[1] = yi[1]
  next f
end
yi = [1.0, 1.0] 
yi_1 =  Num4SimDiffLib.eulerMethod(yi, 0.001, func)

yi_1 = eulerMethod(yi, h, func)

Parameters:

  • yi (double[])

    xiに対するyiの値(配列)

  • h (double)

    刻み幅

  • func (callback)

    xiに対する傾きを計算する関数

Returns:

  • (double[])

    xi+hに対するyi_1の値(配列)



34
35
36
37
38
39
40
41
42
43
# File 'lib/num4simdiff.rb', line 34

def eulerMethod(yi, h, func)
  n = yi.size
  f = func.call(n, yi)
  f_ptr = cnvRbAry2pt(n, f)
  yi_ptr = cnvRbAry2pt(n, yi)
  yi_1_ptr = eulerMethodFFI(n, yi_ptr, h, f_ptr)
  yi_1 = cnvPt2RbAry(n, yi_1_ptr)
  f_ptr.free()
  return yi_1
end

.heunMethod(yi, h, func) ⇒ double[]

ホイン法による数値計算

Examples:

func = Proc.new do | n, yi |
  f = []
  f[0] = yi[0]
  f[1] = yi[1]
  next f
end
yi = [1.0, 1.0] 
yi_1 =  Num4SimDiffLib.heunMethod(yi, 0.001, func)

yi_1 = heunMethod(yi, h, func)

Parameters:

  • yi (double[])

    xiに対するyiの値(配列)

  • h (double)

    刻み幅

  • func (callback)

    xiに対する傾きを計算する関数

Returns:

  • (double[])

    xi+hに対するyi_1の値(配列)



62
63
64
65
66
67
68
69
70
71
# File 'lib/num4simdiff.rb', line 62

def heunMethod(yi, h, func)
  n = yi.size
  f = func.call(n, yi)
  f_ptr = cnvRbAry2pt(n, f)
  yi_ptr = cnvRbAry2pt(n, yi)
  yi_1_ptr = heunMethodFFI(n, yi_ptr, h, f_ptr)
  yi_1 = cnvPt2RbAry(n, yi_1_ptr)
  f_ptr.free()
  return yi_1
end

.rungeKuttaMethod(yi, h, func) ⇒ double[]

4次のルンゲ=クッタ法による数値計算

Examples:

func = Proc.new do | n, yi |
  f = []
  f[0] = yi[0]
  f[1] = yi[1]
  next f
end
yi = [1.0, 1.0] 
yi_1 =  Num4SimDiffLib.rungeKuttaMethod(yi, 0.001, func)

yi_1 = rungeKuttaMethod(yi, h, func)

Parameters:

  • yi (double[])

    xiに対するyiの値(配列)

  • h (double)

    刻み幅

  • func (callback)

    xiに対する傾きを計算する関数

Returns:

  • (double[])

    xi+hに対するyi_1の値(配列)



90
91
92
93
94
95
96
97
98
99
# File 'lib/num4simdiff.rb', line 90

def rungeKuttaMethod(yi, h, func)
  n = yi.size
  f = func.call(n, yi)
  f_ptr = cnvRbAry2pt(n, f)
  yi_ptr = cnvRbAry2pt(n, yi)
  yi_1_ptr = rungeKuttaMethodFFI(n, yi_ptr, h, f_ptr)
  yi_1 = cnvPt2RbAry(n, yi_1_ptr)
  f_ptr.free()
  return yi_1
end