# 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).