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

関連する函数

ドキュメント内 , (ページ 61-70)

第 8 章 行列と線形代数について

8.3 関連する函数

54 第8章 行列と線形代数について

copymatrix

copymatrix (h行列i)

h行列iの複製を行います.この命令はmを成分毎に再生成する時だけに使われます. 行列の複

製ではsetmelmxを使うと便利です.

determinant

determinant(h行列i)

gaussの消去法と似た方法でh行列iの行列式を計算します. 計算結果の書式は大域変数ratmx

の設定に依存します.

疎行列の行列式を計算する特別な方法もあり,ratmx:trueとsparse:trueと設定した場合に使え ます.

diagmatrix

diagmatrix(hni,h行列i)

n行n列の対角行列を返します.ここで対角成分は全てh行列iのものです. 尚,diagmatrix(n,1)

はident(n)と同じn次元の単位行列を生成します.

echelon

echelon(h行列i)

h行列iのechelon形式を生成します.これは初等的な行操作で各々の行の最初の非零元を1,そ

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

[2 1 - a -5 b ]

(d2) [ ]

[a b c ]

(c3) echelon(d2);

[ a - 1 5 b ]

[1 - --- - --- ]

[ 2 2 ]

(d3) [ ]

[ 2 c + 5 a b ]

[0 1 ---]

[ 2 ]

[ 2 b + a - a]

56 第8章 行列と線形代数について eigenvalues

eigenvalues (h行列i)

shareディレクトリ上のパッケージです.eigenvaluesとeigenvectorsと関連する行列の計算を行 う函数が含まれています.

eigenvaluesは引数に一つの行列を取り,リストを返します.このリストの最初の副リストは固有

値リストで,その他の副リストは固有値の順番に対応した重複度のリストとなります.尚,Maxima

の函数solveが,行列の特性多項式の根の計算で利用されていいます.solveは多項式の根を見付け損

なう事がありますが, conjugate,innerproduct,univector,columnvectorとgramschmidt以外は使え ず,これらだけが固有値が判らなくても使えます.幾つかの状況で,solveは非常にいい加減な固有値 を生成する事があります.

処理を続ける前に答を簡易化しても構いません.この為の予測があり,それらは以下で説明され ています.(これはsolveが実数と予測されるが,それ程明確でない実数式を返す場合に生じます.)

eigenvalue函数はMaximaから直接使える.この他の函数を利用する為にはeigenパッケージの

読み込みが必要となり,事前にeigenvaluesを実行するか, load(”eigen”)を実行しましょう.

eigenvectors

eigenvectors (h行列i)

引数として行列を取り,リストを返します.リストに含まれる最初の副リストにはeigenvalues函 数の出力,他の副リストには行列の各々の固有値に対応する固有ベクトルが含まれています.この

函数はMaximaから直接使えますが,以下の大域変数の設定を有効にしたければ,eigenパッケージ

の読込が必要となります.

nondiagonalizable[false]は,eigenvectors命令の実行後に, 行列が対角化不可能か否かによっ てtrueかfalseのどちらかが設定されます.

hermitianmatrixがtrueならば,Gram-Schmidt のアルゴリズムを用いて行列を対角化し,Her-mite行列の固有ベクトルを削減します.

knowneigvalsが,trueに設定されていれば,行列の固有値は既知であって,大域変数のlisteigvals に保存されているとeigenパッケージが仮定します. その為,listeigvalsにeigenvalues函数の 出力と同じリストが設定されている必要があります.尚,algsys函数が固有ベクトルの計算で 使われています. 固有値が不確かな場合,algsysが解を生成する事が出来ない事があります.

この場合,eigenvalues函数を使って最初に見つけた固有値の簡易化を行う事を勧めます.

ematrix

ematrix (hmi,hni,hxi,hii,hji)

hmihni列の行列でhiihji列成分のみがhxi,他が全て零となる行列を生成します.

entermatrix

entermatrix (hmi,hni)

Maximaの要求に従ってhmi × hni個の成分を入力して行列を生成します.

(c1) 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 ]

[ ]

(d1) [ 0 b 0 ]

[ ]

[ 0 0 c ]

genmatrix

genmatrix(h配列i,hi2i,hj2i,hi1i,hj1i)

配列から行列を生成します.ここで配列array(hi1i,hj1i)は最初(左側上)の元array(hi2i,hj2i)が 残り(左下)の元となります. hj1i=hi1iであれば,hj1iは削除されます. hj1i= hi1i= 1ならば, hi1ihj1iの両方が省略される事もあります.

