2

当我将一个函数(我们称之为f)传递给我的 Base 函数时,Base 函数无法识别该f函数,而不使用''引号,代码如下:

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

这是f.m

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

当我从带有引号的命令行运行时:

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

y =

   52.7505

但是当我删除它们时:

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

我的错误在哪里?为什么我不能执行[y] = test(0,1,10,f)

谢谢

4

2 回答 2

3

该函数feval需要函数名(即字符串)或函数句柄作为输入。在您的代码中,f既不是名称,也不是句柄。调用基本函数时使用字符串'f'或句柄。@ftest

如果,如评论中所述,在调用基本函数时,每个赋值都不允许函数句柄,您仍然可以使用函数句柄创建一个带有函数名称的字符串。此功能由以下功能提供func2str

functionName = func2str(@f); 

test(0,1,10,functionname);
于 2012-06-22T09:36:24.567 回答
2

尝试@f作为参数传递而不是'f',并将行更改为

X(i) = f(x(i));

问题是那只是f不是一个函数句柄。feval在这种情况下也不需要使用。

于 2012-06-22T09:40:45.507 回答