Matlab Oddities and Pitfalls

Matrix Indexing

Matlab is perfectly fine with invalid matrix indices.

The following code should produce a syntax error:

    x =
         1     2     3
         4     5     6
    
    >> x(5)
    ans =
         3

This is a very common source of bugs.

Load and Save

The load command is insane. It writes variables to the workspace that cannot be seen in the code. Always use load as a function as in m = load(filename).

Even then load is insane. To retrieve the contents of m you need to know its name. Example:

    x = 10;
    save('test.mat', 'x');
    m = load('test.mat');
    disp(m.x);
    10

It’s best to write a wrapper for load and save so that load2('test.mat') returns 10 instead of m.

Numeric Precision

Matlab “downgrades” numeric precision to the lowest common denominator in calculations.

x=ones([1,1], 'uint8'); y = 1.2345;
>> z=x/y;
>> disp(z)
    1
>> class(z)
ans =
uint8

One solution: convert everything to double as soon as you load it.

Always check that intermediate results are still double (using validateattributes).