[BACK]Return to appell.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Doc

Annotation of OpenXM/src/kan96xx/Doc/appell.sm1, Revision 1.3

1.1       maekawa     1: %% appell.sm1, 1998,  11/8
1.3     ! takayama    2: % $OpenXM$
1.1       maekawa     3: /appell.version (2.981108) def
                      4: appell.version [(Version)] system_variable gt
                      5: { (This package requires the latest version of kan/sm1) message
                      6:   (Please get it from http://www.math.kobe-u.ac.jp/KAN) message
                      7:   error
                      8: } { } ifelse
                      9:
                     10: $appell.sm1 generates Appell hypergeometric differential equations (C) N.Takayama, 1998, 11/8, cf. rank in hol.sm1 $ message-quiet
                     11: /appell.verbose 0 def
                     12: /appell.b [1 3 2 11] def
                     13:
                     14: /appell1 {
                     15:   /arg1 set
                     16:   [/in-appell1 /typev /setarg /b /n /vv /i /a /c /bb /ans /ans2
                     17:   ] pushVariables
                     18:   [(CurrentRingp) (KanGBmessage)] pushEnv  %% push current global environment.
                     19:   [
                     20:     /aa arg1 def
                     21:     aa isArray { } { (array appell) message (appell1) usage error } ifelse
                     22:     /setarg 0 def
                     23:     aa { tag } map /typev set
                     24:     typev [ ArrayP ] eq
                     25:     {  /b aa 0 get def
                     26:        /setarg 1 def
                     27:     } { } ifelse
                     28:     typev [ ] eq
                     29:     {
                     30:        /b appell.b def
                     31:        /setarg 1 def
                     32:     } { } ifelse
                     33:     setarg { } { (Argument mismatch) message (appell1) usage error } ifelse
                     34:
                     35:     [(KanGBmessage) appell.verbose] system_variable
                     36:
                     37:     /n b length 2 sub def   %% Lauricella F_D^n
                     38:
                     39:     %% vv = [(x1) (x2)]
                     40:     [
                     41:       1 1 n {
                     42:         /i set
                     43:         (x) i gensym
                     44:       } for
                     45:     ] /vv set
                     46:
                     47:     %% b = [a  c  b_1 ... b_n  ]
                     48:     /a b 0 get def
                     49:     /c b 1 get 1 sub def
                     50:     /bb b rest rest def
                     51:
                     52:     [ 1 1 n {
                     53:         /i set
                     54:         [  [@@@.Dsymbol (x)] cat i gensym
                     55:            $ ($  1 n appell.euler c $) - ( $
                     56:            1 n appell.euler a $) ($ i i appell.euler bb i 1 sub get $ ) $] cat
                     57:       } for
                     58:     ] /ans set
                     59:     %% Euler-Darboux equations are necessary. Otherwise, the system is
                     60:     %% not holonomic for some parameters.
                     61:     [ 1 1 n {
                     62:         /i set
                     63:         i 1 add 1 n {
                     64:           /j set
                     65:           [$($ $x$ i gensym $-x$ j gensym $) $
                     66:            [@@@.Dsymbol (x)] cat i gensym $  $
                     67:            [@@@.Dsymbol (x)] cat j gensym
                     68:            $ - $  bb j 1 sub get $ $ [@@@.Dsymbol (x)] cat i gensym
                     69:            $ + $  bb i 1 sub get $ $ [@@@.Dsymbol (x)] cat j gensym
                     70:           ] cat
                     71:         } for
                     72:       }for
                     73:     ] /ans2 set
                     74:     /arg1 [ans ans2 join vv] def
                     75:   ] pop
                     76:   popEnv
                     77:   popVariables
                     78:   arg1
                     79: } def
                     80: (appell1 ) messagen-quiet
                     81:
                     82: [(appell1)
                     83:  [(param appell1 c)
                     84:   (array param; array c;)
                     85:   (appell1 returns the Lauricella function F_D(a,b_1, ..., b_n,c; x_1,...,x_n))
                     86:   (for the parameter << param >> = [a, c, b_1, ..., b_n].)
                     87:   (In case of n=2, the function is called the Appell function F_1.)
                     88:   (c = [ generators,  variables ])
                     89:   (Note that for a special set of parameters, the returned differential equation)
                     90:   (is not holonomic, e.g., [[1 2 3 4]] appell1 rank ::)
                     91:   (This happens because we do not included the Euler-Darboux operators)
                     92:   (in the return value of appell1. It will be included in a future.)
                     93:   (Example: [ [1 -4 -2 5 6] ] appell1 rank ::)
                     94:   (For details, see P.Appell et Kampe de Feriet, Fonction hypergeometrique)
                     95:   (et hyperspheriques -- polynomes d'Hermite, Gauthier-Villars, 1926.)
                     96:  ]
                     97: ] putUsages
                     98:
                     99: /appell4 {
                    100:   /arg1 set
                    101:   [/in-appell4 /typev /setarg /b /n /vv /i /a /c /bb /ans
                    102:   ] pushVariables
                    103:   [(CurrentRingp) (KanGBmessage)] pushEnv  %% push current global environment.
                    104:   [
                    105:     /aa arg1 def
                    106:     aa isArray { } { (array appell) message (appell4) usage error } ifelse
                    107:     /setarg 0 def
                    108:     aa { tag } map /typev set
                    109:     typev [ ArrayP ] eq
                    110:     {  /b aa 0 get def
                    111:        /setarg 1 def
                    112:     } { } ifelse
                    113:     typev [ ] eq
                    114:     {
                    115:        /b appell.b def
                    116:        /setarg 1 def
                    117:     } { } ifelse
                    118:     setarg { } { (Argument mismatch) message (appell4) usage error } ifelse
                    119:
                    120:     [(KanGBmessage) appell.verbose] system_variable
                    121:
                    122:     /n b length 2 sub def   %% Lauricella F_C^n
                    123:
                    124:     %% vv = [(x1) (x2)]
                    125:     [
                    126:       1 1 n {
                    127:         /i set
                    128:         (x) i gensym
                    129:       } for
                    130:     ] /vv set
                    131:
                    132:     %% b = [a  b  c_1 ... c_n ]
                    133:     /a b 0 get def
                    134:     /c b 1 get def
                    135:     /bb b rest rest def
                    136:
                    137:     [ 1 1 n {
                    138:         /i set
                    139:         [  [@@@.Dsymbol (x)] cat i gensym
                    140:            $ ($  i i appell.euler bb i 1 sub get 1 sub $) - ( $
                    141:            1 n appell.euler a $) ($ 1 n appell.euler c $ ) $] cat
                    142:       } for
                    143:     ] /ans set
                    144:     /arg1 [ans vv] def
                    145:   ] pop
                    146:   popEnv
                    147:   popVariables
                    148:   arg1
                    149: } def
                    150: (appell4 ) messagen-quiet
                    151:
                    152: [(appell4)
                    153:  [(param appell4 c)
                    154:   (array param; array c;)
                    155:   (appell4 returns the Lauricella function F_C(a,b, c_1, ..., c_n; x_1,...,x_n))
                    156:   (for the parameter << param >> = [a, c, b_1, ..., b_n].)
                    157:   (In case of n=2, the function is called the Appell function F_4.)
                    158:   (c = [ generators,  variables ])
                    159:   (Note that for a special set of parameters, the returned differential equation)
                    160:   (is not holonomic, e.g., [[1 2 3 4]] appell4 rank ::)
                    161:   (Example: [ [1 -4 -2 5 6] ] appell4 rank ::)
                    162:  ]
                    163: ] putUsages
                    164:
                    165:
                    166:
                    167: /appell.euler {
                    168:   /arg2 set
                    169:   /arg1 set
                    170:   [/n /i /n0] pushVariables
                    171:   [
                    172:     /n0 arg1 def
                    173:     /n arg2 def
                    174:     [ n0 1 n { /i set (x) i gensym  ( ) [@@@.Dsymbol (x)] cat i gensym  ( + ) } for ]  cat
                    175:     /arg1 set
                    176:   ] pop
                    177:   popVariables
                    178:   arg1
                    179: } def
                    180:
1.2       takayama  181: /appell2 {
                    182:   /arg1 set
                    183:   [/in-appell2 /typev /setarg /b /n /vv /i /a /c /bb /ans
                    184:   ] pushVariables
                    185:   [(CurrentRingp) (KanGBmessage)] pushEnv  %% push current global environment.
                    186:   [
                    187:     /aa arg1 def
                    188:     aa isArray { } { (array appell) message (appell2) usage error } ifelse
                    189:     /setarg 0 def
                    190:     aa { tag } map /typev set
                    191:     typev [ ArrayP ] eq
                    192:     {  /b aa 0 get def
                    193:        /setarg 1 def
                    194:     } { } ifelse
                    195:     typev [ ] eq
                    196:     {
                    197:        /b [1 [2 3] [4 5]] def
                    198:        /setarg 1 def
                    199:     } { } ifelse
                    200:     setarg { } { (Argument mismatch) message (appell2) usage error } ifelse
                    201:
                    202:     [(KanGBmessage) appell.verbose] system_variable
                    203:
                    204:     /n b 1 get length def   %% Lauricella F_A^n
                    205:
                    206:     %% vv = [(x1) (x2)]
                    207:     [
                    208:       1 1 n {
                    209:         /i set
                    210:         (x) i gensym
                    211:       } for
                    212:     ] /vv set
                    213:
                    214:     %% b = [a  [b_1 ... b_n]  [c_1 ... c_n] ]
                    215:     /a b 0 get def
                    216:     /c b 2 get def
                    217:     /bb b 1 get def
                    218:
                    219:     [ 1 1 n {
                    220:         /i set
                    221:         [  [@@@.Dsymbol (x)] cat i gensym
                    222:            $ ($  i i appell.euler c i 1 sub get 1 sub $) - ( $
                    223:            1 n appell.euler a $) ($ i i appell.euler bb i 1 sub get $ ) $] cat
                    224:       } for
                    225:     ] /ans set
                    226:     /arg1 [ans vv] def
                    227:   ] pop
                    228:   popEnv
                    229:   popVariables
                    230:   arg1
                    231: } def
                    232: (appell2 ) messagen-quiet
                    233: [(appell2)
                    234:  [(param appell2 c)
                    235:   (array param; array c;)
                    236:   (appell2 returns the Lauricella function F_A(a,b_1, ..., b_n, c_1, ..., c_n; x_1,...,x_n))
                    237:   (for the parameter << param >> = [a, [b_1, ..., b_n],[c_1, ..., c_n]].)
                    238:   (In case of n=2, the function is called the Appell function F_2.)
                    239:   (c = [ generators,  variables ])
                    240:   (Example: [ [1 [-4 -2] [5 6]] ] appell2 rank ::)
                    241:  ]
                    242: ] putUsages
                    243:
1.1       maekawa   244:
1.3     ! takayama  245: ( ) message-quiet ;

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