Sha256: 5d2e04ddbb5582f1be7164fedf10c055fc2f0e3700315440aca3c36295c1a406

Contents?: true

Size: 967 Bytes

Versions: 16

Compression:

Stored size: 967 Bytes

Contents

#!/usr/bin/env ruby
require("gsl")
include Math

#solver = GSL::Root::FSolver.alloc(GSL::Root::FSolver::BISECTION)
#solver = GSL::Root::FSolver.alloc("falsepos")
#solver = GSL::Root::FSolver.alloc("brent")
solver = GSL::Root::FSolver.alloc(GSL::Root::FSolver::BRENT)
puts "using #{solver.name} method"

f = GSL::Function.alloc { |x, params|
  a = params[0]
  b = params[1]
  c = params[2]
  (a*x + b)*x + c
}

f.set_params(1, 0, -5)
expected = sqrt(5.0)

printf("%5s [%9s, %9s] %9s %10s %9s\n",
          "iter", "lower", "upper", "root", 
          "err", "err(est)")

solver.set(f, 0.0, 5.0)
iter = 0
status = nil
while status != GSL::SUCCESS
  iter += 1
  status = solver.iterate
  r = solver.root
  xl = solver.x_lower
  xu = solver.x_upper
  status = solver.test_interval(0, 0.001)

  if status == GSL::SUCCESS
    printf("Converged:\n")
  end
  printf("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n",
         iter, xl, xu, r, r - expected, xu - xl)
end

p f.fsolve(0, 5)

Version data entries

16 entries across 16 versions & 4 rubygems

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