close all;
clear all;

% Systemparameter
delta = 5;
omega_0 = 10;

% Simulationsparameter
dt = 0.005;
T = 0:dt:1.5;
steps = length(T);

% Anfangsbedingungen
x_0 = [1; 0]; % Winkel; Drehrate
u_0 = 0; % Sollwinkel für die Steuerung

% Vorberechnungen
omega_0_pow2 = omega_0*omega_0;
statesize = length(x_0);

A = [0, 1; -omega_0_pow2, -2*delta];
B = [0; omega_0_pow2];
Q = diag([1, .1]);
R = 1;
[K, ~, ~] = lqr(A, B, Q, R);

% Speicher für Simulationsergebnisse allozieren und initialisieren
x = zeros(steps, statesize);
x2 = zeros(steps, statesize);
x(1,:) = x_0; % Anfangsbedingung übernehmen
x2(1,:) = x_0; % Anfangsbedingung übernehmen
u = zeros(steps, 1);

% Simulation
for i = 2:steps
  % Gesteuert
  x_dot = [          x(i-1, 2);
            -2*delta*x(i-1, 2) - omega_0_pow2*sin(x(i-1, 1) - u_0)];
  x(i,:) = x(i-1,:) + x_dot'*dt;
  
  % Geregelt
  %A = [0, 1; -omega_0_pow2*cos(x2(i-1,1) - u(i-1)), -2*delta];
  %B = [0; omega_0_pow2*cos(x2(i-1,1) - u(i-1))];
  %[K, ~, ~] = lqr(A, B, Q, R);
  u(i) = -K*x2(i-1,:)';
  x_dot = [          x2(i-1, 2);
            -2*delta*x2(i-1, 2) - omega_0_pow2*sin(x2(i-1, 1) - u(i))];
  x2(i,:) = x2(i-1,:) + x_dot'*dt;
end

% Plotten
plot(T, x, T, x2, T, u);
xlabel("t [s]");
legend('Winkel gesteuert', 'Drehrate gesteuert', 'Winkel geregelt', 'Drehrate geregelt', 'u', 'location', 'southeast');
