Heim > php教程 > php手册 > Hauptteil

数值分析(php实现)一:Lagrange插值

WBOY
Freigeben: 2016-06-13 10:45:42
Original
990 Leute haben es durchsucht

 

在学数值分析,试着用php实现下,有兴趣的朋友可以粘下来试试

Lagrange插值就是给出n个已知的点,用多项式函数拟合,求出拟合的函数,进而估算未知点函数值的一种插值过程

插值函数是f(x) = xigma(求和) lk*yk

本类实现了插值后显示函数图像的功能

 

/*

 * Lagrange插值

 * @wangbin

 * */

class Lagrange{

       private $dot = array();

       public function __construct($array){

        $this->dot = $array;

    }

 

    /*

     * 计算lk

     * */

       private function get_lk($x,$k){

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

              $omiga_xk = 1;

              $omiga_x = 1;

              for($i = 0;$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

                     $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 dot['x'][$i] ? $this->dot['x'][$i]:$max;

        $r = 7;//点的半径

        $step = 0.1;//步长

        for($i = 0;$i

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

        }

        for($i = $this->dot['x'][0]-10;$i

            $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();

?>

 

摘自 pcenshao

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage