program TraceExponential !----------------------------------------------------------------------- !Christina Urbanczyk Lab5 February 16, 2010 ! This algorithm uses a factorial subprogram to calculate the & ! approximate value of exp(x) using the infinite series. ! Variables used are: ! count: DO-loop control variable ! FactorialNum: function subprogram to calculate factorials ! X: User determined value to find infinite series of ! Numits:Number of iterations ! Countits: Count iterations ! Tol:Convergence criteria ! Esum:Sum of Exp(x) ! Number:Subprogram variable ! FactorialNum:Factorial of integer ! ! Input:X,Tol,Numits ! Output:FactorialNum !----------------------------------------------------------------------- IMPLICIT NONE integer,parameter::dp=selected_real_kind(15) !15 significant figures integer:: count, Numits,Countits real(dp)::X, Esum, Tol character (len=1):: Method Esum=1 write(*,*) "Please enter a value that you would like to find the infinite series of:" read(*,*) X write(*,*) "Would you like to define the number of iterations (Y or N)?" read (*,*) Method IF (Method == "Y" .OR. Method== "y") THEN write (*,*) "What is your number of iterations?" read (*,*) Numits !Display Trace Table write (*,'(T1,A7,T20,A9,T43,A8,T58,A5,T73,A6/)') "Count","X^count","Count!","Esum","Exp(X)" DO count=1,Numits Esum= Esum+(x**count)/(real(FactorialNum(Count))) write(*,'(T1,I2,T7,F20.1,T30,F20.1,T51,F15.5,T67,F15.5)') count,X**count,FactorialNum(Count),Esum, exp(X) END DO write(*,*) "Given",Numits,"iterations, the estimated value is",Esum,"." write(*,*) "The estimated value had",abs(exp(X)-Esum)/exp(X)*100.0,"% error from the actual value of",exp(x) ELSE IF (Method == "N" .OR. Method == "n") THEN write (*,*) "What is your convergence criteria?" read (*,*) Tol !Display Trace Table write (*,'(T1,A7,T20,A9,T40,A8,T58,A5,T73,A6/)') "Count","X^count","Count!","Esum","Exp(X)" DO count=1,Countits Esum= Esum+(x**count)/(real(FactorialNum(Count))) write(*,'(T1,I2,T7,F20.1,T30,F20.1,T51,F15.5,T67,F15.5)') count,X**count,FactorialNum(Count),Esum, exp(X) IF ((abs(exp(X)-Esum))0. ! ! Accepts:Number ! Returns:FactorialNum !---------------------------------------------------------------------- FUNCTION FactorialNum (Number) Integer, INTENT (IN)::Number Integer::count real:: FactorialNum !Calculate FactorialNum FactorialNum=1 DO count=2, Number FactorialNum=FactorialNum*count END DO END FUNCTION FactorialNum END