kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Optimierung mit Hilfe der Scilab-Funktion optim und mit C++

  • In der Vorlesung vom 11.01.2010 wird erneut die Übung 3 betrachtet (Tilger-System).
  • Im Verlauf der Entwicklung mehrerer aufeinander aufbauender Scilab-Skripte, wird schließlich ein Programm zur Parameteroptimierung entwickelt und getestet.
  • Abschließend wird versucht, ein ähnliches Programm mit Hilfe von C++ zu entwickeln.
vorlesung_sim_11_januar_2010.zip - Der Vorlesung zugrunde liegende Quellcodes.

Beschreibung der Inhalte der Quelltexte


001_uebung3_loesung.sce
Wiederholung der Lösung zur Übung3

002_uebung3_gesamtsyste_simulieren.sce
Aufbau eines Simulationsmodells des Schwinger-Tilger-Systems
mit Hilfe von Scilab

003_optimierung_berechnung_gesamtenergie.sce
Minimiert soll die im Modell nach einem Simulationslauf 
noch vorhandene Gesamtenergie werden.
Wie diese berechnet werden kann, wird hier gezeigt.

004_optimierung_erstellen_fehlerfunktion.sce
Die Berechnung der Gesamtenergie wird in eine Funktion gepackt.
Die Gesamtenergie am Ende der Simulation ist nun der zu 
minimierende "Fehler".

004b_anderer_eigenmode.sce
Es zeigt sich, dass die nach den in Übung 3 angestellten
theoretischen Überlegungen gefundene Lösung nicht
wirklich optimal ist.
Es werden Überlegungen zu Bedinungen angestellt, unter denen
sie optimal sein könnte.

005_anpassungen_fuer_optim.sce
Scilab verfügt über eine Optimierungsfunktion "optim".
Um diese verwenden zu können, werden einige Anpassungen
an der Fehlerfunktion vorgenommen.

006_vorversuch_mit_optim.sce
Um die Verwendung von "optim" zu verstehen, wird eine
einfache Funktion als Vorversuch optimiert.

007_verwendung_von_optim.sce
Nun werden die Parameter C2 und D2 für das Schwinger-Tilger-Modell
mit Hilfe der Scilab-Funktion "optim" optimiert.

008_simulation_mit_cpp.cpp
Nach noch nicht befriedigenden Ergebnissen mit "optim",
wird das Schwinger-Tilger-Modell auf ein C++-Simulationsprogramm übertragen.

vergleich_simulation_cpp_scilab.sce
Die Zeitschrittweite Δt muß für das in C++ verwendete Runge-Kutta-Verfahren
deutlich kleiner eingestellt werden, als für den ode-Solver in Scilab.

009_optimierung_mit_cpp.cpp
Implementierung eines modifizierten Gradientenverfahrens in C++

test_ergebnis_opti_cpp.sce
Überprüfen der Ergebnisse aus dem C++-Programm mit Hilfe von Scilab.

 

Code 0-1: Beschreibung der Inhalte der Quelltexte

Empfehlung zum Umgang mit den Quelltexten

  • Analysieren Sie die Quelltexte und testen Sie sie.
  • Versuchen Sie eine Optimierung für folgendes System zu realisiren:
  • Gegeben sei wieder der Schwinger aus Übung3 mit und m1,C1 unter Verwendung der gleichen Anfangsbedingungen und Simulationsdauer, wie in der hier zuvor vorgenommenen Optimierung.
  • Anstatt einer Tilgermasse wirkt nun eine Kraft F=q*sin(t+p), mit q=10N, der Zeit t und der Phase p.
  • Wählen Sie die Phase p so, dass am Ende der Simulation möglichst viel Energie aus dem Schwinger genommen wurde.
Ergänzung: Verwendung von optim bei neuen Scilab-Versionen

Siehe auch die Scilab-Hilfe unter "optim".

[fopt, xopt, gopt] = optim(list(NDcost,berechneFehler), "b", x0.*0.001, x0.*1000.0, x0);

Code 0-1: Aktualisierte Benutzung von optim bei Scilab 5.5

Term Bedeutung
x0 Start-Vektor bei Parametersuche
x0.*0.001 Festlegen der unteren erlaubten Grenze
x0.*1000.0 Festlegen der oberen erlaubten Grenze
fopt Bester erreichter Fehler
xopt Bester gefundener Paramatersatz
gopt Steigungsvektor beim Erreichen von fopt
berechneFehler Fehlerfunktion
NDcost Festlegen eines Verfahrens, bei dem Steigungen mit diskreten Schrittweiten bestimmt werden.

Tabelle 0-1: Bedeutung der auftretenden Terme