2

考虑以下最小示例:

function CoderEigFail() %#codegen
A = [0 sqrt(2); sqrt(2) 0];
[B C] = eig(A)

当我通过编译codegen CoderEigFail.m并运行它时,得到的矩阵 B 与运行原始 Matlab 文件时得到的矩阵 B 不同。特别是,对于 mex 文件,我得到 B = [1 1; -1 1],而对于 Matlab 文件,我得到 B = [-0.7071 0.7071; 0.7071 0.7071]。我在 MacOSx Mountain Lion 上运行了 Matlab R2011a。

任何人都可以重现/解释这种行为吗?这是一个错误还是我在这里遗漏了什么?

4

1 回答 1

5

不,这不是错误。

正如斯图尔特在对该问题的评论中指出的那样,特征向量通常是标准化的。这在 的文档中的注释中指出eig()

编译版本的行为差异是“对于某些高级库函数”下的“编译 MATLAB 代码后的预期行为差异”中记录的功能。

这种行为只是被承认但没有理由或解释。

于 2013-04-17T18:20:11.263 回答