Sunteți pe pagina 1din 22

Resolución de

ECUACIONES
LINEALES
Metodos:
1.Gauss Jordan
2.Jacobi

Ing. Viviana Ortellado


3.Gauss - Seidel
METODO DE JACOBI
• El método de Jacobi es un método iterativo, usado para
resolver sistemas de ecuaciones lineales del tipo Ax=b . El
algoritmo toma su nombre del matemático alemán Carl
Gustav Jakob Jacobi. El método de Jacobi consiste en usar
fórmulas como iteración de punto fijo.

Ing. Viviana Ortellado


• La sucesión se construye descomponiendo la matriz del
sistema A en la forma siguiente:
A=D+Q
Método de Jacobi
Sea 𝐴𝑥=𝑏 el sistema lineal a resolver, con 𝐴=(𝑎𝑖𝑗); 𝑥=(𝑥𝑗)𝑡.
El método de Jacobi, tiene como condición suficiente de
convergencia que la matriz 𝐴 sea diagonal estrictamente
dominante, es decir, que se verifique:
|𝑎𝑘𝑘| > σ𝑛𝑗=1 |𝑎𝑘𝑗| ∀𝑘=1,𝑛.

Ing. Viviana Ortellado


𝑗≠𝑘
Se parte de una aproximación inicial 𝑥(0).

Se expresa la matriz del sistema 𝐴=(𝑎𝑖𝑗) como la suma de dos


matrices:
𝐷=(𝑎𝑖𝑖); 𝑖=1,𝑛; 𝑚𝑎𝑡𝑟𝑖𝑧 𝑑𝑖𝑎𝑔𝑜𝑛𝑎𝑙 𝑦
𝑄=(𝑞𝑖𝑗) 𝑚𝑎𝑡𝑟𝑖𝑧 𝑐𝑢𝑎𝑑𝑟𝑎𝑑𝑎 𝑐𝑜𝑛 𝑞𝑖𝑗=𝑎𝑖𝑗, ∀ 𝑖≠𝑗 ∧ 𝑞𝑗𝑗=0,
∀ 𝑗= 1,𝑛.
Así el sistema se escribe:
(𝐷+𝑄)𝑥=𝑏

Con lo cual, para 𝑘=1,2,⋯, se tienen


𝑥(𝑘) =𝐷−1(𝑏−𝑄𝑥(𝑘−1))

es la fórmula de iteración del método:

Ing. Viviana Ortellado


Se interrumpe cuando ‖||𝑥(𝑘)−𝑥(𝑘−1)||‖<𝛿
𝑜 𝑏𝑖𝑒𝑛 ‖||𝑥(𝑘)−𝑥(𝑘−1)‖|| / ||‖𝑥(𝑘) ‖||< 𝛿
siendo delta la tolerancia prefijada y ‖|| ||‖ la norma utilizada.
Ing. Viviana Ortellado
EJERCICIO

Ing. Viviana Ortellado


A=[ ] ; % A matriz no singular y diagonal dominante n*n
B=[ ] ; % B es matriz n*1 de terminus independientes
P0=[ ] ; % P0 matriz n*1 de valores iniciales
m= ; % m numero max de iteriones
tol= ; % tolerancia

n=length(B);
X=zeros(size(B));
for i=1:m
for j=1:n

Ing. Viviana Ortellado


X(j)=(B(j)-A(j,[1:j-1 j+1:n])*P0([1:j-1 j+1:end]))/A(j,j);
end
err=norm(X-P0);
relerr=err/norm(X);

if tol>err||tol>relerr
break;
else P0=X;
end
end
X % Salida, aprox a la solución
A=[ ] ; % A matriz no singular y diagonal dominante n*n
B=[ ] ; % B es matriz n*1 de terminus independientes
P0=[ ] ; % P0 matriz n*1 de valores iniciales
m= ; % m numero max de iteriones
tol= ; % tolerancia

n=length(B);
X=zeros(size(B));
for i=1:m
for j=1:n

