2013-12-14 4 views
0

У меня есть неизвестная нелинейная система, и я хочу ее смоделировать с использованием другой системы с некоторыми адаптируемыми параметрами (например, нейронной сетью). Итак, я хочу исправить структуру онлайн-обучения неизвестной системы, не зная ее динамики, я могу взаимодействовать с ней только через входы-выходы. Моя проблема в том, что я не могу заставить ее работать в 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 
+0

Почему вы считаете, что решение ODE является правильным инструментом для этой работы? Молоток не работает на винтах, как бы вы ни старались. –

+0

Я думал, что это был правильный инструмент для моделирования системы, зная ее дифференциальные уравнения. Есть ли другой способ оценить параметры модели, зная эти уравнения? – sharp

+0

Для линейных приближений вы имеете модели ARMA (X) и состояния-пространства. Для нелинейного параметрического подгонки, 'lsqcurvefit'. Кроме того, расширенный фильтр Kalman может работать хорошо, если вам нужно улучшить свое соответствие с входящими данными с течением времени (не все данные доступны для начальной оценки). –

ответ

0

Вы должны знать, что ваша проблема некорректной, как это. При любой траектории x (t), полученной с помощью выборки и сглаживания/интерполяции, вы можете выбрать p1 (t) по желанию и установить

p2 (t) = (x '(t) - p1 (t) * x (t))/u.

Итак, вам нужно сформулировать ограничения. Очевидным является то, что функции p1 и p2 должны быть действительны для всех траекторий системы черного ящика. Есть ли у вас разные траектории?

Другой вариант - потребовать, чтобы p1 и p2 были константами. Фактически, в этом случае, и если у вас имеются одинаково доступные образцы, было бы проще сначала найти хорошее разностное уравнение для данных. С образцами x [n] для времени t [n] = t0 + n * dt образуют матрицу X со строками

[-u, x [n], x [n + 1], ..., x [n + k]] для n = 0, ..., Nk

и примените QR-декомпозицию или SVD к X для определения векторов ядра правой руки. QR может не показать полезный ранг дефицита, поэтому используйте SVD на верхней квадратной части R = USV^T, S диагональ, упорядоченную, как обычно, U, V квадрат и ортогональную, и используйте последнюю строку V с коэффициентами

[Ь, а [0], ..., [к]],

, соответствующий наименьшему собственному значению, для формирования разностного уравнения

с [0] * х [п] + а [1] * х [N-1] + ... + [к] * [х] = пк б * и.

Если эффективный ранг R соотв. S не является (k-1), то уменьшите k до эффективного ранга плюс один и начните снова.

Если в конце найдено k = 1, вы можете сделать из него дифференциальное уравнение. Переформулируйте разностное уравнение как

a [0] * (x [n] -x [n-1])/dt = - (a [0] + a [1])/dt * x [n-1 ] + Ь/дт * и

и считать дифференциальное уравнение

х '(T) = - (а [0] + а [1])/(A [0] * дт) * х (t) + b/(a ​​[0] * dt) * u

Можно отклонить это уравнение, если коэффициенты становятся неудобно большими.

Смежные вопросы