Está en la página 1de 10

Deber 1 Fı́sica Computacional

Universidad San Francisco de Quito


Alejandro David Erazo Guachamin
Octubre 2021

1. Ejercicio 1
2
Desarrollar el método numérico para encontrar la segunda derivada d dx
f (x)
2

utilizando f(x-h), f(x) y f(x+3h) encontrar el error del método.


Primero vamos a descomponer en series de Taylor las funciones f(x-h) y
f(x+3h).

df (x) h2 d2 f (x) h3 d3 f (x) h4 d4 f (x)


f (x − h) = f (x) − h + − + + (1)
dx 2 dx2 3 dx3 24 dx4

df (x) 9h2 d2 f (x) 27h3 d3 f (x) 81h4 d4 f (x)


f (x+3h) = f (x)+3h + + + +... (2)
dx 2 dx2 3 dx3 24 dx4
Multiplicando a la ecuación (1) por 3 y sumando con la ecuación (2) obte-
nemos:

12h2 d2 f (x) 24h3 d3 f (x) 84h4 d4 f (x)


f (x + 3h) + 3f (x − h) = 4f (x) + + + + ...
2 dx2 3 dx3 24 dx4

d2 f (x) 1
= 2 (f (x + 3h) − 4f (x) + 3f (x − h)) − O(h)
dx2 6h
Donde O(h) serı́a el valor de

4h d3 f (x) 7h2 d4 f (x)


O(h) = + + ...
3 dx3 12 dx4
Si consideramos únicamente el término con la tercera derivada y el valor
absoluto de este, entonces el error de método estará determinado por:
4h d3 f (x)

método =
(3)
3 dx3

1
2. Ejercicio 2
Para este ejercicio se utilizo dos comandos en python que permiten deter-
minar el épsilon de maquina de precisión simple y doble, adicional a eso se
implemento un algoritmo que permite determinar el épsilon de maquina con
precisión doble, estos resultados se visualizan en la figura 2

Figura 1: Valores de épsilon de maquina

El codigo usado fue:

import numpy as np
e=1
while (1+0.5*e)!=1:
e=0.5*e
print("Epsilon de maquina con algoritmo",e)
print("Comando en python precision doble",np.finfo(float).eps)
print("Comando en python precision simple",np.finfo(np.float32).eps)

3. Ejercicio 3
Hacer todos los cálculos para la precisión doble.
Para nuestro caso el mq = 2,220446049250313 ∗ 10−16
Considerar la función

f (x) = 10sin(100x) (4)


1. Encontrar analı́ticamente:
1.2 Mesh step para la primera derivada (2–point y 3–point appro-
ximations)

Mesh step para la primera derivada 2–point approximations Te-


nemos que para las funciones f(x+h) y f(x-h) desarrolladas en series de Taylor
serán:

df (x) h2 d2 f (x) h3 d3 f (x) h4 d4 f (x)


f (x − h) = f (x) − h + − + + (5)
dx 2 dx2 3 dx3 24 dx4

2
df (x) h2 d2 f (x) h3 d3 f (x) h4 d4 f (x)
f (x + h) = f (x) + h + + + + (6)
dx 2 dx2 3 dx3 24 dx4
Recordemos que la primera derivada para para una función f(x) con aproxi-
mación de 2-point de la ecuación (6) será de la forma:

f (x + h) − f (x)
f 0 (x) = + O(h) (7)
h
si truncamos la serie en la segunda derivada, tendremos que el error de
método para esta aproximación es:

h 00
método = − f (x)

2
El error de calculo debe ser mayor o igual al épsilon de maquina, por lo tanto
vamos a tener que el error total será la contribución del error de método y el
error de cálculo.
h 00 mq
= f (x) +
2 h
Como queremos minimizar el error, vamos hallar el valor de h que minimiza
este error. Para ello derivamos el error total y encontramos h.
d 1 mq
= f 00 (x) − 2 = 0
dh 2 h
s 
2mq
h= (8)
f 00 (x)
Derivamos nuevamente y reemplazamos el valor de h encontrado, esto nos
permitirá determinar si la función alcanza un mı́nimo o un máximo con el valor
hallado.
d2  2mq
= 3 (9)
dh2 h
En la ecuación (9) notamos que el error alcanza un mı́nimo debido a que el
valor de h siempre es positivo.
Como la ecuación (8) depende de la segunda derivada de la función, vamos
hallar analı́ticamente la segunda derivada de la ecuación (4)
La primera derivada

