[BACK]Return to noro_matrix-ja.texi CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-contrib / packages / doc / noro_matrix

Annotation of OpenXM/src/asir-contrib/packages/doc/noro_matrix/noro_matrix-ja.texi, Revision 1.2

1.2     ! noro        1: %comment $OpenXM: OpenXM/src/asir-contrib/packages/doc/noro_matrix/noro_matrix-ja.texi,v 1.1 2008/05/18 07:37:43 noro Exp $
        !             2: %comment --- おまじない ---
1.1       noro        3: \input texinfo
                      4: @iftex
                      5: @catcode`@#=6
                      6: @def@fref#1{@xrefX[#1,,@code{#1},,,]}
                      7: @def@b#1{{@bf@gt #1}}
                      8: @catcode`@#=@other
                      9: @end iftex
                     10: @overfullrule=0pt
                     11: @c -*-texinfo-*-
                     12: @comment %**start of header
1.2     ! noro       13: @comment --- おまじない終り ---
1.1       noro       14:
1.2     ! noro       15: @comment --- GNU info ファイルの名前 ---
1.1       noro       16: @setfilename asir-contrib-noro_matrix
                     17:
1.2     ! noro       18: @comment --- タイトル ---
1.1       noro       19: @settitle noro_matrix
                     20:
                     21: @comment %**end of header
                     22: @comment %@setchapternewpage odd
                     23:
1.2     ! noro       24: @comment --- おまじない ---
1.1       noro       25: @ifinfo
                     26: @macro fref{name}
                     27: @ref{\name\,,@code{\name\}}
                     28: @end macro
                     29: @end ifinfo
                     30:
                     31: @iftex
                     32: @comment @finalout
                     33: @end iftex
                     34:
                     35: @titlepage
1.2     ! noro       36: @comment --- おまじない終り ---
1.1       noro       37:
1.2     ! noro       38: @comment --- タイトル, バージョン, 著者名, 著作権表示 ---
1.1       noro       39: @title noro_matrix
                     40: @subtitle noro_matrix User's Manual
                     41: @subtitle Edition 1.0
                     42: @subtitle May 2008
                     43:
                     44: @author  by Masayuki Noro
                     45: @page
                     46: @vskip 0pt plus 1filll
                     47: Copyright @copyright{} Masayuki Noro
                     48: 2008. All rights reserved.
                     49: @end titlepage
                     50:
1.2     ! noro       51: @comment --- おまじない ---
1.1       noro       52: @synindex vr fn
1.2     ! noro       53: @comment --- おまじない終り ---
1.1       noro       54:
1.2     ! noro       55: @comment --- @node は GNU info, HTML 用 ---
        !            56: @comment --- @node  の引数は node-name,  next,  previous,  up ---
1.1       noro       57: @node Top,, (dir), (dir)
                     58:
1.2     ! noro       59: @comment --- @menu は GNU info, HTML 用 ---
        !            60: @comment --- chapter 名を正確に並べる ---
1.1       noro       61: @menu
1.2     ! noro       62: * 行列演算パッケージ noro_matrix.rr::
1.1       noro       63: * Index::
                     64: @end menu
                     65:
1.2     ! noro       66: @comment --- chapter の開始 ---
        !            67: @comment --- 親 chapter 名を正確に ---
        !            68: @node 行列演算パッケージ noro_matrix.rr,,, Top
        !            69: @chapter 行列演算パッケージ noro_matrix.rr
1.1       noro       70:
1.2     ! noro       71: @comment --- section 名を正確に並べる ---
1.1       noro       72: @menu
1.2     ! noro       73: * 行列に関する函数::
1.1       noro       74: @end menu
                     75:
1.2     ! noro       76: このマニュアルでは, asir-contrib パッケージに収録されている,
        !            77: 行列演算パッケージ @samp{noro_matrix.rr} について解説する.
        !            78: このパッケージを使うには, まず @samp{noro_matrix.rr} をロードする.
1.1       noro       79: @example
                     80: [1831] load("noro_matrix.rr");
                     81: [2014]
                     82: @end example
1.2     ! noro       83: このパッケージの函数を呼び出すには, 全て @code{linalg.} を先頭につける.
1.1       noro       84: @example
                     85: [2014] linalg.random_mat(3,5);
                     86: [ 0 -1 -1 ]
                     87: [ -1 3 0 ]
                     88: [ -2 -2 4 ]
                     89: @end example
