#### /PHPExcel/Shared/JAMA/examples/LagrangeInterpolation.php

https://bitbucket.org/nfredricks/wp-employee-time
PHP | 59 lines | 28 code | 14 blank | 17 comment | 3 complexity | ae1fea6a12e182303a0b37f497c1ace0 MD5 | raw file
``` 1<?php
2
3require_once "../Matrix.php";
4
5/**
6 * Given n points (x0,y0)...(xn-1,yn-1), the following methid computes
7 * the polynomial factors of the n-1't degree polynomial passing through
8 * the n points.
9 *
10 * Example: Passing in three points (2,3) (1,4) and (3,7) will produce
11 * the results [2.5, -8.5, 10] which means that the points are on the
12 * curve y = 2.5x² - 8.5x + 10.
13 *
14 * @see http://geosoft.no/software/lagrange/LagrangeInterpolation.java.html
15 * @author Jacob Dreyer
16 * @author Paul Meagher (port to PHP and minor changes)
17 *
18 * @param x[] float
19 * @param y[] float
20 */
21class LagrangeInterpolation {
22
23	public function findPolynomialFactors(\$x, \$y) {
24		\$n = count(\$x);
25
26		\$data = array();  // double[n][n];
27		\$rhs  = array();  // double[n];
28
29		for (\$i = 0; \$i < \$n; ++\$i) {
30			\$v = 1;
31			for (\$j = 0; \$j < \$n; ++\$j) {
32				\$data[\$i][\$n-\$j-1] = \$v;
33				\$v *= \$x[\$i];
34			}
35			\$rhs[\$i] = \$y[\$i];
36		}
37
38		// Solve m * s = b
39		\$m = new Matrix(\$data);
40		\$b = new Matrix(\$rhs, \$n);
41
42		\$s = \$m->solve(\$b);
43
44		return \$s->getRowPackedCopy();
45	}	//	function findPolynomialFactors()
46
47}	//	class LagrangeInterpolation
48
49
50\$x = array(2.0, 1.0, 3.0);
51\$y = array(3.0, 4.0, 7.0);
52
53\$li = new LagrangeInterpolation;
54\$f = \$li->findPolynomialFactors(\$x, \$y);
55
56
57for (\$i = 0; \$i < 3; ++\$i) {
58	echo \$f[\$i]."<br />";
59}
```