f 0 (x) = 1000cos(100x) = −103 cos(100x)

La segunda derivada

f 00 (x) = −100000sin(100x) = −105 sin(100x)

3
La tercera derivada

f 000 (x) = −10000000cos(100x) = −107 cos(100x)

La cuarta derivada
f (4) (x) = 109 sin(100x)
Remplazando la segunda derivada y el épsilon de maquina, y recordando que
tomamos el valor absoluto de la segunda derivada obtenemos:
s
2 ∗ 2,220446049250313 ∗ 10−16
h=
105 sin(100x)

6,664001874625057 ∗ 10−11
h= p (10)
sin(100x)
Podemos observar que la ecuación (10) nos entrega el Mesh step pero este
dependerá de la función seno, lo cual implica que no todos los puntos que es-
cojamos en x nos entregará un valor que minimice el error total. Vamos hallar
la primera derivada de la función en el punto x=0.00785 que es el valor apro-
π
ximado de la mitad del intervalo entre 0 y 200 . En este intervalo la función es
decreciente y no tenemos problemas con la división.

h = 7,926456927487832 ∗ 10−11
Por lo tanto si reemplazamos en el error tendremos:

7,926456927487832 ∗ 10−11 2,220446049250313 ∗ 10−16


= ∗105 ∗sin(100∗0,00785)+
2 7,926456927487832 ∗ 10−11

 = 5,6026193532954685 ∗ 10−06
Mesh step para la primera derivada 3–point approximations
La primera derivada para 3–point approximations podemos encontrarla res-
tando la ecuación (6) de la ecuación (5) y despejando la primera derivada:

df (x) f (x + h) − f (x − h)
= f 0 (x) = + O(h) (11)
dx 2h
De la ecuación (11) truncamos la serie en la tercera derivada y observamos
que el error de método será:
2
h
método = − f 000 (x)

6
y que f (x+h)−f (x−h) (Error de cálculo) tiene que ser mayor que el épsilon
de maquina, por lo tanto:
mq
f 0 (x) ≥ (12)
2h

4
De esta forma obtenemos el error total o tı́pico para hallar la primera deri-
vada con 3-point approximations será:

h2 000 mq
=
f (x) + (13)
6 2h
Vamos hallar la derivada de la ecuación (11):
d h mq
= f 000 (x) − 2 = 0
dh 3 2h
y despejamos h:
 1/3
3mq
h= (14)
2f 000 (x)
Reemplazando el épsilon de maquina y la tercera derivada de la función
tenemos que h será:
1/3
3 ∗ 2,220446049250313 ∗ 10−16

h=
2 ∗ 107 cos(100x)
3,2174402820653916 ∗ 10−8
h= (15)
(cos(100x))1/3
Vamos a considerar la primera derivada en el punto x=0.00785 entonces
tenemos que el valor de h será:

h = 3,610975515551115 ∗ 10−8
Reemplazando h y el épsilon de maquina encontramos que el error de la
primera derivada con 3-point approximation es:

 = 4,611868814301748 ∗ 10−9
1.2 Mesh step para la segunda derivada (3–point approximation)
Para la derivada con 3–point approximation sumamos las ecuaciones (5) y
(6) y despejando la segunda derivada obtenemos:
1
f 00 (x) = (f (x + h) − 2f (x) + f (x − h)) + O(h) (16)
h2
si truncamos la serie en la cuarta derivada tenemos que el error de método
será
2
h
método = f (4) (x)

12
Notamos también que el error de cálculo (f (x + h) − 2f (x) + f (x − h)) debe
ser mayor o igual al épsilon de maquina, por lo que tenemos que:
mq
f 00 (x) ≥ (17)
h2

