![](/img/trans.png)
[英]MATLAB: How Do I Specify Line Properties using plot() w/ Matrix Input? i.e. plot([x1 x2 x3],[y1 y2 y3])
[英]How can I convert f(x,y) to a 2-D matrix (i.e. lookup table)?
給定f = @(x,y) [something with a scalar result]
,我可以計算查找矩陣A
的最佳方法是什么A(x,y) == f(x,y)
對於任何x,y
在特定范圍和領域內?
假設一個名為lookupTable(f,range,domain)
的 function 做了我想要的。 然后lookupTable(@(x,y) x * y, 12, 12)
將產生一個矩陣,其中包含從1*1=1
到12*12=144
的乘法表。
或者假設我想要一個 6x6 矩陣,除了第 3 行第 5 列中的 1 之外全為零。我可以寫lookupTable(@(x,y) x==3&&y==5, 6, 6)
我會結合使用MESHGRID為x
和y
生成二維輸入網格,並使用 ARRAYFUN來評估每個網格對處的標量 function f
。 對於您的第一個示例,您可以這樣做:
[y, x] = meshgrid(1:12, 1:12); %# Or just [y, x] = meshgrid(1:12);
lutable = arrayfun(f, x, y);
請注意,我顛倒了輸入和輸出到 MESHGRID 的順序,以便x
的值在生成的查找表的行中增加。
是這樣的嗎?
function a = lookupTable(func, cols, rows)
a = zeros(cols, rows);
for i = 1:cols
for j=1:rows
a(i,j) = func(i, j);
end
end
end
打電話給
lookupTable(@(x,y) x==3&&y==5, 6, 6)
我做了一個 function 來做到這一點,你可以使用它。
它適用於任意數量的輸入。
function varargout = ndfun( fun, varargin )
%%% [A B]=ndfun(@foo,X,Y)
%%% ---> [A(i,j) B(i,j)]=foo(X(i),Y(j))
% Example:
% ndfun(@times,[1 2 3],[ 6 7 8 9])
% ans =
% 6 7 8 9
% 12 14 16 18
% 18 21 24 27
%%% par Oli 03/2012
args=cell(1,nargin-1);
[args{:}]=ndgrid(varargin{:});
varargout=cell(1,max(1,nargout));
[varargout{:}]=arrayfun(fun,args{:});
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.