eliminación gaussiana simple

21
ELIMINACIÓN GAUSSIANA SIMPLE. Objetivo del método: El objetivo del método es encontrar una solución a un sistema de ecuaciones lineales, basando su solución en una matriz triangular superior y una sustitución regresiva. Generalidades: El procedimiento a seguir para la aplicación del método es el siguiente: Se debe construir la matriz de coeficientes y el vector con los términos independientes, correspondientes al sistema, y se crea una matriz llamada la matriz aumentada. Se calculan los multiplicadores correspondientes a cada una de las etapas. Con los multiplicadores hallados, se procede al cálculo de las nuevas filas de la matriz aumentada. Una vez se tiene la matriz aumenta en la forma triangular superior, se procede a realizar una sustitución regresiva para el cálculo de las variables. Ejemplo: CÓDIGO MATLAB ELIMINACIÓN GAUSSIANA SIMPLE. % ELIMINACION GAUSSIANA SIMPLE (SOLUCION POR ETAPAS) clc %permite borrar el área de trabajo clear %permite borrar las variables almacenadas format long %permite utilizar la maxima capacidad de la maquina fprintf('ELIMINACION GAUSSIANA SIMPLE (SOLUCIÓN POR ETAPAS)\ n\n\n');

Upload: jesus-jaimes-gamino

Post on 07-Dec-2015

235 views

Category:

Documents


2 download

DESCRIPTION

Matlab

TRANSCRIPT

Page 1: Eliminación Gaussiana Simple

ELIMINACIÓN GAUSSIANA SIMPLE.

Objetivo del método:

El objetivo del método es encontrar una solución a un sistema de ecuaciones lineales, basando su solución en una matriz triangular superior y una sustitución regresiva.

Generalidades:

El procedimiento a seguir para la aplicación del método es el siguiente:

Se debe construir la matriz de coeficientes y el vector con los términos independientes, correspondientes al sistema, y se crea una matriz llamada la matriz aumentada.

Se calculan los multiplicadores correspondientes a cada una de las etapas. Con los multiplicadores hallados, se procede al cálculo de las nuevas filas de la

matriz aumentada. Una vez se tiene la matriz aumenta en la forma triangular superior, se procede

a realizar una sustitución regresiva para el cálculo de las variables.

Ejemplo:

CÓDIGO MATLAB ELIMINACIÓN GAUSSIANA SIMPLE.

% ELIMINACION GAUSSIANA SIMPLE (SOLUCION POR ETAPAS) clc %permite borrar el área de trabajo clear %permite borrar las variables almacenadas format long %permite utilizar la maxima capacidad de la maquina fprintf('ELIMINACION GAUSSIANA SIMPLE (SOLUCIÓN POR ETAPAS)\n\n\n'); %fprintf me permite ingresar comentarios de manera textual que pueden %orientar al usuario en el uso del programa %input es un comando de solicitud de entrada de datos del usuario. A=input('Ingrese la matriz A = \n'); b=input('\nIngrese el vector b, correspondite a los terminos independientes b=\n'); % Las matrices A y b deben ser ingresadas entre corchetes separando las %columnas mediante coma ',' y las filas mediante punto y coma ';'.

Page 2: Eliminación Gaussiana Simple

%permite obtener el tamaño de la matriz A [n,m]=size(A); C=[A,b]; % la matriz C, representa la forma de la matriz aumentada [Ab] fprintf('\n La Matriz C, que corresponte a la matriz aumentada [Ab] es = \n'); disp(C); % la funcion disp nos permite imprimir una variable en el espacio de trabajo

if n==m for k=1:(n-1)%instruccion iterativa que permite repetir pasos un %numero determinado de veces fprintf('\n ETAPA %g=\n\n',k) fprintf('\nLa matriz correspondiente a esta etapa antes del proceso:\n') disp(C) fprintf('\nLos Multiplicadores correspondientes a esta etapa son:\n')

