我想创建一个在矩阵中返回最大绝对值的函数,但编译器会返回此错误
mv = maxVal(a, n)
1
Error: Incompatible ranks 0 and 1 in assignment at (1)
这是我的Fortran代码
real*8, dimension(:, :), allocatable :: a
integer :: n
real*8 :: mv
read*, n
allocate(a(n, n))
read*, a
mv = maxVal(a, n)
end
real*8 function maxVal(a, n)
integer :: n
integer :: i, j, max
integer, dimension(2) :: index
real*8, dimension(n, n) :: a
max = abs(a(1, 1))
index = (/1, 1/)
do i = 1, size(a)
do j = 1, size(a, 1)
if (abs(a(i, j)) .gt. max) then
max = abs(a(i, j))
index = (/i, j/)
endif
end do
end do
maxVal = a(index(1), index(2))
return
end
答案 0 :(得分:3)
MAXVAL是Fortran内部函数。由于您的主程序未将MaxVal声明为EXTERNAL,也没有明确的接口,因此编译器假定您正在使用内在函数。 (如果你声明它是EXTERNAL你还需要声明它是REAL * 8.而且我会迂腐并且建议你不要使用REAL * 8这样的扩展,当语言有标准方法来做这些事情。)
MAXVAL,当提供DIM参数(第二个参数)时,如果第一个参数的排名大于1,则总是返回一个数组 - 这就是编译器抱怨的原因,因为数组无法分配给标量。