Documentos de Académico
Documentos de Profesional
Documentos de Cultura
T 2017-01-26 Aproxi PDF
T 2017-01-26 Aproxi PDF
A00569562
1. Investigue la relación que existe entre el error relativo y el número de cifras o dígitos significativos.
Se le llaman cifras significativas de un número a aquellas que pueden ser utilizadas con confiabilidad,
para estimar una medida. Los métodos numéricos obtienen resultados aproximados. Por lo tanto, se
debe contar con criterio que permitan especificar qué tan precisos son los resultados obtenidos. Una
manera de asegurarlos es en términos de cifras significativas. Así se pude establecer que la
aproximación es aceptable siempre y cuando sea correcta para cierto número de cifras significativas.
El error relativo dependerá del número de cifras significativas que tomemos en nuestros cálculos.
Pero para que el error relativo sea lo más pequeño posible, es necesario que nuestros valores
numéricos sean muy aproximados al real (Lo que se logra tomando el número adecuado de cifras
significativas).
Con lo anterior escriba una función que se llame: isapproxd(x,y,d), inspirada en la funcion isapprox(), y
que regrese 'true' cuando y sea aproximadamente igual a x con al menos d dígitos significativos y false
en caso contrario.
julia> isapproxd(x,y,d)=isapprox(floor(x,d),floor(y,d))
julia> isapproxd(104.75862,104.75841,3)
true
julia> isapproxd(107.2541,106.2548,2)
false
##############################
x=n ; sq=sqrt(n) ; for i=1:520
x=(x+n/x)/2
err=abs((sq-x)/sq)
println("$i: x=$x err=$err")
Montserrat Gaytán Gutiérrez
A00569562
julia> n=1
1.0
julia> n=10
10.0
julia> n=100
100.0
7: x=10.000000000139897 err=1.3989698288696673e-11
8: x=10.0 err=0.0
julia> n=1e6
1.0e6
julia> n=1e24
1.0e24
1: x=5.0e23 err=4.99999999999e11
2: x=2.5e23 err=2.49999999999e11
3: x=1.25e23 err=1.2499999999899998e11
4: x=6.25e22 err=6.2499999999e10
5: x=3.125e22 err=3.1249999998999996e10
….
40: x=1.2494946899444133e12 err=0.24949468994441332
41: x=1.024909109583022e12 err=0.024909109583021973
42: x=1.0003026920799209e12 err=0.0003026920799208984
43: x=1.0000000457973851e12 err=4.579738513183594e-8
44: x=1.000000000000001e12 err=9.765625e-16
45: x=1.0e12 err=0.0
julia> n=1e120
1.0e120
Montserrat Gaytán Gutiérrez
A00569562
1: x=5.0e119 err=5.0e59
2: x=2.5e119 err=2.5e59
3: x=1.25e119 err=1.25e59
4: x=6.25e118 err=6.25e58
5: x=3.125e118 err=3.125e58
6: x=1.5625e118 err=1.5625e58
7: x=7.8125e117 err=7.8125e57
8: x=3.90625e117 err=3.90625e57
9: x=1.953125e117 err=1.953125e57
….
198: x=2.621698605062705e60 err=1.6216986050627051
199: x=1.5015653516738668e60 err=0.501565351673867
200: x=1.0837685158755478e60 err=0.08376851587554784
201: x=1.0032373907108396e60 err=0.003237390710839629
202: x=1.0000052234389945e60 err=5.223438994509123e-6
203: x=1.0000000000136421e60 err=1.364216866476833e-11
204: x=1.0e60 err=0.0
julia> n=realmax()
1.7976931348623157e308
Con esto podemos observar que entre mayor es el número a analizar mayor es el número de
iteraciones que requiere Julia para poder sacar la raíz, sin embargo, lo sigue realizando muy rápido
y sin problema alguno. También podemos ver que, si la raíz del número que solicitamos es exacta,
Julia llega al resultado y se obtiene un error de 0.0, sin embargo, cuando la raíz que buscamos no
es exacta Julia aun así llega al resultado sólo que este se detiene cuando el error es muy pequeño
en un grado aproximadamente de e-16, siendo así este menor que la épsilon de la máquina.
¿Qué arroja el programa cuando n<=0? ¿Cómo lo modificaría para esos caos?
ARROJA
n=0.0 n<0.0
julia> n=0.0 julia> n=-.01
0.0 -0.01
julia> x=n ; sq=sqrt(n) ; for i=1:520 julia> x=n ; sq=sqrt(n) ; for i=1:520
x=(x+n/x)/2 x=(x+n/x)/2
err=abs((sq-x)/sq) err=abs((sq-x)/sq)
println("$i: x=$x err=$err") println("$i: x=$x err=$err")
err<eps() && break err<eps() && break
end end
512: x=NaN err=NaN ERROR: DomainError:
513: x=NaN err=NaN sqrt will only return a complex
514: x=NaN err=NaN result if called with a complex
515: x=NaN err=NaN argument. Try sqrt(complex(x)).
516: x=NaN err=NaN in sqrt(::Float64) at ./math.jl:209
517: x=NaN err=NaN
518: x=NaN err=NaN
519: x=NaN err=NaN
520: x=NaN err=NaN
CORREGIDO
n=0.0 n<0.0
julia> n=0.0 julia> n=-.01
0.0
julia> x=n; for i=1:520
julia> x=n; for i=1:520 if n==0.0 println("La raíz es
if n==0.0 println("La raíz es de 0.0") && break
de 0.0") && break else
else if n<0.0 println("No hay
if n<0.0 println("No hay raíz para número negativos") && break
raíz para número negativos") && break else
else sq=sqrt(n)
sq=sqrt(n) x=(x+n/x)/2
x=(x+n/x)/2 err=abs((sq-x)/sq)
err=abs((sq-x)/sq) println("$i: x=$x
err=$err")
Montserrat Gaytán Gutiérrez
A00569562
println("$i: x=$x err<eps() && break
err=$err") end
err<eps() && break end
end end
end No hay raíz para número negativos
end
La raíz es de 0.0