Fortran program birge vieta
Fortran program birge vieta
SUBROUTINE birge_vieta(a,m,x0,n,tol,raiz,clave)
! -------------------------------------------------------------------
IMPLICIT NONE
INTEGER, INTENT(IN):: m ! Grado del polinomio
REAL, DIMENSION(0:m), INTENT(IN) :: a ! Vector de m+1 elementos
! de los coef. del polinomio
REAL, INTENT(IN) :: x0 ! Aproximación inicial a la raíz
REAL, INTENT(IN) :: tol ! Tolerancia para el error absolut
INTEGER, INTENT(INOUT) :: n ! Número máximo de iteraciones/
! Iteraciones realizadas
REAL, INTENT(OUT):: raiz ! Aproximación a la raiz
INTEGER, INTENT(OUT) :: clave ! Clave de éxito:
! 0 : éxito
! >0 : iteraciones excedidas
! -------------------------------------------------------------------
INTEGER :: i, j
REAL :: xx0,b,c
! -------------------------------------------------------------------
xx0 = x0
DO i=1,n
! -------------------------
! Esquema de Horner
! -------------------------
b = a(m)
c = a(m)
DO j=m-1,1,-1
b = b*xx0+a(j)
c = c*xx0+b
ENDDO
b = b*xx0+a(0)
! -------------------------
! Método de Newton
! -------------------------
raiz = xx0 - b/c
IF (ABS((raiz-xx0)/raiz) < tol) THEN
clave = 0
n = i
RETURN
END IF
xx0 = raiz
END DO
clave = 1
RETURN
END SUBROUTINE birge_vieta