NAME
Math::Cephes::Matrix - Perl interface to the cephes matrix routines
SYNOPSIS
use Math::Cephes::Matrix qw(mat);# 'mat' is a shortcut for Math::Cephes::Matrix->newmy $M = mat([ [1, 2, -1], [2, -3, 1], [1, 0, 3]]);my $C = mat([ [1, 2, 4], [2, 9, 2], [6, 2, 7]]);my $D = $M->add($C); # D = M + Cmy $Dc = $D->coef;for (my $i=0; $i<3; $i++) {print "row $i:\n";for (my $j=0; $j<3; $j++) {print "\tcolumn $j: $Dc->[$i]->[$j]\n";}}
DESCRIPTION
This module is a layer on top of the basic routines in the cephes math library for operations on square matrices. In the following, a Math::Cephes::Matrix object is created as
my $M = Math::Cephes::Matrix->new($arr_ref);
where $arr_ref is a reference to an array of arrays, as in the following example:
$arr_ref = [ [1, 2, -1], [2, -3, 1], [1, 0, 3] ]
which represents
/ 1 2 -1 \| 2 -3 1 |\ 1 0 3 /
A copy of a Math::Cephes::Matrix object may be done as
my $M_copy = $M->new();
Methods
- coef: get coefficients of the matrix
-
SYNOPSIS:my $c = $M->coef;DESCRIPTION:This returns an reference to an array of arrays containing the coefficients of the matrix.
- clr: set all coefficients equal to a value.
-
SYNOPSIS:$M->clr($n);DESCRIPTION:This sets all the coefficients of the matrix identically to $n. If $n is not given, a default of 0 is used.
- add: add two matrices
-
SYNOPSIS:$P = $M->add($N);DESCRIPTION:This sets
$Pequal to$M+$N.
- sub: subtract two matrices
-
SYNOPSIS:$P = $M->sub($N);DESCRIPTION:This sets
$Pequal to$M-$N.
- mul: multiply two matrices or a matrix and a vector
-
SYNOPSIS:$P = $M->mul($N);DESCRIPTION:This sets
$Pequal to$M*$N. This method can handle matrix multiplication, when$Nis a matrix, as well as matrix-vector multiplication, where$Nis an array reference representing a column vector.
- div: divide two matrices
-
SYNOPSIS:$P = $M->div($N);DESCRIPTION:This sets
$Pequal to$M* ($N)^(-1).
- inv: invert a matrix
-
SYNOPSIS:$I = $M->inv();DESCRIPTION:This sets
$Iequal to ($M)^(-1).
- transp: transpose a matrix
-
SYNOPSIS:$T = $M->transp();DESCRIPTION:This sets
$Tequal to the transpose of$M.
- simq: solve simultaneous equations
-
SYNOPSIS:my $M = Math::Cephes::Matrix->new([ [1, 2, -1], [2, -3, 1], [1, 0, 3]]);my $B = [2, -1, 10];my $X = $M->simq($B);for (my $i=0; $i<3; $i++) {print "X[$i] is $X->[$i]\n";}where
$Mis a Math::Cephes::Matrix object,$Bis an input array reference, and$Xis an output array reference.DESCRIPTION:A set of N simultaneous equations may be represented in matrix form as
M X = Bwhere M is an N x N square matrix and X and B are column vectors of length N.
- eigens: eigenvalues and eigenvectors of a real symmetric matrix
-
SYNOPSIS:my $S = Math::Cephes::Matrix->new([ [1, 2, 3], [2, 2, 3], [3, 3, 4]]);my ($E, $EV1) = $S->eigens();my $EV = $EV1->coef;for (my $i=0; $i<3; $i++) {print "For i=$i, with eigenvalue $E->[$i]\n";my $v = [];for (my $j=0; $j<3; $j++) {$v->[$j] = $EV->[$i]->[$j];}print "The eigenvector is @$v\n";}where
$Mis a Math::Cephes::Matrix object representing a real symmetric matrix.$Eis an array reference containing the eigenvalues of$M, and$EVis a Math::Cephes::Matrix object representing the eigenvalues, the ith row corresponding to the ith eigenvalue.DESCRIPTION:If M is an N x N real symmetric matrix, and X is an N component column vector, the eigenvalue problem
M X = lambda Xwill in general have N solutions, with X the eigenvectors and lambda the eigenvalues.
BUGS
Please report any to Randy Kobes <[email protected]>
COPYRIGHT
The C code for the Cephes Math Library is Copyright 1984, 1987, 1989, 2002 by Stephen L. Moshier, and is available at http://www.netlib.org/cephes/. Direct inquiries to 30 Frost Street, Cambridge, MA 02140.
The perl interface is copyright 2000, 2002 by Randy Kobes. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.