%   Script BODENYQ.M zur Erzeugung von Bildern
%
%   Bodediagramme und Ortskurven verschiedener Systeme
%
% J. Lunze
% für 2. Auflage: 6.2.1998
% für 3. Auflage: 3.4.2001
% für 4. Auflage: 15.9.2003
% für 5. Auflage: 18.4.2005
% für 6. Auflage: 15.12.2006
% für 7. Auflage: 19.6.2008
% für 8. Auflage: 5.1.2010
% für 9. Auflage: 16.2.2012
% für 10. Auflage: 5.5.2014
% für 12. Auflage: 01.07.2019
%
%   
clear
close all

%%    G(s) = 1000/(s+0.1)(s+1)(s+2)(s+10)
%
%   
figure(1)
z=[1000];
n=poly([-0.1, -1, -2, -10]);
System=tf(z, n);
W=logspace(-3, 2, 1000);
[Betrag,Phase]=bode(System, W);
subplot(4,2,1);
semilogx(W, 20*log10(Betrag(:)), 'b');
axis([0.01, 100, -100, 60]);
grid on;
xleer;
latexylabel('$$|G|$$');
rotateY;
yticks([-50 50]);
subplot(4,2,3);
semilogx(W, Phase(:), 'b');
axis([0.01, 100, -400, 0]);
grid on;
xleer;
latexylabel('$$\phi$$');
rotateY;
yticks([-360  -180  0]);
%latexxlabel('$$\omega$$ in rad/s');
%
figure(2)
subplot(2,2,1)
[Real, Imag]=nyquist(System, W);
plot(Real(:), Imag(:), 'b', Real(:), -Imag(:), 'b--');
hold on;
plot([-1000 1000], [0 0], 'k:');
plot([0 0], [-1000 1000], 'k:');
plot(dcgain(System), 0, 'bo');
axis('square');
axis([-80 540 -310 310]);
xticks([0 200 400]);
yticks([-200 0 200]);
latexylabel('Im');
rotateY;
hold off;

%%     G(s) = s(s+2)/(s^2 + 4s +8)
%
%   
figure(1)
z=[1 2 0];
n=[1 4 8];
System=tf(z, n);
W=logspace(-3, 2, 1000);
[Betrag,Phase]=bode(System, W);
subplot(4,2,2);
semilogx(W, 20*log10(Betrag(:)), 'b');
axis([0.01, 100, -50, 20]);
grid on;
xleer;
yleer;
%latexylabel('$$|G|$$ in dB');
rotateY;
yticks([-20 20]);

subplot(4,2,4);
semilogx(W, Phase(:), 'b');
axis([0.01, 100, 0, 100]);
grid on;
xleer;
yleer;
%latexylabel('$$\phi$$ in Grad');
yticks([0 90]);
rotateY;
figure(2)
subplot(2,2,2)
[Real, Imag]=nyquist(System, W);
plot(Real(:), Imag(:), 'b', Real(:), -Imag(:), 'b--');
hold on;
plot([-10 10], [0 0], 'k:');
plot([0 0], [-10 10], 'k:');
plot(dcgain(System), 0, 'bo');
axis('square');
axis([-0.4 1.2 -0.8 0.8]);
xlabel('');
yleer;
xticks([0 1]);
%latexylabel('Im');
%rotateY;
hold off;


%%     G(s) = 0.25s/(0.5s+1) e^(-5s)
%
%   
figure(1)
z=[0.25 0];
n=[0.5 1];
System=tf(z, n);
W=logspace(-2, 2, 1000);
[Betrag,Phase]=bode(System, W);
Phase(:)=Phase(:)-5*W(:)*180/pi;
subplot(4,2,5);
semilogx(W, 20*log10(Betrag(:)), 'b');
axis([0.01, 100, -50, 0]);
grid on;
xleer;
latexylabel('$$|G|$$');
rotateY;
yticks([-40 0]);
subplot(4,2,7);
semilogx(W, Phase(:), 'b');
axis([0.01, 100, -300, 100]);
grid on;
latexxlabel('$$\omega$$ in rad/s');
latexylabel('$$\phi$$');
rotateY;
xticks([0.01 1 100]);
yticks([-270 -90  90]);

figure(2)
W=logspace(-2, 0.7, 3000);
[Betrag,Phase]=bode(System, W);
Phase(:)=Phase(:)-5*W(:)*180/pi;
subplot(2,2,3)
Real=Betrag.*cos(Phase*pi/180);
Imag=Betrag.*sin(Phase*pi/180);
plot(Real(:), Imag(:), 'b', [0 0], [-10 10], 'k:', [-10 10], [0 0], 'k:');
hold on
plot(dcgain(System), 0, 'bo');
axis('square');
axis([-0.5 0.5 -0.5 0.5]);
xticks([-0.5 0 0.5]);
yticks([-0.5 0 0.5]);
latexxlabel('Re');
latexylabel('Im');
rotateY;
hold off;


%%     G(s) = 100(s+1)(s+3)/4s(s+10)(s+5)
%
%   
figure(1)
z=100*poly([-1 -3]);
n=conv(poly([-10 -5]), [4 0]);
System=tf(z, n);
W=logspace(-3, 2, 1000);
[Betrag,Phase]=bode(System, W);
subplot(4,2,6);
semilogx(W, 20*log10(Betrag(:)), 'b');
axis([0.01, 100, -20, 50]);
grid on;
xleer;
yleer;
%latexylabel('$$|G|$$ in dB');
rotateY;
yticks([0 40]);

subplot(4,2,8);
semilogx(W, Phase(:), 'b');
axis([0.01, 100, -100, 0]);
grid on;
latexxlabel('$$\omega$$ in rad/s');
yleer;
%latexylabel('$$\phi$$ in Grad');
rotateY;
xticks([0.01 1 100]);
yticks([-90 0]);
%
figure(2)
subplot(2,2,4)
[Real, Imag]=nyquist(System, W);
plot(Real(:), Imag(:), 'b', Real(:), -Imag(:), 'b--');
hold on;
plot([-10 10], [0 0], 'k:');
plot([0 0], [-10 10], 'k:');
axis('square');
axis([-5 5 -5 5]);
latexxlabel('Re');
yleer;
xticks([-5 0 5]);
%latexylabel('Im');
%rotateY;
hold off;



%% Herstellung der Bilddateien *.eps
%
Epsbildc15('bodenyq');
