@comment $OpenXM: OpenXM/src/asir-doc/int-parts/operation.texi,v 1.2 2003/04/19 10:36:29 noro Exp $ \JP @chapter その他の演算 \EG @chapter Other operations \BJP 以下の諸演算において, 最後の引数は, 呼び出し側によって確保された, 結果のポインタを書く場所を示すポインタである. \E \BEG \E \JP @section 除算 \EG @section Division @example #include "ca.h" divsrp(vl,a,b,qp,rp) *qp = a / b; *rp = a % b VL vl; P a,b,*qp,*rp; premp(vl,a,b,rp) *rp = lc(b)^(deg(a)-deg(b)+1)*a % b VL vl; P a,b,*rp; @end example @noindent \BJP 一般に多変数多項式に対しては, 必ずしも除算が実行できるとは限らない. @code{divsrp()} は, 商, 剰余が存在することが分かっている場合にそれらを求 める函数である. これは, 例えば除数の主係数が有理数である場合などに用いら れる. 一般に多項式剰余は擬剰余を計算することにより求める. \E \BEG \E @section GCD @example #include "ca.h" ezgcdp(vl,a,b,rp) *rp = gcd(pp(a),pp(b)) VL vl; P a,b,*rp; ezgcdpz(vl,a,b,rp) *rp = gcd(a,b) VL vl; P a,b,*rp; pcp(vl,a,pp,cp) *pp = pp(a); *cp = cont(cp); VL vl; P a,*pp,*cp; @end example @noindent \BJP @code{pp(a)} は @code{a} の原始的部分, @code{cont(a)} は容量を 表す. @code{ezgcdp()} は整数因子を除いた gcd, @code{ezgcdpz()} は整数因 子をこめた gcd を計算する. \E \BEG \E \JP @section 代入 \EG @section Substitution @example #include "ca.h" substp(vl,a,v,b,rp) VL vl; P a,b,*rp; V v; substr(vl,a,v,b,rp) VL vl; R a,b,*rp; V v; @end example @JP @section 微分 @EG @section Differentiation @example #include "ca.h" diffp(vl,a,v,rp) VL vl; P a,*rp; V v; pderivr(vl,a,v,rp) VL vl; R a,*rp; V v; @end example \BJP @code{diffp()} は多項式 @code{a} を @code{v} で偏微分する. @code{pderivr()} は有理式 @code{a} を @code{v} で偏微分する. \E \BEG \E \JP @section 終結式 \EG @section Resultants @example #include "ca.h" resultp(vl,v,a,b,rp) VL v; P a,b,*rp; @end example \BJP @code{resultp()} は多項式 $a,b$ の, @code{v} に関する終結式を計算する. \E \BEG \E \JP @section 因数分解 \EG @section Polynomial factorization @example #include "ca.h" fctrp(vl,a,dcp) VL vl; P a; DCP *dcp; sqfrp(vl,a,dcp) VL vl; P a; DCP *dcp; @end example @noindent \BJP @code{fctrp()}, @code{sqfrp()} は多項式 @code{a} の有理数体上での 既約因子分解, 無平方因子分解をそれぞれ行う. 因数分解の結果は @code{[因子, 重複度]} のリストとして表現できる. これを 次数係数リスト用のデータ構造 @code{DCP} を流用して表現する. すなわち, メ ンバ @code{d} に重複度, メンバ @code{c} に因子を代入する. 分解は, まず 入力多項式 @code{a} を @example a = c * b (c は有理数, b は整数上原始的な多項式) @end example @noindent と分解した後, @code{b} を実際に分解する. 結果は, リストの先頭に, @code{[c, 1]} なる定数項, 以下 @code{b} の因子が続く. \E \BEG \E