Operationen für Vektoren und Matrizen in Stateflow
Stateflow®-Diagramme in Simulink®-Modellen verfügen über eine Aktionsspracheneigenschaft, die die Syntax definiert, die Sie für Berechnungen mit Vektoren und Matrizen verwenden. Die Aktionsspracheneigenschaften sind:
MATLAB® als Aktionssprache.
C als Aktionssprache.
Weitere Informationen finden Sie unter Unterschiede zwischen MATLAB und C als Aktionssprache-Syntax.
Indizierungsnotation
In Diagrammen, die MATLAB als Aktionssprache verwenden, beziehen Sie sich auf Elemente eines Vektors oder einer Matrix, indem Sie eine durch Klammern begrenzte, bei 1 beginnende Indizierung verwenden. Trennen Sie die Indizes für die verschiedenen Dimensionen durch Kommas.
In Diagrammen, die C als Aktionssprache verwenden, beziehen Sie sich auf Elemente eines Vektors oder einer Matrix, indem Sie eine nullbasierte Indizierung verwenden, die durch Klammern begrenzt ist. Schließen Sie Indizes für verschiedene Dimensionen jeweils in einem eigenen Klammerpaar ein.
Beispiel | MATLAB als Aktionssprache | C als Aktionssprache |
---|---|---|
Das erste Element eines Vektors V | V(1) | V[0] |
Das i Element eines Vektors V | V(i) | V[i-1] |
Das Element in Zeile 4 und Spalte 5 einer Matrix M | M(4,5) | M[3][4] |
Das Element in Zeile i und Spalte j einer Matrix M | M(i,j) | M[i-1][j-1] |
Bitweise Operationen
Diese Tabelle fasst die Interpretation aller binären Operationen auf Vektor- und Matrixoperanden gemäß ihrer Rangfolge (1 = höchste, 3 = niedrigste) zusammen. Bitweise Operationen sind linksassoziativ. Bei jedem Ausdruck werden also Operatoren mit derselben Priorität von links nach rechts evaluiert. Mit Ausnahme der Matrix-Multiplikations- und Divisionsoperatoren in Diagrammen, die MATLAB als Aktionssprache verwenden, führen alle binären Operatoren elementweise Operationen aus.
Operation | Priorität | MATLAB als Aktionssprache | C als Aktionssprache |
---|---|---|---|
| 1 | Matrixmultiplikation. | Elementweise Multiplikation. Verwenden Sie für die Matrixmultiplikation die |
| 1 | Elementweise Multiplikation. | Nicht unterstützt. Verwenden Sie die Operation |
| 1 | Rechte Matrixteilung. | Elementweise rechte Teilung. Für die rechte Matrixteilung verwenden Sie die |
| 1 | Elementweise rechte Teilung. | Nicht unterstützt. Verwenden Sie die Operation |
| 1 | Linke Matrixteilung. | Nicht unterstützt. Verwenden Sie die |
| 1 | Elementweise linke Teilung. | Nicht unterstützt. Verwenden Sie die |
| 2 | Addition. | Addition. |
| 2 | Subtraktion. | Subtraktion. |
| 3 | Vergleich, gleich. | Vergleich, gleich. |
| 3 | Vergleich, ungleich. | Vergleich, ungleich. |
| 3 | Nicht unterstützt. Verwenden Sie die Operation | Vergleich, ungleich. |
| 3 | Nicht unterstützt. Verwenden Sie die Operation | Vergleich, ungleich. |
Unäre Operationen und Aktionen
Diese Tabelle fasst die Interpretation aller unären Operationen und Aktionen auf Vektor- und Matrixoperanden zusammen. Unäre Operationen:
Weisen eine höhere Priorität als bitweise Operatoren auf.
Sind rechtsassoziativ, werden also bei jedem Ausdruck von rechts nach links evaluiert.
Führen elementweise Operationen durch.
Beispiel | MATLAB als Aktionssprache | C als Aktionssprache |
---|---|---|
| Logisches NOT. Verwenden Sie für bitweises NOT die |
Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations. |
| Nicht unterstützt. Verwenden Sie die Operation | Logisches NOT. |
| Negativ. | Negativ. |
| Nicht unterstützt. | Alle Elemente des Vektors oder der Matrix erhöhen. Äquivalent zu |
| Nicht unterstützt. | Alle Elemente des Vektors oder der Matrix verringern. Äquivalent zu |
Zuweisungsoperationen
Diese Tabelle fasst die Interpretation von Zuweisungsoperationen auf Vektor- und Matrixoperanden zusammen.
Operation | MATLAB als Aktionssprache | C als Aktionssprache |
---|---|---|
| Einfache Zuweisung. | Einfache Zuweisung. |
| Nicht unterstützt. Verwenden Sie den Ausdruck | Äquivalent zu |
| Nicht unterstützt. Verwenden Sie den Ausdruck | Äquivalent zu |
| Nicht unterstützt. Verwenden Sie den Ausdruck | Äquivalent zu |
| Nicht unterstützt. Verwenden Sie den Ausdruck | Äquivalent zu |
Zuweisen von Werten zu einzelnen Elementen einer Matrix
Sie können einem einzelnen Eintrag eines Vektors oder einer Matrix einen Wert zuweisen, indem Sie die Indexierungssyntax verwenden, die der Aktionssprache des Diagramms entspricht.
Beispiel | MATLAB als Aktionssprache | C als Aktionssprache |
---|---|---|
Weisen Sie dem ersten Element des Vektors V den Wert 10 zu. | V(1) = 10; | V[0] = 10; |
Weisen Sie dem Element in Zeile 2 und Spalte 9 der Matrix M den Wert 77 zu. | M(2,9) = 77; | M[1][8] = 77; |
Zuweisen von Werten zu allen Elementen einer Matrix
In Diagrammen, die MATLAB als Aktionssprache verwenden, können Sie mit einer einzelnen Aktion alle Elemente eines Vektors oder einer Matrix angeben. Bei dieser Aktion wird beispielsweise jedem Element der 2-mal-3-Matrix A
ein anderer Wert zugewiesen:
A = [1 2 3; 4 5 6];
In Diagrammen, die C als Aktionssprache verwenden, können Sie mit der skalaren Erweiterung alle Elemente eines Vektors oder einer Matrix auf denselben Wert setzen. Bei der skalaren Erweiterung werden skalare Daten so umgewandelt, dass sie den Dimensionen von Vektor- oder Matrixdaten entsprechen. Zum Beispiel werden durch diese Aktion alle Elemente der Matrix A
auf 10
gesetzt:
A = 10;
Die skalare Erweiterung gilt für alle grafischen Funktionen, Wahrheitstabellen, MATLAB und Simulink-Funktionen. Nehmen wir an, Sie definieren die formalen Argumente einer Funktion f
als Skalare. Diese Tabelle beschreibt die Regeln der skalaren Erweiterung für den Funktionsaufruf y = f(u)
.
Ausgabe y | Eingabe u | Ergebnis |
---|---|---|
Skalar | Skalar | Es findet keine skalare Erweiterung statt. |
Skalar | Vektor oder Matrix | Das Diagramm generiert einen Größenabweichungsfehler. |
Vektor oder Matrix | Skalar | Das Diagramm weist mit der skalaren Erweiterung jedem Element von y[i][j] = f(u) |
Vektor oder Matrix | Vektor oder Matrix | Das Diagramm berechnet mit der skalaren Erweiterung einen Ausgabewert für jedes Element von y[i][j] = f(u[i][j]) y und u nicht die gleiche Größe haben, generiert die Tabelle einen Größenabweichungsfehler. |
Für Funktionen mit mehreren Ausgaben gelten dieselben Regeln, es sei denn, die Ausgaben und Eingaben sind alle Vektoren oder Matrizen. In diesem Fall generiert das Diagramm einen Größenkonflikt und es erfolgt keine skalare Erweiterung.
Nur Matrizen mit fester Größe unterstützen die skalare Erweiterung.
Diagramme, die MATLAB als Aktionssprache verwenden, unterstützen keine skalare Erweiterung.
Durchführen von Matrix-Arithmetik mit MATLAB-Funktionen
In Diagrammen, die C als Aktionssprache verwenden, führen die Operationen *
und /
elementweise Multiplikation und Division aus. Führen Sie mit der MATLAB-Funktion eine Standard-Matrixmultiplikation und -division in einem C-Diagramm durch.
Angenommen, Sie möchten diese Operationen an den quadratischen Matrizen u1
und u2
durchführen:
Berechnen Sie das Standard-Matrixprodukt
y1 = u1 * u2
.Lösen Sie die Gleichung
u1 * y2 = u2
.Lösen Sie die Gleichung
y3 * u1 = u2
.
Um diese Berechnungen in einem C-Diagramm durchzuführen, fügen Sie eine MATLAB-Funktion hinzu, die diesen Code ausführt:
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
In Diagrammen, die MATLAB als Aktionssprache verwenden, führen die Operationen *
, /
und \
eine Standard-Matrixmultiplikation und -division durch. Sie können diese Operationen direkt in Zustands- und Übergangsaktionen verwenden.