Simplificando la parte imaginaria

Sep 10 2020

Estoy resolviendo el siguiente eigensystem y obtengo un resultado que parece de valor complejo. Espero que el resultado tenga 0 partes imaginarias, ¿alguien puede ver una manera de simplificarlo?

B = {{17/3, 1/3, 1/3, 1/3}, {1/3, 1/3, 1/3, 1/3}, {1/3, 1/3, 1/3, 1/
    3}, {1/3, 1/3, 1/3, 82/3}};
A = {{5/3, 0, 1/3, 0}, {0, 5/3, 0, 1/3}, {1/3, 0, 10/3, 0}, {0, 1/3, 
    0, 10/3}};
First /@ Eigensystem[{B, A}, 1]

Respuestas

5 BobHanlon Sep 11 2020 at 00:32
B = {{17/3, 1/3, 1/3, 1/3}, {1/3, 1/3, 1/3, 1/3}, {1/3, 1/3, 1/3, 1/3}, {1/3, 
    1/3, 1/3, 82/3}};
A = {{5/3, 0, 1/3, 0}, {0, 5/3, 0, 1/3}, {1/3, 0, 10/3, 0}, {0, 1/3, 0, 
    10/3}};

val = First /@ Eigensystem[{B, A}, 1];

Todos los valores son reales

valR = val // RootReduce

Element[valR, Reals]

(* True *)

valR // N

(* {8.33542, {0.0311157, -0.179391, 0.00719285, 1.}} *)

Sin embargo, si se representan con radicales, deben usar números complejos (ver Casus irreducibilis)

valR // ToRadicals

5 Bill Sep 10 2020 at 23:55
Chop[N[First /@ Eigensystem[{B, A}, 1]]]

devoluciones

{8.33542,{0.0311157,-0.179391,0.00719285,1.}}
4 BillWatts Sep 11 2020 at 17:24

Esto lleva mucho tiempo, pero funciona si solo quieres demostrar que la parte imaginaria es $0$.

B = {{17/3, 1/3, 1/3, 1/3}, {1/3, 1/3, 1/3, 1/3}, {1/3, 1/3, 1/3, 1/
    3}, {1/3, 1/3, 1/3, 82/3}};
A = {{5/3, 0, 1/3, 0}, {0, 5/3, 0, 1/3}, {1/3, 0, 10/3, 0}, {0, 1/3, 
    0, 10/3}};
result = First /@ Eigensystem[{B, A}, 1]

Im[result] // FullSimplify
(*{0,{0,0,0,0}}*)

Dejé que la computadora funcionara durante la noche para obtener la respuesta. Simplifyno llegué allí.

3 Wai-GaDHo Sep 11 2020 at 00:32

Pruebe la evaluación numérica con N [] de Mathematica

B = {{17/3, 1/3, 1/3, 1/3}, {1/3, 1/3, 1/3, 1/3}, {1/3, 1/3, 1/3, 
1/3}, {1/3, 1/3, 1/3, 82/3}};
A = {{5/3, 0, 1/3, 0}, {0, 5/3, 0, 1/3}, {1/3, 0, 10/3, 0}, {0, 1/3, 
0, 10/3}};
First /@ Eigensystem[{N@B, N@A}, 1]

El resultado debe ser

{8.33542, {0.0306117, -0.176485, 0.00707634, 0.983802}}
2 J.M.'sennui Sep 12 2020 at 05:55

Para aprovechar la respuesta de Bill, se puede usar CountRoots[]el polinomio característico del lápiz de matriz dado, si solo se desea mostrar que los valores propios son todos reales:

CountRoots[CharacteristicPolynomial[{B, A}, x], x]
   4

Luego se puede usar RootIntervals[]para encontrar corchetes para las raíces:

RootIntervals[CharacteristicPolynomial[{B, A}, x], Reals]
   {{{0, 0}, {0, 1}, {3, 4}, {4, 10}}, {{1}, {1}, {1}, {1}}}

Tenga en cuenta que la raíz en $x=0$estaba exactamente aislado. El valor propio más grande del lápiz correspondería a la última entrada con el intervalo de aislamiento$(4,10)$, que luego puedes donar a Solve[]:

Solve[CharacteristicPolynomial[{B, A}, x] == 0 && 4 < x < 10, x, 
      Cubics -> False, Quartics -> False]
   {{x -> Root[-19440 + 76898 #1 - 28959 #1^2 + 2401 #1^3 &, 3]}}

Bob ya ha mencionado casus irreducibilis ; Para resumir, si insiste en una representación radical, entonces el uso de una representación compleja es (a menudo) inevitable, incluso si todas las raíces son reales.