## Dumb mistakes we make with MATLAB.

on 22 Feb 2011

### the cyclist (view profile)

O.k., admit it. Who has done this (or something that resulted in the same loss of info) before?

```>> laster
??? Undefined function or variable 'laster'.
```
```>> lasterr
ans =
Undefined function or variable 'laster'.
```

D'Oh! I need a ERRORBEFORELASTERR function.

What's one of your dumb MATLAB mistakes?

Walter Roberson

### Walter Roberson (view profile)

on 22 Feb 2011

Clicking on the above link might get you "page not found". If so, remove the trailing &gt; from the URL.

Andrew Newell

### Andrew Newell (view profile)

on 23 Feb 2011

My apologies to everyone while I learn how to edit comments. Here is my third try:

This is like David Lodge's "Humiliation Game" (http://www.guardian.co.uk/books/2008/jun/13/david.lodge), except that admitting we're dumb doesn't cost us a job (unless we work for Matlab?) and everyone believes us.

Matt Fig

### Matt Fig (view profile)

on 25 Feb 2011

Best answer was a toss-up between the top two vote getters.

## Products

No products are associated with this question.

### the cyclist (view profile)

on 22 Feb 2011

Entering

` >> rand(100000)`

` >> rand(100000,1)`

Hm. Why has my whole machine come to a grinding halt?

Andrew Newell

### Andrew Newell (view profile)

on 20 Jun 2011

Did I ever get bitten by this one today. I had the OS complaining that the startup disk had run out of space for memory (600 GB?!) and telling me to close some applications.

Bjorn Gustavsson

### Bjorn Gustavsson (view profile)

on 20 Jun 2011

My preferred version of this stumble is something along these lines:
idx = find(M(:)<this_or_that);
N = randn(idx);
N = randn(size(idx));

Naz

### Naz (view profile)

on 5 Nov 2011

rand(10000) creates matrix of 10000x10000
rand(10000,1) creates matrix of 10000x1
In the first case you are likely to run out of memory. I think there is a default setting that defines how much memory Matlab can use.

### Andrew Newell (view profile)

on 22 Feb 2011

Trying to edit a command already visible in the Command Window:

```>> x=3
```
```x =
```
`     3`

Now put the cursor up beside x=3 and try to change it to 4:

```>> 4
```

Oh, right, I should be down here!

Jiro Doke

### Jiro Doke (view profile)

on 22 Feb 2011

+1 vote on "editing Preview window".

Sean de Wolski

### Sean de Wolski (view profile)

on 22 Feb 2011

Andrew Newell about 2 hours ago
assert(Yup=vote)
Error: The expression to the left of the equals sign is not a valid target for an assignment.

+1 to Preview Window

Andrew Newell

### Andrew Newell (view profile)

on 22 Feb 2011

It's a greedy algorithm.

### Andreas Goser (view profile)

on 23 Feb 2011

Overlaying command with variables:

```plot=1:10;
plot(1:10)
ans =
1     2     3     4     5     6     7     8     9    10
```

Or command with commands like creating and own contrast.m function and then using MATLAB's CONTRAST function.

All this typicall leads to errors messages that are not helpful to detect the cause and only if you think of WHICH -ALL, you find it

Andrew Newell

### Andrew Newell (view profile)

on 23 Feb 2011

And the number of commands grows all the time - especially if you have been visiting the FEX a lot.

Jan Simon

### Jan Simon (view profile)

on 31 Oct 2011

x = 1:10; eval('plot=x;'); plot(1:10);
This give different results when run in the command window or inside a function.

### Paulo Silva (view profile)

on 22 Feb 2011

forget to put ; in some vector and array operations and get the command line spammed.

Matt Fig

### Matt Fig (view profile)

on 22 Feb 2011

Oh yeah. Been there, done that.

Sean de Wolski

### Sean de Wolski (view profile)

on 22 Feb 2011

I do that all of the time. But just forgetting the ';' ONCE, isn't the bad part. I use the up arrow a lot and so then I rerun the same command w/out the damn ';'. One lost semicolon can stick around for awhile.

### Oliver Woodford (view profile)

on 22 Feb 2011
```clear
```

Oops, I wanted to keep one of those variables.

Paulo Silva

### Paulo Silva (view profile)

on 22 Feb 2011

I wonder if it's possible to undo such operations?

Sean de Wolski

