#!/bin/perl

use strict;
use Math::MatrixReal;

my $M1 = Math::MatrixReal->new_from_rows( [
	[1.0, 1.0], [1.0, 1.0]
	] );
my $M2 = Math::MatrixReal->new_from_rows( [
	[1.0, 1.0], [1.0, 1.0]
	] );
my $M3 = Math::MatrixReal->new_from_rows( [
	[1.0, 1.0], [1.0, 1.0]
	] );
my $MC = Math::MatrixReal->new_from_rows( [
	[1.0, 1.0, 1.0], [1.0, 1.0, 1.0], [1.0, 1.0, 1.0]
	] );


print "M1=", $M1;
print "M2=", $M2;
print "M3=", $M3;
print "M1*M2=", $M1 * $M2;
my $M123 = $M1 * $M2 * $M3;
print "M1*M2*M3=", $M123;
my $det = $M123->det(); 
print "det(M123)=$det\n";
my $InvM123 = $M123->inverse();
print "M123^-1=", $InvM123;
print "M1+M2=", $M1+$M2;

print "\n";
my ($l, $V) = $MC->sym_diagonalize();
print "MC=", $MC;
print "l=", $l;
print "V=", $V;

#$matrix->zero();
#$matrix->one(); Make '1' matrix
#$matrix->assign($row,$column,$value); 
#my $value = $matrix->element($row,$column); 
# Do sub for each element: $matrix = $matrix->each( sub { (shift) + 1 } );
# Do sub for diagonal elements: $matrix = $matrix->each_diag( sub { (shift) + 1 } );

#($l, $V) = $matrix->sym_diagonalize(); for n by n symmetric matrix
#$l = $matrix->sym_eigenvalues(); 
#        $l: eigen values, $V: engen vectors
#($T, $Q) = $matrix->householder();
#$T = $matrix->householder_tridiagonal(); 
#   convert n by n sym. matrix to a tridiagonal matrix
#   $T: symmetic tridiagonal matrix, $Q: transformation orthogonal matrix
#($l, $V) = $T->tri_diagonalize([$Q]); for symmetric tridiagonal matrix
#$l = $T->tri_eigenvalues(); 

#my ($rows,$columns) = $matrix->dim(); 
#$norm_max = $matrix->norm_max(); 
#$norm_sum = $matrix->norm_sum(); 
#$matrix1->transpose($matrix2); 
#$matrix1->add($matrix2,$matrix3);
#$matrix1->subtract($matrix2,$matrix3);
#$matrix1->multiply_scalar($matrix2,$scalar);
#$product_matrix = $matrix1->multiply($matrix2);
#$matrix1->negate($matrix2);  = -$matrix2
#$matrix_to_power = $matrix1->exponent($integer); 
#$trace = $matrix->trace(); 
#$matrix1->copy($matrix2); 
#my $NewMatrix = $matrix1->clone(); 
#my $RowVector = $matrix->row(0);
#$matrix->swap_col( $col1, $col2 ); 
#$matrix->swap_row( $row1, $row2 ); 