1.2     ! noro       90: このマニュアルでは, 関連する組込み函数についても解説する.
1.1       noro       91:
1.2     ! noro       92: @comment --- section の開始 ---
        !            93: @comment --- 書体指定について ---
        !            94: @comment --- @code{} はタイプライタ体表示 ---
        !            95: @comment --- @var{} は斜字体表示 ---
        !            96: @comment --- @b{} はボールド表示 ---
        !            97: @comment --- @samp{} はファイル名などの表示 ---
1.1       noro       98:
1.2     ! noro       99: @node 行列に関する函数,,, 行列演算パッケージ noro_matrix.rr
        !           100: @section 行列に関する函数
1.1       noro      101:
                    102: @menu
                    103: * matrix vector linalg.unit_mat::
                    104: * linalg.random_mat linalg.random_rmat linalg.random_vect::
                    105: * invmat::
                    106: * det nd_det::
                    107: * generic_gauss_elim::
                    108: * linalg.compute_kernel linalg.compute_image::
                    109: * linalg.minipoly_mat::
                    110: * linalg.jordan_canonical_form linalg.sample_mat::
                    111: @end menu
                    112:
1.2     ! noro      113: @node matrix vector linalg.unit_mat,,, 行列に関する函数
1.1       noro      114: @subsection @code{matrix},@code{vector},@code{linalg.unit_mat}
                    115: @findex matrix
                    116: @findex vector
                    117: @findex linalg.unit_mat
                    118:
                    119: @table @t
1.2     ! noro      120: @item matrix(@var{m},@var{n}[,@var{listoflist}]) :: @var{m}行@var{n}列の行列を生成する.
        !           121: @itemx vector(@var{size}[,@var{list}]) :: サイズが @var{size} のベクトルを生成する.
        !           122: @itemx linalg.unit_mat(@var{size}) :: サイズが @var{size} の単位行列を生成する.
1.1       noro      123: @end table
                    124:
                    125: @table @var
                    126: @item return
1.2     ! noro      127: 行列
1.1       noro      128: @item size
                    129: @itemx m
                    130: @itemx n
1.2     ! noro      131: 正整数
1.1       noro      132: @item listoflist
1.2     ! noro      133: リストのリスト
1.1       noro      134: @item list
1.2     ! noro      135: リスト
1.1       noro      136: @end table
                    137:
                    138: @itemize @bullet
                    139: @item
1.2     ! noro      140: @code{matrix}, @code{vector} は組込み, @code{linalg.unit_mat} は @samp{noro_matrix.rr}
        !           141: で定義されている.
1.1       noro      142: @item
1.2     ! noro      143: @code{matrix}, @code{vector} は, @var{listoflist}, @var{list} が
        !           144: ない場合には零行列, 零ベクトルを生成する.
1.1       noro      145: @item
1.2     ! noro      146: @var{listoflist} は @var{[[1,2,3],[3,4,5]]} のようにリストからなるリストで
        !           147: ある. これが引数として与えられた場合, 要素であるリストを使って
        !           148: 行列の各行が順に初期化される.
        !           149: @item
        !           150: @var{list} は @var{[1,2,3]} のようなリストである.
        !           151: これが引数として与えられた場合, このリストの要素によりベクトルの各
        !           152: 成分が初期化される.
1.1       noro      153: @end itemize
                    154:
                    155: @example
                    156: [1559] matrix(2,3);
                    157: [ 0 0 0 ]
                    158: [ 0 0 0 ]
                    159: [1560] vector(3);
                    160: [ 0 0 0 ]
                    161: [1561] linalg.unit_mat(3);
                    162: [ 1 0 0 ]
                    163: [ 0 1 0 ]
                    164: [ 0 0 1 ]
                    165: [1559] matrix(2,3,[[1,2,3],[4,5,6]]);
                    166: [ 1 2 3 ]
                    167: [ 4 5 6 ]
                    168: @end example
                    169:
                    170:
1.2     ! noro      171: @node linalg.random_mat linalg.random_rmat linalg.random_vect,,, 行列に関する函数
1.1       noro      172: @subsection @code{linalg.random_mat}, @code{linalg.random_rmat}, @code{linalg.random_vect}
                    173: @findex linalg.random_mat
                    174: @findex linalg.random_rmat
                    175: @findex linalg.random_vect
                    176:
                    177: @table @t