### Sean de Wolski (view profile)

on 22 Feb 2011

I almost never use clear. I downloaded 'keep' on the FEX and it is far better.
That is of course unless I take the "Nuke it from orbit" approach; for which I wrote a script: 'cll.m' >>clear;close all;clc

### Matt Tearle (view profile)

on 22 Feb 2011

I've been using MATLAB for 15 years or so - I teach people how to use it - and, of course, I stress the important difference between * and .* ...

So guess what once caused me a couple of hours of frustrated debugging of an image reconstruction algorithm...

Physician, heal thyself! (And don't test your algorithm on square images)

### Matt Tearle (view profile)

on 22 Feb 2011

More in keeping with the OP, and another in the "physician heal thyself" category:

[fiddling about at the command line, trying to work out some kinks in an algorithm]

```x1 - x2        % looks mostly near zero, but big vector, so:
max(ans)       % oops, I meant...
max(abs(ans))  % no, not *that* ans! ::sigh::
```

Andrew Newell

### Andrew Newell (view profile)

on 22 Feb 2011

But the Command History window makes it so easy to patch that boo-boo!

Matt Tearle

### Matt Tearle (view profile)

on 23 Feb 2011

As I reenter commands I chide myself "thought you'd save those few keystrokes, didn't you..."

Daniel Armyr

### Daniel Armyr (view profile)

on 20 Jun 2011

Yeah, I was tought not to use ans by some teacher way back. Using ans simply gets you into trouble.

### Matt Fig (view profile)

on 22 Feb 2011

Along the lines of the cyclist's popular mistake, I do this one often enough:

```x = rand(1:100);  % I meant:  x = rand(1,100);
??? Error using ==> rand
Maximum variable size allowed by the program is exceeded.
```

Matt Tearle

### Matt Tearle (view profile)

on 23 Feb 2011

Oh yeah, done that. Not often, but at least once... It's memorable

Matt Fig

### Matt Fig (view profile)

on 23 Feb 2011

I do this about twice a year. I would like to blame fat fingers, but the ":" isn't that close to the "," on the keyboard!

Jan Simon

### Jan Simon (view profile)

on 23 Feb 2011

@Matt Fig: Use a German keyboard where the key are neighboring. I use it to create "zeros(1:100)" frequently.

### Aurelien Queffurust (view profile)

on 15 Sep 2011

When I say orally to my peers to type

`   rehash toolboxcache`

in 99 cases out of 100 they type

` rehash toolboxcash`

### Matt Fig (view profile)

on 1 May 2011

Not so much with MATLAB, but with MATLAB answers. This one has bitten me several times.

I will edit an answer I had given earlier, in response to more questions or comments from the OP. Often the edit will be fairly lengthy, and so take some time. When I am done I check for spelling errors (usually) then hit the Submit button - at least that is what I should do. Sometimes I hit the Edit link, which causes the page to refresh! All typing lost ..... Aargh!

It would be nice if there simply was no Edit link available when editing (what is it there for anyway?), for dummies like me!

Matt Fig

### Matt Fig (view profile)

on 2 May 2011

Sorry Andrew, at least I am not alone ;)
Haha, maybe if I bump this post I can infect more regular posters!
If they too complain, then perhaps TMW will remove the Edit button when editing is enabled...

Matt Fig

### Matt Fig (view profile)

on 2 May 2011

Look at the Edit link! It is calling to you!

Andrew Newell

### Andrew Newell (view profile)

on 2 May 2011

Must ... resist ...

### Andrew Newell (view profile)

on 22 Feb 2011

The case of the misplaced transpose:

```v1'*v2
```

```v1*v2'
```

Matt Tearle

### Matt Tearle (view profile)

on 22 Feb 2011

especially when these are very long row vectors... and there's no semicolon at the end of that line.

Andrew Newell

### Andrew Newell (view profile)

on 22 Feb 2011

At least if there's no semicolon, you notice right away!

### Jan Simon (view profile)

on 22 Feb 2011
```c = {'a', 'b', 'c'}
c(2) = ''
>> c = {'a', 'c')
```

Ups. I meant C{2} = ''. Another variant:

```c = cell(1, 100);
c(:) = ''
>> c = {}
```

Better: c(:) = {''} to get a cell of empty strings.

### Jan Simon (view profile)

on 22 Feb 2011

The old EVAL bugs, only a little bit more concealed:

