簡體   English   中英

從函數句柄創建矩陣 (MATLAB)

[英]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)接受任意大小但相等的數組AB ,並返回相同大小的輸出。 輸出數組C中的每個元素都是僅對AB的相應元素進行運算的結果。 fun還必須支持標量擴展,這樣如果AB是標量,則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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM