Matlab: Как мне убедиться, что ковариационная матрица является положительно определенной при использовании фильтра Калмана

Для комплексных данных мне трудно гарантировать, что ковариационная матрица является положительно определенной. Беря пример,

P =

  10.0000 +10.0000i        0                  0          
        0            10.0000 +10.0000i        0          
        0                  0            10.0000 +10.0000i

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

(A)

[R1,p1] = chol(P)

R1 =

     []


p1 =

     1

Поскольку p1 > 0, A не является положительно определенной

(B) Использование собственных значений: если собственные значения положительны, то P должен быть положительно определенным.

[r p]=eig(P)

r =

     1     0     0
     0     1     0
     0     0     1


p =

  10.0000 +10.0000i        0                  0          
        0            10.0000 +10.0000i        0          
    0                  0            10.0000 +10.0000i

Однако выполнение svd(P) дает все положительные собственные значения !! Где я ошибаюсь и что мне делать, чтобы матрица P не стала не положительно определенной. Во время выполнения и в сценариях реального мира очень сложно обеспечить позитивную определенность P. Есть ли хак или выход? Спасибо большое


person SKM    schedule 26.11.2016    source источник


Ответы (1)


Проверка положительной определенности на комплексных матрицах:

Прежде всего, ответ на этот вопрос на math.stackexchange говорит, что:

Необходимым и достаточным условием положительной определенности комплексной матрицы A является то, что эрмитова часть A_H = 1/2·(A+A^H) является положительно определенной, где A^H обозначает транспонированное сопряжение.

Почему матрица P становится неположительно определенной:

Затем, на вопрос о том, почему P теряет свою «положительную определенность», обычным виновником является представление/арифметика с плавающей запятой.

Стандартный алгоритм фильтра Калмана может показать проблемы числовой стабильности в некоторых чувствительных операциях, например, при использовании обратной матрицы S при расчете коэффициента усиления Калмана или при применении оптимизаций, таких как использование упрощенного выражения для ковариации ошибок на шаге обновления P+ = (I - K·H)·P-.

Существуют и другие источники ошибок, такие как ошибочная реализация или использование неверных данных (например, определение матриц ковариации процесса/меры, которые сами по себе не являются положительно определенными).

Как избежать проблемы:

Я сосредоточусь на первом источнике ошибки: численная стабильность. Существует ряд альтернатив, которые обычно используются, чтобы сделать фильтры Калмана более стабильными и избежать проблемы матрицы ковариации:

  • Исправьте небольшие ошибки в P на каждой итерации (формально неверно, но прекрасно работает). В прошлом я успешно использовал упрощенный P = 1/2 (P + P') с реальными матрицами, но есть и более сложные схемы.
  • Используйте фильтр Калмана с квадратным корнем или любой другой состав, улучшающий стабильность. Поскольку они сохраняют и обновляют своего рода квадратный корень из P, асимметрия больше не проблема. Они также уменьшают положительно определенную задачу в целом.
  • Перейти к 64-битной арифметике FP. Гораздо стабильнее, чем с одинарной точностью.
  • Улучшите численное обусловливание, масштабируя некоторые переменные. Большие различия в величине между числами усугубляют неточности, поэтому, если P смешивает диагональные значения в порядке 10 ^ + 3 с другими значениями в порядке 10 ^ -6, то измените единицу измерения последней переменной на микро-что угодно, чтобы уменьшить зазор.

Использование одного или комбинации этих факторов может сработать. Однако я не работал с фильтрами Калмана в сложной области, поэтому дайте мне знать, как это работает в вашем случае.

person dunadar    schedule 17.01.2017
comment
Следует отметить, что одним из классических способов сохранения численной стабильности фильтра Калмана является использование формы Джозефа. 1 2 Википедия: поиск 'джозеф форма' - person Unapiedra; 18.09.2018