%////////////////////////////// TRABAJO FINAL DE MATLAB /////////////////////////// /

Anuncio
%//////////////////////////////
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
Descargar