关于MatLab中复数值乘法的困惑

时间:2012-07-10 14:58:55

标签: matlab matrix-multiplication complex-numbers

我注意到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]

3 个答案:

答案 0 :(得分:4)

运算符'在Matlab ctranspose中也称为复共轭转置,这基本上意味着它应用了conjtranspose功能。请注意,此运算符是数学中的Hermitian算子。

您真正想要的是transpose

作为快捷方式的运算符.'

为了得到预期的输出,并且假设你只想在没有共轭第二个向量的情况下相乘,你应该这样做:

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

所以你的输出将是:

x1*x3 + x2*x4

有关详细信息,您可以查看help .,查看运营商列表,help transposehelp ctranspose

答案 1 :(得分:2)

请注意,Matlab中的'运算符是conjugate transpose,即它都转换矩阵并采用复共轭:

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

如果您想要matrix transpose,那么您应该使用.'运算符:

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

答案 2 :(得分: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