• 検索結果がありません。

固有値問題

N/A
N/A
Protected

Academic year: 2021

シェア "固有値問題"

Copied!
56
0
0

読み込み中.... (全文を見る)

全文

(1)

電気

303/

電情

303

数値解析

(6)

固有値問題

(2)

前回付記

(1)

• Gauss-Seidek法は, ものの本を見ると, 以下の差 分方程式を解け, というふうに書いてある.

x(k+1)i = 1 aii

−X

j<i

aijx(k+1)j −X

j>i

aijx(k)j +bi

ただしx(k)i は第k回目の繰り返しにおけるベク トルxの第i成分.

(3)

前回付記

(2)

上述の式は左辺にx(k+1)i ,右辺にx(k+1)j があるた め計算不能に見えるが,x(k+1)j に関する和がj < i に限定されているため, i= 1,2,3· · · という順で 計算すれば, 矛盾なく計算できる. 順番を変える と計算できないので注意. この種の見づらい記法 は数値解析の分野では珍しくない.

(4)

前回付記

(3)

• SOR法についても同様に,成分ごとの差分方程式 で書くと以下のようになる.

y(k+1)i = 1 aii

−X

j<i

aijx(k+1)j −X

j>i

aijx(k)j +bi

x(k+1)i =x(k)i +w

y(k+1)i −x(k)i

(5)

前回付記

(4)

行列の演算を上記の差分方程式で置き換えると, 使用するメモリは減る.

• Jacobi法も同様.

実行速度はどうかというと, 先週の例のGauss- Seidel法とSOR法では, 上記の書き換えにより MATLABでは求解が高速化されたが, Scilab は逆に遅くなった.

(6)

前回付記

(5)

• ScilabMATLABと比べて全般に低速であり, 特に繰り返し(for文やwhile文など)を用いたと きの性能の低下が顕著. MATLABを使っている 分には行列の成分ごとの計算が出てもとくに気に する必要はないが, Scilabでは成分ごとの計算を すると処理が遅くなることがある.

(7)

はじめに

(1)

黎明期のプログラミング言語はCOBOL (1959–

;事務用)Fortran (1954–;科学技術計算用).

これらは今でも使われている.

年号の典拠:

http://sunsite.univie.ac.at/Fortran-Guide/ch1-1.html http://americanhistory.si.edu/cobol/introduction

(8)

はじめに

(2)

以下の議論の典拠は Elizabeth Jessup, Numerical Linear Algebra,

ftp://ftp.mcs.anl.gov/pub/petaflops/summer.study/linear.tex www.netlib.org/

http://jp.mathworks.com/company/newsletters /articles/matlab-incorporates-lapack.html https://www.scilab.org/scilab/history http://math-atlas.sourceforge.net/

https://software.intel.com/en-us/intel-mkl/

(9)

はじめに

(3)

線形計算のためのサブルーチン集であるLIN- PACKEISPACK Fortranで書かれた.

• LINPACK1979年にリリースされた線形

方程式を解くためのサブルーチン集.

• EISPACK1976年にリリースされた固有値 問題を解くためのサブルーチン集.

(10)

はじめに

(4)

• MATLABは, 1970年代に, LINPACKEIS- PACKに基づく対話的な計算ソフトとして出

発した (今日では線形計算はMATLABのご

く一部になっている).

• Scilab1980年代にMATLABと類似したソ フトとして開発された(当時の名称はBlaise),

(11)

はじめに

(5)

今日では,LINPACKEISPACKLAPACK いうパッケージに統合されている.

• ATLAS(Automatically Tuned Linear Algebra Soft-

ware)を使うと数値計算のライブラリを特定のコ

ンピュータ向きに高効率化できる.

• Intel, Math Kernel Libraryというライブラリ を公開している.

(12)

はじめに

(6)

• LINPACKEISPACKが併存したことからわか るように, 線形方程式を解くことと, 固有値問題 を解くことは,線形計算の二大重要トピック.

しかし教科書では固有値問題が取り扱われてい ない.

よって, 教科書を離れて, 固有値問題の解法につ いて概説する.

(13)

今回の講義の参考文献

杉原,室田,線形計算の数理,岩波書店, 2009.

,数値解析,2,共立出版, 2002.

山本,数値解析入門[増補版],サイエンス社, 2003.

斎藤,数値解析入門,東京大学出版会, 2012.

久保田, 工学基礎 数値解析とその応用, 数理工学社, 2010.

伊理,藤野,数値計算の常識,共立出版, 1985.

(14)

固有値と固有ベクトル

(1)

