Valores propios enteros en Matlab

Estoy tratando de escribir un programa de Matlab que decida si una matriz A dada (entera) tiene valores propios enteros y, si este es el caso, calcula los valores propios y sus multiplicidades. ¿Alguna idea de cómo empezar?

Respuestas (1)

Un primer paso es poder obtener el polinomio característico PAG con coeficientes enteros. Para ello, utiliza el algoritmo de Faddeev-Leverrier .

De hecho, con este algoritmo, puede mantener valores enteros durante todo el tiempo porque utiliza trazas de potencias de su matriz. A .

Por supuesto, el tamaño de A no debe ser demasiado grande; de lo contrario, Matlab cambiará a números de "coma flotante" en un paso determinado...

Ahora, para las raíces. Como las raíces suelen estar dentro de un rango bastante estrecho, una simple prueba, por ejemplo, con números enteros entre 1000 norte 1000 si PAG ( norte ) = 0 o no, hará el trabajo... en un máximo de 1 milisegundo. La cuestión de las raíces con valor absoluto > 1000 puede ser tratado de forma separada.

Para raíces múltiples, pruebe si PAG ( norte ) = 0 y PAG ( norte ) = 0 para una raíz doble; si además PAG ( norte ) = PAG ( norte ) = PAG ( norte ) = 0 , es raíz triple, etc.

Un tipo diferente de acción que usa la "eig"función le proporciona los valores de punto flotante de los valores propios. Si se le permite usar esta función, puede tomar su valor redondeado (al siguiente entero) y probar si estos valores redondeados son (¡exactos!) raíces del polinomio característico.