我注意到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]
答案 0 :(得分:4)
运算符'
在Matlab ctranspose
中也称为复共轭转置,这基本上意味着它应用了conj
和transpose
功能。请注意,此运算符是数学中的Hermitian算子。
您真正想要的是transpose
.'
为了得到预期的输出,并且假设你只想在没有共轭第二个向量的情况下相乘,你应该这样做:
>> syms x1 x2 x3 x4
>> s = [x1 x2]*[x3 x4].'
所以你的输出将是:
x1*x3 + x2*x4
有关详细信息,您可以查看help .
,查看运营商列表,help transpose
和help 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