for i=(k+1):n m(i,k)=C(i,k)/C(k,k); %formula para hallar los multiplicadores fprintf('\nm(%g,%g)=',i,k) disp(m(i,k)); for j=k:(n+1) C(i,j)= C(i,j) - m(i,k)*C(k,j); %formula de la nueva fila end end fprintf('\nLa matriz correspondiente a esta etapa despues del proceso:\n') disp(C) end for i=n:-1:1 suma=0; for p=(i+1):n suma = suma + C(i,p)*X(p); end X(i)=(C(i,n+1)-suma)/C(i,i); %formula de la susticion regresiva y solucion de las variables end else %funcion asignada del if, en caso de que este sea falso fprintf('\nERROR: La matriz NO es cuadrada\n');

end fprintf('\n\n\nSOLUCIÓN:\n');

Page 3: Eliminación Gaussiana Simple

fprintf('\n\nLa matriz Ab final:\n'); disp(C) fprintf('\n\nLa solucion de X1 hasta Xn es:\n'); %a continuacion de utiliza una instruccion for, para mostrar el usuario, %los resultados de una manera más ordenada for i=1:n Xi=X(1,i);fprintf('\nX%g=',i) disp(Xi); end

ELIMINACIÓN GAUSSIANA CON PIVOTEO PARCIAL.

Objetivo del método:

El objetivo del método es encontrar una solución a un sistema de ecuaciones lineales, basando su solución en un matriz triangular superior, buscando los números mayores en las columnas de la matriz para colocarlos en la diagonal y así mejorar la calidad de la solución.

Generalidades:

El procedimiento a seguir para la aplicación del método es el siguiente:

  Se debe construir launa matriz de coeficientes y el vector con los términos independientes, correspondientes al sistema, y se crea una matriz llamada la matriz aumentada

Se busca el número mayor (en valor absoluto) en cada la columna correspondiente a la etapa y se procede a un cambio de filas para ubicar el mayor elegido en la posición correspondiente a la etapa.

Una vez ubicado el número mayor, se procede al cálculo de los multiplicadores correspondientes a la etapa.

 Con los multiplicadores hallados en cada etapa, se procede al cálculo de las nuevas filas de la matriz aumentada.

Una vez se tiene la matriz aumentada en la forma triangular superior, se procede a realizar una sustitución regresiva, para el cálculo de las variables.

Page 4: Eliminación Gaussiana Simple

Ejemplo:

CÓDIGO MATLAB PIVOTEO PARCIAL.

% ELIMINACION GAUSSIANA CON PIVOTEO PARCIAL (SOLUCION POR ETAPAS) clc %permite borrar el area de trabajo clear %permite borrar las variables almacenadas format long

fprintf('ELIMINACION GAUSSIANA CON PIVOTEO PARCIAL (SOLUCION POR ETAPAS)\n\n\n'); %fprintf me permite ingresar comentarios de manera textual que pueden %orientar al usuario en el uso del programa

%input es un comando de solicitud de entrada de datos del usuario. A=input('Ingrese la matriz A = \n'); b=input('\nIngrese el vector b, correspondite a los terminos independientes b=\n'); % Las matrices A y b deben ser ingresadas entre corchetes separando las columnas mediante %coma ',' y las filas mediante punto y coma ';'. %permite obtener el tamaño de la matriz A [n,m]=size(A); C=[A,b]; % la matriz C, representa la forma de la matriz aumentada [Ab] fprintf('\nLa Matriz C, que corresponte a la matriz aumentada [Ab] es = \n'); disp(C); % la funcion disp nos permite imprimir una variable en el espacio de trabajo

if n==m %compara el numero de columnas y filas, para observar si son iguales for k=1:(n-1) fprintf('\n ETAPA %g=\n\n',k) mayor=0; %asigna como cero el numero mayor de la fila filam=k; %asigna la fila k como la fila que tiene el numero mayor for p=k:n if mayor<abs(C(p,k)) %se busca el numero mayor en la fila K; mayor=abs(C(p,k));%cambio de mayor filam=p; %cambio de fila end end

