Passing in a function as an argument
447 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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
0 Commenti
Risposte (4)
Ted Shultz
il 20 Ago 2019
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 Commenti
Abdul Hanan Wali
il 24 Giu 2022
and what if we have to compare them. like if ds == valOut it should return true
Steven Lord
il 24 Giu 2022
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
Note that directly trying to compare f1 and f2 won't work.
f1 == f2 % error
Stuart Kozola
il 18 Apr 2014
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:
0 Commenti
Vedere anche
Categorie
Scopri di più su Dates and Time 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!