与 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));
我对 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));