Ing. Viviana Ortellado


X(j)=(B(j)-A(j,[1:j-1 j+1:n])*P0([1:j-1 j+1:end]))/A(j,j);
end
err=norm(X-P0);
relerr=err/norm(X);
result(i,:)=[i X’ err relerr ]; % Respuesta matricial
if tol>err||tol>relerr
break;
else P0=X;
end
end
result % Salida, aprox a la solución
METODO DE GAUSS-SEIDEL
En el método de Jacobi, empleamos siempre los valores antiguos de
las variables aunque ya hayamos calculado los nuevos valores de
algunas de ellas.

Parece lógico pensar que, si los valores nuevos se aproximan mas a


la solución, entonces se obtendrán mejores resultados usando ya

Ing. Viviana Ortellado


dichos valores. En esto consiste el método de Gauss-Seidel, se
sustituyen en la derecha los valores actualizados que ya tenemos en
cada momento.

Sea 𝐴𝑥=𝑏 el sistema lineal a resolver, con 𝐴=(𝑎𝑖𝑗); 𝑥=(𝑥𝑗)𝑡.


El método de Jacobi, tiene como condición suficiente de
convergencia que la matriz 𝐴 sea diagonal estrictamente dominante,
es decir, que se verifique:
|𝑎𝑘𝑘| > σ𝑛𝑗=1 |𝑎𝑘𝑗| ∀𝑘=1,𝑛.
𝑗≠𝑘
Se parte de una aproximación inicial 𝑥(0).

La diferencia con el método de Jacobi, es que cada incógnita 𝑥𝑠(𝑘)


obtenida es utilizada para el cálculo de la siguiente, entonces la
fórmula de iteración es:

Ing. Viviana Ortellado


Se interrumpe cuando ‖ ||𝑥(𝑘)−𝑥(𝑘−1)||‖<𝛿
𝑜 𝑏𝑖𝑒𝑛 ‖ ||𝑥(𝑘)−𝑥(𝑘−1)‖|| / ||‖𝑥(𝑘)||< 𝛿
siendo delta la tolerancia prefijada y ‖|| ||‖ la norma utilizada.
Ing. Viviana Ortellado
A=[ ] ; % A matriz no singular y diagonal dominante n*n
B=[ ] ; % B es matriz n*1 de terminus independientes
P0=[ ] ; % P matriz n*1 de valores iniciales
m= ; % m numero max de iteriones
tol= ; % tolerancia

n=length(B);
X=P0;
for i=1:m
for j=1:n

Ing. Viviana Ortellado


X(j)=(B(j)-A(j,[1:j-1 j+1:n])*X([1:j-1 j+1:end]))/A(j,j);
end
err=norm(X-P0);
relerr=err/norm(X);

if tol>err||tol>relerr
break;
else P0=X;
end
end
X % Salida, aprox a la solución
A=[ ] ; % A matriz no singular y diagonal dominante n*n
B=[ ] ; % B es matriz n*1 de terminus independientes
P0=[ ] ; % P0 matriz n*1 de valores iniciales
m= ; % m numero max de iteriones
tol= ; % tolerancia

n=length(B);
X=P0;
for i=1:m
for j=1:n

Ing. Viviana Ortellado


X(j)=(B(j)-A(j,[1:j-1 j+1:n])*X([1:j-1 j+1:end]))/A(j,j);
end
err=norm(X-P0);
relerr=err/norm(X);
result(i,:)=[i X’ err relerr ]; % Respuesta matricial
if tol>err||tol>relerr
break;
else P0=X;
end
end
result % Salida, aprox a la solución
METODO DE GAUSS JORDAN
Sea 𝐴𝑥=𝑏 el sistema lineal a resolver, con 𝐴=(𝑎𝑖𝑗); 𝑥=(𝑥𝑗)𝑡

El método de Gauss Jordan, considera la matriz ampliada


𝑀=(𝐴,𝑏) y se realiza en dos etapas, diagonalización y

Ing. Viviana Ortellado


