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