Page 5: Eliminación Gaussiana Simple

if mayor ==0 fprintf('\nEl sistema tiene infinitas soluciones\n') break %se interrumpe el programa con la instruccion break, ya que %si mayor=o, mas adelante se obtiene una division por %cero else if filam ~= k for j=1:(n+1) aux=C(k,j); %para poder intercambiar las filas, utilizamos una %variable auxiliar C(k,j)=C(filam,j); C(filam,j)=aux; end end end fprintf('\nLa matriz correspondiente a esta etapa antes del proceso:\n') disp(C) fprintf('\nLos Multiplicadores correpondientes a esta etapa son:\n') for i=(k+1):n m(i,k)=C(i,k)/C(k,k); %formula multiplicadores fprintf('\nm(%g,%g)=',i,k) disp(m(i,k));for j=k:(n+1) C(i,j)= C(i,j) - m(i,k)*C(k,j);%formula nueva fila end end fprintf('\nLa matriz correspondiente a esta etapa despues del proceso:\n') disp(C) end for i=n:-1:1 suma=0; for p=(i+1):n suma = suma + C(i,p)*X(p); end X(i)=(C(i,n+1)-suma)/C(i,i); %formula de la susticion regresiva y solucion de las variables end else %funcion asignada del if, en caso de que este sea falso fprintf('\nERROR: La matriz NO es cuadrada\n'); end fprintf('\n\n SOLUCION:\n');

Page 6: Eliminación Gaussiana Simple

fprintf('\n\nLa matriz Ab final:\n'); disp(C) fprintf('\n\nLa solucion de X1 hasta Xn es:\n'); %a continuacion de utiliza una instruccion for, para mostrar el usuario, %los resultados de una manera mas ordenada for i=1:n Xi=X(1,i); fprintf('\nX%g=',i) disp(Xi); end

ELIMINACIÓN GAUSSIANA CON PIVOTEO TOTAL.

Objetivo del método:

El objetivo del método es encontrar una solución a un sistema de ecuaciones lineales, basando su solución en un matriz triangular superior, buscando los números mayores (en valor absoluto) en toda la matriz para colocarlos en la diagonal y así mejorar la calidad de la solución.

Generalidades:

El procedimiento a seguir para la aplicación del método es el siguiente:

 Se debe construir una matriz de coeficientes y el vector con los términos independientes, correspondientes al sistema, y se crea una matriz llamada la matriz aumentada.

Se busca el número mayor (en valor absoluto) en toda la matriz y se procede a un cambio de filas y columnas para ubicar el mayor elegido en la posición correspondiente a la etapa.

 Una vez ubicado el número mayor, se procede al cálculo de los multiplicadores correspondientes a la etapa.

Con los multiplicadores hallados en cada etapa, se procede al cálculo de las nuevas filas de la matriz aumentada.

Una vez se tiene la matriz aumentada en la forma triangular superior, se procede a realizar una sustitución regresiva, para el cálculo de las variables.

Page 7: Eliminación Gaussiana Simple

Ejemplo:

CÓDIGO MATLAB PIVOTEO TOTAL.

% ELIMINACION GAUSSIANA CON PIVOTEO TOTAL (SOLUCION POR ETAPAS) clc %permite borrar el area de trabajo clear %permite borrar las variables almacenadas format long

fprintf('ELIMINACION GAUSSIANA CON PIVOTEO TOTAL (SOLUCION POR ETAPAS)\n\n\n'); %fprintf me permite ingresar comentarios de manera textual que pueden %orientar al usuario en el uso del programa %input es un comando de solicitud de entrada de datos del usuario. A=input('Ingrese la matriz A = \n'); b=input('\nIngrese el vector b, correspondite a los terminos independientes b=\n'); % Las matrices A y b deben ser ingresadas entre corchetes separando las %columnas mediante coma ',' y las filas mediante punto y coma ';'.

