Comment simplifier efficacement l'expression dans Power
Comment puis-je simplifier les trivialexpressions sous le Power?
Voici un exemple:
(z2p-z2p z3)^-ϵ
Le résultat attendu:
z2p^-ϵ (1 - z3)^-ϵ
Actuellement, j'essaie de regarder FullFormet de décider de la règle comme ci-dessous:
(z2p-z2p z3)^-ϵ /. Plus[x_,Times[-1,x_,y_]] -> x(1-y) //PowerExpand
Cependant, comment puis-je l'étendre à un cas général où il pourrait y avoir plusieurs termes liés à +-? Ou y a-t-il une meilleure façon de gérer?
ÉDITER::
Dans un scénario général, on aurait des facteurs multipliés par ce type de termes.
Exemple:
expr= ((1 - z2p)^-e (1 - z3)^-e z3^-e (z2p - z2p z3)^-e)/
( z2p (-1 + z3)^2 (1 - z2p + z2p z3))
Fondamentalement, comment devrait-on procéder pour simplifier / factoriser ces termes?
Réponses
Introduisons d'abord une fonction que j'utiliserai:
factorMinus[expr_] := Module[{}, (-1)*HoldForm[Evaluate[-expr]]]
Voici votre expression (je l'écris dans une notation simplifiée pour la rendre plus visible):
expr = (z2 - z2*z3)^-e;
Essaye ça:
MapAt[factorMinus, MapAt[Factor, expr, {1}], {1, 3}] //
PowerExpand // ReleaseHold
(* z2^-e (1 - z3)^-e *)
S'amuser!
À la lumière de la récente modification de la question, considérons un cas légèrement plus difficile de deux Powers:
test2 = (z2p - z2p z3)^-ϵ + (z2p1^2 - z2p1^2 z31^3)^-ϵ1
Définissez la fonction,
m[z1_, z2_] := Module[{fac}, fac = List @@ Factor[z1];
If[fac[[1]] < 0, fac[[1 ;; 2]] = -fac[[1 ;; 2]]]; Times @@ (fac^z2)]
ensuite
test2 /. z1_^z2_ :> m[z1, z2]
(* (-z2p)^-ϵ (-1 + z3)^-ϵ + (-z2p1^2)^-ϵ1 (-1 + z31)^-ϵ1 (1 + z31 + z31^2)^-ϵ1 *)
Notez qu'il existe une ambiguïté inhérente à ce processus, et même à la question elle-même, à savoir que faire avec un facteur global de -1. J'ai choisi de l'attacher au deuxième facteur, mais d'autres options sont possibles.