如何編寫接受任意大小數組的函數(只要它們的rank是1)? 這正是固有功能shape
可以做的,所以我不認爲我的要求太苛刻。 實際上,功能shape
做的更多。它可以(顯然)接受任意形狀的數組,即每個維度上的任意級別和任意長度。接受任意大小的rank-1數組的Fortran函數
這個問題旨在編寫一個函數sub2ind
,它對應於同名的MATLAB函數。
如何編寫接受任意大小數組的函數(只要它們的rank是1)? 這正是固有功能shape
可以做的,所以我不認爲我的要求太苛刻。 實際上,功能shape
做的更多。它可以(顯然)接受任意形狀的數組,即每個維度上的任意級別和任意長度。接受任意大小的rank-1數組的Fortran函數
這個問題旨在編寫一個函數sub2ind
,它對應於同名的MATLAB函數。
我不知道我是否正確理解您的問題,但自Fortran函數發明以來,在Fortran中可以接受任何數組大小的函數。 (儘管有些技巧有時涉及FORTRAN 77之前)。任何教科書或教程都會對待這個問題。
現代風格假定形狀:
function f(a)
real :: a(:)
do i = 1, size(a)
...
end functions
明確的尺寸:
function f(n, a)
real :: a(n)
do i = 1, n
...
end functions
假定大小:
function f(n, a)
real :: a(*)
do i = 1, n
...
end functions
對於假定的形狀,顯式接口(最好使用模塊)是必要的。
我不想明確地給出尺寸,所以我需要第一種和第三種方法,但我不知道有什麼區別;我不知道我應該使用模塊的方式..(我是新來的fortran) –
然後你必須閱讀教科書。並搜索stackoverflow。有關於此的很好的問題和答案。對於需要模塊的高級數組工作, –
http://stackoverflow.com/questions/8412834/correct-use-of-modules-subroutines-and-functions-in-fortran http://stackoverflow.com/questions/1240510/how-do-you-use- fortran-90-module-data http://stackoverflow.com/questions/11953087/proper-use-of-modules-in-fortran –
作爲這個問題的一部分,你可能還在乎函數結果是一些任意(但相關)大小的數組? – francescalus
嗯,我想知道最普遍的答案,但第一步將回答在這種情況下函數提供標量作爲輸出。 –