-2

ループを実行してから追加することにより、関数ハンドルを配列に格納しようとしています。

for i = 1:n^2
    x1 = x_coord(elements(i,1));
    x2 = x_coord(elements(i,2));
    x3 = x_coord(elements(i,3));
    x4 = x_coord(elements(i,4));
    y1 = y_coord(elements(i,1));
    y2 = y_coord(elements(i,2));
    y3 = y_coord(elements(i,3));
    y4 = y_coord(elements(i,4));

    SF(elements(i,1)) = @(x,y)((x-x3)*(y-y3)/((x1-x3)*(y1-y3)) + SF(elements(i,1)(x,y))
end

ここでは、関数ハンドルを配列に保存SFしてから、ループ内に追加しています。しかし、私はこのエラーが発生しています:

Error: ()-indexing must appear last in an index expression.

助けてください。

4

1 に答える 1

1

これほど複雑なことに挑戦するときは、それを分解して小さなピースに挑戦してみてください。たとえば、コマンド ラインでこれを実行すると、次のようになります。

F(1) = @(x,y)(x+y);
F(2) = @(x,y)(x+y+2);

次のエラー メッセージが表示されます。関数ハンドルの非スカラー配列は許可されていません。代わりにセル配列を使用してください。

おっとっと。代わりにこれが必要だと思います:

F{1} = @(x,y)(x+y);
F{2} = @(x,y)(x+y+2);

そして今、F{1}(1,2)案の定、期待どおりに動作します。

SF(elements(i,1)) をそれ自体で再帰的に定義しようとしているため、プログラムの全体的なロジックは機能しませんが、これは意味がありません。上に示したように、いくつかの小さなピースを試して、他の関数ハンドルに関して定義された関数ハンドルを試してみてください。意外な発見があるかもしれません。

于 2013-06-06T14:34:35.753 に答える