Search code examples
functionmatlabfunction-handle

Passing a function as an argument into another function won't compile without using quotes ''?


When I pass a function (let's call it f) into my Base function , the Base function doesn't recognize the f function , without using '' quotes , here's the code :

function y = test(a, b, n ,f)

if ( rem(n,2) ~= 0 )
   error ( 'n is not even' )
end

% create a vector of n+1 linearly spaced numbers from a to b
x = linspace ( a, b, n+1 );

for i = 1:n+1
    % store each result at index "i" in X vector
    X(i) = feval ( f, x(i) );
end
y=sum(X);
end

And this is f.m :

function [y] = f (x)
y = 6-6*x^5;

When I run from command line with quotes :

>> [y] = test(0,1,10,'f')

y =

   52.7505

but when I remove them :

>> [y] = test(0,1,10,f)
Error using f (line 2)
Not enough input arguments.

Where is my mistake ? why can't I execute [y] = test(0,1,10,f) ?

Thanks


Solution

  • The function feval expects either the function name (i.e., a string) or a function handle as input. In your code, f is neither a name, nor a handle. Use either the string 'f' or the handle @f when calling your base function test.

    If, as posted in the comments, function handles are not allowed per assignment in the call to the base function, you can still use the function handle to create a string with the name of the function. This functionality is provided by the function func2str:

    functionName = func2str(@f); 
    
    test(0,1,10,functionname);