我在Matlab中使用Arrayfun时遇到问题。我有一个角度向量,我想避免for loop
,我申请:
rmatrix1 = arrayfun(...
@(x) anglesLoop(iblade, iradius, jradius, ifrequency, x, rot), ...
angles, 'uniformoutput', false);
iblade = 1
,iradius = 1
,jradius = 1
,ifrequency = 1
和rot = 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个元素的向量。有人可以给我一些推荐吗?
答案 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)