[DEPRECATED] What frustrates you about MATLAB?
Oliver Woodford
on 16 Feb 2011
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.
---------------------------------
Because this thread has become so large it is slow to load and navigate. Please post new answers in the second thread.
---------------------------------
758 Comments
Time DescendingI was given to understand when the move feature was introduced that moving to a different thread would be possible in the future. I don't know the timeline for that feature or whether they're still working on it. It might come together with a different change I'm expecting to be done somewhere in the next 6 months.
Moving between threads will really help keeping threads like this clean, as I could move 110 answers to two different threads to get this one back to 50. It will take me an afternoon, but the end result would be navigateable threads.
Oh. I was afraid that's what happened.
:( seconded
"Can't we just move new answers to the most-recent thread?"
That is what I just tried with the above comments, but it seems that moving only works within a thread :(
Can't we just move new answers to the most-recent thread? I'm reluctant to try it myself, since these extra-heavy pages almost never load correctly on my connection, and I've already had to deal with items which won't move or don't move completely after I touch them.
EDIT: I guess this "structs" thread is now in a pile of comments instead.
@Bruno Luong Unfortunately the only current way that is possible is by closing the thread, which has its own downsides. That is one of the reasons I have asked for a soft-lock option to be implemented.
I don't think reading the opening post is an unreasonable thing to expect, especially if you expect anyone to bother reading your comment.
"why did you ignore the comment at the top and post your answer in this thread?"
If you don't want people to post here then this thread should be locked. People just do search and they end up here, and no one bother to read the instruction before posting, they end up here alreadu frustrated (by MATLAB).
The 'problem' in this case is that x.a produces a comma separated list. It is equivalent to x(1).a,x(2).a,...,x(end).a. When you understand that, this behavior makes perfect sense.
And regarding jsondecode; the behavior is deterministic and documented. It depends on whether Matlab can tell the input structs would be the same. If they are, the result will be a struct array.
You can also follow it up with a function that converts a struct array to a cell array of structs if you prefer.
More importantly, why exactly is this being posted in this thread instead of the second thread? On mobile this page will not load properly anymore, and even on some computers it is getting harder. @Etienne Grossmann why did you ignore the comment at the top and post your answer in this thread?
I suppose this depends on what you mean by "frustration". I usually think of it as reward -effort. Now I can see where possibly someone might want to make an array of structures. A directory-search returns a structure, so if you were to dir of a tree, that would return an array of structures. That doesn't require any funky javish code. If you're going to down that rabbit-hole it's a matter of documentation as much as anything else, right? And I totally agree that when documentation is incomplete or just not there or obtuse, AND i REALLY NEED TO DO SOMETHING THAT RELIES HEAVILY ON THE DOCUMENTATION, that yes it can be frustrating. If I can't find an easier, better way to do it. I had a very bad experience with this using the Signal Communications toolbox to try to do tcp and udp data transfers in Win10. Turns out this is a long-standing problem. Because MS came out with an entirely new & different proprietary network stack which does not work with the Windows version of Matlab. It works fine with the Linux version. But the real solution is to just use the pcap stack. Or, you know, get a good book on winsock and have at it. The point is that you have to balance need and "available options" against difficulty, time and net frustration. It's not about getting X(:) done with toolset Y(:) it's about figuring out how to create and organize a custom toolset-documentation combination to solve an appropriate set of problems in an appropriate amount of time and effort. "Appropriate". Use it like play-dough. It's great. Solves every problem.
You could, of course, reduce it all to cells, like
x4 = {{3, 100}, {4, 200}};
whos x4
Besides the fact that this takes more memory than the struct array, you have the problem that you have to pass around a "key" everwhere in order to use this data. structs associated information with a name -- to use a field of a struct you do not need to know the relative position of the field within the struct, you only have to know the name of the field. Cell arrays on the other hand, you have to know which index is associated with each data item.
x1(1).a = 3; x1(1).b = 100;
x1(2).a = 4; x1(2).b = 200;
x2 = struct('a', {3, 4}, 'b', {100, 200});
x3 = {struct('a', 3, 'b', 100), struct('a', 4, 'b', 200)};
isequal(x1, x2)
whos x1 x2 x3
Notice that the cell version takes more memory. When you have a cell of scalar structs, then the name to offset information has to be repeated for each one of the entries, whereas for a struct array, the name to offset information is the same for each index.
Thanks Paul, that was instructive!
I still have doubts about the utility of struct arrays. I think they're at best redundant w/ structs and cells, and an extra complication to the language.
I'd rather not need a bachelor of science in Matlab in order to program in Matlab.
As a practical disadvantage, if I already have dozens of functions that work w/ cells of structs, and jsondecode() returns sometimes struct array, sometimes cell of structs, it means I can't use jsondecode(), and must use something else to load json files.
Create an example struct array
x1(1).a = 3; x1(1).b = 100;
x1(2).a = 4; x1(2).b = 200;
x1.a
How do I access the second element?
Like this, if I understand the question correctly
x1(2).a
struct arrays are pretty unusable. Example:

Only workaround I know of:
foo = {x1.a}; % Looks like a cell w/ one element, but it is not so
foo{2}
Worse, the function jsondecode() sometimes returns a cell of structs (good), sometimes a struct array.
I think the main problem I encountered was that I did not learn the basic content of this programming in the class first, but I directly got used to some difficult homework. As a result, I can only operate the software simply, but cannot use the software flexibly.
You can't unselect an ROI. You can select it just fine, but for some reason, the only way to unselect an ROI is to change roiHandle.Selected to false. I want to be able to click on a selected ROI and have it unselect.
Layer upon layer upon layer of unecessary abstraction.
I don't need abstraction. I need results.
Nowadays it's just easier and quicker for me for to write my own Matlab code than it is to use built-in object-oriented starndard library functions.
Example: I need an OQPSK constellation for a comms simulation. Writing the code to make it and plot it takes maybe 30 minutes max, and I understand and control every step along the way. The plots look like I want them to. I could try to figure out how to use comm.OQPSKModulation by doing a lot of Google searching, then trying to make sense of the once-excellent Matlab built-in help and look at the useless workspace where every object is 1x1 that tells me nothing, and then fumble around all afternoon trying to figure out what's a method, what's a property, and what's a parameter, and then get an ugly, mediocre plot with an unusable back background. Then I spend 30 minutes changing the background to white, getting the axes right, etc, but I lose all these settings so I have to it all over again a dozen times. What a waste of an afternoon!
Matlab used to be so much fun. Now it's turning into a nightmare. I'm starting to dread using it.
When I need abstraction, I use Java or C++. That's what Java and C++ objects are for. Matlab used to be a labratory, where I can test ideas quickly and easily, without abstraction or overhead.
Last fustration:MATLAB COMPLIER SDK implies MATLAB Advertisment.
If [blank] spends XX,XXX dollars extra to purchase the MATLAB Compiler SDK+ Required ADD ONS to export thier appliaction,[blank] should be able to replace the MATLAB icon with an icon of their choosing. Icons referes to the icons for figures and dialog boxes.
[blank] did not pay XX,XXX to advertise MATHWORKS
MATLAB makes large projects difficult to manage.
Reasons
- OPP - No multi class files. This combined with the other issues prevent me from using ver the "Single-responsiblity Principle".
- Namespaces- No within file name spaces. No within file imports
- File Search: As of 2021a the in file search and cross file search is still a joke. there is no continuous search. This adds a lot of time to development. I basically use the current folder panel to jump between files. Also the search bar should be a panel like in most IDEs.
- Tab Completion: Originally the lack of good tab completion for python and MATLAB was attributed to the dynamic nature of the languages. Now python has Tabnine and Kite. Matlab has nothing.
- Function Input Hints: Spotty.
- Function Documentation when you hover with mouse over function:
- No Syntax code highlighting: At least highlight the MATLAB functions.
- No intellisence equivalent.
- I could go on.
I wonder if TMW could do thier C++ and Java coding without the above features.
MATLAB keeps reinventing the wheel and does a bad job . The #1 rule of programing is never reinvent the wheel.
- OPP: MATLAB OPP implementation is worse than all other well-known modern languages. Why? LabVIEW is actually worse but that is not a text based language.
- Live Editor: Users wanted a Jupyter notebook like interface for MATLAB. Instead of creating an official stable feature rich plugin for Jupyter notebook, TMW released the live editor. I don't know how TMW could checked off/ released that product in 2016. (They probably ignored tester feedback) You did not need the end users’ feedback to know that it was too slow. The input lag made me feel like I was VNC’d into a computer oversees. Also, the execution time/ for loops….. I kept trying it from 2016- 2018. I have not touched it since 2018b.
- Editor: I see a lot of complaints on the lack of modem IDE features. I agree. Before you create a new editor, I would recommend using an existing Opensource editor. I think it would be a good Idea to create a feature rich plugin for VSCODE.
Engineers always want to reinvent the wheel because it is more interesting, but it is not always worth effort. When TMW reinvents the wheel, it sometimes misses a lot of the qualities the made the original wheel great. This will overshadow the interesting features of the reinvented wheel.
What do you mean by "change the size of a plot window"?
- Change the size of the figure window
- Change the amount of space in the figure window occupied by the axes
- Change the limits of the axes to show a larger part of a plot that's larger than fits in the current view of the axes
- (As a bit of a stretch) Change the width of the line or the size of the markers used to plot the line. [If you hadn't used the word "window" this would be a more plausible interpretation of your request.]
The plotting capabilities of MATLAB do offer a lot of functionality and with that must come some level of complexity. I will admit Handle Graphics does have a bit of a learning curve.
The main way I would recommend interacting with Handle Graphics objects is:
- Find the handle of the object with which you want to interact. This could involve calling plot or other graphics function with an output argument, using the findobj or findall functions, or using the ancestor function.
- Search the documentation for the task you're trying to complete to see if there's a function. Use axis or xlim to change the X axis limits, for instance.
- Use dot notation to change the object's properties if there is no convenience function. f = figure; f.Position = newCoordinates; as an example.
One problem with your suggestion of "clean up this mess of features related to plot" is that the plot function has been around for at least 20 years (probably closer to 30 at this point) and people have written a lot of code that take advantage of those "mess of features". When we introduced the new version of the graphics system in release R2014b we did fix some long-standing bugs, introduced new capabilities, and eliminated or simplified some of the helper functions. Even though we tried to be careful about it and give plenty of warning, some users were still annoyed/upset with us for breaking their code. Doing a wholesale "blow up the system and replace it with something new" would be painful for both MathWorks and for long time users.
Why are the plot settings so difficult to find. For example, if I want to change the size of a plot window, I have to scour their webpage to search through each of a hundred different ways that plots can be modified. Many don't seem to be formally documented (at least not that I can find). They are embedded in responses to the help center and I have to read 50 of those before I find what I'm looking for.
I've had to create my own help center just to record all the features related to plot so I don't have to search for it next time I need it.
Something as commonly used as the plot feature should be quick and easy to use and it's worth their time to clean up this mess of features related to plot.
Compiled Matlab AppDesigner executables tend to forget functions when not used for some time
R2020b for Linux just wrecked my CentOS8 install.
It wouldn't install under my standard user account (needed access to /usr/lib and failed to get it) and then I tried to install it as sudo and that failed and then it wouldn't allow me to type anything in the email address text box when I tried it once more as a standard user. So I rebooted it and now it's throwing a dracut related error
".../etc/multipath.com does not exist, blacklisting all devices"
trying to shut down instead of completing startup and fails to do so then tries to start the GNOME Display manager and goes haywire. What fun. So R2020b for Linux is not compatible with CentOS8 after all I guess.
Note, these are problems just getting it installed and running...do you know how long it's been since I've had an installer break a working workstation Linux install to the point where it is unable to boot to the desktop? This is why Linux users prefer open-source tools and why network-admins prefer daily backups, networked user data directories and stock images! So, "Matlab on Linux" yay, "the Matlab installer breaking the Linux install and requiring a reinstall+reconfigure with a probable reformat and erasure of all user data on the partition" BOO!
[does this happen with Python and Eclipse? Hm...]
Luckily I have an Ubuntu install on the same drive and a good rescue usb key.
Now I just need to figure-out how to fix the CentOS8 boot process. No big deal.
Still, this is like Windows 98 all over again.
https://docs.centos.org/en-US/centos/install-guide/Rescue_Mode/
https://www.golinuxhub.com/2017/12/how-do-i-set-or-change-default-runlevel/
https://access.redhat.com/articles/754933
(this does not help as it siimply changes the display server not the desktop environment, which is corrupt,
and so the problem just has a different manifestation but the same source)
@John: I crossposted your comment to the second thread, please continue the discussion there. Feel free to post an answer there yourself. If you choose to do so, I will repost my comment to your answer and delete my answer.
Matlab should 'update' the new version instead of installing the new version. The reconfiguration is a nighmare because it's done only once a year or so. The extreme example is firefox, which updates once or twice a day. The users don't need to reconfigure anything.
At least matlab should provide a choice with every new version: new installtion or updating on existing version (and keep all configurations as is).
Personnaly I don't pay for MATLAB because of the community suppport. With few exception the document are mostly great that I rarely need to look elsewhere. Not sure it's the case of python.
Times have changed drastically and there's a lot more options out there now than were in late '70s and early '80s when Cleve invented MATLAB and wrote the first versions (in FORTRAN, no less!).
The PC version was introduced in December, 1984 -- that's now over 35 years ago; it's no wonder the syntax that has evolved from then doesn't necessarily match what might be used starting from scratch now.
tcl/tk didn't arrive until 1988, python first introduced in 1991 but didn't really take off until relatively recently.
Meanwhile MATLAB was solving real problems...it certainly saved me big time when in the consulting gig to not have to try to put all the pieces together that were in even the initial MATLAB-PC.
A brief history of matlab> for those who aren't aware is probably educational.
My memory seems to be coming up a bit short in bringing to mind any vendor that has unlimited community support?
So give us some benchmarks: What response time would you consider acceptable, and how complicated a question would be fair game?
For example if someone posts saying that they need the complete code for their honors project in robot surgery, automatic detection and excision of brain tumors in mice, then how much time would be fair to allocate before someone gave them the complete debugged and documented code ready to be handed in? (Because if complete code is not routinely provided in such cases, then that would only be limited community support, and you are specifically opposed to limited community support, so you are envisioning a community where every request for code is completely fulfilled.)
The cost of this software does not justify the time and effort you have to put in to get things going.
On one side you have a free of cost general purpose programming language (Python) that is easy to interpret and way faster than MATLAB. On the other hand you have an expensive software which would chew up all your RAM and make you write code that is difficult to debug along with a limited community support.
Take an example of group by in Python & MATLAB
Python:
df.groupby(by="a").sum()
MATLAB:
total = varfun(@sum, df,'GroupingVariables','a','InputVariables','b')
Would I pay and write extra lines of code?
Why would I pay for a tool that has a limited community support?
Deep Learning toolbox 2020a
A few months ago, out of personal hobby, I designed yolov3-yolov4's training and compatibility with the original framework. Overall, the matlab code implementation is still very concise, which is much more convenient than Pytorch and tensorflow, but there is also a problem. The differential framework is not efficient enough. For example, when GIOU is used as a loss, the network calculation loss is very slow and cannot be carried forward. Therefore, it is recommended that mathorks strengthen the improvement of the underlying performance and control the flexibility to facilitate the construction of various algorithms on the upper layer!
I personally have more than 9 years of matlab experience, I personally sincerely suggest that mathwork can currently make the following changes:
- Strengthen the interaction with other open source frameworks. Although there are onnx, caffe, and tensorflow, many of their operations are not supported, and it is completely impossible to customize import and export!
- The automatic differentiation mechanism imitates pytorch is very good, but the training efficiency is not as good as pytorch, and many matlab built-in functions do not support automatic differentiation;
- The custom network layer is not flexible enough, and the characteristics of the input and output cannot be customized;
- deeplearning toolbox There are too many official toolbox examples that use procedural programming, it is not easy to see the entire architecture, and a large number of cellfun functions are used. I think this function is not very readable. It is recommended to use high-dimensional array expressions as much as possible. In my open source yolov3-yolov4, the cefunn function is used as little as possible, dlnetwork is very inefficient in converting layerGraphy network!
The error message generated during a call to a specific function in a specific toolbox is misleading. If there’s an error message pointing that the toolbox is missing would result in quick solution.
I know this issue has been discussed before. But anyhow, it would be great to differentiate a function when its a symbolic function. It would avoid using multiple calls to subs(...). This process is extremely daunting when using langrangian approaches to analyse a system.
Illustration:
>> syms x(t)
>> diff(x^2,x)
Error using sym/diff (line 26)
Arguments, except for the first, must not be symbolic functions.
Presently the argument is requested as a symbolic function :(.
A few things that immediately come to mind ---
- The student license only being good for one machine. I have a PC at home and a laptop I take with me to university; it would be nice if the student license could be used on two machines. (The regular personal license is good for three machines too after all.)
- Toolbox prices. When you buy MATLAB you can get them at a substantial discount, but you don't know which ones you might need yet. When you know what you need you'll pay a lot more for them. Bit frustrating.
- No support for hashes as far as I'm aware (structs aren't the same).
- Strings, character arrays, cell arrays. Complex and arcane and prone to not behaving the way I invariably intuitively expect.
- Explicit conversions, e.g. num2str and so on.
- Explicitly having to squeeze() singleton dimensions from slices of multidimensional arrays, because e.g. matrix = some_array(:, 1, :) won't give you a 2D matrix.
- Cleaning up plots and making them look good. The size of the resulting boilerplate often exceeds that of the actual plotting code.
- Generally the relationship between and interaction of the various parts of a plot, which can give you a real headache if you're trying to do something that wasn't contemplated by the MATLAB developers.
- print() and its issues with margins, paper size etc. Not an issue anymore in R2020a with exportgraphics(), though! :)
- Indices always starting at 1. I almost always work with time series that start in t=0, and it would be extremely convenient to be able to have array indices starting at 0 as well.
- Regular expressions feel tacked-on and not integrated into the language; there's no operators to match REs directly.
That said there's also a lot of things I like about MATLAB.
The recent changes that I know of with regards to importing xls data:
- A few releases ago, uiimport() started importing text as string() data type by default instead of character vector. The user has control over this in the tool.
- As of R2020a, readtable() and related functions now do an internal detectImportOptions() by default, which does a more thorough analysis and can result in different variable types, or can result in prefixes and suffixes automatically being detected. For example a field with a leading $ would previously have been considered to be a character vector, but now the $ might be treated as a prefix to be removed and the number imported as numeric. There is an option to turn off the default detection.
- Importing of time and duration data has been improved over the last several releases; in particular a field such as '13:42' would previously have been imported as character vector but would now be imported as duration. There is an option to control that.
@Sky, I feel your frustration. I commonly experience that during the early stages of learning new software. Having used Matlab, Python, and R, I think the gap between Python and Matlab is small. I'd bet that it takes less than 10 weeks of jumping into one after being familiar with the other before comfort levels start to match. R is another story and is least intuitive IMO. Another strength of Matlab is the documentation which is well formatted and largely consistent across all toolboxes. Once you learn how the documentation is organized, I find it very easy and quick to find what I'm looking for. Lastly, the community here is very helpful and if you can't find an answer to your questions in the forum, people are eager to answer new questions.
I tell you what irks me about Matlab: Everything. It is beyond doubt the most user unfriendly software I have ever used. The most simple tasks that you can do in other software, like importing data (used to be easy, not they've changed something and I can't even get apps to work on xls. data anymore), or installing an app is LIKE PULLING TEETH. Today I "simply" went to install an app I downloaded from there. But it's greyed out when you try and select it..... Then the "help" method suggested was to " Select "Add-Ons", and check that the Add-Ons install folder is writable." Of course there is no preference in "Add ons" that gives you this option. Typical....
Use Python, Use R, Use anytthing but this Matlabs app.
#BeyondFrustrating
Oh boy... where to start...
The biggest part is, its actually quite buggy, once you use it a bit outside the norm. I use it on ubuntu, for example... this combined with the usage of some of the not so widely used add-ons (like e.g. simevents) sometimes makes you think MATLAB tries to frustrate you on purpose...
No wonder python is taking over.
While MATLAB Online is a good feature there's still a factor that could be improvised for enhancing active collaboration on the cloud.
P.S: Made a feature request.
2、The deep learning toolbox and the outside world framework(pytorch、caffe、tensorflow...) can not be friendly support, such as onnx importer-exporter, this has been updated many times, but the performance is still very poor!
3、Since R2019b supports automatic differentiation in the deep learning toolbox, many low-level operations are still not supported, and complex networks cannot be built! Only a few examples provided on the official website are OK!
Hope the official development team is responsible!
Why can't MATLAB/TMW figure out to not open new figure default inside command window space so the next command to put on some amenities to the just-created plot occludes it fully????!!!!
You can set some random fixed location as a default, but that then is fixed so if you move the command window...
Inconsistency in names for Name-Value Pair arguments in new functions of similar purpose and name.
Since inception which predates R2006a when TMW began the feature of incorporating version of introduction in the "See Also" section, textscan set precedent with 'HeaderLines',n to skip n lines at beginning of file. Then readtable came along in R2013b and used same name. All's well and good. That's some 15+ years of history and learned behavior.
Then some wise guy gets the idea with readtimetable in R2019a to change the same meaning to 'NumHeaderLines',n. Now we've got two names for the same thing and who can ever get it first go to remember who's who in the zoo? All the new functions like readmatrix, readcell and friends use new.
WHY!!!??? All it does is cause typing errors and forces correction or waiting on the interminable time for tab completion to load its module only to not see the name in the displayed list because too far down and the trained 'h' response of course fails to find...
All in all makes wonder what code design reviews must focus on to let these inconsistencies propogate.
And not to get started on the myriad of overlapping functionality of nearly redundant functionalities in lieu of updating existing...
On the topic of functions and their interfaces, it used to be that I wished Matlab had a way to easily do default values for optional arguments, and named arguments...but the arguments block is a pretty welcome addition, which addresses default values, and I've taken to the key/val argument methodology that works well. But it is frustrating that original Matlab had lots of ad hoc "argument parsing" so that you had a "flexible" interface...I guess you can call it convenient, but it often means more doc/help look-ups for me to understand how to correctly specify arguments...legend() is one that gave me a lot of trouble recently. Can't be helped at this point though, I guess.
I know that some people find it frustrating that functions do not look for variables in their calling environments, so if for example you have
function y = f(x)
and you execute f by clicking on the green run button, that it will not look in the base workspace to find x.
(Regular functions cannot capture values the way anonymous functions do.)
Arushi, I find function very easy to execute. You just call the function by name passing it whatever arguments it requires. At least if they're a regular function -- anonymous functions can be a bit cryptic but you don't have to do it that way (you can always do it as a regular function instead).
You might explain your annoyances in a new question in more detail and we'll try to give you tips on how to do it.
Not able to execute functions easily. Such an annoying issue
I hate how add-ons aren't available for student or home license holders. For example, why should the HDL coder and verifier add-ons require a massively expensive professional license?
The fact that some of the code I wrote a year ago doesn't run on the new version of MATLAB. I need to write the MATLAB version in each file I make...
The fact that if I want to update to the newest release of MATLAB, I need uninstall the current version (it takes too much space).
The fact that I can't do GPU computing unless I have NVIDIA GPUs (don't know if this has changed).
The fact that live scripts look great but are really slow.
The fact that examples are not friendly for new users or people who are not familiar with the topic in question.
The fact that I can't create an environment with older versions of MATLAB to run my older code.
The fact that free languages (e.g. Python, R) give me seemingly equal amount of support and aren't super expensive.
The fact that help foo will print 800 lines when I just wanted to remember the order of inputs
I may be biased from my OOP Java background, but what bugs me the most is the poor OOP support. Anyway, here are my thoughts in detail:
- The IDE: no decent code highlighting, no methods/class refactoring, no way to find where your function is being used, no concept of projects until R2019 (which is shitty since it will take a decade for everyone to migrate) and god forbid you try to handle a multi-class application. Since there's no code highlighting and types are dynamic (and there's no way to point out the type you'll be using on a variable) it gets >ugly<.
- One release per year is too much for a programming language (although I do understand that it is not meant to be a programming language in the classical sense of developing and mantaining long-term projects).
- Poor handling of paths/namespaces: It can be very annoying to keep track of MATLAB's path; what bugs me in particular is the fact that you need to import everything IN EVERY SINGLE METHOD instead of one import for the whole class. Also the "+" folder names are dumb (pardon my french)
- Again about the IDE: you need to explicity tell MATLAB what arguments your function accepts (c'mon mathworks, we know you can do better than that)
Background
While experimenting with a function, which I had downloaded from FEX, I encountered the error
No such file or directory
After having looked too long for the cause in the wrong places I realized that my writing permission had disappeared. Currently, I haven't a clue why.
>> [fid,errMsg] = fopen( 'cssm.m', 'wt' )
fid =
-1
errMsg =
'No such file or directory'
>> [fid,errMsg] = fopen( 'cssm.m', 'rt' )
fid =
3
errMsg =
0×0 empty char array
Googling for "windows 10 folder read only" showed that I'm not alone.
Frustration
The poor message, 'No such file or directory', fooled me. Something like 'No writing permission' would have been more helpful.
NO ENTIENDO COMO DEFINE LA FUNCION
En este caso, la fuente de tensión es constante Vcc=10V y las condiciones iniciales son:
’(0)=
Definimos f (función que representa el comportamiento del circuito) con el comando inline:
>> f=inline('[u(2);-2/2*u(2)-1/4.56*u(1)]','t','u')
f =
Inlinefunction:
f(t,u)[u(2);-2/2.4*u(2)-1/4.56*u(1)]
With the Legacy Code tool two dimensional arrays cannot be used, and that is very frustating as matrices are part of the core of MATLAB.
Does not support GPU computing on AMD GPU.
Also a relevant question is whether Matlab contains optimized math libraries for AMD CPU.
Still, no syntax highlighting for the reserved words false and true:
isBool = true;
wouldMatlabTellYou = false;
With each new release, the Help browser becomes slower and slower.
In 2019a, it takes jaw-dropping 30 secs to open the Contents page. Contents page, Karl!
Moreover, in earlier releases when a help page eventually was loaded its scrolling was relatively smooth. But 2019a took it further and changed scrolling to jumping.
Otherwise great stuff. Love it.
blkdiag does not return the result in sparse form, or provide an option to do so. I am puzzled that this wasn't an obvious use case just by the very nature of how many zeros a block diagonal matrix will typically contain.
The workaround is to pre-convert all arguments to sparse type, but I have to believe it is a lot slower than a better optimized blkdiag could be.
args=cellfun(@sparse,{a,b,c,...},'uni',0);
B=blkdiag(args{:});
I faced a problem when I try to automatically connect the simulink subsystem in large quantitiy.
At one situation when I try to add the blocks using the command add_block(BlkPath,'position',[X1,y1,x2,y2])..... I got the error saying that The position should be <=32767. But Infact I've around 1000 subsystems to be connected one below the other. SO obviously it'll exceed 32767. I've no solution other than creating multiple layers which is actually taking more effort.
The implementation of properties. They are class fields, and they are the accessor methods to these fields, (get/set). This duality leads to confusing and unexpected behaviour and at times performance issues.
Just take a look at this code:
classdef ClassA
properties
PropA;
PropB;
end
methods % property accessors
function value = get.PropA(this)
% yes, from within the method
% barring the same name you
% access the property with
% the same name. Confusing...
value = this.PropA;
end
function this = set.PropA(this, value)
% thanks for pointing out Adam :)
this.PropA = value;
end
end
end
They have built-in set events (which you have to love) but only if the class derived from handle (which I understand but it can be confusing).
But for the love of God, none of these complex mechanisms can be overridden in derived classes
What annoys me most is that every time we update to a new version I have to go back and fix up all my scripts to be compatible with a new release.
I'm beginning to wonder why we bother paying for updates.
Just switched to 2019a and all the Database Toolbox things I had been using in every version from about 2013b through to 2018b don't work anymore and I have to go back and re-code everything.
To say nothing of the fact that I'm still fighting with the Help hang on start-up and the fact that jxbrowser has some mysterious error that keeps throwing exceptions.
I should really go and buy something that actually works!
Matlab forces regular users (not license administrators) to install update release within the software, and hide the direct download link of offline update package since release R2018b.
What's worse, I have found the direct download link by myself, and had posted them somewhere in this post to help people suffering from the awful update process, and Mathworks removed my answer.
Mathworks, why do you think updating within the software is recommanded?
- Mathworks hides the direct download link for update release since Matlab R2018b, and force regular users (not license administrators) to update the software by clicking the bell-shaped button within the software.
- I cannot use Matlab anymore when it is downloading the update release.
- The download speed from my lab to the Mathworks's server is awful.
- I have serveral Matlab installations (same version) to maintain in my lab, and without an offline update release installation package, they all have to download the same update package and go through this awfully long update process. I have no idea why the Mathworks thinks updating within the software is the optimal experience.
Solution for anyone suffering from this:
The update package for Matlab R2018b can be directly downloaded at: https://www.mathworks.com/downloads/web_downloads/show_updates?release=R2018b
The update package for Matlab R2019a can be directly downloaded at: https://www.mathworks.com/downloads/web_downloads/show_updates?release=R2019a
Please officially support rotating axes labels to align with axes angle in 3D plot. The workarounds in FEX does not always provide optimal results.
Code Generation for HDL (or C) through a Simulink block.
The ones index works fine in Matlab, but it has no place in code generation software. Why is it that I have to use an artificial index (starting at 1), only to have it to subtract 1 anyway to use the zero's index? I'll show you an example that left me extremely frustrated with how the HDL Code Generation works:
x = Table(counter); // Matlab based
Now the HDL that compiles is...
x_temp <= x(to_integer(counter -1 ));
And I've noticed that this bug occurs in many other places that involve embedded development. It's artificially inflating the cost of said function for no reason other than to maintain compability with the original simulation environment.
This is extremely bad logic handling and has lead to an index-1 bug that I spent days trying to figure out.
I shouldn't have to start my counter at 1 in order to get the table indexing to properly work. Matlab should be able to differentiate between simulation and code generation (where it's obvious I want a 0-based index). The price is so outrageously high to begin with, this kind of thing should be flawless.
I think it is a shame that one has to buy a third party toolbox to use state of the art multiprecision (see https://www.advanpix.com/documentation/users-manual/#Symbolic_Math_Toolbox_VPA_vs_Multiprecision_Computing_Toolbox). Clearly, vpa is not an option for large-scale numerical computations (it is really awfully slow, se also: https://nickhigham.wordpress.com/2017/08/31/how-fast-is-quadruple-precision-arithmetic/). If I understand correctly it should at least be possible for Mathworks to include freely available libraries like this one: https://www.mpfr.org/. Mathworks, can you explain why this has not happened so far? If I look into the list of software which already uses MPFR I ask myself: Why not MATLAB?! How pathetic! Mathworks should be embarrassed! And please, Mathworks, if, on one glory day, you implement it, put it into the Standard MATLAB license! Don't be so greedy to take extra money for yet another toolbox which should be state of the art these days!
Sorry, for the harsh words!
Binary files!
It's ok when you save your data as a binary file for better performance, but GUI layout should not be a binary file.
Here's a small scenario I'm sure you're familiar with: You change the structure of your packages, or a file name and
BOOM
none of your GUIDE figures work. with a text file, you can find/replace it, but good luck with .fig files.
And App designer is not better, I built an app on R2018a, now I have R2017b, guess what? no backwards compatibility. and I don't mean if it works or not, some of the features are missing, NO, you simply can't open the project and view your own code.
TMW, it's time to join the rest of the world and start using markup for GUI layout.
My junior assistant ran tests against solver in excel and found that it gets better results, takes less time to get there, and is less prone to local optima than these two functions
If the Excel solver is avoiding local optima non-accidentally, then it is an apples-to-oranges comparison. It likely means your junior assistant is running fmincon and fminunc against the evolutionary/genetic solver in Excel. The fair comparison would be to run Excel against ga from Matlab's Global Optimization Toolbox.
The fmincon and fminunc functions are not great. My junior assistant ran tests against solver in excel and found that it gets better results, takes less time to get there, and is less prone to local optima than these two functions. Annoying because I am a BIG Matlab fan and have no intention of rewriting 25 years of optimization code in another langauage (I am under pressure to rewrite in Python).
I don't know if these points were said in one of the 128 answers, but these frustrate me:
- Pressing Tab on the keyboard writes four white spaces instead of an actual tabulation character. It's usually not a big deal, but I need to press on the arrow keys more often to move horizontally in a line;
- When I want to see the value of a variable in the console, it prints it with to much space around. For example, Matlab prints this:
>> x
x =
12.8000
But any of these would be as clear and more concise:
>> x
x =
12.8000
>> x
x = 12.8000
>> x
12.8000
It's really annoying when I want to print the value of a variable in a loop and I rapidly loose sight of the older values because the newer values take so much space in the console.
Has anyone tried to measure angles between a huge amount of vectors, by engineering convention?
My first vector I need to measure against 180 other vectors, and obtain the angles between them all. Once MATLAB gets to 180 degrees, it starts measuring DOWN from 180, instead of up. Similar thing happens at 360..drives me barmy!
Added to that it gets some angles simply wrong, so any post calculation manipulation to the angles also gets done wrong, so I need to decipher which ones have been done wrong and do post-post calculation manipulation. Now imagine that for 180x40 array of angles. For feck sake MATLAB!
The figures are very slow (much more than they used to be, I find new versions are worse than previous ones). Also, clearing the desktop or packing does not really free memory allocated by Matlab, at some point is always necessary to close the program for freeing memory occupied by Matlab.
A minor irritation, but still a bit annoying. Matlab's editor is obviously very lacking when it comes to refactoring tools and other helpful features like that, but surely this could be made easier:


MLint helpfully tells me my syntax is not recommended and tells me what to use instead, but then I have to manually make the change because there is 'No Autofix Available'. Surely this is the easiest of easy autofixes to include?!
Arrays of structures for Stateflow.
Matlab and Simulink support this but not Stateflow. Using pointers is the only workaround that gets around this.
What infuriates me most about Mathworks products are the inconsistencies in the user interface. They also neglect to respect a number of UI conventions of Windows or software in general. This includes but is not limited to (some) dialog boxes not accepting Enter for "Ok" and Escape for "Cancel" or not changing button focus via LeftArrow/RightArrow, missing navigation abilities in the "Current Folder" view via Alt+LeftArrow/Alt+RightArrow, missing search-by-letter abilities in the "Workspace" view, having to mouse click before scrolling via MouseWheel (no mouse hover), missing support for 4th/5th mouse button aka navigation buttons. These issues have been reported to and discussed with support in 2014 (Case Number 00931154) but still remain.
What I find very annoying sometimes is MATLAB's indexing. It starts from 1. With that in mind, there is no way to easily differentiate between functions and array elements, as both user round brackets.
Definitely this is in order of annoyance.
- I tend to use the Matlab command line quite a bit. In the Linux 64 bit R2017a, when I edit a command that I have used previously, at times the function hint tooltip remains on the command line. I believe that this is an "orphaned" or "zombie" display object, but the java gc must not recognize it as such because the only way to remove it is to restart Matlab. Frustrating! The screenshot below shows the offending function hint left over from some bygone nested command. The exception occurs when I try to right click on this orphaned hint window.

- Speaking of tooltips, I am using CentOS 7 with the GDM. Sometimes tooltips are blank and gray, sometimes they are legible. I have read some things claiming that the GDM doesn't have the correct fonts, just that sometimes it does! This is what happens when I click on the "More Help" link in the function hint window:

- Java memory management issues in Matlab using Simulink, signal logging and large variables. Plenty of memory left, but Java seems to be paging in and out the same 100 MB of memory.
I have 2 main frustrations with MATLAB:
- The resolution quality/plot qualities is really bad. I generally look forward to plotting the same in Pythons plot libraries such as matplotlib or seaborn to get a high quality plots.
- MATLAB does NOT remember break point positions if you have to restart the application. There is a round about way to achieve this but frankly speaking that is not the point and it frustrates me as a programmer to manually remember the positions where I have to place breakpoints.
Most frustrating thing for me at the moment is at times Matlab starts endlessly beeping at me with the error sound. At first I couldn't work out why beyond the obvious observation that I had left a line of code half-finished and therefore not syntactically correct. But that alone does not produce continuous beeping.
I realised though that this is in the case where the file I am editing and have left, temporarily, with an error in, is a class for which I currently have objects in the workspace.
I do like the fact that objects update themselves (where possible) to changes in the class definition. It is a big step forward from what used to happen, but constantly pinging an error sound at me while it, presumably, keeps checking for changes in the class, is really annoying. I don't always want to have to delete all my objects before editing a class and often I navigate away mid programming of a loop or if statement to work out what code I want to put in there. When I do I get this endless pinging until I comment out my half-finished code.
- In R2017b on Windows 10 the help browser 'shivers' while scrolling.
- I have Intel® HD Graphics 3000 driver 9.17.10.4459 and still had to force Matlab to use hardware opengl
- It always takes a lot of time for Matlab to close and also to open
I am running MATLAB R2017b on a Linux system (CentOS 6.9) and I have encountered a very ugly and annoying problem! I have created a Simulink S-function (C++) which is used as a discrete model with fixed time steps. I am trying to build a controller by using the Simulink PID(z) block to input control commands into my S-function. Whenever I use the frequency response based tuning method, the model runs just fine, however when the tuning is over all of a sudden all of my blocks move around on their own, and all the signals overlap each other in a very ugly fashion. unfortunately I can't provide any screenshots, but when this happens it's as if the blocks start to stretch out and they move farther apart in random directions as I run the tuner again. this is extremely annoying and confusing and I couldn't find any similar issues on Google. ANNOYING!!!!!!!!
Also, for some reason my Simulink window keeps switching to fullscreen for no apparent reason. When it switches to fullscreen it becomes the active window, it stays on top of any other window open, for example if I select a folder window and Simulink is in fullscreen mode, I briefly see the folder on the screen and then Simulink pops on top. Also very ANNOYING!!! I believe these bugs are only in the Linux version.
As a guide: NVIDIA's CUDA devices generally perform 64 bit floating point at 1/32 or 1/24 of 32 bit floating point performance; however, some of the very high end cards handle it at 1/3 of single precision performance by having specialized hardware for it. We can expect that if it were just a small matter of software algorithms to get 64 bits at only a factor of 2 slower, that NVIDIA would have implemented that. We can therefore deduce that software floating point 64 bit emulation is about 1/24 the rate of single precision; that would tend to suggest that quadruple precision would tend to be about 1/24 of double precision for good software without hardware quadruple precision assist.
@Birk: This is the expected behavior: While modern pocessors are optimized to process doubles very efficiently, simulating the arithmetics in software must be remarkably slower. A factor of two is impossible.
Walter Roberson, thank you for the link! Regarding the symbolic computing toolbox: I know vpa. However, it is way too slow for some applications where fast numerical computations are required. In the meantime I tested the Advanpix toolbox. In my case the hit on computation time is still quite large (maybe faster than vpa but still too slow for me). I could live with a factor of two for qadruple precision but it is more like 100 or so. It is really a pity!
Birk Andreas, the Symbolic Computing toolbox supports arbitrary precision, up to 2^29 (over 500 million) decimal digits.
Providing extended precision for addition, subtraction, multiplication, and division is not so bad, but it is a fair bit of work to extend that to include all the trig functions, exp() and expm(), eigenvalues, and so on.
John D'Errico has a File Exchange contribution http://www.mathworks.com/matlabcentral/fileexchange/36534-hpf-a-big-decimal-class which does extended precision decimal for a number of operations.
There is no way to extend precison beyond double for fast numeric computations. There is a third party toolbox (not for free of course) which seems to do the right thing (I have not tested but it looks quite convincing: "Advanpix Multiprecision Computing Toolbox"). Why Mathworks can't you compete with the state of the art and build this into standard MATLAB already. Is it too difficult for you?
Functions and classes defined within a package should not have to import the package or refer to other members of the package with the package name ... the import should be automatic ...
Given the requirement to refer to the local package name within the class or function definitions ...
- It is difficult to rename the package
- It is difficult to place the package within another package
- It clutters up the function and class code with import calls ...
Please fix...
Akua Agyeman:
I sometimes explain a fair bit in my contributions. Doing so takes a lot of writing. I could explain even more, but at what point do I stop explaining?
When I start writing, I often do not know that person asking the question knows anything about how to program a computer, or what an algorithm is, or about how computers store information. I do not know that they understand positioning notation for representing numbers; I do not know that they know how to add or subtract. If they have asked a question about, for example acceleration, then I do not know that they know what acceleration is, or about calculus, or about the concept of "rate of change" or "integration" or even what a curve is.
My explanation has to stop somewhere. I have to guess what the person understands and write to that level. If I underestimate them and they already know some concept then I have wasted a bunch of time explaining it, which wastes my time and their time. If I overestimate them and they do not know some concept, then I have not wasted any time, and the person can ask for clarification of the parts they do not understand.
To this you need to take into account that people often do not ask the question they think they are asking, or often omit information needed to understand what they really want to know. I could spend a lot of time explaining something, but it might turn out not to be relevant to what the person wanted to know, because the question was not clear. That wastes a lot of my time.
It is therefore more efficient to explain less and let the person clarify or ask questions. This might be a bit frustrating to the person to not have received a full response the first time, but there is a real cost to us providing responses to everything that the person might have meant, or to explain everything the person might not understand.
I get that people who use matlab are super-smart...but for us less exalted people, could people answer questions assuming less knowledge. Half the answers to the questions read like PhD thesis, not great when learning to program and use matlab...think PYTHON, Keep it simple.
I have worked with Matlab since windows 3.- and MS-Dos version and it has always been my favorite tool. However 2015 version is the worst thing which has ever happened to me. My company has changed from 2010 to 2015 and we have to work with this version for the next few years. Since 2005 we have developed more than hundred Matlab Tools which our engineers use them regularly. Now almost none of them works!
- The handle structure of Figures, GUI elements, Axes, etc. has been changed and we have to update tens of thousands of codes which many of them have been used as black box for years. Finding all of these bugs will take several months.
- Mat files are not compatible. You don't even receive an error message. Matlab just Crashs!!
- Matlab-Compile changes the appearance of GUI's
And we are just at the beginning. God knows how many more bugs are there!
One of my main problem is that there is no normal graphical ROI defined. I am working with spectra. There are several different ROIs can be useful on a spectrum (let say when substract a baseline from a spectrum). There is no easy way to define, modify, delete ROIs, not speaking about attaching ROIs to the spectrum.
Matlab supposed to be a vector (matrix) oriented tool, so it is annoying that such a simple feature is not implemented.
Csaba Bagyinka
I miss the ability to define your own workspace. When doing event driven programming in Matlab, there are 3 ways to share your own data to the callback functions:
- getappdata
- nested functions
- global variables
getappdata is fastest, except if you want to modify the data(it then requires copying, which the other methods do not). Its also ugly.
nested functions require your entire project to be done in a SINGLE m-file
global variables are a can of worms
Countrary to popular belief, there are currently situations where using the global workspace is simple the only logical way to go in Matlab. This is terribly annoying.
having the ability to define your own workspace for your project would solve this. Would also make it alot easier to read code(compared to huge m-files with nested functions, or ugly appgetdata).
defining your own workspace would be roughly equivalent to having nested functions that are allowed to reside in seperate m-files.
Hope I am wrong, so please enlighten me with your oppinions :)
Of course, it's the red color.
Matlab is still one of the best tools for rapid engineering prototyping and simulation. However I have a few gripes as many do. First it is increasingly facing some stiff competition from free alternatives like python/numpy and Julia. Here is my list of issues.
1) It's still slow. Julia is 2-3 times faster and even numpy is faster once it's accelerated with cython, which is fairly easy to do. It would be nice if matlab had more accessible options to accelerate it's code.
2) The C interface is appalling. If you compare it to what you can do with python or Julia it's quite unfortunate. This ties into the acceleration problems item 1.
3) Modules, where are they? I hate the proliferation of .m files. Modern programming language allow you to organize your functions and methods into modules that can be imported en-masse. It also helps with the control of your namespace.
4) Object orientation is syntactically ugly and non intuitive. Python just destroys matlab here. The lack of modules and poor object orientation and/or limited functional programming paradigms hurt the use of matlab for more general purpose programming. It was obviously a late add on and obviously little research was done into how it is done well elsewhere (e.g. Python , Ruby etc.) Interestingly integration with java is a bonus for matlab. It could theoretically alleviate some of the object orientation or functional programming deficiencies, but can you use some of the more useful languages that sit on top of the java runtime? That might be interesting but I've never tried it.
5) Symbolic Toolbox: I think mupad was a step down from Maple. I can still do more with maple. I absolutely love the matlab integration of their symbolics. It makes maple syntax seem clunky. It's just annoying that it's less capable now and I think slower.
6) Linux support. Matlab 2016 will not work with the latest nvidia cards and the latest drivers on linux. There are opengl problems that no one wants to fix. I'd like to see this sort of thing improved.
The Matlab Crashes at least once a day for no reason since a year ago, data and script loss and so frustrating. Before there was no such problem.
Matlab becomes more and more microsoft office like, and more and more kids like. That's why craches all the time.
Very unhappy with the new versions. It's not professional anymore, it's just a piece of demonstration now.
Unfortunately I need to use it because of library built ages. Otherwise I really want to quit this piece of crappy.
@Tim Bigelow: What do you mean by the "variable page" This is not mentioned anywhere in the online documentation.
Do you mean the Variable Viewer, which as its name implies, is intended for viewing summaries of variables in the workspace?
the variable page is useless! How much does this software cost? Has nobody else figured out such simple stuff is non-functional?
Cant enter new numbers Can't enter more columns in the column number entry area
Can't copy and paste in cells
When numbers are entered manually, they are justified left or right?
why not all the same?
why do i have to enter two returns just to get one return in this suggestion page?
working with the variable page is extremely annoying! None of these really simple functions work at all well:
deleting a variable renaming a variable trying to delete one column in an array variable- I've yet to figure out how to make that happen duplicating a variable with a new name- and the help file for such basic things gives no clue?
It is not possible to view the contents of a 'containers.Map' type of variable in the Variable Editor. This makes code using this type difficult to debug.