1.2     ! noro      178: @item linalg.random_mat(@var{size},@var{bound}) :: 正方整数行列をランダム生成する.
        !           179: @itemx linalg.random_rmat(@var{m},@var{n},@var{bound}) :: @var{m} 行 @var{n} 列の整数行列をランダム生成する.
        !           180: @itemx linalg.random_vect(@var{size},@var{bound}) :: 整数ベクトルをランダム生成する.
1.1       noro      181: @end table
                    182:
                    183: @table @var
                    184: @item return
1.2     ! noro      185: 整数
1.1       noro      186: @item number
1.2     ! noro      187: 整数
1.1       noro      188: @end table
                    189:
                    190: @itemize @bullet
1.2     ! noro      191: @item linalg.random_mat(@var{size},@var{bound}) は, サイズ @var{size},
        !           192: 要素が@var{bound}未満の
        !           193: 正方整数行列をランダム生成する.
        !           194: @item
        !           195: @item linalg.random_rmat(@var{m},@var{n},@var{bound}) は
        !           196: @var{m} 行 @var{n} 列の,
        !           197: 要素が@var{bound}未満の整数行列をランダム生成する.
        !           198: @item linalg.random_vect(@var{size},@var{bound}) は長さ @var{size}の,
        !           199: 要素が@var{bound}未満の整数ベクトルをランダム生成する.
1.1       noro      200: @end itemize
                    201:
                    202: @example
                    203: [1579] linalg.random_mat(3,4);
                    204: [ 2 1 -2 ]
                    205: [ 0 -2 1 ]
                    206: [ 3 1 -2 ]
                    207: [1580] linalg.random_rmat(3,5,2);
                    208: [ 0 -1 0 0 0 ]
                    209: [ 0 -1 0 1 0 ]
                    210: [ -1 0 0 -1 1 ]
                    211: [1581] linalg.random_vect(3,6);
                    212: [ -3 2 3 ]
                    213: @end example
                    214:
1.2     ! noro      215: @node invmat,,, 行列に関する函数
1.1       noro      216: @subsection @code{invmat}
                    217: @findex invmat
                    218:
                    219: @table @t
                    220: @item invmat(@var{mat})
1.2     ! noro      221: :: @var{mat} の逆行列を計算する.
1.1       noro      222: @end table
                    223:
                    224: @table @var
                    225: @item return
1.2     ! noro      226: リスト
1.1       noro      227: @item mat
1.2     ! noro      228: 正方行列
1.1       noro      229: @end table
                    230:
                    231: @itemize @bullet
                    232: @item
1.2     ! noro      233: 正方行列 @var{mat} の逆行列を計算する.
1.1       noro      234: @item
1.2     ! noro      235: 結果は @var{[invmat,denom]} なるリストである. ここで, @var{invmat} は
        !           236: 行列, @var{denom} は分母を表す式であり, @var{invmat/denom} が逆行列を表す.
1.1       noro      237: @item
1.2     ! noro      238: @var{mat}が整数行列, あるいは多項式行列の場合, @var{invmat} は
        !           239: それぞれ整数行列, あるいは多項式となる. この仕様は, 無駄な分数, 有理式
        !           240: 計算を省くために定められているが, 使いにくい場合もある.
1.1       noro      241: @end itemize
                    242:
                    243: @example
                    244: [1575] A=linalg.random_mat(4,5);
                    245: [ 2 4 3 3 ]
                    246: [ 3 0 0 0 ]
                    247: [ 0 2 3 -2 ]
                    248: [ 2 0 -4 3 ]
                    249: [1576] L=invmat(A);
                    250: [[ 0 38 0 0 ]
                    251: [ -3 -28 63 45 ]
                    252: [ 18 16 -36 -42 ]
                    253: [ 24 -4 -48 -18 ],114]
                    254: [1577] AI=L[0]/L[1]$ AI*A;
                    255: [1578] [ 1 0 0 0 ]
                    256: [ 0 1 0 0 ]
                    257: [ 0 0 1 0 ]
                    258: [ 0 0 0 1 ]
                    259: @end example
                    260:
