我正在研究电磁学(物理学的一个分支),并且在我的计算任务中处理复数(我使用 MATLAB)。比方说是一个复数。计算大小的平方,即,我可以使用两种在数学上等效的不同方式:
但是,上述两个操作的结果略有不同(数值上)。差异通常在结果的最后一个小数点,所以实际上这不会影响我的计算。但我很好奇为什么会出现这种差异。现在,有趣的是以下内容。我也可以计算作为
这个计算等于. 那么,绝对值函数 (abs) 是如何实现的(在 MATLAB 或其他地方)?为什么它会给出不同的结果?哪个结果更准确?
我正在研究电磁学(物理学的一个分支),并且在我的计算任务中处理复数(我使用 MATLAB)。比方说是一个复数。计算大小的平方,即,我可以使用两种在数学上等效的不同方式:
但是,上述两个操作的结果略有不同(数值上)。差异通常在结果的最后一个小数点,所以实际上这不会影响我的计算。但我很好奇为什么会出现这种差异。现在,有趣的是以下内容。我也可以计算作为
这个计算等于. 那么,绝对值函数 (abs) 是如何实现的(在 MATLAB 或其他地方)?为什么它会给出不同的结果?哪个结果更准确?
至少在 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