Está en la página 1de 5

Pr actica voluntaria (1er. parcial) Profesor Francisco R.

Villatoro

T ecnicas Num ericas 7 de Octubre de 1999

PRIMER TEMA: Operaciones en coma otante en Matlab etica que utiliza Matlab es compatible con el sistema IEEE a 1. La aritm doble precisi on, es decir, 53 bits binarios en la mantisa (el primero de los cuales se aprovecha para el signo) y un exponente entre 1022 e 1023. Los n umeros otantes en Matlab (IEEE) tienen la forma f l(x) = (1.a1 a2 a53 )2 2e , donde es el signo, ai {0, 1}, y 1022 e 1023. Cu antos d gitos binarios o bits requiere el exponente? Cu antos bytes (grupo de 8 bits) se consumen en representar un n umero otante? Cu antos n umeros con exponente e = 0 puede representar Matlab? Cu al es el n umero positivo m as peque no representable (para e = 0 y para e = 0)? y cu al es el m as grande? En el sistema IEEE de doble precisi on adem as del 0, se incluyen los n umeros Inf (innito positivo y negativo) y NaN (el resultado no es un n umero). Prueba a calcular en Matlab 1/0, log(1/0) y 1/0-log(1/0), qu e resultados obtienes? Justica tu respuesta y pon otro ejemplo de tu invenci on de similares resultados. 2. Calcule el epsilon de la m aquina para Matlab (comando eps). El siguiente programa e = 1; while (1+e > 1), e=e/2; end, calcula el epsilon de la m aquina? Si no lo hace, c omo lo arreglar as y por qu e. Escribe en representaci on otante en binario en el sistema IEEE de Matlab el n umero epsilon de la m aquina () y el n umero 1 + . 3. Escribe una cota superior del error de normalizaci on de un n umero otante cuando se utiliza redondeo y otra cuando se utiliza truncado? Justica tu respuesta. Calcula estas cotas para Matlab. 1

El error relativo de normalizaci on de un n umero , donde f l(x) = x (1 + ), se puede acotar por 2n 2n , 2n+1 0, Justica las expresiones anteriores. etica otante. 4. Un ejemplo sencillo de los efectos de los errores en aritm Qu e tiene que dar y que es lo que da realmente el programa siguiente? x = ones(1,6)*987654321^2, mean(x), std(x), y este otro? x = ones(1,7)*987654321^2, mean(x), std(x), Justica y razona las respuestas que has obtenido en Matlab. 5. Qu e hace el siguiente programa? x = 10.^(0:20); x.*(sqrt(x+1)-sqrt(x)) Cu al es el efecto de la diferencia cancelativa en el resultado? C omo calcular as el resultado evitando la diferencia cancelativa? Escribe un c odigo en Maltab para ello. Compara los resultados de tu c odigo con los del original y calcula los errores cometidos debido a la diferencia cancelativa. 6. Para el programa x = 10.^(-(0:20)); (1 - cos(x) )./(x.^2), por redondeo, por truncado.

indica el efecto de la diferencia cancelativa e indica c omo lo evitar as (escribe un c odigo Matlab). Calcula los errores cometidos debido a ella. Compara los resultados de tu c odigo con los obtenidos utilizando la expresi on sin2 (x/2) 2 . x2 Razona el resultado que obtienes. 7. Escribe un programa Matlab que eval ue un polinomio utilizando la regla de Horner a partir de un vector con sus coecientes que utilice el mismo formato que la funci on polyval, es decir, un chero horner.m que contenga 2

function y = horner(p,x) %%% donde p es un vector de coeficientes %%% x el punto donde se evaluar a el polinomio %%% AQUI VA EL ALG. HORNER %%% EL RESULTADO SERA CALCULADO EN y Compara el n umero de operaciones (usando flops) de los c odigos polyval y horner. Qu e conclusiones sacas? 8. Ejecuta el siguiente c odigo para calcular una suma de n umeros: format long e; a = 1./(200000:210000); b = 1./(210000:-1:200000); sum(a), sum(b), sum(a)-sum(b), son iguales los dos resultados? Cu al es el m as preciso? Puedes estimar el tama no de los errores cometidos en ambos casos?. Justica tus respuestas y presenta los c alculos que consideres oportunos. 9. Para calcular la exponencial de un n umero se puede usar su desarrollo de Taylor x2 x3 ex = 1 + x + + + , 2! 3! que se puede implementar en Matlab de la siguiente forma n=20; %%% n umero de t erminos potencias=0:n; factoriales=[1 cumprod(1:n)]; terminos=x.^potencias./factoriales; exponencialdex = cumsum(terminos), Calcula la exponencial para x = 5 5 con 7 d gitos de precisi on. Cu antos t erminos necesitas (n)? C omo estimar as a partir del desarrollo de Taylor ese n umero de t erminos? Calcula uno partido la exponencial para x = 5 5 con 7 d gitos de precisi on. Cu antos t erminos necesitas (n)? C omo estimar as ese n umero a partir del desarrollo Taylor? 10. El ejemplo cl asico de Wilkinson (1963) sobre la inestabilidad de m etodos num ericos y la propagaci on de errores es el polinomio p(x) = (x 1) (x 2) (x 19) (x 20) = x20 210 x19 + . . . , 3

cuyas ra ces son reales y est an bien separadas. Calculemoslas en Maltab: lista = 1:20; factores = [lista*0+1; -lista]; polinomio = [1]; for ind=1:20, polinomio = conv (polinomio, factores(ind,:)); end roots (polinomio), Ahora cambiaremos el coeciente 210 x1 9 por (210 + 223 ) x19 , y calcularemos de nuevo los ceros polinomio(2) = polinomio(2) +2^(-23); roots(polinomio), c omo son los ceros del polinomio ahora? Comenta las diferencias entre los ceros de ambos polinomios. C omo estudiar as la sensitividad del polinomio p(x, ) = x20 x19 + . . . , ante cambios en el valor de ? Es decir, c omo determinar as la inuencia de un peque no cambio en sobre cada una de las ra ces del polinomio. 11. Otro ejemplo cl asico de c alculo de ra ces de polinomios es a x2 + b x + c = 0 , para a, b, c IR tiene como ra ces r = b b2 4 a c . 2a

La evaluaci on de esta expresi on, para una de las dos ra ces reales cuando 2 b |4 a c| involucra una diferencia cancelativa. Un manera de evitar la diferencia cancelativa es utilizar las expresiones para las ra ces b + (b) b2 4 a c x1 = 2a c , x2 = a x1 4

a = 1, b= - 105 , c = 1, true 99999.999990 0.000010000000001 a=6 1030, b = 5 103 0, c = 4103 0, a = 10 30, b = 103 0, c = 103 0, ... a = 1, b=-4, c = 3.9999999999999

También podría gustarte