考虑以下最小例子:
function CoderEigFail() %#codegen
A = [0 sqrt(2); sqrt(2) 0];
[B C] = eig(A)
当我通过codegen CoderEigFail.m
编译并运行它时,我获得的矩阵B与我运行原始Matlab文件时得到的矩阵不同。特别是,对于mex文件,我得到B = [1 1; -1 1],而对于Matlab文件,我得到B = [-0.7071 0.7071; 0.7071 0.7071]。我在MacOSx Mountain Lion上运行Matlab R2011a。
有人可以复制/解释这种行为吗?这是一个错误还是我错过了什么?
答案 0 :(得分:5)
不,这不是一个错误。
正如斯图尔特在评论中指出的那样,特征向量通常是标准化的。这在eig()
的文档中的注释中指出。
与编译版本的行为差异是“对于某些高级库函数”下的“Expected Differences in Behavior After Compiling MATLAB Code”中的文档功能。
这种行为是公认的,但不合理或解释。