Understanding nested function reference in parfor loop

조회 수: 7 (최근 30일)
Supreeth
Supreeth 2015년 3월 18일
답변: Himanshu 2024년 12월 10일
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
Jason Stockton
Jason Stockton 2017년 10월 19일
Yes, Please. I am having an issue with it now. Thanks.
Jonathan Chin
Jonathan Chin 2017년 10월 19일
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

댓글을 달려면 로그인하십시오.

답변 (1개)

Himanshu
Himanshu 2024년 12월 10일
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!

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by