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
The function
fevalexpects either the function name (i.e., a string) or a function handle as input. In your code,fis neither a name, nor a handle. Use either the string'f'or the handle@fwhen calling your base functiontest.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: