-
Notifications
You must be signed in to change notification settings - Fork 0
/
jacobi.m
48 lines (44 loc) · 1.58 KB
/
jacobi.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
% La siguiente funcion realiza el metodo de jacobi para encontrar la solucion
% de un sistema de ecuaciones lineales
% Autores
% Elizabeth Corte, Javier Sotamba
% Fecha de implementacion: 22/10/2020
% Parametros de entrada
% A: matriz de coeficientes
% b: vector de terminos independientes
% x0: vector inicial del sistemas
% tol: tolerancia del resultado
% max: numero maximo de iteraciones
% parametros de salida
% x: el vector de solucion
% er: error relativo cometido
% it: el numero de iteraciones que se han ocupado
function [x,it]= jacobi(A,b,x0,tol,max)
[A1,A2]= size(A);
[b1,b2] = size(b);
if A2 == b1
[n,n]=size(A); % asignar el tamaño de la matriz A
if nargin('jacobi') < 3 % condicion para entrar en el bucle
x0=zeros(n,1); % declarar e inicializar la variable x0
tol= 1.e-5; % decalrar la tolerancia del sistema
max=1000; %declarar el numero maximo de iteraciones
end
it=0; % inicializar la iteraciones
er=1000.0;% declarar el error
D=diag(diag(A));% obtener la matriz diagonal
D1=inv(D);% obtener la inversa de la matriz
E=-tril(A,-1); % obtener la matriz triangular inferior
F=-triu(A,+1);% obtener la matriz triangular superior
res= norm(A*x0 - b);
er= res/norm(b); % obtener el error relativo
while it<max && er >tol %bucle para resolver el sistema lineal
it=it+1;% aumentar la iteracion
x=D1*(E+F)*x0+D1*b; % aplicar el metodo
res= norm(A*x - b);
er= res/norm(b);%calcular el error
x0=x;% actualizar el resultado
end
else
error ("Las dimensiones de las matrices no son iguales. \n")
end
end