#!/usr/bin/env ruby
# Ruby/GSL implementation of GSL "cheb/test.c"
require("gsl")
require("./gsl_test.rb")
include GSL::Test
include Math
f_T0 = GSL::Function.alloc { |x| 1.0 }
f_T1 = GSL::Function.alloc { |x| x }
f_T2 = GSL::Function.alloc { |x| 2.0*x*x - 1.0 }
f_sin = GSL::Function.alloc { |x| sin(x) }
tol = 100.0*GSL::DBL_EPSILON
order = 40
cs = GSL::Cheb.alloc(order)
csd = GSL::Cheb.alloc(order)
csi = GSL::Cheb.alloc(order)
GSL::ieee_env_setup()
cs.init(f_T0, -1.0, 1.0)
for i in 0...order do
c_exp = i == 0 ? 2.0 : 0.0
desc = sprintf("c[%d] for T_0(x)", i)
GSL::Test.test_abs(cs.c[i], c_exp, tol, desc)
end
cs.init(f_T1, -1.0, 1.0)
for i in 0...order do
c_exp = i == 1 ? 1.0 : 0.0
desc = sprintf("c[%d] for T_1(x)", i)
GSL::Test.test_abs(cs.c[i], c_exp, tol, desc)
end
cs.init(f_T2, -1.0, 1.0)
for i in 0...order do
c_exp = i == 2 ? 1.0 : 0.0
desc = sprintf("c[%d] for T_2(x)", i)
GSL::Test.test_abs(cs.c[i], c_exp, tol, desc)
end
cs.init(f_sin, -M_PI, M_PI)
GSL::Test.test_abs(cs.c[0], 0.0, tol, "c[0] for F_sin(x)")
GSL::Test.test_abs(cs.c[1], 5.69230686359506e-01, tol, "c[1] for F_sin(x)")
GSL::Test.test_abs(cs.c[2], 0.0, tol, "c[2] for F_sin(x)")
GSL::Test.test_abs(cs.c[3], -6.66916672405979e-01, tol, "c[3] for F_sin(x)")
GSL::Test.test_abs(cs.c[4], 0.0, tol, "c[4] for F_sin(x)")
GSL::Test.test_abs(cs.c[5], 1.04282368734237e-01, tol, "c[5] for F_sin(x)")
x = -M_PI
while x < M_PI
r = cs.eval(x)
desc = sprintf("GSL::Cheb#eval, sin\(%.3g\)", x)
GSL::Test.test_abs(r, sin(x), tol, desc)
x += M_PI/100.0
end
x = -M_PI
while x < M_PI
r, e = cs.eval_err(x)
desc = sprintf("GSL::Cheb#eval_err, sin\(%.3g\)", x)
GSL::Test.test_abs(r, sin(x), tol, desc)
desc = sprintf("GSL::Cheb#eval_err, error sin\(%.3g\)", x)
GSL::Test.test_factor((r-sin(x)).abs + GSL::DBL_EPSILON, e, 10.0, desc)
x += M_PI/100.0
end
x = -M_PI
while x < M_PI
r = cs.eval_n(25, x)
desc = sprintf("GSL::Cheb#eval_n, sin\(%.3g\)", x)
GSL::Test.test_abs(r, sin(x), tol, desc)
x += M_PI/100.0
end
x = -M_PI
while x < M_PI
r, e = cs.eval_n_err(25, x)
desc = sprintf("GSL::Cheb#eval_n_err, sin\(%.3g\)", x)
GSL::Test.test_abs(r, sin(x), tol, desc)
desc = sprintf("GSL::Cheb#eval_n_err, error sin\(%.3g\)", x)
GSL::Test.test_factor((r-sin(x)).abs + GSL::DBL_EPSILON, e, 10.0, desc)
x += M_PI/100.0
end
csd = cs.calc_deriv
#cs.calc_deriv(csd)
#csd = GSL::Cheb.calc_deriv(cs)
#GSL::Cheb.calc_deriv(csd, cs)
x = -M_PI
while x < M_PI
r = csd.eval(x)
desc = sprintf("GSL::Cheb#eval, deriv sin\(%.3g\)", x)
GSL::Test.test_abs(r, cos(x), 1600*tol, desc)
x += M_PI/100.0
end
csi = cs.calc_integ
#cs.calc_integ(csi)
#csi = GSL::Cheb.calc_integ(cs)
#GSL::Cheb.calc_integ(csi, cs)
x = -M_PI
while x < M_PI
r = csi.eval(x)
desc = sprintf("GSL::Cheb#eval, integ sin\(%.3g\)", x)
GSL::Test.test_abs(r, -(1+cos(x)), tol, desc)
x += M_PI/100.0
end
syntax highlighted by Code2HTML, v. 0.9.1