#!/usr/bin/env ruby
require("gsl")
include Math
def f_to_solve(x)
x*x - 5.0
end
def df_to_solve(x)
2*x
end
f = Proc.new { |x|
f_to_solve(x)
}
df = Proc.new { |x|
df_to_solve(x)
}
expected = sqrt(5.0)
x = 5.0
function_fdf = Function_fdf.alloc(f, df)
solver = Root::FdfSolver.alloc(Root::FdfSolver::STEFFENSON)
puts "using #{solver.name} method"
solver.set(function_fdf, x)
printf("%-5s %10s %10s %10s\n",
"iter", "root", "err", "err(est)")
iter = 0
status = nil
while status != GSL::SUCCESS
iter += 1
status = solver.iterate
x0 = x
x = solver.root
status = GSL::Root::test_delta(x, x0, 0, 1e-3)
if status == GSL::SUCCESS
printf("Converged:\n")
end
printf("%5d %10.7f %+10.7f %10.7f\n",
iter, x, x - expected, x - x0)
end
syntax highlighted by Code2HTML, v. 0.9.1