Calculo de raíces por aproximación
Fortran
Publicado el 29 de Octubre del 2018 por Ariel Oppido (2 códigos)
3.888 visualizaciones desde el 29 de Octubre del 2018
Calcula raíces reales de 2do y 3er orden por aproximación. realizado en Fortran 95
PROGRAM RAICES
IMPLICIT NONE
REAL,ALLOCATABLE,DIMENSION(:)::VECTOR
REAL::A,B,C,D,F1,F2,W,APROX
INTEGER::I,J,X,M,N,CONTADOR
PRINT*,"INGRESE LA ECUACION EN FORMATO (A)X^3+(B)X^2+(C)X+(D)=0 "
PRINT*,"INGRESE EL VALOR DE A"
READ(*,*)A
PRINT*,"INGRESE EL VALOR DE B"
READ(*,*)B
PRINT*,"INGRESE EL VALOR DE C"
READ(*,*)C
PRINT*,"INGRESE EL VALOR DE D"
READ(*,*)D
PRINT*,"LA ECUACION INGRESADA ES",A,"* X^3 + ",B," X^2 + ",C," X + ",D," =0"
PRINT*,"INGRESE EL RANGO DE ESTUDIO DE X.NOTA:EL PROGRAMA EVALUARA SI EXISTEN RAICES EN EL RANGO DE X Y -X INGRESADO"
READ(*,*)N
M=-N
I=0
J=0
CONTADOR=0
DO X=M,N,1
F1=A*X**3+B*X**2+C*X+D
F2=A*(X+1)**3+B*(X+1)**2+C*(X+1)+D
IF (F1==0)THEN
CONTADOR=CONTADOR+1
ELSE
IF ((F1>0.AND.F2<0).OR.(F1<0.AND.F2>0))THEN
CONTADOR=CONTADOR+1
ELSE
END IF
END IF
END DO
PRINT*,"CANTIDAD DE RAICES REALES=",CONTADOR
IF(CONTADOR==0) THEN
PRINT*, " LA ECUACION INGRESADA NO TIENE RAICES REALES"
GO TO 129
ELSE
END IF
ALLOCATE(VECTOR(3))
VECTOR=0
DO X=M,N,1 !ESCANEA ENTRE EL RANGO INGRESADO
F1=A*X**3+B*X**2+C*X+D
F2=A*(X+1)**3+B*(X+1)**2+C*(X+1)+D
IF (F1==0)THEN
PRINT*,"RAIZ ENTERA =",X
ELSE
IF ((F1>0.AND.F2<0).OR.(F1<0.AND.F2>0))THEN
J=J+1
IF(X==0)THEN
VECTOR(J)=X+0.0001
ELSE
VECTOR(J)=X
END IF
ELSE
END IF
END IF
END DO
IF (VECTOR(1)/=0)THEN !ESCANEA EN UN RANGO MAS PEQUEÑO DE X
W=(VECTOR(1))
DO I=1,10000,1
F1=A*W**3+B*W**2+C*W+D
F2=A*(W+0.0001)**3+B*(W+0.0001)**2+C*(W+0.0001)+D
IF (F1>0.AND.F2<0.OR.F1<0.AND.F2>0)THEN
PRINT*," RAIZ 1 APROX=",W
EXIT
ELSE
W=W+0.0001
END IF
END DO
IF (VECTOR(2)/=0)THEN
W=(VECTOR(2))
DO I=1,10000,1
F1=A*W**3+B*W**2+C*W+D
F2=A*(W+0.0001)**3+B*(W+0.0001)**2+C*(W+0.0001)+D
IF (F1>0.AND.F2<0.OR.F1<0.AND.F2>0)THEN
PRINT*," RAIZ 2 APROX=",W
EXIT
ELSE
W=W+0.0001
END IF
END DO
IF (VECTOR(3)/=0)THEN
W=(VECTOR(3))
DO I=1,10000,1
F1=A*W**3+B*W**2+C*W+D
F2=A*(W+0.0001)**3+B*(W+0.0001)**2+C*(W+0.0001)+D
IF (F1>0.AND.F2<0.OR.F1<0.AND.F2>0)THEN
PRINT*," RAIZ 3 APROX=",W
EXIT
ELSE
W=W+0.0001
END IF
END DO
ELSE
END IF
ELSE
END IF
ELSE
END IF
129 END PROGRAM RAICES
Comentarios sobre la versión: fortran 95 (0)
No hay comentarios