LA(線形代数)
- 行列・ベクトル生成(MatrixVector)
- 内積外積(DotProduct,CrossProduct)
- 行列の基本操作,掃き出し(LUDecomposition)
- 逆行列(MatrixInverse)
- 固有値(EigenVectors)
行列・ベクトル生成(MatrixVector)
線形代数の計算にはあらかじめ関数パッケージ(LinearAlgebra)を呼び出しておく.
> with(LinearAlgebra):
ベクトルの生成(Vector)
ベクトルの生成は,
> v1 := Vector([x, y]);
$$
{\it v1}\, := \, \left[ \begin {array}{c} x\\ y\end {array} \right]
$$
通常の方法では,縦(列)ベクトル(column)ができることに注意.横(行)ベクトル(row)を作るには,明示する必要あり.
> v2 := (Vector[row])([x, y, z]);
$$
{\it v2}\, := \, \left[ \begin {array}{ccc} x&y&z\end {array} \right]
$$
新聞の囲み記事(列)がcolumn,劇場の座席(行)はrow.
行列の生成(Matrix)
標準的な行列(Matrix)の生成は,
> A0 := Matrix([[1, 2, 3], [4, 5, 6]]); #res: 省略
リストリストからの変換は,
> LL1 := [[1, 2], [3, 4]]:
> A1 := Matrix(LL1);
$$
{\it A1}\, := \, \left[ \begin {array}{cc} 1&2\\ 3&4\end {array} \right]
$$
単位行列の生成は,
> E := IdentityMatrix(2);
$$
E\, := \, \left[ \begin {array}{cc} 1&0\\ 0&1\end {array} \right]
$$
対角行列を生成するDiagonalMatrixもある.同じことは以下のようにしても生成が可能.
> Matrix(2,2,shape=identity);
$$
\left[ \begin {array}{cc} 1&0\\ 0&1\end {array} \right]
$$
縦横ベクトル・行列の簡易作成法(MVShortcut)
かぎかっこ($<\cdots>$)を使って,ベクトルあるいは行列を直感的に作ることが可能.カンマで区切ると縦に積み,縦棒で区切ると横に積む.セミコロンで区切るとそこで次の行へ.
> v1:=<x,y>; #縦ベクトル,列
> v2:=<x|y|z>; #横ベクトル,行
> A1:=<1,2;3,4>; #2x2行列
> <A1|v1>; #2x3行列(拡大係数行列などの作成)
> ?MVShortcut; #res:参照
$$
{\it v1}\, := \, \left[ \begin {array}{c} x\\ y\end {array} \right] \notag \\
{\it v2}\, := \, \left[ \begin {array}{ccc} x&y&z\end {array} \right] \notag \\
{\it A1}\, := \, \left[ \begin {array}{cc} 1&2\\ 3&4\end {array} \right] \notag \\
\left[ \begin {array}{ccc} 1&2&x\\ 3&4&y\end {array} \right] \notag
$$
行列,ベクトルの成分の抽出(MVextraction)
行列A1の1行2列の成分を取り出すには,
> A1[1,2]; #res: 2
行列の一部を行列として取り出すには
> A1[1..2,1..2];
$$
\left[ \begin {array}{cc} 1&2\\ 3&4\end {array} \right]
$$
2x2行列の2列目(行の長さに関係なく)でつくるベクトルは
> A1[..,2..2];
$$
\left[ \begin {array}{c} 2\\ 4\end {array} \right]
$$
同じことが,行(Row)あるいは列(Column)抽出関数でもできる.使い方は次の通り.
> Column(A1,2);
$$
\left[ \begin {array}{c} 2\\ 4\end {array} \right]
$$
- 次の行列,ベクトルを作れ.
(a)$ \left[ \begin {array}{ccc} 3&3&3\\ 3&3&3\end {array} \right] $, (b)$ \left[ \begin {array}{ccc} 1&0&0\\ 0&1&0\end {array} \right] $, (c)$ \left[ \begin {array}{ccc} 1&2&3\end {array} \right] $, (d)$ \left[ \begin {array}{ccc} 1&0&0\\ 0&2&0\\ 0&0&3\end {array} \right] $, (e)$ \left[ \begin {array}{cc} x&{x}^{2}\\ {x}^{2}&{x}^{3}\end {array} \right] $, (f)$ \left[ \begin {array}{ccc} 1&2&3\\ 4&5&6\\ 7&8&9\end {array} \right] $
> Matrix([3,3,3],[3,3,3]]);
> Matrix(<3,3|3,3|3,3>);
$$
\left[ \begin {array}{ccc} 3&3&3\\ 3&3&3\end {array} \right]
$$
そのまま直打ちしてもいいが,少し賢い生成法も記しておく.詳しくはヘルプ参照.
> Matrix(2,3,3);
$$
\left[ \begin {array}{ccc} 3&3&3\\ 3&3&3\end {array} \right]
$$
> Matrix(2,3,shape=identity);
$$
\left[ \begin {array}{ccc} 1&0&0\\ 0&1&0\end {array} \right]
$$
> Vector[row]([1,2,3]);
> Vector(<1|2|3>):
$$
\left[ \begin {array}{ccc} 1&2&3\end {array} \right]
$$
> with(LinearAlgebra):
> V:=Vector[row]([1,2,3]);
> DiagonalMatrix(V);
$$
V\, := \, \left[ \begin {array}{ccc} 1&2&3\end {array} \right] \notag \\
\left[ \begin {array}{ccc} 1&0&0\\ 0&2&0\\ 0&0&3\end {array} \right] \notag
$$
> f:= (i,j) -> x^(i+j-1):
> Matrix(2,f);
$$
\left[ \begin {array}{cc} x&{x}^{2}\\ {x}^{2}&{x}^{3}\end {array} \right]
$$
> Matrix(3,[seq(i,i=1..9)]);
$$
\left[ \begin {array}{ccc} 1&2&3\\ 4&5&6\\ 7&8&9\end {array} \right]
$$
> n:=3:
> f:=(i,j)->(i-1)*n+j;
> Matrix(3,3,f);
$$
f\, := \,( {i,j} )\mapsto \left( i-1 \right) n+j \notag \\
\left[ \begin {array}{ccc} 1&2&3\\ 4&5&6\\ 7&8&9\end {array} \right] \notag
$$
内積外積(DotProduct,CrossProduct)
線形代数の計算にはあらかじめ関数パッケージ(LinearAlgebra)を呼び出しておく.
> with(LinearAlgebra):
スカラーとのかけ算
> v1:=Vector([x, y]): 3*v1;
$$
\left[ \begin {array}{c} 3\,x\\ 3\,y\end {array} \right]
$$
行列,ベクトルの足し算,引き算
> LL1 := [[1, 2], [3, 4]]: A1 := Matrix(LL1): A2 := Matrix([[x, x], [y, y]]):
> 3*A1-4*A2;
$$
\left[ \begin {array}{cc} 3-4\,x&6-4\,x\\ 9-4\,y&12-4\,y\end {array} \right]
$$
内積(DotProduct, `.`)
> v1:=Vector([1,1,3]): v2:=Vector([1,2,-1]): v1.v2;
$$
0
$$
外積(CrossProduct, `\&x`)
> CrossProduct(v1, v2); v1 &x v2:
$$
\left[ \begin {array}{c} -7\\ 4\\ 1\end {array} \right]
$$
スカラー3重積
> v3 := Vector([-1,2,1]); CrossProduct(v1,v2).v3;
$$
{\it v3}\, := \, \left[ \begin {array}{c} -1\\ 2\\ 1\end {array} \right] \notag \\
16 \notag
$$
転置(Transpose, `\&T`)
> Transpose(A1);
$$
\left[ \begin {array}{cc} 1&3\\ 2&4\end {array} \right]
$$
また横ベクトルを縦ベクトル(あるいはその逆)にするのも同じ.
> Transpose(v1);
$$
\left[ \begin {array}{ccc} 1&1&3\end {array} \right]
$$
行列$A= \left[ \begin {array}{cc} 1&2\\ 3&4\end {array} \right]$, $B= \left[ \begin {array}{cc} 2&3\\ 4&5\end {array} \right]$, およびベクトル$v= \left[ \begin {array}{c} 1\\ 2\end {array} \right] $を作り, 以下の計算を行い結果を観察せよ.
i) $A+3B$, ii) $A-B$, iii) $A+E$, iv) $A.B$, v) $B.A$, vi) $A.v$, vii) $v.A$, viii) $v$の転置(Transpose)を $A$に左側から掛けよ, ix) $A^3$
- 2次元平面上で原点の周りの角度tの回転行列は
> Ar:=t->Matrix([[cos(t),-sin(t)],[sin(t),cos(t)]]);
で定義できる.
i) Pi/6 回転させる行列を作り,単位ベクトル(1,0),(0,1)がどの点に移動するか確認せよ.
ii) Pi/6 回転させた後,続けてPi/4 回転させる操作を続けて行う回転行列を求めよ.また,角度を直接入力して要素を比較せよ.
行列$A= \left[ \begin {array}{ccc} 1&2&3\\ 4&5&6\\ 7&8&9\end {array} \right]$ について $A+A^t$, $A-A^t$ を求めて交代行列,対称行列を作れ.
> with(LinearAlgebra): A:=Matrix([[1,2],[3,4]]); B:=Matrix([[2,3],[4,5]]);
> v:=Vector([1,2]); E:=IdentityMatrix(2);
$$
A\, := \, \left[ \begin {array}{cc} 1&2\\ 3&4\end {array} \right] \notag \\
B\, := \, \left[ \begin {array}{cc} 2&3\\ 4&5\end {array} \right] \notag \\
v\, := \, \left[ \begin {array}{c} 1\\ 2\end {array} \right] \notag \\
E\, := \, \left[ \begin {array}{cc} 1&0\\ 0&1\end {array} \right] \notag
$$
i)--vi)
> A+3*B; A-B; A+E; A.B; B.A; A.v;
$$
\left[ \begin {array}{cc} 7&11\\ 15&19\end {array} \right] \notag \\
\left[ \begin {array}{cc} -1&-1\\ -1&-1\end {array} \right] \notag \\
\left[ \begin {array}{cc} 2&2\\ 3&5\end {array} \right] \notag \\
\left[ \begin {array}{cc} 10&13\\ 22&29\end {array} \right] \notag \\
\left[ \begin {array}{cc} 11&16\\ 19&28\end {array} \right] \notag \\
\left[ \begin {array}{c} 5\\ 11\end {array} \right] \notag
$$
vii)
> v.A;
Error, (in LinearAlgebra:-VectorMatrixMultiply) invalid input:
LinearAlgebra:-VectorMatrixMultiply expects its 1st argument, v, to be of type
Vector[row] but received Vector(2, {(1) = 1, (2) = 2})
v.Aは次元が合わないので計算できない.次元を合わすためには,vに転置(Transpose)をかけて横ベクトルにしておく必要がある.
viii)
> Transpose(v).A;
$$
\left[ \begin {array}{cc} 7&10\end {array} \right]
$$
ix)
> A^3;
$$
\left[ \begin {array}{cc} 37&54\\ 81&118\end {array} \right]
$$
i)
> with(LinearAlgebra): e1:=Vector([1,0]); e2:=Vector([0,1]);
> Ar:=t->Matrix([[cos(t),-sin(t)],[sin(t),cos(t)]]); Ar(Pi/6).e1; Ar(Pi/6).e2;
$$
{\it e1}\, := \, \left[ \begin {array}{c} 1\\ 0\end {array} \right] \notag \\
{\it e2}\, := \, \left[ \begin {array}{c} 0\\ 1\end {array} \right] \notag \\
{\it Ar}\, := \,t\mapsto \left[ \begin {array}{cc} \cos \left( t \right) &-\sin \left( t \right) \\ \sin \left( t \right) &\cos \left( t \right) \end {array} \right] \notag \\
\left[ \begin {array}{c} 1/2\,\sqrt {3}\\ 1/2\end {array} \right] \notag \\
\left[ \begin {array}{c} -1/2\\ 1/2\,\sqrt {3}\end {array} \right] \notag
$$
ii.) 2つの関数を別々に計算.
> Ar(Pi/4).Ar(Pi/6);
> Ar(Pi/6+Pi/4);
$$
\left[ \begin {array}{cc} 1/4\,\sqrt {2}\sqrt {3}-1/4\,\sqrt {2}&-1/4\,\sqrt {2}-1/4\,\sqrt {2}\sqrt {3}\\ 1/4\,\sqrt {2}\sqrt {3}+1/4\,\sqrt {2}&1/4\,\sqrt {2}\sqrt {3}-1/4\,\sqrt {2}\end {array} \right] \notag \\
\left[ \begin {array}{cc} \cos \left( {\frac {5}{12}}\,\pi \right) &-\sin \left( {\frac {5}{12}}\,\pi \right) \\ \sin \left( {\frac {5}{12}}\,\pi \right) &\cos \left( {\frac {5}{12}}\,\pi \right) \end {array} \right] \notag
$$
2つの操作の差のevalfをとるとほぼ0,つまり一致していることが確認できる.
> evalf(Ar(Pi/6+Pi/4)-Ar(Pi/6).Ar(Pi/4));
$$
\left[ \begin {array}{cc} - 0.0000000002000000000& 0.0\\ 0.0&- 0.0000000002000000000\end {array} \right]
$$
> A:=Matrix([[1,2,3],[4,5,6],[7,8,9]]); As:=A+Transpose(A); Aa:=A-Transpose(A);
$$
A\, := \, \left[ \begin {array}{ccc} 1&2&3\\ 4&5&6\\ 7&8&9\end {array} \right] \notag \\
{\it As}\, := \, \left[ \begin {array}{ccc} 2&6&10\\ 6&10&14\\ 10&14&18\end {array} \right] \notag \\
{\it Aa}\, := \, \left[ \begin {array}{ccc} 0&-2&-4\\ 2&0&-2\\ 4&2&0\end {array} \right] \notag
$$
行列の基本操作,掃き出し(LUDecomposition)
線形代数の計算にはあらかじめ関数パッケージ(LinearAlgebra)を呼び出しておく.
> with(LinearAlgebra):
行列の基本操作
行列の掃き出しに必要となる行列の基本操作はRowOperation, ColumnOperationを参照.
掃き出し法,LU分解(LUDecomposition)
掃き出し法の計算は,LUDecompositionでおこなう.まず拡大係数行列を作る.
> A1:=<1,2;3,4>; b:=<2,3>; <A1|b>;
$$
{\it A1}\, := \, \left[ \begin {array}{cc} 1&2\\ 3&4\end {array} \right] \notag \\
b\, := \, \left[ \begin {array}{c} 2\\ 3\end {array} \right] \notag \\
\left[ \begin {array}{ccc} 1&2&2\\ 3&4&3\end {array} \right] \notag
$$
これにLU分解をかける.それぞれP(permutation,置換), L(lower triangle,下三角), U(upper triangle,上三角)行列に代入している.
> P,L,U:=LUDecomposition(<A1|b>);
$$
P,\,L,\,U\, := \, \left[ \begin {array}{cc} 1&0\\ 0&1\end {array} \right] ,\, \left[ \begin {array}{cc} 1&0\\ 3&1\end {array} \right] ,\, \left[ \begin {array}{ccc} 1&2&2\\ 0&-2&-3\end {array} \right]
$$
さらに被約階段行列(row reduced echelonmatrix;後退代入までおこなって,解まで求めた状態)を求めるには,output='R'を指定する.
> LUDecomposition(<A1|b>, output='R');
$$
\left[ \begin {array}{ccc} 1&0&-1\\ 0&1&3/2\end {array} \right]
$$
階数(Rank)
行列の性質の中でも特に重要な階数(Rank)は次のコマンドで求められる.
> Rank(A1);
$$
2
$$
- 行列$A= \left[ \begin {array}{ccc} 1&2&3\\ 4&5&6\\ 7&8&9\end {array} \right]$について,
RowOperationのヘルプを参照して,次の行基本操作をおこない,階数を求め,コマンドLUDecomposition, Rankの結果と比べよ.
i) 2行目から1行目の4倍を引く.
ii) 3行目から1行目の7倍を引く.
iii) 2行目を-1/3倍する.
iv) 3行目に2行目の6倍を足す.
RowOperationのコツは,最初はinplace=falseでやってみて,うまくいけばtrueにかえる.
次の連立方程式の解を掃き出し法で求めよ.GenerateMatrixを使えば連立方程式から拡大係数行列を直接生成することも可能.
(i)
$$ \left\{ \begin{array}{cc}x +y -z &=2 \\ 2 x -3 y +z &=4 \\ 4 x -y +3 z &=1 \end{array} \right. $$(ii)
$$ \left\{ \begin{array}{cl}2 x +4 y -3 z &=1 \\ 3 x -8 y +6 z &=58 \\ x -2 y -9 z &=23 \\ \end{array} \right. $$(iii)
$$ \left\{ \begin{array}{cl} 1 x -10 y -3 z -7 u &=2 \\ 2 x -4 y +3 z +4 u &=-3 \\ x -2 y +6 z +5 u &=-1 \\ x +8 y +9 z +3 u &=5 \end{array} \right. $$(iv)
$$ \left\{\begin{array}{cl}x +y +z &=a +b +c \\ ax+by+cz &=ab +bc +ca \\ bc\,x +ca\,y + ab\,z &=3\,abc \end{array} \right. $$次の連立方程式
$$ \left\{ \begin{array}{cc} x _{1}+2 x _{2}-x _{3} & =0\\ x _{1}+x _{2}+3 x _{4}&=0 \\ x _{1}+5 x _{2}-2 x _{3}+3 x _{4}&=0 \\ x _{1}+3 x _{2}-2 x _{3}- 3 x _{4}&=0 \end{array} \right. $$をsolveを使って,$x_1, x_2, x_3, x_4$について解け. 次にGenerateMatrixを使って,拡大係数行列にした後,LUDecompositionを用いて掃き出しを行い結果を比較せよ.
> A:=Matrix([[1,2,3],[4,5,6],[7,8,9]]); with(LinearAlgebra): ?RowOperation;
$$
A\, := \, \left[ \begin {array}{ccc} 1&2&3\\ 4&5&6\\ 7&8&9\end {array} \right]
$$
ヘルプに書かれてある例を見本にして,コマンドを記述.
> RowOperation(A,[2,1],-4);
$$
\left[ \begin {array}{ccc} 1&2&3\\ 0&-3&-6\\ 7&8&9\end {array} \right]
$$
結果を最初の引数(A)に上書きするoption(inplace=true)をつける.最初からではなく,うまくいったのを確認してからつけるのがコツ.
> RowOperation(A,[3,1],-7,inplace=true);
$$
\left[ \begin {array}{ccc} 1&2&3\\ 0&-3&-6\\ 0&-6&-12\end {array} \right]
$$
> RowOperation(A,2,-1/3,inplace=true);
$$
\left[ \begin {array}{ccc} 1&2&3\\ 0&1&2\\ 0&-6&-12\end {array} \right]
$$
> RowOperation(A,[3,2],6);
$$
\left[ \begin {array}{ccc} 1&2&3\\ 0&1&2\\ 0&0&0\end {array} \right]
$$
LUDecompositionによる結果と見比べる.
> A0:=Matrix([[1,2,3],[4,5,6],[7,8,9]]):
> LUDecomposition(A0);
$$
\left[ \begin {array}{ccc} 1&0&0\\ 0&1&0\\ 0&0&1\end {array} \right] ,\, \left[ \begin {array}{ccc} 1&0&0\\ 4&1&0\\ 7&2&1\end {array} \right] ,\, \left[ \begin {array}{ccc} 1&2&3\\ 0&-3&-6\\ 0&0&0\end {array} \right]
$$
最後の行がすべて0になっているので,階数は2となる.Rankにより確認.
> Rank(A);
$$
2
$$
i) GenerateMatrixによる係数行列と右辺のベクトルを生成する方法は以下のとおり.
> eqs:={x+y-z=2,2*x-3*y+z=4,4*x-y+3*z=1}; GenerateMatrix(eqs,{x,y,z});
$$
{\it eqs}\, := \, \left\{ x+y-z=2,2\,x-3\,y+z=4,4\,x-y+3\,z=1 \right\} \notag \\
\left[ \begin {array}{ccc} 1&1&-1\\ 2&-3&1\\ 4&-1&3\end {array} \right] ,\, \left[ \begin {array}{c} 2\\ 4\\ 1\end {array} \right] \notag
$$
i)
> A:= Matrix([[1,1,-1],[2,-3,1],[4,-1,3]]); b:=<2,4,1>;
> LUDecomposition(<A|b>,output='R');
$$
A\, := \, \left[ \begin {array}{ccc} 1&1&-1\\ 2&-3&1\\ 4&-1&3\end {array} \right] \notag \\
b\, := \, \left[ \begin {array}{c} 2\\ 4\\ 1\end {array} \right] \notag \\
\left[ \begin {array}{cccc} 1&0&0&{\frac {13}{10}}\\ 0&1&0&-{\frac {21}{20}}\\ 0&0&1&-7/4\end {array} \right] \notag
$$
ii)
> A:= Matrix([[2,4,-3],[3,-8,6],[8,-2,-9]]); b:=<1,5,-23>;
> LUDecomposition(<A|b>,output='R');
$$
A\, := \, \left[ \begin {array}{ccc} 2&4&-3\\ 3&-8&6\\ 8&-2&-9\end {array} \right] \notag \\
b\, := \, \left[ \begin {array}{c} 1\\ 5\\ -23\end {array} \right] \notag \\
\left[ \begin {array}{cccc} 1&0&0&1\\ 0&1&0&2\\ 0&0&1&3\end {array} \right] \notag
$$
iii)
> A:= Matrix([[1,-10,-3,-7],[2,-4,3,4],[3,-2,6,5],[1,8,9,3]]); b:=<2,-3,-1,5>;
> LUDecomposition(<A|b>,output='R');
$$
A\, := \, \left[ \begin {array}{cccc} 1&-10&-3&-7\\ 2&-4&3&4\\ 3&-2&6&5\\ 1&8&9&3\end {array} \right] \notag \\
b\, := \, \left[ \begin {array}{c} 2\\ -3\\ -1\\ 5\end {array} \right] \notag \\
\left[ \begin {array}{ccccc} 1&0&0&0&1\\ 0&1&0&0&1/2\\ 0&0&1&0&1/3\\ 0&0&0&1&-1\end {array} \right] \notag
$$
iv)
> restart; with(LinearAlgebra): A:= Matrix([[1,1,1],[a,b,c],[b*c,c*a,a*b]]);
> bb:=<a+b+c,a*b+b*c+c*a,3*a*b*c>; RR:=LUDecomposition(<A|bb>,output='R');
$$
A\, := \, \left[ \begin {array}{ccc} 1&1&1\\ a&b&c\\ bc&ca&ab\end {array} \right] \notag \\
{\it bb}\, := \, \left[ \begin {array}{c} a+b+c\\ ab+bc+ca\\ 3\,abc\end {array} \right] \notag \\
{\it RR}\, := \, \left[ \begin {array}{cccc} 1&0&0&-{\frac {a \left( {b}^{2}-2\,bc+{c}^{2} \right) }{ \left( a-b \right) \left( a-c \right) }}\\ 0&1&0&{\frac { \left( {a}^{2}-2\,ca+{c}^{2} \right) b}{ \left( b-c \right) \left( a-b \right) }}\\ 0&0&1&-{\frac {c \left( -2\,ab+{b}^{2}+{a}^{2} \right) }{ab-bc+{c}^{2}-ca}}\end {array} \right] \notag
$$
> factor(Column(RR,4)[1]);
などとすればさらに見やすく,変形される $$ -{\frac {a \left( b-c \right) ^{2}}{ \left( a-b \right) \left( a-c \right) }} $$ 3.
> eqs:={x1+2*x2-x3=0,x1+x2+3*x4=0,3*x1+5*x2-2*x3+3*x4=0,x1+3*x2-2*x3-3*x4=0};
> solve(eqs,{x1,x2,x3,x4});
$$
{\it eqs}\, := \, \left\{ {\it x1}+{\it x2}+3\,{\it x4}=0,{\it x1}+2\,{\it x2}-{\it x3}=0, \right. \notag \\
\left. {\it x1}+3\,{\it x2}-2\,{\it x3}-3\,{\it x4}=0,3\,{\it x1}+5\,{\it x2}-2\,{\it x3}+3\,{\it x4}=0 \right\} \notag \\
\left\{ {\it x1}=-6\,{\it x4}-{\it x3},{\it x2}=3\,{\it x4}+{\it x3},{\it x3}={\it x3},{\it x4}={\it x4} \right\} \notag
$$
> A1,b:=GenerateMatrix(eqs,[x1,x2,x3,x4]);
> LUDecomposition(<A1|b>,output='R');
$$
{\it A1},\,b\, := \, \left[ \begin {array}{cccc} 1&1&0&3\\ 1&2&-1&0\\ 1&3&-2&-3\\ 3&5&-2&3\end {array} \right] ,\, \left[ \begin {array}{c} 0\\ 0\\ 0\\ 0\end {array} \right] \notag \\
\left[ \begin {array}{ccccc} 1&0&1&6&0\\ 0&1&-1&-3&0\\ 0&0&0&0&0\\ 0&0&0&0&0\end {array} \right] \notag
$$
逆行列(MatrixInverse)
線形代数の計算にはあらかじめ関数パッケージ(LinearAlgebra)を呼び出しておく.
> with(LinearAlgebra):
行列式(Determinant)
> A0 := Matrix([[x,y],[z,u]]); Determinant(A0);
$$
{\it A0}\, := \, \left[ \begin {array}{cc} x&y\\ z&u\end {array} \right] \notag \\
xu-yz \notag
$$
逆行列(MatrixInverse)
> A2:=MatrixInverse(A0); simplify(A0.A2);
$$
{\it A2}\, := \, \left[ \begin {array}{cc} {\frac {u}{xu-yz}}&-{\frac {y}{xu-yz}}\\ -{\frac {z}{xu-yz}}&{\frac {x}{xu-yz}}\end {array} \right]\notag \\
\left[ \begin {array}{cc} 1&0\\ 0&1\end {array} \right]\notag
$$
その他の演算
随伴(Adjoint)などもコマンドだけで求まる.詳しくはヘルプ参照.
次の連立方程式の係数行列の行列式を求めよ.
(i)
$$ \left\{ \begin{array}{cc}x +y -z &=2 \\ 2 x -3 y +z &=4 \\ 4 x -y +3 z &=1 \end{array} \right. $$(ii)
$$ \left\{ \begin{array}{cl}2 x +4 y -3 z &=1 \\ 3 x -8 y +6 z &=58 \\ x -2 y -9 z &=23 \\ \end{array} \right. $$(iii)
$$ \left\{ \begin{array}{cl} 1 x -10 y -3 z -7 u &=2 \\ 2 x -4 y +3 z +4 u &=-3 \\ x -2 y +6 z +5 u &=-1 \\ x +8 y +9 z +3 u &=5 \end{array} \right. $$(iv)
$$ \left\{\begin{array}{cl}x +y +z &=a +b +c \\ ax+by+cz &=ab +bc +ca \\ bc\,x +ca\,y + ab\,z &=3\,abc \end{array} \right. $$上の連立方程式の係数行列の逆行列を求めよ.またベクトルbに作用して解を求めよ.
> with(LinearAlgebra): eqs:={x+y-z=2,2*x-3*y+z=4,4*x-y+3*z=1};
> A,b:=GenerateMatrix(eqs,{x,y,z}); Determinant(A);
$$
{\it eqs}\, := \, \left\{ x+y-z=2,2\,x-3\,y+z=4,4\,x-y+3\,z=1 \right\} \notag \\
A,\,b\, := \, \left[ \begin {array}{ccc} 1&1&-1\\ 2&-3&1\\ 4&-1&3\end {array} \right] ,\, \left[ \begin {array}{c} 2\\ 4\\ 1\end {array} \right]\notag \\
-20\notag
$$
> MatrixInverse(A); simplify(MatrixInverse(A).b);
$$
\left[ \begin {array}{ccc} 2/5&1/10&1/10\\ 1/10&-{\frac {7}{20}}&{\frac {3}{20}}\\ -1/2&-1/4&1/4\end {array} \right] \notag \\
\left[ \begin {array}{c} {\frac {13}{10}}\\ -{\frac {21}{20}}\\ -7/4\end {array} \right]\notag
$$
固有値(EigenVectors)
線形代数の計算にはあらかじめ関数パッケージ(LinearAlgebra)を呼び出しておく.
> with(LinearAlgebra):
固有値(EigenVectors)
固有値(Eigenvalues)と固有ベクトルを共に求めるにはEigenvectorsを使う.下の例では,固有値と固有ベクトルを変数l,vに代入している.
> A0 := Matrix(2, 2, [[1,2], [2,1]]); l,v:=Eigenvectors(A0);
$$
{\it A0}\, := \, \left[ \begin {array}{cc} 1&2\\ 2&1\end {array} \right] \notag \\
l,\,v\, := \, \left[ \begin {array}{c} -1\\ 3\end {array} \right] ,\, \left[ \begin {array}{cc} -1&1\\ 1&1\end {array} \right] \notag
$$
固有ベクトルの取り出し(Column)
行列の列を要素とするベクトル生成Columnを使って,一番目の固有値に対応する固有ベクトルを取り出す.
> Column(v,1);
$$
\left[ \begin {array}{c} -1\\ 1\end {array} \right]
$$
これを使って,固有値(l)と固有ベクトル(v)の関係
$$ A_0.v=\lambda.v $$が確認できる.
> A0.Column(v,1); l[1]*Column(v,1);
$$
\left[ \begin {array}{c} 1\\ -1\end {array} \right] \notag \\
\left[ \begin {array}{c} 1\\ -1\end {array} \right] \notag
$$
固有ベクトルの規格化(Normalize)
用意されているコマンドが確かめられる.
> ?Normalize;
一般的な内積を使って長さを規格化するには,以下のコマンドを使う.
> Normalize(Column(v,1),Euclidean);
$$
\left[ \begin {array}{c} -1/2\,\sqrt {2}\\ 1/2\,\sqrt {2}\end {array} \right]
$$
対角化
固有ベクトルを用いて,次のとおり行列は対角化される.
> MatrixInverse(v).A0.v;
$$
\left[ \begin {array}{cc} -1&0\\ 0&3\end {array} \right]
$$
一見対角化されてない場合でも,simplifyを掛けて整理すると対角化されているのが確認できる.
その他の演算
対角和(Trace),ジョルダン標準形(JordanForm)などもコマンドだけで求まる.詳しくはヘルプ参照.
行列
$$ A= \left[ \begin {array}{ccc} 1&-2&1\\ -1&2&1\\ 1&2&1\end {array} \right] $$の固有値を固有方程式
$$ \left| A-\lambda E \right| =0 $$を解いて求めよ.EigenVectorsを用いて固有値と固有ベクトルを求めよ.固有値,固有ベクトルの関係
$$ A.v =\lambda v $$を確認せよ.さらに,固有ベクトルを長さ1に規格化せよ.
行列
$$ A= \left[ \begin {array}{ccc} 2&0&1\\ 0&3&0\\ 1&0&2\end {array} \right] $$を対角化する変換行列Pを求め,対角化せよ.
> A:=Matrix([[1,-2,1],[-1,2,1],[1,2,1]]); E:=Matrix(3,3,shape=identity):
> eq:=Determinant(A-x*E); solve(eq,x);
$$
A\, := \, \left[ \begin {array}{ccc} 1&-2&1\\ -1&2&1\\ 1&2&1\end {array} \right] \notag \\
{\it eq}\, := \,4\,{x}^{2}-{x}^{3}-8 \notag \\
2,\,1+ \sqrt{5},\,1- \sqrt{5} \notag
$$
> l,v:=Eigenvectors(A); v1:=Column(v,3); evalf(A.v1); evalf(l[3].v1);
> Normalize(v1,Euclidean); evalf(Normalize(v1,Euclidean));
$$
l,\,v\, := \, \left[ \begin {array}{c} \sqrt {5}+1\\ 1-\sqrt {5}\\ 2\end {array} \right] ,\, \left[ \begin {array}{ccc} {\frac { \left( \sqrt {5}-3 \right) \sqrt {5}}{-5+3\,\sqrt {5}}}&-{\frac { \left( -3-\sqrt {5} \right) \sqrt {5}}{-5-3\,\sqrt {5}}}&1\\ -{\frac {-5+\sqrt {5}}{-5+3\,\sqrt {5}}}&-{\frac {-5-\sqrt {5}}{-5-3\,\sqrt {5}}}&0\\ 1&1&1\end {array} \right] \notag \\
{\it v1}\, := \, \left[ \begin {array}{c} 1\\ 0\\ 1\end {array} \right] \notag \\
\left[ \begin {array}{c} 2.0\\ 0.0\\ 2.0\end {array} \right] \notag \\
\left[ \begin {array}{c} 2.0\\ 0.0\\ 2.0\end {array} \right] \notag \\
\left[ \begin {array}{c} 1/2\,\sqrt {2}\\ 0\\ 1/2\,\sqrt {2}\end {array} \right] \notag \\
\left[ \begin {array}{c} 0.7071067810\\ 0.0\\ 0.7071067810\end {array} \right] \notag \\
$$
> A:=Matrix([[2,0,1],[0,3,0],[1,0,2]]); l,v:=Eigenvectors(A);
> MatrixInverse(v).A.v;
$$
A\, := \, \left[ \begin {array}{ccc} 2&0&1\\ 0&3&0\\ 1&0&2\end {array} \right] \notag \\
l,\,v\, := \, \left[ \begin {array}{c} 3\\ 3\\ 1\end {array} \right] ,\, \left[ \begin {array}{ccc} 1&0&-1\\ 0&1&0\\ 1&0&1\end {array} \right] \notag \\
\left[ \begin {array}{ccc} 3&0&0\\ 0&3&0\\ 0&0&1\end {array} \right] \notag
$$
Keyword(s):
References:[MaplePrime] [MaplePrimeTOC] [SideMenu]