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 C y MATLAB como sintaxis de lenguaje de acción.
Notación de indexación
En gráficos que utilizan MATLAB como lenguaje de acción, haga referencia a los elementos de un vector o una matriz utilizando una indexación de base uno entre paréntesis. Separe los índices de diferentes dimensiones con comas.
En gráficos que utilizan C como lenguaje de acción, haga referencia a los elementos de un vector o una matriz utilizando una indexación de base cero entre corchetes. Coloque los índices de diferentes dimensiones entre sus propios corchetes.
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
Esta tabla resume la interpretación de todas las operaciones binarias sobre operandos vectoriales y matriciales según su orden de precedencia (1 = mayor, 3 = menor). Las operaciones binarias son asociativas por la izquierda, de modo que, en cualquier expresión, los operadores con la misma precedencia se evalúan de izquierda a derecha. Excepto para los operadores de multiplicación y división de matrices en gráficos que utilizan MATLAB como lenguaje de acción, todos los operadores binarios realizan las operaciones por elementos.
Operación | Precedencia | MATLAB como lenguaje de acción | C como lenguaje de acción |
---|---|---|---|
| 1 | Multiplicación de matrices. | Multiplicación por elementos. Para la multiplicación de matrices, utilice la operación |
| 1 | Multiplicación por elementos. | No se admite. Utilice la operación |
| 1 | División derecha de matrices. | División derecha por elementos. Para la división derecha de matrices, utilice la operación |
| 1 | División derecha por elementos. | No se admite. Utilice la operación |
| 1 | División izquierda de matrices. | No se admite. Utilice la operación |
| 1 | División izquierda por elementos. | No se admite. Utilice la operación |
| 2 | Suma. | Suma. |
| 2 | Resta. | Resta. |
| 3 | Comparación, igual a. | Comparación, igual a. |
| 3 | Comparación, no igual que. | Comparación, no igual que. |
| 3 | No se admite. Utilice la operación | Comparación, no igual que. |
| 3 | No se admite. Utilice la operación | Comparación, no igual que. |
Acciones y operaciones unarias
Esta tabla resume la interpretación de todas las acciones y operaciones unarias sobre operandos vectoriales y matriciales. Operaciones unarias:
Tienen mayor precedencia que los operadores binarios.
Son asociativas por la derecha, por lo que, en cualquier expresión, se evalúan de derecha a izquierda.
Realizan las operaciones por elementos.
Ejemplo | 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 Habilitar las operaciones de bits en C. |
| 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
Esta tabla resume la interpretación de las operaciones de asignación sobre operandos vectoriales y matriciales.
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 de una matriz
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 se aplica a todas las funciones gráficas, de tablas de verdad, de MATLAB y de Simulink. Suponga que define los argumentos formales de una función f
como escalares. Esta tabla describe las reglas de expansión escalar para la llamada a función y = f(u)
.
Salida y | Entrada u | Resultado |
---|---|---|
Escalar | Escalar | No se produce expansión escalar. |
Escalar | Vector o matriz | El gráfico genera un error de discrepancia de tamaño. |
Vector o matriz | Escalar | El gráfico utiliza la expansión escalar para asignar el valor de salida escalar de y[i][j] = f(u) |
Vector o matriz | Vector o matriz | El gráfico utiliza la expansión escalar para calcular un valor de salida para cada elemento de y[i][j] = f(u[i][j]) y y u no tienen el mismo tamaño, el gráfico genera un error de discrepancia de tamaño. |
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.
Realizar aritmética de matrices utilizando funciones de MATLAB
En los gráficos que utilizan C como lenguaje de acción, las operaciones *
y /
realizan multiplicaciones y divisiones por elementos. 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.