Help! Frustrating MATLAB Error!!

I ordinarily can resolve my MATLAB errors with lots of googling and a bit of trial and error, but this one has me particularly stumped.

I hope this doesn’t run afoul of the homework rules here, but this is a small aspect of a larger project. And in any case, I’m supposed to be learning about control systems analysis, not MATLAB. I would liken it to asking about the details of a calculator whilst doing math homework. I’m not, repeat NOT, asking about control systems here. MATLAB is the tool, not the homework.

Disclaimer aside, here goes:

My goal is to plot the unit step response of a unity feedback amplifier, with open loop gain, G = k/((3s+1)(2*s+1)), for k=10. The code looks like this:


k=10;
G=k/((2*s+1)*(3*s+1));
T=G/(1+G);
C=ilaplace(T/s);

figure (4)
ezplot(C)

This works perfectly. However, when I move on to step 2, adding another pole at s=100, is when the shit hits the fan. Here’s my code:


k=10;
G=k/((2*s+1)*(3*s+1)*(1+s/100));
T=G/(1+G);
D=ilaplace(T/s);

figure (5)
ezplot(D)

I get all sorts of errors, starting with inlineeval:


??? Error using ==> inlineeval
Error in inline expression ==> -1000./121524455857.*sum((27047643+61502320.*_alpha+612012.*_alpha.^2).*exp(_alpha.*t),_alpha = RootOf(605.*_Z.^2+501.*_Z+1100+6.*_Z.^3))
??? Error: The input character is not valid in MATLAB statements or expressions.

Error in ==> inline.feval at 34
        INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

Error in ==> specgraph\private\ezplotfeval at 54
    z = feval(f,x(1));

Error in ==> ezplot>ezplot1 at 448
[y,f,loopflag] = ezplotfeval(f,x);

Error in ==> ezplot at 148
    [hp,cax] = ezplot1(cax,f{1},vars,labels,args{:});

Error in ==> sym.ezplot at 46
   h = ezplot(f.s);

Error in ==> Project2 at 70
ezplot(D)

I’ve since decided that this occurs whenever I add a third pole to the system, no matter what it is. Why would simply adding a third pole cause built-in MATLAB functions to stop working?

I hope to be pleasantly surprised but IMHO this post is pretty specific even for the Dope. If it was something simple like how to code a GUI in Matlab or do some time series analysis, no sweat. But for this question I think it is time to trot over to:

If you can’t find the answer anywhere else, I just registered for a how to seminar hosted by Mathworks where we are encouraged to bring our hard problems for them to solve. The speakers are good. It is in a couple of weeks. :slight_smile:

Frankly, it looks like a bug in Matlab (I know… the horror! but it HAS happened) :slight_smile:

good luck.

My experience with MATLAB’s symbolic toolbox is rather limited, but I believe it relies on Maple’s computer algebra system. The output of your inverse Laplace transform command suggests that Maple couldn’t provide a closed-form solution. Instead, Maple gave an implicitly-defined solution, which is unintelligible to MATLAB’s ‘ezplot’ command. You might have to generate a vector of function evaluations and use the ordinary ‘plot’ command.

In the first case, C is a straightforward function of t


C = 10/11-10/11*exp(-5/12*t)*cos(1/12*239^(1/2)*t)-50/2629*239^(1/2)*exp(-5/12*t)*sin(1/12*239^(1/2)*t)


In the second case, D is not that straightforward


D = 10/1336769014427*sum((-54101682857+15690610815*_alpha+162285858*_alpha^2)*exp(_alpha*t),_alpha = RootOf(605*_Z^2+6*_Z^3+501*_Z+1100))+10/11


It has the “_alpha = RootOf(…)” expression in it.

This is what is confusing ezplot, which is expecting a simple function.

One potential solution is to convert


_alpha = RootOf(605*_Z^2+6*_Z^3+501*_Z+1100)

to the Matlab-friendly


alpha = roots([6 605 501 1100]); 

and then


D2 = 10/1336769014427*sum((-54101682857+15690610815*alpha+162285858*alpha.^2).*exp(alpha*t)) +10/11


Try ezplot(D2)

Another way around it:


maple('k:=10;')
maple('G:=k/((2*s+1)*(3*s+1)*(1+s/100));')
maple('T:=G/(1+G);')
maple('C:=invlaplace(T/s,s,t)')
C = maple('evalf(C)');

figure(1)
clf
ezplot(C)


i.e. force maple to evaluate the complex symbolic expression

I sit here pleasantly surprised.
:slight_smile:

The real question here is why Maple doesn’t automatically evaluate the roots of a cubic polynomial, but (apparently) does automatically evaluate the roots of a quadratic polynomial. There’s a closed-form analytic expression for both of them, and in this case the roots are all real (in fact, they’re the poles of the original function you’re transforming.)

Wow, guys, thanks for the replies!

I figured it was worth a shot asking here, because I know there are posters who’ve said they use MATLAB everyday. But after watching this thread sink for several hours last night, I gave up and changed my entire approach.

I ended up using the Control Systems toolbox (:smack:) instead of Symbolic Math, using “step” to plot the step response to the transfer function in the form of step(num, den, t) where num and den were the numerator and denominator of my transfer function and t was the vector I plotted it over.

I’m completely inexperienced with Maple. I had no idea that the Symbolic Math toolbox used it so extensively. I’m going to do some research into Maple, because I know MATLAB can use it and it probably will come in handy in the future.

Even though I eventually solved my problem with a different approach, I’m going to bookmark this thread because I’ve had very similar problems before.

Thanks again for the help, I knew I could count on the Dope!

Just chiming in to say that I’m really shocked MATLAB is still around. I was using it back when Bush Sr. was in office.

Yep, I’m in grad school right now and Matlab is still what we’re using.

I was late answering, my thought was that it was also a toolbox problem, and that you should check your version/toolbox for the supported function. Complex transforms are often wonky unless explicity tailored by a toolbox. The Student releases of Matlab often have crippled toolboxes that you only discover the week that your major project is due :slight_smile:

I feel your pain, I’ve had many forehead–>keyboard bashing session in my Digital Signals classes.

It is more popular (and more expensive) than ever. When time is money, it is great. But at $2K/seat, it ain’t cheap.

Me too. I was a teaching assistant for a self-paced MATLAB course all through college, which was also when Bush Sr. was in office. :slight_smile: Anyway, it was also the main programming language that I used for engineering classes in college.

It was a great improvement over APL, which was on its way out by the mid 1980s. (Good riddance.)

I had a student version that I used in grad school that was only about $100. It was a full version, too, albeit that it ran on Mac OS 9.

My daughter has a student version as well. And I haven’t noticed that the toolboxes are crippled. But if it isn’t being used as part an education, one needs to purchase the commercial license. And on top of the purchase price, the maintenance fee is something like $400/yr. OTOH, even the help files are so good I reference them at work to document the algorithms we are using.

The toolboxes aren’t crippled in the student version? In my experience, the student version lacks a lot of the functionality of the full version. I remember one time a friend was trying to find the roots of a complicated polynomial (too complicated to solve analytically) and decided to use MATLATB. His student version didn’t recognize any of the symbolic math commands, but once he got to the computer lab (which has the pro version) he solved it just fine.