Функция Matlab chol возвращает разложение Холекси с одним числом

У меня есть матрица A размером 390 на 390, содержащая такие числа, как:

141270,991258825 -92423,2972762164 -92423,2972762164 60465,8168198016 139998,877391881 -91591,0460330842 30573,0969789307 -20001,7456206658 ...

Если я попробую chol(A), Matlab выйдет из строя и скажет, что матрица должна быть положительно определенной. Хорошо, я видел в API, что [R,p] = chol(A) также работает для отрицательно определенных матриц. Я пробовал это, но R тогда становится матрицей 1x1. Но ожидаю матрицу 390х390.


person farahm    schedule 20.05.2014    source источник


Ответы (1)


Файл справки здесь немного неясен, но это не значит, что вы можете просто использовать неположительно определенную матрицу и получить тот же результат, изменив способ вызова функции:

[R,p] = chol(A) для положительно определенного A, производит верхнюю треугольную матрицу R из диагонали и верхнего треугольника матрицы A, удовлетворяющую уравнению R'*R=A и p равно нулю. Если A не является положительно определенным, то p является положительным целым числом, и MATLAB® не генерирует ошибку. Когда A заполнено, R является верхней треугольной матрицей порядка q=p-1, такой что R'*R=A(1:q,1:q).

Если ваша матрица не является положительно определенной, p > 0, поэтому размер вашего результата R будет зависеть от p. На самом деле, я думаю, что этот конкретный синтаксис просто предназначен для того, чтобы вы могли использовать chol как способ проверки того, является ли A положительно определенным, а не просто выдавать ошибку, если это не так. В файле справки даже говорится:

Примечание Использование chol предпочтительнее использования eig для определения положительной определенности.

Пример — возьмите pascal(5) и установите для последнего элемента что-то отрицательное:

A =

     1     1     1     1     1
     1     2     3     4     5
     1     3     6    10    15
     1     4    10    20    35
     1     5    15    35    -3

[R,p] = chol(A) возвращается

R =

     1     1     1     1
     0     1     2     3
     0     0     1     3
     0     0     0     1


p =

     5

Конечно, R'*R' == A(1:4,1:4)

С другой стороны, установка отрицательного значения элемента X(2,2) дает p из 2 и, следовательно, единственное значение в R, которое будет sqrt(A(1,1). Установка отрицательного значения A(1,1) возвращает p = 1 и пустое R.

person nkjt    schedule 20.05.2014