Diese Seite ist für die vorige Version. Die entsprechende englische Seite wurde in der aktuellen Version entfernt.
Fehler beheben: Größen-Nichtübereinstimmung
Problem
Der Codegenerator erzeugt Größen-Nichtübereinstimmungsfehler, wenn die Arraygrößen nicht kompatibel sind oder eine implizite Erweiterung nicht verfügbar ist.
Die meisten binären Operatoren und Funktionen in MATLAB® und generierter Code unterstützten numerische Arrays mit kompatiblen Größen. Zwei Eingänge haben kompatible Größen, wenn die Größen der Eingänge für jede Dimension entweder identisch sind oder einer 1
beträgt. In den einfachsten Fällen sind zwei Arrays kompatibel, wenn sie exakt identisch sind oder es sich bei einem Array um einen Skalar handelt. Beispiel:
magic(4) + ones(4,1); % where magic(4) = ones(4,1) = % 16 2 3 13 1 % 5 11 10 8 1 % 9 7 6 12 1 % 4 14 15 1 1
ans = 17 3 4 14 6 12 11 9 10 8 7 13 5 15 16 2
Das zweite Array wird implizit auf die Dimensionen der ersten Matrix erweitert. Weitere Informationen finden Sie unter Kompatible Arraygrößen für Basisoperationen.
Die implizite Erweiterung ist ggf. nicht verfügbar, wenn binäre Operationen an Arrays kompatibler Größe vorgenommen werden und mindestens eine der folgenden Bedingungen wahr ist:
Ihr Funktionsumfang umfasst die
coder.noImplicitExpansionInFunction
-Funktion.Sie können die binäre Operation mit der Funktion
coder.sameSizeBinaryOp
ausführen.Sie haben die implizite Erweiterung in Ihrem Projekt deaktiviert.
Bei einer Größen-Nichtübereinstimmung oder nicht verfügbaren impliziten Erweiterung wird der folgende Fehler erzeugt:
%Size mismatch between two arrays Size mismatch (size [10][1] ~= size [1][10])
Wenn die obenstehenden Bedingungen für Strukturfelder und Zellenelemente wahr sind, erzeugt der Codegenerator die folgenden Fehler:
%Size mismatch in structure fields Size mismatch (size [10][1] ~= size [1][10]) in field StructField %Size mismatch in cell elements Size mismatch (size [10][1] ~= size [1][10]) in element cellElement.
Mögliche Lösungen
Überprüfen Sie, dass bei binären Operationen mit aktivierter impliziter Erweiterung die Operationen sich im Funktionsumfang befinden. Überprüfen Sie diese Bedingungen:
Arraygrößen-Kompatibilität.
Binäre Operationen im Funktionsumfang, die
coder.noImplicitExpansionInFunction
aufrufen.coder.sameSizeBinaryOp
führt keine implizite Erweiterung der Operanden durch und unterstützt keine Skalar-Erweiterung.Wenn Sie die implizite Erweiterung für das gesamte Projekt deaktiviert haben, erzeugen alle Operationen, die implizite Erweiterung erfordern, einen Fehler.
Durchführen binärer Operationen an Arrays kompatibler Größe
Wenn Sie eine binäre Operationen an Array unterschiedlicher Größe ausführen müssen, achten Sie darauf, dass die Größen kompatibel sind und implizite Erweiterung im Funktionsumfang aktiviert ist. Siehe Kompatible Arraygrößen für Basisoperationen.
Aufrufen einer binären Operation ohne coder.noImplicitExpansionInFunction
Wenn Sie coder.noImplicitExpansionInFunction
in Ihre Funktion aufnehmen müssen, rufen Sie die erforderliche binäre Operation in einer anderen Funktion mit aktivierter impliziter Erweiterung auf.
Aufrufen einer binären Operation ohne coder.sameSizeBinaryOp
Wenn Sie implizite Erweiterung nicht für eine bestimmte Operation nutzen möchten, stellen Sie für coder.sameSizeBinaryOp
Eingabeargumente mit derselben Größe bereit. coder.sameSizeBinaryOp
erlaubt keine Skalar-Erweiterung und erzeugt einen Fehler, wenn die Eingabeargumente nicht dieselbe Größe haben.
Aktivieren von impliziter Erweiterung für ein Projekt
Wenn das Aktivieren impliziter Erweiterung Ihr Projekt nicht beeinträchtigt, können Sie diese aktivieren, indem Sie die Eigenschaft EnableImplicitExpansion
in Ihrem Code-Konfigurationsobjekt auf true
setzen.
Wenn Sie implizite Erweiterung für bestimmte Operationen benötigen, verwenden Sie coder.sameSizeBinaryOp
oder coder.noImplicitExpansionInFunction
, um eine implizite Erweiterung der anderen Operationen zu verhindern. Siehe Optimize Implicit Expansion in Generated Code.
Siehe auch
coder.noImplicitExpansionInFunction
| coder.sameSizeBinaryOp