0

私はMatlabが初めてで、引数の1つとして関数ハンドルを取るカスタム関数をmatlabで記述しようとしています。私はいつもこのエラーを受けています:

Error using subsindex
Function 'subsindex' is not defined for values of class 'function_handle'.

デバッグしようとして、次のテストを実行しました: I run command x = fminbnd(@humps, 0.3, 1). 私は期待通りに進みました - 私は結果を得x = 0.6370ました。そこで、呼び出されるカスタム関数を作成しtrain、関数のすべてのコードをfminbndファイルにコピーしましたtrain.m。私が変更したのは名前だけなので、関数のコードはfminbnd名前trainを除いて同じになりました。

今、同じ引数で両方の関数を実行すると、カスタム関数はエラーをスローしますが、オリジナルfminbndは正しい答えを返します。コードは次のとおりです。

>> x = fminbnd(@humps, 0.3, 1)

x =

    0.6370

>> x = train(@humps, 0.3, 1)
Error using subsindex
Function 'subsindex' is not defined for values of class 'function_handle'.

関数のヘッダーは次のとおりtrainです (他のすべてはからコピーされますfminbnd)。

function [xf,fval,exitflag,output] = train(funfcn,ax,bx,options,varargin)

問題はどこだ?

4

2 に答える 2

1

which trainを実行すると、同じ名前のニューラルネットワークツールボックスに関数があることがわかりました。

/Applications/MATLAB_R2009b.app/toolbox/nnet/nnet/@network/train.m  % network method

実行していると思われるものではなく、nnettrain.mを実行している可能性があります。あなたはtrain.mを含むディレクトリにいますか?私が正しいディレクトリにいることを確認したとき、私はそれを機能させました:

>> which train
/Users/myuserid/train.m

>> x = train(@humps,0.3,1)

x =

    0.6370

代わりに、ファイルに別の名前を付けることができますmyfminbnd.mか?

于 2012-05-25T00:30:06.750 に答える
0

fminbnd関数全体を複製する代わりに、次のことを試してください。

function varargout = myfminbnd(varargin)
    varargout = cell(1,nargout(@fminbnd));
    [varargout{:}] = fminbnd(varargin{:});
end

これは、既存の関数の「エイリアス」として機能します。

>> fminbnd(@(x)x.^3-2*x-5, 0, 2)
ans =
       0.8165

>> myfminbnd(@(x)x.^3-2*x-5, 0, 2)
ans =
       0.8165

(他の出力引数も取得できます)

于 2012-05-25T00:40:03.033 に答える