配列の元が不足した場合には,記号的な元が使われます.

(c1) h[i,j]:=1/(i+j-1)$

(c2) genmatrix(h,3,3);

[ 1 1]

[1 - -]

[ 2 3]

[ ]

[1 1 1]

(d2) [- - -]

[2 3 4]

[ ]

[1 1 1]

[- - -]

[3 4 5]

58 第8章 行列と線形代数について gramschmidt

gramschmidt([hリスト1i,· · ·,hリストni])

eigenパッケージに含まれる函数です.予めload(eigen)を実行して利用します. gramschmidtは 引数にリストの列で構成されるリストを取ります. ここでhリストiiは全て長さが等しくなければ なりませんが,直交している必要はありません.

gramschmidtは互いに直交したリストで構成されたリストを返します. 尚、返ってきた結果には

因子分解された整数が含まれる事があります. これはMaximaのfactor函数がgram-schmidtの処 理の過程で使われた為です. こうする事で式が複雑なものになる事を回避し,生成される変数の大 きさを減らす助けにもなっています.

hach

hach (a,b,m,n,l)

Hacijanの線型プログラミングアルゴリズムの実装.予めload(kach)で読込む必要があります.

ident ident (hni)

hnihni列の単位行列を生成します.

innerproduct

innerproduct (hxi,hyi)

eigenパッケージに含まれる函数です.使う為には予めload(eigen)を実行します. innerproduct は同じ長さの二つのリストhxihyiを引数として取り, (hxiの複素共役) .hyiで定義されていま す.ここで,dot演算子は通常のベクトルの内積演算子と同じものです.

invert

invert (h行列i)

逆行列を余因子行列を用いた方法で計算します.これはbfloat値成分や浮動小数点を係数とする 多項式を成分とする行列の逆行列をCRE形式に変換せずに計算出来ます.determinant命令は余 因子の計算で利用されるので,ratmxがfalseならば,その逆行列は成分表現を変更せずに計算され ます.

現行の実装は高い次数の行列に対して効率的なものではありません.

detoutフラグがtrueであれば行列式の部分は逆行列の外側に出されたままとなります.

invertが返した結果は展開されていません.最初から多項式成分を持つ行列の場合,expand(invert(mat)),detout で生成された出力は見栄えが良くなります.

行列式で割られた方が望ましい場合,xthru(%)を併用したり, expand(adjoint(h行列i))/expand(determinant(h行 列i))で計算すると良いでしょう.

matrix

matrix (h1i,· · ·,hni)

指定した行を持つ行列を定義します.

matrixmap

matrixmap (h函数i,h行列i)

行列hmiの各成分にh函数iを作用させます.

matrixp

matrixp (hi)

hiが行列であればtrue,そうでなければfalseを返します.

mattrace

mattrace (h行列i) h行列iが正方行列の場合,対角和(行列の主対角成分の総和)を計算しま

す. これはncharpolyで利用されます.ncharpolyはMaximaのcharpolyの代りに用いられていま す.load(”nchrpl”)を実行する必要があります.

minor

minor (h行列i,hii,hji)

h行列ihii,hji成分の小行列,つまり,h行列iからhii行とhji列を抜いた小行列を計算します.

ncexpt

ncexpt(h行列1i,h行列2i)

h行列1i^^h行列2iを(非可換)指数式で表示する際に,大き過ぎれば ncexpt(h行列1i,h行列2i)が用いられます.

ncharpoly

ncharpoly (h行列i,h変数i)

h変数iに対するh行列iの特性多項式を計算します.これはMaximaのcharpolyとは別物です.

ncharpolyでは与えられた行列の羃乗の対角和を計算しますが,対角和は特性多項式の根の羃乗

の総和に等しいものです.これらの諸量から根の対称式の計算が可能ですが,それらは特性多項式 の係数です.charpolyはvar*ident[n]-aの行列式を計算している.そんな訳でncharpolyは優れてい る. 例えば,整数成分の非常に大きな行列の場合は算術的に多項式の計算を避ける為です.

予めload(”nchrpl”): で読込む必要があります.

newdet

newdet (hmi,hni)

hmiの行列式を計算します.この際に,Johnson-Gentleman tree minor アルゴリズムを用いま す.hmiは行列か配列の何れかで,hniは行列の大きさになります,これはhmiが行列であればオプ ションになります.

nonscalarp

nonscalarp (hi)

hiが非スカラ,つまり,原子を含み,非スカラと宣言されたリストや行列であればtrueを返し ますが,スカラの場合はfalseを返します.

