Fortran编码建议
我必须开发一个线性插值程序,但不断得到这些错误。 以下是源代码:Fortran编码建议,fortran,fortran90,gfortran,Fortran,Fortran90,Gfortran,我必须开发一个线性插值程序,但不断得到这些错误。 以下是源代码: !Interpolation program for exercise 1 of portfolio PROGRAM interpolation IMPLICIT NONE !Specify table 1 for test of function linter REAL, DIMENSION (5):: x,f !Specify results for table 1 at intervals of 1 REAL, DIMENS
!Interpolation program for exercise 1 of portfolio
PROGRAM interpolation
IMPLICIT NONE
!Specify table 1 for test of function linter
REAL, DIMENSION (5):: x,f
!Specify results for table 1 at intervals of 1
REAL, DIMENSION (10):: xd, fd
!Specify table 2 to gain linter results
REAL, DIMENSION (9):: xx,ff
!Specify results for table 2 of at intervals of 0.25
REAL, DIMENSION (36):: xxd, ffd
INTEGER :: i, j
!Write values for table dimensions
!Enter x values for Table 1
x(1)=-4.0
x(2)=-2.0
x(3)=0.0
x(4)=2.0
x(5)=4.0
f(1)=28.0
f(2)=11.0
f(3)=2.0
f(4)=1.0
f(5)=8.0
xd(1)=-4.0
xd(2)=-3.0
xd(3)=-1.0
xd(4)=0.0
xd(5)=1.0
xd(6)=2.0
xd(7)=3.0
xd(9)=4.0
!Print Table 1 Array
PRINT *,"Entered Table Values are", x,f
PRINT *,"Interpolation Results for Table 1", xd, fd
END PROGRAM
SUBROUTINE interpol(x,f, xd,fd)
DO i=1, 5
DO j=1, 5
IF (x(j) < xd(i) .AND. xd(i) <= x(j+1)) THEN
fd=linterp (x(j),x(j+1),f(j))
END IF
END DO
END DO
END SUBROUTINE interpol
!Linear Interpolation function
FUNCTION linterp(x(i),x(i+1),f(i),f(i+1),x)
linterp=f(i)+((x-x(i))/(x(i+1)-x(i)))*(f(i+1)-f(i))
END FUNCTION
谁能给我指出正确的方向吗?这正是编译器所抱怨的:你缺少一个右括号 或者删除多余的左
(
):
或者添加另一个)
请注意,我在中间部分删除了另一个放在<>代码> <代码>。
除此之外,你的函数声明被破坏了!声明中不能有
x(i)
尝试:
或者,您可以提供整个数组(包括其长度N
)和当前索引:
real FUNCTION linterp(x,f,N,i,xx)
implicit none
integer, intent(in) :: N
real, intent(in) :: x(N), f(N), xx
integer, intent(in) :: i
linterp = f(i) + (xx-x(i))/( x(i+1)-x(i) )*( f(i+1)-f(i) )
END FUNCTION
除了亚历山大所说的一切。您还需要确保函数声明中的输入量与调用函数声明时的输入量相同:
fd=linterp (x(j),x(j+1),f(j))
比函数声明中的输入少两个:
FUNCTION linterp(x(i),x(i+1),f(i),f(i+1),x)
另外,不要忘记向fd添加索引,i或j:
fd(i)=linterp (x(j),x(j+1),f(j))
否则,您每次都会用linterp结果替换整个数组。您有一个(Alexander Vogt的回答也是如此):您可能会对
linterp
返回一个整数值感到惊讶。太好了,我知道哪里出了问题,我编辑了函数以适应此情况,谢谢!
real FUNCTION linterp(x,f,N,i,xx)
implicit none
integer, intent(in) :: N
real, intent(in) :: x(N), f(N), xx
integer, intent(in) :: i
linterp = f(i) + (xx-x(i))/( x(i+1)-x(i) )*( f(i+1)-f(i) )
END FUNCTION
fd=linterp (x(j),x(j+1),f(j))
FUNCTION linterp(x(i),x(i+1),f(i),f(i+1),x)
fd(i)=linterp (x(j),x(j+1),f(j))