Overview

Packages

  • JAMA
  • None
  • PHP
  • PHPExcel
    • CachedObjectStorage
    • Calculation
    • Cell
    • Chart
      • Renderer
    • Reader
      • Excel2007
      • Excel5
    • RichText
    • Settings
    • Shared
      • Escher
      • OLE
      • Trend
      • ZipArchive
    • Style
    • Worksheet
      • Drawing
    • Writer
      • 2007
      • CSV
      • Excel2007
      • Excel5
      • HTML
      • PDF

Classes

  • CholeskyDecomposition
  • Dao
  • DateTime
  • DateTimeZone
  • DOMNode
  • EigenvalueDecomposition
  • Elemento
  • Historial
  • Irradiacion
  • Latitud
  • MotorPhp
  • Panel
  • PclZip
  • Periodo
  • PHPExcel
  • PHPExcel_Autoloader
  • PHPExcel_Best_Fit
  • PHPExcel_CachedObjectStorage_APC
  • PHPExcel_CachedObjectStorage_CacheBase
  • PHPExcel_CachedObjectStorage_DiscISAM
  • PHPExcel_CachedObjectStorage_Igbinary
  • PHPExcel_CachedObjectStorage_Memcache
  • PHPExcel_CachedObjectStorage_Memory
  • PHPExcel_CachedObjectStorage_MemoryGZip
  • PHPExcel_CachedObjectStorage_MemorySerialized
  • PHPExcel_CachedObjectStorage_PHPTemp
  • PHPExcel_CachedObjectStorage_SQLite
  • PHPExcel_CachedObjectStorage_SQLite3
  • PHPExcel_CachedObjectStorage_Wincache
  • PHPExcel_CachedObjectStorageFactory
  • PHPExcel_CalcEngine_CyclicReferenceStack
  • PHPExcel_CalcEngine_Logger
  • PHPExcel_Calculation
  • PHPExcel_Calculation_Database
  • PHPExcel_Calculation_DateTime
  • PHPExcel_Calculation_Engineering
  • PHPExcel_Calculation_ExceptionHandler
  • PHPExcel_Calculation_Financial
  • PHPExcel_Calculation_FormulaParser
  • PHPExcel_Calculation_FormulaToken
  • PHPExcel_Calculation_Function
  • PHPExcel_Calculation_Functions
  • PHPExcel_Calculation_Logical
  • PHPExcel_Calculation_LookupRef
  • PHPExcel_Calculation_MathTrig
  • PHPExcel_Calculation_Statistical
  • PHPExcel_Calculation_TextData
  • PHPExcel_Calculation_Token_Stack
  • PHPExcel_Cell
  • PHPExcel_Cell_AdvancedValueBinder
  • PHPExcel_Cell_DataType
  • PHPExcel_Cell_DataValidation
  • PHPExcel_Cell_DefaultValueBinder
  • PHPExcel_Cell_Hyperlink
  • PHPExcel_Chart
  • PHPExcel_Chart_DataSeries
  • PHPExcel_Chart_DataSeriesValues
  • PHPExcel_Chart_Layout
  • PHPExcel_Chart_Legend
  • PHPExcel_Chart_PlotArea
  • PHPExcel_Chart_Renderer_jpgraph
  • PHPExcel_Chart_Title
  • PHPExcel_Comment
  • PHPExcel_DocumentProperties
  • PHPExcel_DocumentSecurity
  • PHPExcel_Exponential_Best_Fit
  • PHPExcel_HashTable
  • PHPExcel_IOFactory
  • PHPExcel_Linear_Best_Fit
  • PHPExcel_Logarithmic_Best_Fit
  • PHPExcel_NamedRange
  • PHPExcel_Polynomial_Best_Fit
  • PHPExcel_Power_Best_Fit
  • PHPExcel_Reader_Abstract
  • PHPExcel_Reader_CSV
  • PHPExcel_Reader_DefaultReadFilter
  • PHPExcel_Reader_Excel2003XML
  • PHPExcel_Reader_Excel2007
  • PHPExcel_Reader_Excel2007_Chart
  • PHPExcel_Reader_Excel2007_Theme
  • PHPExcel_Reader_Excel5
  • PHPExcel_Reader_Excel5_Escher
  • PHPExcel_Reader_Excel5_MD5
  • PHPExcel_Reader_Excel5_RC4
  • PHPExcel_Reader_Gnumeric
  • PHPExcel_Reader_HTML
  • PHPExcel_Reader_OOCalc
  • PHPExcel_Reader_SYLK
  • PHPExcel_ReferenceHelper
  • PHPExcel_RichText
  • PHPExcel_RichText_Run
  • PHPExcel_RichText_TextElement
  • PHPExcel_Settings
  • PHPExcel_Shared_CodePage
  • PHPExcel_Shared_Date
  • PHPExcel_Shared_Drawing
  • PHPExcel_Shared_Escher
  • PHPExcel_Shared_Escher_DgContainer
  • PHPExcel_Shared_Escher_DgContainer_SpgrContainer
  • PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
  • PHPExcel_Shared_Escher_DggContainer
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip
  • PHPExcel_Shared_Excel5
  • PHPExcel_Shared_File
  • PHPExcel_Shared_Font
  • PHPExcel_Shared_JAMA_LUDecomposition
  • PHPExcel_Shared_JAMA_Matrix
  • PHPExcel_Shared_JAMA_QRDecomposition
  • PHPExcel_Shared_OLE
  • PHPExcel_Shared_OLE_ChainedBlockStream
  • PHPExcel_Shared_OLE_PPS
  • PHPExcel_Shared_OLE_PPS_File
  • PHPExcel_Shared_OLE_PPS_Root
  • PHPExcel_Shared_OLERead
  • PHPExcel_Shared_PasswordHasher
  • PHPExcel_Shared_String
  • PHPExcel_Shared_TimeZone
  • PHPExcel_Shared_XMLWriter
  • PHPExcel_Shared_ZipArchive
  • PHPExcel_Shared_ZipStreamWrapper
  • PHPExcel_Style
  • PHPExcel_Style_Alignment
  • PHPExcel_Style_Border
  • PHPExcel_Style_Borders
  • PHPExcel_Style_Color
  • PHPExcel_Style_Conditional
  • PHPExcel_Style_Fill
  • PHPExcel_Style_Font
  • PHPExcel_Style_NumberFormat
  • PHPExcel_Style_Protection
  • PHPExcel_Style_Supervisor
  • PHPExcel_Worksheet
  • PHPExcel_Worksheet_AutoFilter
  • PHPExcel_Worksheet_AutoFilter_Column
  • PHPExcel_Worksheet_AutoFilter_Column_Rule
  • PHPExcel_Worksheet_BaseDrawing
  • PHPExcel_Worksheet_CellIterator
  • PHPExcel_Worksheet_ColumnDimension
  • PHPExcel_Worksheet_Drawing
  • PHPExcel_Worksheet_Drawing_Shadow
  • PHPExcel_Worksheet_HeaderFooter
  • PHPExcel_Worksheet_HeaderFooterDrawing
  • PHPExcel_Worksheet_MemoryDrawing
  • PHPExcel_Worksheet_PageMargins
  • PHPExcel_Worksheet_PageSetup
  • PHPExcel_Worksheet_Protection
  • PHPExcel_Worksheet_Row
  • PHPExcel_Worksheet_RowDimension
  • PHPExcel_Worksheet_RowIterator
  • PHPExcel_Worksheet_SheetView
  • PHPExcel_WorksheetIterator
  • PHPExcel_Writer_Abstract
  • PHPExcel_Writer_CSV
  • PHPExcel_Writer_Excel2007
  • PHPExcel_Writer_Excel2007_Chart
  • PHPExcel_Writer_Excel2007_Comments
  • PHPExcel_Writer_Excel2007_ContentTypes
  • PHPExcel_Writer_Excel2007_DocProps
  • PHPExcel_Writer_Excel2007_Drawing
  • PHPExcel_Writer_Excel2007_Rels
  • PHPExcel_Writer_Excel2007_RelsRibbon
  • PHPExcel_Writer_Excel2007_RelsVBA
  • PHPExcel_Writer_Excel2007_StringTable
  • PHPExcel_Writer_Excel2007_Style
  • PHPExcel_Writer_Excel2007_Theme
  • PHPExcel_Writer_Excel2007_Workbook
  • PHPExcel_Writer_Excel2007_Worksheet
  • PHPExcel_Writer_Excel2007_WriterPart
  • PHPExcel_Writer_Excel5
  • PHPExcel_Writer_Excel5_BIFFwriter
  • PHPExcel_Writer_Excel5_Escher
  • PHPExcel_Writer_Excel5_Font
  • PHPExcel_Writer_Excel5_Parser
  • PHPExcel_Writer_Excel5_Workbook
  • PHPExcel_Writer_Excel5_Worksheet
  • PHPExcel_Writer_Excel5_Xf
  • PHPExcel_Writer_HTML
  • PHPExcel_Writer_PDF
  • PHPExcel_Writer_PDF_Core
  • PHPExcel_Writer_PDF_DomPDF
  • PHPExcel_Writer_PDF_mPDF
  • PHPExcel_Writer_PDF_tcPDF
  • Provincia
  • Radiacion
  • SingularValueDecomposition
  • Sistema
  • trendClass
  • xajax
  • xajaxArgumentManager
  • xajaxCallableObject
  • xajaxCallableObjectPlugin
  • xajaxControl
  • xajaxControlContainer
  • xajaxCustomRequest
  • xajaxCustomResponse
  • xajaxEvent
  • xajaxEventPlugin
  • xajaxFunctionPlugin
  • xajaxIncludeClientScriptPlugin
  • xajaxLanguageManager
  • xajaxPlugin
  • xajaxPluginManager
  • xajaxRequest
  • xajaxRequestPlugin
  • xajaxResponse
  • xajaxResponseManager
  • xajaxResponsePlugin
  • xajaxScriptPlugin
  • xajaxUserFunction
  • XMLWriter

