行列の計算
このチュートリアルでは,行列の計算を実行するためのWolfram言語関数について述べる.これらの関数についての詳細はGolub,van LoanやMeyerらの標準的な数学の教科書を参照していただきたい.このチュートリアルで取り上げる操作は行列に特有のものである.しかしノルムの計算については例外で,スカラーとベクトルにも使用できる.
基本操作
このセクションでは,このチュートリアルで行列の操作について述べる際に使用する基本的な概念と操作についてまとめる.
ノルム
数学的オブジェクトのノルムはオブジェクトの長さ,サイズ,範囲の計測である.Wolfram言語では,ノルムはスカラー,ベクトル,行列について求められる.
Norm[num] | 数のノルム |
Norm[vec] | ベクトルの2‐ノルム |
Norm[vec,p] | ベクトルの p‐ノルム |
Norm[mat] | 行列の2‐ノルム |
Norm[mat,p] | 行列の p‐ノルム |
Norm[mat,"Frobenius"] | 行列のフロベニウス(Frobenius)ノルム |
ベクトルのノルム
ベクトル空間では,ノルムで距離が計算できる.これにより,近傍,近似の近さ,フィットの良さ等の多くの身近な概念が定義できるようになる.ベクトルノルムは以下の関係を満たす関数である.
一般にこの関数には という表記を用いる.下付き文字はノルムの識別に使われる.その中でも特に p-ノルムは重要である.p-ノルムは について以下のように定義される.
行列のノルム
行列空間において行列のノルムは距離の測定に使われる.これはある行列が他の行列に近い場合,例えば行列がほぼ特異行列であるということの意味を定量化する場合に必要である.
行列ノルムには2重線を使ったベクトルノルムの表記も使える.最も一般的なノルムのひとつにフロベニウスノルムがある.これはユークリッド(Euclidean)ノルムとも呼ばれる.
この他に一般的なノルムとして p-ノルムがある.p-ノルムはベクトルのp-ノルムに基づいて以下のように定義されている.
従って,行列の p-ノルムはどのベクトルについても適用できるように最大限拡張できる.
NullSpace
各行列に関連付けられている基本的な部分空間に零空間がある.行列の零空間のベクトルは行列による一次変換でゼロベクトルとなる.
NullSpace[m] | 1次結合が を満たす基底ベクトルのリスト |
階数
MatrixRank[mat] | 行列 mat の階数 |
m×n の行列 A について,Length[NullSpace[A]]+ MatrixRank[A]n およびLength[NullSpace[AT]]+ MatrixRank[AT]m が成立する.このことから,階数が n の場合かつその場合に限り,零空間は空であり,A の階数がm の場合かつその場合に限り,A の転置の零空間は空であることが分かる.
階数が列数に等しい場合,この行列は列最大階数であるといわれる.階数が行数に等しい場合は,この行列は行最大階数であるといわれる.行列の階数を理解するには,行の階段形を考えるとよい.
被約階段行列
行列は,最も左上の要素のピボット位置から始めて,ピボット行の倍数を後続の行から引き,ピボット列のピボットより下の要素がすべてゼロになるようにする操作の組合せで,行の階段形へ変換することができる.次のピボットは次の行および列に移動して選ばれる.このピボットがゼロであり,かつその下の列に非零の要素がある場合は,行を入れ換えて操作を繰り返す.この操作を最終行および最終列に至るまで繰り返す.
要素がすべてゼロである行の下の行も要素がすべてゼロである行のみであるか,または 番目の行の最初の非零要素が 番目の列にあり, 番目の列の最初から 番目までの要素がゼロの場合は,その行列は行階段行列であるという.被約階段形はひとつではないが,その形(ピボットの位置という意味で)はひとつである.非零の行の数で行列の階数を求めることもできる.
行列が行階段形であり,各ピボットが1で,その上(および下)の要素がすべてゼロなら,その行列は被約階段行列である.これは行階段行列と同様の方法で,ピボットを除算により1にし,現在のピボット行の倍数を引くことでその行のピボットより上の要素をゼロにする操作を行うことで生成できる.
被約階段形(および行階段形)により,非零の行の数で行列の階数を求めることができる.Wolfram言語では被約階段行列は関数RowReduceで計算できる.
RowReduce[mat] | 行列 mat の被約階段形 |
逆行列
ここで は単位行列である.Wolfram言語では逆行列は関数Inverseを使って求めることができる.
Inverse[mat] | 行列 mat の逆行列 |
しかし,どのような行列方程式も直接解く方がよい.直接解く方法については「線形系の解法」のセクションで述べる.
擬似逆行列
行列が特異行列である場合,または正方行列でない場合でも,を最小にする近似の逆行列を求めることはできる.2-ノルムを使う場合は,最小二乗法で擬似逆行列を求める.
PseudoInverse[mat] | 行列 mat の擬似逆行列を求める |
擬似逆行列で求める解は最小二乗解である.これについては「最小二乗法」のセクションで詳しく述べる.
行列式
これはWolfram言語では関数Detを使って計算できる.
小行列式
線形系の解法
行列の重要な使用法のひとつに,線形系の表現と解法が挙げられる.このセクションではWolfram言語で線形系をどのように解くかについて述べる.ここでは特にこの目的で提供されている主な関数LinearSolveを使う.
線形系の解法では,行列方程式 を解く. は × の行列なので, 個の未知数を含む 個の線形方程式である.
のとき,系は正方であるという. の場合は未知数より方程式の数の方が多く,過剰決定系である. のときは未知数の方が方程式の数より多く,過少決定系である.
square | m=n の場合.解は存在することもしないこともある |
overdetermined | m>n の場合.解は存在することもしないこともある |
underdetermined | m<n の場合.解は存在しないか,あるいは無限個の解が存在する |
nonsingular | 独立した方程式の数と変数の数が等しく,行列式が非零の場合.唯一解が存在する |
consistent | 少なくとも解が1つ存在する |
inconsistent | 解は存在しない |
で逆行列を計算して行列方程式を解くことができるとしても,それは推奨される方法ではない.線形系を直接解くように設計されている関数を使うべきである.Wolfram言語ではLinearSolveが使用できる.
LinearSolve[m,b] | 行列方程式 m.x==b の解のベクトル x |
LinearSolve[m] | 多くのb に繰返し適用できる関数 |
LinearSolveを使った線形系の解法
解が見つからない場合は,系は矛盾している.この場合,最も近い解を求めるとよいこともある.これは多くの場合最小二乗法を使って行う.これについては「最小二乗法」で述べる.
オプション名
|
デフォルト値
| |
Method | Automatic | 解法に使用するメソッド |
Modulus | 0 | 方程式を n を法とするものとする |
ZeroTest | (#0&) | ゼロであるかどうかのテストで記号的メソッドに使用する関数 |
LinearSolveのオプション
LinearSolveにはユーザがより細かくコントロールするための3つのオプションがある.オプションModulusおよびZeroTestは記号的な方法に適用できる.これらについては「記号的行列および厳密行列」のセクションで述べる.オプションMethodを使うと,特定の問題に適していることが知られているメソッドを指定することができる.デフォルトの設定はAutomaticで,LinearSolveは入力に基づいてメソッドを選択する.
特異行列
解が見つからない場合でも,問題に最も適した解を求めることはできる.最も近い解のうち,重要なもののひとつに,最小二乗法を使うものがある.これについては「最小二乗法」に記述されている.
同次方程式
この方程式は,行列が特異行列の場合は非零の解を持つ.行列が特異であるかどうかは,行列式を計算して確認できる.
精度の推定と計算
線形系の解の精度を求める重要な方法のひとつに,条件数 を求めるというものがある.これは各ノルムについて次のように定義されている.
行列方程式 について, の相対誤差は と の相対誤差の 倍である.そのため,条件数が解の精度を表すのである.行列の条件数が大きければ,その行列は悪条件であるという.悪条件の系からは良い解は得られない.非常に悪条件の系からは解は全く得られない.
Wolfram言語では,関数LinearAlgebra`MatrixConditionNumberを使って条件数の近似を計算する.
LinearAlgebra`MatrixConditionNumber[mat] | |
近似数行列の無限大ノルム近似条件数 | |
LinearAlgebra`MatrixConditionNumber[mat,Norm->p] | |
行列の p‐ノルム近似条件数(p は1,2,のいずれか) |
記号行列および厳密行列
LinearSolveはWolfram言語で表現できるすべての行列の型について使用できる.詳細は「行列の型」で述べる.ここでは純記号行列についての例を示す.
中間式を簡約する際,ZeroTestオプションが便利であることがある.
記号計算あるいは厳密計算に特化した方法はCofactorExpansion,DivisionFreeRowReduction,OneStepRowReduction等数多く存在する.詳細は「記号法」で述べる.
行の削減
行列の分解の保存
LinearSolveに引数を1つだけ適用する場合でも,2つ適用する場合と全く同じである.対応している入力行列も同じであり,例えば記号,厳密,疎行列の入力について期待どおりの結果を返す.同じオプションも使用できる.
メソッド
LinearSolveには行列方程式を解くための,それぞれ特有の問題に特化したさまざまな方法が実装されている.オプションMethodを使うと,その方法を指定することができる.このように,Wolfram言語では,行列方程式を解くための機能がすべて1つのインターフェースに集約されている.
オプションMethodのデフォルトの設定はAutomaticである.これはWolfram言語で頻繁に見かける設定であり,どのメソッドを使うかをシステムが自動的に決めるということを意味する.LinearSolveについては,入力行列が数値かつ密であるなら,LAPACKルーチンを使う解法使われる.数値かつ疎である場合は,マルチフロンタル直接解法が使われる.行列が記号的な場合は,記号計算専用ルーチンが使われる.
LAPACK
LAPACKは数値密行列の解法においてデフォルトのメソッドである.行列が正方行列かつ非特異の場合,実行列にはdgesv,dlange,dgeconルーチンが,複素数行列にはzgesv,zlange,zgeconルーチンが使われる.行列が正方行列ではない場合,または特異行列の場合は,実行列にはdgelss,複素数行列にはzgelssが使われる.LAPACKについての詳細は参考文献を参照のこと.
入力行列が任意精度数を使用している場合,LAPACKアルゴリズムは任意精度計算に拡張して使用される.
マルチフロンタル
マルチフロンタル法は,入力行列が疎行列の場合にデフォルトとなる直接解法である.これはMethodオプションで指定することもできる.
マルチフロンタル法に対する入力行列が密行列の場合,入力行列は疎行列に変換される.
マルチフロンタル法の実装は"UMFPACK"ライブラリを使用している.
クリロフ(Krylov)
クリロフ法は,偏微分方程式の数値的な解法で生じる系等,大規模で疎な線形系に適した反復解法である.Wolfram言語には2つのクリロフ法が実装されている.ひとつは対称正定値行列用の共役勾配法,もうひとつは非対称系用のBiCGSTAB(安定化双共役勾配法)である.適切なサブオプションを使うと,使われるメソッドと,その他の数多くのパラメータを設定することができる.
オプション名
|
デフォルト値
| |
MaxIterations | Automatic | 最大反復回数 |
Method | BiCGSTAB | 解法に使用するメソッド |
Preconditioner | None | 前処理 |
ResidualNormFunction | Automatic | 最小化するノルム |
Tolerance | Automatic | 反復の中止に使用する許容範\ 囲 |
クリロフ法のデフォルトのメソッドBiCGSTABはよりコストが高いが,多くの場合に効果的である.もう一方のメソッドである共役勾配法は対称正定値行列に適しており,解は常に収束する(収束速度が遅いこともある).行列が対称正定値行列でない場合,共役勾配法の解は収束しないこともある.
現時点で組み込まれているのはILU前処理のみである.しかし,入力行列に適用する関数を定義して,新たな前処理を定義することもできる.次の例では対角行列の解を求める.
一般に,この手の単純な前処理で効果があるような構造を持つ問題はないだろう.しかしこの例は,独自の前処理を作って使用する方法を示しているため,役立つだろう.
クリロフ法の入力行列が密の場合でも,このメソッドは行列/ベクトル操作に基づいているため,解を求めることができる.
クリロフ法は直接法には大きすぎる系にでも使用できる.しかし,これは一般的な解法ではなく,特に対角優勢の形の問題に適している.
コレスキー(Cholesky)
コレスキー法を密行列に適用する際,実行列についてはdpotrfやdpotrs,複素数行列についてはzpotrf,zpotrs等のLAPACK関数が使われる.疎行列の場合,コレスキー法は"TAUCS"ライブラリを使う.
記号的メソッド
最小二乗法
このような場合,を最小にする最も近い解を求めることができる.p は2にするのが特に一般的である.これにより最小二乗解が得られる.関数は で微分可能であり,また2-ノルムは直行変換でもそのまま維持されるため,これらは頻繁に使われる.
の階数が (列最大階数)の場合,最小二乗法問題に唯一解が存在(Golub,van Loan)し,それが次の線形系の解であることが示されている.
これは正規方程式と呼ばれる.この方程式を直接解いて最小二乗解を得ることもできるが,お勧めしない.なぜなら行列 が悪条件の場合に積 はさらに悪条件になるからである.最大階数行列の最小二乗解を求める方法については,「例題:最大階数最小二乗解」で詳しく探求する.
その他のノルム,例えば1やのノルムを最小にする近似解を求めることも可能である.「1-ノルムと無限ノルムの最小化」において,特定のタイプの行列に適した,あるいは他のノルムを最小にする過剰決定系の解を求める多くの方法について述べる.
過剰決定系の最小二乗解を求める一般的な方法として,特異値分解を用いて擬似逆行列といわれる行列を作るということが挙げられる.Wolfram言語ではPseudoInverseを使って計算する.この方法は,階数落ちの入力行列についても使える.以下にその基本的な方法を示す.
データフィット
科学計測の結果の多くはデータの順序対ある.計測されていない部分の予測をするためには,曲線をデータ点にフィットするのが一般的である.曲線が直線の場合は,すべてのデータについて,以下の未知の係数 , を求めることになる.
これは以下のように行列形式で表すことができ,線形系の過剰決定系の解法と等しいことが即座に分かる.
この場合,左辺の行列はヴァンデルモンド(Vandermonde)行列である.実際,係数は未知でも線形の関数なら,どのようなものでも使える.
関数FindFitは非常に一般的である.例えば,パラメータによっては線形でないデータにフィットすることもできる.
固有空間の計算
固有値問題の解法は,行列計算の主要分野のひとつであり,物理,化学,工学に広く応用されている.× 行列 の固有値は,固有多項式 の 個の根である.根 は行列のスペクトルと呼ばれる.各固有値 について
を満たすベクトル を固有ベクトルという.固有ベクトルから成る行列 が存在し,これが非特異の場合,対角要素に固有値を持つ対角行列を作るための相似変換に使うことができる.固有値の重要な応用分野の多くにおいて,このような行列の対角化が必要となる.
Wolfram言語には,固有値と固有ベクトルを計算するためのさまざまな関数がある.
Eigenvalues[m] | m の固有値のリスト |
Eigenvectors[m] | m の固有ベクトルのリスト |
Eigensystem[m] | {eigenvalues,eigenvectors}という形式のリスト |
CharacteristicPolynomial[m,x] | m の固有多項式 |
固有値の応用分野によっては,すべての固有値が必要な訳ではないこともある.Wolfram言語には固有値を一部だけ計算する方法もある.
Eigenvalues[m,k] | m の固有値の大きい方からk 個 |
Eigenvectors[m,k] | m の対応する固有ベクトル |
Eigenvalues[m,-k] | m の固有値の小さい方からk 個 |
Eigenvectors[m,-k] | m の対応する固有ベクトル |
オプション名
|
デフォルト値
| |
Cubics | False | 3×3の行列の場合に根号を使って表現する |
Method | Automatic | 解法に使用するメソッド |
Quartics | False | 4×4の行列の場合に根号を使って表現する |
ZeroTest | (#0&) | ゼロであるかどうかテストする記号的メソッドで使用する関数 |
Eigensystemのオプション
Eigensystemは4種類のオプションを使ってより詳細な調整ができるようになっている.オプションCubics,Quartics,ZeroTestは記号的な手法のときに用いる.これについては「記号行列と厳密行列」で述べる.オプションMethodは上級ユーザが問題に特に適しているメソッドを指定するためのものである.このオプションのデフォルトの設定はAutomaticで,一般に適していると考えられるメソッドがEigensystemによって自動的に選ばれる.
固有空間の特性
このセクションでは,固有空間の計算に特有の特性について述べる.× 行列の固有値は 次多項式の根に関連付けられるため,常に 個の固有値が存在する.
行列の対角化
行列の相似変換を行っても,行列の有用な性質の値,つまり行列式,階数,固有和等は変化しない.
記号行列と厳密行列
記号あるいは厳密行列についての計算が終ると,Wolfram言語は通常の計算と同様に,記号計算代数技術を使って記号解また厳密解を返す.
一般化された固有値
× 行列 について,一般化された固有値はその固有多項式 の 個の根である.一般化された各固有値について,
Eigenvalues[{a,b}] | a と b の一般化された固有値 |
Eigenvectors[{a,b}] | a と b の一般化された固有ベクトル |
Eigensystem[{a,b}] | a と b の一般化された固有空間 |
メソッド
固有値の計算は特定の問題に特化したいくつもの方法を使って行われる.オプションMethodを使うとその方法が選べる.このようにしてWolfram言語の持つすべての機能が1つのインターフェースですべて使える.
オプションMethodのデフォルトの設定はAutomaticである.これは一般に,Wolfram言語ではシステムがどのメソッドを使うかを自動的に決めるということである.固有値の計算については,入力が × の機械数行列で,必要とされる固有値の数が の20%より小さいならば,アーノルディ(Arnoldi)法が使われる.それ以外の場合で,入力行列が数値的なら,LAPACKルーチンを使うメソッドが使われる.記号行列の場合は,記号計算専用ルーチンが使われる.
LAPACK
LAPACKは固有値と固有ベクトルを求める際のデフォルトのメソッドである.行列が非対称の場合,実行列にはdgeevが,複素数行列にはzgeevが使われる.対称行列の場合は,実行列にはdsyevr,複素数行列にはzheevrが使われる.一般化された固有値を求める際は,実行列にはdggevが,複素数行列にはzggevが使われる.LAPACKについての詳細は参考文献を参照のこと.
入力行列が任意精度数を使用している場合,LAPACKアルゴリズムは任意精度計算に拡張して使用される.
アーノルディ
アーノルディメソッドは,有限個の固有値の計算に使われるインタラクティブなメソッドである.アーノルディメソッドの実装は"ARPACK"ライブラリを使用する.この方法で解くことのできる最も一般的な問題として,以下の固有値を,一部選択したものだけ計算するというものが挙げられる.
これはインタラクティブであり,固有値の一部のみの計算なので,疎行列に適していることが多い.このメソッドの利点のひとつに,シフト を適用して指定の固有ベクトル と固有値 ()について解けるということがある.
オプション名
|
デフォルト値
| |
BasisSize | Automatic | アーノルディ基底の大きさ |
Criteria | Magnitude | 解法に用いるメソッド |
MaxIterations | Automatic | 最大反復回数 |
Shift | None | アーノルディシフト |
StartingVector | Automatic | 使用する初期ベクトル |
Tolerance | Automatic | 反復の中止に用いる許容範囲 |
現実の計算で発生する,より大規模である疎な系の多くについても,アーノルディのアルゴリズムは極めて素早く収束できる.
記号的メソッド
行列の分解
このセクションでは,種々の基本的な行列の操作方法について述べる.これらは行列問題の解を求める際のブロックの形成によく使われる.分解は因数分解,直交変換,相似変換に分類される.
LU分解
行列のLU分解は,行列方程式を解く際にガウスの消去法の一環として頻繁に使われる.「線形系の解法」で述べたように,Wolfram言語ではLinearSolveがこれを行うため,行列方程式の解法にLU分解を使う必要がない.同じ左辺が使えるように行列の分解を保存したい場合は,LinearSolveに引数を1つ渡して使用すればよい.これについては「行列の分解の保存」で例を示した.
正方非特異行列 をピボットを部分選択してLU分解するときは,以下を満たす一意的な行列 ,, を使う.
ここで, は対角を含む下三角, は上三角, は置換行列である.これが求まったら,次の等価系の解を求めることで,行列方程式を解くことができる.
Wolfram言語では行列方程式の解法にLU分解を必要としないが,Wolfram言語にはLU分解の計算のための関数LUDecompositionがある.
LUDecomposition[m] | 部分ピボットを利用したLU分解 |
LUDecompositionは3要素のリストを返す.1つ目の要素は上・下三角行列の組合せ,2つ目の要素はピボットに使われる行を示すベクトル(置換行列と等価な置換ベクトル),3つ目の要素は推定条件数である.
LU分解の特徴のひとつに,下・上三角行列が同じ行列に保管されているということが挙げられる.個々の , 要素は次のようにして得られる.疎行列に要素を掛け合せることによって,どのように要素のベクトル化操作が行われるかに留意のこと.これにより,処理がより効率的になる.詳細は「プログラミング効率」で述べる.
コレスキー分解
対称正定値行列 のコレスキー分解は,以下を満たす一意の上三角行列 への分解である.
この分解はさまざまに使える.そのひとつに,三角行列の分解であるため,対称正定値行列を含む方程式の系の解法に使えるということが挙げられる(三角行列の分解で行列方程式を解く方法については「LU分解」で述べた).行列がこのような形であることが分かっているなら,コレスキー分解の方が計算が速いため,LU分解よりも適している.コレスキー分解を使って行列方程式を解く場合は,コレスキーメソッドを使ってLinearSolveで直接行える.これについては前セクションで述べた.
Wolfram言語ではコレスキー分解は関数CholeskyDecompositionを使って行う.
CholeskyDecomposition[m] | コレスキー分解 |
行列が正定値行列であるかどうかを確認する方法のひとつに,コレスキー分解が存在するかどうかを調べるというものがある.
コレスキー分解とLU分解
直交化
直交化法を使うと,任意の基底から正規直交基底が得られる.正規直交基底とは,以下を満たす基底である.
Wolfram言語では,関数Orthogonalizeを使ってベクトル一式を直交化することができる.
Orthogonalize[{v1,v2,…}] | 定の実ベクトルリストから正規直交一式を生成する |
デフォルトでグラム・シュミット(Gram–Schmidt)の直交化が計算されるが,他の直交化も多数計算することができる.
QR分解
列線形独立な長方行列 をQR分解すると,以下を満たす行列 , の計算が必要になる.
ここで の列は の列の直行基底を形成し, は上三角行列である,これはWolfram言語では関数QRDecompositionを使って計算できる.
QRDecomposition[m] | 行列のQR分解 |
方程式系の解法
非特異の正方行列 のQR分解は,LU分解と同様に,行列方程式 を解くのに使用できる.しかし,長方行列の場合でも,QR分解は行列方程式を解くのに有用である.
QR分解の典型的な応用法のひとつに,過剰決定系の最小二乗解を求めるというものがある.これは以下の正規方程式系を解いて行う.
のように簡約できる. は非特異であるため,さらに以下のようになる.
は三角行列なので,この系は簡単に解ける.この方法を実装するコードの例は「例題:最小二乗QR」を参照のこと.
特異値分解
長方行列 の特異値分解では,以下を満たす直交行列 , と対角行列 の計算が行われる.
行列 の対角成分は, の特異値と呼ばれる.Wolfram言語では,特異値は関数SingularValueList,完全な特異値分解は関数SingularValueDecompositionを使って計算する.
SingularValueList[m] | m の非零の特異値のリスト |
SingularValueDecomposition[m] | m の特異値分解 |
特異値分解はさまざまな分野に応用できる.行列の特異値からは, で表される線形変換の情報が分かる.例えば,単位球に を作用させると,特異値を半軸とする楕円体となる.特異値は行列の階数の計算に使用できる.この場合,非零の特異値の数が階数である.特異値は2-ノルムの行列の計算にも使える.ゼロ特異値に対応する 行列の列は,行列のゼロ空間である.
特異値の応用分野によっては,すべての特異値を必要としないこともある.Wolfram言語には特異値の一部のみを計算するメカニズムもある.
SingularValueList[m,k] | m の特異値の大きい方からk 個 |
SingularValueDecomposition[m,k] | m の対応する特異値分解 |
SingularValueList[m,-k] | m の特異値の小さい方からk 個 |
SingularValueDecomposition[m,-k] | m の対応する特異値分解 |
一般化特異値
× の行列 および × の行列 について,一般化された特異値は以下の分解の対で与えられる.
ここで は ×, は ×, は × であり, と は正規直交, は可逆である.
SingularValueList[{a,b}] | a と b の一般化された特異値 |
SingularValueDecomposition[{a,b}] | a と b の一般化された特異値分解 |
オプション
関数SingularValueListとSingularValueDecompositionにはToleranceオプションが適用できる.
このオプションは,特異値がゼロであるように扱われる大きさを指定するものである.デフォルトでは,最大の特異値の tol 分の1小さいものは削除される.ここで tol は機械数行列に対して100×$MachineEpsilonである.任意精度の行列については,tol はである. は行列の精度を示す.
シューア(Schur)分解
正方行列 の行列のシューア分解は,ユニタリ行列 U を求めることで行う.このユニタリ行列 は, を相似変換して対角に1×1,2×2ブロックを持つブロック上三角行列 を求めるのに使用できる(2×2ブロックは実行列 の固有値の複素共役対に対応する).このような形のブロック上三角行列は準上三角行列と呼ばれる.
シューア分解は必ず存在するため, の上三角行列への相似変換も必ず存在する.これは,行列の対角化で使用した固有空間の相似変換とは相反する.固有空間の相似変換は常に存在するわけではない.
SchurDecomposition[m] | 行列のシューア分解 |
一般化されたシューア分解
× の行列 , について,一般化されたシューア分解は以下のように定義されている.
ここで, と はユニタリ行列, は上三角行列, は準上三角行列である.
SchurDecomposition[{a,b}] | a と b の一般化されたシューア分解 |
実数を入力したとき,オプションRealBlockFormを使うと,複素数を含む結果と,上三角行列が得られる.
オプション
SchurDecompositionには以下の2つのオプションが使用できる.
SchurDecompositionのオプション
Pivotingは,結果の質を高めるためにピボットとスケールが使えるようにするオプションである.Trueと設定されているときは,ピボットとスケールが使え, への変更を表す行列 が返される.この新しく得られた行列を使ってシューア分解の定義を表すと,以下のようになる.
ジョルダン(Jordan)分解
正方行列 のジョルダン分解では,非特異行列 を求め,これを使って を相似変換し,特に簡単な三角構造を持つジョルダン形と呼ばれる行列 を生成する.
ジョルダン分解は常に存在するが,浮動小数点計算を行うのは困難である.しかし,厳密計算を行うと,この問題が解決される.
JordanDecomposition[m] | 行列のジョルダン分解 |
行列の関数
行列の関数の計算は,制御理論等多くの分野において一般的な問題である.正方行列 の関数は,行列の各要素の関数の応用とは異なる.要素レベルでの応用分野は,スケールの関数の応用に一致する特性を維持しない.
行列の関数を定義する方法は数多く存在する.その中でも便利な方法として,級数分解を考えるというものがある.これは,指数関数については以下のようになる.
この級数を計算する方法のひとつに, を対角化してととするというものがある.したがって, の展開は以下のように計算される.
この方法は の固有ベクトルの関数に一般化できる.これは行列の関数を定義するひとつの方法であるが,それを計算するよい方法は提供されていない.
Wolfram言語には行列の一般的な関数を計算する関数はない.しかし特有の関数がいくつか存在する.
MatrixPower[m,n] | 行列のn 乗 |
MatrixExp[m] | 行列の指数乗 |
m1.m2 | 行列の掛け算 |
Inverse[m] | 逆行列 |
行列のパラメータ関数を,微分方程式を解いて計算する方法は,「例題:NDSolveを使った行列関数」で述べる.