数値解析(php実装)1:ラグランジュ補間_PHPチュートリアル

WBOY
リリース: 2016-07-13 17:47:12
オリジナル
1119 人が閲覧しました

数値解析を学んでいるので、phpで実装してみます。興味のある方は貼って試してみてください

ラグランジュ補間は、n 個の既知点を与え、それらを多項式関数で近似し、近似された関数を見つけて、未知の点の関数値を推定する内挿プロセスです

補間関数は f(x) = xigma (総和) lk*yk

このクラスは関数画像を補間して表示する機能を実装します

/*

* ラグランジュ補間

* @王ビン

* */

ラグランジュ級{

プライベート $dot = array();

パブリック関数 __construct($array){

$this->dot = $array;

}

/*

* lkを計算します

* */

プライベート関数 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;

}

パブリック関数 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);

}

$L を返す;

}

パブリック関数draw(){

$img = imagecreate(500,500);

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

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

$max = 0;

for($i = 0;$i dot['x'][$i] ? ][$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);

イメージライン($img,$current_x,$current_y,$next_x,$next_y,1);

}

header("コンテンツタイプ: image/png");

imagepng($img);

imagedestroy($img);

}

}

$x = 新しいラグランジュ(array('x'=>array(10,30,100,120,220),'y'=>array(20,40,240,220,340)));

$x->draw();

?>

pcenshaoより抜粋

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478527.html技術記事私は数値解析を学んでいるので、興味のある友人はここに留まり、ラグランジュ補間を試してみてください。それは、n 個の既知の点を与え、それらを多項式関数で当てはめて、フィッティング関数を見つけて続行することです。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート