getStateIndex

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

Описание

The 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 является системой в пространстве состояний с тремя именованными состояниями: position, velocity, и acceleration.

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

opspec = operspec(mdl);

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

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);

The 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