У меня есть матрица ковариаций 1500x1500, из которой я пытаюсь вычислить определитель для метода EM-ML. Ковариационную матрицу получают путем нахождения матрицы SIGMA, а затем передают ее в ближайшую библиотеку (Link), чтобы сделать матрицу положительной. В этом случае матрица всегда сингулярна. Другой метод, который я пытался, заключался в том, чтобы вручную создать положительно определенную матрицу с использованием техники A '* A. (A взято как матрица 1600x1500). Это всегда дает мне определитель как бесконечный. Любая идея о том, как я могу получить положительно определенную матрицу с конечным определителем?MATLAB: Определитель ковариационной матрицы равен либо 0, либо inf
ответ
Вам действительно нужен определитель или журнал определителя? Например, если вы вычисляете логарифмическую вероятность gaussians, то то, что входит в логарифмическую правдоподобие, является журналом определителя. В высоких измерениях детерминанты мей не вписываются в двойной, но его журнал, скорее всего, будет.
При выполнении Чолески факторизации ковариационных С, (нижней треугольным) фактор L сказать, что
C = L*L'
затем
det C = det(L) * det(L') = det(L) * det(L)
Но определитель нижней треугольной матрицы является продукт его диагональных элементов, поэтому, беря журналы выше, мы получаем:
log det C = 2*Sum{ i | log(L[i,i])}
(В ответ на комментарий) Даже если вам нужно рассчитать gaussian pdf, лучше вычислить его журнал и оценить его только тогда, когда вам нужно. Например объявления dimenions гауссового с ковариационным C (который имеет Чолески фактора L) и среднего 0 (чисто для сохранения ввода данных):
p(x) = exp(-0.5*x'*inv(C)*x) /(sqrt(pow(2pi,d) * det(C))
так
log p(x) = -0.5*x'*inv(C)*x - 0.5*d*log(2pi) - 0.5*log(det(C))
, которые также могут быть написаны
log p(x) = -0.5*y'*y - 0.5*d*log(2pi) - log(det(L))
где
y = inv(L)*x
Да, мне понадобится детерминант, так как мне нужно создать функцию распределения вероятности Гаусса, которая имеет знак '| SIGMA |' в своем знаменателе. – Timelapse
- 1. Matlab: Ошибка при разделении ковариационной матрицы
- 2. Ошибка вычисления матрицы определитель матрицы в MATLAB
- 3. Inf * 0 в Matlab
- 4. Алгоритм найти определитель матрицы
- 5. Создание большой ковариационной матрицы
- 6. Matlab: Определитель вариации Ковариационная матрица
- 7. Определитель огромной матрицы Java
- 8. Заменить значение 0 в ковариационной матрице (pmvnorm)
- 9. MATLAB: как вычислить «определитель» из матрицы N * N в MATLAB
- 10. Учитывая LUP-разложение матрицы, как найти определитель в MATLAB?
- 11. Определитель матрицы Javascript
- 12. Определите, соответствуют ли какие-либо ячейки в столбце 0, окончательный результат равен 0, или равен 2
- 13. COUNTIF возвращает либо 0, либо количество ячеек
- 14. MATLAB точности Определитель проблема
- 15. Генерация ковариационной матрицы из корреляционной матрицы
- 16. Perl - Определитель матрицы, содержащей переменные
- 17. Как найти определитель матрицы 2x2?
- 18. Вычисления ковариационной матрицы в MATLAB с заданными вероятностями
- 19. Как построить контур ковариационной матрицы гауссовского распределения?
- 20. Извлечение матрицы ковариационной нелинейной подгонки
- 21. Обеспечение положительно определенной ковариационной матрицы
- 22. Как этот UID когда-либо равен -1?
- 23. Определитель матрицы hessian полутонового изображения слишком мал в matlab
- 24. Для массива я получаю значения либо 0 и 255, либо ничего между ними для matlab?
- 25. Определитель комплексной матрицы в R
- 26. Определитель целочисленной матрицы с armadillo
- 27. Matlab 3D вид матрицы
- 28. Validate, что число либо 0, либо между 1 и 5
- 29. awk: отфильтровать линзы, которые имеют либо 0, «-», либо «NC»
- 30. Либо Монада, либо нет?
Самый простой способ - матрица единства 'eye (N)'. Утверждения *. Определитель любой основной подматрицы матрицы M (и M можно понимать как самую большую подматрицу M) отличен от нуля и положителен. * И * M положительно определен * * эквивалентны. Поэтому я полагаю, что у вас есть проблема с переполнением значения realmax. Вы пытались вычислить 'det (A * 10^-6)' например? – Crowley
Вы также можете попытаться найти самую большую сумбатрицу, которую можно оценить, перебирая 'ii' команду' DetMinorA (ii) = det (A (1: ii, 1: ii)); ' – Crowley
Итак, я попробовал' det (A * 10e-6), и теперь это дает мне определитель как нуль. Кроме того, 'DetMinorA (ii) = det (A (1: ii, 1: ii));' дает мне конечные значения до 145-го индекса. Что с этим делать? – Timelapse