%////////////////////////////// TRABAJO FINAL DE MATLAB /////////////////////////// /////////////// %////////////////////////////// 2007 /////////////////////////// /////////////// %-------------------------------------------------------------------------%-------------------------------DIAGONALIZACION ------------------------------------------%-------------------------------------------------------------------------%______________________________________________________________________________________ _______________ % ``````````````````````````````` INTEGRANTES ````````````````````````````` ``````````````` %1)SCAGLIONE, SEBASTIAN LEG:30467/03 %2)FERNANDEZ, NATALIA LEG:30229/04 %3)AVILA, GLORIA LEG:30011/05 %______________________________________________________________________________________ _______________ %----- FUNCION DEL PROGRAMA: % %- Este programa tiene la funcion de determinar si una matriz es diagonalizable, respet ando %- las propiedades de Diagonalizacion. %______________________________________________________________________________________ ________________ %----- LOGICA DEL PROGRAMA: % %- Se trabajo con operaciones como eig(matriz), rank(matriz),length(matriz), asi como t ambien %- con operadores logicos tales como while, if; adoptando su respectiva estructura de a lgoritmos. %- Para el caso de algoritmos se uso una estructura de Burbuja como metodo de busqueda de elementos repetidos %______________________________________________________________________________________ ________________ %----- DESCRIPCION DEL PROGRAMA: % %- El programa consta de dos pasos bien definidos: %PASO 1) %-se ingresa una matriz cuadrada, la cual es utilizada por la funcion eig, con la que s e determinana los %-valores propios de dicha matriz y se los almacena en una variable. %-luego con la funcion length aplicada a dicha variable determino la cantidad de elemen tos (valores propios) de %-la matriz y dicha cantidad es la variable que se usa en el while, en el metodo de bus queda(burbuja) %-----metodo de burbuja: %-----se lo utiliza para determinar si los valores propios son disintos entre si o no. %-----dejando una bandera prendida en caso de que alguno sea igual. %-cuando el metodo de la burbuja devuelve el valor de la bandera %-se utiliza un if-else para cada situacion %-en caso de que sea bandera=0 la matriz es diagonalizable %-en caso de que sea bandera=1 no se puede determinar nada por lo tanto continua con el siguiente paso. %PASO 2) %-al tener valores propios iguales, se debe hacer uso de la propiedad 2 de diagonalizac ion %-por lo que se utiliza nuevamente la funcion eig, pero igualada a dos variables(matric es), en donde en una matriz %-determina los vectores propios de la matriz ingresada(matriz que diagonaliza a la mat riz ingresada), %-y en la otra deja almacenado el producto de P.A.P^-1=D %-con la funcion RANK,determino el rango de la matriz que diagonaliza a la matriz ingre sada. %-y analizo si este rango es igual a n(numero de filas o columnas que tiene la matriz i ngresada) que coincide %-con el cantidad total de valores propios, es decir repetidos o no. %-si el rango es igual a n, entonces segun la propiedad 2, A es diagonalizable %-caso contrario, los vectores propios son L.D y A no es diagonalizable. %______________________________________________________________________________________ _______________ function diagonalizacion(A) Vp=eig(A);% operacion que nos determina los valores propios de la matriz A y lo deja al macenado en Vp disp('analizamos la primera propiedad de diagonalizacion') disp('la cual nos dice que A es diagonalizable si A tiene n valores propios distintos') disp('los valores propios son: ') Vp % funcion que nos devuelve el valor de la bandera para analizar la propiedad 1 de diago nalizacion') %--------------------------------------------------------------------------------------------------n=length(Vp);%length nos determina el numero de elementos un vector fila B=0;% B es la bandera que nos indica si los valores propios son distintos j=1; i=1; %Metodo de comparacion para analizar cuando un valor propio es igual a otro %cuando se cumple esta igualdad la bandera se prende y el ciclo termina while (i<=n)&(B==0), k=i+1; while k<=n if Vp(i,j)==Vp(k,j) B=1; %La bandera se enciende, lo cual nos indica que se encontro dos valores iguales end k=k+1; end i=i+1; end % si la bandera se mantuvo "apagada" significa que no se encontraron dos valores ig uales %---------------------------------------------------------------------------------------------------if B==0 disp('la matriz A es diagonalizable por ser todos los valores propios distintos') Vp=eig(A); disp('La matriz diagonal semejante a "A"es D= ') [P D]=eig(A);% esta operacion nos determina la matriz P (formada por los n vector es propios L.I de A) % y la matriz D similar a la matriz A, la que se caracteriza por tener en su diag onal % los valores propios de A D disp('matriz que contiene en su diagonal los valores propios de A') else disp('al no ser todos los valores propios distintos') disp('seguimos analizando para ver si es diagonalizable') disp('a partir de la propiedad 2 de diagonalizacion') disp('la cual nos dice que A es diagonalizable <==> tiene n vectores propios L.I') disp('obtenemos la matriz p') [P D]=eig(A); P disp(sprintf('la cual esta formada por los %i vectores propios de A',n)) R=rank(P);% esta operacion nos determina el RANGO de la matriz P i=1; while i<=n vp=P(:,[i]); disp(sprintf('Vector Propio %i ',i)) vp i=i+1; end if(R~=n) disp('la matriz A no es diagonalizable, pues la matriz "p"') disp('de vectores propios encolumnados') P disp(sprintf('tiene rango igual a = %i ', R)) disp(sprintf('Lo que significa que el rango de p(R= %i) es distinto a n= %i',R,n) ) disp(sprintf('lo cual indica que los %i vectores propios de la misma son L.D ',n) ) else disp('la matriz A es diagonalizable, pues') disp(sprintf('el rango de P es igual a = %i ', n)) disp(sprintf('lo cual indica que los %i vectores propios de la misma son L.I ',n)) end end