Hauptinhalt

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

Die Art und Weise, wie Sie auf Vektor- und Matrixelemente zugreifen, hängt von der Aktionssprache Ihres Diagramms ab.

Diagramme, die MATLAB als Aktionssprache verwenden, verwenden eine eins-basierte Indizierung mit runden Klammern. Trennen Sie die Indizes bei mehrdimensionalen Arrays mit Kommas innerhalb eines einzelnen Klammerpaares, M(i,j).

Diagramme, die C als Aktionssprache verwenden, verwenden eine null-basierte Indizierung mit eckigen Klammern. Schließen Sie bei mehrdimensionalen Arrays jeden Dimensionsindex in ein eigenes Klammerpaar ein, M[i][j].

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

Binäre Operationen auf Vektoren und Matrizen folgen den Standard-Prioritätsregeln (1 = höchste, 3 = niedrigste). Wenn Operatoren dieselbe Priorität aufweisen, werden sie von links nach rechts ausgewertet.

Alle binären Operatoren führen elementweise Operationen aus, mit einer Ausnahme: In Diagrammen, die MATLAB als Aktionssprache verwenden, führen die Operatoren *, / und \ stattdessen Matrixoperationen aus.

Multiplikations- und Divisionsoperationen (Priorität 1)

Operation

MATLAB als Aktionssprache

C als Aktionssprache

a * b

Matrixmultiplikation.

Elementweise Multiplikation. Verwenden Sie für die Matrixmultiplikation die *-Operation in einer MATLAB-Funktion.

a .* b

Elementweise Multiplikation.

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

a / b

Rechte Matrixteilung.

Elementweise rechte Teilung. Für die rechte Matrixteilung verwenden Sie die /-Operation in einer MATLAB-Funktion.

a ./ b

Elementweise rechte Teilung.

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

a \ b

Linke Matrixteilung.

Nicht unterstützt. Verwenden Sie die \-Operation in einer MATLAB-Funktion.

a .\ b

Elementweise linke Teilung.

Nicht unterstützt. Verwenden Sie die .\-Operation in einer MATLAB-Funktion.

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.

Additions- und Subtraktionsoperationen (Priorität 2)

Operation

MATLAB als Aktionssprache

C als Aktionssprache

a + b

Addition.

Addition.

a - b

Subtraktion.

Subtraktion.

Vergleichsoperationen (Priorität 3)

Operation

MATLAB als Aktionssprache

C als Aktionssprache

a == b

Vergleich, gleich.

Vergleich, gleich.

a ~= b

Vergleich, ungleich.

Vergleich, ungleich.

a != b

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

Vergleich, ungleich.

a <> b

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

Vergleich, ungleich.

Unäre Operationen und Aktionen

Unäre Operationen beziehen sich auf einen einzigen Wert und verhalten sich anders als binäre Operationen. Unäre Operationen:

  • Weisen eine höhere Priorität als bitweise Operatoren auf.

  • Sind rechtsassoziativ. Mit anderen Worten, das Diagramm wertet sie von rechts nach links aus.

  • Führen elementweise Operationen durch.

Operation

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

Zuweisungsoperationen speichern Werte in Variablen. Diagramme, die C als Aktionssprache verwenden, unterstützen zusammengesetzte Zuweisungsoperatoren, die arithmetische Operationen mit Zuweisungen kombinieren.

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

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;

Bei der skalaren Erweiterung werden Skalarwerte automatisch so umgewandelt, dass sie Vektor- oder Matrixdimensionen entsprechen. Dies gilt für grafische Funktionen, Wahrheitstabellen-, MATLAB- und Simulink-Funktionen.

Für eine Funktion y = f(u) mit skalaren formalen Argumenten gilt:

Ausgabe yEingabe uErgebnis
SkalarSkalarKeine skalare Erweiterung.
SkalarVektor oder MatrixGrößenabweichungsfehler.
Vektor oder MatrixSkalar

Jedes Element von y erhält die skalare Ausgabe y[i][j] = f(u)

Vektor oder MatrixVektor oder Matrix

Elementweise Operation y[i][j] = f(u[i][j]).

Wenn y und u eine unterschiedliche Größe aufweisen, tritt ein Größenabweichungsfehler auf.

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.

Siehe auch

Themen