Рассмотрим следующий пример: минимальныйMatlab Codegen Eig Function - это ошибка?
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,2> идентично направлению <2,4> и т. Д. Собственные векторы уникальны только с коэффициентом масштабирования. По моему опыту, Matlab всегда выбирает масштаб эти собственные векторы (столбцы B), так что их 2-норма равна единице. По-видимому, скомпилированная версия либо не масштабируется, либо масштабируется по-разному. Надеюсь, кто-то еще может заполнить более подробную информацию о том, почему различия в масштабировании. – Stuart