Está en la página 1de 4

ejsrepasosistemas.

pdf

Anónimo

Laboratorio de Computación Científica

1º Grado en Física

Facultad de Ciencias Físicas


Universidad Complutense de Madrid

Reservados todos los derechos.


No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejercicios complementarios (Sistemas de ecuaciones)

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
1. Aplicando el método Gauss-Seidel amortiguado o método SOR,
construye un programa que varíe el peso de amortiguamiento w desde
-2 hasta 2 con saltos de 0.01.
Representa la variación del radio espectral según varía w. Se aplicará al
sistema de ecuaciones (el mismo que el del ejercicio 4 del guión de
prácticas).
3x + y + z = 4
2x + 5y + 1z = -1

Reservados todos los derechos.


-x + y + 3z = 4 El
vector inicial será [0;0;0] y tolerancia 10-5.
function[x,it]=ej1_repaso(A,b,x0,tol)

D=diag(diag(A));
L=A-triu(A);
U=A-tril(A);
I=eye(size(A));

for w=-2:0.01:2
%sentencias para determinar CONVERGENCIA
Ga=-w*inv(L+D)*U+(1-w)*I; %H: matriz convergencia SOR
autovalores=eig(Ga); %eig calcula los autovalores de una matriz
abs_auto=abs(autovalores);
radio_espectral=max(abs_auto);
plot(w,radio_espectral,'*b')
xlabel('w (peso)')
ylabel('radio espectral')
hold on

if radio_espectral<1
if abs(det(A))<3*eps %matriz es singular/se aproxima (NO CONVERGE)
disp('El sistema no converge, no tiene solución');
return
else %CONVERGENCIA ASEGURADA
x=inv(L+D)*(b-U*x0);
x=w*x+(1-w)*x0; %sentencia amortigüamiento (1ª iteración)
it=1;
while norm(x-x0)>tol %condición sobre la tolerancia
x0=x; %revalorizamos x0
x=inv(L+D)*(b-U*x0); %fórmula iterativa para obtener soluciones
x=w*x+(1-w)*x0; %sentencia amortigüamiento
it=it+1;
end

end
end
end

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6350205
%[x,it]=ej1_repaso(A1,b1,x0,10^(-5))

>> [x,it]=ej1_repaso(A1,b1,x0,10^(-5))

x=

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
1.0000

-1.0000

2.0000

it =

Reservados todos los derechos.

si lees esto me debes un besito


a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6350205
2. Crea una función que combine los métodos de Jacobi y Gauss-Seidel
de tal manera que la solución que calcule sea una combinación lineal de la
calculada por esos dos métodos, es decir,
xs+1 = Kxs+1J + (1-K)xs+1GS
¿Cuál es el valor del radio espectral?
El sistema de ecuaciones es el mismo que el ejercicio anterior, con iguales
valores para la tolerancia y el vector solución inicial, toma K=0.1 e

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
introdúcelo como argumento de entrada.

function[x,radio_espectral]=ej2_repaso(A,b,x0,tol,k)

xj=jacobi_completo(A,b,x0,tol);
xgs=gaussseidel_completo(A,b,x0,tol);

x=k*xj+(1-k)*xgs;

D=diag(diag(A)); %matriz con la diagonal de A (el resto 0s)


L=A-triu(A); %extrae parte estrictamente inferior de A (el resto 0s)

Reservados todos los derechos.


U=A-tril(A);

J=inv(D)*(L+U);
H=inv(L+D)*U;
M=k*J+(1-k)*H;

autovalores=eig(M); %eig calcula los autovalores de una matriz


abs_auto=abs(autovalores);
radio_espectral=max(abs_auto);

%[x,radio_espectral]=ej2_repaso(A1,b1,x0,10^-5,0.1)

>> [x,radio_espectral]=ej2_repaso(A1,b1,x0,10^-5,0.1)

x=

1.0000
-1.0000
2.0000

radio_espectral =

0.1963

si lees esto me debes un besito


a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6350205

También podría gustarte