Questa pagina si riferisce alla release precedente. La corrispondente pagina in inglese è stata rimossa nella release attuale.
Risoluzione dell'errore: mancate corrispondenze delle dimensioni
Problema
Il generatore di codice produce errori di mancata corrispondenza delle grandezze quando le grandezze degli array sono incompatibili o quando l'espansione implicita non è disponibile.
La maggior parte degli operatori e delle funzioni binarie in MATLAB® e nel codice generato supportano array numerici di grandezza compatibile. Due input hanno grandezze compatibili se, per ogni dimensione, le grandezze degli input sono uguali o se una di esse è 1
. Nei casi più semplici, due grandezze di array sono compatibili se sono esattamente uguali o se una di esse è uno scalare. Ad esempio:
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
Il secondo array si espande implicitamente per corrispondere alle dimensioni della prima matrice. Per ulteriori informazioni, vedere Grandezze di array compatibili per le operazioni di base.
L'espansione implicita potrebbe non essere disponibile durante l'esecuzione di operazioni binarie su array di grandezza compatibile se una delle seguenti condizioni è vera:
Lo scope della funzione include la funzione
coder.noImplicitExpansionInFunction
(MATLAB Coder).Per eseguire l'operazione binaria si utilizza la funzione
coder.sameSizeBinaryOp
(MATLAB Coder).L'espansione implicita per il progetto è stata disattivata.
Le mancate corrispondenze di grandezza o l'indisponibilità dell'espansione implicita generano il seguente errore:
%Size mismatch between two arrays Size mismatch (size [10][1] ~= size [1][10])
Quando le condizioni di cui sopra sono vere per i campi della struttura e gli elementi della cella, il generatore di codice produce rispettivamente i seguenti errori:
%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.
Possibili soluzioni
Verificare che le operazioni rientrino nello scope delle funzioni nelle operazioni binarie in cui si abilita l'espansione implicita. Verificare queste condizioni:
Compatibilità della grandezza degli array.
Operazioni binarie nello scope delle funzioni che chiamano
coder.noImplicitExpansionInFunction
(MATLAB Coder).coder.sameSizeBinaryOp
(MATLAB Coder) non espande implicitamente i suoi operandi o non supporta l'espansione scalare.Se l'espansione implicita è stata disattivata per l'intero progetto, tutte le operazioni che richiedono l'espansione implicita generano un errore.
Esecuzione di operazioni binarie su array di grandezze compatibili
Se si deve eseguire un'operazione binaria su array di grandezze diverse, assicurarsi che le dimensioni siano compatibili e che l'espansione implicita sia abilitata nello scope della funzione. Vedere Grandezze di array compatibili per le operazioni di base.
Chiamata di operazione binaria senza coder.noImplicitExpansionInFunction
Se è necessario includere coder.noImplicitExpansionInFunction
nella funzione, chiamare l'operazione binaria richiesta in un'altra funzione in cui sia abilitata l'espansione implicita.
Chiamata di operazione binaria senza coder.sameSizeBinaryOp
Se non si desidera l'espansione implicita per un'operazione specifica, fornire argomenti di input della stessa grandezza a coder.sameSizeBinaryOp
(MATLAB Coder). coder.sameSizeBinaryOp
non consente l'espansione scalare e genera un errore se gli argomenti di input non hanno la stessa grandezza.
Abilitazione dell'espansione implicita per il progetto
Se l'abilitazione dell'espansione implicita non influisce sul progetto, si può considerare di abilitarla impostando la proprietà EnableImplicitExpansion
nell'oggetto di configurazione del codice su true
.
Se è necessaria l'espansione implicita per operazioni specifiche, si può considerare di utilizzare coder.sameSizeBinaryOp
o coder.noImplicitExpansionInFunction
per impedire l'espansione implicita delle altre operazioni. Vedere Optimize Implicit Expansion in Generated Code (MATLAB Coder).
Vedi anche
coder.noImplicitExpansionInFunction
(MATLAB Coder) | coder.sameSizeBinaryOp
(MATLAB Coder)