Annotation of OpenXM/src/asir-contrib/packages/doc/f_res/f_res-ja.texi, Revision 1.2
1.1 noro 1: \input texinfo
1.2 ! takayama 2: @comment $OpenXM: OpenXM/src/asir-contrib/packages/doc/f_res/f_res-ja.texi,v 1.1 2007/03/17 10:18:54 noro Exp $
1.1 noro 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
1.2 ! takayama 22: @comment --- おまじない終り ---
1.1 noro 23:
1.2 ! takayama 24: @comment --- GNU info ファイルの名前 ---
1.1 noro 25: @setfilename asir-contrib-f_res
26:
1.2 ! takayama 27: @comment --- タイトル ---
! 28: @settitle Risa/Asir 終結式計算パッケージ @code{f_res}
1.1 noro 29:
30: @comment %**end of header
31: @comment %@setchapternewpage odd
32:
1.2 ! takayama 33: @comment --- おまじない ---
1.1 noro 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
1.2 ! takayama 45: @comment --- おまじない終り ---
1.1 noro 46:
1.2 ! takayama 47: @comment --- タイトル, バージョン, 著者名, 著作権表示 ---
! 48: @title Risa/Asir 終結式計算パッケージ @code{f_res} 説明書
! 49: @subtitle 利用説明書
! 50: @subtitle 1.0 版
! 51: @subtitle 2005 年 6 月
1.1 noro 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:
1.2 ! takayama 60: @comment --- おまじない ---
1.1 noro 61: @synindex vr fn
1.2 ! takayama 62: @comment --- おまじない終り ---
1.1 noro 63:
1.2 ! takayama 64: @comment --- @node は GNU info, HTML 用 ---
! 65: @comment --- @node の引数は node-name, next, previous, up ---
1.1 noro 66: @node Top,, (dir), (dir)
67:
68: @menu
1.2 ! takayama 69: * 関数マニュアル::
1.1 noro 70: * Index::
71: @end menu
72:
1.2 ! takayama 73: @node 関数マニュアル,,, Top
! 74: @chapter 関数マニュアル
1.1 noro 75:
76: @menu
1.2 ! takayama 77: * 概要::
1.1 noro 78: * Notation::
1.2 ! takayama 79: * 主な関数::
1.1 noro 80: @end menu
81:
1.2 ! takayama 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: ことで行う.
1.1 noro 115:
116:
117:
1.2 ! takayama 118: @node Notation,,,関数マニュアル
1.1 noro 119: @section Notation
120:
1.2 ! takayama 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 主な関数
1.1 noro 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:
1.2 ! takayama 147: @node intersect,,, 主な関数
1.1 noro 148:
1.2 ! takayama 149: @node f_res.mres f_res.mresM,,, 主な関数
1.1 noro 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} )
1.2 ! takayama 156: :: Multipolynomial resultant の多項式倍を返す
1.1 noro 157: @item f_res.mresM(@var{Equations}, @var{Vars} )
1.2 ! takayama 158: :: 行列式が @code{f_res.mres} が返す値になるような行列を返す
1.1 noro 159: @end table
160:
161: @table @var
162: @item return
163: @table @t
164: @item f_res.mres
1.2 ! takayama 165: 多項式もしくは 0
1.1 noro 166: @item f_res.mresM
1.2 ! takayama 167: 行列
1.1 noro 168: @end table
169: @item Equaitons
1.2 ! takayama 170: 多項式のリスト
1.1 noro 171: @item Vars
1.2 ! takayama 172: 変数のリスト.
! 173: @item オプション
1.1 noro 174: @table @t
175: @item rsc
1.2 ! takayama 176: 任意
1.1 noro 177: @item rowidx
1.2 ! takayama 178: 配列
1.1 noro 179: @item colidx
1.2 ! takayama 180: 配列
1.1 noro 181: @item p
1.2 ! takayama 182: 素数
1.1 noro 183: @item sub
1.2 ! takayama 184: リスト
1.1 noro 185: @end table
186: @end table
187:
188: @itemize @bullet
1.2 ! takayama 189: @item @var{Equations} の成分の多項式による不定元を @var{Vars}
! 190: としたとき斉次多項式の場合の方法で @code{f_res.mres} は resultant の多項式倍
! 191: を, @code{f_res.mresM} は resultant の多項式倍を行列式にもつ行列を返す.
1.1 noro 192:
1.2 ! takayama 193: @item @var{Equations} の成分の多項式は内部で自動的に斉次化されているから,斉次多項式である必要はない.
1.1 noro 194:
1.2 ! takayama 195: @item Rank Submatrix Construction を行ないたいときは
! 196: オプション @code{rsc} を 1 に設定する. その場合,この関数は内部で関数
! 197: @code{f_res.submatrix} を呼び出しているので, そのためのオプションはす
! 198: べて受け付ける.
1.1 noro 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:
1.2 ! takayama 225: @node f_res.indexof,,, 主な関数
1.1 noro 226: @subsection @code{f_res.indexof}
227: @findex f_res.indexof
228:
229: @table @t
230: @item f_res.indexof(@var{Element}, @var{List} )
1.2 ! takayama 231: :: リスト中に要素が最初に現れる位置を返す
1.1 noro 232: @end table
233:
234: @table @var
235: @item Element
1.2 ! takayama 236: 検索したい要素
1.1 noro 237: @item List
1.2 ! takayama 238: 検索対象のリスト
1.1 noro 239: @item return
1.2 ! takayama 240: @var{List} で最初に現れる @var{Element} のインデックス番号.
! 241: @var{List} に @var{Element} が現れない場合は整数 -1.
1.1 noro 242: @end table
243:
244: @itemize @bullet
1.2 ! takayama 245: @item @var{List} で最初に現れる @var{Element} のインデックス番号を返す.
! 246: @var{List} に @var{Element} が現れない場合は -1 を返す.
1.1 noro 247:
1.2 ! takayama 248: @item @var{Element} の型は何であっても構わない.
1.1 noro 249:
1.2 ! takayama 250: @item 関数 @code{flist} と組み合わせると,ある関数が Asir に
! 251: 入っているかが分かる.
1.1 noro 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:
1.2 ! takayama 265: @node f_res.listadd,,, 主な関数
1.1 noro 266: @subsection @code{f_res.listadd}
267: @findex f_res.listadd
268:
269: @table @t
270: @item f_res.listadd(@var{A}, @var{B} )
1.2 ! takayama 271: :: リストをベクトルと見て和を求める
1.1 noro 272: @end table
273:
274: @table @var
275: @item A
276: @itemx B
1.2 ! takayama 277: リスト
1.1 noro 278: @item return
1.2 ! takayama 279: リスト
1.1 noro 280: @end table
281:
282: @itemize @bullet
1.2 ! takayama 283: @item ベクトルの和のようにリスト@var{A} とリスト@var{B} の和を求める.
! 284: @item リスト @var{A} とリスト @var{B} の長さは等しくなくてはいけない.
1.1 noro 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:
1.2 ! takayama 305: @node f_res.start,,, 主な関数
1.1 noro 306: @subsection @code{f_res.start}
307: @findex f_res.start
308:
309: @table @t
310: @item f_res.start(@var{N})
1.2 ! takayama 311: :: @code{ox_sres} を起動する
1.1 noro 312: @end table
313:
314: @table @var
315: @item N
1.2 ! takayama 316: 任意
1.1 noro 317: @item return
1.2 ! takayama 318: 整数
1.1 noro 319: @end table
320:
321: @itemize @bullet
1.2 ! takayama 322: @item パラメータ @var{N} が 1 のときは GMP版, それ以外のときは浮動小数版の新しい OpenXM サーバ @code{ox_sres} を起動し,
! 323: 他の関数で使われるサーバに設定する.
! 324: @item 実行ファイルが見つからないときはデバッグモードに入る.
! 325: @item 返される整数は通信のための識別子 .
1.1 noro 326: @end itemize
327:
1.2 ! takayama 328: @node f_res.float,,, 主な関数
1.1 noro 329: @subsection @code{f_res.float}
330: @findex f_res.float
331:
332: @table @t
333: @item f_res.float()
1.2 ! takayama 334: :: @code{ox_sres} を起動する
1.1 noro 335: @end table
336:
337: @table @var
338: @item return
1.2 ! takayama 339: 整数
1.1 noro 340: @end table
341:
342: @itemize @bullet
1.2 ! takayama 343: @item 浮動小数版の OpenXM サーバ @code{ox_sres} が存在しないときは起動し,
! 344: 他の関数で使われるサーバに設定する.
! 345: @item 実行ファイルが見つからないときはデバッグモードに入る.
! 346: @item すでに存在している場合は他の関数で使われるサーバに設定するだけで新たに起動はしない.
! 347: @item 返される整数は通信のための識別子 .
1.1 noro 348: @end itemize
349:
1.2 ! takayama 350: @node f_res.gmp,,, 主な関数
1.1 noro 351: @subsection @code{f_res.gmp}
352: @findex f_res.gmp
353:
354: @table @t
355: @item f_res.gmp()
1.2 ! takayama 356: :: @code{ox_sres} を起動する
1.1 noro 357: @end table
358:
359: @table @var
360: @item return
1.2 ! takayama 361: 整数
1.1 noro 362: @end table
363:
364: @itemize @bullet
1.2 ! takayama 365: @item GMP 版の OpenXM サーバ @code{ox_sres} が存在しないときは起動し,
! 366: 他の関数で使われるサーバに設定する.
! 367: @item 実行ファイルが見つからないときはデバッグモードに入る.
! 368: @item すでに存在している場合は他の関数で使われるサーバに設定するだけで新たに起動はしない.
! 369: @item 返される整数は通信のための識別子.
1.1 noro 370: @end itemize
371:
1.2 ! takayama 372: @node f_res.conv,,, 主な関数
1.1 noro 373: @subsection @code{f_res.conv}
374: @findex f_res.conv
375:
376: @table @t
377: @item f_res.conv(@var{List})
1.2 ! takayama 378: :: polytope の凸閉包を求める
1.1 noro 379: @end table
380:
381: @table @var
382: @item return
1.2 ! takayama 383: リストのリスト
1.1 noro 384: @item List
1.2 ! takayama 385: 点を表すリストのリスト
1.1 noro 386: @end table
387:
388: @itemize @bullet
1.2 ! takayama 389: @item @var{List} で与えられる polytope の凸閉包を求める.
! 390: @item OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
! 391: @item 点の座標は整数しか受け付けない.
1.1 noro 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:
1.2 ! takayama 399: @node f_res.support,,, 主な関数
1.1 noro 400: @subsection @code{f_res.support}
401: @findex f_res.support
402:
403: @table @t
404: @item f_res.support(@var{Equation},@var{Vars})
1.2 ! takayama 405: :: 多項式の support を返す
1.1 noro 406: @end table
407:
408: @table @var
409: @item return
1.2 ! takayama 410: リストのリスト
1.1 noro 411: @item Equation
1.2 ! takayama 412: 多項式
1.1 noro 413: @item Vars
1.2 ! takayama 414: 不定元のリスト
1.1 noro 415: @end table
416:
417: @itemize @bullet
1.2 ! takayama 418: @item 不定元を @var{Vars} としたときの多項式 @var{Equation} の support をリストのリストとして返す.
1.1 noro 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:
1.2 ! takayama 428: @node f_res.np,,, 主な関数
1.1 noro 429: @subsection @code{f_res.np}
430: @findex f_res.np
431:
432: @table @t
433: @item f_res.np(@var{Equation},@var{Vars})
1.2 ! takayama 434: :: Newton polytope を返す
1.1 noro 435: @end table
436:
437: @table @var
438: @item return
1.2 ! takayama 439: リストのリスト
1.1 noro 440: @item Equation
1.2 ! takayama 441: 多項式
1.1 noro 442: @item Vars
1.2 ! takayama 443: 不定元のリスト
1.1 noro 444: @end table
445:
446: @itemize @bullet
1.2 ! takayama 447: @item 不定元を @var{Vars} としたときの多項式 @var{Equation} の Newton polytope をリストのリストとして返す.
! 448: @item OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
1.1 noro 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:
1.2 ! takayama 460: @node f_res.msum,,, 主な関数
1.1 noro 461: @subsection @code{f_res.msum}
462: @findex f_res.msum
463:
464: @table @t
465: @item f_res.msum(@var{Polytopes})
1.2 ! takayama 466: :: polytope たちの Minkowski sum を返す
1.1 noro 467: @end table
468:
469: @table @var
470: @item return
1.2 ! takayama 471: リストのリスト
1.1 noro 472: @item Polytopes
1.2 ! takayama 473: リストのリストのリスト
! 474: @item オプション
1.1 noro 475: @table @var
476: @item conv
1.2 ! takayama 477: 任意.
1.1 noro 478: @end table
479: @end table
480:
481: @itemize @bullet
1.2 ! takayama 482: @item @var{Polytopes} の成分である polytope による
! 483: Minkowski sum 内のすべての lattice points を求める.
! 484: @item @var{conv} が 1 のときは Minkowski sum の凸閉包を返す.
! 485: OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
1.1 noro 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:
1.2 ! takayama 504: @node f_res.mvol,,, 主な関数
1.1 noro 505: @subsection @code{f_res.mvol}
506: @findex f_res.mvol
507:
508: @table @t
509: @item f_res.mvol(@var{Polytopes})
1.2 ! takayama 510: :: polytope たちの mixed volume を求める
1.1 noro 511: @end table
512:
513: @table @var
514: @item return
1.2 ! takayama 515: 整数
1.1 noro 516: @item Polytopes
1.2 ! takayama 517: リストのリストのリスト
1.1 noro 518: @end table
519:
520: @itemize @bullet
1.2 ! takayama 521: @item var{Polytopes} の成分である polytope による mixed volume を求める.
! 522: @item Mixed volume の定義から polytope の次元と数は等しい必要がある.
! 523: @item OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
1.1 noro 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:
1.2 ! takayama 538: @node f_res.sres,,, 主な関数
1.1 noro 539: @subsection @code{f_res.sres}
540: @findex f_res.sres
541:
542: @table @t
543: @item f_res.sres(@var{Equations},@var{Vars})
1.2 ! takayama 544: :: sparse resultant の多項式倍を返す
1.1 noro 545: @end table
546:
547: @table @var
548: @item return
1.2 ! takayama 549: 多項式
1.1 noro 550: @item Equations
1.2 ! takayama 551: 多項式のリスト
1.1 noro 552: @item Vars
1.2 ! takayama 553: 不定元のリスト
! 554: @item オプション
1.1 noro 555: @table @var
556: @item v
1.2 ! takayama 557: リスト
1.1 noro 558: @item p
1.2 ! takayama 559: 素数
1.1 noro 560: @item sub
1.2 ! takayama 561: リスト
1.1 noro 562: @end table
563: @end table
564:
565: @itemize @bullet
1.2 ! takayama 566: @item @var{Equations} の成分の多項式による不定元を @var{Vars} としたとき Incremental algorithm で計算した resultant の多項式倍を返す.
1.1 noro 567:
1.2 ! takayama 568: @item オプション @var{v} は v-distance を表すリストで, 定義されていない場合は
! 569: [11,12,13,@dots{}]$ が使われる.
1.1 noro 570:
1.2 ! takayama 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{} の素数が使われる.
1.1 noro 577:
1.2 ! takayama 578: @item OpenXM サーバ @code{ox_sres} が存在しないときは浮動小数版を起動する.
1.1 noro 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:
1.2 ! takayama 597: @node f_res.dres f_res.dresM,,, 主な関数
1.1 noro 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})
1.2 ! takayama 604: :: Dixon resultant を返す
1.1 noro 605: @item f_res.dresM(@var{Equations},@var{Vars})
1.2 ! takayama 606: :: 行列式が Dixon resultant になるような行列を返す
1.1 noro 607: @end table
608:
609: @table @var
610: @item return
611: @table @t
612: @item f_res.dres
1.2 ! takayama 613: 多項式
1.1 noro 614: @item f_res.dresM
1.2 ! takayama 615: 行列
1.1 noro 616: @end table
617: @item Equaitons
1.2 ! takayama 618: 多項式のリスト
1.1 noro 619: @item Vars
1.2 ! takayama 620: 不定元のリスト
! 621: @item オプション
1.1 noro 622: @table @var
623: @item norsc
1.2 ! takayama 624: 任意
1.1 noro 625: @item rowidx
1.2 ! takayama 626: 配列
1.1 noro 627: @item colidx
1.2 ! takayama 628: 配列
1.1 noro 629: @item p
1.2 ! takayama 630: 素数
1.1 noro 631: @item sub
1.2 ! takayama 632: リスト
1.1 noro 633: @end table
634: @end table
635:
636:
637: @itemize @bullet
1.2 ! takayama 638: @item @var{Equations} の 成分の多項式による不定元を @var{Vars}
! 639: としたとき Dixon の方法で @code{f_res.dres} は resultant の多項式倍を,
! 640: @code{f_res.dresM} は resultant の多項式倍を行列式にもつ行列を返す.
1.1 noro 641:
1.2 ! takayama 642: @item Rank Submatrix Construction を行ないたくないときは
! 643: オプション @var{norsc} を 1 に設定する.
1.1 noro 644:
1.2 ! takayama 645: @item この関数は内部で関数 @code{f_res.submatrix} を呼び出しているので,
! 646: そのためのオプションはすべて受け付ける.
1.1 noro 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:
1.2 ! takayama 676: @node f_res.dixonpolynomial,,, 主な関数
1.1 noro 677: @subsection @code{f_res.dixonpolynomial}
678: @findex f_res.dixonpolynomial
679:
680: @table @t
681: @item f_res.dixonpolynomial(@var{Equations},@var{Vars})
1.2 ! takayama 682: :: Dixon polynomial を返す
1.1 noro 683: @end table
684:
685: @table @var
686: @item return
1.2 ! takayama 687: リスト
1.1 noro 688: @item Equaitons
1.2 ! takayama 689: 多項式のリスト
1.1 noro 690: @item Vars
1.2 ! takayama 691: 不定元のリスト
1.1 noro 692: @end table
693:
694: @itemize @bullet
1.2 ! takayama 695: @var{Equations} の 成分の多項式による不定元を @var{Vars}
! 696: としたときの Dixon polynomial を計算し,
! 697: @code{[ (Dixon polynomial), (新しい変数の配列) ]} というリストを返す.
! 698: 新しい変数は関数 @code{uc} によって生成された不定元である.
! 699: 多項式の数は変数の数よりも一つ多い必要がある.
1.1 noro 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:
1.2 ! takayama 713: @node f_res.matrixdecomp,,, 主な関数
1.1 noro 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} )
1.2 ! takayama 719: :: Dixon polynomial を行列に分解する.
1.1 noro 720: @end table
721:
722: @table @var
723: @item return
1.2 ! takayama 724: リスト
1.1 noro 725: @item Dpoly
1.2 ! takayama 726: 多項式
1.1 noro 727: @item UC
1.2 ! takayama 728: 配列
1.1 noro 729: @item Vars
1.2 ! takayama 730: リスト
1.1 noro 731: @end table
732:
733: @itemize @bullet
1.2 ! takayama 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} を表す.
1.1 noro 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:
1.2 ! takayama 758: @node f_res.submatrix,,, 主な関数
1.1 noro 759: @subsection @code{f_res.submatrix}
760: @findex f_res.submatrix
761:
762: @table @t
763: @item f_res.submatrix( @var{Matrix} )
1.2 ! takayama 764: :: 引数である行列の rank を持つ部分行列を返す.
1.1 noro 765: @end table
766:
767: @table @var
768: @item return
1.2 ! takayama 769: 行列
1.1 noro 770: @item Matrix
1.2 ! takayama 771: 行列
! 772: @item オプション
1.1 noro 773: @table @var
774: @item rowidx
1.2 ! takayama 775: 配列
1.1 noro 776: @item colidx
1.2 ! takayama 777: 配列
1.1 noro 778: @item p
1.2 ! takayama 779: 素数
1.1 noro 780: @item sub
1.2 ! takayama 781: リスト
1.1 noro 782: @end table
783: @end table
784:
785: @itemize @bullet
1.2 ! takayama 786: @item 行列 @var{Matrix} の rank を持つ部分行列を返す.
1.1 noro 787:
1.2 ! takayama 788: @item 行列の rank の計算で行列の中の不定元にはリスト @var{sub}
! 789: の値が前から順に代入され GF(@var{p}) で評価される.
! 790: ここで @var{p} はオプションの @var{p} が使われる.
1.1 noro 791:
1.2 ! takayama 792: @item 与えられた行列が正則ではないとき部分行列は一意に定まらない.
! 793: そこでどの行列を指定するかというのを配列 @var{rowidx,colidx} で行なう.
! 794: 実際には行列 @var{Matrix}の (i,j) 成分を (@var{rowidx}[i],@var{colidx}[j])
! 795: 成分と入れ換えているだけである.
1.1 noro 796:
1.2 ! takayama 797: @item 素数 @var{p} が指定されていない場合は 65521 が使われ,
! 798: リスト @var{sub} が指定されていない場合は 53,59,dots{} の素数が使われる.
1.1 noro 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:
1.2 ! takayama 814: @comment --- おまじない ---
1.1 noro 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
1.2 ! takayama 825: @comment --- おまじない終り ---
1.1 noro 826:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>