home *** CD-ROM | disk | FTP | other *** search
-
- (****************************************************************************
- * The Evaluation of G - Function
- *
- *****************************************************************************)
-
- IntGG[alfa_,Sign[a_. x_^dg_.] f_,x_] :=
- (Sign[a]/.SimpSign) IntGG[alfa,f,x]
-
- IntGG[alfa_,Sign[a1_. x_^dg1_.] Sign[a2_. x_^dg2_.] f_,x_] :=
- (Sign[a1] Sign[a2]/.SimpSign) IntGG[alfa,f,x]
-
- IntGG[ alfa_,const_ f_,x_] := const IntGG[ alfa,f,x ]/;
- FreeQ[const,x]
-
- IntGG[ alfa_,f1_ + f2_,x_ ] :=
- Module[ {r1,r2,var,answer},
- r1 = IntGG[var,f1,x]//.SimpSign1;
- If[ Not[FreeQ[r1,FailInt]], r2 = FailInt,
- If[ Not[FreeQ[r1,FailIntDiv]], r2 = FailIntDiv,
- r2 = IntGG[var,f2,x]//.SimpSign1 ]];
- If[ Not[FreeQ[r2,FailInt]], answer = var FailInt,
- If[ Not[FreeQ[r1,FailIntDiv]], answer = var FailIntDiv,
- Off[Power::infy,Infinity::indet,General::dbyz,On::none];
- answer = (r1+r2)//.var->alfa;
- answer =
- If[answer=!= ComplexInfinity && answer=!= Indeterminate,
- answer/.LogTrig,
- CoefNotZeroTerm[
- LimitSum[Expand[r1+r2],var,alfa],1,var,alfa] ];
- If[Not[FreeQ[answer,FailInt]],
- answer = IntGG[alfa,f1,x]+IntGG[alfa,f2,x],True];
- On[Power::infy,Infinity::indet,General::dbyz,On::none] ]];
- If[ FreeQ[answer,Indeterminate] && FreeQ[answer,ComplexInfinity],
- Expand[answer],
- var FailInt]
- ]
-
- IntGG[ alfa_,x_^deg_. f_,x_] := IntGG[ alfa+deg,f,x ] /;
- FreeQ[deg,x]
-
- IntGG[ alfa_,MeijerG[ n_,p_,m_,q_,{r_,mult_. x_^dg_.}], x_ ] :=
- If[ NumberQ[dg] && dg < 0,
- EvalSingleG[ 1-m,1-q,1-n,1-p,1/mult,r,alfa/(-dg),x ]/(-dg),
- EvalSingleG[ n,p,m,q,mult,r,alfa/dg,x ]/dg ] /;
- FreeQ[dg,x] && FreeQ[mult,x]
-
- IntGG[ alfa_,MeijerG[ n_,p_,m_,q_,arg_ ]^2,x_ ] :=
- ConvolutionGG[alfa,
- MeijerG[ n,p,m,q,arg ],
- MeijerG[ n,p,m,q,arg ], x ]
-
- IntGG[ alfa_,
- MeijerG[ n1_,p1_,m1_,q1_,arg1_ ] *
- MeijerG[ n2_,p2_,m2_,q2_,arg2_ ],x_ ] :=
- ConvolutionGG[alfa,
- MeijerG[ n1,p1,m1,q1,arg1 ],
- MeijerG[ n2,p2,m2,q2,arg2 ], x]
-
- IntGG[__] := Module[ {var}, var FailInt ]
-
- CoefNotZeroTerm[f_,n_,x_,s_] :=
- Module[ {var,g,q=0,i=0},
- g = f/.x->(var+s);
- Off[ Series::serlim,Series::esss ];
- While[ q===0,
- q = Normal[Series[g,{var,0,n+i}]]/.{
- Power[u_ v_,k_]:>Power[u,k] Power[v,k]};
- i=i+2 ];
- On[ Series::serlim,Series::esss ];
- Expand[q/.LogTrig/.{
- c_ var^k_Integer :> Together[c] var^k/;FreeQ[c,var] && k<0 }
- ]//.var->0]/;FreeQ[f,FailInt]
-
- CoefNotZeroTerm[f_,n_,x_,s_] := FailInt
-
- EvalSingleG[ n_,p_,m_,q_,mult_,r_,dg_,x_ ] :=
- (MultGamma[ dg + m ] MultGamma[ 1 - dg - n ] /
- (MultGamma[ dg + p ] MultGamma[ 1 - dg - q ] *
- If[Znak[mult],E^(I arg[mult] dg) (-mult)^dg,
- E^(I arg[mult] dg) mult^dg]))//.GammaRule1//.
- GammaRule6//.GammaRule5
-
-
- ConvolutionGG[alfa_,
- MeijerG[ n1_,p1_,m1_,q1_,{r1_,mult1_. x_^dg1_.}],
- MeijerG[ n2_,p2_,m2_,q2_,{r2_,mult2_. x_^dg2_.}], x_] :=
- If[ dg1 < 0,
- ConvolutionGG[ alfa,
- MeijerG[ 1-m1,1-q1,1-n1,1-p1,{r1,1/(mult1 x^dg1)} ],
- MeijerG[ n2,p2,m2,q2,{r2,mult2 x^dg2} ], x],
- If[ dg2 < 0,
- ConvolutionGG[ alfa,
- MeijerG[ 1-m2,1-q2,1-n2,1-p2,{r2,1/(mult2 x^dg2)} ],
- MeijerG[ n1,p1,m1,q1,{r1,mult1 x^dg1}] ,x],
- If[ dg2 == 1,
- EvalGG[ n2,p2,m2,q2,n1,p1,m1,q1,mult2,r2,mult1,r1,alfa,
- { Numerator[dg1],Denominator[dg1] },x ],
- EvalGG[ n1,p1,m1,q1,n2,p2,m2,q2,mult1,r1,mult2,r2,alfa/dg1,
- { Numerator[dg2/dg1],Denominator[dg2/dg1] },x ]/dg1
- ]]] /; FreeQ[mult1,x] && FreeQ[mult2,x] &&
- NumberQ[dg1] && NumberQ[dg2] && Im[dg1]==0 && Im[dg2]==0
-
- ConvolutionGG[__] := FailInt
-
- EvalGG[ n1_,p1_,m1_,q1_,n2_,p2_,m2_,q2_,sig_,r1_,
- omeg_,r2_,alf_,{l_,k_},x_ ] :=
- Module[ {ll2,ll1,bz,cz,mu,ro},
- ll2 = Length[n2]+Length[p2]-Length[m2]-Length[q2];
- ll1 = Length[n1]+Length[p1]-Length[m1]-Length[q1];
- bz = (Length[n1]+Length[m1]-Length[p1]-Length[q1])/2;
- cz = (Length[n2]+Length[m2]-Length[p2]-Length[q2])/2;
- mu = Apply[ Plus,Join[m2,q2,-n2,-p2] ] + 1 + ll2/2;
- ro = Apply[ Plus,Join[m1,q1,-n1,-p1] ] + 1 + ll1/2;
- If[Znak[sig],E^(-I arg[sig] alf) (-sig)^(-alf),
- E^(-I arg[sig] alf) sig^(-alf)]*
- k^mu l^( ro - alf ll1 - 1 ) /
- (2 Pi)^( bz (l-1) + cz (k-1) ) *
- MeijerReduce[
- Join[ Delta[k,n2], Delta[l,1-alf-m1] ],
- Join[ Delta[l,1-alf-q1], Delta[k,p2] ],
- Join[ Delta[k,m2], Delta[l,1-alf-n1] ],
- Join[ Delta[l,1-alf-p1], Delta[k,q2] ],
- If[Znak[sig],E^(-I arg[sig] l) (-sig)^(-l),
- E^(-I arg[sig] l) sig^(-l)] *
- If[Znak[omeg],E^(I arg[omeg] k) (-omeg)^k,
- E^(I arg[omeg] k) omeg^k] *
- k^(k ll2)/l^(l ll1)
- ]
- ]
-
- MeijerReduce[ n_,p_,m_,q_,arg_ ] :=
- Module[ {r1,r2},
- r1 = ReducePar[ m,p ];
- r2 = ReducePar[ q,n ];
- MeijerPrelimCaseGlog[ r2[[2]], r1[[2]], r1[[1]], r2[[1]], arg ]
- ]
-
- TheoremSlater[ n_,p_,m_,q_,z_ ] :=
- If[ SameQ[N[Abs[z /. {arg -> Arg} ]],1.],
- TheoremSlaterUnit[Length[m]+Length[n]-Length[p]-Length[q],
- Apply[Plus,Join[q,m,-p,-n]]+Length[n]-Length[q],n,p,m,q,z ],
- TheoremSlaterMid[Length[m]+Length[n]-Length[p]-Length[q],
- Apply[Plus,Join[q,m,-p,-n]]+Length[n]-Length[q],n,p,m,q,z ]
- ] /;
- Length[n] + Length[p] == Length[m] + Length[q]
-
- TheoremSlater[ n_,p_,m_,q_,arg_ ] := 0/;
- Length[n] + Length[p] < Length[m] + Length[q] &&
- Length[m] == 0
-
-
- TheoremSlater[ n_,p_,m_,q_,arg_ ] :=
- GfunToHyper[ 1-m,1-q,1-n,1-p,1/arg] /;
- Length[n] + Length[p] > Length[m] + Length[q]
-
-
- TheoremSlater[ n_,p_,m_,q_,arg_ ] :=
- GfunToHyper[ n,p,m,q,arg ]
-
- TheoremSlaterMid[ ll_,vu_,n_,p_,m_,q_,arg_ ] :=
- Module[ {sigA},
- If[ FreeQ[sigA = GfunToHyper[ n,p,m,q,arg ],FailInt],
- sigA,
- GfunToHyper[ Expand[1-m],Expand[1-q],
- Expand[1-n],Expand[1-p],1/arg] ] ]/;
- ll > 0 && Length[m] <= Length[n]
-
- TheoremSlaterMid[ ll_,vu_,n_,p_,m_,q_,arg_ ] :=
- Module[ {sigB},
- If[ FreeQ[sigB = GfunToHyper[ Expand[1-m],Expand[1-q],
- Expand[1-n],Expand[1-p],1/arg ], FailInt],
- sigB,
- GfunToHyper[ n,p,m,q,arg ] ] ]/;
- ll > 0 && Length[m] > Length[n]
-
- TheoremSlaterMid[ 0,vu_,n_,p_,m_,q_,arg_ ] :=
- Module[ {sigA,sigB},
- sigA = GfunToHyper[ n,p,m,q,arg ];
- sigB = GfunToHyper[ Expand[1-m],Expand[1-q],
- Expand[1-n],Expand[1-p],1/arg];
- If[ !FreeQ[sigA,FailInt] ,
- If[ Not[NumberQ[arg]] || arg >= 1, sigB, FailInt ],
- If[ !FreeQ[sigB,FailInt],
- If[ Not[NumberQ[arg]] || arg <= 1, sigA, FailInt ],
- Apply[ If,{arg >= 1,sigB, sigA} ] ]]
- ]/;
- NumberQ[vu] && Re[vu] < -1
-
- TheoremSlaterMid[ 0,vu_,n_,p_,m_,q_,arg_ ] :=
- If[ NumberQ[arg],
- SlaterMidNumArg[n,p,m,q,arg],
- SlaterMidNotNumArg[vu,n,p,m,q,arg] ]/;
- NumberQ[vu] && Re[vu] <= 0
-
- SlaterMidNumArg[ n_,p_,m_,q_,arg_ ] := GfunToHyper[ n,p,m,q,arg ]
- (* If[ Abs[arg] >1,
- GfunToHyper[ Expand[1-m],Expand[1-q],
- Expand[1-n],Expand[1-p],1/arg],
- GfunToHyper[ n,p,m,q,arg ] ]
- *)
- SlaterMidNotNumArg[ vu_,n_,p_,m_,q_,arg_ ] :=
- Module[{sigA,sigB},
- sigA = GfunToHyper[ n,p,m,q,arg ];
- sigB = GfunToHyper[ Expand[1-m],Expand[1-q],
- Expand[1-n],Expand[1-p],1/arg];
- If[ !FreeQ[sigA,FailInt], sigB,
- If[ !FreeQ[sigB,FailInt], sigA,
- Apply[ If,{arg >1, sigB,sigA}] ]]]
-
-
- TheoremSlaterMid[ 0,vu_,n_,p_,m_,q_,arg_ ] :=
- Module[{sigA,sigB},
- sigA = GfunToHyper[ n,p,m,q,arg ];
- sigB = GfunToHyper[ Expand[1-m],Expand[1-q],
- Expand[1-n],Expand[1-p],1/arg];
- If[sigA=!=0,sigA,sigB] ]/;
- Not[NumberQ[vu]]
-
- TheoremSlaterMid[ __ ] := FailInt
-
- TheoremSlaterUnit[ ll_,vu_,n_,p_,m_,q_,arg_ ] :=
- Module[ {sigA},
- If[ FreeQ[sigA = GfunToHyper[ n,p,m,q,arg ],FailInt],
- sigA,
- GfunToHyper[ Expand[1-m],Expand[1-q],
- Expand[1-n],Expand[1-p],1/arg] ] ]/;
- Length[m] <= Length[n] && ll>=0 &&
- (Not[NumberQ[vu]] || Re[vu] < -1+Length[m]-Length[p] ||
- Re[vu]<Length[m]-Length[p]&&arg=!=(-1)^(Length[m]-Length[p]) )
-
- TheoremSlaterUnit[ ll_,vu_,n_,p_,m_,q_,arg_ ] :=
- Module[ {sigB},
- If[ FreeQ[sigB = GfunToHyper[ Expand[1-m],Expand[1-q],
- Expand[1-n],Expand[1-p],1/arg ], FailInt],
- sigB,
- GfunToHyper[ n,p,m,q,arg ] ] ]/;
- Length[m] > Length[n] && ll>=0 &&
- (Not[NumberQ[vu]] || Re[vu] < -1+Length[m]-Length[p] ||
- Re[vu]<Length[m]-Length[p]&&arg=!=(-1)^(Length[m]-Length[p]) )
-
- TheoremSlaterUnit[ 0,-1,n_,p_,m_,q_,arg_ ] :=
- GfunToHyper[ n,p,m,q,arg ]/2 +
- GfunToHyper[ 1-m,1-q,1-n,1-p,arg]/2
-
- TheoremSlaterUnit[ __ ] := FailInt
-
- GfunToHyper[ n_,p_,{v1___,b_,v2___},{v3___,a_,v4___},arg_ ] :=
- (-1)^(a-b) GfunToHyper[ n,p,{a,v1,v2},{b,v3,v4},arg ] /;
- IntegerQ[Expand[a-b-1]] && NonNegative[Expand[a-b-1]]
-
-
- GfunToHyper[ n_,p_,m_,q_,arg_ ] := 0 /;
- Length[ m ] == 0
-
-
- GfunToHyper[ n_,p_,m_,q_,arg_ ] :=
- Block[ {HyperInteg},
- Sum[ FinalGfunToHyper[ m[[i]],n,p,Drop[ m,{i,i} ],q,arg],
- { i,1,Length[m] } ]] /;
- Not[LogarithmCase[ m] ]
-
-
- GfunToHyper[ n_,p_,m_,q_,arg_ ] :=
- MeijerLogCase[n,p,m,q,arg ] /;
- LogarithmCase[ m ]
-
-
- FinalGfunToHyper[ w_,n_,p_,m_,q_,arg_ ] :=
- SimpGamma[Expand[arg^Together[w] *
- MultGamma[1 + w - n] * MultGamma[m - w] *
- Hypergeometric[ Expand[1 + w - Join[n,p]],
- Expand[1 + w - Join[m,q]],
- arg (-1)^(Length[p]-Length[m]+1) ]/
- (MultGamma[p - w] MultGamma[1 + w - q] )]//.
- GammaRule1//.GammaRule4]
-
- (****************************************************************************
- * The G - Function Expressed as a Named Function
- *
- *****************************************************************************)
-
- MeijerPrelimCaseGlog[ n_,p_,m_,q_,arg_ ] :=
- Module[ {answer},
- answer = PowerExpandMy[
- MeijerPrelimCase[n,p,m,q,arg]];
- If[ FreeQ[answer,FailInt], answer,
- answer = PowerExpandMy[
- MeijerPrelimCase[1-m,1-q,1-n,1-p,1/arg]];
- If[ FreeQ[answer,FailInt], answer,
- TheoremSlater[ n,p,m,q,arg] ]]]
-
- MeijerPrelimCase[{},{},{a_,b_},{},arg_] :=
- 2 arg^((a+b)/2) BesselK[a-b,2 arg^(1/2)]
-
- MeijerPrelimCase[{},{},{a_},{b_},arg_] :=
- arg^((a+b)/2) BesselJ[a-b,2 arg^(1/2)]
-
- MeijerPrelimCase[{},{c_},{a_},{b_},arg_] :=
- arg^(c-1/2) Cos[(a-c+1/2) Pi]*
- BesselI[a-c+1/2,arg/2] Exp[arg/2]/Sqrt[Pi]/;
- Expand[2 c-a-b-1] === 0
-
- MeijerPrelimCase[{},{c_},{a_,b_},{},arg_] :=
- arg^(c-1/2) BesselK[a-c+1/2,arg/2]*
- Exp[-arg/2]/Sqrt[Pi]/;
- Expand[2 c-a-b-1] === 0
-
- MeijerPrelimCase[{a_},{},{b_,c_},{},arg_] :=
- (Gamma[b-a+1] Gamma[c-a+1] arg^b HypergeometricU[b+1-a,b+1-c,arg]/.
- HypergeometricURule)/;
- Not[CondLim[b-a+1]] && Not[CondLim[c-a+1]]
-
- MeijerPrelimCase[{c_},{},{a_,b_},{},arg_] :=
- arg^(c-1/2) Sqrt[Pi] BesselK[a-c+1/2,arg/2]*
- Exp[arg/2]/Cos[(a-c+1/2) Pi]/;
- Expand[2 c-a-b-1] === 0 && Denominator[a-c+1/2] =!= 2
-
- MeijerPrelimCase[{},{c_},{a_,b_},{d_},arg_] :=
- arg^((a+b)/2) BesselY[b-a,2 arg^(1/2)]/;
- c===d && Expand[a-c-1/2]===0
-
- MeijerPrelimCase[{},{c_},{a_,b_},{d_},arg_] :=
- arg^((a+b)/2) BesselY[a-b,2 arg^(1/2)]/;
- c===d && Expand[b-c-1/2]===0
- (*
- MeijerPrelimCase[{a_},{},{d_},{c_,b_},arg_] :=
- arg^((c+b)/2) StruveH[c-b,2 arg^(1/2)]/;
- a===d && Expand[a-c-1/2]===0
-
- MeijerPrelimCase[{a_},{},{d_},{c_,b_},arg_] :=
- arg^((c+b)/2) StruveH[b-c,2 arg^(1/2)]/;
- a===d && Expand[a-b-1/2]===0
- *)
- MeijerPrelimCase[{},{c_},{a_,b_},{d_},arg_] :=
- arg^d Sqrt[Pi] (BesselJ[d-a,arg^(1/2)]^2 -
- BesselJ[a-d,arg^(1/2)]^2)/(2 Sin[a Pi-d Pi])/;
- Expand[c-d-1/2]===0 && Expand[a+b-d 2]===0 &&
- (Not[NumberQ[a-d]] || Denominator[a-d]=!=1)
-
- MeijerPrelimCase[{},{c_},{a_,d_},{b_},arg_] :=
- -arg^(c-1/2) Sqrt[Pi] BesselJ[c-1/2-b,arg^(1/2)]*
- BesselY[c-1/2-b,arg^(1/2)]/;
- Expand[c-d-1/2]===0 && Expand[a+b-d 2]===0 ||
- Expand[c-a-1/2]===0 && Expand[d+b-a 2]===0
-
- MeijerPrelimCase[{c_},{},{a_,d_},{b_},arg_] :=
- 2 arg^(c-1/2) Sqrt[Pi] BesselI[c-1/2-b,arg^(1/2)]*
- BesselK[c-1/2-b,arg^(1/2)]/;
- Expand[c-d-1/2]===0 && Expand[a+b-d 2]===0 ||
- Expand[c-a-1/2]===0 && Expand[d+b-a 2]===0
-
- MeijerPrelimCase[{c_},{},{a_,b_},{d_},arg_] :=
- arg^d Pi^(3/2) (BesselI[d-a,arg^(1/2)]^2 -
- BesselI[a-d,arg^(1/2)]^2)/Sin[2 a Pi-2 d Pi]/;
- Expand[c-d-1/2]===0 && Expand[a+b-d 2]===0 &&
- (Not[NumberQ[a-d]] || Denominator[2 a-2 d]=!=1)
-
- MeijerPrelimCase[{c_},{},{d_},{a_,b_},arg_] :=
- arg^d Sqrt[Pi] BesselJ[a-d,arg^(1/2)]*
- BesselJ[b-d,arg^(1/2)]/;
- Expand[c-d-1/2]===0 && Expand[a+b-d 2]===0
-
- MeijerPrelimCase[{c_},{},{b_},{a_,d_},arg_] :=
- arg^(c-1/2) Sqrt[Pi] BesselJ[b-c+1/2,arg^(1/2)]^2/;
- Expand[c-d-1/2]===0 && Expand[a+b-d 2]===0 ||
- Expand[c-a-1/2]===0 && Expand[d+b-a 2]===0
-
- MeijerPrelimCase[{},{c_},{a_,d_,b_},{},arg_] :=
- 2 arg^(c-1/2) BesselK[b-c+1/2,arg^(1/2)]^2/Sqrt[Pi]/;
- Expand[c-d-1/2]===0 && Expand[a+b-d 2]===0 ||
- Expand[c-a-1/2]===0 && Expand[d+b-a 2]===0
-
- MeijerPrelimCase[{},{c_},{a_,d_,b_},{},arg_] :=
- 2 arg^(c-1/2) BesselK[a-c+1/2,arg^(1/2)]^2/Sqrt[Pi]/;
- Expand[c-b-1/2]===0 && Expand[d+a-b 2]===0
-
- MeijerPrelimCase[ n_,p_,m_,q_,arg_ ] := FailInt
-
- (****************************************************************************
- * Generalized Hypergeometric Functions
- *
- ****************************************************************************)
-
- Hypergeometric[ {___,0,___},lowpar_,arg_ ] := 1
-
- Hypergeometric[ {v1___,a_,v2___},{v3___,b_,v4___},arg_] :=
- Hypergeometric[ {v1,v2},{v3,v4}, arg ] /; Expand[a-b] === 0
-
- Hypergeometric[ uppar_,lowpar_,arg_ ] := HyperInteg[ uppar,lowpar,arg ]
-
- HyperInteg[ uppar_,lowpar_,z_ ] :=
- HypergeometricPFQ[ uppar,lowpar,z/.arg->Arg ]
-