#!/usr/bin/env ruby
require("gsl")
require("../gsl_test2.rb")
include GSL::Test
include Linalg
m = GSL::Matrix::alloc([0.18, 0.60, 0.57, 0.96], [0.41, 0.24, 0.99, 0.58],
[0.14, 0.30, 0.97, 0.66], [0.51, 0.13, 0.19, 0.85])
A = m.clone
x_exp = GSL::Vector[-4.05205022957397, -12.6056113959069, 1.66091162670884, 8.69376692879523]
B = GSL::Vector[1, 2, 3, 4]
qr, tau = m.QR_decomp
test2(m == A, "#{m.class}#QR_decomp: matrix not destroyed")
x = m.QR_solve(B)
test2(x == x_exp, "#{m.class}#QR_solve(b)")
x = QR::solve(m, B)
test2(x == x_exp, "GSL::Linalg::QR::solve(b)")
tau = m.QR_decomp!
test2(m != A, "#{m.class}#QR_decomp: matrix destroyed")
x = m.QR_solve(tau, B)
test2(x == x_exp, "#{m.class}#QR_solve(tau, b)")
x = qr.solve(tau, B)
test2(x == x_exp, "#{qr.class}#solve(tau, b)")
begin
x = m.QR_solve(B)
rescue
puts("PASS: #{m.class}#QR_solve; tau vector must be given if m is decomped")
end
begin
x = m.solve(B)
rescue
puts("PASS: #{m.class}#solve; tau vector must be given if m is decomped")
end
x = m.solve(tau, B)
test2(x == x_exp, "#{m.class}#solve(tau, b)")
m = A.clone
bb = B.clone
m.QR_svx(bb)
test2(bb == x_exp, "#{m.class}#QR_svx(b)")
tau = QR::decomp!(m)
bb = B.clone
m.QR_svx(tau, bb)
test2(bb == x_exp, "#{m.class}#QR_svx(tau, b)")
begin
x = m.QR_svx(bb)
rescue
puts("PASS: #{m.class}#QR_solve; tau vector must be given if m is decomped")
end
m = A.clone
qr, tau = m.QR_decomp
test2(m == A, "#{m.class}#QR_decomp: matrix not destroyed")
x, r = m.QR_lssolve(B)
test2(x == x_exp, "#{m.class}#QR_lssolve(b)")
r = m.QR_lssolve(B, x)
test2(x == x_exp, "#{qr.class}#QR_lssolve(b, x)")
m.QR_lssolve(B, x, r)
test2(x == x_exp, "#{qr.class}#QR_lssolve(b, x, r)")
x, r = qr.QR_lssolve(tau, B)
test2(x == x_exp, "#{qr.class}#QR_lssolve(tau, b)")
r = qr.QR_lssolve(tau, B, x)
test2(x == x_exp, "#{qr.class}#QR_lssolve(tau, b, x)")
qr.QR_lssolve(tau, B, x, r)
test2(x == x_exp, "#{qr.class}#QR_lssolve(tau, b, x, r)")
begin
x, r = qr.QR_lssolve(bb)
rescue
puts("PASS: #{qr.class}#QR_solve; tau vector must be given if m is decomped")
end
syntax highlighted by Code2HTML, v. 0.9.1