Оцените начальные состояния модели
Создайте нелинейную модель серого ящика. Модель является линейным двигателем постоянного тока с одним входом (напряжение) и два выходных параметров (угловое положение и скорость вращения). Структура модели задана dcmotor_m.m файлом.
FileName = 'dcmotor_m'; Order = [2 1 2]; Parameters = [0.24365;0.24964]; nlgr = idnlgrey(FileName,Order,Parameters); nlgr = setinit(nlgr, 'Fixed', false(2,1)); % set initial states free
Загрузите данные для оценки начального состояния.
load(fullfile(matlabroot,'toolbox','ident',... 'iddemos','data','dcmotordata')); z = iddata(y,u,0.1);
Оцените начальные состояния, таким образом, что ответ модели с помощью предполагаемых состояний, X0 и измеренный вводят u, максимально близок к измеренному выходу y.
X0 = findstates(nlgr,z,Inf);
Оцените idss
модель и симулирует его таким образом, что ответ предполагаемой модели совпадает с выходным сигналом данных об оценке максимально тесно.
Загрузка демонстрационных данных.
load iddata1 z1;
Оцените линейную модель из данных.
model = ssest(z1,2);
Оцените, что значение начальных состояний лучше всего соответствует измеренному выходу z1.y
.
x0est = findstates(model,z1,Inf);
Симулируйте модель.
opt = simOptions('InitialCondition',x0est);
sim(model,z1(:,[],:),opt);
Оцените начальные состояния модели выборочно, фиксируя первое состояние и позволяя второму состоянию модели быть оцененными.
Создайте нелинейную модель серого ящика.
FileName = 'dcmotor_m';
Order = [2 1 2];
Parameters = [0.24365;0.24964];
nlgr = idnlgrey(FileName,Order,Parameters);
Модель является линейным двигателем постоянного тока с одним входом (напряжение) и два выходных параметров (угловое положение и скорость вращения). Структура модели задана dcmotor_m.m
файл.
Загрузите данные об оценке.
load(fullfile(matlabroot,'toolbox','ident',... 'iddemos','data','dcmotordata')); z = iddata(y,u,0.1);
Содержите первое состояние, зафиксированное в нуле, и оцените значение второго.
x0spec = idpar('x0',[0;0]);
x0spec.Free(1) = false;
opt = findstatesOptions;
opt.InitialState = x0spec;
[X0,Report] = findstates(nlgr,z,Inf,opt)
X0 = 2×1
0
0.0061
Report = Status: 'Estimated by simulation error minimization' Method: 'lsqnonlin' Covariance: [2x2 double] DataUsed: [1x1 struct] Termination: [1x1 struct]
Создайте нелинейную модель серого ящика.
FileName = 'dcmotor_m';
Order = [2 1 2];
Parameters = [0.24365;0.24964];
nlgr = idnlgrey(FileName,Order,Parameters);
Модель является линейным двигателем постоянного тока с одним входом (напряжение) и два выходных параметров (угловое положение и скорость вращения). Структура модели задана dcmotor_m.m
файл.
Загрузите данные об оценке.
load(fullfile(matlabroot,'toolbox','ident',... 'iddemos','data','dcmotordata')); z = iddata(y,u,0.1);
Задайте исходное предположение для начальных состояний.
x0spec = idpar('x0',[10;10]);
x0spec.Free
верно по умолчанию
Оцените начальные состояния
opt = findstatesOptions; opt.InitialState = x0spec; x0 = findstates(nlgr,z,Inf,opt)
x0 = 2×1
0.0362
-0.1322
Создайте нелинейную модель серого ящика.
FileName = 'dcmotor_m'; Order = [2 1 2]; Parameters = [0.24365;0.24964]; nlgr = idnlgrey(FileName,Order,Parameters); set(nlgr, 'InputName','Voltage','OutputName', ... {'Angular position','Angular velocity'});
Модель является линейным двигателем постоянного тока с одним входом (напряжение) и два выходных параметров (угловое положение и скорость вращения). Структура модели задана dcmotor_m.m
файл.
Загрузите данные об оценке.
load(fullfile(matlabroot,'toolbox','ident',... 'iddemos','data','dcmotordata')); z = iddata(y,u,0.1,'Name','DC-motor',... 'InputName','Voltage','OutputName',... {'Angular position','Angular velocity'});
Создайте набор данных с тремя экспериментами.
z3 = merge(z,z,z);
Выберите эксперимент для оценки начальных состояний:
Оцените начальное состояние 1 для экспериментов 1 и 3
Оцените начальное состояние 2 для эксперимента 1
Фиксированные начальные состояния имеют нулевые значения.
x0spec = idpar('x0',zeros(2,3));
x0spec.Free(1,2) = false;
x0spec.Free(2,[2 3]) = false;
opt = findstatesOptions;
opt.InitialState = x0spec;
Оцените начальные состояния
[X0,EstInfo] = findstates(nlgr,z3,Inf,opt);
sys
— Модель Identifiedidss
возразите | idgrey
возразите | idnlarx
возразите | idnlhw
возразите | idnlgrey
объектИдентифицированная модель, начальные состояния которой оцениваются, представляла как линейное пространство состояний (idss
или idgrey
) или нелинейная модель (idnlarx
, idnlhw
, или idnlgrey
).
Data
— Данные об оценкеiddata
объектДанные об оценке в виде iddata
объект с размерностями ввода/вывода то соответствие sys
.
Если sys
линейная модель, Data
может быть частотный диапазон iddata
объект. Для более легкой интерпретации начальных условий сделайте вектор частоты из Data
будьте симметричны вокруг начала координат. Для преобразования данных временного интервала в данные частотной области использовать fft
с 'compl'
входной параметр, и гарантирует, что существует достаточное нулевое дополнение. Масштабируйте свои данные соответственно, когда вы сравните x0
между временным интервалом и частотным диапазоном. С тех пор для N - указывают fft, сигналы ввода/вывода масштабируются 1/sqrt(N)
, предполагаемый x0
вектор также масштабируется этим фактором.
Horizon
— Горизонт предсказания для вычислительного ответа модели
(значение по умолчанию) | положительное целое число между 1
и Inf
Горизонт предсказания для вычисления ответа sys
В виде положительного целого числа между 1
и Inf
. Наиболее распространенные используемые значения:
Horizon = 1
— Минимизирует ошибку предсказания с 1 шагом. 1 шаг вперед ответ предсказания sys
сравнивается с выходными сигналами в Data
определить x0
. Смотрите predict
для получения дополнительной информации.
Horizon = Inf
— Минимизирует ошибку симуляции. Различие между измеренным выходом, Data.y
, и симулированный отклик sys
к измеренным входным данным, Data.u
минимизирован. Смотрите sim
для получения дополнительной информации.
Задайте Horizon
как любое положительное целое число между 1 и Inf
, со следующими ограничениями:
Сценарий | Horizon |
---|---|
Модель непрерывного времени с данными временного интервала | 1 или Inf |
Данные частотной области непрерывного времени ( | Inf |
Модели Ошибки на выходе (тривиальный шумовой компонент):
|
Не важный Любое значение |
Нелинейный ARX (idnlarx ) | 1 или Inf |
Options
— Опции оценки для findstates
findstates
Опция установленаОпции оценки для findstates
В виде опции устанавливает созданное использование findstatesOptions
x0
— Предполагаемые начальные состоянияПредполагаемые начальные состояния модели sys
, возвращенный как вектор или матрица. Для данных мультиэксперимента, x0
матрица с одним столбцом для каждого эксперимента.
Report
— Информация об оценке начального состоянияИнформация об оценке начального состояния, возвращенная как структура. Report
содержит информацию о данных используемая, ковариация состояния и результаты любой числовой оптимизации, выполняемой, чтобы искать начальные состояния. Report
имеет следующие поля:
Сообщите о поле | Описание | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Status | Сводные данные того, как начальное состояние было оценено. | ||||||||||||||||
Method | Метод поиска используется. | ||||||||||||||||
Covariance | Ковариация оценок состояния, возвращенных как Ns-by-Ns матрица, где Ns является количеством состояний. | ||||||||||||||||
DataUsed | Атрибуты данных используются для оценки, возвращенной как структура со следующими полями.
| ||||||||||||||||
Termination | Условия завершения для итеративного поиска используются для оценки начального состояния нелинейных моделей. Структура со следующими полями:
|
Поддержка параллельных вычислений доступна для оценки с помощью lsqnonlin
метод поиска (требует Optimization Toolbox™). Чтобы включить параллельные вычисления, использовать findstatesOptions
, установите SearchMethod
к 'lsqnonlin'
, и набор SearchOptions.Advanced.UseParallel
к true
.
Например:
opt = findstatesOptions;
opt.SearchMethod = 'lsqnonlin';
opt.SearchOptions.Advanced.UseParallel = true;
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.