home *** CD-ROM | disk | FTP | other *** search
-
- (* ****************************************************************
- *
- * Expand.m
- *
- **************************************************************** *)
-
- Begin["System`"]
-
- Unprotect[ExpandAll,ExpandDenominator,ExpandNumerator,PowerExpand]
-
- ExpandAll::usage="ExpandAll[expr] expands out all products and integer powers
- in any part of expr. ExpandAll[expr, patt] avoids expanding parts of expr
- which do not contain terms matching the pattern patt."
-
- ExpandDenominator::usage="ExpandDenominator[expr] expands out products
- and powers that appear as denominators in expr."
-
- ExpandNumerator::usage="ExpandNumerator[expr] expands out products and
- powers that appear in the numerator of expr."
-
- PowerExpand::usage="PowerExpand[expr] expands nested powers, powers of
- products, logarithms of powers, and logarithms of products.
- PowerExpand[expr, {x1, x2, ...}] expands expr with respect to the x1.
- Use PowerExpand with caution because PowerExpand does not pay attention
- to branch cuts."
-
- Begin["System`Private`"]
-
- ExpandAll[input_,options___]:=
- MapAll[Expand[ExpandDenominator[#,options],options]&,input]
-
- ExpandDenominator[input_,options___]:=
- If[SameQ[Head[input],Plus],
- Map[ExpandDenominator[#,options]&,input],
- Numerator[input]/Expand[Denominator[input],options]]
-
- ExpandNumerator[input_,options___]:=
- If[SameQ[Head[input],Plus],
- Map[ExpandNumerator[#,options]&,input],
- Expand[Numerator[input],options]/Denominator[input]]
-
- PowerExpand[expr_]:=
- expr//.{(a_*b_)^c_:>a^c*b^c,
- (a_^b_)^c_:>a^(b*c),
- Log[a_^b_]:>b*Log[a],
- Log[a_*b_]:>Log[a]+Log[b],
- Log[Rational[a_,b_]]:>Log[a]-Log[b]}
-
- PowerExpand[expr_, {}] := expr
-
- PowerExpand[expr_, {a_}]:=
- expr//.{(w_ a^k_.)^m_ :> w^m a^(k m),
- (a^k_)^m_ :> a^(k m),
- Log[w_ a^k_.] :> k Log[a] + Log[w],
- Log[ a^k_ ] :> k Log[a],
- Log[Rational[w_,b_]]:>Log[w]-Log[b]}
-
- PowerExpand[expr_, {a_,r__}]:=
- PowerExpand[PowerExpand[expr,{a}], {r}]
-
- PowerExpand[expr_, a_]:= PowerExpand[expr, {a}]
-
- PowerExpand[args___] := $Failed /;
- Message[General::argt, PowerExpand, Length[{args}], 1, 2]
-
- End[]
-
- Protect[ExpandAll, ExpandDenominator, ExpandNumerator]
- Attributes[PowerExpand] = {Protected, ReadProtected}
-
- End[]
-
-