stat->setData($times);
$stats = $this->stat->calcFull();
echo '
';
echo 'n: | ' . $stats['count'] . ' |
';
echo 'Mean: | ' . $stats['mean'] . ' |
';
echo 'Min.: | ' . $stats['min'] . ' |
';
echo 'Max.: | ' . $stats['max'] . ' |
';
echo 'σ: | ' . $stats['stdev'] . ' |
';
echo 'Variance: | ' . $stats['variance'] . ' |
';
echo 'Range: | ' . $stats['range'] . ' |
';
echo '
';
return $stats;
} // function displayStats()
function runEig($n = 4, $t = 100) {
$times = array();
for ($i = 0; $i < $t; ++$i) {
$M = Matrix::random($n, $n);
$start_time = $this->microtime_float();
$E = new EigenvalueDecomposition($M);
$stop_time = $this->microtime_float();
$times[] = $stop_time - $start_time;
}
return $times;
} // function runEig()
function runLU($n = 4, $t = 100) {
$times = array();
for ($i = 0; $i < $t; ++$i) {
$M = Matrix::random($n, $n);
$start_time = $this->microtime_float();
$E = new LUDecomposition($M);
$stop_time = $this->microtime_float();
$times[] = $stop_time - $start_time;
}
return $times;
} // function runLU()
function runQR($n = 4, $t = 100) {
$times = array();
for ($i = 0; $i < $t; ++$i) {
$M = Matrix::random($n, $n);
$start_time = $this->microtime_float();
$E = new QRDecomposition($M);
$stop_time = $this->microtime_float();
$times[] = $stop_time - $start_time;
}
return $times;
} // function runQR()
function runCholesky($n = 4, $t = 100) {
$times = array();
for ($i = 0; $i < $t; ++$i) {
$M = Matrix::random($n, $n);
$start_time = $this->microtime_float();
$E = new CholeskyDecomposition($M);
$stop_time = $this->microtime_float();
$times[] = $stop_time - $start_time;
}
return $times;
} // function runCholesky()
function runSVD($n = 4, $t = 100) {
$times = array();
for ($i = 0; $i < $t; ++$i) {
$M = Matrix::random($n, $n);
$start_time = $this->microtime_float();
$E = new SingularValueDecomposition($M);
$stop_time = $this->microtime_float();
$times[] = $stop_time - $start_time;
}
return $times;
} // function runSVD()
function run() {
$n = 8;
$t = 16;
$sum = 0;
echo "Cholesky decomposition: $t random {$n}x{$n} matrices
";
$r = $this->displayStats($this->runCholesky($n, $t));
$sum += $r['mean'] * $n;
echo '
';
echo "Eigenvalue decomposition: $t random {$n}x{$n} matrices
";
$r = $this->displayStats($this->runEig($n, $t));
$sum += $r['mean'] * $n;
echo '
';
echo "LU decomposition: $t random {$n}x{$n} matrices
";
$r = $this->displayStats($this->runLU($n, $t));
$sum += $r['mean'] * $n;
echo '
';
echo "QR decomposition: $t random {$n}x{$n} matrices
";
$r = $this->displayStats($this->runQR($n, $t));
$sum += $r['mean'] * $n;
echo '
';
echo "Singular Value decomposition: $t random {$n}x{$n} matrices
";
$r = $this->displayStats($this->runSVD($n, $t));
$sum += $r['mean'] * $n;
return $sum;
} // function run()
public function __construct() {
$this->stat = new Base();
} // function Benchmark()
} // class Benchmark (end MagicSquareExample)
$benchmark = new Benchmark();
switch($_REQUEST['decomposition']) {
case 'cholesky':
$m = array();
for ($i = 2; $i <= 8; $i *= 2) {
$t = 32 / $i;
echo "Cholesky decomposition: $t random {$i}x{$i} matrices
";
$s = $benchmark->displayStats($benchmark->runCholesky($i, $t));
$m[$i] = $s['mean'];
echo "
";
}
echo '';
foreach($m as $x => $y) {
echo "$x\t" . 1000*$y . "\n";
}
echo '
';
break;
case 'eigenvalue':
$m = array();
for ($i = 2; $i <= 8; $i *= 2) {
$t = 32 / $i;
echo "Eigenvalue decomposition: $t random {$i}x{$i} matrices
";
$s = $benchmark->displayStats($benchmark->runEig($i, $t));
$m[$i] = $s['mean'];
echo "
";
}
echo '';
foreach($m as $x => $y) {
echo "$x\t" . 1000*$y . "\n";
}
echo '
';
break;
case 'lu':
$m = array();
for ($i = 2; $i <= 8; $i *= 2) {
$t = 32 / $i;
echo "LU decomposition: $t random {$i}x{$i} matrices
";
$s = $benchmark->displayStats($benchmark->runLU($i, $t));
$m[$i] = $s['mean'];
echo "
";
}
echo '';
foreach($m as $x => $y) {
echo "$x\t" . 1000*$y . "\n";
}
echo '
';
break;
case 'qr':
$m = array();
for ($i = 2; $i <= 8; $i *= 2) {
$t = 32 / $i;
echo "QR decomposition: $t random {$i}x{$i} matrices
";
$s = $benchmark->displayStats($benchmark->runQR($i, $t));
$m[$i] = $s['mean'];
echo "
";
}
echo '';
foreach($m as $x => $y) {
echo "$x\t" . 1000*$y . "\n";
}
echo '
';
break;
case 'svd':
$m = array();
for($i = 2; $i <= 8; $i *= 2) {
$t = 32 / $i;
echo "Singular value decomposition: $t random {$i}x{$i} matrices
";
$s = $benchmark->displayStats($benchmark->runSVD($i, $t));
$m[$i] = $s['mean'];
echo "
";
}
echo '';
foreach($m as $x => $y) {
echo "$x\t" . 1000*$y . "\n";
}
echo '
';
break;
case 'all':
$s = $benchmark->run();
print("
Total: {$s}s
");
break;
default:
?>