在Fortran 90中计算两个向量的叉积
我想在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 crosstestFUNCTION 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) 1Error: 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) 1Error: The reference to function 'cross' at (1) either needs anexplicit INTERFACE or the rank is incorrect
所以这可能更糟。
Web上的一些(但不是全部)Fortran函数示例在EXTERNAL
主程序中的函数声明之后放置了一条语句。因此,我尝试EXTERNAL cross
在主程序中的声明块之后放置一行。我收到一条错误消息:
crosstest.f90:8.16: EXTERNAL cross 1Error: EXTERNAL attribute conflicts with DIMENSION attribute at (1)
因此,这似乎也不正确。
Web上的一些(但不是全部)Fortran函数示例在RETURN
函数定义的倒数第二行上放置了一条语句。我尝试了此操作,但出现了原始排名不匹配错误:
crosstest.f90:10.9: r=cross(m,n) 1Error: Rank mismatch in array reference at (1) (2/1)
因此,这不能解决问题。
您能帮我看看我的错误吗?
慕侠2389804
慕桂英546537