getStateIndex

Получите индекс элемента состояния спецификации рабочей точки или рабочей точки

Свойство States спецификации рабочей точки является массивом, который содержит спецификации обрезки для каждого образцового состояния. При определении функции отображения для индивидуально настраиваемой обрезки моделей Simulink® getStateIndex позволяет вам получить индекс спецификации состояния на основе соответствующего блока path или утвердить имя.

При обрезке моделей Simulink с помощью основанного на оптимизации поиска некоторые приложения требуют дополнительной гибкости в определении параметров поиска оптимизации. Для таких систем можно задать пользовательские ограничения и пользовательскую целевую функцию. Для сложных моделей можно задать отображение, которое выбирает подмножество образцовых состояний, входных параметров и выходных параметров, чтобы передать пользовательскому ограничению и целевым функциям. Для получения дополнительной информации смотрите, Вычисляют Рабочие точки Используя Пользовательские Ограничения и Целевые функции.

Синтаксис

index = getStateIndex(op,name)
index = getStateIndex(op,name,element)

Описание

пример

index = getStateIndex(op,name) возвращает индекс спецификации состояния, которая соответствует name в свойстве States спецификации рабочей точки op.

пример

index = getStateIndex(op,name,element) возвращает индекс заданного element в спецификации состояния для блока с несколькими состояниями.

Примеры

свернуть все

Открытая модель Simulink.

mdl = 'scdindex1';
mdlpath = fullfile(matlabroot,'examples','slcontrol',mdl);
open_system(mdlpath)

Создайте спецификацию рабочей точки для модели.

opspec = operspec(mdl);

opspec содержит массив спецификаций состояния для модели.

opspec.States
(1.) scdindex1/system1
	 spec:  dx = 0,  initial guess: 0
	 spec:  dx = 0,  initial guess: 0
	 spec:  dx = 0,  initial guess: 0
(2.) scdindex1/system2
	 spec:  dx = 0,  initial guess: 0

Получите индекс спецификации состояния, которая соответствует блоку system2.

index2 = getStateIndex(opspec,'scdindex1/system2')
index2 =

     2     1

index2(1) является индексом объекта спецификации состояния для system2 в opspec.States. Поскольку этот блок имеет одно состояние, index2 имеет одну строку, и index2(2) является 1.

Если блок имеет несколько состояний, можно получить индексы всех состояний в соответствующей спецификации состояния.

index1 = getStateIndex(opspec,'scdindex1/system1')
index1 =

     1     1
     1     2
     1     3

Каждая строка index1 содержит индекс одного состояния в блоке system2. Для каждой строки первый столбец содержит индекс спецификации состояния в opspec.States. Второй столбец содержит индекс каждого элемента состояния в спецификации.

Открытая модель Simulink.

mdl = 'scdindex1';
mdlpath = fullfile(matlabroot,'examples','slcontrol',mdl);
open_system(mdlpath)

Создайте спецификацию рабочей точки для модели.

opspec = operspec(mdl);

Если блок имеет несколько состояний, можно получить индекс определенного состояния в соответствующей спецификации состояния путем определения индекса элемента. Например, получите индекс для второго состояния в спецификации для блока system1.

index1 = getStateIndex(opspec,'scdindex1/system1',2)
index1 =

     1     2

Можно также получить индексы подмножества состояний блока путем определения индекса элемента как вектора. Например, получите индексы для первых и третьих состояний в спецификации для блока system1.

index2 = getStateIndex(opspec,'scdindex1/system1',[1 3])
index2 =

     1     1
     1     3

Открытая модель Simulink.

mdl = 'scdindex2';
mdlpath = fullfile(matlabroot,'examples','slcontrol',mdl);
open_system(mdlpath)

Блок system1 является системой пространства состояний с тремя именованными состояниями: position, velocity и acceleration.

Создайте спецификацию рабочей точки для модели.

opspec = operspec(mdl);

Свойство States объекта спецификации рабочей точки содержит одну запись для каждого именованного состояния в system1.

opspec.States
(1.) position
	 spec:  dx = 0,  initial guess: 0
(2.) velocity
	 spec:  dx = 0,  initial guess: 0
(3.) acceleration
	 spec:  dx = 0,  initial guess: 0

Чтобы получить индекс спецификации состояния, которая соответствует именованному состоянию в блоке, задайте имя состояния.

index1 = getStateIndex(opspec,'velocity')
index1 =

     2     1

Первый столбец index1 содержит индекс соответствующей спецификации состояния в свойстве opspec.States. Вторым столбцом является 1 для именованного состояния.

Открытая модель.

mdl = 'scdTanks_simscape';
mdlpath = fullfile(matlabroot,'examples','slcontrol',mdl);
open_system(mdlpath)

Создайте спецификацию рабочей точки для модели.

opspec = operspec(mdl);

Свойство States объекта спецификации рабочей точки содержит одну спецификацию состояния для каждого состояния Simscape в модели.

Чтобы получить индекс спецификации, которая соответствует состоянию Simscape, задайте имя состояния. Например, получите индекс состояния давления Tank3.

idx = getStateIndex(opspec,'scdTanks_simscape.Tank3.pressure')
idx =

    21     1

Первый столбец idx содержит индекс соответствующей спецификации состояния в opspec.States. Вторым столбцом является 1 для состояния Simscape.

Просмотрите спецификацию в opspec.States для этого состояния.

opspec.States(idx(1))
(1.) scdTanks_simscape.Tank3.pressure
	 spec:  dx = 0,  initial guess: 0

Входные параметры

свернуть все

Спецификация рабочей точки или рабочая точка для модели Simulink, заданной как объект operspec или объект рабочей точки.

Блок path или имя состояния, которое соответствует спецификации состояния в свойстве States op, заданного как вектор символов, или представляет в виде строки, который содержит одно из следующего:

  • Блок path блока в модели Simulink, которая содержит состояния без имени.

  • Имя именованного состояния в блоке Simulink или Simscape™.

Чтобы видеть все состояния, которые имеют спецификации состояния, просмотрите свойство States op.

op.States

Индекс элемента состояния, заданный как положительное целое число, меньше чем или равное количеству элементов состояния в блоке или состоянии, заданном name или вектором таких целых чисел. По умолчанию, если вы не задаете element, getStateIndex возвращает индексы всех элементов в выбранной спецификации состояния. Для примера смотрите, Получают Индекс Указанного Элемента состояния Спецификации Рабочей точки.

Выходные аргументы

свернуть все

Индекс состояния, возвращенный как вектор - строка с 2 элементами, когда element является целым числом или массивом с 2 столбцами, когда element является вектором. Каждая строка index содержит индекс для одного образцового состояния.

Первый столбец index содержит индекс соответствующей спецификации состояния в свойстве States op. Второй столбец содержит индекс элемента в спецификации состояния.

Используя index, можно задать фрагмент состояния пользовательского отображения для индивидуально настраиваемой обрезки моделей Simulink. Для получения дополнительной информации смотрите свойство CustomMappingFcn operspec.

Введенный в R2017a