noro_matrix

noro_matrix User’s Manual

Edition 1.0

May 2008

by Masayuki Noro

Copyright © Masayuki Noro 2008. All rights reserved.


[ << ] [ < ] [上] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1 行列演算パッケージ noro_matrix.rr

このマニュアルでは, 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 ]

このマニュアルでは, 関連する組込み函数についても解説する.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1.1 行列に関する函数


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1.1.1 matrix,vector,linalg.unit_mat

matrix(m,n[,listoflist]) :: mn列の行列を生成する.
vector(size[,list]) :: サイズが size のベクトルを生成する.
linalg.unit_mat(size) :: サイズが size の単位行列を生成する.
return

行列

size
m
n

正整数

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 ]

[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1.1.2 linalg.random_mat, linalg.random_rmat, linalg.random_vect

linalg.random_mat(size,bound) :: 正方整数行列をランダム生成する.
linalg.random_rmat(m,n,bound) :: mn 列の整数行列をランダム生成する.
linalg.random_vect(size,bound) :: 整数ベクトルをランダム生成する.
return

整数

number

整数

[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 ]

[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1.1.3 invmat

invmat(mat)

:: mat の逆行列を計算する.

return

リスト

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 ]

[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1.1.4 det,nd_det

det(mat[,mod])
nd_det(mat[,mod])

:: mat の行列式を求める.

return

mat

行列

mod

素数

[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]]

[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1.1.5 generic_gauss_elim

generic_gauss_elim(mat)

:: 整数行列を簡約する.

return

リスト

mat

整数行列

[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}


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1.1.6 linalg.compute_kernel, linalg.compute_image

linalg.compute_kernel(mat[|rhs=vect])

:: 有理数行列の核の基底を計算する.

linalg.compute_image(mat)

:: 有理数行列の像の基底を計算する.

return

リスト

mat

有理数行列

vect

有理数ベクトル

[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>>]]

[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1.1.7 linalg.minipoly_mat

linalg.minipoly_mat(mat)

:: 有理数行列 mat の最小多項式を計算する.

return

一変数多項式

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 ]

[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

1.1.8 linalg.jordan_canonical_form,linalg.sample_mat

linalg.jordan_canonical_form(mat)

:: 有理数正方行列のジョルダン標準形を計算する.

linalg.sample_mat(list)

:: 指定されたジョルダン標準形を持つ有理数正方行列を生成する.

return

リスト

mat

有理数正方行列

list

ジョルダンブロックのリスト

[ 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}


[ << ] [ < ] [上] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

Index

移動:   D   G   I   L   M   N   V  
見出し一覧 

D
det 1.1.4 det,nd_det

G
generic_gauss_elim 1.1.5 generic_gauss_elim

I
invmat 1.1.3 invmat

L
linalg.compute_image 1.1.6 linalg.compute_kernel, linalg.compute_image
linalg.compute_kernel 1.1.6 linalg.compute_kernel, linalg.compute_image
linalg.jordan_canonical_form 1.1.8 linalg.jordan_canonical_form,linalg.sample_mat
linalg.minipoly_mat 1.1.7 linalg.minipoly_mat
linalg.random_mat 1.1.2 linalg.random_mat, linalg.random_rmat, linalg.random_vect
linalg.random_rmat 1.1.2 linalg.random_mat, linalg.random_rmat, linalg.random_vect
linalg.random_vect 1.1.2 linalg.random_mat, linalg.random_rmat, linalg.random_vect
linalg.unit_mat 1.1.1 matrix,vector,linalg.unit_mat

M
matrix 1.1.1 matrix,vector,linalg.unit_mat

N
nd_det 1.1.4 det,nd_det

V
vector 1.1.1 matrix,vector,linalg.unit_mat

移動:   D   G   I   L   M   N   V  

[冒頭] [目次] [見出し] [ ? ]

目次


[冒頭] [目次] [見出し] [ ? ]

簡略化した目次


[冒頭] [目次] [見出し] [ ? ]

この文書について

この文書は3月 28, 2024texi2html 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項を現在位置に仮定しています。


この文書は3月 28, 2024texi2html 5.0を用いて生成されました。