The function asymp() corresponds to bode(), but it also plots asymptotes for the magnitude and phase graphs. Phase asymptotes are only horizontal and vertical.
asymp() only accepts SISO transfer functions.
If the transfer function also has a time delay, the time delay is ignored
for the phase asymptotes.
asymp() may be called in two ways only, asymp(h), or asymp(h,wmin,wmax).
Trond Andresen (2020). Bode plot with asymptotes (https://www.mathworks.com/matlabcentral/fileexchange/10183-bode-plot-with-asymptotes), MATLAB Central File Exchange. Retrieved .
Works well. Only issue I encountered was that it wasn't displaying correctly when I had it within a subplot.
Sorry, saw your correction just now. But the same holds there, asymp(.) and bode(.) both gives amp = 0dB for freq = 1 rad/s.
Excuse me I mean 1 rad/s must have 0 dB gain
This is the transfer function I'm testing:
den=[9.9990e-009 1.0000e+000 0.0000e+000];
this is a video showing when I maximize the figure, the xaxis tick labels don't correspond to the right values (0 rad/s must have 0 dB gain)
I am the author of this program. Can you Fausto, tell which transfer function you used that resulted in wrong x-axis tick labels? Then I will check it myself.
awesome function, very useful in the learning of bode diagrams, thanks a lot, however in MatLab 2017 live editor when a figure is open in a figure window the x axis ticks labels don't correspond to the real position.
It works perfect, Thanks.
Re error msg from Chantal Muller:
If h(s) = num(s)/den(s), the transfer function has to have degree(num) <= degree(den), i.e. be proper or strictly proper.
Suggested improvement: Add gridlines. Find all calls to MATLAB's 'bode.m', and add ', grid'.
Auto-completion error: 'asymptotic.m' should be 'asymp.m'.
But I don't understand why the function fails to plot:
wheareas there s no pb with :
I was thinking there was a constrain d°(den)< d°(num), but H7 works.
Anyway, thanks for your function et maybe for your help.
good work, thanks
I am the author of this function. It works also for the counter-examples given here by other commenters.
The asymptotes does not work for angles in this bandstop-filter:
>> H = tf([1 0 4000.*16000],[1 4000+16000 4000.*16000])
s^2 + 6.4e007
s^2 + 20000 s + 6.4e007
>> asymp (H)
(Maybe because of the sudden 180 degree phase shift at the bandstop frequency)
Other than that, the program is wonderful <3
It doesn't work with this simple test:
f11 = -1.2794;
f12 = -7.9856;
f22 = -1.2709;
F = [f11 f12;1 f22];
G = [-f12;0];
Hx = [1 0];
B22 = inv(-Hx*inv(F)*G)
sys = ss(F, G*B22, Hx,0);
You're a Geeeeeeeeeeenius
really, great m file
i need help...it keeps saying error at asymp at 19
******* Thank you **********
This is function (asymp.m) very nice
great stuff. thanks!
Very good, but there are errors with the following transfer function:
G(s) = (s^2+1)/(s*(s^2+4))
??? Error using ==> colon
Maximum variable size allowed by the program is exceeded.
Error in ==> asymp at 147
It's work. Nice job
I am the author of asymp( ).The problem reported by Anton Cervin has now been fixed. Please tell me if problems still remain.
It does not seem to work.
>> G = (s+1)/(s*(s+10))
s + 1
s^2 + 10 s
??? Error using ==> axes
Invalid object handle.
Error in ==> asymp at 120
A similar submission:
I would appreciate a more comprehensive help text at the top. The code is documented pretty well. There are some coding styles that could be better (i.e. the while loops). Since you are plotting the asymptotes, maybe the function could return the break frequencies and the corresponding slopes of the asymptotes. It can have the same behavior as BODE, in which if there are no output arugments, then it would create a plot, and if there are outputs, then it wouldn't create a plot.
Just editing the description a little
Fixed for compatibility with newer Matlab versions
Compatible with Matlab 2015
Fix error: A reviewer pointed out that a certain transfer function didn't work with the current version.
Inspired: CONTROL SYSTEMS - BODE PLOT