Matlab Codegen Eig 函数 - 这是一个错误吗?
Posted
技术标签:
【中文标题】Matlab Codegen Eig 函数 - 这是一个错误吗?【英文标题】:Matlab Codegen Eig Function - Is this a Bug? 【发布时间】:2013-04-17 16:44:00 【问题描述】:考虑以下最小示例:
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。
谁能重现/解释这种行为?这是一个错误还是我在这里遗漏了什么?
【问题讨论】:
有趣的“错误”。但是要理解,特征向量就是一个向量。所以本质上只是一个可以任意缩放并且仍然有效的方向(在某种意义上,方向 与方向 相同,依此类推。特征向量仅在缩放因子内是唯一的。根据我的经验,Matlab 总是选择缩放这些特征向量(B 的列),以便它们的 2 范数是统一的。显然,编译后的版本要么不缩放,要么缩放不同。希望其他人可以填写更多详细信息,说明为什么缩放差异。 【参考方案1】:不,这不是错误。
正如 Stuart 在对问题的评论中指出的那样,特征向量通常是标准化的。 eig()
的文档中的注释中指出了这一点。
编译版本的行为差异是“对于某些高级库函数”下的“Expected Differences in Behavior After Compiling MATLAB Code”中记录的功能。
这种行为只是被承认,但没有理由或解释。
【讨论】:
以上是关于Matlab Codegen Eig 函数 - 这是一个错误吗?的主要内容,如果未能解决你的问题,请参考以下文章