exponenta event banner

getStateIndex

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

Описание

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

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

пример

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

пример

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

Примеры

свернуть все

Откройте модель Simulink.

mdl = 'scdindex1';
open_system(mdl)

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

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';
open_system(mdl)

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

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';
open_system(mdl)

Блок system1 представляет собой систему state-space с тремя названными состояниями: 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';
open_system(mdl)

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

opspec = operspec(mdl);

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

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

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

    18     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 объект или объект операционной точки.

Путь блока или имя состояния, соответствующее спецификации состояния в States имущество op, указанный как символьный вектор или строка, содержащая одно из следующих значений:

  • Путь к блоку в модели Simulink, содержащему неименованные состояния.

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

Для просмотра всех состояний, имеющих спецификации состояния, просмотрите States имущество op.

op.States

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

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

свернуть все

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

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

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

Представлен в R2017a