Contenu principal

Opérations pour les vecteurs et matrices dans Stateflow

Les diagrammes Stateflow® des modèles Simulink® possèdent une propriété de langage d’action qui définit la syntaxe que vous utilisez pour calculer avec des vecteurs et des matrices. Les propriétés de langage d’action sont les suivantes :

  • MATLAB® comme langage d’action.

  • C comme langage d’action.

Pour plus d’informations, veuillez consulter Differences Between MATLAB and C as Action Language Syntax.

Notation d’indexation

Dans les diagrammes utilisant MATLAB comme langage d’action, faites référence aux éléments d’un vecteur ou d’une matrice en utilisant l’indexation de base 1 délimitée par des parenthèses. Séparez les indices pour les dimensions différentes avec des virgules.

Dans les diagrammes utilisant le C comme langage d’action, faites référence aux éléments d’un vecteur ou d’une matrice en utilisant l’indexation de base 0 délimitée par des crochets. Placez les indices pour les dimensions différentes entre leurs propres crochets.

Exemple

MATLAB comme langage d’action

C comme langage d’action.
Le premier élément d’un vecteur VV(1)V[0]
Le ie élément d’un vecteur VV(i)V[i-1]
L’élément dans la ligne 4 et colonne 5 d’une matrice MM(4,5)M[3][4]
L’élément dans la ligne i et colonne j d’une matrice MM(i,j)M[i-1][j-1]

Opérations binaires

Ce tableau récapitule l’interprétation de toutes les opérations binaires dans les opérandes de vecteur et de matrice en fonction de leur ordre de priorité (1 = le plus élevé, 3 = le plus faible). Les opérations binaires sont associatives à gauche. De ce fait, dans toute expression, les opérateurs présentant la même priorité sont évalués de gauche à droite. Sauf pour les opérateurs de multiplication et de division matricielles dans les diagrammes utilisant MATLAB comme langage d’action, tous les opérateurs binaires effectuent des opérations élément par élément.

Opération

Priorité

MATLAB comme langage d’action

C comme langage d’action.

a * b

1

Multiplication matricielle.

Multiplication élément par élément. Pour la multiplication matricielle, utilisez l’opération * dans une fonction MATLAB. Consultez Appliquer des opérations arithmétiques à l’aide de fonctions MATLAB.

a .* b

1

Multiplication élément par élément.

Non pris en charge. Utilisez l’opération a * b.

a / b

1

Division à droite de matrice.

Division à droite élément par élément. Pour la division à droite de matrice, utilisez l’opération / dans une fonction MATLAB. Consultez Appliquer des opérations arithmétiques à l’aide de fonctions MATLAB.

a ./ b

1

Division à droite élément par élément.

Non pris en charge. Utilisez l’opération a / b.

a \ b

1

Division à gauche de matrice.

Non pris en charge. Utilisez l’opération \ dans une fonction MATLAB. Consultez Appliquer des opérations arithmétiques à l’aide de fonctions MATLAB.

a .\ b

1

Division à gauche élément par élément.

Non pris en charge. Utilisez l’opération .\ dans une fonction MATLAB. Consultez Appliquer des opérations arithmétiques à l’aide de fonctions MATLAB.

a + b

2

Addition.

Addition.

a - b

2

Soustraction.

Soustraction.

a == b

3

Comparaison, égal à.

Comparaison, égal à.

a ~= b

3

Comparaison, différent de.

Comparaison, différent de.

a != b

3

Non pris en charge. Utilisez l’opération a ~= b.

Comparaison, différent de.

a <> b

3

Non pris en charge. Utilisez l’opération a ~= b.

Comparaison, différent de.

Opérations et actions unitaires

Ce tableau récapitule l’interprétation de l’ensemble des opérations et actions unitaires des opérandes de vecteur et de matrice. Opérations unitaires :

  • Sont prioritaires par rapport aux opérateurs binaires.

  • Sont associatives à droite. De ce fait, dans toute expression, elles sont évaluées de droite à gauche.

  • Effectuent des opérations élément par élément.

Exemple

MATLAB comme langage d’action

C comme langage d’action.

~a

Opérateur logique NOT. Pour l’opérateur binaire NOT, utilisez la fonction bitcmp.

  • Opérateur binaire NOT (par défaut). Activez cette opération en sélectionnant la propriété de diagramme Enable C-bit operations.

  • Opérateur logique NOT. Activez cette opération en désactivant la propriété de diagramme Enable C-bit operations.

Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations.

!a

Non pris en charge. Utilisez l’opération ~a.

Opérateur logique NOT.

-a

Négatif.

Négatif.

a++

Non pris en charge.

Incrémentez tous les éléments du vecteur ou de la matrice. Équivaut à a = a+1.