• n次の正方行列Aに対し,複素数λn次のベク トルx 6=0Ax = λxという方程式を満たす とき, λAの固有値,xを固有値λに対応する 固有ベクトルという.

• n次行列Aの固有値は,代数方程式det(sI−A) = 0の根であり(ただしI n次の単位行列でs 変数), 重複度を含めて高々n個である.

(15)

固有値と固有ベクトル

(2)

固有値λに対応する固有ベクトル全体が張る線形 部分空間をλに対応する固有空間という.

行列Aの固有ベクトル全体が張る線形部分空間 (どの固有値に対応するかは問わない),Aの固 有空間という. Aの固有空間は必ずしも全空間と は一致しない.

(16)

固有値と固有ベクトル

(3)

• Aの固有空間を拡張して全空間を張るようにし たものを, 一般化固有空間という. これに対応す るのがJordan標準形である. 一般化固有空間ま で広げて考えれば, (一般化)固有値の数は(重複 度を含めて)nに一致する.

(17)

固有値・固有ベクトルの応用

微分方程式・差分方程式の求解と特性解析

• googleによるページのランキング

http://www.ams.org/samplings/feature-column/fcarc-pagerank

パターン認識 www.tuat.ac.jp/~s-hotta/SSII/slide_pattern.pdf

建造物の共振の解析 (地震や風への応答など)

http://www.kozosoft.co.jp/gijyutu/s07.html

他にも色々

(18)

固有値の数値計算

(1)

理論的には, det(sI −A) = 0という代数方 程式をsについて解けば,行列Aの固有値を すべて求めることができるが・

行列式を求めること自体が数値的に大変な上 に, 代数方程式の求解は数値計算の誤差に弱 いので,ふつうはそんなことはやらない.

(19)

固有値の数値計算

(2)

• Scilabの組み込み関数roots()のマニュアル は次のようになっている.

x=roots(p)は 多項式pxである 複素ベ クトルを返す. 100次以下の実数多項式の 場合,高速な(Jenkins-Traub法に基づく)

RPOLYアルゴリズムが使用される. その

他の場合, その根はコンパニオン行列の固 有値として計算される.

(20)

固有値の数値計算

(3)

固有値を求めるために代数方程式を解くので はなく,代数方程式を解くために固有値を求 めることもある.

連立一次方程式が理論的には有限回の計算で 解けるのに対し, 固有値問題は5次以上の行 列に対しては有限回の演算では解けない.

(21)

固有値の数値計算

(4)

よって,固有値問題は数値的には本質的に近 似の問題.

固有問題の数値解法は技巧的なので, 初学者 が自分でプログラムを組むのは危険. この講 義でもアルゴリズムの概要の紹介にとどめる.

(22)

固有値の数値計算

(5)

固有値の数値計算の難易度は, 易しい順に,

対称行列

対角化可能行列

対角化不能行列 (Jordan標準形を数値 的に求めるとき)

(23)

固有値の数値計算

(6)

有限精度の計算機でJordan標準形を求める ことには数値的な困難があり(数学的な困難 ではないことに注意),これを回避するために 様々な工夫がなされている.

典拠:鈴木,渡邉,明, Jordan標準形の数値計算について,数理解析研究所講究録, Vol. 990, pp.

52–61, 1997.

(24)

固有値の数値計算

(7)

• Jordan標準形に関する議論は初学者には敷

居が高すぎると思われるが, 一方で対称行列 については取り扱う必然性が不明瞭と思われ るので,この講義では対角化可能行列(n次の 行列で,重複度を含めてn個の固有値があり, 対応する固有空間が全空間を張るもの)を対 象として議論を進める.

(25)

羃乗法

(1)

• A(複素)固有値をλ1, . . . , λnとする. れらは絶対値が大きい順に並べられているも のとする.

• |λ1|>|λ2|のときには, λ1とそれに対応する 固有ベクトルは,比較的簡単に求められる.

(26)

羃乗法

(2)

初期値x(0)を適切な単位ベクトルとし,以下 の差分方程式を解けばよい.

yk+1 =Axk,

xk+1 =y(k+1)/ky(k+1)k

ただし,初期値の取り方が悪い場合にはやり 直しが必要となることがある.

(27)

羃乗法

(3)

上記の解法を羃乗法という.

羃乗法がうまくいく条件と, その理由は, ずれも簡単.

• |λ1|>|λ2| ≥ · · · ≥ |λn|とする.

• λiに対応する固有ベクトルをviとする.

(28)

羃乗法

(4)

初期値 x0 を固有ベクトルで展開した結果, x(0) =c1v1+· · ·+cnvnとなったものとする.

• c1 6= 0が羃乗法がうまくいくための条件.