1.2     ! noro      261: @node det nd_det,,, 行列に関する函数
1.1       noro      262: @subsection @code{det},@code{nd_det}
                    263: @findex det
                    264: @findex nd_det
                    265:
                    266: @table @t
                    267: @item det(@var{mat}[,@var{mod}])
                    268: @itemx nd_det(@var{mat}[,@var{mod}])
1.2     ! noro      269: :: @var{mat} の行列式を求める.
1.1       noro      270: @end table
                    271:
                    272: @table @var
                    273: @item return
1.2     ! noro      274: 式
1.1       noro      275: @item mat
1.2     ! noro      276: 行列
1.1       noro      277: @item mod
1.2     ! noro      278: 素数
1.1       noro      279: @end table
                    280:
                    281: @itemize @bullet
                    282: @item
1.2     ! noro      283: @code{det} および @code{nd_det} は行列 @var{mat} の行列式を求める.
1.1       noro      284: @item
1.2     ! noro      285: 引数 @var{mod} がある時, GF(@var{mod}) 上での行列式を求める.
1.1       noro      286: @item
1.2     ! noro      287: 分数なしのガウス消去法によっているため, 多変数多項式を成分とする
        !           288: 行列に対しては小行列式展開による方法のほうが効率がよい場合もある.
1.1       noro      289: @item
1.2     ! noro      290: @code{nd_det} は有理数または有限体上の多項式行列の行列式
        !           291: 計算専用である. アルゴリズムはやはり分数なしのガウス消去法だが,
        !           292: データ構造および乗除算の工夫により, 一般に @code{det} より高速に
        !           293: 計算できる.
1.1       noro      294: @end itemize
                    295:
                    296: @example
                    297: [91] A=matrix(5,5)$
                    298: [92] V=[x,y,z,u,v];
                    299: [x,y,z,u,v]
                    300: [93] for(I=0;I<5;I++)for(J=0,B=A[I],W=V[I];J<5;J++)B[J]=W^J;
                    301: [94] A;
                    302: [ 1 x x^2 x^3 x^4 ]
                    303: [ 1 y y^2 y^3 y^4 ]
                    304: [ 1 z z^2 z^3 z^4 ]
                    305: [ 1 u u^2 u^3 u^4 ]
                    306: [ 1 v v^2 v^3 v^4 ]
                    307: [95] fctr(det(A));
                    308: [[1,1],[u-v,1],[-z+v,1],[-z+u,1],[-y+u,1],[y-v,1],[-y+z,1],[-x+u,1],
                    309: [-x+z,1],[-x+v,1],[-x+y,1]]
                    310: @end example
                    311:
1.2     ! noro      312: @node generic_gauss_elim,,, 行列に関する函数
1.1       noro      313: @subsection @code{generic_gauss_elim}
                    314: @findex generic_gauss_elim
                    315:
                    316: @table @t
                    317: @item generic_gauss_elim(@var{mat})
1.2     ! noro      318: :: 整数行列を簡約する.
1.1       noro      319: @end table
                    320:
                    321: @table @var
                    322: @item return
1.2     ! noro      323: リスト
1.1       noro      324: @item mat
1.2     ! noro      325: 整数行列
1.1       noro      326: @end table
                    327:
                    328: @itemize @bullet
                    329: @item
1.2     ! noro      330: 整数行列 @var{mat} の簡約階段形 (reduced row echelon form; rref) を計算し,
        !           331: それを構成するデータをリストとして返す.
1.1       noro      332: @item
1.2     ! noro      333: 出力は @var{[B,D,J,K]} の形のリストである. 入力 @var{mat} が @var{m} 行
        !           334: @var{n} 列とし, そのランクが @var{r} とすれば, @var{B} は @var{r} 行
        !           335: @var{n-r} 列の行列である. @var{D} は整数, @var{J} は長さ @var{r},
        !           336: @var{K} は長さ @var{n-r} の整数ベクトルである.
        !           337: @item
        !           338: 出力データは @var{mat} の rref をエンコードしている.
        !           339: rref の第 @var{J[l]} 列は @var{l} 行目のみが @var{D}, それ以外は 0 の
        !           340: 列ベクトル, rref の 第 @var{K[l]} 列は @var{B} の第 @var{l} 列を, 上から
        !           341: 詰めたものとなる.
        !           342: @item
        !           343: このような形式で出力する理由は, 入力行列のランクが大きい場合に,
        !           344: rref は 0 が多い疎な行列となり, メモリを多く消費することと,
        !           345: この形の方が, プログラム上でデータを利用しやすいことによる.
