10.07.2015 Views

2011 Práctica N 4 Laboratorio Sistemas de ecuaciones lineales 1 ...

2011 Práctica N 4 Laboratorio Sistemas de ecuaciones lineales 1 ...

2011 Práctica N 4 Laboratorio Sistemas de ecuaciones lineales 1 ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Métodos Numéricos - <strong>2011</strong>Práctica N ◦ 4<strong>Laboratorio</strong><strong>Sistemas</strong> <strong>de</strong> <strong>ecuaciones</strong> <strong>lineales</strong>1. Programar en OCTAVE el método <strong>de</strong> <strong>de</strong>scomposición LU para la resolución <strong>de</strong> sistemas <strong>de</strong> <strong>ecuaciones</strong><strong>lineales</strong>. Luego, agregar pivoteo parcial (recuer<strong>de</strong> que para aplicar el método a la resolución <strong>de</strong> unsistema Ax = b, es necesario registrar las permutaciones hechas sobre las filas <strong>de</strong> la matriz y aplicarlasal vector b). Medir el tiempo <strong>de</strong> cálculo para diferentes tamaños <strong>de</strong> la matriz A para mostrar que elmétodo es <strong>de</strong> or<strong>de</strong>n N 3 . Utilizar matrices random. Se sugiere generar soluciones random y calcular elvector segundo miembro resultante para po<strong>de</strong>r calcular también el error <strong>de</strong> la solución obtenida.2. Se preten<strong>de</strong> resolver el sistema lineal Ax = b, don<strong>de</strong> A ∈ R n×n es una matriz tridiagonal (que típicamenteaparece en la discretizacion <strong>de</strong> problemas <strong>de</strong> difusión) y b ∈ R n es un vector segundo miembro(que podría pensarse como un término fuente en dicho problema <strong>de</strong> difusión).La matriz A tiene la siguiente pinta para n = 5 por ejemplo⎛A =⎜⎝Dicha matriz pue<strong>de</strong> ser almacenada <strong>de</strong> dos formas:2 −1 0 0 0−1 2 −1 0 00 −1 2 −1 00 0 −1 2 −10 0 0 −1 2Como una matriz “llena”, don<strong>de</strong> se guardan todos los elementos <strong>de</strong> la matriz.Como una matriz “rala”, don<strong>de</strong> se guardan solo los elementos no nulos y cierta información sobrela posición <strong>de</strong> dichos elementos no nulos.Con las siguientes instrucciones se pue<strong>de</strong> generar la matriz A en ambos formatosS1 = sparse([1:n], [1:n], 2*ones(1,n), n, n, 0)S2 = sparse([1:n-1], [2:n], -1*ones(1,n-1), n, n, 0)S3 = sparse([2:n], [1:n-1], -1*ones(1,n-1), n, n, 0)A = full(S1 + S2 + S3) # Si se quiere la matriz en formato LLENOA = S1 + S2 + S3 # Si se quiere la matriz en formato RALOb = ones(1,n)/(n + 1)**2 # Para generar el vector segundo miembroProgramar el método <strong>de</strong> gradientes conjugados y evaluar el tiempo <strong>de</strong> cálculo para diferentes tamaños<strong>de</strong> la matriz <strong>de</strong>l sistema (por ejemplo hasta n = 5000). A<strong>de</strong>más compare el tiempo <strong>de</strong> cálculo cuandose emplea el formato ralo o el formato lleno <strong>de</strong> almacenamiento. (No se preocupe por el hecho <strong>de</strong> quela matriz es rala pues OCTAVE “sabe” como operar con dichas matrices)3. Programar el método <strong>de</strong> gradientes conjugados con escaleo diagonal (esto es utilizar la matriz originaly el precondicionador, no la matriz modificada). Comparar el número <strong>de</strong> condición K <strong>de</strong> la matrizA <strong>de</strong>l sistema original y <strong>de</strong> la matriz à = E−1 AE −T <strong>de</strong>l sistema precondicionado y el número <strong>de</strong>iteraciones necesario para la convergencia en cada caso. Use una matriz que sea simétrica, <strong>de</strong>finidapositiva y con autovalores entre 1 y 10 5 equiespaciados (en escala logarítmica), construida usando lassiguientes líneas <strong>de</strong> OCTAVE⎞⎟⎠


and("seed", 1.0)v = 5/(n-1) * (0:n-1)D = (10 .** v)A = eye(n) + 0.01*rand(n,n) ← A = I + pequeña perturbación.[Q R] = qr(A) ← Descomposicion QR (Q unitaria, R triangular)A = Q’*diag(D)*QPara medir el tiempo <strong>de</strong> cálculo agregue las siguientes lineas a su programat1 = time();#Justo antes <strong>de</strong> empezar a resolvert2 = time() - t1#Justo <strong>de</strong>spues <strong>de</strong> resolver

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!