Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

What frustrates you about MATLAB?

Asked by Oliver Woodford on 16 Feb 2011
Latest activity Commented on by per isakson on 4 Dec 2014 at 21:58

I love MATLAB. It is so quick and easy to write software to do what you want. It has excellent debugging and profiling tools. It is cross platform, making code easy to share (assuming the other people have forked out for the not-so-cheap license). It has interfaces to other software.

However, there are some things about it that irk me. I'd like to hear from other people what things annoy them about MATLAB.

6 Comments

Oliver Woodford on 16 Feb 2011

Yes, somewhat, but not entirely. This is "What's missing + what's wrong?". My answer on cost is an example of the latter. But the other question is more positively phrased, so will undoubtedly get the lion's share of responses from loyal MATLABers. :)

Ozan Oguz on 2 Apr 2013

Help and examples sections are not newbie friendly.

Jan Simon on 2 Apr 2013

@Ozan Oguz: Please post an answer in the answer section, not as comment.

I'm very surprised, because it did not find any better documentation and more useful examples in any software package I've tested. Please add some explicit points for criticism.

Oliver Woodford

Products

81 Answers

Answer by Oliver Woodford on 16 Feb 2011

MATLAB's figure rendering and exporting functions are so full of bugs and "features" it defies belief. The rendering is very slow and stalls computations - rendering should be in a separate thread and not delay computations (unless specified by the user). It is crazy that you can't have a seperate colormap per axes, either.

5 Comments

Wouter on 1 Nov 2013

I second this comment. I am seriously considering switching to Mathematica just because of the extremely crappy figure- and graphics handling...

per isakson on 5 Dec 2013

HG2 is around the corner.

Oliver Woodford on 5 Dec 2013

Could still be a long wait - it's been talked about for years. Also I've tried it in R2013b, not enough to work out if it's as buggy, but enough to realize it's just as slow! Fingers still crossed for something good, though.

Oliver Woodford
Answer by Ian on 28 Mar 2011
  • GUIDE is a such an underpowered mess. Very poor set of widgets, endless bugs and terrible performance in the Guide editor (try moving sets of elements with the keyboard and weep!). TMW has dragged along hidden support of more UI widgets likes tabs, why can't they just update GUIDE and bring it.them into the modern age? Yair Altman does more in one blog post than TMW does in each year's paired releases to make GUIs better in Matlab!
  • UNICODE support -- why is TMW so far behind on this!?
  • Graphics quality -- graphics and text should be anti aliased by default and better composited, the pixel vomit is unacceptable on such an expensive product and one where its competitors are so ahead in this regard.
  • Poor OS X support. Failure to copy vector figures to clipboard is my biggest gripe.

3 Comments

Gary on 28 Mar 2011

I agree 100% regarding your GUIDE comment.

Juan Cardelino on 16 Jan 2012

I can't agree more with you regarding unicode support.

QiQin Zhan on 28 Feb 2013

You just say what we all want to say about it.

Ian
Answer by Oliver Woodford on 16 Feb 2011

It's very expensive (unless you're a student), especially if you use lots of toolboxes. Fortunately my company pays :), but if I start my own company I'll think twice about (ok, before) buying MATLAB.

10 Comments

Jan Simon on 21 Mar 2013

@Stephen: Although I understand, that a cheap freelancer licence would be a benefit for freelancers, it is very clear, that especially their job is creating commercial software. And then the price of Matlab should be forwarded to the customers, but not to TMW! Why should TMW sponsor freelancers massively?

Image Analyst on 21 Mar 2013

Perhaps there could be a MATLAB-Elements, like Adobe Photoshop, or a cloud version, again, like Photoshop: http://www.adobe.com/products/photoshop/buying-guide.html

There is the standard Photoshop version for $699, Photoshop Elements for $99.99 (a real bargain), and a monthly Photoshop Cloud for only $20 per month.

Walter Roberson on 21 Mar 2013

MATLAB and associated toolboxes are priced at a point where it is not feasible for non-students to use the software non-commercially, such as volunteers, or freeware / donationware, or low-budget NGO. TMW has no legal obligation to provide lower-cost licenses for those purposes, but we can still acknowledge the fact that personal licenses are more or less confined to the well-to-do individuals.

Oliver Woodford
Answer by David Young on 28 Sep 2011

Overriding subsref and subsasgn in a class is spectacularly awkward.

The problem is this. Suppose you override subsref in order to change behaviour of obj(...). Then your subsref is also called for the syntax obj.propname. In order for it to handle this correctly (i.e. behave the same as the built-in subsref) it has to reimplement all the checks for access protections that are normally done by the system. For just how problematic this is, look at Daniel's answer to my question here.

Apart from this major difficulty, it's also inefficient for every subsref to have to switch on the indexing type ('.', '()', or '{}') on every call, and for the system to have to build a struct that includes the indexing type as well as the indexes.

As far as I can see, it would be so much better if the different indexing syntaxes called three different methods.

3 Comments

Daniel on 28 Sep 2011

Wait until you try and get your overloaded subsref function to handle colon and the other "odd" indexing notation: http://www.mathworks.com/matlabcentral/answers/6764-overloading-subsref

You would have thought that with the major overhaul of the OO system that they would have gotten it much better. Often simple OO things are inefficient and complex things are near impossible.

David Young on 28 Sep 2011

Daniel: indeed!

SK on 30 Apr 2014

Agree. subsref and subsassign are unusable and can be fairly called broken in principle. Also, once you have overloaded () for a class, you can no longer have consistent notation for arrays of that class type. The basic reason is the overuse of the () operator for array subscripting, instead of the more sane [].

David Young
Answer by Jan Simon on 16 Feb 2011

Using a C-compiler not included in the list of known compilers is horrible. "mex -setup" calls an M-file, which calls a PERL script, which creates a DOS batch file, which is interpreted by another PERL script, which calls the compiler through the command line interface.

Strange. A tiny M-file could create the same command line call to the compiler also. But it would be much easier to adjust it to a different compiler.

2 Comments

Jan Simon on 4 Apr 2011

I wanted to add the optimization flag /arch:SSE2 in my MEX call in Matlab 2009a. This works with:
mex -O OPTIMFLAGS="$OPTIMFLAGS /arch:SSE2" func.c
Because I have to do this programmatically I need the functional form and tried:
mex('-O', 'OPTIMFLAGS="$OPTIMFLAGS /arch:SSE2"', 'func.c')
>> ERROR: flag /arch:SSE2 is not recognized.
Ugly parser! This is the correct calling sequence:
mex('-O', 'OPTIMFLAGS="$OPTIMFLAGS', '/arch:SSE2"', 'func.c')
So I have to split the string inside the double quoted section, although these double quotes are exactly needed to signal, that the string should not be split! This is a drawback of the complicated pipeline as BAT-> M-> PERL-> Compiler.

m4 Chrennikov on 27 Sep 2011

Jan, you can always edit *.bat files directly.

Jan Simon
Answer by Robert Cumming on 16 Feb 2011

plot legends are not always placed in the "best" position - quite often its right slap bang on top of the data...

1 Comment

Dan on 22 Nov 2011

You can click on them (the legend) and move to another spot (even outside the axes). Also you can position the legend as an object at creation time or after by asiging to a variable and using "set".

Robert Cumming
Answer by Oliver Woodford on 16 Feb 2011

MATLAB is lacking tools for saving movies in decent compressed video formats (e.g. MPEG4, H.264 etc.). Currently I find myself saving a huge list of PNG files, then converting these to a video in an external application, which is far from ideal.

2 Comments

Oliver Woodford on 22 Nov 2013

Happily, this is becoming less true with every release, on Windows at least.

Wyken Seagrave on 14 May 2014

The secret of creating high quality videos on Windows is to use VideoWriter, an object compressed with Motion JPEG, and not movie2avi, which produces low quality video. So it is frustrating that, when you search the Help for "movie", and you find movie2avi, the only reference to VideoWriter is a single word at the bottom of the help page. I think there should be a warning that it has replaced movie2avi!

Oliver Woodford
Answer by Ian on 28 Mar 2011

Lack of OpenCL support: TMW forces us to depend firstly on a toolbox for this functionality, and secondly on the vendor lock-in using CUDA. Mathematica builds this in to its core, not some toolbox, and provides both CUDA and OpenCL support so we aren't forced to a single GPU vendor.

5 Comments

Val Schmidt on 28 Feb 2012

I agree with this one!!! I'm a mac user and since macs don't use Nvidia graphics cards it is very difficult to use the GPU.

Walter Roberson on 17 Jun 2013

Happening to read Val's comment again just now: MacBook Pro's added NVIDIA graphics cards in June of 2012; I am using one of them right now.

Curtis on 20 Jun 2013

