我是Fortran的新手。 现在,我正在尝试创建一个应该打印矩阵系数的简单函数。 最初我想用矩阵做一些更有趣的事情(这就是我使用FUNCTION关键字的原因),但我不得不愚蠢,因为“Hello world”和“乘以2”是我设法的唯一程序编译到目前为止。

这是我的代码:

PROGRAM my_program
    IMPLICIT NONE
    INTEGER, EXTERNAL :: print_coefs
END PROGRAM my_program

FUNCTION print_coefs(arr)
    IMPLICIT NONE
    REAL, INTENT(IN), DIMENSION(:) :: arr
    INTEGER :: print_coefs
    INTEGER :: i,j
    do i = 1, size(arr, 1)
        do j = 1, size(arr, 2)
            print *, arr(i,j)
        enddo
    enddo
    print_coefs = 0
END FUNCTION

所以我在编译时遇到这个错误:

错误:(1)中'size'的'dim'参数不是有效的维度索引。

为什么? size不是获得矩阵size的正确方法吗?

谢谢你的帮助。

===============>>#1 票数:2 已采纳

数组arr被声明为等级1.因此,假设编译器指向给出size(arr,2)的行,这不是有效的代码:它要求第二个的大小(不存在) ) 尺寸。

从函数print_coeffs的其余部分看, arr被声明为rank-2: real, intent(in), dimension(:,:) :: arr

然而,应该注意,像这样的函数( arr假定形状的数组 )将需要调用者的显式接口。 也就是说,如果你想最终从主程序调用这个函数,那么integer, external :: print_coeffs就不够了。 有关更多详细信息,请参阅其他问题和答案 - 例如此处 ---

  ask by John Smith Optional translate from so

未解决问题?本站智能推荐:

2回复

将变量名用于局部数组的参数派生范围

使用fortran,我在以下情况下运行:我有多个局部变量,它们的大小是从输入参数中以某种冗长的方式得出的,例如 当我不断重复size表达式时,这似乎过于冗长。 另外,当需要更改时(例如,事实证明我需要y4并将size(x,1)/3更改为size(x,1)/4 ,对于看起来不太像的实际代
1回复

在fortran中有效构造结构化矩阵

离开Fortran已经有几年了,现在我必须拿起它并重新开始使用它。 我想用f(x_i,y_j)的形式构造带有entry(i,j)的矩阵,其中f是两个变量的函数,例如f(x,y)=cos(xy) 。 在Matlab或Python(Numpy)中,有有效的方法来处理此类特定问题。 我想知道
3回复

fortran 90中矩阵的最大大小避免了分段错误

1)fortran 90代码中NxN矩阵中N的最大值是多少,这样就不会出现分段错误? 例如,当我使用大小为2 ^ 8 x 2 ^ 8的矩阵并将它们用于乘法(使用内在的'matmul'函数)时,我没有任何问题。 但是,当我使用2 ^ 12 x 2 ^ 12矩阵时,我没有发现任何编译错误
2回复

数组内的Fortran数组

我想获得一个数组,但此数组在其内部包含更多数组。 我将在一个示例中进行描述! 我想创建4个矩阵。 主矩阵是E。 如何在Fortran中获得此数组(E)? 我正在研究f90和f95。 我创建一个新的数组,它是array(E)。 重要的是获得E并且可以在数组之后进行改进,因为我不
2回复

在Fortran 90中使用2d数组与派生类型数组

假设您需要一个数组列表,每个数组都具有相同的大小。 使用2D数组在性能方面是否更好: 或派生类型数组: 当然,对于不同大小的阵列,我们没有选择。 但是如何在两种情况下管理内存? 还有,其中一个很好的代码实践?
5回复

Fortran算法帮助-错误的结果

我目前正在使用fortran矩阵计算器。 我有程序正在编译,但似乎无法正常工作,除非我没有收到正确的结果。 当我选择加法功能时,我的程序接受两个矩阵并将它们加在一起。 我的结果似乎是错误的。 例如,如果我选择大小均为2x2且列表为1的两个矩阵,则每个条目都将收到3、3、3的加法结果。
1回复

如果可用数组等级/大小,是否有任何理由使用假定大小的数组?

如果我知道传递给函数或子例程的数组的大小和/或大小,是否有任何理由使用假定形状或假定大小的数组? 例如,如果我可以替换 与 有什么理由(在Fortran 90或更高版本中)不这样做?
1回复

如果十进制更长,则Fortran-逆矩阵结果不相同

我的真实数据是第一个输入的,但是结果的倒数是如此之大。 与第一和第二输入进行比较时,它们是相同的数据。 只有十进制大小差异。 为什么会有不同的结果? 因为它们是相同的数据。 他们怎么会有不同的结果? 您可以看到结果和输入。 真奇怪
4回复

Fortran调试print语句会影响程序流

我有一个程序迭代一个数组,确定性地创建新的行向量,然后将其附加到数组。 在每次迭代时,采用向量的范数,以确保它不是零向量。 如果为零,则程序停止。 有一个错误,第三次迭代会导致向量变为零。 在查找此错误时,我使用调试打印语句,print *,“here”,this_var等填
2回复

翻转矩阵fortran

我想将矩阵上下颠倒。 使得T(1,1)= C(2,1) 我已经编写了这个程序,我发现了一个应该在线执行的代码,该代码为C=T(2:1:-1, :)但是当尝试获取值C(1,1)时应该为3我得到1.3533635457363350E-306。 您如何翻转矩阵以使上升变为下降?