Está en la página 1de 6

Montserrat Gaytán Gutiérrez

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

Anote la ecuación que aparece en cada uno de los siguientes libros:

 Chapra, Steven C. - Numerical methods for engineers 7th Ed


𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑝𝑝𝑟𝑜𝑥𝑖𝑚𝑎𝑡𝑖𝑜𝑛 − 𝑝𝑟𝑒𝑣𝑖𝑜𝑢𝑠 𝑎𝑝𝑝𝑟𝑜𝑥𝑖𝑚𝑎𝑡𝑖𝑜𝑛
𝜀𝑎 = ∗ 100%
𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑝𝑝𝑟𝑜𝑥𝑖𝑚𝑎𝑡𝑖𝑜𝑛
𝜀𝑡 = (. 5× 102−𝑛 )%
 Titus A. Beu - Introduction to Numerical Programming
𝛿 ≤ 𝛿1 + 𝛿2
 Richard L. Burden, J. Douglas Faires - Numerical Analysis 10th Edition
|𝑝−𝑝∗|
≤ 5×10−𝑡
|𝑝|
 V. Rajaraman - Computer Oriented Numerical Methods

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))

isapproxd (generic function with 1 method)

julia> isapproxd(104.75862,104.75841,3)
true

julia> isapproxd(107.2541,106.2548,2)
false

2. Tabule el número de iteraciones que le toma al algoritmo de Newton programado en clase:

##############################
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

err<eps() && break


end
##############################
Calcular la raíz cuadrada de los siguientes números: 1, 10, 100, 1e6, 1e24, 1e120, realmax(). Analice esos
datos y escriba su opinión. ¿Qué arroja el programa cuando n<=0? ¿Cómo lo modificaría para esos caos?

julia> n=1
1.0

julia> 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")
err<eps() && break
end
1: x=1.0 err=0.0

julia> n=10
10.0

julia> 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")
err<eps() && break
end
1: x=5.5 err=0.7392527130926085
2: x=3.659090909090909 err=0.15710614383433877
3: x=3.196005081874647 err=0.010665547219680787
4: x=3.16245562280389 err=5.627672666188685e-5
5: x=3.162277665175675 err=1.5834458593637353e-9
6: x=3.162277660168379 err=1.4043333874306804e-16

julia> n=100
100.0

julia> 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")
err<eps() && break
end
1: x=50.5 err=4.05
2: x=26.24009900990099 err=1.624009900990099
3: x=15.025530119986813 err=0.5025530119986813
4: x=10.840434673026925 err=0.08404346730269249
5: x=10.032578510960604 err=0.003257851096060449
6: x=10.000052895642693 err=5.289564269261859e-6
Montserrat Gaytán Gutiérrez
A00569562

7: x=10.000000000139897 err=1.3989698288696673e-11
8: x=10.0 err=0.0

julia> n=1e6
1.0e6

julia> 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")
err<eps() && break
end
1: x=500000.5 err=499.0005
2: x=250001.249999 err=249.00124999899998
3: x=125002.62498950005 err=124.00262498950005
4: x=62505.31241075213 err=61.505312410752126
….
12: x=1000.5538710539447 err=0.0005538710539447038
13: x=1000.0001533016629 err=1.5330166286275925e-7
14: x=1000.0000000000118 err=1.1823431123048067e-14
15: x=1000.0 err=0.0

julia> n=1e24
1.0e24

julia> 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")
err<eps() && break
end

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

julia> 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")
err<eps() && break
end

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

julia> 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")
err<eps() && break
end
1: x=8.988465674311579e307 err=6.703903964971299e153
2: x=4.4942328371557893e307 err=3.3519519824856493e153
3: x=2.2471164185778946e307 err=1.6759759912428246e153
4: x=1.1235582092889473e307 err=8.379879956214123e152
5: x=5.6177910464447366e306 err=4.189939978107062e152
6: x=2.8088955232223683e306 err=2.094969989053531e152
….
513: x=1.390811653841701e154 err=0.037314720727548274
514: x=1.3416806585620457e154 err=0.0006711504016824189
515: x=1.3407810947642953e154 err=2.2507037489294393e-7
516: x=1.3407807929942936e154 err=2.5424107263916088e-14
517: x=1.3407807929942597e154 err=1.1102230246251568e-16
Montserrat Gaytán Gutiérrez
A00569562

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

También podría gustarte