对称矩阵乘积不对称
Symmetric Matrix Product is not Symmetric
当我们有两个对称矩阵x和y时,矩阵z = xyx理论上也是对称的。然而,这在 Matlab 中并不完全正确:
x = randn(3);
y = randn(3);
x = x*x';
y = x*x';
z = x*y*x;
issymetric(z)
为什么会发生这种情况,我该怎么办?因为我不想做
z = .5*(z+z')
this Whosebug 问题中的所有答案都不令人满意。
问题在于 Matlab 的计算并不准确,因此浮点计算的有限精度会引入一些 t运行 阳离子误差。
如果您 运行 使用符号数学的示例(没有 t运行 阳离子,确切的),您将看到 z
实际上是对称的。
x = sym(randn(3));
y = sym(randn(3));
x = x*x';
y = y*y';
z = x*y*x;
% issymmetric does not take symbolic expressions as argument, convert to double
issymmetric(double(z))
由于您现在在最后而不是在中间步骤中进行双重转换,因此矩阵将保持对称。
当我们有两个对称矩阵x和y时,矩阵z = xyx理论上也是对称的。然而,这在 Matlab 中并不完全正确:
x = randn(3);
y = randn(3);
x = x*x';
y = x*x';
z = x*y*x;
issymetric(z)
为什么会发生这种情况,我该怎么办?因为我不想做
z = .5*(z+z')
this Whosebug 问题中的所有答案都不令人满意。
问题在于 Matlab 的计算并不准确,因此浮点计算的有限精度会引入一些 t运行 阳离子误差。
如果您 运行 使用符号数学的示例(没有 t运行 阳离子,确切的),您将看到 z
实际上是对称的。
x = sym(randn(3));
y = sym(randn(3));
x = x*x';
y = y*y';
z = x*y*x;
% issymmetric does not take symbolic expressions as argument, convert to double
issymmetric(double(z))
由于您现在在最后而不是在中间步骤中进行双重转换,因此矩阵将保持对称。