Understanding nested function reference in parfor loop

11 visualizzazioni (ultimi 30 giorni)
I came accross this sentence in MATLAB doc:
The body of a parfor-loop cannot make reference to a nested function. However, it can call a nested function by means of a function handle.
Can someone please explain what this means?
  2 Commenti
Jason Stockton
Jason Stockton il 19 Ott 2017
Yes, Please. I am having an issue with it now. Thanks.
Jonathan Chin
Jonathan Chin il 19 Ott 2017
Look at this examples where I am creating a function handle for my nested function.
function out=parforTest(in)
out = zeros(1,4);
tmp=@(x)nestedFunc(in,x);
parfor ii=1:4
out(ii)=feval(tmp,ii)
end
function outv= nestedFunc(in,var)
outv = in+var;
end
end

Accedi per commentare.

Risposte (1)

Himanshu
Himanshu il 10 Dic 2024
Hey,
The sentence mentioned by you from the documentaiton points out a limitation of the 'parfor' loop, which is that it cannot directly reference nested functions within its loop body. Instead, you can call a nested function using a function handle, which is like a reference or pointer to a function. For example:
function mainFunction()
% Nested function
function result = nestedFunction(x)
result = x^2;
end
% Create a function handle
nestedHandle = @nestedFunction;
% Use parfor with the function handle
parfor i = 1:5
results(i) = nestedHandle(i);
end
disp(results);
end
In the code above, inside the parfor loop, you call the nested function using the handle nestedHandle(i). This approach bypasses the restriction, allowing the nested function to be used in parallel computations.
In simple terms, while parfor can't directly use nested functions, creating a function handle allows you to call them indirectly, enabling parallel execution.
Hope this help!

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by