function [R]=vobo(siz,opa)
%VOBO     Hilfsfunktion für bod.m
%         [R]=vobo(siz,opa)
% Reglereinstellung nach Digitalem Betragsoptimum (BOD); Vorbereitung für
% BOD-Optimierung ausgehend von Strecke im Z-Bereich (siz) und ausgewählter
% Optimierungsart (opa) durch Berechnung der Rx-Koeffizienten.
% R=[R2F R2L0 R2L1 ... R2LD R2Q0 ... R2QD R2ZL R2ZP;
%     .                 .    .        .   R4ZL R4ZP;
%     .                 .   RAQ0 ... RAQD  0    0  ;
%    RAF  .    .   ... RALD  0   ...  0    0    0  ;]
%
% Es werden nur die entsprechend "opa" tatsächlich benötigten Zeilen und
% Spalten von "r" berechnet.
%
% siz = [Vz N n1 ... nN;         opa = [fos kon D I gon]
%        k  M m1 ... mM]
% M  : steht bei Kompensation für M-quer
% fos: führungs- (0) oder störoptimal (1)
% kon: Kompensation (1) oder nicht (0)
% D  : Ordnung des mit "R" zu berechnenden Reglerzähler(anteil)s
% I  : Reglerintegralanteil (1) oder nicht (0)
% gon: gedämpfter D-Anteil (1) oder nicht (0) - nur für Sonderfall D=0
%      und Führungsoptimierung (z.Z.)

% SCHLÜSSELWORTE: Hilfsfile

%  ***** Voraussetzungen: Vorhandensein von vaib ****
%  Copyright (c) 1997 Dr. Gert-Helge Geitner; TU Dresden, Fak. ET,
%                     Elektrotechnisches Institut (ETI); Mommsenstr. 13;
%                     D-01062 Dresden, Germany;
%                     Tel./Fax (0351)-463-2917/7280
%                     e-mail: geitner@eeiwzb.et.tu-dresden.de
%  Literatur zum Digitalen Betragsoptimum: Geitner, G.-H.:
%                     Entwurf digitaler Regler für elektrische Antriebe.
%                     VDE-Verlag GmbH Berlin und Offenbach 1996
%                     ISBN 3-8007-1847-2

K=[1 4 9 16 25  36  49  64;
   0 1 6 20 50 105 196 336;
   0 0 1  8 35 112 294 672;
   0 0 0  1 10  54 210 660;
   0 0 0  0  1  12  77 352];

% Für die Elemente K(x,i) muß damit gelten: x<=5 ; i<=8
% Es werden folgende allgemeine Parameter definiert:
alf=-opa(4); M=siz(2,2); D=opa(3);

% Die Werte RAF werden für jede Variante benötigt:
maxi=M+1; mini=-1; Kz=D; Ks=maxi; zei=2;
[m]=vaib(maxi,mini,zei,siz,Kz,Ks);
for x=1:(D+1+opa(5))
    R(x,1)=0;
    for i=x:(M+1)
        var=0;
           for j=(0+1-mini):((M-i+1)+1-mini)
               var=(alf*m(j-1)+m(j))*(alf*m(j+i-1)+m(j+i))+var;
           end
        R(x,1)=K(x,i)*var+R(x,1);
    end
end
% Die Werte RAL werden für jede Variante benötigt."D" und "opa(5)"
% entscheiden über die Anzahl.
k=siz(2,1); N=siz(1,2); siz(1,2)=1; I=max((N+k),(M+1-k));
maxi=N+k+I+(2*D); mini=k-I-1; Kz=D+1; Ks=I+D; if mini>0 mini=0; end
[m]=vaib(maxi,mini,zei,siz,Kz,Ks);
for l=0:D
    for x=1:(D+1+opa(5))
        R(x,l+2)=0;
        for i=x:(I+l)
            var=0;
            for j=(k+1-mini):((N+k)+1-mini)
            o=j-1+mini;
  var=siz(1,2+o-k)*(m(j-i+l)+(alf*m(j-i+l-1))+m(j+i+l)+(alf*m(j+i+l-1)))+var;
            end
            R(x,l+2)=K(x,i)*var+R(x,l+2);
        end
    end
end
siz(1,2)=N;
if opa(1)==1
% Die Werte RAQl werden nur für Störoptimierung benötigt
maxi=N+D; mini=-D; zei=1; Ks=maxi;
[n]=vaib(maxi,mini,zei,siz,Kz,Ks);
for l=0:D
    for x=1:(D+1)
        R(x,3+D+l)=0;
        for i=x:(N+l)
            var=0;
            for j=(0+1-mini):((N-i+l)+1-mini)
                var=(n(j)*n(j+i-l))+(n(j-l)*n(j+i))+var;
            end
            R(x,3+D+l)=K(x,i)*var+R(x,3+D+l);
        end
    end
end
elseif opa(5)==1
% Die Werte RAZL und RAZP werden nur für verzögerten D-Anteil benötigt.
maxi=2*M+4; mini=-(M+2); zei=2; Kz=2; Ks=maxi/2;
[m]=vaib(maxi,mini,zei,siz,Kz,Ks);
for x=1:2
    R(x,3+D)=0;
    for i=x:(M+2)
        var=0;
        for j=(1+1-mini):((M+2)+1-mini)
   var=(alf*m(j-2)+m(j-1))*(m(j-i)+(alf*m(j-i-1))+m(j+i)+(alf*m(j+i-1)))+var;
        end
        R(x,3+D)=K(x,i)*var+R(x,3+D);
    end
end
I=max((N+k-1),(M+2-k)); siz(1,2)=1;
maxi=N+k+I-1; mini=k-I-2; Ks=I; if mini>0 mini=0; end
[m]=vaib(maxi,mini,zei,siz,Kz,Ks);
for x=1:2
    R(x,4+D)=0;
    for i=x:I
        var=0;
        for j=(k+1-mini):((N+k)+1-mini)
        o=j-1+mini;
      var=siz(1,2+o-k)*(m(j-i-1)+(alf*m(j-i-2))+m(j+i-1)+(alf*m(j+i-2)))+var;
        end
        R(x,4+D)=K(x,i)*var+R(x,4+D);
    end
end
siz(1,2)=N;
end
