Annotation of OpenXM/src/asir-contrib/packages/doc/yang/yang_tutorial-ja.tex, Revision 1.1
1.1 ! ohara 1: %#!platex
! 2: % $OpenXM$
! 3: \documentclass{jarticle}
! 4: %\usepackage{amsmath}
! 5: \title{Yang Tutorial}
! 6: \author{Katsuyoshi OHARA}
! 7: \begin{document}
! 8:
! 9: \maketitle
! 10:
! 11: \section{yang とは}
! 12:
! 13: yang ではオイラー微分演算子, shift operator, q-shift operator からなる環
! 14: での計算を行う Risa/Asir のパッケージです. 計算する前に
! 15: \verb|yang.define_ring| あるいはその変種を用いて, 必ず環を定義します.
! 16: 同時に扱える環はひとつだけですが, \verb|yang.define_ring| を呼び出すと,
! 17: 以前の環の定義はスタックにプッシュされるため, \verb|yang.define_ring| と
! 18: \verb|yang.pop_ring| で挟むことで, サブルーチン的な計算を実現することが
! 19: できます.
! 20:
! 21: yang でできる計算は,グレブナ基底, 正規形, 0次元イデアルのランク, Pfaff
! 22: 形式などです. またグレブナ基底は有理関数体係数で計算します.
! 23:
! 24: \section{Appell's $F_1$ を計算してみる.}
! 25:
! 26: ここでは, オイラー微分演算子からなる環を定義し, 超幾何方程式系 $F_1$ の
! 27: グレブナ基底を計算してみます. 実はオイラー微分演算子のみを含む場合には,
! 28: \verb|yang_D.rr| を使ったほうが高速になります.
! 29:
! 30: \begin{verbatim}
! 31: ohara:~> asir
! 32: [1] load("yang.rr");
! 33: [2] yang.define_ring([x1,x2]);
! 34: \end{verbatim}
! 35:
! 36: 環として, $R=K(x_1,x_2)\langle \theta_1, \theta_2\rangle$ が定義
! 37: されました($\theta_i = x_i\partial_i$). 環の元を定義しましょう.
! 38:
! 39: \begin{verbatim}
! 40: [3] S1=yang.operator(x1);
! 41: <<1,0>>
! 42: [4] S2=yang.operator(x2);
! 43: <<0,1>>
! 44: \end{verbatim}
! 45:
! 46: $S_1 = \theta_1, S_2 = \theta_2$ となります.
! 47:
! 48: 演算子の内部表現は分散多項式になっていますので, そのままでは
! 49: $R'=K[x_1,x_2]\langle \theta_1, \theta_2\rangle$ の元しか表せず, $R$ の
! 50: 元は表現できません. したがって, $f \in R'$ と $q \in K[x_1,x_2]$ の対
! 51: \verb|[F,Q]| で $R$ の元 $(1/q)f$ を表します.
! 52:
! 53: さらに, $R$ における項順序は asir の分散多項式の項順序に一致します. 既
! 54: 定値は, 全次数逆辞書式順序です. 順序を変更して Groeber 基底を計算したい
! 55: 場合には, 環の元を定義する前に dp\_ord で順序を変更しておくべきです.
! 56:
! 57: \begin{verbatim}
! 58: [5] S=S1+S2;
! 59: <<0,1>>+<<1,0>>
! 60: \end{verbatim}
! 61:
! 62: $S = S_1 + S_2$ です. $R'$ における和は, 通常の $+$ で書くことができます.
! 63:
! 64: \begin{verbatim}
! 65: [6] L1 = yang.multi(S1,S+c-1) - x1*yang.multi(S1+b1,S+a);
! 66: [7] L2 = yang.multi(S2,S+c-1) - x2*yang.multi(S2+b2,S+a);
! 67: \end{verbatim}
! 68:
! 69: $L_1 = S_1 (S + c-1) - x_1 (S_1 + b_1)(S+a)$ です. $R'$ における演算子
! 70: の積は \verb|yang.multi| で計算します. ただし, $K[x_1,x_2]$ の元はそのま
! 71: まかけても構いません. いまのところ, \verb|yang.multi| の引数に使えるの
! 72: は$R'$ の元のみです.
! 73:
! 74: \begin{verbatim}
! 75: [8] G = yang.buchberger([L1,L2]);
! 76: [[(-x2^2+(x1+1)*x2-x1)*<<0,2>>+((b2*x1-b2)*x2)*<<1,0>>
! 77: +((-a-b2)*x2^2+((a-b1+b2)*x1+c-1)*x2+(-c+b1+1)*x1)*<<0,1>>
! 78: +(-b2*a*x2^2+b2*a*x1*x2)*<<0,0>>,-x2^2+(x1+1)*x2-x1],
! 79: [(-x2+x1)*<<1,1>>+(-b2*x2)*<<1,0>>+(b1*x1)*<<0,1>>,-x2+x1],
! 80: [((-x1+1)*x2+x1^2-x1)*<<2,0>>+
! 81: (((-a-b1+b2)*x1+c-b2-1)*x2+(a+b1)*x1^2+(-c+1)*x1)*<<1,0>>
! 82: +(-b1*x1*x2+b1*x1)*<<0,1>>
! 83: +(-b1*a*x1*x2+b1*a*x1^2)*<<0,0>>,(-x1+1)*x2+x1^2-x1]]
! 84: \end{verbatim}
! 85:
! 86: $R$ のイデアル $I=\{ L_1, L_2 \}$ のグレブナ基底 $G$ を計算します.
! 87: $I$ は \verb|[[L1,1],[L2,1]]| のように表すこともできます. 計算結果は
! 88: \begin{eqnarray*}
! 89: G = &\biggl\{
! 90: &
! 91: \frac{t_1 S_2^2+(b_2 x_1-b_2) x_2 S_1
! 92: + t_2 S_2
! 93: +(-b_2 a x_2^2+b_2 a x_1 x_2)}{-x_2^2+(x_1+1) x_2-x_1},\\
! 94: &&\frac{(-x_2+x_1) S_1 S_2 + (-b_2 x_2) S_1 + b_1 x_1 S_2}{-x_2+x_1},\\
! 95: &&\frac{t_3 S_1^2 +t_4 S_1
! 96: + (-b_1 x_1 x_2+b_1 x_1 ) S_2
! 97: + (-b_1 a x_1 x_2+b_1 a x_1^2)}{(-x_1+1) x_2+x_1^2-x_1}
! 98: \biggr\}
! 99: \end{eqnarray*}
! 100: を意味します.
! 101: ここで,
! 102: \begin{eqnarray*}
! 103: t_1 &=& -x_2^2+(x_1+1) x_2-x_1 \\
! 104: t_2 &=& (-a-b_2) x_2^2+((a-b_1+b_2) x_1+c-1) x_2+(-c+1+b_1) x_1 \\
! 105: t_3 &=& (-x_1+1) x_2+x_1^2-x_1 \\
! 106: t_4 &=& ((-a-b_1+b_2) x_1+c-b_2-1) x_2+(a+b_1) x_1^2+(-c+1) x_1
! 107: \end{eqnarray*}
! 108: つまり, 計算結果は $R$ の元のリストです.
! 109: 標準単項式は
! 110: \begin{verbatim}
! 111: [9] yang.stdmon(G);
! 112: [(1)*<<1,0>>,(1)*<<0,1>>,(1)*<<0,0>>]
! 113: \end{verbatim}
! 114: で求まります.
! 115: よって $I$ のランクは 3 です.
! 116:
! 117: グレブナ基底が求まったので, $R$ の元 $t=(x_2-x_1)\theta_1^2$ の
! 118: 正規形を求めましょう.
! 119: これには \verb|yang.nf| を用います.
! 120: \begin{verbatim}
! 121: [10] T=(x2-x1)*S1*S1;
! 122: (x2-x1)*<<2,0>>
! 123: [11] yang.nf(T,G);
! 124: [(((-a-b1+b2)*x1+c-b2-1)*x2+(a+b1)*x1^2+(-c+1)*x1)*<<1,0>>
! 125: +(-b1*x1*x2+b1*x1)*<<0,1>>+(-b1*a*x1*x2+b1*a*x1^2)*<<0,0>>,x1-1]
! 126: \end{verbatim}
! 127: つまり計算結果は $\mathrm{mod}\ I$ で
! 128: \begin{eqnarray*}
! 129: t &\equiv&
! 130: \frac{((-a-b_1+b_2) x_1+c-b_2-1)x_2+(a+b_1)x_1^2+(-c+1) x_1}{x_1-1}\theta_1\\
! 131: && \qquad
! 132: + \frac{-b_1 x_1 x_2+b_1 x_1}{x_1-1}\theta_2
! 133: + \frac{-b_1 a x_1 x_2+b_1 a x_1^2}{x_1-1}
! 134: \end{eqnarray*}
! 135:
! 136: 次に $F_1$ の Pfaff 形式を計算しましょう.
! 137:
! 138: \begin{verbatim}
! 139: [10] S0 = yang.constant(1);
! 140: (1)*<<0,0>>
! 141: [11] Base=[S0,S1,S2];
! 142: [(1)*<<0,0>>,(1)*<<1,0>>,(1)*<<0,1>>]
! 143: [12] Pf=yang.pfaffian(Base,G);
! 144: [ [ 0 (1)/(x1) 0 ]
! 145: [ (-b1*a)/(x1-1)
! 146: (((-a-b1+b2)*x1+c-b2-1)*x2+(a+b1)*x1^2+(-c+1)*x1)/((x1^2-x1)*x2-x1^3+x1^2)
! 147: (-b1*x2+b1)/((x1-1)*x2-x1^2+x1) ]
! 148: [ 0 (-b2*x2)/(x1*x2-x1^2) (b1)/(x2-x1) ]
! 149: [ 0 0 (1)/(x2) ]
! 150: [ 0 (-b2)/(x2-x1) (b1*x1)/(x2^2-x1*x2) ]
! 151: [ (-b2*a)/(x2-1) (b2*x1-b2)/(x2^2+(-x1-1)*x2+x1)
! 152: ((-a-b2)*x2^2+((a-b1+b2)*x1+c-1)*x2+(-c+b1+1)*x1)/(x2^3+(-x1-1)*x2^2+x1*x2) ] ]
! 153: [13] length(Pf);
! 154: 2
! 155: [14] P1 = Pf[0];
! 156: [ 0 (1)/(x1) 0 ]
! 157: [ (-b1*a)/(x1-1)
! 158: (((-a-b1+b2)*x1+c-b2-1)*x2+(a+b1)*x1^2+(-c+1)*x1)/((x1^2-x1)*x2-x1^3+x1^2)
! 159: (-b1*x2+b1)/((x1-1)*x2-x1^2+x1) ]
! 160: [ 0 (-b2*x2)/(x1*x2-x1^2) (b1)/(x2-x1) ]
! 161: [15] P2 = Pf[1];
! 162: [ 0 0 (1)/(x2) ]
! 163: [ 0 (-b2)/(x2-x1) (b1*x1)/(x2^2-x1*x2) ]
! 164: [ (-b2*a)/(x2-1) (b2*x1-b2)/(x2^2+(-x1-1)*x2+x1)
! 165: ((-a-b2)*x2^2+((a-b1+b2)*x1+c-1)*x2+(-c+b1+1)*x1)/(x2^3+(-x1-1)*x2^2+x1*x2) ]
! 166: \end{verbatim}
! 167:
! 168: 計算を説明します.
! 169: ランクが 3 であることに注意します.
! 170: 基底を
! 171: \[
! 172: F =
! 173: \left(
! 174: \begin{array}{c}
! 175: f \\ S_1f \\ S_2 f
! 176: \end{array}
! 177: \right)
! 178: =
! 179: \left(
! 180: \begin{array}{c}
! 181: f_1 \\ f_2 \\ f_3
! 182: \end{array}
! 183: \right)
! 184: \]
! 185: ととり, $S_i f_j$ の正規形を計算することで Pfaff 形式を求めています.
! 186: \verb|Pf| は$3\times 3$-行列のリストで長さは $2$ です.
! 187: 結果は,
! 188: \[
! 189: \frac{\partial}{\partial x_1}
! 190: \left(\begin{array}{c} f_1 \\ f_2 \\ f_3\end{array}\right)
! 191: = P_1
! 192: \left(\begin{array}{c} f_1 \\ f_2 \\ f_3\end{array}\right),
! 193: \qquad
! 194: \frac{\partial}{\partial x_2}
! 195: \left(\begin{array}{c} f_1 \\ f_2 \\ f_3\end{array}\right)
! 196: = P_2
! 197: \left(\begin{array}{c} f_1 \\ f_2 \\ f_3\end{array}\right)
! 198: \]
! 199: ここで,
! 200: \begin{eqnarray*}
! 201: P_1 &=&
! 202: \pmatrix{
! 203: 0 & \frac{1}{x_1}& 0 \cr
! 204: \frac{-b_1 a}{x_1-1} &
! 205: \frac{((-a -b_1+ b_2) x_1+ c -b_2-1)
! 206: x_2+ (a+ b_1) x_1^2 + (-c+ 1) x_1}{(x_1^2 -x_1) x_2 -x_1^3 + x_1^2}
! 207: & \frac{-b_1 x_2+ b_1}{(x_1-1) x_2 -x_1^2 + x_1} \cr
! 208: 0& \frac{-b_2 x_2}{x_1 x_2-x_1^2} & \frac{b_1}{x_2-x_1} \cr
! 209: }
! 210: , \\
! 211: P_2 &=&
! 212: \pmatrix{
! 213: 0& 0& \frac{1}{x_2} \cr
! 214: 0& \frac{-b_2}{x_2-x_1}& \frac{b_1 x_1}{x_2^2 -x_1 x_2} \cr
! 215: \frac{-b_2 a}{x_2-1}& \frac{b_2 x_1-
! 216: b_2}{x_2^2 + (-x_1-1) x_2+ x_1}
! 217: &
! 218: \frac{(-a-b_2) x_2^2 + ((a -b_1+b_2) x_1+ c-1) x_2
! 219: + (-c+ b_1+ 1) x_1}{x_2^3 + (-x_1-1) x_2^2 + x_1 x_2} \cr
! 220: }
! 221: \end{eqnarray*}
! 222:
! 223: \section{$\mathcal{A}$-超幾何微分差分系を計算してみる}
! 224:
! 225: $\mathcal{A}$-超幾何微分差分系については専用の関数が用意されています.
! 226: まず行列 $A$ と パラメータベクトル $\beta$ が与えられたとき, オイラー微
! 227: 分演算子の形で方程式系を求める必要があります.
! 228:
! 229: \begin{verbatim}
! 230: [1] load("yang.rr");
! 231: [2] A=[[1,1,1],[0,1,2]];
! 232: [3] B=[s1,s2];
! 233: [4] GKZ=[A,B];
! 234: [[[1,1,1],[0,1,2]],[s1,s2]]
! 235: [5] yang.define_gkz_ring(GKZ);
! 236: [[x1,x2,x3,s1,s2],[0,0,0,1,1],[0,0,0,-1,-1]]
! 237: [6] E = yang.gkz(GKZ);
! 238: [[(1)*<<1,0,0,0,0>>+(1)*<<0,1,0,0,0>>+(1)*<<0,0,1,0,0>>+(-s1)*<<0,0,0,0,0>>,
! 239: (1)*<<0,1,0,0,0>>+(2)*<<0,0,1,0,0>>+(-s2)*<<0,0,0,0,0>>,
! 240: (1)*<<1,0,0,0,0>>+(-x1)*<<0,0,0,1,0>>,(-x2)*<<0,0,0,1,1>>+(1)*<<0,1,0,0,0>>,
! 241: (-x3)*<<0,0,0,1,2>>+(1)*<<0,0,1,0,0>>],[x1,x2,x3]]
! 242: \end{verbatim}
! 243: \verb|yang.define_gkz_ring| で微分差分環を定義する. 演算子の分散
! 244: 多項式表示のうち, 最初の 3 つは$x_i$ に関するオイラー微分演算子, あとの
! 245: ふたつは $s_i$ に関するシフト演算子である.
! 246:
! 247: \verb|yang.gkz| は
! 248: $\mathcal{A}$-超幾何微分差分系を出力する.
! 249: $E$ は $\mathcal{A}$-超幾何微分差分系である.
! 250:
! 251:
! 252: トーリックイデアルを計算するには次のようにする.
! 253: \begin{verbatim}
! 254: [7] IA=yang.gkz_toric(GKZ);
! 255: [(x1*x3)*<<0,2,0,0,0>>+(-x2^2)*<<1,0,1,0,0>>+(-x1*x3)*<<0,1,0,0,0>>]
! 256: \end{verbatim}
! 257:
! 258: $IA$ はトーリックイデアルの生成元をオイラー微分演算子の形で書いたもので
! 259: ある. 通常の偏微分演算子による表示を得るには,
! 260:
! 261: \begin{verbatim}
! 262: [8] yang.compute_toric_kernel(GKZ);
! 263: [[-_x2*_x0+_x1^2],[_x0,_x1,_x2,_t1,_t2]]
! 264: \end{verbatim}
! 265:
! 266: あるいは \verb|yang.gkz_toric_partial| も使える.
! 267:
! 268: \section{APIリファレンス}
! 269:
! 270: yang.define\_ring(Ring)
! 271:
! 272: 環を定義し、yang の内部データ構造を初期化する。
! 273: 以前の定義はスタックに積まれる。
! 274: 環定義における変数の並び順によって、変数順序が定まるので注意すること。
! 275:
! 276: Ring の 定義
! 277: \begin{verbatim}
! 278: Ring := '[' ( Vars | RingDef ) ']'
! 279: Vars := Variable [ , Variable ]*
! 280: RingDef := RingEl [ , RingEl ]*
! 281: RingEl := Keyword , '[' ( Vars | Pairs ) ']'
! 282: Keyword := "euler" | "differential" | "difference"
! 283: Pairs := Pair [ , Pair ]*
! 284: Pair := '[' Variable , ( Number | Variable ) ']'
! 285: \end{verbatim}
! 286:
! 287: yang.pop\_ring()
! 288:
! 289: 以前の環定義を取り出す。現在の環定義は破棄される。
! 290:
! 291: yang.operator(Variable)
! 292:
! 293: Variable に対応する演算子を取り出す。
! 294: 演算子は分散表現単項式で与えられる。
! 295:
! 296: yang.constant(Number)
! 297:
! 298: Number の環における表現を取り出す。この関数は yang.pfaffian で与える基底
! 299: を生成するのに有用である。
! 300:
! 301: yang.multi(DPolynomial, DPolynomial)
! 302:
! 303: 演算子同士の積を計算する。
! 304:
! 305: yang.nf(RDPolynomial, Ideal)
! 306: (別名: yang.reduction)
! 307:
! 308: RDPolynomial を Ideal で簡約する。Ideal が グレブナ基底になっている場合には、
! 309: 正規形になる。
! 310:
! 311: \begin{verbatim}
! 312: RDPolynomial := DPolynomial | '[' DPolynomial , Polynomial ']'
! 313: \end{verbatim}
! 314:
! 315: yang.buchberger(Ideal)
! 316:
! 317: \begin{verbatim}
! 318: Ideal := '[' RDPolynomial [ , RDPolynomial ]* ']'
! 319: \end{verbatim}
! 320:
! 321: イデアル Ideal のグレブナ基底を計算する。変数順序は
! 322: 環定義で定まり、項順序は分散表現多項式の表現に依存している。
! 323: したがって、入力 Ideal をつくるまえに項順序を定めておく必要がある。
! 324:
! 325: yang.stdmon(Ideal)
! 326:
! 327: グレブナ基底 Ideal の標準単項式を計算する。
! 328:
! 329: yang.pfaffian(Base, Ideal)
! 330:
! 331: グレブナ基底 Ideal の生成するイデアルの定める微分方程式系に対応する、
! 332: Pfaff 方程式系を求める。Pfaff 方程式系の解の基底には Base を用いる。
! 333: (この関数は要改良である!!)
! 334:
! 335: \begin{verbatim}
! 336: Base := '[' DMonomial [ , DMonomial ]* ']'
! 337: \end{verbatim}
! 338:
! 339: \end{document}
! 340:
! 341:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>