
求助大神!!!fortran 牛顿迭代法亦可用于求方程的复根,试用复数算法编程计算实根和复根
programNewton_iterationIMPLICITCOMPLEX(C,Z)DIMENSIONZO(50),LG(50)WRITE(*,*)'A,B,H,EPS...
program Newton_iteration
IMPLICIT COMPLEX (C,Z)
DIMENSION ZO(50),LG(50)
WRITE(*,*)'A,B,H,EPS'
READ(*,*) A,B,H,EPS
CALL NEWTON(A,B,H,EPS,FX,FD,NR,ZO,LG)
DO 20 I=I,NR
20 WRITE(*,30)I,ZO(I),LG(I)
30 FORMAT(1X,I3,2F15.7,8X,I3)
END
SUBROUTINE CFUN(Z,FX,FD)
IMPLICIT COMPLEX (C,Z)
FX=Z*Z*Z-Z-1
FD=3*Z*Z-1
RETURN
END
SUBROUTINE NEWTON(A,B,H,EPS,FX,FD,NR,ZO,LG)
IMPLICIT COMPLEX (A-H,O-Z)
DIMENSION ZO(50),LG(50)
NR=0
Z=A-H
CALL CFUN(Z,YB,FD)
IF (CABS(YB).LE.1.0D-14) GO TO 20
10 Z=Z+H
IF (CABS(Z).GT.CABS(B+H)) RETURN
YA=YB
CALL CFUN(Z,YB,FD)
IF (CABS(YB).LE.1.0D-14) GO TO 20
IF(CABS(YB*YA).GT.0.0) GO TO 10
ZA=Z-H
ZB=Z
IT=0
Z=0.5*(ZA+ZB)
15 Z0=Z
CALL CFUN(Z,FX,FD)
Z=Z-FZ/FD
IT=IT+1
IF(IT.LE.30.AND.CABS(Z-ZO).GT.CABS(Z)*EPS) GO TO 15
20 NR=NR+1
ZO(NR)=Z
IF(ZO(NR).EQ.ZO(NR-1).AND.NR.NE.1) NR=NR-1
GO TO 10
END
Compiling Fortran...
E:\aa\aa\aa.f90
E:\aa\aa\aa.f90(46) : Error: This binary operation is invalid for this data type.
IF(IT.LE.30.AND.CABS(Z-ZO).GT.CABS(Z)*EPS) GO TO 15
---------------------------------------------^
E:\aa\aa\aa.f90(46) : Error: A scalar-valued expression is required in this context.
IF(IT.LE.30.AND.CABS(Z-ZO).GT.CABS(Z)*EPS) GO TO 15
-------------------^
Error executing df.exe.
aa.exe - 2 error(s), 0 warning(s)
应该怎么改,如果看不下去,发份子程序也行 展开
IMPLICIT COMPLEX (C,Z)
DIMENSION ZO(50),LG(50)
WRITE(*,*)'A,B,H,EPS'
READ(*,*) A,B,H,EPS
CALL NEWTON(A,B,H,EPS,FX,FD,NR,ZO,LG)
DO 20 I=I,NR
20 WRITE(*,30)I,ZO(I),LG(I)
30 FORMAT(1X,I3,2F15.7,8X,I3)
END
SUBROUTINE CFUN(Z,FX,FD)
IMPLICIT COMPLEX (C,Z)
FX=Z*Z*Z-Z-1
FD=3*Z*Z-1
RETURN
END
SUBROUTINE NEWTON(A,B,H,EPS,FX,FD,NR,ZO,LG)
IMPLICIT COMPLEX (A-H,O-Z)
DIMENSION ZO(50),LG(50)
NR=0
Z=A-H
CALL CFUN(Z,YB,FD)
IF (CABS(YB).LE.1.0D-14) GO TO 20
10 Z=Z+H
IF (CABS(Z).GT.CABS(B+H)) RETURN
YA=YB
CALL CFUN(Z,YB,FD)
IF (CABS(YB).LE.1.0D-14) GO TO 20
IF(CABS(YB*YA).GT.0.0) GO TO 10
ZA=Z-H
ZB=Z
IT=0
Z=0.5*(ZA+ZB)
15 Z0=Z
CALL CFUN(Z,FX,FD)
Z=Z-FZ/FD
IT=IT+1
IF(IT.LE.30.AND.CABS(Z-ZO).GT.CABS(Z)*EPS) GO TO 15
20 NR=NR+1
ZO(NR)=Z
IF(ZO(NR).EQ.ZO(NR-1).AND.NR.NE.1) NR=NR-1
GO TO 10
END
Compiling Fortran...
E:\aa\aa\aa.f90
E:\aa\aa\aa.f90(46) : Error: This binary operation is invalid for this data type.
IF(IT.LE.30.AND.CABS(Z-ZO).GT.CABS(Z)*EPS) GO TO 15
---------------------------------------------^
E:\aa\aa\aa.f90(46) : Error: A scalar-valued expression is required in this context.
IF(IT.LE.30.AND.CABS(Z-ZO).GT.CABS(Z)*EPS) GO TO 15
-------------------^
Error executing df.exe.
aa.exe - 2 error(s), 0 warning(s)
应该怎么改,如果看不下去,发份子程序也行 展开
1个回答
展开全部
错误提示是CABS( ),可能是数组也可能是函数。
如果是数组需要先定义,需要赋值。
如果是函数,也需要用external声明。
如果这是改动后的程序,建议去改动前的源程序搜一下CABS。
如果是数组需要先定义,需要赋值。
如果是函数,也需要用external声明。
如果这是改动后的程序,建议去改动前的源程序搜一下CABS。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |