Annotation of OpenXM/src/asir-contrib/packages/doc/f_res/f_res-ja.texi, Revision 1.1
1.1 ! noro 1: \input texinfo
! 2: @comment $OpenXM$
! 3: @comment Copyright (c) 2005, Kenji Fujiwara,
! 4: @comment Permission is granted to copy, distribute and/or modify this document
! 5: @comment under the terms of the GNU Free Documentation License, Version 1.1
! 6: @comment or any later version published by the Free Software Foundation;
! 7: @comment with the Invariant Sections being LIST THEIR TITLES, with the
! 8: @comment Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
! 9: @comment A copy of the license is included in the section entitled "GNU
! 10: @comment Free Documentation License".
! 11: @comment
! 12: @comment \input texinfo
! 13: @iftex
! 14: @catcode`@#=6
! 15: @def@fref#1{@xrefX[#1,,@code{#1},,,]}
! 16: @def@b#1{{@bf@gt #1}}
! 17: @catcode`@#=@other
! 18: @end iftex
! 19: @overfullrule=0pt
! 20: @c -*-texinfo-*-
! 21: @comment %**start of header
! 22: @comment --- おまじない終り ---
! 23:
! 24: @comment --- GNU info ファイルの名前 ---
! 25: @setfilename asir-contrib-f_res
! 26:
! 27: @comment --- タイトル ---
! 28: @settitle Risa/Asir 終結式計算パッケージ @code{f_res}
! 29:
! 30: @comment %**end of header
! 31: @comment %@setchapternewpage odd
! 32:
! 33: @comment --- おまじない ---
! 34: @ifinfo
! 35: @macro fref{name}
! 36: @ref{\name\,,@code{\name\}}
! 37: @end macro
! 38: @end ifinfo
! 39:
! 40: @iftex
! 41: @comment @finalout
! 42: @end iftex
! 43:
! 44: @titlepage
! 45: @comment --- おまじない終り ---
! 46:
! 47: @comment --- タイトル, バージョン, 著者名, 著作権表示 ---
! 48: @title Risa/Asir 終結式計算パッケージ @code{f_res} 説明書
! 49: @subtitle 利用説明書
! 50: @subtitle 1.0 版
! 51: @subtitle 2005 年 6 月
! 52:
! 53: @author by Kenji Fujiwara and Masayuki Noro
! 54: @page
! 55: @vskip 0pt plus 1filll
! 56: Copyright @copyright{} Risa/Asir committers
! 57: 2001. All rights reserved.
! 58: @end titlepage
! 59:
! 60: @comment --- おまじない ---
! 61: @synindex vr fn
! 62: @comment --- おまじない終り ---
! 63:
! 64: @comment --- @node は GNU info, HTML 用 ---
! 65: @comment --- @node の引数は node-name, next, previous, up ---
! 66: @node Top,, (dir), (dir)
! 67:
! 68: @menu
! 69: * 関数マニュアル::
! 70: * Index::
! 71: @end menu
! 72:
! 73: @node 関数マニュアル,,, Top
! 74: @chapter 関数マニュアル
! 75:
! 76: @menu
! 77: * 概要::
! 78: * Notation::
! 79: * 主な関数::
! 80: @end menu
! 81:
! 82: @comment --- 書体指定について ---
! 83: @comment --- @code{} はタイプライタ体表示 ---
! 84: @comment --- @var{} は斜字体表示 ---
! 85: @comment --- @b{} はボールド表示 ---
! 86: @comment --- @samp{} はファイル名などの表示 ---
! 87:
! 88: @node 概要,,, 関数マニュアル
! 89: @section 概要
! 90:
! 91: @code{f_res} パッケージは, 多変数多項式集合に対し, dense な係数をもつ
! 92: としてmultipolynomial resultant を計算する @code{f_res.mres},
! 93: sparse な係数を持つ
! 94: 場合に sparse resultant を計算する @code{f_res.sres}, Dixon の方法により
! 95: resultant を計算する @code{f_res.dres} および, 付随する関数を実装している.
! 96: 実際には, これらは真の resultant の多項式倍を返す場合があるが, 消去イデアル
! 97: に属する多項式を一つ求めたい場合には, グレブナー基底による消去に比較して
! 98: 効率がよい場合がある.
! 99:
! 100: これらの方法においては, 線形計画法, 凸包, mixed volume の計算などが
! 101: 必要となるが, これらについてはフリーソフト
! 102: である @code{cddlib} および @code{MixedVol} を利用した. これらは
! 103: OpenXM サーバ @code{ox_sres} としてまとめられている. これは,
! 104: ソースディストリビューションでは, 自動的には make されないが,
! 105: @samp{OpenXM/src/ox_cdd} において make, make install することにより,
! 106: asir のライブラリディレクトリにインストールされる. これを利用して
! 107: 上で述べた resultant を計算する asir 関数が,
! 108: @samp{OpenXM/src/asir-contrib/packages/f_res/f_res.rr} にある.
! 109: これを load することで, 次節以降で述べる機能が使えるようになる.
! 110: なお, 線形計画法および凸包計算は, @code{gmp} による
! 111: 厳密計算を行うものと, 浮動小数による近似計算で行うものの 2 通りが
! 112: 用意されている. 後者の方が高速だが, 誤差が生ずる場合がある.
! 113: この選択は, @code{f_res.gmp()}, @code{f_res.float()} を呼び出す
! 114: ことで行う.
! 115:
! 116:
! 117:
! 118: @node Notation,,,関数マニュアル
! 119: @section Notation
! 120:
! 121: このマニュアルでは点をリストで, support や polytope をリストのリストで
! 122: 表す. つまり, 点 (1,1) はリスト @code{[1,1]} で表し, 点 @{(0,0),
! 123: (1,0), (0,1) @} からなる polytope をリストのリスト
! 124: @code{[[0,0],[1,0],[0,1] ]} で表す.
! 125: @node 主な関数,,, 関数マニュアル
! 126: @section 主な関数
! 127:
! 128: @menu
! 129: * f_res.mres f_res.mresM::
! 130: * f_res.indexof::
! 131: * f_res.listadd::
! 132: * f_res.start::
! 133: * f_res.float::
! 134: * f_res.gmp::
! 135: * f_res.conv::
! 136: * f_res.support::
! 137: * f_res.np::
! 138: * f_res.msum::
! 139: * f_res.mvol::
! 140: * f_res.sres::
! 141: * f_res.dresM::
! 142: * f_res.dixonpolynomial::
! 143: * f_res.matrixdecomp::
! 144: * f_res.submatrix::
! 145: @end menu
! 146:
! 147: @node intersect,,, 主な関数
! 148:
! 149: @node f_res.mres f_res.mresM,,, 主な関数
! 150: @subsection @code{f_res.mres}, @code{f_res.mresM}
! 151: @findex f_res.mres
! 152: @findex f_res.mresM
! 153:
! 154: @table @t
! 155: @item f_res.mres(@var{Equations}, @var{Vars} )
! 156: :: Multipolynomial resultant の多項式倍を返す
! 157: @item f_res.mresM(@var{Equations}, @var{Vars} )
! 158: :: 行列式が @code{f_res.mres} が返す値になるような行列を返す
! 159: @end table
! 160:
! 161: @table @var
! 162: @item return
! 163: @table @t
! 164: @item f_res.mres
! 165: 多項式もしくは 0
! 166: @item f_res.mresM
! 167: 行列
! 168: @end table
! 169: @item Equaitons
! 170: 多項式のリスト
! 171: @item Vars
! 172: 変数のリスト.
! 173: @item オプション
! 174: @table @t
! 175: @item rsc
! 176: 任意
! 177: @item rowidx
! 178: 配列
! 179: @item colidx
! 180: 配列
! 181: @item p
! 182: 素数
! 183: @item sub
! 184: リスト
! 185: @end table
! 186: @end table
! 187:
! 188: @itemize @bullet
! 189: @item @var{Equations} の成分の多項式による不定元を @var{Vars}
! 190: としたとき斉次多項式の場合の方法で @code{f_res.mres} は resultant の多項式倍
! 191: を, @code{f_res.mresM} は resultant の多項式倍を行列式にもつ行列を返す.
! 192:
! 193: @item @var{Equations} の成分の多項式は内部で自動的に斉次化されているから,斉次多項式である必要はない.
! 194:
! 195: @item Rank Submatrix Construction を行ないたいときは
! 196: オプション @code{rsc} を 1 に設定する. その場合,この関数は内部で関数
! 197: @code{f_res.submatrix} を呼び出しているので, そのためのオプションはす
! 198: べて受け付ける.
! 199: @end itemize
! 200:
! 201: @example
! 202: [0] F0 = a1*x + a2*y + a3$
! 203: [1] F1 = b1*x + b2*y + b3$
! 204: [2] F2 = c1*x^2 + c2*y^2 + c3 + c4*x*y + c5*x + c6*y$
! 205: [3] f_res.mresM( [F0,F1,F2], [x,y] );
! 206: [ 0 0 0 a2 a3 a1 ]
! 207: [ 0 a2 a3 0 a1 0 ]
! 208: [ a2 a3 0 a1 0 0 ]
! 209: [ 0 b2 b3 0 b1 0 ]
! 210: [ b2 b3 0 b1 0 0 ]
! 211: [ c2 c6 c3 c4 c5 c1 ]
! 212: [4] R = f_res.mres( [F0,F1,F2], [x,y] );
! 213: (-c3*b2^2+c6*b3*b2-c2*b3^2)*a1^3+(((2*c3*b2-c6*b3)*b1-c5*b3*b2+c4*b3^2)*a2+((-c
! 214: 6*b2+2*c2*b3)*b1+c5*b2^2-c4*b3*b2)*a3)*a1^2+((-c3*b1^2+c5*b3*b1-c1*b3^2)*a2^2+(
! 215: c6*b1^2+(-c5*b2-c4*b3)*b1+2*c1*b3*b2)*a3*a2+(-c2*b1^2+c4*b2*b1-c1*b2^2)*a3^2)*a
! 216: 1
! 217: [5] fctr( R );
! 218: [[-1,1],[a1,1],[(c3*b2^2-c6*b3*b2+c2*b3^2)*a1^2+(((-2*c3*b2+c6*b3)*b1+c5*b3*b2-
! 219: c4*b3^2)*a2+((c6*b2-2*c2*b3)*b1-c5*b2^2+c4*b3*b2)*a3)*a1+(c3*b1^2-c5*b3*b1+c1*b
! 220: 3^2)*a2^2+(-c6*b1^2+(c5*b2+c4*b3)*b1-2*c1*b3*b2)*a3*a2+(c2*b1^2-c4*b2*b1+c1*b2^
! 221: 2)*a3^2,1]]
! 222: @end example
! 223:
! 224:
! 225: @node f_res.indexof,,, 主な関数
! 226: @subsection @code{f_res.indexof}
! 227: @findex f_res.indexof
! 228:
! 229: @table @t
! 230: @item f_res.indexof(@var{Element}, @var{List} )
! 231: :: リスト中に要素が最初に現れる位置を返す
! 232: @end table
! 233:
! 234: @table @var
! 235: @item Element
! 236: 検索したい要素
! 237: @item List
! 238: 検索対象のリスト
! 239: @item return
! 240: @var{List} で最初に現れる @var{Element} のインデックス番号.
! 241: @var{List} に @var{Element} が現れない場合は整数 -1.
! 242: @end table
! 243:
! 244: @itemize @bullet
! 245: @item @var{List} で最初に現れる @var{Element} のインデックス番号を返す.
! 246: @var{List} に @var{Element} が現れない場合は -1 を返す.
! 247:
! 248: @item @var{Element} の型は何であっても構わない.
! 249:
! 250: @item 関数 @code{flist} と組み合わせると,ある関数が Asir に
! 251: 入っているかが分かる.
! 252: @end itemize
! 253:
! 254: @example
! 255: [0] f_res.indexof( 2, [1,2,3] );
! 256: 1
! 257: [1] f_res.indexof( 4, [1,2,3] );
! 258: -1
! 259: [2] f_res.indexof( "nd_det", flist() );
! 260: 31
! 261: [3] f_res.indexof( "nd_Det", flist() );
! 262: -1
! 263: @end example
! 264:
! 265: @node f_res.listadd,,, 主な関数
! 266: @subsection @code{f_res.listadd}
! 267: @findex f_res.listadd
! 268:
! 269: @table @t
! 270: @item f_res.listadd(@var{A}, @var{B} )
! 271: :: リストをベクトルと見て和を求める
! 272: @end table
! 273:
! 274: @table @var
! 275: @item A
! 276: @itemx B
! 277: リスト
! 278: @item return
! 279: リスト
! 280: @end table
! 281:
! 282: @itemize @bullet
! 283: @item ベクトルの和のようにリスト@var{A} とリスト@var{B} の和を求める.
! 284: @item リスト @var{A} とリスト @var{B} の長さは等しくなくてはいけない.
! 285: @end itemize
! 286:
! 287: @example
! 288: [0] f_res.listadd( [1,2,3], [4,5,6] );
! 289: [5,7,9]
! 290: [1] f_res.listadd( [a,b,c], [d,e,f] );
! 291: [a+d,b+e,c+f]
! 292: @end example
! 293:
! 294:
! 295:
! 296:
! 297:
! 298:
! 299:
! 300:
! 301:
! 302:
! 303:
! 304:
! 305: @node f_res.start,,, 主な関数
! 306: @subsection @code{f_res.start}
! 307: @findex f_res.start
! 308:
! 309: @table @t
! 310: @item f_res.start(@var{N})
! 311: :: @code{ox_sres} を起動する
! 312: @end table
! 313:
! 314: @table @var
! 315: @item N
! 316: 任意
! 317: @item return
! 318: 整数
! 319: @end table
! 320:
! 321: @itemize @bullet
! 322: @item パラメータ @var{N} が 1 のときは GMP版, それ以外のときは浮動小数版の新しい OpenXM サーバ @code{ox_sres} を起動し,
! 323: 他の関数で使われるサーバに設定する.
! 324: @item 実行ファイルが見つからないときはデバッグモードに入る.
! 325: @item 返される整数は通信のための識別子 .
! 326: @end itemize
! 327:
! 328: @node f_res.float,,, 主な関数
! 329: @subsection @code{f_res.float}
! 330: @findex f_res.float
! 331:
! 332: @table @t
! 333: @item f_res.float()
! 334: :: @code{ox_sres} を起動する
! 335: @end table
! 336:
! 337: @table @var
! 338: @item return
! 339: 整数
! 340: @end table
! 341:
! 342: @itemize @bullet
! 343: @item 浮動小数版の OpenXM サーバ @code{ox_sres} が存在しないときは起動し,
! 344: 他の関数で使われるサーバに設定する.
! 345: @item 実行ファイルが見つからないときはデバッグモードに入る.
! 346: @item すでに存在している場合は他の関数で使われるサーバに設定するだけで新たに起動はしない.
! 347: @item 返される整数は通信のための識別子 .
! 348: @end itemize
! 349:
! 350: @node f_res.gmp,,, 主な関数
! 351: @subsection @code{f_res.gmp}
! 352: @findex f_res.gmp
! 353:
! 354: @table @t
! 355: @item f_res.gmp()
! 356: :: @code{ox_sres} を起動する
! 357: @end table
! 358:
! 359: @table @var
! 360: @item return
! 361: 整数
! 362: @end table
! 363:
! 364: @itemize @bullet
! 365: @item GMP 版の OpenXM サーバ @code{ox_sres} が存在しないときは起動し,
! 366: 他の関数で使われるサーバに設定する.
! 367: @item 実行ファイルが見つからないときはデバッグモードに入る.
! 368: @item すでに存在している場合は他の関数で使われるサーバに設定するだけで新たに起動はしない.
! 369: @item 返される整数は通信のための識別子.
! 370: @end itemize
! 371:
! 372: @node f_res.conv,,, 主な関数
! 373: @subsection @code{f_res.conv}
! 374: @findex f_res.conv
! 375:
! 376: @table @t
! 377: @item f_res.conv(@var{List})
! 378: :: polytope の凸閉包を求める
! 379: @end table
! 380:
! 381: @table @var
! 382: @item return
! 383: リストのリスト
! 384: @item List
! 385: 点を表すリストのリスト
! 386: @end table
! 387:
! 388: @itemize @bullet
! 389: @item @var{List} で与えられる polytope の凸閉包を求める.
! 390: @item OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
! 391: @item 点の座標は整数しか受け付けない.
! 392: @end itemize
! 393:
! 394: @example
! 395: [0] f_res.conv( [ [1,1],[0,0],[0,2],[2,0],[2,2] ] );
! 396: [[0,0],[0,2],[2,0],[2,2]]
! 397: @end example
! 398:
! 399: @node f_res.support,,, 主な関数
! 400: @subsection @code{f_res.support}
! 401: @findex f_res.support
! 402:
! 403: @table @t
! 404: @item f_res.support(@var{Equation},@var{Vars})
! 405: :: 多項式の support を返す
! 406: @end table
! 407:
! 408: @table @var
! 409: @item return
! 410: リストのリスト
! 411: @item Equation
! 412: 多項式
! 413: @item Vars
! 414: 不定元のリスト
! 415: @end table
! 416:
! 417: @itemize @bullet
! 418: @item 不定元を @var{Vars} としたときの多項式 @var{Equation} の support をリストのリストとして返す.
! 419: @end itemize
! 420:
! 421: @example
! 422: [0] f_res.support( x^2 + x*y + y^2, [x,y] );
! 423: [[0,2],[1,1],[2,0]]
! 424: [1] f_res.support( x^2 + x*y + y^2, [x,y,z] );
! 425: [[0,2,0],[1,1,0],[2,0,0]]
! 426: @end example
! 427:
! 428: @node f_res.np,,, 主な関数
! 429: @subsection @code{f_res.np}
! 430: @findex f_res.np
! 431:
! 432: @table @t
! 433: @item f_res.np(@var{Equation},@var{Vars})
! 434: :: Newton polytope を返す
! 435: @end table
! 436:
! 437: @table @var
! 438: @item return
! 439: リストのリスト
! 440: @item Equation
! 441: 多項式
! 442: @item Vars
! 443: 不定元のリスト
! 444: @end table
! 445:
! 446: @itemize @bullet
! 447: @item 不定元を @var{Vars} としたときの多項式 @var{Equation} の Newton polytope をリストのリストとして返す.
! 448: @item OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
! 449: @end itemize
! 450:
! 451:
! 452: @example
! 453: [0] f_res.np( x^2 + x*y + y^2, [x,y] );
! 454: [[0,2],[2,0]]
! 455: [1] f_res.np( x^2 + x*y + y^2, [x,y,z] );
! 456: [[0,2,0],[2,0,0]]
! 457: @end example
! 458:
! 459:
! 460: @node f_res.msum,,, 主な関数
! 461: @subsection @code{f_res.msum}
! 462: @findex f_res.msum
! 463:
! 464: @table @t
! 465: @item f_res.msum(@var{Polytopes})
! 466: :: polytope たちの Minkowski sum を返す
! 467: @end table
! 468:
! 469: @table @var
! 470: @item return
! 471: リストのリスト
! 472: @item Polytopes
! 473: リストのリストのリスト
! 474: @item オプション
! 475: @table @var
! 476: @item conv
! 477: 任意.
! 478: @end table
! 479: @end table
! 480:
! 481: @itemize @bullet
! 482: @item @var{Polytopes} の成分である polytope による
! 483: Minkowski sum 内のすべての lattice points を求める.
! 484: @item @var{conv} が 1 のときは Minkowski sum の凸閉包を返す.
! 485: OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
! 486: @end itemize
! 487:
! 488: @example
! 489: [0] Q1 = [[0,0],[1,0],[0,1]]$
! 490: [1] Q2 = [[0,0],[1,0],[0,1],[1,1]]$
! 491: [2] f_res.msum( [Q1,Q1] );
! 492: [[0,0],[0,1],[0,2],[1,0],[1,1],[2,0]]
! 493: [3] f_res.msum( [Q1,Q1] | conv=1 );
! 494: [[0,0],[0,2],[2,0]]
! 495: [4] f_res.msum( [Q1,Q1,Q1] | conv=1 );
! 496: [[0,0],[0,3],[3,0]]
! 497: [5] f_res.msum( [Q1,Q2] );
! 498: [[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1]]
! 499: [6] f_res.msum( [Q1,Q2] | conv=1 );
! 500: [[0,0],[0,2],[1,2],[2,0],[2,1]]
! 501: @end example
! 502:
! 503:
! 504: @node f_res.mvol,,, 主な関数
! 505: @subsection @code{f_res.mvol}
! 506: @findex f_res.mvol
! 507:
! 508: @table @t
! 509: @item f_res.mvol(@var{Polytopes})
! 510: :: polytope たちの mixed volume を求める
! 511: @end table
! 512:
! 513: @table @var
! 514: @item return
! 515: 整数
! 516: @item Polytopes
! 517: リストのリストのリスト
! 518: @end table
! 519:
! 520: @itemize @bullet
! 521: @item var{Polytopes} の成分である polytope による mixed volume を求める.
! 522: @item Mixed volume の定義から polytope の次元と数は等しい必要がある.
! 523: @item OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
! 524: @end itemize
! 525:
! 526: @example
! 527: [0] Q1 = [[0,0],[1,0],[0,1]]$
! 528: [1] Q2 = [[0,0],[1,0],[0,1],[1,1]]$
! 529: [2] f_res.mvol( [Q1,Q1] );
! 530: 1
! 531: [3] f_res.mvol( [Q1,Q2] );
! 532: 2
! 533: [4] f_res.mvol( [Q2,Q2] );
! 534: 2
! 535: @end example
! 536:
! 537:
! 538: @node f_res.sres,,, 主な関数
! 539: @subsection @code{f_res.sres}
! 540: @findex f_res.sres
! 541:
! 542: @table @t
! 543: @item f_res.sres(@var{Equations},@var{Vars})
! 544: :: sparse resultant の多項式倍を返す
! 545: @end table
! 546:
! 547: @table @var
! 548: @item return
! 549: 多項式
! 550: @item Equations
! 551: 多項式のリスト
! 552: @item Vars
! 553: 不定元のリスト
! 554: @item オプション
! 555: @table @var
! 556: @item v
! 557: リスト
! 558: @item p
! 559: 素数
! 560: @item sub
! 561: リスト
! 562: @end table
! 563: @end table
! 564:
! 565: @itemize @bullet
! 566: @item @var{Equations} の成分の多項式による不定元を @var{Vars} としたとき Incremental algorithm で計算した resultant の多項式倍を返す.
! 567:
! 568: @item オプション @var{v} は v-distance を表すリストで, 定義されていない場合は
! 569: [11,12,13,@dots{}]$ が使われる.
! 570:
! 571: @item 行列の rank の計算は GF(@var{p}) 上で行なわれ,
! 572: 行列の中の不定元にはオプションで @var{sub} で指定される
! 573: リストの要素が前から順に代入され評価される.
! 574: ここで @var{p} はオプションの @var{p} である.
! 575: 素数 @var{p} が指定されていない場合は 65521 が使われ,
! 576: リスト @var{sub} が指定されていない場合は 53,59,@dots{} の素数が使われる.
! 577:
! 578: @item OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
! 579: @end itemize
! 580:
! 581: @example
! 582: [0] F0 = a1*x + a2*y + a3$
! 583: [1] F1 = b1*x + b2*y + b3$
! 584: [2] F2 = c1*x^2 + c2*y^2 + c3 + c4*x*y + c5*x + c6*y$
! 585: [3] R = f_res.sres( [F0,F1,F2], [x,y] );
! 586: (c3*b2^3-c6*b3*b2^2+c2*b3^2*b2)*a1^2+(((-2*c3*b2^2+c6*b3*b2)*b1+c5*b3*b2^2-c4*b
! 587: 3^2*b2)*a2+((c6*b2^2-2*c2*b3*b2)*b1-c5*b2^3+c4*b3*b2^2)*a3)*a1+(c3*b2*b1^2-c5*b
! 588: 3*b2*b1+c1*b3^2*b2)*a2^2+(-c6*b2*b1^2+(c5*b2^2+c4*b3*b2)*b1-2*c1*b3*b2^2)*a3*a2
! 589: +(c2*b2*b1^2-c4*b2^2*b1+c1*b2^3)*a3^2
! 590: [4] fctr( R );
! 591: [[1,1],[b2,1],[(c3*b2^2-c6*b3*b2+c2*b3^2)*a1^2+(((-2*c3*b2+c6*b3)*b1+c5*b3*b2-c
! 592: 4*b3^2)*a2+((c6*b2-2*c2*b3)*b1-c5*b2^2+c4*b3*b2)*a3)*a1+(c3*b1^2-c5*b3*b1+c1*b3
! 593: ^2)*a2^2+(-c6*b1^2+(c5*b2+c4*b3)*b1-2*c1*b3*b2)*a3*a2+(c2*b1^2-c4*b2*b1+c1*b2^2
! 594: )*a3^2,1]]
! 595: @end example
! 596:
! 597: @node f_res.dres f_res.dresM,,, 主な関数
! 598: @subsection @code{f_res.dres}, @code{f_res.dresM}
! 599: @findex f_res.dres
! 600: @findex f_res.dresM
! 601:
! 602: @table @t
! 603: @item f_res.dres(@var{Equations},@var{Vars})
! 604: :: Dixon resultant を返す
! 605: @item f_res.dresM(@var{Equations},@var{Vars})
! 606: :: 行列式が Dixon resultant になるような行列を返す
! 607: @end table
! 608:
! 609: @table @var
! 610: @item return
! 611: @table @t
! 612: @item f_res.dres
! 613: 多項式
! 614: @item f_res.dresM
! 615: 行列
! 616: @end table
! 617: @item Equaitons
! 618: 多項式のリスト
! 619: @item Vars
! 620: 不定元のリスト
! 621: @item オプション
! 622: @table @var
! 623: @item norsc
! 624: 任意
! 625: @item rowidx
! 626: 配列
! 627: @item colidx
! 628: 配列
! 629: @item p
! 630: 素数
! 631: @item sub
! 632: リスト
! 633: @end table
! 634: @end table
! 635:
! 636:
! 637: @itemize @bullet
! 638: @item @var{Equations} の 成分の多項式による不定元を @var{Vars}
! 639: としたとき Dixon の方法で @code{f_res.dres} は resultant の多項式倍を,
! 640: @code{f_res.dresM} は resultant の多項式倍を行列式にもつ行列を返す.
! 641:
! 642: @item Rank Submatrix Construction を行ないたくないときは
! 643: オプション @var{norsc} を 1 に設定する.
! 644:
! 645: @item この関数は内部で関数 @code{f_res.submatrix} を呼び出しているので,
! 646: そのためのオプションはすべて受け付ける.
! 647: @end itemize
! 648:
! 649: @example
! 650: [0] F0 = a1*x + a2*y + a3$
! 651: [1] F1 = b1*x + b2*y + b3$
! 652: [2] F2 = c1*x^2 + c2*y^2 + c3 + c4*x*y + c5*x + c6*y$
! 653: [3] f_res.dresM( [F0,F1,F2], [x,y] );
! 654: [ c1*b3*a2-c1*b2*a3 -c2*b3*a1+c4*b3*a2+(c2*b1-c4*b2)*a3 (c3*b2-c6*b3)*a1+(-c3*b
! 655: 1+c5*b3)*a2+(c6*b1-c5*b2)*a3 ]
! 656: [ 0 -c2*b2*a1+c2*b1*a2 -c2*b3*a1+c2*b1*a3 ]
! 657: [ -c1*b2*a1+c1*b1*a2 -c4*b2*a1+c4*b1*a2 -c4*b3*a1+c1*b3*a2+(c4*b1-c1*b2)*a3 ]
! 658: [4] R = dres( [F0,F1,F2], [x,y] );
! 659: (-c3*c2*c1*b2^3+c6*c2*c1*b3*b2^2-c2^2*c1*b3^2*b2)*a1^3+(((3*c3*c2*c1*b2^2-2*c6*
! 660: c2*c1*b3*b2+c2^2*c1*b3^2)*b1-c5*c2*c1*b3*b2^2+c4*c2*c1*b3^2*b2)*a2+((-c6*c2*c1*
! 661: b2^2+2*c2^2*c1*b3*b2)*b1+c5*c2*c1*b2^3-c4*c2*c1*b3*b2^2)*a3)*a1^2+(((-3*c3*c2*c
! 662: 1*b2+c6*c2*c1*b3)*b1^2+(2*c5*c2*c1*b3*b2-c4*c2*c1*b3^2)*b1-c2*c1^2*b3^2*b2)*a2^
! 663: 2+((2*c6*c2*c1*b2-2*c2^2*c1*b3)*b1^2-2*c5*c2*c1*b2^2*b1+2*c2*c1^2*b3*b2^2)*a3*a
! 664: 2+(-c2^2*c1*b2*b1^2+c4*c2*c1*b2^2*b1-c2*c1^2*b2^3)*a3^2)*a1+(c3*c2*c1*b1^3-c5*c
! 665: 2*c1*b3*b1^2+c2*c1^2*b3^2*b1)*a2^3+(-c6*c2*c1*b1^3+(c5*c2*c1*b2+c4*c2*c1*b3)*b1
! 666: ^2-2*c2*c1^2*b3*b2*b1)*a3*a2^2+(c2^2*c1*b1^3-c4*c2*c1*b2*b1^2+c2*c1^2*b2^2*b1)*
! 667: a3^2*a2
! 668: [5] fctr(R);
! 669: [[-1,1],[c2,1],[c1,1],[b2*a1-b1*a2,1],[(c3*b2^2-c6*b3*b2+c2*b3^2)*a1^2+(((-2*c3
! 670: *b2+c6*b3)*b1+c5*b3*b2-c4*b3^2)*a2+((c6*b2-2*c2*b3)*b1-c5*b2^2+c4*b3*b2)*a3)*a1
! 671: +(c3*b1^2-c5*b3*b1+c1*b3^2)*a2^2+(-c6*b1^2+(c5*b2+c4*b3)*b1-2*c1*b3*b2)*a3*a2+(
! 672: c2*b1^2-c4*b2*b1+c1*b2^2)*a3^2,1]]
! 673: @end example
! 674:
! 675:
! 676: @node f_res.dixonpolynomial,,, 主な関数
! 677: @subsection @code{f_res.dixonpolynomial}
! 678: @findex f_res.dixonpolynomial
! 679:
! 680: @table @t
! 681: @item f_res.dixonpolynomial(@var{Equations},@var{Vars})
! 682: :: Dixon polynomial を返す
! 683: @end table
! 684:
! 685: @table @var
! 686: @item return
! 687: リスト
! 688: @item Equaitons
! 689: 多項式のリスト
! 690: @item Vars
! 691: 不定元のリスト
! 692: @end table
! 693:
! 694: @itemize @bullet
! 695: @var{Equations} の 成分の多項式による不定元を @var{Vars}
! 696: としたときの Dixon polynomial を計算し,
! 697: @code{[ (Dixon polynomial), (新しい変数の配列) ]} というリストを返す.
! 698: 新しい変数は関数 @code{uc} によって生成された不定元である.
! 699: 多項式の数は変数の数よりも一つ多い必要がある.
! 700: @end itemize
! 701:
! 702: @example
! 703: [0] F0 = a1*x + a2*y + a3$
! 704: [1] F1 = b1*x + b2*y + b3$
! 705: [2] F2 = c1*x^2 + c2*y^2 + c3 + c4*x*y + c5*x + c6*y$
! 706: [3] f_res.dixonpolynomial( [F0,F1,F2], [x,y] );
! 707: [(-_0*c1*b2*a1+(_0*c1*b1+c1*b3)*a2-c1*b2*a3)*x+(((-_1*c2-_0*c4)*b2-c2*b3)*a1+((
! 708: _1*c2+_0*c4)*b1+c4*b3)*a2+(c2*b1-c4*b2)*a3)*y+(c3*b2+(-_1*c2-_0*c4-c6)*b3)*a1+(
! 709: -c3*b1+(_0*c1+c5)*b3)*a2+((_1*c2+_0*c4+c6)*b1+(-_0*c1-c5)*b2)*a3,[ _0 _1 ]]
! 710: @end example
! 711:
! 712:
! 713: @node f_res.matrixdecomp,,, 主な関数
! 714: @subsection @code{f_res.matrixdecomp}
! 715: @findex f_res.matrixdecomp
! 716:
! 717: @table @t
! 718: @item f_res.matrixdecomp( @var{Dpoly}, @var{UC}, @var{Vars} )
! 719: :: Dixon polynomial を行列に分解する.
! 720: @end table
! 721:
! 722: @table @var
! 723: @item return
! 724: リスト
! 725: @item Dpoly
! 726: 多項式
! 727: @item UC
! 728: 配列
! 729: @item Vars
! 730: リスト
! 731: @end table
! 732:
! 733: @itemize @bullet
! 734: @item dixonpolynomial @var{Dpoly} を行が @var{UC} の monomial,
! 735: 列が @var{Vars} の monomial で添字付けられる行列に分解する.
! 736: @item 戻り値は,
! 737: @code{[ (@var{UC} の monomial の配列),(行列),(@var{Vars} の monomial の配列) ]}
! 738: という形で,それぞれ@var{sigma_P = V D_P W} の @var{V}, @var{D_P}, @var{W} を表す.
! 739: @end itemize
! 740:
! 741: @example
! 742: [0] F0 = a1*x + a2*y + a3$
! 743: [1] F1 = b1*x + b2*y + b3$
! 744: [2] F2 = c1*x^2 + c2*y^2 + c3 + c4*x*y + c5*x + c6*y$
! 745: [3] D = f_res.dixonpolynomial( [F0,F1,F2], [x,y] )$
! 746: [4] M = f_res.matrixdecomp( D[0], D[1], [x,y] );
! 747: [[ 1 _1 _0 ],[ c1*b3*a2-c1*b2*a3 -c2*b3*a1+c4*b3*a2+(c2*b1-c4*b2)*a3 (c3*b2-c6*
! 748: b3)*a1+(-c3*b1+c5*b3)*a2+(c6*b1-c5*b2)*a3 ]
! 749: [ 0 -c2*b2*a1+c2*b1*a2 -c2*b3*a1+c2*b1*a3 ]
! 750: [ -c1*b2*a1+c1*b1*a2 -c4*b2*a1+c4*b1*a2 -c4*b3*a1+c1*b3*a2+(c4*b1-c1*b2)*a3 ],[
! 751: x y 1 ]]
! 752: [5] V = M[0]*M[1]$
! 753: [6] D[0] == V[0]*M[2][0]+V[1]*M[2][1]+V[2]*M[2][2];
! 754: 1
! 755: @end example
! 756:
! 757:
! 758: @node f_res.submatrix,,, 主な関数
! 759: @subsection @code{f_res.submatrix}
! 760: @findex f_res.submatrix
! 761:
! 762: @table @t
! 763: @item f_res.submatrix( @var{Matrix} )
! 764: :: 引数である行列の rank を持つ部分行列を返す.
! 765: @end table
! 766:
! 767: @table @var
! 768: @item return
! 769: 行列
! 770: @item Matrix
! 771: 行列
! 772: @item オプション
! 773: @table @var
! 774: @item rowidx
! 775: 配列
! 776: @item colidx
! 777: 配列
! 778: @item p
! 779: 素数
! 780: @item sub
! 781: リスト
! 782: @end table
! 783: @end table
! 784:
! 785: @itemize @bullet
! 786: @item 行列 @var{Matrix} の rank を持つ部分行列を返す.
! 787:
! 788: @item 行列の rank の計算で行列の中の不定元にはリスト @var{sub}
! 789: の値が前から順に代入され GF(@var{p}) で評価される.
! 790: ここで @var{p} はオプションの @var{p} が使われる.
! 791:
! 792: @item 与えられた行列が正則ではないとき部分行列は一意に定まらない.
! 793: そこでどの行列を指定するかというのを配列 @var{rowidx,colidx} で行なう.
! 794: 実際には行列 @var{Matrix}の (i,j) 成分を (@var{rowidx}[i],@var{colidx}[j])
! 795: 成分と入れ換えているだけである.
! 796:
! 797: @item 素数 @var{p} が指定されていない場合は 65521 が使われ,
! 798: リスト @var{sub} が指定されていない場合は 53,59,dots{} の素数が使われる.
! 799: @end itemize
! 800:
! 801: @example
! 802: [0] M = newmat( 3, 3, [[1,0,0],[0,a,0],[0,b,0]] );
! 803: [ 1 0 0 ]
! 804: [ 0 a 0 ]
! 805: [ 0 b 0 ]
! 806: [1] f_res.submatrix( M );
! 807: [ 1 0 ]
! 808: [ 0 a ]
! 809: [2] f_res.submatrix( M | rowidx=ltov([0,2,1]) );
! 810: [ 1 0 ]
! 811: [ 0 b ]
! 812: @end example
! 813:
! 814: @comment --- おまじない ---
! 815: @node Index,,, Top
! 816: @unnumbered Index
! 817: @printindex fn
! 818: @printindex cp
! 819: @iftex
! 820: @vfill @eject
! 821: @end iftex
! 822: @summarycontents
! 823: @contents
! 824: @bye
! 825: @comment --- おまじない終り ---
! 826:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>