Método de Richardson: Codigo alternativo

19 views (last 30 days)
Fabian
Fabian on 2 Dec 2024 at 5:58
Consegui resolver el siguiente ejercicio
Una alternativa al Método de Jacobi y Gauss-Seidel es el Método de Richardson (Iteración Relajada). Este se basa en la iteracion simple:
donde α es un parámetro de relajación.
El objetivo de este ejercicio es implementar el Método de Richardson para resolver un sistema de ecuaciones lineales Ax = b. Para ello adapte lo realizado para Jacobi y Gauss-Seidel.
Define unanueva función llamada richardson que reciba los siguientes parámetros de entrada:
  • A: Matriz de coeficientes (n × n).
  • b:Vector dellado derecho(n × 1).
  • x0: Vector inicial (n × 1).
  • α:Parametro derelajacion.
  • tol: Tolerancia para el criterio de convergencia.
  • max iter: Numero maximo de iteraciones.
  • El programa debe entregar la solucion x, el numero de iteraciones que tardo en converger o indicar que no ha convergido.
Esto me dio el siguiente codigo:
function [x, iter, err] = richardson(A, b, x0, alpha, tol, max_iter)
% Método de Richardson (Iteración Relajada)
% A: Matriz de coeficientes (n x n)
% b: Vector del lado derecho (n x 1)
% x0: Vector inicial (n x 1)
% alpha: Parámetro de relajación
% tol: Tolerancia para el criterio de convergencia
% max_iter: Número máximo de iteraciones
% Inicialización
x = x0;
err = tol + 1; % Inicializamos el error con un valor mayor a tol
iter = 0; % Contador de iteraciones
% Iteración de Richardson
while err > tol && iter < max_iter
% Calcular el nuevo vector x
x_new = x + alpha * (b - A * x);
% Calcular el error como la norma del cambio relativo
err = norm(x_new - x, 2) / norm(x_new, 2);
% Actualizar x y el contador de iteraciones
x = x_new;
iter = iter + 1;
end
% Mostrar un mensaje si no converge
if iter == max_iter
disp('El método no convergió dentro del número máximo de iteraciones.');
end
end
A = [4, 1; 1, 3]; % Matriz 2x2
b = [1; 2]; % Vector del lado derecho
x0 = [0; 0]; % Vector inicial
alpha = 0.1; % Parámetro de relajación
tol = 1e-6; % Tolerancia
max_iter = 100; % Máximo de iteraciones
% Llamada a la función
[x, iter, err] = richardson(A, b, x0, alpha, tol, max_iter);
% Mostrar resultados
disp('Solución aproximada:');
disp(x);
disp(['Iteraciones realizadas: ', num2str(iter)]);
disp(['Error final: ', num2str(err)]);
Quisiera saber si existen formas alternativas de hacerlo, ya sea con un codigo mas simple y compacto.
Ademas la tarea finaliza pidiendome lo siguiente:
Utilice su programa para resolver el sistema asociados a los datos data-2 (paquete de datos descargable que ya descargue), utilizando α = 0.2992, max iter = 1000, tol = 1e 5 y el vector nulo como vector inicial x0.
Quisiera saber como puedo conectar el codigo que obtuve con el paquete de datos data-2

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!