Resolución de Sistemas de Ecuaciones con el Método de Gauss-Seidel en MATLAB
Clasificado en Matemáticas
Escrito el en
español con un tamaño de 4,01 KB
Implementación del Método de Gauss-Seidel en MATLAB
El método de Gauss-Seidel es un algoritmo iterativo fundamental en el cálculo numérico para resolver sistemas de ecuaciones lineales. A continuación, se presenta el código corregido y estructurado para su ejecución en MATLAB, incluyendo una etapa de pivoteo para asegurar la estabilidad del sistema.
1. Configuración Inicial y Entrada de Datos
En esta sección se limpia el entorno de trabajo y se define el número de ecuaciones e incógnitas que componen el sistema.
clear all;
clc;
% INGRESO DEL NÚMERO DE ECUACIONES E INCÓGNITAS
n = input('Ingrese el número de ecuaciones: ');2. Ingreso de la Matriz de Coeficientes y Vector de Términos Independientes
Se solicita al usuario la matriz de coeficientes de tamaño n x n y el vector b que contiene los términos no homogéneos de las ecuaciones.
% INGRESO DE LA MATRIZ DE n x n QUE TIENE LOS COEFICIENTES DEL SISTEMA QUE
% SE DESEA RESOLVER
disp('INGRESO DE LA MATRIZ n x n')
for i=1:n
for j=1:n
a(i,j) = input(['Ingrese el elemento ', num2str(i), ',', num2str(j), ' ']);
end
end
% VECTOR DE DIMENSIÓN n QUE CONTIENE LOS TÉRMINOS NO HOMOGÉNEOS DE LAS
% ECUACIONES
disp('INGRESO DEL VECTOR b de dimensión n ')
for i=1:n
b(i) = input(['Ingrese el elemento ', num2str(i), ' ']);
end3. Definición del Vector Inicial y Parámetros de Control
Para iniciar las iteraciones, se requiere un vector inicial (comúnmente un vector de ceros), además de definir la tolerancia del error y el número máximo de iteraciones.
% INGRESO DEL VECTOR INICIAL 'x' PARA INICIO DE LOS CÁLCULOS, PUDIENDO SER
% UN VECTOR DE CEROS
disp('INGRESO DEL VECTOR INICIAL de dimensión n ')
for i=1:n
xo(i) = input(['Ingrese el elemento ', num2str(i), ' ']);
end
% INGRESO DE LA TOLERANCIA Y EL NÚMERO MÁXIMO DE ITERACIONES
tol = input('Ingrese la tolerancia con la que desea trabajar: ');
nmax = input('Ingrese el número máximo de iteraciones: ');4. Verificación de Convergencia mediante Pivoteo
Se aplica una lógica de localización del máximo en cada pivote para garantizar que el sistema posea una solución única y evitar errores numéricos durante el proceso.
% CONVERGENCIA DEL SISTEMA MEDIANTE LOCALIZACIÓN DEL MÁXIMO EN CADA PIVOTE
for i=1:n
vec = a(i:end,i);
p = find(vec == max(max(vec))) + (i-1);
if a(p,i) == 0;
disp('El sistema no tiene solución única');
return
end
if p ~= i;
for j=1:n;
aux = a(i,j);
a(i,j) = a(p,j);
a(p,j) = aux;
end
aux2 = b(i);
b(i) = b(p);
b(p) = aux2;
end
end5. Aplicación del Algoritmo de Gauss-Seidel
El núcleo del script ejecuta el proceso iterativo. En cada paso, se calcula el nuevo valor de las incógnitas y se verifica si la diferencia con el valor anterior es menor a la tolerancia establecida.
% APLICACIÓN DEL ALGORITMO DE GAUSS-SEIDEL
k = 1;
while k <= nmax
for i=1:n
sum = 0;
sum2 = 0;
if a(i,i) == 0
disp('El método no puede continuar, existe una división por cero')
return
end
for j=1:i-1
sum = sum + a(i,j) * x(j);
end
for j=i+1:n
sum2 = sum2 + a(i,j) * xo(j);
end
x(i) = (b(i) - (sum + sum2)) / a(i,i);
end
c = abs(x - xo);
con = 0;
for i=1:n
if abs(x(i) - xo(i)) <= tol
con = con + 1;
end
end
if con == n
disp('El vector solución es:')
format short
x
return
end
k = k + 1;
xo = x;
end
disp('El método fracasó después de N iteraciones')