具有多个输入的ArrayFun

时间:2014-03-06 12:41:37

标签: matlab

我在Matlab中使用Arrayfun时遇到问题。我有一个角度向量,我想避免for loop,我申请:

rmatrix1 = arrayfun(...
    @(x) anglesLoop(iblade, iradius, jradius, ifrequency, x, rot), ...
    angles, 'uniformoutput', false);

iblade = 1iradius = 1jradius = 1ifrequency = 1rot = 0.5

该功能如下:

%% Angles Loop
function rmatrix = anglesLoop(iblade, iradius, jradius, ifrequency, angles, rot)
global frequency blade
fshifted =(frequency(ifrequency)-angles*rot);
S11 = kaimal(fshifted);
S22 = S11;                 
r = distance(iradius,jradius,angles);
aux = (3/(2*pi)).*coherence(r).*exp(-1i*angles*ifrequency*blade(iblade)/3);                
rmatrix = (sqrt(S11).*sqrt(S22).*aux.*exp(1i*2*pi.*angles.*1/3));
end

使用子功能

%% distance for coherence function
function r=distance(x1,x2,theta)

r = sqrt(x1^2+x2^2- 2*x1*x2*cos(theta));
end

并且

%% Coherence
function gamma=coherence(r)
global frequency v10 L1
if r==0
   gamma=1;
else
   gamma=exp(-12.*sqrt((frequency.*r./v10).^2+(0.12.*r./L1).^2));
end

问题在于,当我在anglesLoop中应用arrayfun函数时,我获得了64个不同数组的单元格,而我应该获得64这个角度长度的向量。 rmatrix1应该是64个元素的向量。有人可以给我一些推荐吗?

1 个答案:

答案 0 :(得分:0)

我认为问题是你要求'UniformOutput', false导致返回为cell数组。然后,您只需要连接单元数组的内容,您可以使用cell2mat进行连接。这是一个更简单的例子。我有一个行向量,我正在应用一个函数,将每个元素转换为2x2矩阵。我想最终将所有这些小矩阵连接在一起。

rowVector = 1:5;
myFcn = @(x) [x, -x; -x, x];
separateMatricesCell = arrayfun(myFcn, rowVector, 'UniformOutput', false);
concatenatedMatrices = cell2mat(separateMatricesCell)