They've had CUDA support for years and STILL the only way to get ANY OpenCL implementation is with third party plug-ins. Hopefully the massive hiring TMW is doing will start to change things soon.

Ian
Answer by tom 1line=1bug on 12 Sep 2011

Frustrating factoids after living with Matlab since version 4.x:

1. Ambiguous use of parenthesis ([([( indexing operations and function calling )])]). I wish Matlab's syntactic sugar could differentiate between this two actions, using parenthesis and something else (i.e. like Mathematica's use of parenthesis vs square brackets)

2. Poor quality graphics (already mentioned in detail by other fellows)

3. Excessive "commoditization" or segmentation of functionality that should be part of the core Matlab product (e.g. signal processing, image processing, statistics, and pdes).

4. I wish there was better quality control when rolling out toolboxes. The seemingly lack of coding style/guidelines is particularly annoying. Even toolboxes meant to be used together have inconsistent syntax and seem a bunch of functions "bolted-on" to Matlab, rather than coherent extensions of M language.

5. I hopelessly wish there was first-rate support for functional programming.

6. Very poor support for time series and data structure requiring multiformat date/time indexing.

99nth. Non-specific gripe: Over time Matlab is becoming less and less my primary platform for scientific computing and algorithm development, and more often than not just a target for deployment (meaning re-writing whatever project in the M language) because the customer/client is using it, or because a particular toolbox is a time-saver. I remember the days of yore, when Matlab looked like a hammer and most problems looked like nails. Now I feel that the handle of the hammer is a Baroque wooden carving, richly ornamented, weighting 120 lbs... More surprising is the strange comfort of spending so much more time working with Mathematica's superhuman -indeed extraterrestrial- capabilities for algorithm development and testing, and the "translating" to Matlab upon request. I guess necessity is the mother of strange companions...

1 Comment

Oliver Woodford on 28 Sep 2011

Commoditization is an excellent point. It should be an answer by itself.

tom 1line=1bug
Answer by Sean on 27 Sep 2011

I would love to just write x++; instead of x = x + 1;

4 Comments

Jan Simon on 27 Sep 2011

This has been discussed in CSSM repeatedly. It would concern MATLAB's fundamental methods for addressing variables. I do not assume, that this will be implemented.
But I see the benefit. A dirty C-Mex implementation is possible using some undocumented API functions. But I will not implement an instable method, which save micro-seconds, but can cause weeks for debugging.

Wilfred on 16 Nov 2011

Funny, in Simulink Stateflow (action language) this is already possible.

Andrew Reibold on 26 Sep 2014

If this is your biggest issue with the software, I'm very happy for you :)

Sean
Answer by Royi Avital on 27 Mar 2011
  • The lack of built in 64 bit compiler (MATLAB used to work with Photoshop out of the box).
  • The graphics stack performance. It's so slow!
  • Editor - I wish the editor could add rich text editing capabilities for code documentation (Adding LaTex, Graphs, etc...).

1 Comment

Jan Simon on 30 Mar 2011

And the editor needs a block selection.

Royi Avital
Answer by Knut on 5 May 2011

The fact that once you schedule a low-level function, you cannot in any way stop it. Such as conv(zeros(umpteen,1), ones(umpteen,1)). A big red, working "stop" button would have been nice.

I like to run my scripts, insert break-points, then test stuff using command-line on the variables available. In recent versions, I have not been able to define new variables that way easily, having to declare them as global (??)

I would have really liked the core matrix-syntax to be even cleaner (not having scalars being 1x1 2d arrays for instance).

I would have liked some sort of extension of the matrix syntax into tensors.

I really hate the frustration when I go from compact, vectorized, readable MATLAB-code and have to dip my toes into "real" programming languages, where you spend most of your time concentrating on the implementation instead of the functionality :-D

0 Comments

Knut
Answer by Patrick on 27 Oct 2011

The figure-export is a pain, if annotation are used they will move about, not all of them and not much and not to any order (at least nothing i could recognise) but sometimes a few mm in the odd direction.

1 Comment

K E on 25 Jul 2012

Also, quality of copied figures is poor (blurry lines/text) and requires workarounds like export_fig .

Patrick
Answer by Richard Finley on 30 Jan 2012

I have been a licensed user of MATLAB for the past 20 years. I am also a big Mathematica user and sometimes use Maple and Mathcad and of course I love R and Python. I have enjoyed using MATLAB for my numerical work, but the licensing hassles have driven me to the point that I am considering just dropping it after all these years. I don't mind paying the (substantial) price for my license -- but then just let me do my work -- whether it is on my main desktop or my laptop. I used to just get the update CDs and my license number by email and no hassles. Are you really making more money by stopping piracy with all your licensing hassles? I doubt it. You are driving away your paying customers/user base. I sympathize with this (former) user: http://mybrainextension.blogspot.com/2011/07/aaaarrrrrrgh-matlab.html

3 Comments

K E on 25 Jul 2012

Also I find the license manager cryptic for managing a small group of user licenses. If I have a license management task, I almost never open up the license manager and succeed on my first try; I always end up calling/emailing tech support.

Jan Simon on 25 Jul 2012

Without doubt FlexLM is neither smart, nor user-friendly. I've struggeled with several other software package also, which use this license manager. The usual procedure is 12 minutes for installing the software, 2 hours trying to install the license manager, one hour for emails and phone calls to the technical support, who comes in the next day, look of what I have done so far. Finally the sessions end with something like: "I've called the developpers this morning and they told me, that you need the computer's name and nothing else." But after we typed in the IP, the software suddenly accepts the connection to the license server.

The FlexLM software is a really bad choice. It is very sad, that TMW has decided for this service, because all it does is impeding the legal usage of Matlab substantially.

Mike on 25 Jul 2012

The fact that if I want to deactivate an old version of matlab on a PC with 2 versions, since there is a new release out and flex deactivates all versions on the PC is a pain.... Why doesn't it just deactivate the one selected?

Richard Finley
Answer by David Young on 28 Mar 2011

The use of degrees as the unit for angles in some functions of the Image Processing Toolbox. For instance

  • hough: takes arguments and returns results in degrees

as opposed to, for example,

  • atan2: returns result in radians, like the majority of angular functions in most languages and maths packages.

Apart from the irritation of having to keep writing *pi/180 here and there (and forgetting to quite often), it also makes it harder to teach students to use grown-up units (radians) in their programs rather than degrees.

4 Comments

David on 12 Mar 2013

It appears that rad2deg.m deg2rad.m radtodeg.m and degtorad.m all exist within the mapping toolbox. Now, I don't know whether I can use those functions without requiring others to have a license for the toolbox. This is dumb. Pick a name for the function pair and make them built-ins.

Walter Roberson on 12 Mar 2013

No element of a toolbox can be used by anyone who does not have a license for the toolbox. It would, for example, not be permitted to copy those files from the mapping toolbox and include them with your code that is intended to run without the toolbox.

Bjorn Gustavsson on 22 Nov 2013

I think we all can copy all the relevant content of deg2rad and rad2deg and distriute them without concerns about violating anything.

David Young
Answer by Sean de Wolski on 31 Mar 2011

Mesh doesn't accept class 'single' inputs.

0 Comments

