我对MATLAB中复数的操作感到困惑。
我EE
是9x4
实数矩阵,我希望将其与复数10x3
矩阵SOLS
相乘。 Matlab中的nitial代码是:
Evec= EE*[SOLS' ; ones(1,10 ) ];
这一行通常相当于:
SOLSt=SOLS';
for i=1:9
for j=1:10
Evec(i,j)=EE(i,1)*SOLSt(1,j)+EE(i,2)*SOLSt(2,j)+EE(i,3)*SOLSt(3,j)+EE(i,4);
end
end
为什么上面的循环不会给出与:
相同的结果 for i=1:9
for j=1:10
RE(i,j)=EE(i,1)*real(SOLSt(1,j))+EE(i,2)*real(SOLSt(2,j))+EE(i,3)*real(SOLSt(3,j))+EE(i,4);
IM(i,j)=EE(i,1)*imag(SOLSt(1,j))+EE(i,2)*imag(SOLSt(2,j))+EE(i,3)*imag(SOLSt(3,j))+EE(i,4);
end
end
Evec=complex(RE,IM);
当我做SOLSt=SOLS'
时,我们进行了共轭转置,这没关系。现在,对于真实矩阵EE
与复数矩阵SOLSt
的乘法,复数矩阵SOLS
是EE(i)
的共轭转置。在数学上,它给出了一个虚数,实部指的是Real(SOLSt(i))
和EE(i)
的乘积,其虚部指的是imag(SOLSt(i))
和EE(i)
的乘积
这是由上面提到的第二个版本翻译,但是这给出了与第一个版本不同的结果,这也是SOLSt(i)
与EE(i)*SOLSt(i)
的乘法。我从结果的差异中理解的是,当我写SOLS'.
Matlab不能完全执行实部和虚部的乘积。
我不想使用Evec= EE*[SOLS' ; ones(1,10 ) ];
,我只想在初始命令.'
中以不同的方式使用{{1}}找到相同的结果
答案 0 :(得分:2)
在您将Evec
的一部分复杂化的行中,您在总和中包含了EE(i,4)
。这不应该存在,因为它只存在于解决方案的实际部分中。如果你使用它,事情就可以了:
IM(i,j)=EE(i,1)*imag(SOLSt(1,j))+EE(i,2)*imag(SOLSt(2,j))+EE(i,3)*imag(SOLSt(3,j));