我想計算Fortran 90中兩個向量的叉積。例如,用詞來說,(1,2,3)和(4,5)的叉積,6)在笛卡爾座標系中是(-3,6,-3)。我寫了下面的代碼(主程序之後函數定義):計算Fortran 90中兩個向量的叉積90
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整數數組。所以我試着刪除主程序中INTEGER, DIMENSION(3) :: cross
行中的, DIMENSION(3)
。但我收到一條錯誤消息: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
所以這可能更糟糕。
Web上的一些(但不是全部)Fortran函數示例在主程序中的函數聲明後放置了一條
EXTERNAL
語句。所以我試圖在主程序中的聲明塊後放置一行EXTERNAL cross
。我收到一條錯誤消息:crosstest.f90:8.16: EXTERNAL cross 1 Error: EXTERNAL attribute conflicts with DIMENSION attribute at (1)
所以這看起來也不正確。
Web上的一些(但不是全部)Fortran函數示例在函數定義的倒數第二行上放置了一條
RETURN
語句。我試過這個,但是我得到原來的排名不匹配錯誤:crosstest.f90:10.9: r=cross(m,n) 1 Error: Rank mismatch in array reference at (1) (2/1)
所以這不能解決問題。
你能幫我看看我的錯誤嗎?
非常感謝您的時間! – Andrew
+ 1使用'[1,2,3]'代替(更醜陋)'(\ 1,2,3 \)'。 –