当我将一个函数(我们称它为f
)传递给我的基本函数时,基本函数不能识别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)
?
谢谢
发布于 2012-06-22 17:36:25
函数feval
需要函数名(即字符串)或函数句柄作为输入。在您的代码中,f
既不是一个名称,也不是一个句柄。在调用基本函数test
时,请使用字符串'f'
或句柄@f
。
如果如注释中所述,在基函数调用中不允许每次赋值都使用函数句柄,则仍然可以使用函数句柄来创建具有函数名称的字符串。此功能由函数func2str
提供
functionName = func2str(@f);
test(0,1,10,functionname);
发布于 2012-06-22 17:40:46
尝试将@f
而不是'f'
作为参数传递,并将该行更改为
X(i) = f(x(i));
问题是f
并不是一个函数句柄。在这种情况下,也不需要使用feval
。
https://stackoverflow.com/questions/11153565
复制相似问题