=================================================================== RCS file: /home/cvs/OpenXM/src/asir-contrib/packages/doc/noro_module_syz/noro_module_syz-ja.texi,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- OpenXM/src/asir-contrib/packages/doc/noro_module_syz/noro_module_syz-ja.texi 2016/08/30 22:44:30 1.1 +++ OpenXM/src/asir-contrib/packages/doc/noro_module_syz/noro_module_syz-ja.texi 2016/08/31 07:49:37 1.2 @@ -1,4 +1,4 @@ -%comment $OpenXM$ +%comment $OpenXM: OpenXM/src/asir-contrib/packages/doc/noro_module_syz/noro_module_syz-ja.texi,v 1.1 2016/08/30 22:44:30 noro Exp $ %comment --- おまじない --- \input ../../../../asir-doc/texinfo @iftex @@ -104,12 +104,12 @@ Copyright @copyright{} Masayuki Noro @table @t @item newsyz.module_syz(@var{f},@var{v},@var{h},@var{O}[|@var{weyl=1}]) - +syzygy の生成系 (グレブナー基底) を計算する. @end table @table @var @item return -syzygy の生成系 (グレブナー基底) を計算する. +または多項式リストのリスト @item f 多項式リスト, または多項式リストのリスト @@ -134,7 +134,7 @@ syzygy の生成系 (グレブナー基底) を計算する. @item @var{h} が 0 のとき有理数体上で trace アルゴリズムにより計算する. @var{h} が 1 のとき有理数体上で斉次化 trace アルゴリズムにより計算する. @var{h} が 2 以上の素数のとき有限体上で計算する. -オプション @var{weyl} が 1 のとき Weyl 代数上で計算する. +オプション @var{weyl} が 1 のとき Weyl 代数上で, 左イデアル (左加群) として計算する. @end itemize @example @@ -154,388 +154,43 @@ afo @table @t @item newsyz.module_syz(@var{f},@var{v},@var{h},@var{O}[|@var{weyl=1}]) -加群の -HGM により重複固有値を持つ共分散行列に対する Wishart 行列の最大固有値の -分布関数の値を計算する. +加群の自由分解を計算する. @end table @table @var @item return -@item m -変数の個数 -@item n -自由度 -@item [p1,p2,...] -重複固有値の個数のリスト -@item [s1,s2,...] -各重複固有値 -@end table +多項式リストのリストのリスト -@itemize @bullet -@item -固有値 @var{si} を @var{pi} 個もつ対角行列を共分散行列とする Wishart 行 -列の最大固有値 @var{l1}の分布関数の値 @var{Pr[l1j} を満たし, さらに因子は -ある一定の順序で整列される. -@item -@var{f} を上のようなべき積とし, @var{c} を定数とするとき, 単項式にあた -る @var{c/f} は @var{[c,f]} で表現される. @var{f=[]} の場合, 分母が 1 -であることを意味する. -@item -最後に, @var{c1/f1+...+ck/fk} は @var{[[c1,f1],...,[ck,fk]]} と表現され -る. ここでも, 各項はある一定の順序で整列される. -@item -部分分数を通分して簡約した結果, 0 になることもあることに注意する. +@item @var{R} を多項式環とする. @var{f=[f1,...,fm]} は @var{R} のイデアルまたは @var{R^k} の部分加群 (いずれも @var{M}と +する) の生成系とする. +この関数は, @var{M} の自由分解, すなわち完全列 @var{0->F(l)->F(l-1)->...->F(0)->M->0} を計算する. +@var{F(i)=R^(ni)} とする. +@item 結果は @var{[fl,...,f0]} なるリストで, @var{fi} は @var{F(i)->F(i-1)} +(ただし @var{F(-1)=M}) なる写像を表すベクトル列である. +@var{fi=[g(1),...,g(n(i))]} のとき, 各 @var{gj} はサイズ @var{n(i-1)} のリストで, @var{F(i)} の @var{j} 番目の +標準基底ベクトルの像を表す. +@item @code{newsyz.module_syz} を実行し, 得られた syzygy の生成系のうち, 定数を成分に持つものがある限り簡約を行う, +という操作を単に繰り返すアルゴリズムを実装している. +@item 前項により, @var{f} が斉次の場合, 極小自由分解を得る. @var{f} が斉次でない場合, 前項の簡約は単に @var{F(i)} の +ランクを小さくする簡単化となる. +@item @var{h}, @var{O}, オプション @var{weyl} については @code{newsyz.module_syz} と同様である. @end itemize -@node 部分分数係数の微分作用素の表現,,, 部分分数係数の微分作用素 -@subsection 部分分数係数の微分作用素の表現 - -前節の部分分数を用いて, それらを係数とする微分作用素が表現できる. -@var{f1,...,fk} を部分分数の表現, @var{d1,...,dk} を分散表現単項式 (現 -在設定されている項順序で @var{d1>...>dk}) とするとき, 微分作用素 -@var{f1*d1+...+fk*dk} が@var{[f1,d1],...[fk,dk]]}で表現される. - -@node 部分分数係数の微分作用素の演算,,, 部分分数係数の微分作用素 -@subsection 部分分数係数の微分作用素の演算 - -@menu -* noro_module_syz.wsetup:: -* noro_module_syz.addpf:: -* noro_module_syz.mulcpf:: -* noro_module_syz.mulpf:: -* noro_module_syz.muldpf:: -@end menu - -@node noro_module_syz.wsetup,,, 部分分数係数の微分作用素の演算 -@subsubsection @code{noro_module_syz.wsetup} -@findex noro_module_syz.wsetup - -@table @t -@item noro_module_syz.wsetup(@var{m}) -@end table - -@table @var -@item m -自然数 -@end table - -@itemize @bullet -@item @var{m} 変数の計算環境をセットする. 変数は @var{y0,y1,...,ym}, @var{dy0,...,dym} -で @var{y0, dy0} は中間結果の計算のためのダミー変数である. -@end itemize - -@node noro_module_syz.addpf,,, 部分分数係数の微分作用素の演算 -@subsubsection @code{noro_module_syz.addpf} -@findex noro_module_syz.addpf -@table @t -@item noro_module_syz.addpf(@var{p1},@var{p2}) -@end table - -@table @var -@item return -部分分数係数の微分作用素 -@item p1, p2 -部分分数係数の微分作用素 -@end table - -@itemize @bullet -@item 微分作用素 @var{p1}, @var{p2} の和を求める. -@end itemize - -@node noro_module_syz.mulcpf,,, 部分分数係数の微分作用素の演算 -@subsubsection @code{noro_module_syz.mulcpf} -@findex noro_module_syz.mulcpf -@table @t -@item noro_module_syz.mulcpf(@var{c},@var{p}) -@end table - -@table @var -@item return -部分分数係数の微分作用素 -@item c -部分分数 -@item p -部分分数係数の微分作用素 -@end table - -@itemize @bullet -@item 部分分数 @var{c} と微分作用素 @var{p} の積を計算する. -@end itemize - -@node noro_module_syz.mulpf,,, 部分分数係数の微分作用素の演算 -@subsubsection @code{noro_module_syz.mulpf} -@findex noro_module_syz.mulpf -@table @t -@item noro_module_syz.mulpf(@var{p1},@var{p2}) -@end table - -@table @var -@item return -部分分数係数の微分作用素 -@item p1, p2 -部分分数係数の微分作用素 -@end table - -@itemize @bullet -@item 微分作用素 @var{p1}, @var{p2} の積を計算する. -@end itemize - -@node noro_module_syz.muldpf,,, 部分分数係数の微分作用素の演算 -@subsubsection @code{noro_module_syz.muldpf} -@findex noro_module_syz.muldpf -@table @t -@item noro_module_syz.muldpf(@var{y},@var{p}) -@end table - -@table @var -@item return -部分分数係数の微分作用素 -@item y -変数 -@item p -部分分数係数の微分作用素 -@end table - -@itemize @bullet -@item 変数 @var{y} に対し, 微分作用素 @var{dy} と @var{p} の微分作用素としての -積を計算する. -@end itemize - @example -[...] noro_module_syz.wsetup(4)$ -[...] P=noro_module_syz.wishartpf(4,1); -[[[[1,[]]],(1)*<<0,2,0,0,0>>],[[[1/2,[[y1-y2,1]]],[1/2,[[y1-y3,1]]], -...,[[[-a,[[y1,1]]]],(1)*<<0,0,0,0,0>>]] -[...] Q=noro_module_syz.muldpf(y1,P); -[[[[1,[]]],(1)*<<0,3,0,0,0>>],[[[1/2,[[y1-y2,1]]],[1/2,[[y1-y3,1]]], -...,[[[a,[[y1,2]]]],(1)*<<0,0,0,0,0>>]] +afo @end example - -@node Runge-Kutta 法の試験的実装,,, noro_module_syz.rr -@section Runge-Kutta 法の試験的実装 - -@menu -* rk_ratmat:: -@end menu - -@node rk_ratmat,,, Runge-Kutta 法の試験的実装 - -@code{noro_module_syz.ps_by_hgm} では, パフィアン行列を計算したあと, 与えられたステップ数で -Runge-Kutta 法を実行して近似解の値を計算する組み込み関数 @code{rk_ratmat} を実行している. -この関数を, 値が与えられた精度で安定するまでステップ数を2倍しながら繰り返して実行する. -@code{rk_ratmat} 自体, ある程度汎用性があるので, ここでその使用法を解説する. - -@subsection @code{rk_ratmat} -@findex rk_ratmat - -@table @t -@item rk_ratmat(@var{rk45},@var{num},@var{den},@var{x0},@var{x1},@var{s},@var{f0}) -有理関数係数のベクトル値一階線形常微分方程式系を Runge-Kutta 法で解く -@end table - -@table @var -@item return -実数のリスト - -@item rk45 -4 または 5 -@item num -定数行列の配列 -@item den -多項式 -@item x0, x1 -実数 -@item s -自然数 -@item f0 -実ベクトル -@end table - -@itemize @bullet -@item -配列 @var{num} のサイズを @var{k} とするとき, -@var{P(x)=1/den(num[0]+num[1]x+...+num[k-1]x^(k-1))} に対し @var{dF/dx = P(x)F}, @var{F(x0)=f0} を -Runge-Kutta 法で解く. -@item -@var{rk45} が 4 のとき 4 次 Runge-Kutta, 5 のとき 5 次 Runge-Kutta アルゴリズムを実行する. -実験的実装のため, adaptive アルゴリズムは実装されていない. -@item -@var{s} はステップ数で, 刻み幅は@var{(x1-x0)/s} である. -@item -@var{f0} がサイズ@var{n} のとき, @var{num} の各成分は @var{n} 次正方行列である. -@item -結果は, 長さ @var{s} の実数リスト @var{[r1,...,rs]} で, @var{ri} は @var{i} ステップ目に計算された -解ベクトルの第0成分である. 次のステップに進む前に解ベクトルを @var{ri} で割るので, 最終的に -解 @var{F(x1)} の第 0 成分が @var{rs*r(s-1)*...*r1} となる. -@item 方程式が線形なので, Runge-Kutta の各ステップも線形となることを利用し, -第0成分を1に正規化することで, 途中の解の成分が倍精度浮動小数の -範囲に収まることを期待している. 初期ベクトル @var{f0} の成分が倍精度浮動小数に収まらない場合 -は, @var{f0} を正規化してから @code{rk_ratmat} を実行し, 前項の結果に @var{f0} の第 0 成分をかければ -よい. -@end itemize - -@example -[...] F=ltov([sin(1/x),cos(1/x),sin(1/x^2),cos(1/x^2)]); -[ sin((1)/(x)) cos((1)/(x)) sin((1)/(x^2)) cos((1)/(x^2)) ] -[...] F0=map(eval,map(subst,F,x,1/10)); -[ -0.54402111088937 -0.839071529076452 -0.506365641109759 0.862318872287684 ] -[...] N0=matrix(4,4,[[0,0,0,0],[0,0,0,0],[0,0,0,-2],[0,0,2,0]])$ -[...] N1=matrix(4,4,[[0,-1,0,0],[1,0,0,0],[0,0,0,0],[0,0,0,0]])$ -[...] N=ltov([N0,N1])$ -[...] D=x^3$ -[...] R=rk_ratmat(5,N,D,1/10,10,10^4,F0)$ -[...] for(T=R,A=1;T!=[];T=cdr(T))A *=car(T)[1]; -[...] A; -0.0998334 -[...] F1=map(eval,map(subst,F,x,10)); -[ 0.0998334166468282 0.995004165278026 0.00999983333416666 0.999950000416665 ] -@end example - @comment --- おまじない --- @node Index,,, Top