%permite obtener el tamaño de la matriz A [n,m]=size(A); C=[A,b]; % la matriz C, representa la forma de la matriz aumentada [Ab]

fprintf('\nLa Matriz C, que corresponte a la matriz aumentada [Ab] es = \n'); disp(C) % la funcion disp nos permite imprimir una variable en el espacio de trabajo

if n==m %compara el numero de columnas y filas, para observar si son iguales for i=1:n marca(i)=i; %este vector nos permite obtener la posicion de las %varibles despues de los cambios end for k=1:(n-1) fprintf('\n ETAPA %g=\n\n',k) mayor=0; %asigna como cero el numero mayor de la fila filam=k; %asigna la fila k como la fila que tiene el numero mayor

Page 8: Eliminación Gaussiana Simple

columnam=k; %asigna la columna k como la columna que tiene el numero mayor for p=k:n for r=k:n if mayor<abs(C(p,r)) %se compara para buscar el numero mayor mayor=abs(C(p,r)); %cambio de numero mayor filam=p; %cambio de fila columnam=r; %cambio de columna end end end if mayor ==0 fprintf('\nEl sistema tiene infinitas soluciones\n') break%se interrumpe el programa con la instruccion break, ya que %si mayor=o, mas adelante se obtiene una division por %cero else if filam ~= k for j=1:(n+1) aux=C(k,j);%para poder intercambiar las variables, utilizamos una %variable auxiliar C(k,j)=C(filam,j); C(filam,j)=aux; endend if columnam ~= k for i=1:n aux=C(i,k);%para poder intercambiar las variables, utilizamos una %variable auxiliar C(i,k)=C(i,columnam); C(i,columnam)=aux; end aux = marca(k);%para poder intercambiar las variables, utilizamos una %variable auxiliar marca(k)= marca(columnam); marca(columnam)=aux; end end fprintf('\nLa matriz correspondiente a esta etapa antes del proceso:\n') disp(C) fprintf('\nLos Multiplicadores correpondientes a esta etapa son:\n')

Page 9: Eliminación Gaussiana Simple

for i=(k+1):n m(i,k)=C(i,k)/C(k,k); %formula multiplicadores fprintf('\nm(%g,%g)=',i,k) disp(m(i,k)); for j=k:(n+1) C(i,j)= C(i,j) - m(i,k)*C(k,j); %formula nueva fila end end fprintf('\nLa matriz correspondiente a esta etapa despues del proceso:\n') disp(C) end fprintf('\nEl vector de marcas final es:\n') marca(columnam)=aux for i=n:-1:1 suma=0; for p=(i+1):n suma = suma + C(i,p)*X(p); end X(i)=(C(i,n+1)-suma)/C(i,i); %formula de la susticion regresiva y solucion de las variables end %la siguiente parte del programa ordena las varibles, tomando en %cuenta la marca final y los retoma con su coeficiente a la marca %inicial for i=1:n for j=1:n if marca(j)==i k=j; end end aux=X(k);%para poder intercambiar las variables, utilizamos una %variable auxiliar X(k)=X(i); X(i)=aux; aux=marca(k);%para poder intercambiar las variables, utilizamos una %variable auxiliar marca(k)=marca(i); marca(i)=aux; end else %funcion asignada del if, en caso de que este sea falso fprintf('\nERROR: La matriz NO es cuadrada\n');

Page 10: Eliminación Gaussiana Simple

end fprintf('\n\n SOLUCION:\n');fprintf('\n\nLa matriz Ab final:\n'); C fprintf('\n\nLa solucion de X1 hasta Xn es:\n'); %a continuacion de utiliza una instruccion for, para mostrar el usuario, %los resultados de una manera mas ordenada for i=1:n Xi=X(1,i); fprintf('\nX%g=',i) disp(Xi); end

