Matlab eig 相同的矩阵返回不同的结果

问题描述 投票:0回答:1

我正在使用matlab的eig函数。
我发现Sxx和Sxx2是完全一样的。
但使用函数“eig”来获取特征值 D 和 D2。
有很大的不同。

%%
xt=Xnor';
Sxx=xt*Xnor/6299;
Sxx2=Xnor'*Xnor/6299;
%%
D = eig(Sxx);
D2 = eig(Sxx2);

Sxx和Sxx2值对比截图

我已经检查了矩阵 Sxx 和 Sxx2
数值都一样
但是D和D2的数值好像有很大的错误
D与D2值对比截图

我错过了什么吗?

matlab eigenvalue eigenvector
1个回答
0
投票

@克里斯·卢恩戈

“……奇怪的是 MATLAB 在某种情况下会选择不同的算法……”

这一点也不奇怪。在一种情况下,代码强制 MATLAB 执行通用矩阵乘法(不保证结果严格对称):

xt=Xnor';
Sxx=xt*Xnor/6299; % symmetry not recognized, generic DGEMM() or ZGEMM() BLAS routine called.

在另一种情况下,MATLAB 解析器识别对称性并调用对称 BLAS() 矩阵乘法例程,这是一个完全不同的例程(保证结果严格对称)。

Sxx2=Xnor'*Xnor/6299; % symmetry recognized by parser, DSYRK() or ZSYRK() BLAS routine called

因此,在对称情况下,操作和计算的背景顺序发生了变化。人们应该预料到结果可能会略有不同。对结果进行排序应该会显示答案非常接近。

一般来说,我建议不要明确地形成转置。让 MATLAB 尽可能保持严格的对称性。

© www.soinside.com 2019 - 2024. All rights reserved.