2012-03-07 7 views
5

Usando código FullSimplify[Abs[q + I*w], Element[{q, w}, Reals]] resultados enMathematica no calcula los valores absolutos de un número complejo con coeficientes reales

Abs[q + I w] 

y no

Sqrt[q^2 + w^2] 

¿Qué me falta?

P.S. Assuming[{q \[Element] Reals, w \[Element] Reals}, Abs[q + I*w]] tampoco funciona. Nota: Simplify[Abs[w]^2, Element[{q, w}, Reals]] y Simplify[Abs[I*q]^2, Element[{q, w}, Reals]] trabajo.

+0

No estoy en mi máquina de Mathematica ahora mismo, así que no puedo probar nada pero tengo una pregunta para ti. ¿En qué sentido es Sqrt [q^2 + w^2] más simple que Abs [q + Iw]? ¿Estás seguro de que tu expectativa de que FullSimplify haga esta 'simplificación' es una expectativa sensata? Además, al pensarlo un poco más, el título de su pregunta está en desacuerdo con su pregunta. –

+0

Puedo ejecutar el comando 'Series' en' Sqrt' pero no en 'Abs'. – shadesofdarkred

+0

Puede probar 'ComplexExpand'. Por ejemplo 'ComplexExpand [Abs [q + I w]]' produce 'Sqrt [q^2 + w^2]' – Heike

Respuesta

5

El problema es que lo que supone que es "Simple" y lo que MMA supone que es simple son dos cosas diferentes. Echar un vistazo a ComplexityFunction indica que MMA mira principalmente a "LeafCount". La aplicación de LeafCount da:

In[3]:= Abs[q + I w] // LeafCount 
Out[3]= 8 

In[4]:= Sqrt[q^2 + w^2] // LeafCount  
Out[4]= 11 

Así, MMA tiene en cuenta la forma Abs a ser mejor. (Uno puede explorar visualmente la simplicidad usando TreeForm o FullForm). Lo que debemos hacer es decirle a MMA que trate MMA como más caro. Para ello, tomamos el ejemplo de ComplexityFunction y escribir:

In[7]:= f[e_] := 100 Count[e, _Abs, {0, Infinity}] + LeafCount[e] 
FullSimplify[Abs[q + I w], Element[{q, w}, Reals], 
ComplexityFunction -> f] 

Out[8]= Sqrt[q^2 + w^2] 

a lo solicitado. Básicamente, le estamos diciendo a MMA a través del f[e] que el conteo de todas las partes del formulario Abs debe contar como 100 hojas.

EDIT: Como se mencionó por Brett, también puede hacer que sea más general, y el uso de _Complex como la regla que debe buscar:

In[20]:= f[e_] := 100 Count[e, _Complex, {0, Infinity}] + LeafCount[e] 
FullSimplify[Abs[q + I w], Element[{q, w}, Reals], 
ComplexityFunction -> f] 

Out[21]= Sqrt[q^2 + w^2] 
+0

Es cierto, y también es beneficioso para ser más general contra todos los números complejos. – tkott

4

sugiere emplear ComplexExpand, que le dice al sistema que todas las variables Son reales.

In[28]:= Abs[q + I*w] // ComplexExpand 

Out[28]= Sqrt[q^2 + w^2] 
-1

Estos comentarios no son útiles. Mathematica no evalúa números complejos, ya que en Abs[5+i20] no se modifica. El i está codificado correctamente. Hacer observaciones abstractas sobre "lo que es o no es simple" no está relacionado y es incorrecto. Hay una flotación que debería resultar, no algo de álgebra. N y ImportForm tampoco funcionan.

+0

minúscula 'i' es un símbolo indefinido. Pon "I" y usa "N" y obtendrás lo que esperas. Todo sin relación con esta pregunta. – agentp

Cuestiones relacionadas