请考虑以下最小示例:
function CoderEigFail() %#codegen
A = [0 sqrt(2); sqrt(2) 0];
[B C] = eig(A)
Run Code Online (Sandbox Code Playgroud)
当我编译它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.
任何人都可以重现/解释这种行为吗?这是一个错误还是我错过了什么?
不,这不是一个错误.
正如斯图尔特在评论中指出的那样,特征向量通常是标准化的.这在文档的说明中指出eig().
与编译版本的行为差异是 "对于某些高级库函数"下的" 编译MATLAB代码后行为的预期差异 "中记录的特征.
这种行为是公认的,但没有正当理由或解释.