MÉTODO GAUSS SEIDEL.

Objetivo del método:

Encontrar las aproximaciones de los valores de las variables de un sistema de ecuaciones lineales, por medio de la realización de varios cálculos, los cuales se realizan por etapas, obteniendo así aproximaciones por cada etapa.

Generalidades:

El método de Gauss Seidel permite hallar las aproximaciones a una solución de sistemas de ecuaciones lineales, utilizando los valores calculados en cada uno de los pasos, para hallar los nuevos valores, en pocas palabras, en este método un cálculo siempre depende del anterior, dependiendo las variables de otras variables.

El procedimiento a seguir para la aplicación del método es el siguiente:

Se debe introducir unas aproximaciones iniciales, la matriz de coeficientes, el vector de términos independientes, una tolerancia y un número total de iteraciones. 

Se toman las aproximaciones iniciales para hallar las nuevas aproximaciones, teniendo en cuenta el fundamento del método. 

En cada paso, es posible calcular el error, que es este caso está definido en normas (las cuales son infinitas). 

Para la finalización de los programas se tiene en cuenta, si el programa sobrepasa el número de iteraciones, o si el error es menor del propuesto al principio; una vez ocurra alguna de estas dos situaciones, la última iteración tendrá las aproximaciones a la solución del sistema de ecuaciones estudiado.

Page 11: Eliminación Gaussiana Simple

Ejemplo:

METODO ITERATIVO DE GAUSS SEIDEL.

clc %permite borrar el area de trabajo clear %permite borrar las variables almacenadas format long %permite utilizar la maxima capacidad de la maquina

fprintf('METODO ITERATIVO DE GAUSS SEIDEL\n\n\n') %fprintf me permite ingresar comentarios de manera textual que pueden %orientar al usuario en el uso del programa

%input es un comando de solicitud de entrada de datos del usuario. a=input('Ingrese la matriz de coeficientes:\n '); b=input('\nIngrese los términos independientes:\n '); x=input('\nIngrese el vector con las aproximacimaciones Iniciales:\n '); iter=input('\nIngrese el número máximo de iteraciones:\n '); tol=input('\nIngrese la tolerancia:\n ');

k=norm(a)*norm(a^-1);%Se calcula el condicional de la matriz de coeficientes disp('condicional=') disp(k) % la funcion disp nos permite imprimir una variable en el espacio de trabajo determinante=det(a);%se calcula el determinante de la matriz de coeficientes if determinante==0 disp('El determinante es cero, el problema no tiene solución única') end

n=length(b); %numero de elementos del vector b d=diag(diag(a)); %obtencion de la matriz diagonal l=d-tril(a); %obtencion de la matriz diagonal superior L u=d-triu(a); %obtencion de la matriz diagonal inferior u

fprintf('\n SOLUCION:\n') fprintf('\nLa matriz de transicion de gauss seidel:\n') T=((d-l)^-1)*u; % matriz de transicion de gauss disp(T) re=max(abs(eig(T))) %calculo del radio espectral

if re>1 disp('Radio Espectral mayor que 1')

Page 12: Eliminación Gaussiana Simple

disp('el método no converge') return end fprintf('\nEl vector constante es::\n') C=((d-l)^-1)*b; % vector constante C, para el metodo disp(C) i=0; err=tol+1;

z=[i,x(1),x(2),x(3),err]; %vector que me permite graficar la tabla

while err>tol & i<iter xi=T*x+C; %disp(xi) i=i+1; err=norm(xi-x); %norma 2 %err=max(abs(xi-x)); %norma 1 %err=norm(xi-x)/norm(xi); %norma relativa x=xi; z(i,1)=i; z(i,2)=x(1); z(i,3)=x(2); z(i,4)=x(3); z(i,5)=err; end fprintf('\nTABLA:\n\n n x1 x2 x3 Error\n\n ')

disp(z) %impresion de la tabla

