#!/usr/local/bin/ruby require "GSL" include GSL STDERR.puts "Running tests for Matrix..." m = Matrix.new 10, 10 0.upto(9) do |i| 0.upto(9) do |j| m.set i, j, Math::sin(i) + Math::cos(j) end end puts "writing matrix" f = File.open "matrix.dat", "w" m.fwrite f f.close puts "\nreading matrix" n = Matrix.new 10, 10 f = File.open "matrix.dat", "r" n.fread f f.close k = 0 0.upto(9) do |i| 0.upto(9) do |j| d1 = m.get i, j d2 = n.get i, j k += 1 if d1 != d2 end end puts "\ndifferences = #{k} (should be zero)" 0.upto(9) do |j| col = m.column j d = 0.0 col.each do |i| d += i*i end printf "matrix column %d, norm = %g\n", j, Math::sqrt(d) end puts "\neigenvalues and eigenvectors" n = Matrix.new [1.0, 1/2.0, 1/3.0, 1/4.0], [1/2.0, 1/3.0, 1/4.0, 1/5.0], [1/3.0, 1/4.0, 1/5.0, 1/6.0], [1/4.0, 1/5.0, 1/6.0, 1/7.0] vals, vecs = n.eigen_symmv Eigen.symmv_sort vals, vecs, Eigen::SORT_VAL_ASC vals.to_a.each_index do |i| printf "l = %.3f\n", vals.get(i) vecs.get_col(i).printf "%.3f" puts end STDERR.puts "\ndone."