Matlab Simulink: как указать определенный размер шага решателя для каждой итерации?

Я хочу установить переменный размер шага для каждого шага решателя, используя команду в S-функции, например:

dT= ...   % calculate the dT from the inputs of Block and the parameters of S-function
set_param(gcs,'...',num2str(dT));

Однако Matlab не предоставляет нам назначаемый параметр, такой как «Шаг», для указания размера шага решателя с помощью команды «set_param ()» выше. Вызываемые и назначаемые параметры для размера шага решателя — это только «MaxStep» и «MinStep». Следовательно, в Simulink допустимы и выполнимы следующие две команды:

set_param(gcs,'MaxStep',num2str(dT1));
set_param(gcs,'MinStep',num2str(dT2));

Таким образом, я пытался присвоить одинаковое значение dT1 и dT2, чтобы получить определенный размер шага, но сразу же появилось сообщение об ошибке, указывающее, что макс. шаг и мин. шаг не может быть одинаковым.

Итак, мой вопрос: как указать размер шага для решателя в сценарии S-функции?


person user3518207    schedule 17.04.2014    source источник
comment
Разве вы не можете просто использовать решатель с фиксированным шагом?   -  person Rody Oldenhuis    schedule 17.04.2014
comment
Потому что каждый размер шага отличается. Решатель с фиксированным шагом допускает одинаковый размер шага для каждого шага и может быть определен только при инициализации.   -  person user3518207    schedule 22.04.2014


Ответы (1)


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

Как правило, у вас нет реального механизма для такого контроля над определением (пошагово) размера шага, который Simulink использует во время моделирования. Номинально это то, что решатель Simulink делает за вас автоматически на основе настроек во время инициализации.

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

person Phil Goddard    schedule 17.04.2014