Operaciones para vectores y matrices en Stateflow
Los gráficos de Stateflow® en los modelos de Simulink® tienen una propiedad de lenguaje de acción que define la sintaxis que utiliza para calcular con vectores y matrices. Las propiedades del lenguaje de acción son:
MATLAB® como lenguaje de acción.
C como lenguaje de acción.
Para obtener más información, consulte Diferencias entre MATLAB y C como sintaxis de lenguaje de acción.
Notación de indexación
La forma de acceder a los elementos de vectores y matrices depende del lenguaje de acción del gráfico.
Los gráficos que utilizan MATLAB como lenguaje de acción usan indexación de base uno con paréntesis. Para arreglos multidimensionales, separe los índices con comas dentro de un único par de paréntesis, M(i,j).
Los gráficos que utilizan C como lenguaje de acción usan indexación de base cero con corchetes. Para arreglos multidimensionales, encierre cada índice de dimensión en su propio par de corchetes, M[i][j].
| Ejemplo | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
El primer elemento de un vector V | V(1) | V[0] |
El i-ésimo elemento de un vector V | V(i) | V[i-1] |
El elemento de la fila 4 y la columna 5 de una matriz M | M(4,5) | M[3][4] |
El elemento de la fila i y la columna j de una matriz M | M(i,j) | M[i-1][j-1] |
Operaciones binarias
Las operaciones binarias en vectores y matrices siguen las reglas de prioridad estándar (1 = mayor, 3 = menor). Cuando los operadores tienen la misma precedencia, se evalúan de izquierda a derecha.
Todos los operadores binarios realizan operaciones por elemento, con una excepción: en gráficos que utilizan MATLAB como lenguaje de acción, los operadores *, / y \ realizan operaciones de matrices en su lugar.
Operaciones de multiplicación y división (precedencia 1)
Operación | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
| Multiplicación de matrices. | Multiplicación por elemento. Para la multiplicación de matrices, utilice la operación |
| Multiplicación por elemento. | No se admite. Utilice la operación |
| División derecha de matrices. | División derecha por elemento. Para la división derecha de matrices, utilice la operación |
| División derecha por elemento. | No se admite. Utilice la operación |
| División izquierda de matrices. | No se admite. Utilice la operación |
| División izquierda por elemento. | No se admite. Utilice la operación |
En los gráficos que utilizan C como lenguaje de acción, las operaciones * y / realizan multiplicaciones y divisiones por elemento. Para realizar multiplicaciones y divisiones de matrices estándar en un gráfico de C, utilice una función de MATLAB.
Suponga que desea realizar estas operaciones en las matrices cuadradas u1 y u2:
Calcular el producto de matrices estándar
y1 = u1 * u2.Resolver la ecuación
u1 * y2 = u2.Resolver la ecuación
y3 * u1 = u2.
Para completar estos cálculos en un gráfico de C, añada una función de MATLAB que ejecute este código:
function [y1, y2, y3] = my_matrix_ops(u1, u2) %#codegen y1 = u1 * u2; % matrix multiplication y2 = u1 \ u2; % matrix division from the right y3 = u1 / u2; % matrix division from the left
En los gráficos que utilizan MATLAB como lenguaje de acción, las operaciones *, / y \ realizan multiplicaciones y divisiones de matrices estándar. Puede utilizar estas operaciones directamente en acciones de estado y de transición.
Operaciones de suma y resta (precedencia 2)
Operación | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
| Suma. | Suma. |
| Resta. | Resta. |
Operaciones de comparación (precedencia 3)
Operación | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
| Comparación, igual a. | Comparación, igual a. |
| Comparación, no igual que. | Comparación, no igual que. |
| No se admite. Utilice la operación | Comparación, no igual que. |
| No se admite. Utilice la operación | Comparación, no igual que. |
Acciones y operaciones unarias
Las operaciones unarias se aplican a un único valor y se comportan de manera diferente que las operaciones binarias. Operaciones unarias:
Tienen mayor precedencia que los operadores binarios.
Son asociativas por la derecha. En otras palabras, el gráfico las evalúa de derecha a izquierda.
Realizan las operaciones por elemento.
Operación | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
| NOT lógico. Para el NOT bit por bit, utilice la función |
Para obtener más información, consulte Operaciones bit por bit y Enable C-bit operations. |
| No se admite. Utilice la operación | NOT lógico. |
| Negativo. | Negativo. |
| No se admite. | Aumenta todos los elementos del vector o la matriz. Equivale a |
| No se admite. | Disminuye todos los elementos del vector o la matriz. Equivale a |
Operaciones de asignación
Las operaciones de asignación almacenan valores en variables. Los gráficos que utilizan C como lenguaje de acción admiten operadores de asignación compuestos que combinan operaciones aritméticas y asignación.
Operación | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
| Asignación sencilla. | Asignación sencilla. |
| No se admite. Utilice la expresión | Equivale a |
| No se admite. Utilice la expresión | Equivale a |
| No se admite. Utilice la expresión | Equivale a |
| No se admite. Utilice la expresión | Equivale a |
Asignar valores a elementos individuales de una matriz
Puede asignar un valor a una entrada individual de un vector o una matriz utilizando la sintaxis de indexación adecuada para el lenguaje de acción del gráfico.
| Ejemplo | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
Asignar el valor 10 al primer elemento del vector V. | V(1) = 10; | V[0] = 10; |
Asignar el valor 77 al elemento de la fila 2 y la columna 9 de la matriz M. | M(2,9) = 77; | M[1][8] = 77; |
Asignar valores a todos los elementos
En los gráficos que utilizan MATLAB como lenguaje de acción, puede utilizar una sola acción para especificar todos los elementos de un vector o una matriz. Por ejemplo, esta acción asigna cada elemento de la matriz de 2 por 3 A a un valor diferente:
A = [1 2 3; 4 5 6];
En los gráficos que utilizan C como lenguaje de acción, puede utilizar una expansión escalar para establecer todos los elementos de un vector o una matriz en el mismo valor. La expansión escalar convierte los datos escalares para que coincidan con las dimensiones de los datos vectoriales o matriciales. Por ejemplo, esta acción establece todos los elementos de la matriz A en 10:
A = 10;
La expansión escalar convierte automáticamente los valores escalares para que coincidan con las dimensiones de los vectores o matrices. Esto se aplica a funciones gráficas, de tablas de verdad, de MATLAB y de Simulink.
Para una función y = f(u) con argumentos formales escalares:
Salida y | Entrada u | Resultado |
|---|---|---|
| Escalar | Escalar | Sin expansión escalar. |
| Escalar | Vector o matriz | Error de discrepancia de tamaño. |
| Vector o matriz | Escalar | Cada elemento de y recibe la salida escalar |
| Vector o matriz | Vector o matriz | Operación por elemento Si |
Para funciones con múltiples salidas, se aplican las mismas reglas a menos que todas las salidas y entradas sean vectores o matrices. En este caso, el gráfico genera un error de discrepancia de tamaño y no se produce la expansión escalar.
Solo las matrices de tamaño fijo admiten expansión escalar.
Los gráficos que utilizan MATLAB como lenguaje de acción no admiten la expansión escalar.