Brett's Pick this week has three parts, and is really a tip of the hat to three authors who have taken the initiative to try to
promote and teach good MATLAB programming practices. In particular, I'd like to acknowledge Michael Robbins for "Good MATLAB Programming Practices"; Pascal Getreuer for "Writing Fast MATLAB Code"; and Nico Schlömer for "Guidelines for writing clean and fast code in MATLAB."
I recall fondly my first attempts at writing a bit of MATLAB code; I believe the year was 1996. I fumbled around, read a few
"Getting Started" documents, and began writing code. I was amazed at how easily I could get MATLAB to do what I wanted it to do! MATLAB is
a fourth-generation interpreted language, and it's relatively forgiving; somehow even ugly code manages to work. Over the
years, as I grew more confident (and competent) with the language, I learned just how poor my coding practices were. And in
some cases, the difference between good code and bad code can be orders of magnitude difference in performance (as measured
by computation time). It behooves the user to spend some time building a greater mastery of the language; dividends will come
not only in improved readability and maintainability, but in improved performance as well. Moments before writing this post,
I had the very unpleasant experience of looking back at my 15-year-old code; it could appear in a textbook of poor coding
Fortunately, Michael provided two versions of his "Good Programming Practices" (2003); I had a font problem with one, but
was able to read the second without difficulty. Michael's document provides a solid page of useful gems. Among them, he advises
that: "creative use of FIND, PROD, SUM, CUMSUM, NaN, REPMAT, RESHAPE, ONES and ZEROS can really help vectorize your code,
but try not to make the code too cryptic. There is a tradeoff between execution time and readability. If your statement is
cryptic, either include an equivalent (but slow and easy to read) version in a comment or write a MEX file." He also suggests
that the user "use PROFILE to identify where you need to work on speed improvements."
Pascal's "Writing Fast MATLAB Code" (2009) is more ambitious. In a beautifully formatted document, he lays out 12 chapters
on the topic of better utilization of the MATLAB language:
Inlining Simple Functions
Solving Ax = b
Nico cites Pascal's file as an inspiration for his 2009 "Guidelines." In 34 pages, he spouts some great suggestions "aimed
at MATLAB beginners who already know the syntax but feel are not yet quite experienced with it. Its goal is to give a number
of hints which enable the reader to write quality MATLAB programs and to avoid commonly made mistakes."
All of these files are worthy of a download and careful study. I wish I had had them back when I was getting started. It's
easier to learn good habits than to break bad ones!
By the way, we now have a video version of "Getting Started" with MATLAB,as well as several additional MathWorks' resources to guide the user to better coding practices.
One I particularly recommend is the recorded webinar entitled "Speeding Up MATLAB Applications." I also recommend that the motivated reader spend a bit of time following the links in this doc page on code performance. You'll quickly learn how to time and profile your code, plus lots of techniques for improving performance.
Sarah Wait Zaranek’s webinar looks great and is something I’ll be watching when I get home this evening. However, I like to watch webinars in tandem with studying the code used in them. I’ve checked the File Exchange and can’t find a link to download the files she’s using in the demonstration (as I can for most other webinars). Any idea if this code is available online?
Thanks very much for pointing out my broken link. It should be fixed now. Thanks, too, for the link to Richard’s “Guidelines” document. I didn’t mean to slight that contribution, or the author–I just missed it. (Sorry, Richard!)
Sarah will be following up with you directly to get you those files.
Thanks for the referral. Some of my guidelines document is getting dated. Now for a shameless plug: My book, Elements of MATLAB Style, is freshly available from the usual online book sources. It covers many more topics, including features of recent releases. In addition to description of the recommended style, I also include examples, rationale, and some discussion of alternative practices.
Shameless plug welcome! I spent a few minutes previewing your book on Amazon.com. Looks interesting!