0

関数ハンドルを使用してMATLABでこのようなものを作成しようとしています

f=@(x,y)(x(1)*x(2)+y);

c=[2 3 4;5 9 2];

h=[5 1 2];

f(c,h)

答えは次のとおりです。

15    11    12

しかし、このコードを以下に記述すると、配列ではなく数値が作成されます。

f=@(x)(x(1)*x(2))

f(c)

答え:

10

誰かが私がどこで間違ったのか説明できますか?

4

1 に答える 1

0

あなたがここで何を期待していたのかわかりません。問題の原因は非常に明確です。

a = 1;
b = 2;
c = [3 4];
d = a*b+c;

scalar + vector常に戻る操作です

ans = [a*b+c(1), a*b+c(2)];

ただし、scalar*scalarこれは 2 番目のケースであり、常にスカラーを返します。x (または c) の最初の行列要素に 2 番目の要素を掛けることです。つまりc(1,1)*c(2,1)、matlab は列方向に動作するため要素です。あなたが自分の価値観を見れば、私があなただと思うことをしようとしているのであれば、おそらく答えも間違っていることに気付くでしょう. 代わりにこれを試すことができます。

f=@(x,y)(x(1,:).*x(2,:)+y);
c=[2 3 4;5 9 2];
h=[5 1 2];
f(c,h)

これは、x の最初の行の要素と 2 番目の行の同じ列を乗算し、y を加算します。無名関数は、通常の関数や通常のコードと同じように、多数の入力を受け取り、定義された操作を実行します。これらは、別の m ファイルへの呼び出しを必要としない関数として見ることができます。主な違い (通常の関数は自由度が高いことを除いて) は、構文ではなく、matlab によって処理される方法です。

于 2014-03-03T16:04:23.150 に答える