Matrix(double[], int) Matrix(double[][]) Matrix(int, int) Matrix(int, int, double) Matrix(int, int, double[][]) constructWithCopy(double[][]) random(int,int) identity(int)
getColumnDimension() getRowDimension() getArray() getArrayCopy() getColumnPackedCopy() getRowPackedCopy() get(int,int) getMatrix(int,int,int,int) getMatrix(int,int,int[]) getMatrix(int[],int,int) getMatrix(int[],int[]) set(int,int,double) setMatrix(int,int,int,int,Matrix) setMatrix(int,int,int[],Matrix) setMatrix(int[],int,int,Matrix) setMatrix(int[],int[],Matrix)
Array-like methods: minus minusEquals plus plusEquals arrayLeftDivide arrayLeftDivideEquals arrayRightDivide arrayRightDivideEquals arrayTimes arrayTimesEquals uminus
{
$errorCount = 0;
$warningCount = 0;
$columnwise = array(1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.);
$rowwise = array(1.,4.,7.,10.,2.,5.,8.,11.,3.,6.,9.,12.);
$avals = array(array(1.,4.,7.,10.),array(2.,5.,8.,11.),array(3.,6.,9.,12.));
$rankdef = $avals;
$tvals = array(array(1.,2.,3.),array(4.,5.,6.),array(7.,8.,9.),array(10.,11.,12.));
$subavals = array(array(5.,8.,11.),array(6.,9.,12.));
$rvals = array(array(1.,4.,7.),array(2.,5.,8.,11.),array(3.,6.,9.,12.));
$pvals = array(array(1.,1.,1.),array(1.,2.,3.),array(1.,3.,6.));
$ivals = array(array(1.,0.,0.,0.),array(0.,1.,0.,0.),array(0.,0.,1.,0.));
$evals = array(array(0.,1.,0.,0.),array(1.,0.,2.e-7,0.),array(0.,-2.e-7,0.,1.),array(0.,0.,1.,0.));
$square = array(array(166.,188.,210.),array(188.,214.,240.),array(210.,240.,270.));
$sqSolution = array(array(13.),array(15.));
$condmat = array(array(1.,3.),array(7.,9.));
$rows = 3;
$cols = 4;
$invalidID = 5;
$raggedr = 0;
$raggedc = 4;
$validID = 3;
$nonconformld = 4;
$ib = 1;
$ie = 2;
$jb = 1;
$je = 3;
$rowindexset = array(1,2);
$badrowindexset = array(1,3);
$columnindexset = array(1,2,3);
$badcolumnindexset = array(1,2,4);
$columnsummax = 33.;
$rowsummax = 30.;
$sumofdiagonals = 15;
$sumofsquares = 650;
echo "<p>Testing constructors and constructor-like methods...</p>";
$A = new Matrix($columnwise, 3);
if($A instanceof Matrix) {
} else
$errorCount = $this->
try_failure($errorCount,
"Column-packed constructor...",
"Unable to construct Matrix");
$T = new Matrix($tvals);
if($T instanceof Matrix)
else
$errorCount = $this->
try_failure($errorCount,
"2D array constructor...",
"Unable to construct Matrix");
$A = new Matrix($columnwise, $validID);
$B = new Matrix($avals);
$tmp = $B->get(0,0);
$avals[0][0] = 0.0;
$C = $B->minus($A);
$avals[0][0] = $tmp;
$B = Matrix::constructWithCopy($avals);
$tmp = $B->get(0,0);
$avals[0][0] = 0.0;
if ( ( $tmp - $B->get(0,0) ) != 0.0 )
$errorCount = $this->
try_failure($errorCount,
"constructWithCopy... ",
"copy not effected... data visible outside");
else
$I = new Matrix($ivals);
else
$errorCount = $this->
try_failure($errorCount,
"identity... ",
"identity Matrix not successfully created");
print "<p>Testing access methods...</p>";
$B = new Matrix($avals);
if($B->getRowDimension() == $rows)
else
$errorCount = $this->
try_failure($errorCount,
"getRowDimension...");
if($B->getColumnDimension() == $cols)
else
$errorCount = $this->
try_failure($errorCount,
"getColumnDimension...");
$barray = $B->getArray();
else
$errorCount = $this->
try_failure($errorCount,
"getArray...");
$bpacked = $B->getColumnPackedCopy();
else
$errorCount = $this->
try_failure($errorCount,
"getColumnPackedCopy...");
$bpacked = $B->getRowPackedCopy();
else
$errorCount = $this->
try_failure($errorCount,
"getRowPackedCopy...");
print "<p>Testing array-like methods...</p>";
print "<p>Testing I/O methods...</p>";
echo "<p>Testing linear algebra methods...<p>";
$A = new Matrix($columnwise, 3);
else
$errorCount = $this->
try_failure($errorCount,
"Transpose check...",
"Matrices are not equal");
else
$errorCount = $this->
try_failure($errorCount,
"Maximum column sum...",
"Incorrect: " . $A->norm1() .
" != " . $columnsummax);
else
$errorCount = $this->
try_failure($errorCount,
"Maximum row sum...",
"Incorrect: " . $A->normInf() .
" != " . $rowsummax );
else
$errorCount = $this->
try_failure($errorCount,
"Frobenius norm...",
"Incorrect:" . $A->normF() .
" != " . sqrt($sumofsquares));
else
$errorCount = $this->
try_failure($errorCount,
"Matrix trace...",
"Incorrect: " . $A->trace() .
" != " . $sumofdiagonals);
$B = $A->getMatrix(0, $A->getRowDimension(), 0, $A->getRowDimension());
if( $B->det() == 0 )
else
$errorCount = $this->
try_failure($errorCount,
"Matrix determinant...",
"Incorrect: " . $B->det() .
" != " . 0);
$A = new Matrix($columnwise,3);
$SQ = new Matrix($square);
else {
$errorCount = $this->
try_failure($errorCount,
"times(Matrix)...",
"Unable to multiply matrices");
$SQ->toHTML();
$AT->toHTML();
}
$A = new Matrix($columnwise, 4);
$QR = $A->qr();
$R = $QR->getR();
$Q = $QR->getQ();
else
$errorCount = $this->
try_failure($errorCount,
"QRDecomposition...",
"incorrect qr decomposition calculation");
$A = new Matrix($columnwise, 4);
$SVD = $A->svd();
$U = $SVD->getU();
$S = $SVD->getS();
$V = $SVD->getV();
if ($this->
checkMatrices($A, $U->times($S->times($V->transpose()))))
$this->
try_success(
"SingularValueDecomposition...",
"");
else
$errorCount = $this->
try_failure($errorCount,
"SingularValueDecomposition...",
"incorrect singular value decomposition calculation");
$n = $A->getColumnDimension();
$A = $A->getMatrix(0,$n-1,0,$n-1);
$A->set(0,0,0.);
$LU = $A->lu();
$L = $LU->getL();
if ( $this->
checkMatrices($A->getMatrix($LU->getPivot(),0,$n-1), $L->times($LU->getU())) )
else
$errorCount = $this->
try_failure($errorCount,
"LUDecomposition...",
"incorrect LU decomposition calculation");
else
$errorCount = $this->
try_failure($errorCount,
"inverse()...",
"incorrect inverse calculation");
$DEF = new Matrix($rankdef);
if($this->
checkScalars($DEF->rank(), min($DEF->getRowDimension(), $DEF->getColumnDimension())-1))
else
$this->
try_failure(
"Rank...",
"incorrect rank calculation");
$B = new Matrix($condmat);
$SVD = $B->svd();
$singularvalues = $SVD->getSingularValues();
if($this->
checkScalars($B->cond(), $singularvalues[0]/$singularvalues[min($B->getRowDimension(), $B->getColumnDimension())-1]))
else
$this->
try_failure(
"Condition number...",
"incorrect condition number calculation");
$SUB = new Matrix($subavals);
$O = new Matrix($SUB->getRowDimension(),1,1.0);
$SOL = new Matrix($sqSolution);
$SQ = $SUB->getMatrix(0,$SUB->getRowDimension()-1,0,$SUB->getRowDimension()-1);
else
$errorCount = $this->
try_failure($errorCount,
"solve()...",
"incorrect lu solve calculation");
$A = new Matrix($pvals);
$Chol = $A->chol();
$L = $Chol->getL();
else
$errorCount = $this->
try_failure($errorCount,
"CholeskyDecomposition...",
"incorrect Cholesky decomposition calculation");
$X = $Chol->solve(Matrix::identity(3,3));
$this->
try_success(
"CholeskyDecomposition solve()...",
"");
else
$errorCount = $this->
try_failure($errorCount,
"CholeskyDecomposition solve()...",
"incorrect Choleskydecomposition solve calculation");
$Eig = $A->eig();
$D = $Eig->getD();
$V = $Eig->getV();
$this->
try_success(
"EigenvalueDecomposition (symmetric)...",
"");
else
$errorCount = $this->
try_failure($errorCount,
"EigenvalueDecomposition (symmetric)...",
"incorrect symmetric Eigenvalue decomposition calculation");
$A = new Matrix($evals);
$Eig = $A->eig();
$D = $Eig->getD();
$V = $Eig->getV();
$this->
try_success(
"EigenvalueDecomposition (nonsymmetric)...",
"");
else
$errorCount = $this->
try_failure($errorCount,
"EigenvalueDecomposition (nonsymmetric)...",
"incorrect nonsymmetric Eigenvalue decomposition calculation");
print("<b>{$errorCount} total errors</b>.");
}