• 検索結果がありません。

第 2 章 Maxima のデータとその操作

2.8 行列

2.8.2 行列を生成する函数

Maximaにはmatrix函数の他にも行列を生成する函数を持っています.

行列の生成を行う函数

³

entermatrix(整数1,整数2) ident(整数)

zeromatrix(整数1,整数2)

genmatrix(配列,整数1,整数2,整数3,整数4) ematrix(整数1,整数2,⟨x⟩,整数3,整数4) diagmatrix(整数1,整数2)

coefmatrix([方程式1,· · ·], [変数1,· · ·]) augcoefmatrix([方程式1,· · ·], [変数1,· · ·]) echelon(行列)

µ ´

entermatrixを実行すると,Maximaの要求に従って整数1⟩ × ⟨整数2個の成分を入力して整 数1×⟨整数2列の行列を生成する函数です.

(%i1) entermatrix(3,3);

is the matrix 1. diagonal 2. symmetric 3. antisymmetric 4. general

answer 1, 2, 3 or 4 1;

row 1 column 1: a;

row 2 column 2: b;

row 3 column 3: c;

matrix entered.

[ a 0 0 ]

[ ]

(%o1) [ 0 b 0 ]

[ ]

[ 0 0 c ]

この様に対話的に行列を生成する事が出来ますが,実用上,用途は限られるかもしれません.

ident函数は,整数次の単位正方行列,即ち,対角成分が全て1で,他が全て0となる正方行列 を生成します.

(%i6) ident(3);

[ 1 0 0 ]

[ ]

(%o6) [ 0 1 0 ]

[ ]

[ 0 0 1 ]

zeromatrix函数は,整数1整数2列の零行列を返します.

(%i7) zeromatrix(3,2);

[ 0 0 ]

[ ]

(%o7) [ 0 0 ]

[ ]

[ 0 0 ]

genmatrix函数を用いると,与えられた二次元配列から行列が生成出来ます. このgenmatrxi函

数は二次元配列から行列を抜き出す形になります. 抜き出し方は,整数1,整数2で配列の大きさ を指定します.それから,整数3,整数4で行列の1行,1列目の成分を指定します.すると,整数1 から整数3迄の配列の第一成分を行とし,と整数2から整数4迄の第二成分を列とする領

域が整数1⟩ − ⟨整数3行,整数2⟩ − ⟨整数4列の行列として抜き出されます. ここで,実際の配

列が生成する行列よりも小さかった場合,即ち,i行j列の成分が未定の場合,配列ijの形式で行列 の成分が表示されます.又,以下に示す様に配列を函数で与える事も可能です.

(%i3) h[i,j]:=1/(i*j+1) (%i4) genmatrix(h,3,3);

[ 1 1 ]

[ 1 - - ]

[ 2 3 ]

[ ]

[ 1 1 1 ]

(%o4) [ - - - ]

[ 2 3 4 ]

[ ]

[ 1 1 1 ] [ - - - ] [ 3 4 5 ]

ematrix函数は整数1整数2列の行列で, (整数3,整数4)成分のみが⟨x⟩となり,他が 全て零となる行列を生成します.

(%i9) ematrix(4,3,1,1,1);

[ 1 0 0 ]

[ ]

[ 0 0 0 ]

(%o9) [ ]

[ 0 0 0 ]

[ ]

[ 0 0 0 ]

diagmatrix函数はn行n列で,対角成分がxの対角行列を返します. ここで対角成分は全て行 列のものです. 尚, diagmatrix(n,1)はident(n)と同じn次元の単位行列を生成します.

(%i19) diagmatrix(3,2);

[ 2 0 0 ]

[ ]

(%o19) [ 0 2 0 ]

[ ]

[ 0 0 2 ]

coeffmatrixは連立一次方程式の変数リストに対応する係数行列を返します. 尚,連立一次方程式

は,演算子=の右辺,或いは左辺の何れかが0の場合,式だけでも構いません.

(%i22) coefmatrix([2*x-3*y-1=0,3*x+3*y+10=0],[x,y]);

[ 2 - 3 ]

(%o22) [ ]

[ 3 3 ]

(%i23) coefmatrix([2*x-3*y-z,3*x+3*y+10*z],[x,y]);

[ 2 - 3 ]

(%o23) [ ]

[ 3 3 ]

augcoefmatrix函数は,与えられた方程式と指定した変数のリストから係数行列を生成します.行

列は, 方程式1,· · · から構成される線形方程式系に含まれる 変数1,· · ·の係数から構築されま

す.coefmatrix函数との違いは,生成する係数行列に各方程式の定数項が列として付加される点です.

(%i25) augcoefmatrix([2*x-3*y-z,3*x+3*y+10*z],[x,y]);

[ 2 - 3 - z ]

