# 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->new
my $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 + C
my $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 $P equal to $M + $N.

*sub*: subtract two matrices-
`SYNOPSIS: $P = $M->sub($N); DESCRIPTION:`

This sets $P equal to $M - $N.

*mul*: multiply two matrices or a matrix and a vector-
`SYNOPSIS: $P = $M->mul($N); DESCRIPTION:`

This sets $P equal to $M * $N. This method can handle matrix multiplication, when $N is a matrix, as well as matrix-vector multiplication, where $N is an array reference representing a column vector.

*div*: divide two matrices-
`SYNOPSIS: $P = $M->div($N); DESCRIPTION:`

This sets $P equal to $M * ($N)^(-1).

*inv*: invert a matrix-
`SYNOPSIS: $I = $M->inv(); DESCRIPTION:`

This sets $I equal to ($M)^(-1).

*transp*: transpose a matrix-
`SYNOPSIS: $T = $M->transp(); DESCRIPTION:`

This sets $T equal 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 $M is a

*Math::Cephes::Matrix*object, $B is an input array reference, and $X is an output array reference.`DESCRIPTION:`

A set of N simultaneous equations may be represented in matrix form as

`M X = B`

where 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 $M is a

*Math::Cephes::Matrix*object representing a real symmetric matrix. $E is an array reference containing the eigenvalues of $M, and $EV is 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 X`

will in general have N solutions, with X the eigenvectors and lambda the eigenvalues.

# BUGS

Please report any to Randy Kobes <randy@theoryx5.uwinnipeg.ca>

# 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.