У меня есть неизвестная нелинейная система, и я хочу ее смоделировать с использованием другой системы с некоторыми адаптируемыми параметрами (например, нейронной сетью). Итак, я хочу исправить структуру онлайн-обучения неизвестной системы, не зная ее динамики, я могу взаимодействовать с ней только через входы-выходы. Моя проблема в том, что я не могу заставить ее работать в MATLAB с помощью ode solvers. Допустим, что мы имеем эту реальную систему (моя текущая система является более сложным, но я приведу простой пример для того, чтобы быть понятым):Решатель ODE системы с адаптивным правом
function dx = realsystem(t, x)
u = 2;
dx = -3*x+6*u;
end
и мы решаем уравнения так:
[t,x_real] = ode15s(@(t,x)realsystem(t,x), [0 1], 0)
мы предполагаем, что это неизвестная система, и мы не знаем, коэффициенты 3 и 6, так мы берем адаптивную систему с законами 2 адаптивными:
Dx (т) = -p1 (т) * х (т) + p2 (t) * u (t)
DP1 (т) = -e (т) * х (т)
DP2 (т) = е (т) * и (т)
с е (Т) ошибка е (т) = x (t) - x_real (t).
Дело в том, что я не могу найти способ подавать реальные значения для каждого t в решатель ode, чтобы иметь возможность онлайн-обучения.
Я пытался что-то вроде этого, но это не сработало:
function dx = adaptivesystem(t, x, x_real)
dx = zeros(3,1);
e = x_real - x;
u = 2;
dx(1) = -x(2)*x(1)+x(3)*u;
dx(2) = -e*x(1); %dx(2) = dp1(t)
dx(3) = e*u; %dx(3) = dp2(t)
end
Почему вы считаете, что решение ODE является правильным инструментом для этой работы? Молоток не работает на винтах, как бы вы ни старались. –
Я думал, что это был правильный инструмент для моделирования системы, зная ее дифференциальные уравнения. Есть ли другой способ оценить параметры модели, зная эти уравнения? – sharp
Для линейных приближений вы имеете модели ARMA (X) и состояния-пространства. Для нелинейного параметрического подгонки, 'lsqcurvefit'. Кроме того, расширенный фильтр Kalman может работать хорошо, если вам нужно улучшить свое соответствие с входящими данными с течением времени (не все данные доступны для начальной оценки). –