deybi brayan asprilla mosquera
DESCRIPTION
Bryan Asprilla, Eliminacion de Gauss, Jacobi y Gauss-sidelTRANSCRIPT
-
BRYAN ASPRILLA
COMPARACIN DEL METODO OPERADOR "BARRA INVERTIDA" DE
MATLAB CON LOS METODOS DE GAUSS, GAUSS-SEIDEL Y JACOBI
DEYBI BRAYAN ASPRILLA MOSQUERA
ESTUDIANTE DE MAESTRIA (MAESTRIA EN INGENIERIA MECANICA)
APLICACIONES MATEMTICAS EN INGENIERA QUMICA
UNIVERSIDAD NACIONAL DE COLOMBIA
FACULTAD DE MINAS
MEDELLIN
2015
https://sites.google.com/a/unal.edu.co/amiq/
-
BRYAN ASPRILLA
INTRODUCCIN
Uno de los objetos principales de trabajo de Matlab son las matrices y los
vectores. Una matriz se define dando sus elementos y separando sus filas
mediante ;. Asimismo un vector fila no es ms que una matriz 1 n
En este documento estudian los mtodos numricos de eliminacin de Gauss,
Gauss Seidel, y Jacobi para resolver sistemas de ecuaciones lineales y se
realiza una comparacin de cada uno de estos mtodos con el mtodo de Barra
Invertida.
MTODO DE BARRA INVERTIDA % simple_1D_flow.m % This MATLAB program employs the finite difference method % to compute the velocity profile of a Newtonian fluid in % pressure-driven flow between two infinite flat plates, % the upper of which is moving at a specified velocity. % K. Beers. MIT ChE. 9/4/03
function iflag_main = simple_1D_flow(); iflag_main = 0;
% set the system parameters visc = 1e-3; % viscosity in Pa*s rho = 1000; % density in Kg/m^3 V_up = 0; % vel. of upper plate in m/s B = 1/1e3; % distance between plates in m dp_dx = input('Enter dp/dx in Pa/m : ');
% set simulation parameters N = 15,25,100; dy = B/(N+1);
% set matrix A = spalloc(N,N,3*N); v = ones(N,1); A = spdiags([-v 2*v -v], -1:1, N, N);
% set RHS vector G = -(dy^2)/visc*dp_dx; b = G*ones(N,1); b(N) = b(N) + V_up;
tic
% Solve system v = A\b;
-
BRYAN ASPRILLA
toc
% compute Reynolds number v_avg = mean(abs(v)); Re = rho*v_avg*(2*B)/visc; disp(dp_dx); disp(Re);
% plot velocity profile figure; y_plot = linspace(0,B,N+2); plot(y_plot,[0;v;V_up]); phrase1 = ['dp/dx = ', num2str(dp_dx)]; phrase1 = [phrase1, ', Re = ', num2str(Re)]; gtext(phrase1); if(Re > 1) gtext('Re > 1, flow may not be laminar'); end xlabel('y (m)'); ylabel('v_x(y) (m/s)'); title('Laminar pressure driven flow between parallel plates');
iflag_main = 1; return;
Con este mtodo obtenemos los siguientes resultados.
Cuando N=15 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion al sistena es de 0.002781 seconds.
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
x 10-3
-3
-2.5
-2
-1.5
-1
-0.5
0x 10
-4
dp/dx = 2, Re = 0.35417
y (m)
v x(y
) (m
/s)
Laminar pressure driven flow between parallel plates
-
BRYAN ASPRILLA
Cuando N=25 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 0.000945 seconds.
Cuando N=100 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 0.000864 seconds.
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
x 10-3
-3
-2.5
-2
-1.5
-1
-0.5
0x 10
-4
dp/dx = 2, Re = 0.34615
y (m)
v x(y
) (m
/s)
Laminar pressure driven flow between parallel plates
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
x 10-3
-3
-2.5
-2
-1.5
-1
-0.5
0x 10
-4
dp/dx = 2, Re = 0.33663
y (m)
v x(y
) (m
/s)
Laminar pressure driven flow between parallel plates
-
BRYAN ASPRILLA
MTODO DE GAUSS. function gauss ()
% set the system parameters visc = 1e-3; % viscosity in Pa*s rho = 1000; % density in Kg/m^3 V_up = 0; % vel. of upper plate in m/s B = 1/1e3; % distance between plates in m dp_dx = input('Enter dp/dx in Pa/m : ');
% set simulation parameters N = 25; dy = B/(N+1);
% set matrix A = spalloc(N,N,3*N); v = ones(N,1); A = spdiags([-v 2*v -v], -1:1, N, N);
% set RHS vector G = -(dy^2)/visc*dp_dx; b = G*ones(N,1); b(N) = b(N) + V_up;
delta=1e-6; max1=100;
z=length(b);
P=ones(z,1)*0.15;
tic
n = length(b); for k=1:n-1 % Elimination for i=k+1:n if A(i,k) ~= 0 lambda = A(i,k)/A(k,k); A(i,k+1:n) = A(i,k+1:n) - lambda*A(k,k+1:n); b(i) = b(i) - lambda*b(k);end end end if nargout == 2; det = prod(diag(A));end for k =n:-1:1 % Back substitution b(k) = (b(k)-A(k,k+1:n)*b(k+1:n))/A(k,k);end x = b;
toc
-
BRYAN ASPRILLA
Los resultados que se obtienen son los siguientes:
Cuando N=15 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 0.013688 seconds.
Cuando N=25 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 0.014604 seconds.
Cuando N=100 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 0.097348 seconds.
MTODO DE GAUSS-SEIDEL function gseid_1 ()
% set the system parameters visc = 1e-3; % viscosity in Pa*s rho = 1000; % density in Kg/m^3 V_up = 0; % vel. of upper plate in m/s B = 1/1e3; % distance between plates in m dp_dx = input('Enter dp/dx in Pa/m : ');
% set simulation parameters N = 25; dy = B/(N+1);
% set matrix A = spalloc(N,N,3*N); v = ones(N,1); A = spdiags([-v 2*v -v], -1:1, N, N);
% set RHS vector G = -(dy^2)/visc*dp_dx; b = G*ones(N,1); b(N) = b(N) + V_up;
delta=1e-6; max1=100;
z=length(b);
P=ones(z,1)*0.15;
tic
N = length(b);
for k = 1:max1
-
BRYAN ASPRILLA
for j = 1:N if j == 1 X(1) = (b(1) - A(1, 2:N) * P(2:N)) / A(1, 1); elseif j == N X(N) = (b(N) - A(N, 1:N-1) * (X(1:N-1))') / A(N, N); else % X contiene la k-esima aproximacion y P la (k-1)-esima X(j) = (b(j) - A(j, 1:j-1) * X(1:j-1)' - A(j, j+1:N) * P(j+1:N))
/ A(j, j); end end err = abs(norm(X' - P)); relerr = err / (norm(X) + eps); P = X'; if (err < delta) | (relerr < delta) break end end
X = X'; K
toc
Se obtienen los siguientes resultados:
Cuando N=15 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 0.172829 seconds.
Cuando N=25 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 0.289062 seconds.
Cuando N=100 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 1.128862 seconds.
MTODO DE JACOBI function jacobi_1 ()
clear all close all clc
% set the system parameters visc = 1e-3; % viscosity in Pa*s rho = 1000; % density in Kg/m^3
-
BRYAN ASPRILLA
V_up = 0; % vel. of upper plate in m/s B = 1/1e3; % distance between plates in m dp_dx = input('Enter dp/dx in Pa/m : ');
% set simulation parameters N = 15, 25, 100; dy = B/(N+1);
% set matrix A = spalloc(N,N,3*N); v = ones(N,1); A = spdiags([-v 2*v -v], -1:1, N, N);
% set RHS vector G = -(dy^2)/visc*dp_dx; b = G*ones(N,1); b(N) = b(N) + V_up;
delta=1e-6; max1=100;
z=length(b);
P=ones(z,1)*0.15;
tic N = length(b);
for k = 1:max1 for j = 1:N X(j) = (b(j) - A(j, [1:j-1, j+1:N]) * P([1:j-1, j+1:N])) / A(j, j); end err = abs(norm(X' - P)); relerr = err/(norm(X) + eps); P = X'; if (err < delta) | (relerr < delta) break end end
X = X'; k err
toc
Los resultados obtenidos son:
Cuando N=15 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 0.170613 seconds. err = 0.0021
-
BRYAN ASPRILLA
Cuando N=25 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 0.267110 seconds. err = 0.0034
Cuando N=100 y dp/dx in Pa/m : 2, el tiempo que tarda en dar la solucion
al sistena es de 1.176411 seconds. err = 0.0025
CONCLUSIONES
1. Comparando el mtodo de Barra Invertida con cada uno de los mtodos
utilizados anteriormente es fcil notar la eficiencia y rapidez con que este
mtodo (Barra Invertida) resuelve sistemas lineales.
Cuando N toma un Valor de 15,
i) El mtodo de barra invertida resuelve el sistema en 0.002781
segundos.
ii) El mtodo de Gauss tarda 0.013688 segundos.
iii) El mtodo de Gauus-Seidel lo reuelve en 0.172829 segundos.
iv) El mtodo de Jacobi lo resuelve en 0.170613 segundos.
2. El mtodo de barra invertida resuelve el sistema 0,10907 segundos mucho
ms rpido que el mtodo de Gauss; tambin se puede observar que es
mucho ms rpido que los otros mtodos planteados.
3. Despus del mtodo de barra invertida el de Gauss es el mtodo que ms
rpido resuelve el sistema comparado con el mtodo de Gauss-Seidel y
Jacobi.
4. Se observa que en el mtodo de barra invertida cuando N crece el tiempo
que tarda en resolver el sistema es mucho menor, mientras que en los otros
mtodos utilizados anteriormente si N crece el tiempo es mucho mayor, es
decir, el sistema se demora ms en dar la solucin.