Sha256: 203f94970b3ce7fdaab501d4b8d25ba597c6c40184923a09ca0ab7ccedca4e31

Contents?: true

Size: 1.51 KB

Versions: 16

Compression:

Stored size: 1.51 KB

Contents

#!/usr/bin/env ruby
# Solve 
#   dydt = -2y     ---> y(t) = exp(-2t)

require("gsl")
include GSL::Odeiv

dim = 1

PARAM = 2.0

func = Proc.new { |t, y, dydt, param|
  dydt[0] = -param*y[0]
}

jac = Proc.new { |t, y, dfdy, dfdt, param|
  dfdy = -param
  dfdt[0] = 0.0
}

def odeiv_compare_algorithm(solver, steptype, t0, tend, h0, y0, outfile)
  t = t0*1.0
  h = h0*1.0
  y = GSL::Vector.alloc([y0])
  s = Step.alloc(steptype, solver.dim)
  solver.set_step(s)
  solver.evolve.reset
#  p solver.params

  i = 0
  file = File.open(outfile, "w")
  while t < tend
    t, h, status = solver.apply(t, tend, h, y)
    break if status != GSL::SUCCESS
    file.printf("%.5e %.5e %.5e\n", t, y[0], h)
    i += 1
  end
  file.close
  return i
end

if GSL::VERSION >= "1.5.90"
  ALGORITHMS = ["rk2", "rk4", "rkf45", "rkck", "rk8pd", "rk2imp", "rk4imp", 
                "bsimp", "gear1", "gear2", "rk2simp"]
  gpfile = "demo2.gp"
else
  ALGORITHMS = ["rk2", "rk4", "rkf45", "rkck", "rk8pd", "rk2imp", "rk4imp", 
                "bsimp", "gear1", "gear2"]
  gpfile = "demo.gp"
end

solver = Solver.alloc(Step::RKF45, [1e-6, 0.0], func, jac, dim)
solver.set_params(PARAM)

puts("Solve dydt = -2y, y[0] = 1")
puts("y(t) = exp(-2t)\n\n")
ALGORITHMS.each do |alg|
  outfile = alg + ".dat"
  t0, tend, h0, y0 = 0.0, 3.0, 1e-6, 1.0
  i = odeiv_compare_algorithm(solver, alg, t0, tend, h0, y0, outfile)
  printf("%7s: Iteration %5d\n", alg, i)
end

system("gnuplot -persist #{gpfile}")

ALGORITHMS.each do |alg|
  outfile = alg + ".dat"
  File.delete(outfile)
end

Version data entries

16 entries across 16 versions & 4 rubygems

Version Path
rb-gsl-1.16.0.4 examples/odeiv/demo.rb
rb-gsl-1.16.0.3 examples/odeiv/demo.rb
rb-gsl-1.16.0.3.rc1 examples/odeiv/demo.rb
gsl-nmatrix-1.15.3.2 examples/odeiv/demo.rb
gsl-nmatrix-1.15.3.1 examples/odeiv/demo.rb
rb-gsl-1.16.0.2 examples/odeiv/demo.rb
rb-gsl-1.16.0.1 examples/odeiv/demo.rb
rb-gsl-1.16.0 examples/odeiv/demo.rb
rb-gsl-1.15.3.2 examples/odeiv/demo.rb
rb-gsl-1.15.3.1 examples/odeiv/demo.rb
blackwinter-gsl-1.15.3.2 examples/odeiv/demo.rb
gsl-nmatrix-1.15.3.0 examples/odeiv/demo.rb
gsl-1.15.3 examples/odeiv/demo.rb
gsl-1.14.7 examples/odeiv/demo.rb
gsl-1.14.6 examples/odeiv/demo.rb
gsl-1.14.5 examples/odeiv/demo.rb