Ejercicios Computacionales 5.1 Codigo

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 2

ALGORÍTMICA NUMÉRICA Ejercicios Computacionales Tema 5

Código

Datos: matriz A y vector b

A =[9 3 2 0 7;
63 27 23 6 53;
18 48 74 50 44;
0 54 130 112 52;
63 39 83 74 84],
b=[35;303;522;858;763];

Código: método de Gauss

function x=solve_U(U,b)
% Resuelve el sistema triangular superior Ux=b
% Si la matriz U es singular devuelve NaN
n=length(b); x=NaN*b;
D=diag(U); % Extraigo la diagonal de U
determinante=prod(D); % Productorio de la diagonal
if determinante==0, return; end % Compruebo si U es singular
% Resolvemos Ux=b utilizando sustitución regresiva
for i=n:-1:1
x(i)=(b(i)-sum(U(i,i+1:n).*x(i+1:n)'))/D(i);
end
return

function [U c]=gauss(A,b)
% Eliminación de Gauss sin pivote. A partir del sistema Ax=b obtiene Ux=c
% triangular superior equivalente
n = size(A,1);
D = [A b]; % Construyo la matriz ampliada D
for col=1:n-1, % recorro las columnas (col) de 1 a n-1 de la matriz A
% Aquí iría el código correspondiente del pivotaje
%
%.
%
%
piv = D(col,col); % Pivote = elemento de la diagonal
for k=col+1:n, % Recorro filas (k's) por debajo de diagonal
m = D(k,col)/piv; % Cociente entre 1er elemento fila y pivote
% (m es un coeficiente de la matriz Ri en la factorización LU)
D(k,col:n+1)=D(k,col:n+1)-m*D(col,col:n+1);
% Fila(k)=Fila(k)-m x fila(col) (desde columna col en adelante)
end
end
U = D(:,1:n); % Extraer matriz U de la matriz ampliada
c = D(:,n+1:end); % Extraer el vector c de la matriz ampliada
return

Código: Prestaciones numéricas

clear all
% Resolvemos el sistema Cx=c, de dimensión 500, utilizando
% los 3 métodos: Gauss sin pivote, Gauss con pivote y el comando de matlab \
% Calculamos el tiempo de ejecución y el residuo de cada método.
n=500;
C=rand(n); % Matriz C 500x500 de coeficientes aleatorios entre 0 y 1
c=rand(n,1); % Vector c de coeficientes aleatorios entre 0 y 1
x=zeros(n,3)*NaN; % Creamos x vectores de soluciones
r=zeros(n,3)*NaN; % Creamos r vectores de residuos

1
ALGORÍTMICA NUMÉRICA Ejercicios Computacionales Tema 5

[U d]=gauss(C,c); % Resolvemos sin Gauss sin pivote


x(:,1)=solve_U(U,d); % x(:,1) la solución
r(:,1)=c-C*x(:,1); % r(:,1) el residuo

[U d]=gauss_pp(C,c); % Resolvemos Gauss con pivote


x(:,2)=solve_U(U,d); % x(:,2) la solución
r(:,2)=c-C*x(:,2); % r(:,2) el residuo

x(:,3)=C\c; % Resolvemos con el comando \ de Matlab: x(:,3) la solución


r(:,3)=c-C*x(:,3); % r(:,3) el residuo
for i=1:3
mr(i)=max(abs(r(:,i)));
end
% Mostramos los valores máximos de los valores absolutos de los 3 residuos
fprintf('Maximo valor absoluto de residuos:\n Gauss sin piv -> %.2e,\n Gauss con piv -> %.2e,\n
Comando Matlab -> %.2e\n',mr(:))
w=[1:n];
% Dibujamos los residuos de los 3 métodos
subplot(2,1,1),plot(w,r(:,1),'y',w,r(:,2),'g',w,r(:,3),'b'),title('Grafica de residuos de: Gauss sin pivote
(amarillo), con pivote (verde), comando Matlab (azul)')
subplot(2,1,2),plot(w,r(:,2),'g',w,r(:,3),'b'),title('Grafica de residuos de: Gauss con pivote (verde),
comando Matlab (azul)')

También podría gustarte