Está en la página 1de 5

program Principal

call Llamado_Derivada1

call Llamado_Derivada2

write(*,*) ' Puedes revisar los archivo impresos '

pause

end program

real function ExactaDer1(x)

real*8 x

! ExactaDer1 = dexp(x)

ExactaDer1 = cos(x)

return

end function

real function ExactaDer2(x)

real*8 x

! ExactaDer2 = dexp(x)

ExactaDer2 = -sin(x)

return

end function

real function f(x)

real*8 x

! f = dexp(x)

f = sin(x)

return
end function

subroutine Llamado_Derivada1

integer I, Itera

real*8 h, a , b, x(1011)

real*8 Der1Def(1011), ErrorD1Def(1011)

real*8 Der1C(1011), ErrorD1C(1011)

real*8 Der1Ch4(1011), ErrorD1Ch4(1011)

real*8 Der1P(1011), ErrorD1P(1011)

real*8 Der1R(1011), ErrorD1R(1011)

a = 0.0d0 ! Inicio del intervalo


b = 1.0d0 ! Final del intervalo
h = 0.1d0 ! Hace la vez del limite cuando h tiende a cero
Itera = (b-a)/h ! Numero de iteraciones para calcular la derivada

! Crear archivos para escribir el valor de las derivadas

open( unit = 7, file = ' Resultados_Der1Def.txt', status = 'unknown' )


open( unit = 8, file = ' Resultados_Der1C.txt', status = 'unknown' )
open( unit = 9, file = ' Resultados_Der1Ch4.txt', status = 'unknown' )
open( unit = 10, file = ' Resultados_Der1P.txt', status = 'unknown' )
open( unit = 11, file = ' Resultados_Der1R.txt', status = 'unknown' )

!*************** Inicia el ciclo del cálculo de la derivada primera ********

do I = 1, Itera + 10

x(I) = (I-1.0d0)*h

! Cálculo de las derivadas

Der1Def(I) = ( f( x(I)+h ) - f(x(I)) )/h ! Primera derivada usando


la definición

Der1C(I) = ( f( x(I)+h ) - f(x(I)-h) )/(2*h) ! Primera derivada


centrada Orden h2

Der1Ch4(I) = (- f( x(I)+2*h ) + 8*f( x(I)+h ) - 8*f( x(I)-h ) + f(x(I)-


2*h) )/(12*h) ! Primera derivada centrada Orden h4
Der1P(I) = (- 3*f( x(I) ) + 4*f( x(I)+h ) - f( x(I)+2*h ) )/(2*h) !
Primera derivada Progresiva Orden h2

Der1R(I) = ( 3*f( x(I) ) - 4*f( x(I)-h ) + f( x(I)-2*h ) )/(2*h) !


Primera derivada Regresiva Orden h2

! Calcular los Errores

ErrorD1Def(I) = abs( ExactaDer1( x(I) ) - Der1Def(I) )*100 !


Error usando la definicion

ErrorD1C(I) = abs( ExactaDer1( x(I) ) - Der1C(I) )*100 !


Error usando la derivada centrada de orden h2

ErrorD1Ch4(I) = abs( ExactaDer1( x(I) ) - Der1Ch4(I) )*100

ErrorD1P(I) = abs( ExactaDer1( x(I) ) - Der1P(I) )*100

ErrorD1R(I) = abs( ExactaDer1( x(I) ) - Der1R(I) )*100

! Imprimir Resultados

! write(*,*) x(I), Der1Def(I), ErrorD1Def(I)

write(7,*) x(I), Der1Def(I), ErrorD1Def(I)

write(8,*) x(I), Der1C(I), ErrorD1C(I)

write(9,*) x(I), Der1Ch4(I), ErrorD1Ch4(I)

write(10,*) x(I), Der1P(I), ErrorD1P(I)

write(11,*) x(I), Der1R(I), ErrorD1R(I)

end do

return

end subroutine

subroutine Llamado_Derivada2

integer I, Itera

real*8 h, a , b, x(1011)

real*8 Der2C(1011), ErrorD2C(1011)

real*8 Der2Ch4(1011), ErrorD2Ch4(1011)


real*8 Der2P(1011), ErrorD2P(1011)

real*8 Der2R(1011), ErrorD2R(1011)

a = 0.0d0 ! Inicio del intervalo


b = 1.0d0 ! Final del intervalo
h = 0.1d0 ! Hace la vez del limite cuando h tiende a cero
Itera = (b-a)/h ! Numero de iteraciones para calcular la derivada

! Crear archivos para escribir el valor de las derivadas

open( unit = 8, file = ' Resultados_Der2C.txt', status = 'unknown' )


open( unit = 9, file = ' Resultados_Der2Ch4.txt', status = 'unknown' )
open( unit = 10, file = ' Resultados_Der2P.txt', status = 'unknown' )
open( unit = 11, file = ' Resultados_Der2R.txt', status = 'unknown' )

!*************** Inicia el ciclo del cálculo de la derivada Segunda ********

do I = 1, Itera + 10

x(I) = (I-1.0d0)*h

! Cálculo de las derivadas

Der2C(I) = ( f( x(I)+h ) - 2*f( x(I) ) + f(x(I)-h) )/(h**2) !


Segunda derivada centrada Orden h2

Der2Ch4(I) = (- f( x(I)+2*h ) + 16*f( x(I)+h ) - 30*f( x(I) ) +


16*f( x(I)-h ) - f(x(I)-2*h) )/(12*h*h) ! Segunda derivada centrada Orden h4

Der2P(I) = ( 2*f( x(I) ) - 5*f( x(I)+h ) + 4*f( x(I)+2*h ) - f( x(I)


+3*h ) )/(h**2) ! Segunda derivada Progresiva Orden h2

Der2R(I) = ( 2*f( x(I) ) - 5*f( x(I)-h ) + 4*f( x(I)-2*h ) -


f( x(I)-3*h ) )/(h**2) ! Segunda derivada Regresiva Orden h2

! Calcular los Errores

ErrorD2C(I) = abs( ExactaDer2( x(I) ) - Der2C(I) )*100 !


Error usando la derivada centrada de orden h2

ErrorD2Ch4(I) = abs( ExactaDer2( x(I) ) - Der2Ch4(I) )*100

ErrorD2P(I) = abs( ExactaDer2( x(I) ) - Der2P(I) )*100

ErrorD2R(I) = abs( ExactaDer2( x(I) ) - Der2R(I) )*100

! Imprimir Resultados

! write(*,*) x(I), Der2C(I), ErrorD2C(I)

write(8,*) x(I), Der2C(I), ErrorD2C(I)


write(9,*) x(I), Der2Ch4(I), ErrorD2Ch4(I)

write(10,*) x(I), Der2P(I), ErrorD2P(I)

write(11,*) x(I), Der2R(I), ErrorD2R(I)

end do

return

end subroutine

También podría gustarte