5
Por lo tanto el error será:

h2 (4) mq
=f (x) + 2 (18)
12 h
Vamos a minimizar la ecuación (18), lo cual implicar derivar la función y
hallar h.
d h mq
= f (4) (x) − 3 = 0
dh 6 h
Despejamos h:
 1/4
6mq
h= (19)
f (4) (x)
Reemplazando los valores del épsilon de maquina y la tercera derivada tene-
mos:

1,0743551474528728 ∗ 10−6
h=
(sin(100x))1/4
Si tomamos la segunda derivada en el punto x=0.00785 obtenemos que el
h será:

h = 1,1717092695039679 ∗ 10−6 (20)


Reemplazando el valor de h en el error para la segunda derivada con 3-point
approximation, obtenemos que el error es:

 = 0,00024260053438441092
1.3 Error del método para la primera y la segunda derivada (3–point
app.)
El error de método para la primera derivada con 3–point app se obtuvo
truncando la serie de Taylor de la ecuación (11) lo cual entrega el error de
método:
2
h 000
método = − f (x)
(21)
6
y el valor de h para este caso fue de h = 3, 6109755155511151008 y si considera-
mos la primera derivada en el punto x=0.00785 se tiene que el valor numérico
del error de método es:
2
h
método = − f 000 (x) = 1,5372896047672526 ∗ 10−9

6
El error de método para la segunda derivada consideramos la ecuación (16)
que fue truncada en la cuarta derivada, entonces el error de método para la
segunda derivada con 3-point app será:
2
h (4)
método = − f (x)
(22)
12

6
De igual forma que la primera derivada tenemos que el valor de h para este
caso fue de h = 1,1717092695039679 ∗ 10−06 , por lo tanto reemplazando en el
error de método y considerando que estamos evaluando la segunda derivada en
el punto x=0.00785 tenemos que el valor numérico del error de método es:
2
h (4)
método = − f (x) = 8,086684479480363 ∗ 10−5

12
1.4 Error del calculo para la primera y la segunda derivada (3–point
app.)
Para el caso de la primera derivada con 3–point app tenemos que esta de-
terminado por la ecuación (12) y tomando el valor de h que hemos hallado para
la primera derivada
mq
cálculo = = 3,0745792095344958 ∗ 10−9 (23)
2h
Para el caso de la segunda derivada tenemos que el error de cálculo estará
determinado por la ecuación (17) y considerando el valor de h encontrado para
el caso de la segunda derivada con 3-point app.
mq
cálculo = = 0,0001617336895896073 (24)
h2
Numéricamente
2.1 Escribir el programa que calcula la primera y la segunda derivada.
Se ha implementado el código que nos permite hallar la primera y segunda
derivada de la función f(x), el código implementado tiene la estructura del al-
goritmo visto en clase. Esto código esta realizo en python y nos permite hallar
la derivada en un punto variando el valor del mesh step.

import numpy as np
import matplotlib.pyplot as plt

def f(x):
y=10*np.sin(100*x) #Función a derivar
return y
#Me permite hallar la primera derivada con 3 point approximation
def df(x,h):
d=1/(2*h)*(f(x+h)-f(x-h))
return d
#Me permite hallar la segunda derivada con 3 point approximation
def d2f(x,h):
d2=1/(h**2)*(f(x+h)-2*f(x)+f(x-h))
return d2

Se toma nueve puntos en un intervalo para la función f(x) los cuales nos
entregara diferentes valores del mesh step.
El mesh step (h) estara restringido entre maq < h <x2 −x1 , por lo tanto los
valores que puede tomar (h) estará entre 10−16 y10−2 .

7
Figura 2: Puntos para hallar la derivada

En la figura 2 podemos observar los puntos donde se hallaran la primera y


segunda derivada de la función dada.
En la siguiente tabla se encuentra los valores de las derivadas numérica y
analı́tica para los diferentes puntos xi para i=1,2,...,9
2.2 Para la primera y segunda derivada encontrar el mesh step y
compararlo con el mesh step obtenido analı́ticamente
En la tabla (1) presenta los valores para la primera y segunda derivada
calculada analı́ticamente, mientras que para la derivada numéricamente se con-
sideraron los nueve puntos seleccionados y se vario el valor de h para determinar
como el valor de la derivada cambia al cambiar el valor del mesh step.

