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 | 
|---|
| [冒頭] | [目次] | [見出し] | [ ? ] | 
| [冒頭] | [目次] | [見出し] | [ ? ] | 
| [冒頭] | [目次] | [見出し] | [ ? ] | 
この文書は10月 31, 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項を現在位置に仮定しています。
 
  この文書は10月 31, 2025にtexi2html 5.0を用いて生成されました。