Evaluate function handle for each value in vectorized form

2 vues (au cours des 30 derniers jours)
Salomon Roth
Salomon Roth le 1 Juin 2021
Réponse apportée : Jan le 2 Juin 2021
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 commentaires
Jan
Jan le 1 Juin 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 le 2 Juin 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?

Connectez-vous pour commenter.

Réponse acceptée

Jan
Jan le 2 Juin 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).';

Plus de réponses (0)

Catégories

En savoir plus sur Gamma Functions dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by