2016年1月30日土曜日

ラグランジュ補間でルンゲ現象を再現してみた[Python]

テスト期間中だけどラグランジュ補間のプログラムを作成した.で,試しにルンゲ現象を再現してみた.

ベッ……別に単位落とした時の言い訳なんかじゃないんだからねっ(。>﹏<。)

1.前知識

ラグランジュ補間は関数の近似を行うアルゴリズム手法の一つ.例えば値がわかっているデータが10個あったとする(例えばこんな感じ.x_data = { x0,x1,x2,...,x9}の時のy_data={y0,y1,y2,…,y9})

この時,f(x)を近似したい式として,近似式p(x)は次のように計算される.

この時,f(x)を近似したい式として,近似式p(x)は次のように計算される.
N(i,x)はxがi番目のデータに近い数字なら1を返す.もしxがi番目のサンプルデータに近ければ,i番目の時だけN(i,x)が1になるように出来てる.

こいつの利点としては雨の雨量みたいな離散的なデータを積分したいときに,そのサンプリングした奴の間のデータを出せたりする.

2.プログラム

とりあえずプログラムはこんな感じ.例としてsin関数の近似をやってみた.
で,結果はこんな感じ.

6個のデータしか与えてないのにだいぶいい感じに近似出来てる.すごい.まぁサンプルデータが偏ったりしているとうまくいかない.あとルンゲ現象なんてものもある.ちょっとやってみますか.

3.ルンゲ現象

Wikipediaに載ってる式を試しにやってみます.この式です.

プログラムはこいつ.
結果はこんな感じ.

荒ぶってますねぇ~.補間する点を多くすると過学習みたいになってまぁ変な風になってしまうというやつですね.まぁ気をつけましょうってことっすかね.

多変数関数の補間とかできるのか気になる.