=================================================================== RCS file: /home/cvs/OpenXM/src/asir-doc/exp/exp-ja.texi,v retrieving revision 1.30 retrieving revision 1.60 diff -u -p -r1.30 -r1.60 --- OpenXM/src/asir-doc/exp/exp-ja.texi 2009/02/23 04:00:53 1.30 +++ OpenXM/src/asir-doc/exp/exp-ja.texi 2021/01/19 23:52:34 1.60 @@ -1,26 +1,27 @@ -%% $OpenXM: OpenXM/src/asir-doc/exp/exp-ja.texi,v 1.29 2009/02/23 03:41:26 nakayama Exp $ -\input texinfo +%% $OpenXM: OpenXM/src/asir-doc/exp/exp-ja.texi,v 1.59 2020/09/09 00:33:25 noro Exp $ +\input texinfo-ja @iftex @catcode`@#=6 @def@fref#1{@xrefX[#1,,@code{#1},,,]} -@def@b#1{{@bf@gt #1}} +@def@b#1{{@bf #1}} @catcode`@#=@other @end iftex @overfullrule=0pt @c -*-texinfo-*- @comment %**start of header -@comment --- $B$*$^$8$J$$=*$j(B --- +@comment --- おまじない終り --- -@comment --- GNU info $B%U%!%$%k$NL>A0(B --- -@setfilename xyzman +@comment --- GNU info ファイルの名前 --- +@setfilename exp +@documentlanguage ja -@comment --- $B%?%$%H%k(B --- -@settitle $B(B, $BCx:n8"I=<((B --- -@title $B$r@53N$KJB$Y$k(B --- -@comment --- $B$3$NJ8=q$G$O(B chapter XYZ, Chapter Index $B$,$"$k(B. -@comment --- Chapter XYZ $B$K$O(B section XYZ$B$K$D$$$F(B, section XYZ$B$K4X$9$k4X?t$,$"$k(B. +@comment --- @menu は GNU info, HTML 用 --- +@comment --- chapter 名を正確に並べる --- +@comment --- この文書では chapter XYZ, Chapter Index がある. +@comment --- Chapter XYZ には section XYZについて, section XYZに関する関数がある. @menu -* Experimental Functions:: +* 実験的仕様の関数説明書について:: +* 実験的仕様の関数:: * Index:: @end menu -@comment --- chapter $B$N3+;O(B --- -@comment --- $B?F(B chapter $BL>$r@53N$K(B. $B?F$,$J$$>l9g$O(B Top --- -@node $B$r@53N$KJB$Y$k(B. --- -@menu -* $B$J$I$NI=<((B --- - -$B$3$N@bL@=q$G$O(B -@b{Asir} $B$KF3F~$5$l$?pJs$,=q$+$l$F$$$k(B. - -@comment --- section ``$B$r@53N$K(B --- -@node quotetotex quotetotex_env,,, $B\$7$$@bL@(B --- -@comment --- @itemize$B!A(B@end itemize $B$O2U>r=q$-(B --- -@comment --- @bullet $B$O9uE@IU$-(B --- +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- @itemize @bullet @item -quotetotex $B$O(B @var{q} $B$r(B latex $B7A<0$GI=8=$7$?J8;zNs$KJQ49$9$k(B. -@item -$B0J2<(B quotetotex_env $B$N%Q%i%a!<%?$N0UL#$r@bL@$9$k(B. -@item -conv_rule: 3 $B%S%C%H$rMQ$$$FJQ49%k!<%k$r;XDj$9$k(B. -0$B%S%C%HL\$O(B symbol_table $B$K$h$kJQ49$r9T$&$+(B, -1$B%S%C%HL\$OE:;zJQ49$r9T$&$+(B, -2$B%S%C%HL\$O(B d $B$+$i;O$^$kJQ?tL>$rHyJ,:nMQAG$H$_$J$7$F=hM}$9$k$+(B, -$B$r0UL#$9$k(B. -$B$?$H$($P(B conv_rule $B$H$7$F(B 3 $B$r;XDj$9$k$H(B, -0$B%S%C%HL\(B, 1 $B%S%C%HL\$,(B 1 $B$H$J$k$N$G(B -symbol_table $B$K$h$kJQ49$r9T$$(B, $BE:;zJQ49$r$*$3$J$&(B. -$BE:;zJQ49$O?t;z$H1Q;z$N6-L\$*$h$S(B _ $B5-9f$r6h@Z$j$H$9$k(B. -symbol_table $B$K$h$kJQ49$,:G=i$KE,MQ$5$l$k(B. -alpha, beta, $BEy$O<+F0E*$r%.%j%7%cJ8;z$KJQ49$9$k%F!<%V%k$O(B -$BFbB"$:$_(B. -@item - dp_vars_prefix: $BJ,;6I=8=B?9`<0$O(B - @tex +quotetotex は @var{q} を latex 形式で表現した文字列に変換する. +@item +以下 quotetotex_env のパラメータの意味を説明する. +@item +conv_rule: 3 ビットを用いて変換ルールを指定する. +0ビット目は symbol_table による変換を行うか, +1ビット目は添字変換を行うか, +2ビット目は d から始まる変数名を微分作用素とみなして処理するか, +を意味する. +たとえば conv_rule として 3 を指定すると, +0ビット目, 1 ビット目が 1 となるので +symbol_table による変換を行い, 添字変換をおこなう. +添字変換は数字と英字の境目および _ 記号を区切りとする. +symbol_table による変換が最初に適用される. +alpha, beta, 等は自動的をギリシャ文字に変換するテーブルは +内蔵ずみ. +@item + dp_vars_prefix: 分散表現多項式は + @iftex + @tex $x_0, x_1, \cdots$ - @end tex - $B$NB?9`<0$H$7$F(B latex $B7A<0$KJQ49$5$l$k$,$3$N(B - x $B$NItJ,$rJQ99$9$k(B. -@item - dp_vars_origin: $B%$%s%G%C%/%9$N;O$^$j$NCM$r;XDj$9$k(B. - $B%G%U%)!<%k%H$O(B 0. + @end tex + @end iftex + @ifinfo + x0, x1, ... + @end ifinfo + の多項式として latex 形式に変換されるがこの + x の部分を変更する. @item -dp_vars_hweyl: $BJ,;6I=8=B?9`<0$r%o%$%kBe?t$N85$H$_$J$7$F(B -latex $B7A<0$KJQ49$9$k(B. -$B6v?t8DJQ?t$,$"$k$H$-$O(B $B:G=i$NH>J,$r(B -@tex + dp_vars_origin: インデックスの始まりの値を指定する. + デフォールトは 0. +@item +dp_vars_hweyl: 分散表現多項式をワイル代数の元とみなして +latex 形式に変換する. +偶数個変数があるときは 最初の半分を +@iftex +@tex $x_0, x_1, \cdots$ -@end tex -$B$K(B -$B8eH>$NH>J,$r(B -@tex +@end tex +に後半の半分を +@tex $\partial_0, \partial_1, \cdots$ -@end tex -$B$KJQ49$9$k(B. -$B4q?t8D$N>l9g$O:G8e$NJQ?t$,F1;~2=JQ?t$H$7$F(B h $B$GI=<($5$l$k(B. +@end tex +@end iftex +@ifinfo +x0, x1, ... に後半の半分を dx0, dx1, ... +@end ifinfo +に変換する. +奇数個の場合は最後の変数が同時化変数として h で表示される. @item - dp_dvars_prefix: dp_vars_hweyl $B$,(B 1 $B$N;~$K8eH>ItJ,$N(B prefix $B$r;XDj$9$k(B. - $B%G%U%)!<%k%H$O(B @tex $\partial$ @end tex + dp_dvars_prefix: dp_vars_hweyl が 1 の時に後半部分の prefix を指定する. + デフォールトは @tex $\partial$ @end tex @item - dp_dvars_origin: dp_vars_hweyl $B$,(B 1 $B$N;~$N%$%s%G%C%/%9$N;O$^$j$NCM(B. -@item -conv_func: $B%f!<%6Dj5A$NJQ494X?t$r$h$V(B. -@item - + dp_dvars_origin: dp_vars_hweyl が 1 の時のインデックスの始まりの値. +@item +conv_func: ユーザ定義の変換関数をよぶ. @end itemize -@comment --- @example$B!A(B@end example $B$OH(B($B%j%s%/(B)$B$r=q$/(B --- +@comment --- 参照(リンク)を書く --- @table @t -@item $B;2>H(B +@item 参照 @ref{objtoquote} print_tex_form(contrib) @end table -@comment --- ChangeLog $B$r=q$/(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item - $B$3$N4X?t$O(B 2004$BG/(B2$B7nKv$+$i(B3$B7n$K$+$1$F(B asir $B$r(B - knoppix $BHG(B texmacs $B$KBP1~$5$;$k$?$a$K=q$+$l$?(B. - Asir-contrib $B$N(B print_tex_form $B$,$=$N867?$G$"$j(B, $B$=$l$r8zN(2=$7$^$?(B - $B=PNO7A<0$r2~A1$7$?(B. - OpenXM/src/kxx/ox_texmacs.c, OpenXM/src/texmacs $B$b;2>H(B. -@item - OpenXM/src/asir-contrib/packages/src/noro_print.rr 1.1--1.8, - noro_print_default.rr 1.1--1.3 $B$b;2>H(B. -@item - $BJQ99$rH(B +@item 参照 @ref{quotetotex} @ref{quotetolist} @end table -@comment --- ChangeLog $B$r=q$/(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item $B$3$N4X?t$O(B quotetotex $B$NA0=hM}$r$9$k$?$a$K=q$+$l$?(B. -@item asir-contrib $B$N4X?t(B quote_to_quote $B$b;2>H(B. +@item この関数は quotetotex の前処理をするために書かれた. +@item asir-contrib の関数 quote_to_quote も参照. @item OpenXM_contrib2/asir2000/builtin/print.c 1.16. @end itemize -@comment --- $B"~"~"~"~(B $B4X?t(B copyright $B$N@bL@(B $B"~"~"~"~(B -@node copyright,,, $B, + [u_op,(),[b_op,+,[internal,x],[internal,1]]], + [u_op,(),[b_op,+,[internal,x],[internal,2]]]] + +[3] FA2=quote_to_funargs(FA[2])[1]; +[b_op,+,[internal,x],[internal,1]] + +[4] FA3=quote_to_funargs(FA[3])[1]; +[b_op,+,[internal,x],[internal,2]] + +[5] funargs_to_quote([FA[0],FA[1],FA2,FA3]); +[b_op,+,[b_op,+,[internal,x],[internal,1]], + [b_op,+,[internal,x],[internal,2]]] +@end example + +次の例は OpenXM/asir-contrib 版の asir で実行. +@example +[1287] load("noro_simplify.rr"); +1 +[1293] noro_simplify.remove_paren(quote( f(1-(x)))); +quote(f(1-x)) +@end example + +funargs_to_quote を用いて既存の quote の子供を置き換えて +新しい quote をつくり出せる. +@example +[1184] R=quote_to_funargs(quote(a+(b+c))); +[0,<...quoted...>,<...quoted...>,<...quoted...>] +[1185] T=quote_to_funargs(quote(1+2)); +[0,<...quoted...>,<...quoted...>,<...quoted...>] +[1186] funargs_to_quote([0,R[1],R[2],T[2]]); +quote(a+1) +@end example + +@table @t +@item 参照 +@ref{quotetolist} +@end table + + +@noindent +ChangeLog +@itemize @bullet +@item + これらの関数は 2004-7-8 から開発のはじまっている quote の simplification 関連 + の実験的関数である. + 変更をうけたソースコードは多岐にわたるのでまだ書かない. +@item + 括弧を取り去る問題は OpenXM/fb が蓄えている公式を tex で綺麗に表示するのが動機の一つ. +@item + 2004-6-26 の計算代数セミナーにおいて, 中川さんが simplifier についていろいろ問題提起 +をした (計算代数セミナービデオ参照). +@item parse/quote.c の strcut fid_spec fid_spec_tab[] +の部分に書いてある形式に @code{funargs_to_quote} は変換する. +@end itemize + + +@node eval_quote,,, クオート +@subsection @code{eval_quote} +@findex eval_quote + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item eval_quote(@var{Q}); +:: quote 型データ @var{Q} を asir のオブジェクトに変換する. +@end table + +@table @var +@item return +オブジェクト +@item Q +quote型 +@end table + +@itemize @bullet +@item quote 型データ @var{Q} を asir のオブジェクトに変換する. +@item 逆関数は @code{objtoquote} +@end itemize + +@example +ctrl("print_quote",2); +A=quote((x-1)^2+(x-1)+3); + 出力: ((((x)-(1))^(2))+((x)-(1)))+(3) +eval_quote(A); + 出力: x^2-x+3 +print_input_form(A); /* asir-contrib */ + 出力: quote((x-1)^2+(x-1)+3) +@end example + +@table @t +@item 参照 +@ref{objtoquote}, @ref{quotetolist}, @ref{eval_string}, +@ref{quote_to_funargs}, @ref{funargs_to_quote} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item -----まだ書いてない. +@end itemize + + +@node nqt_match,,, クオート +@subsection @code{nqt_match} +@findex nqt_match + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item nqt_match(@var{Expr},@var{Pattern}[,@var{Mode}]) +:: @var{Expr} が @var{Pattern} にマッチ(適合)すると 1 を戻す. しないと 0 を戻す. +@end table + +@table @var +@item return +整数 +@item Expr +quote型 +@item Pattern +quote型 +@item Mode +整数 +@end table + +@itemize @bullet +@item @var{Expr} が @var{Pattern} にマッチ(適合)すると 1 を戻す. しないと 0 を戻す. +@item 適合した場合, 副作用として, @var{Pattern} に含まれるプログラム変数(大文字ではじまる変数)に適合した値が代入される. +@item nqt は normalized quote の略であり fnode標準形に変換してから適合検査をする. fnode標準形については @ref{qt_normalize} を見よ. +@item @var{Mode} により展開方法を指定し, その展開方法により得られた @var{Expr} の +fnode標準形と @var{Pattern} を比較する. +@end itemize + +@example +ctrl("print_quote",2); +A=quote((x-y)*(x+y)); +nqt_match(A,quote(P*Q)); +[P,Q] + 出力: [x-y, x+y] +nqt_match(A,quote(P*Q),1); + マッチしない. +nqt_match(A,quote(P*Q),2); + マッチしない. +qt_normalize(A,1); + 出力: ((x)^(2))+((x)*(y))+((-1)*((y)^(2)))+((-1)*(y)*(x)) +qt_normalize(A,2); + 出力: ((x)*(x))+((x)*(y))+((-1)*(y)*(x))+((-1)*(y)*(y)) +@end example + +@table @t +@item 参照 +@ref{nqt_match_rewrite}, +@ref{qt_rewrite} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item ----- まだ書いてない. +@end itemize + + +@node nqt_match_rewrite,,, クオート +@subsection @code{nqt_match_rewrite} +@findex nqt_match_rewrite + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item nqt_match_rewrite(@var{Expr},@var{Rule},@var{Mode}) +:: @var{Expr} を @var{Rule} に従い書き換える. +@end table + +@table @var +@item return +quote型 +@item Expr +quote型 +@item Rule +[@var{Pattern},@var{Action}] かまたは +[@var{Pattern},@var{Condition},@var{Action}]. +これらの要素はすべて quote型. +@item Mode +整数 +@end table + +@itemize @bullet +@item @var{Expr} を @var{Rule} に従い書き換える. @var{Pattern} に適合しない場合は +@var{Exprt} 自体を戻す. +@item nqt は normalized quote の略であり fnode標準形に変換してから適合検査をする. fnode標準形については @ref{qt_normalize} を見よ. +@end itemize + +@comment %%Doc: cfep/tests/2006-03-12-qt.rr +@example +ctrl("print_quote",2); +nqt_match_rewrite(`x*y*z,[`X*Y,`X+Y],1); + 出力: (x)+((y)*(z)) +A=`x*x; +nqt_match_rewrite(A,[`X*Y,`X+Y],1); + 出力: x^2 (マッチしていない) +nqt_match_rewrite(A,[`X*Y,`X+Y],2); + 出力: 2*x + +適合についてのモードの違いを理解するために次の例および fnode標準形(qt_normalize) を参照. +quotetolist(qt_normalize(`x*x,0)); + 出力: [b_op,^,[internal,x],[internal,2]] +quotetolist(qt_normalize(`x*x,1)); + 出力: [b_op,^,[internal,x],[internal,2]] +quotetolist(qt_normalize(`x*x,2)); + 出力: [n_op,*,[internal,x],[internal,x]] +@end example + +@table @t +@item 参照 +@ref{nqt_match}, +@ref{qt_rewrite}, +@ref{qt_normalize} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item -----まだ書いてない. +@end itemize + + + +@node qt_normalize,,, クオート +@subsection @code{qt_normalize} +@findex qt_normalize + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item qt_normalize(@var{Expr}[,@var{Mode}]) +:: @var{Expr} を fnode標準形に変換する. @var{Mode}により標準形への展開アルゴリズムを指定できる. +@end table + +@table @var +@item return +quote型 +@item Expr +quote型 +@item Mode +整数 +@end table + +fnodeは quote型の実体である. +fnode は木であり, 型 id および子供からなる. +型および子供を取り出す関数が funargs_to_quote である. +また fnode をリストに変換する関数が quotetolist である. + +fnode の標準形はパターンマッチング, 書き換えを容易におこなうために導入された. +fnode の標準形を fn と書くとき, 標準形の BNF風表現での定義は以下のとおり. +@example + fn = formula | functor(nf [,...]) | sum_of_monom + fnode の標準形. functor は関数よびだしみたいなもの. + sum_of_monom = monom [+ ...] + モノミアルの和 + monom = [formula *] nfpow [* ...] + モノミアル + nfpow = nf | nf^(nf) + 冪乗部分の標準形 + formula = Risa object +@end example + + +@itemize @bullet +@item @var{Expr} を fnode標準形に変換する. @var{Mode}により標準形への展開アルゴリズムを指定できる. +@item 展開は再帰的である. +@item 入力が fnode に変換された初期状態では + や * は子供が2人の binary operator +(b_op) であるが, qt_normalize を作用させることにより, + や * は任意人数の +子供を持てる n-ary operator に変換される. +@item n-ary operator を基礎とした fnode標準形を用いることにより, パターンマッチ用のパターンの数を減らせることが経験的にわかっている. +@item @var{Mode}=0. 展開しない. これが既定の動作. +@item @var{Mode}=1. 展開する. ただし x*x 等を x^2 等に変換 +@item @var{Mode}=2. 展開する. ただし x*x 等を x^2 等に変換しない. +@end itemize + +@var{Mode} の違いについては以下の例も参考に. +@comment %%cfep/tests/2006-03-12-qt.rr +@example +ctrl("print_quote",2); +A=quote((x-y)*(x+y)); + 出力: ((x)-(y))*((x)+(y)) +B=qt_normalize(A,0); + 出力: ((x)+((-1)*(y)))*((x)+(y)) Mode=0. 展開はされない. +, * は n_op (nary-op) へ. +quotetolist(B); + 出力: [n_op,*,[n_op,+,[internal,x],[n_op,*,[internal,-1],[internal,y]]],[n_op,+,[internal,x],[internal,y]]] + +B=qt_normalize(A,1); + 出力: ((x)^(2))+((x)*(y))+((-1)*((y)^(2)))+((-1)*(y)*(x)) + Mode=1. 展開する. +, * は n_op (nary-op) へ. 巾をまとめる. +quotetolist(B); + 出力: [n_op,+,[b_op,^,[internal,x],[internal,2]],[n_op,*,[internal,x],[internal,y]],[n_op,*,[internal,-1],[b_op,^,[internal,y],[internal,2]]],[n_op,*,[internal,-1],[internal,y],[internal,x]]] + +qt_normalize(A,2); + 出力: ((x)*(x))+((x)*(y))+((-1)*(y)*(x))+((-1)*(y)*(y)) + Mode=2. 展開する. +, * は n_op (nary-op) へ. 巾は使わない. +quotetolist(B); + 出力: [n_op,+,[b_op,^,[internal,x],[internal,2]],[n_op,*,[internal,x],[internal,y]],[n_op,*,[internal,-1],[b_op,^,[internal,y],[internal,2]]],[n_op,*,[internal,-1],[internal,y],[internal,x]]] + +qt_normalize(`x^2,2); + 出力: (x)*(x) + Mode=2. 巾は使わない. n-ary の * へ. +@end example + +@table @t +@item 参照 +@ref{nqt_match}, +@ref{nqt_match_rewrite}, +@ref{quotetolist}, +@ref{quote_to_funargs} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item -----まだ書いてない. +@end itemize + + +@node qt_set_coef,,, クオート +@subsection @code{qt_set_coef} +@findex qt_set_coef + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item qt_set_coef(@var{ParamList}) +:: 以下 @var{ParamList} に現れる多項式変数を変数とする有理関数体を係数とする +非可換多項式を扱う. +@end table + +@table @var +@item return +リスト +@item ParamList +リスト +@end table + +@itemize @bullet +@item 以下 @var{ParamList} に現れる多項式変数を変数とする有理関数体を係数とする +非可換多項式を扱う. +@item この宣言をしないと係数体を数とする非可換多項式として計算する. +@item qt_normalize およびその機能を用いる関数がこの機能の影響を受ける. +@item qt_comp 関数がこの機能の影響を受ける. +@end itemize + +@example +ctrl("print_quote",2); +qt_set_coef([a]); +B=qt_normalize(quote((a*x+a)^2),2); + 出力: ((a^2)*(x)*(x))+((2*a^2)*(x))+(a^2) +qt_normalize(B+B,2); + 出力: ((2*a^2)*(x)*(x))+((4*a^2)*(x))+(2*a^2) +@end example + +@table @t +@item 参照 +@ref{qt_normalize} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item -----まだ書いてない. +@end itemize + + +@node qt_set_ord,,, クオート +@subsection @code{qt_set_ord} +@findex qt_set_ord + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item qt_set_ord(@var{VarList}) +:: @var{VarList} を変数順序とする. +@end table + +@table @var +@item return +リスト +@item VarList +リスト +@end table + +@itemize @bullet +@item @var{VarList} を辞書式に用いた変数順序を以下使用する. +@item この宣言をしないとある不定元についての既定の辞書式順序-----まだ書いてない---を用いて項を比較する. +@var{VarList} に現れない変数についてはこの順序が適用される. +@item qt_normalize およびその機能を用いる関数がこの機能の影響を受ける. +@item qt_comp 関数がこの機能の影響を受ける. +@end itemize + +@example +ctrl("print_quote",2); +qt_normalize(quote(x+y),2); + 出力: (x)+(y) +qt_set_ord([y,x]); + 出力: [y,x,z,u,v,w,p,q,r,s,t,a,b,c,d,e,f,g, 以下省略 ] +qt_normalize(quote(x+y),2); + 出力: (y)+(x) +@end example + +@table @t +@item 参照 +@ref{qt_normalize}, +@ref{nqt_comp} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item -----まだ書いてない. +@end itemize + + +@node qt_set_weight,,, クオート +@subsection @code{qt_set_weight} +@findex qt_set_weight + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item qt_set_weight(@var{WeightVector}) +:: 変数について weight ベクトルを設定する. +@end table + +@table @var +@item return +リスト +@item WeightVector +リスト +@end table + +fnode f の weight w(f) は次の式で計算する. +@example + f が葉の場合は原則 0. qt_weight_vector で weight が与えられている不定元に + ついてはその値. + + f がnodeの場合は次の規則で再帰的にきめる. + w(f+g) = max(w(f),w(g)) + w(f g) = w(f) + w(g) + w(f^n) = n w(f) + 関数については? -----まだ書いてない. +@end example + +@itemize @bullet +@item @var{WeightVector} でまず順序の比較をして, それから qt_set_order による順序, 最後に既定の順序で比較する. +@var{WeightVector} に現れない変数についての weight は 0 となる. +@item qt_normalize およびその機能を用いる関数がこの機能の影響を受ける. +qt_normalize での展開では, この順序を用いて項がソートされる. +@item qt_comp およびその機能を用いる関数がこの機能の影響を受ける. +@item weight ベクトルによる順序比較についてはグレブナ基底の節@ref{dp_gr_main}も参照. +@end itemize + +@example +ctrl("print_quote",2); +qt_set_weight([[x,-1],[y,-1]]); + 結果: [[x,-1],[y,-1]] +qt_normalize(quote( 1+(x+y)+(x+y)^2),1); + 結果: (1)+(y)+(x)+((y)^(2))+((y)*(x))+((x)^(2))+((x)*(y)) +@end example + +@table @t +@item 参照 +@ref{qt_normalize}, +@ref{qt_set_ord}, +@ref{qt_set_weight}, +@ref{dp_gr_main} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item -----まだ書いてない. +@end itemize + + +@node nqt_comp,,, クオート +@subsection @code{nqt_comp} +@findex nqt_comp + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item nqt_cmp(@var{Expr1},@var{Exprt2}) +:: @var{Expr1} と @var{Expr2} の順序を比較する. +@end table + +@table @var +@item return +整数 +@item Expr1, Expr2 +quote型 +@end table + +@itemize @bullet +@item @var{Expr1} と @var{Expr2} の順序を比較する. +@item @var{Expr1} > @var{Exprt2} なら 1. +@item @var{Expr1} < @var{Exprt2} なら -1. +@item @var{Expr1} = @var{Exprt2} (おなじ順序) なら 0. +@end itemize + +@example +ctrl("print_quote",2); +qt_set_ord([y,x]); qt_set_weight([[x,-1],[y,-1]]); +[nqt_comp(`x,`y), nqt_comp(`y,`x), nqt_comp(`x,`x)]; + 出力: [-1,1,0] +@end example + +@table @t +@item 参照 +@ref{qt_normalize}, +@ref{qt_set_ord}, +@ref{qt_set_weight} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item まだ書いてない. +@end itemize +@comment **************************************************************** + +@node qt_is_var qt_is_coef,,, クオート +@subsection @code{qt_is_var}, @code{qt_is_coef} +@findex qt_is_var +@findex qt_is_coef + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item qt_is_var(@var{Expr}) +:: @var{Expr} が不定元に対応する quote なら 1 を戻す. +@item qt_is_coef(@var{Expr}) +:: @var{Expr} が係数の有理関数体に属するとき 1 を戻す. +@end table + +@table @var +@item return +整数 +@item Expr +quote型 +@end table + +@itemize @bullet +@item @var{Expr} が不定元に対応する quote なら 1 を戻す. +そうでないとき 0 を戻す. +@end itemize + +@example +[qt_is_var(quote(x)), qt_is_var(quote(3/2))]; + 出力: [1,0] +@end example + +@table @t +@item 参照 +@ref{qt_rewrite}, +@ref{nqt_match_rewrite} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item -----まだ書いてない. +@end itemize +@comment **************************************************************** + +@node qt_rewrite,,, クオート +@subsection @code{qt_rewrite} +@findex qt_rewrite + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item qt_rewrite(@var{Expr},@var{Rules},@var{Mode}) +:: @var{Expr} を規則集合 @var{Rules} を用いて書き換える. +@end table + +@table @var +@item return +quote型 +@item Expr +quote型 +@item Rules +リスト +@item Mode +整数 +@end table + +@itemize @bullet +@item ユーザ言語を用いて定義された関数. +@code{import("noro_rewrite.rr")} しておくこと. +(noro_rewrite.rr が OpenXM/lib/asir-contrib に存在しない場合 +ソースの OpenXM/src/asir-contrib/testing/noro/new_rewrite.rr をコピー) +@item @var{Expr} を規則集合 @var{Rules} を用いて書き換える. +@item 規則の適用は fnode木に対して再帰的である. + 一方 @code{nqt_match_rewrite} ではトップレベルのみに規則が適用される. +@item 規則集合 @var{Rules} の各要素の書き方は @code{nqt_match()} の +@var{Pattern} と同じ書き方. +つまり [パターン, 書き換え結果] または +[パターン, 条件, 書き換え結果]. +@item @var{Mode} の意味は @ref{qt_normalize} の @var{Mode} と同様. +パターンマッチ, 書き換えは @var{Mode} で @code{qt_normalize()} +されてから遂行される. +@end itemize + +注意: 数学的には X*Y=Y*X が可換性を与える規則だが, これをそのまま規則として + 与えると書き換えが停止しない. 次の例では, 上の例のように順序比較し, たとえば, + 順序が大きくなる場合のみに書き換えるべきである. +@example +import("noro_rewrite.rr"); +R=[[`X*Y,`nqt_comp(Y*X,X*Y)>0, `Y*X]]; +qt_rewrite(`(x-y)^2,R,2); + 出力: quote(x*x+-2*x*y+y*y) +@end example + +外積代数の計算 (asir-contrib をロードした状態). +@example +import("noro_rewrite.rr"); +Rext0=[quote(X*Y),quote(qt_is_var(X) && qt_is_var(Y) && nqt_comp(Y,X)>0), + quote(-Y*X)]; +Rext1=[quote(X^N),quote(eval_quote(N)>=2),quote(0)]; +Rext2=[quote(X*X),quote(0)]; +Rext=[Rext0,Rext1,Rext2]; +qt_rewrite(quote( (x+2*y)*(x+4*y) ), Rext,1); + 出力: 2*x*y + +qt_set_coef([a,b,c,d]); +qt_rewrite(quote((a*x+b*y)*(c*x+d*y)), Rext,1); + 出力: (d*a-c*b)*x*y + +@end example + +微分の計算 (asir-contrib をロードした状態). +@example +import("noro_rewrite.rr"); +qt_set_coef([a,b]); +Rd1=[`d(X+Y), `d(X)+d(Y)]; +Rd2=[`d(X*Y),`d(X)*Y+X*d(Y)]; +Rd3=[`d(N), `qt_is_coef(N), `0]; +Rd4=[`d(x),`1]; +Rd=[Rd1,Rd2,Rd3,Rd4]; +B=qt_rewrite( `d( (a*x+b)^3),Rd,2); + 出力: quote(3*a^3*x*x+6*b*a^2*x+3*b^2*a) +fctr(eval_quote(B)); + 出力: [[3,1],[a,1],[a*x+b,2]] +@end example + +@table @t +@item 参照 +@ref{nqt_match}, +@ref{nqt_match_rewrite}, +@ref{qt_normalize} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item qt 系の関数の原型は OpenXM/src/asir-contrib/testing/tr.rr である. +このユーザ言語による開発が 2005年の春まで行われ, そのあと組み込み関数主体の +qt 系の関数が開発された. +@item qt 系の関数についてのその他の参考文献: + OpenXM/doc/Papers/2005-rims-noro.tex および + OpenXM/doc/Papers/2005-rims-noro.tm (TeXmacsの記事). +@item Todo: qt 系の関数を用いたおもしろい計算を Risa/Asir ジャーナルの記事として書く. +@end itemize + +@comment **************************************************************** + +@node 文字列処理,,, 実験的仕様の関数 +@section 文字列処理 + +@comment --- ◯◯◯◯ 関数 copyright の説明 ◯◯◯◯ +@node copyright,,, 文字列処理 @subsection @code{copyright} @findex copyright -@comment --- $B4X?t$N4JC1$J@bL@(B --- +@comment --- 関数の簡単な説明 --- @table @t @item copyright() -:: Risa/Asir $B$N(B copyright $BI=<($rJ8;zNs$H$7$FLa$9(B. +:: Risa/Asir の copyright 表示を文字列として戻す. @end table @table @var @item return -$BJ8;zNs(B +文字列 @end table @itemize @bullet @item -Risa/Asir $B$N(B copyright $BI=<($rJ8;zNs$H$7$FLa$9(B. +Risa/Asir の copyright 表示を文字列として戻す. @end itemize @example @@ -364,62 +1196,62 @@ PARI 2.0.17, copyright 1989-1999, C. Batut, K. Belabas H. Cohen and M. Olivier. @end example -@comment --- ChangeLog $B$r=q$/(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item $B$3$N4X?t$O(B texmacs $BMQ$K=q$+$l$?(B (2004-03). -@item OpenXM_contrib2/asir2000 $B$N2<$N0J2<$N%U%!%$%k$r$_$h(B. builtin/miscf.c 1.21, +@item この関数は texmacs 用に書かれた (2004-03). +@item OpenXM_contrib2/asir2000 の下の以下のファイルをみよ. builtin/miscf.c 1.21, parse/glob.c 1.47. @end itemize -@comment --- $B"~"~"~"~(B $B4X?t(B string_to_tb, ... $B$N@bL@(B $B"~"~"~"~(B -@comment --- $BJ#?t$N4X?t$r$^$H$a$F@bL@$9$kNc(B --- -@node string_to_tb tb_to_string write_to_tb,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t @item string_to_tb(@var{s}) @itemx tb_to_string(@var{tb}) @itemx write_to_tb(@var{s},@var{tb}) -:: $BJ8;zNs2DJQD9G[Ns7?(B(text buffer)$B$N%G!<%?$N=hM}(B +:: 文字列可変長配列型(text buffer)のデータの処理 @end table @table @var @item return -$BJ8;zNs2DJQD9G[Ns7?(B(string_to_tb), $BJ8;zNs7?(B(tb_to_string) +文字列可変長配列型(string_to_tb), 文字列型(tb_to_string) @item s -$BJ8;zNs(B +文字列 @item tb -$BJ8;zNs2DJQD9G[Ns7?(B +文字列可変長配列型 @end table @itemize @bullet @item -@code{string_to_tb(@var{s})} $B$O(B, $BJ8;zNs(B @var{s} $B$r$O$8$a$NMWAG$H$9$k(B -$BJ8;zNs2DJQD9G[Ns7?%*%V%8%'%/%H$r@8@.$9$k(B. +@code{string_to_tb(@var{s})} は, 文字列 @var{s} をはじめの要素とする +文字列可変長配列型オブジェクトを生成する. @item -@code{tb_to_string_(@var{tb})} $B$O(B, -$BJ8;zNs2DJQD9G[Ns7?%*%V%8%'%/%H(B @var{tb} $B$+$iDL>o$NJ8;zNs%*%V%8%'%/%H$r@8@.$9$k(B. +@code{tb_to_string_(@var{tb})} は, +文字列可変長配列型オブジェクト @var{tb} から通常の文字列オブジェクトを生成する. @item -@code{write_to_tb(@var{s},@var{tb})} $B$O(B, $BJ8;zNs(B @var{s} $B$r(B -$BJ8;zNs2DJQD9G[Ns7?%*%V%8%'%/%H(B @var{tb} $B$X=q$-=P$9(B. -@item @var{SS} $B$rJ8;zNsJQ?t$H$9$k$H$-(B, -@var{SS} += "$BJ8;zNs(B" $B$G(B @var{SS} $B$XJ8;zNs$r=q$-B-$7$F$$$/$3$H$,$G$-$k$,(B, -$BL5BL$J%a%b%j$rBgNL$K>CHq$9$k(B. -$BBe$j$K4X?t(B @code{write_to_tb} $B$rMQ$$$k$Y$-$G$"$k(B. -$BJ8;zNs2DJQD9G[Ns7?%*%V%8%'%/%H$OJ8;zNs$N2DJQD9$NG[Ns$G$"$j%a%b%j4IM}$KM%$7$$(B -$B%G!<%?9=B$$G$"$k(B. +@code{write_to_tb(@var{s},@var{tb})} は, 文字列 @var{s} を +文字列可変長配列型オブジェクト @var{tb} へ書き出す. +@item @var{SS} を文字列変数とするとき, +@var{SS} += "文字列" で @var{SS} へ文字列を書き足していくことができるが, +無駄なメモリを大量に消費する. +代りに関数 @code{write_to_tb} を用いるべきである. +文字列可変長配列型オブジェクトは文字列の可変長の配列でありメモリ管理に優しい +データ構造である. @end itemize -@example +@example [219] T=string_to_tb(""); [220] write_to_tb("Hello",T); @@ -431,97 +1263,224 @@ Hello world! @end example -@comment --- ChangeLog $B$r=q$/(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item - $B$3$N4X?t$O(B 2004-3 $B$K(B print_tex_form $B$r8zN(2=$9$k$?$a$K=q$+$l$?(B. -@item - OpenXM_contrib2/asir2000 $B$N2<$N0J2<$N%U%!%$%k$r8+$h(B. +@item + この関数は 2004-3 に print_tex_form を効率化するために書かれた. +@item + OpenXM_contrib2/asir2000 の下の以下のファイルを見よ. io/ox_asir.c 1.52, builtin/strobj.c 1.12--1.13, 1.16, engine/str.c 1.5, parse/quote.c 1.9. -@item - rtostr $B$,(B text buffer $B7?$N%G!<%?$K4X$7$F$*$=$+$C$?(B. $BB.EY$N2~A1$O(B +@item + rtostr が text buffer 型のデータに関しておそかった. 速度の改善は asir2000/io/pexpr_body.c 1.2, asir2000/parse/lex.c 1.32. @end itemize +@node set_print_function,,, 文字列処理 +@subsection @code{set_print_function} +@findex set_print_function -@comment --- $B"~"~"~"~(B $B4X?t(B dp_gr_main $B$N@bL@(B $B"~"~"~"~(B -@comment --- $BJ#?t$N4X?t$r$^$H$a$F@bL@$9$kNc(B --- -@node dp_gr_main,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t @item dp_gr_main(@var{f} | v=@var{vv}, order=@var{oo}, homo=@var{n}, matrix=@var{m}, block=@var{b}, sugarweight=@var{sw}) -:: dp_gr_main $B$N?7$7$$%$%s%?%U%'!<%9(B. +:: dp_gr_main の新しいインタフェース. @end table @table @var @item return -$B%j%9%H(B ($B%0%l%V%J4pDl(B. $B:F5"I=8=B?9`<0$+J,;6I=8=B?9`<0$N%j%9%H(B) +リスト (グレブナ基底. 再帰表現多項式か分散表現多項式のリスト) @item f -$B%j%9%H(B ($BF~NOB?9`<07O(B. $B:F5"I=8=B?9`<0$+J,;6I=8=B?9`<0$N%j%9%H(B) +リスト (入力多項式系. 再帰表現多項式か分散表現多項式のリスト) @item vv -$B%j%9%H(B ($BJQ?t$N%j%9%H(B) +リスト (変数のリスト) @item oo -$B%j%9%H(B ($B=g=x$r$"$i$o$9%j%9%H(B) +リスト (順序をあらわすリスト) @item n -0 $B$+(B1 (homogenization $B$r$9$k$+(B) +0 か1 (homogenization をするか) @item m -$B=g=x$r(B matrix $B$GI=8=$9$k>l9g(B (cf. dp_ord). +順序を matrix で表現する場合 (cf. dp_ord). @item b ??? @item sw -Sugar strategy $B$rE,MQ$9$k$H$-$N(B weight vector. $BA4$F$NMWAG$OHsIi(B. +Sugar strategy を適用するときの weight vector. 全ての要素は非負. @end table @itemize @bullet @item - @code{dp_gr_main(@var{f})} $B$O(B, @var{f} $B$N%0%l%V%J4pDl$r7W;;$9$k(B. - $B%0%l%V%J4pDl$O=g=x$rJQ$($k$H$=$N7A$,JQ$o$k(B. asir $B$G$O$$$^$^$G=g=x$N;XDjJ}K!$,(B - $B7OE}$@$C$F$$$J$+$C$?(B. - dp_gr_main $B$N?7$7$$%$%s%?%U%'!<%9$G$O=g=x$r$"$kJ8K!$K=>$$;XDj$9$k(B. + @code{dp_gr_main(@var{f})} は, @var{f} のグレブナ基底を計算する. + グレブナ基底は順序を変えるとその形が変わる. asir ではいままで順序の指定方法が + 系統だっていなかった. + dp_gr_main の新しいインタフェースでは順序をある文法に従い指定する. @comment ~taka/this03/misc-2003/A2/dp -@item $B=g=x(B order $B$Oe$N7+$jJV$7$r0UL#$9$k(B. +@item 順序 order は次の文法で定義する. @{, @} は 0 回以上の繰り返しを意味する. @example - order : '[' orderElement { ',' orderElement } ']' + order : '[' orderElement @{ ',' orderElement @} ']' orderElement : weightVec | builtinOrder - weightVec : '[' weightElement { ',' weightElement } ']' + weightVec : '[' weightElement @{ ',' weightElement @} ']' builtiniOrder : '[' orderName ',' setOfVariables ']' weightElement : NUMBER | setOfVariables ',' NUMBER setOfVariables: V | range(V,V) orderName : @@grlex | @@glex | @@lex @end example -$B$3$3$G(B @code{V} $B$O(B $BJQ?tL>(B, @code{NUMBER} $B$O@0?t$r$"$o$i$9(B. -$BNc(B1: @code{v=[x,y,z,u,v], order=[[x,10,y,5,z,1],[@@grlex,range(x,v)]]} -$B$O(B @code{x},@code{y},@code{z} $B$,$=$l$>$l(B weight 10, 5, 1 $B$r$b$D(B -$B=g=x$GHf3S$7$?$"$H(B, @code{[x,y,z,u,v]} $B$K$D$$$F$N(B -graded reverse lexicographic order $B$r(B tie-breaker $B$H$7$FMQ$$$k$3$H$r0UL#$9$k(B. -$B;29M=q(B: B.Sturmfels: Gr\"obner Bases and Convex Polytopes (1995). +ここで @code{V} は 変数名, @code{NUMBER} は整数をあわらす. +例1: @code{v=[x,y,z,u,v], order=[[x,10,y,5,z,1],[@@grlex,range(x,v)]]} +は @code{x},@code{y},@code{z} がそれぞれ weight 10, 5, 1 をもつ +順序で比較したあと, @code{[x,y,z,u,v]} についての +graded reverse lexicographic order を tie-breaker として用いることを意味する. +参考書: B.Sturmfels: Gr\"obner Bases and Convex Polytopes (1995). M.Saito, B.Sturmfels, N.Takayama: Gr\"obner Deformations of Hypergeometric Differential Equations (2000). @item - $B=g=xMWAG(B (orderElement) $B$N;XDjJ}K!$O(B - (1) $BJQ?tL>$^$?$O(B range$B$G;XDj$5$l$?JQ?t$N=89g$H=E$_$NCM$N7+$jJV$7(B - (2) $B=E$_$NCM$rJQ?t%j%9%H$N=gHV$KJB$Y$kJ}K!(B - (3) $BJQ?tL>$^$?$O(B range$B$G;XDj$5$l$?JQ?t$N=89g$H=g=xL>$NAH(B - $B$N;0DL$j$N4pACE*J}K!$,$"$k(B. - $B;w$?;XDjJ}K!$,(B Macaulay, Singular, CoCoA, Kan/sm1 $BEy$N4DO@%7%9%F%`$G(B - $B;HMQ$5$l$F$$$?(B. Risa/Asir $B$N;XDjJ}K!$O$3$l$i$N%7%9%F%`$N;XDjJ}K!$r;29M$K(B - $B$5$i$K2~NI$r2C$($?$b$N$G=@Fp@-$,9b$$(B. -@item - order $B$N(B tie-breaker $B$O(B grlex $B$,%G%U%)!<%k%H(B. -@item - $BJ,;6I=8=B?9`<0$r0z?t$H$7$?$H$-$O7k2L$bJ,;6I=8=B?9`<0$H$7$FLa$k(B. - order $B;XDj$K$b$A$$$k%G%U%)!<%k%H$NJQ?tL>$O$3$N$H$-(B x0, x1, x2, ... $B$H$J$k(B. + 順序要素 (orderElement) の指定方法は + (1) 変数名または rangeで指定された変数の集合と重みの値の繰り返し + (2) 重みの値を変数リストの順番に並べる方法 + (3) 変数名または rangeで指定された変数の集合と順序名の組 + の三通りの基礎的方法がある. + 似た指定方法が Macaulay, Singular, CoCoA, Kan/sm1 等の環論システムで + 使用されていた. Risa/Asir の指定方法はこれらのシステムの指定方法を参考に + さらに改良を加えたもので柔軟性が高い. @item - $B%*%W%7%g%s$NCM$O(B option_list $B%-!<%o!<%I$rMQ$$$F%j%9%H$GM?$($F$b$h$$(B. - $B2<$NNc$r;2>H(B. + order の tie-breaker は grlex がデフォールト. +@item + 分散表現多項式を引数としたときは結果も分散表現多項式として戻る. + order 指定にもちいるデフォールトの変数名はこのとき x0, x1, x2, ... となる. +@item + オプションの値は option_list キーワードを用いてリストで与えてもよい. + 下の例を参照. @end itemize @example @@ -543,7 +1502,7 @@ Gr\"obner Deformations of Hypergeometric Differential [ R R R R R ] [(47774098944)*<<0,0,0,0,13>>+ ... ] -[1153] Opt=[["v",[x,y]], ["order",[[x,5,y,1]]]]; +[1153] Opt=[["v",[x,y]], ["order",[[x,5,y,1]]]]; [[v,[x,y]],[order,[[x,5,y,1]]]] [1154] dp_gr_main([x^2+y^2-1,x*y-1] | option_list=Opt); [ 5 1 ] @@ -551,19 +1510,19 @@ Gr\"obner Deformations of Hypergeometric Differential [-y^4+y^2-1,x+y^3-y] @end example -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item $B$3$N4X?t$O(B 2003-12 $B$+$i(B 2004-2 $B$N;O$a$KBg$-$J=$@5$,9T$o$l$?(B. -@item - @code{setOfVariables}$B$NI=8=$N$?$a$K(B range $B%*%V%8%'%/%H$,F3F~$5$l$?(B. -@item - $B%0%l%V%J4pDl$O=g=x$rJQ$($k$H$=$N7A$,JQ$o$k(B. asir $B$G$O$$$^$^$G=g=x$N;XDjJ}K!$,(B - $B7OE}$@$C$F$$$J$+$C$?(B. - dp_gr_main $B$N?7$7$$%$%s%?%U%'!<%9$G$O=g=x$r$"$kJ8K!$K=>$$;XDj$9$k(B. -@item - OpenXM_contrib2/asir2000 $B$N2<$Nl9g$K;H$&(B --- -@table @t -@item asir-install.sh -@itemx asir-port.sh -:: $B$3$l$O(B asir $B$NFbIt%3%^%s%I$G$O$J$$(B. asir $B$r%M%C%H%o!<%/$+$i%@%&%s%m!<%I$+$Dl9g$K;H$&(B --- -@table @t -@item get_struct_name(@var{s}) -@itemx get_element_names(@var{s}) -@itemx get_element_at(@var{s},@var{key}) -@itemx put_element_at(@var{s},@var{key},@var{obj}) -:: $B9=B$BN(B @var{s} $B$KBP$9$kA`:n(B -@end table - -@table @var -@item return -$BJ8;zNs(B (get_struct_name), -$BJ8;zNs$N%j%9%H(B (get_element_names), -$B%*%V%8%'%/%H(B (get_element_at), -$B%*%V%8%'%/%H(B (put_element_at) -@item s -$B9=B$BN(B -@item key -$BJ8;zNs(B -@item obj -$B%*%V%8%'%/%H(B -@end table - -@itemize @bullet -@item - @code{get_struct_name(s)} $B$O(B, $B9=B$BN(B @var{s} $B$NL>A0$rLa$9(B. -@item - @code{get_element_names(s)} $B$O(B, $B9=B$BN$N%a%s%P!<$NL>A0$N%j%9%H$rLa$9(B. -@item - @code{get_element_at(s,key)} $B$O9=B$BN(B s $B$N%a%s%P!<(B key $B$NCM$rLa$9(B. -@item - @code{put_element_at(s,key,obj)} $B$O9=B$BN(B s $B$N%a%s%P!<(B key $B$NCM$r(B obj $B$K@_Dj$9$k(B. -@end itemize - -@example -[219] struct point { x, y, color}; -[220] P = newstruct(point); -{0,0,0} -[221] P->x = 10$ P->y=5$ P->color="red"$ -[222] get_element_names(P); -[x,y,color] -[223] put_element_at(P,"color","blue"); -blue -[224] P->color; -bule -@end example - -@table @t -@item $B;2>H(B -@ref{newstruct}, @ref{struct} -@end table - -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. -@noindent -ChangeLog -@itemize @bullet -@item $B9=B$BN$NDj5A$rCN$i$:$K9=B$BN$r07$&%f!<%64X?t$r=q$/$H$-$KJXMx(B. - asir-contrib $B$N(B noro_print.rr $B$r8+$h(B. -@item OpenXM_contrib2/asir2000/builtin/compobj.c 1.8. -@end itemize - -@comment --- $B"~"~"~"~(B $B4X?t(B dp_gr_main $B$N@bL@(B $B"~"~"~"~(B -@node dp_weyl_gr_main,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t @item dp_weyl_gr_main(@var{f} | v=@var{vv}, order=@var{oo}, homo=@var{n}, matrix=@var{m}, block=@var{b}, sugarweight=@var{sw}) -:: dp_weyl_gr_main $B$N?7$7$$%$%s%?%U%'!<%9(B. dp_gr_main $B$HF1$87A<0$G$"$k(B. +:: dp_weyl_gr_main の新しいインタフェース. dp_gr_main と同じ形式である. @end table @table @var @item return -$B%j%9%H(B ($B%0%l%V%J4pDl(B. $B:F5"I=8=B?9`<0$+J,;6I=8=B?9`<0$N%j%9%H(B) +リスト (グレブナ基底. 再帰表現多項式か分散表現多項式のリスト) @item f -$B%j%9%H(B ($BF~NOB?9`<07O(B. $B:F5"I=8=B?9`<0$+J,;6I=8=B?9`<0$N%j%9%H(B) +リスト (入力多項式系. 再帰表現多項式か分散表現多項式のリスト) @item vv -$B%j%9%H(B ($BJQ?t$N%j%9%H(B) +リスト (変数のリスト) @item oo -$B%j%9%H(B ($B=g=x$r$"$i$o$9%j%9%H(B) +リスト (順序をあらわすリスト) @item n -0 $B$+(B1 (homogenization $B$r$9$k$+(B). [$B%F%9%H$^$@(B] +0 か1 (homogenization をするか). [テストまだ] @item m -$B=g=x$r(B matrix $B$GI=8=$9$k>l9g(B (cf. dp_ord). [$B%F%9%H$^$@(B] +順序を matrix で表現する場合 (cf. dp_ord). [テストまだ] @item b ??? @item sw -Sugar strategy $B$rE,MQ$9$k$H$-$N(B weight vector. $BA4$F$NMWAG$OHsIi(B. [$B%F%9%H$^$@(B] +Sugar strategy を適用するときの weight vector. 全ての要素は非負. [テストまだ] @end table @itemize @bullet @item - @code{dp_weyl_gr_main(@var{f})} $B$O(B, @var{f} $B$N%0%l%V%J4pDl$r7W;;$9$k(B. - $B%0%l%V%J4pDl$O=g=x$rJQ$($k$H$=$N7A$,JQ$o$k(B. asir $B$G$O$$$^$^$G=g=x$N;XDjJ}K!$,(B - $B7OE}$@$C$F$$$J$+$C$?(B. - dp_weyl_gr_main $B$N?7$7$$%$%s%?%U%'!<%9$G$O=g=x$r$"$kJ8K!$K=>$$;XDj$9$k(B. - $B;XDjJ}K!$K$D$$$F$O(B dp_gr_main $B$N%^%K%e%"%k$r;2>H(B. -@item - $BJ,;6I=8=B?9`<0$N3F%b%N%_%"%k$ND9$5$,6v?t$N$H$-$O%o%$%kBe?t(B + @code{dp_weyl_gr_main(@var{f})} は, @var{f} のグレブナ基底を計算する. + グレブナ基底は順序を変えるとその形が変わる. asir ではいままで順序の指定方法が + 系統だっていなかった. + dp_weyl_gr_main の新しいインタフェースでは順序をある文法に従い指定する. + 指定方法については dp_gr_main のマニュアルを参照. +@item + 分散表現多項式の各モノミアルの長さが偶数のときはワイル代数 K[x_1, ..., x_n, d_1, ..., d_n] -$B$G7W;;$,$*$3$J$o$l$k(B. $B%o%$%kBe?t$G$O(B x_i $B$H(B d_i $B$OHs2D49$J3]$1;;5,B'(B - d_i x_i = x_i d_i +1 $B$r$_$?$7(B, x_i $B$H(B x_j $B$d(B d_i $B$H(B d_j $B$O2D49$G$"$k(B. - $B$^$?(B i $B$H(B j $B$,0[$J$k>l9g$O(B x_i $B$H(B d_j $B$b2D49$G$"$k(B. -@item - $BJ,;6I=8=B?9`<0$N3F%b%N%_%"%k$ND9$5$,4q?t$N$H$-$OF1$NJQ?t$b%o%$%kBe?t$HF1MM$J2D49@-$N5,B'$r$_$?$9(B. - $B>\$7$/$O(B dp_gr_main $B$G;2>H$7$?(B Saito, Sturmfels, Takayama $B$N652J=q$r$_$h(B. +で計算がおこなわれる. 同次化ワイル代数では x_i と d_i は非可換な掛け算規則 + d_i x_i = x_i d_i + h^2 +をみたし, h は任意の元と可換, その他の変数もワイル代数と同様な可換性の規則をみたす. + 詳しくは dp_gr_main で参照した Saito, Sturmfels, Takayama の教科書をみよ. @end itemize @example @@ -773,54 +1616,54 @@ dp_weyl_gr_main(FF | v=V, order=[[0,0,0,0,1,1,1,1]]); @end example @table @t -@item $B;2>H(B +@item 参照 @ref{dp_gr_main} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item dp_gr_main $B$N%$%s%?%U%'!<%9$,(B dp_weyl_gr_main $B$X$bF3F~$5$l$?(B. -@item - OpenXM_contrib2/asir2000 $B$N2<$N$&(B. - $B$3$N%j%9%H$N@hF,$,(B weight vector $B$GL5$$>l9g$O%(%i!<$H$J$k(B. - $B$?$H$($P(B order=[[@@lex,...]] $B$O%(%i!<$H$J$k(B. -@item - $B7k2L$OM?$($i$l$?=g=x$K4X$7$F%=!<%H$5$l$F$k$o$1$G$O$J$$(B. + 順序を表すリストは dp_gr_main で定義した文法に従う. + このリストの先頭が weight vector で無い場合はエラーとなる. + たとえば order=[[@@lex,...]] はエラーとなる. +@item + 結果は与えられた順序に関してソートされてるわけではない. @end itemize @example @@ -837,53 +1680,53 @@ builtin/dp.c 1.49--1.50 @end example @table @t -@item $B;2>H(B +@item 参照 @ref{dp_gr_main}, @ref{dp_weyl_gr_main}, @ref{dp_order}, @ref{dp_hm} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item - OpenXM_contrib2/asir2000 $B$N2<$N$&(B. - $B$3$N%j%9%H$N@hF,$,(B weight vector $B$GL5$$>l9g$O%(%i!<$H$J$k(B. - $B$?$H$($P(B order=[[@@lex,...]] $B$O%(%i!<$H$J$k(B. + 順序を表すリストは dp_gr_main で定義した文法に従う. + このリストの先頭が weight vector で無い場合はエラーとなる. + たとえば order=[[@@lex,...]] はエラーとなる. @item - dp_order $B$OM?$($i$l$?(B weight w $B$KBP$9$kl9g3FMWAG$NH(B +@item 参照 @ref{dp_gr_main}, @ref{dp_weyl_gr_main}, @ref{dp_initial_term}, @ref{dp_hm} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item - OpenXM_contrib2/asir2000 $B$N2<$NH(B -@ref{map} +@item 参照 +Risa/Asir ユーザーズマニュアルの「グレブナ基底の計算」 @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. -@noindent -ChangeLog + +@node nd_gr nd_gr_trace nd_weyl_gr nd_weyl_gr_trace (module),,, グレブナー基底 +@subsection @code{nd_gr}, @code{nd_gr_trace} (加群) +@findex nd_gr (module) +@findex nd_gr_trace (module) +@findex nd_weyl_gr (module) +@findex nd_weyl_gr_trace (module) + +@comment --- nd_gr, nd_gr_trace における加群のグレブナー基底計算 --- +@table @t +@item nd_gr(@var{gen},@var{vars},@var{char},@var{ord}) +@itemx nd_gr_trace(@var{gen},@var{vars},@var{homo},@var{char},@var{ord}) +@item nd_weyl_gr(@var{gen},@var{vars},@var{char},@var{ord}) +@itemx nd_weyl_gr_trace(@var{gen},@var{vars},@var{homo},@var{char},@var{ord}) +:: 部分加群のグレブナー基底の計算 +@end table + +@table @var +@item gen +リストのリスト +@item ord +@var{[IsPOT,Ord]} なるリスト +@item return +リストのリスト +@end table + @itemize @bullet -@item $B$3$N4X?t$O(B 2004-6-22 $B$K%3%_%C%H$5$l$?(B. - $BJQ99$r$&$1$?%=!<%9%3!<%I$O(B builtin/pf.c, subst.c $B$G$"$k(B. +@item 多項式環あるいはワイル代数上の自由加群の部分加群のグレブナー基底 +を計算する. 結果はリストのリストである. 各要素リストは, 自由加群の +元であるベクトルとみなす. +@item @var{ord} として @var{[IsPOT,Ord]} という2要素リストが指定された +場合, 加群のグレブナー基底計算を実行する. この場合, @var{gen} は, 多項式 +のリストのリストとして与える必要がある. +@item @var{IsPOT} が 1 の場合, POT (position over term), 0 の +場合 TOP (term over position) で比較する. 基礎環での項比較は @var{Ord} +で行う. +@item 説明されていない引数は, イデアルの場合の解説を参照のこと. @end itemize -@comment list -@node list,,, $B>,1],...] +[4] D[6]; +[[-1,[[1,0,(1)*<<0,0,2,4>>,1],[1,6,(-1)*<<1,0,0,0>>,1],...] @end example @table @t -@item $B;2>H(B -@ref{cons} +@item 参照 +@ref{nd_gr}, @ref{nd_gr_trace} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. + +@node システム,,, 実験的仕様の関数 +@section システム + +@comment --- ◯◯◯◯ 関数 syz_pqr, xyz_stu の説明 ◯◯◯◯ +@comment --- 複数の関数をまとめて説明する例 --- +@node asir-port.sh asir-install.sh,,, システム +@subsection @code{asir-port.sh}, @code{asir-install.sh} +@findex asir-port.sh +@findex asir-install.sh + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item asir-install.sh +@itemx asir-port.sh +:: これは asir の内部コマンドではない. asir をネットワークからダウンロードかつ実行するシェルスクリプト +@end table + + +@itemize @bullet +@item +asir-port.sh は knoppix 専用である. +このコマンドは asir のバイナリおよび FLL で配布できない部分を + ftp.math.kobe-u.ac.jp よりダウンロードして +/home/knoppix/.asir-tmp へセーブして, 実行する. +.asirrc および .TeXmacs/plugins/ox/progs/init-ox.scm もダウンロードする. +@item +asir-install.sh は Debian GNU Linux / openxm-binary*.deb 専用である. +asir-install.sh は asir をダウンロードして /usr/local/OpenXM/bin および +/usr/local/OpenXM/lib/asir へインストールする. +@end itemize + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item $B$3$N4X?t$O(B 2004-6-22 $B$K%3%_%C%H$5$l$?(B. - $BJQ99$r$&$1$?%=!<%9%3!<%I$O(B builtin/list.c $B$G$"$k(B. +@item + これらのシェルスクリプトは knoppix/math のために 2004/2, 3 月に書かれた. +@item + knoppix/math は福岡大学の濱田さんが中心となり開発されている. +@item + OpenXM/misc/packages/Linux/Debian の下の全てのファイル (2004-2-22 から + 2004-3 の末まで). ( ~taka/this03/misc-2003/A3/knoppix-03-05 (プライベートファイル) も見よ.) + OpenXM/src/asir-port の下の次の各ファイル. + Makefile 1.1--1.8, asir-install.sh 1.1--1.2, asir-port.sh 1.1--1.6. @end itemize -@node set_print_function,,, $Bo$N2hLLI=<(4X?t$NBe$o$j$K$h$V(B. -@code $B0z?t$,$J$$>l9g$O2hLLI=<(4X?t$r%G%U%)!<%k%H$XLa$9(B. -@code Asir-contrib $B$O$3$N4X?t$rMQ$$$F=PNO4X?t$r(B Asir-contrib $BMQ$KJQ99$7$F$$$k(B. +@item asirgui (Windows 版) を起動すると 環境変数 TEMP で指定されたフォルダにこのファイルが作成される. +@item 中身は10進整数で, asirgui の main window のハンドルである. このハンドルあてに PostMessage をすれば, asuirgui にキーボードから入力したのと同様な効果が得られる. +@item text editor で作成, 保存したファイルを text editor 側から asirgui に読み込ませたりするために利用可能. +@item http://www.math.kobe-u.ac.jp/Asir/Add-ons にて winfep.exe を配布している. winfep ではあらかじめファイルに入力スクリプトを書いておいて, asirgui で一行づつ実行させることができる. winfep はプレゼンテーション用のソフトウエアである. これは asirgui.hnd を利用している. @end itemize @example -[219] def my_output(F) { - print("Out: ",0); print(rtostr(F)); - } -[220] set_print_function("my_output"); -Out: 0 -[221] 1+2; -Out: 3 +// cl test.c user32.lib + +#include +#include +#include +#include + +int main() +@{ + + HWND hnd; + FILE *fp = fopen("c:/Program Files/asir/bin/asirgui.hnd","r"); + fscanf(fp,"%d",&hnd); + fclose(fp); + while (1) @{ + int c; + c = getchar(); + if ( c == '#' ) break; + PostMessage(hnd,WM_CHAR,c,1); + @} + return 0; +@} @end example @table @t -@item $B;2>H(B -@ref{rtostr} +@item 参照 +@ref{xyz_abc} @end table +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item $B$3$N4X?t$O(B 2001-9-4 $B$K(B asir-contrib $B$N$?$a$KF3F~$5$l$?(B. - $BJQ99$r$&$1$?%=!<%9%3!<%I$O(B builtin/print.c 1.11 $B$G$"$k(B. +@item この機能は 2006-12-5, 2007-02-13 に加えられた. +@item @code{OpenXM_contrib2/windows/asir32gui/asir32gui.clw} 1.11 +@item @code{OpenXM_contrib2/windows/asir32gui/asir32guiview.cpp} 1.15, 1.1.6 +@item winfep は 2010-01-20 頃に第一版が commit された. +@item @code{OpenXM_contrib2/windows/winfep} 1.1 @end itemize -@node small_jacobi,,, $BH(B). +@code{pwd} はカレントディレクトリを文字列で返す. @item - $B$3$N4X?t$O(B machine int $B$NHO0O$G(B jacobi $B5-9f$r7W;;$9$k(B. +@code{chdir} はカレントディレクトリを @var{directory} に変更する. 成功すれば 0 を失敗すれば -1 を返す. @end itemize @example -[1286] small_jacobi(2,3); +[0] S=pwd(); +/home/ohara +[1] chdir(".../taka"); -1 -[1287] small_jacobi(2,7); -1 +[2] chdir("/usr/bin"); +0 @end example -@table @t -@item $B;2>H(B -http://members.jcom.home.ne.jp/yokolabo/asirlib/ -$B$b8+$F$M(B. -@end table - -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item $B$3$N4X?t$NM3Mh$OITL@(B. +@item +これらの関数は 2008-8-27 にコミットされた. +変更をうけたソースコードは builtin/miscf.c (1.27) である. @end itemize -@node flatten_quote,,, $BH(B ). -@code{quote_flatten()} $B$O(B, @var{q} $B$NCf$K$"$i$l$k1i;;;R(B @var{op} -$B$N;R6!%N!<%I$rJ?Ey$K$9$k(B. -$B$D$^$j1i;;;R(B @var{op} $B$K4X$9$k3g8L$E$1$,$"$C$?>l9g$=$l$r$9$Y$F$H$j$5$k(B. -$B$?$H$($P(B (1+2)+(3+4) $B$H$$$&I=8=$r(B 1+2+3+4 $B$KJQ49$9$k(B. -@item - $B8=:_$NA0$O(B quote_flatten $B$G$J$/(B flatten_quote $B$G$"$k(B. +返り値は1970年1月1日0時0分0秒からの経過秒数である. @end itemize @example -[1288] flatten_quote(quote((1+2)+(3+4*(x+3))),"+"); -quote(1+2+3+4*(x+3)) -[1289] flatten_quote(quote( (x*y)*(p*3)-(x*y)*z),"*"); -quote(x*y*p*3-x*y*z) -[1290] quotetolist(quote(1+2+3)); -[b_op,+,[b_op,+,[internal,1],[internal,2]],[internal,3]] +[0] ctrl("real_digit", 16); +16 +[1] dcurrenttime(); +1226390851.34476 +[2] currenttime(); +1226390854 @end example @table @t -@item $B;2>H(B -@ref{quotetolist}, @ref{print_tex_form}(contrib) +@item 参照 +@ref{currenttime} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item - $B$3$N4X?t$O(B 2004-7-7 $B$+$i(B 2004-7-8 $B$K$+$1$F(B - quote $B$K4X$9$kA`:n$r8&5f$9$k$?$a$KA0$,(B, -@code{B} $B$KB-$NK\?t$,F~$C$F$$$k(B. -@code{assoc(A,B)} $B$GF0J*$HB-$NK\?t$r%Z%"$K$7$?%j%9%H$r@8@.$9$k(B. +@example +[219] getpid(); +3214 +@end example + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は ox_work_dir() 関数が一意な作業ファイル名を得るために使われている. +src/asir-contrib/packages/src/misc/rr 1.3, +asir2000/builtin/file.c 1.28, rat.c 1.5, +asir2000/parse/puref.c 1.9 を参照 (2013/02/15, 18). +@end itemize + + +@node loadpath,,, システム +@subsection @code{loadpath} +@findex loadpath + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item ctrl(``loadpath''[,list]) +@end table + +@table @var +@item list +文字列(パス)のリスト +@item return +文字列(パス)のリスト, または数(listが与えられたとき) +@end table + +@itemize @bullet +@item asir の組み込み関数 ctrl のスイッチのひとつである. +@item asir のロードパスの出力または設定を行う. +@end itemize + @example -[1192] A=["dog","cat","snake"]; -[dog,cat,snake] -[1193] B=[4,4,0]; -[4,4,0] -[1194] assoc(A,B); -[[dog,4],[cat,4],[snake,0]] +[0] L=ctrl("loadpath"); +[/home/you/OpenXM/lib/asir-contrib,/home/you/OpenXM/lib/asir,.] +[1] ctrl("loadpath", cons(getenv("HOME")+"/lib",L)); +0 @end example + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は 2014-5-12 にコミットされた. +変更をうけたソースコードは builtin/ctrl.c (1.41) である. +@end itemize + + +@node sysinfo,,, システム +@subsection @code{sysinfo} +@findex sysinfo + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t -@item $B;2>H(B -@ref{cons}, @ref{append} +@item sysinfo() @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B +@table @var +@item return +文字列のリスト +@end table + +@itemize @bullet +@item asir の動作しているオペレーティングシステムの情報を返す. +@item リストの各成分は, OSタイプ, カーネル名, OS名, CPUタイプ, OSバージョン, 完全な情報, ロケールである. +@item OSタイプは unix, macosx, windows のいずれかである. +@item unix および macosx においては, システムコールおよび uname コマンドにより情報を取得している. +windows では, GetVersionEx() などの Win32 API が用いられている. +@end itemize + +@example +[0] sysinfo(); +[windows,WindowsNT,Windows7,x86_64,6.1.7601,WindowsNT 6.1.7601 Windows7 Service Pack 1 x86_64,ja] +@end example + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item - $B$3$N4X?t$O(B 2004-6-28 $B$K=q$+$l$?(B. - $BJQ99$r$&$1$?%=!<%9%3!<%I$O(B - builtin/list.c 1.9 - parse/eval.c 1.35, - parse/parse.h 1.31, - parse/quote.c 1.14--1.16. +@item この関数は 2014-5-14 にコミットされた. +変更をうけたソースコードは builtin/ctrl.c (1.42) である. @end itemize -@node sprintf,,, $Bx = 10$ P->y=5$ P->color="red"$ +[222] get_element_names(P); +[x,y,color] +[223] put_element_at(P,"color","blue"); +blue +[224] P->color; +bule @end example @table @t -@item $B;2>H(B -@ref{rtostr},@ref{open_file},@ref{close_file} +@item 参照 +@ref{newstruct}, @ref{struct} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item - $B4X?t(B sprintf$B$O(B 2004-7-13 $B$K%3%_%C%H$5$l$?(B. - $BJQ99$r$&$1$?%=!<%9%3!<%I$O(B builtin/strobj (1.50) $B$G$"$k(B. -@item - $B4X?t(B printf$B$O(B 2007-11-8 $B$K%3%_%C%H$5$l$?(B. - $BJQ99$r$&$1$?%=!<%9%3!<%I$O(B builtin/print.c (1.23) $B$G$"$k(B. -@item - $B4X?t(B fprintf$B$O(B 2008-11-18 $B$K%3%_%C%H$5$l$?(B. - $BJQ99$r$&$1$?%=!<%9%3!<%I$O(B builtin/file.c (1.25) $B$G$"$k(B. -@item - @code{%a} $B$O(B Maple $B$N(B sprintf $B$N??;w$+(B. +@item 構造体の定義を知らずに構造体を扱うユーザ関数を書くときに便利. + asir-contrib の noro_print.rr を見よ. +@item OpenXM_contrib2/asir2000/builtin/compobj.c 1.8. @end itemize -@node quote_to_funargs,,, $Be$N4X?t$rMQ$$$F=q$+$l$?M>J,$J3g8L$rpJs$rA0$G$"$j(B, -$B4X?t(B @code{get_function_name} $B$rMQ$$$F?M4V$,FI$a$k7A<0(B -$B$GA0(B@code{get_function_name} $B$O$=$N$&$AJQ99$5$l$k$@$m$&(B. +@code{mapat(fname,0,A0,A1,...)} は +@code{map(fname,A0,A1,...)} に等価である. @item - $B2<$NNc$G(B - quote_to_funargs(FA[2]); -[34,[b_op,+,[internal,x],[internal,1]]] -$B$H$J$k(B. -34 $B$O(B @code{I_PAREN} $B$r0UL#$9$k(B. -$B?t$H0UL#$NBP1~I=$O(B @code{OpenXM/src/asir-contrib/packages/src/noro_simplify.rr} -$B$^$?$O(B @code{OpenXM_contrib2/asir2000/parse/parse.h} $B$r8+$h(B. -$B0J2<$N(B fid $B$,(B 0, 1, 2, ... $B$KBP1~$E$1$i$l$F$$$k(B. - I_BOP, I_COP, I_AND, I_OR, I_NOT, I_CE, - I_PRESELF, I_POSTSELF, - I_FUNC, I_FUNC_OPT, I_IFUNC, I_MAP, I_RECMAP, I_PFDERIV, - I_ANS, I_PVAR, I_ASSPVAR, - I_FORMULA, I_LIST, I_STR, I_NEWCOMP, I_CAR, I_CDR, I_CAST, - I_INDEX, I_EV, I_TIMER, I_GF2NGEN, I_GFPNGEN, I_GFSNGEN, - I_LOP, I_OPT, I_GETOPT, I_POINT, I_PAREN, I_MINUS, - I_NARYOP +次の副作用がある. まだ書いてない. @end itemize -$B, - [u_op,(),[b_op,+,[internal,x],[internal,1]]], - [u_op,(),[b_op,+,[internal,x],[internal,2]]]] +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は 2004-6-22 にコミットされた. + 変更をうけたソースコードは builtin/pf.c, subst.c である. +@end itemize -[3] FA2=quote_to_funargs(FA[2])[1]; -[b_op,+,[internal,x],[internal,1]] +@comment list +@node list,,, 言語 +@subsection @code{list} +@findex list -[4] FA3=quote_to_funargs(FA[3])[1]; -[b_op,+,[internal,x],[internal,2]] +@table @t +@item list([@var{arg0}, @var{arg1}, ...]) +:: list を生成する. +@end table -[5] funargs_to_quote([FA[0],FA[1],FA2,FA3]); -[b_op,+,[b_op,+,[internal,x],[internal,1]], - [b_op,+,[internal,x],[internal,2]]] -@end example +@table @var +@item return +リスト +@item arg0, arg1, arg2, ... +オブジェクト +@end table -$B,<...quoted...>,<...quoted...>] -[1185] T=quote_to_funargs(quote(1+2)); -[0,<...quoted...>,<...quoted...>,<...quoted...>] -[1186] funargs_to_quote([0,R[1],R[2],T[2]]); -quote(a+1) +[1192] A=["dog","cat","snake"]; +[dog,cat,snake] +[1193] B=[4,4,0]; +[4,4,0] +[1194] assoc(A,B); +[[dog,4],[cat,4],[snake,0]] @end example @table @t -@item $B;2>H(B -@ref{quotetolist} +@item 参照 +@ref{cons}, @ref{append} @end table - +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item - $B$3$l$i$N4X?t$O(B 2004-7-8 $B$+$i3+H/$N$O$8$^$C$F$$$k(B quote $B$N(B simplification $B4XO"(B - $B$NH(B). -@item parse/quote.c $B$N(B {\tt strcut fid_spec fid_spec_tab[] } -$B$NItJ,$K=q$$$F$"$k7A<0$K(B @code{funargs_to_quote} $B$OJQ49$9$k(B. +@item + この関数は 2004-6-28 に書かれた. + 変更をうけたソースコードは + builtin/list.c 1.9 + parse/eval.c 1.35, + parse/parse.h 1.31, + parse/quote.c 1.14--1.16. @end itemize -@node set_secure_flag,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t @item set_secure_flag(@var{fname},@var{m}) @itemx set_secure_mode(@var{m}) -:: $B4X?t$Nl9g$O(B @code{set_secure_flag} $B$G;XDj$5$l$?(B -$B4X?t$7$+H(B +@item 参照 @ref{timer} @end table @noindent ChangeLog @itemize @bullet -@item @code{set_secure_flag}, @code{set_secure_mode} $B$O(B asir $B$r(B -web $B%5!<%PEy$G8x3+$9$k$?$a$K2C$($i$l$?4X?t(B. -sm1 $B$NF1MM$J4X?t(B RestrictedMode $B$G:NMQ$5$l$?J}K!$rMQ$$$F$$$k(B. -$B$D$^$j(B, @code{set_secure_flag} $B$G8x3+$9$k4X?t$r;XDj$9$k(B. -@code{secure_mode} $B$,(B 1 $B$N>l9g$O(B @code{set_secure_flag} $B$G;XDj$5$l$?(B -$B4X?t$7$+H$N$3$H(B. +@item static 変数の取扱. +下の例を参照のこと. @end itemize @@ -1548,14 +2622,14 @@ if (1) @{ @} else @{ @}; end$ -$B$r(B t.rr $B$H$9$k$H$-(B, +を t.rr とするとき, [6] load("./t.rr"); 1 internal error (SEGV) -$B$H$J$k(B. +となる. -t.rr $B$r(B +t.rr を if (1) @{ module abc; static A; @@ -1572,1166 +2646,1813 @@ if (1) @{ @} else @{ @}; end$ -$B$H$9$k$H@5$7$/=i4|2=$5$l$k(B. +とすると正しく初期化される. @end example -@comment --- ChangeLog +@comment --- ChangeLog @noindent ChangeLog @itemize @bullet -@item oxasir-win.rr $B$Ne(B. 2005.07.25. -@item oxasir-win.rr $B$Nl9g$K;H$&(B --- +@node function,,, 言語 +@subsection @code{function} +@findex function + @table @t -@item eval_quote(@var{Q}); -:: quote $B7?%G!<%?(B @var{Q} $B$r(B asir $B$N%*%V%8%'%/%H$KJQ49$9$k(B. +@item function 宣言することにより函数形式の不定元を生成できる. @end table -@table @var -@item return -$B%*%V%8%'%/%H(B -@item Q -quote$B7?(B +@comment --- 説明 --- +@table @t +@item function 宣言することにより函数形式の不定元を生成できる. +@item 微分函数 diff はこの函数形式の不定元の微分をやはり函数形式の不定元として生成する. +たとえば f@{1,2@}(x,y) は f を x について一階偏微分, y について 2階偏微分したもの. +@item diff は合成関数としての処理も行う. @end table -@itemize @bullet -@item quote $B7?%G!<%?(B @var{Q} $B$r(B asir $B$N%*%V%8%'%/%H$KJQ49$9$k(B. -@item $B5U4X?t$O(B @code{objtoquote} -@end itemize @example -ctrl("print_quote",2); -A=quote((x-1)^2+(x-1)+3); - $B=PNO(B: ((((x)-(1))^(2))+((x)-(1)))+(3) -eval_quote(A); - $B=PNO(B: x^2-x+3 -print_input_form(A); /* asir-contrib */ - $B=PNO(B: quote((x-1)^2+(x-1)+3) +[1915] function f(x,y); +[1916] F=f(f(x,y),y)$ +[1917] diff(F,y); +f@{1,0@}(f(x,y),y)*f@{0,1@}(x,y)+f@{0,1@}(f(x,y),y) +[1918] vtype(f(p,q)); +2 +[1919] deg(diff(F,y),f@{0,1@}(x,y)); +1 @end example -@table @t -@item $B;2>H(B -@ref{objtoquote}, @ref{quotetolist}, @ref{eval_string}, -@ref{quote_to_funargs}, @ref{funargs_to_quote} -@end table +@xref{vtype} +@xref{diff} -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. +@comment --- ChangeLog @noindent ChangeLog @itemize @bullet -@item -----$B$^$@=q$$$F$J$$(B. +@item いつの commit で導入されたか不明. @end itemize +@comment **************************************************************** -@node nqt_match,,, $Bl9g$K;H$&(B --- + +@node small_jacobi,,, 数論・代数 +@subsection @code{small_jacobi} +@findex small_jacobi + +@comment --- 関数の簡単な説明 --- @table @t -@item nqt_match(@var{Expr},@var{Pattern}[,@var{Mode}]) -:: @var{Expr} $B$,(B @var{Pattern} $B$K%^%C%A(B($BE,9g(B)$B$9$k$H(B 1 $B$rLa$9(B. $B$7$J$$$H(B 0 $B$rLa$9(B. +@item small_jacobi(@var{a},@var{m}) +:: Jacobi 記号の計算 @end table @table @var @item return -$B@0?t(B -@item Expr -quote$B7?(B -@item Pattern -quote$B7?(B -@item Mode -$B@0?t(B +整数 +@item arg1, arg2 +整数 @end table @itemize @bullet -@item @var{Expr} $B$,(B @var{Pattern} $B$K%^%C%A(B($BE,9g(B)$B$9$k$H(B 1 $B$rLa$9(B. $B$7$J$$$H(B 0 $B$rLa$9(B. -@item $BE,9g$7$?>l9g(B, $BI{:nMQ$H$7$F(B, @var{Pattern} $B$K4^$^$l$k%W%m%0%i%`JQ?t(B($BBgJ8;z$G$O$8$^$kJQ?t(B)$B$KE,9g$7$?CM$,BeF~$5$l$k(B. -@item nqt $B$O(B normalized quote $B$NN,$G$"$j(B fnode$BI8=`7A$KJQ49$7$F$+$iE,9g8!::$r$9$k(B. fnode$BI8=`7A$K$D$$$F$O(B @ref{qt_normalize} $B$r8+$h(B. -@item @var{Mode} $B$K$h$jE83+J}K!$r;XDj$7(B, $B$=$NE83+J}K!$K$h$jF@$i$l$?(B @var{Expr} $B$N(B -fnode$BI8=`7A$H(B @var{Pattern} $B$rHf3S$9$k(B. +@item + @var{m} が素数のときは Legendre 記号とよばれ, + x^2 = @var{a} mod @var{m} に解があるとき 1, 解がないとき -1 をもどす. +@item +Jacobi 記号は Legendre 記号の積で定義される (初等整数論の本参照). +@item + この関数は machine int の範囲で jacobi 記号を計算する. @end itemize @example -ctrl("print_quote",2); -A=quote((x-y)*(x+y)); -nqt_match(A,quote(P*Q)); -[P,Q] - $B=PNO(B: [x-y, x+y] -nqt_match(A,quote(P*Q),1); - $B%^%C%A$7$J$$(B. -nqt_match(A,quote(P*Q),2); - $B%^%C%A$7$J$$(B. -qt_normalize(A,1); - $B=PNO(B: ((x)^(2))+((x)*(y))+((-1)*((y)^(2)))+((-1)*(y)*(x)) -qt_normalize(A,2); - $B=PNO(B: ((x)*(x))+((x)*(y))+((-1)*(y)*(x))+((-1)*(y)*(y)) +[1286] small_jacobi(2,3); +-1 +[1287] small_jacobi(2,7); +1 @end example @table @t -@item $B;2>H(B -@ref{nqt_match_rewrite}, -@ref{qt_rewrite} +@item 参照 +http://members.jcom.home.ne.jp/yokolabo/asirlib/ +も見てね. @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため @noindent ChangeLog @itemize @bullet -@item ----- $B$^$@=q$$$F$J$$(B. +@item この関数の由来は不明. @end itemize -@node nqt_match_rewrite,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t -@item nqt_match_rewrite(@var{Expr},@var{Rule},@var{Mode}) -:: @var{Expr} $B$r(B @var{Rule} $B$K=>$$=q$-49$($k(B. +@item linalg.unit_mat(@var{arg1}) +@item linalg.random_rmat(@var{arg1}, @var{arg2}, @var{arg3}) +@item linalg.minipoly_mat(@var{arg1}) +@item linalg.compute_kernel(@var{arg1}) +@item linalg.compute_image(@var{arg1}) +@item linalg.jordan_canonical_form(@var{arg1}) @end table -@table @var -@item return -quote$B7?(B -@item Expr -quote$B7?(B -@item Rule -[@var{Pattern},@var{Action}] $B$+$^$?$O(B -[@var{Pattern},@var{Condition},@var{Action}]. -$B$3$l$i$NMWAG$O$9$Y$F(B quote$B7?(B. -@item Mode -$B@0?t(B -@end table @itemize @bullet -@item @var{Expr} $B$r(B @var{Rule} $B$K=>$$=q$-49$($k(B. @var{Pattern} $B$KE,9g$7$J$$>l9g$O(B -@var{Exprt} $B<+BN$rLa$9(B. -@item nqt $B$O(B normalized quote $B$NN,$G$"$j(B fnode$BI8=`7A$KJQ49$7$F$+$iE,9g8!::$r$9$k(B. fnode$BI8=`7A$K$D$$$F$O(B @ref{qt_normalize} $B$r8+$h(B. +@item 簡単な解説および実例は http://www.math.kobe-u.ac.jp/HOME/taka/2007/knx/noro_matrix-ja.txt を参照. @end itemize -@comment %%Doc: cfep/tests/2006-03-12-qt.rr @example -ctrl("print_quote",2); -nqt_match_rewrite(`x*y*z,[`X*Y,`X+Y],1); - $B=PNO(B: (x)+((y)*(z)) -A=`x*x; -nqt_match_rewrite(A,[`X*Y,`X+Y],1); - $B=PNO(B: x^2 ($B%^%C%A$7$F$$$J$$(B) -nqt_match_rewrite(A,[`X*Y,`X+Y],2); - $B=PNO(B: 2*x - -$BE,9g$K$D$$$F$N%b!<%I$N0c$$$rM}2r$9$k$?$a$KH(B. -quotetolist(qt_normalize(`x*x,0)); - $B=PNO(B: [b_op,^,[internal,x],[internal,2]] -quotetolist(qt_normalize(`x*x,1)); - $B=PNO(B: [b_op,^,[internal,x],[internal,2]] -quotetolist(qt_normalize(`x*x,2)); - $B=PNO(B: [n_op,*,[internal,x],[internal,x]] +load("noro_matrix.rr"); +A=newmat(4,4,[[2,0,0,0],[3,5,1,0],[-9,-9,-1,0],[-5,0,0,1]]); +B=linalg.jordan_canonical_form(A); @end example @table @t -@item $B;2>H(B -@ref{nqt_match}, -@ref{qt_rewrite}, -@ref{qt_normalize} +@item 参照 +@ref{invmat} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item -----$B$^$@=q$$$F$J$$(B. +@item この関数は 2004-04 頃から線形代数III の講義をしながら書かれた. +@item ソース: OpenXM/src/asir-contrib/packages/src/noro_matrix.rr @end itemize +@node f_res,,, 数論・代数 +@subsection @code{f_res} +@findex f_res -@node qt_normalize,,, $Bl9g$K;H$&(B --- + +@itemize @bullet +@item f_res は各種の終結式を計算するモジュールである. ox_grep("f_res"); で online manual を閲覧可能である. +@end itemize + @table @t -@item qt_normalize(@var{Expr}[,@var{Mode}]) -:: @var{Expr} $B$r(B fnode$BI8=`7A$KJQ49$9$k(B. @var{Mode}$B$K$h$jI8=`7A$X$NE83+%"%k%4%j%:%`$r;XDj$G$-$k(B. +@item 参照 +@ref{} @end table +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item このモジュールは Fujiwara 君の修士論文が元になり, それを改造したものである. +@item OpenXM/src/ox_cdd, OpenXM/src/asir-contrib/packages/src/f_res.rr +@end itemize + + +@node D 加群の制限に関する関数,,, 実験的仕様の関数 +@section D 加群の制限に関する関数 + + +@node nk_restriction.restriction,,, D 加群の制限に関する関数 +@subsection @code{nk_restriction.restriction} +@comment --- 索引用キーワード +@findex nk_restriction.restriction + +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.restriction(@var{Id}, @var{VL}, @var{DVL}, @var{W}) +:: D 加群 M = D / @var{Id} (ホロノミック D イデアル @var{Id}) に対して, +重みベクトル @var{W} についての制限加群を返す. +@end table + +@comment --- 引数の簡単な説明 --- @table @var -@item return -quote$B7?(B -@item Expr -quote$B7?(B -@item Mode -$B@0?t(B +@item Id +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト @end table -fnode$B$O(B quote$B7?$NhItJ,$NI8=`7A(B - formula = Risa object +[1432] nk_restriction.restriction([x*dx-1,y*dy-1],[x,y],[dx,dy],[1,0]); +-- generic_bfct_and_gr :0.001sec(0.001629sec) +generic bfct : [[1,1],[s-1,1]] +S0 : 1 +B_@{S0@} length : 2 +-- fctr(BF) + base :0.000999sec(0.0005109sec) +[[y*dy-1,(y*dy-1)*dx,-1],[[1],[0]]] @end example +返り値の第 1 番目の要素 @code{[[1],[0]]]} は, +制限加群の基底 +@iftex +@tex $\partial_x^1, \partial_x^0$ @end tex +を意味し, +返り値の第 0 番目の要素から, 制限加群は +@tex $(y \partial_y - 1, 0), (0, y\partial_y-1), (-1,0)$ @end tex +@end iftex +@ifinfo +dx^1, dx^0 +を意味し, +返り値の第 0 番目の要素から, 制限加群は +(y dy - 1, 0), (0, ydy-1), (-1,0) +@end ifinfo +で生成されることがわかる. +@node nk_restriction.restriction_ideal,,, D 加群の制限に関する関数 +@subsection @code{nk_restriction.restriction_ideal} +@comment --- 索引用キーワード +@findex nk_restriction.restriction_ideal +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.restriction_ideal(@var{Id}, @var{VL}, @var{DVL}, @var{W}) +:: ホロノミック D イデアル @var{Id} を重みベクトル @var{W} についての制限イデアルを返す. +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item Id +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + @itemize @bullet -@item @var{Expr} $B$r(B fnode$BI8=`7A$KJQ49$9$k(B. @var{Mode}$B$K$h$jI8=`7A$X$NE83+%"%k%4%j%:%`$r;XDj$G$-$k(B. -@item $BE83+$O:F5"E*$G$"$k(B. -@item $BF~NO$,(B fnode $B$KJQ49$5$l$?=i4|>uBV$G$O(B + $B$d(B * $B$O;R6!$,(B2$B?M$N(B binary operator -(b_op) $B$G$"$k$,(B, qt_normalize $B$r:nMQ$5$;$k$3$H$K$h$j(B, + $B$d(B * $B$OG$0U?M?t$N(B -$B;R6!$r;}$F$k(B n-ary operator $B$KJQ49$5$l$k(B. -@item n-ary operator $B$r4pAC$H$7$?(B fnode$BI8=`7A$rMQ$$$k$3$H$K$h$j(B, $B%Q%?!<%s%^%C%AMQ$N%Q%?!<%s$N?t$r8:$i$;$k$3$H$,7P83E*$K$o$+$C$F$$$k(B. -@item @var{Mode}=0. $BE83+$7$J$$(B. $B$3$l$,4{Dj$NF0:n(B. -@item @var{Mode}=1. $BE83+$9$k(B. $B$?$@$7(B x*x $BEy$r(B x^2 $BEy$KJQ49(B -@item @var{Mode}=2. $BE83+$9$k(B. $B$?$@$7(B x*x $BEy$r(B x^2 $BEy$KJQ49$7$J$$(B. +@item +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +(すなわち, @code{[1,1,0,0,0]} は OK だが, @code{[1,0,1,0,0]} はダメ) +@item +正の重みを持つ変数についての制限を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば, +x,y について制限を行う. @end itemize -@var{Mode} $B$N0c$$$K$D$$$F$O0J2<$NNc$b;29M$K(B. -@comment %%cfep/tests/2006-03-12-qt.rr +以下は, イデアル +@iftex +@tex $I = D \cdot \{x \partial_x -1, y \partial_y - 1\} $ @end tex +の +@tex $x$ @end tex +@end iftex +@ifinfo +I = D . @{ x dx -1, y dy - 1 @} の x +@end ifinfo +についての制限イデアルを計算した例である。 @example -ctrl("print_quote",2); -A=quote((x-y)*(x+y)); - $B=PNO(B: ((x)-(y))*((x)+(y)) -B=qt_normalize(A,0); - $B=PNO(B: ((x)+((-1)*(y)))*((x)+(y)) Mode=0. $BE83+$O$5$l$J$$(B. +, * $B$O(B n_op (nary-op) $B$X(B. -quotetolist(B); - $B=PNO(B: [n_op,*,[n_op,+,[internal,x],[n_op,*,[internal,-1],[internal,y]]],[n_op,+,[internal,x],[internal,y]]] - -B=qt_normalize(A,1); - $B=PNO(B: ((x)^(2))+((x)*(y))+((-1)*((y)^(2)))+((-1)*(y)*(x)) - Mode=1. $BE83+$9$k(B. +, * $B$O(B n_op (nary-op) $B$X(B. $B6R$r$^$H$a$k(B. -quotetolist(B); - $B=PNO(B: [n_op,+,[b_op,^,[internal,x],[internal,2]],[n_op,*,[internal,x],[internal,y]],[n_op,*,[internal,-1],[b_op,^,[internal,y],[internal,2]]],[n_op,*,[internal,-1],[internal,y],[internal,x]]] - -qt_normalize(A,2); - $B=PNO(B: ((x)*(x))+((x)*(y))+((-1)*(y)*(x))+((-1)*(y)*(y)) - Mode=2. $BE83+$9$k(B. +, * $B$O(B n_op (nary-op) $B$X(B. $B6R$O;H$o$J$$(B. -quotetolist(B); - $B=PNO(B: [n_op,+,[b_op,^,[internal,x],[internal,2]],[n_op,*,[internal,x],[internal,y]],[n_op,*,[internal,-1],[b_op,^,[internal,y],[internal,2]]],[n_op,*,[internal,-1],[internal,y],[internal,x]]] - -qt_normalize(`x^2,2); - $B=PNO(B: (x)*(x) - Mode=2. $B6R$O;H$o$J$$(B. n-ary $B$N(B * $B$X(B. +[1346] nk_restriction.restriction_ideal([x*dx-1,y*dy-1],[x,y],[dx,dy],[1,0]); +-- generic_bfct_and_gr :0.002sec(0.001652sec) +generic bfct : [[1,1],[s-1,1]] +S0 : 1 +B_@{S0@} length : 2 +-- fctr(BF) + base :0sec(0.000566sec) +-- restriction_ideal_internal :0.001sec(0.0007441sec) +[-1] @end example +@node nk_restriction.integration,,, D 加群の制限に関する関数 +@subsection @code{nk_restriction.integration} +@comment --- 索引用キーワード +@findex nk_restriction.integration + +@comment --- 関数の簡単な説明 --- @table @t -@item $B;2>H(B -@ref{nqt_match}, -@ref{nqt_match_rewrite}, -@ref{quotetolist}, -@ref{quote_to_funargs} +@item nk_restriction.integration(@var{Id}, @var{VL}, @var{DVL}, @var{W}) +:: D 加群 M = D / @var{Id} (ホロノミック D イデアル @var{Id}) に対して, 重みベクトル @var{W} についての積分加群を返す. @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. -@noindent -ChangeLog +@comment --- 引数の簡単な説明 --- +@table @var +@item Id +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- @itemize @bullet -@item +@item +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +(すなわち, @code{[1,1,0,0,0]} は OK だが, @code{[1,0,1,0,0]} はダメ) +@item +正の重みを持つ変数についての積分を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば, +x,y について積分を行う. @end itemize +以下は, イデアル +@iftex +@tex $I = D \cdot \{2 t \partial_x + \partial_t, t \partial_t + 2 x \partial_x + 2\}$ @end tex +とおいた時, D 加群 +@tex $M = D / I$ @end tex +の +@tex $t$ @end tex +@end iftex +@ifinfo +I = D . @{2 t dx + dt, t dt + 2 x dx + 2 @} +とおいた時, D 加群 M = D / I の t +@end ifinfo +についての積分加群を計算した例である. ([SST, Ex5.5.2, Ex5.5.6]) +@example +[1351] nk_restriction.integration([2*t*dx+dt,2*x*dx+t*dt+2],[t,x], +[dt,dx],[1,0]); +-- generic_bfct_and_gr :0.001sec(0.001796sec) +generic bfct : [[1,1],[s,1],[s-1,1]] +S0 : 1 +B_@{S0@} length : 2 +-- fctr(BF) + base :0.001sec(0.0006731sec) +[[4*x*dx^2+6*dx,-4*t*x*dx^2-6*t*dx,2*x*dx+1,-2*t*x*dx,2*t*dx],[[1],[0]]] +@end example +返り値の第 1 番目の要素 @code{[[1],[0]]]} は, +積分加群の基底 +@iftex +@tex $t^1, t^0$ @end tex +@end iftex +@ifinfo +t^1, t^0 +@end ifinfo +を意味し, +返り値の第 0 番目の要素から, 積分加群は +@iftex +@tex $(4 x \partial_x^2 + 6 \partial_x, 0), (0, -4 x \partial_x^2 - 6 \partial_x), +(0, -2 x \partial_x), (0, 2 \partial_x)$ @end tex +@end iftex +@ifinfo +(4 x dx^2 + 6 dx, 0), (0, -4 x dx^2 - 6 dx), +(0, -2 x dx), (0, 2 dx) +@end ifinfo +で生成されることがわかる. -@node qt_set_coef,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- @table @t -@item qt_set_coef(@var{ParamList}) -:: $B0J2<(B @var{ParamList} $B$K8=$l$kB?9`<0JQ?t$rJQ?t$H$9$kM-M}4X?tBN$r78?t$H$9$k(B -$BHs2D49B?9`<0$r07$&(B. +@item nk_restriction.integration_ideal(@var{Id}, @var{VL}, @var{DVL}, @var{W}) +:: ホロノミック D イデアル @var{Id} を重みベクトル @var{W} についての積分イデアルを返す. @end table +@comment --- 引数の簡単な説明 --- @table @var -@item return -$B%j%9%H(B -@item ParamList -$B%j%9%H(B +@item Id +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト @end table +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- @itemize @bullet -@item $B0J2<(B @var{ParamList} $B$K8=$l$kB?9`<0JQ?t$rJQ?t$H$9$kM-M}4X?tBN$r78?t$H$9$k(B -$BHs2D49B?9`<0$r07$&(B. -@item $B$3$N@k8@$r$7$J$$$H78?tBN$r?t$H$9$kHs2D49B?9`<0$H$7$F7W;;$9$k(B. -@item qt_normalize $B$*$h$S$=$N5!G=$rMQ$$$k4X?t$,$3$N5!G=$N1F6A$rH(B -@ref{qt_normalize} +@item nk_restriction.ann_mul(@var{I}, @var{J}, @var{VL}, @var{DVL}) +:: @var{f} を零化するホロノミック D イデアル @var{I}, +@var{g} を零化するホロノミック D イデアルを @var{J} としたとき, +@var{fg} を零化するホロノミック D イデアルを返す. @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. -@noindent -ChangeLog +@comment --- 引数の簡単な説明 --- +@table @var +@item I +イデアルの生成元のリスト +@item J +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@end table + +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- @itemize @bullet -@item -----$B$^$@=q$$$F$J$$(B. +@item test_ann_mul(), test_ann_mul2(), test_ann_mul3() を参照. @end itemize -@node qt_set_ord,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- @table @t -@item qt_set_ord(@var{VarList}) -:: @var{VarList} $B$rJQ?t=g=x$H$9$k(B. +@item nk_restriction.restriction(... | inhomo=@var{n}, param=@var{p}, s0=@var{m}) +@item nk_restriction.restriction_ideal(... | inhomo=@var{n}, param=@var{p}, s0=@var{m}, ht=@var{b}, ord=@var{ord}) +@item nk_restriction.integration(... | inhomo=@var{n}, param=@var{p}, s0=@var{m}) +@item nk_restriction.integration_ideal(... | inhomo=@var{n}, param=@var{p}, s0=@var{m}, ht=@var{b}, ord=@var{ord}) +:: D 加群の制限, 積分に関する関数のオプションの説明 @end table +@comment --- 引数の簡単な説明 --- @table @var -@item return -$B%j%9%H(B -@item VarList -$B%j%9%H(B +@item @var{n} +0 または 1 +@item @var{p} +リスト (係数体に属する変数のリスト) +@item @var{m} +整数 +@item @var{b} +0, 1, 2, 3 のいずれか +@item @var{ord} +重み0の変数に対する項順序 @end table +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- @itemize @bullet -@item @var{VarList} $B$r<-=q<0$KMQ$$$?JQ?t=g=x$r0J2<;HMQ$9$k(B. -@item $B$3$N@k8@$r$7$J$$$H$"$kITDj85$K$D$$$F$N4{Dj$N<-=q<0=g=x(B-----$B$^$@=q$$$F$J$$(B---$B$rMQ$$$F9`$rHf3S$9$k(B. -@var{VarList} $B$K8=$l$J$$JQ?t$K$D$$$F$O$3$N=g=x$,E,MQ$5$l$k(B. -@item qt_normalize $B$*$h$S$=$N5!G=$rMQ$$$k4X?t$,$3$N5!G=$N1F6A$rJN,(B ] -qt_normalize(quote(x+y),2); - $B=PNO(B: (y)+(x) +[1555] A=ndbf.ann_n([t,1-t,1-x*t])$ +[1556] I=map(subst,A,s0,b-1,s1,c-b-1,s2,-a); +[(x^2-x)*dx^2+((t-1)*dt+(a+b+1)*x-c+1)*dx+b*a,(-t+1)*x*dx+(t^2-t)*dt+(-c+2)*t+b-1,(t*x-1)*dx+a*t] +[1557] J=nk_restriction.integration_ideal(I,[t,x],[dt,dx],[1,0]|inhomo=1, param=[a,b,c]); +-- nd_weyl_gr :0sec(0.001875sec) +-- weyl_minipoly_by_elim :0.008001sec(0.006133sec) +-- generic_bfct_and_gr :0.008001sec(0.006181sec) +generic bfct : [[-1,1],[s,1],[s-a+c-1,1]] +S0 : 0 +B_@{S0@} length : 1 +-- fctr(BF) + base :0sec(0.003848sec) +-- integration_ideal_internal :0sec(0.07707sec) +[[(x^2-x)*dx^2+((a+b+1)*x-c)*dx+b*a],[[[[dt,(-t+1)*dx]],1]]] @end example +@iftex +この出力は +@tex +$\{(x^2-x) \partial_x^2+((a+b+1)x-c) \partial_x+ab \} +- 1/1 \{ \partial_t (-t+1) \partial_x \} \in I$ +@end tex +であることを意味する. +@end iftex +@ifinfo +この出力は +@{(x^2-x)dx^2+((a+b+1)x-c)dx+ab @} - 1/1 @{ dt (-t+1)dx @} \in I +であることを意味する. +@end ifinfo +この例のように積分変数が1変数 t, パラメータ変数が x のとき +イデアル I に対する inhomo=1 での積分アルゴリズムの出力が +[[L],[[[[dt,M]],N]]] である場合, +L は x のみの微分作用素, M は x, t の微分作用素, N は数で, +L - (1/N)*dt*M が I の元となる. したがって f(x,t) が I で零化される +函数とすれば, +@iftex +@tex +$L \cdot \int_a^b f(x,t) dt - {{1}\over{N}}[M\cdot f]_{x=a}^{x=b} = 0$ +@end tex +@ifinfo +L integral(f(x,t),[t,a,b]) - (1/N)[(Mf)(a)-(Mf)(b)]=0 +@end ifinfo +が成り立つ. + + +@node nk_restriction.trans_inhomo,,, D 加群の積分イデアルの非斉次部分に関する関数 +@subsection @code{nk_restriction.trans_inhomo} +@comment --- 索引用キーワード +@findex nk_restriction.trans_inhomo + +@comment --- 関数の簡単な説明 --- @table @t -@item $B;2>H(B -@ref{qt_normalize}, -@ref{nqt_comp} +@item nk_restriction.trans_inhomo(@var{P}, @var{INT}, @var{VL}, @var{DVL}, @var{W}) +:: D 加群の制限イデアル, 積分イデアルの生成元に対する非斉次部分の情報から, 任意の元に対する非斉次部分を計算する関数 @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. -@noindent -ChangeLog +@comment --- 引数の簡単な説明 --- +@table @var +@item P +積分イデアルの元, または制限イデアルの元 +@item INT +nk_restriction.integration_ideal( ... |inhomo=1); または + +nk_restriction.restriction_ideal( ... |inhomo=1); の出力 +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- @itemize @bullet -@item -----$B$^$@=q$$$F$J$$(B. +@item @var{VL}, @var{DVL}, @var{W} は @var{INT} の計算に用いたものをそのまま使用しなければならない. +@item もし, @var{P} が @var{INT[0]} で生成される積分, 制限イデアルの元でない場合はエラーメッセージが表示される. @end itemize +@node nk_restriction.ost_integration_ideal,,, D 加群の積分イデアル +@subsection @code{nk_restriction.ost_integration_ideal} +@comment --- 索引用キーワード +@findex nk_restriction.ost_integration_ideal -@node qt_set_weight,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- +積分領域が区間の直積であるような積分の満たす +ホロノミック斉次微分方程式系を返す (Oaku-Shiraki-Takayama, 2003). @table @t -@item qt_set_weight(@var{WeightVector}) -:: $BJQ?t$K$D$$$F(B weight $B%Y%/%H%k$r@_Dj$9$k(B. +@item nk_restriction.ost_integration_ideal(@var{Id}, @var{VL}, @var{DVL}, @var{W}, @var{LB}, @var{UB}) +:: Heaviside 関数との積の満たす微分方程式系の計算にショートカット法を用いる. +@item nk_restriction.ost_integration_ideal2(@var{Id}, @var{VL}, @var{DVL}, @var{W}, @var{LB}, @var{UB}) +:: Heaviside 関数との積の満たす微分方程式系の計算に制限イデアルを用いる. @end table +@comment --- 引数の簡単な説明 --- @table @var -@item return -$B%j%9%H(B -@item WeightVector -$B%j%9%H(B +@item Id +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@item LB +積分区間の下端を表すリスト +@item UB +積分区間の上端を表すリスト @end table -fnode f $B$N(B weight w(f) $B$O +であるから, これを入力として次のように計算を行う. +@end ifinfo @example - f $B$,MU$N>l9g$O86B'(B 0. qt_weight_vector $B$G(B weight $B$,M?$($i$l$F$$$kITDj85$K(B - $B$D$$$F$O$=$NCM(B. +[1871] Id=[dt+(3*t^2-1)*x, dx+t^3-t]$ +[1872] VL=[t,x]$ +[1873] DVL=[dt,dx]$ +[1874] W=[1,0]$ +[1875] nk_restriction.ost_integration_ideal(Id,VL,DVL,W,[0],["inf"]); +-- nd_weyl_gr :0.008sec(0.006768sec) +-- weyl_minipoly :0.004001sec(0.003029sec) +-- generic_bfct_and_gr :0.012sec(0.0129sec) +generic bfct : [[1,1],[s,1],[s-2,1]] +S0 : 2 +B_@{S0@} length : 3 +-- fctr(BF) + base :0.008sec(0.007395sec) +-- integration_ideal_internal :0.012sec + gc : 0.016sec(0.04311sec) +[-27*x^3*dx^3-54*x^2*dx^2+(4*x^3+3*x)*dx+4*x^2-3,27*x^2*dx^4+135*x*dx^3+(-4*x^2+105)*dx^2-16*x*dx-8] - f $B$,(Bnode$B$N>l9g$OH(B. +@node nk_restriction.ost_sum,,, D 加群の積分イデアル +@subsection @code{nk_restriction.ost_sum} +@comment --- 索引用キーワード +@findex nk_restriction.ost_sum + +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.ost_sum(@var{Id}, @var{VL}, @var{DVL}, @var{W}) +:: 和の満たす(斉次/非斉次)差分方程式系を返す. +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item Id +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する差分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- +@itemize @bullet +@item Oaku-Shiraki-Takayama (2003) の第6節のアルゴリズムの実装. +@item オプション inhomo が 0 でないとき, 非斉次部分を与える情報も返す. @end itemize +以下は, Oaku-Shiraki-Takayama (2003) の例6.5の非斉次部分まで計算したものである. +@iftex +@tex +$ \sum_{k=a}^b {n \choose k} $ +@end tex +の非和関数の満たすホロノミックイデアルは +@tex +$ I = \langle (n-k+1)E_n-(n+1), (k+1)E_k-(n-k) \rangle $ +@end tex +であるから, これを入力として次のように計算を行う. +@end iftex +@ifinfo +\sum_@{k=a@}^b n_C_k +の非和関数の満たすホロノミックイデアルは +I = < (n-k+1)E_n-(n+1), (k+1)E_k-(n-k) > +であるから, これを入力として次のように計算を行う. +@end ifinfo @example -ctrl("print_quote",2); -qt_set_weight([[x,-1],[y,-1]]); - $B7k2L(B: [[x,-1],[y,-1]] -qt_normalize(quote( 1+(x+y)+(x+y)^2),1); - $B7k2L(B: (1)+(y)+(x)+((y)^(2))+((y)*(x))+((x)^(2))+((x)*(y)) +[1871] Id=[(n-k+1)*en-(n+1), (k+1)*ek-(n-k)]$ +[1872] VL=[k,n]$ +[1873] DVL=[ek,en]$ +[1874] W=[1,0]$ +[1875] nk_restriction.ost_sum(Id,VL,DVL,W|inhomo=1); +-- nd_weyl_gr :0.006667sec(0.004057sec) +-- weyl_minipoly :0sec(0.001163sec) +-- generic_bfct_and_gr :0.01sec(0.007085sec) +generic bfct : [[1,1],[s,1]] +S0 : 0 +B_@{S0@} length : 1 +-- fctr(BF) + base :0.003333sec(0.001785sec) +-- restriction_ideal_internal :0sec(0.002336sec) +[[(en-2)*n+en-2],[[[[ek-1,[(-en+1)*n-en+1,1]]],1]]] @end example +@node nk_restriction.module_restriction,,, D 加群の制限に関する関数 +@subsection @code{nk_restriction.module_restriction} +@comment --- 索引用キーワード +@findex nk_restriction.module_restriction + +@comment --- 関数の簡単な説明 --- @table @t -@item $B;2>H(B -@ref{qt_normalize}, -@ref{qt_set_ord}, -@ref{qt_set_weight}, -@ref{dp_gr_main} +@item nk_restriction.module_restriction(@var{M}, @var{VL}, @var{DVL}, @var{W}) +:: D 加群 D^r/@var{M} (@var{M} は D^r の部分加群) の重みベクトル @var{W} についての制限加群を返す. @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. +@comment --- 引数の簡単な説明 --- +@table @var +@item M +D 自由加群 D^r の部分加群 +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + +@itemize @bullet +@item +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +@comment{(すなわち、@code{[1,1,0,0,0]} は OK だが、 @code{[1,0,1,0,0]} はダメ)} +現在のところ, 1 変数についてだけ制限をとるようにしか実装していないため, +@var{W} は 0 番目の要素だけ正の整数が入る. +@item +正の重みを持つ変数についての制限を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,0,0]} であれば +x について制限を行う. +@end itemize + +以下は, D 自由加群 +@iftex +@tex $D^2$ @end tex +の部分加群 +@tex +$M = D \cdot \{(\partial_x, \partial_y), (\partial_y, \partial_x), (x,y) \}$ +@end tex +をとり, D 加群 +@tex $D^2 / M$ @end tex +の +@tex $x$ @end tex +@end iftex +@ifinfo +D^2 の部分加群 M = D . @{ (dx, dy), (dy, dx), (x, y) @} +をとり, D 加群 D^2 / M の x +@end ifinfo +ついての制限加群を計算した例である. +@example +[2691] nk_restriction.module_restriction([[dx,dy],[dy,dx],[x,y]], [x,y], [dx,dy], [1,0]); +.... +bfunction : +s +[[1,1],[s,1]] +integer roots : +[0,0] +Generators: +[e1,e2] +Relations: +[-8*e2*dy,4*e2*dy^2,-4*e2*dy^3,4*e1*y*dy-4*e1,-4*e1*dy^2,-4*e2,-e2*y*dy^2+2*e2*dy,-e1*y*dy+e1,e1*y*dy-e1] +[[0,-1],[-dy^2,0],[y*dy-1,0]] +@end example +制限加群は +@iftex +@tex $(0, -1), (-\partial_y^2, 0), (y \partial_y -1 , 0)$ @end tex +@end iftex +@ifinfo +(0, -1), (-dy^2, 0), (y, dy-1, 0) +@end ifinfo +で生成されることがわかる. + +@node nk_restriction.module_integration,,, D 加群の制限に関する関数 +@subsection @code{nk_restriction.module_integration} +@comment --- 索引用キーワード +@findex nk_restriction.module_integration + +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.module_integration(@var{M}, @var{VL}, @var{DVL}, @var{W}) +:: D 加群 D^r/M (@var{M} は D^r の部分加群) の重みベクトル @var{W} についての積分加群を返す. +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item M +D 自由加群 D^r の部分加群 +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + +@itemize @bullet +@item +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +@comment{(すなわち、@code{[1,1,0,0,0]} は OK だが、 @code{[1,0,1,0,0]} はダメ)} +現在のところ, 1 変数についてだけ積分をとるようにしか実装していないため, +@var{W} は 0 番目の要素だけ正の整数が入る. +@item +正の重みを持つ変数についての積分を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,0,0]} であれば +x について積分を行う. +@end itemize + +以下は, D 自由加群 +@iftex +@tex $D^2$ @end tex +の部分加群 +@tex $M = D \cdot \{(x, y), (y, x), (\partial_x, \partial_y) \}$ @end tex +をとり, D 加群 +@tex $D^2/M$ @end tex +の +@tex $x$ @end tex +@end iftex +@ifinfo +D^2 の部分加群 M = D . @{ (x, y), (y, x), (dx, dy) @} をとり, +D 加群 D^2 / M の x +@end ifinfo +についての積分加群を計算した例である. +@example +[2702] nk_restriction.module_integration([[x,y],[y,x],[dx,dy]], [x,y], [dx,dy], [1,0]); +... +bfunction : +s +[[1,1],[s,1]] +integer roots : +[0,0] +Generators: +[e1,e2] +Relations: +[-8*e2*y,-4*e2*y^2,-4*e2*y^3,-4*e1*y*dy-8*e1,-4*e1*y^2,-4*e2,-e2*y^2*dy-4*e2*y,e1*y*dy+2*e1,e1*y*dy+2*e1] +[[0,-1],[y*dy+2,0],[-y^2,0]] +@end example +積分加群は +@iftex +@tex $(0, -1), (y \partial_y + 2, 0), (-y^2, 0)$ @end tex +@end iftex +@ifinfo +(0, -1), (y dy + 2, 0), (-y^2, 0) +@end ifinfo +で生成されることがわかる. + @noindent ChangeLog @itemize @bullet -@item +@item これらの関数は OpenXM/src/asir-contrib/packages/src/nk_restriction.rr で定義されている. nk_restriction.rr, 1.1--1.6 を見よ. +@item 2010-02-05 に 3 つの option (@code{inhomo}, @code{param}, @code{s0}) が追加された. 1.7--1.9 を見よ. +@item 2010-05 から 2010-07 にかけて 2 つの option (@code{ht}, @code{ord}) と +新たな関数 trans_inhomo() が追加された. 1.10--1.13 を見よ. +@item 2011-08 に ost_sum() が追加された. 1.20 を見よ. +@item 2016-05 に module_integration(), module_restriction() が追加された. @end itemize +@node その他(未分類),,, 実験的仕様の関数 +@section その他(未分類) -@node nqt_comp,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t -@item nqt_cmp(@var{Expr1},@var{Exprt2}) -:: @var{Expr1} $B$H(B @var{Expr2} $B$N=g=x$rHf3S$9$k(B. +@item tk_pfn.rkn(@var{F},@var{X},@var{Y},@var{Xs},@var{Ys},@var{Ht},@var{H}) +:: Pfaffian 方程式に対する Runge-Kutta 法 @end table @table @var @item return -$B@0?t(B -@item Expr1, Expr2 -quote$B7?(B +リスト 独立変数と解の組 +@item F, X, Y, Xs, Ys, Ht, H +@var{F} は Pfaffian 方程式の係数行列リスト. +@var{X} は独立変数リスト. +@var{Y} は従属変数リスト. +@var{Xs} 独立変数の出発値リスト. +@var{Ys} は出発時の従属変数の値リスト. +@var{Xt} は停止する独立変数の値リスト. +@var{H} は微少数. @end table @itemize @bullet -@item @var{Expr1} $B$H(B @var{Expr2} $B$N=g=x$rHf3S$9$k(B. -@item @var{Expr1} > @var{Exprt2} $B$J$i(B 1. -@item @var{Expr1} < @var{Exprt2} $B$J$i(B -1. -@item @var{Expr1} = @var{Exprt2} ($B$*$J$8=g=x(B) $B$J$i(B 0. +@item この関数は連立Pfaffian方程式 dY/d X[i] = F[i] Y を数値的に解く. +@item 任意の holonomic system は Pfaffian 方程式に変換できる ([SST, Chap 1]). 変換には yang.rr パッケージを用いる. +@item d F[i]/d X[j] + F[i] F[j] = d F[j]/d X[i] + F[j] F[i] = 0 が任意の i, j に対して成立していることが解が存在する必要十分条件である. この条件が成立しないときにこの関数を用いて解を計算してもその解は偽物である. +@item X[i] が動く範囲は実数でないといけない. +@item Xs[i] <= X[i] <= Xt[i] または Xt[i] <= X[i] <= Xs[i] である. +@item 引数の与え方の例はソースコード (@code{OpenXM/lib/asir-contrib/tk_pfn.rr} )の @code{tk_pfn.test1}, @code{tk_pfn.test2} を参照. +@item 下の例の出力は X=(1,3) での値が Y=(-8,2,-6) であることを意味する. +@item 参考. taka_runge_kutta.rr, yang.rr @end itemize @example -ctrl("print_quote",2); -qt_set_ord([y,x]); qt_set_weight([[x,-1],[y,-1]]); -[nqt_comp(`x,`y), nqt_comp(`y,`x), nqt_comp(`x,`x)]; - $B=PNO(B: [-1,1,0] +[1355] import("tk_pfn.rr"); +[1590] tk_pfn.test1(); +Value at (3,0.1)[8.99,6,-0.2] +Value at (1,3)[-8,2,-6] +[[[1,3],-8,2,-6], + [[1,2.9],-7.41,2,-5.8], + --- snip --- + [[3,0.1],8.99,6,-0.2]] @end example -@table @t -@item $B;2>H(B -@ref{qt_normalize}, -@ref{qt_set_ord}, -@ref{qt_set_weight} -@end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item $B$^$@=q$$$F$J$$(B. +@item この関数は 2009-12 から 2010-01 にかけて最初の版が書かれた. +@item @code{OpenXM/src/asir-contrib/packages/src/tk_pfn.rr} 1.1, 1.2 +@item このモジュールの前身は @code{tk_pf2.rr} である. これは独立変数が 2 個の場合である. @end itemize -@comment **************************************************************** -@node qt_is_var,,, $Bl9g$K;H$&(B --- +@node tk_pfn.graph,,, 実験的仕様の関数 +@subsection @code{tk_pfn.graph} +@findex tk_pfn.graph + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t -@item qt_is_var(@var{Expr}) -:: @var{Expr} $B$,ITDj85$KBP1~$9$k(B quote $B$J$i(B 1 $B$rLa$9(B. -@item qt_is_coef(@var{Expr}) -:: @var{Expr} $B$,78?t$NM-M}4X?tBN$KB0$9$k$H$-(B 1 $B$rLa$9(B. +@item tk_pfn.graph(@var{Pf},@var{Dom},@var{Iv},@var{Step}) +:: 2変数 Pfaffian 方程式を Runge-Kutta 法で解いてグラフ表示する. @end table @table @var @item return -$B@0?t(B -@item Expr -quote$B7?(B +リスト リストの要素は以下の形式 [[xの値,yの値],Y_1の値,Y_2の値, ...]. +[xの値, yの値] は [0,0],[0.2,0],[0.4,0], ... , [0,0.2],[0.2,0.2], ... のように +y の値が外側ループ, x の値が内側ループの形式で増える. +@item Pf, Dom, Iv, Step +@var{Pf} は Pfaffian 方程式の係数行列リスト. 独立変数は x, y で固定. +@var{Dom} リスト. 解くべき領域. +@var{Iv} リスト. 領域の左端での初期値. +@var{Step} 刻み幅. @end table @itemize @bullet -@item @var{Expr} $B$,ITDj85$KBP1~$9$k(B quote $B$J$i(B 1 $B$rLa$9(B. -$B$=$&$G$J$$$H$-(B 0 $B$rLa$9(B. +@item tk_pf2.rr, mt_graph.rr を import しておく必要がある. +@item この関数は連立Pfaffian方程式 dY/dx = Pf[0] Y, dY/dy = Pf[1] Y を数値的に解いてグラフ表示する. +@item @var{Dom} は [[xmin,xmax],[ymin,ymax]] の形式. +@item 例はソースコード (@code{OpenXM/lib/asir-contrib/tk_pfn.rr} )の @code{tk_pfn.testgraph1()}, @code{tk_pfn.testgraph2()} を参照. +@item option としては fit=1 がある. Z軸を適宜調整する. +@item @var{Dom} の端はグラフ表示の時に一部カットされるので注意. @end itemize @example -[qt_is_var(quote(x)), qt_is_var(quote(3/2))]; - $B=PNO(B: [1,0] +[1355] import("tk_pf2.rr"); import("mt_graph.rr"); import("tk_pfn.rr"); +[1590] tk_pfn.testgraph1(); + +ここで testgraph1() は以下のとおり. +def testgraph1() @{ + /* tk_bess2.bess2pf(1/2); */ + Pf= [[[ 0, (1)/(x), 0 ], + [ -x, (2*x^2+1)/(x), -2*x ], + [ -y, 0, 0 ]], + [[ 0, 0, (1)/(y) ], + [ -x, 0, 0 ], + [ -x, (1/2)/(x), (-1/2)/(y) ]]]; + /* tk_bess2.bess2Iv(1/2,[0.5,1.5]); */ + Iv = [0.105994,-0.651603,-0.760628]; + Dom=[[0.5,1.5],[1.5,9]]; + Step = 0.5; + return tk_pfn.graph(Pf,Dom,Iv,Step | fit=1); +@} + + @end example -@table @t -@item $B;2>H(B -@ref{qt_rewrite}, -@ref{nqt_match_rewrite} -@end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item -----$B$^$@=q$$$F$J$$(B. +@item この関数は 2010-08 に最初の版が書かれた. +@item @code{OpenXM/src/asir-contrib/packages/src/tk_pfn.rr} 1.8 @end itemize -@comment **************************************************************** -@node qt_rewrite,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t -@item qt_rewrite(@var{Expr},@var{Rules},@var{Mode}) -:: @var{Expr} $B$r5,B'=89g(B @var{Rules} $B$rMQ$$$F=q$-49$($k(B. +@item tk_rk.runge_kutta_4(@var{Eq},@var{X},@var{Y},@var{X0},@var{Y0},@var{Terminal},@var{Step}) +:: 4次の Runge-Kutta 法による微分方程式の数値近似解 @end table @table @var @item return -quote$B7?(B -@item Expr -quote$B7?(B -@item Rules -$B%j%9%H(B -@item Mode -$B@0?t(B +リスト リストの要素は以下の形式 [@var{X}の値,Y_1の値,Y_2の値, ...]. + @var{X} の値は減っていく. よってリストの先頭が @var{Terminal} 付近での @var{Y} の値. +@item Eq, X, Y, Step +@var{Eq} は 方程式の右辺. リスト. Y[0]'=Eq[0], Y[1]'=Eq[1], ... である. +@var{X} 独立変数名. +@var{Y} リスト. 従属変数のリスト. +@var{Step} 刻み幅. +@item X0, Y0, Terminal +@var{X0} 出発点の @var{X} の値. +@var{Y0} 出発点での @var{Y} の初期値. +@var{Terminal} @var{X} の終着点. @end table @itemize @bullet -@item $B%f!<%68@8l$rMQ$$$FDj5A$5$l$?4X?t(B. -@code{import("noro_rewrite.rr")} $B$7$F$*$/$3$H(B. -(noro_rewrite.rr $B$,(B OpenXM/lib/asir-contrib $B$KB8:_$7$J$$>l9g(B -$B%=!<%9$N(B OpenXM/src/asir-contrib/testing/noro/new_rewrite.rr $B$r%3%T!<(B) -@item @var{Expr} $B$r5,B'=89g(B @var{Rules} $B$rMQ$$$F=q$-49$($k(B. -@item $B5,B'$NE,MQ$O(B fnode$BLZ$KBP$7$F:F5"E*$G$"$k(B. - $B0lJ}(B @code{nqt_match_rewrite} $B$G$O%H%C%W%l%Y%k$N$_$K5,B'$,E,MQ$5$l$k(B. -@item $B5,B'=89g(B @var{Rules} $B$N3FMWAG$N=q$-J}$O(B @code{nqt_match()} $B$N(B -@var{Pattern} $B$HF1$8=q$-J}(B. -$B$D$^$j(B [$B%Q%?!<%s(B, $B=q$-49$(7k2L(B] $B$^$?$O(B -[$B%Q%?!<%s(B, $B>r7o(B, $B=q$-49$(7k2L(B]. -@item @var{Mode} $B$N0UL#$O(B @ref{qt_normalize} $B$N(B @var{Mode} $B$HF1MM(B. -$B%Q%?!<%s%^%C%A(B, $B=q$-49$($O(B @var{Mode} $B$G(B @code{qt_normalize()} -$B$5$l$F$+$i?k9T$5$l$k(B. +@item taka_runge_kutta.rr を import しておく必要がある. +@item この関数は連立常微分方程式 Y[0]'=Eq[0], Y[1]'=Eq[1], ... を数値的に解く. +@item 例はソースコード (@code{OpenXM/lib/asir-contrib/src/taka_runge_kutta.rr} )の +@code{tk_rk.test4()} を参照. @end itemize -$BCm0U(B: $B?t3XE*$K$O(B X*Y=Y*X $B$,2D49@-$rM?$($k5,B'$@$,(B, $B$3$l$r$=$N$^$^5,B'$H$7$F(B - $BM?$($k$H=q$-49$($,Dd;_$7$J$$(B. $Be$NNc$N$h$&$K=g=xHf3S$7(B, $B$?$H$($P(B, - $B=g=x$,Bg$-$/$J$k>l9g$N$_$K=q$-49$($k$Y$-$G$"$k(B. @example -import("noro_rewrite.rr"); -R=[[`X*Y,`nqt_comp(Y*X,X*Y)>0, `Y*X]]; -qt_rewrite(`(x-y)^2,R,2); - $B=PNO(B: quote(x*x+-2*x*y+y*y) -@end example +[1355] import("taka_runge_kutta.rr"); +[1590] tk_rk.test4(); -$B30@QBe?t$N7W;;(B (asir-contrib $B$r%m!<%I$7$?>uBV(B). -@example -import("noro_rewrite.rr"); -Rext0=[quote(X*Y),quote(qt_is_var(X) && qt_is_var(Y) && nqt_comp(Y,X)>0), - quote(-Y*X)]; -Rext1=[quote(X^N),quote(eval_quote(N)>=2),quote(0)]; -Rext2=[quote(X*X),quote(0)]; -Rext=[Rext0,Rext1,Rext2]; -qt_rewrite(quote( (x+2*y)*(x+4*y) ), Rext,1); - $B=PNO(B: 2*x*y +ここで test4() は以下のとおり. 振動の方程式, y0'=y1, y1'=-y0 (y0''+y0=0). 答は y0=cos(x) +taka_plot_auto は下方向で y が正. -qt_set_coef([a,b,c,d]); -qt_rewrite(quote((a*x+b*y)*(c*x+d*y)), Rext,1); - $B=PNO(B: (d*a-c*b)*x*y +def test4() @{ + A=runge_kutta_4([y1,-y0],x,[y0,y1],0,[1,0],3.14*2,0.1); + taka_plot_auto(A); + return(A); +@} @end example -$BHyJ,$N7W;;(B (asir-contrib $B$r%m!<%I$7$?>uBV(B). -@example -import("noro_rewrite.rr"); -qt_set_coef([a,b]); -Rd1=[`d(X+Y), `d(X)+d(Y)]; -Rd2=[`d(X*Y),`d(X)*Y+X*d(Y)]; -Rd3=[`d(N), `qt_is_coef(N), `0]; -Rd4=[`d(x),`1]; -Rd=[Rd1,Rd2,Rd3,Rd4]; -B=qt_rewrite( `d( (a*x+b)^3),Rd,2); - $B=PNO(B: quote(3*a^3*x*x+6*b*a^2*x+3*b^2*a) -fctr(eval_quote(B)); - $B=PNO(B: [[3,1],[a,1],[a*x+b,2]] -@end example +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は 2000 年代の前半に最初の版が書かれた. 2010年 Pfaffian の数値解析の為に再度整備 +@item @code{OpenXM/src/asir-contrib/packages/src/taka_runge_kutta.rr} 1.17 +@end itemize + +@node tk_rk.runge_kutta_4_linear,,, 実験的仕様の関数 +@subsection @code{tk_rk.runge_kutta_4_linear} +@findex tk_rk.runge_kutta_4_linear + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t -@item $B;2>H(B -@ref{nqt_match}, -@ref{nqt_match_rewrite}, -@ref{qt_normalize} +@item tk_rk.runge_kutta_4_linear(@var{P},@var{X},@var{Y},@var{X0},@var{Y0},@var{Terminal},@var{Step}) +:: 4次の Runge-Kutta 法による微分方程式の数値近似解. 線形方程式専用. @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. +@table @var +@item return +リスト リストの要素は以下の形式 [@var{X}の値,Y_1の値,Y_2の値, ...]. + @var{X} の値は減っていく. よってリストの先頭が @var{Terminal} 付近での @var{Y} の値. +@item P, X, Y, Step +@var{P} は 方程式の右辺. リスト. Y'=P Y である. 従属変数 @var{Y} は不要. +@var{X} 独立変数名. +@var{Y} リスト. 従属変数のリスト. 従属変数は自動生成される. 使われていないので空リストでよい. +@var{Step} 刻み幅. +@item X0, Y0, Terminal +@var{X0} 出発点の @var{X} の値. +@var{Y0} 出発点での @var{Y} の初期値. +@var{Terminal} @var{X} の終着点. +@end table + +@itemize @bullet +@item taka_runge_kutta.rr を import しておく必要がある. +@end itemize + +@example +[1355] import("taka_runge_kutta.rr"); +[1590] A=tk_rk.runge_kutta_4_linear([[0,1],[-1,0]],x,[ ], 0, [1,0], 3.14*2, 0.1); +[1591] taka_plot_auto(A); + +振動の方程式, y0'=y1, y1'=-y0 (y0''+y0=0). 答は y0=cos(x) を解いている. +taka_plot_auto は下方向で y が正. + +@end example + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item qt $B7O$N4X?t$N867?$O(B OpenXM/src/asir-contrib/testing/tr.rr $B$G$"$k(B. -$B$3$N%f!<%68@8l$K$h$k3+H/$,(B 2005$BG/$N=U$^$G9T$o$l(B, $B$=$N$"$HAH$_9~$_4X?t$N;29MJ88%(B: - OpenXM/doc/Papers/2005-rims-noro.tex $B$*$h$S(B - OpenXM/doc/Papers/2005-rims-noro.tm (TeXmacs$B$N5-;v(B). -@item Todo: qt $B7O$N4X?t$rMQ$$$?$*$b$7$m$$7W;;$r(B Risa/Asir $B%8%c!<%J%k$N5-;v$H$7$F=q$/(B. +@item 2010年 Pfaffian の数値解析の為に再整備. +@item @code{OpenXM/src/asir-contrib/packages/src/taka_runge_kutta.rr} 1.17 @end itemize -@comment **************************************************************** -@comment **************************************************************** -@node asirgui.hnd,,, $Bl9g$K;H$&(B --- +@node fj_simplify.simplify,,, 実験的仕様の関数 +@subsection @code{fj_simplify.simplify} +@findex fj_simplify.simplify + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t -@item asirguid.hnd -:: asirgui $B$N(B main window $B$N%O%s%I%kHV9f$rJ];}$9$k%U%!%$%k(B +@item fj_simplify.simplify(@var{arg1}) +:: arg1 を簡単化する. @end table +@table @var +@item return +多項式, 有理式 または quote +@item arg1 +多項式 または 有理式 +@end table @itemize @bullet -@item asirgui (Windows $BHG(B) $B$r5/F0$9$k$H(B asirgui.exe $B$N$"$k%U%)%k%@$*$h$S(B $B4D6-JQ?t(B TEMP $B$,Dj5A$5$l$F$$$l$P$3$N%U%!%$%k$,:n@.$5$l$k(B. -@item $BCf?H$O#1#0?J@0?t$G(B, asirgui $B$N(B main winodw $B$N%O%s%I%k$G$"$k(B. $B$3$N%O%s%I%k$"$F$K(B PostMessage $B$r$9$l$P(B, asuirgui $B$K%-!<%\!<%I$+$iF~NO$7$?$N$HF1MM$J8z2L$,F@$i$l$k(B. -@item text editor $B$G:n@.(B, $BJ]B8$7$?%U%!%$%k$r(B text editor $BB&$+$i(B asirgui $B$KFI$_9~$^$;$?$j$9$k$?$a$KMxMQ2DG=(B. +@item +この関数は +Joel S. Cohen, Computer Algebra and Symbolic Computation, +http://web.cs.du.edu/~jscohen/MathematicalMethods/index.htm +に記述されている Automatic simplification algorithm と +B.F.Caviness, R.J.Fateman, Simplification of Radical Expressions (1976) +に記述されている radcan アルゴリズムの実装である. +@item +複素多値関数としては (x*y)^a = x^a*x^b は一般には成立しないので, 結果を複素関数に使うときは +注意が必要である. (x^a = exp(a*log(x)) なので) @end itemize @example -// Visual C++ $BMQ$N%F%9%H%W%m%0%i%`(B. $BI8=`F~NO$r(B asirgui $B$XAw$j9~$`(B. -// test.cpp : $B%3%s%=!<%k(B $B%"%W%j%1!<%7%g%sMQ$N%(%s%H%j(B $B%]%$%s%H$NDj5A(B -// +import("fj_simplify.rr"); +[1434] fj_simplify.simplify((x^(1/2))^3); +((x)^(3/2)) +[1435] fj_simplify.simplify((2^(1/2))^2); +2 +[1436] fj_simplify.simplify((2+2^(1/2))^3); +14*((2)^(1/2))+20 +[1437] fj_simplify.simplify(exp(x)*exp(-x+y)); +((@@e)^(y)) +@end example -#include "stdafx.h" -#include "test.h" -#include -#include -#include -#include -#include +@table @t +@item 参照 +@ref{quote} +@end table -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif +@noindent +ChangeLog +@itemize @bullet +@item +Todo: exp 以外の特殊関数についてのsimplification の機能. +@item +この関数は 2010.01 に M.Fujimoto により最初の版が書かれた. +OpenXM/src/asir-contrib/packages/src/fj_simplify.rr +@end itemize -///////////////////////////////////////////////////////////////////////////// -// $BM#0l$N%"%W%j%1!<%7%g%s(B $B%*%V%8%'%/%H(B +@node tk_jack.zonal,,, 実験的仕様の関数 +@subsection @code{tk_jack.zonal} +@findex tk_jack.zonal -CWinApp theApp; +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item tk_jack.zonel(@var{p},@var{n}) +:: 分割 p に対する n 変数の zonal 多項式を出力する. +@end table -using namespace std; +@table @var +@item return +多項式. x_1, x_2, ... が変数. +@item p +数のリスト. p=[p0,p1,...] の時 p0>=p1>=...>0. +@item n +自然数 +@end table -int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) -{ - int nRetCode = 0; +@itemize @bullet +@item +この関数は +Koev-Edelman による Pieri 型公式を用いた Jack symmetric function の計算 +アルゴリズムの実装である. +詳しくは Wikipedia 英語版 Jack symmetric function の項を参照. +@item zonal(P,N) = jack(P,N,2) である. +@end itemize - // MFC $B$N=i4|2=$*$h$S=i4|2=<:GT;~$N%(%i!<$N=PNO(B - if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) - { - // TODO: $BI,MW$K1~$8$F%(%i!<(B $B%3!<%I$rJQ99$7$F$/$@$5$$!#(B - cerr << _T("Fatal Error: MFC initialization failed") << endl; - nRetCode = 1; - } - else - { - // TODO: $B$3$N0LCV$K%"%W%j%1!<%7%g%s$NF0:n$r5-=R$7$F$/$@$5$$!#(B - CString strHello; - strHello.LoadString(IDS_HELLO); - cout << (LPCTSTR)strHello << endl; - } - HWND hnd; - FILE *fp = fopen("c:/Program Files/asir/bin/asirgui.hnd","r"); - fscanf(fp,"%d",&hnd); - fclose(fp); - while (1) { - int c; - c = getchar(); - if ( c == '#' ) break; - PostMessage(hnd,WM_CHAR,c,1); - } - return nRetCode; -} +@example +load("tk_jack.rr"); +[1434] tk_jack.zonal([3,2,1],3); +(112*x_3*x_2^2+112*x_3^2*x_2)*x_1^3+(112*x_3*x_2^3+168*x_3^2*x_2^2+112*x_3^3*x_2)*x_1^2+(112*x_3^2*x_2^3+112*x_3^3*x_2^2)*x_1 +[1435] tk_jack.zonal([1,1],3); +(2*x_2+2*x_3)*x_1+2*x_3*x_2 +[1436] tk_jack.jack([1,1],3,2); +(2*x_2+2*x_3)*x_1+2*x_3*x_2 @end example @table @t -@item $B;2>H(B -@ref{xyz_abc} +@item 参照 @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. @noindent ChangeLog @itemize @bullet -@item $B$3$N5!G=$O(B 2006-12-5, 2007-02-13 $B$K2C$($i$l$?(B. -@item @code{OpenXM_contrib2/windows/asir32gui/asir32gui.clw} 1.11 -@item @code{OpenXM_contrib2/windows/asir32gui/asir32guiview.cpp} 1.15, 1.1.6 +@item +この関数は wishart 分布に従う対称行列の第一固有値が x 以下である確率の計算を +holonomic gradient method でやるためにその初期値を計算する C のプログラムが +必要であった. それを debug するためにとりあえず書いたもの. +@item 最適化をまだまださぼってる. @end itemize -@comment **************************************************************** -@node noro_matrix.rr,,, $Bl9g$K;H$&(B --- @table @t -@item linalg.unit_mat(@var{arg1}) -@item linalg.random_rmat(@var{arg1}, @var{arg2}, @var{arg3}) -@item linalg.minipoly_mat(@var{arg1}) -@item linalg.compute_kernel(@var{arg1}) -@item linalg.compute_image(@var{arg1}) -@item linalg.jordan_canonical_form(@var{arg1}) +@item cbase(@var{A}) +:: @var{A} で定義される A-超幾何方程式系の Pfaffian の基底を求める. @end table +@table @var +@item return +Pfaffianの基底(微分作用素のモノミアル)のリスト +@item A +整数を成分とする行列 (maximal rank のもの)を表すリスト +@end table @itemize @bullet -@item $B4JC1$J2r@b$*$h$SH(B. +@item A-超幾何イデアルの Q(x)[dx] における標準基底は Pfaffian の基底となるが, 逆はかならずしも真ではない. 個数はもちろん同じである. +@item +アルゴリズムは +T.Hibi, K.Nishiyama, N.Takayama, Pfaffian Systems of A-Hypergeometric Equations I, Bases of Twisted Cohomology Groups, arxiv:1212.6103 +による. +さらにパラメータ b を数に特殊化する確率算法を用いている. @end itemize @example -load("noro_matrix.rr"); -A=newmat(4,4,[[2,0,0,0],[3,5,1,0],[-9,-9,-1,0],[-5,0,0,1]]); -B=linalg.jordan_canonical_form(A); +[2190] import("ot_hgm_ahg.rr"); +1 +[2191] ot_hgm_ahg.cbase([[1,1,1,1],[0,1,2,3]]); +We use a probabilistic algorithm to determine the base.[dx2^2,dx3*dx2,dx3^2] + +[dx3,dx4,1] @end example @table @t -@item $B;2>H(B -@ref{invmat} +@item 参照 +@ref{get_mat2} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. @noindent ChangeLog @itemize @bullet -@item $B$3$N4X?t$O(B 2004-04 $B:"$+$i@~7ABe?t(BIII $B$N9V5A$r$7$J$,$i=q$+$l$?(B. -@item $B%=!<%9(B: OpenXM/src/asir-contrib/packages/src/noro_matrix.rr +@item +この関数は 2012 から 2014-春休みにかけてかかれた. +@item version 1.1 以前の版は h-mle/A-hg/Prog (研究グループの共有フォルダ) にあり. @end itemize - -@node f_res,,, $BH(B -@ref{} +@item 参照 +@ref{cbase} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. @noindent ChangeLog @itemize @bullet -@item $B$3$N%b%8%e!<%k$O(B Fujiwara $B7/$N=$;NO@J8$,85$K$J$j(B, $B$=$l$r2~B$$7$?$b$N$G$"$k(B. -@item OpenXM/src/ox_cdd, OpenXM/src/asir-contrib/packages/src/f_res.rr +@item +この関数は 2012 から 2014-春休みにかけてかかれた. +@item version 1.1 以前の版は h-mle/A-hg/Prog (研究グループの共有フォルダ) にあり. +@item +ソース ot_hgm_ahg.rr の test3(), test3b(), test4(), test5(), test6(), test6c() 等に利用例がある. +@item +test3b() で @var{Mset} を一次式全部にしたものが, 論文の例. @end itemize +@comment ------------------- +@comment hgm_ahg_contiguity +@comment ------------------- +@node ot_hgm_ahg.hgm_ahg_contiguity,,, 実験的仕様の関数 +@subsection @code{ot_hgm_ahg.hgm_ahg_contiguity} +@findex ot_hgm_ahg.hgm_ahg_contiguity -@node chdir,,, $B.?tE@?t(B +リスト. +@item A +非負整数を成分とする行列 (maximal rank のもの)を表すリスト +@item B +非負整数を成分とするベクトルを表すリスト +@item W +非負整数を成分とするベクトルを表すリスト @end table @itemize @bullet -@item -$BJV$jCM$O(B1970$BG/(B1$B7n(B1$BF|(B0$B;~(B0$BJ,(B0$BIC$+$i$N7P2aIC?t$G$"$k(B. +@item @var{A} U = @var{B} を満たす非負の整数ベクトル U の中で, +内積 @var{W} U を最小化する U を戻す. @end itemize @example -[0] ctrl("real_digit", 16); -16 -[1] dcurrenttime(); -1226390851.34476 -[2] currenttime(); -1226390854 +[0] import("tk_hgpoly.rr"); +[2191] tk_hgpoly.optip([[1,1,1,1],[0,1,2,3]],[20,40],[1,1,1,0]); +[6,1,0,13] @end example @table @t -@item $B;2>H(B -@ref{currenttime} +@item 参照 +@ref{feasible} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. @noindent ChangeLog @itemize @bullet @item -$B$3$N4X?t$O(B 2008-9-12 $B$K%3%_%C%H$5$l$?(B. -$BJQ99$r$&$1$?%=!<%9%3!<%I$O(B builtin/time.c (1.6) $B$G$"$k(B. +この関数は 2014-12-12 に commit された. +元版は h-mle/A-hg/Prog @end itemize -@node nk_restriction.restriction,,, $B>+(1)*<<1,0,1,0>>] @end example -@node nk_restriction.restriction_ideal,,, D $B2C72$N@)8B$K4X$9$k4X?t(B -@subsection @code{nk_restriction.restriction_ideal} -@comment --- $B:w0zMQ%-!<%o!<%I(B -@findex nk_restriction.restriction_ideal -@comment --- $B4X?t$N4JC1$J@bL@(B --- +@noindent +ChangeLog +@itemize @bullet +@item +この関数は 2014-12-12 に commit された. +@end itemize + +@comment ------------------- +@comment tk_fd.abc2ahg +@comment ------------------- +@node tk_fd.abc2ahg,,, 実験的仕様の関数 +@subsection @code{tk_fd.abc2ahg} +@findex tk_fd.abc2ahg @table @t -@item nk_restriction.restriction_ideal(@var{Id}, @var{VL}, @var{DVL}, @var{W}) -:: $B%[%m%N%_%C%/(B D $B%$%G%"%k(B @var{Id} $B$r=E$_%Y%/%H%k(B @var{W} $B$K$D$$$F$N@)8B%$%G%"%k$rJV$9!#(B +@item tk_fd.abc2ahg(@var{A},@var{B},@var{C}) +:: F_D(@var{A}, @var{B},@var{C}) を解にもつ A-超幾何方程式系を求める. @end table -@comment --- $B0z?t$N4JC1$J@bL@(B --- @table @var -@item Id -$B%$%G%"%k$N@8@.85$N%j%9%H(B -@item VL -$BJQ?t$N%j%9%H(B -@item DVL -$BJQ?t$N%j%9%H(B(@var{VL} $B$KBP1~$9$kHyJ,:nMQAG$NJ}$NJQ?t(B) -@item W -$B=E$_%Y%/%H%k$rI=$9%j%9%H(B +@item return +リスト. +@item A +数 +@item B +数のリスト +@item C +数 @end table @itemize @bullet -@item -@var{W} $B$NMWAG$OHsIi@0?t$G!"(B0 $BHVL\$NMWAG$+$iO"B3$7$F@5$N@0?t$,F~$i$J$1$l$P$J$i$J$$!#(B -($B$9$J$o$A!"(B@code{[1,1,0,0,0]} $B$O(B OK $B$@$,!"(B @code{[1,0,1,0,0]} $B$O%@%a(B) -@item -$B@5$N=E$_$r;}$DJQ?t$K$D$$$F$N@)8B$r9T$&!#(B -$BNc$($P!"(B@var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} $B$G$"$l$P(B -x,y $B$K$D$$$F@)8B$r9T$&!#(B +@item 戻り値リストの第0成分は A-超幾何方程式系を定義する行列. +第1成分はA-超幾何方程式系のパラメータβ. @end itemize -$B0J2<$O!"%$%G%"%k(B -@tex -$I = D \cdot \{x \partial_x -1, y \partial_y - 1\} $ -@end tex -$B$N(B -@tex $x$ @end tex -$B$K$D$$$F$N@)8B%$%G%"%k$r7W;;$7$?Nc$G$"$k!#(B @example -[1346] nk_restriction.restriction_ideal([x*dx-1,y*dy-1],[x,y],[dx,dy],[1,0]); --- generic_bfct_and_gr :0.002sec(0.001652sec) -generic bfct : [[1,1],[s-1,1]] -S0 : 1 -B_{S0} length : 2 --- fctr(BF) + base :0sec(0.000566sec) --- restriction_ideal_internal :0.001sec(0.0007441sec) -[-1] -[1347] +[2191] tk_fd.abc2ahg(-3,[-4,-5],3); + +[[[0,0,0,1,1,1],[1,0,0,1,0,0],[0,1,0,0,1,0],[0,0,1,0,0,1]],[11,5,4,5]] @end example -@node nk_restriction.integration,,, $B\$7$$@bL@(B --- -@comment --- @itemize$B!A(B@end itemize $B$O2U>r=q$-(B --- -@comment --- @bullet $B$O9uE@IU$-(B --- @itemize @bullet +@item +@var{A}, @var{B}, @var{C}, に現れる数は整数を与える. +@var{Y} の成分は有理数を与える. +@item +@var{Ans}[2]*@var{Ans}[1] が Z. +@var{Ans}[2]*@var{Ans}[0][I] が Z の Y[1][I] についての偏微分. @item -@var{W} $B$NMWAG$OHsIi@0?t$G!"(B0 $BHVL\$NMWAG$+$iO"B3$7$F@5$N@0?t$,F~$i$J$1$l$P$J$i$J$$!#(B -($B$9$J$o$A!"(B@code{[1,1,0,0,0]} $B$O(B OK $B$@$,!"(B @code{[1,0,1,0,0]} $B$O%@%a(B) -@item -$B@5$N=E$_$r;}$DJQ?t$K$D$$$F$N@QJ,$r9T$&!#(B -$BNc$($P!"(B@var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} $B$G$"$l$P(B -x,y $B$K$D$$$F@QJ,$r9T$&!#(B +論文 +1.Y.Goto, Contiguity relations of Lauricella's F_D revisited, arxiv:1412.3256 +で導出されている +contiguity relation を用いて計算する. @end itemize -$B0J2<$O!"%$%G%"%k(B -@tex -$I = D \cdot \{2 t \partial_x + \partial_t, t \partial_t + 2 x \partial_x + 2\} $ -@end tex -$B$N(B -@tex $t$ @end tex -$B$K$D$$$F$N@QJ,%$%G%"%k$r7W;;$7$?Nc$G$"$k!#(B([SST, Ex5.5.2, Ex5.5.6]) @example -[1351] nk_restriction.integration([2*t*dx+dt,2*x*dx+t*dt+2],[t,x], -[dt,dx],[1,0]); --- generic_bfct_and_gr :0.001sec(0.001796sec) -generic bfct : [[1,1],[s,1],[s-1,1]] -S0 : 1 -B_{S0} length : 2 --- fctr(BF) + base :0.001sec(0.0006731sec) -[[4*x*dx^2+6*dx,-4*t*x*dx^2-6*t*dx,2*x*dx+1,-2*t*x*dx,2*t*dx],[[1],[0]]] +[2449] marginal2abc([3,12],[6,3,3,3]); +[-3,[-3,-3,-3],4] + +[2450] tk_fd.ahvec_abc(-3,[-3,-3,-3],4,[[1,1/2,1/3,1/4],[1,1,1,1]]); +[[ 24041/1152 143551/11520 16973/1280 78827/5760 ],1/7776] + +[2451] expectation_abc(-3,[-3,-3,-3],4,[[1,1/2,1/3,1/4],[1,1,1,1]]); +[721230/173593,430653/173593,458271/173593,67566/24799] @end example -@node nk_restriction.integration_ideal,,, $B\$7$$@bL@(B --- -@comment --- @itemize$B!A(B@end itemize $B$O2U>r=q$-(B --- -@comment --- @bullet $B$O9uE@IU$-(B --- @itemize @bullet +@item 20150807 以降の asir では, bigfloat が pari ではなく mpfr を用いて計算される. +Todo, pari は ox_pari を呼び出すが, まだ ox_pari に未実装の機能が多くある. +区間演算への対応は行っていない. @item -@var{W} $B$NMWAG$OHsIi@0?t$G!"(B0 $BHVL\$NMWAG$+$iO"B3$7$F@5$N@0?t$,F~$i$J$1$l$P$J$i$J$$!#(B -($B$9$J$o$A!"(B@code{[1,1,0,0,0]} $B$O(B OK $B$@$,!"(B @code{[1,0,1,0,0]} $B$O%@%a(B) -@item -$B@5$N=E$_$r;}$DJQ?t$K$D$$$F$N@QJ,$r9T$&!#(B -$BNc$($P!"(B@var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} $B$G$"$l$P(B -x,y $B$K$D$$$F@QJ,$r9T$&!#(B +pari(floor,@var{arg1}), +pari(round,@var{arg1}), +pari(gamma,@var{arg1}) +は mpfr で pari を emulate しているので, 動作が異なる. +特に gamma は複素数の引数を受け取らない. +pari の floor は桁数が足りなくなるとエラーで終了したが, +この floor では setprec で指定した桁数以内なら正しく floor を戻す. +Todo, ox_pari を指定して呼び出す方法. @end itemize -$B0J2<$O!"%$%G%"%k(B -@tex -$I = D \cdot \{2 t \partial_x + \partial_t, t \partial_t + 2 x \partial_x + 2\} $ -@end tex -$B$N(B -@tex $t$ @end tex -$B$K$D$$$F$N@QJ,%$%G%"%k$r7W;;$7$?Nc$G$"$k!#(B([SST, Ex5.5.2, Ex5.5.6]) @example -[1431] nk_restriction.integration_ideal([2*t*dx+dt,t*dt+2*x*dx+2],[t,x], -[dt,dx],[1,0]); --- generic_bfct_and_gr :0.002999sec(0.002623sec) -generic bfct : [[1,1],[s,1],[s-1,1]] -S0 : 1 -B_{S0} length : 2 --- fctr(BF) + base :0.001sec(0.001091sec) --- integration_ideal_internal :0.002sec(0.001879sec) -[2*x*dx+1] -[1432] +[219] ctrl("bigfloat",1)$ +[220] setprec(100)$ +[221] pari(floor,1111111111111.1+1/10); +1111111111111 @end example +@table @t +@item 参照 +@ref{pari} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item $B$3$l$i$N4X?t$O(B OpenXM/src/asir-contrib/packages/src/nk_restriction.rr $B$GDj5A$5$l$F$$$k(B. nk_restriction.rr, 1.1--1.6 $B$r8+$h(B. +@item これらの大変更は 2015-08-03 より 08-07 の asir 合宿でおこなわれた. +まだ作業中. Todo, asirgui への対応. debug, ... +@item 変更をうけたソースコードは asir2000/builtin/bfaux.c, +asir2000/engine/bf.c, asir2000/builtin/parif.c 等多数. @end itemize - - -@comment ----------- $B0J2<$O8+K\(B. $B>C$9$J(B. @comment **************************************************************** -@comment --- $B"~"~"~"~(B $B0J2$N4X?t$K$D$$$F??;w$7$F5-=R$9$k(B. $B"~"~"~"~(B -@comment $B?7$7$$4X?t$N@bL@$r=q$/$?$a$N%F%s%W%l!<%H$G$"$k(B. $B>C$9$J(B. -@comment --- $B"~"~"~"~(B $B4X?t(B syz_pqr, xyz_stu $B$N@bL@(B $B"~"~"~"~(B -@comment --- $BJ#?t$N4X?t$r$^$H$a$F@bL@$9$kNc(B --- -@node xyz_pqr,,, $Bl9g$K;H$&(B --- +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- @table @t @item xyz_pqr(@var{arg1},@var{arg2}[,@var{flag}]) @itemx xyz_stu(@var{arg1},@var{arg2}) -:: xyz $B$K4X$9$kA`:n(B. +:: xyz に関する操作. @end table @table @var @item return -$B@0?t(B +整数 @item arg1, arg2 -$B@0?t(B +整数 @item flag -0 $B$^$?$O(B 1 +0 または 1 @end table @itemize @bullet -@item $B$3$N9`L\$O?7$7$$4X?t$N@bL@$r=q$/$?$a$N%F%s%W%l!<%H$G$"$k(B. $B>C$9$J(B. +@item この項目は新しい関数の説明を書くためのテンプレートである. 消すな. @item -@code{xyz_pqr()} $B$O(B, @var{arg1}, @var{arg2} $B$r(B pqr $B$9$k(B. +@code{xyz_pqr()} は, @var{arg1}, @var{arg2} を pqr する. @item -@var{flag} $B$,(B 0 $B$G$J$$$H$-(B, $B%b%8%e%i7W;;$r9T$&(B. +@var{flag} が 0 でないとき, モジュラ計算を行う. @item -@code{xyz_stu()} $B$O(B stu $B%"%k%4%j%:%`$rMQ$$$k(B. +@code{xyz_stu()} は stu アルゴリズムを用いる. @end itemize @example @@ -2745,22 +4466,22 @@ ChangeLog @end example @table @t -@item $B;2>H(B +@item 参照 @ref{xyz_abc} @end table -@comment --- ChangeLog $B$r=q$/(B. $BF05!(B. $B%=!<%9%3!<%I$N0LCV(B. $BJQ99F|;~(B $B$J$I(B CVS$B%5!<%P$r8+$k$?$a(B -@comment --- openxm $B$N30It$+$i$N4sM?$b=R$Y$k(B. Credit. +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. @noindent ChangeLog @itemize @bullet -@item $B$3$N4X?t$O(B 2004-3-1 $B$+$i(B 2004-3-14 $B$K$+$1$F(B $B%"%k%4%j%:%`(B xyz ($BO@J8(B - http://www.afo.org/xyz.pdf ) $B$rMQ$$$F=q$-D>$5$l$?(B. - $BJQ99$r$&$1$?%=!<%9%3!<%I$O(B xxxyy.rr, ppp.c $B$G$"$k(B. -@item $B$3$N4X?t$O(B 2000 $B:"$K$O$8$a$F$N%P!<%8%g%s$,=q$+$l$?(B. $B%=!<%9$O(B ppp.c $B$G$"$k(B. +@item この関数は 2004-3-1 から 2004-3-14 にかけて アルゴリズム xyz (論文 + http://www.afo.org/xyz.pdf ) を用いて書き直された. + 変更をうけたソースコードは xxxyy.rr, ppp.c である. +@item この関数は 2000 頃にはじめてのバージョンが書かれた. ソースは ppp.c である. @end itemize -@comment --- $B$*$^$8$J$$(B --- +@comment --- おまじない --- @node Index,,, Top @unnumbered Index @printindex fn @@ -2771,4 +4492,4 @@ ChangeLog @summarycontents @contents @bye -@comment --- $B$*$^$8$J$$=*$j(B --- +@comment --- おまじない終り ---