tutorial student requisitos precio online gratis matlab

student - matlab tutorial



¿Cómo reconocer los errores de desbordamiento en Matlab? (3)

Puedes comenzar activando las advertencias de enteros:

intwarning(''on'')

Esto le dará una advertencia cuando la aritmética entera se desborde.

Sin embargo, ten cuidado, como se describe aquí , esto ralentiza la aritmética de enteros, así que solo usa esto durante la depuración.

Pasé parte de ayer y hoy rastreando un error en algún código de Matlab. Creí que mi problema era la indexación (con muchas estructuras que no definí y todavía me estoy acostumbrando), pero resultó ser un error de desbordamiento. Me perdí esto por una razón muy específica:

>> uint8(2) - uint8(1) ans = 1 >> uint8(2) - uint8(2) ans = 0 >> uint8(2) - uint8(3) ans = 0

Hubiera esperado que el último fuera algo así como -1 (o 255 ). En medio de un gran vector, los 0 erróneos fueron difíciles de detectar, pero un 255 se habría destacado fácilmente.

¿Algún consejo sobre cómo detectar estos problemas fácilmente en el futuro? (Idealmente, me gustaría desactivar la verificación de desbordamiento para que funcione como C.) Cambiar a double funciona, por supuesto, pero si no me doy cuenta de que es un uint8 comienzo, eso no ayuda.



Comenzando con la versión R2010b y posterior, se ha eliminado la función INTWARNING , junto con estos mensajes de advertencia para la conversión y matemática entera :

  • MATLAB:intConvertNaN
  • MATLAB:intConvertNonIntVal
  • MATLAB:intConvertOverflow
  • MATLAB:intMathOverflow

Por lo tanto, el uso de INTWARNING ya no es una opción viable para determinar cuándo se producen desbordamientos de enteros. Una alternativa es usar la función CLASS para probar la clase de sus datos y volver a convertirla en consecuencia antes de realizar la operación. Aquí hay un ejemplo:

if strcmp(class(data),''uint8'') %# Check if data is a uint8 data = double(data); %# Convert data to a double end

También podría usar la función ISA :

if ~isa(data,''single'') %# Check if data is not a single data = single(data); %# Convert data to a single end