9
BRYAN ASPRILLA COMPARACIÓN 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 MATEMÁTICAS EN INGENIERÍA QUÍMICA UNIVERSIDAD NACIONAL DE COLOMBIA FACULTAD DE MINAS MEDELLIN 2015

Deybi Brayan Asprilla Mosquera

Embed Size (px)

DESCRIPTION

Bryan Asprilla, Eliminacion de Gauss, Jacobi y Gauss-sidel

Citation preview

  • 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.