在MATLAB中与复数操作混淆

时间:2015-03-26 13:16:14

标签: matlab complex-numbers

我对MATLAB中复数的操作感到困惑。 我EE9x4实数矩阵,我希望将其与复数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的乘法,复数矩阵SOLSEE(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}}找到相同的结果

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));