You are here

public function PHPExcel_Shared_JAMA_QRDecomposition::__construct in Loft Data Grids 6.2

Same name and namespace in other branches
  1. 7.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/JAMA/QRDecomposition.php \PHPExcel_Shared_JAMA_QRDecomposition::__construct()

* QR Decomposition computed by Householder reflections. * *

Parameters

matrix $A Rectangular matrix: * @return Structure to access R and the Householder vectors and compute Q.

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/JAMA/QRDecomposition.php, line 54

Class

PHPExcel_Shared_JAMA_QRDecomposition
@package JAMA

Code

public function __construct($A) {
  if ($A instanceof PHPExcel_Shared_JAMA_Matrix) {

    // Initialize.
    $this->QR = $A
      ->getArrayCopy();
    $this->m = $A
      ->getRowDimension();
    $this->n = $A
      ->getColumnDimension();

    // Main loop.
    for ($k = 0; $k < $this->n; ++$k) {

      // Compute 2-norm of k-th column without under/overflow.
      $nrm = 0.0;
      for ($i = $k; $i < $this->m; ++$i) {
        $nrm = hypo($nrm, $this->QR[$i][$k]);
      }
      if ($nrm != 0.0) {

        // Form k-th Householder vector.
        if ($this->QR[$k][$k] < 0) {
          $nrm = -$nrm;
        }
        for ($i = $k; $i < $this->m; ++$i) {
          $this->QR[$i][$k] /= $nrm;
        }
        $this->QR[$k][$k] += 1.0;

        // Apply transformation to remaining columns.
        for ($j = $k + 1; $j < $this->n; ++$j) {
          $s = 0.0;
          for ($i = $k; $i < $this->m; ++$i) {
            $s += $this->QR[$i][$k] * $this->QR[$i][$j];
          }
          $s = -$s / $this->QR[$k][$k];
          for ($i = $k; $i < $this->m; ++$i) {
            $this->QR[$i][$j] += $s * $this->QR[$i][$k];
          }
        }
      }
      $this->Rdiag[$k] = -$nrm;
    }
  }
  else {
    throw new PHPExcel_Calculation_Exception(PHPExcel_Shared_JAMA_Matrix::ArgumentTypeException);
  }
}