第 2 章 Maxima のデータとその操作
2.8 行列
2.8.4 eigen パッケージ
permanent函数は,⟨行列⟩のpermanentを計算します. 尚⟨整数⟩を指定した場合,1行から⟨整 数⟩行と1列から⟨整数⟩列の正方行列を取出し,その行列式を計算します. ここで,permanentは 行列式に似ていますが,符号の変化のないものです.
特性多項式の生成に関連する函数
¶ ³
charpoly(⟨行列⟩,⟨変数⟩) ncharpoly(⟨行列⟩,⟨変数⟩)
µ ´
charpoly函数は⟨行列⟩の特性多項式det (<変数>I− ⟨行列⟩)を計算します.
determinant (⟨行列⟩ −diagmatrix (length (⟨行列⟩),⟨変数⟩))と同じ結果を返します.
ncharpoly函数は⟨変数⟩に対する⟨行列⟩の特性多項式を計算します.これはMaximaのcharpoly とは別物です.
ncharpolyでは与えられた行列の羃乗の対角和を計算しますが,対角和は特性多項式の根の羃乗
の総和に等しいものです.これらの諸量から根の対称式の計算が可能ですが,それらは特性多項式 の係数です.charpolyはvar*ident[n]-aの行列式を計算している.そんな訳でncharpolyは優れて いる. 例えば,整数成分の非常に大きな行列の場合は算術的に多項式の計算を避ける為です.予め
load(”nchrpl”);で読込む必要があります.
となります.但し,nondiagonalizableがtrueであれば,これらの行列は生成されません.
knowneigvalsがtrueの場合,行列の固有値は既知で,大域変数のlisteigvalsに保存されていると eigenパッケージの函数は仮定します.その為,knowneigvalsがtrueの場合はlisteigvalsにeigenvalues 函数の出力と同じリストが設定されていなければなりません
knowneigvlectsがtrueの場合,行列の固有値に対応する固有ベクトルが既知であり, 大域変数
のlisteigvectsに保存されているとeigenパッケージの函数が仮定します. その為,knowneigvects がtrueの場合はlisteigvectsにeigenvects函数の出力と同じリストが設定されていなければなりま せん
¶ 内積函数 ³
innerproduct(⟨x⟩,⟨y⟩)
inprod(⟨x⟩,⟨y⟩)(innerproduct函数の別名)
µ ´
innerproduct函数は内積を表現します.短縮名はinprodです. リスト ⟨x⟩ と⟨y⟩を引数として 取り,⟨x⟩の複素共役 .⟨y⟩で定義されています.ここで,非可換積は通常のベクトルの内積演算子 と同じものです.
eigenパッケージには以下の行列操作の函数が含まれています.
行列操作の函数
¶ ³
columnvector(⟨リスト⟩) conjugate(⟨リスト⟩)
conj(⟨リスト⟩)(conjugate函数の別名)
µ ´
columnvector函数は与えられたリストから列ベクトルを生成します.
(%i6) columnvector([1,2,3]);
[ 1 ]
[ ]
(%o6) [ 2 ]
[ ]
[ 3 ]
conjugateは引数の複素共役を返します.
(%i3) A:matrix([1,2*%i],[1-%i,4]);
[ 1 2 %i ]
(%o3) [ ]
[ 1 - %i 4 ] (%i4) conjugate(A);
[ 1 - 2 %i ]
(%o4) [ ]
[ %i + 1 4 ]
固有値の計算に関連するeigenパッケージ函数
¶ ³
eigenvalues(⟨行列⟩)
eivals(⟨行列⟩)(eigenvalues函数の別名) eigenvectors(⟨行列⟩)
eivects(⟨行列⟩)(eigenvectors函数の別名) similaritytransform (⟨行列⟩)
simtran (⟨行列⟩)(similaritytransform函数の別名)
µ ´
eigenvalues函数(短縮名eivals)は引数に一つの行列を取り,固有値と固有ベクトルを含むリスト
を返します.返却されるリストの第一成分が固有値リスト,第二成分が固有値リストに対応する重 複度のリストとなります.
eigenvalues函数ではcharpoly函数で特性多項式を計算し,solve函数を使ってその特性多項式の 根を求めています.solve函数は厳密解を求める函数の為, 高次多項式に対しては,その根を見付け 損なう事があります.更に,不正確な答を返す事もあります.しかしeigenパッケージに含まれてい るconjugate函数, innerproduct函数,univector函数,columnvector函数とgramschmidt函数を必 要としません.
eigenvectors函数は引数として一つの行列を取り,リストを返します.このリストに含まれる最初
の副リストにはeigenvalues函数の出力,他の副リストには行列の各々の固有値に対応する固有ベ クトルが含まれています.
尚,algsys函数が固有ベクトルの計算で使われています.尚,固有値が不正確な場合, algsysが解を 生成する事が出来ない事があります.この場合,eigenvalues函数を使って最初に見つけた固有値の 簡易化を行う事を勧めます.
similarityransform函数は⟨行列⟩を引数とし,uniteigenvectors函数の出力結果リストを返します.
ベクトルの正規化に関連する函数
¶ ³
gramschmidt([⟨リスト1⟩,· · ·,⟨リストn⟩])
gschmidt([⟨リスト1⟩,· · ·,⟨リストn⟩]) (gramschmidt函数の別名) unitvector(⟨リスト⟩)
uvect(⟨リスト⟩)(unitvector函数の別名) uniteigenvectors(⟨行列⟩)
ueivects(⟨行列⟩)(uniteigenvectors函数の別名)
µ ´
gramschmidt函数はGram-Schmidtによる直交ベクトルを求めます. この函数はeigenパッケー ジに含まれる函数なので,予め load(eigen) を実行して利用します.gramschmidtは引数にリスト の列で構成されるリストを取ります. ここで ⟨リストi⟩ は全て長さが等しくなければなりません が,各リストが直交している必要はありません.
gramschmidtは互いに直交したリストで構成されたリストを返します. 尚、返ってきた結果には
因子分解された整数が含まれる事があります. これはMaximaのfactor函数がgram-schmidtの処 理の過程で使われた為です. こうする事で式が複雑なものになる事を回避し,生成される変数の大 きさを減らす助けにもなっています.
unitvectorは⟨リスト⟩ の大きさを1にしたリストを返します. uniteigenvaluesは与えられた
⟨行列⟩の固有値と固有ベクトルで構成されたリストを返します.出力リストの第一成分のリスト
にはeigenvalues函数の出力があり,第二成分の副リストには正規化した固有ベクトルが,第一成分
のリストの固有値に対応する順番で並んでいます.
uniteigenvectors函数は与えられた行列から長さを1にした固有ベクトルを返します.