[BACK]Return to yang_tutorial-ja.tex CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-contrib / packages / doc / yang

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>