program aproxFourier !////////////////////////////////////////////////////////////// !/ Aproximacion de la funcion y=x, para x en [-pi,pi] / !/ n=nMax / !/ faprox(x) ~ suma| [(bn*sin(n*x)] / !/ n=1 / !/ tend=pi / !/ donde bn = (1/pi)*integral| [t*sin(n*t)] / !/ tini=-pi / !/ / !/ Aproximamos la integral como una suma de N areas de rects: / !/ i=N / !/ bn ~ suma|[ti*sin(n*ti)*h] / !/ i=1 / !/ / !/ h = (tend-tini)/N / !////////////////////////////////////////////////////////////// ! =============================DECLARACION DE VARS======================== integer,parameter :: pi=3.141592 ! n indice de la suma de fAprox, va desde 1 a nMax ! nrSubdivisionesIntegarl - cantidad de subdivisiones del intervalo [-pi,pi] para aprox. las integrales integer :: n,nMax, nrSubdivisionsIntegral ! x variable de la funcion a aproximar, la fijamos en 1/2 ! t es la variable que recorre el intervalo de integracion [-pi,pi] ! starIntervalIntegral, endIntervalIntegral, limites de integracion, los fijamos en -pi y pi ! incrementIntegral es el valor del intervalo entre evaluaciones sucesivas del intergando real :: x, t, startIntervalIntegral, endIntervalIntegral, integral,incrementIntegral,fAprox !============================FIN DECLARACION DE VARS======================= ! Inicializo vars startIntervalIntegral = -pi endIntervalIntegral = pi nrSubdivisionsIntegral = 100 nMax = 15 x = 0.5 ! calculo el incremento para evaluar la suma aprox de cada integral incrementIntegral = (endIntervalIntegral-startIntervalIntegral)/nrSubdivisionsIntegral fAprox = 0.0 do n = 1, nMax integral = 0 t = startIntervalIntegral do i = 1,nrSubdivisionsIntegral integral = integral + t*sin(n*t)*incrementIntegral t = t + incrementIntegral end do integral = integral/pi fAprox = fAprox + integral*sin(n*x) print*," n ",n," faprox ",faprox end do end program aproxFourier