2011-12-08 37 views
5

Actualmente tengo una gran expresión con muchos términos de la formaSimplificar valor absoluto en Mathematica

Abs[-2 b + 2 d1 m + l Tan[\[Theta]]] 

me conocerán, desde la geometría de mi problema, que

-2 b + 2 d1 m + l Tan[\[Theta]] > 0 

Sin embargo, cuando intento para simplificar mi expresión,

Simplify[Abs[-2 b + 2 d1 m + l Tan[\[Theta]]], -2 b + 2 d1 m + l Tan[\[Theta]] > 0] 

acabo de volver

Abs[-2 b + 2 d1 m + l Tan[\[Theta]]] 

Cómo puedo hacer que Mathematica simplificar el valor absoluto innecesario?

EDIT 1

La expresión completa que estoy tratando de simplificar es

-(1/(2 (m - Tan[\[Theta]]))) 
Sqrt[1 + m^2] (B2 Sqrt[(-2 b + 2 d1 m + l Tan[\[Theta]])^2] + 
    B4 Sqrt[(-2 b + 2 d2 m + l Tan[\[Theta]])^2] + 
    B5 Sqrt[(2 b + 2 d3 m + l Tan[\[Theta]])^2] + 
    B7 Sqrt[(2 b + 2 d4 m + l Tan[\[Theta]])^2] + 
    B1 Sqrt[(2 b - 2 (d1 + l) m + l Tan[\[Theta]])^2] + 
    B3 Sqrt[(2 b - 2 (d2 + l) m + l Tan[\[Theta]])^2] + 
    B6 Sqrt[(-2 (b + (d3 + l) m) + l Tan[\[Theta]])^2] + 
    B8 Sqrt[(-2 (b + (d4 + l) m) + l Tan[\[Theta]])^2]) 

Los términos que se enfrentaron en cada uno de los radicales es conocido por ser un número real positivo.

+2

La expr ahora no contiene un ABS - ¿es correcto? –

+0

Eso es correcto.He incluido los términos originales de Sqrt, que simplificarán se reducirán a Abs. – user640078

Respuesta

3

Dado que los términos son todos conocidos para ser real y positiva, elevar al cuadrado y tomando la raíz cuadrada sólo le dará el mismo número. Por lo tanto, se podría hacer algo como

expr /. Sqrt[(x___)^2] :> x 

donde expr es su expresión gigante anteriormente.

+0

Como una cuestión práctica, he hecho lo que sugiere. Sin embargo, tenía curiosidad por saber si había una mejor manera de manejarlo, en caso de que alguna vez obtuviera una expresión mixta donde solo algunos de los radicales pueden cancelarse de manera segura. – user640078

+0

más uno +1 para gigante – Faq

3

Aquí hay dos ideas:

1)

Simplify[Abs[-2 b + 2 d1 m + l Tan[\[Theta]]], 
0 < \[Theta] < \[Pi]/2 && l > 0 && 2 d1 m > 0 && -2 b > 0] 

2)

f[e_] := 100 Count[e, _Abs, {0, Infinity}] + LeafCount[e] 
Simplify[Abs[-2 b + 2 d1 m + l Tan[\[Theta]]], -2 b + 2 d1 m + 
    l Tan[\[Theta]] > 0, ComplexityFunction -> f] 

Th función de complejidad f haga a Abs más caro que el Times. Ver documentar para simplificar. ¿Eso ayuda?

+0

Ambas soluciones trabajaron en el término de forma aislada, pero no cuando formaba parte de la expresión completa. Voy a agregar la expresión completa a mi pregunta para poder aclarar las cosas. – user640078

1

Si sólo desea eliminar instancias específicas de valor absoluto, se puede hacer algo en este sentido:

Clear[removeAbs] 
removeAbs[expr_, r_] := expr /. {Sqrt[r^2] :> r, Abs[r] :> r} 

De esa manera sólo elimina el valor absoluto de cualquier expresión que especifique:

In: removeAbs[Abs[x] + Abs[y], x] 
Out: x + Abs[y] 

voy a ver si puedo encontrar una solución mejor aspecto que esto.

1

Estoy constantemente estimulado por cosas como Abs[a]^2, y cosas como usar Assuming con a\[Element]Reals no ayuda.

me encontré con un poco de ayuda aquí WolframMathWorld - Absolute Square con
ComplexExpand[Abs[a]^2, TargetFunctions -> {Conjugate}], pero a veces se sigue devolviendo cosas por el estilo Conjugate[Sqrt[a^2 + b^2]] y he encontrado envolver una segunda ComplexExpand (sin parámetros) en torno a eso ayuda.

Cuestiones relacionadas