Contenuto principale

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:

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

(MATLAB Coder) | (MATLAB Coder)

Argomenti