home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e031 / 3.ddi / MATHZIP2 / STARTUP / INTEGRAT / TAYLORSE.M < prev    next >
Encoding:
Text File  |  1991-09-19  |  5.6 KB  |  161 lines

  1.  
  2. (*****************************************************************************
  3. *                 For the Trigonometric Integrand
  4. *
  5. ******************************************************************************)
  6.  
  7.  TaylorSeriesTrig[alfa_,{dg_,True},f_,oldf_,x_] :=
  8.    Module[ {s=s,c=c,var,dg2,dg3,cond},      
  9.     dg2 = Exponent[f//.{Sin[z_] :>0,Cos[z_] :>0},x ];
  10.     dg3 = Exponent[f//.{Sin[z_] :>s,Cos[z_] :>c},x];
  11.     dg3 = If[ dg3===-Infinity,0,dg3]; 
  12.     cond =Re[alfa] > -NotZeroTerm[f,dg 3,x] &&
  13.     If[ dg2===-Infinity, 
  14.         dg-dg3 > Re[alfa],
  15.         -Max[dg3- dg,dg2] > Re[alfa] ];
  16.     If[ cond =!= False, 
  17.       Off[Power::infy,Infinity::indet,General::dbyz,On::none];
  18.       If[ cond === True ,
  19.           dg2 = EvalTrig[var,f/.InputTrig,x ];
  20.           dg3 = dg2//.var->alfa;
  21.           If[ dg3=!= ComplexInfinity && dg3 =!= Indeterminate, 
  22.               dg2=dg3,
  23.               dg2 = CoefNotZeroTerm[
  24.                     LimitSum[Expand[dg2],var,alfa],1,var,alfa] 
  25.             ],
  26.           dg3 = EvalTrigD[var,f/.InputTrig,x];
  27.           dg2 = dg3//.var->alfa 
  28.        ];
  29.       On[Power::infy,Infinity::indet,General::dbyz,On::none]
  30.       ]; 
  31.     If[ cond === False, FailIntDiv, dg2 ]
  32.    ] 
  33.  
  34.  TaylorSeriesTrig[alfa_,a_,f_,oldf_,x_] := GGfunctions[alfa,1,oldf,x]
  35.  
  36.  NotZeroTerm[f_,n_,x_] :=
  37.   Module[ {q=0,i=0},
  38.    Off[ Series::serlim,Series::esss ];
  39.    While[ q===0,
  40.       q = Expand[Normal[Series[f,{x,0,n+i}]]];
  41.       i=i+2 ];
  42.    On[ Series::serlim,Series::esss ];
  43.    ExponentFirst[ q,x ] /; FreeQ[q,Series]
  44.  ]
  45.  
  46.  NotZeroTerm[f_,n_,x_] := False
  47.  
  48.  EvalTrig[alfa_,f_,x_] := SimpPower[EvalTrig1[1,alfa,Expand[f],x]]
  49.  
  50.  EvalTrigD[alfa_,f_,x_] := 
  51.       EvalTrig1[1,alfa,Expand[f],x]//.GammaRule2//.GammaRule3
  52.  
  53.  EvalTrig1[done_,alfa_,f_Plus,x_] := Map[EvalTrig1[done,alfa,#,x]&,f]
  54.  
  55.  EvalTrig1[1,alfa_,f_. Sign[a_. x_^n_.] MeijerG[w__],x_] := 
  56.     (Sign[a]/.SimpSign) EvalTrig1[MeijerG[w],alfa,f,x]
  57.  
  58.  EvalTrig1[1,alfa_,f_. MeijerG[w__],x_] := EvalTrig1[MeijerG[w],alfa,f,x]
  59.  
  60.  EvalTrig1[1,alfa_,c_,x_] := 0/;FreeQ[c,x]
  61.  
  62.  EvalTrig1[1,alfa_,c_. x_^n_.,x_] := 0/;FreeQ[c,x]
  63.  
  64.  EvalTrig1[done_,alfa_,x_^n_. f_.,x_] := EvalTrig1[done,alfa+n,f,x]
  65.  
  66.  EvalTrig1[ MeijerG[ n_,p_,m_,q_,{k_,mult_. x_^dg_.}],alfa_,c_, x_ ] :=
  67.    c If[ NumberQ[dg] && dg < 0,
  68.         EvalTrig2[ 1-m,1-q,1-n,1-p,1/mult,alfa/(-dg),x ]/(-dg),
  69.         EvalTrig2[ n,p,m,q,mult,alfa/dg,x ]/dg ] /;
  70.     FreeQ[mult,x] && FreeQ[dg,x] && FreeQ[c,x]
  71.  
  72.  EvalTrig1[ __ ] := FailInt
  73.  
  74.  EvalTrig2[ n_,p_,m_,q_,mult_,dg_,x_ ] := 
  75.      MultGamma[ dg + m ] MultGamma[ 1 - dg - n ] /
  76.     (MultGamma[ dg + p ] MultGamma[ 1 - dg - q ] mult^dg)
  77.  
  78.  ExponentFirst[p_Plus,x_] := Exponent[ First[ p ] ,x]
  79.  
  80.  ExponentFirst[p_,x_] := Exponent[ p,x ]
  81.  
  82.  LimitSum[ f_,n_,x_,s_] := x FailInt/;Not[FreeQ[f,FailInt]]
  83.  
  84.  LimitSum[ f_Plus,x_,s_] := Map[LimitSum[#,x,s]&,f]
  85.  
  86.  LimitSum[Gamma[u_]^n_.,x_,s_] := 
  87.    LimitSum[Gamma[u+1]^n/u^n,x,s]/;CondLim[u//.x->s]  
  88.  
  89.  LimitSum[Times[v1___,Gamma[u_]^n_.,v2___],x_,s_] := 
  90.    LimitSum[v1 v2 Gamma[u+1]^n/u^n ,x,s]/;CondLim[u//.x->s]  
  91.  
  92.  LimitSum[Times[v1___,Gamma[u_,0,a_]^n_.,v2___],x_,s_] := 
  93.    LimitSum[Expand[v1 v2 (Gamma[u+1,0,a]/u + a^u E^(-a)/u)^n],x,s]/;
  94.  CondLim[u//.x->s]  
  95.  
  96.  LimitSum[Times[v1___,Gamma[u_,a_]^n_.,v2___],x_,s_] := 
  97.    LimitSum[Expand[v1 v2 (Gamma[u+1,a] + a^u E^(-a)/Gamma[u+1])^n],x,s]/;
  98.  CondLim[u//.x->s]  
  99.  
  100.  LimitSum[PolyGamma[k_,u_]^n_.,x_,s_] := 
  101.     LimitSum[Expand[(PolyGamma[k,u+1]-(-1)^k k! u^(-k-1))^n],x,s]/;
  102.   CondLim[u//.x->s] 
  103.  
  104.  LimitSum[Times[v1___,PolyGamma[k_,u_]^n_.,v2___],x_,s_] := 
  105.     LimitSum[Expand[v1 v2 (PolyGamma[k,u+1]-(-1)^k k! u^(-k-1))],x,s]/;
  106.   CondLim[u//.x->s] 
  107.  
  108.  LimitSum[Times[v1___,HypergeometricPFQ[up_,low_,arg_],v2___],x_,s_] :=
  109.     (HypergeometricPFQ[up,low,arg]//.x->s) LimitSum[v1 v2,x,s]/;
  110.   And@@(Not[CondLim[#/.x->s]]&/@Join[up,low])
  111.  
  112.  LimitSum[Times[v1___,Hypergeometric[up_,low_,arg_],v2___],x_,s_] :=
  113.     (Hypergeometric[up,low,arg]//.x->s) LimitSum[v1 v2,x,s]/;
  114.   And@@(Not[CondLim[#/.x->s]]&/@Join[up,low])
  115.  
  116.  LimitSum[Times[v1___,Hypergeometric2F1[a_,b_,c_,arg_],v2___],x_,s_] :=
  117.     (Hypergeometric2F1[a,b,c,arg]//.x->s) LimitSum[v1 v2,x,s]/;
  118.   And@@(Not[CondLim[#/.x->s]]&/@{a,b,c})
  119.  
  120.  LimitSum[Times[v1___,Hypergeometric1F1[a_,b_,arg_],v2___],x_,s_] :=
  121.     (Hypergeometric1F1[a,b,arg]//.x->s) LimitSum[v1 v2,x,s]/;
  122.   And@@(Not[CondLim[#/.x->s]]&/@{a,b})
  123.  
  124.  LimitSum[Times[v1___,HypergeometricPFQ[up_,low_,arg_],v2___],x_,s_] :=
  125.    If[ FreeQ[low,x],
  126.     LimitSum[Expand[v1 v2 SeriesForHyperFun[up,low,arg,
  127.       Min[Select[up//.x->s,IntegerQ[#] && #<=0&]],x,s ]],x,s],
  128.     low FailInt]
  129.  
  130.  LimitSum[Times[v1___,Hypergeometric[up_,low_,arg_],v2___],x_,s_] :=
  131.    If[ FreeQ[low,x],
  132.     LimitSum[Expand[v1 v2 SeriesForHyperFun[up,low,arg,
  133.       Min[Select[up//.x->s,IntegerQ[#] && #<=0&]],x,s ]],x,s],
  134.    low FailInt]
  135.  
  136.  LimitSum[Times[v1___,Hypergeometric2F1[a_,b_,c_,arg_],v2___],x_,s_] :=
  137.    If[ FreeQ[c,x],
  138.     LimitSum[Expand[v1 v2 SeriesForHyperFun[{a,b},{c},arg,
  139.       Min[Select[{a,b}//.x->s,IntegerQ[#] && #<=0&]],x,s ]],x,s],
  140.     c FailInt]
  141.  
  142.  LimitSum[Times[v1___,Hypergeometric1F1[a_,b_,arg_],v2___],x_,s_] :=
  143.    If[ FreeQ[b,x],
  144.     LimitSum[Expand[v1 v2 SeriesForHyperFun[{a},{b},arg,
  145.       Min[Select[{a}//.x->s,IntegerQ[#] && #<=0&]],x,s ]],x,s],
  146.     b FailInt]
  147.  
  148.  LimitSum[f_,x_,s_] := f
  149.  
  150.  SeriesForHyperFun[up_,low_,arg_,k_Integer,x_,s_] :=
  151.     Sum[MultPochham[up,i] arg^i/((MultPochham[low,i]//.x->s) i!),
  152.     {i,0,k+1}]
  153.  
  154.  SeriesForHyperFun[up_,low_,arg_,k_,x_,s_] :=
  155.     (HypergeometricPFQ[up,low,arg]//.x->s)
  156.  
  157.  SeriesForHyperFun[ __ ] := FailInt
  158.  
  159.  CondLim[u_] := IntegerQ[u] && u <= 0
  160.  
  161.