a--

Non pris en charge.

Décrémentez tous les éléments du vecteur ou de la matrice. Équivaut à a = a-1.

Opérations d’affectation

Ce tableau récapitule l’interprétation des opérations d’affectation dans les opérandes de vecteur et de matrice.

Opération

MATLAB comme langage d’action

C comme langage d’action.

a = b

Affectation simple.

Affectation simple.

a += b

Non pris en charge. Utilisez l’expression a = a+b.

Équivaut à a = a+b.

a -= b

Non pris en charge. Utilisez l’expression a = a-b.

Équivaut à a = a-b.

a *= b

Non pris en charge. Utilisez l’expression a = a*b.

Équivaut à a = a*b.

a /= b

Non pris en charge. Utilisez l’expression a = a/b.

Équivaut à a = a/b.

Attribuer des valeurs à des éléments individuels d’une matrice

Vous pouvez attribuer une valeur à une entrée individuelle de vecteur ou de matrice en utilisant la syntaxe d’indexation appropriée au langage d’action du diagramme.

Exemple

MATLAB comme langage d’action

C comme langage d’action.
Attribuez la valeur 10 au premier élément du vecteur V.V(1) = 10;V[0] = 10;
Attribuez la valeur 77 à l’élément de la ligne 2 et colonne 9 de la matrice M.M(2,9) = 77;M[1][8] = 77;

Attribuer des valeurs à tous les éléments d’une matrice

Dans les diagrammes qui utilisent MATLAB comme langage d’action, vous pouvez utiliser une action unique pour spécifier tous les éléments d’un vecteur ou d’une matrice. Par exemple, cette action attribue chaque élément de la matrice A 2 par 3 à une valeur différente :

A = [1 2 3; 4 5 6];

Dans les diagrammes qui utilisent le C comme langage d’action, vous pouvez utiliser l’expansion scalaire pour définir tous les éléments d’un vecteur ou d’une matrice sur la même valeur. L’expansion scalaire convertit les données scalaires pour qu’elles correspondent aux dimensions des données vectorielles ou matricielles. Par exemple, cette action définit tous les éléments de la matrice A sur 10 :

A = 10;

L’expansion scalaire s’applique à toutes les fonctions graphiques, des tables de vérité, MATLAB et Simulink. Supposons que vous définissez les arguments formels d’une fonction f comme scalaires. Ce tableau décrit les règles de l’expansion scalaire pour l’appel de fonction y = f(u).

Sortie yEntrée uRésultat
ScalaireScalaireAucune expansion scalaire ne se produit.
ScalaireVecteur ou matriceLe diagramme génère une erreur de désadaptation de taille.
Vecteur ou matriceScalaire

Le diagramme utilise l’expansion scalaire pour attribuer la valeur de sortie scalaire de f(u) à chaque élément de y :

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

Vecteur ou matriceVecteur ou matrice

Le diagramme utilise l’expansion scalaire pour calculer une valeur de sortie pour chaque élément de u et l’attribuer à l’élément correspondant de y :

y[i][j] = f(u[i][j])
Si y et u ne sont pas de même taille, le diagramme génère une erreur de désadaptation de taille.

Pour les fonctions ayant plusieurs sorties, les mêmes règles s’appliquent sauf si les sorties et les entrées sont toutes des vecteurs ou des matrices. Dans ce cas, le diagramme génère une erreur de désadaptation de taille et l’expansion scalaire ne se produit pas.

Seules les matrices de taille fixe supportent l’expansion scalaire.

Les diagrammes utilisant MATLAB comme langage d’action ne supportent pas l’expansion scalaire.

Appliquer des opérations arithmétiques à l’aide de fonctions MATLAB

Dans les diagrammes utilisant le C comme langage d’action, les opérations * et / effectuent des multiplications et divisions élément par élément. Pour effectuer des multiplications et divisions matricielles standard dans un diagramme en C, utilisez la fonction MATLAB.

Supposons que vous souhaitez effectuer ces opérations sur des matrices carrées u1 et u2 :

  • Calculez le produit matriciel standard y1 = u1 * u2.

  • Résolvez l’équation u1 * y2 = u2.

  • Résolvez l’équation y3 * u1 = u2.

Pour terminer ces calculs dans un diagramme en C, ajoutez une fonction MATLAB qui exécute ce code :

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
Avant d’appeler la fonction, spécifiez les propriétés pour les données d’entrée et de sortie, tel que décrit dans Set Data Properties.

Dans les diagrammes utilisant MATLAB comme langage d’action, les opérations *, / et \ effectuent des multiplications et divisions matricielles standard. Vous pouvez utiliser ces opérations directement dans les actions d’état et de transition.

Voir aussi

Rubriques