PluginProbe
TablePress – Tables in WordPress made easy / 3.4
TablePress – Tables in WordPress made easy v3.4
3.4 3.3.4 3.3.3 3.3.2 3.3.1 trunk 1.12 1.14 1.9.2 2.0.4 2.1.7 2.1.8 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3 2.3.1 2.3.2 2.4 2.4.1 2.4.2 2.4.3 All 45 releases
tablepress / libraries / vendor / PhpSpreadsheet / Shared / Trend / LogarithmicBestFit.php

LogarithmicBestFit.php in TablePress – Tables in WordPress made easy 3.4, at libraries/vendor/PhpSpreadsheet/Shared/Trend/LogarithmicBestFit.php

81 lines 2.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace TablePress\PhpOffice\PhpSpreadsheet\Shared\Trend;
4
5 class LogarithmicBestFit extends BestFit
6 {
7 /**
8 * Algorithm type to use for best-fit
9 * (Name of this Trend class).
10 */
11 protected string $bestFitType = 'logarithmic';
12
13 /**
14 * Return the Y-Value for a specified value of X.
15 *
16 * @param float $xValue X-Value
17 *
18 * @return float Y-Value
19 */
20 public function getValueOfYForX(float $xValue): float
21 {
22 return $this->getIntersect() + $this->getSlope() * log($xValue - $this->xOffset);
23 }
24
25 /**
26 * Return the X-Value for a specified value of Y.
27 *
28 * @param float $yValue Y-Value
29 *
30 * @return float X-Value
31 */
32 public function getValueOfXForY(float $yValue): float
33 {
34 return exp(($yValue - $this->getIntersect()) / $this->getSlope());
35 }
36
37 /**
38 * Return the Equation of the best-fit line.
39 *
40 * @param int $dp Number of places of decimal precision to display
41 */
42 public function getEquation(int $dp = 0): string
43 {
44 $slope = $this->getSlope($dp);
45 $intersect = $this->getIntersect($dp);
46
47 return 'Y = ' . $slope . ' * log(' . $intersect . ' * X)';
48 }
49
50 /**
51 * Execute the regression and calculate the goodness of fit for a set of X and Y data values.
52 *
53 * @param float[] $yValues The set of Y-values for this regression
54 * @param float[] $xValues The set of X-values for this regression
55 */
56 private function logarithmicRegression(array $yValues, array $xValues, bool $const): void
57 {
58 $adjustedYValues = array_map(
59 fn ($value): float => ($value < 0.0) ? 0 - log(abs($value)) : log($value),
60 $yValues
61 );
62
63 $this->leastSquareFit($adjustedYValues, $xValues, $const);
64 }
65
66 /**
67 * Define the regression and calculate the goodness of fit for a set of X and Y data values.
68 *
69 * @param float[] $yValues The set of Y-values for this regression
70 * @param float[] $xValues The set of X-values for this regression
71 */
72 public function __construct(array $yValues, array $xValues = [], bool $const = true)
73 {
74 parent::__construct($yValues, $xValues);
75
76 if (!$this->error) {
77 $this->logarithmicRegression($yValues, $xValues, (bool) $const);
78 }
79 }
80 }
81