行列の計算

29.5. 行列の計算

Mathematica では行列の計算もすることができます。この節では、行列に関連する様々な計算のやり方を紹介します。

行列の入力 #

まず行列を入力するには、メニューバーを挿入表・行列新規作成とたどります。

すると行列を作成するためのダイアログが開きます。

ここの行数と列数を入力して OK ボタンを押すと、行列ができます。たとえば行数と列数をそれぞれ 3 と 4 にして OK ボタンを押すと、次のようにサイズ 3×4 の行列がノートブックに現れます。

よく使われる 2 次正方行列は、基本数学アシスタントのパレットからも入力できます。パレットの「タイプセット」のところをクリックして展開すると、いかにも行列らしいボタンがあるのが分かります。

各セルをクリックすることで数を入力できます。また、成分の入力中に を押すと右隣のセルに、

を押すと左隣のセルに移動することができます。

行列の計算 #

行列の足し算は数と全く同様にできます。

たとえば次の図のように 2 つの行列の間に + をはさんで 

を押すと、行列を足した結果が出てきます。

計算結果の見た目が行列の格好をしていませんが、{6, 8} が 1 行目、{10, 12} が 2 行目に対応しています。

このままでも読めなくはないですが、MatrixForm 関数を使うと見やすい行列の形にすることができます。

Mathematica では F[x] と x // F が同じ意味を持ちます。

なので上の MatrixForm を用いた表示は、次のようにしても実現できます。

見やすいほうが嬉しいので、以下で行列の演算をするときは全て最後に // MatrixForm をつけることにします。

行列のスカラー倍は、行列の前に数を書くだけで計算できます。

たとえば次の例のようにして、行列を 3 倍することができます。

行列のかけ算をするには注意が必要です。二つの行列の間に * を書くと、普通の行列の積ではなく、成分同士のかけ算になってしまいます。

たとえば次の例では、2 次の単位行列をかけているにもかかわらず (1,2) 成分と (2,1) 成分が 0 へと変化しています。これで確かに、成分ごとのかけ算が行われたと分かります。

普通の行列のかけ算をするには、行列の間にドット . を打ちます。

かけ算の記号 * が成分ごとの積を意味することと対応して、行列の巾乗も成分ごとになってしまいます。

たとえば {{0, 1}, {1, 1}} を巾乗の記号で 3 乗すると、何も変わりません。

正しく 3 乗するには MatrixPower 関数を使います。 次の図のようにすれば 3 乗が計算できます。 4 乗、5 乗なども試して、正しく計算できていることを確認してください。

正方行列が正則なときは逆行列が取れます。逆行列は Inverse 関数で計算できます。

たとえば Inverse[{{1, 1}, {0, 1}}] とすると、行列 {{1, 1}, {0, 1}} の逆行列が求まります。

この結果と {{1, 1}, {0, 1}} の積を取ると、確かに単位行列になります。

転置と対角和(トレース) #

行列の転置を取るには Transpose 関数を使います。

たとえば Transpose[{{a}, {b}}] を入力して 

を押すと、縦ベクトルが横ベクトルに変わります。

横ベクトルと縦ベクトルをかければ、普通の内積が出てきます。

また複素共役転置は ConjugateTranspose 関数を使うと計算できます。

次の例では、ベクトル{{2+3i}, {1+2i}} の Hermite 内積でのノルムを計算しています。

正方行列の対角和(トレース)を計算するには Tr 関数を使います。

例えば Tr[{{a, b}, {c, d}] を計算させると、確かに a+d が出てきます。

勝手な行列 A, B に対し、AB と BA の対角和は一致します。この事実を2次正方行列の場合に確認しましょう。

また転置とトレースを組み合わせれば、行列の各成分の二乗和が求まります。

行列式の計算 #

正方行列の行列式を計算するには Det 関数を使います。Det[] のかっこの中に正方行列を書いて  を押すと、行列式を計算してくれます。

行列の成分は数である必要はなく、文字が入っていても計算できます。たとえば次の例では Vandermonde の行列式を計算しています。

完全に展開された結果が表示されますが、上の計算に引き続き Factor[%] と打って因数分解すると差積の形になります。

行列式を利用すれば、行列の固有多項式も計算できます。たとえば次の例では、行列 {{0, 0, 1}, {1, 0, 0}, {0, 1, 0}} の固有多項式を計算しています。名前から明らかですが、式中の IdentityMatrix 関数は単位行列を表す関数です。

固有値、固有ベクトルの計算 #

上で Det 関数を用いて固有多項式を計算しましたが、固有多項式は CharacteristicPolynomial 関数でも計算できます。すぐ上の例をもう一度計算してみましょう。

同じ行列を何回も使うので A とおいておきます。

CharacteristicPolynomial 関数を使うと、符号は逆になっていますが同じ多項式が出ます。2番目の引数の t は、固有多項式の変数を表します。
Eigenvalues 関数を使うと、行列の固有値一覧が表示されます。今の行列の場合、1 の 3 乗根が 3 つとも出てきます。

また Eigenvectors 関数を使えば、今度は各固有値ごとに固有ベクトルを得ることができます。ただし出力結果は列ベクトルになっています。

正方行列の Jordan 標準形は JordanDecomposition 関数で計算できます。JordanDecomposition 関数は 2 つの行列を返してきます。たとえば上の例では、次のような行列が得られます。

2 つ目の行列が Jordan 標準形です。1 つ目の行列は、標準形に変形する際に使う行列です。1 つ目に出てきた行列を P とおきます。

\(P^{-1}AP\) を計算すると、えげつない行列が出てきます。

しかし Simplify をすれば見やすい形になり、先ほどの固有値の計算結果通りになることが分かります。

行列の指数関数 #

普通の指数関数 Exp[x] は巾級数で定義されます。

この巾級数には正方行列を代入することができます (無限和なので各成分が収束するか評価する必要がありますが、実は任意の行列に対して収束することが証明できます)。そこで、この巾級数で行列の指数関数を定義します。

Mathematica で行列の指数関数を計算するには MatrixExp 関数を使います。たとえば行列 {{0, t, 0}, {0, 0, t}, {0, 0, 0}} の指数関数を計算するには次のようにします。

ちなみに、いま MatrixExp を計算した行列は 3 乗すると 0 になります。

よって収束の議論をするまでもなく、指数関数の定義に基づいて計算することが可能です。MatrixExp 関数で計算した結果と一致しますね。

もちろん、巾零行列でなくても指数関数は計算できます。たとえば行列 {{0, -t}, {t, 0}} の指数関数を計算すると回転行列が現れます。

これにより、2 次元の場合に交代行列の Exp が回転行列になることが分かります。大げさに言えば、回転行列のなす Lie 群 SO(2) とその Lie 環 so(2) の対応を見ていることになります。

関数の計算と微積分 行列の計算 グラフの描き方