MATLAB Experiment Guide
MATLAB Experiment Guide
2 s + 1
---------------------
s^3 + 2 s^2 + 2 s + 1
2 s
--------------------
(s-2) (s^2 - 2s + 2)
-0.5000
P1 =
-1.0000 + 0.0000i
-0.5000 + 0.8660i
-0.5000 - 0.8660i
K1 =
zeros = 0;
poles = [1-1i, 1+1i, 2];
gain = 2;
[num2, den2] = zp2tf(zeros, poles, gain)
num2 =
0 0 2 0
den2 =
1 -4 6 -4
3 Time domain analysis
3.1 Typical input signal
num1 = [2, 1];
den1 = [1, 2, 2, 1];
sys1 = tf(num1, den1);
%impulse(sys1);
impulse(num1, den1);
-1.0000 + 0.0000i
-0.5000 + 0.8660i
-0.5000 - 0.8660i
zero(sys1)
ans =
-0.5000
roots(den1)
ans =
-1.0000 + 0.0000i
-0.5000 + 0.8660i
-0.5000 - 0.8660i
2.8552
C = dcgain(sys1);
[Y, k] = max(y);
percent_overshoot = 100 * (Y - C) / C
percent_overshoot =
43.3919
% tr: 0 - 100%
n = 1;
while y(n) < C
n = n + 1;
end
tr = t(n)
tr =
1.5658
1.1052
i = length(t);
while (y(i) > 0.95 * C) & (y(i) < 1.05 * C)
i = i - 1;
end
ts = t(i)
ts =
7.2762
0
4 Root Locus Techniques
4.1 Common functions for drawing root locus
rlocus(): Evans root locus.
Example 4-1:
zeros = [];
poles = [0, -2];
gain = 1;
GH = zpk(zeros, poles, gain);
rlocus(GH);
sgrid();
h = findobj(gcf,'type','line');
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
Example 4-2:
𝑲𝑲∗
𝑮𝑮(𝒔𝒔)𝑯𝑯(𝒔𝒔) =
𝒔𝒔(𝒔𝒔 + 𝟏𝟏)(𝒔𝒔 + 𝟐𝟐)
zeros = [];
poles = [0, -1, -2];
gain = 1;
GH = zpk(zeros, poles, gain);
rlocus(GH);
sgrid();
h = findobj(gcf,'type','line');
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
Example 4-3:
𝑲𝑲∗ (𝒔𝒔 + 𝟒𝟒)
𝑮𝑮(𝒔𝒔)𝑯𝑯(𝒔𝒔) =
𝒔𝒔(𝒔𝒔 + 𝟐𝟐)
zeros = [-4];
poles = [0, -2];
gain = 1;
GH = zpk(zeros, poles, gain);
rlocus(GH);
sgrid();
h = findobj(gcf,'type','line');
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
Example 4-4:
𝑲𝑲∗ (𝒔𝒔 + 𝟏𝟏)
𝑮𝑮(𝒔𝒔)𝑯𝑯(𝒔𝒔) =
(𝒔𝒔 + 𝟏𝟏. 𝟓𝟓 + 𝒋𝒋)(𝒔𝒔 + 𝟏𝟏. 𝟓𝟓 − 𝒋𝒋)
zeros = [-1];
poles = [-1.5-1i, -1.5+1i];
gain = 1;
GH = zpk(zeros, poles, gain);
rlocus(GH);
sgrid();
h = findobj(gcf,'type','line');
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
Example 4-5:
𝑲𝑲∗ (𝒔𝒔 + 𝟏𝟏. 𝟓𝟓)(𝒔𝒔 + 𝟐𝟐 − 𝒋𝒋)(𝒔𝒔 + 𝟐𝟐 + 𝒋𝒋)
𝑮𝑮(𝒔𝒔)𝑯𝑯(𝒔𝒔) =
𝒔𝒔(𝒔𝒔 + 𝟐𝟐. 𝟓𝟓)(𝒔𝒔 + 𝟎𝟎. 𝟓𝟓 − 𝟏𝟏. 𝟓𝟓𝟓𝟓)(𝒔𝒔 + 𝟎𝟎. 𝟓𝟓 + 𝟏𝟏. 𝟓𝟓𝟓𝟓)
zeros = [-1.5, -2+2i, -2-2i];
poles = [0, -2.5, -0.5+1.5i, -0.5-1.5i];
gain = 1;
GH = zpk(zeros, poles, gain);
rlocus(GH);
sgrid();
h = findobj(gcf,'type','line');
axis([-4, 0.5, -3.5, 3.5]);
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
Example 4-6:
𝑲𝑲∗
𝑮𝑮𝟎𝟎 (𝒔𝒔) =
𝒔𝒔(𝒔𝒔 + 𝟏𝟏)(𝒔𝒔 + 𝟑𝟑. 𝟓𝟓)(𝒔𝒔 + 𝟑𝟑 − 𝒋𝒋𝒋𝒋)(𝒔𝒔 + 𝟑𝟑 + 𝒋𝒋𝒋𝒋)
zeros = [];
poles = [0, -1, -3.5, -3+2i, -3-2i];
gain = 1;
GH = zpk(zeros, poles, gain);
rlocus(GH);
sgrid();
h = findobj(gcf,'type','line');
axis([-10, 5, -5, 5]);
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
Example 4-7:
𝑲𝑲∗ (𝒔𝒔 + 𝟏𝟏)
𝑮𝑮(𝒔𝒔) =
𝒔𝒔(𝒔𝒔 − 𝟏𝟏)(𝒔𝒔𝟐𝟐 + 𝟒𝟒𝟒𝟒 + 𝟏𝟏𝟏𝟏)
num = [1, 1];
den = conv([1, 0], conv([1 -1], [1, 4, 16]));
GH = tf(num, den);
rlocus(GH);
sgrid();
h = findobj(gcf,'type','line');
axis([-4.5, 3.5, -4.5, 4.5]);
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
Example 4-8:
𝑲𝑲∗ 𝑲𝑲∗
𝑮𝑮(𝒔𝒔)𝑯𝑯(𝒔𝒔) = =
𝒔𝒔(𝒔𝒔𝟐𝟐 + 𝟔𝟔𝟔𝟔 + 𝟏𝟏𝟏𝟏) 𝒔𝒔(𝒔𝒔 + 𝟑𝟑 − 𝒋𝒋)(𝒔𝒔 + 𝟑𝟑 + 𝒋𝒋)
zeros = [];
poles = [0, -3+1i, -3-1i];
gain = 1;
GH = zpk(zeros, poles, gain);
rlocus(GH);
sgrid();
h = findobj(gcf,'type','line');
axis([-6, 1, -4, 4]);
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
Example 4-9:
𝑲𝑲∗
𝑮𝑮(𝒔𝒔)𝑯𝑯(𝒔𝒔) =
𝒔𝒔(𝒔𝒔𝟐𝟐 + 𝟐𝟐𝟐𝟐 + 𝟐𝟐)(𝒔𝒔𝟐𝟐 + 𝟔𝟔𝟔𝟔 + 𝟏𝟏𝟏𝟏)
num = [1];
d1 = [1, 2, 2];
d2 = [1, 6, 13];
den1 = conv(d1, d2);
den = [den1, 0]; % den = [1, 8, 27, 38, 26, 0]
GH = tf(num,den);
rlocus(GH);
sgrid();
h = findobj(gcf,'type','line');
axis([-6, 2, -5, 5]);
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
[k, p] = rlocfind(GH);
k =
29.5940
p =
-2.8163 + 2.1726i
-2.8163 - 2.1726i
-2.3581 + 0.0000i
-0.0046 + 0.9959i
-0.0046 - 0.9959i
Find the system open-loop gain corresponding to the damping ratio 0.707, draw the step
response of a unit feedback closed loop system.
zeros = [];
poles = [0, -1, -2];
gain = 1;
G = zpk(zeros, poles, gain);
rlocus(G);
zeta = [0:0.707:1];
wn = [1:10];
sgrid(zeta, wn);
h = findobj(gcf,'type','line');
axis([-6, 2, -5, 5]);
axis equal;
set(h, 'LineWidth', 2);
set(h, 'markersize', 15);
[k,p] = rlocfind(G);
k =
0.6697
p =
-2.2409 + 0.0000i
-0.3796 + 0.3934i
-0.3796 - 0.3934i
k = 0.6697;
G = zpk(zeros, poles, k);
Gf = feedback(G, 1);
figure();
step(Gf);
h = findobj(gcf,'type','line');
set(h, 'LineWidth', 2);
h = findobj(gcf,'type','line');
set(h, 'LineWidth', 2);
Example 5-2:
𝝎𝝎𝟐𝟐𝒏𝒏
𝑮𝑮(𝒔𝒔) =
𝒔𝒔𝟐𝟐 + 𝟐𝟐𝟐𝟐𝝎𝝎𝒏𝒏 𝒔𝒔 + 𝝎𝝎𝟐𝟐𝒏𝒏
Sketching the Nyquist diagram.
close all;
clear all;
zetas = [0.3, 0.5, 0.7, 0.9];
wn = 1;
for i = 1:4
num = wn * wn;
den = [1, 2*zetas(i), wn * wn];
nyquist(num,den);
axis('square');
hold on;
end
h = findobj(gcf,'type','line');
set(h, 'LineWidth', 2);
Example 5-3:
𝟐𝟐𝟐𝟐 + 𝟏𝟏
𝑮𝑮(𝒔𝒔) =
𝒔𝒔𝟐𝟐 (𝟎𝟎. 𝟓𝟓𝟓𝟓 + 𝟏𝟏)(𝒔𝒔 + 𝟏𝟏)
Sketching the Nyquist diagram.
num = [2, 1];
den = conv([1, 0, 0], conv([0.5, 1], [1, 1]));
nyquist(num, den, {0.2,10000});
h = findobj(gcf,'type','line');
set(h, 'LineWidth', 2);
5.2 Bode Plots
Example 5-4:
𝟑𝟑𝟑𝟑(𝟎𝟎. 𝟐𝟐𝟐𝟐 + 𝟏𝟏)
𝑮𝑮(𝒔𝒔) =
𝒔𝒔(𝒔𝒔𝟐𝟐+ 𝟏𝟏𝟏𝟏𝟏𝟏 + 𝟏𝟏𝟏𝟏𝟏𝟏𝟏𝟏)
Draw the Bode plot.
num = [6, 30];
den = conv([1, 0], [1, 16, 100]);
% bode(num, den);
grid on;
h = findobj(gcf,'type','line');
set(h, 'LineWidth', 2);
Bode Diagram
20
-20
Magnitude (dB)
-40
-60
-80
-60
-90
Phase (deg)
-120
-150
-180
-1 1 2
10 10 0 10 10
Frequency (rad/s)