Contenido principal

Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Resolución del error: Discrepancias de tamaño

Problema

El generador de código genera errores de discrepancia de tamaño cuando los tamaños de los arreglos son incompatibles o la expansión implícita no está disponible.

La mayoría de los operadores y funciones binarias de MATLAB® y el código generado admiten arreglos numéricos que tienen tamaños compatibles. Dos entradas tienen tamaños compatibles si, para cada dimensión, los tamaños de las entradas son iguales o uno de ellos es 1. En los casos más simples, dos tamaños de arreglo son compatibles si son exactamente iguales o si uno es escalar. Por ejemplo:

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

El segundo arreglo se expande implícitamente para coincidir con las dimensiones de la primera matriz. Para obtener más información, consulte Tamaños de arreglos compatibles para operaciones básicas.

La expansión implícita podría no estar disponible al realizar operaciones binarias en arreglos de tamaño compatible si se cumple alguna de las siguientes condiciones:

Las discrepancias de tamaño o la falta de disponibilidad de la expansión implícita generan el siguiente error:

%Size mismatch between two arrays
Size mismatch (size [10][1] ~= size [1][10])

Cuando las condiciones anteriores son verdaderas para los campos de estructura y los elementos de celda, el generador de código produce los siguientes errores respectivamente:

%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.

Posibles soluciones

Verifique que, en las operaciones binarias donde habilite la expansión implícita, las operaciones formen parte del alcance de función. Verifique estas condiciones:

  • Compatibilidad de tamaño del arreglo.

  • Operaciones binarias en el alcance de funciones que llaman a coder.noImplicitExpansionInFunction.

  • coder.sameSizeBinaryOp no expande implícitamente sus operandos ni admite la expansión escalar.

  • Si ha desactivado la expansión implícita en todo el proyecto, todas las operaciones que requieran expansión implícita generarán un error.

Realizar operaciones binarias en arreglos de tamaños compatibles

Si debe realizar una operación binaria en arreglos de diferentes tamaños, asegúrese de que los tamaños sean compatibles y que la expansión implícita esté habilitada en el alcance de función. Consulte Tamaños de arreglos compatibles para operaciones básicas.

Llamar a una operación binaria sin coder.noImplicitExpansionInFunction

Si debe incluir coder.noImplicitExpansionInFunction en su función, llame a la operación binaria requerida en otra función donde esté habilitada la expansión implícita.

Llamar a una operación binaria sin coder.sameSizeBinaryOp

Si no desea usar la expansión implícita para una operación específica, proporcione argumentos de entrada que sean del mismo tamaño que coder.sameSizeBinaryOp. coder.sameSizeBinaryOp no permite la expansión escalar y genera un error si los argumentos de entrada no son del mismo tamaño.

Habilitar la expansión implícita de un proyecto

Si habilitar la expansión implícita no afecta a su proyecto, considere habilitarla estableciendo la propiedad EnableImplicitExpansion del objeto de configuración de código como true.

Si necesita la expansión implícita para operaciones específicas, considere usar coder.sameSizeBinaryOp o coder.noImplicitExpansionInFunction para evitar que las demás operaciones se expandan implícitamente. Consulte Optimize Implicit Expansion in Generated Code.

Consulte también

|

Temas