Copyright © Masayuki Noro 2008. All rights reserved.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
1 行列演算パッケージ noro_matrix.rr | ||
Index |
1.1 行列に関する函数 |
このマニュアルでは, asir-contrib パッケージに収録されている, 行列演算パッケージ ‘noro_matrix.rr’ について解説する. このパッケージを使うには, まず ‘noro_matrix.rr’ をロードする.
[1831] load("noro_matrix.rr"); [2014]
このパッケージの函数を呼び出すには, 全て linalg.
を先頭につける.
[2014] linalg.random_mat(3,5); [ 0 -1 -1 ] [ -1 3 0 ] [ -2 -2 4 ]
このマニュアルでは, 関連する組込み函数についても解説する.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
matrix
,vector
,linalg.unit_mat
行列
正整数
リストのリスト
リスト
matrix
, vector
は組込み, linalg.unit_mat
は ‘noro_matrix.rr’
で定義されている.
matrix
, vector
は, listoflist, list が
ない場合には零行列, 零ベクトルを生成する.
[1559] matrix(2,3); [ 0 0 0 ] [ 0 0 0 ] [1560] vector(3); [ 0 0 0 ] [1561] linalg.unit_mat(3); [ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ] [1559] matrix(2,3,[[1,2,3],[4,5,6]]); [ 1 2 3 ] [ 4 5 6 ]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
linalg.random_mat
, linalg.random_rmat
, linalg.random_vect
整数
整数
[1579] linalg.random_mat(3,4); [ 2 1 -2 ] [ 0 -2 1 ] [ 3 1 -2 ] [1580] linalg.random_rmat(3,5,2); [ 0 -1 0 0 0 ] [ 0 -1 0 1 0 ] [ -1 0 0 -1 1 ] [1581] linalg.random_vect(3,6); [ -3 2 3 ]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
invmat
:: mat の逆行列を計算する.
リスト
正方行列
[1575] A=linalg.random_mat(4,5); [ 2 4 3 3 ] [ 3 0 0 0 ] [ 0 2 3 -2 ] [ 2 0 -4 3 ] [1576] L=invmat(A); [[ 0 38 0 0 ] [ -3 -28 63 45 ] [ 18 16 -36 -42 ] [ 24 -4 -48 -18 ],114] [1577] AI=L[0]/L[1]$ AI*A; [1578] [ 1 0 0 0 ] [ 0 1 0 0 ] [ 0 0 1 0 ] [ 0 0 0 1 ]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
det
,nd_det
:: mat の行列式を求める.
式
行列
素数
det
および nd_det
は行列 mat の行列式を求める.
nd_det
は有理数または有限体上の多項式行列の行列式
計算専用である. アルゴリズムはやはり分数なしのガウス消去法だが,
データ構造および乗除算の工夫により, 一般に det
より高速に
計算できる.
[91] A=matrix(5,5)$ [92] V=[x,y,z,u,v]; [x,y,z,u,v] [93] for(I=0;I<5;I++)for(J=0,B=A[I],W=V[I];J<5;J++)B[J]=W^J; [94] A; [ 1 x x^2 x^3 x^4 ] [ 1 y y^2 y^3 y^4 ] [ 1 z z^2 z^3 z^4 ] [ 1 u u^2 u^3 u^4 ] [ 1 v v^2 v^3 v^4 ] [95] fctr(det(A)); [[1,1],[u-v,1],[-z+v,1],[-z+u,1],[-y+u,1],[y-v,1],[-y+z,1],[-x+u,1], [-x+z,1],[-x+v,1],[-x+y,1]]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
generic_gauss_elim
:: 整数行列を簡約する.
リスト
整数行列
[1600] A=linalg.random_rmat(3,5,2); [ 0 -1 -1 0 -1 ] [ 1 0 1 -1 0 ] [ 1 1 0 0 0 ] [1601] L=generic_gauss_elim(A); [[ -1 -1 ] [ 1 1 ] [ -1 1 ],2,[ 0 1 2 ],[ 3 4 ]]
例えば, rref を計算する函数は次のように書ける.
def my_rref(A) { S = size(A); M = S[0]; N = S[1]; L = generic_gauss_elim(A); B = L[0]; D = L[1]; J = L[2]; K = L[3]; R = length(J); NR = N-R; A1 = matrix(M,N); for ( I = 0; I < R; I++ ) { A1[I][J[I]] = D; for ( L = 0; L < NR; L++ ) A1[I][K[L]] = B[I][L]; } return A1; }
@fref{matrix vector linalg.unit_mat}
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
linalg.compute_kernel
, linalg.compute_image
:: 有理数行列の核の基底を計算する.
:: 有理数行列の像の基底を計算する.
リスト
有理数行列
有理数ベクトル
linalg.compute_kernel
は有理数行列 mat の核の基底を計算する.
linalg.compute_kernel
の出力は [[v1,pos1],…,[vl,posl]] の形のリストである. ここで,
vi は基底ベクトル, posi は, vi の主成分位置, すなわち
最小のインデックスを持つ成分の位置を表す. posi は全て異なること
が保証される.
linalg.compute_image
は有理数行列 mat の像の基底を計算する.
linalg.compute_image
の出力は, [v1,pos1,hist1],…,[vl,posl,histl] の形のリストである.
ここで, vi は基底ベクトル, posi は, vi の主成分位置, すなわち
最小のインデックスを持つ成分の位置を表す. posi は全て異なること
が保証される. histi は, vi が, mat の列からどのように
作られるかを示すデータである. 分散多項式で表現されており, 指数が行インデックス,
係数が, 一次結合の係数を表す. このデータにより作られるベクトルは, 定数倍を
除いて vi に等しい.
[1643] A=linalg.random_rmat(3,5,3); [ 2 1 0 1 -1 ] [ 2 -2 1 0 1 ] [ 2 1 -1 -1 -1 ] [1644] linalg.compute_kernel(A); [[[ 1 0 -8 4 6 ],0],[[ 0 1 2 -1 0 ],1]] [1645] linalg.compute_kernel(A|rhs=vector(3,[1,2,3])); [[ 0 0 8 -5 -6 ],[[[ 1 0 -8 4 6 ],0],[[ 0 1 2 -1 0 ],1]]] [1646] linalg.compute_image(A); [[[ 1 1 1 ],0,(1)*<<0>>],[[ 0 -3 0 ],1,(1)*<<1>>+(-1)*<<0>>], [[ 0 0 3 ],2,(-3)*<<2>>+(-1)*<<1>>+(1)*<<0>>]]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
linalg.minipoly_mat
:: 有理数行列 mat の最小多項式を計算する.
一変数多項式
有理数行列
[1682] A=linalg.random_mat(3,3); [ -2 2 -2 ] [ 0 1 -1 ] [ 1 -2 -1 ] [1683] linalg.minipoly_mat(A); x^3+2*x^2-x-6 [1684] A^3+2*A^2-A-6*linalg.unit_mat(3); [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
linalg.jordan_canonical_form
,linalg.sample_mat
:: 有理数正方行列のジョルダン標準形を計算する.
:: 指定されたジョルダン標準形を持つ有理数正方行列を生成する.
リスト
有理数正方行列
ジョルダンブロックのリスト
linalg.jordan_canonical_form(mat)
は
有理数正方行列 mat のジョルダン標準形を計算する.
linalg.sample_mat(list)
は指定されたジョルダン標準形を
持つような行列を生成する. list は [[e1,s1],…,[el,sl]]
の形のリストで, [ei,s1] は固有値 ei, サイズ si の
ジョルダンブロックを表す. 同じサイズのジョルダンブロックはいくつあって
もよい.
[ 1 -2 0 ] [ -1 2 1 ] [ 0 -2 1 ] [1807] L=linalg.jordan_canonical_form(A); [[ 2 -2 0 ] [ -1 0 1 ] [ 2 -2 -1 ],[[2,1,1],[1,2,1]],[]] [1808] P=L[0]$T=invmat(P)$PI=T[0]/T[1]$ [1809] [1810] [1811] PI*A*P; [ 2 0 0 ] [ 0 1 1 ] [ 0 0 1 ] [1810] A=linalg.sample_mat([[1,2],[1,1],[2,3],[2,1],[2,1]]); [ 2 0 2 113 14 678 0 0 ] [ -1 1 -2 -120 -14 -720 0 0 ] [ -7 0 -13 -840 -105 -5040 0 0 ] [ 54 54 0 380 0 2268 -54 0 ] [ 1 0 2 112 16 672 0 0 ] [ -9 -9 0 -63 0 -376 9 0 ] [ 1 1 0 7 0 42 1 0 ] [ 1 1 0 7 0 42 0 2 ] [1811] L=linalg.jordan_canonical_form(A); [[ 0 -6 42 0 0 0 2 2 ] [ 0 6 0 0 0 0 0 -2 ] [ 42 -294 0 0 0 0 -1 -1 ] [ 0 0 0 6 0 108 0 0 ] [ -6 42 48 0 0 0 0 0 ] [ 0 0 -1 -1 0 -18 0 0 ] [ 0 0 0 0 0 2 0 0 ] [ 0 0 0 0 1 0 -2 0 ],[[2,3,1],[2,1,2],[1,2,1],[1,1,1]],[]]
@fref{linalg.minipoly_mat}
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
移動: | D G I L M N V |
---|
移動: | D G I L M N V |
---|
[冒頭] | [目次] | [見出し] | [ ? ] |
[冒頭] | [目次] | [見出し] | [ ? ] |
[冒頭] | [目次] | [見出し] | [ ? ] |
この文書は5月 2, 2025にtexi2html 5.0を用いて生成されました。
ナビゲーションパネル中のボタンには以下の意味があります。
ボタン | 名称 | 移動先 | 1.2.3項からの移動先 |
---|---|---|---|
[ << ] | FastBack | Beginning of this chapter or previous chapter | 1 |
[ < ] | Back | Previous section in reading order | 1.2.2 |
[上] | Up | Up section | 1.2 |
[ > ] | Forward | Next section in reading order | 1.2.4 |
[ >> ] | FastForward | Next chapter | 2 |
[冒頭] | 冒頭 | Cover (top) of document | |
[目次] | 目次 | Table of contents | |
[見出し] | 見出し | 見出し | |
[ ? ] | About | About (help) |
例では、以下に示す構造を持つ文書の1.2.3項を現在位置に仮定しています。
この文書は5月 2, 2025にtexi2html 5.0を用いて生成されました。