[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.2

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>