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