60 第8章 行列と線形代数について permanent

permanent (h行列i,hni)

h行列iのpermanentを計算する.permanentは行列式に似ていますが, 符号の変化のないもの

です.

rank

rank (h行列i)

h行列iの階数を求めます.行列の階数は,行列から求めた小行列式で,零にならない小行列式で, 最大のものの大きさです. 尚,rankは行列成分の値が非常に零に近い場合には誤った答を返す事が あります.

row

row (h行列i,hii)

h行列ihii番目の行を出力します.

scalarp

scalarp (hi)

trueとなるのは,hiが数,定数やスカラーとして宣言された変数,数,定数,そしてその様な変 数の合成で行列やリストを含まない場合です.

setelmx

setelmx (hxi,hii,hji,h行列i

h行列ihiihji列成分をhxiで置換えます.置換えられた行列が返却されます.尚,直接行列 の成分を指定して置換える事も可能です. この場合,A[i,j]:xで行列Aの(i,j)成分をXで置換しま す.但し,この場合の返却値はxになります.

similaritytransform

similaritytransform (h行列i)

eigenパッケージに含まれる函数です.予め, load(eigen) で読込む必要があります.

h行列iを引数とし,uniteigenvectors命令の出力結果のリストを返します.

大域変数nondiagonalizableがfalseであれば,二つの行列leftmatrixとrightmatrixが生成され ます.このleftmatrixとrightmatrixは, leftmatrix .h行列i. rightmatrixが対角行列となり,h行 列iの固有値が対角成分に現れるものです.

nondiagonalizableがtrueであれば,これらの行列は生成されません.

大域変数hermitianmatrixがtrueであれば,leftmatrixはrightmatrixの複素共役の転置となり ます.その他で,leftmatrixはrightmatrixの逆行列になります. rightmatrixはh行列iの正規化し た固有ベクトルを列とする行列になります.

submatrix

submatrix (h1i,· · ·,hmi,h1i,· · ·,hni)

hii行とhji列が削除された新しい行列を生成すします.

transpose

transpose (h行列i)h行列iの転置行列を生成します.

triangularize

triangularize (h行列i)

h行列iの上三角行列形式を生成します.但し,行列が正方行列である必要はありません.

uniteigenvectors

uniteigenvectors (h行列i)

eigenパッケージの函数.利用する為には予め load(eigen)を実行します. uniteigenvaluesは与え られたh行列iの固有値と固有ベクトルで構成されたリストを返します.出力リストの第一成分の リストにはeigenvalues函数の出力があり,第二成分の副リストには正規化した固有ベクトルが,第 一成分のリストの固有値に対応する順番で並んでいます.

eigenvectors函数の詳細で述べた大域変数はここでも同様の影響を与えます.

unitvector

unitvector (hリストi)

eigenパッケージに含まれる函数.予めload(eigen) を実行して読込む必要があります.

unitvectorはhリストiを正規化したリスト,即ち,その大きさを1にしたリストを返します.

vectorsimp

vectorsimp (hベクトルi)

この函数は和の簡易化で様々な大域変数の設定と共に用います. ここで式は以下の大域変数の設 定に関連するものです.

expandall, expanddot, expanddotplus, expandcross, expandcrossplus, expandcrosscross, expandgrad, expandgradplus, expandgradprod,

expanddiv, expanddivplus, expanddivprod, expandcurl, expandcurlplus, expandcurlcurl, expandlaplacian, expandlaplacianplus,

expandlaplacianprod.

全てのこれらの大域変数はデフォルト値としてfalseを持ちます.

後にplusの付く大域変数は加法性と被演算子の分配性に関連します.

同様に,後にprodの付く大域変数はあらゆる種類の積演算に対する被演算子への分配性に関連 するものです.

expandcrosscrossはp (q r)を(p,r)*q-(p.q)*rで置換するかどうかを決めます.

expandcurlcurlはcurl curl pをgrad div p + div grad pで置換するかどうかを決定します.

expandcrossがtrueの場合,expandcrossplusとexpandcrosscrossがtrueと同じ効果があります.

二つの大域変数expandplusとexpandprodは似た名前の大域変数にtrueに設定した場合と同効 果です.これらが,trueであれば,他の大域変数, expandlaplaciantodivgradはlaplace演算子をdiv gradで置換えます.

尚,簡便の為にこれら全ての大域変数はevflagとして宣言されています.

ドキュメント内 , (ページ 61-70)