MATLAB Function

Include MATLAB code in models that generate embeddable C code


User-Defined Functions


With a MATLAB Function block, you can write a MATLAB® function for use in a Simulink® model. The MATLAB function you create executes for simulation and generates code for a Simulink Coder™ target. If you are new to the Simulink and MATLAB products, see What Is a MATLAB Function Block? and Create Model That Uses MATLAB Function Block for an overview.

Double-clicking the MATLAB Function block opens its editor, where you write the MATLAB function, as in this example:

To learn more about this editor, see MATLAB Function Block Editor.

You specify input and output data to the MATLAB Function block in the function header as arguments and return values. The argument and return values of the preceding example function correspond to the inputs and outputs of the block in the modelmodel:

You can also define data, input triggers, and function call outputs using the Ports and Data Manager, which you access from the MATLAB Function Block Editor by selecting Edit Data. See Ports and Data Manager.

The MATLAB Function block generates efficient embeddable code based on an analysis that determines the size, class, and complexity of each variable. This analysis imposes the following restrictions:

In addition to language restrictions, the MATLAB Function block supports a subset of the functions available in MATLAB. A list of supported functions is given in Functions and Objects Supported for C and C++ Code Generation — Alphabetical List. These functions include functions in common categories, such as:

See Functions and Objects Supported for C and C++ Code Generation — Category List for a complete list of function categories.

    Note   Although the code for this block attempts to produce exactly the same results as MATLAB, differences might occur due to rounding errors. These numerical differences, which might be a few eps initially, can magnify after repeated operations. Reliance on the behavior of nan is not recommended. Different C compilers can yield different results for the same computation.

To support visualization of data, the MATLAB Function block supports calls to MATLAB functions for simulation only. See Call MATLAB Functions to understand some of the limitations of this capability, and how it integrates with code analysis for this block. If these function calls do not directly affect any of the Simulink inputs or outputs, the calls do not appear in Simulink Coder generated code.

In the Ports and Data Manager, you can declare a block input to be a Simulink parameter instead of a port. The MATLAB Function block also supports inheritance of types and size for inputs, outputs, and parameters. You can also specify these properties explicitly. See Type Function Arguments, Size Function Arguments, and Add Parameter Arguments for descriptions of variables that you use in MATLAB Function blocks.

Recursive calls are not allowed in MATLAB Function blocks.

Data Type Support

The MATLAB Function block accepts inputs of any type that Simulink supports, including fixed-point and enumerated types. For more information, see Data Types Supported by Simulink.

Data types supported by MATLAB but not supported by Simulink may not be passed between the Simulink model and the function within the MATLAB Function block. These types may be used within the MATLAB Function block.

For more information on fixed-point support for this block, refer to Fixed-Point Data Types with MATLAB Function Block and MATLAB Function Block with Data Type Override.

The MATLAB Function block supports Simulink frames. For more information, see Sample- and Frame-Based Concepts.

Parameters and Dialog Box

The block dialog box for a MATLAB Function block is identical to the dialog box for a Subsystem block. See the reference page for the Subsystem, Atomic Subsystem, Nonvirtual Subsystem, CodeReuse Subsystem blocks for information about each block parameter.


The following models shows how to use the MATLAB Function block:

  • sldemo_radar_eml

  • sldemo_eml_galaxy


Direct Feedthrough


Sample Time

Specified in the Sample time parameter

Scalar Expansion






Zero-Crossing Detection


Was this topic helpful?