Facultad de Ciencias
Departamento de Matemáticas y Ciencias de la Computación
TALLER II
El desarrollo del presente taller lo puede realizar en cualquiera de las 2 opciones siguiente:
i. De forma manuscrita digitalizando posteriormente sus respuestas y pegando las imágenes
con el desarrollo y la respuesta correspondiente en cada recuadro. Los códigos MATLAB
deben ser pegados en los recuadros solicitados, junto con su respuesta.
ii. De forma digital con el desarrollo y la respuesta correspondiente en cada recuadro. Los
códigos MATLAB deben ser pegados en los recuadros solicitados, junto con su respuesta.
En cualquiera de las dos opciones debe detallar (explicar) todo su desarrollo y adjuntar gráficos y
códigos utilizados.
Es importante que cumpla con los plazos definidos en plataforma, y entregue el archivo en formato
PDF.
Tendrá disponible para consultas tanto la sesión con el profesor, como la sesión de ayudantía en la
respectiva semana.
1. Aproxime la solución del siguiente sistema lineal
𝑥 + 2𝑦 − 2𝑧 = 7
𝑥+𝑦+𝑧 = 2
2𝑥 + 2𝑦 + 𝑧 = 5
a) Usando el método iterativo de Gauss-Seidel para aproximar la solución del sistema. ¿Es
convergente? Si el método no es convergente, ¿A qué se puede deber?
No es convergente ya que el radio espectral de la matriz A (matriz de coeficientes) es igual a 1.
clc;
clear all;
close all;
A=[1 2 -2 ;
1 1 1 ;
2 2 1 ];
B=[7 2 5];
n=length(B);
[ma na]=size(A);
R=max(abs(eig(A)));
R
ca=1;
for i=1:ma
for j=1:na
if i==j
dA(ca)=A(i,j);
ca=ca+1;
end
end
end
%%Considerando 10 iteraciones
it=10;
x=zeros(it,n);
for k=1:it-1
for l=1:n
for m=1:n
if m~=l
if l>m
x(k+1,l)=x(k+1, l)-A(l,m)*x(k+1,m);
else
x(k+1,l)=x(k+1, l)-A(l,m)*x(k,m);
end
end
end
x(k+1,l)=(x(k+1,l)+B(l))/dA(l);
end
end
b) Vuelva a aproximar la solución del sistema mediante SOR-Seidel. Escoja justificadamente el
valor de ω.
clc;
clear all;
close all;
omega=1;
n=3;
A=[1, 2, -2 ;
1, 1, 1 ;
2, 2, 1 ];
b=[7 , 2 , 5];
x0= [0,0,0];
maxiter=100;
w=1;
tol= 0.00001;
[m n]= size(A);
if m~=n, error('Matriz del sistema no cuadrada'), end
if m~= length(b), error ('sistema no coherente'),end
x=zeros(size(b));
x2=x;
if any(abs(diag(A))<eps)
error('Metodo no valido. Elemento diagonal nulo')
end
for k=1:maxiter
for i=1:n
tem=(b(i)-sum(A(i,[1:i-1 i+1:n])*x0([1:i-1 i+1:n])'))/A(i,i);
x(i)=tem*w + (1-w)*x0(i);
x0(i)=x(i);
end
if norm(x-x2)< tol
fprintf('\n SOR CONVERGE en %d iteraciones\n',k)
return
end
x2=x;
end
fprintf('\n SOR NO CONVERGE en %d iteraciones\n',maxiter)
SOR NO CONVERGE en 100 iteraciones
x=
1.0e+32 *
1.920490659345805 -1.926828912346946 0.012676506002283
Se empleara el método de Jacobi, al no converger ninguno de los 2 métodos anteriores:
clc;
clear all;
close all;
A=[1, 2, -2 ;
1, 1, 1 ;
2, 2, 1 ];
B=[7 , 2 , 5];
n=length(B);
[ma, na]=size(A);
R=max(abs(eig(A)));
R
ca=1;
for i=1:ma
for j=1:na
if i==j
dA(ca)=A(i,j);
ca=ca+1;
end
end
end
%%Considerando 10 iteraciones
it=10;
x=zeros(it,n);
for k=1:it-1
for l=1:n
for m=1:n
if m~=l
x(k+1,l)=x(k+1, l)-A(l,m)*x(k,m);
end
end
x(k+1,l)=(x(k+1,l)+B(l))/dA(l);
end
end
x
x=
0 0 0
7 2 5
13 -10 -13
1 2 -1
1 2 -1
1 2 -1
1 2 -1
1 2 -1
1 2 -1
1 2 -1
Quedando:
Incógnita Valor
X 1
Y 2
Z -1
c) Indique el error cometido en su aproximación usando norma infinita.
El error se aproxima a cero con el método de Jacobi, dando resultados exactos de las incógnitas.
2. un ingeniero civil que trabaja en la construcción requiere 4800, 5800 y 5700 m 3 de arena,
grava fina y grava gruesa, respectivamente, para cierto proyecto. Hay tres canteras de las
que puede obtenerse dichos materiales. La composición de dichas canteras es la siguiente
Arena (%) Grava gruesa (%) Grava fina (%)
Cantera 1 55 15 20
Cantera 2 25 30 60
Cantera 3 25 55 20
¿Cuantos metros cúbicos debe extraer de cada cantera a fin de satisfacer las necesidades
del ingeniero?
a) Platee el sistema de ecuación que define la situación del ingeniero
Se plantearan las variables siguientes:
X= Cantidad de metros cúbicos totales de la cantera 1
Y= Cantidad de metros cúbicos totales de la cantera 2
Z= Cantidad de metros cúbicos totales de la cantera 3
Por lo que:
0.55𝑋 + 0.25𝑌 + 0.25𝑍 = 4800
{ 0.15𝑋 + 0.3𝑌 + 0.55𝑍 = 5800
0.2𝑋 + 0.6𝑌 + 0.2𝑍 = 5700
b) Aproxime la solución aplicando algún método numérico.
Método de Jacobi:
clc;
clear all;
close all;
A=[0.55, 0.25, 0.25; 0.15, 0.3, 0.55; 0.2, 0.6, 0.2]
B=[4800, 5800, 5700];
n=length(B);
[ma, na]=size(A);
R=max(abs(eig(A)));
R
ca=1;
for i=1:ma
for j=1:na
if i==j
dA(ca)=A(i,j);
ca=ca+1;
end
end
end
%%Considerando 10 iteraciones
it=10;
x=zeros(it,n);
for k=1:it-1
for l=1:n
for m=1:n
if m~=l
x(k+1,l)=x(k+1, l)-A(l,m)*x(k,m);
end
end
x(k+1,l)=(x(k+1,l)+B(l))/dA(l);
end
end
No converge con el método de Jacobi
Método de Gauss-Seidel:
clc;
clear all;
close all;
A=[0.55, 0.25, 0.25; 0.15, 0.3, 0.55; 0.2, 0.6, 0.2]
b=[4800, 5800, 5700];
% Resolución por Gauss-Seidel
n=size(A,1);
x=zeros(n,1);
sm=1;
k=0;
while sm>0.001
k=k+1; sm=0;
for i=1:n
j=[1:i-1 i+1:n];
xi=(b(i)-A(i,j)*x(j))/A(i,i);
sm=max(abs(x(i)-xi),sm);
x(i)=xi;
end
sm=sm/max(abs(x));
end
x
No converge por el método de Gauss-Seidel
Método SOR:
clc;
clear all;
close all;
omega=1;
n=3;
A=[0.55, 0.25, 0.25; 0.15, 0.3, 0.55; 0.2, 0.6, 0.2]
b=[4800, 5800, 5700];
x0= [0,0,0];
maxiter=100;
w=1;
tol= 0.00001;
[m n]= size(A);
if m~=n, error('Matriz del sistema no cuadrada'), end
if m~= length(b), error ('sistema no coherente'),end
x=zeros(size(b));
x2=x;
if any(abs(diag(A))<eps)
error('Metodo no valido. Elemento diagonal nulo')
end
for k=1:maxiter
for i=1:n
tem=(b(i)-sum(A(i,[1:i-1 i+1:n])*x0([1:i-1 i+1:n])'))/A(i,i);
x(i)=tem*w + (1-w)*x0(i);
x0(i)=x(i);
end
if norm(x-x2)< tol
fprintf('\n SOR CONVERGE en %d iteraciones\n',k)
return
end
x2=x;
end
fprintf('\n SOR NO CONVERGE en %d iteraciones\n',maxiter)
No converge por el método de SOR
Se debe emplear un método directo al no converger con
ningún método iterativo.
c) Estime el error cometido en norma infinito.
3. Considere el siguiente sistema lineal
4𝑥1 − 𝑥2 − 𝑥4 = 0
−𝑥1 + 4𝑥2 − 𝑥3 − 𝑥5 = 5
− 𝑥2 + 4𝑥3 − 𝑥6 = 0
−𝑥1 + 4𝑥4 − 𝑥5 = 6
− 𝑥2 − 𝑥4 + 4𝑥5 − 𝑥6 = −2
− 𝑥3 − 𝑥5 + 4𝑥6 = 6
a. Aproxime la solución del siguiente sistema lineal mediante un método de SOR. Justifique la
elección de su ω.
Mediante el método iterativo de SOR: ω=1
clc;
clear all;
close all;
omega=1;
n=6;
A=[4, -1, 0, -1, 0, 0 ; -1, 4, -1, 0 ,-1 ,0 ; 0, -1, 4, 0, 0, -1; -1,
0, 0, 4, -1, 0; 0, -1, 0, -1, 4, -1; 0, 0, -1, 0, -1, 4];
b=[0, 5, 0, 6, -2, 6];
x0= [0,0,0,0,0,0];
maxiter=100;
w=1;
tol= 0.00001;
[m n]= size(A);
if m~=n, error('Matriz del sistema no cuadrada'), end
if m~= length(b), error ('sistema no coherente'),end
x=zeros(size(b));
x2=x;
if any(abs(diag(A))<eps)
error('Metodo no valido. Elemento diagonal nulo')
end
for k=1:maxiter
for i=1:n
tem=(b(i)-sum(A(i,[1:i-1 i+1:n])*x0([1:i-1 i+1:n])'))/A(i,i);
x(i)=tem*w + (1-w)*x0(i);
x0(i)=x(i);
end
if norm(x-x2)< tol
fprintf('\n SOR CONVERGE en %d iteraciones\n',k)
return
end
x2=x;
end
fprintf('\n SOR NO CONVERGE en %d iteraciones\n',maxiter)
Columns 1 through 4
0.999997066656751 1.999997496234923 0.999998931451415 1.999998229570736
Columns 5 through 6
0.999998488844099 1.999999355073878
Variable Valor
X1 0.999997066656751
X2 1.999997496234923
X3 0.999998931451415
X4 1.999998229570736
X5 0.999998488844099
X6 1.999999355073878