home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e032 / 3.ddi / FILES / PRELOAD.PAK / EXPAND.M < prev    next >
Encoding:
Text File  |  1992-07-29  |  2.3 KB  |  74 lines

  1.  
  2. (* ****************************************************************
  3. *
  4. *     Expand.m
  5. *
  6. **************************************************************** *)
  7.  
  8. Begin["System`"]
  9.  
  10. Unprotect[ExpandAll,ExpandDenominator,ExpandNumerator,PowerExpand]
  11.  
  12. ExpandAll::usage="ExpandAll[expr] expands out all products and integer powers
  13. in any part of expr. ExpandAll[expr, patt] avoids expanding parts of expr
  14. which do not contain terms matching the pattern patt."
  15.  
  16. ExpandDenominator::usage="ExpandDenominator[expr] expands out products
  17. and powers that appear as denominators in expr."
  18.  
  19. ExpandNumerator::usage="ExpandNumerator[expr] expands out products and
  20. powers that appear in the numerator of expr."
  21.  
  22. PowerExpand::usage="PowerExpand[expr] expands nested powers, powers of
  23. products, logarithms of powers, and logarithms of products.
  24. PowerExpand[expr, {x1, x2, ...}] expands expr with respect to the x1.
  25. Use PowerExpand with caution because PowerExpand does not pay attention
  26. to branch cuts."
  27.  
  28. Begin["System`Private`"]
  29.  
  30. ExpandAll[input_,options___]:=
  31.   MapAll[Expand[ExpandDenominator[#,options],options]&,input]
  32.  
  33. ExpandDenominator[input_,options___]:=
  34.   If[SameQ[Head[input],Plus],
  35.      Map[ExpandDenominator[#,options]&,input],
  36.      Numerator[input]/Expand[Denominator[input],options]]
  37.  
  38. ExpandNumerator[input_,options___]:=
  39.   If[SameQ[Head[input],Plus],
  40.      Map[ExpandNumerator[#,options]&,input],
  41.      Expand[Numerator[input],options]/Denominator[input]]
  42.      
  43. PowerExpand[expr_]:=
  44.   expr//.{(a_*b_)^c_:>a^c*b^c,
  45.           (a_^b_)^c_:>a^(b*c),
  46.       Log[a_^b_]:>b*Log[a],
  47.       Log[a_*b_]:>Log[a]+Log[b],
  48.       Log[Rational[a_,b_]]:>Log[a]-Log[b]}
  49.  
  50. PowerExpand[expr_, {}] := expr
  51.  
  52. PowerExpand[expr_, {a_}]:=
  53.         expr//.{(w_ a^k_.)^m_ :> w^m a^(k m),
  54.                 (a^k_)^m_     :> a^(k m),
  55.                 Log[w_ a^k_.] :> k Log[a] + Log[w],
  56.                 Log[ a^k_ ]   :> k Log[a],
  57.                 Log[Rational[w_,b_]]:>Log[w]-Log[b]}
  58.  
  59. PowerExpand[expr_, {a_,r__}]:=
  60.         PowerExpand[PowerExpand[expr,{a}], {r}]
  61.  
  62. PowerExpand[expr_, a_]:= PowerExpand[expr, {a}]
  63.  
  64. PowerExpand[args___] := $Failed /;
  65.         Message[General::argt, PowerExpand, Length[{args}], 1, 2]
  66.  
  67. End[]
  68.  
  69. Protect[ExpandAll, ExpandDenominator, ExpandNumerator]
  70. Attributes[PowerExpand] = {Protected, ReadProtected}
  71.  
  72. End[]
  73.  
  74.