Функция 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 " в разделе "Для некоторых расширенных библиотечных функций".

Такое поведение просто признается, но не оправдывается и не объясняется.

Другие вопросы по тегам