%   Script MODMATCH.M
%
%   Entwurf der Reaktortemperaturregelung
%   durch Modelmatching
%
% J. Lunze
% 18.11.1995
% für 2. Auflage: 1.11.1998
% für 3. Auflage: 2.4.2001
% für 4. Auflage: 18.9.2003
% für 5. Auflage: 6.6.2005
% für 9. Auflage: 13.2.2012
% für 10. Auflage: 27.1.2014
% für 12. Auflage: 3.07.2019
%
%   
clear
close all
Bspreak;    % liefert Modell "Reaktor" und Polynome zs, ns
B=zs;
A=ns;


%%   gefordertes Verhalten des geschlossenen Kreises
%
%   
figure(1);
subplot(2,1,1)
Bquer = [1];
Poles=[-3; -5];
Aquer = poly(Poles)/Poles(1)/Poles(2);
Modell=tf(Bquer, Aquer);
%  Existenzbedingungen
Bqsize=size(Bquer);
Aqsize=size(Aquer);
if Bqsize(2) > Aqsize(2)
   %           
   %  Existenzbedingung verletzt: Modell nicht proper
   %   
end;
[Y, T]=step(Modell);
plot(T, Y, 'b', [0 2],[1 1],'k:');
latextitle('geforderte F\"uhrungs\"ubergangsfunktion');
latexylabel('$$y$$ in K');
rotateY;
latexxlabel('$$t$$ in min');
axis([0 2 0 1.3]);
xticks([0 0.5 1 1.5 2]);
yticks([0 0.5 1]);


%%                  
%
figure(2);
subplot(2,1,1)
% Reglerberechnung
zr=conv(A(:), Bquer(:))';
ABquer=Aquer;
for k=0:Bqsize(2)-1
    ABquer(Aqsize(2)-k) = ABquer(Aqsize(2)-k)-Bquer(k+1);
end;
nr=conv(B, ABquer);
Regler=tf(zr, nr);
%[zr, nr] = series(A, B, Bquer, (Aquer-Bquer));
offeneKette = series(Regler, Reaktor);
Regelkreis = feedback(offeneKette, 1);
[Y, T]=step(Regelkreis);
plot(T, Y,'b', [0 2],[1 1],'k:');
hold on
%axis([0.1 10 -50 50]);
latexylabel('$$h_{\rm w}$$  in K');
rotateY;
latexxlabel('$$t$$ in min');
latextitle('F\"uhrungs\"ubergangsfunktion des temperaturgeregelten Reaktors');
%
% zweites gefordertes Verhalten des geschlossenen Kreises
Bquer = [1];
Poles=[-3-3i; -3+3i];
Aquer = poly(Poles);
Aqsize=size(Aquer);
Aquer=1/Aquer(Aqsize(2))*Aquer;
Modell2=tf(Bquer, Aquer);
%  Existenzbedingungen
Bqsize=size(Bquer);
if Bqsize(2) > Aqsize(2)
   %                
   %  Existenzbedingung verletzt: Modell nicht proper
   %   
end
axis([0 2 0 1.3]);
xticks([0 0.5 1 1.5 2]);
yticks([0 0.5 1]);
%
figure(1);
hold on
[Y, T]=step(Modell2);
plot(T, Y,'b');
latextitle('geforderte F\"uhrungs\"ubergangsfunktion (zweite Version)');
latexxlabel('$$t$$ in min');
latexylabel('$$h_{\rm w}$$ in K');
rotateY;
%
% Reglerberechnung
zr=conv(A, Bquer);
ABquer=Aquer;
for k=0:Bqsize(2)-1
    ABquer(Aqsize(2)-k) = ABquer(Aqsize(2)-k)-Bquer(k+1);
end;
nr=conv(B, ABquer);
Regler2=tf(zr, nr);
%[zr, nr] = series(A, B, Bquer, (Aquer-Bquer));
offeneKette2 = series(Regler2, Reaktor);
Regelkreis2 = feedback(offeneKette2, 1);
figure(2);
hold on
[Y, T]=step(Regelkreis2);
plot(T, Y, 'b');
latexxlabel('$$t$$ in min');
latexylabel('$$h_{\rm w}$$ in K');
axis([0 2 0 1.2]);
hold off;

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