2015-11-19 148 views
-1

假設我有2個變量F(i,j)它依賴於一個矩陣的行索引和列索引的函數,我想用這些值來填充矩陣M_ij = F(i,j)MATLAB創建矩陣M = F(I,J)

當然可以通過ij或甚至只有ij進行循環,如果函數F可以是矢量化的,但我想知道這樣做的簡便方法。

+1

我不明白你在問什麼。你的功能是什麼?什麼是輸入?你有什麼嘗試? SO不是代碼寫入服務。 – excaza

+2

提供一個F的例子。如果它需要向量輸入,可以傳入與M相同大小的i和j,其中i的每一行相同,j的每一列相同。 –

+2

答案完全取決於函數'F'。你需要告訴它是什麼 –

回答

5

這是不可能的回答沒有看到你的F但是讓我們假設F被矢量如

F = @(x,y)x+y; 

那麼你可以使用ndgrid

[I,J] = ndgrid(1:m,1:n); 
M = F(I,J) 

在上述情況下,這可能會很好也適用於你的情況,你也許可以直接使用像bsxfun這樣的東西來矢量化函數:

M = bsxfun(@plus, 0:m-1, 1:n); 
+0

您的指數向後調整至F –

+0

@MadPhysicist固定 – Dan

+0

我的意思是'M = F(J,I)'或'[J. I] = meshgrid(...)',否則'M'將被轉置。 –

2

無論您的功能F是否爲矢量化的,您必須對每個值ij進行評估。如果F未被矢量化,則必須手動對索引執行循環。如果F基於MATLAB內建的像sin,log等,它很可能是矢量化的。在這種情況下,可以在ij傳遞是大小爲M相同,並且在一個步驟得到的結果:

[j, i] = meshgrid(1:size(M, 2), 1:size(M, 3)) 
M = F(i, j) 

注意meshgrid取並返回參數X, Y,這是矩陣的逆索引順序row, col