Interfaces

  • DateTimeInterface
  • Iterator
  • PHPExcel_CachedObjectStorage_ICache
  • PHPExcel_Cell_IValueBinder
  • PHPExcel_IComparable
  • PHPExcel_Reader_IReader
  • PHPExcel_Reader_IReadFilter
  • PHPExcel_RichText_ITextElement
  • PHPExcel_Writer_IWriter
  • Throwable
  • Traversable

Exceptions

  • Exception
  • PHPExcel_Calculation_Exception
  • PHPExcel_Chart_Exception
  • PHPExcel_Exception
  • PHPExcel_Reader_Exception
  • PHPExcel_Writer_Exception

Functions

  • acosh
  • agregar_elemento
  • asinh
  • atanh
  • borrar_elementos
  • borrar_gdm_ab
  • borrar_irradiacion
  • borrar_latitud
  • borrar_panel
  • borrar_periodo
  • borrar_pmp_min_pmp_max
  • borrar_radiacion
  • borrar_resumen
  • borrar_sistema
  • borrar_sombra
  • gdm_ab
  • grabar_resumen
  • historial
  • hypo
  • irradiacion
  • JAMAError
  • latitud
  • limpiar_historial
  • login
  • mb_str_replace
  • mostrar_energia_total_ch
  • mostrar_panel_md_th
  • mostrar_panel_th
  • mostrar_radiacion_md_th
  • mostrar_radiacion_th
  • mostrar_resumen_th
  • panel
  • PclZipUtilCopyBlock
  • PclZipUtilOptionText
  • PclZipUtilPathInclusion
  • PclZipUtilPathReduction
  • PclZipUtilRename
  • PclZipUtilTranslateWinPath
  • periodo
  • pmp_min_pmp_max
  • preparar_panel
  • preparar_radiacion
  • preparar_radiacion_media
  • radiacion
  • resumen
  • sistema
  • sombra
  • xajaxCompressFile
  • xajaxErrorHandler
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  • Download
   1: <?php
   2: /**
   3:  * @package JAMA
   4:  */
   5: 
   6: /** PHPExcel root directory */
   7: if (!defined('PHPEXCEL_ROOT')) {
   8:     /**
   9:      * @ignore
  10:      */
  11:     define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../../');
  12:     require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
  13: }
  14: 
  15: 
  16: /*
  17:  *  Matrix class
  18:  *
  19:  *  @author Paul Meagher
  20:  *  @author Michael Bommarito
  21:  *  @author Lukasz Karapuda
  22:  *  @author Bartek Matosiuk
  23:  *  @version 1.8
  24:  *  @license PHP v3.0
  25:  *  @see http://math.nist.gov/javanumerics/jama/
  26:  */
  27: class PHPExcel_Shared_JAMA_Matrix {
  28: 
  29: 
  30:     const PolymorphicArgumentException  = "Invalid argument pattern for polymorphic function.";
  31:     const ArgumentTypeException         = "Invalid argument type.";
  32:     const ArgumentBoundsException       = "Invalid argument range.";
  33:     const MatrixDimensionException      = "Matrix dimensions are not equal.";
  34:     const ArrayLengthException          = "Array length must be a multiple of m.";
  35: 
  36:     /**
  37:      *  Matrix storage
  38:      *
  39:      *  @var array
  40:      *  @access public
  41:      */
  42:     public $A = array();
  43: 
  44:     /**
  45:      *  Matrix row dimension
  46:      *
  47:      *  @var int
  48:      *  @access private
  49:      */
  50:     private $m;
  51: 
  52:     /**
  53:      *  Matrix column dimension
  54:      *
  55:      *  @var int
  56:      *  @access private
  57:      */
  58:     private $n;
  59: 
  60: 
  61:     /**
  62:      *  Polymorphic constructor
  63:      *
  64:      *  As PHP has no support for polymorphic constructors, we hack our own sort of polymorphism using func_num_args, func_get_arg, and gettype. In essence, we're just implementing a simple RTTI filter and calling the appropriate constructor.
  65:      */
  66:     public function __construct() {
  67:         if (func_num_args() > 0) {
  68:             $args = func_get_args();
  69:             $match = implode(",", array_map('gettype', $args));
  70: 
  71:             switch($match) {
  72:                 //Rectangular matrix - m x n initialized from 2D array
  73:                 case 'array':
  74:                         $this->m = count($args[0]);
  75:                         $this->n = count($args[0][0]);
  76:                         $this->A = $args[0];
  77:                         break;
  78:                 //Square matrix - n x n
  79:                 case 'integer':
  80:                         $this->m = $args[0];
  81:                         $this->n = $args[0];
  82:                         $this->A = array_fill(0, $this->m, array_fill(0, $this->n, 0));
  83:                         break;
  84:                 //Rectangular matrix - m x n
  85:                 case 'integer,integer':
  86:                         $this->m = $args[0];
  87:                         $this->n = $args[1];
  88:                         $this->A = array_fill(0, $this->m, array_fill(0, $this->n, 0));
  89:                         break;
  90:                 //Rectangular matrix - m x n initialized from packed array
  91:                 case 'array,integer':
  92:                         $this->m = $args[1];
  93:                         if ($this->m != 0) {
  94:                             $this->n = count($args[0]) / $this->m;
  95:                         } else {
  96:                             $this->n = 0;
  97:                         }
  98:                         if (($this->m * $this->n) == count($args[0])) {
  99:                             for($i = 0; $i < $this->m; ++$i) {
 100:                                 for($j = 0; $j < $this->n; ++$j) {
 101:                                     $this->A[$i][$j] = $args[0][$i + $j * $this->m];
 102:                                 }
 103:                             }
 104:                         } else {
 105:                             throw new PHPExcel_Calculation_Exception(self::ArrayLengthException);
 106:                         }
 107:                         break;
 108:                 default:
 109:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 110:                         break;
 111:             }
 112:         } else {
 113:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 114:         }
 115:     }   //  function __construct()
 116: 
 117: 
 118:     /**
 119:      *  getArray
 120:      *
 121:      *  @return array Matrix array
 122:      */
 123:     public function getArray() {
 124:         return $this->A;
 125:     }   //  function getArray()
 126: 
 127: 
 128:     /**
 129:      *  getRowDimension
 130:      *
 131:      *  @return int Row dimension
 132:      */
 133:     public function getRowDimension() {
 134:         return $this->m;
 135:     }   //  function getRowDimension()
 136: 
 137: 
 138:     /**
 139:      *  getColumnDimension
 140:      *
 141:      *  @return int Column dimension
 142:      */
 143:     public function getColumnDimension() {
 144:         return $this->n;
 145:     }   //  function getColumnDimension()
 146: 
 147: 
 148:     /**
 149:      *  get
 150:      *
 151:      *  Get the i,j-th element of the matrix.
 152:      *  @param int $i Row position
 153:      *  @param int $j Column position
 154:      *  @return mixed Element (int/float/double)
 155:      */
 156:     public function get($i = null, $j = null) {
 157:         return $this->A[$i][$j];
 158:     }   //  function get()
 159: 
 160: 
 161:     /**
 162:      *  getMatrix
 163:      *
 164:      *  Get a submatrix
 165:      *  @param int $i0 Initial row index
 166:      *  @param int $iF Final row index
 167:      *  @param int $j0 Initial column index
 168:      *  @param int $jF Final column index
 169:      *  @return Matrix Submatrix
 170:      */
 171:     public function getMatrix() {
 172:         if (func_num_args() > 0) {
 173:             $args = func_get_args();
 174:             $match = implode(",", array_map('gettype', $args));
 175: 
 176:             switch($match) {
 177:                 //A($i0...; $j0...)
 178:                 case 'integer,integer':
 179:                         list($i0, $j0) = $args;
 180:                         if ($i0 >= 0) { $m = $this->m - $i0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 181:                         if ($j0 >= 0) { $n = $this->n - $j0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 182:                         $R = new PHPExcel_Shared_JAMA_Matrix($m, $n);
 183:                         for($i = $i0; $i < $this->m; ++$i) {
 184:                             for($j = $j0; $j < $this->n; ++$j) {
 185:                                 $R->set($i, $j, $this->A[$i][$j]);
 186:                             }
 187:                         }
 188:                         return $R;
 189:                         break;
 190:                 //A($i0...$iF; $j0...$jF)
 191:                 case 'integer,integer,integer,integer':
 192:                         list($i0, $iF, $j0, $jF) = $args;
 193:                         if (($iF > $i0) && ($this->m >= $iF) && ($i0 >= 0)) { $m = $iF - $i0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 194:                         if (($jF > $j0) && ($this->n >= $jF) && ($j0 >= 0)) { $n = $jF - $j0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 195:                         $R = new PHPExcel_Shared_JAMA_Matrix($m+1, $n+1);
 196:                         for($i = $i0; $i <= $iF; ++$i) {
 197:                             for($j = $j0; $j <= $jF; ++$j) {
 198:                                 $R->set($i - $i0, $j - $j0, $this->A[$i][$j]);
 199:                             }
 200:                         }
 201:                         return $R;
 202:                         break;
 203:                 //$R = array of row indices; $C = array of column indices
 204:                 case 'array,array':
 205:                         list($RL, $CL) = $args;
 206:                         if (count($RL) > 0) { $m = count($RL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 207:                         if (count($CL) > 0) { $n = count($CL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 208:                         $R = new PHPExcel_Shared_JAMA_Matrix($m, $n);
 209:                         for($i = 0; $i < $m; ++$i) {
 210:                             for($j = 0; $j < $n; ++$j) {
 211:                                 $R->set($i - $i0, $j - $j0, $this->A[$RL[$i]][$CL[$j]]);
 212:                             }
 213:                         }
 214:                         return $R;
 215:                         break;
 216:                 //$RL = array of row indices; $CL = array of column indices
 217:                 case 'array,array':
 218:                         list($RL, $CL) = $args;
 219:                         if (count($RL) > 0) { $m = count($RL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 220:                         if (count($CL) > 0) { $n = count($CL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 221:                         $R = new PHPExcel_Shared_JAMA_Matrix($m, $n);
 222:                         for($i = 0; $i < $m; ++$i) {
 223:                             for($j = 0; $j < $n; ++$j) {
 224:                                 $R->set($i, $j, $this->A[$RL[$i]][$CL[$j]]);
 225:                             }
 226:                         }
 227:                         return $R;
 228:                         break;
 229:                 //A($i0...$iF); $CL = array of column indices
 230:                 case 'integer,integer,array':
 231:                         list($i0, $iF, $CL) = $args;
 232:                         if (($iF > $i0) && ($this->m >= $iF) && ($i0 >= 0)) { $m = $iF - $i0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 233:                         if (count($CL) > 0) { $n = count($CL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 234:                         $R = new PHPExcel_Shared_JAMA_Matrix($m, $n);
 235:                         for($i = $i0; $i < $iF; ++$i) {
 236:                             for($j = 0; $j < $n; ++$j) {
 237:                                 $R->set($i - $i0, $j, $this->A[$RL[$i]][$j]);
 238:                             }
 239:                         }
 240:                         return $R;
 241:                         break;
 242:                 //$RL = array of row indices
 243:                 case 'array,integer,integer':
 244:                         list($RL, $j0, $jF) = $args;
 245:                         if (count($RL) > 0) { $m = count($RL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 246:                         if (($jF >= $j0) && ($this->n >= $jF) && ($j0 >= 0)) { $n = $jF - $j0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); }
 247:                         $R = new PHPExcel_Shared_JAMA_Matrix($m, $n+1);
 248:                         for($i = 0; $i < $m; ++$i) {
 249:                             for($j = $j0; $j <= $jF; ++$j) {
 250:                                 $R->set($i, $j - $j0, $this->A[$RL[$i]][$j]);
 251:                             }
 252:                         }
 253:                         return $R;
 254:                         break;
 255:                 default:
 256:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 257:                         break;
 258:             }
 259:         } else {
 260:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 261:         }
 262:     }   //  function getMatrix()
 263: 
 264: 
 265:     /**
 266:      *  checkMatrixDimensions
 267:      *
 268:      *  Is matrix B the same size?
 269:      *  @param Matrix $B Matrix B
 270:      *  @return boolean
 271:      */
 272:     public function checkMatrixDimensions($B = null) {
 273:         if ($B instanceof PHPExcel_Shared_JAMA_Matrix) {
 274:             if (($this->m == $B->getRowDimension()) && ($this->n == $B->getColumnDimension())) {
 275:                 return true;
 276:             } else {
 277:                 throw new PHPExcel_Calculation_Exception(self::MatrixDimensionException);
 278:             }
 279:         } else {
 280:             throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException);
 281:         }
 282:     }   //  function checkMatrixDimensions()
 283: 
 284: 
 285: 
 286:     /**
 287:      *  set
 288:      *
 289:      *  Set the i,j-th element of the matrix.
 290:      *  @param int $i Row position
 291:      *  @param int $j Column position
 292:      *  @param mixed $c Int/float/double value
 293:      *  @return mixed Element (int/float/double)
 294:      */
 295:     public function set($i = null, $j = null, $c = null) {
 296:         // Optimized set version just has this
 297:         $this->A[$i][$j] = $c;
 298:     }   //  function set()
 299: 
 300: 
 301:     /**
 302:      *  identity
 303:      *
 304:      *  Generate an identity matrix.
 305:      *  @param int $m Row dimension
 306:      *  @param int $n Column dimension
 307:      *  @return Matrix Identity matrix
 308:      */
 309:     public function identity($m = null, $n = null) {
 310:         return $this->diagonal($m, $n, 1);
 311:     }   //  function identity()
 312: 
 313: 
 314:     /**
 315:      *  diagonal
 316:      *
 317:      *  Generate a diagonal matrix
 318:      *  @param int $m Row dimension
 319:      *  @param int $n Column dimension
 320:      *  @param mixed $c Diagonal value
 321:      *  @return Matrix Diagonal matrix
 322:      */
 323:     public function diagonal($m = null, $n = null, $c = 1) {
 324:         $R = new PHPExcel_Shared_JAMA_Matrix($m, $n);
 325:         for($i = 0; $i < $m; ++$i) {
 326:             $R->set($i, $i, $c);
 327:         }
 328:         return $R;
 329:     }   //  function diagonal()
 330: 
 331: 
 332:     /**
 333:      *  getMatrixByRow
 334:      *
 335:      *  Get a submatrix by row index/range
 336:      *  @param int $i0 Initial row index
 337:      *  @param int $iF Final row index
 338:      *  @return Matrix Submatrix
 339:      */
 340:     public function getMatrixByRow($i0 = null, $iF = null) {
 341:         if (is_int($i0)) {
 342:             if (is_int($iF)) {
 343:                 return $this->getMatrix($i0, 0, $iF + 1, $this->n);
 344:             } else {
 345:                 return $this->getMatrix($i0, 0, $i0 + 1, $this->n);
 346:             }
 347:         } else {
 348:             throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException);
 349:         }
 350:     }   //  function getMatrixByRow()
 351: 
 352: 
 353:     /**
 354:      *  getMatrixByCol
 355:      *
 356:      *  Get a submatrix by column index/range
 357:      *  @param int $i0 Initial column index
 358:      *  @param int $iF Final column index
 359:      *  @return Matrix Submatrix
 360:      */
 361:     public function getMatrixByCol($j0 = null, $jF = null) {
 362:         if (is_int($j0)) {
 363:             if (is_int($jF)) {
 364:                 return $this->getMatrix(0, $j0, $this->m, $jF + 1);
 365:             } else {
 366:                 return $this->getMatrix(0, $j0, $this->m, $j0 + 1);
 367:             }
 368:         } else {
 369:             throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException);
 370:         }
 371:     }   //  function getMatrixByCol()
 372: 
 373: 
 374:     /**
 375:      *  transpose
 376:      *
 377:      *  Tranpose matrix
 378:      *  @return Matrix Transposed matrix
 379:      */
 380:     public function transpose() {
 381:         $R = new PHPExcel_Shared_JAMA_Matrix($this->n, $this->m);
 382:         for($i = 0; $i < $this->m; ++$i) {
 383:             for($j = 0; $j < $this->n; ++$j) {
 384:                 $R->set($j, $i, $this->A[$i][$j]);
 385:             }
 386:         }
 387:         return $R;
 388:     }   //  function transpose()
 389: 
 390: 
 391:     /**
 392:      *  trace
 393:      *
 394:      *  Sum of diagonal elements
 395:      *  @return float Sum of diagonal elements
 396:      */
 397:     public function trace() {
 398:         $s = 0;
 399:         $n = min($this->m, $this->n);
 400:         for($i = 0; $i < $n; ++$i) {
 401:             $s += $this->A[$i][$i];
 402:         }
 403:         return $s;
 404:     }   //  function trace()
 405: 
 406: 
 407:     /**
 408:      *  uminus
 409:      *
 410:      *  Unary minus matrix -A
 411:      *  @return Matrix Unary minus matrix
 412:      */
 413:     public function uminus() {
 414:     }   //  function uminus()
 415: 
 416: 
 417:     /**
 418:      *  plus
 419:      *
 420:      *  A + B
 421:      *  @param mixed $B Matrix/Array
 422:      *  @return Matrix Sum
 423:      */
 424:     public function plus() {
 425:         if (func_num_args() > 0) {
 426:             $args = func_get_args();
 427:             $match = implode(",", array_map('gettype', $args));
 428: 
 429:             switch($match) {
 430:                 case 'object':
 431:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 432:                         break;
 433:                 case 'array':
 434:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 435:                         break;
 436:                 default:
 437:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 438:                         break;
 439:             }
 440:             $this->checkMatrixDimensions($M);
 441:             for($i = 0; $i < $this->m; ++$i) {
 442:                 for($j = 0; $j < $this->n; ++$j) {
 443:                     $M->set($i, $j, $M->get($i, $j) + $this->A[$i][$j]);
 444:                 }
 445:             }
 446:             return $M;
 447:         } else {
 448:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 449:         }
 450:     }   //  function plus()
 451: 
 452: 
 453:     /**
 454:      *  plusEquals
 455:      *
 456:      *  A = A + B
 457:      *  @param mixed $B Matrix/Array
 458:      *  @return Matrix Sum
 459:      */
 460:     public function plusEquals() {
 461:         if (func_num_args() > 0) {
 462:             $args = func_get_args();
 463:             $match = implode(",", array_map('gettype', $args));
 464: 
 465:             switch($match) {
 466:                 case 'object':
 467:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 468:                         break;
 469:                 case 'array':
 470:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 471:                         break;
 472:                 default:
 473:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 474:                         break;
 475:             }
 476:             $this->checkMatrixDimensions($M);
 477:             for($i = 0; $i < $this->m; ++$i) {
 478:                 for($j = 0; $j < $this->n; ++$j) {
 479:                     $validValues = True;
 480:                     $value = $M->get($i, $j);
 481:                     if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) {
 482:                         $this->A[$i][$j] = trim($this->A[$i][$j],'"');
 483:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]);
 484:                     }
 485:                     if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) {
 486:                         $value = trim($value,'"');
 487:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value);
 488:                     }
 489:                     if ($validValues) {
 490:                         $this->A[$i][$j] += $value;
 491:                     } else {
 492:                         $this->A[$i][$j] = PHPExcel_Calculation_Functions::NaN();
 493:                     }
 494:                 }
 495:             }
 496:             return $this;
 497:         } else {
 498:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 499:         }
 500:     }   //  function plusEquals()
 501: 
 502: 
 503:     /**
 504:      *  minus
 505:      *
 506:      *  A - B
 507:      *  @param mixed $B Matrix/Array
 508:      *  @return Matrix Sum
 509:      */
 510:     public function minus() {
 511:         if (func_num_args() > 0) {
 512:             $args = func_get_args();
 513:             $match = implode(",", array_map('gettype', $args));
 514: 
 515:             switch($match) {
 516:                 case 'object':
 517:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 518:                         break;
 519:                 case 'array':
 520:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 521:                         break;
 522:                 default:
 523:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 524:                         break;
 525:             }
 526:             $this->checkMatrixDimensions($M);
 527:             for($i = 0; $i < $this->m; ++$i) {
 528:                 for($j = 0; $j < $this->n; ++$j) {
 529:                     $M->set($i, $j, $M->get($i, $j) - $this->A[$i][$j]);
 530:                 }
 531:             }
 532:             return $M;
 533:         } else {
 534:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 535:         }
 536:     }   //  function minus()
 537: 
 538: 
 539:     /**
 540:      *  minusEquals
 541:      *
 542:      *  A = A - B
 543:      *  @param mixed $B Matrix/Array
 544:      *  @return Matrix Sum
 545:      */
 546:     public function minusEquals() {
 547:         if (func_num_args() > 0) {
 548:             $args = func_get_args();
 549:             $match = implode(",", array_map('gettype', $args));
 550: 
 551:             switch($match) {
 552:                 case 'object':
 553:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 554:                         break;
 555:                 case 'array':
 556:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 557:                         break;
 558:                 default:
 559:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 560:                         break;
 561:             }
 562:             $this->checkMatrixDimensions($M);
 563:             for($i = 0; $i < $this->m; ++$i) {
 564:                 for($j = 0; $j < $this->n; ++$j) {
 565:                     $validValues = True;
 566:                     $value = $M->get($i, $j);
 567:                     if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) {
 568:                         $this->A[$i][$j] = trim($this->A[$i][$j],'"');
 569:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]);
 570:                     }
 571:                     if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) {
 572:                         $value = trim($value,'"');
 573:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value);
 574:                     }
 575:                     if ($validValues) {
 576:                         $this->A[$i][$j] -= $value;
 577:                     } else {
 578:                         $this->A[$i][$j] = PHPExcel_Calculation_Functions::NaN();
 579:                     }
 580:                 }
 581:             }
 582:             return $this;
 583:         } else {
 584:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 585:         }
 586:     }   //  function minusEquals()
 587: 
 588: 
 589:     /**
 590:      *  arrayTimes
 591:      *
 592:      *  Element-by-element multiplication
 593:      *  Cij = Aij * Bij
 594:      *  @param mixed $B Matrix/Array
 595:      *  @return Matrix Matrix Cij
 596:      */
 597:     public function arrayTimes() {
 598:         if (func_num_args() > 0) {
 599:             $args = func_get_args();
 600:             $match = implode(",", array_map('gettype', $args));
 601: 
 602:             switch($match) {
 603:                 case 'object':
 604:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 605:                         break;
 606:                 case 'array':
 607:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 608:                         break;
 609:                 default:
 610:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 611:                         break;
 612:             }
 613:             $this->checkMatrixDimensions($M);
 614:             for($i = 0; $i < $this->m; ++$i) {
 615:                 for($j = 0; $j < $this->n; ++$j) {
 616:                     $M->set($i, $j, $M->get($i, $j) * $this->A[$i][$j]);
 617:                 }
 618:             }
 619:             return $M;
 620:         } else {
 621:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 622:         }
 623:     }   //  function arrayTimes()
 624: 
 625: 
 626:     /**
 627:      *  arrayTimesEquals
 628:      *
 629:      *  Element-by-element multiplication
 630:      *  Aij = Aij * Bij
 631:      *  @param mixed $B Matrix/Array
 632:      *  @return Matrix Matrix Aij
 633:      */
 634:     public function arrayTimesEquals() {
 635:         if (func_num_args() > 0) {
 636:             $args = func_get_args();
 637:             $match = implode(",", array_map('gettype', $args));
 638: 
 639:             switch($match) {
 640:                 case 'object':
 641:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 642:                         break;
 643:                 case 'array':
 644:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 645:                         break;
 646:                 default:
 647:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 648:                         break;
 649:             }
 650:             $this->checkMatrixDimensions($M);
 651:             for($i = 0; $i < $this->m; ++$i) {
 652:                 for($j = 0; $j < $this->n; ++$j) {
 653:                     $validValues = True;
 654:                     $value = $M->get($i, $j);
 655:                     if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) {
 656:                         $this->A[$i][$j] = trim($this->A[$i][$j],'"');
 657:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]);
 658:                     }
 659:                     if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) {
 660:                         $value = trim($value,'"');
 661:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value);
 662:                     }
 663:                     if ($validValues) {
 664:                         $this->A[$i][$j] *= $value;
 665:                     } else {
 666:                         $this->A[$i][$j] = PHPExcel_Calculation_Functions::NaN();
 667:                     }
 668:                 }
 669:             }
 670:             return $this;
 671:         } else {
 672:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 673:         }
 674:     }   //  function arrayTimesEquals()
 675: 
 676: 
 677:     /**
 678:      *  arrayRightDivide
 679:      *
 680:      *  Element-by-element right division
 681:      *  A / B
 682:      *  @param Matrix $B Matrix B
 683:      *  @return Matrix Division result
 684:      */
 685:     public function arrayRightDivide() {
 686:         if (func_num_args() > 0) {
 687:             $args = func_get_args();
 688:             $match = implode(",", array_map('gettype', $args));
 689: 
 690:             switch($match) {
 691:                 case 'object':
 692:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 693:                         break;
 694:                 case 'array':
 695:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 696:                         break;
 697:                 default:
 698:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 699:                         break;
 700:             }
 701:             $this->checkMatrixDimensions($M);
 702:             for($i = 0; $i < $this->m; ++$i) {
 703:                 for($j = 0; $j < $this->n; ++$j) {
 704:                     $validValues = True;
 705:                     $value = $M->get($i, $j);
 706:                     if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) {
 707:                         $this->A[$i][$j] = trim($this->A[$i][$j],'"');
 708:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]);
 709:                     }
 710:                     if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) {
 711:                         $value = trim($value,'"');
 712:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value);
 713:                     }
 714:                     if ($validValues) {
 715:                         if ($value == 0) {
 716:                             //  Trap for Divide by Zero error
 717:                             $M->set($i, $j, '#DIV/0!');
 718:                         } else {
 719:                             $M->set($i, $j, $this->A[$i][$j] / $value);
 720:                         }
 721:                     } else {
 722:                         $M->set($i, $j, PHPExcel_Calculation_Functions::NaN());
 723:                     }
 724:                 }
 725:             }
 726:             return $M;
 727:         } else {
 728:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 729:         }
 730:     }   //  function arrayRightDivide()
 731: 
 732: 
 733:     /**
 734:      *  arrayRightDivideEquals
 735:      *
 736:      *  Element-by-element right division
 737:      *  Aij = Aij / Bij
 738:      *  @param mixed $B Matrix/Array
 739:      *  @return Matrix Matrix Aij
 740:      */
 741:     public function arrayRightDivideEquals() {
 742:         if (func_num_args() > 0) {
 743:             $args = func_get_args();
 744:             $match = implode(",", array_map('gettype', $args));
 745: 
 746:             switch($match) {
 747:                 case 'object':
 748:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 749:                         break;
 750:                 case 'array':
 751:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 752:                         break;
 753:                 default:
 754:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 755:                         break;
 756:             }
 757:             $this->checkMatrixDimensions($M);
 758:             for($i = 0; $i < $this->m; ++$i) {
 759:                 for($j = 0; $j < $this->n; ++$j) {
 760:                     $this->A[$i][$j] = $this->A[$i][$j] / $M->get($i, $j);
 761:                 }
 762:             }
 763:             return $M;
 764:         } else {
 765:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 766:         }
 767:     }   //  function arrayRightDivideEquals()
 768: 
 769: 
 770:     /**
 771:      *  arrayLeftDivide
 772:      *
 773:      *  Element-by-element Left division
 774:      *  A / B
 775:      *  @param Matrix $B Matrix B
 776:      *  @return Matrix Division result
 777:      */
 778:     public function arrayLeftDivide() {
 779:         if (func_num_args() > 0) {
 780:             $args = func_get_args();
 781:             $match = implode(",", array_map('gettype', $args));
 782: 
 783:             switch($match) {
 784:                 case 'object':
 785:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 786:                         break;
 787:                 case 'array':
 788:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 789:                         break;
 790:                 default:
 791:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 792:                         break;
 793:             }
 794:             $this->checkMatrixDimensions($M);
 795:             for($i = 0; $i < $this->m; ++$i) {
 796:                 for($j = 0; $j < $this->n; ++$j) {
 797:                     $M->set($i, $j, $M->get($i, $j) / $this->A[$i][$j]);
 798:                 }
 799:             }
 800:             return $M;
 801:         } else {
 802:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 803:         }
 804:     }   //  function arrayLeftDivide()
 805: 
 806: 
 807:     /**
 808:      *  arrayLeftDivideEquals
 809:      *
 810:      *  Element-by-element Left division
 811:      *  Aij = Aij / Bij
 812:      *  @param mixed $B Matrix/Array
 813:      *  @return Matrix Matrix Aij
 814:      */
 815:     public function arrayLeftDivideEquals() {
 816:         if (func_num_args() > 0) {
 817:             $args = func_get_args();
 818:             $match = implode(",", array_map('gettype', $args));
 819: 
 820:             switch($match) {
 821:                 case 'object':
 822:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 823:                         break;
 824:                 case 'array':
 825:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 826:                         break;
 827:                 default:
 828:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 829:                         break;
 830:             }
 831:             $this->checkMatrixDimensions($M);
 832:             for($i = 0; $i < $this->m; ++$i) {
 833:                 for($j = 0; $j < $this->n; ++$j) {
 834:                     $this->A[$i][$j] = $M->get($i, $j) / $this->A[$i][$j];
 835:                 }
 836:             }
 837:             return $M;
 838:         } else {
 839:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 840:         }
 841:     }   //  function arrayLeftDivideEquals()
 842: 
 843: 
 844:     /**
 845:      *  times
 846:      *
 847:      *  Matrix multiplication
 848:      *  @param mixed $n Matrix/Array/Scalar
 849:      *  @return Matrix Product
 850:      */
 851:     public function times() {
 852:         if (func_num_args() > 0) {
 853:             $args  = func_get_args();
 854:             $match = implode(",", array_map('gettype', $args));
 855: 
 856:             switch($match) {
 857:                 case 'object':
 858:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $B = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 859:                         if ($this->n == $B->m) {
 860:                             $C = new PHPExcel_Shared_JAMA_Matrix($this->m, $B->n);
 861:                             for($j = 0; $j < $B->n; ++$j) {
 862:                                 for ($k = 0; $k < $this->n; ++$k) {
 863:                                     $Bcolj[$k] = $B->A[$k][$j];
 864:                                 }
 865:                                 for($i = 0; $i < $this->m; ++$i) {
 866:                                     $Arowi = $this->A[$i];
 867:                                     $s = 0;
 868:                                     for($k = 0; $k < $this->n; ++$k) {
 869:                                         $s += $Arowi[$k] * $Bcolj[$k];
 870:                                     }
 871:                                     $C->A[$i][$j] = $s;
 872:                                 }
 873:                             }
 874:                             return $C;
 875:                         } else {
 876:                             throw new PHPExcel_Calculation_Exception(JAMAError(MatrixDimensionMismatch));
 877:                         }
 878:                         break;
 879:                 case 'array':
 880:                         $B = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 881:                         if ($this->n == $B->m) {
 882:                             $C = new PHPExcel_Shared_JAMA_Matrix($this->m, $B->n);
 883:                             for($i = 0; $i < $C->m; ++$i) {
 884:                                 for($j = 0; $j < $C->n; ++$j) {
 885:                                     $s = "0";
 886:                                     for($k = 0; $k < $C->n; ++$k) {
 887:                                         $s += $this->A[$i][$k] * $B->A[$k][$j];
 888:                                     }
 889:                                     $C->A[$i][$j] = $s;
 890:                                 }
 891:                             }
 892:                             return $C;
 893:                         } else {
 894:                             throw new PHPExcel_Calculation_Exception(JAMAError(MatrixDimensionMismatch));
 895:                         }
 896:                         return $M;
 897:                         break;
 898:                 case 'integer':
 899:                         $C = new PHPExcel_Shared_JAMA_Matrix($this->A);
 900:                         for($i = 0; $i < $C->m; ++$i) {
 901:                             for($j = 0; $j < $C->n; ++$j) {
 902:                                 $C->A[$i][$j] *= $args[0];
 903:                             }
 904:                         }
 905:                         return $C;
 906:                         break;
 907:                 case 'double':
 908:                         $C = new PHPExcel_Shared_JAMA_Matrix($this->m, $this->n);
 909:                         for($i = 0; $i < $C->m; ++$i) {
 910:                             for($j = 0; $j < $C->n; ++$j) {
 911:                                 $C->A[$i][$j] = $args[0] * $this->A[$i][$j];
 912:                             }
 913:                         }
 914:                         return $C;
 915:                         break;
 916:                 case 'float':
 917:                         $C = new PHPExcel_Shared_JAMA_Matrix($this->A);
 918:                         for($i = 0; $i < $C->m; ++$i) {
 919:                             for($j = 0; $j < $C->n; ++$j) {
 920:                                 $C->A[$i][$j] *= $args[0];
 921:                             }
 922:                         }
 923:                         return $C;
 924:                         break;
 925:                 default:
 926:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 927:                         break;
 928:             }
 929:         } else {
 930:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 931:         }
 932:     }   //  function times()
 933: 
 934: 
 935:     /**
 936:      *  power
 937:      *
 938:      *  A = A ^ B
 939:      *  @param mixed $B Matrix/Array
 940:      *  @return Matrix Sum
 941:      */
 942:     public function power() {
 943:         if (func_num_args() > 0) {
 944:             $args = func_get_args();
 945:             $match = implode(",", array_map('gettype', $args));
 946: 
 947:             switch($match) {
 948:                 case 'object':
 949:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
 950:                         break;
 951:                 case 'array':
 952:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
 953:                         break;
 954:                 default:
 955:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 956:                         break;
 957:             }
 958:             $this->checkMatrixDimensions($M);
 959:             for($i = 0; $i < $this->m; ++$i) {
 960:                 for($j = 0; $j < $this->n; ++$j) {
 961:                     $validValues = True;
 962:                     $value = $M->get($i, $j);
 963:                     if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) {
 964:                         $this->A[$i][$j] = trim($this->A[$i][$j],'"');
 965:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]);
 966:                     }
 967:                     if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) {
 968:                         $value = trim($value,'"');
 969:                         $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value);
 970:                     }
 971:                     if ($validValues) {
 972:                         $this->A[$i][$j] = pow($this->A[$i][$j],$value);
 973:                     } else {
 974:                         $this->A[$i][$j] = PHPExcel_Calculation_Functions::NaN();
 975:                     }
 976:                 }
 977:             }
 978:             return $this;
 979:         } else {
 980:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
 981:         }
 982:     }   //  function power()
 983: 
 984: 
 985:     /**
 986:      *  concat
 987:      *
 988:      *  A = A & B
 989:      *  @param mixed $B Matrix/Array
 990:      *  @return Matrix Sum
 991:      */
 992:     public function concat() {
 993:         if (func_num_args() > 0) {
 994:             $args = func_get_args();
 995:             $match = implode(",", array_map('gettype', $args));
 996: 
 997:             switch($match) {
 998:                 case 'object':
 999:                         if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); }
1000:                 case 'array':
1001:                         $M = new PHPExcel_Shared_JAMA_Matrix($args[0]);
1002:                         break;
1003:                 default:
1004:                         throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
1005:                         break;
1006:             }
1007:             $this->checkMatrixDimensions($M);
1008:             for($i = 0; $i < $this->m; ++$i) {
1009:                 for($j = 0; $j < $this->n; ++$j) {
1010:                     $this->A[$i][$j] = trim($this->A[$i][$j],'"').trim($M->get($i, $j),'"');
1011:                 }
1012:             }
1013:             return $this;
1014:         } else {
1015:             throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
1016:         }
1017:     }   //  function concat()
1018: 
1019: 
1020:     /**
1021:      *  Solve A*X = B.
1022:      *
1023:      *  @param Matrix $B Right hand side
1024:      *  @return Matrix ... Solution if A is square, least squares solution otherwise
1025:      */
1026:     public function solve($B) {
1027:         if ($this->m == $this->n) {
1028:             $LU = new PHPExcel_Shared_JAMA_LUDecomposition($this);
1029:             return $LU->solve($B);
1030:         } else {
1031:             $QR = new QRDecomposition($this);
1032:             return $QR->solve($B);
1033:         }
1034:     }   //  function solve()
1035: 
1036: 
1037:     /**
1038:      *  Matrix inverse or pseudoinverse.
1039:      *
1040:      *  @return Matrix ... Inverse(A) if A is square, pseudoinverse otherwise.
1041:      */
1042:     public function inverse() {
1043:         return $this->solve($this->identity($this->m, $this->m));
1044:     }   //  function inverse()
1045: 
1046: 
1047:     /**
1048:      *  det
1049:      *
1050:      *  Calculate determinant
1051:      *  @return float Determinant
1052:      */
1053:     public function det() {
1054:         $L = new PHPExcel_Shared_JAMA_LUDecomposition($this);
1055:         return $L->det();
1056:     }   //  function det()
1057: 
1058: 
1059: }   //  class PHPExcel_Shared_JAMA_Matrix
1060: 
Autene API documentation generated by ApiGen