gpt4 book ai didi

function - 在 Fortran 90 中计算两个向量的叉积

转载 作者:行者123 更新时间:2023-12-04 09:07:35 25 4
gpt4 key购买 nike

我想在 Fortran 90 中计算两个向量的叉积。例如,(1, 2, 3) 和 (4, 5, 6) 的叉积结果是 (-3, 6, -3) 在笛卡尔坐标中。我编写了以下代码(主程序后跟函数定义):

PROGRAM crosstest
IMPLICIT NONE

INTEGER, DIMENSION(3) :: m, n
INTEGER, DIMENSION(3) :: cross
INTEGER, DIMENSION(3) :: r

m=(/1, 2, 3/)
n=(/4, 5, 6/)
r=cross(m,n)

END PROGRAM crosstest

FUNCTION cross(a, b)
INTEGER, DIMENSION(3) :: cross
INTEGER, DIMENSION(3), INTENT(IN) :: a, b

cross(1) = a(2) * b(3) - a(3) * b(2)
cross(2) = a(3) * b(1) - a(1) * b(3)
cross(3) = a(1) * b(2) - a(2) * b(1)
END FUNCTION cross

但是,我收到一条错误消息:
crosstest.f90:10.9:

r=cross(m,n)
1
Error: Rank mismatch in array reference at (1) (2/1)

其中第 10 行是 r=cross(m,n) .看来我一定是错误地指定了尺寸。以下是我的一些想法:
  • 也许函数声明cross在主程序中应该只是一个整数变量,而不是一个 1by3 整数数组。所以我尝试删除 , DIMENSION(3)INTEGER, DIMENSION(3) :: cross主程序中的行。但我收到一条错误消息:
    crosstest.f90:10.4:

    r=cross(m,n)
    1
    Error: The reference to function 'cross' at (1) either needs an
    explicit INTERFACE or the rank is incorrect

    所以这可能更糟。
  • 网络上的一些(但不是全部)Fortran 函数示例放置了 EXTERNAL主程序中函数声明后的语句。所以我尝试放置一行 EXTERNAL cross在主程序中的声明 block 之后。我收到一条错误消息:
    crosstest.f90:8.16:

    EXTERNAL cross
    1
    Error: EXTERNAL attribute conflicts with DIMENSION attribute at (1)

    所以这似乎也不正确。
  • 网络上的一些(但不是全部)Fortran 函数示例位于 RETURN在函数定义的倒数第二行声明。我试过这个,但我得到了原来的排名不匹配错误:
    crosstest.f90:10.9:

    r=cross(m,n)
    1
    Error: Rank mismatch in array reference at (1) (2/1)

    所以这并不能解决问题。

  • 你能帮我看看我的错误吗?

    最佳答案

    这是一个迟到的答案,但是由于我偶然发现了这个并且还没有真正解释为什么你的错误发生了,我想我会为其他偶然发现这个问题的人添加一个解释:

    在您的程序中,您定义了一个名为 cross 的数组。 ,它的等级为 1。然后你调用 cross您进一步定义的功能。由于cross函数没有显式接口(interface)(参见 M.S.B. 的答案),编译器此时不知道它。它所知道的是您声明的数组。如果你写 r = cross(m, n) , 编译器认为你想访问数组 cross 位置 (m, n) 的元素.由于此数组的等级为 1,但您提供了两个参数,因此您会收到错误

    rank mismatch in array reference at (1) (2/1)

    这意味着您在编译器期望一个坐标时提供了两个坐标。

    关于function - 在 Fortran 90 中计算两个向量的叉积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6511711/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com