Sean de Wolski
Answer by Pierre on 31 Aug 2011
  1. I'd really appreciate improved MEX-debugging capabilities on Linux systems in regard to the user: Seriously, we're still using GDB? Launching MATLAB in CLI-only mode in order to see what your MEX is doing?
  2. Customizable color schemes for C-files... what's the matter of applying only half of the personalized colors? Use ALL or NONE if two separate color schemes are too much to integrate: if I optimize the color scheme for personal visibility and oversight, coding C is nearly impossible as it results on dark navy blue keywords and dark green comments on black background.
  3. Object oriented programming would be a nice feature. (I now, I now, it is supposed to be present, but there are so many times I develop OO systems according to OO concepts and design patterns and have to realize at the end, that behaviour isn't supported by MATLAB's OO-engine. It's more like "as-long-as-you-use-only-trivial-OO-concepts-you-wont-realize-it-just-looks-like-OO-but-in-fact-isn't"-concept. :(

0 Comments

Pierre
Answer by Oliver Woodford on 16 Feb 2011

It can be very slow, compared to the same functionality written in, say, C.

For example, for loops filling in cell arrays are slow. Also, code like:

A = sin(abs(A)) .^ 2;

is (I believe) not optimized to do all three operations on each element simultaneously. Rather, it churns the entire array through memory 3 times.

However, it's getting faster all the time. :)

4 Comments

Oliver Woodford on 16 Feb 2011

I want to have my cake and eat it. It would be great to never have to resort to a C mex file, but sadly I often do.

Royi Avital on 28 May 2011

I hope it doesn't do what you described.
If it does, They need to optimize it fast.

Oliver Woodford on 5 Dec 2013

The Julia language appears to offer the functionality of MATLAB with the speed of C, according to their benchmarks. And this blog post tackles exactly the point I make in the answer above. The solution? Devectorization!

Oliver Woodford
Answer by Jan Simon on 16 Feb 2011

FOPEN has lost its Vax-D support in Matlab 2008a without any notice in the documentation. The argument from TMW was, that computers needing this numerical format are not manufactured anymore and the further support will take too many resources from TMW.

Stopping the support without mentioning this in the docs took too many resources from me.

5 Comments

James Tursa on 23 Feb 2011

I have prototype functions working that overload fopen, fread, and fwrite and provide seamless backwards compatibility for VAXD/G support (i.e., you don't have to change any of your code that uses VAXD/G options). When I get some time I will polish them up and submit them to the FEX. Be careful of the submissions 22675 etc noted above since they contain bugs.

Jan Simon on 24 Feb 2011

@James: Thanks. I've published a C3D-File converter (format used in the motion-analysis), which is downloaded 20 to 50 times per month since April 2009. It seems that at least about 1000 other users suffers from this compatibility limitation also.

Stephanie on 4 May 2011

Unfortunately for me this is a continuing problem. ALL my data is in the vaxd format. I will probably have to pay a full time employee to convert all my files (1975 to present) and check that it is converting correctly. Mathworks has been working with me on fixing the freadVAXD function so I can upgrade from 2008a in the mean time. This is the first time I looked into different programing languages. Separating people from there data is never a good idea.

Jan Simon
Answer by Jan Simon on 21 Feb 2011

"load file.mat" saves 3 keystrokes compared to "load('file.mat')", but I've spent more than 600 keystrokes in answering desperate question in CSSM, Answers and goMatlab about using a variable as file name.

The HELP text of SAVE and LOAD explains the needed arguments explicitely. Therefore it is not Matlab, which frustrates me in this point, but the fact that a lot of Matlab beginners are overstrained by the tricky and actually not useful feature of non-functional forms of commands - and that even a good help text cannot intercept these problems.

0 Comments

Jan Simon
Answer by Matt Tearle on 21 Feb 2011

The way that anything that turns char into cell arrays strips spaces when it does so. Sometimes -- often, in fact -- I want those spaces. Would it hurt to at least have the option?

2 Comments

Teja Muppirala on 28 Mar 2011

Wouldn't mat2cell work?

a = 'aaa ';
b = 'bb';
c = ' C '
A = strvcat(a,b,c)

mat2cell(A,ones(size(A,1),1))

Walter Roberson on 28 Mar 2011

The strvcat() step adds spaces to short lines, and the mat2cell is going to preserve those introduced spaces.

Matt Tearle
Answer by per isakson on 27 Mar 2011

To produce diagrams for a report is often quite frustrating. I've seldom try to do anything special because of the risk to waste my time and end up with a disappointing result. However, now I try and I'm indeed frustrated.

Background:

  • A simulation study and I want to present the result in a few Trellis Displays (plot matrix)
  • MsWord and I want to CopyFigure&Paste the diagrams into the report, i.e. use the meta file format (emf). I believe that with MsWord emf is better than eps. However, export_fig doesn't support emf(?).
  • One Trellis Display contains 3x3x3=27 grouped bar graphs showing histogram data. It is readable and useful!

Approach:

  • Put the axes on a figure, which has the aspect-ratio (and size) of an A4-paper
  • Absolute units so that I can measure with a plastic ruler on the print-out and adjust the code based on the reading (without tricky calculations).
  • Crop the white margins of the figure.
  • Edit Copy Figure | Paste into MsWord | and finally convert to Acrobat PDF.

Causes for frustration:

  • Some elements of the Trellis Display are not displayed on screen. OK, MATLAB had choosen OpenGL. Painters does a better job in this case.
  • The "Trellis strip" above the bar graph interferes with the box of the bar graph. Adjusting the positions doesn't really help. OK, the order in which axes are created is important. I have to create the strip before the bar graph (or better use UISTACK).
  • Handle graphic objects of the Trellis Display are dislocated on the printout. OK, I hadn't made sure "all" units were set to normalized before exporting/printing. The Mathworks calls MATLAB a high level language and ask me to handle this "feature" of PRINT. MLINT could at least have given me a warning.
  • MATLAB doesn't provide a crop-figure function (Windows platforms). However, with TightInset I was able to improve my old crop_figure.
  • The width of the bars vary. (I call that a bug.) In the worst case a few bars are only half as wide as the widest. I've seen something similar with IMAGE. In that case changing painters to zbuffer solved the problem, but not this time. OK, adjusting BarWidth seems to help somewhat. There seems to be a minimum width.

Will a new and better graphic support be part of R2011a? I've waited so long! However, this litany reduced my frustration a bit. Now, I will overlook the taints in my Trellis Display and do something useful.

/ per

0 Comments

per isakson
Answer by Walter Roberson on 28 Mar 2011

Schedule keeps slipping on the DWIM (Do What I Mean) toolbox.

2 Comments

Matt Fig on 28 Mar 2011

And that's the one that could send the entire MW development team to Geneva!

Star Strider on 25 Jul 2012

That brings to mind something that I read was posted on the Stanford University computer bulletin board sometime in the early 1970s:

     I really hate this damn machine!  
     I wish that they would sell it.  
     It won’t do what I want it to,
     But only what I tell it!  

I’ve certainly had days like that.

Walter Roberson
Answer by Aleksander on 28 Mar 2011

The database toolbox is way too sensitive: You have to use string commands in order to have linebreaks in your code, or you are doomed with one loooooooong sentence! It's also too picky regarding the syntax, considering it's supposed to support several different SQL languages.

Start giving out the source code for webinars a day in advance, rather than several days later. That way people can actually play around with the code, and the presenter can go through some functions etc but spend more time on Q&A and applications.

Call me old-fashioned but I much prefer the "old" printed User Guides for the Toolboxes. I'd be happy to pay for them. When I need to check if there's an update or additional info I'll go online, but for most purposes I just want to grap the guide to look something up quickly without cluttering my screen with help windows.

1 Comment

K E on 25 Jul 2012

You can get some PDF manuals here and print/bind them at your local printer. I agree, the help windows are only useful if you have a specific command to refresh your memory about, but not if you want to get a big picture (for example, regexp is covered in several pages in the documentation).

Aleksander
Answer by Sean de Wolski on 17 May 2011
plot(1:10,'b-',3*(1:10),'r')

Throws an error. MATLAB, you know how to plot against indices when there is only one vector, why not two after a line style string?

0 Comments

Sean de Wolski
Answer by Bjorn Gustavsson on 22 Sep 2011

Once every now and then when I type a character or two at the commnd-line and hit "tab" for expansion matlab simply freezes, and I have found no way to unfreeze it - so it is just to kill the process and start over again. This is very frustrating since at times too much work have gotten lost.

2 Comments

Jan Simon on 22 Sep 2011

I hope you've sent a report to the technical support team mentioning the Matlab and OS version.

Sean on 27 Sep 2011

Happens to me too sometimes.

Bjorn Gustavsson
Answer by Eric Keller on 30 Jan 2012

I know nobody writes big programs in Matlab (haha), but it sure would be nice to have a source code browser. I don't use simulink much, but there is a nice browser in there.

4 Comments

Walter Roberson on 31 Jan 2012

What kind of features would you envision in a "source code browser" ?

Walter Roberson on 31 Jan 2012

Should this perhaps be over in http://www.mathworks.com/matlabcentral/answers/1325-what-is-missing-from-matlab ?

Jan Simon on 7 Feb 2012

I'm using a > 200'000 lines of code program distributed to about 2000 M- and C-Mex-files. When I want to modify a specific feature, it would be nice to have a treeview to the dependent functions. But if e.g. the data are shared by using a large struct, there is not automatic solution to find the functions which read or write a certain substruct.
Without doubt an object oriented approach is required to manage "large" projects - but this does not mean object oriented syntax necessarily.

Eric Keller
Answer by Eric Keller on 8 Feb 2012

there are sometimes where you just have to kill matlab because it would rather complete a nonsense calculation rather than listen to I really didn't want to know quite that much. I swear this happens every time I have a short deadline on a presentation. Now I just want to go home, but I promised to do a presentation before I leave.

1 Comment

Walter Roberson on 9 Feb 2012

And when it breaks down or starts to annoy
Or grinds when it moves
And gives you no joy ...

Eric Keller
Answer by Yash on 25 Jul 2012

the constant version change and the no support for previous version commands

4 Comments

Image Analyst on 26 Jul 2012

If you don't want to upgrade versions twice a year, don't. No one is forcing you to. They typically will say for years beforehand that a particular function is deprecated (meaning obsolete, scheduled for removal, and recommending/warning you not to use it). I know they changed roipoly but kept the old roipoly as roipolyold and deprecated it, but thankfully they've kept it so far (about 5 years or so). It has some nice features the new one doesn't have (yet). So the support will last for many years after you were warned not to use a function.

Daniel on 3 Aug 2012

@Lucas, in the FOSS community (not that MATLAB is part of that) biannual time based releases are pretty common with Ubuntu, KDE, and LibreOffice all doing releases twice a year. Just because a new release comes out every 6 months doesn't mean you need to upgrade immediately. I generally am a year or more behind.

Oliver Woodford on 31 Oct 2013

I think a point being made here might be that bugs aren't fixed retrospectively in older versions of MATLAB, via updates/patches.

Yash
Answer by Matthew on 26 Feb 2013

Matlab is the greatest, but it bothers me to no end that microsoft excel does bar graphs, error bars, and in general does statistics in a much more straightforward manner than matlab. It should not be so.

1 Comment

Sean de Wolski on 27 Feb 2013

Could you explain how?

Matthew
Answer by Charles Harrison on 17 Jun 2013

Things that frustrate me about MATLAB... most problems usually revolve around Simulink.

1.) The Simulink 'model' command does not accept complex data types. The 'sim' command does...the model command is array inputs only.

2.) Simulink often initializes super slow when executing sim commands.

