Файл справки здесь немного неясен, но это не значит, что вы можете просто использовать неположительно определенную матрицу и получить тот же результат, изменив способ вызова функции:
[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