Contenido principal

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 VV(1)V[0]
El i-ésimo elemento de un vector VV(i)V[i-1]
El elemento de la fila 4 y la columna 5 de una matriz MM(4,5)M[3][4]
El elemento de la fila i y la columna j de una matriz MM(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

a * b

Multiplicación de matrices.

Multiplicación por elemento. Para la multiplicación de matrices, utilice la operación * en una función de MATLAB.

a .* b

Multiplicación por elemento.

No se admite. Utilice la operación a * b.

a / b

División derecha de matrices.

División derecha por elemento. Para la división derecha de matrices, utilice la operación / en una función de MATLAB.

a ./ b

División derecha por elemento.

No se admite. Utilice la operación a / b.

a \ b

División izquierda de matrices.

No se admite. Utilice la operación \ en una función de MATLAB.

a .\ b

División izquierda por elemento.

No se admite. Utilice la operación .\ en una función de MATLAB.

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
Antes de llamar a la función, especifique las propiedades de los datos de entrada y salida, como se describe en Establecer propiedades de datos.

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

a + b

Suma.

Suma.

a - b

Resta.

Resta.

Operaciones de comparación (precedencia 3)

Operación

MATLAB como lenguaje de acción

C como lenguaje de acción

a == b

Comparación, igual a.

Comparación, igual a.

a ~= b

Comparación, no igual que.

Comparación, no igual que.

a != b

No se admite. Utilice la operación a ~= b.

Comparación, no igual que.

a <> b

No se admite. Utilice la operación a ~= b.

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

~a

NOT lógico. Para el NOT bit por bit, utilice la función bitcmp.

  • NOT bit por bit (valor predeterminado). Habilite esta operación seleccionando la propiedad de gráfico Enable C-bit operations.

  • NOT lógico. Habilite esta operación eliminando la propiedad de gráfico Enable C-bit operations.

Para obtener más información, consulte Operaciones bit por bit y Enable C-bit operations.

!a

No se admite. Utilice la operación ~a.

NOT lógico.

-a

Negativo.

Negativo.

a++

No se admite.

Aumenta todos los elementos del vector o la matriz. Equivale a a = a+1.

a--

No se admite.

Disminuye todos los elementos del vector o la matriz. Equivale a a = a-1.

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

a = b

Asignación sencilla.

Asignación sencilla.

a += b

No se admite. Utilice la expresión a = a+b.

Equivale a a = a+b.

a -= b

No se admite. Utilice la expresión a = a-b.

Equivale a a = a-b.

a *= b

No se admite. Utilice la expresión a = a*b.

Equivale a a = a*b.

a /= b

No se admite. Utilice la expresión a = a/b.

Equivale a a = a/b.

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 yEntrada uResultado
EscalarEscalarSin expansión escalar.
EscalarVector o matrizError de discrepancia de tamaño.
Vector o matrizEscalar

Cada elemento de y recibe la salida escalar y[i][j] = f(u).

Vector o matrizVector o matriz

Operación por elemento y[i][j] = f(u[i][j]).

Si y y u tienen tamaños diferentes, se 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.

Consulte también

Temas