```Marker = {'lank', 'rank'};  % Ankle markers
Trajectory = rand(100, 3, 2);
MagicAutoAssign(Marker, Trajectory);
plot(rank);  % FAIL
```
```% ---------------
function MagicAutoAssign(Marker, Trajectory)
for i = 1:numel(Marker)
assignin('caller', Marker{i}, Trajectory(:, :, i));
end
```

Now plotting "rank" fails, because Matlab calls the toolbox function RANK instead. But it works, if "rank" is accessed using an index:

```plot(1:100, rank(:, 1));   % OK
```

It was even worse in Matlab < 2008a: Even "RANK" in uppercase letters was forwarded to the function in non-debug mode, but in debug mode the uppercase "RANK" was recognized as variable. So you can create an error, which disappears at debugging - worst case!

Simple conclusion: Never create variables dynamically.

### Michael Quinn (view profile)

on 4 Mar 2011
`    >> exit`

`    >> edit`

Matt Fig

### Matt Fig (view profile)

on 4 Mar 2011

Interesting. I never use EXIT, so that probably couldn't happen to me!

### Steven (view profile)

on 4 Nov 2011

I often use != instead of the unusual ~=

Walter Roberson

### Walter Roberson (view profile)

on 4 Nov 2011

http://zork.net/~sneakums/no-perl.svg

Jan Simon

### Jan Simon (view profile)

on 4 Nov 2011

I had a "if a~=b" instead of "if a!=b" in a C-mex function. It even produced the correct result - usually.

### Knut (view profile)

on 5 Mar 2013
```for i = 1:3
disp(exp(i*pi));
end
```

```for i = 1:3
disp(exp(1i*pi));
end
```

### Andrew Newell (view profile)

on 22 Feb 2011

Rejoice - now you can do it object-oriented style!

```>> ME = MException
??? Error using ==> MException
Not enough input arguments
```
```>> ME = MException.last
```
```ME =
```
```MException
```
```Properties:
identifier: 'MATLAB:minrhs'
message: 'Not enough input arguments.'
cause: {0x1 cell}
stack: [0x1 struct]
```
```Methods
```

Matt Fig

### Matt Fig (view profile)

on 22 Feb 2011

Except I was using MATLAB 7.01!

Jiro Doke

### Jiro Doke (view profile)

on 22 Feb 2011

Even with this, you can make the same mistake:

>> MException.lst
??? No appropriate method, property, or field lst for class MException.

>> MException.last
ans =
MException

Properties:
identifier: 'MATLAB:noSuchMethodOrField'
message: 'No appropriate method, property, or field lst for class MException.'
cause: {}
stack: [0x1 struct]
Methods

### Andrew Newell (view profile)

on 22 Feb 2011

While in the debugger, typing quit instead of dbquit kills Matlab!

(My earlier version of this answer may have been too cryptic.)

### Jan Simon (view profile)

on 22 Feb 2011

Working:

```n = datenum(datestr(now, 29), 29)
```

Failing (Matlab 2009a):

```n = datenum(datestr(now, 30), 30)
>> Failed to lookup month of year.
```

DATENUM(S, F) needs a string as format specifier F. If F is numerical, it is interpreted as pivot year. With F=29 DATENUM works on accident only.

### Jan Simon (view profile)

on 3 Mar 2011

I've tried to start an instance of another Matlab version, but the current directory was a toolbox folder by accident:

In Matlab 6.5, Windows:

```cd(fullfile(matlabroot, 'toolbox\matlab\strfun');
system('C:\Programme\Matlab\R2009a\bin\win32\MATLAB.exe &')
```

==> Matlab 2009a starts with a lot of warnings about finding M-files, which are builtin functions. Then the script STRNCMP (the help text only!) is attempted to execute as a function. Because this fails, the Matlab path contains just \toolbox\local. Without toolbox function the diagnosis was tedious.

Matt Fig

### Matt Fig (view profile)

on 3 Mar 2011

That is one mistake I have not made.

Jan Simon

### Jan Simon (view profile)

on 3 Mar 2011

I'm glad to hear that. It is a mess and a silly waste of time. Another version of such faults:
M-script with the help text only in one folder:
\MFiles\Folder\MyFun.m
Compiled function for different platforms in specific folders, which are included in the path dynamically:
\MFiles\ForMatlab6\MyFun.dll
\MFiles\ForMatlab7\MyFun.mexw32
Now calling MyFun from the command line or another M-function fails, if \MFiles\Folder\ is the current folder: "Attempt to call the script MyFun as a function". Solution: CD to a neutral folder.

