Функция [a b]=cholcov возвращает a=[] и b=NaN для симметричной положительно определенной матрицы

У меня есть эта матрица:

S=   6.84370358358718e-006    -7.45833473076585e-007
    -7.45833473076565e-007     7.11723106043725e-006

Он симметричен:

S-S'=                     0    -2.00111533788828e-020
      2.00111533788828e-020                         0 

и положительно определен:

eig(S)= 6.22219831321029e-006    and     7.73873633081414e-006

Когда я использую [a b]=cholcov(S), он возвращает a=[] и b=NaN. В справке MatLab написано, что [T,num] = cholcov(SIGMA) ... If SIGMA is not square and symmetric, num is NaN and T is empty.

Конечно, функция chol(S) разлагает эту функцию без ошибок. Я не знаю разницы между chol и cholcov, да это и не важно, так как у меня нет выбора. Ошибка возникает из функции mvnrnd(zeros(1,2),S), когда я пытаюсь сгенерировать некоторые случайные числа:

??? Error using ==> mvnrnd at 118
SIGMA must be a symmetric positive semi-definite matrix.

Кто-нибудь может сказать мне, что здесь не так? Благодарю.


person Ramin    schedule 25.11.2012    source источник


Ответы (2)


Вы написали:

S-S'=                     0    -2.00111533788828e-020
      2.00111533788828e-020                         0 

Это говорит о том, что S не симметричен. ПОЧТИ симметрично. Но... не совсем. Если это связано с числами, вы можете исправить это с помощью:

symmetricS = mean(cat(3,S,S'),3);
person Pete    schedule 25.11.2012
comment
Большое спасибо. Я думал, что Matlab считает e-20 нулем! - person Ramin; 25.11.2012

ПОЧТИ симметричен. Вы сами признаете, что НЕ симметрично. Быть ПОЧТИ беременной - это то же самое, что быть беременной? Вы показываете, что S~=S'. Исправить легко.

S = (S + S')/2;
person Community    schedule 25.11.2012