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