You are on page 1of 5

Prctica voluntaria (1er. parcial) a Profesor Francisco R.

Villatoro

Tcnicas Numricas e e 7 de Octubre de 1999

PRIMER TEMA: Operaciones en coma otante en Matlab e 1. La aritmtica que utiliza Matlab es compatible con el sistema IEEE a doble precisin, es decir, 53 bits binarios en la mantisa (el primero de o los cuales se aprovecha para el signo) y un exponente entre 1022 e 1023. Los nmeros otantes en Matlab (IEEE) tienen la forma u f l(x) = (1.a1 a2 a53 )2 2e , donde es el signo, ai {0, 1}, y 1022 e 1023. Cuntos d a gitos binarios o bits requiere el exponente? Cuntos bytes (grupo de 8 bits) a se consumen en representar un nmero otante? u Cuntos nmeros con exponente e = 0 puede representar Matlab? a u Cul es el nmero positivo ms pequeo representable (para e = 0 y a u a n para e = 0)? y cul es el ms grande? a a En el sistema IEEE de doble precisin adems del 0, se incluyen los o a nmeros Inf (innito positivo y negativo) y NaN (el resultado no es un u nmero). Prueba a calcular en Matlab 1/0, log(1/0) y 1/0-log(1/0), u qu resultados obtienes? Justica tu respuesta y pon otro ejemplo de e tu invencin de similares resultados. o 2. Calcule el epsilon de la mquina para Matlab (comando eps). a El siguiente programa e = 1; while (1+e > 1), e=e/2; end, calcula el epsilon de la mquina? Si no lo hace, cmo lo arreglar y a o as por qu. e Escribe en representacin otante en binario en el sistema IEEE de o Matlab el nmero epsilon de la mquina () y el nmero 1 + . u a u 3. Escribe una cota superior del error de normalizacin de un nmero o u otante cuando se utiliza redondeo y otra cuando se utiliza truncado? Justica tu respuesta. Calcula estas cotas para Matlab. 1

El error relativo de normalizacin de un nmero , donde f l(x) = o u x (1 + ), se puede acotar por 2n 2n , 2n+1 0, Justica las expresiones anteriores. e 4. Un ejemplo sencillo de los efectos de los errores en aritmtica otante. Qu tiene que dar y que es lo que da realmente el programa siguiente? e 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 hace el siguiente programa? e x = 10.^(0:20); x.*(sqrt(x+1)-sqrt(x)) Cul es el efecto de la diferencia cancelativa en el resultado? Cmo a o calcular el resultado evitando la diferencia cancelativa? Escribe un as cdigo en Maltab para ello. Compara los resultados de tu cdigo con o o 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 cmo lo evitar o as (escribe un cdigo Matlab). Calcula los errores cometidos debido a ella. o Compara los resultados de tu cdigo con los obtenidos utilizando la o expresin o sin2 (x/2) 2 . x2 Razona el resultado que obtienes. 7. Escribe un programa Matlab que evale un polinomio utilizando la u regla de Horner a partir de un vector con sus coecientes que utilice el mismo formato que la funcin polyval, es decir, un chero horner.m o que contenga 2

function y = horner(p,x) %%% donde p es un vector de coeficientes %%% x el punto donde se evaluar el polinomio a %%% AQUI VA EL ALG. HORNER %%% EL RESULTADO SERA CALCULADO EN y Compara el nmero de operaciones (usando flops) de los cdigos u o polyval y horner. Qu conclusiones sacas? e 8. Ejecuta el siguiente cdigo para calcular una suma de nmeros: o u 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? Cul es el ms preciso? Puedes estia a mar el tamao de los errores cometidos en ambos casos?. Justica tus n respuestas y presenta los clculos que consideres oportunos. a 9. Para calcular la exponencial de un nmero se puede usar su desarrollo u de Taylor x2 x3 ex = 1 + x + + + , 2! 3! que se puede implementar en Matlab de la siguiente forma n=20; %%% nmero de trminos u e 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 precisin. Cuntos o a trminos necesitas (n)? Cmo estimar a partir del desarrollo de Taye o as lor ese nmero de trminos? u e Calcula uno partido la exponencial para x = 5 5 con 7 d gitos de precisin. Cuntos trminos necesitas (n)? Cmo estimar ese nmero o a e o as u a partir del desarrollo Taylor? 10. El ejemplo clsico de Wilkinson (1963) sobre la inestabilidad de mtoa e dos numricos y la propagacin de errores es el polinomio e o p(x) = (x 1) (x 2) (x 19) (x 20) = x20 210 x19 + . . . , 3

cuyas ra son reales y estn bien separadas. Calculemoslas en Maltab: ces a 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), cmo son los ceros del polinomio ahora? Comenta las diferencias entre o los ceros de ambos polinomios. Cmo estudiar la sensitividad del polinomio o as p(x, ) = x20 x19 + . . . , ante cambios en el valor de ? Es decir, cmo determinar la inuencia o as de un pequeo cambio en sobre cada una de las ra del polinomio. n ces 11. Otro ejemplo clsico de clculo de ra de polinomios es a a ces a x2 + b x + c = 0, para a, b, c IR tiene como ra ces r = b b2 4 a c . 2a

La evaluacin de esta expresin, para una de las dos ra reales cuando o o ces 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

You might also like