### Jan Simon (view profile)

on 4 Apr 2011

I wanted to add the optimization flag /arch:SSE2 in my MEX call in Matlab 2009a:

```mex -O OPTIMFLAGS="\$OPTIMFLAGS /arch:SSE2" func.c
```

For a batch processing I need the functional form (or EVAL?!):

```mex('-O', 'OPTIMFLAGS="\$OPTIMFLAGS /arch:SSE2"', 'func.c')
```

>> ERROR: flag /arch:SSE2 is not recognized.

Ugly parser! The over-complicated BAT-> M-> PERL-> Compiler pipeline of the MEX command tries to be intelligent. This works:

```mex('-O', 'OPTIMFLAGS="\$OPTIMFLAGS', '/arch:SSE2"', 'func.c')
```

The string must be split inside the double quoted section, although these double quotes are used to avoid the splitting!

### Jan Simon (view profile)

on 27 May 2011

Check if a path name contains a certain folder name anywhere

```if any(findstr(PathName, '/Sub/')) ...
```

Because FINDSTR searches the shorter string in the longer one, the condition is true for the path name '/' also.

Modern Matlab version use STRFIND(String, Pattern) and afaik FINDSTR will be deprecated. But the program containing the example was developped under Matlab 5.3. Fixing the bug by changing FINDSTR to STRFIND is not trivial, if the strings are created dynamically, e.g. FINDSTR(a{i}, ['@', b{j}]).

At least in Matlab 2009a the toolbox functions contains a lot of these pitfalls, e.g. Signal\PMEM: "if ~isempty(findstr(flag, 'CORR')), ...", which triggers for 'OR' also.

### Ben Mitch (view profile)

on 27 May 2011

Moving into the Figure window, but in a similar spirit to the rand(100000) thing, I use this when I need an excuse to take a break...

```data = randn(2, 1e6);
plot(data)
```

when I meant this...

```plot(data')
```

### Grzegorz Knor (view profile)

on 15 Sep 2011

Sometimes I make a typo in structure field name, for example:

```my_struct.field1 = 1
```

and then:

```my_struct.filed1 = 2
```

It produces:

```my_struct =
```
```      field1: 1
filed1: 2```

```my_struct =
```
`      field1: 2`

Walter Roberson

### Walter Roberson (view profile)

on 15 Sep 2011

Too bad we cannot "lock down" structures to prevent new fields from being added.

Jan Simon

### Jan Simon (view profile)

on 15 Sep 2011

@Walter: We can. I'm using a selftest function, which scans the source code and checks all symbols, which contain a dot. The structs are created in a dedicted function, and no other function is allowed to add further fields.
I care for a minimal edit-distance, e.g. I avoid S.mvc and S.mcv, which would be too susceptible for typos. Of course I never create fields by complicated EVAL commands or LOAD structs directly to the workspace.
Using OO methods would be a more convenient method to limit the definition of fields. But even for functional programs, OO strategies are important for writing reliable software.

### Jan Simon (view profile)

on 31 Oct 2011

The process-first-non-singelton feature can be smarter than the user:

```m = randi(4);
n = randi(4);
M = rand(m, n);
ColumnSum = sum(M);  % DANGEROUS
```

If m is 1, the sum is calulated alog the 2nd dimension. Better:

```ColumnSum = sum(M, 1);  % Secure
```

NOTE: For min, max and std the 2nd input is not the dimension!

```max([1, 2; 3, 4], 2)      % >> [2, 2; 3, 4], elementwise maximun
max([1, 2; 3, 4], [], 2)  % >> [2; 4], maximun along 2nd dimension
```

the cyclist

### the cyclist (view profile)

on 31 Oct 2011

The squeeze() command has similar dangers, when there are unanticipated singleton dimensions. In my experience, it is almost always possible, and wiser, to use permute() rather than squeeze().

Jan Simon

### Jan Simon (view profile)

on 31 Oct 2011

permute()? I'd expect reshape() to do the equivalent operation without the smart choice of the dimension.

### Shatrughan (view profile)

on 4 Nov 2011

have anyone tried typing "Why" in the command prompt? MATLAB gives funny responses..just carry on typing for fun.. :)

