関数近似 (2)
スプライン補間
•
補間とは, 関数
f(x)が未知であるが, その
n個の点
x1, . . . , xnにおける値
y1, . . . , ynが知
られているとき,
x1, . . . ,xn以外の点における
f(x)の値を推測しようとすることをいう. 1
次元の補間問題において, min{x
1, . . . , xn} ≤ x≤max{x1, . . . , xn}となっているときに補
間, そうでないときに補外と呼ぶ
([伊理]).•
もっとも基礎的な補間は線形補間.
•
これ以外に, 多項式による補間もよく用いら れる.
•
多項式による関数の近似や補間を考えること
に根拠を与えているのが, Weierstrass の多項
式近似定理である.
Weierstrassの多項式近似定理
関数
fが区
間
[a, b]において連続であれば,
fに一様収束す
る多項式の列が存在する.
W. Rudin, Principles of Mathematical Analysis, 3/e, McGraw-Hill, 1976
「一様収束」とは,一様ノルムの意味で収束という意味.また,一様ノル ムの定義は,kfk∞= supt∈[a,b]|f(t)|.前回紹介したessential supremum と同じ記号は,意味がほぼ同じだから. このあたりの議論には深入りし
この定理は次のような形で一般化される.
ない.合とする.
1 f, g∈ A,α∈Cならf+g∈ A,f g∈ A,αf ∈ A 2 x1, x2 ∈K,x1 6=x2なら∃f ∈ A, f(x1)6=f(x2) 3 ∀x∈K,∃g∈ A,g(x)6= 0.
このとき,Aの閉包はK上の連続関数全体を含む.
W. Rudin, Principles of Mathematical Analysis, 3/e, McGraw-Hill, 1976
• Fourier
解析の基礎を与えるのが, Stone - Weier-
strassの定理である.
•
三角関数による近似
(Fourier級数展開) は, 単 位円上で定義された関数
(周期関数)の多項式 による展開と解釈することができる. これを 導いたのも
Weierstrassである.
竹之内,フーリエ展開,秀潤社, 1978.
•
無限次元空間における線形写像のことを線形 作用素と呼ぶことが多い.
• (V,k · kV),(W,k · kW)
をノルム空間,
Aを
Vから
Wへの線形作用素とする. このとき,
Aの作用素ノルムは次のように定義される:
kAk= sup
x∈V,kxkV≤1
kAxkW (岩波数学辞典).
• V, W
におけるノルムの取り方には, 様々な ものがあり得る. これらの取り方に応じて作 用素ノルムは変わる.
•
作用素ノルムのことを誘導ノルム
(inducednorm)
と呼ぶこともある
S. Skogestad and I. Postlethwaite, Multivarible feedback control, Wiley, 1996.
• m
行
n列の行列は,
m×n次元のベクトルと 解釈することもできるし,
n次元数空間から
m次元数空間への線形写像
(作用素)と解釈 することもできる.
•
したがって, 行列
Aを
m行
n列の行列とした
とき,
Aのベクトルとしてのノルムと作用素
としてのノルムが定義できる.
• A
のベクトルとしてのノルムの定義は,
kAkp = (Pmk=1
Pn
l=1|akl|p)1/p (1≤ p <∞) kAk∞= maxk∈{1,...,m},l∈{1....,n}|akl|
• A
の作用素としてのノルムは
kAk= supx∈V,kxkV≤1kAxkW• (V,k · kp), (W,k · kp)に対し,V からW への線形 作用素の作用素ノルムをlp誘導ノルムと呼ぶ
S. Skogestad and I. Postlethwaite, Multivarible feedback control, Wiley, 1996.
• (V,k · kp), (W,k · kq)としたとき, V からW への 線形作用素の作用素ノルムは(p, q)−誘導ノルム とでも呼ぶべきであろうが,このような用語は定 着していない.
• Scilab
の組み込み関数
normは, 行列
Aに対し て以下のように振舞う.
norm(A) l2
誘導ノルムを返す
norm(A,1) l1
誘導ノルムを返す
norm(A,’inf’) l∞誘導ノルムを返す
norm(A,’fro’) Frobeniusノルムを返す
(ベクトルとしてのl2ノルム)
• ややこしいことに, Scilab(およびMATLAB)の オンラインマニュアルは,lp誘導ノルムのことを 単にlpノルムあるいはpノルムと呼んでいる. な お,norm(A,’fro’)はAをベクトルと見たときの l2ノルムを返すが, これはFrobeniusノルムと呼 ばれている.
• 行列のノルムについてはD. S. Bernstein, Matrix Mathematics, 2/e, Princeton, 2009を参照.
• (xi, yi)i∈{1,=...,n}
を
n個の実数の対とし, これ らのすべての点を通る
n−1次の多項式を求 める, という問題を考える. ただし, これら の実数の対には重複がなく, かつ
x1から
xnまでの中には値が同じものはないと仮定する.
(xi, yi)i∈{1,=...,n}
がある関数に対応すると考え
れば, このような仮定は妥当である.
• n−1
次の多項式には係数が
(第0次の項から 第
n−1次の項まで)
n個あるから, 多項式の 係数を未知数と解釈すると,
n個の未知数に 関する
n個の方程式を解くことになり, 解は
(大抵の場合には)
存在する筈である.
•
ここで, 以下の多項式を考える.
pi(x) = Q
j<i(x−xj)Q
j>i(x−xj) Q
j<i(xi−xj)Q
j>i(xi−xj)
• i = 1のときにはj < iとなるjは存在しないが, この場合に はQ
j<i(x−xj) = 1,Q
j<i(xi−xj) = 1と定義する. 同様に,
i=nのときにはj > iとなるjは存在しないが, この場合には Q
j>i(x−xj) = 1,Q
j>i(xi−xj) = 1と定義する. これらは,記法
を簡潔にするための約束ごとである.
• pi(x)
の分子を見ると,
i6=jであれば,
pi(xj) = 0となることがわかる.
•
一方,
x=xiとすると,
piの分母と分子が等し くなるから,
pi(xi) = 1であることがわかる.
•
したがって,
piは,
pi(xi) = 1で,
j 6= iなら
pi(xj) = 0となる,
n−1次の多項式である.
• pi(x)
の性質を使い,
l(x) =y1p1(x) +y2p2(x) +· · ·+ynpn(x)
とすると,
l(x)は
(x1, y1,), . . . , (xn, yn)を通 る
n−1次の多項式になっていることがわか
る. これが
Lagrange補間多項式である.
• Lagrange
補間多項式による補間のことを
La- grange補間という.
• Lagrange
補間多項式の次数は与えられた標
本点の数から決まる.
n個の標本点が与えら
れたときには, 次数は
n −1次になる. そし
て, Lagrange 補間多項式 は与えられた標本
点に対して一意的である.
•
以下の議論では, 区間
[a, b]で定義された連続
関数
fを
Lagrange補間によって近似すると
いう問題を考える.
• Lk
を, 区間
[a, b]において
k個の標本点を定 め, 関数
fから
k個の標本点における関数値
を用いて
Lagrange補間多項式を定める作用
素とする.
• Lk
は線形作用素であることが示せる.
• f
から
Lkによって作られる
Lagrange補間多 項式を
Lkfと書く.
•
問題となるのは, 作用素の系列
(Lk)k∈Nが与
えられたとき,
Lkfが
kを大きく取れば
fに
近付くかどうか, ということである.
• 関数の定義域を区間[a, b]とし, (Lk)k∈Nを,区間
[a, b]におけるあるk個の標本点の取り方に対応
したLagrange補間の系列とすると, (Lk)k∈Nに よって一様近似できない連続関数が存在する.
• 逆に, 連続関数f を固定した場合には, 標本点の 取り方をうまく定めることで,それを一様近似す るような列(Lk)k∈Nを作ることができる.
• fをn回以上連続微分可能な関数とする. Lnをn 個の標本点(x1, . . . , xn)に対応したLagrange補 間多項式を作る作用素とし, W =Qn
k=1(x−xk) とする. このとき, 以下が成り立つ[杉原,室田]:
kf −Lnfk∞≤ kf(n)k∞kWk∞
n!
• f
が解析関数であっても, 標本点の取り方を 等間隔としてしまうと,
nをいくら大きく取っ ても
Lnfが
fに近付かないことがある. これ
を
Rungeの現象という. 標本点の取り方を工
夫すれば, この問題を改善することができる
[杉原,室田].
• Lagrange
補間には, 数値計算の誤差に弱いと いう問題がある.
•
展開に
pi(x) =Q
j<i(x−xj)Q
j>i(x−xj) Q
j<i(xi−xj)Q
j>i(xi−xj)
のかわ
りに
(x−x1), (x−x1)(x−x2), . . .を使うこ
とにより, この問題は緩和される.
• fn(x) =c0+c1(x−x1) +c2(x−x1)(x−x2) +
· · ·+cn−1(x−x1)· · ·(x−xn−1)
とおく.
• f(x1) = c0,f(x2) =c0+c1(x2−x1),f(x3) = c0+c1(x2−x1) +c3(x3−x1)(x3−x+2), . . . , f(xn) =c0+Pn−1
i=1 ciQi
j=1(xn−xj)
である.
•
したがって,
f(xi) =yi (i = 1, . . . , n)を満た す
c0, c1, . . . , cnが一意的に定まる. この係数 を用いた補間を
Newton補間という.
• Newton
補間と
Lagrange補間の計算のしかた
は異なるが, 標本点を固定したとき, Newton
補間と
Lagrange補間によって得られる多項
式は同一である.
• Lagrange
補間
(およびNewton補間) で得ら
れた多項式は, 標本点の取り方によっては, 標
本点間における関数値の脈動が激しい多項式
となる. しかし,
n個の標本点を通る
n−1次
の多項式は一意的に定まるため, 多項式の次
数をこのままにした場合には, これを改善す
る余地はない.
• Lagrange
多項式より高い次数の多項式を用 いることで, この「脈動」を抑えることを考 える.
•
具体的には, 標本点において, 関数
fと関数
値およびその
1階の導関数の値を一致させる
ことを考える.
•
区間
[a, b]において少なくとも
1階微分可能
な関数
f(x)を多項式によって近似したい.
n個の相異なる点
{x1, . . . , xn}において,
f(x)の値
f(x1), . . . , f(xn)と, その導関数
f′(x)の
値
f′(x1), . . . , f′(xn)が与えられているものと
する.
• 2n
個の方程式を解くということは, 未知数が
2n個必要である. すなわち, 2
n−1次の多項
式
(係数は零次の項も含めて2n個) を使えば,
目的は達成される筈である.
• 以下,斎藤,数値解析入門,東京大学出版会, 2012に基づいてHermite多項式の求め 方を説明する. [杉原,室田]にはVandermonde行列を用いた導出法が記載さている.
• Lagrange
補間で用いた
pi(x) =Q
j<i(x−xj)Q
j>i(x−xj) Q
j<i(xi−xj)Q
j>i(xi−xj) (i = 1, . . . , n)
を再び用いる.
• hi(x) = (pi(x))2(1−2p′i(xi)(x−xi)),
ki(x) = (pi(x))2(x−xi)
とする
(i= 1, . . . , n).•
見にくいが, (1
−2p′i(xi)(x−xi))において,
(x−xi)の係数
2p′i(xi)は
p′の点
xiにおける 値であり, 定数である. よって,
hi(x)は
2n−1次の多項式である.
•
定義から,
ki(x)も
2n−1次の多項式である.
•
代入して計算すると次の事実が確認できる.
hi(xj) =
(1, j=i,
0, j6=i,, h′i(xj) = 0,
ki(xj) = 0, ki′(xj) =
(1, j=i, 0, j6=i,
•
したがって, 以下のようにすると
{x1, . . . , xn}において
fおよびその導関数と値が一致する
2n−1次多項式が得られる. これが
Hermite補間多項式である.
q2n−1(x) =
n
X
i=1
f(xi)hi(x) +
n
X
i=1
f′(xi)ki(x)
• Hermitte
補間多項式を求めることを
Hermite補間という
([杉原,室田]).
• Hermite
補間多項式の近似誤差は, Lagrange
補間多項式と同様の方法により評価できるが,
詳細は略す
([斎藤], [杉原,室田]).
• e−x2cos 2x
および
e−x2cos 6xを区間
[−2,2]に おいて
Lagrange補間および
Hermite補間し た例を次ページに示す.
•
標本点は
11点で, 等間隔とした.
• e−x2cos 2x
については, 区間
[−2,2]の外部で
関数と補間多項式を比較した.
-0.2 0 0.2 0.4 0.6 0.8
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
y
x
Hermite f(x_k)
-600 -400 -200 0 200 400 600 800 1000
-3 -2 -1 0 1 2 3
y
x
Hermite
-4 -2 0 2 4 6 8 10
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
y
x
Hermite f(x_k)
• 標本点では関数とその補間多項式の値は一致する.
• Lagrange補間の, 区間の境界の近くで関数値か
らの乖離が発生するという欠点はHermite補間 では緩和されている.
• Lagrange補間, Hermite補間とも,補外に関する 性能は悪い.
• 関数の脈動と比較して標本点が少ない場合には, 関数とその補間多項式の値との標本点以外の点に おける値の乖離が大きくなる.
• とはいえ,数値計算の誤差の問題があるため,標本 点を無闇に多くするわけにはいかない(特にHer- mite補間多項式).
• 標本点以外の点における近似精度については,線 形補間の方が良いこともある.
• Lagrange補間とHermite補間には, 多項式の次 数が高いという問題と,標本点以外で関数値と補 間多項式の値に大きな乖離が発生することがある という問題があった.
• 線形補間にはこのような問題はないが,一方で微 分可能でないという問題がある.
• 線形補間の良さを踏襲しつつ補間関数を微分可能 にしようというのがスプライン補間の考え方.
•
線形補間では, 区間
[xk−1, xk]における補間直 線と区間
[xk, xk+1]は別物であった.
•
スプライン補間では, 区間
[xk−1, xk]と区間
[xk, xk+1]とで, 相異なる多項式を用いて補間 をおこなう.
•
以下の議論の典拠は
[杉原,室田], [斎藤].
• n
個の標本点
x1 < x2 < · · · < xnがあれ
ば
(Lagrange補間と異なり, 大小順に並べら
れている必要がある), 各区間で
1個, 全体で
n−1個の補間多項式が作られる.
•
有限個の点
x1 < x2 < · · · < xnが与えられ, 区間
[xk, xk+1] (1≤k≤n−1)において
fが
m次の多項式となるとき,
fは区分的
m次多 項式という.
• (m−1)
階までの導関数が全領域で連続とな
る区分的
m次多項式を,
m次スプラインと
いう.
• n
個の標本
{(x1, y1), . . . ,(xn, yn)}が与えられ ているとき,
xkにおける値が
ykとなるよう な
m次スプラインによる補間を
m次スプラ イン補間という.
•
応用上は, 3 次のスプラインがよく用いられ
る.
• S(x)
を, これから構成しようとしている
3次 の区分的
3次多項式とする.
•
スプライン補間は補間であるから,
S(x1) = y1, . . . , S(xn) =ynでなければならない.
•
開区間
(xk, xk+1) (1 ≤ k ≤ n−1)では
S(x)は多項式だから,
S′(x)は連続である.
•
よって, 区間の端点における
S(x)の右微分と
左部分が一致すれば,
S(x)によってスプライ
ン補間が達成される. このようにするために
は,
S′(xk) = dkとし,
dkを未知数とする方程
式を解けばよい
(具体的な形は後述).•
区間
[xk, xk+1]においてスプライン補間の
「部品」を 構成するには, 2 個の 標本点
{(xk, yk),(xk+1, yk+1}に関する
Hermite補間
多項式 を用いる.
n = 2のとき
Hermite補
間多項式の次数は
2n−1 = 3だから, 次数は
合っている.
• どの区間について計算しても同じことなので, {(x1, y1),(x2, y2)}が与えられているものとし,区 間[x1, x2]におけるHermite補間を考える.
• 2点に関するLagrange補間はn −2 = 1だか ら線形補間であり, p1(x) = (x−x2)/(x1−x2), p1(x) = (x −x1)/(x2 −x1)とすると, l(x) = y1p1(x) +y2p2(x)である.
• δ = x2 −x1 とおきh1, h2, k1, k2 を求めると, h1(x) = δ13(x −x2)2(δ + 2(x −x1)), h2(x) =
1
δ3(x−x1)2(δ−2(x−x2)),k1(x) = δ12(x−x1)(x−
x2)2,k2(x) = δ12(x−x1)2(x−x2)となる.
• y1, y2, d1,d2を用いてHermite補間多項式を求 めると,y1h1(x) +y2h2(x) +d1k1(x) +d2k2(x)と なる. そのx1における右微分は d1,x2における 左微分はd2である.
• 区間[x2, x3]以降でも同様に操作をおこなう. 区 間[x2, x3]の左端x2 における補間多項式の右微 分はd2で, [x1, x2]の右端x2における補間多項式 の左微分と一致するから, 1階の導関数は連続で ある. d1, d2, . . . , dnはまだ決まっていない.
• m= 3だから, 2階の導関数も全領域で連続でな ければならない. ここからdkを定める.
• この補間多項式のx1における右2階微分とx2に おける左2階微分はそれぞれ6(y2δ−y2 1)−4dδ1−2dδ2,
−6y2δ−y2 1 + 2dδ1 + 4dδ2.
• δ1 =x2−x1,δ2 =x3−x2とおき, [x2, x3]にお いて同様の計算をした後に,x2における左右から の2階導関数の値を等号で結んで整理すると,
d1 δ1+2
1 δ1 + 1
δ2
d2+d3 δ2 = 3
y2−y1
δ12 +y3−y2 δ22
• δk=xk+1−xk (1≤k≤n−1)とおいて全区間 について同様の計算をおこない, γk = 1/δk−1 + 1/δk+1 (2≤k≤n−1),µk = 1/δk (1≤k≤n), νk= (yk−yk−1)/δk−12 + (yk+1−yk)/δk2 (2≤k≤ n−1) とすると,これらの式を次ページように連 立1次方程式として纏めることができる.
µ1 γ2 µ2 . .. ... . ..
µn−1 γn−1 µn−1
d1
... dn
=
ν2
... νn−1
• この連立1次方程式は,n個の変数に対して方程 式がn−2個なので, 解は一意ではない.
• 解を一意にするために, 上記に式を2個追加して 解を求めることが普通である.
• 補間したい関数fが既知で微分可能のとき,f′(x1) = S′(x1+0),f′(xn) =S′(xn−0)とする方法がある.
• これ以外に,S′′(x1+ 0) =S′′(xn−0) = 0とする 方法もある(教科書にはこちらだけが書かれてい る).
• 上記において, +0は右極限, −0は左極限をあら わす.
• Scilabでスプライン補間をおこなう関数は色々.
• 関数interpは,x= (x1, . . . , xn)における関数値 y= (y1, . . . , yn)とその導関数値dy = (y1′, . . . , y′n) および補間関数値を計算したい点のデータz = (z1, . . . , zm)を受け取り,zにおけるスプライン補 間関数値を返す.
• 次ページに例を示す.
スプライン補間をおこない, 0から0から3まで0.1刻 みで関数値を評価する:
x=[0 %pi/4 %pi/2 3*%pi/4 %pi];
y=sin(x);
dy=cos(x);
z=0:0.1:3;
val=interp(z,x,y,dy);
補間点における関数値を返すが, xとyのペアを2行n 列の行列にして与える点と(導関数は不要), 「0.1刻み で関数値を計算」などのように刻みを与える点, 返却値 は2行m列の行列で, 第1列にx軸上で取られた点の 値,第2列に補間関数値が入る点が異なる.
たとえば, 先ほどと同じx,yについて, x軸上で0.9刻 みで補間関数値を計算したいときには次のようにする.
x=[0 %pi/4 %pi/2 3*%pi/4 %pi];
y=sin(x);
val=smooth([x;y],0.9);
valの内容は以下のようになる(端点も含まれる):
val =
0. 0.9 1.8 2.7 3.1415927
0. 0.7817805 0.9724687 0.4333687 1.225D-16
• 関数splinは,与えられた標本点からスプライン 関数を生成し,その標本点におけるスプライン関 数の導関数を返す.
• ScilabのオンラインマニュアルのInterpolation の項を見ると,これ以外にもスプライン補間に対 応する関数があるのがわかるが,この講義ではこ れ以上述べない.