Está en la página 1de 14

ANEXOS:

Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1

Desarrollo de un Programa para la resolución de un problema de


distribución de calor en una placa plana cuadrada con espesor constante
mediante el método de Gauss-Seidel.
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1 Autor: Jeremias Calo

Escuela Politécnica Nacional, Facultad de Ingeniería Mecánica, Quito, Ecuador

Resumen:

En el siguiente proyecto se realiza un programa en el software Matlab para la solución de una distribución de calor en una
placa plana de espesor constante la cual es cuadrada, para esto se desarrolla un código en el cual se utilizara el método de
Gauss Seidel para resolver el sistema de ecuaciones que encontraremos.
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1 1. INTRODUCCIÓN
1

Existen varias métodos numéricos para la resolución de problemas de ingeniería, para este caso se utilizara el método de Gauss
Seidel, el cual permite obtener una solución aproximada fijando cierta tolerancia.
Revisión Teórica:
Este método se diferencia al de Jacobi en que en la etapa (k + 1) − ésima los valores disponibles de x (k+1) se utilizan para
actualizar la solución. La división de A = M − N correspondiente es:
M = D − L, N = U,
Donde D es la matriz diagonal principal de A, L es una matriz triangular inferior y U es una matriz triangular superior. De esta
forma el método de Gauss-Seidel escrito en forma matricial es dado por:
(D − L) x (k+1) = Mx (k+1) = Nx (k) + b = Ux (k) + b
O de forma equivalente:
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1 x (k+1) = (D − L) −1Ux (k) + (D − L) −1 b

Donde la matriz de iteración asociada BGS y el vector c son, respectivamente:


BGS = (D − L) −1U, c = (D − L) −1 b.
Al igual que en el método de Jacobi, podemos encontrar la ecuación para calcular las componentes del vector de aproximación,
xi (k+1) en este caso se calcula mediante:

Para cada:
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1

En Este método, estamos asumiendo que los componentes del vector x (k+1) son actualizados hacia adelante. Pero también
podemos formular otra versión donde los componentes del vector de aproximación son actualizados hacia atrás. La forma
matricial de esta versión es la siguiente:
M = D − U, N = L.
De esta forma el método es dado por:
(D − U) x (k+1) = Mx (k+1) = Nx (k) + b = Lx (k) + b
O de forma equivalente:
x (k+1) = (D − U) −1Lx (k) + (D − U) −1 b

Donde la matriz de iteración asociada BGS(2) y el vector c son, respectivamente


ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1 BGS(2) = (D − U) −1L, c = (D − U) −1 b [1]

2. METODOLOGÍA

1
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1

Planteamiento del Plateamiento de Creación del


problema. soluciones. programa en
Matlab

Aplicación y Obtencion de la
Resultados y
comparación de matriz de
graficas
resultados. coeficientes.
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1
Planteamiento y resolución del problema:
Para la resolución se busca obtener el valor de las temperaturas en cada punto intermedio de la malla que se traza:
Para la resolución del problema asuminos ciertas condiciones:
- La placa debe ser plana
- Las dimensiones deben ser iguales en x, y, z.
- La placa debe ser cuadrada para facilidad de interpretación.
- El código de programación realizado es interactivo permitiéndole al usuario correlacionar los resultados fácilmente.
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1 Figura 1. Modelo a seguir para el análisis de distribución de calor.
Para la obtención de la matriz de coeficientes se analiza las condiciones de contorno tanto en los vértices como en la
distribución lineal entre las mismas utilizando el principio de conservación de la energía obteniendo las ecuaciones
especificadas en el código.

Resultados:

- Luego de la resolución del problema se comparó los resultados obtenidos por el método de Gauss Seidel con un
resultado exacto obtenido por el método convencional, se observó que los valores no son distantes entre sí ya que el
programa tiene la opción de variar la precisión o tolerancia.
- Se resolvió el problema para un número determinado de divisiones y otros datos propios del problema.
- m: número de divisiones : 3
- k: conductividad térmica : 0.5 [w/mK]
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1
- h: factor de convección: 100 [w/m2K]
- Ta: temperatura ambiente: 20 [°C]
- Tp: temperatura de pared: 100[°C]
- w: potencia de entrada superior: 20 [w]
- DX: valor del paso en x,y,z : 0.3 [m]

Utilizando estos datos obtuvimos las siguientes curvas y distribuciones.


ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1
ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1 Figura 2. Distribución de calor placa de m=3.

Figura 3.Coparación de temperaturas método de gauss Seidel y solución real.


ANEXOS:
Función Gauss-Seidel:
-------------------------------------------------------------------------------------------------------------------------------------------------
%Para un sistema de la forma 'Ax=b'
%imax: Número máxima de iteraciones en caso de
%que el método no converja
%tol: tolerancia deseada
function x=gseidel(A,b,tol,imax)
n=max(size(A)); % Obtenemos de la matriz A
% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1

5. REFERENCIAS
[1] Rosa Elena Scheid, Francis Di Constanzo. Métodos numéricos “Solución de sistemas de ecuaciones lineales”.
Schaum. 2011.

También podría gustarte