function [xopt] = startspline(xopt)
% Loesung eines Optimalsteuerungsproblems
% Spline-Problem 
%
% Dies ist die Startdatei fuer das Optimalsteuerungsproblem "spline".
% Der Vektor xopt ist wie folgt belegt:
% xopt =[ u(t0), u(t1),...,u(tf)]
%
% Stoppuhr
tic;

% Vorgaben festlegen
n = 4;      % Anzahl der Diskretisierungsintervalle
n1 = n+1;   % Anzahl der Diskretisierungspunkte
nx  = 3;    % Anzahl der Zustandsgroessen

% Diskretisierung festlegen;            
knoten = [0:1/n:1]';

% Variablen fuer die  Minimierungsroutine initialisieren
% (u besteht aus Anfangszustaenden und diskreter Steuerung)
% (nur wenn keine Anfangsschaetzungen vorgegeben wurden)
if (nargin < 1) 
   nxopt = n;
   xopt = zeros(nxopt,1);
else
   nxopt = size(xopt,1);
end;

% Die festen Anfangszustaende bestimmen 
ya = zeros(nx,1);
ya(1) = 0; ya(2)=2; ya(3) = 0;

% Optionen fuer das SQP-Verfahren in "constr" festlegen
%options(2) = 1e-6;   %options(2-4) Genauigkeit der Abbruchbedingung
%options(3) = 1e-6;
%options(4) = 1e-6;
options(13) = 2;  % Die ersten "options(13)" Nebenbedingungen sind 
                  % Gleichungsnebenbedingungen,
                  % die restlichen sind Ungleichungsnebenbedingungen 
                  % der Form g <= 0.


% Minimierungsroutine aufrufen
[xopt] = constr('spline',xopt,options,[],[],[],knoten,ya);

% Die optimale Steuerung aus xopt explizit benennen.
u = xopt(nxopt-n+1:nxopt);


% ======================================================================
% Ausgabe der Resultate
% ======================================================================
toc
% Loesungstrajektorie integrieren
options = odeset;

[t,xdgl] = getyplot('dglspline',options,knoten,ya,u,10,xopt(1));

% In diesem Fall sollen x und u ueber t aufgetragen werden. 

% stueckweise konstante Steuerung:
tt = cat(1,knoten([1:n],1)',knoten([2:n1],1)');
% Zum Zeichnen wird u in einer anderen Form dargestellt. 
uu = cat(1,u',u');
% Darstellung der Steuerung
plot(tt,uu,'r-');

% Darstellung des Zustandes in einem anderen Fenster
figure;
plot(t,xdgl(:,1),'b-.');
xopt





