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.
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.
Agree completely. We actually gave a few of our undergrads the (daunting) task of learning MeVisLab for the purpose of rendering.
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.
@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?
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.
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.
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.
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.
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.
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.
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.
plot legends are not always placed in the "best" position - quite often its right slap bang on top of the data...
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.
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.
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.
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...
Commoditization is an excellent point. It should be an answer by itself.
The use of degrees as the unit for angles in some functions of the Image Processing Toolbox. For instance
as opposed to, for example,
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.
Similarly, why is there not a built in rad2deg.m, or deg2rad.m function? Sure it's easy to write yourself, but just a bit annoying that it's not there already.
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.
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.
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
I would love to just write x++; instead of x = x + 1;
I would prefer to write inc(x) and dec(x) instead of x = x+1 and x = x-1.
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.
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.
Also, quality of copied figures is poor (blurry lines/text) and requires workarounds like export_fig .
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. :)
Now add the programming and debugging time to the runtime: While the C-implementation runs with the double speed, it take 8 additional minutes to be written, debugged and compiled. A serious programmer can estimate if the runtime of the program ever succeed 8 minutes, and if so, calling a C-Mex is the better choice and not harder than writing a pure C-function.
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.
I hope it doesn't do what you described.
If it does, They need to optimize it fast.
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.
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.
@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.
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.
"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.
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?
Wouldn't mat2cell work?
a = 'aaa ';
b = 'bb';
c = ' C '
A = strvcat(a,b,c)
mat2cell(A,ones(size(A,1),1))
The strvcat() step adds spaces to short lines, and the mat2cell is going to preserve those introduced spaces.
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:
Approach:
Causes for frustration:
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
Schedule keeps slipping on the DWIM (Do What I Mean) toolbox.
And that's the one that could send the entire MW development team to Geneva!
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.
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.
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).
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?
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.
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
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.
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.
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.
What kind of features would you envision in a "source code browser" ?
Should this perhaps be over in http://www.mathworks.com/matlabcentral/answers/1325-what-is-missing-from-matlab ?
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.
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.
And when it breaks down or starts to annoy
Or grinds when it moves
And gives you no joy ...
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.
removal of working version (from 6.5 onwards) on HPUX.
Difficulty publishing documents.
For calculation publishing, homework assignments etc, it's difficult to show values along the way and display them.
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.
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.
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.
Firefox here. This situation is discussed in the "Matlab Answers Wish-list" topic.
"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.
I agree that there is no point in their being so secretive about prices. Why not just post price tables on their web site?
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.)
Anything written by Harlan Ellison should be approached cautiously.
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.
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.
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.
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
endSecond, 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
@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.
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?
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~
@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.
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).
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...)
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.
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?
Once wrote a function to convert an arbitrary mathematical function into a simulink block diagram. Maybe thats something for you?
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).
Hi Michael,
what about using the S-Function Builder? At least you get the tlc code for free ...
Titus
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..
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)
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..
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
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
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!
The behaviour of pcolor: Why are the last column and row not shown? Why does the datatip always shows 0 for the z-coordinate?
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.
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..
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.
the constant version change and the no support for previous version commands
Mathworks normally keeps command compatibility for a number of years -- four to five in my experience.
Version change is the modern business reality: software which does not update often "enough" is considered to be too rigid and stodgy, and the company involved is seen to be "not agile enough" to react to changing market demands. People would migrate to other software.
I cannot, though, speak to Mathwork's policy on bug fixes. Some of the other vendors I deal with, do tend to put out "dot releases" to address the more important (or more frustrating) bugs between releases.
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.
@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.
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.
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 :-(
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.
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!!
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.
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?
And Per, please contact us as well to provide your specific feedback. I certainly agree, debugging with timers can be difficult.
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.
When you refer to "writing out symbolic math", are you referring to input or output? As you familiar with MuPAD and MuPAD notebooks?
6 Comments
Direct link to this comment:
http://mathworks.com/matlabcentral/answers/1427#comment_2559
Interesting start of a thread, Oliver. I encourage all posters to write a single point per answer to make it easier for others to vote up answers they agree with.
Direct link to this comment:
http://mathworks.com/matlabcentral/answers/1427#comment_2613
There will, of course, be no accepted answer. It's about what you think.
Direct link to this comment:
http://mathworks.com/matlabcentral/answers/1427#comment_2618
It sounds like this question may overlap to some degree with this previous one: http://www.mathworks.com/matlabcentral/answers/1325-what-s-missing-from-matlab
Direct link to this comment:
http://mathworks.com/matlabcentral/answers/1427#comment_2621
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. :)
Direct link to this comment:
http://mathworks.com/matlabcentral/answers/1427#comment_140654
Help and examples sections are not newbie friendly.
Direct link to this comment:
http://mathworks.com/matlabcentral/answers/1427#comment_140680
@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.