主题:[讨论]一个简单问题,请各位指教
hanhaikun
[专家分:0] 发布于 2010-05-17 11:46:00
PROGRAM NUMBER
REAL M1,C0,C1,K0
DIMENSION XVEC(2000),YVEC(2000)
OPEN(UNIT=200,FILE='DATA.TXT',STATUS='UNKNOWN')
READ(200,*)
READ(200,*)K0,K1,W
READ(200,*)
READ(200,*)M1,C0,C1
READ(200,*)
READ(200,*)KS,LS,CS
READ(200,*)
DO 300 I=1,1911
READ(200,*) XVEC(I),YVEC(I)
C PRINT*,XVEC(I),YVEC(I)
300 CONTINUE
C PRINT*,K0,K1,W,M1,C0,C1,KS,LS,CS
CLOSE(200)
CALL ENLG3(XVEC,YVEC,1911,a,b)
READ*,a
PRINT*,b
END
SUBROUTINE ENLG3(X,Y,N,T,Z)
DIMENSION X(N),Y(N)
DOUBLE PRECISION X,Y,T,Z,S
Z=0.0
IF (N.LE.0) RETURN
IF (N.EQ.1) THEN
Z=Y(1)
RETURN
END IF
IF (N.EQ.2) THEN
Z=(Y(1)*(T-X(2))-Y(2)*(T-X(1)))/(X(1)-X(2))
RETURN
END IF
IF (T.LE.X(2)) THEN
K=1
M=3
ELSE IF (T.GE.X(N-1)) THEN
K=N-2
M=N
ELSE
K=1
M=N
10 IF (IABS(K-M).NE.1) THEN
L=(K+M)/2
IF (T.LT.X(L)) THEN
M=L
ELSE
K=L
END IF
GOTO 10
END IF
IF (ABS(T-X(K)).LT.ABS(T-X(M))) THEN
K=K-1
ELSE
M=M+1
END IF
END IF
Z=0.0
DO 30 I=K,M
S=1.0
DO 20 J=K,M
IF (J.NE.I) THEN
S=S*(T-X(J))/(X(I)-X(J))
END IF
20 CONTINUE
Z=Z+S*Y(I)
30 CONTINUE
RETURN
END
用的是插值法计算,但是算出来的结果数量级差得太多了,应该是数据传递时出错了吧,请各位大侠指点![em2]
回复列表 (共6个回复)
沙发
asymptotic [专家分:16630] 发布于 2010-05-17 12:22:00
程序加上 implicit none,在修改如下问题:
warning #6717: This name has not been given an explicit type. [K1]
warning #6717: This name has not been given an explicit type. [W]
warning #6717: This name has not been given an explicit type. [KS]
warning #6717: This name has not been given an explicit type. [LS]
warning #6717: This name has not been given an explicit type. [CS]
warning #6717: This name has not been given an explicit type. [I]
warning #6717: This name has not been given an explicit type. [XVEC]
warning #6717: This name has not been given an explicit type. [YVEC]
warning #6717: This name has not been given an explicit type. [A]
warning #6717: This name has not been given an explicit type. [B]
warning #6717: This name has not been given an explicit type. [N]
: warning #6717: This name has not been given an explicit type. [K]
: warning #6717: This name has not been given an explicit type. [M]
: warning #6717: This name has not been given an explicit type. [L]
: warning #6717: This name has not been given an explicit type. [I]
: warning #6717: This name has not been given an explicit type. [J]
error #6633: The type of the actual argument differs from the type of the dummy argument. [XVEC]
error #6633: The type of the actual argument differs from the type of the dummy argument. [YVEC]
error #6633: The type of the actual argument differs from the type of the dummy argument. [A]
error #6633: The type of the actual argument differs from the type of the dummy argument. [B]
板凳
hanhaikun [专家分:0] 发布于 2010-05-17 20:33:00
implicit none
REAL K0,K1,W,M1,C0,C1,KS,LS,CS,XVEC,YVEC,A,B
INTEGER I
DIMENSION XVEC(2000),YVEC(2000)
OPEN(UNIT=200,FILE='DATA.TXT',STATUS='UNKNOWN')
READ(200,*)
READ(200,*)K0,K1,W
READ(200,*)
READ(200,*)M1,C0,C1
READ(200,*)
READ(200,*)KS,LS,CS
READ(200,*)
DO 300 I=1,1911
READ(200,*) XVEC(I),YVEC(I)
C PRINT*,XVEC(I),YVEC(I)
300 CONTINUE
C PRINT*,K0,K1,W,M1,C0,C1,KS,LS,CS
CLOSE(200)
CALL ENLG3(XVEC,YVEC,1911,a,b)
READ*,a
PRINT*,b
END
SUBROUTINE ENLG3(X,Y,N,T,Z)
DIMENSION X(N),Y(N)
DOUBLE PRECISION X,Y,T,Z,S
Z=0.0
IF (N.LE.0) RETURN
IF (N.EQ.1) THEN
Z=Y(1)
RETURN
END IF
IF (N.EQ.2) THEN
Z=(Y(1)*(T-X(2))-Y(2)*(T-X(1)))/(X(1)-X(2))
RETURN
END IF
IF (T.LE.X(2)) THEN
K=1
M=3
ELSE IF (T.GE.X(N-1)) THEN
K=N-2
M=N
ELSE
K=1
M=N
10 IF (IABS(K-M).NE.1) THEN
L=(K+M)/2
IF (T.LT.X(L)) THEN
M=L
ELSE
K=L
END IF
GOTO 10
END IF
IF (ABS(T-X(K)).LT.ABS(T-X(M))) THEN
K=K-1
ELSE
M=M+1
END IF
END IF
Z=0.0
DO 30 I=K,M
S=1.0
DO 20 J=K,M
IF (J.NE.I) THEN
S=S*(T-X(J))/(X(I)-X(J))
END IF
20 CONTINUE
Z=Z+S*Y(I)
30 CONTINUE
RETURN
我改成这样,但输出数的数量级差的太大问题还没有解决,还有您能告诉我一下我这个程序是因为什么才出现这样的问题么?谢谢
3 楼
asymptotic [专家分:16630] 发布于 2010-05-17 20:40:00
加强基本功训练吧,先来些简单的、自己能处理的程序。找一本合适的教科书很重要。
4 楼
hanhaikun [专家分:0] 发布于 2010-05-18 08:50:00
哦
5 楼
hanhaikun [专家分:0] 发布于 2010-05-18 20:56:00
最近时间有点紧,全看不太可能了,麻烦您能跟我说说这个程序出的问题大概在书上什么章节么,万分感谢
6 楼
xiaoruo331 [专家分:100] 发布于 2010-05-19 10:20:00
深圳华信群英科技有限公司,目前主要从事软件外包开发、高级软件人才定向输送等业务,面对日益严峻的大学生就业难和IT企业招聘难,自2006以来,与知名通信软件公司正式签订定向输送人才的合作协议,针对想进入软件行业的人员提供企业实训,实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段,共计900学时。
企业订单委培,内训前签订就业安置协议,100%保证就业。实训结束之后,在华信群英科技及其战略合作伙伴从事通信软件研发工作。欢迎有意向者加QQ:649846168咨询。
我来回复