Como simplificar a expressão de forma eficiente dentro do Power

Sep 03 2020

Como posso simplificar as trivialexpressões sob o Power?

Aqui está um exemplo:

(z2p-z2p z3)^-ϵ

A saída esperada:

z2p^-ϵ (1 - z3)^-ϵ        

Atualmente, estou tentando analisar FullForme decidir a regra como a seguir:

(z2p-z2p z3)^-ϵ /. Plus[x_,Times[-1,x_,y_]] -> x(1-y) //PowerExpand

No entanto, como posso estendê-lo a um caso geral em que pode haver vários termos relacionados +-? Ou existe uma maneira melhor de lidar com isso?

EDITAR::

Em um cenário geral, seriam multiplicados fatores com esse tipo de termos.

Exemplo:

  expr= ((1 - z2p)^-e (1 - z3)^-e z3^-e (z2p - z2p z3)^-e)/
        ( z2p (-1 + z3)^2 (1 - z2p + z2p z3))

Basicamente, como se deve proceder para simplificar / fatorar esses termos?

Respostas

2 AlexeiBoulbitch Sep 03 2020 at 14:34

Vamos primeiro apresentar uma função que usarei:

factorMinus[expr_] := Module[{}, (-1)*HoldForm[Evaluate[-expr]]]

Aqui está sua expressão (eu escrevo em uma notação simplificada para torná-la mais visível):

expr = (z2 - z2*z3)^-e; 

Experimente isto:

MapAt[factorMinus, MapAt[Factor, expr, {1}], {1, 3}] // 
  PowerExpand // ReleaseHold



 (*  z2^-e (1 - z3)^-e  *)

Diverta-se!

1 bbgodfrey Sep 04 2020 at 00:10

À luz da recente edição da questão, considere um caso um pouco mais difícil de dois Powers:

test2 = (z2p - z2p z3)^-ϵ + (z2p1^2 - z2p1^2 z31^3)^-ϵ1

Defina a função,

m[z1_, z2_] := Module[{fac}, fac = List @@ Factor[z1]; 
    If[fac[[1]] < 0, fac[[1 ;; 2]] = -fac[[1 ;; 2]]]; Times @@ (fac^z2)]

Então

test2 /. z1_^z2_ :> m[z1, z2]
(* (-z2p)^-ϵ (-1 + z3)^-ϵ + (-z2p1^2)^-ϵ1 (-1 + z31)^-ϵ1 (1 + z31 + z31^2)^-ϵ1 *)

Note que existe uma ambigüidade inerente a este processo, e de fato na própria questão, a saber o que fazer com um fator geral de -1. Optei por anexá-lo ao segundo fator, mas outras opções são possíveis.