Функция Matlab Codegen Eig - это ошибка?
Рассмотрим следующий минимальный пример:
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]. У меня есть Matlab R2011a, работающий на MacOSx Mountain Lion.
Кто-нибудь может воспроизвести / объяснить это поведение? Это ошибка или я что-то здесь упускаю?
1 ответ
Нет, это не ошибка.
Как отметил Стюарт в комментарии к вопросу, собственные векторы обычно нормализуются. На это указывает примечание в документации eig()
,
Различие в поведении скомпилированной версии - документированная функция в разделе " Ожидаемые различия в поведении после компиляции кода MATLAB " в разделе "Для некоторых расширенных библиотечных функций".
Такое поведение просто признается, но не оправдывается и не объясняется.