Этот пример показывает, как идентифицировать параметры сложной, но искусственной нелинейной системы дискретного времени с одним входом и одним выходом. Первоначально система была предложена и обсуждена Нарендрой и Ли в статье
K. S. Narendra and S.-M. Li. "Neural networks in control systems". In Mathematical Perspectives on Neural Networks (P. Smolensky, M. C. Mozer, and D. E. Rumelhard, eds.), Chapter 11, pages 347-394, Lawrence Erlbaum Associates, Hillsdale, NJ, USA, 1996.
и рассматривалась в многочисленных примерах идентификации в дискретном времени.
Уравнения в дискретном времени системы Нарендра-Ли:
x1(t+Ts) = (x1(t)/(1+x1(t)^2)+p(1))*sin(x2(t)) x2(t+Ts) = x2(t)*cos(x2(t)) + x1(t)*exp(-(x1(t)^2+x2(t)^2)/p(2)) + u(t)^3/(1+u(t)^2+p(3)*cos(x1(t)+x2(t))
y(t) = x1(t)/(1+p(4)*sin(x2(t))+p(5)*sin(x1(t)))
где x1 (t) и x2 (t) являются состояниями, u (t) входным сигналом, y (t) выхода сигналом и p вектором параметра с 5 элементами.
С точки зрения файла модели IDNLGREY нет различий между системой непрерывного и дискретного времени. Поэтому файл модели Narendra-Li должен вернуть вектор обновления состояния dx и выход y, и должен взять t (время), x (вектор состояния), u (вход), p (параметр (ы)) и varargin в качестве входных параметров:
function [dx, y] = narendrali_m(t, x, u, p, varargin) %NARENDRALI_M A discrete-time Narendra-Li benchmark system.
% Output equation. y = x(1)/(1+p(4)*sin(x(2)))+x(2)/(1+p(5)*sin(x(1)));
% State equations. dx = [(x(1)/(1+x(1)^2)+p(1))*sin(x(2)); ... % State 1. x(2)*cos(x(2))+x(1)*exp(-(x(1)^2+x(2)^2)/p(2)) ... % State 2. + u(1)^3/(1+u(1)^2+p(3)*cos(x(1)+x(2))) ... ];
Заметьте, что мы выбрали здесь, чтобы конденсировать все 5 параметров в один вектор параметра, где элемент i: th ссылается обычным способом MATLAB, т.е. через p (i).
С этим файлом модели в качестве базиса мы далее создадим объект IDNLGREY, отражающий ситуацию моделирования. Здесь стоит подчеркнуть, что дискретность модели задается через положительное значение Ts (= 1 секунду). Заметьте также, что параметры содержит только один элемент, вектор параметра 5 на 1, и что SETPAR используются, чтобы указать, что все компоненты этого вектора строго положительны.
FileName = 'narendrali_m'; % File describing the model structure. Order = [1 1 2]; % Model orders [ny nu nx]. Parameters = {[1.05; 7.00; 0.52; 0.52; 0.48]}; % True initial parameters (a vector). InitialStates = zeros(2, 1); % Initial value of initial states. Ts = 1; % Time-discrete system with Ts = 1s. nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, 'Name', ... 'Discrete-time Narendra-Li benchmark system', ... 'TimeUnit', 's'); nlgr = setpar(nlgr, 'Minimum', {eps(0)*ones(5, 1)});
Сводные данные введенной структуры модели Нарендра-Ли получены с помощью команды PRESENT:
present(nlgr);
nlgr = Discrete-time nonlinear grey-box model defined by 'narendrali_m' (MATLAB file): x(t+Ts) = F(t, u(t), x(t), p1) y(t) = H(t, u(t), x(t), p1) + e(t) with 1 input(s), 2 state(s), 1 output(s), and 5 free parameter(s) (out of 5). Inputs: u(1) (t) States: Initial value x(1) x1(t) xinit@exp1 0 (fixed) in [-Inf, Inf] x(2) x2(t) xinit@exp1 0 (fixed) in [-Inf, Inf] Outputs: y(1) (t) Parameters: Value p1(1) p1 1.05 (estimated) in ]0, Inf] p1(2) 7 (estimated) in ]0, Inf] p1(3) 0.52 (estimated) in ]0, Inf] p1(4) 0.52 (estimated) in ]0, Inf] p1(5) 0.48 (estimated) in ]0, Inf] Name: Discrete-time Narendra-Li benchmark system Sample time: 1 seconds Status: Created by direct construction or transformation. Not estimated. More information in model's "Report" property.
Доступны две записи данных ввода-вывода с 300 выборки каждый, одна для оценки и одна для целей валидации. Входной вектор, используемый для обеих этих записей, одинаковый и был выбран как сумма двух синусоидов:
u(t) = sin(2*pi*t/10) + sin(2*pi*t/25)
для t = 0, 1,..., 299 секунд. Мы создаем два различных объекта IDDATA для хранения двух записей данных, ze для оценки и zv для целей валидации.
load(fullfile(matlabroot, 'toolbox', 'ident', 'iddemos', 'data', 'narendralidata')); ze = iddata(y1, u, Ts, 'Tstart', 0, 'Name', 'Narendra-Li estimation data', ... 'ExperimentName', 'ze'); zv = iddata(y2, u, Ts, 'Tstart', 0, 'Name', 'Narendra-Li validation data', ... 'ExperimentName', 'zv');
Входно-выходные данные, которые будут использоваться для оценки, показаны в окне графика.
figure('Name', ze.Name);
plot(ze);
Фигура 1: Входные-выходные данные от системы бенчмарка Нарендра-Ли.
Давайте теперь использовать COMPARE, чтобы исследовать эффективность исходной модели Нарендра-Ли. Моделируемые и измеренные выходы для ze
и zv
сгенерированы и соответствуют ze
показан по умолчанию. Используйте контекстное меню plot, чтобы переключить эксперимент с данными на zv
. Подгонка не так уж и плоха для любого набора данных (около 74%). Здесь мы должны отметить, что COMPARE по умолчанию оценивает вектор начального состояния, в этом случае один вектор начального состояния для ze
и еще один для zv
.
compare(merge(ze, zv), nlgr);
Фигура 2: Сравнение истинных выходов и моделируемых выходов исходной модели Нарендра-Ли.
%%4 % By looking at the prediction errors obtained via PE, we realize that the % initial Narendra-Li model shows some systematic and periodic differences % as compared to the true outputs. pe(merge(ze, zv), nlgr);
Фигура 3: Ошибки предсказания, полученные с помощью исходной модели Нарендра-Ли. Используйте контекстное меню, чтобы переключиться между экспериментами.
В порядок уменьшения систематических расхождений мы оцениваем все 5 параметров структуры модели Нарендра-Ли с помощью NLGREYEST. Оценка выполняется только на основе набора ze данных оценки.
opt = nlgreyestOptions('Display', 'on'); nlgr = nlgreyest(ze, nlgr, opt);
COMPARE снова используется, чтобы исследовать эффективность предполагаемой модели, но на этот раз мы используем внутренне сохраненный вектор начального состояния модели ([0; 0] для обоих экспериментов) без какой-либо начальной оценки вектора состояния.
clf opt = compareOptions('InitialCondition','m'); compare(merge(ze, zv), nlgr, opt);
Фигура 4: Сравнение истинных выходов и моделируемых выходов предполагаемой модели Нарендра-Ли.
Улучшение после оценки является значительным, что, возможно, лучше всего проиллюстрировано через график ошибок предсказания:
figure; pe(merge(ze, zv), nlgr);
Фигура 5: Ошибки предсказания, полученные с помощью оценочной модели Нарендра-Ли.
Степень моделирования предполагаемой модели Нарендра-Ли также подтверждается корреляционным анализом, предоставленным через RESID:
figure('Name', [nlgr.Name ': residuals of estimated model']); resid(zv, nlgr);
Фигура 6: Невязки, полученные с помощью оценочной модели Нарендра-Ли.
На самом деле полученные параметры модели также довольно близки к таковым, которые использовались для генерации истинных выходов модели:
disp(' True Estimated parameter vector'); ptrue = [1; 8; 0.5; 0.5; 0.5]; fprintf(' %1.4f %1.4f\n', [ptrue'; getpvec(nlgr)']);
True Estimated parameter vector 1.0000 1.0000 8.0000 8.0082 0.5000 0.5003 0.5000 0.4988 0.5000 0.5018
Некоторые дополнительные результаты качества модели (функция потерь, FPE Акайке и предполагаемые стандартные отклонения параметров модели) далее предоставляются через команду PRESENT:
present(nlgr);
nlgr = Discrete-time nonlinear grey-box model defined by 'narendrali_m' (MATLAB file): x(t+Ts) = F(t, u(t), x(t), p1) y(t) = H(t, u(t), x(t), p1) + e(t) with 1 input(s), 2 state(s), 1 output(s), and 5 free parameter(s) (out of 5). Inputs: u(1) u1(t) States: Initial value x(1) x1(t) xinit@exp1 0 (fixed) in [-Inf, Inf] x(2) x2(t) xinit@exp1 0 (fixed) in [-Inf, Inf] Outputs: y(1) y1(t) Parameters: Value Standard Deviation p1(1) p1 0.999993 0.0117615 (estimated) in ]0, Inf] p1(2) 8.00821 0.885988 (estimated) in ]0, Inf] p1(3) 0.500319 0.0313092 (estimated) in ]0, Inf] p1(4) 0.498842 0.264806 (estimated) in ]0, Inf] p1(5) 0.501761 0.30998 (estimated) in ]0, Inf] Name: Discrete-time Narendra-Li benchmark system Sample time: 1 seconds Status: Termination condition: Change in parameters was less than the specified tolerance.. Number of iterations: 16, Number of function evaluations: 17 Estimated using Solver: FixedStepDiscrete; Search: lsqnonlin on time domain data "Narendra-Li estimation data". Fit to estimation data: 99.44% FPE: 9.23e-05, MSE: 8.927e-05 More information in model's "Report" property.
Что касается систем ввода-вывода в непрерывном времени, то также возможно использовать STEP для систем ввода-вывода в дискретном времени. Давайте сделаем это для двух различных уровней шага, 1 и 2:
figure('Name', [nlgr.Name ': step responses of estimated model']); t = (-5:50)'; step(nlgr, 'b', t, stepDataOptions('StepAmplitude',1)); line(t, step(nlgr, t, stepDataOptions('StepAmplitude',2)), 'color', 'g'); grid on; legend('0 -> 1', '0 -> 2', 'Location', 'NorthWest');
Фигура 7: Переходные характеристики, полученные с помощью оценочной модели Нарендра-Ли.
Мы заключаем этот пример, сравнивая эффективность предполагаемой модели IDNLGREY Narendra-Li с некоторыми базовыми линейными моделями. Подгонка, полученная для последних моделей, значительно ниже, чем то, что возвращается для предполагаемой модели IDNLGREY.
nk = delayest(ze); arx22 = arx(ze, [2 2 nk]); % Second order linear ARX model. arx33 = arx(ze, [3 3 nk]); % Third order linear ARX model. arx44 = arx(ze, [4 4 nk]); % Fourth order linear ARX model. oe22 = oe(ze, [2 2 nk]); % Second order linear OE model. oe33 = oe(ze, [3 3 nk]); % Third order linear OE model. oe44 = oe(ze, [4 4 nk]); % Fourth order linear OE model. clf fig = gcf; Pos = fig.Position; fig.Position = [Pos(1:2)*0.7, Pos(3)*1.3, Pos(4)*1.3]; compare(zv, nlgr, 'b', arx22, 'm-', arx33, 'm:', arx44, 'm--', ... oe22, 'g-', oe33, 'g:', oe44, 'g--');
Фигура 8: Сравнение истинного результата и моделируемых выходов ряда оцененных моделей Нарендра-Ли.
В этом примере мы использовали фиктивную систему бенчмарка Нарендра-Ли в дискретном времени, чтобы проиллюстрировать основы для выполнения моделирования IDNLGREY в дискретном времени.