Hauptinhalt

Die Übersetzung dieser Seite ist veraltet. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

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 VV(1)V[0]
Das i Element eines Vektors VV(i)V[i-1]
Das Element in Zeile 4 und Spalte 5 einer Matrix MM(4,5)M[3][4]
Das Element in Zeile i und Spalte j einer Matrix MM(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

a * b

1

Matrixmultiplikation.

Elementweise Multiplikation. Verwenden Sie für die Matrixmultiplikation die *-Operation in einer MATLAB-Funktion. Siehe Durchführen von Matrix-Arithmetik mit MATLAB-Funktionen.

a .* b

1

Elementweise Multiplikation.

Nicht unterstützt. Verwenden Sie die Operation a * b.

a / b

1

Rechte Matrixteilung.

Elementweise rechte Teilung. Für die rechte Matrixteilung verwenden Sie die /-Operation in einer MATLAB-Funktion. Siehe Durchführen von Matrix-Arithmetik mit MATLAB-Funktionen.

a ./ b

1

Elementweise rechte Teilung.

Nicht unterstützt. Verwenden Sie die Operation a / b.

a \ b

1

Linke Matrixteilung.

Nicht unterstützt. Verwenden Sie die \-Operation in einer MATLAB-Funktion. Siehe Durchführen von Matrix-Arithmetik mit MATLAB-Funktionen.

a .\ b

1

Elementweise linke Teilung.

Nicht unterstützt. Verwenden Sie die .\-Operation in einer MATLAB-Funktion. Siehe Durchführen von Matrix-Arithmetik mit MATLAB-Funktionen.

a + b

2

Addition.

Addition.

a - b

2

Subtraktion.

Subtraktion.

a == b

3

Vergleich, gleich.

Vergleich, gleich.

a ~= b

3

Vergleich, ungleich.

Vergleich, ungleich.

a != b

3

Nicht unterstützt. Verwenden Sie die Operation a ~= b.

Vergleich, ungleich.

a <> b

3

Nicht unterstützt. Verwenden Sie die Operation a ~= b.

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

~a

Logisches NOT. Verwenden Sie für bitweises NOT die bitcmp-Funktion.

  • Bitweises NOT (Standard). Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen.

  • Logisches NOT. Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations löschen.

Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations.

!a

Nicht unterstützt. Verwenden Sie die Operation ~a.

Logisches NOT.

-a

Negativ.

Negativ.

a++

Nicht unterstützt.

Alle Elemente des Vektors oder der Matrix erhöhen. Äquivalent zu a = a+1.

a--

Nicht unterstützt.

Alle Elemente des Vektors oder der Matrix verringern. Äquivalent zu a = a-1.

Zuweisungsoperationen

Diese Tabelle fasst die Interpretation von Zuweisungsoperationen auf Vektor- und Matrixoperanden zusammen.

Operation

MATLAB als Aktionssprache

C als Aktionssprache

a = b

Einfache Zuweisung.

Einfache Zuweisung.

a += b

Nicht unterstützt. Verwenden Sie den Ausdruck a = a+b.

Äquivalent zu a = a+b.

a -= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = a-b.

Äquivalent zu a = a-b.

a *= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = a*b.

Äquivalent zu a = a*b.

a /= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = a/b.

Äquivalent zu a = a/b.

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 yEingabe uErgebnis
SkalarSkalarEs findet keine skalare Erweiterung statt.
SkalarVektor oder MatrixDas Diagramm generiert einen Größenabweichungsfehler.
Vektor oder MatrixSkalar

Das Diagramm weist mit der skalaren Erweiterung jedem Element von f(u) den skalaren Ausgabewert y zu:

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

Vektor oder MatrixVektor oder Matrix

Das Diagramm berechnet mit der skalaren Erweiterung einen Ausgabewert für jedes Element von u und weist es dem entsprechenden Element von y zu:

y[i][j] = f(u[i][j])
Wenn 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
Bevor Sie die Funktion aufrufen, legen Sie die Eigenschaften für die Eingabe- und Ausgabedaten fest, wie unter Set Data Properties beschrieben.

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.

Siehe auch

Themen