В этом разделе описывается, как программное обеспечение оценивает выходные данные устройств оценки нелинейности и использует эти выходные данные для вычисления отклика нелинейной модели ARX.
Для оценки прогнозируемого выхода нелинейности для определенного значения регрессора x необходимо сначала извлечь нелинейность F и регрессоры из модели:
F = m.Nonlinearity; x = getreg(m,'all',data) % computes regressors
Оценка F (x):
y = evaluate(F,x)
где x - вектор строки значений-регрессоров.
Можно также оценить прогнозируемые выходные значения в несколько моментов времени, вычисляя F для нескольких векторов-регрессоров одновременно:
y = evaluate(F,[x1;x2;x3])
Этот пример показывает, как программное обеспечение вычисляет моделируемый и прогнозируемый выходной сигнал нелинейной модели ARX в результате оценки выходного сигнала его оценщика нелинейности для заданных значений регрессора.
Оценка и изучение нелинейной модели ARX
Оценка нелинейной модели ARX с нелинейностью сигмоидной сети.
load twotankdata estData = iddata(y,u,0.2,'Tstart',0); M = nlarx(estData,[1 1 0],'sig');
Проверьте свойства модели и результат оценки.
present(M)
Nonlinear ARX model with 1 output and 1 input
Inputs: u1
Outputs: y1
Regressors:
Linear regressors in variables y1, u1
Output function: Sigmoid Network with 10 units
Sample time: 0.2 seconds
Status:
Estimated using NLARX on time domain data "estData".
Fit to estimation data: 96.31% (prediction focus)
FPE: 4.804e-05, MSE: 4.666e-05
Эта команда предоставляет информацию о входных и выходных переменных, регрессорах и оценщике нелинейности.
Проверьте устройство оценки нелинейности.
NL = M.Nonlinearity; % equivalent to M.nl class(NL) % nonlinearity class
ans = 'sigmoidnet'
display(NL) % equivalent to NLNL =
Sigmoid Network
Inputs: y1(t-1), u1(t)
Output: y1
Nonlinear Function: Sigmoid network with 10 units.
Linear Function: initialized to [-0.161 -0.105]
Output Offset: initialized to 0.271
Input: [1x1 idpack.Channel]
Output: [1x1 idpack.Channel]
LinearFcn: [1x1 nlident.internal.UseProjectedLinearFcn]
NonlinearFcn: [1x1 nlident.internal.RidgenetFcn]
Offset: [1x1 nlident.internal.ChooseableOffset]
Проверьте значения параметров сигмоидной сети.
NL.Parameters;
Прогнозирование выходных данных
Выходные данные модели:
y1 (t) = f (y1 (t-1), u1 (t))
где f - функция сигмоидной сети. Регрессоры модели y1 (t-1) и u1 (t) являются входами в блок оценки нелинейности. Время t - дискретная переменная, представляющая kT, гдеk = 0, 1, ... , и T - интервал выборки. В этом примере: T=0.2 второй.
Уравнение прогнозирования выходного сигнала:
yp (t) = f (y1_meas (t-1), u1 _ meas (t))
где yp (t) - прогнозируемое значение отклика в момент времени t. y1_meas (t-1) и u1_meas (t) - измеренные выходные и входные значения в моменты времени t-1 и t соответственно.
Вычисление прогнозируемого ответа включает в себя:
Вычисление значений регрессора из данных ввода-вывода.
Оценка нелинейности для заданных значений регрессора.
Для вычисления прогнозируемого значения отклика с использованием исходных условий и токового ввода:
Оценка модели на основе данных и получение нелинейных параметров.
load twotankdata estData = iddata(y,u,0.2,'Tstart',0); M = nlarx(estData,[1 1 0],'sig'); NL = M.Nonlinearity;
Укажите нулевые начальные состояния.
x0 = 0;
Модель имеет одно состояние, поскольку существует только один задержанный срок y1(t-1). Число состояний равно sum(getDelayInfo(M)).
Вычислите прогнозируемый выходной сигнал в момент времени t = 0.
RegValue = [0,estData.u(1)]; % input to nonlinear function f
yp_0 = evaluate(NL,RegValue);RegValue - вектор регрессоров при t=0 . Прогнозируемый выход - yp (t = 0) = f (y1_meas (t = -1), u1 _ meas (t = 0)). В терминах переменных MATLAB этот вывод равенf(0,estData.u(1)), где
y1_meas (t = 0) - измеренное выходное значение приt=0, которая должна estData.y(1).
u1_meas (t = 1) - вторая выборка входных данныхestData.u(2).
Выполнение прогнозирования на один шаг вперед для всех значений времени, для которых доступны данные.
RegMat = getreg(M,[],estData,x0); yp = evaluate(NL,RegMat.Variables);
Этот код получает матрицу регрессоров RegMat для всех выборок времени с использованием getreg. RegMat имеет столько строк, сколько есть отсчетов времени, и столько столбцов, сколько есть регрессоров в модели - два, в этом примере.
Эти шаги эквивалентны прогнозируемому ответу, вычисленному за один шаг с использованием прогнозирования:
yp_direct = predict(M,estData,1,'InitialState',x0); % compare t = estData.SamplingInstants; plot(t,yp, t,yp_direct.OutputData,'.')

