0

Matlab での複素数値乗算の計算が混乱していることに気付きました。簡単な例の 1 つを以下に示します。

syms x1 x2 x3 x4
s=[x1 x2]*[x3 x4]'

s の戻り値は次のようになります。

s=x1*conj(x3) + x2*conj(x4)

私の意見では、s は x1*x3+x2*x4 に等しくなければなりません。それで、ここで何が問題なのですか?

では、2 つの複素ベクトルの乗算を取得するにはどうすればよいでしょうか。

更新: .' を使用することで解決されることがわかりました。それよりも 。お気に入り:

s=[x1 x2]*[x3 x4]
4

3 に答える 3

4

演算子は、 Matlabでは複素共役転置'とも呼ばれます。これは基本的に、and と機能を適用することを意味します。この演算子は、数学ではエルミート演算子と呼ばれることに注意してください。ctransposeconjtranspose

実際に必要なのは、transposeショートカットである演算子です.'

期待される出力を得るために、2 番目のベクトルを共役せずに乗算するだけの場合は、次のようにする必要があります。

>> syms x1 x2 x3 x4
>> s = [x1 x2]*[x3 x4].'

したがって、出力は次のようになります。

x1*x3 + x2*x4

詳細についてはhelp .、 をチェックして、演算子のリストを確認しhelp transposehelp ctranspose

于 2012-07-10T15:16:13.237 に答える
2

'Matlab の演算子は共役転置であることに注意してください。つまり、行列を転置し、複素共役を取ります。

>> (1+1i)'
ans =
   1.0000 - 1.0000i

行列の転置が必要な場合は、.'演算子を使用する必要があります。

>> (1+1i).'
ans =
   1.0000 + 1.0000i
于 2012-07-10T15:17:08.897 に答える
1

多分これは説明するのに役立ちます:

>> syms x1 x2 x3 x4
>> s=[x1 x2]*[x3 x4]'
s =
x1*conj(x3) + x2*conj(x4)

>> s=[x1 x2]*[x3; x4]
s =
x1*x3 + x2*x4

>> [x3 x4]'

ans =

 conj(x3)
 conj(x4)

トランスポーズの'バージョンは、あなたが望むことをしていません。transpose代わりに使用してください:

>> transpose([x3 x4])
 ans =
 x3
 x4
于 2012-07-10T15:14:30.743 に答える