Где ещё можно спросить не знаю.
Есть динамическая система с некоторыми нелинеяностями связанными с вращательным движением. Если записать её уравннения в пространтсве состояний для непрерывного времени то они будут содержать произведения элементов вектора состояния.
Надо синтезировать наблюдатель для этой системы. Есть ограничения по сложности метода, скажем адаптации фильтра Калмана для нелинейного случая (EKF/UKF) слишком вычислительно тяжелы.
Почитав про MRAC и градиентный идентификатор, возникла идея сделать градиентный наблюдатель. Сейчас играюсь с моделью и этим наблюдателем в octave. Похоже оно работает. Суть метода проста.
x_{n+1} = F(x_n)
z_n = H x_n
Набюдатель линейный. Пока полагаем, что модель системы известна точно.
y'_{n+1} = F(y_n)
w_n = H w_n
e_n = z_n - w_n
y_n = y'_n + e K
Отличие от линейных наблюдателей только в выборе K. Для этого записываем оценку отклонения.
d = e^2
И находим градиент d в пространстве состояний дискретизованной по времени системы. Получаем нечто следующее для матрицы K.
K_ij = u dF_i/dx_j
Идея в том, чтобы делать поправку состония наблюдателя исходя из градиента квадрата ошибки, то есть двигаться в сторону уменьшения ошибки.
Вопрос в оптимальности (максимально возможном быстродействии) такого метода. Нигде не нашел упоминаний подобного применительно к имеено наблюдателям. Хотелось почитать что либо по теме, возможно есть какие либо `улучшения` этого метода, способы выбора оптимального u, ещё что-то.
И ещё вероятно скоро потребуется идентификатор (определение точных параметров системы), и все идеи опять же заканчиваются на градиентном методе.
И последнее, есть такой способ регулирования `sliding mode control`, он же может быть использован и в наблюдателе. Как я понимаю, нужно всего лишь исключить зависимость поправки от величины ошибки и для дискретного случая вычислять длину шага так, чтобы оказатся на поверхности где ошибка равна нулю. Но польза этого не очевидна. И даже появляются сомнения о вреде при наличии ошибки измерения (шума) выхода настоящей системы.