Table[i^2+j, {i,3},{j,3}]
この行列を配列した形にするためには次のようにする。 ここで%は前の結果を表す。
MatrixForm[%]
同様にして(i,j)成分がi-j, (i-j)2, i2+ j2 であるような行列は次で与えられる。
Table[i - j, {i,4},{j,4}]
MatrixForm[%]
Table[(i - j)^2 , {i,4},{j,4}]
MatrixForm[%]
Table[i^2 + j^2 , {i,4},{j,4}]
MatrixForm[%]
行列は次のように与えることもできる。ここで;をつけると行列が表示されないので注意する。 これは(i,j)成分がa[i,j]であるような行列を定義してそれを表示する。
Array[a,{3,3}]
MatrixForm[Array[a,{3,3}]]
対角行列は次のようにして与える。{ 1,2,3,4,5 }はこの順に対角成分を与える。
2行目は行列表示で表示させている。
DiagonalMatrix[{1,2,3,4,5}]
MatrixForm[%]
次は単位行列である。[5]は行列が5×5であることをあらわす。
IdentityMatrix[5]
MatrixForm[%]
上三角行列と下三角行列
次は下三角行列と上三角行列を表わす。{i,5}, {j,5}は行列の列と行がそれぞれ5であることをあらわす。
[i> = j,2,0] の2と0をかえると行列の成分が入れ替わる。これを確認してみよ。
ここでi > = j,2,0 はiがjより大きいかあるいは等しい時は2として、それ以外では0とすることを
意味する。不等号を入れ替えたりすれば上三角と下三角を入れ替えることができる。
また、数値は文字にしてもよい。確認せよ。
Table[If[i > = j,2,0],{i,5},{j,5}]
MatrixForm[ Table[If [i > = j,2,0],{i,5},{j,5}] ]
すなわち次のようにする。
Table[If[i < = j,2,0],{i,5},{j,5}]
MatrixForm[ Table[If [i < = j,2,0],{i,5},{j,5}] ]
3重対角行列を構築する。このためには次のようにする。
命令について説明しておくと、Switchは i-j を評価してその値が-1であればaを返し、0であればbを返し、
1であればcをかえす。それ以外では0を返す。値あるいは式を変えることにより
多くの行列を与えることができる。
Table[Switch[i-j, -1, a, 0, b, 1, c, _, 0], {i, 5}, {j, 5}]
MatrixForm[%}
たとえば次のようになる。
Table[Switch[i+j-5, -2, a^2, -1, a, 0, b, 1, c, _, 0], {i, 5}, {j, 5}]
MatrixForm[%]
乱数行列の構成は次のようになる。各成分には乱数が与えられる。
Table[Random[ ], {3}, {3}]
MatrixForm[%]
ベクトルを表わすには { a,b,c,d }のように表わす。ベクトルの加法、減法は
次のようにして計算する。計算のしかたは明らかであろう。
{1,2,3}+{2,-1,-2}
k{1,2,3}
次元
ベクトルの次元は次のようにして求まる。
Dimensions[{a,b,c,d}]
Dimensions[{-1,2,4,5,4,0,1}]
内積
内積は次のようにして計算する。ここで積は.点で表す。
{1,2,3}.{-1,2,-3}
{a,b,c}.{k,2 k,3 k}
ベクトルの対数をとったり、微分したりする時は次のようにする。 Dの中の括弧はベクトル関数をあらわし最後のxあるいはyは微分する変数をあらわす。 したがって、微分は偏微分の意味で取られる。
Log[{a,b,c}]
D[{1+2x,x^2,x^3+x^2},x]
D[{1+2x,x^2,x^3+x^2},y]
D[{1+2x y, x^2 y, x^3 y^2 + x^2}, y]
行列の積は内積と同じ記号を用いる。積は右からも左からも計算できる。
{{1,2,3},{0,1,3},{1,2,3}}.{a,b,c}
{{1,2,3},{0,1,3},{1,2,3}}.{{a,b,c},{1,2,3},{-1,0,0}}
MatrixForm[%]
A = {{1,2},{2,3}}; v={x,y}
A.v
v.A
次の例を参照のこと。行列の積が文字を含む形で計算されている。
A ={{1,2,3},{0,1,3},{1,2,3}}; B={{a,b,b},{1,2,3},{-1,a,b}};
MatrixForm[A]
MatrixForm[B]
A.B
MatrixForm[%]
行列の積はもちろん正方行列でなくても有効である。次の例を参考のこと。 Transposeは転置行列をあらわす。行列の積が定義できるための条件を注意する。
A ={{1,2,3,0,-1},{0,1,3,0,0},{1,2,3,5,6}}; B={{a,b,b},{1,2,3},{-1,a,b}, {0,0,0},{1,2,-1}};
MatrixForm[A]
MatrixForm[B]
A.B
MatrixForm[%]
A ={{1,-2,0},{a,1,3},{1,0,3}}; B={{a,b,b},{1,2,3}};
MatrixForm[A]
MatrixForm[B]
A.Transpose[B]
MatrixForm[%]
A ={{1,2,3,4,5},{0,1,3,0,0}}; B={{a,b,b,1,1},{1,2,3,2,1},{-1,a,b,1,0}};
MatrixForm[A]
MatrixForm[B]
A.Transpose[B]
MatrixForm[%]
2次形式
これを用いて2次形式を次のように表わすことができる。
A = {{1,2},{2,3}}; v={x,y}
v.A.v
A = {{1,2},{2,-1}}; v={x,y}
v.A.v
Clear[A,v]
ここでClear[A,v]は変数A, vの定義を初期化する。つぎの用いかたを参考のこと。
A={{1,2},{2,-1}}
A
Clear[A]
A
もっと大きいサイズの行列に対しても2次形式を計算できる。 ここでSimplifyは表現を簡略化して最も簡単な表現にする。
A = {{1,2,4},{2,3,-1},{5,4,-1}}; v={x,y,z}
MatrixForm[A]
MatrixForm[v]
v.A.v
Simplify[v.A.v]
Clear[A,v]
逆行列は次のようにして計算される。Inverse[A]は逆行列をもとめる命令である。 %.Aは計算結果ともとの行列の積を求めている。この結果は単位行列になる。 Together[% ]は計算結果をまとめる。これを行列形に書くと求める結果である。
A = {{a,b},{c,d}}
Inverse[A]
MatrixForm[%]
Inverse[A].A
Together[%]
MatrixForm[%]
これをいくつかの例で確認する。
A ={{1,0,0},{0,2,-1},{0,-2,3}}
Inverse[A]
MatrixForm[%]
A ={{1,0,2},{0,2,-1},{1,-2,2}}
MatrixForm[A]
MatrixForm[%]
A ={{1,0,2,4},{0,2,-1,0},{1,-2,2,-2},{0,0,2,5}}
MatrixForm[%]
対角行列の逆行列は対角成分の逆数を並べた対角行列である。すなわち
A=DiagonalMatrix[{1,2,3,4,5}]
Inverse[A]
MatrixForm[%]
転置行列
行列の転置をするには次のようにする。
A ={{1,0,0},{0,2,-1},{0,-2,3}}
MatrixForm[A]
Transpose[A]
MatrixForm[Transpose[A]]
A ={{1,0,2,4},{0,2,-1,0},{1,-2,2,-2},{0,0,2,5}}
MatrixForm[Transpose[A]]
行列の積を繰り返し計算する。行列の指数関数
行列の積をくり返し、計算する時は次のようにする。
MatrixPower[A,3]
MatrixForm[MatrixPower[A,3]]
MatrixForm[MatrixPower[A,30]]
行列の指数関数を計算するためには次のようにする。 ここで2番目は指数関数の第6項までの和を求めている。第3番目の表現は mの1000万次のべきを求めています。
m={{0.4,0.6},{0.525,0.47}}
MatrixExp[m]
Sum[MatrixPower[m,i]/i!,{i,0,6}]
MatrixPower[m,10^7]
行列式
A={{a,b},{c,d}}
MatrixForm[A]
Det[A]
次の行列は回転に対応した行列である。これは直交行列という。すなわち それ自身の転置行列は逆行列である。
A={{Cos[x], - Sin[x] },{Sin [x], Cos [x]}}
MatrixForm[A]
この行列は直交行列である。行列式の値は1か-1である。Simplify[%, Trig -> True]は三角関数の変形を おこなって簡単な表示を求める。
MatrixForm[Transpose[A]]
Transpose[A].A
MatrixForm[%]
Simplify[%%, Trig -> True]
MatrixForm[%]
Det[A]
Simplify[%, Trig -> True]
つぎに、3次の行列式を計算する。最初は一般的な公式である。 つぎに具体的な例を計算する。
A= Array[a,{3,3}]
MatrixForm[A]
Det[A]
A={{1,0,-1},{-1,2,4},{4,a,c}}
MatrixForm[A]
Det[A]
4次の行列式を計算する。
A ={{1,0,2,4},{0,2,-1,0},{1,-2,2,-2},{0,0,2,5}}
MatrixForm[A]
Det[A]
行列式の積
行列式の積に関しては|AB|=|A||B|である。これを例で確認する。
A ={{1,0,2,4},{0,2,-1,0},{1,-2,2,-2},{0,0,2,5}}
B ={{4,0,2,1},{3,2,1,0},{1,-2,3,-2},{0,1,2,1}}
MatrixForm[A]
MatrixForm[B]
Det[A]
Det[B]
Det[A.B]
Det[A]*Det[B]
Vandermondeの行列式
Vandermondeの行列式を計算する。順に計算する。
A = { {1,1},{a,b} }
MatrixForm[%]
Det[A]
Simplify[%]
A = { {1,1,1},{a,b,c},{a^2,b^2,c^2}}
MatrixForm[%]
Det[A]
Simplify[%]
A = { {1,1,1,1},{a,b,c,d},{a^2,b^2,c^2,d^2},{a^3,b^3,c^3,d^3}}
MatrixForm[%]
Det[A]
Simplify[%]
A = { {1,1,1,1,1},{a,b,c,d,e},{a^2,b^2,c^2,d^2,e^2},{a^3,b^3,c^3,d^3,e^3},{a^4,b^4,c^4,d^4,e^4} }
MatrixForm[%]
Det[A]
Simplify[%]
巡回行列式
A = { {a,b,c,d,e},{e,a,b,c,d},{d,e,a,b,c},{c,d,e,a,b},{b,c,d,e,a} }
MatrixForm[%]
Det[A]
Factor[%, Extension -> {Sqrt[-1]}]
固有多項式
固有多項式を計算する。
A={{a,b},{c,d}}
MatrixForm[A]
Det[A - x IdentityMatrix[2]]
固有多項式は -b c + a d - a x - d x + x2である。 ケーリーハミルトンの定理を確認する。
(-b c + a d) IdentityMatrix[2] - a A - d A + A.A
MatrixForm[%]
別の例を計算する。
A={{Cos[x], - Sin[x] },{Sin [x], Cos [x]}}
MatrixForm[A]
Det[A - x IdentityMatrix[2]]
Simplify[%, Trig -> True]
固有多項式は1 + x2 - 2 x Cos[x] である。ケーリーハミルトンの定理を確認する。
IdentityMatrix[2] - 2 Cos[x] A + A.A
MatrixForm[%]
Simplify[%, Trig -> True]
A ={{1,0,2,4},{0,2,-1,0},{1,-2,2,-2},{0,0,2,5}}
MatrixForm[A]
Det[A - x IdentityMatrix[4]]
固有多項式は14 - 38 x + 33 x2 - 10 x3 + x4である。 ケーリーハミルトンの定理を確認する。
14 IdentityMatrix[4] - 38 A + 33 A.A - 10 A.A.A + A.A.A.A
MatrixForm[%]
クラーメルの公式
クラーメルの公式は非特異な係数行列をもつ連立一次方程式の解を与える公式である。 すなわち、係数行列の行列式が0でない場合の解の公式を与える。 これを具体的にあたえる。
A ={{1,0,2,4},{0,2,-1,0},{1,-2,2,-2},{0,0,2,5}};
X ={x,y,z,w};
B={a,b,c,d};
MatrixForm[A]
MatrixForm[X]
MatrixForm[A.X]
係数は非特異である。実際行列式を計算すると
Det[A]
は14である。クラーメルの公式を計算するためにはつぎの4つの行列式を計算する。
A1 = {{a,0,2,4},{b,2,-1,0},{c,-2,2,-2},{d,0,2,5}};
A2 = {{1,a,2,4},{0,b,-1,0},{1,c,2,-2},{0,d,2,5}};
A3 = {{1,0,a,4},{0,2,b,0},{1,-2,c,-2},{0,0,d,5}};
A4 = {{1,0,2,a},{0,2,-1,b},{1,-2,2,c},{0,0,2,d}};
MatrixForm[A1]
MatrixForm[A2]
MatrixForm[A3]
MatrixForm[A4]
従って、解は次で与えられる。
(x,y,z,w) =
Det[A1]/Det[A]
Det[A2]/Det[A]
Det[A3]/Det[A]
Det[A4]/Det[A]
これが解であることを確かめる。A.Xは方程式の左辺をあたえる。下の命令は 左辺にx,y,z,wの値を代入することを意味する。
A.X /. {x ->Det[A1]/Det[A], y ->Det[A2]/Det[A], z->Det[A3]/Det[A], w->Det[A4]/Det[A]}
Simplify[%]
別の例を計算してみる。
A ={{1,0,2,4,1},{0,2,-1,0,-1},{1,-2,2,-2,0},{0,0,2,5,0},{1,-1,0,1,-1}};
X ={x,y,z,u,v};
B={a,b,c,d,e};
MatrixForm[A]
MatrixForm[X]
MatrixForm[A.X]
係数は非特異である。実際行列式を計算すると
Det[A]
は-61である。クラーメルの公式を計算するためにはつぎの5つの行列式を計算する。
A1 = {{a,0,2,4,1},{b,2,-1,0,-1},{c,-2,2,-2,0},{d,0,2,5,0},{e,-1,0,1,-1}};
A2 = {{1,a,2,4,1},{0,b,-1,0,-1},{1,c,2,-2,0},{0,d,2,5,0},{1,e,0,1,-1}};
A3 = {{1,0,a,4,1},{0,2,b,0,-1},{1,-2,c,-2,0},{0,0,d,5,0},{1,-1,e,1,-1}};
A4 = {{1,0,2,a,1},{0,2,-1,b,-1},{1,-2,2,c,0},{0,0,2,d,0},{1,-1,0,e,-1}};
A5 = {{1,0,2,4,a},{0,2,-1,0,b},{1,-2,2,-2,c},{0,0,2,5,d},{1,-1,0,1,e}};
MatrixForm[A1]
MatrixForm[A2]
MatrixForm[A3]
MatrixForm[A4]
MatrixForm[A5]
従って、解は次で与えられる。
(x,y,z,u,v) =
Det[A1]/Det[A]
Det[A2]/Det[A]
Det[A3]/Det[A]
Det[A4]/Det[A]
Det[A5]/Det[A]
これが解であることを確かめる。A.Xは方程式の左辺をあたえる。下の命令は 左辺にx,y,z,u,vの値を代入することを意味する。
A.X /. {x ->Det[A1]/Det[A], y ->Det[A2]/Det[A], z->Det[A3]/Det[A], u->Det[A4]/Det[A], v->Det[A5]/Det[A]}
Simplify[%]
連立一次時方程式の解を求めるにはあとで述べるようにべつのもっと効率的な方法もある。 戻る
固有値、固有ベクトルの計算は直接手計算で求めるのは大変であるが、mathematicaでは
次のようにして簡単に計算できる。
最初は固有値、固有ベクトルを正確に求める。固有値の計算はEigenvalues[A]を
用いる。固有ベクトルはEigenvectors[A], 固有値と固有ベクトルを同時に求めたい時は
Eigensystem[A]を用いる。
必ずしも正確な値でなくてもよいときは、N[A]で近似値を求める。Chop[%]は
近似値の零に近い数値を切り捨てる時に用いる。
A ={{1,0,2,4},{0,2,-1,0},{1,-2,2,-2},{0,0,2,5}};
Eigenvalues[A]
Eigenvectors[A]
Eigensystem[A]
Eigenvalues[N[A]]
Eigenvectors[N[A]]
Chop[%]
Eigensystem[N[A]]
Chop[%]
固有値の正則な変換に関する不変性
次の行列の固有値は2,4,6である。
A = {{3, -1,0},{-1,3,0},{0,0,6}};
MatrixForm[%]
Eigenvalues[A]
固有値は任意の正則な行列による変換で不変である。実際、次の行列を考える。 行列式は-24であり、正則である。この行列でAを変換する。 次に、変換された行列の固有値を求める。固有値は変わらない。
P = {{1,-1,3},{-5,2,1}, {3,0,1}};
Det[P]
Inverse[P].A.P
MatrixForm[%]
Eigenvalues[%%]
対角化
異なる固有値を持つ行列は正則行列で対角化できる。次の例をみる。
A = {{3, -1,0},{-1,3,0},{0,0,6}};
MatrixForm[%]
P = Eigenvectors[A]
Inverse[P].A.P
MatrixForm[%]
次の回転の行列に対して、固有値と固有ベクトルを求める。 つぎに固有ベクトルを用いて変換すると対角化できる。
A ={{Cos[x], -Sin[x]},{Sin[x],Cos[x]}};
MatrixForm[%]
Eigenvalues[A]
P = Eigenvectors[A]
Eigensystem[A]
Inverse[P].A.P
Simplify[%]
MatrixForm[%]
対称行列の固有値
よく知られているように、対称行列の固有値は実数である。これを例で確認しよう。 対称行列の固有値は2次形式の標準形の決定において重要な役割を果たす。
A ={{1, 2, -1},{2,-1,1},{-1,0,2}};
MatrixForm[%]
Eigenvalues[A]
Eigenvectors[A]
Eigensystem[A]
m = {{1,5},{2,3}}
m.{x,y}=={a,b}
Solve[%,{x,y}]
解の表示が得られたであろうか。それでは次のように入力してみよう。
連立一次方程式を解くには次のような方法もある。ここでは(a,b) =(2,4)とし、
係数行列mはそのままとしてみる。
つぎに一般形の解をもとめる。最後には授業でやったように、mの逆行列をかける。
これでおなじ解が求まることを確認せよ。
LinearSolve[m,{2,4}]
LinearSolve[m,{a,b}]
Inverse[m].{a,b}
さて、mの形をもっと一般にして解を求めてみよう。まず係数行列の設定を
初期化し、新しい設定をする。次に方程式を解く。
Clear [m]
m={{1,2,3,4},{2,4,5,0},{1,0,1,0},{-1,0,2,1}}
LinearSolve[m,{-1,2,a,b}]
Together[%]
ここでTogether[%]は項を整理する。もっと一般の場合にも次のようにできる。
LinearSolve[m,{a,b,a,b}]
Together[%]
一般に未知数の数と方程式の数が等しい
連立一次方程式が与えられた勝手な右辺のベクトルにたいして、解を持つためには
その行列式が0でないことが必要十分である。今の場合行列式は次のように計算できる。
Det[m]
行列式が零の場合にどうなるかやってみよう。
Clear[m]
m={{1,2},{1,2}}
Det[m]
LinearSolve[m,{2,3}]
解を求めることができなかったことがわかるとおもう。
連立一次方程式において今まで係数行列は数値であったが、これが文字あるいは関数を含む場合にも
解を求めることができる。
m={{Sin[t],Cos[t]},{Sin[t]^2, Cos[t]^2}}
LinearSolve[m,{1,2}]
Simplify[%]
Det[m]
Factor[%]
ここで最後の Simplify[%]は表現を簡単にする。
またFactor[%]は表現を因数分解する。
ここで N[{{1,5},{-7,3}}] でNがあるのは数値行列であることをあらわす。
これを {{1,5},{-7,3}} とするとどうなるか試してみよ。
2番目の式ではqが直交行列であることを確かめている。
つぎの式ではこのときあらわれる端数を処理している。
最後にQR分解の定義にしたがって、分解する前の行列が得られることを確かめている。
{q,r}=QRDecomposition[ N[{{1,5},{-7,3}}]]
Transpose[q].q
Transpose[q].q //Chop
Transpose[q].r
同じ事をもう少し複雑な行列にたいして行なう。
{q,r}=QRDecomposition[ N[{{1,5,3},{-7,3,0},{0,2,0}}]]
Transpose[q].q //Chop
Transpose[q].r //Chop
次にSchur分解を行なう。
ここで行なっていることは前と同様であるので省略する。
{q,r}=SchurDecomposition[ N[{{1,5,3},{-7,3,0},{0,2,0}}]]
Transpose[q].q //Chop
q .r. Transpose[q] //Chop
{q,r}=SchurDecomposition[ N[{{1,5,3},{-7,3,0},{1,2,1}}]]
Transpose[q].q //Chop
q .r. Transpose[q] //Chop
戻る
まず2 × 4 × 3テンソルについて述べます。
最初の2つはテンソルの定義のしかたを述べています。
3番目はこれを行列の形に表現しています。
t = Table[i+j+k, {i,2},{j,4},{k,3}]
Array[(#1+#2+#3) & , {2,4,3}]
MatrixForm[t]
次にテンソルの次元、およびその成分の指定のしかたについて、述べます。さらにテンソルの階数をもとめます。
テンソルの階数はその成分を指定するのに必要な指標の数です。成分の指定法はt[[2,3,2]]は
テンソルの(2,3,4)成分を指定します。
Dimensions[t]
t[[1,3,2]]
t[[2,3,2]]
t[[2,4,1]]
TensorRank[t]
戻る