Calling different anonymous functions from a for loop
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Braden Kerr
el 25 de Nov. de 2020
Comentada: Braden Kerr
el 25 de Nov. de 2020
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 comentarios
Respuesta aceptada
Walter Roberson
el 25 de Nov. de 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 comentarios
Walter Roberson
el 25 de Nov. de 2020
That what vectorizing is for, to apply the same calculation to each element individually but in an efficient way
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!