1.1       noro      346: @end itemize
                    347:
                    348: @example
                    349: [1600] A=linalg.random_rmat(3,5,2);
                    350: [ 0 -1 -1 0 -1 ]
                    351: [ 1 0 1 -1 0 ]
                    352: [ 1 1 0 0 0 ]
                    353: [1601] L=generic_gauss_elim(A);
                    354: [[ -1 -1 ]
                    355: [ 1 1 ]
                    356: [ -1 1 ],2,[ 0 1 2 ],[ 3 4 ]]
                    357: @end example
                    358:
1.2     ! noro      359: 例えば, rref を計算する函数は次のように書ける.
1.1       noro      360: @example
                    361: def my_rref(A)
                    362: @{
                    363:     S = size(A); M = S[0]; N = S[1];
                    364:     L = generic_gauss_elim(A);
                    365:     B = L[0]; D = L[1]; J = L[2]; K = L[3];
                    366:     R = length(J); NR = N-R;
                    367:     A1 = matrix(M,N);
                    368:     for ( I = 0; I < R; I++ ) @{
                    369:         A1[I][J[I]] = D;
                    370:         for ( L = 0; L < NR; L++ ) A1[I][K[L]] = B[I][L];
                    371:     @}
                    372:     return A1;
                    373: @}
                    374: @end example
                    375:
                    376:
                    377: @table @t
1.2     ! noro      378: @item 参照
1.1       noro      379: @fref{matrix vector linalg.unit_mat}
                    380: @end table
                    381:
1.2     ! noro      382: @node linalg.compute_kernel linalg.compute_image,,, 行列に関する函数
1.1       noro      383: @subsection @code{linalg.compute_kernel}, @code{linalg.compute_image}
                    384: @findex linalg.compute_kernel
                    385: @findex linalg.compute_image
                    386:
                    387: @table @t
                    388: @item linalg.compute_kernel(@var{mat}[|rhs=@var{vect}])
1.2     ! noro      389: :: 有理数行列の核の基底を計算する.
1.1       noro      390: @itemx linalg.compute_image(@var{mat})
1.2     ! noro      391: :: 有理数行列の像の基底を計算する.
1.1       noro      392: @end table
                    393:
                    394: @table @var
                    395: @item return
1.2     ! noro      396: リスト
1.1       noro      397: @item mat
1.2     ! noro      398: 有理数行列
1.1       noro      399: @item vect
1.2     ! noro      400: 有理数ベクトル
1.1       noro      401: @end table
                    402:
                    403: @itemize @bullet
                    404: @item
1.2     ! noro      405: @var{m} 行 @var{n} 列の行列を, 列ベクトルに左から掛けることにより
        !           406: @var{n} 次元ベクトル空間から
        !           407: @var{m} 次元ベクトル空間への線形写像とみなす.
        !           408: @item
        !           409: @code{linalg.compute_kernel} は有理数行列 @var{mat} の核の基底を計算する.
        !           410: @item
        !           411: @code{linalg.compute_kernel} の出力は @var{[[v1,pos1],@dots{},[vl,posl]]} の形のリストである. ここで,
        !           412: @var{vi} は基底ベクトル, @var{posi} は, @var{vi} の主成分位置, すなわち
        !           413: 最小のインデックスを持つ成分の位置を表す. @var{posi} は全て異なること
        !           414: が保証される.
        !           415: @item
        !           416: オプション @var{vect} が指定された場合, 結果は
        !           417: @var{[@var{sol},[[v1,pos1],@dots{},[vl,posl]]]} なるリストとなる.
        !           418: ここで @var{sol} は @var{mat sol = vect} を満たすベクトル (特殊解),
        !           419: のこりは核の基底である.
        !           420: @item
        !           421: 解が存在しないような @var{vect} を指定するとエラーを起こす.
        !           422: @item
        !           423: @code{linalg.compute_image} は有理数行列 @var{mat} の像の基底を計算する.
        !           424: @item
        !           425: @code{linalg.compute_image} の出力は, @var{[v1,pos1,hist1],@dots{},[vl,posl,histl]} の形のリストである.
        !           426: ここで, @var{vi} は基底ベクトル, @var{posi} は, @var{vi} の主成分位置, すなわち
        !           427: 最小のインデックスを持つ成分の位置を表す. @var{posi} は全て異なること
        !           428: が保証される. @var{histi} は, @var{vi} が, @var{mat} の列からどのように
        !           429: 作られるかを示すデータである. 分散多項式で表現されており, 指数が行インデックス,
        !           430: 係数が, 一次結合の係数を表す. このデータにより作られるベクトルは, 定数倍を
        !           431: 除いて @var{vi} に等しい.
