我正在研究一个项目,该项目包括将Matlab代码翻译为C/c++。一度我必须计算矩阵的特征向量,在Matlab使用eig
函数这样做是在c++中我使用EigenSolver
特征库。
问题是一些特征向量(显然是随机的)与等效的Matlab一个相比具有相反的符号,这可能是我的应用程序中的一个问题。
我不知道特征向量是独一无二的,所以有什么方法知道哪些特征向量有正确信号改变,它只是乘以1 ?
根据eig
的文档,不保证MATLAB版本和/或使用的机器之间的特征向量的符号一致:
不同的机器和版本的MATLAB®可以产生不同的特征向量,仍然是数值精确的:
- 对于实特征向量,特征向量的符号可以改变。
- 对于复特征向量,特征向量可以乘以任何1量级的复数。
因此复制MATLAB所做的是不可能的,因为它没有定义。
然而,如果您想修改MATLAB代码和c++代码,那么您可以强制特征向量位于特定的半圆/半球,例如,通过要求第一个分量为正(如果x分量为负,则将向量乘以-1)。我认为这应该足以得到一致的结果。