3.) If you tell Simulink to not recompile your model by 'assuming up to date', if you dont also set the "error if out of date" field to none, then it still will check whether the project is up to date.

4.) Simulink's performance advisor and profiler are a joke. Simulink profiler will tell you information, but you cant do anything with that information.

5.) It amazes me MATLAB still does not allow for writing out symbolic math easily.

6.) GUI's are trick y to put together. It seems like GUIDE is an all or nothing approach. You eather start your GUI from GUID or your start from scratch. Once you started a GUIDE project through, its very difficult to continue as a .fig only file.

1 Comment

Walter Roberson on 17 Jun 2013

When you refer to "writing out symbolic math", are you referring to input or output? As you familiar with MuPAD and MuPAD notebooks?

Charles Harrison
Answer by Csaba on 4 Dec 2013

My current frustration is with the Matlab editor: when the same M-script source is open in both the Matlab editor and another code editor (certain things are more efficient in the other editor), and the Matlab editor detects a change that was made to the file outside, it reloads (which is correct) - but it also forgets about all location information from before the reload, and jumps to the beginning of the file.

I would expect this is just an oversight (how hard would it be to remember the line at which the cursor was before reload - even if the code change that triggered the reload shifted content, most of the time this would be by only a few lines or pages, still much better than starting from the top of the file every__time ...).

And if that's not feasible, at least letting the bookmarks survive the reload would be a reasonable work-around, but sadly no, they are erased as part of the reload as well.

Am I the only one having trouble with this?

1 Comment

Image Analyst on 5 Dec 2013

That does sound frustrating. I also have the same problem when I go to GUIDE and save it from GUIDE and return to MATLAB. It blows away bookmarks, breakpoints, etc.

Csaba
Answer by Krzysztof on 11 Dec 2013

The following assignment is misinterpreted as a function call:

a { 1 } (0 == 0) = [];

Compare to a version that is ugly but correctly interpreted:

a{ 1 } (0 == 0) = [];

5 Comments

Sean de Wolski on 11 Dec 2013

Hi Krzysztof,

My answer is exactly what is happening. The entirety of the text after the first space following the a is interpreted as multiple string inputs to a function a. For example:

Create a function a that displays its inputs

function a(varargin)
varargin{:}

Then run your above command:

>>  a { 1 } (0 == 0) = [];

You'll also notice that every thing to the right of the a is purple, indicating a string input.

Once again, I see how this could be frustrating, but it is by design.

Krzysztof on 12 Dec 2013

But this is also inconsistent with the reference documentation you refer to because it explicitly says that assignment has precedence over the space-following rule. Otherwise, " x = 1; " would be a function call too.

Daniel on 12 Dec 2013

Sean, the documentation is so confusing on this issue and the result non-intuitive that I think it is a stretch to call the result expected.

Krzysztof
Answer by SK on 30 Apr 2014

2. Echoing the original poster, the graphics functions are horrendously inefficient when multiple axes and figures are involved. They are also clunky to use and rather sparsely documented. I'm not even going to justify this as I suspect that there would be sweeping agreement from many.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

4. Is it possible to better manage the plethora of Variable Editor tabs that open up when navigating into a cellarray, struct or deeply nested variable. Perhaps an option not to open a new Variable tab every time, but overwrite the existing tab. Or perhaps a complete rewrite of the Workspace Window so that it shows variables in tree format, with the contents of each level appearing in a tab to the right until the leaf variable is displayed in a final view tab. Something like in OSX finder or pathfinder.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

5. When you right click on a function name or class name 'Foo' and select Open 'Foo', the file that is opened often has no relation to the file that should be opened. For example, If I select the 'Foo' in Bar.Foo, the Foo method in Bar should be opened, not some completely unrelated 'Foo' method - which is what happens currently.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

8. Matlab was originally intended to be a matrix calculator. However, as with other tools, it is being used to do things far beyond what perhaps had been envisioned at the time of its creation. Complex projects with thousands of files are not uncommon. So would it be possible to have more detailed syntax highlighting? For example see the C++ section of the syntax highlighting in the latest version of Visual Studio. Perhaps that can be used as a role model.

Regards, Sandeep

0 Comments

SK
Answer by Guillaume on 26 Sep 2014

The special casing of the shape of the output of plenty of functions when arguments are row vector is madness to me.

Example: what is the size of:

A(B)

Answer: size(B) except when it's not

Other example, compare

A = [1 2 3 4 5]; %any row vector
union(A, [])
union(A, double.empty(0, 1))
union(A, double.empty(2, 0))
union(A, double.empty(0, 2))

with

union(A, double.empty(1, 0))

2 Comments

Titus Edelhofer on 26 Sep 2014

Interesting. But to me it looks reasonable in fact: the rule is, output is row vector, if both input arguments are row vectors, and column vector in all other cases.

A row vector is a matrix with 1 row (independent of the number of columns, could be 1, 2, 5 or 0). From your examples only double.empty(1,0) qualifies as a row vector.

Titus

Guillaume on 26 Sep 2014

You think that the union of a set with the empty set should not always be equal to the original set?

In my opinion, it is wrong to have a special behaviour for a particular subset of valid input.

Guillaume
Answer by Robert Cumming on 16 Feb 2011

removal of working version (from 6.5 onwards) on HPUX.

0 Comments

Robert Cumming
Answer by Sean de Wolski on 16 Feb 2011

Difficulty publishing documents.

For calculation publishing, homework assignments etc, it's difficult to show values along the way and display them.

5 Comments

Jiro Doke on 20 Feb 2011

You can publish function files (with M highlighting) since R2008a.

Ninetrees on 22 Sep 2011

I have used Editpad Pro for all my text editing for years. It has a very powerful highlighting capability, and permits copying highlighted text as RTF. Fortunately, MATLAB's editor checks for updated files on disk promptly, so I don't usually have a delay when I save from EPP and swap to MATLAB. I use the GUI as my primary interface to MATLAB rather than the command line.

K E on 25 Jul 2012

