Matlab 对称矩阵积不是对称的

Matlab 对称矩阵积不是对称的,matlab,matrix,symmetric,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') stackoverflow问题中的所有问题都不令人满意。问题在于Matlab不能精确执行计算,因此浮点计算的有限精度引入了一些截断误差 如果使用符号数学(无截断,精

当我们有两个对称矩阵xy时,矩阵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')

stackoverflow问题中的所有问题都不令人满意。

问题在于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))
由于您现在在最后进行双转换,而不是在中间步骤,因此矩阵将保持对称

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))