Matlab Codegen Eig功能 - 这是一个Bug吗?

Tri*_*SSe 2 matlab

请考虑以下最小示例:

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.

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

Ole*_*leg 5

不,这不是一个错误.

正如斯图尔特在评论中指出的那样,特征向量通常是标准化的.这在文档的说明中指出eig().

与编译版本的行为差异是 "对于某些高级库函数"下的" 编译MATLAB代码后行为的预期差异 "中记录的特征.

这种行为是公认的,但没有正当理由或解释.