Home  >  Article  >  Backend Development  >  Numerical analysis (php implementation) 1: Lagrange interpolation_PHP tutorial

Numerical analysis (php implementation) 1: Lagrange interpolation_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 17:47:121077browse

I am learning numerical analysis and try to implement it with php. Friends who are interested can stick it down and try it

Lagrange interpolation is an interpolation process that gives n known points, fits them with a polynomial function, finds the fitted function, and then estimates the function value of the unknown point

The interpolation function is f(x) = xigma (summation) lk*yk

This class implements the function of displaying function images after interpolation

/*

* Lagrange interpolation

* @wangbin

* */

class Lagrange{

        private $dot = array();

Public function __construct($array){

$this->dot = $array;

}

/*

* Calculate lk

* */

        private function get_lk($x,$k){

          $num = count($this->dot['x']);

                  $omiga_xk = 1;

$omiga_x = 1;

for($i = 0;$i < $num;$i++){

If($i != $k){

                               $omiga_xk *= ($this->dot['x'][$k]-$this->dot['x'][$i]);

$omiga_x *= ($x - $this->dot['x'][$i]);

                    }

              }

                $lk = $omiga_x/$omiga_xk;

                  return $lk;

}

        public function get_y($x){

          $num = count($this->dot['x']);

                  $L = 0;

for($k = 0;$k < $num;$k++){

$lk = $this->get_lk($x,$k);

               $L += ($this->dot['y'][$k]*$lk);

              }

                  return $L;

}

Public function draw(){

          $img = imagecreate(500,500);

Imagecolorallocate($img,255,255,2);

          $num = count($this->dot['x']);

         $max = 0;

for($i = 0;$i < $num;$i++) $max = $max < $this->dot['x'][$i] ? $this->dot['x' ][$i]:$max;

         $r = 7;//Radius of point

         $step = 0.1;//Step size

for($i = 0;$i < $num;$i++){

imagefilledellipse($img,$this->dot['x'][$i],$this->dot['y'][$i],$r,$r,1);

}

for($i = $this->dot['x'][0]-10;$i < $max + 10;$i += $step){

               $current_x = $i;

                $current_y = $this->get_y($current_x);

                $next_x = $i + $step;

                 $next_y = $this->get_y($next_x);

              imageline($img,$current_x,$current_y,$next_x,$next_y,1);

}

header("Content-type: image/png");

         imagepng($img);

         imagedestroy($img);

}

}

$x = new Lagrange(array('x'=>array(10,30,100,120,220),'y'=>array(20,40,240,220,340)));

$x->draw();

?>

Excerpted from pcenshao

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/478527.htmlTechArticleI am learning numerical analysis and try to use php to implement it. Interested friends can stick it down and try Lagrange interpolation which is given n known points, fit with a polynomial function, find the fitted function, proceed...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn