%--------------------------------------------------------
%Simulationsaufgabe: Pfeil & Bogen
%--------------------------------------------------------

N=input('Anzahl der Läufe (z.B. 100): ');

% Grenzen der Parameter festlegen
alpha_min = 40;       % >= 0
alpha_max = 60;       % < 90
beta_min  = -1;       % > -90
beta_max  = +1;       % < 90
len_min   = -0.7;     % > -2.0
len_max   = -0.4;     % < 0.0

% Parameter-Intervalle berechnen
delta_alpha = alpha_max - alpha_min;
delta_beta  = beta_max - beta_min;
delta_len   = len_max - len_min;

% Variable für besten Wert auf den schlechtesten Wert setzen                                      
besterWert = 10000;   

open_system('pfeil_und_bogen');

  
% MonteCarlo-Schleife
for i=1:N
  % Zufällige Variation der Parameter
  alpha = alpha_min + delta_alpha * rand;
  beta  = beta_min  + delta_beta  * rand;
  len   = len_min   + delta_len   * rand;
  set_param('pfeil_und_bogen/Winkel_alpha', 'Value',  num2str(alpha) );
  set_param('pfeil_und_bogen/Winkel_beta', 'Value',   num2str(beta)  );
  set_param('pfeil_und_bogen/Zuglaenge_len', 'Value', num2str(len)   );
  
  % Simulationsaufruf
  sim('pfeil_und_bogen', [0,20]);
  
  % Abweichung bestimmen (wie weit vom Ziel entfernt?)
  aktuellerWert = min(abweichung);

  if aktuellerWert < besterWert  
      % Parameter und neuen besten Wert merken
      best_alpha = alpha;
      best_beta  = beta;
      best_len   = len;
      besterWert = aktuellerWert;
  end 
   
end  

% Ausgabe des gefundenen Optimums
disp(['Abweichung: ', num2str(besterWert)]);
disp(['Alpha: ',      num2str(best_alpha)]);
disp(['Beta: ',       num2str(best_beta)]);
disp(['Länge: ',      num2str(best_len)]);


% Simulation mit besten Parametern und Ergebnis Anzeigen
set_param('pfeil_und_bogen/Winkel_alpha', 'Value',  num2str(best_alpha) );
set_param('pfeil_und_bogen/Winkel_beta', 'Value',   num2str(best_beta)  );
set_param('pfeil_und_bogen/Zuglaenge_len', 'Value', num2str(best_len)   );
sim('pfeil_und_bogen', [0,20]);

figure
plot3(sx, sy, sz, 'LineWidth', 2)
grid on
hold on
plot3(Ziel_x, Ziel_y, Ziel_z, 'r+')
xlabel('x')
ylabel('y')
zlabel('z')
title('Flugbahn')
axis([-0,600, -100,100 -2,400])