retrosustitución

La diagonalización con pivoteo parcial, es tomar como pivot akk,


distinto de cero y el mayor de su columna intercambiando filas,
si es necesario, para k = 1, 2, …, n-1, y se realizan las operaciones
sobre las filas para:
i = k + 1;
𝑎𝑖𝑗(𝑘)=𝑎𝑖𝑗(𝑘−1)−𝑚𝑖𝑘𝑎𝑖𝑗(𝑘−1), 𝑐𝑜𝑛 𝑚𝑖𝑘=𝑎𝑖𝑘(𝑘−1)/𝑎𝑘𝑘(𝑘−1)
con lo cual se obtiene un sistema equivalente, pero con matriz
en forma escalonada.

El sistema admite solución única si 𝐴 es no singular.

La retrosustitución, que es la segunda parte, se inicia con la


obtención de:

Ing. Viviana Ortellado


𝑥𝑛=𝑏𝑛(𝑛−1) /𝑎𝑛𝑛(𝑛−1)

y luego sucesivamente, para k = n-1, n-2, …, 2, 1

𝑥𝑘= σ𝑗=𝑛
(𝑏𝑘(𝑛−1)−𝑗=𝑘+1 𝑎 𝑘𝑗
(𝑛−1)
𝑥 𝑗 ) / 𝑎 𝑘𝑘
(𝑛−1).
• Resolver el sistema de ecuaciones lineales por el método de
Gauss-Jordan.

Ing. Viviana Ortellado


Gauss - matlab
A=[4 1 2;3 21 3;4.3 -0.4 -7];
B=[3 2 1]';
delta=1e-4;

n=length(B);
X=zeros(n,1);
C=[A B];

Ing. Viviana Ortellado


if det(A)==0
disp('el sistema no tiene solucion o tiene infinitas soluciones');
else
j=0;
i=n;
while(j<n-1)
if i==n
j=j+1;
i=j;
[pibot,t]=max(abs(C(j:end,j)));
if delta>abs(pibot)
disp('el sistema no tiene solucion o tiene infinitas soluciones')
break;
else
aux=C(j,j:end);
C(j,j:end)=C(j+t-1,j:end);
C(j+t-1,j:end)=aux;
end
end

Ing. Viviana Ortellado


i=i+1;
k=C(i,j)/C(j,j);
C(i,j:end)=C(i,j:end)-k*C(j,j:end);
end
end
X(n)=C(end,end)/C(n,n);
for i=n-1:-1:1
X(i)=(C(i,end)-C(i,i+1:n)*X(i+1:n))/C(i,i);
end
resultG=[C X]
Gauss- Matlab- otra manera
A=[4 1 2;3 21 3;4.3 -0.4 -7]; %Input - A matriz no singular n x n
B=[3 2 1]'; % - B matriz n x 1

[n n] = size(A);
X = zeros(n,1);
C = zeros(1,n+1);

Ing. Viviana Ortellado


%Matriz ampliada: Aug=[A|B]
Aug=[A B];
for p = 1 : n-1
%Pivoteo parcial para la columna p
[Y,j] = max(abs(Aug(p:n,p)));
%Intercambio de las filas p con la j
C=Aug(p,:);
Aug(p,:)=Aug(j+p-1,:);
Aug(j+p-1,:)=C;
if Aug(p,p)==0
'A es singular. La solucion no es unica'
break ;
end

%Proceso de eliminacion para la columna p


for k=p+1:n
m = Aug(k,p)/Aug(p,p);

Ing. Viviana Ortellado


Aug(k,p:n+1) = Aug(k,p:n+1) - m*Aug(p,p:n+1);
end
end

%Retrosustitucion
X(n)=Aug(n,n+1)/Aug(n,n);
for k=n-1:-1:1
X(k) = (Aug(k,n+1) - Aug(k,k+1:n)*X(k+1:n))/Aug(k,k);
end

X
EJERCICIOS

Ing. Viviana Ortellado

S-ar putea să vă placă și