!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/main_file/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/   drwxr-xr-x
Free 13.11 GB of 57.97 GB (22.61%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     PolynomialBestFit.php (6.36 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace PhpOffice\PhpSpreadsheet\Shared\Trend;

use 
Matrix\Matrix;

// Phpstan and Scrutinizer seem to have legitimate complaints.
// $this->slope is specified where an array is expected in several places.
// But it seems that it should always be float.
// This code is probably not exercised at all in unit tests.
class PolynomialBestFit extends BestFit
{
    
/**
     * Algorithm type to use for best-fit
     * (Name of this Trend class).
     *
     * @var string
     */
    
protected $bestFitType 'polynomial';

    
/**
     * Polynomial order.
     *
     * @var int
     */
    
protected $order 0;

    
/**
     * Return the order of this polynomial.
     *
     * @return int
     */
    
public function getOrder()
    {
        return 
$this->order;
    }

    
/**
     * Return the Y-Value for a specified value of X.
     *
     * @param float $xValue X-Value
     *
     * @return float Y-Value
     */
    
public function getValueOfYForX($xValue)
    {
        
$retVal $this->getIntersect();
        
$slope $this->getSlope();
        
// Phpstan and Scrutinizer are both correct - getSlope returns float, not array.
        // @phpstan-ignore-next-line
        
foreach ($slope as $key => $value) {
            if (
$value != 0.0) {
                
$retVal += $value $xValue ** ($key 1);
            }
        }

        return 
$retVal;
    }

    
/**
     * Return the X-Value for a specified value of Y.
     *
     * @param float $yValue Y-Value
     *
     * @return float X-Value
     */
    
public function getValueOfXForY($yValue)
    {
        return (
$yValue $this->getIntersect()) / $this->getSlope();
    }

    
/**
     * Return the Equation of the best-fit line.
     *
     * @param int $dp Number of places of decimal precision to display
     *
     * @return string
     */
    
public function getEquation($dp 0)
    {
        
$slope $this->getSlope($dp);
        
$intersect $this->getIntersect($dp);

        
$equation 'Y = ' $intersect;
        
// Phpstan and Scrutinizer are both correct - getSlope returns float, not array.
        // @phpstan-ignore-next-line
        
foreach ($slope as $key => $value) {
            if (
$value != 0.0) {
                
$equation .= ' + ' $value ' * X';
                if (
$key 0) {
                    
$equation .= '^' . ($key 1);
                }
            }
        }

        return 
$equation;
    }

    
/**
     * Return the Slope of the line.
     *
     * @param int $dp Number of places of decimal precision to display
     *
     * @return float
     */
    
public function getSlope($dp 0)
    {
        if (
$dp != 0) {
            
$coefficients = [];
            
// Scrutinizer is correct - $this->slope is float, not array.
            //* @phpstan-ignore-next-line
            
foreach ($this->slope as $coefficient) {
                
$coefficients[] = round($coefficient$dp);
            }

            
// @phpstan-ignore-next-line
            
return $coefficients;
        }

        return 
$this->slope;
    }

    
/**
     * @param int $dp
     *
     * @return array
     */
    
public function getCoefficients($dp 0)
    {
        
// Phpstan and Scrutinizer are both correct - getSlope returns float, not array.
        // @phpstan-ignore-next-line
        
return array_merge([$this->getIntersect($dp)], $this->getSlope($dp));
    }

    
/**
     * Execute the regression and calculate the goodness of fit for a set of X and Y data values.
     *
     * @param int $order Order of Polynomial for this regression
     * @param float[] $yValues The set of Y-values for this regression
     * @param float[] $xValues The set of X-values for this regression
     */
    
private function polynomialRegression($order$yValues$xValues): void
    
{
        
// calculate sums
        
$x_sum array_sum($xValues);
        
$y_sum array_sum($yValues);
        
$xx_sum $xy_sum $yy_sum 0;
        for (
$i 0$i $this->valueCount; ++$i) {
            
$xy_sum += $xValues[$i] * $yValues[$i];
            
$xx_sum += $xValues[$i] * $xValues[$i];
            
$yy_sum += $yValues[$i] * $yValues[$i];
        }
        
/*
         *    This routine uses logic from the PHP port of polyfit version 0.1
         *    written by Michael Bommarito and Paul Meagher
         *
         *    The function fits a polynomial function of order $order through
         *    a series of x-y data points using least squares.
         *
         */
        
$A = [];
        
$B = [];
        for (
$i 0$i $this->valueCount; ++$i) {
            for (
$j 0$j <= $order; ++$j) {
                
$A[$i][$j] = $xValues[$i] ** $j;
            }
        }
        for (
$i 0$i $this->valueCount; ++$i) {
            
$B[$i] = [$yValues[$i]];
        }
        
$matrixA = new Matrix($A);
        
$matrixB = new Matrix($B);
        
$C $matrixA->solve($matrixB);

        
$coefficients = [];
        for (
$i 0$i $C->rows; ++$i) {
            
$r $C->getValue($i 11); // row and column are origin-1
            
if (abs($r) <= 10 ** (-9)) {
                
$r 0;
            }
            
$coefficients[] = $r;
        }

        
$this->intersect array_shift($coefficients);
        
// Phpstan (and maybe Scrutinizer) are correct
        //* @phpstan-ignore-next-line
        
$this->slope $coefficients;

        
$this->calculateGoodnessOfFit($x_sum$y_sum$xx_sum$yy_sum$xy_sum000);
        foreach (
$this->xValues as $xKey => $xValue) {
            
$this->yBestFitValues[$xKey] = $this->getValueOfYForX($xValue);
        }
    }

    
/**
     * Define the regression and calculate the goodness of fit for a set of X and Y data values.
     *
     * @param int $order Order of Polynomial for this regression
     * @param float[] $yValues The set of Y-values for this regression
     * @param float[] $xValues The set of X-values for this regression
     */
    
public function __construct($order$yValues$xValues = [])
    {
        
parent::__construct($yValues$xValues);

        if (!
$this->error) {
            if (
$order $this->valueCount) {
                
$this->bestFitType .= '_' $order;
                
$this->order $order;
                
$this->polynomialRegression($order$yValues$xValues);
                if ((
$this->getGoodnessOfFit() < 0.0) || ($this->getGoodnessOfFit() > 1.0)) {
                    
$this->error true;
                }
            } else {
                
$this->error true;
            }
        }
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0074 ]--