Main Content

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 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

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

a * b

1

Multiplicación de matrices.

Multiplicación por elementos. Para la multiplicación de matrices, utilice la operación * en una función de MATLAB. Consulte Realizar aritmética de matrices utilizando funciones de MATLAB.

a .* b

1

Multiplicación por elementos.

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

a / b

1

División derecha de matrices.

División derecha por elementos. Para la división derecha de matrices, utilice la operación / en una función de MATLAB. Consulte Realizar aritmética de matrices utilizando funciones de MATLAB.

a ./ b

1

División derecha por elementos.

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

a \ b

1

División izquierda de matrices.

No se admite. Utilice la operación \ en una función de MATLAB. Consulte Realizar aritmética de matrices utilizando funciones de MATLAB.

a .\ b

1

División izquierda por elementos.

No se admite. Utilice la operación .\ en una función de MATLAB. Consulte Realizar aritmética de matrices utilizando funciones de MATLAB.

a + b

2

Suma.

Suma.

a - b

2

Resta.

Resta.

a == b

3

Comparación, igual a.

Comparación, igual a.

a ~= b

3

Comparación, no igual que.

Comparación, no igual que.

a != b

3

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

Comparación, no igual que.

a <> b

3

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

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

~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 (Habilitar operaciones de bit C).

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

Para obtener más información, consulte Operaciones bit a bit y Habilitar las operaciones de bits en C.

!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

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

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 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 yEntrada uResultado
EscalarEscalarNo se produce expansión escalar.
EscalarVector o matrizEl gráfico genera un error de discrepancia de tamaño.
Vector o matrizEscalar

El gráfico utiliza la expansión escalar para asignar el valor de salida escalar de f(u) a cada elemento de y:

y[i][j] = f(u)

Vector o matrizVector o matriz

El gráfico utiliza la expansión escalar para calcular un valor de salida para cada elemento de u y asignarlo al elemento correspondiente de y:

y[i][j] = f(u[i][j])
Si 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
Antes de llamar a la función, especifique las propiedades de los datos de entrada y salida, como se describe en Set Data Properties.

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.

Temas relacionados