[英]Creating a matrix from a function handle (MATLAB)
我打算做的很簡單,但我還沒有找到合適的方法來做到這一點。 我有一個取決於兩個變量的函數句柄,例如:
f = @(i,j) i+j
(不過我的比較復雜)
我想做的是創建一個矩陣 M 使得
M(i,j) = f(i,j)
當然,我可以使用嵌套循環,但我試圖避免使用這些循環。 我已經在 Maple 中以一種非常簡單的方式做到了這一點:
f:=(i,j)->i+j;
M:=Matrix(N,f);
(其中 N 是矩陣的維數)但我需要為此使用 MATLAB。 現在我堅持使用嵌套循環,但我真的很感激你的幫助!
使用bsxfun
:
>> [ii jj] = ndgrid(1:4 ,1:5); %// change i and j limits as needed
>> M = bsxfun(f, ii, jj)
M =
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
如果您的函數f
滿足以下條件:
C = fun(A,B)
接受任意大小但相等的數組A
和B
,並返回相同大小的輸出。 輸出數組C
中的每個元素都是僅對A
和B
的相應元素進行運算的結果。fun
還必須支持標量擴展,這樣如果A
或B
是標量,則C
是將標量應用於另一個輸入數組中的每個元素的結果。
你可以處理ndgrid
。 只需將轉置 ( .'
) 添加到第一個 ( i
) 向量:
>> M = bsxfun(f, (1:4).', 1:5)
函數句柄可以接受矩陣作為輸入。 只需傳遞一個大小為N
方陣,其中值對應於i
的行號,以及一個大小為N
方陣,其中值對應於j
的列號。
N = 5;
f = @(i,j) i+j;
M = f(meshgrid(1:N+1), meshgrid(1:N+1)')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.