How to avoid using for loops when declaring functions in a cell array

In my source codes:
clear all
fout=cell(1,10);
B=zeros(10,20);
for ii=1:1:10
fout{ii}=@(x) 2*pi*x*(1:1:20)+ii;
end
for ii=1:1:10
B(ii,:)=fout{ii}(2);
end
display(B);
How can I use the matlab vectorization to declare functions in a cell array as well as to provide function outputs in one go rather than using two for loops? M

Réponses (1)

Adam Danz
Adam Danz le 11 Sep 2020
Modifié(e) : Adam Danz le 11 Sep 2020
You only need 1 anonymous function if you include ii as a second input. ii must be a column vector and x must be a row vector.
fout = @(x,ii) 2*pi*x*(1:1:20)+ii;
B = fout(2,(1:10)');
Alternatively, the 2nd loop in your question can be replaced by
y = cell2mat(arrayfun(@(i){fout{i}(2)},1:10)');
however, your loop is more efficient, faster, and easier to read.

4 commentaires

Thank you for your reply. I simplfied my original questions a lot. I wondered how to use arrayfun to replace the second for loop.
I've updated my answer to address your question above.
Glad I could help.

Cette question est clôturée.

Question posée :

le 10 Sep 2020

Clôturé :

le 20 Août 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by