ルンゲ現象 多項式補間 ラグランジュ補間 kashiさん( @mkashi )、黒木玄さん(Gen Kuroki、 @genkuroki )のツイートより
ルンゲ現象的なお絵描き。これをオンライン講義中に即席で5分で作るのは無理だった。後で落ち着いてやったら30分ほどで。 pic.twitter.com/uqHXelq5ip
— kashi (@mkashi) October 25, 2020
#Julia言語 pic.twitter.com/9T4lPiA7ys
— 黒木玄 Gen Kuroki (@genkuroki) October 25, 2020
黒木玄さんがJulia言語で描画しているのをみて、Wolfram言語でも書いてみたくなったから書いてみた。せっかくだから、動きも描いてみた。
コード(Wolfram Language, Jupyter)
f[x_] := 1/(1+25x^2)
xs[n_] := Table[-1+(i-1)2/n, {i, 1, n + 1, 1}]
ys[n_] := Table[f[x], {x, xs[n]}]
lj[x_, j_, n_] := Product[(x-xs[n][[m]]) / (xs[n][[j]] - xs[n][[m]]),
{m, Join[Table[m, {m, 1, j-1}],
Table[m, {m, j+1, n + 1}]]}]
l[x_, n_] := Sum[ys[n][[j]] lj[x, j, n], {j, 1, n + 1}]
Plot[Evaluate[Join[{f[x]}, Table[Simplify[l[x, n]], {n, 5, 15, 2}]]],
{x, -1, 1},
PlotLegends -> Join[{f[x]}, Table[StringJoin["n = ", ToString[n]], {n, 5, 15, 2}]]
]
Manipulate[
Plot[{f[x], Evaluate[l[x, n]]}, {x, -1, 1}, PlotRange -> {-1, 2}],
{n, 5, 15, 2},
SaveDefinitions -> True
]
多項式補間はファンデルモンド以外の解法のラグランジュ補間を利用。
確かに原点で近似が良くなっていくと端点の1、-1では近似が誤差が大きくなり、また、端点で誤差が小さくなると、原点での誤差が大きくなることを確認できた。