abs(z)^2 和 zxz* 之间的数值差异是多少,其中 z 是复数

计算科学 matlab 精确 准确性
2021-12-03 14:59:45

我正在研究电磁学(物理学的一个分支),并且在我的计算任务中处理复数(我使用 MATLAB)。比方说z是一个复数。计算大小的平方z,即|z|2,我可以使用两种在数学上等效的不同方式:

  • |z|2=abs(z)2
  • |z|2=zz

但是,上述两个操作的结果略有不同(数值上)。差异通常在结果的最后一个小数点,所以实际上这不会影响我的计算。但我很好奇为什么会出现这种差异。现在,有趣的是以下内容。我也可以计算|z|2作为

  • |z|2=real(z)2+imag(z)2

这个计算等于|z|2=zz. 那么,绝对值函数 (abs) 是如何实现的(在 MATLAB 或其他地方)?为什么它会给出不同的结果?哪个结果更准确?

1个回答

至少在 MATLAB 中,我相信abs(z)它被实现为sqrt(z*z'). 额外的平方根和平方运算会降低数值精度。

>> z = randn + randn * i
z =
   0.5377 + 1.8339i

>> abs(z)^2 - z*z'
ans =
   4.4409e-16

>> abs(z)^2 - sqrt(z*z')^2
ans =
     0