home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e032 / 3.ddi / FILES / INTEGRAT.PAK / TAYLORSE.M < prev    next >
Encoding:
Text File  |  1992-07-29  |  5.4 KB  |  154 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[1,var, InputTrig[f,x]//Expand,x ];
  20.           dg3 = dg2/.var->alfa;
  21.           If[ dg3=!= ComplexInfinity && dg3 =!= Indeterminate, 
  22.               dg2=dg3,
  23.               dg2 = CoefNotZeroTerm[
  24.                     PowerExpand2[LimitSum[Expand[dg2],var,alfa],{var}],
  25.               1,var,alfa] 
  26.             ],
  27.           dg3 = EvalTrig[1,var,InputTrig[f,x]//Expand,x];
  28.           dg2 = dg3/.var->alfa 
  29.        ];
  30.       On[Power::infy,Infinity::indet,General::dbyz,On::none]
  31.       ]; 
  32.     If[ cond === False, FailIntDiv, trigintegral=True; dg2 ]
  33.    ] 
  34.  
  35.  TaylorSeriesTrig[alfa_,a_,f_,oldf_,x_] := GGfunctions[alfa,1,oldf,x]
  36.  
  37.  NotZeroTerm[f_,n_,x_] :=
  38.   Module[ {q=0,i=0},
  39.    Off[ Series::serlim,Series::esss ];
  40.    While[ q===0,
  41.       q = Expand[Normal[Series[f,{x,0,n+i}]]];
  42.       i=i+2 ];
  43.    On[ Series::serlim,Series::esss ];
  44.    ExponentFirst[ q,x ] /; FreeQ[q,Series]
  45.  ]
  46.  
  47.  NotZeroTerm[f_,n_,x_] := False
  48.  
  49.  EvalTrig[done_,alfa_,f_Plus,x_] := Map[EvalTrig[done,alfa,#,x]&,f]
  50.  
  51.  EvalTrig[1,alfa_,f_. MeijerG[w__],x_] := EvalTrig[MeijerG[w],alfa,f,x]
  52.  
  53.  EvalTrig[1,alfa_,c_,x_] := 0/;FreeQ[c,x]
  54.  
  55.  EvalTrig[1,alfa_,c_. x_^n_.,x_] := 0/;FreeQ[c,x]
  56.  
  57.  EvalTrig[done_,alfa_,x_^n_. f_.,x_] := EvalTrig[done,alfa+n,f,x]
  58.  
  59.  EvalTrig[ MeijerG[ n_,p_,m_,q_,{k_,mult_. x_^dg_.}],alfa_,c_, x_ ] :=
  60.    c If[ NumberQ[dg] && dg < 0,
  61.         EvalTrig2[ 1-m,1-q,1-n,1-p,1/mult,alfa/(-dg),x ]/(-dg),
  62.         EvalTrig2[ n,p,m,q,mult,alfa/dg,x ]/dg ] /;
  63.     FreeQ[mult,x] && FreeQ[dg,x] && FreeQ[c,x]
  64.  
  65.  EvalTrig[ __ ] := FailInt
  66.  
  67.  EvalTrig2[ n_,p_,m_,q_,mult_,dg_,x_ ] := 
  68.      MultGamma[ dg + m ] MultGamma[ 1 - dg - n ] /
  69.     (MultGamma[ dg + p ] MultGamma[ 1 - dg - q ] mult^dg)
  70.  
  71.  ExponentFirst[p_Plus,x_] := Exponent[ First[ p ] ,x]
  72.  
  73.  ExponentFirst[p_,x_] := Exponent[ p,x ]
  74.  
  75.  LimitSum[ f_,n_,x_,s_] := x FailInt/;Not[FreeQ[f,FailInt]]
  76.  
  77.  LimitSum[ f_Plus,x_,s_] := Map[LimitSum[#,x,s]&,f]
  78.  
  79.  LimitSum[Times[v1___,Literal[HypergeometricPFQ][up_,low_,arg_],v2___],x_,s_] :=
  80.     (HypergeometricPFQ[up,low,arg]//.x->s) LimitSum[v1 v2,x,s]/;
  81.   And@@(Not[CondLim[#/.x->s]]&/@Join[up,low])
  82.  
  83.  LimitSum[Gamma[u_]^n_.,x_,s_] := 
  84.    LimitSum[Gamma[u+1]^n/u^n,x,s]/;CondLim[u//.x->s]  
  85.  
  86.  LimitSum[Times[v1___,Gamma[u_]^n_.,v2___],x_,s_] := 
  87.    LimitSum[v1 v2 Gamma[u+1]^n/u^n ,x,s]/;CondLim[u//.x->s]  
  88.  
  89.  LimitSum[Times[v1___,Gamma[u_,0,a_]^n_.,v2___],x_,s_] := 
  90.    LimitSum[Expand[v1 v2 (Gamma[u+1,0,a]/u + a^u E^(-a)/u)^n],x,s]/;
  91.  CondLim[u//.x->s]  
  92.  
  93.  LimitSum[Times[v1___,Gamma[u_,a_]^n_.,v2___],x_,s_] := 
  94.    LimitSum[Expand[v1 v2 (Gamma[u+1,a] + a^u E^(-a)/Gamma[u+1])^n],x,s]/;
  95.  CondLim[u//.x->s]  
  96.  
  97.  LimitSum[PolyGamma[k_,u_]^n_.,x_,s_] := 
  98.     LimitSum[Expand[(PolyGamma[k,u+1]-(-1)^k k! u^(-k-1))^n],x,s]/;
  99.   CondLim[u//.x->s] 
  100.  
  101.  LimitSum[Times[v1___,PolyGamma[k_,u_]^n_.,v2___],x_,s_] := 
  102.     LimitSum[Expand[v1 v2 (PolyGamma[k,u+1]-(-1)^k k! u^(-k-1))],x,s]/;
  103.   CondLim[u//.x->s] 
  104.  
  105.  LimitSum[Times[v1___,Hypergeometric[up_,low_,arg_],v2___],x_,s_] :=
  106.     (Hypergeometric[up,low,arg]//.x->s) LimitSum[v1 v2,x,s]/;
  107.   And@@(Not[CondLim[#/.x->s]]&/@Join[up,low])
  108.  
  109.  LimitSum[Times[v1___,Literal[Hypergeometric2F1][a_,b_,c_,arg_],v2___],x_,s_] :=
  110.     (Hypergeometric2F1[a,b,c,arg]//.x->s) LimitSum[v1 v2,x,s]/;
  111.   And@@(Not[CondLim[#/.x->s]]&/@{a,b,c})
  112.  
  113.  LimitSum[Times[v1___,Literal[Hypergeometric1F1][a_,b_,arg_],v2___],x_,s_] :=
  114.     (Hypergeometric1F1[a,b,arg]//.x->s) LimitSum[v1 v2,x,s]/;
  115.   And@@(Not[CondLim[#/.x->s]]&/@{a,b})
  116.  
  117.  LimitSum[Times[v1___,Literal[HypergeometricPFQ][up_,low_,arg_],v2___],x_,s_] :=
  118.    If[ FreeQ[low,x],
  119.     LimitSum[Expand[v1 v2 SeriesForHyperFun[up,low,arg,
  120.       Min[Select[up//.x->s,IntegerQ[#] && #<=0&]],x,s ]],x,s],
  121.     low FailInt]
  122.  
  123.  LimitSum[Times[v1___,Hypergeometric[up_,low_,arg_],v2___],x_,s_] :=
  124.    If[ FreeQ[low,x],
  125.     LimitSum[Expand[v1 v2 SeriesForHyperFun[up,low,arg,
  126.       Min[Select[up//.x->s,IntegerQ[#] && #<=0&]],x,s ]],x,s],
  127.    low FailInt]
  128.  
  129.  LimitSum[Times[v1___,Literal[Hypergeometric2F1][a_,b_,c_,arg_],v2___],x_,s_] :=
  130.    If[ FreeQ[c,x],
  131.     LimitSum[Expand[v1 v2 SeriesForHyperFun[{a,b},{c},arg,
  132.       Min[Select[{a,b}//.x->s,IntegerQ[#] && #<=0&]],x,s ]],x,s],
  133.     c FailInt]
  134.  
  135.  LimitSum[Times[v1___,Literal[Hypergeometric1F1][a_,b_,arg_],v2___],x_,s_] :=
  136.    If[ FreeQ[b,x],
  137.     LimitSum[Expand[v1 v2 SeriesForHyperFun[{a},{b},arg,
  138.       Min[Select[{a}//.x->s,IntegerQ[#] && #<=0&]],x,s ]],x,s],
  139.     b FailInt]
  140.  
  141.  LimitSum[f_,x_,s_] := f
  142.  
  143.  SeriesForHyperFun[up_,low_,arg_,k_Integer,x_,s_] :=
  144.     Sum[MultPochham[up,i] arg^i/((MultPochham[low,i]//.x->s) i!),
  145.     {i,0,k+1}]
  146.  
  147.  SeriesForHyperFun[up_,low_,arg_,k_,x_,s_] :=
  148.     (HypergeometricPFQ[up,low,arg]//.x->s)
  149.  
  150.  SeriesForHyperFun[ __ ] := FailInt
  151.  
  152.  CondLim[u_] := IntegerQ[u] && u <= 0
  153.  
  154.