Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERÍA
PROGRAMACIÓN Y MÉTODOS NUMÉRICOS
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.
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
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=
>> B=[6;6;12;0;0]
B=
6
6
12
0
0
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=
A=
A=
A=
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),
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?
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
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
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
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
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
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
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:
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
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
D(i,k)=X(i)
return
k
norm(X-w,inf)<tol
i=1;i=i+1;i<=n
i,X(i)
FIN