Está en la página 1de 2

program newton

implicit none

real::fx,dfx,xn,FXR(50),error,x,errorstop
integer::n,iter

! Este programa calcula el metodo de Newton-Raphson: programa hecho por Hurias G.


Castillo... de nada! :)
! fx = funcion que depende de x
! dfx= es la derivada de la funcion f(x)
! xn= valor inicial de x
! FXR(50)= VECTOR DONDE SE ALMACENA EL RESULTADO CUYA LONGITUD DE MEMORIA ES 50
! ERROR= VARIABLE DONDE SE ALMACENA ERROR PORCENTUAL CALCULADO
! X= VARIABLE "X" DE LA ECUACION INGRESADA
! ERRORSTOP= TOLERANCIA DE ERROR QUE SE PRETENDE ALCANZAR.
! N = VARIABLE CONTADORA INICIAL
! ITER= NUMERO DE ITERACIONES

write(*,*) " ECUACIONES NO LINEALES"


write(*,*) " Newton-Rapson"
write(*,*) " OPRIMA ENTER PARA CONTINUAR"
PAUSE
write(*,*) " ingrese el valor inicial Xn "
read(*,*)xn
write(*,*) " ingrese el numero de iteraciones NOTA: se recomienda iteraciones
menores a 25"
read(*,*)iter
write(*,*) " ingrese tolerancia de ERROR en % "
read(*,*)errorstop

do n=1,iter,1
x=xn

!________________introduccion manual de la ecuaciones F(x)___________!

fx=X**3-4*X**2-2
dfx=3*X**2-8*X

!_______________________________________________

!FORMULA DE NEWTON RAPHSON!


FXR(n)=x-(fx/dfx)

IF(n==1)THEN
write(*,*) "------------------------------------------------------"
write(*,*) "-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/"
write(*,*) "ITERACION = ",N
WRITE(*,*) "F(Xn) = ",FX
WRITE(*,*) "dF(Xn) = ",DFX
write(*,*) "RESULTADO = ",FXR(N)
write(*,*) "ERROR = PRIMERA ITERACION NO HAY ERROR"
write(*,*) "------------------------------------------------------"
ERROR=100
PAUSE
ELSE
ERROR=ABS( (FXR(n)- FXR(n-1))/ FXR(n))*100
write(*,*) "------------------------------------------------------"
write(*,*) "-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/"
write(*,*) " ITERACION = ",N
WRITE(*,*) " F(Xn) = ",FX
WRITE(*,*) " dF(Xn) = ",DFX
write(*,*) " RESULTADO = ",FXR(N)
write(*,*) " ERROR OBTENIDO % = ",ERROR
write(*,*) "------------------------------------------------------"
PAUSE
END IF

XN=FXR(n)

!CRITERIO DE PARADA BASADO EN EL ERROR CALCULADO

IF(ERROR<=ERRORSTOP)THEN
write(*,*) "**************************************************"
WRITE(*,*)" ALTO RESPUESTA"
write(*,*) "-------------------------------------------------"
WRITE(*,*) " LA ITERACIONES HAN LLEGADO AL % DE ERROR ESTABLECIDO"
write(*,*) " ITERACION = ",N
WRITE(*,*) " F(Xn) = ",FX
WRITE(*,*) " dF(Xn)= ",DFX
write(*,*) " RESULTADO = ",FXR(N)
write(*,*) " ERROR OBTENIDO % = ",ERROR
write(*,*) "**************************************************"
write(*,*) "-------------------------------------------------"
PAUSE
STOP
!CRITERIO DE PARADA BASADO EN EL NUMERO DE ITERACIONES

ELSEIF(N==ITER)THEN
write(*,*) "**************************************************"
WRITE(*,*)" ALTO!!!!!!!!!! "
write(*,*) "-------------------------------------------------------------------"
WRITE(*,*) "LAMENTABLEMENTE EL RESULTADO NO PUEDE SER CALCULADO POR ESTE METODO"
write(*,*) "INTENTE CON OTRO DISTINTO"
write(*,*) "*******************************************************************"
write(*,*) "-------------------------------------------------------------------"
PAUSE
STOP

ENDIF
END DO
End program

También podría gustarte