1.1       noro      432: @end itemize
                    433:
                    434: @example
                    435: [1643] A=linalg.random_rmat(3,5,3);
                    436: [ 2 1 0 1 -1 ]
                    437: [ 2 -2 1 0 1 ]
                    438: [ 2 1 -1 -1 -1 ]
                    439: [1644] linalg.compute_kernel(A);
                    440: [[[ 1 0 -8 4 6 ],0],[[ 0 1 2 -1 0 ],1]]
                    441: [1645] linalg.compute_kernel(A|rhs=vector(3,[1,2,3]));
                    442: [[ 0 0 8 -5 -6 ],[[[ 1 0 -8 4 6 ],0],[[ 0 1 2 -1 0 ],1]]]
                    443: [1646] linalg.compute_image(A);
                    444: [[[ 1 1 1 ],0,(1)*<<0>>],[[ 0 -3 0 ],1,(1)*<<1>>+(-1)*<<0>>],
                    445: [[ 0 0 3 ],2,(-3)*<<2>>+(-1)*<<1>>+(1)*<<0>>]]
                    446: @end example
                    447:
1.2     ! noro      448: @node linalg.minipoly_mat,,, 行列に関する函数
1.1       noro      449: @subsection @code{linalg.minipoly_mat}
                    450: @findex linalg.minipoly_mat
                    451:
                    452: @table @t
                    453: @item linalg.minipoly_mat(@var{mat})
1.2     ! noro      454: :: 有理数行列 @var{mat} の最小多項式を計算する.
1.1       noro      455: @end table
                    456:
                    457: @table @var
                    458: @item return
1.2     ! noro      459: 一変数多項式
1.1       noro      460: @item mat
1.2     ! noro      461: 有理数行列
1.1       noro      462: @end table
                    463:
                    464: @itemize @bullet
                    465: @item
1.2     ! noro      466: 有理数行列 @var{mat} の最小多項式を計算し, 変数 @var{x} の一変数多項式として
        !           467: 返す.
1.1       noro      468: @end itemize
                    469:
                    470: @example
                    471: [1682] A=linalg.random_mat(3,3);
                    472: [ -2 2 -2 ]
                    473: [ 0 1 -1 ]
                    474: [ 1 -2 -1 ]
                    475: [1683] linalg.minipoly_mat(A);
                    476: x^3+2*x^2-x-6
                    477: [1684] A^3+2*A^2-A-6*linalg.unit_mat(3);
                    478: [ 0 0 0 ]
                    479: [ 0 0 0 ]
                    480: [ 0 0 0 ]
                    481: @end example
                    482:
1.2     ! noro      483: @node linalg.jordan_canonical_form linalg.sample_mat,,, 行列に関する函数
1.1       noro      484: @subsection @code{linalg.jordan_canonical_form},@code{linalg.sample_mat}
                    485: @findex linalg.jordan_canonical_form
                    486:
                    487: @table @t
                    488: @item linalg.jordan_canonical_form(@var{mat})
1.2     ! noro      489: :: 有理数正方行列のジョルダン標準形を計算する.
1.1       noro      490: @itemx linalg.sample_mat(@var{list})
1.2     ! noro      491: :: 指定されたジョルダン標準形を持つ有理数正方行列を生成する.
1.1       noro      492: @end table
                    493:
                    494: @table @var
                    495: @item return
1.2     ! noro      496: リスト
1.1       noro      497: @item mat
1.2     ! noro      498: 有理数正方行列
1.1       noro      499: @item list
1.2     ! noro      500: ジョルダンブロックのリスト
1.1       noro      501: @end table
                    502:
                    503: @itemize @bullet
                    504: @item
1.2     ! noro      505: @code{linalg.jordan_canonical_form(@var{mat})} は
        !           506: 有理数正方行列 @var{mat} のジョルダン標準形を計算する.