このとき, k → ∞としたとき, (λi1)k → 0 である.

(29)

羃乗法

(5)

• Akx(0)=c1λk1v1+Pn

j=2cjλkjvjだから, Akx(0)

kAkx(0)k = c1λk1v1 kc1λk1v1+Pn

j=2cjλkjvjk +

Pn

j=2cjλkjvj

kc1λk1v1+Pn

j=2cjλkjvjkq

(30)

羃乗法

(6)

右辺の分母と分子をλk1で割ると

Akx(0)

kAkx(0)k = c1v1 kc1v1+Pn

j=2cjj1)kvjk +

Pn

j=2cjj1)kvj

kc1v1+Pn

j=2cjj1)kvjkq

(31)

羃乗法

(7)

• k→ ∞とするとj≥2に対してj1)k →0 なるから,kvk1が単位ベクトルに取られていたこ とを思い出すと, lim

k→∞

Akx(0)

kAkx(0)k = c1

|c1|v1.

固有ベクトルの定数倍はやはり固有ベクトルだ から(この場合, 定数として複素数を許容する),

c1

|c1|v1は確かに固有ベクトルになっている.

(32)

羃乗法

(8)

行列Aの固有値の中に絶対値が等しいもの がない場合には, (絶対値)最大固有値とそれ に対応する固有ベクトルを使って行列A 適切に変形することにより,行列Aのすべて の固有値を求めることができる. この手順を 減次という. 詳細については杉原,室田,線形 計算の数理 (岩波書店)などを参照.

(33)

QR

(1)

小規模な行列の固有値の計算に用いられる代 表的な方法がQR法.

• QR法の説明に入る前に, いくつか言葉の準 備をしておく.

(34)

QR

(2)

• n次正方行列Qの列ベクトルが正規直交基底を なすとき, すなわちQTQ=Iとなるとき, Q 直交行列という.

• n次正方行列Qの列ベクトルが複素内積の意味 で正規直交規定をなすとき, すなわちQHQ=I となるとき, Qをユニタリ行列という.

• QH Hermite転置(行列を転置してから各成分 の複素共役を取ったもの) をあらわす.

(35)

QR

(3)

• QR法の基礎となるのは, 次の数学的事実で ある([斎藤], [杉原, 室田]):

複素行列Aは, 適切なユニタリ行列Uを取る ことにより, A = U SUH という形に変換で きる. ただし,Sは上三角行列である(Aは対 角化可能でなくてもよい).

(36)

QR

(4)

上記の事実は,「複素行列Aは少なくともひ とつ固有値と対応する固有ベクトルを持つ」

という事実を用い, 帰納法によって証明され

(この講義では証明は述べない).

数値としてはSの固有値とAの固有値は一 致する.

(37)

QR

(5)

• Aが対角化可能のときには,Aの各固有値と 対応するSの固有値の重複度は一致する.

• Aが対角化不能のときには,Aの各固有値と 対応するSの固有値の重複度に一致しない ものが出る.

(38)

QR

(6)

• A=QSUH という形の表現(ただしQはユ ニタリ行列, S は上三角行列) Schur分解 という.

• QR法とは, 行列ASchur分解を近似的に 求める方法である([杉原,室田]).

(39)

QR

(7)

• ScilabSchur分解を求める関数はschur.

• ASchur分解がA =U T UH であるとき, [U,T]=schur(A)とすると,Uにユニタリ行列 が,Tに上三角行列が返される(結果を受け取 る変数の名称は任意).

(40)

QR

(8)

正方行列のSchur分解はつねに可能だが, QR 法は行列Aが正則でないと使えない.

以下では,Aは正則であると仮定する. (A 対角化可能であることも仮定されていたこと を思い出すこと).

(41)

QR

(9)

• QR法の基礎となるのは, 行列のQR分解と 呼ばれる分解である([森]).

複素正則行列Aは,適切なユニタリ行列Q 取ることにより, A=QRという形に変換で き, この表現は一意的である. ただし, Rは対 角成分が正の上三角行列である.

(42)

QR

(10)

• ScilabQR分解を求める関数はqrである.

[Q,R]=qr(A)のようにして使う.

• qrは行列Aが非正則または正方でない場合 にも適用可能で, A = QRとなるユニタリ 行列Qと上三角行列R(正方行列とは限らな い)が計算される.

(43)

QR

(11)

• QR分解の手法にはこの講義では立ち入らないが, どのような方法があるかを列挙しておく[杉原, ].

数学的には,行列Aの列ベクトルにGram-Schmidt の直交化を適用するとQR分解を求められるが, この方法は数値計算の誤差に弱いので実用上は用 いられない.

