matlab - ArrayFun with multiple input -
i have problem while using arrayfun in matlab. have vector of angles , want avoid for loop , apply:
rmatrix1 = arrayfun(... @(x) anglesloop(iblade, iradius, jradius, ifrequency, x, rot), ... angles, 'uniformoutput', false); where iblade = 1, iradius = 1, jradius = 1, ifrequency = 1 , rot = 0.5.
the function looks like:
%% 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 with subfunctions
%% distance coherence function function r=distance(x1,x2,theta) r = sqrt(x1^2+x2^2- 2*x1*x2*cos(theta)); end and
%% 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 the problem when apply anglesloop function in arrayfun obtain cell of 64 different arrays whereas should obtain vector of 64 angles length. rmatrix1 should vector of 64 elements. can give me recommendation?
i think problem you're asking 'uniformoutput', false causes return cell array. need concatenate contents of cell array, can cell2mat. here's simpler example. i've got row vector, , i'm applying function turns each element 2x2 matrix. want end of these small matrices concatenated together.
rowvector = 1:5; myfcn = @(x) [x, -x; -x, x]; separatematricescell = arrayfun(myfcn, rowvector, 'uniformoutput', false); concatenatedmatrices = cell2mat(separatematricescell)
Comments
Post a Comment