2

関数をBase関数に渡すと(それを呼び出しましょうf)、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 に答える