(44)

QR

(12)

実際に使われる主要な方法は,修正Gram-Schmidt , Householder変換による方法, Givens 変換に よる方法である. 詳細については[杉原,室田] 参照.

• Scilabの関数qrは処理をLAPACKに丸投げ.

(45)

QR

(13)

• QR法のアルゴリズムは極めて単純である.

次ページにアルゴリズムの形で示す.

• QR法には停止条件は定められていないので, 利用者が適切に止める必要がある.

(46)

QR

(14)

QR

法のアルゴリズム

(初期化) A1 =A, k = 1とする.

(ループ) AkQR分解する. Ak = QkRkと分解 されているものとし, Ak+1 = RkQkと定義する.

k =k+ 1としてループ冒頭に戻る.

(47)

QR

(15)

• QR法の収束性については, 次の事実が成り 立つ([森]).

行列Aが正則かつ対角化可能で, その固有値 の絶対値がすべて相異なるとき, QR法によっ て得られる行列Akは上三角行列に収束し, の対角成分には固有値が絶対値の大きい方か 順に並ぶ.

(48)

QR

(16)

• Scilabで固有値を求める関数はspec.

• Aを行列としたとき, spec(A)とすると固有 値が求められる.

(49)

QR

(17)

• [R,D]=spec(A)とすると(結果を受けとる変 数の名前は任意),DAを対角化した結果(対 角要素に固有値が並んだ行列), Rに対角化の ための正則行列が返される.

(50)

QR

(18)

Scilabによる数値例 (1) -->A=[1 2;3 4];spec(A)

ans =

- 0.3722813 5.3722813

Aの固有値は-0.37228135.3722813.

(51)

QR

(19)

Scilabによる数値例 (2): ASchur分解 -->[U,T]=schur(A)

T =

- 0.3722813 - 1.

0. 5.3722813

U =

- 0.8245648 - 0.5657675 0.5657675 - 0.8245648

(52)

QR

(20)

Scilabによる数値例 (3) QR(1回目) -->[Q,R]=qr(A);A=R*Q

A =

5.2 1.6 0.6 - 0.2

(53)

QR

(21)

Scilabによる数値例 (4) QR(2回目) ->[Q,R]=qr(A);A=R*Q

A =

5.379562 - 0.9562044 0.0437956 - 0.3795620 対角要素はすでに固有値に近い.

(54)

QR

(22)

Scilabによる数値例 (5) QR(7回目) ->[Q,R]=qr(A);A=R*Q

A =

5.3722813 1.0000001 6.980D-08 - 0.3722813 小数点以下7桁まで正しい.

(55)

Scilab

における一般化固有ベクトル

• Scilabで一般化固有ベクトルを求めるには

bdiagという関数を使う. 名前だけは覚えて おくこと.

(56)

固有値問題のその他の解法

• QR法は簡単ではあるが規模が大きい問題には使 えない.

他の代表的なアルゴリズムの名称のみ列挙する [杉原, 室田], LR, Arnoldi, Lanczos, Jacobi-Davison法などといった方法がある.

対称行列の固有値を求めるための古典的な解法に Jacobi(1846)がある[杉原,室田]. この手法 は今日でも用いられることがある.

参照

関連したドキュメント

2011年ハイパフォーマンスコンピューティングと計算科学シンポジウム High Performance Computing

ⓒ2012 Information Processing Society of Japan.. フィルタとその伝達関数 大規模な N

, αn は 複素数 に分解される。したがっ て、 [三宅] のように

6 まとめ 6.1 固有値についてわかったこと r≡0として、pxをpx =x2−3 2x+ 1とpx =x2−1 2x+1 2のよう にx= 0またはx= 1を軸として線対称になるような関数を用いた場合、 固有値は等しくなる。 また、rxを関数にすると、固有値の平方根の比 rλn λ1 はr ≡ 0として

計算に用いたプログラム(①で作成したサブルーチンまたは関数を使って③を解いたもの (prog03_1_1.f または prog03_1_1.c)と②で作成したサブルーチンまたは関数を使って③ を解いたもの(prog03_1_2.f または prog03_1_2.c))と、③で得られた固有値、固有ベク

この 際境界 $L$ と $\Gamma$ 上に二節点をもっ“ 三角形” に対しては , Zlamal の曲要素を使う などして適合条件 $V_{h}\subset V$

154 京都大学数理解析研究所講究録 水の波偏差分方程式の固有値問題 電気通信大学大学院情報工学専攻 松木美保子 (MATSUKI, Mihoko) 電気通信大学情報工学科

1 はじめに