对称矩阵乘积不对称

时间:2018-11-10 11:05:51

标签: matlab matrix 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 stackoverflow问题中的所有答案均不令人满意。

1 个答案:

答案 0 :(得分:1)

问题在于Matlab不能精确执行计算,因此浮点计算的有限精度会引入一些截断误差。

如果使用符号数学(精确无截断)运行示例,您将看到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))

由于您现在在末尾而不是在中间步骤中进行了两次转换,因此矩阵将保持对称。