# Documentation

### This is machine translation

Translated by
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

# equations

Define component equations

## Syntax

```equations Expression1 == Expression2; end ```

## Description

`equations` begins the equation section in a component file; this section is terminated by an `end` keyword. It is executed throughout the simulation. The purpose of the equation section is to establish the mathematical relationships among a component's variables, parameters, inputs, outputs, time and the time derivatives of each of these entities. All members declared in the component are available by their name in the equation section.

The following syntax defines a simple equation.

```equations Expression1 == Expression2; end ```

The statement `Expression1 == Expression2` is an equation statement. It specifies continuous mathematical equality between two objects of class `Expression`. An `Expression` is any valid MATLAB® expression that does not use any of the relational operators: `==`, `<`, `>`, `<=`, `>=`, ~`=`, `&&`, `||`. `Expression` may be constructed from any of the identifiers defined in the model declaration.

The equation section may contain multiple equation statements. You can also specify conditional equations by using `if` statements as follows:

```equations if Expression ExpressionList { elseif Expression ExpressionList } else ExpressionList end end ```

 Note   The total number of equation expressions, their dimensionality, and their order must be the same for every branch of the `if-elseif-else` statement.

You can define intermediate terms and use them in equations by using `let` statements as follows:

```equations let declaration clause in expression clause end end ```

The declaration clause assigns an identifier, or set of identifiers, on the left-hand side of the equal sign (`=`) to an equation expression on the right-hand side of the equal sign:

``` LetValue = EquationExpression ```

The expression clause defines the scope of the substitution. It starts with the keyword `in`, and may contain one or more equation expressions. All the expressions assigned to the identifiers in the declaration clause are substituted into the equations in the expression clause during parsing.

 Note   The `end` keyword is required at the end of a `let-in-end` statement.

The following rules apply to the equation section:

• `EquationList` is one or more objects of class `EquationExpression`, separated by a comma, semicolon, or newline.

• `EquationExpression` can be one of:

• `Expression`

• Conditional expression (`if-elseif-else` statement)

• Let expression (`let-in-end` statement)

• `Expression` is any valid MATLAB expression. It may be formed with the following operators:

• In the equation section, `Expression` may not be formed with the following operators:

• The `colon` operator may take only constants or `end` as its operands.

• All members of the component are accessible in the equation section, but none are writable.

The following MATLAB functions can be used in the equation section. The table contains additional restrictions that pertain only to the equation section. It also indicates whether a function is discontinuous. If the function is discontinuous, it introduces a zero-crossing when used with one or more continuous operands.

All arguments that specify size or dimension must be unitless constants or unitless compile-time parameters.

Supported Functions

NameRestrictionsDiscontinuous
`ones`
`zeros`
`cat`
`horzcat`
`vertcat`
`length`
`ndims`
`numel`
`size`
`isempty`
`isequal` Possibly, if arguments are real and have the same size and commensurate units
`isinf` Yes
`isfinite` Yes
`isnan` Yes
`plus`
`uplus`
`minus`
`uminus`
`mtimes`
`times`
`mpower`
`power`
`mldivide`Nonmatrix denominator
`mrdivide`Nonmatrix denominator
`ldivide`
`rdivide`
`mod` Yes
`sum`
`prod`
`floor` Yes
`ceil` Yes
`fix` Yes
`round` Yes
`eq`Do not use with continuous variables
`ne`Do not use with continuous variables
`lt`
`gt`
`le`
`ge`
`and` Yes
`or` Yes
`logical` Yes
`sin`
`cos`
`tan`
`asin`
`acos`
`atan`
`atan2`
`log`
`log10`
`sinh`
`cosh`
`tanh`
`exp`
`sqrt`
`abs` Yes
`sign` Yes
`any` Yes
`all` Yes
`min` Yes
`max` Yes
`double`
`int32` Yes
`uint32` Yes
`repmat`
`reshape`Expanded empty dimension is not supported
`dot`
`cross`
`diff`In the two argument overload, the upper bound on the second argument is 4, due to a Simscape™ limitation

## Examples

For a component where x and y are declared as 1x1 variables, specify an equation of the form y = x2:

```equations y == x^2; end ```

For the same component, specify the following piecewise equation:

This equation, written in the Simscape language, would look like:

```equations if x >= -1 && x <= 1 y == x; else y == x^2; end end ```

If a function has multiple return values, use it in a `let` statement to access its values. For example:

```equations let [m, i] = min(a); in x == m; y == i; end end ```

#### Introduced in R2009a

Was this topic helpful?

Watch now