數值分析(php實現)一:Lagrange插值
在學數值分析,試著用php實現下,有興趣的朋友可以粘下來試試
Lagrange插值就是給出n個已知的點,用多項式函數擬合,求出擬合的函數,進而估算未知點函數值的一種插值過程
插值函數是f(x) = xigma(求和) lk*yk
本類實現了插值後顯示函數映像的功能
dot = $array; } /* * 計算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;//點的半徑 $step = 0.1;//步長 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();?>
1 樓 luozhong915127 2011-11-17
全是代碼,沒有解釋呀