[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/phpexcel/PHPExcel/Shared/trend/ -> exponentialBestFitClass.php (source)

   1  <?php
   2  /**
   3   * PHPExcel
   4   *
   5   * Copyright (c) 2006 - 2014 PHPExcel
   6   *
   7   * This library is free software; you can redistribute it and/or
   8   * modify it under the terms of the GNU Lesser General Public
   9   * License as published by the Free Software Foundation; either
  10   * version 2.1 of the License, or (at your option) any later version.
  11   *
  12   * This library is distributed in the hope that it will be useful,
  13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15   * Lesser General Public License for more details.
  16   *
  17   * You should have received a copy of the GNU Lesser General Public
  18   * License along with this library; if not, write to the Free Software
  19   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  20   *
  21   * @category   PHPExcel
  22   * @package    PHPExcel_Shared_Trend
  23   * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
  24   * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25   * @version    ##VERSION##, ##DATE##
  26   */
  27  
  28  
  29  require_once(PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/bestFitClass.php');
  30  
  31  
  32  /**
  33   * PHPExcel_Exponential_Best_Fit
  34   *
  35   * @category   PHPExcel
  36   * @package    PHPExcel_Shared_Trend
  37   * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
  38   */
  39  class PHPExcel_Exponential_Best_Fit extends PHPExcel_Best_Fit
  40  {
  41      /**
  42       * Algorithm type to use for best-fit
  43       * (Name of this trend class)
  44       *
  45       * @var    string
  46       **/
  47      protected $_bestFitType        = 'exponential';
  48  
  49  
  50      /**
  51       * Return the Y-Value for a specified value of X
  52       *
  53       * @param     float        $xValue            X-Value
  54       * @return     float                        Y-Value
  55       **/
  56  	public function getValueOfYForX($xValue) {
  57          return $this->getIntersect() * pow($this->getSlope(),($xValue - $this->_Xoffset));
  58      }    //    function getValueOfYForX()
  59  
  60  
  61      /**
  62       * Return the X-Value for a specified value of Y
  63       *
  64       * @param     float        $yValue            Y-Value
  65       * @return     float                        X-Value
  66       **/
  67  	public function getValueOfXForY($yValue) {
  68          return log(($yValue + $this->_Yoffset) / $this->getIntersect()) / log($this->getSlope());
  69      }    //    function getValueOfXForY()
  70  
  71  
  72      /**
  73       * Return the Equation of the best-fit line
  74       *
  75       * @param     int        $dp        Number of places of decimal precision to display
  76       * @return     string
  77       **/
  78  	public function getEquation($dp=0) {
  79          $slope = $this->getSlope($dp);
  80          $intersect = $this->getIntersect($dp);
  81  
  82          return 'Y = '.$intersect.' * '.$slope.'^X';
  83      }    //    function getEquation()
  84  
  85  
  86      /**
  87       * Return the Slope of the line
  88       *
  89       * @param     int        $dp        Number of places of decimal precision to display
  90       * @return     string
  91       **/
  92  	public function getSlope($dp=0) {
  93          if ($dp != 0) {
  94              return round(exp($this->_slope),$dp);
  95          }
  96          return exp($this->_slope);
  97      }    //    function getSlope()
  98  
  99  
 100      /**
 101       * Return the Value of X where it intersects Y = 0
 102       *
 103       * @param     int        $dp        Number of places of decimal precision to display
 104       * @return     string
 105       **/
 106  	public function getIntersect($dp=0) {
 107          if ($dp != 0) {
 108              return round(exp($this->_intersect),$dp);
 109          }
 110          return exp($this->_intersect);
 111      }    //    function getIntersect()
 112  
 113  
 114      /**
 115       * Execute the regression and calculate the goodness of fit for a set of X and Y data values
 116       *
 117       * @param     float[]    $yValues    The set of Y-values for this regression
 118       * @param     float[]    $xValues    The set of X-values for this regression
 119       * @param     boolean    $const
 120       */
 121  	private function _exponential_regression($yValues, $xValues, $const) {
 122          foreach($yValues as &$value) {
 123              if ($value < 0.0) {
 124                  $value = 0 - log(abs($value));
 125              } elseif ($value > 0.0) {
 126                  $value = log($value);
 127              }
 128          }
 129          unset($value);
 130  
 131          $this->_leastSquareFit($yValues, $xValues, $const);
 132      }    //    function _exponential_regression()
 133  
 134  
 135      /**
 136       * Define the regression and calculate the goodness of fit for a set of X and Y data values
 137       *
 138       * @param    float[]        $yValues    The set of Y-values for this regression
 139       * @param    float[]        $xValues    The set of X-values for this regression
 140       * @param    boolean        $const
 141       */
 142  	function __construct($yValues, $xValues=array(), $const=True) {
 143          if (parent::__construct($yValues, $xValues) !== False) {
 144              $this->_exponential_regression($yValues, $xValues, $const);
 145          }
 146      }    //    function __construct()
 147  
 148  }    //    class exponentialBestFit


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1