Tabla 1

8
x1 x2 x3 x4 x5 x6 x7 x8 x9
x 0.0001 0.0079 0.0158 0.0236 0.0315 0.0393 0.0472 0.0550 0.0628
f(x) 0.0999 7.0710 9.9995 7.0710 -0.0999 -7.0710 -9.9995 -7.07106 0.09999
f 0 (x)a 999.9500 703.8453 -9.2035 -709.7926 -999.9647 -704.9758 7.6109 708.6698 999.9949
f 00 (x)a -999.9833 -71035.3272 -99995.7646 -70441.0766 840.7247 70923.1390 99997.1036 70554.0326 318.5302 hn
f’(x) 841.4289 592.2654 -7.74451 -597.2698 -841.4412 -593.2167 6.4044 596.3251 841.4667 10−2
f”(x) -919.3801 -65309.5522 -91935.6448 -64763.2009 772.9584 65206.4069 91936.8759 64867.0522 292.8552 10−2
f’(x) 998.2843 702.6728 -9.1882 -708.6102 -998.2989 -703.8014 7.5983 707.4892 998.3291 10−3
f”(x) -999.1503 -70976.1508 -99912.4626 -70382.3952 840.0244 70864.0561 99913.8005 70495.2571 318.2648 10−3
f’(x) 999.9333 703.8335 -9.2033 -709.7807 -999.9480 -704.9640 7.6108 708.6580 999.9783 10−4
f”(x) -999.9750 -71034.7352 -99994.9313 -70440.4896 840.7177 70922.5480 99996.2703 70553.4446 318.5275 10−4
f’(x) 999.9498 703.8451 -9.2035 -709.7924 -999.9645 -704.9757 7.6109 708.6697 999.9948 10−5
f”(x) -999.9832 -71035.3213 -99995.7563 -70441.0707 840.7247 70923.1331 99997.0953 70554.0267 318.5302 10−5
f’(x) 999.9500 703.8453 -9.2035 -709.7926 -999.9647 -704.9758 7.6109 708.6698 999.9949 10−6
f”(x) -999.9833 -71035.3260 -99995.7645 -70441.0787 840.7247 70923.1411 99997.1039 70554.0337 318.5302 10−6
f’(x) 999.9500 703.8453 -9.2035 -709.7926 -999.9647 -704.9758 7.6109 708.6698 999.9949 10−7
f”(x) -999.9834 -71035.2665 -99995.7450 -70441.2528 840.2820 70923.1784 99997.3437 70554.2291 318.5299 10−7
f’(x) 999.9500 703.8453 -9.2035 -709.7926 -999.9647 -704.9758 7.6109 708.6698 999.9949 10−8
f”(x) -999.8946 -71036.5100 -100008.8900 -70450.3123 840.8552 70938.8104 100008.8901 70556.8937 318.4258 10−8
f’(x) 999.9500 703.8453 -9.2035 -709.7926 -999.9647 -704.9758 7.6109 708.6698 999.9949 10−9
f”(x) -985.3229 -72830.6304 -101252.3398 -72830.6304 846.5451 72830.6304 99475.9830 71054.2736 9200.9733 10−9
f’(x) 999.9500 703.8453 -9.2035 -709.7926 -999.9647 -704.9758 7.6109 708.6698 999.9949 10−10
f”(x) 0.0000 -88817.8419 -177635.6839 -444089.2099 -441313.6523 177635.6839 355271.3679 177635.6839 888178.4197 10−10
f’(x) 999.9500 703.8453 -9.2034 -709.7926 -999.9647 -704.9758 7.6109 708.6698 999.9950 10−11
f”(x) 138777.8781 0 0 -17763568.3940 0.0000 17763568.3940 17763568.3940 1,77 ∗ 107 -69388.9390 10−11
f’(x) 999.9500 703.8454 -9.2033 -709.7931 -999.9625 -704.9756 7.6108 708.6696 999.9994 10−12
f”(x) 13877787.8078 888178419.7001 0 −1,77 ∗ 109 −4,42 ∗ 109 1,77 ∗ 109 1776356839.4003 0.0000 8,87109 10−12
f’(x) 999.9501 703.8503 -9.2015 -709.7967 -1000.0092 -705.0094 7.6117 708.6687 1000.0394 10−13
f”(x) 0.0000 −8,88 ∗ 1011 0 −1,77 ∗ 1011 1.38*109 1,77 ∗ 1011 1,77 ∗ 1011 0.0 8,87 ∗ 1011 10−13
f’(x) 999.9501 703.7925 -9.2370 -709.7434 -999.8315 -705.0360 7.5495 708.7664 1000.5278 10−14
f”(x) 0.0000 0 0 −3,55 ∗ 1013 -4.42*1013 1.77*1013 1,77 ∗ 1013 0.0000 8,87 ∗ 1013 10−14
f’(x) 999.9432 703.43730 -9.7699 -708.7664 -999.1660 -704.3255 7.9936 707.8782 999.1973 10−15
f”(x) −1,38 ∗ 1013 0 −1,77 ∗ 1015 −1,77 ∗ 1015 −1,38 ∗ 1015 1,77 ∗ 1015 1,77 ∗ 1015 7,10 ∗ 1015 8,87 ∗ 1015 10−15
f’(x) 999.9640 706.10184 -17.7635 -728.3063 -976.9269 -688.3383 8.8818 692.7792 976.9963 10−16
f”(x) 1,38 ∗ 1015 8,88 ∗ 1016 0 −1,77 ∗ 1017 1,38 ∗ 1016 8,88 ∗ 1016 1,77 ∗ 1015 1,77 ∗ 1017 0.0000 10−16
Valores de las derivadas numéricas y analı́ticas

