当前路径:Classes/PHPExcel/Shared/JAMA/Matrix.php <?php /** * @package JAMA */ /** PHPExcel root directory */ if (!defined('PHPEXCEL_ROOT')) { /** * @ignore */ define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../../'); require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php'); } /* * Matrix class * * @author Paul Meagher * @author Michael Bommarito * @author Lukasz Karapuda * @author Bartek Matosiuk * @version 1.8 * @license PHP v3.0 * @see http://math.nist.gov/javanumerics/jama/ */ class PHPExcel_Shared_JAMA_Matrix { const POLYMORPHIC_ARGUMENT_EXCEPTION = "Invalid argument pattern for polymorphic function."; const ARGUMENT_TYPE_EXCEPTION = "Invalid argument type."; const ARGUMENT_BOUNDS_EXCEPTION = "Invalid argument range."; const MATRIX_DIMENSION_EXCEPTION = "Matrix dimensions are not equal."; const ARRAY_LENGTH_EXCEPTION = "Array length must be a multiple of m."; /** * Matrix storage * * @var array * @access public */ public $A = array(); /** * Matrix row dimension * * @var int * @access private */ private $m; /** * Matrix column dimension * * @var int * @access private */ private $n; /** * Polymorphic constructor * * 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. */ public function __construct() { if (func_num_args() > 0) { $args = func_get_args(); $match = implode(",", array_map('gettype', $args)); switch ($match) { //Rectangular matrix - m x n initialized from 2D array case 'array': $this->m = count($args[0]); $this->n = count($args[0][0]); $this->A = $args[0]; break; //Square matrix - n x n case 'integer': $this->m = $args[0]; $this->n = $args[0]; $this->A = array_fill(0, $this->m, array_fill(0, $this->n, 0)); break; //Rectangular matrix - m x n case 'integer,integer': $this->m = $args[0]; $this->n = $args[1]; $this->A = array_fill(0, $this->m, array_fill(0, $this->n, 0)); break; //Rectangular matrix - m x n initialized from packed array case 'array,integer': $this->m = $args[1]; if ($this->m != 0) { $this->n = count($args[0]) / $this->m; } else { $this->n = 0; } if (($this->m * $this->n) == count($args[0])) { for ($i = 0; $i < $this->m; ++$i) { for ($j = 0; $j < $this->n; ++$j) { $this->A[$i][$j] = $args[0][$i + $j * $this->m]; } } } else { throw new PHPExcel_Calculation_Exception(self::ARRAY_LENGTH_EXCEPTION); } break; default: throw new PHPExcel_Calculation_Exception(self::POLYMORPHIC_ARGUMENT_EXCEPTION); break; } } else { throw new PHPExcel_Calculation_Exception(self::POLYMORPHIC_ARGUMENT_EXCEPTION); } } /** * getArray * * @return array Matrix array */ public function getArray() { return $this->A; } /** * getRowDimension * * @return int Row dimension */ public function getRowDimension() { return $this->m; } /** * getColumnDimension * * @return int Column dimension */ public function getColumnDimension() { return $this->n; } /** * get * * Get the i,j-th element of the matrix. * @param int $i Row position * @param int $j Column position * @return mixed Element (int/float/double) */ public function get($i = null, $j = null) { return $this->A[$i][$j]; } /** * getMatrix * * Get a submatrix * @param int $i0 Initial row index * @param int $iF Final row index * @param int $j0 Initial column index * @param int $jF Final column index * @return Matrix Submatrix */ public function getMatrix() { if (func_num_args() > 0) { $args = func_get_args(); $match = implode(",", array_map('gettype', $args)); switch ($match) { //A($i0...; $j0...) case 'integer,integer': list($i0, $j0) = $args; if ($i0 >= 0) { $m = $this->m - $i0; } else { throw new PHPExcel_Calculation_Exception(self::ARGUMENT_BOUNDS_EXCEPTION); } if ($j0 >= 0) { $n = $this->n - $j0; } else { throw new PHPExcel_Calculation_Exception(self::ARGUMENT_BOUNDS_EXCEPTION); } $R = new PHPExcel_Shared_JAMA_Matrix($m, $n); for ($i = $i0; $i < $this->m; ++$i) { for ($j = $j0; $j < $this->n; ++$j) { $R->set($i, $j, $this->A[$i][$j]); } } return $R; break; //A($i0...$iF; $j0...$jF) case 'integer,integer,integer,integer': list($i0, $iF, $j0, $jF) = $args; if (($iF > $i0) && ($this->m >= $iF) && ($i0 >= 0)) { $m = $iF - $i0; } else { throw new PHPExcel_Calculation_Exception(self::ARGUMENT_BOUNDS_EXCEPTION); } if (($jF > $j0) && ($this->n >= $jF) && ($j0 >= 0)) { $n = $jF - $j0; } else { throw new PHPExcel_Calculation_Exception(self::ARGUMENT_BOUNDS_EXCEPTION); } $R = new PHPExcel_Shared_JAMA_Matrix($m+1, $n+1); for ($i = $i0; $i <= $iF; ++$i) { for ($j = $j0; $j <= $jF; ++$j) { $R->set($i - $i0, $j - $j0, $this->A[$i][$j]); } } return $R; break; //$R = array of row indices; $C = array of column indices case 'array,array': list($RL, $CL) = $args; if (count($RL) > 0) { $m = count($RL); } else { throw new PHPExcel_Calculation_Exception(self::ARGUMENT_BOUNDS_EXCEPTION); } if (count($CL) > 0) { $n = count($CL); } else { throw new PHPExcel_Calculation_Exception(self::ARGUMENT_BOUNDS_EXCEPTION); } $R = new PHPExcel_Shared_JAMA_Matrix($m, $n); for ($i = 0; $i < $m; ++$i) { for ($j = 0; $j < $n; ++$j) { $R->set($i - $i0, $j - $j0, $this->A[$RL[$i]][$CL[$j]]); } } return $R; break; //$RL = array of row indices; $CL = array of column indices case 'array,array': list($RL, $CL) = $args; if (count($RL) > 0) { $m = count($RL); } else { ...
完整源码文件,请先购买后再查看
相关源码
- JAVA+SPRINGBOOT心灵心理健康平台(心灵治愈交流平台)(含论文)源码2023-09-27
- JAVA+SPRINGBOOT+VUE工厂车间管理系统(含论文)源码2023-09-27
- JAVA_SSM+VUE校园二手物品交易平台(含论文)源码2023-09-27
- JAVA+SSM医院住院管理系统(含论文)源码2023-09-27
- JAVA VUE SSM教材管理系统(含论文、PPT)课程设计2023-09-27
- 基于SPRINGBOOT 旅游共享平台 + 论文2023-09-26
关于我们 | 顾问团队 | 发展历程 | 联系我们 | 源码上传
联系电话(Tel):4008-010-151(免长途)
地址:北京市海淀区大恒科技大厦五层 邮编:100080
Floor 5th,Daheng Building,Zhongguancun,Beijing,China,100080
51Aspx.com 版权所有 CopyRight © 2006-2023. 京ICP备09089570号 | 京公网安备11010702000869号
联系电话(Tel):4008-010-151(免长途)
地址:北京市海淀区大恒科技大厦五层 邮编:100080
Floor 5th,Daheng Building,Zhongguancun,Beijing,China,100080
51Aspx.com 版权所有 CopyRight © 2006-2023. 京ICP备09089570号 | 京公网安备11010702000869号