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), ' ']);
end

3. 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
end

5. 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')

Entradas relacionadas: