2015-11-05 78 views
2

我從來沒有寫過Fortran,但我正在嘗試將腳本改編爲R,以下幾行讓我感到困惑。因此,這是變量是如何定義的:矩陣上的函數是否應用於整個矩陣或Fortran中的每一行?

real, dimension(n,nd) :: x

這是否意味着xn陣列充滿ndreal值或n X nd矩陣?

然後

amax = maxval(abs(x)) 
x = x/amax 

被應用。變量amax是在x中絕對值的全局最大值,還是最大值爲n的數組,每行一個?這對了解x = x/amax是應用於每行還是整個矩陣很重要。這個功能的目的似乎是某種標準化。

回答

3

標題的問題比身體的問題要普遍得多,所以我稍後會談談。

maxval(array)的結果是標量,是array中的最大值(如果它的大小非零)。

在你的例子中,x是一個等級2的單個數組(通常被認爲是一個矩陣)。因此,maxval(x)的確是你稱之爲矩陣的全局最大值。需要maxval的替代形式來逐行提供最大值:maxval(x,dim=2)

現在,還有別的東西從你的例子來說明:

x = x/amax 

有關於xamax形狀要求。

你不給amax聲明,但有兩種可能:

  • amax具有相同的形狀x;或
  • amax是一個標量。

[注意amax不必是標量,只是因爲它是從maxval參考分配一個標量的結果。但是,你會看到,amax不會被宣佈爲1級,使用尺寸x行數,所以這是另一條線索是maxval正在給全球最大]

這兩種可能性都來自一致性規則進行劃分。用amax標量x的每個元素除以該值;與amax陣列的每個元素xamax中的相應元素分開。

如果你想標準化每個單獨的行x那麼你就不能使用該分割表達式與amax秩1數組。

來到更具普遍性的問題:即使它是一個非此即彼/或問題的答案是「不」。沒有單一的方式。每個功能按照其定義的方式工作。

作爲一般規則,雖然,Fortran語言的內在功能很少關心其中有「行」陣列的具體情況。但有一個有用的想法是,一個函數可以:

  • 對所有元素單獨返回一個相同形狀的數組;
  • 作爲一個整體,返回一個標量。

由許多人將此dim參數調節,導致函數作用於片而不是。

+1

的Fortran甚至有一個用於該上數組元素單獨地操作這些內部函數,它們被稱爲'elemental'名稱。在用戶定義的函數中可以使用關鍵字'elemental'來告訴編譯器它們可以安全地應用於數組。 「最大」不是那些基本功能之一。 –

1

第一行意味着該變量x是兩個維度(n,nd)和不ndn數組的數組。函數maxval返回此數組中的最大值。

請參閱F90_notes.pdf中的第130頁(在PDF中不是打印的數字)(您還可以在同一文檔中找到有關數組的全部章節)。

0

要添加到Baruchel的答案:x/amax將二維數組x的每個元素除以標量amax

相關問題