MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by Raviteja on 22 Sep 2011

Hello all,

Please explain good MATLAB programming practice methods. It will help to the guys who are new to programming like me.

Previously I used

for i=1:10

after following some suggestions from this answers pages I learnt to use

for i1=1:100

This is the good way to write programs.

Like this, as a professional programmer, please mention some good programming practice techniques.

It will useful to all!

*No products are associated with this question.*

Answer by Daniel on 23 Sep 2011

I suggest developing a coding "style." Some good places to start are given in the FAQ:

http://matlab.wikia.com/wiki/FAQ#Where_can_I_find_MATLAB_Style_Guides_or_Coding_Standards.3F

I also would consider this book reviewed by Loren

http://blogs.mathworks.com/loren/2011/02/10/book-review-the-elements-of-matlab-style/

although I should say I have not looked at it yet. It is on my list of things to do.

Answer by Jan Simon on 23 Sep 2011

**Read the FAQ**

It is very likely, that the questions, which concern other users frequently, do concern you also. It is very efficient to profit from the mistakes of others, instead to implement them by your own.

Bjorn Gustavsson on 23 Sep 2011

"It is very efficient to profit from the mistakes of others, instead to implement them by your own." was one of the funniest (sadly fun, funily said) statements I've come across this week!

Answer by Jake Bolanski on 22 Sep 2011

It's always good to comment in front of your code so that you won't have trouble remembering why you did what you did. It also helps others recognize your code and what you're doing.

Answer by Fangjun Jiang on 22 Sep 2011

Where do you want to start? I'll add as I come up with some.

- pre-allocate large size variables using zeros(), cell()

Answer by Jan Simon on 22 Sep 2011

Avoid overloading builtin functions. It happens very often, that a user creates a variable called "max" and is surprised that the MAX function does not work anymore:

max = 19; ... 100 lines later: B = max(1:10) ??? Index exceeds matrix dimensions.

A confusing but correct error message!

Answer by Jan Simon on 22 Sep 2011

Do **not** start a script or function by:

clear all

This removes all loaded functions from the memory. Reloading them will need a lot of time such that a program can be 100 times slower in a not so unlikely worst case.

I admit that a `clear` or the equivalent `clear variables` can help to detect crude typos in names of a variable, if this variable is existing before the script. But this is a really rare case and if a function is used, MLint detects this much better.

But there is a frightening large number of codes starting with `clear all`. I assume this is recommended in some tutorials which have been written without deeper insight into MATLAB.

Answer by Daniel on 23 Sep 2011

Come to Answers before using global or eval. There is almost always a better way to do it.

http://matlab.wikia.com/wiki/FAQ#Why_is_it_advised_to_avoid_using_the_.22eval.22_function.3F

http://www.mathworks.co.uk/support/tech-notes/1100/1103.html

Answer by Daniel on 23 Sep 2011

Use the functional form of load and save, and almost every other function except maybe help and doc

instead of

load filename.mat

use

data = load('filename.mat')

Jan Simon on 23 Sep 2011

Same for SAVE.

And catch the output: Data = load(FileName), otherwise you could find unexpected variables in your workspace like "max", which will shadow existing functions to your surprise. See http://www.mathworks.com/matlabcentral/answers/16484-good-programming-practice#answer_22299

Answer by Jan Simon on 22 Sep 2011

Use English for comments and the help text. Although you might assume, that you will never share the code, even a discussion in this forum is much harder, if all variables and descriptions are in Italian.

Walter Roberson on 23 Sep 2011

This one I cannot really agree with. It trades the possibility that one might want to share a section of the code in Answers or CSSM, against the near certainty that the code will need to be easily understandable by other people in one's workplace.

There are also locations were writing the comments and help text in English would violate various language preservation laws.

Answer by Jan Simon on 22 Sep 2011

Include a check of number and type of inputs if all functions.

This will cost several seconds runtime, but will save hours of debugging.

Answer by Jan Simon on 23 Sep 2011

Read the tips for program development in the dokumentation:

http://www.mathworks.de/help/techdoc/matlab_prog/f10-60481.html

And if you are on the way, read the rest of the documentation also, at least the "Getting Strarted" chapters.

Answer by Jan Simon on 23 Sep 2011

This is a list of helpful links: http://www.ee.columbia.edu/~marios/matlab/matlab_tricks.html

E.g. this is exhaustive: http://www.ee.columbia.edu/~marios/matlab/MatlabStyle1p5.pdf

Answer by Daniel on 20 Oct 2011

Surprised Doug didn't chime in with his blog post: http://blogs.mathworks.com/videos/2010/03/08/top-10-matlab-code-practices-that-make-me-cry/

Answer by Daniel on 27 Jan 2012

It is only fair that if I plug Doug's blog, I should plug Loren's blog also:

http://blogs.mathworks.com/loren/2012/01/13/best-practices-for-programming-matlab/

Answer by Raviteja on 23 Sep 2011

I got good help from matlab datasheets for matlab programming tips

http://www.mathworks.in/help/pdf_doc/matlab/programming_tips.pdf

Show 7 older comments

Walter Roberson on 23 Sep 2011

@Mohammad: http://www.flickr.com/photos/gothamoddisee/216748915/

(Be sure to read the caption)

Answer by Steven on 19 Oct 2011

However, the difference seems to be indistinguishable considering a certain precision whatever the number of repetitions.

tic; for i1 = 1:100000 x = sin(i1); end toc Elapsed time is 0.003597 seconds.

tic; for i = 1:100000 x = sin(i); end toc Elapsed time is 0.003569 seconds.

Jan Simon on 27 Jan 2012

@Steven: You have posted this detail 3 times in this thread. Please consider, that the runtime is not affected by the length of the name of the variable, because internally the variable is accessed by a memory pointer taken from a lookup-table. This lookup-table is created when the function is loaded the first time only.

## 2 Comments

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/16484#comment_36472

You are right! i is undesirable for the loop variable as matlab treats i as the complex number, sqrt(-1).

I personalty use ii and jj for my loops, but as long as its not the lonesome "i" it will speed up your code.

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/16484#comment_41337

However, the difference seems to be indistinguishable considering a certain precision.

tic;

for i1 = 1:100000

x = sin(i1);

end

toc

Elapsed time is 0.003597 seconds.

tic;

for i = 1:100000

x = sin(i);

end

toc

Elapsed time is 0.003569 seconds.