Image Analyst

### Image Analyst (view profile)

on 4 Feb 2012

I've listed some other Easter Eggs in http://www.mathworks.com/matlabcentral/answers/2001-what-matlab-easter-eggs-do-you-know

### Jan Simon (view profile)

on 4 Feb 2012

Although I never use clear all (see Answers: Bad CLEAR ALL), it appears in user-supplied code frequently. If all is defined as a variable, the behaviour might be unexpected:

```clear all
b   = 1;
all = 2;
clear all
whos
%   Name      Size    Bytes  Class     Attributes
%   b         1x1         8  double
```

If "all" is a variable, it is cleared, but the other variables are not touched.

[EDITED] The "clear all" behaviour is a typical example for the bad programming practize of using magic numbers. Here the string 'all' is magic, because it triggers a totally amnesia, if there is no variable of this name. It would be smarter to use invalid symbols for special commands, e.g. "\$all". See Wiki: magic numbers and Wiki: magic strings.

Jan Simon

### Jan Simon (view profile)

on 5 Mar 2013

@Walter: The magic strings let us make mistakes, when we forget to consider them. E.g. I forgot the escape character in a context menu, where I can move an object to its "default" position. It is in the nature of context menus, that an automatic unit-test cannot find this bug, but only an active user.

I'm sure most programmers omit a test for {'default', 'remove', 'factory'}, when they assign the string of buttons or menus dynamically.

Eric Sampson

### Eric Sampson (view profile)

on 24 Apr 2013

To be honest I think a lot of the functions that were created in early MATLAB versions are the ones that tend to have syntax issues like this... Since they've been around so long it would be hard for TMW to break backwards compatibility. As TMW hired more professional programmers over the years, instead of mathematicians/scientists doubling as programmers, things have improved IMHO, like your example about '-regexp'. Of course this is all personal opinion YMMV etc, and it's not intended to be a slight at all to TMW old-timers :)

Eric Sampson

### Eric Sampson (view profile)

on 24 Apr 2013

P.S. I've also recently requested that TMW consider making the use of 'clear all' an M-lint/Analyzer warning, because it has side effects that trip people up (like clearing breakpoints & globals, flushing the M-file cache, etc). If you like the idea, call/email support and lend your vote to this enhancement request! :)

### Jan Simon (view profile)

on 8 May 2012
Edited by Jan Simon

### Jan Simon (view profile)

on 16 Sep 2012

The strings 'default', 'remove', and 'factory' are not allowed as uimenu labels, see Ref: uimenu_props. To get the string 'default' as label, '\default' must be used.

This is another example for the bad magic strings. Imagine you want to create a bunch of uimenu s automatically using a list of words. Then the exception handling for these three words will be ugly and increase the program size without a real benefit.

[EDITED] The named strings have a special meaning for other handle graphics objects also, e.g. UICONTROLs:

```uicontrol('String', 'default')
```

This doe not display 'default' in a button, but an empty string, because this is the default value:

```get(0, 'defaultUIControlString')
```

To display 'default', 'factory', or 'remove', a leading backslash is required, see doc: setting-default-property-values:

```uicontrol('String', '\default')
```

It would be smarter to use the backslash for the special commands, but this cannot be changed without breaking the backward compatibility.

Jan Simon

### Jan Simon (view profile)

on 24 Apr 2013

What is required to display the string '\default' in an UICONTROL???

Walter Roberson

### Walter Roberson (view profile)

on 24 Apr 2013

Maybe \\default ?

### Geoff (view profile)

on 10 May 2012

Corrupting years of experience in other languages...

After using MatLab for several months now, I find that when I go back to writing C code I catch myself forgetting to put parentheses on my if statements and using single-quotes for my strings.

Jan Simon

### Jan Simon (view profile)

on 10 May 2012

And MATLAB with lower-case a, t, a, b. Can anybody explain, why MATLAB is written with an upper-case L frequently? I did this myself also. Has it been the official spelling in Matlab 4?
See Stevens confusion of ~= and != above.

Daniel

### Daniel (view profile)

on 10 May 2012

I believe the name at one point meant Matrix Laboratory

Sean de Wolski

on 10 May 2012

It still does!

### Kye Taylor (view profile)

on 24 Apr 2013
```>> close al
Error using close (line 111)
Specified window does not exist.
```

Dammit!