Page 13: Eliminación Gaussiana Simple

MÉTODO DE JACOBI.

Objetivo del método:

Encontrar las aproximaciones de los valores de las variables de un sistema de ecuaciones lineales, por medio de la realización de varios cálculos, los cuales se realizan por etapas, obteniendo así aproximaciones por cada etapa.

Generalidades:

El método de Jacobi permite hallar las aproximaciones a una solución de sistemas de ecuaciones lineales, utilizando los valores iniciales para la primera aproximación, luego los de la primera para la segunda y así sucesivamente; en este método el cálculo de cada variable es independiente por lo tanto ninguna variable depende de la otra.

El procedimiento a seguir para la aplicación del método es el siguiente:

Se debe introducir unas aproximaciones iniciales, la matriz de coeficientes, el vector de términos independientes, una tolerancia y un número total de iteraciones. 

Se toman las aproximaciones iniciales para hallar las nuevas aproximaciones, teniendo en cuenta el fundamento del método. 

En cada paso, es posible calcular el error, que es este caso está definido en normas (las cuales son infinitas).

Para la finalización de los programas se tiene en cuenta, si el programa sobrepasa el número de iteraciones, o si el error es menor del propuesto al principio; una vez ocurra alguna de estas dos situaciones, la última iteración tendrá las aproximaciones a la solución del sistema de ecuaciones estudiado.

Ejemplo:

CÓDIGO MATLAB JACOBI.

% METODO ITERATIVO DE JACOBI clc %permite borrar el area de trabajo clear %permite borrar las variables almacenadas format long %permite utilizar la máxima capacidad de la maquina

fprintf('METODO ITERATIVO DE JACOBI\n\n\n') %fprintf me permite ingresar comentarios de manera textual que pueden %orientar al usuario en el uso del programa

Page 14: Eliminación Gaussiana Simple

%input es un comando de solicitud de entrada de datos del usuario. a=input('Ingrese la matriz de coeficientes:\n '); b=input('\nIngrese los términos independientes:\n '); x=input('\nIngrese el vector con las aproximacimaciones Iniciales:\n '); iter=input('\nIngrese el número máximo de iteraciones:\n '); tol=input('\nIngrese la tolerancia:\n ');

cond=norm(a)*norm(a^-1);%Se calcula el condicional de la matriz de coeficientes disp('condicional=') disp(cond) % la funcion disp nos permite imprimir una variable en el espacio de trabajo determinante=det(a);%se calcula el determinante de la matriz de coeficientes if determinante==0 disp('El determinante es cero, el problema no tiene solución única') return end

n=length(b);%numero de elementos del vector b d=diag(diag(a)); %obtencion de la matriz diagonal l=d-tril(a); %obtencion de la matriz diagonal superior L u=d-triu(a);%obtencion de la matriz diagonal inferior u fprintf('\n SOLUCION:\n') fprintf('\nLa matriz de transicion de jacobi:\n') T=d^-1*(l+u); % matriz de transicion de jacobi disp(T) re=max(abs(eig(T))) %calculo del radio espectral if re>1 disp('Radio Espectral mayor que 1') disp('el método no converge') return end fprintf('\nEl vector constante es::\n') C=d^-1*b; % vector constante C, para el metodo disp(C) i=0; err=tol+1; z=[i,x(1),x(2),x(3),err]; %vector que me permite graficar la tabla while err>tol & i<iter xi=T*x+C;

Page 15: Eliminación Gaussiana Simple

%disp(xi)

err=norm(xi-x); %norma 2 %err=max(abs(xi-x)); %norma 1 %err=norm(xi-x)/norm(xi); %norma relativa x=xi; i=i+1; z(i,1)=i; z(i,2)=x(1); z(i,3)=x(2); z(i,4)=x(3); z(i,5)=err; end fprintf('\nTABLA:\n\n n x1 x2 x3 Error\n\n ');

disp(z)%impresión de la tabla.