program chebyshev !===================================================================== ! Esta solución es óptima pues recorre un solo loop en los ! ! índices pares. Para actualizar las variables solo hay que ! ! darse cuenta que si para i: ! ! Ti = 2xTi-1 - Ti-2 ! ! entionces para la siguiente iteración i=i+2: ! ! Ti-2 <- Ti o sea Ti-2 pasa a tener el último valor de Ti ! ! Ti-1 <- Ti_sigueinte o sea el que sigue al último valor de Ti ! !===================================================================== real :: x,a,t,tMenos1,tMenos2, tSiguiente integer :: N !================ Inicializo ==================== N = 8 x = cos(1.3) a = 1.3 print *, "a = ",a print *, "x = cos(a) = ",x print *, "------------------------------------------------" print *, tMenos2 = 1 tMenos1 = x do n = 0,N,2 if ( n==0 ) then t = 1 else t = 2*x*tMenos1-tMenos2 tMenos2 = t ! el incremento del loop es de a 2 iteraciones t_siguiente = 2*x*t-tMenos1 ! en 2 iters., tMenos2 pasa a ser t y tMenos1 tMenos1 = t_siguiente ! el siguiente a t end if print *, "n = ",n print *, "cos(n*a) = ",cos(n*a) print *, "cheb_n_(cos(a)) = ",t print *, end do end program chebyshev