Passing in a function as an argument

Dear all,
I would like to write a Function M-file f.m, which is to contain a primary function called f as well as two subfunctions called subFunc1 and subFunc2, respectively.
Within the primary function f, I need to call subFunc1; what is the proper syntax for passing subFunc2 as an input parameter to such a call of subFunc1?
Any feedback would be very much appreciated.
Regards, Kaloyan

답변 (4개)

Ted Shultz
Ted Shultz 2019년 8월 20일

8 개 추천

you use the "@" character to pass a function, not the output of a funcitn. This looks like this:
function main
clc
testCode(@sum, [1 2 3]) % calls "testCode" with builtin matlab function "sum"
testCode(@doubleSum, [1 2 3]) % calls "testCode" with custom function defined below
end
function valOut = testCode(funcIn, numIn)
% funcIn is a function passed to this function! you call as you would the passed function:
valOut = funcIn(numIn);
end
function ds = doubleSum(numIn)
ds = 2*sum(numIn);
end

댓글 수: 2

and what if we have to compare them. like if ds == valOut it should return true
Comparing functions or function handles is unlikely to be what you want.
Now comparing the results of evaluating a function or function handle, on the other hand, is often useful.
f1 = @sin;
f2 = @(x) cos(pi/2-x);
x = [0 pi 2*pi];
norm(f1(x)-f2(x)) < 1e-6 % Don't use == for floating point comparison
ans = logical
1
Note that directly trying to compare f1 and f2 won't work.
f1 == f2 % error
Operator '==' is not supported for operands of type 'function_handle'.

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

Stuart Kozola
Stuart Kozola 2014년 4월 18일

3 개 추천

To pass in a function to another function, use function handles (@).
sf2 = @(inputs) subFcn2(inputs)
then call it in subFcn1 as
out1 = subFcn1(sf2)
or alternatively
out2 = subFcn1(@subFcn)
Note that you add @ to the function name to declare it as a function (vs. a variable) to be passed into the function.
Now if you have constant parameters that need to be passed into subFcn1, you can define the sf2 as
sf2 = @(input) subFcn(input,param1,param2)
and to call sf2 it only takes in input
out2 = sf2(input)
Note that the constant parameters are already included in the definition of sf2 which only takes in one input.
If you need more explaination or examples, look at the doc:
Azzi Abdelmalek
Azzi Abdelmalek 2014년 4월 18일

0 개 추천

a=@subFunc2
Then call your function with a argument

댓글 수: 1

Kaloyan Marinov
Kaloyan Marinov 2014년 4월 18일
편집: Kaloyan Marinov 2014년 4월 18일
Do you mean I should pass subFunc2 as an input parameter to a call of subFunc1 it as follows:
a = @subFunc2;
subFunc1(a);
?

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

Omkar Dumne
Omkar Dumne 2021년 4월 9일

0 개 추천

How does matlab help help in passing function arguments

카테고리

도움말 센터File Exchange에서 Programming에 대해 자세히 알아보기

질문:

2014년 4월 18일

댓글:

2022년 6월 24일

Community Treasure Hunt

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

Start Hunting!

Translated by