Método de Richardson: Codigo alternativo

21 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)

Categories

Find more on Descriptive Statistics in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!