Эта тема описывает, как программное обеспечение оценивает вывод средств оценки нелинейности и использует этот вывод, чтобы вычислить ответ нелинейной модели 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)
M = Nonlinear ARX model with 1 output and 1 input Inputs: u1 Outputs: y1 Standard regressors corresponding to the orders: na = 1, nb = 1, nk = 0 No custom regressor Nonlinear regressors: y1(t-1) u1(t) Nonlinearity: sigmoidnet with 10 units Sample time: 0.2 seconds Status: Termination condition: Maximum number of iterations reached.. Number of iterations: 20, Number of function evaluations: 243 Estimated using NLARX on time domain data "estData". Fit to estimation data: 96.31% (prediction focus) FPE: 4.804e-05, MSE: 4.666e-05 More information in model's "Report" property.
Эта команда предоставляет информацию о переменных ввода и вывода, регрессорах и средстве оценки нелинейности.
Осмотрите средство оценки нелинейности.
NL = M.Nonlinearity; % equivalent to M.nl class(NL) % nonlinearity class
ans = 'sigmoidnet'
display(NL) % equivalent to NL
Sigmoid Network: NumberOfUnits: 10 LinearTerm: 'on' Parameters: [1x1 struct]
Осмотрите сигмоидальные сетевые значения параметров.
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);
Этот код получает матрицу регрессоров RegMat
для все время выборок с помощью getreg
. RegMat
имеет столько же строк, сколько существуют выборки времени, и столько же столбцов, сколько существуют регрессоры в модели - два в этом примере.
Эти шаги эквивалентны предсказанному ответу, вычисленному в одном использовании шага, предскажите:
yp = predict(M,estData,1,'InitialState',x0);
Образцовый вывод:
y1 (t) =f (y1 (t-1), u1 (t))
где f является сигмоидальной сетевой функцией. Образцовые регрессоры y1 (t-1) и u1 (t) являются входными параметрами к средству оценки нелинейности. Время t является дискретной переменной, представляющей kT, где k = 0, 1.., и T является интервалом выборки. В этом примере, второй 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
:
где f является сигмоидальной функцией, данной следующим уравнением:
В 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.