Evaluate function handle for each value in vectorized form

1 view (last 30 days)
I initialize a relatively simple function handle that depends on alpha. For simplicity, I will use alpha = 1.
For beta and gamma, I use n=10 random draws, where beta are scalars and gamma are 3 by 1 vectors.
I want to evaluate the function handle for each of the n random draws. This can be achieved e.g. by a for loop.
How can this be achieved in a more Matlab-like (vectorized) way?
Thanks.
alpha = 1;
n=10;
rng default
beta_all = randn(n, 1);
gamma_all = randn(3, n);
res = cell(n, 1);
for k=1:length(res)
beta = beta_all(k);
gamma = gamma_all(:,k);
y = @(alpha) (alpha * beta * gamma);
res{k} = y(alpha);
end
  4 Comments
Jan
Jan on 1 Jun 2021
Maybe the problem gets more clear, if you post the real code, not a strongly simplificated version. If you need "alpha +- something", you could use:
res{k} = (alpha + x) * beta * gamma;
Salomon Roth
Salomon Roth on 2 Jun 2021
Thanks Jan, you were right. Indeed, it is possible to proceed as you have outlined (alpha + x), i.e., the function handle is not necessary. However, I still wonder if the for loop is needed to evaluate the function for each of the n random draws?

Sign in to comment.

Accepted Answer

Jan
Jan on 2 Jun 2021
alpha = 1;
n=10;
rng default
beta_all = randn(n, 1);
gamma_all = randn(3, n);
res = num2cell(alpha * beta_all.' .* gamma_all, 1).';

More Answers (0)

Community Treasure Hunt

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

Start Hunting!