MATLAB Answers

Calling different anonymous functions from a for loop

2 views (last 30 days)
Hello,
I have four functions that I need to call various values for and I was wondering if I can make this process faster by creating a four loop to iterate through the various functions. For example, I have four functions q(nu) listed below
q_1 = 1; % Lax-Friedrichs
q_2 = @(x) abs(x); % FIrst-order Upwind
q_3 = @(x) x^2; % Lax-Wendroff
q_4 = @(x) (1/3)+(2/3)*x^2; % Minimun Dispersion
And I have four values of nu,
nu = [1.0; 0.75; 0.50; .25];
is it possible to take these equations and put them in an array to call each function when I need it?
For example, I know this isnt how the code would be written, but I am just trying to show what I mean most clearly.
q_array = [q_1; q_2; q_3; q_4];
for i = 1:4
for j = 1:4
q_array(i(j));
end
end
In this, the idea would be to call each nu value for the first q, then call each nu value for the second q and so on.
I just dont know if Matlab syntax supports this since it q_array would turn each anonymous function into an argument and no longer a function, and I know having each array element of q_array as an anonymous function deosnt work because I tried this and it doesnt work.
q_array = [1; @(x) abs(x); @(x) x^2; @(x) (1/3)+(2/3)*x^2];

  0 Comments

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 25 Nov 2020
q_array = {@(x)ones(size(x)); @(x) abs(x); @(x) x.^2; @(x) (1/3)+(2/3)*x.^2} ;
Now you can
q_array{i}(nu(j))
However I also vectorized the functions so instead of an inner loop,
q_array{i}(nu)

  3 Comments

Braden Kerr
Braden Kerr on 25 Nov 2020
Thank you, this does exactly what I need. Conceptually, why does vectorizing the functions allow for the skipping of the inner loop?
Walter Roberson
Walter Roberson on 25 Nov 2020
That what vectorizing is for, to apply the same calculation to each element individually but in an efficient way

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!