Hard to document equations (I use MathCad for this, but then it's a separate document from my code).

Sean de Wolski
Answer by Jan Simon on 24 Feb 2011

Not concerning MATLAB, but MATLAB Answer:

The latency caused by the automatic preview drives me crazy. It frustrates me, that there is a function implemented already, which disables the auto-updates, but this function is called after a large number of charatcers only. It would be extremely easy to set this number to 1 in the source code. But it seems like TMW waits until the next monthly update to include such improvements. What a pitty.

3 Comments

Jan Simon on 24 Feb 2011

Ha. Solved: Create a short dummy answer at first. Reload the question page. Hit the "Edit" button before the page is completely loaded => A tiny inputbox opens in the top right corner on a blank page => without a preview window! Not nice, but not annoying anymore.

Zain Mecklai on 29 Mar 2011

Just curious, what browser are you using?

Walter Roberson on 29 Mar 2011

Firefox here. This situation is discussed in the "Matlab Answers Wish-list" topic.

Jan Simon
Answer by Andy on 18 May 2011

"It is cross platform, making code easy to share (assuming the other people have forked out for the not-so-cheap license)." This made me laugh. I have paid $100 for a student version of MATLAB. (I'm sure this is quite inexpensive compared to non-student versions of MATLAB, but that's $100 more than something like Python, and grad students do not typically have much in the way of extra money.) Now I can't buy the compiler toolbox. I can't pay for the privilege of taking the code I write on my desktop computer and using it on my netbook? I can't write an application to share with fellow students or professors? Users have a lot of other options for programming languages, and sharing your applications is a fundamental need for programmers that basically any of these other languages would satisfy. But TMW won't take my money for the same feature? I really think the compiler toolbox should be included in the base MATLAB installation, and since I know that won't happen any time soon (probably ever), I cannot understand why they wouldn't want my extra $30.

I also use MATLAB at work, where it is installed on a single computer while they decide if they want to shell out for more licences. I cannot recommend the compiler toolbox, builder EX toolbox, or spreadsheet link EX toolboxes to the company, because I cannot see the prices! TMW website won't show prices unless you give them all of your information in the first place. So I thought, "that's fine, they already have my information because I've already paid for their product". But since they see that I have a student account, I'm not allowed to even see the prices of other products that aren't available for the student version! Why on earth would they have this restriction?

In the end, MATLAB is neat. I love the IDE. I think the editor has features that are lacking from almost any other IDE in any other language. And the code generation/ease of use features for non-programmers are excellent. But given the amount that has to be spent to make use of your own code on more than one machine and the incredibly slow and under-featured GUI toolkit (that many others have already mentioned), Python + matplotlib seems like it's in my near future.

11 Comments

Andrew Newell on 18 May 2011

I agree that there is no point in their being so secretive about prices. Why not just post price tables on their web site?

Walter Roberson on 18 May 2011

They have a pricing plan: $US7100 gets you the compiler and base MATLAB together, with a right to distribute to as many people as you like for however much you want to charge them. Your counter-proposal is for a price much less than $100 per person.

This topic reminds me of Harlan Ellison's "Pay The Writer" essay, available on YouTube. (Caution: strong language.)

Andrew Newell on 18 May 2011

Anything written by Harlan Ellison should be approached cautiously.

Andy
Answer by Bjorn Gustavsson on 27 May 2011

That contour effects the clim range! I've used something along these lines:

pcolor(x,y,z1)
hold on
contour(x,y,z2,8,'w')

Just to see if the shape/location in z2 aligned with those in z1. Since matlab7 I had to use the 'v6' flag. Now I'm gently told that functionality is going out. So I guess I'd have to track every "contour('v6'" in all my code and replace it with something along the lines of:

pcolor(x,y,z1)
hold on
cX = caxis;
contour(x,y,z2,8,'w')
caxis(cX)

Which I find uglier and clunkier. Or I could shadow contour with my own wrapper where z2 is scaled to cX if there is a colour argument. But I prefer to avoid shading the mathwork's functions.

0 Comments

Bjorn Gustavsson
Answer by Arthur on 30 Aug 2011

In the spirit of "do what I mean" while testing functions, the command history is oblivious to context. Frequently I'll start my tests ("runtests"), stop at a breakpoint and examine some variables ("look.at.this.object"), then kill the function and need to restart the test. In this situation, [up] [enter] does exactly what I said (repeat last command entered), but never what I want (repeat last command in this scope: "runtests").

Whatever I did while stopped in the debugger is completely meaningless in the base workspace. The command history would border on reading my mind if it followed which workspace commands were issued in.

1 Comment

Walter Roberson on 30 Aug 2011

If you have variable names being passed down using the same dummy variable names, or if both routines use the same global variables, then you might have good reason to want to repeat the same command in different contexts. The same goes if you are using shared variables.

Arthur
Answer by Derek O'Connor on 12 Sep 2011

At Walter Roberson's request I'm reposting this answer here.

Boredom Forecast: High(78/100). Discussion of Syntax.

First, get the preferred indentation by using "smart indent" in the Matlab Editor.

 for t = 1:1:26
    if 0<t<=4
        x1d(t) = 0.5*t;
        x2d(t) = 0.5*t;
    elseif 4 < t && t <= 7.
        x1d(t) = 0.5*t;
        x2d(t) = 3.33;
    elseif 7<t<=10
        x1d(t) = 0.5*t;
        x2d(t) = 10/3 - 0.5*(t-40/3);
    elseif 10<t<=26
        x1d(t) = 0.5*t;
        x2d(t) = 0;
    end
end

Second, as Paulo Silva points out, compound logical expressions, such as 4 < t <= 7 are not allowed in Matlab, Fortran, Pascal, ..., etc. Instead you have to write (for the convenience of the compiler-interpreter (writer)), 4 < t && t <= 7.

Count yourself lucky. In some languages you would have to write if 4 < t && (t < 7 | t = 7) etc.

This logical expression would take an eagle-eyed programmer anywhere from 10 mins to a day to check for errors (precedence rules for && versus |, etc.).

This is crazy. Any compiler-interpreter that rejects 4 < t <= 7 is doing so for purely lexical-syntactical convenience. This is not a code generation problem. Most 1st or 2nd-year computer science students could write a (character-by-character) program that would translate 4 < t <= 7 into 4 < t && t <= 7.

For me, the key to Matlab's success, and what attracted me, was the important syntactical innovation by Cleve Moler: a notation that made it easy to translate statements in Linear Algebra into a programming language. This is what IBM's Jim Backus tried to do with the FORTRAN (FORmula TRANslation) (56?) compiler. He succeeded, despite the sceptics, and Cleve Moler succeeded, despite the sceptics, to produce programming languages that are widely used in scientific computing.

So, in typical Irish fashion, I will answer your question with a question:

Why can't Matlab, etc., recognize the simple statement if 4 < t <= 7

Derek O'Connor.

PS: Another question: why is it so difficult to write anything but plain text on this site? I had to write | for the double |, which kept disappearing.

Anybody for Stack Exchange?

PPS: Yes, yes: we know how to get rid of all the elseif's

16 Comments

Derek O'Connor on 16 Sep 2011

@Jan, Walter

First we had straw men. Now we have red herrings:

>> for t = 3:8, if (4<t<=7),disp(['In Range']),else disp(['Out Range']),end, end

In Range In Range In Range In Range In Range In Range

>> for t = 3:8, if (4<t) && (t<=7),disp(['In Range']),else disp(['Out Range']),end, end

Out Range Out Range In Range In Range In Range Out Range

I can see that this discussion is leading nowhere, so let's end it
by agreeing to disagree.

Walter Roberson on 27 Sep 2011

Can we not at the very least have it as an axiom that introducing new syntactic sugar should not lead to errors in valid existing code?

Jan Simon on 27 Sep 2011

@Walter: TMW follows this idea. At least usually. Some releases ago this was valid to reference a field of a struct directly after the function has return: "fcn(in).field". Now you need: "tmp = fcn(in), tmp.field". So I would not call it an axiom.

Derek O'Connor
Answer by Ninetrees on 22 Sep 2011

MATLAB assignment (a = 1) statements must be terminated with a ; to suppress output, but the 'natural' case is to NOT want output, in all but the simplest code segments (for me). As a result, my MATLAB code is cluttered with ;s, and I have the extra hassle of having to remember to put them everywhere. It seems that many have asked for this to be changed, but Mathworks has declined. I opine that it would an easy matter to allow either syntax via an inline flag or a global setting so that users have a choice. Then one could either change a setting in Preferences or add a line to one's code such as SemicolonOutputs=1 or SemicolonSuppresse=1. Dunno why it is so hard to convince Mathworks of that. I like the feature of being able to display results so easily without constructing a print statement, so I don't want the option to go completely away. ~R~

6 Comments

Jan Simon on 28 Sep 2011

@IA: I do not include mutliple commands inside a line also, but there are is over a million of lines in the toolbox functions. Checking them in a 100% secure way will cost time and money. Some users create M-files dynamically, which is not cute, but existing. These functions would have to consider the current behaviour of the trailing semicolons.
I agree, that there is not good reason to use the semicolons. But there are very good reasons not to change the working syntax.

Daniel on 28 Sep 2011

If TMW were starting from scratch, it might make sense to drop the semicolon, but I cannot see a reason to drop it now. I think the flag idea is really bad since it would introduce so many compatibility issues when sharing and reusing code.

I do wish mlint would give a warning for all lines that are not terminated with a semicolon: For example

x = 1:10
x
plot(x)

the plot function does not produce an mlint warning. This could cause nightmares if plot was changed to always return the handle.

@Walter, you can use commas to separate multiple commands on the same line (of course you get the output of each command).

Walter Roberson on 28 Sep 2011

According to an Answer from someone at Mathworks, the current version of timer interrupts can interrupt between any two lines -- which in turn means that if you have any critical code on a single processor or which is not protected by semaphores on multiple processors, then you should put the code on one line (and of course that code shouldn't call upon any toolboxes or .m or .p coded routines...)

Ninetrees
Answer by Guy on 21 Oct 2011

The command editor is horrible: quaint and tedious and so frustrating to use. Compare it to the functionality present with GNU readline. Using the latter I can easily recall previous commands using quick keystrokes to search for commands containing a given string and quickly modify the command and execute it. In the matlab command editor you have ... the arrow keys. How quaint. Yes, you can type characters and hit the up arrow and recall earlier commands that started with that string. Be still my beating heart.

0 Comments

Guy
Answer by MIchael on 11 Nov 2011

Fast simulation with S-Functions written in C. Speeding up simulation (e.g. in Accelerator mode) requires TLC files (at least wrapping). M-language requires full inlining (more TLC coding).

I haven't found any other way to enable rapid simulation with S-Functions and I don't want to code everything with Simulink Blocks (prefer S-Functions).

Maybe someone has a comment/hint on this?

3 Comments

Thijs on 21 Nov 2011

Once wrote a function to convert an arbitrary mathematical function into a simulink block diagram. Maybe thats something for you?

MIchael on 7 Dec 2011

Hey, thanks for your answer!
You mean putting Math Function and other blocks together?
This is what I actually don't like. My model is quite big, and I prefer writing it in M-Language (that's why S-Functions).

Titus Edelhofer on 1 Jan 2012

Hi Michael,

what about using the S-Function Builder? At least you get the tlc code for free ...

Titus

MIchael
Answer by Chris Ryan on 1 Jan 2012

what frustrates me in MATLAB is how to make a graphic with continuous data which has two boundary conditions as a result from the previous formula. for an example

Lp=A+B;
Lr=C+D; % these are the boundary conditions
for Lb = 1:1:30 % this is the continuous data
  if 0<Lb<=Lp
      Mn(Lb) = E*F;
  elseif Lp < Lb && Lb <= Lr.
      Mn(Lb) = 0.5*((Lb-Lp)/(Lr-Lp))+F;
  elseif Lb>Lr
      Mn(Lb) = (Lb/3)^2 - (sqrt(Lb/G));
  end
end
plot(Lb,Mn)

what i wanted to make is that program running from the first condition to another. when the program is running the data until the first boundary condition, the data calculation must change into the second formula and so on. but if i use that script it didn't run like what i've wanted to be. what should i do to solve this kind of problems? thank you so much..

3 Comments

Walter Roberson on 1 Jan 2012

0<Lb<=Lp means (0<Lb)<=Lp, and (0<Lb) will be a logical result which is always 0 or 1. You need to code (0<Lb) && (Lb <= Lp)

Chris Ryan on 1 Jan 2012

hello Mr. walter thanks for your answer. so it means the logical is always based on Lb? Instead of the boundary Lp and Lr. one more question is it ok to use if-elseif above or i use a script just like this,

Mn=zeros(size(Lb));
idx1=0<lb && Lb<=Lp;
Mn(idx1)=Fy*Zx;
idx2=Lb>Lp & Lb<=Lr;
Mn(idx2)=Cb*((Fy*Zx)-(((Fy*Zx)-Mr)*((idx2-Lp)/(Lr-Lp))));
idx3=Lb>Lr;
Mn(idx3)=((Cb*pi)/idx3)*(sqrt((E*Iy*G*J)+(((pi*E)/idx3)^2)*Iy*Iw));
plot (Lb,Mn)

or

Mn=zeros(size(Lb));
[a,a] = histc(Lb,[-inf,Lp,Lr,inf]);
z = {@(x)Fy*Zx,@(x)Cb*((Fy*Zx)-(((Fy*Zx)-Mr)*((x-Lp)/(Lr-Lp)))),@(x)((Cb*pi)/x)*(sqrt((E*Iy*G*J)+(((pi*E)/x)^2)*Iy*Iw))};
out = arrayfun(@(x)z{x}(Lb(a==x)),1:3,'un',0);
y = [out{:}];

what's the difference between the first script and the second one?
thanks again Mr. walter
and happy new year..

Walter Roberson on 1 Jan 2012

I would say that the second of those is unnecessarily complex. It is clever, but difficult to read or maintain.

MATLAB programmers in general understand logical indexing, and understand "for" loops.

Usually logical indexing is faster than "for", but not always, especially not with R2010b or later, and not when memory is low.

I do not think I understand your question about whether the logic is based on Lb. No matter what variables are involved if you have X followed by a relation operator followed by Y followed by a relation operator followed by Z, the operations will be handled left to right, doing the test between X and Y first to create a logical value and then using that logical value in the comparison with Z. MATLAB does not have any built-in range comparison syntax such as you probably wanted to imply by 0<Lb<=Lp

Chris Ryan
Answer by Diego Alejandro on 10 Feb 2012

all matlab information i've read about robot modelling in simulink 3D animation is all about serial robots and im working with parallel robots u.u

0 Comments

Diego Alejandro
Answer by Gurudatha Pai on 24 Feb 2012

I dont know if somebody has posted this already but I would like to mention that the auto-fill feature frustrates me a lot. I can start out with a capital L looking for say "Lambda" it still shows me list of all the other things that start-out with "l". Come on MTW, there it cannot be that difficult to sort with case!

1 Comment

Jan Simon on 24 Feb 2012

TMW or MTV?

Gurudatha Pai
Answer by Jette on 2 Mar 2012

The behaviour of pcolor: Why are the last column and row not shown? Why does the datatip always shows 0 for the z-coordinate?

1 Comment

Walter Roberson on 2 Mar 2012

Chess is played on the "faces" of the 8 x 8 grid, but Go is played on the intersections of that grid. Neither is right or wrong; they just are.

If you want a full-sized color display grid, use image() or imagesc() instead of pcolor().

If you want non-zero z-coordinates but interpolation at the intersections like for pcolor, then use surf() and view() it from the above.

pcolor() is intended to create a 2D pseudo-colored object, just the same way that image() creates a 2D object.

Jette
Answer by Mike on 25 Jul 2012

Lack of support for DAQ module digital IO when using 64 bit matlab. Yes, the obvious solution is to uninstall the 64 bit and install the 32 bit... Of course, I have machines deployed off site which need to run this code, but have the 64 bit loaded... argh..

1 Comment

Eric Keller on 25 Jul 2012

the whole daq toolbox is pretty frustrating. Not sure why they need to change the way the code works, converting my code is going to be a pain when they finally finish the session based architecture. The old way works pretty well, don't think it should go away. And the lack of 64 bit support is baffling to me.

Mike
Answer by Daniel on 3 Aug 2012

The number of MATLAB users using old versions who cannot cope with code written for new versions frustrates me. It would be easier if the MATLAB documentation made it easier to realize that using ~ to ignore input/output arguments is relatively new. Similarly, that the random number generator seems to be improved every year. Maybe adding updates to the documentation which explain what features are missing in the old release would convince people to upgrade.

4 Comments

TAB on 3 Aug 2012

Even in simulink many additions and chagnes are done in each release but it is very difficult to trace which addition/change has introduced in which release :-(

Image Analyst on 3 Aug 2012

TAB, have you ever read the release notes: http://www.mathworks.com/help/base/relnotes/? If these don't meet your needs, say why not.

Daniel on 3 Aug 2012

@Oleg, it is not really that. I include change logs to my functions. If I write a new function the change log is empty. The documentation will say it was tested with r2011a (I tend to run a few versions behind). I will then get complaints that is doesn't work on r2009a.

Daniel
Answer by William on 3 Aug 2012

My biggest Gripe is that it has not decent method of binary manipulation. Creat a bin data type that will display the answer in 1's and 0's without throwing it into a string. Tell me what the binary number looks like. Create a binary toolbox that is designed for firmware and embedded systems people like me. Please!!

0 Comments

William
Answer by per isakson on 28 Feb 2013
Edited by per isakson on 3 Mar 2013

Error messages like this one really frustrates me

    Error while evaluating TimerFcn for timer 'test4ida_timer'     
    Undefined function or variable 'parent_folder'.

The callback function of the timer invokes thousands of line of code. I feel Matlab lets me down: no function name, no line number.

It might not be the first time I complain about this. I reckon, it's my number one "Frustration cause candidate".

This one is even more frustrating

    Error while evaluating TimerFcn for timer 'test4ida_timer'     
    Specified key type does not match the type expected for this container.

2 Comments

Daniel on 28 Feb 2013

This is a messy problem and I have a bug report/service request dealing with this and a partial solution. Care to post it as a new question?

Sean de Wolski on 28 Feb 2013

And Per, please contact us as well to provide your specific feedback. I certainly agree, debugging with timers can be difficult.

per isakson
Answer by Fernando Torres on 24 Sep 2013

What is really frustating me is that it has Simuilink and here they just love it ... so I can't move my work to Python ... I can't figure out a way to convince ppl to move, they always play the "Simulink" card ...

2 Comments

Cedric Wannaz on 24 Sep 2013

Python is great but it is not always the best option. I could persuade my colleagues to migrate from Berkley Madonna, ACSL, etc, to MATLAB, but I could not have made them move to Python, regardless of Simulink. They are just not ready to invest that amount of time/effort.

Python is a great language for those of us who have already a significant experience in programming, because we can appreciate the elegance of Pythonic code, its efficiency in terms of development time and effort, etc. Having spent years dealing with C/C++, we can appreciate minimizing time to solution and development cost, and enjoy "gluing" powerful libs together.

However, contrary to common belief, it is not that easy to learn and use Python well. Many beginners will be stuck wondering how to install those weird egg libs that they need, why they have to install cygwin on their "Windoesn't" machine and compile another required lib (and how to do it), why their ArcGIS distribution comes with Python 2.5 and how to make their 3.x model use it, .. and then find out why these two distributions are always conflicting when they try to run their code or install libs, especially because they initially thought that a 64bit distro. would be nice on their 64bit hardware, and well, it doesn't look like Scipy wants to be installed on their system. They will also wonder what it means to subclass this XML parser class and overload some methods, when nobody told them initially that they would have to learn OOP basics for being able to use "simple Python".

So I agree that Python is a beautiful tool, but I truly think that migrating from MATLAB to Python is not an easy move, and that it won't increase productivity unless people are ready to invest a significant amount a time learning.

Stephen Cobeldick on 26 Sep 2014

Agreed.

I also think another reason is mathematics.

The mathematical aspects of Python (including numpy) seem to have been written by programmers who once saw MATLAB and thought "I can do that too!". However MATLAB's core functionality, of treating arrays as the basic data type has never been replicated: for users from a mathematical background (especially academic), MATLAB is likely to be the more intuitive tool.

Numpy's treatment of multiple dimension arrays is frankly quite embarrassing, whereas in MATLAB the equations (in vectorized form) can closely represent the written form of the matrix/array operations, without getting confused between vectors and matrices and arrays and orientations and pointlessly complicated bracketing. Half an hour of careful reading of numpy's documentation just to find the correct data type and commands to do basic matrix multiplication... bring back MATLAB.

The fact that MATLAB just works straight out of the box is a huge advantage (not everyone who uses computers wants to spend all day fixing their installations).

Although Julia seems to be another matter altogether...

Fernando Torres
Answer by Wouter on 1 Nov 2013

A big annoyance:

function like mesh and surf plot the interpolated data while shifted by 0.5 pixels. Very annoying and confusing when for example doing image analysis where you want to look at the original pixel/voxel values in 3D.

1 Comment

Sean de Wolski on 1 Nov 2013

Hi Wouter,

Can you provide an example?

x = magic(3);
surf(x)

Plots it from 1:3.

If you want to force it onto some other grid, use meshgrid:

[xx,yy] = meshgrid([0.5:1:2.5])
surf(xx,yy,x)
Wouter
Answer by Right Grievous on 5 Dec 2013

Over commoditization frustrates me. Who at MTW decided nanmean and mean2 were so fantastic they should be distributed among two different toolboxes?

I mean, both have fairly simple, one line workarounds (or you could write your own functions if you really wanted).

Dispersing basic shorthand code like this among toolboxes just makes the user feel like they bought a new car only to find the tyres were not included, or that MTW are some kind of cash vampire sucking every possible penny out of us...

"Oh, you dont want to have to write mean(mean(A)) every time, we have just the toolbox for you, only $499 this weekend"

I use mean(mean(A)) and I will continue to do so. In fact I laugh to myself every time I do because I know there is a permanent middle finger to MTW embedded in my code.

2 Comments

Walter Roberson on 5 Dec 2013

Why not mean(A(:)) ? The (:) part does not require any data copying, just a minor creation of a new header that points to the same data. Then mean() gets run only once, on a vector, instead of having to make two interpretive calls and calculate a sum per-column.

David Young on 12 Mar 2014

Another advantage of mean(A(:)) is that it works regardless of how many dimensions A has, so the code that uses it is potentially more general.

Right Grievous
Answer by Krzysztof on 13 Dec 2013

If you want to validate a change to an input control in e.g. Borland Paradox, you have two values available: the former value and the new value. MATLAB gives me the new value only, so there is no straightforward way to back off.

0 Comments

Krzysztof
Answer by Krzysztof on 13 Dec 2013
(fileattrib ('*'))

ans == struct

[ (fileattrib ('*')) ]

ans == true

You guys are crazy, amirite?

13 Comments

Philip Borghesani on 16 Dec 2013

I think there is confusion over the point of the question. How MATLAB treats ans is not the issue, how fileattrib treats ans is. It is confusing for ans to not be assigned the first function output value if assigned and it is bad form for a function to do so. As currently implemented fileattrib does something like this (pseudocode):

   function [a b]=fa 
      a=1;b=2;
      if nargout==0
         a=b;
      end
    end

Instead it should be doing:

 function [a b]=fa 
    if nargout==0
       display b;  %note does not assign to ans
    else 
       a=1;b=2;
    end
  end
Daniel on 16 Dec 2013

To me the ans variable is only useful when I am playing around at the command prompt. In these cases, I think I would want what is "returned" in ans more often than the success flag. How are you using the value returned in ans?

Krzysztof on 17 Dec 2013

I use the value returned in (ans) to extract (ans .Name).

Krzysztof
Answer by thomas mann on 10 Mar 2014

R2014a is here, but no HG2, no better working GUIDE, ahh so disappointed :/

1 Comment

per isakson on 26 Sep 2014

Now HG2 is around the corner(?)

thomas mann
Answer by SK on 30 Apr 2014
Edited by SK on 30 Apr 2014

I believe the following enhancements are sorely needed:

1. Ability to open files and at least read them while a computation is in progress without having to open a whole new instance of Matlab. It would also be nice if those files which can be edited safely could be edited while a computation is running in the background.

2. Echoing the original poster, the graphics functions are horrendously inefficient when multiple axes and figures are involved. They are also clunky to use and rather sparsely documented. I'm not even going to justify this as I suspect that there would be sweeping agreement from many.

3. The Matlab help system can be a lot more helpful. Why is it not even possible to resize the context sensitive help window that comes up when you click Help on 'Foo'.A better and more detailed organization of topics would be a start. Moreover why should one have to always open larger examples in the editor? The examples could also be inline with the html help with helpful comments embedded in the html. I find that the help reading phase is distinct from the experimentation phase.

4. Is it possible to better manage the plethora of Variable Editor tabs that open up when navigating into a cellarray, struct or deeply nested variable. Perhaps an option not to open a new Variable tab every time, but overwrite the existing tab. Or perhaps a complete rewrite of the Workspace Window so that it shows variables in tree format, with the contents of each level appearing in a tab to the right until the leaf variable is displayed in a final view tab. Something like in OSX finder or pathfinder.

5. When you right click on a function name or class name 'Foo' and select Open 'Foo', the file that is opened often has no relation to the file that should be opened. For example, If I select the 'Foo' in Bar.Foo, the Foo method in Bar should be opened, not some completely unrelated 'Foo' method - which is what happens currently.

6. Keyboard shortcuts to switch between the different numeric format displays.

7. Suppose there is a file called Foo in the current folder. Suppose you try to create a file called FooBar in the same folder. You start typing in the filename. The moment you have typed upto Foo, Matlab develops rigor mortis since the file name is now the same as an existing file name. It was really bad in a couple of versions ago, though I it appears to have been fixed in later versions.

8. Matlab was originally intended to be a matrix calculator. However, as with other tools, it is being used to do things far beyond what perhaps had been envisioned at the time of its creation. Complex projects with thousands of files are not uncommon. So would it be possible to have more detailed syntax highlighting? For example see the C++ section of the syntax highlighting in the latest version of Visual Studio. Perhaps that can be used as a role model.

8. Ability to Disable Drag and drop in Editor and in Current Folder Window.

9 Scrolling Figure Windows! I mean, is it all that difficult to implement or do the people at Matlab feel that they would be taking the fun out of the user's lives. Graphics is no longer used only to publish things on paper. People seriously want to inspect large amounts data visually on the computer screen.

10. Abilty to undock windows as group. For example suppose I want just the Workspace Window and tha Variable Editor in a single fullscreen window. Ishould be able to undock them into a single window. Makes sense?

The list can go on, but the civilized limit of 10 has been reached. Anyway, these are the some of things that have frustrated me at one time or another.

**On the other hand here are some good features that Matlab already has.

1. A very easy to use profiler, if not always so accurate.

2. Core IDE features work well, (workspace, variable and text editor) even if somewhat basic.

3. Easy to use parallelization and improving. Core algorithms are well parallelized.

4. Execution times for core algorithms are really good and appear to be constantly improving over releases.

5. Debugger works well and is easy to use.

Regards,

Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014
Edited by SK on 30 Apr 2014

Am placing each of the points in a separate comment as suggested by Michelle Hirsch.

1. Ability to open files and at least read them while a computation is in progress without having to open a whole new instance of Matlab. It would also be nice if those files which can be edited safely could be edited while a computation is running in the background.

Added: Ability to reliably kill a cpu intensive computation (say within 10 seconds of pressing ctrl+C) without having to wait forever.

Sandeep.

0 Comments

SK
Answer by SK on 30 Apr 2014
Edited by SK on 11 May 2014

3. The Matlab help system can be a lot more helpful. Why is it not even possible to resize the context sensitive help window that comes up when you click Help on 'Foo'. A better and more detailed organization of topics would be a start. Moreover why should one have to always open larger examples in the editor? The examples could also be inline with the html help with helpful comments embedded in the html. I find that the help reading phase is distinct from the experimentation phase.

Also there is no version information for each documented feature (function, class, keyword, etc..). Is it not possible to add a line that gives the first Matlab version to have that feature? A simple line at the beginning:

version: As of Matlab MCYYx

Other meta information can be added also. Instead of having a long sentence about a deprecated function, why not have a status field:

version: As of Matlab 2007a

status: Deprecated

Other status descriptors: Beta, OK ...

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

6. Keyboard shortcuts to switch between the different numeric format displays.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014
Edited by SK on 30 Apr 2014

7. Suppose there is a file called Foo in the current folder. Suppose you try to create a file called FooBar in the same folder. You start typing in the filename. The moment you have typed upto Foo, Matlab develops rigor mortis since the file name is now the same as an existing file name. It was really bad a couple of versions ago, though it appears to have been fixed in later versions.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

8. Ability to Disable Drag and drop in Editor and in Current Folder Window.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

9 Scrolling Figure Windows! I mean, is it all that difficult to implement or do the people at Matlab feel that they would be taking the fun out of the user's lives? Graphics is no longer used only to publish things on paper. People seriously want to inspect large amounts data visually on the computer screen.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014
Edited by SK on 30 Apr 2014

10. Abilty to undock windows as group. For example suppose I want just the Workspace Window and tha Variable Editor in a single fullscreen window. I should be able to undock them into a single window. Makes sense?

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

GOOD Feature 1. A very easy to use profiler, if not always so accurate.

Regards, Sandeep

SK
Answer by SK on 30 Apr 2014

GOOD Feature 2. Core IDE features work well, (workspace, variable and text editor) even if somewhat basic.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

_GOOD Feature 3. Easy to use parallelization and improving. Core algorithms are well parallelized.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

GOOD feature 4. Execution times for core algorithms are really good and appear to be constantly improving over releases.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

_GOOD FEATURE 5. Debugger works well and is easy to use.

Regards, Sandeep

0 Comments

SK
Answer by SK on 30 Apr 2014

Point number 5 also got mysteriously deleted. :-)) Perhaps some changes are required in the 'answers' section. Posting it again:

