%   Script VEKFELD.M
%
%   Interpretation der Zustandsgleichung als Vektorfeld
%
% J. Lunze
% für 2. Auflage: 22.2.1999
% für 3. Auflage: 3.4.2001
% für 4. Auflage: 18.9.2003
% für 5. Auflage: 2.5.2005
% für 6. Auflage: 4.12.2006  (veränderte Motordaten)
% für 7. Auflage: 28.4.2008
% für 9. Auflage: 13.2.2012
% für 10. Auflage: 27.1.2014
% für 12. Auflage: 23.07.2019
%
%   
clear
close all
A = [-0.8 2;
     -2 -0.8];
b = [1;
     1];
c = [1 1];
d = 0.3;
System=ss(A, b, c, d);
x0=[1, 1];

%%  Vektorfeld eines Systems 2. Ordnung
%   
figure(1);
subplot(4,4,[1,2,5,6]);
k=0;
X=[];
Y=[];
U=[];
V=[];
for x1=-3.2:1:3.2
for x2=-3.2:1:3.2
   k=k+1;
   X(k)=x1;
   Y(k)=x2;
   U(k)=[1 0]*A*[x1; x2];
   V(k)=[0 1]*A*[x1; x2];
end
end
quiver(X, Y, U, V, 'Color', 'b', 'LineWidth', 1, 'MaxHeadSize', 0.8);
hold on
[Y, T, X]=initial(System, [2; 2.5]);
plot(X(:,1), X(:,2), 'b');
plot([-4 4],[0 0],'k:', [0 0],[-4 4],'k:');
axis([-3.4 3.4 -3.4 3.4]);
axis('square');
xleer;
latexxlabel('$$x_1$$');
yleer;
latexylabel('$$x_2$$');
rotateY;
latextitle('Vektorfeld eines schwingungsf\"ahigen Systems');
hold off
%
%   Verschiebung des Vektorfeldes durch Eingangsgröße u
%
subplot(4,4,[3,4,7,8]);
k=0;
X=[];
Y=[];
U=[];
V=[];
u=2.3;
for x1=-3.2:1:3.2
for x2=-3.2:1:3.2
   k=k+1;
   X(k)=x1;
   Y(k)=x2;
   U(k)=[1 0]*(A*[x1; x2]+b*u);
   V(k)=[0 1]*(A*[x1; x2]+b*u);
end
end
quiver(X, Y, U, V, 'Color', 'b', 'LineWidth', 1, 'MaxHeadSize', 0.8);
hold on
[Y, T, X]=initial(System, [2; 2.5]);
[Yerzw, T, Xerzw]=step(System, T);
plot(X(:,1)+u*Xerzw(:,1), X(:,2)+u*Xerzw(:,2), 'b');
plot([-4 4],[0 0],'k:', [0 0],[-4 4],'k:');
axis([-3.4 3.4 -3.4 3.4]);
axis('square');
xleer;
latexxlabel('$$x_1$$');
yleer;
latexylabel('$$x_2$$');
rotateY;
hold off


%%   Vektorfeld des Gleichstrommotors
%   
figure(2)
Bspmotor;
subplot(4,4,[1,2,5,6]);
k=0;
X=[];
Y=[];
U=[];
V=[];
for x1=-3:0.85:3.2
for x2=-3:0.85:3.2
   k=k+1;
   X(k)=x1;
   Y(k)=x2;
   U(k)=[1 0]*A*[x1; x2];
   V(k)=[0 1]*A*[x1; x2];
end
end
quiver(X, Y, U, V, 'Color', 'b', 'LineWidth', 1, 'MaxHeadSize', 0.8);
hold on
[Y, T, X]=initial(Motor, [3; 2]);
plot(X(:,1), X(:,2), 'b');
plot([-4 4],[0 0],'k:', [0 0],[-4 4],'k:');
axis([-3.2 3.2 -3.2 3.2]);
axis('square');
xleer;
yleer;
latexxlabel('$$i_{\rm A}$$  in A');
latexylabel('$$\omega$$  in $$\frac{\rm rad}{\rm s}$$');
rotateY;
latextitle('Vektorfeld des Gleichstrommotors');
hold off
%
%   Transformation in kanonische Normalform
%
subplot(4,4,[3,4,7,8]);
[Motorkanon, Tinv]=canon(Motor, 'modal');
k=0;
X=[];
Y=[];
U=[];
V=[];
[Ak, bk, ck, dk]=ssdata(Motorkanon);
for x1=-0.7:0.22:0.7
for x2=-0.7:0.22:0.7
   k=k+1;
   X(k)=x1;
   Y(k)=x2;
   U(k)=[1 0]*Ak*[x1; x2];
   V(k)=[0 1]*Ak*[x1; x2];
end
end
quiver(X, Y, U, V, 'Color', 'b', 'LineWidth', 1, 'MaxHeadSize', 0.8);
hold on
[Y, T, X]=initial(Motorkanon, Tinv*[3; 2]);
plot(X(:,1), X(:,2), 'b');
plot([-6 6],[0 0],'k:', [0 0],[-6 6],'k:');
%
%  betrachtetes Gebiet für kanonische Zustandsvariablen
%  ist beschrieben durch die Eckpunkte (G(i,1), G(i,2))
%
G=[ (Tinv*[-3; -3])';
    (Tinv*[-3; 3])';
    (Tinv*[3; 3])';
    (Tinv*[3; -3])';
    (Tinv*[-3; -3])'];
plot(G(:,1), G(:,2), 'b--');
xleer;
yleer;
latexxlabel('$$\tilde{x}_1$$');
latexylabel('$$\tilde{x}_2$$');
rotateY;
axis([-0.7 0.7 -0.7 0.7]);
%axis([-5.7 5.7 -5.7 5.7]);
axis('square');
hold off

%%  Bilder auf .EPS- und .PS-Dateien
%
Epsbildc15('vekfeld');
