Сворачивание выражений оптимизирует код для минимизации вычисления промежуточных результатов на блочных выходах и сохранения таких результатов во временных буферах или переменных. Когда сворачивание выражений включено, генератор кода сворачивает (сворачивает) вычисления блоков в одно выражение вместо создания отдельных инструкций кода и объявлений хранения для каждого блока в модели. Большинство блоков Simulink поддерживают сворачивание выражений.
Сворачивание выражения повышает эффективность генерируемого кода, часто достигая результатов, которые выгодно сравниваются с оптимизированным для рук кодом. Во многих случаях целые группы вычислений модели складываются в единую, высоко оптимизированную линию кода.
Можно использовать сворачивание выражений в собственных встроенных S-функциональных блоках. Дополнительные сведения см. в разделе S-Функции, поддерживающие сворачивание выражений.

При сворачивании выражения в explfld.c , генератор кода генерирует этот код.
/* Model step function */
void exprfld_step(void)
{
/* Gain: '<Root>/Gain' incorporates:
* Inport: '<Root>/In1'
*/
exprfld_B.S1 = exprfld_P.Gain_Gain * exprfld_U.i1;
/* Gain: '<Root>/Gain1' incorporates:
* Inport: '<Root>/In2'
*/
exprfld_B.S2 = exprfld_P.Gain1_Gain * exprfld_U.i2;
/* Outport: '<Root>/Out1' incorporates:
* Product: '<Root>/Product'
*/
exprfld_Y.Out1 = exprfld_B.S1 * exprfld_B.S2;
}
Существуют отдельные операторы кода для обоих блоков усиления. Перед окончательным выводом эти операторы кода вычисляют временные результаты для блоков усиления.
Сворачивание выражения включено по умолчанию. Чтобы проверить, включено ли сворачивание выражения для существующей модели, выполните следующие действия.
Сворачивание выражений доступно, только если выбран параметр «Параметры конфигурации» > «Повторное использование хранилища сигналов», так как сворачивание выражений работает только для выражений, включающих локальные переменные. Включите параметр повторного использования хранилища сигналов.
При выборе параметра Повторное использование хранилища сигналов все параметры Включить выходы локальных блоков, Повторно использовать выходы локальных блоков и Исключить избыточные локальные переменные (сворачивание выражений) включены по умолчанию.
При сворачивании выражения генератор кода генерирует однострочное вычисление вывода, как показано в expfld.c файл. Созданные комментарии документируют параметры блока, которые отображаются в выражении.
/* Model step function */
void exprfld_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Gain: '<Root>/Gain'
* Gain: '<Root>/Gain1'
* Inport: '<Root>/In1'
* Inport: '<Root>/In2'
* Product: '<Root>/Product'
*/
exprfld_Y.Out1 =
exprfld_P.Gain_Gain *
exprfld_U.i1 *
(exprfld_P.Gain1_Gain * exprfld_U.i2);
}
Для примера сворачивания выражения в контексте более сложной модели щелкните rtwdemo_slexprfold или в командной строке введите:
rtwdemo_slexprfold
Дополнительные сведения см. в разделе Включение и повторное использование выходных данных локального блока в сгенерированном коде
Исключение лишних локальных переменных (сворачивание выражений) | Включить локальные блочные выходы | Повторное использование выходных данных локальных блоков | Повторное использование памяти сигналов