De la tabla (1) podemos observar que los valores de la primera y segunda de-
rivada para los nueve puntos considerados en cada caso. En la primera parte esta
calculado los valores de la primera y segunda derivada analı́ticamente, esto nos
permite tener valor de referencia para determinar desde que valor las derivadas
numéricas empiezan a converger. Observamos que la primera derivada numérica
comienza a converger hacia el valor de la derivada analı́tica con un h = 10−4
para todos los puntos, y cuando esta llega al valor de h = 10−16 observamos que
su valor cambia respecto al valor analı́tico, esto puede ser debido a que estamos
tomando un valor muy cercano a la vecindad del épsilon de maquina.
Para el caso de la segunda derivada observamos que el valor numérico em-
pieza converger a partir de h = 10−3 en la mayorı́a de los puntos y se mantiene
hasta un valor de h = 10−8 , luego de este valor observamos como la segunda
numérica derivada diverge para la mayorı́a de los puntos.
2.3. Encontrar el error absoluto de la derivación numérica y compa-
rarlo con el error total (error del método + error del cálculo) obtenido
analı́ticamente.
En la tabla (2) presentamos el valor del error absoluto de la derivación
numérica y el error total para la primera y segunda derivada respectivamente
para un punto en especifico tomado en la derivación analı́tica.

Tabla 2
Derivada Error absoluto Error total
f’=103 cos(100x) 1.667923816226671*10−9 4.611868814301748*10−8
f”= 105 sin(100x) -8.351263495950748*10−8 0.00024260053438441092
Valores de los errores absolutos y totales

De la tabla (2) podemos observar que los errores absolutos serán más pe-

9
queños que los errores totales encontrados analı́ticamente. También dependerá
de que valor de h asignemos para hallar la derivada numérica, esto debido a que
en la tabla 1 tenemos un intervalo en el cual podemos escoger h para obtener
un valor muy cercano al valor de la derivada analı́tica.
Pero los errores en la parte analı́tica se debe a que hemos truncado la se-
rie de Taylor y también estamos considerando el épsilon de maquina que nos
proporciona el error de cálculo.

10

También podría gustarte