与 MATLAB 中的复数操作混淆

Confusion with complex numbers manipulation in MATLAB

我对 MATLAB 中的复数运算感到困惑。 我有 EE 是一个 9x4 实数矩阵,我想将其与复数 10x3 矩阵 SOLS 相乘。 Matlab中的初始代码是:

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) Matlab 不完全执行实部和虚部的乘积。 我不想使用 SOLS'.,我只是想找到与初始命令 Evec= EE*[SOLS' ; ones(1,10 ) ]; 相同的结果,而不是以不同的方式使用 .'

在复数部分 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));