Está en la página 1de 30

UNIVERSIDAD MAYOR DE SAN ANDRÉS

FACULTAD DE INGENIERÍA
PROGRAMACIÓN Y MÉTODOS NUMÉRICOS

NOMBRE: Gozalvez Carvajal Melani Aida


TÍTULO DE LA PRÁCTICA: Tarea 7
CARRERA: Ing. Química
NOMBRE DEL DOCENTE: Ing. Roberto Parra
FECHA DE REALIZACIÓN: 12/09/21
FECHA DE ENTREGA: 14/09/21
TAREA 7
PRQ404 – SISTEMAS DE ECUACIONES
1.- Considere el sistema siguiente con tres incógnitas a, u y v:

u2 – 2v2 = a2

u+v=2

a2 – 2a – u = 0

Encuentre los valores reales de las incógnitas, por medio de a) Solver de Excel, y b) Un programa hecho
en MATLAB.

PSEUDOCÓDIGO DIAGRAMA DE FLUJO


1. INICIO INICIO
2. Indicar las ecuaciones lineales
3. Leer xo (valores iniciales)
4. Leer tol (tolerancia) Xo,tol,maxit

5. Leer maxit (número máximo de iteraciones)


6. Hacer error=norm((f(xo(1),xo(2),xo(3))),2
error=norm((f(xo(1),xo(2),xo(3))),2
7. Hacer iter=1
8. Imprimir iter x(1) x(2) x(3) f(x1) f(x2) f(x3)
9. Mientras error>=tol iter=1
10. Hacer fxo=(f(xo(1),xo(2),xo(3)));
11. Hacer jfxo=jf(xo(1),xo(2),xo(3)); iter
12. Hacer x1=xo-(inv(jfxo)*fxo)
13. Hacer error=norm((f(x1(1),x1(2),x1(3))),2);
14. Si iter > maxit
15. Imprimir maxit iter > maxit
16. Fin mientras
fxo=(f(xo(1),xo(2),xo(3)))
17. Imprimir iter,x1(1),x1(2),x1(3),fxo(1),fxo(2),fxo(3)) jfxo=jf(xo(1),xo(2),xo(3))
18. Hacer iter=iter+1; x1=xo-(inv(jfxo)*fxo)
19. Hacer xo=x1;
maxit
20. fin error>=tol
21. imprimir ('las soluciones son:')
22. p u=1:n
23. Imprimir u,xo(u) iter,x1(1),x1(2),x1(3),fxo(1),fxo(2),fxo(3))
24. FIN
PROGRAMA EN MATLAB
%P7_Ej1 iter=iter+1;
%ejercicio uno sistema no lineal xo=x1
clc
clear all
%definimos las ecuaciones, igualadasacero u,xo(u)
syms u v a
fs=[u^2-(2*v^2)-a^2;u+v-2;a^2-(2*a)-u];
js = jacobian(fs);
f=inline(fs); FIN
jf=inline(js);
%pedimos datos
n=3;
xo=input('introduzca un vector columna de condiciones
iniciales: ');
tol=input('introduzca un valor para la tolerancia:
');
maxit=input('introduzca el número máximo de
iteraciones: ');
%procedimiento
error=norm((f(xo(1),xo(2),xo(3))),2);
iter=1;
fprintf(' iter x(1) x(2) x(3) f(x1) f(x2) f(x3)')
while error >= tol
fxo=(f(xo(1),xo(2),xo(3)));
jfxo=jf(xo(1),xo(2),xo(3));
x1=xo-(inv(jfxo)*fxo);
error=norm((f(x1(1),x1(2),x1(3))),2);
if iter > maxit
fprintf('No se puede solucionar en %g
iteraciones',maxit)
return
end
fprintf('\n %4.4f %4.4f %4.4f %4.4f %4.4f %4.4f
%4.4f\n',iter,x1(1),x1(2),x1(3),fxo(1),fxo(2),fxo(3))
iter=iter+1;
xo=x1;
end
disp('las soluciones son:')
for u=1:n
fprintf(' x(%1.0f) = %g\n',u,xo(u))
end
RESULTADOS
introduzca un vector columna de condiciones iniciales: [1 0 1]
introduzca un valor para la tolerancia: 10^-10
introduzca el número máximo de iteraciones: 30
iter x(1) x(2) x(3) f(x1) f(x2) f(x3)
1.0000 -4.5000 0.0000 3.0000 -3.0000 -1.0000 -1.0000

2.0000 -1.8598 0.2073 1.7927 -38.2500 1.0000 29.2500

3.0000 -0.7748 0.9730 1.0270 -9.8431 0.0000 6.9709

4.0000 -0.5059 1.1954 0.8046 -1.7633 0.0000 1.1771

5.0000 -0.4880 1.2139 0.7861 -0.1218 0.0000 0.0723

6.0000 -0.4879 1.2140 0.7860 -0.0007 0.0000 0.0003

7.0000 -0.4879 1.2140 0.7860 -0.0000 0.0000 0.0000


las soluciones son:
x(1) = -0.487945
x(2) = 1.21398
x(3) = 0.78602
2.-
PSEUDOCÓDIGO
1. INICIO
2. function [A B] =Orden(A,B)
3. Hacer n=length(A);
4. Para i=1:n
5. Hacer Aux=0;
6. Hacer Aux1=0;
7. Hacer Mayor=0;
8. Para j=1:n
9. si abs(A(i,j))>=abs(Mayor)
10. Hacer Mayor=A(i,j);
11. Hacer m=j;
12. FIN Para
13. FIN Para
14. Aux=A(i,:);
15. A(i,:)=A(m,:);
16. A(m,:)=Aux;
17. Aux1=B(i);
18. B(i)=B(m);
19. B(m)=Aux1;
20. fin
21. fin

22. function [X] = Eliminacion_Gauss(A,B)


23. [A B] =Orden(A,B)
24. [n,n]=size(A);
25. A=[A';B']';
26. X=zeros(n,1);
27. para p=1:n
28. para k=[1:p-1,p+1:n]
29. si A(p,p)==0
30. romper
31. fin
32. m=A(k,p)/A(p,p);
33. A(k,:)=A(k,:)-(m*A(p,:))
34. fin
35. fin
36. X=A(:,n+1)./diag(A)
37. FIN

PROGRAMA EN MATLAB
function [A B] =Orden(A,B)
n=length(A);
for i=1:n
Aux=0;
Aux1=0;
Mayor=0;
for j=1:n
if abs(A(i,j))>=abs(Mayor)
Mayor=A(i,j);
m=j;
end
end
Aux=A(i,:);
A(i,:)=A(m,:);
A(m,:)=Aux;
Aux1=B(i);
B(i)=B(m);
B(m)=Aux1;
end
end

function [X] = Eliminacion_Gauss(A,B)


%A es matriz de coeficientes.
%B coeficientes de igualdades
%El sistema es AX=B
[A B] =Orden(A,B)
[n,n]=size(A);
A=[A';B']';
X=zeros(n,1);
for p=1:n
for k=[1:p-1,p+1:n]
if A(p,p)==0
break
end
m=A(k,p)/A(p,p);
A(k,:)=A(k,:)-(m*A(p,:))
end
end
X=A(:,n+1)./diag(A)
End

RESULTADOS
A=[-2 0 0.27 1 2;0 0 1 0 1;0 -3 2 2 0;0 1 -0.25 0 0;-1.5 0 0 0 1]

A=

-2.0000 0 0.2700 1.0000 2.0000


0 0 1.0000 0 1.0000
0 -3.0000 2.0000 2.0000 0
0 1.0000 -0.2500 0 0
-1.5000 0 0 0 1.0000

>> B=[6;6;12;0;0]

B=

6
6
12
0
0

>> [X] = Eliminacion_Gauss(A,B)

A=

-1.5000 0 0 0 1.0000
0 1.0000 -0.2500 0 0
-2.0000 0 0.2700 1.0000 2.0000
0 -3.0000 2.0000 2.0000 0
0 0 1.0000 0 1.0000

B=

0
0
6
12
6

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.2500 0 0 0
-2.0000 0 0.2700 1.0000 2.0000 6.0000
0 -3.0000 2.0000 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.2500 0 0 0
0 0 0.2700 1.0000 0.6667 6.0000
0 -3.0000 2.0000 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.2500 0 0 0
0 0 0.2700 1.0000 0.6667 6.0000
0 -3.0000 2.0000 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.2500 0 0 0
0 0 0.2700 1.0000 0.6667 6.0000
0 -3.0000 2.0000 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.2500 0 0 0
0 0 0.2700 1.0000 0.6667 6.0000
0 -3.0000 2.0000 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.2500 0 0 0
0 0 0.2700 1.0000 0.6667 6.0000
0 -3.0000 2.0000 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.2500 0 0 0
0 0 0.2700 1.0000 0.6667 6.0000
0 0 1.2500 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.2500 0 0 0
0 0 0.2700 1.0000 0.6667 6.0000
0 0 1.2500 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000
A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.2500 0 0 0
0 0 0.2700 1.0000 0.6667 6.0000
0 0 1.2500 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 0 0.9259 0.6173 5.5556
0 0 0.2700 1.0000 0.6667 6.0000
0 0 1.2500 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 0 0.9259 0.6173 5.5556
0 0 0.2700 1.0000 0.6667 6.0000
0 0 -0.0000 -2.6296 -3.0864 -15.7778
0 0 1.0000 0 1.0000 6.0000

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 0 0.9259 0.6173 5.5556
0 0 0.2700 1.0000 0.6667 6.0000
0 0 -0.0000 -2.6296 -3.0864 -15.7778
0 0 0 -3.7037 -1.4691 -16.2222

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 0 0.9259 0.6173 5.5556
0 0 0.2700 1.0000 0.6667 6.0000
0 0 -0.0000 -2.6296 -3.0864 -15.7778
0 0 0 -3.7037 -1.4691 -16.2222

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.0000 0.0000 -0.4695 0.0000
0 0 0.2700 1.0000 0.6667 6.0000
0 0 -0.0000 -2.6296 -3.0864 -15.7778
0 0 0 -3.7037 -1.4691 -16.2222

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.0000 0.0000 -0.4695 0.0000
0 0 0.2700 0 -0.5070 0
0 0 -0.0000 -2.6296 -3.0864 -15.7778
0 0 0 -3.7037 -1.4691 -16.2222

A=

-1.5000 0 0 0 1.0000 0
0 1.0000 -0.0000 0.0000 -0.4695 0.0000
0 0 0.2700 0 -0.5070 0
0 0 -0.0000 -2.6296 -3.0864 -15.7778
0 0 0.0000 -0.0000 2.8779 6.0000

A=

-1.5000 0 -0.0000 0.0000 0 -2.0848


0 1.0000 -0.0000 0.0000 -0.4695 0.0000
0 0 0.2700 0 -0.5070 0
0 0 -0.0000 -2.6296 -3.0864 -15.7778
0 0 0.0000 -0.0000 2.8779 6.0000

A=

-1.5000 0 -0.0000 0.0000 0 -2.0848


0 1.0000 -0.0000 0.0000 0 0.9788
0 0 0.2700 0 -0.5070 0
0 0 -0.0000 -2.6296 -3.0864 -15.7778
0 0 0.0000 -0.0000 2.8779 6.0000

A=

-1.5000 0 -0.0000 0.0000 0 -2.0848


0 1.0000 -0.0000 0.0000 0 0.9788
0 0 0.2700 -0.0000 0 1.0571
0 0 -0.0000 -2.6296 -3.0864 -15.7778
0 0 0.0000 -0.0000 2.8779 6.0000

A=

-1.5000 0 -0.0000 0.0000 0 -2.0848


0 1.0000 -0.0000 0.0000 0 0.9788
0 0 0.2700 -0.0000 0 1.0571
0 0 0.0000 -2.6296 0 -9.3431
0 0 0.0000 -0.0000 2.8779 6.0000

X=

1.3899
0.9788
3.9152
3.5530
2.0848
INICIO

function [A B] =Orden(A,B)

n=length(A)

i=1;i=i+1;i<=n

Aux=0
Aux1=0
Mayor=0

j=1;j=j+1;j<=n

abs(A(i,j))>=abs(Mayor)

Mayor=A(i,j);
Hacer m=j

Aux=A(i,:)
A(i,:)=A(m,:)
A(m,:)=Aux
Aux1=B(i)
B(i)=B(m)
B(m)=Aux1

FIN
DIAG
3.- El sistema de ecuaciones que sigue está diseñado para determinar concentraciones (las c están en
g/m3 ) en una serie de reactores acoplados, como función de la cantidad de masa que entra a cada uno
de ellos (los lados derechos están en g/día),

–4c1 – c2 + 12c3 = 2 350

–3c1 + 18c2 – 6c3 = 1 200

15c1 – 3c2 – c3 = 3 800

No cambie el orden de estas ecuaciones!

Determine la solución por el método de Gaus con Pivoteo Parcial. b) Determine cuánto debe
incrementarse la tasa de masa de entrada al reactor 3 para inducir un aumento de 10 g/m3 en la
concentración del reactor 1. c) ¿Cuánto se reduciría la concentración en el reactor 3 si la tasa de masa
de entrada a los reactores 1 y 2 se redujera en 500 y 250 g/día, respectivamente?

PSEUDOCÓDIGO DIAGRAMA DE FLUJO


1. INICIO
2. Leer la matriz A
3. Leer la matriz B
4. Hacer m=length(A);
5. Funcioón [X] = Eliminacion_Gauss(A,B);
Imprimir las soluciones del sistema
6. Para u=1:m
7. Imprimir u,X(u)
8. Fin
9. Hacer b=(15*(X(1)))-3*X(2)-3800-X(3);
10. Hacer c=3800+X(3)+(3*(X(2)-250))-
(15*(X(1)-500));
11. Imprimir se debe incrementar la tasa
masa de entrada al reactor 3 en:
%g[g/m^3]',b
12. Imprimir se debe reducir en: %g [g/m^3]
para para la entrada solicitada en
losreactores 1 y 2\n',c
PROGRAMA EN MATLAB
%P7_E3
clear all
clc
A=input('ingrese la matriz de
coeficientes A: ');
B=input('ingrese la matriz columna de
respuestas B: ');
m=length(A);
[X] = Eliminacion_Gauss(A,B);
fprintf ('\n las soluciones del
sistema son:')
for u=1:m
fprintf ('\n x(%1.0f) = %6.3f
',u,X(u)) INICIO
end
b=(15*(X(1)))-3*X(2)-3800-X(3);
c=3800+X(3)+(3*(X(2)-250))-(15*(X(1)-
500));
A,B
fprintf('\n se debe incrementar la
tasa masa de entrada al reactor 3 en:
%g[g/m^3]',b)
fprintf('\n se debe reducir en: %g m=length(A
[g/m^3] para para la entrada
solicitada en losreactores 1 y
2\n',c)
RESULTADOS Función [X] = Eliminacion_Gauss(A,B)
las soluciones del sistema son:
x(1) = 320.207
x(2) = 227.202
u=1;u=u+1;u<=m
x(3) = 321.503
se debe incrementar la tasa masa de entrada al
reactor 3 en: 2.84217e-13 [g/m^3]
se debe reducir en: 6750 [g/m^3] para para la u,X(u)
entrada solicitada en los reactores 1 y 2

b=(15*(X(1)))-3*X(2)-3800-X(3)
c=3800+X(3)+(3*(X(2)-250))-(15*(X(1)-500))

b,c

FIN

4.- Usando pivoteo parcial total, resuelva el siguiente sistema de ecuaciones:

2 x1 −x2 +3 x 3+ 7 x 4=15

4 x1 + 4 x 2+7 x 4 =11

2 x1 + x 2 + x 3+3 x 4 =7

6 x 1+ 5 x 2 +4 x3 +17 x 4 =31

Elabore un programa en MATLAB, que resuelva n ecuaciones.

PSEUDOCÓDIGO DIAGRAMA DE FLUJO


1. INICIO
2. function [ X ] = Eliminacion_Gauss( A,B )
INICIO
3. función [ A B ] = Ordena_Matriz( A,B )
4. Hacer [n n]=size(A);
5. Hacer A=[A';B']';
6. Hacer X=zeros(n,1); function [X] = Eliminacion_Gauss(A,B)
7. Para p=1:n
8. Para k=[1:p-1,p+1:n]
9. Si A(p,p)==0 [A B] =Orden(A,B)
10. Romper n,n]=size(A);
A=[A';B']';
11. Fin
X=zeros(n,1);
12. Hacer m=A(k,p)/A(p,p);
13. Hcer A(k,:)=A(k,:)-(m*A(p,:))
14. fin p=1;p=p+1;p<=n
15. fin
16. Hacer X=A(:,n+1)./diag(A)
17. FIN
k=[1:p-1,p+1:n]
PROGRAMA EN MATLAB
function [ X ] =
Eliminacion_Gauss( A,B )
%A es la matriz de coeficientes
%B matriz columna de coeficientes de
igualdades break
%el sistema es AX=B matrices
[ A B ] = Ordena_Matriz( A,B )
[n n]=size(A);
A=[A';B']'; A(p,p)==0
X=zeros(n,1);
for p=1:n
for k=[1:p-1,p+1:n]
if(A(p,p)==0)
break m=A(k,p)/A(p,p);
end A(k,:)=A(k,:)-(m*A(p,:))
m=A(k,p)/A(p,p);
A(k,:)=A(k,:)-(m*A(p,:))
end k
end
X=A(:,n+1)./diag(A)
end
p
RESULTADOS
>> A=[2 -1 3 7;4 4 0 7;2 1 1 3;6 5 4 17]
A=
2 -1 3 7 X=A(:,n+1)./diag(A)
4407
2113
6 5 4 17 X
>> B=[15 11 7 31]'
B=
15
11 FIN
7
31
>> [ X ] = Eliminacion_Gauss( A,B )
A=
6 5 4 17
2 -1 3 7
4407
2113
B=
31
15
11
7
A=
6.0000 5.0000 4.0000 17.0000 31.0000
0 -2.6667 1.6667 1.3333 4.6667
0 0.6667 -2.6667 -4.3333 -9.6667
2.0000 1.0000 1.0000 3.0000 7.0000
A=
6.0000 5.0000 4.0000 17.0000 31.0000
0 -2.6667 1.6667 1.3333 4.6667
0 0.6667 -2.6667 -4.3333 -9.6667
0 -0.6667 -0.3333 -2.6667 -3.3333
A=
6.0000 0 7.1250 19.5000 39.7500
0 -2.6667 1.6667 1.3333 4.6667
0 0.6667 -2.6667 -4.3333 -9.6667
0 -0.6667 -0.3333 -2.6667 -3.3333
A=
6.0000 0 0 6.8333 12.8333
0 -2.6667 1.6667 1.3333 4.6667
0 0 -2.2500 -4.0000 -8.5000
0 0 -0.7500 -3.0000 -4.5000
A=
6.0000 0 0 6.8333 12.8333
0 -2.6667 0 -1.6296 -1.6296
0 0 -2.2500 -4.0000 -8.5000
0 0 -0.7500 -3.0000 -4.5000
A=
6.0000 0 0 6.8333 12.8333
0 -2.6667 0 -1.6296 -1.6296
0 0 -2.2500 -4.0000 -8.5000
0 0 0 -1.6667 -1.6667
A=
6.0000 0 0 -0.0000 6.0000
0 -2.6667 0 -1.6296 -1.6296
0 0 -2.2500 -4.0000 -8.5000
0 0 0 -1.6667 -1.6667
A=
6.0000 0 0 -0.0000 6.0000
0 -2.6667 0 0 0.0000
0 0 -2.2500 -4.0000 -8.5000
0 0 0 -1.6667 -1.6667
A=
6.0000 0 0 -0.0000 6.0000
0 -2.6667 0 0 0.0000
0 0 -2.2500 0 -4.5000
0 0 0 -1.6667 -1.6667
X=
1.0000
-0.0000
2.0000
1.0000

6.- Use el método de Gauss-Seidel (a) sin relajación, y (b) con relajación (l = 1.2), para resolver el sistema
siguiente para una tolerancia de es = 5%. Si es necesario, reacomode las ecuaciones para lograr
convergencia.
2x1 – 6x2 – x3 = –38
–3x1 – x2 + 7x3 = –34
–8x1 + x2 – 2x3 = –20

PSEUDOCÓDIGO
1. INICIO
2. function [ X ] = Gauss_Seidel_Relajacion_sis_lin( A,B,X,tol,max,omega )
3. Función [ A B ] = Ordena_Matriz( A,B );
4. Hacer n=length(A);
5. Hacer D=zeros(n,max);
6. Para k=1:max
7. Hacer w=X;
8. Para i=1:n
9. Si k==1
10. Hacer s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
11. Hacer X(i)=(B(i)-s)/A(i,i);
12. No
13. Hacer s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
14. Hacer X(i)=omega*((B(i)-s)/A(i,i)) + ((1-omega)*D(i,k-1));
15. FIN
16. Hacer D(i,k)=X(i);
17. Fin
18. si norm(X-w,inf)<tol
19. Volver
20. fin
21. Imprimir la solucion del sistema en a iteracion %4.0f \n',k
22. Para i=1:n
23. Imprimir i,X(i)
24. FIN
25. fin
26. Fin

1. INICIO
2. function [ X ] = Gauss_Seidel_Relajacion_sis_lin( A,B,X,tol,max,omega )
3. [ A B ] = Ordena_Matriz( A,B );
4. Hacer n=length(A);
5. Hacer D=zeros(n,max);
6. Para k=1:max
7. Hacer w=X;
8. Para i=1:n
9. Si k==1
10. Hacer s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
11. Hacer X(i)=(B(i)-s)/A(i,i);
12. NO
13. Hacer s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
14. Hacer X(i)=omega*((B(i)-s)/A(i,i)) + ((1-omega)*D(i,k-1));
15. Fin
16. Hacer D(i,k)=X(i);
17. fin
18. si norm(X-w,inf)<tol
19. volver
20. Fin
21. Imprimir la solucion del sistema en a iteracion,k
22. Para i=1:n
23. Imprimir i,X(i)
24. fin
25. fin
26. FIN
SIN RELAJACIÓN
PROGRAMA EN MATLAB
function [ X ] = Gauss_Seidel_Relajacion_sis_lin( A,B,X,tol,max,omega )
[ A B ] = Ordena_Matriz( A,B );
n=length(A);
D=zeros(n,max);
for k=1:max
w=X;
for i=1:n
if k==1
s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
X(i)=(B(i)-s)/A(i,i);
else
s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
X(i)=omega*((B(i)-s)/A(i,i)) + ((1-omega)*D(i,k-1));
end
D(i,k)=X(i);
end
if norm(X-w,inf)<tol
return
end
fprintf ('\n la solucion del sistema en a iteracion %4.0f \n',k)
for i=1:n
fprintf (' x(%1.0f)=%6.3f \n',i,X(i))
end
end
end

RESULTADOS
RESULTADOS:
>> A=[2 -6 -1;-3 -1 7;-8 1 -2];
>> B=[-38 -34 -20]';
>> X=[0 0 0];
>> tol=0.00001
>> max=40;
>> X=[1 1 1]'
>> [ X ] = Gauss_Seidel_sis_lineal( A,B,X,tol,max )
la solucion del sistema en a iteracion 1
x(1)= 2.375
x(2)= 6.958
x(3)=-2.845
la solucion del sistema en a iteracion 2
x(1)= 4.081
x(2)= 8.168
x(3)=-1.941
la solucion del sistema en a iteracion 3
x(1)= 4.006
x(2)= 7.992
x(3)=-1.998
la solucion del sistema en a iteracion 4
x(1)= 3.999
x(2)= 7.999
x(3)=-2.001
la solucion del sistema en a iteracion 5
x(1)= 4.000
x(2)= 8.000
x(3)=-2.000
la solucion del sistema en a iteracion 6
x(1)= 4.000
x(2)= 8.000
x(3)=-2.000
X=
4.0000
8.0000
-2.0000

CON RELAJACIÓN
PROGRAMA DE MATLAB
function [ X ] = Gauss_Seidel_Relajacion_sis_lin( A,B,X,tol,max,omega )
[ A B ] = Ordena_Matriz( A,B );
n=length(A);
D=zeros(n,max);
for k=1:max
w=X;
for i=1:n
if k==1
s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
X(i)=(B(i)-s)/A(i,i);
else
s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
X(i)=omega*((B(i)-s)/A(i,i)) + ((1-omega)*D(i,k-1));
end
D(i,k)=X(i);
end
if norm(X-w,inf)<tol
return
end
fprintf ('\n la solucion del sistema en a iteracion %4.0f \n',k)
for i=1:n
fprintf (' x(%1.0f)=%6.3f \n',i,X(i))
end
end
end

RESULTADOS
>> A=[2 -6 -1;-3 -1 7;-8 1 -2];
>> B=[-38 -34 -20]';
>> X=[0 0 0];
>> tol=0.00001
>> max=40;
>> X=[1 1 1]';
>> omega=1.2;
>> [ X ] = Gauss_Seidel_Relajacion_sis_lin( A,B,X,tol,max,omega )
la solucion del sistema en a iteracion 1
x(1)= 2.375
x(2)= 6.958
x(3)=-2.845
la solucion del sistema en a iteracion 2
x(1)= 4.422
x(2)= 8.546
x(3)=-1.520
la solucion del sistema en a iteracion 3
x(1)= 3.854
x(2)= 7.736
x(3)=-2.217
la solucion del sistema en a iteracion 4
x(1)= 4.055
x(2)= 8.118
x(3)=-1.908
la solucion del sistema en a iteracion 5
x(1)= 3.979
x(2)= 7.950
x(3)=-2.038
la solucion del sistema en a iteracion 6
x(1)= 4.008
x(2)= 8.021
x(3)=-1.985
la solucion del sistema en a iteracion 7
x(1)= 3.997
x(2)= 7.992
x(3)=-2.006
la solucion del sistema en a iteracion 8
x(1)= 4.001
x(2)= 8.003
x(3)=-1.998
la solucion del sistema en a iteracion 9
x(1)= 4.000
x(2)= 7.999
x(3)=-2.001
la solucion del sistema en a iteracion 10
x(1)= 4.000
x(2)= 8.001
x(3)=-2.000
la solucion del sistema en a iteracion 11
x(1)= 4.000
x(2)= 8.000
x(3)=-2.000
la solucion del sistema en a iteracion 12
x(1)= 4.000
x(2)= 8.000
x(3)=-2.000
la solucion del sistema en a iteracion 13
x(1)= 4.000
x(2)= 8.000
x(3)=-2.000
la solucion del sistema en a iteracion 14
x(1)= 4.000
x(2)= 8.000
x(3)=-2.000
la solucion del sistema en a iteracion 15
x(1)= 4.000
x(2)= 8.000
x(3)=-2.000
X=
4.0000
8.0000
-2.0000
INICIO

function [ X ] = Gauss_Seidel_Relajacion_sis_lin( A,B,X,tol,max,omega )

n=length(A);
D=zeros(n,max)

k=1;k=k+1;k<=max

w=X

i=1;i=i+1;i<=n

k==1

s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n) s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);


X(i)=omega*((B(i)-s)/A(i,i)) + ((1-omega)*D(i,k-1)) X(i)=(B(i)-s)/A(i,i);

D(i,k)=X(i)

return

k
norm(X-w,inf)<tol

i=1;i=i+1;i<=n

i,X(i)

FIN
7.- De los tres conjuntos siguientes de ecuaciones lineales, identifique aquel(los) que no podría resolver
con el uso de un método iterativo tal como el de Gauss-Seidel. Demuestre que su solución no converge,
utilizando cualquier número de iteraciones que sea necesario. Enuncie con claridad su criterio de
convergencia (es decir, cómo se sabe que no está convergiendo).

PSEUDOCÓDIGO
1. INICIO
2. function [X] = gausssei_del_sist_lineal(A,B,X,tol,max)
3. Hacer n=length(X);
4. Hacer [A B]=Orden(A,B);
5. Para k=1:max
6. Hacer w=X;
7. Para i=1:n
8. Hacer s=A(i,1:i-1)*X(1:i-1)+A(i,i+1:n)*X(i+1:n);
9. Hacer X(i)=(B(i)-s)/A(i,i);
10. Fin
11. Si norm(X-w,inf)<tol
12. Volver
13. Fin
14. Imprimir la solucion del sistema en la iteracion, k
15. Para i=1:n
16. Imprimir i,X(i)
17. Fin
18. Fin
19. FIN
PROGRAMA EN MATLAB
function [X] = gausssei_del_sist_lineal(A,B,X,tol,max)
%A Matriz de coeficientes
%B Matriz rptas
%X Matriz inicial
n=length(X);
[A B]=Orden(A,B);
for k=1:max
w=X;
for i=1:n
s=A(i,1:i-1)*X(1:i-1)+A(i,i+1:n)*X(i+1:n);
X(i)=(B(i)-s)/A(i,i);
end
if norm(X-w,inf)<tol
return
end
fprintf('\n la solucion del sistema en la iteracion %4.0f\n',k)
for i=1:n
fprintf(' x(%1.0f)=%6.3f\n',i,X(i))
end
end
end

RESULTADOS
A=[9 3 1;0 -6 8;2 5 -1]
A=
931
0 -6 8
2 5 -1
>> B=[13 2 6]'
B=
13
2
6
tol =
1.0000e-05
>> max=50
max =
50
>> X=[0 0 0]'
X=
0
0
0
>> [ X ] = Gauss_Seidel_sis_lineal( A,B,X,tol,max )
X=
1.0000
1.0000
1.0000

Entonces el sistema converge, ya que en la iteración 11 se encuentra los resultados requeridos.


Segunda iteración:
>> A=[1 1 6;1 5 -1;4 2 -2]
A=
116
1 5 -1
4 2 -2
>> B=[8 5 4]'
B=
8
5
4
>> tol=0.0001;
>> max=50;
>> X=[0 0 0]'
X=
0
0
0
>> [ X ] = Gauss_Seidel_sis_lineal( A,B,X,tol,max )
la solucion del sistema en a iteracion 1
x(1)= 1.000
x(2)= 0.800
x(3)= 1.033
la solucion del sistema en a iteracion 2
x(1)= 1.117
x(2)= 0.983
x(3)= 0.983
la solucion del sistema en a iteracion 3
x(1)= 1.000
x(2)= 0.997
x(3)= 1.001
la solucion del sistema en a iteracion 4
x(1)= 1.002
x(2)= 1.000
x(3)= 1.000
la solucion del sistema en a iteracion 5
x(1)= 1.000
x(2)= 1.000
x(3)= 1.000
X=
1.0000
1.0000
1.000
INICIO

function [ X ] = Gauss_Seidel_Relajacion_sis_lin( A,B,X,tol,max,omega )

n=length(A);
D=zeros(n,max)

k=1;k=k+1;k<=max

w=X

i=1;i=i+1;i<=n

k==1

s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n) s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);


X(i)=omega*((B(i)-s)/A(i,i)) + ((1-omega)*D(i,k-1)) X(i)=(B(i)-s)/A(i,i);

D(i,k)=X(i)

return

k
norm(X-w,inf)<tol

i=1;i=i+1;i<=n

i,X(i)

FIN
9.- El sistema tridiagonal que sigue debe resolverse como parte de un algoritmo mayor (Crank-Nicolson)
para solucionar ecuaciones diferenciales parciales:

Utilice el algoritmo de Thomas para obtener una solución.

PSEUDOCÓDIGO
1. INICIO
2. function [X] = gausssei_del_sist_lineal(A,B,X,tol,max)
3. Hacer n=length(X);
4. Hacer [A B]=Orden(A,B);
5. Para k=1:max
6. Hacer w=X;
7. Para i=1:n
8. Hacer s=A(i,1:i-1)*X(1:i-1)+A(i,i+1:n)*X(i+1:n);
9. Hacer X(i)=(B(i)-s)/A(i,i);
10. Fin
11. Si norm(X-w,inf)<tol
12. Volver
13. Fin
14. Imprimir la solucion del sistema en la iteracion, k
15. Para i=1:n
16. Imprimir i,X(i)
17. Fin
18. Fin
FIN
PROGRAMA EN MATLAB
function [ X ] = Gauss_Seidel_sis_lineal( A,B,X,tol,max )
[ con, A ] = contador_ceros( A );
if (con==0)
[ A B ] = Ordena_Matriz( A,B );
n=length(A);
for k=1:max
w=X;
for i=1:n
s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
X(i)=(B(i)-s)/A(i,i);
end
if norm(X-w,inf)<tol
return
end
fprintf ('\n la solucion del sistema en a iteracion %4.0f \n',k)
for i=1:n
fprintf (' x(%1.0f)=%6.3f \n',i,X(i))
end
end
else
n=length(A);
for k=1:max
w=X;
for i=1:n
s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);
X(i)=(B(i)-s)/A(i,i);
end
if norm(X-w,inf)<tol
return
end
fprintf ('\n la solucion del sistema en a iteracion %4.0f \n',k)
for i=1:n
fprintf (' x(%1.0f)=%6.3f \n',i,X(i))
end
end
end
end

RESULTADOS
>> A=[2.01475 -0.020875 0 0;-0.020875 2.01475 -0.020875 0;0 -0.020875 2.01475 -0.020875;0 0
-0.020875
2.01475]
A=
2.0147 -0.0209 0 0
-0.0209 2.0147 -0.0209 0
0 -0.0209 2.0147 -0.0209
0 0 -0.0209 2.0147
>> B=[4.175 0 0 2.0875]'
B=
4.1750
0
0
2.0875
>> X=[1 1 1 1]'
X=
1
1
1
1
>> tol=0.0001
>> max=50;
>> [ X ] = Gauss_Seidel_sis_lineal( A,B,X,tol,max )
la solucion del sistema en a iteracion 1
x(1)= 2.083
x(2)= 0.032
x(3)= 0.011
x(4)= 1.036
la solucion del sistema en a iteracion 2
x(1)= 2.073
x(2)= 0.022
x(3)= 0.011
x(4)= 1.036
la solucion del sistema en a iteracion 3
x(1)= 2.072
x(2)= 0.022
x(3)= 0.011
x(4)= 1.036
X=
2.0724
0.0216
0.0110
1.0362
INICIO

function [ X ] = Gauss_Seidel_Relajacion_sis_lin( A,B,X,tol,max,omega )

n=length(A);
D=zeros(n,max)

k=1;k=k+1;k<=max

w=X

i=1;i=i+1;i<=n

k==1

s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n) s=A(i,1:i-1)*X(1:i-1) + A(i,i+1:n)*X(i+1:n);


X(i)=omega*((B(i)-s)/A(i,i)) + ((1-omega)*D(i,k-1)) X(i)=(B(i)-s)/A(i,i);

D(i,k)=X(i)

return

k
norm(X-w,inf)<tol

i=1;i=i+1;i<=n

i,X(i)

FIN

También podría gustarte