5. When you right click on a function name or class name 'Foo' and select Open 'Foo', the file that is opened often has no relation to the file that should be opened. For example, If I select the 'Foo' in Bar.Foo, the Foo method in Bar should be opened, not some completely unrelated 'Foo' method - which is what happens currently.

Regards, Sandeep

2 Comments

Image Analyst on 30 Apr 2014

It didn't get deleted. When someone votes for an answer, it gets moved to the top of the list. Your answer got moved here: http://www.mathworks.com/matlabcentral/answers/1427#answer_135183 (Way up the page).

SK on 30 Apr 2014

Oops, I see. Thanks.

Regards,

Sandeep

SK
Answer by Eric Diaz on 30 Apr 2014

The only thing that I can really think of is cost.

MATLAB is an extraordinary programming environment. I would love to work in MATLAB all day every day.

Actually, maybe the GUI implementation could use a little work. It should be more user friendly to make an app, kind of like in XCode.

0 Comments

Eric Diaz
Answer by Stefan Karlsson on 16 Jul 2014
Edited by per isakson on 26 Sep 2014

topping the wish-list:

1. A "beep off" that actually works, stops Matlab completely from making the OS beep sound.

2. A shared memory buffer between Matlab and MEX functions (so we dont have to copy all the data when calling mex). This can clearly be done, just look at how it works with the .net framework.