(%o25) [ ]

[ 3 3 10 z ] (%i26) augcoefmatrix([2*x-3*y=1,3*x+3*y=10],[x,y]);

[ 2 - 3 - 1 ]

(%o26) [ ]

[ 3 3 - 10 ] (%i27)

echelon函数は,行列のechelon形式を生成します. これは初等的な行操作で各々の行の最初

の非零元を1,その元を含む列に対しては,その元を含む行よりも下の成分を全て零となる様に変形 するものです(上三角行列).

[2 1 - a -5 b ]

(%o2) [ ]

[a b c ]

(%i3) echelon(d2);

[ a - 1 5 b ]

[1 - --- - --- ]

[ 2 2 ]

(%o3) [ ]

[ 2 c + 5 a b ]

[0 1 ---]

[ 2 ]

[ 2 b + a - a]

行列処理を指定する大域変数

³

変数名 初期値 概要

assumescalar true 引数がスカラー値であると仮定.

detout false 余因子行列を用いた逆行列計算で,行列式の処理を制御

ratmx false 行列成分のCRE表現の表示を制御

scalarmatrixp true 1行1列行列のスカラへの自動変換を制御

sparse false 疎行列を計算するかどうかを指定

µ ´

assumescalarがtrueの場合,値が割当てられていない変数と行列の可換積は,行列の各成分との

detoutがtrueであれば,逆行列を計算した時に行列式の割算がそのまま行列の外に残されます.

この大域変数が効力を持つ為にはdoallmxopsとdoscmxopsがfalseでなければなりません.この 設定をその他の二つが設定されるevで与える事も出来ます.

ratmxがfalseであれば,行列式や行列の和,差,積が行列の表示形式で行われ,逆行列の結果も一

般の表示となります.trueであれば,これらの演算はCRE表現で実行され,逆行列の結果もCRE表 現となります.これは成分が往々にして望みもしない展開(ratfacの設定に依存するものの)の原因 になります.

scalarmatrixpがtrueであれば,二つの行列の非可換積の計算で得られた1行1列の行列はスカ ラーに変換されます.もし,allに設定されていれば,この変換は, 1行1列の行列は何時でもスカラ に変換されます.但し,falseであれば, この変換は実行されません.

sparseがtrueでratmx:trueであれば,determinantは疎行列式を計算する為のルーチンを利用し ます.

do一家

³

変数名 初期値 概要

doallmxops true 行列演算子の評価に関連

domxexpt true 行列に対する指数函数の処理

domxmxops true 対行列,対リスト間の演算を管理

domxnctimes false 非可換積の実行に関連

doscmxops false スカラと行列間の演算を実行

doscmxplus false スカラ+行列の処理に関連

µ ´

doallmxopsがtrueであれば,全ての行列演算子が評価されます. falseであれば,演算子を支配す る個々のdot大域変数の設定が実行されます.

domxexptがtrueの場合,%eˆ matrix([1,2],[3,4])はmatrix([%e,%eˆ 2], [%eˆ 3,%eˆ 4])となりま す.一般的に,この変換は 基底次数 の形式の変換に影響します.尚,基底はスカラか定数の 式であり,次数はリストか行列です. この大域変数がfalseであれば,この変換は実行されません.

domxmxopsがtrueであれば,行列と行列間の演算子や行列とリストの間の演算子が実行されま

す.この大域変数がfalseなら,これらの演算は実行されません. 尚,この大域変数はスカラーと行列 との間の演算には影響を与えません.

domxnctimesがfalseであれば行列の非可換積が実行されます.

doscmxopsがtrueであればスカラと行列間の演算子が実行されます.

doscmxplusがtrueであれば,スカラ+行列が行列値となります.この大域変数はdoallmxopsと 独立した変数です.

行列の括弧を設定する大域変数

³

変数名 初期値 概要

lmxchar [ 行列の右側の括弧で用いる文字を設定

rmxchar ] 行列の左側の括弧で用いる文字を設定

µ ´

lmxcharは行列の(左)の括弧として表示する文字を設定します. 右側はrmxcharで指定します.

rmxcharは行列の(右)の括弧として表示する文字を設定します. 左側はlmxcharで指定します.

matrix element変数一族

³

変数名 初期値 概要

matrix element add +行列の和の演算子を指定

matrix element mult * 行列の成分間の積の演算子を指

matrix element transpose false 転置の際に作用させる函数を設

µ ´

matrix element addは行列同士の和を計算する際に用いる演算子を設定します.函数名やlambda

式であっても構いません.

matrix element multは行列の成分同士の積を計算する際に用いる演算子を設定します.函数名

やlambda式であっても構いません.

matrix element transposeは上記の大域変数と同様に,転置行列を計算する際に,作用させる函数

やlambda式をを指定します.