Tarea 7 QMC - FLORES - SANTOS - AYRTON - TADEO

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 28

UNIVERSIDAD MAYOR DE SAN ANDRES

FACULTAD DE INGENIERÍA
INGENIERÍA QUÍMICA, AMBIENTAL, ALIMENTOS Y PETROQUIMICA

PROGRAMACION Y ANALISIS NUMERICO (PRQ – 404)

DOCENTE: M. Sc. Ing. Roberto Parra Zeballos


AUXILIAR: Univ. Álvaro Abel Rivera Cárdenas
ESTUDIANTE: Univ. Flores Santos Ayrton Tadeo
GRUPO: A
GESTIÓN: 2022

TAREA No. 7
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
1. INICIO
2. Indicar las ecuaciones lineales
3. Leer xo (valores iniciales)
4. Leer tol (tolerancia)
5. Leer maxit (número máximo de iteraciones)
6. Hacer 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
10. Hacer fxo=(f(xo(1),xo(2),xo(3)));
11. Hacer jfxo=jf(xo(1),xo(2),xo(3));
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
16. Fin mientras
17. Imprimir iter,x1(1),x1(2),x1(3),fxo(1),fxo(2),fxo(3))
18. Hacer iter=iter+1;
19. Hacer xo=x1;
20. fin
21. imprimir ('las soluciones son:')
22. p u=1:n
23. Imprimir u,xo(u)
24. FIN
PROGRAMA EN MATLAB DIAGRAMA DE FLUJO
%P7_Ej1 INICIO
%ejercicio uno sistema no lineal
clc
clear all
Xo,tol,maxit
%definimos las ecuaciones, igualadasacero
syms u v a
fs=[u^2-(2*v^2)-a^2;u+v-2;a^2-(2*a)-u];
js = jacobian(fs); error=norm((f(xo(1),xo(2),xo(3))),2
f=inline(fs);
jf=inline(js);
iter=1
%pedimos datos
n=3;
xo=input('introduzca un vector columna de condiciones iter
iniciales: ');
tol=input('introduzca un valor para la tolerancia:
');
maxit=input('introduzca el número máximo de
iteraciones: '); iter > maxit
%procedimiento
error=norm((f(xo(1),xo(2),xo(3))),2); fxo=(f(xo(1),xo(2),xo(3)))
iter=1; jfxo=jf(xo(1),xo(2),xo(3))
x1=xo-(inv(jfxo)*fxo)
fprintf(' iter x(1) x(2) x(3) f(x1) f(x2) f(x3)')
while error >= tol maxit
fxo=(f(xo(1),xo(2),xo(3))); error>=tol
jfxo=jf(xo(1),xo(2),xo(3));
x1=xo-(inv(jfxo)*fxo);
error=norm((f(x1(1),x1(2),x1(3))),2); iter,x1(1),x1(2),x1(3),fxo(1),fxo(2),fxo(3))
if iter > maxit
fprintf('No se puede solucionar en %g
iteraciones',maxit)
return iter=iter+1;
end xo=x1
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; u,xo(u)
xo=x1;
end
disp('las soluciones son:') FIN
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
INICIO
function [A B] =Orden(A,B)
n=length(A);
for i=1:n
Aux=0;
Aux1=0; function [A B] =Orden(A,B)
Mayor=0;
for j=1:n
if abs(A(i,j))>=abs(Mayor) n=length(A)
Mayor=A(i,j);
m=j;
end
i=1;i=i+1;i<=n
end
Aux=A(i,:);
A(i,:)=A(m,:);
A(m,:)=Aux; Aux=0
Aux1=B(i); Aux1=0
B(i)=B(m); Mayor=0
B(m)=Aux1;
end
end
j=1;j=j+1;j<=n

function [X] = Eliminacion_Gauss(A,B)


%A es matriz de coeficientes. abs(A(i,j))>=abs(Mayor)
%B coeficientes de igualdades
%El sistema es AX=B
[A B] =Orden(A,B)
[n,n]=size(A); Mayor=A(i,j);
A=[A';B']'; Hacer m=j
X=zeros(n,1);
for p=1:n
for k=[1:p-1,p+1:n]
if A(p,p)==0 j
break
end
m=A(k,p)/A(p,p);
i
A(k,:)=A(k,:)-(m*A(p,:))
end
end
X=A(:,n+1)./diag(A) Aux=A(i,:)
End A(i,:)=A(m,:)
A(m,:)=Aux
RESULTADOS Aux1=B(i)
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] B(i)=B(m)
B(m)=Aux1
A=

B
-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 FIN
DIAG
O
>> B=[6;6;12;0;0]
INICIO

B=

6 function [X] = Eliminacion_Gauss(A,B)


6
12
0 [A B] =Orden(A,B)
0 n,n]=size(A);
A=[A';B']';
>> [X] = Eliminacion_Gauss(A,B) X=zeros(n,1);

A=
p=1;p=p+1;p<=n

-1.5000 0 0 0 1.0000
0 1.0000 -0.2500 0 0
-2.0000 0 0.2700 1.0000 2.0000 k=[1:p-1,p+1:n]
0 -3.0000 2.0000 2.0000 0
0 0 1.0000 0 1.0000

break
B=

0
A(p,p)==0
0
6
12
6
m=A(k,p)/A(p,p);
A(k,:)=A(k,:)-(m*A(p,:))
A=
k
-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
p
0 -3.0000 2.0000 2.0000 0 12.0000
0 0 1.0000 0 1.0000 6.0000

X=A(:,n+1)./diag(A)
A=

-1.5000 0 0 0 1.0000 0 X
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 FIN
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

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

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

2𝑥1 − 𝑥2 + 3𝑥3 + 7𝑥4 = 15

4𝑥1 + 4𝑥2 + 7𝑥4 = 11

2𝑥1 + 𝑥2 + 𝑥3 + 3𝑥4 = 7
6𝑥1 + 5𝑥2 + 4𝑥3 + 17𝑥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 )
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);
7. Para p=1:n
8. Para k=[1:p-1,p+1:n]
9. Si A(p,p)==0
10. Romper
11. Fin
12. Hacer m=A(k,p)/A(p,p);
13. Hcer A(k,:)=A(k,:)-(m*A(p,:))
14. fin
15. fin
16. Hacer X=A(:,n+1)./diag(A)
17. FIN
PROGRAMA EN MATLAB
function [ X ] =
Eliminacion_Gauss( A,B )
%A es la matriz de coeficientes
%B matriz columna de coeficientes
de igualdades
%el sistema es AX=B matrices
[ A B ] = Ordena_Matriz( 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 INICIO
end
X=A(:,n+1)./diag(A)
end
RESULTADOS
function [X] = Eliminacion_Gauss(A,B)
>> A=[2 -1 3 7;4 4 0 7;2 1 1 3;6 5 4 17]
A=
[A B] =Orden(A,B)
2 -1 3 7
n,n]=size(A);
4407 A=[A';B']';
2113 X=zeros(n,1);
6 5 4 17
>> B=[15 11 7 31]'
B= p=1;p=p+1;p<=n
15
11
7
k=[1:p-1,p+1:n]
31
>> [ X ] = Eliminacion_Gauss( A,B )
A=
6 5 4 17
2 -1 3 7 break
4407
2113
B= A(p,p)==0
31
15
11
7 m=A(k,p)/A(p,p);
A= A(k,:)=A(k,:)-(m*A(p,:))
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 k
2.0000 1.0000 1.0000 3.0000 7.0000
A=
6.0000 5.0000 4.0000 17.0000 31.0000 p
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
X=A(:,n+1)./diag(A)
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 X
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 FIN
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