Pr‡ctica 2: Diferenciaci—n NumŽrica

En esta pr‡ctica nos ocuparemos de aproximar el valor de la derivada

de una funci—n en un punto fijado  o tambiŽn el valor de la derivada segunda

o de las derivadas de orden superior.

El hecho de usar la aproximaci—n numŽrica de derivadas de funciones es el mismo que con la cuadratura numŽrica, que no se conozca la expresi—n anal’tica de  o  que ella sea muy complicada.

Por otro lado, las f—rmulas de derivaci—n numŽrica son esenciales para construir mŽtodos numŽricos para resolver ecuaciones diferenciales.

Consideraremos f—rmulas del tipo

Elegidos y fijados , , los nodos  y los coeficientes , la f—rmula asocia a cada  un nœmero real.

As’, si suponemos que  coincide con  y que  tenemos la siguiente f—rmula

con   y se llama f—rmula de diferencia progresiva. Su grado de exactitud es 1.

Esta formula contiene el tŽrmino , que se llama termino de error. Este tŽrmino contiene el factor , que se trata de una derivada de orden superior a , lo cual nos indica la clase de funciones para las cuales la funci—n de aproximaci—n resulta v‡lida.

La velocidad de convergencia aumentar‡ cuando menor sea el valor de , y por tanto tambiŽn conseguiremos una mejor aproximaci—n.

En esta pr‡ctica vamos a aproximar la primera derivada de la funci—n  utilizando la f—rmula anteriormente descrita con orden 2

y orden 4

Vamos a emplear distintos valores de  para comprobar que como menor es el valor de  mejor es la aproximaci—n. Esto lo calcularemos mediante el tŽrmino del error.

El algoritmo que hemos implementado calcula, segœn el valor de  una aproximaci—n de la derivada y el error absoluto y relativo que se produce al realizar la aproximaci—n.

Los resultados obtenidos para la citada funci—n  son los siguientes:

Para la f—rmula de orden 2:

H

Aproximaci—n

Error relativo

Error Absoluto

0.1000000000

0.5561281756

0.0005726200

0.0010307160

0.0100000000

0.5555612713

0.0000057157

0.0000102883

0.0010000000

0.5555556127

0.0000000572

0.0000001029

0.0001000000

0.5555555561

0.0000000006

0.0000000010

0.0000100000

0.5555555556

0.0000000000

0.0000000000

Observamos que efectivamente aumenta la convergencia de la f—rmula a medida que disminuimos el valor de la   ya que subdividimos m‡s el recinto sobre el cual aplicamos la f—rmula. TambiŽn observamos que con esta f—rmula de orden 2 necesitamos usar valores de  peque–os para conseguir una buena aproximaci—n, ya que en caso contrario obtenemos un error considerable y por lo tanto una mala aproximaci—n.

Para la f—rmula de orden 4:

 

H

Aproximaci—n

Error relativo

Error Absoluto

0.1000000000

0.5555512746

0.0000042809

0.0000077056

0.0100000000

0.5555555551

0.0000000004

0.0000000008

0.0010000000

0.5555555556

0.0000000000

0.0000000000

0.0001000000

0.5555555556

0.0000000000

0.0000000000

0.0000100000

0.5555555556

0.0000000000

0.0000000000

Sin embargo, podemos observar que con la f—rmula de orden 4 no obtenemos error pr‡cticamente apreciable para  relativamente grandes ya que converge muy r‡pidamente.

As’ concluiremos que converge m‡s rapidamente el mŽtodo de orden 4 que el mŽtodo de orden 2, no siendo as’ necesaria la subdivisi—n del recinto en partes muy peque–as, es decir, usando cotas de  muy peque–as.

derivaci—n.for

 

 

c     Aproximaci—n de derivadas de funciones.

 

      program derivacion

 

      implicit real*8 (a-h,o-z)

 

 

c     La funci—n que aproximaremos ser‡ f(x) = ln x

      f(x) = dlog(x)

 

      f_der(x) = 1.0d+00/x

 

 

c     Funci—n de aproximaci—n de grado 2

      f_aprox2(x,h) = (1.0d+00/(2.0d+00 * h)) * (f(x+h) - f(x-h))

 

c     Funci—n de aproximaci—n de grado 4

 

      f_aprox4(x,h)=(1.0d+00/(12.0d+00*h))*(f(x-2.0d+00*h)-8.0d+00*

 

     *      f(x-h)+8.0d+00*f(x+h)-f(x+2.0d+00*h))

 

     

 

      punt_x = 1.8d+00

      h = 0.1d+00

 

 

      print *, "APROXIMACION DE DERIVADAS DE FUNCIONES"

 

 

 

c     Calculamos la funci—n aproximada y los errores absoluto

 

c     y relativo. Orden 2.

 

      print *, "Formula de orden 2"

 

      write (*,100) 'H','Resultado','E.Absoluto','E.Relativo'

 

      write (*,100) ('------------', i = 1, 4)

 

 

      do i = 1, 5

            res2 = f_aprox2(punt_x,h)

            error_abs2 = abs(f_der(punt_x)-res2)

          error_rel2 = error_abs2/f_der(punt_x)

            write (*,200) h, res2, error_abs2, error_rel2   

 

            h = h * 0.1d+00

      enddo       

     

 

      h = 0.1d+00

 

     

 

      print *, " "

 

     

 

c     Calculamos la funci—n aproximada y los errores absoluto

 

c     y relativo. Orden 4.

 

      print *, "Formula de orden 4"

 

      write (*,100) 'H','Resultado','E.Absoluto','E.Relativo'

 

      write (*,100) ('------------', i = 1, 4)

 

      do i = 1, 5

            res4 = f_aprox4(punt_x,h)

            error_abs4 = abs(f_der(punt_x)-res4)

          error_rel4 = error_abs4/f_der(punt_x)

            write (*,200) h, res4, error_abs4, error_rel4   

 

            h = h * 0.1d+00

      enddo                 

          

 

  100 format(4A15\,/)

 

  200 format(4F15.10\,/)

 

  300 format(2F15.10\,/)

 

 

      end

 



Alojamiento con 500GB de espacio y 5000GB de ancho de banda por 4 euros al mes
Cómo contratar servicios de hosting con Dreamhost
Descuento, promocode para dreamhost de $50