3. Major review of all toolboxes for speed and efficency. Examples include:

  • imresize, parsing the arguments is significant computation time. Really?!
  • im2col, ridiculously silly and slow implementation. Make dedicated function... please!
  • implicit extrapolation options for all functions. The function "conv2" has such implicit option, but only for zero padding. We should want also simple linear extrapolation padding, and circular padding. We want this not only for conv2, but for all functions where applicable. We do not want to do any more explicit padding of our matrices, when the optimized algorithms can take care of it easily.

2 Comments

Philip Borghesani on 16 Jul 2014

I am not sure what you are asking for or why you need it in request #2. Nothing is copied when an input is passed to a mex function.

If the request is for writable pass by reference inputs then we are aware of the request...

David Young on 1 Aug 2014

Your implicit extrapolation suggestion can be addressed to some extent by using exindex, though I agree that a general solution integrated consistently into image and volume processing functions could be useful.

Stefan Karlsson
Answer by per isakson on 26 Sep 2014
Edited by per isakson on 26 Sep 2014

I found an old bug of mine. I had failed to initiate a logical property and Matlab didn't care.

    %%
    logical_expression = [];
    if logical_expression
        disp('true')
    else
        disp('false')
    end

returns

    false

2 Comments

David Young on 26 Sep 2014

