Как вычислить определитель в PCA?

Я собираюсь запрограммировать PCA, но для этого мне нужно вычислить собственный вектор и собственное значение.

Мой вопрос заключается в вычислении собственного значения, которое мы должны вычислить определителем матрицы, которая все (диагональное значение - лямбда).

В этом случае можно считать, что количество лямбдов зависит от размерности матрицы.

Могу запрограммировать вручную для матриц до вычитания диагонали лямдой.

Но для диагонали после вычитания лямды, как ее вычислить??

Потому что, в конце концов, нам придется провести факторизацию, чтобы получить лямбду (x1,x2,..,xn).

Вот пример:

      Matriks =[ 3 5 6
                 5 7 4
                 3 8 9]

Затем мы должны вычесть диагональное значение с собственным значением, в этом случае, поскольку мы его не знали, мы будем рассматривать его как x.

       Matrix_New=[ 3-x 5    6
                    5   7-x  4
                    3   8    9-x]

И определитель равен (3-x)(7-x)(9-x).

Я уже пробовал умножать, но матлаб выдает ошибку. Знаете ли вы, как выполнять вычисления (3-x)(7-x)(9-x) ??

Я знаю, что есть функция Matlab, но мне не разрешено ее использовать!

Я действительно ценю любую помощь :)


person user3303896    schedule 15.02.2014    source источник


Ответы (1)


Вы можете использовать символический набор инструментов, если он у вас есть.

http://www.mathworks.com/help/symbolic/mupad_ref/linalg-det.html

Затем нужно найти корни многочлена.

Если у вас нет символического набора инструментов, я думаю, вам придется сделать свою программу самостоятельно. Один из вариантов — использовать второстепенное расширение.

PS: Кстати, значение вашего определителя НЕ правильно оценено.

person DanielTheRocketMan    schedule 16.02.2014
comment
вопрос говорит, что я знаю, что есть функция Matlab, но мне не разрешено ее использовать! [sic] - person Ben Voigt; 16.02.2014
comment
Я получил этот пример: A = sym('[w 1; 2 w]'); solve(det(A),'w')... Но когда я пытаюсь сделать это с помощью B= sym('[e 1; 2 r]'); решить (det (B), 'e', ​​'r') это дает мне ошибку. «e» представляет собой первое диагональное значение-x, а «r» представляет второе диагональное значение-x - person user3303896; 16.02.2014
comment
@ user3303896, к сожалению, я не могу проверить это для вас. У меня здесь нет Sym Matlab, и я давно использовал этот набор инструментов (возможно, версию с другими командами). Извини за это - person DanielTheRocketMan; 16.02.2014
comment
Но знаете ли вы, как мы можем выполнить (3-x) в Matlab, где x неизвестно?? - person user3303896; 16.02.2014
comment
Найдите алгоритм Леверье-Фаддеева, он вычисляет характеристический многочлен с матричным умножением и операциями трассировки. -- Не относящееся к теме примечание: со временем вы можете обнаружить, что лучше вычислить SVD исходной матрицы X, которая используется для вычисления корреляционной матрицы A=X'*X. - person Lutz Lehmann; 12.03.2014