Выходные данные модели:
y1 (t) = f (y1 (t-1), u1 (t))
где f - функция сигмоидной сети. Регрессоры модели y1 (t-1) и u1 (t) являются входами в блок оценки нелинейности. Время t - это дискретная переменная, представляющая kT, где k = 0, 1,.. и T - интервал выборки. В этом примере Т = 0,2 секунды.
Моделируемый выходной сигнал:
ys (t) = f (ys (t-1), u1 _ meas (t))
где ys (t) - смоделированное значение отклика в момент времени t. Уравнение моделирования совпадает с уравнением прогнозирования, за исключением того, что предыдущее выходное значениеys(t-1) результаты моделирования на предыдущем шаге времени, а не измеренное выходное значение.
Вычисление моделируемого ответа включает в себя:
Вычисление значений регрессора из данных ввода-вывода с использованием смоделированных выходных значений.
Оценка нелинейности для заданных значений регрессора.
Для вычисления моделируемого значения отклика с использованием исходных условий и токового ввода:
Оценка модели на основе данных и получение нелинейных параметров.
load twotankdata estData = iddata(y,u,0.2,'Tstart',0); M = nlarx(estData,[1 1 0],'sig'); NL = M.Nonlinearity;
Укажите нулевые начальные состояния.
x0 = 0;
Модель имеет одно состояние, поскольку существует только один задержанный член y1 (t-1). Число состояний равно sum(getDelayInfo(M)).
Вычислите смоделированный выходной сигнал в момент времени t = 0, ys (t = 0).
RegValue = [0,estData.u(1)]; ys_0 = evaluate(NL,RegValue);
RegValue - вектор регрессоров при t = 0. ys (t = 0) = f (y1 (t = -1), u1 _ meas (t = 0)). В терминах переменных MATLAB этот вывод равенf(0,estData.u(1)), где
y1 (t = -1) - начальное состояниеx0 (=0).
u1_meas (t = 0) - значение входного значения при t = 0, которое является первой выборкой входных данныхestData.u(1).
Вычислите смоделированный выходной сигнал в момент времени t = 1, ys (t = 1).
RegValue = [ys_0,estData.u(2)]; ys_1 = evaluate(NL,RegValue);
Смоделированный выход ys (t = 1) = f (ys (t = 0), u1 _ meas (t = 1)). В терминах переменных MATLAB этот вывод равенf(ys_0,estData.u(2)), где
ys (t = 0) - смоделированное значение выходного сигнала при t = 0.
u1_meas (t = 1) - вторая выборка входных данных estData.u (2).
Вычислите смоделированный выходной сигнал в момент времени t = 2.
RegValue = [ys_1,estData.u(3)]; ys_2 = evaluate(NL,RegValue);
В отличие от прогноза выходных данных, нельзя использовать getreg для вычисления значений регрессора для всех значений времени. Необходимо вычислять значения регрессоров в каждой выборке времени отдельно, поскольку выходные выборки, необходимые для формирования вектора регрессора, доступны итеративно, по одной выборке за раз.
Эти шаги эквивалентны смоделированному ответу, вычисленному за один шаг с использованием sim(idnlarx):
ys = sim(M,estData,x0);
В этих примерах выполняется низкоуровневое вычисление нелинейного отклика для sigmoidnet функция сети:
((x-r) Qbn + cn) + d
где f - сигмоидная функция, заданная следующим уравнением:
1e-z + 1
В F(x), вход в сигмоидальную функцию x-r. x является значением регрессора и r - среднее значение регрессора, вычисленное из данных оценки. , и - сетевые параметры, хранящиеся в свойстве модели M.nl.par, где M является idnlarx объект.
Вычислите выходное значение в момент времени t = 1, когда значения регрессора равныx=[estData.y(1),estData.u(2)]:
Оценка модели на основе выборочных данных.
load twotankdata estData = iddata(y,u,0.2,'Tstart',0); M = nlarx(estData,[1 1 0],'sig'); NL = M.Nonlinearity;
Назначение значений параметрам в выражении для F(x).
x = [estData.y(1),estData.u(2)]; % regressor values at t=1 r = NL.Parameters.RegressorMean; P = NL.Parameters.LinearSubspace; L = NL.Parameters.LinearCoef; d = NL.Parameters.OutputOffset; Q = NL.Parameters.NonLinearSubspace; aVec = NL.Parameters.OutputCoef; % [a_1; a_2; ...] cVec = NL.Parameters.Translation; % [c_1; c_2; ...] bMat = NL.Parameters.Dilation; % [b_1; b_2; ...]
Вычислите линейную часть отклика (плюс смещение).
yLinear = (x-r)*P*L+d;
Вычислите нелинейную часть ответа.
f = @(z)1/(exp(-z)+1); % anonymous function for sigmoid unit yNonlinear = 0; for k = 1:length(aVec) fInput = (x-r)*Q* bMat(:,k)+cVec(k); yNonlinear = yNonlinear+aVec(k)*f(fInput); end
Вычислить общий отклик y = F(x) = yLinear + yNonlinear.
y = yLinear + yNonlinear;
y равно evaluate(NL,x).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.