“ESCUELA POLITÉCNICA NACIONAL” FACULTAD DE INGENIERÍ CIVIL Y AMBIENTAL MÉTODOS NUMÉRICOS
TAREA °3
TEMA: ERRORES
FECHA: 28/04/2015
NOMBRES: EVELYN GUEVARA /ERIK CASTRO
1.- INGRESANDO DATOS DESDE ARCHIVO .txt
El programa empieza con la introducción de matrices cuadradas de máximo 40x40 desde archivos .txt , para esta tarea se emplea el comando load como sigue: disp('OPERACIONES CON MATRICES') %INTRODUCCIÓN MATRICES A=load('matrizA.txt'); B=load('matrizB.txt'); disp('Matriz A') disp(A); disp('Matriz B') disp(B);
Los archivos .txt son ‘MatrizA’ y ‘MatrizB’ matrices cuadradas cuadradas de 40x40 y no necesariamente necesariamente
simétricas, se muestran a continuación:
MATRIZ A
MATRIZ B
El resultado en MATLAB es el siguiente:
MATRIZ A
MATRIZ B
No se puede observar la totalidad de los resultados debido a las dimensiones de las matrices. 2.- CONDICIONES PARA EL INGRESO DE MATRICES
A continuación se muestran algunas sentencias que avisan al usuario cuando se intentan ingresar matrices de dimensiones incorrectas. [m,n]=size(A); [f,c]=size(B); if m~=n; disp('la matriz A debe ser cuadrada'); end;
if f~=c; disp('la matriz B debe ser cuadrada'); end; if m>40; disp('la matriz A excede el numero maximo'); end; if f>40; disp('la matriz B excede el numero maximo'); end; if f~=m; disp('las matrices deben ser del mismo orden'); end;
Por ejemplo al agregar filas y columnas extra a la Matriz A e ingresarla aparece el siguiente mensaje:
3.- OPERACIONES CON MATRICES
A continuación se muestran los resultados de las siguientes operaciones con matrices. Nótese el uso de contadores (i,j) para definir los elementos de cada matriz, los contadores van desde 1 hasta m ó n que son respectivamente el número de filas y columnas de las matrices. SUMA
%SUMA DE MATRICES disp('Suma (Matriz C)') for i=1:m for j=1:n C(i,j)=A(i,j)+B(i,j); end; end; disp (C);
La siguiente captura muestra parte de la Matriz C que almacena los resultados de la suma:
RESTA
%RESTA DE MATRICES disp('Resta (Matriz D)') for i=1:m for j=1:n D(i,j)=A(i,j)-B(i,j); end; end; disp (D);
MULTIPLICACIÓN
%MULTIPLICACIÓN DE MATRICES disp('Multiplicacion (Matriz E)') for i = 1 : m; for j = 1 : c; s=0; for k=1:f; A(i,k); B(k,j); s=s+A(i,k)*B(k,j); end; E(i,j)=s; end; end; disp(E);
En este caso f denota las filas y c las columnas, se utiliza en contador k de acuerdo a la definición de multiplicación de matrices.
MATRIZ TRASPUESTA
%TRASPUESTA MATRICES disp('Matrices Transpuestas:') for i=1:m; for j=1:n; Ct(i,j)= C(j,i); Dt(i,j)= D(j,i); Et(i,j)= E(j,i); end end disp('Transpuesta de C (Matriz Ct)') disp(Ct); disp('Transpuesta de D (Matriz Dt)') disp(Dt); disp('Transpuesta de E (Matriz Et)') disp(Et);
NOTA: Al intentar operar las matrices con la Matriz A alterada MATLAB presente el siguiente error,
puesto que no se pueden sumar matrices de distinto orden.
Lo mismo ocurrirá al intentar realizar las demás operaciones ya que las matrices no cumplen las condiciones necesarias.
4.- MATRIZ INVERSA MÉTODO DE MATLAB
Consiste en calcular la matriz inversa con el rápido y simple comando inv(), como se muestra a continuación: %MATRIZ INVERSA disp('Inversas (Matlab)') invC=inv(C) invD=inv(D) invE=inv(E)
Obsérvese en la siguiente captura el mensaje que aparece antes del resultado de la matriz inversa de C. Éste indica que los resultados pueden no ser precisos, la causa es que el determinante de la matriz C es 0 ,como se demuestra en la imagen con el uso del comando det() propio de MATLAB. Nótese también los elevados valores de los elementos de la matriz inversa esto a causa de la división por cero que se produce.
MÉTODO FADEV-LEVERRIER
A continuación se muestra el script para calcular la matriz inversa por este método. En la primera parte se define a la matriz P{1} que será igual a la matriz C de la que se quiere obtener la inversa, ésta matriz es parte del arreglo de celdas P que almacena todas las matrices P{1,2,3,…,n} a lo largo de la iteración. Los arreglos de celdas son arreglos especiales de MATLAB que contienen en sus elementos llamados celdas otros arreglos por ejemplo matrices.También se define a p(1) como la traza de la matriz C. La traza es la suma de los elementos de la diagonal de una matriz. A continuación se emplea la función for para crear un bucle, en este caso se usa el contador i empezando en 2 hasta el orden de la matriz m porque ya se han definido los valores de P{1} y p(1).El trabajo del bucle es continuar calculando los elementos del vector p y el arreglo P y almacenarlos. NOTA: Inicialmente el vector p se ha definido como un vector de unos ones() a lo largo de la
iteración cada elemento de p cambiará su valor 1 por el de la traza correspondiente.
La penúltima línea muestra el calculo de la matriz inversa a partir de los valores finales resultantes del bucle. %Matriz Inversa Metodo FADEV LEVERRIER disp('Inversas (Metodo FADEV-LEVERRIER)') %MATRIZ INVERSA C disp('iC') P{1}=C; p=ones(1,m); p(1)=trace(C); for i=2:m; P{i}=C*(P{i-1}-p(i-1)*eye(m)); p(i)=(1/i)*trace(P{i}); end; iC=(1/p(m))*(P{m-1}-p(m-1)*eye(m)); disp(iC);
A continuación un ejemplo de una matriz inversa de 10x10
5.- ERRORES
ERROR VERDADERO
%VALORES APROXIMADOS disp('ERROR VERDADERO CON inv(C)') disp('VALORES APROXIMADOS') disp('inC') inC=cell(1,5) for i=m-4:m; inC{i}=(1/p(i))*(P{i-1}-p(i-1)*eye(m)); end for i=m-4:m; disp(inC{i}) end
Para el calculo del error verdadero se utilizan valores aproximados, estos se los obtiene mediante el proceso de iteración de la inversa de FADEV-LEVERRIER, tomando los 5 últimos valores de las iteraciones a los cuales se los almacena en una celda de inversas de la matriz con los llamados valores aproximados, con la celda de matrices inversas se procede a obtener el Error Verdadero.
Como se observa se almacenan en la celda inC las matrices de las 5 ultimas iteraciones %ERROR VERDADERO disp('ERROR VERDADERO') ETC=cell(1,5) for i=m-4:m; ETC{i}= invC - inC{i} ; end for i=m-4:m; disp(ETC{i}) end
Con los valores aproximados obtenidos y almacenados en la celda de valores aproximados (inC) se procede a calcular el error verdadero con la diferencia entre la inversa (de matlab inv() ) y la celda obtenida de valores aproximados. Estos se almacenan en una nueva celda que contiene las matrices de error verdadero para cada iteración.
ERROR RELATIVO ABSOLUTO
%ERROR RELATIVO ABSOLUTO disp('ERROR RELATIVO ABSOLUTO') ETRAC=cell(1,5) for i=m-4:m; ETRAC{i}= abs((ETC{i})./(invC)) ; end; for i=m-4:m; disp(ETRAC{i}); end;
Una vez obtenida la celda la celda con matrices de error verdadero de cada iteración se puede obtener el error relativo y a su vez el error relativo absoluto anteponiendo el absoluto en el siguiente bucle que realiza el cociente entre las matrices de erro r verdadero con la matriz de valor verdadero para cada una de las cinco matrices provenientes de las diferentes iteraciones.
VECTOR ERRORES PROMEDIO
%VECTOR ERRORES PROMEDIO disp('VECTOR ERRORES PROMEDIO') for i=1:5; VTEaEC(i)= sum(sum(ETRAC{i+(m-5)}))/m; end; disp(VTEaEC(1,1:5));
Con las matrices de Error relativo absoluto almacenadas en una nueva celda, para cada una de las matrices se realiza el promedio de los errores, con los cuales se almacenan en un nuevo vector de errores promedio.
GRAFICACION DE LA DESVIACION DE ERRORES
%GRAFICACION 1 yC=[m-4,m-3,m-2,m-1,m]; xC=[VTEaEC(1,1:5)]; Figure1=plot(xC,yC,'--ro') title('DESVIACION DE ERRORES EN C') xlabel('ERROR') ylabel('N° DE ITERACION') disp(Figure1)
Con el nuevo Vector Errores Promedio se tiene el promedio de errores para matriz de error absoluto de cada iteración, teniendo 5 valores de error, uno para cada iteración, las cuales se las pasa a graficar teniendo como ejes el numero de iteración con su respectivo valor de error relativo absoluto, se forma una línea entre los cinco puntos para iteración.
ERROR APROXIMADO
%ERROR APROXIMADO for i=m-4:m; EaC{i}=P{i}-P{i-1}; end; disp('ERROR APROXIMADO'); for i=m-4:m disp(EaC{1,i}) end
Para calcular los errores también se utilizan contadores que llamen las matrices de la iteración Fadev Leverrier en parejas, operen con ellas y almacenen los elementos dentro de los arreglos de celdas. Los códigos se han escrito siguiendo las definiciones de los distintos t ipos de errores. Luego se emplea también un contador para mostrar los últimos 6 elementos del arreglo Error Aproximado EaC en pantalla.
Se procede de igual forma para los demás errores y aplicando las definiciones respectivas. ERROR APROXIMADO RELATIVO
%ERROR APROXIMADO RELATIVO for i=m-4:m; EarC{i}=(P{i}-P{i-1})./P{i}; end; disp('ERROR APROXIMADO RELATIVO'); for i=m-4:m disp(EarC{1,i}) end
ERROR APROXIMADO RELATIVO ABSOLUTO
%ERROR APROXIMADO RELATIVO ABSOLUTO for i=m-4:m; EaraC{i}=abs((P{i}-P{i-1})./P{i}); end; disp('ERROR APROXIMADO RELATIVO ABSOLUTO'); for i=m-4:m disp(EaraC{1,i}) end
6.- VECTORES ERROR PROMEDIO
Los vectores error promedio están formados por el promedio de todos los elementos de las matrices error formada de cada par de resultados de la iteración Fadev Leverrier. En este caso se empleó el comando sum() que suma los elementos de cada columna de una matriz. %VECTOR ERRORES PROMEDIO disp('VECTOR ERRORES PROMEDIO') for i=m-4:m; VEaraE(i)= sum(sum(EaraE{i}))/m; end; disp(VEaraE(1,m-4:m));
CONCLUSIONES: 1. Mediante el uso de celdas para almacenar las matrices con procesos realizados a cada una de ellas, se facilita en gran parte el trabajo ya que se almacenan matrices que se les trata en bucles de iteraciones. 2. Para el proceso de FADEV-LEVERRIER es necesario terminar el número completo de repeticiones del proceso para obtener una mayor precisión, como se puede observar en las gráficas de errores vs número de iteración. 3. Tras realizar varias veces la comparación de matrices inversas se concluye que los resultados presentan precisión mas no exactitud.