1

スクリプト内に無名関数を作成しましたが、MATLAB で fminsearch を実行できませんか? これが私がこれまでに持っているものです:

V=x(1);
f=x(2);
q=@(x) (pi.*D.*L)./(1000.*V.*f);
fminsearch(@q,x);

変数 D と L が定義されていますが、MATLAB で次のエラーが表示されます。

エラー: ファイル: Testing.m 行: 51 列: 17 "q" は、以前は変数として使用されていたため、ここでの関数またはコマンドの名前としての使用と矛盾しています。詳細は、MATLAB ドキュメンテーションの「MATLAB がコマンド構文を認識する方法」を参照してください。

このコマンドの前に q が指定されていません。私は何を間違っていますか?

私の問題を解決できるもう 1 つの方法は、スクリプトで関数ファイルを作成することですが、その方法は?

4

2 に答える 2

1

@function既存の関数の関数ハンドルを作成します。

q = @(x) whatever...という関数ハンドルを作成しますq

ただし、関数ハンドルに対して関数ハンドルを作成することはできません。関数に対してのみ作成できます。

これを参照してください:

>> fones = @ones

fones = 

    @ones

>> ffones = @fones
Error: "fones" was previously used as a
variable,
 conflicting with its use here as the name
 of a function or command.
 See MATLAB Programming, "How MATLAB
 Recognizes Function Calls That Use
 Command Syntax" for details.

Matlab では、関数ハンドルは関数への一種のポインターであり、関数とは異なります (関数識別子を渡して他の変数として格納できる他の言語とは異なります)。

関数と関数ハンドルを呼び出すと、同じ動作になることに注意することが重要です。括弧を付けずに識別子を使用する場合を除きます。

>> ones

ans =

     1

>> fones

fones = 

    @ones

>> ones(2)

ans =

     1     1
     1     1

>> fones(2)

ans =

     1     1
     1     1
于 2013-09-23T06:26:46.177 に答える