1.1       noro      507: @item
1.2     ! noro      508: 出力は @var{[P,[[e1,s1,n1],@dots{},[el,sl,nl]],defideal]} という形のリスト
        !           509: である. ここで, @var{P} は変換行列, すなわち @var{P^(-1)AP} がジョルダン
        !           510: 標準形となる正則行列, @var{[ei,si,ni]} は, 固有値 @var{ei}, サイズ @var{si}
        !           511: のジョルダンブロックが @var{ni} 個並ぶことを意味する.
        !           512: @item
        !           513: 一般に, 出力は @var{a0}, @dots{}, @var{am} の形のパラメタを含む. これらは
        !           514: 実際には, ある有理数体上既約な多項式の根である. これらを定義する
        !           515: 方程式として, @var{defideal} が与えられる. @var{deflideal} はリストのリスト
        !           516: であり, 各要素であるリストは, 一組の共役な根全体を定義するイデアルを
        !           517: 表す. 実際には, 対応する一変数多項式の根を, 根と係数の関係により表した
        !           518: ものである.
        !           519: @item
        !           520: @code{linalg.sample_mat(@var{list})} は指定されたジョルダン標準形を
        !           521: 持つような行列を生成する. @var{list} は @var{[[e1,s1],@dots{},[el,sl]]}
        !           522: の形のリストで, @var{[ei,s1]} は固有値 @var{ei}, サイズ @var{si} の
        !           523: ジョルダンブロックを表す. 同じサイズのジョルダンブロックはいくつあって
        !           524: もよい.
1.1       noro      525: @end itemize
                    526:
                    527: @example
                    528: [ 1 -2 0 ]
                    529: [ -1 2 1 ]
                    530: [ 0 -2 1 ]
                    531: [1807] L=linalg.jordan_canonical_form(A);
                    532: [[ 2 -2 0 ]
                    533: [ -1 0 1 ]
                    534: [ 2 -2 -1 ],[[2,1,1],[1,2,1]],[]]
                    535: [1808] P=L[0]$T=invmat(P)$PI=T[0]/T[1]$
                    536: [1809] [1810] [1811] PI*A*P;
                    537: [ 2 0 0 ]
                    538: [ 0 1 1 ]
                    539: [ 0 0 1 ]
                    540: [1810] A=linalg.sample_mat([[1,2],[1,1],[2,3],[2,1],[2,1]]);
                    541: [ 2 0 2 113 14 678 0 0 ]
                    542: [ -1 1 -2 -120 -14 -720 0 0 ]
                    543: [ -7 0 -13 -840 -105 -5040 0 0 ]
                    544: [ 54 54 0 380 0 2268 -54 0 ]
                    545: [ 1 0 2 112 16 672 0 0 ]
                    546: [ -9 -9 0 -63 0 -376 9 0 ]
                    547: [ 1 1 0 7 0 42 1 0 ]
                    548: [ 1 1 0 7 0 42 0 2 ]
                    549: [1811] L=linalg.jordan_canonical_form(A);
                    550: [[ 0 -6 42 0 0 0 2 2 ]
                    551: [ 0 6 0 0 0 0 0 -2 ]
                    552: [ 42 -294 0 0 0 0 -1 -1 ]
                    553: [ 0 0 0 6 0 108 0 0 ]
                    554: [ -6 42 48 0 0 0 0 0 ]
                    555: [ 0 0 -1 -1 0 -18 0 0 ]
                    556: [ 0 0 0 0 0 2 0 0 ]
                    557: [ 0 0 0 0 1 0 -2 0 ],[[2,3,1],[2,1,2],[1,2,1],[1,1,1]],[]]
                    558: @end example
                    559:
                    560: @table @t
1.2     ! noro      561: @item 参照
1.1       noro      562: @fref{linalg.minipoly_mat}
                    563: @end table
                    564:
1.2     ! noro      565: @comment --- おまじない ---
1.1       noro      566: @node Index,,, Top
                    567: @unnumbered Index
                    568: @printindex fn
                    569: @printindex cp
                    570: @iftex
                    571: @vfill @eject
                    572: @end iftex
                    573: @summarycontents
                    574: @contents
                    575: @bye
1.2     ! noro      576: @comment --- おまじない終り ---
1.1       noro      577:
                    578: * linalg.reduce_vect::
                    579: * linalg.partial_fraction::
                    580: * linalg.power_mat linalg.exp_mat::
                    581:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>