0

我注意到在 Matlab 中复杂值乘法的计算很混乱。一个简单的例子如下:

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

s 的返回值是这样的:

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

在我看来,s 应该等于 x1*x3+x2*x4。那么,这里有什么问题呢?

那么,如果我想得到两个复数向量的乘法,我该怎么做呢?

更新:我发现它会通过使用来解决。而不是 。像:

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

3 回答 3

4

算子在Matlab'中也称为Complex conjugate transposectranspose,基本意思是它应用conjand和andtranspose函数。请注意,此运算符在数学中称为 Hermitian 运算符。

您真正想要的transpose是快捷方式的运算符.'

为了获得预期的输出,并且假设您只想相乘而不共轭第二个向量,您应该这样做:

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

所以你的输出将是:

x1*x3 + x2*x4

有关更多信息,您可以查看help ., 查看运营商列表,help transpose以及help 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 回答