Not a bug, according to the documentation. From doc if:

"An evaluated expression is true when the result is nonempty and contains all nonzero elements (logical or real numeric). Otherwise, the expression is false."

(The help information is, however, misleading, as it does not cover the empty case. Both doc and help fail to specify what happens if the array has a complex element - in fact, an error is thrown.)

per isakson on 26 Sep 2014

The bug in question was mine. Nevertheless, this type of behavior of Matlab frustrates me.

per isakson
Answer by Cal on 3 Dec 2014 at 21:55

Plotting, plotting, plotting. Mathworks has been messing around with their figures for as long as I've been working with matlab, since 2004. I work at a large university and our department has been using, and "upgrading" matlab on a regular basis. We have many hundreds of figures that have been plotted over the years using the matlab default color order.

Now, with 2014b, mathworks has changed the default color order and as far as I can tell there is no way to just specify and use the old default color order as a start up default without defining it in every script. Today I noticed too that the box around each of my figures is blurry. To check, I saved a figure that was open in 2014b and then opened it in 2013a. 2013a produces nice crisp lines and fonts for labels and title whereas 2014b produces blurry lines and fonts. What is up with this?

10 Comments

Cal on 4 Dec 2014 at 0:23

Getting the old color order from 2013a using...

get(0, 'defaultaxescolororder')

and pasting that result into the following script is cumbersome but works...

%%
OldColorOrder = ...
    [0         0    1.0000
    0    0.5000         0
    1.0000         0         0
    0    0.7500    0.7500
    0.7500         0    0.7500
    0.7500    0.7500         0
    0.2500    0.2500    0.2500];
%%
clc
figure
x = 1:100;
y = 1:100;
set(0, 'defaultaxescolororder', OldColorOrder)
plot(x,y, x, y*2, x,y*3)
per isakson on 4 Dec 2014 at 0:37

"cumbersome but works"   put it into startup.m

I don't think that

    set(0, 'defaultfigureColormap', jet)

affects the color order.

If you don't get it to work as you want contact tech-support. That's part of what we pay for.

Titus Edelhofer on 4 Dec 2014 at 8:08

Hi Cal,

sorry, I mixed up color order (colors for 2D plotting) and colormap (color distribution for 3D surfaces). My answer affects e.g.

surf(peaks);

But the others correctly gave advice on defaultaxescolororder instead ...

Titus

Cal
Answer by Cal on 4 Dec 2014 at 19:28

Another plotting question, frustration.

set(gca, 'color', 'none')

does not work in 2014b. Again I created a figure, opened it in both of my versions on this machine and 2013a produces transparent axes while 2014b does not. I have set the preferences in figure... Edit/Copy Options to be transparent. Is there something that someone knows of that is missing? Is this a bug report that I should be sending to technical support as some have suggested?

Thanks, Cal

1 Comment

per isakson on 4 Dec 2014 at 21:58

Please move this to a standalone question with a relevant title and tags.

Cal

Contact us