Beruflich Dokumente
Kultur Dokumente
Handbuch Maschinenbau
herausgegeben von A. Böge
Handbuch Qualität
von W. Geiger und W. Kotte
Technische Berichte
von H. Hering und L. Hering
Messtechnik
von R. Parthier
www.viewegteubner.de
Wolf Dieter Pietruszka
® ®
MATLAB und Simulink
in der Ingenieurpraxis
Modellbildung, Berechnung und Simulation
3., bearbeitete und erweiterte Auflage
Mit 219 Abbildungen und zahlreichen Beispielen
STUDIUM
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der
Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über
<http://dnb.d-nb.de> abrufbar.
Dr.-Ing. Wolf Dieter Pietruszka, geb. 1938; Ingenieurstudium an der FH Kiel; Industrietätigkeit: Hamburg
Flugzeugbau, Entwicklung; Diplomstudium Maschinenbau; Promotion zu Nichtlinearen Drehschwingungen
1977 TU Brauschweig; ab 1975 Akad. Rat/ORat Universität Duisburg-Essen/Mechanik; Fachgebiete und
Forschungsschwerpunkte: Nichtlineare Schwingungen, Rotordynamik, Schwingungslehre, Schwingungs-
analyse mit MATLAB®, Simulation Dynamischer Systeme mit MATLAB®.
1. Auflage 2005
2. Auflage 2006
3., bearbeitete und erweiterte Auflage 2012
ISBN 978-3-8348-1764-8
Vorwort
Das Programmsystem MATLAB 1 , Simulink und Tools ist ein Werkzeug zur numerischen
Bearbeitung von einfachen bis hin zu komplexen technischen Systemen. Es ist zur schnellen
Analyse und Synthese dynamischer Vorgänge insbesondere in der Forschung und Entwicklung
geeignet und wird heute zunehmend in der Industrie eingesetzt. Sein Platz in der Ausbildung
an Universitäten, Hochschulen und Fachhochschulen ist seit langem unumstritten und gewinnt
weiter an Bedeutung. Mit MATLAB gelingt es, die Studierenden fächerübergreifend mit nur einer
Plattform während des gesamten Studiums an die rechnergestützte Bearbeitung von Problemen
u. a. der Mathematik, der Physik und speziell der Regelungstechnik, der Mechanik, der Mechatro-
nik und der Elektrotechnik heranzuführen. In Lehrveranstaltungen können praxisrelevante Bei-
spiele anschaulich bearbeitetet und dargestellt werden. The MathWorks, Inc., der Herausgeber
von MATLAB Softwareprodukten, unterstützt diese Aktivitäten zunehmend.
In diesem Buch soll ein problemorientierter Weg beschritten werden. Dazu musste zunächst
ein Kompromiss zwischen Grundlagen und Anwendungen gefunden werden. Die Grundlagen
beziehen sich auf die mathematische Modellbildung sowie auf die numerischen Methoden. Die
Anwendungen beziehen sich auf die Umsetzung in einen MATLAB Code bzw. Signalflussgra-
fen, auf phänomenologische Fragestellungen und die Visualisierung. Es sollten zunächst ein-
mal fundamentale Begriffe, Zusammenhänge und Methoden verstanden worden sein. Verstehen
bedeutet für den Ingenieur nicht nur gedankliches Nachvollziehen einer mathematischen oder
numerischen Methode, sondern vor allem die Fähigkeit, die entsprechenden Überlegungen auf
praktische Fragestellungen anzuwenden. Dem folgend ist das Ziel dieses Buches, den Entwurf
von technischen Systemen durch den Einsatz von Berechnung, Simulation und Visualisierung zu
unterstützen. Zwar unterliegen die Grundlagen in den einzelnen Disziplinen unterschiedlichen
Beschreibungsformen, die Modellierung, die Simulation, die eingesetzten Methoden und die pro-
grammtechnische Umsetzung sind jedoch dieselben.
Großer Wert wird auf die unmittelbare Umsetzung in ein entsprechendes MATLAB- bzw.
Simulink-Modell gelegt. Deshalb ziehen sich textbegleitende Beispiele mit zugehörigen Program-
men und Signalflussgrafen durch das gesamte Buch. Die vollständigen und ergänzenden gut do-
kumentierten Programme sowie eine zugehörige Auflistung mit kurzen Erläuterungen stehen auf
der Homepage zum Buch, erreichbar über die des Verlages www.viewegteubner.de, zur
Verfügung.
Die 3. Auflage enthält Ergänzungen u. a. zur Animation, zur Simulink-Modellierung sowie
einen neuen Abschnitt zur Lösung von Randwertproblemen unter MATLAB und das Projekt Ba-
lancierender Roboter.
Der Inhalt des vorliegenden Buches ist nach einzelnen Schwerpunkten in acht Kapiteln so
abgefasst, dass auch ein direkter Einstieg in die einzelnen Kapitel möglich ist. Vorausgesetzt
werden Kenntnisse in der Matrizenrechnung.
Eine Einführung in die Arbeitsweise und den Sprachumfang von MATLAB und der Compu-
teralgebra mit der Symbolic Math Toolbox vermittelt das erste Kapitel. Darüber hinaus wird auf
1 MATLAB , Simulink sind eingetragene Warenzeichen von "The MathWorks, Inc."
VI
die grafischen 2D- und 3D-Darstellungsmöglichkeiten sowie auf Ansätze zur Erstellung von Ani-
mationsmodellen und deren Visualisierung eingegangen. Dieses Kapitel ist für den Einstieg in
MATLAB unumgänglich.
Im zweiten Kapitel zeigen wir die rechnergestützte mathematische Modellbildung anhand
nichtlinearer mechanischer Modelle und deren Linearisierung. Die Grundlagen werden so aufbe-
reitet, dass eine symbolische Auswertung mit der Computeralgebra erfolgen kann. Anhand eines
Beispiels werden alle vorgestellten Methoden algorithmisch aufbereitet und programmiert.
Das dritte Kapitel befasst sich mit linearen, mechanischen Schwingungsmodellen. Ausgehend
von einer üblichen Klassifizierung der mathematischen Modelle werden diese so formuliert und
aufbereitet, dass damit unmittelbar ein vektorisierter Code erzeugt werden kann. Er ist universell
einsetzbar. Eigenschwingungen sowie freie und erzwungene Schwingungen werden berechnet
und grafisch ausgewertet.
Kapitel vier behandelt die weitverbreitete blockorientierte Simulation unter Simulink . Voran-
gestellt werden Grundlagen zu den Integrationsverfahren, deren Klassifizierung und Eigenschaf-
ten. Die Einführung erfolgt schrittweise mit der Bearbeitung eines kleinen Projektes.
Neben der blockorientierten Simulation spielt die skriptorientierte Modellierung mit dem Ba-
sismodul MATLAB des Kapitels fünf eine wesentliche Rolle. Die Anwendung erfolgt an kleinen
Beispielen. Diese beinhalten neben den Standardformulierungen als explizite bzw. implizite Dif-
ferenzialgleichungen die Beschreibung als differenzial-algebraische Gleichungen, die Formulie-
rung von Systemen mit Ereignissen wie Stoß und Reibung sowie die Bearbeitung von Randwert-
problemen und deren Stabilität.
Die Kapitel sechs und sieben behandeln zwei nützliche Tools für die Simulink-Umgebung.
Zunächst wird das Stateflow Tool vorgestellt und auf eventgesteuerte Systeme angewendet. Als
Vertreter für eine physikalische Modellierung wird das blockorientierte SimMechanics Tool ein-
gesetzt.
Das achte Kapitel enthält acht für sich abgeschlossene Projekte, die die bisherigen Grundlagen
vertiefen und ergänzen. Unterschiedliche Lösungswege werden gegenübergestellt. Anregungen
für eigene Projekte sollen vermittelt werden.
Das Buch ist nicht ausschließlich einer Lehrveranstaltung zuzuordnen, es ist vielmehr studien-
begleitend bezüglich der Grundlagen, der Anwendungen und der numerischen Ausführungen
einzusetzen. Es ist gleichermaßen für Studierende an Universitäten, Hoch- und Fachhochschulen
sowie für Ingenieure der Praxis gedacht. Aus diesem Grund sind neben einführenden Beispielen
komplexere Probleme mit praxisrelevanten Komponenten enthalten. Zur Vertiefung der Program-
mierung existieren Übungsvorschläge, die eigenständig bzw. mit angegebenen Hilfen bearbeitet
werden können.
Neben dem Basismodul MATLAB werden die Tools Simulink , Symbolic Math, Stateflow ,
SimMechanics und eingeschränkt die Control System Toolbox vorausgesetzt. Eine Studentenver-
sion, siehe: www.mathworks.de/academia/student_version/, ist erhältlich.
Mein Dank gilt dem Vieweg+Teubner Verlag für die Herausgabe sowie Herrn Thomas Zipsner
und Frau Ellen Klabunde für die Unterstützung und gute Zusammenarbeit bei der Erstellung der
Druckvorlage.
Für die großzügige Bereitstellung der Software bedanke ich mich bei der Firma The
MathWorks, Inc., 3 Apple Hill Drive, Natick, MA 01760-2098 USA.
1 Einführung in MATLAB 1
1.1 Desktop und Fenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Online-Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Einige Bemerkungen zur Arbeitsweise von MATLAB . . . . . . . . . . . . . . . . 5
1.4 Basis-Elemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.1 Skalare Operationen und Variablenverwaltung . . . . . . . . . . . . . . . . . . 6
1.4.2 Mathematische Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.3 Vektoren und Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4.4 Lineare Gleichungssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4.5 Spezielle Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.4.6 Vergleichsoperatoren und logische Operatoren . . . . . . . . . . . . . . . . . 26
1.4.7 Verzweigungen und Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5 Programmerstellung, MATLAB Script und Function . . . . . . . . . . . . . . . . 30
1.5.1 MATLAB Editor und Verzeichnispriorität . . . . . . . . . . . . . . . . . . . . 30
1.5.2 Datenein- und Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.5.3 MATLAB Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.5.4 MATLAB Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.5.5 Code-Beschleunigung, der Profiler . . . . . . . . . . . . . . . . . . . . . . . . 42
1.6 Grafik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.6.1 Grafikfenster (Figure), Erstellung und Verwaltung . . . . . . . . . . . . . . . 45
1.6.2 2D-Grafik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1.6.3 3D-Grafik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
1.7 Animation von 2D- und 3D-Modellen . . . . . . . . . . . . . . . . . . . . . . . . 66
1.7.1 Modellerstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
1.7.2 Animations-Grafik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.7.3 2D-Animation einfacher Linien-Modelle . . . . . . . . . . . . . . . . . . . . 69
1.7.4 Animation mit geometrischen 3D-Modellen . . . . . . . . . . . . . . . . . . . 73
1.8 Computeralgebra unter MATLAB, die Symbolic Math Toolbox . . . . . . . . . . . 81
1.8.1 Online-Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
1.8.2 Symbolische Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
1.8.3 Vereinbarung symbolischer Variablen und Ausdrücke (Objekte) . . . . . . . . 83
1.8.4 Substitution symbolischer und numerischer Größen, der subs Befehl . . . . . . 85
1.8.5 Beispiele aus der Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
1.8.6 Algebraische Gleichungssysteme, der solve Befehl . . . . . . . . . . . . . . . 87
1.8.7 Gewöhnliche Differenzialgleichungen, der dsolve Befehl . . . . . . . . . . . . 88
1.8.8 Beispiel aus der linearen Algebra . . . . . . . . . . . . . . . . . . . . . . . . 91
1.8.9 Übergang zur Numerik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
VIII Inhaltsverzeichnis
2 Modellbildung 95
2.1 Bemerkungen zur Schreibweise . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
2.2 Strukturen der Bewegungsgleichungen . . . . . . . . . . . . . . . . . . . . . . . . 97
2.3 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.3.1 Kinematik starrer Körper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.3.2 Kinetik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
2.4 Newton-Euler-Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
2.4.1 Rechnerorientierte Vorgehensweise . . . . . . . . . . . . . . . . . . . . . . . 116
2.5 Lagrange’sche Gleichung 2. Art . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
2.6 Linearisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
2.7 Anwendung der Modellerstellung . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8 Projekte 355
8.1 Permanentmagnet gelagerter Rotor . . . . . . . . . . . . . . . . . . . . . . . . . . 355
8.1.1 Systembeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
8.1.2 Rotor- und Magnetmodellierung . . . . . . . . . . . . . . . . . . . . . . . . . 357
8.1.3 Die aktive Stabilisierung, Reglerstrukturen . . . . . . . . . . . . . . . . . . . 358
8.1.4 Das kontinuierliche Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
8.1.5 Reglerentwürfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
8.1.6 Parametrierung und Reglerkoeffizienten . . . . . . . . . . . . . . . . . . . . . 363
8.1.7 Simulink-Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
8.1.8 Simulationsergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
8.2 Störgrößenkompensation harmonischer und konstanter Störungen . . . . . . . . . 364
8.2.1 Grundlagen zur Strecke und zum Beobachterentwurf . . . . . . . . . . . . . . 367
8.2.2 Parameterfile und Simulink-Modell . . . . . . . . . . . . . . . . . . . . . . . 369
8.2.3 Beobachter über S-Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
8.2.4 Analytische Ermittlung der Lösungen . . . . . . . . . . . . . . . . . . . . . . 370
8.2.5 Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
8.3 Schwingungstilger mit viskoelastischem Anschlag . . . . . . . . . . . . . . . . . 376
8.3.1 Das stationäre System ohne Anschlag . . . . . . . . . . . . . . . . . . . . . . 377
8.3.2 Entwurf des Simulink-Modells . . . . . . . . . . . . . . . . . . . . . . . . . . 379
8.3.3 Schwingungsantwort mit einem Sinus-Sweep des Systems ohne/mit Anschlag . 384
8.4 Axialkolbenverdichter einer Pkw-Klimaanlage . . . . . . . . . . . . . . . . . . . . 386
8.4.1 Das Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
8.4.2 Der Hebelmechanismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
8.4.3 Bewegungsgleichungen nach Lagrange . . . . . . . . . . . . . . . . . . . . . 388
8.4.4 Das M-File, erste Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
8.4.5 Modellbasierter Entwurf mit SimMechanics . . . . . . . . . . . . . . . . . . . 391
8.4.6 Vergleich der Ergebnisse bezüglich der Gelenkkräfte . . . . . . . . . . . . . . 393
8.4.7 Stationäre Lage, die Trimming-Methode . . . . . . . . . . . . . . . . . . . . . 394
8.4.8 Der Verdichter als SimMechanics-Modell . . . . . . . . . . . . . . . . . . . . 395
8.5 Dreifachpendel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
8.5.1 Lagrange’sche Gleichung 2. Art . . . . . . . . . . . . . . . . . . . . . . . . . 398
8.5.2 Newton-Euler-Formalismus . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Inhaltsverzeichnis XI
Literaturverzeichnis 417
Stichwortverzeichnis 421
1 Einführung in MATLAB
Ursprünglich war MATLAB 1 ein Benutzerinterface für Standardroutinen der numerischen Alge-
bra (Eispack, Linpack, Lapack) basierend auf Vektor- und Matrizenoperationen, worauf bereits
der Name MATrix LABoratory hinweist.
Kommerziell wurde das erste Programmpaket 1984 ausgeliefert. Heute ist die MATLAB Pro-
duktfamilie in erster Linie ein Softwarepaket zur numerischen Berechnung und Visualisierung
u. a. in den Mathematik- und Ingenieurwissenschaften. Es verfügt über eine eigene Hochsprache
mit interaktiver Umgebung. Der Kern besteht aus einer Vielzahl von Built-In Functions u. a. der
linearen Algebra, der Datenanalysis sowie der Lösung von Differenzialgleichungen.
Die Built-In Functions sind für Vektoroperationen bezüglich der Rechenzeit optimiert. Benut-
zereigene Functions (Unterprogramme) können das Programmpaket erweitern. Diese Functions
sollten – wenn möglich – ebenfalls in vektorisierter Form abgefasst werden; dies dient auch einer
guten Übersichtlichkeit.
Eine weitere Säule der MATLAB-Umgebung ist die grafische Entwicklungsumgebung Simu-
link 2 u. a. mit den Tools Stateflow , SimScape, SimMechanics, SimPowerSystems, SimDrive-
line, SimHydraulics , Real-Time Workshop usw. Viele optionale Toolboxen, z. B. Control Sys-
TM
Die erste Form wird immer im Zusammenhang mit unmittelbar zuvor vorgestellten Befehlen,
die zweite Form insbesondere bei parallel verfügbaren Programm-Codes – um Schreibfehler
auszuschließen – benutzt. Sie heben sich durch die Schrift-Art und -Größe vom Fließtext ab.
1 MATLAB ist ein eingetragenes Warenzeichen der Firma "The MathWorks, Inc."
www.mathworks.com, bzw. www.mathworks.de
2 Simulink , Stateflow , Real-Time Workshop , SimHydraulicsTM sind eingetragene Warenzeichen der Firma "The
MathWorks, Inc."
3 O-Matrix: www.omatrix.com, Octave: http://www.octave.org/, Scilab: http://www.scilab.org/
Darüber hinaus werden Möglichkeiten zur grafischen Ausgabe von Daten sowie deren Ani-
mation aufgezeigt. Im letzten Abschnitt dieses Kapitels wird dann auf die Computeralgebra mit
der Symbolic Math Toolbox eingegangen. Die Einführung ist weitgehend auf die Belange dieses
Buches mit den zugehörigen Projekten / Übungen u. a. in Kapitel 8 zugeschnitten und somit nicht
vollständig.
Ergänzende Grundlagen findet man u. a. in [2], [24], [41], [53] [57]. Insbesondere wird in der
Einführung von [53] auf ein weites Spektrum der Möglichkeiten unter MATLAB systematisch
eingegangen und mit vielen Beispielen anschaulich dargestellt. Neben den Grafik-Grundlagen
sind viele Ideen unterschiedlichster Darstellungsmöglichkeiten zusammengetragen. In [41] sind
neben einer mehr mathematisch orientierten Einführung in MATLAB viele Built-In Function, z. B.
zur Eigenwertberechnung, Lösung linearer Gleichungssysteme, gewöhnliche und partielle Diffe-
renzialgleichungen, F OURIER-Analysis usw., mit wichtigen mathematischen Hintergründen zu
finden. Beispiele, Übungen und Programmcodes dienen der Erläuterung und geben wertvolle
Tipps auch zu Grafikelementen für den fortgeschrittenen MATLAB-Anwender. [41] ist insbeson-
dere dem mathematisch Interessierten sehr zu empfehlen. Aus der Sicht eines Mathematikers ist
in [24] eine umfassende Einführung bezüglich MATLAB und Simulink zu finden. In [57] existie-
ren Dokumentationen von ca. 1.000 MATLAB-Befehlen. Die Funktionen der einzelnen Befehle
werden verständlich erläutert und anhand zahlreicher Beispiele und Abbildungen verdeutlicht.
eingefügt, womit ein schneller Fensterwechsel ermöglicht wird. Die Registerkarten können an al-
len Rändern positioniert werden. Speichern kann man das erstellte Layout unter Desktop/Save
Layout... . In Bild 1.1 ist eine eigene Konfiguration aus Command, Current Directory,
Workspace und Command History Window dargestellt, wobei die letzten drei zunächst
eigenständigen Fenster durch Andocken in die Desktop-Umgebung eingebunden wurden. Die
interaktive Arbeitsweise erfolgt, wie in Bild 1.1 angedeutet, im Command Window, vgl. Help
Button/Using the Command Window bei aktiven Command Window. Hinter dem Prompt oder
unter Help kann der Function Browser angewählt werden. Nach Kategorien unterteilt sind die
Functions des installierten Programmsystems mit kurzen Erklärungen und einer Suchleiste für
bekannte Functions auswählbar.
Für die Programmerstellung steht ein Text-Editor, siehe Abschn. 1.5.1, zur Verfügung. Durch
An- und Ausdocken (Dock, Undock) weiterer Fenster, z. B. des Editor- und Grafik-Fensters, mit
Hilfe der Button: , im jeweiligen Fenster-Kopf, kann mit dem Desktop ab MATLAB 7 eine
kompakte Arbeits-Umgebung mit eigens gestalteter Anordnung geschaffen werden. Die Fenster
lassen sich durch Ziehen der Kopfleiste mit der Maus beliebig anordnen.
1.1 Desktop und Fenster 3
Das Fenster Workspace (Info: doc workspace / Link workspace browser) zeigt den
Workspace Browser mit dem Namen (Name), dem Wert (Value), und dem zugehörigen Minimal-,
Maximalwert (Min, Max), der im aktuellen Workspace gespeicherten Größen. Mit einem Doppel-
Klick der linken Maustaste auf das Symbol öffnet sich der zugehörige Variable Editor, Daten
werden angezeigt und können manipuliert werden. Wählt man im Workspace Browser, wie in
Bild 1.1, den Vektor x aus, dann wird der Button angezeigt, worüber eine grafische
Auswertung in auszuwählender Darstellung erfolgt. Das Current Directory Fenster ent-
hält den Inhalt des aktuellen Pfads. Durch einen Doppel-Klick der linken Maustaste auf einen
Filenamen wird das M-File im Editor angezeigt. Schließlich werden im Command History
Fenster Eingabezeilen, wie in Bild 1.1 angedeutet, aufgezeichnet; sie sind mit einem Doppel-
Klick der linken Maustaste wieder aktivierbar, einzelne / mehrere Befehle lassen sich ausschnei-
den oder Kopieren. Darüber hinaus können Einträge dieses Fensters mit den Pfeiltasten ↑ ↓ in
die Command-Zeile kopiert und ausgeführt werden. Wird ein bestimmter Eintrag gesucht, dann
gibt man die Anfangsbuchstaben in die Command-Zeile ein und durch die Pfeiltasten werden nur
noch die Einträge mit diesen Anfangsbuchstaben übertragen.
In jedem Falle öffnet sich mit einem Mausklick der rechten Taste das zur Mauszeigerposition
gehörige Shortcut-Menü, womit weitere Ausführungen eingeleitet werden können. Einen Um-
gang mit dem Desktop, dem Command Window usw. vermitteln die Video Tutorials u. a. unter:
Button Help / Demos → MATLAB.
4 1 Einführung in MATLAB
1.2 Online-Hilfe
Eine gut strukturierte und weitgehend selbsterklärende Online-Hilfe unterstützt das gesamte An-
gebot und sollte deshalb für den Benutzer zu einem wichtigen und sehr hilfreichen Werkzeug
werden. Einen detaillierten Überblick bezüglich aller Hilfe-Kommandos erhält man durch Einga-
be von
⇒ help helptools
Wir wollen, aufbauend auf den Schlüsselwörtern help, helpwin, doc, sie sollten stets parallel ge-
nutzt werden, einen Einstieg in die Online-Hilfe vermitteln. Beispiel-Aufruf: help (liefert einen
Überblick im Command Window) oder spezieller help toolbox spezifikation, z. B. help gene-
ral für allgemeine Befehle und help ops bzw. help/ für arithmetische Operationen +, −, ∗,
/,. . . einschließlich Querverweise. Die gleiche Information erhält man mit helpwin und in erwei-
terter Form mit doc dargestellt im Help Browser, vgl. helpwin ops, doc ops. Querverweise sind
bequem über Links zu erreichen. Darüber hinaus sind mit doc thema – z. B. doc function, doc
eig – gezielt die Referenzseiten der HTML-Dokumentation im Help Browser abrufbar. Da eig
eine (Built-In) Function ist, liefert help eig bzw. helpwin eig – im Gegensatz zum doc Auf-
ruf – den ersten Kommentar-Block in der Function. Enthält die Dokumentation, z. B. für eigene
M-Files, keine Referenzseite zum ausgewählten thema, dann wird auch mit doc der Kommentar-
block angezeigt. Dies ist auf die Kommentare eigener M-Files übertragbar, so dass sich eine eige-
ne Programm-Hilfe schaffen lässt. Weitere Hinweise finden wir mit: doc help, doc helpwin,
doc doc. Eine schnelle Hilfe bezüglich dem Namen nach bekannter Functions, z. B. eig, erhält
man nach Eingabe des Namens ins Command Window oder in den Editor mit der Funktionstaste
F1. Die Beispielprogramme u. a. der Browser oder eigener Anweisungen können nach Selektion
bei gedrückter linken Maustaste (Einfärbung) durch F9 ausgeführt werden. Wie schon erwähnt
liefert der Function Browser einen schnellen Befehls-Überblick direkt in der Arbeitsumge-
bung, d. h. im Command Window bzw. im Editor. Ist die gesuchte Function gefunden, dann kann
mit einem Doppelt-Klick oder mit der Enter-Taste die Function in die Arbeitsumgebung über-
nommen werden.
Schlüsselworte zum gleichen Themenkreis werden stets am Ende des Hilfe-Dokuments, z. B.
nach help help, ausgegeben. U. a. lookfor für die Begriffsuche in der ersten Kommentar-Zeile
bzw. Block aller M-Files im MATLAB-Path, vgl. help lookfor.
Darüber hinaus wird über das ?-Icon in der Menü-Leiste des Desktops bzw. durch Eingabe von
helpbrowser die erste / eine Seite des HTML-Documents im Help Browser geöffnet, womit
eine erweiterte Online-Hilfe zur Verfügung steht. Eine gezielte Suche u. a. über Search in der
Navigator Spalte des Browser’s erleichtert das Auffinden spezieller Informationen. Insbesondere
die in den Dokumenten integrierten Programm- und Grafik-Beispiele sind sehr hilfreich für den
eigenen Umgang mit MATLAB. Zu erwähnen sind auch die lehrreichen Demos sowie die bereits
erwähnten Video Tutorials sowie weiterführende Webinare und neuerdings die E-Learning Kurse
am Arbeitsplatz. Letztendlich stehen alle Handbücher im HTML- und PDF-Format (http://
www.mathworks.de/help/pdf_doc/ zur Verfügung.
1.3 Einige Bemerkungen zur Arbeitsweise von MATLAB 5
MATLAB ist eine Sprache der vierten Generation (4GL)4 im Gegensatz zu den (Hoch-) Sprachen
u. a. wie C, C++ , Fortran, Basic der dritten Generation (3GL). Sprachen der vierten Generation
sind weniger prozedural als 3GLs und bestehen aus Ausdrücken, die der menschlichen Sprache
entlehnt sind. 4GLs lassen sich daher einfacher benutzen als 3GLs. Die Ausführungszeiten sind
aufgrund der Interpretation oft langsamer als von 3GL, da diese zur Beschleunigung der Ausfüh-
rung in Assembler- oder Maschinencode übersetzt werden.
MATLAB ist eine 4GL, die spezifisch für Ingenieure und Wissenschaftler entwickelt wurde.
Diese intuitive Sprache, die interaktive Umgebung und die eingebauten mathematischen und gra-
fischen Funktionen machen MATLAB zu einer Plattform insbesondere für technische Berechnun-
gen. Ein wesentlicher Vorteil von MATLAB ist, dass die Variablen eines bestimmten Datentyps,
wie in 3GLs, nicht zu deklarieren sind. In MATLAB kann jeder Variablen ein Wert von beliebigem
Typ zugewiesen werden; er kann auch jederzeit wieder geändert werden.
Vor MATLAB 6.5 wurde die MATLAB-Sprache in zwei Schritten ausgeführt. Zuerst wurde
der Code in einen P-Code übersetzt. Diesen Befehlssatz führt danach der MATLAB-Interpreter
aus. Einige P-Code-Anweisungen sind hochsprachliche Anweisungen, so dass ihre Ausführung
viel Zeit in Anspruch nimmt. Hierzu gehören Programmteile, die mit Skalaren und mit for-
Schleifen arbeiten. Nur bezüglich vektorisierter Ausführungen wird der zugehörige P-Code sehr
schnell ausgeführt.
Ab MATLAB 6.5 existiert ein Just-In-Time- Accelerator, mit dem Programmteile, die insbe-
sondere Schleifen und skalare Mathematik enthalten, automatisch beschleunigt werden. Der JIT-
Accelerator konvertiert die bisher langsam ausgeführten Anweisungen vom P-Code in native
Maschinenbefehle, wodurch sie sehr schnell ausgeführt werden. Der JIT-Accelerator lässt auch
einen vorher nicht vektorisierten Code schneller ablaufen, womit die bisher angestrebte Vektori-
sierung scheinbar an Bedeutung verliert. Die Vektorisierung hat aber weiterhin den Vorteil einer
prägnanten Formulierung der Algorithmen und liefert einen übersichtlichen Programm-Code,
vgl. insbesondere Kapitel 3 und Abschn. 8.2.4.
Unter MATLAB 6.5 / 6.5.1 werden nicht alle Datentypen, Array-Formen, Ausdrücke usw. von
JIT-Accelerator unterstützt. Ab MATLAB 7 sind diese Einschränkungen aufgehoben, der Pro-
grammcode wird durchgehend beschleunigt.
1.4 Basis-Elemente
Zunächst werden wir uns mit wesentlichen Elementen des MATLAB-Sprachumfangs vertraut ma-
chen. Diese ausgewählten Elemente stellen wir stets am Anfang eines jeden Abschnittes tabella-
risch zusammen, es folgen diesbezüglich kurze Erläuterungen und einfache Beispiele. Die Bei-
spiele können interaktiv, d. h. über die Tastatur hinter dem Prompt (>>) im Command Window
eingegeben, mit Return ( ) abgeschlossen und sofort ausgeführt werden. Die unten aufgeliste-
ten Befehlsfolgen und Daten sind derartige Kopien aus dem Command Window; Kommentare
folgen nach dem %-Zeichen. Darüber hinaus existiert in [52] das M-File Basis_Elemente.m,
4 Kundenmagazin von The MathWorks: MATLAB Select 2/02, Hintergrundinformationen zur Technologie, Noch
schnelleres MATLAB
6 1 Einführung in MATLAB
mit dem sich aus dem Editor zellenweise – vgl. Abschn. 1.5.1 – die folgenden Beispiele am Rech-
ner abarbeiten lassen.
Hinweis: Ausführbare Anweisungen u. a. im Command Window, den Help-Fenstern, dem Editor
können nach Selektion (Einfärbung) mit der Taste F9 ausgeführt werden!
= Variablenzuweisung
+ − * / \ ˆ Rechenoperatoren
, ; Abschluss einer Befehlskette mit (,) und ohne (;) Ausgabe
... Zeilenumbruch innerhalb einer Anweisung
√
i, j Imaginäre Einheit −1, Function: i.m, j.m
pi Kreiszahl π = 3.14... pi.m
inf Unendlich ∞ (infinity), z. B. 1.0 e309 inf.m
NaN Not a Number, z. B. 0/0, inf-inf nan.m
eps(var) Maß für relative Genauigkeit (Floating-Point) eps.m
kleinster pos. Abstand: |var| + eps(var) > |var|
realmax, -min(class) größte/kleinste pos. Gleitkommazahl realmax.m
format ausgabeformat Formate: short, long, short e, long e,
rat, loose, compact
help befehl MATLAB Online-Hilfe; vgl. auch helpwin / doc
z. B. help ops, helpwin arith, doc slash
type function .m Kopfzeile oder komplette Function, Programm z. B. type i.m
D. h. ans ist stets die Variable der letzten Eingabe ohne direkte Zuweisung. Mit
>> a=(47+1e+02*1.5+4^2)/4 % Rechtsdivision
a =
5.325000000000000e+001
wird das Ergebnis der Variablen a zugewiesen. Mehrere Zuweisungen können in eine Zeile ge-
schrieben werden, wenn sie durch Komma (,) oder Semikolon (;) getrennt werden
>> a=4\(47+1e+02*1.5+4^2), A=(1.2+78.09)^2 % Linksdivision
a =
5.325000000000000e+001
A =
6.286904100000001e+003
Zusätzlich zu den Datentypen (classname) double, single können vorzeichenbehaftete int8, int16,
int32, int64 und vorzeichenlose (positive) uint8,...,uint64 Integergrößen, Festkommazahlen gebil-
det werden. Komplexe Größen benötigen doppelten Speicherplatz, Real- und Imaginärteil wer-
den getrennt verwaltet.
⇒ help datatypes, help class
Die Wertebereiche erhält man z. B. mit
>> realmax(’double’); realmax(’single’);
>> realmin(’double’); realmin(’single’);
>> intmax(’int32’); intmin(’int16’);
>> intmax(’uint32’); intmin(’uint16’);
1.4.1.2 Variablenverwaltung
Variablenverwaltung
Alle Variablen einer Sitzung werden im sog. Workspace gespeichert und sind jederzeit durch
Eingabe des Namens einer vorhandenen Variablen abrufbar, z. B. liefert in der bisherigen Sitzung
>> a
a =
5.3250e+001 % class double
Die Namen der Built-In Variablen pi, i, j, inf, eps,... sollten nicht als eigene Variablen eingeführt
werden. Ist dies nicht zu umgehen, so müssen diese vor Gebrauch mit dem Befehl clear variable
gelöscht werden, so dass die Built-In Variablen ihren Wert darstellt. Dies gilt z. B. für: 7*i; 7i ist
in jedem Fall die imaginäre Zahl. Ohne Variablen-Angabe wird mit clear der gesamte Workspace
gelöscht.
Mit who kann die Liste der aktuellen Variablen im Workspace angezeigt werden, mit whos
erhält man zusätzlich noch die Dimension (z. B. 1×1 für eine Variable, 5×1 für einen Spalten-
vektor mit 5 Elementen) und das Datenformat sowie den Speicherbedarf. Beispiel:
>> clear, a=5; b=-single(74); s=’Beispiel: who, whos, save, load’; a+b;
>> who
Your variables are:
a ans b s
>> % Verzeichnis C:\BMATL muss existieren
>> save C:\BMATL\Ueb_1 % Speichert Workspace-Daten in ueb_1.mat
>> clear % löscht den Workspace
>> load C:\BMATL\Ueb_1 a ans s % lädt ausgew. Daten, ohne Auswahl alle
>> whos
Name Size Bytes Class Attributes
a 1x1 8 double
ans 1x1 4 single
s 1x31 62 char
Ähnlich ist diese Information im Workspace Browser dargestellt. Daten können hinzugefügt
und im Variable Editor manipuliert werden. Speichern bzw. Laden der Daten ist auch über den
1.4 Basis-Elemente 9
π
y2 = 22 + ln (π) sin (0.75 ) + e2/3π
2
>> y2 = 2^2+log(pi)*sin(0.75*pi/2)+sqrt(exp(2*pi/3))
y2 =
7.9072e+000
π
y3 = sin2 ( ) + log (cos (0.73 ))
4
>> y3=(sin(pi/4))^2+ log10(cos(0.7^3))
y3 =
4.7394e-001
π
y4 = ei 4
>> y4=exp(i*pi/4)
y4 =
7.0711e-001 +7.0711e-001i
π π
y5 = y3 − cos ( ) − i sin ( )
4 4
>> y5=y4-cos(pi/4)-i*sin(pi/4)
y5 =
0
3 3 3π
y6 = ln e sign sin + | i sin(0.7) |
2
>> y_6=log(exp(3))*sign((sin(3*pi/2))^3)+abs(i*sin(0.7))
y_6 =
-2.3558 % Achtung: sign(0)=0, mathematisch nicht definiert
Beispiele zur Arcus-Tangens-Funktion, u. a. y7 = arctan(0.7)
>> y7=atan(0.7) % Hauptwert von atan(x)
y5 =
6.1073e-001 % Radian
Die Elemente von Vektoren (vek) und Matrizen (mat) werden in eckige Klammern gesetzt. Die
Zeilen werden durch Semikolon (;) oder / und Zeilenumbruch (Return) abgeschlossen. Die Ele-
mente können durch Leerzeichen oder Komma (,) von einander getrennt werden. Für spezielle
Matrizen, z. B. der Einheitsmatrix, existieren Built-In Functions.
⇒ help matfun
Der Spaltenvektor lässt sich auch durch Transponieren des reellen Zeilenvektors erzeugen
>> vs=[1,2,3]’ % transponieren eines Zeilenvektors
12 1 Einführung in MATLAB
vs =
1
2
3
>> vs = vz’; % transponieren von vz und Zuweisung
Bei komplexen Vektoren liefert (..)’ den zugehörigen konjugiert komplexen Vektor. Der Vek-
tor des transponierten komplexen Vektors gewinnt man mit:
>> vsi = vzi.’ % transponieren eines komplexen Vekt.
vsi =
1.0000e+000 +5.0000e+000i
2.0000e+000 +1.0000e+000i
3.0000e+000 -7.0000e+000i
Spezielle Matrizen werden über Built-In Functions erzeugt: eye, ones, zeros, diag, spdiags...
>> E=eye(3) % 3,3 Einheitsmatrix, Datentyp: double
E = % auch E=eye(3,3)
1 0 0
0 1 0
0 0 1
1.4 Basis-Elemente 13
Alternativ kann von einer 4,4-Sparse-Matrix nach S. 15 ausgegangen werden, wobei die Vektoren
von Haupt- und Nebendiagonale gleich lang sein müssen – hier mit full voll besetzte Matrix
gebildet –
>> Dds=full(spdiags([[d2’;0;0], d’, [0;d1’]],[-2, 0, 1],4,4));
ans =
-3
4
0
-1
>> Dd(4,2:3) % 4. Zeile, Spalten-Element 2 bis 3
ans = % auslesen
-1 0
Matrixelemente können mit ihren Indizes (zeile, spalte) oder mit nur einem Index ange-
sprochen werden. Dieser ergibt sich aus einer vektoriellen Darstellung der Matrix, die aus einer
Hintereinanderschaltung aller Spaltenvektoren folgt (Speichermodell). Z. B. gilt für die obige Dd-
Matrix
Dd(3,4) ≡ Dd(15) Umwandlung mit: ind2sub (i,j)→k, sub2ind (k)→(i,j)
und für drei ausgewählte Elemente von Dd
Dd([1 6 10]) ≡ Dd(1,1), Dd(2,2), Dd(2,3)
end-Operator: Das letzte Element einer Matrix bzw. eines Vektors kann mit dem end-Operator
angesprochen werden:
Dd(end,end) oder Dd(end) aber auch Dd(end-2).
Für das letzte Element einer Zeile sowie aller Zeilen oder Spalten folgt entsprechend
Dd(3,end) sowie Dd(:,end) oder Dd(end,:)
Beispiele für Elementzuweisung:
>> vzi(3)=26 * 98 % 3. Element wird geändert
vzi =
1.0000e+000 +5.0000e+000i 2.0000e+000 +1.0000e+000i 2.5480e+003
Aufgabe: Erweitere Dd, so dass der Vektor u=[ 5 6 7 8 ] in die letzte Zeile bzw. letzte
Spalte geschrieben wird, lösche anschließend die 1-te und 3-te Zeile bzw. Spalte.
>> u=[5 6 7 8]; % Vektor u
>> D=[Dd;u]; E=[Dd u’]; D([1 3],:)=[]; E(:,[1 3])=[]; % Lösung
0 0 4 0
Spezielle mathematische Funktionen (siehe help sparfun) existieren, einige bearbeiten vollbe-
setzte und Sparse-Matrizen, vgl eigs. Mit spy(S) wird die Struktur von S grafisch dargestellt.
Anwendung in QuerSchw_1,2.m und DrehSchw.m aus [52].
Erläuterungen zur Tabelle Vektor- und Matrix-Formulierung: Ab (R14) können die Eingangs-
variablen der Built-In-Functions, z. B. inv, det, linsolve, eig vom Typ single oder double sein.
Das Ergebnis ist dann vom entsprechenden Typ, vgl. Beispiel zu linsolve Seite 22. Namen von
Built-In Functions können aber sollten nicht als Variablen- oder Functionnamen benutzt werden.
Für das Eingangsargument vek / mat kann sowohl ein Vektor als auch eine Matrix stehen. Ist
in sum ... find das Argument eine Matrix, dann bezieht sich das Ergebnis in der Regel auf die zu-
gehörigen Spaltenvektoren, so dass ein Zeilenvektor ausgegeben wird. Darüber hinaus wird ein
Index-Vektor der Matrix-Indizes zu den Maximal/Minimal-Elementen ausgegeben, siehe Bei-
spiele. Weitere Eingangsargumente sowie Ausgaben sind möglich; siehe Online-Hilfe.
1.4 Basis-Elemente 17
.* .\ ./ .ˆ Elementweise Rechenoperationen
\ / Links- und Rechts-Division
transpose ( vek / mat ) oder vek / mat .’ Transposition: Vektor, Matrix
ctranspose ( vek / mat ) oder vek / mat ’ Transposition, konjugiert-komplex
dot ( vek, vek ), cross ( vek, vek ) Skalar-, Kreuz-Produkt
inv ( mat ) Inverse einer quadratischen Matrix
det ( mat ) Determinante einer quadratischen Matrix
linsolve ( mat, vek / mat , option ) lineares Gleichungs-Syst. LU-Zerlegung (ab R14)
[V, D]= eig ( mat ), eigs ( mat ) Eigenwerte, Eigenvektoren einer quadrat. Matrix
condeig ( mat ), [V,D,s]=condeig (...) Konditionszahl bez. der Eigenwerte von mat
rank ( mat , toleranz ) Rang einer Matrix, siehe auch rref
[m, n]= size( vek / mat , i ) Matrix-, Vektordimension, i=1 Zeilen, i=2 Spalten
length ( vek / mat ) Größter Wert aus Spalten-, Zeilenindex
identisch mit max(size( vek / mat ))
sum ( vek / mat ) Summe der Vektorelemente bzw. Spaltenvektorel.
prod ( vek / mat ) Produkt der Vektorelemente bzw. Spaltenvektorel.
[vmin,index]=min ( vek / mat ) Kleinstes Vektorelement bzw. Spaltenvektorelement
[vmax,index]=max ( vek / mat ) Größtes Vektorelement bzw. Spaltenvektorelement
max ( mat(:) ) Größtes Matrixelement
sort ( vek / mat ) Elemente in aufsteigender Folge
find ( vek / mat ,’last’ | ’first’ ) Von Null verschiedene Elemente, oder find(A==2)
Die Summe aller Matrix-Elemente ergibt sich durch doppelte Summenbildung oder mit dem Speichermo-
dell von S. 15 zu:
sum(sum(A)) oder sum(A(:)).
AX = B bzw. Ax = b
Methoden, siehe help matfun / lineare equations, basieren u. a. auf den Functions rref, chol, lu,
die iterativen können unterteilt werden in:
Alle Methoden lassen sich auch direkt aufrufen. Darüber hinaus existiert die Function linsolve.
Bei ihrem Aufruf können spezielle Eigenschaften, wie Symmetrie, positive Definitheit usw. op-
tional übergeben werden. Die angewendeten Methoden sind die direkte LU Faktorisierung bei
quadratischer Koeffizientenmatrix, anderenfalls die QR Faktorisierung. Der Aufruf der iterativen
Verfahren erfordert einige Erfahrung, da sehr spezifische Angaben zu machen sind.
Die Lösbarkeit des Gleichungssystems A x = b mit beliebiger rechteckiger (m × n)-Koeffi-
zientenmatrix A basiert auf der Definition für den Rang einer Matrix. Ein System kann eindeutig
lösbar, lösbar oder nicht lösbar sein. Das System ist lösbar, wenn der Rang r(A A) gleich dem
der um b erweiterten Matrix r(A A, b ) ist. Eindeutig lösbar, wenn r(A
A) = r(A
A, b ) = n ist. Nicht
eindeutig lösbar, wenn r(AA) < n, dann sind n − r(A A) Unbekannte frei wählbar. Einen detaillier-
ten Überblick mit vielen Anwendungen ist unter: http://www.dankertdankert.de/ zu
finden, weitere Hinweise zu den Verfahren in [57].
Anhand von Beispielen sollen einige Lösungsmethoden kurz aufgezeigt werden, siehe auch
[52] unter Lin_Gleichung.m.
Quadratische Koeffizientenmatrix
Die Matrix A kann regulär bzw. singulär (r(A
A) < n) sein.
Beispiel mit regulärer Matrix A , eindeutige Lösung:
A=[10,2,3;4,5,6;7,8,9]; b=[15; 15; 24]; % Koeffizientenm., rechte Seite
det_A = det(A); % Determinante: det_A = -27.0
r_A = rank(A); % Rang: r_A = 3
r_Ab = rank([A,b]); % Rang: r_Ab=3
x = A\b; % Lösung: x = [1, 1, 1]
Das um eine Spalte reduzierte, überbestimmte Gleichungsystem kann unmittelbar gelöst werden:
Überbestimmtes Gleichungssystem
xr=Ar\(b_neu-bx*x3); % Lösung: xr=[x1; x2]=[-14; 13]
x=[xr;x3]; % kompletter Lösungsvektor
Weil x3 beliebig, existieren unendlich viele Lösungen. Die Lösung x wird durch die Lösung
eines Ausgleichsproblems bestimmt.
Da die Lösung alle drei Gleichungen erfüllt, kann man für die Berechnung eine Zeile, z. B. die
zweite, streichen, so dass wieder ein reguläres System entsteht:
Arr=Ar([1 3],:); % Arr=[1 2; 7 8]; regulär
det_Arr = det(Arr); % det_Arr = -6
brr = b_neu([1,3]); bxx = bx([1,3]); % reduzierte rechte Seite
xrr = Arr\(brr-bxx*x3); % xrr = [-14; 13], wie xr
Unterbestimmtes Gleichungssystem
Beispiel mit rechteckiger Matrix A , lösbar, Ausgleichslösung:
Wir konstruieren uns ein System, indem wir zwei Spalten hinzufügen:
Au=[A,2*A(:,2)+A(:,3),A(:,1)-A(:,3)]; % (3,5)-Koeffizientenmatrix
rank(Au); % Rang: 3
bu=sum(Au,2); % rechte Seite, Zeilensumme Au
rank([Au,bu]); % Rang: 3
xu=Au\bu; % xu=[1.5; 0; 0; 1.5; 0.5]
In der Argumentenliste folgen auf die Systemgrößen, optionale Angaben: geforderte Genau-
igkeit, maximale Anzahl der Iterationsschritte, zwei Matrizen M 1 , M 2 zur Präkonditionierung
(hier Platzhalter) und Startwerte. Die iterativen Methoden sind insbesondere für große und dünn
besetzte (Sparse-) Matrizen geeignet.
Sind A , b oder A bzw. b vom Typ single, dann ist das Ergebnis auch vom Typ single, in
der Regel vom Typ double. Zusätzliche Beispiele sind in Lin_Gleichung.m zu finden.
• Hinweis zur Rangfolgeregel (Potenzieren vor Multiplikation oder Division, dann Addition
oder Subtraktion): Gegeben sei die algebraische Gleichung
2 4 3.5
K x = 0.5 b , K= , b=
7 5 7.75
mit der quadratischen Matrix K und dem Vektor b passender Dimension; gesucht sei x . Ergebnis:
mit Rangfolgeregel-Fehler richtig
>> x=0.5*K\b >> x=0.5*(K\b) oder: >> x=K\b*0.5
x = x =
1.5000e+000 3.7500e-001
1.0000e+000 2.5000e-001
Syntax:
struktur=struct(’name1’,wert1,’name2’,wert2, . . . ) % Structure-Erzeugung
struktur.name1 % Feld-Element-Zugriff
oder Erzeugung über direkte Zuweisung
struktur.name1 = wert1;
struktur.name2 = wert2;
Beispiel, Structure erstellen, erweitern und Ausgabe:
Die Symbole &, | und ∼ sind die logischen Operatoren AND, OR und NOT. Sie können auf
Zahlen, arithmetische Ausdrücke sowie Matrizen angewandt werden. Matrizen werden element-
weise verknüpft. Logisch falsch wird durch 0, logisch wahr durch einen Wert ungleich Null
gekennzeichnet.
Syntax: a & b oder and(a,b)
a|b oder or(a,b)
∼a oder not(a)
Der NOT-Operator negiert den Wahrheitswert des Ausdrucks. xor(a,b) ist der Exclusiv-OR-Ope-
rator. Die einzelnen Verknüpfungen sind in folgender Tabelle zusammengefasst.
Die NOT-Verknüpfung hat die höchste Priorität. Der AND-Operator hat gegenüber dem OR-
Operator in MATLAB die höhere Priorität. Im Zweifelsfall sollten Klammern gesetzt werden:
identisch
a | b & c −→ a | (b & c)
Die Vergleichsoperatoren arbeiten bei Matrizen ebenfalls elementweise. Logisch wahr ist 1, lo-
gisch falsch 0. Die Operatoren <, <=, >, >= beziehen sich bei komplexen Variablen nur auf
den Realteil, die Operatoren == und ∼= auf Real- und Imaginärteil.
Beispiele einfacher Verknüpfungen:
>> a = 5; b=-a; % Zuweisung, a ist wahr
>> ~a % Negation von a
ans =
0
>> (7 > 11-5 & 7 <= 5*2 ) | ~a % besser &&-Verknüpfung
ans =
1
Nachweis des kleinsten Abstandes eps(b) zur nächst größeren Zahl von b, vgl. S. 6 und
S. 28:
1.4 Basis-Elemente 27
Beispiel für: for, if, else, elseif – vgl. For_schleife.m in Programmsammlung [52] –
>> for t = 1.0: -0.1: 0.0, Befehle , end % 1. For-Schleife
k=5;
% 2. For-Schleife,
for m = 1:k
% If-Anweisung
for n = 1:k
if m == n
Ergebnis:
A(m,n) = 2;
A =
elseif abs(m-n) == 2
2 0 1 0 0
A(m,n) = 1;
0 2 0 1 0
else
1 0 2 0 1
A(m,n) = 0;
0 1 0 2 0
end
0 0 1 0 2
end
end
28 1 Einführung in MATLAB
For-Schleifen: Werden Vektoren, Matrizen, wie in der obigen for-Schleife, elementweise besetzt,
dann sollte man zur Rechenzeitersparnis und zur zusammenhängenden Speicherplatzadressie-
rung die Felder präallozieren. Dies kann durch Vorabbelegen mit:
A = zeros(nmax,mmax); oder durch A(nmax,mmax)=0
geschehen. Sind nmax, mmax unbekannt, dann geht man von einem Schätzwert aus und passt
nach den Zuweisungen die aktuelle Dimension an; vgl. folgende Beispiele mit Rechenzeitanga-
ben – siehe auch praeall.m in [52] –, in denen einer Matrix elementweise ein Wert zugewie-
sen wird. Die Rechenzeit wird mit den tic, toc Befehlen, vgl. Tabelle auf S. 32, ermittelt.
nmax=600; mmax=600; wert=12.345; % Programm: praeall.m
% ohne Felddimensionierung
tic
for i=1:nmax, for j=1:mmax, A(i,j)=wert; end, end
toc, clear A
% mit Felddimensionierung
A=zeros(nmax,mmax); % oder A(nmax,mmax)=0;
tic
for i=1:nmax, for j=1:mmax, A(i,j)=wert; end, end
toc, clear A
% Felddimensionierung geschätzt
nmax=700; mmax=600; A=zeros(nmax,mmax); t=cputime;
for i=1:nmax, for j=1:mmax, A(i,j)=wert; end
if (cputime-t) > 0.1 , break, end
end
A=A(1:i,1:j); % tatsächliche Feldgröße
Vielfach wirkt sich auch eine Speicher-Defragmentierung durch pack positiv auf die Rechenzeit
aus.
Zwei Beispiele zur While-Schleife
Beispiel 1: Gesucht ist der kleinste positive Abstand eps_a von |var|, so dass numerisch
!
|var| + eps_a(var) > |var| , vgl. eps S. 6, Maß für relativen Fehler von var.
1.4 Basis-Elemente 29
f (xi ) ∂f
xi+1 = xi − , i = 0, 1, . . . ; f
= , i-ter Iterationsschritt
f
(xi ) ∂x
MATLAB Code:
x = 3.0; % Startwert
ab=1; tol=1.0e-7; % 1. Abbruch-Wert und Abbruch-Toleranz
Imax=100; I=1; % max. Iterationen, 1. Iter.-Schritt
while abs(ab) > tol && I < Imax
x0=x; % Datensicherung
x =x0-(0.5-x+0.2*sin(x))/(-1+0.2*cos(x))
ab=x-x0; I=I+1; % Lösungsänderung, Iter.-Schritte
end
Ergebnis: x = 6.1547e-001
Beispiele zum Switch-Befehl
Zu den über die Tastatur eingegebenen Werten: a=1, 2, 3 bzw. a=eins, a=zwei, a=drei, sind die
Zuweisungen x=1 für a=1, x=2 für a=2 usw. gesucht. Die zugehörigen Anweisungen könnten
wie folgt aufgebaut sein.
Das aktuelle Verzeichnis hat nun, bei Suchstrategien z. B. mit dem which Befehl, erste Priori-
tät, es folgen die des MATLAB-Path, in dem sich ursprünglich MATLAB’eigene Files befinden,
32 1 Einführung in MATLAB
Der erweiterte MATLAB-Suchpfad wird vom ersten bis zum letzten Listeneintrag nach Functions
oder Files, z. B. mit while filename und nach Ausdrücken u. a. in der Kopfzeile (H1 Line) der
M-Files mit lookfor ausdruck, durchsucht. Dies erklärt auch die Option -begin | -end.
Ein typisches Programmsegment mit einer Aufforderung zur Tastatureingabe und einer an-
schließenden Überprüfung dieser Eingabe, siehe auch newton_sys.m in [52], folgt in:
– vgl. auch save, load. Den Inhalt des Files Text_File.text zeigen wir mit dem Editor –
z. B. >> edit Text-File.text – an:
0.000000 0.000000e+000
1.570796 1.000000e+000
3.141593 1.224647e-016
4.712389 -1.000000e+000
6.283185 -2.449294e-016
Script-Files enthalten keinen Deklarationsteil und keine Abgrenzung durch begin / end.
Kommentare sind zeilenweise durch vorangestelltes % zu kennzeichnen. Ab MATLAB 7 wird
eine Block-Kommentierung – eingeschlossen durch %{.. Block ..%} –, ähnlich der C-Verein-
barung, möglich; %{ und %} stehen alleine in separaten Zeilen. Ein Zeilenumbruch innerhalb
eines Ausdrucks wird durch die Punktfolge ... erreicht, z. B.: 5+6-... und 5+6 ... –
Leerzeichen beachten. Scripts können von anderen Scripts aufgerufen werden.
Messbar ist die Rechenzeit einer Befehlsfolge u. a. innerhalb der Zeitmarken tic....toc. Die
Function tic speichert den Startzeitpunkt, toc ermittelt die Rechenzeit. Mit return kann eine Pro-
grammausführung vorzeitig beendet werden.
Die Ausführung (Start) eines zuvor gespeicherten M-Files aus dem Command Fenster erfolgt
durch Eingabe des File-Namens ohne Endung (.m) oder mit dem Run- Button in der Editor-
Menü-Leiste nach Bild 1.3.
Ab MATLAB 7 (R14) stehen zusätzliche nennenswerte Tools zur Programmentwicklung zur
Verfügung. Ausführliche Information findet man im Help Browser unter MATLAB/Release
Notes/New Features und in den Video-Demos, z. B. The Editor. Zum einen lässt sich
Bild 1.4: Editor mit eingeblendeter Cell-Toolbar und Programmstruktur unter MATLAB 7.12
der Programm-Code in Programmsegmente so genannte Zellen (Cells) unterteilen, vgl. [26]. Jede
Zelle beginnt, wie in Bild 1.4, mit einem doppelten Prozentzeichen %% (Cell divider) und einem
Zell-Titel. Die Zelle selbst enthält mehrere Anweisungen. Zur Ausführung des Programms muss
die zugehörige Menüleiste über den Editor-Button Cell, Menüpunkt Enable Cell Mode ein-
geblendet werden. Steht danach der Cursor in der Titelzeile, z. B. Start wie in Bild 1.4, so ist
der Programmabschnitt bis zum nächsten Zellteiler %% farbig (gelb) unterlegt. Durch Betätigung
des Button Evaluate cell and advance wird dieser Programmabschnitt ausgeführt und
die nachfolgende Zelle angesprungen. Mit dem Button Evaluate cell wird nur die angewählte
Zelle ausgeführt. Die abschnittsweise berechneten Daten und Grafiken können, z. B. im Com-
mand Fenster oder im Variable Editor, auf ihre Richtigkeit überprüft und Fehler korrigiert
werden, vgl. Hinweis Seite 6. Ein kompletter Programmdurchlauf erfolgt mit dem Run-Button
der Editor-Menü-Leiste. Beispielprogramm: Cell_structure.m in [52].
Mit File/Publish filename wird der Code eines Scripts einschließlich der Ergebnisse und
Grafiken in ein HTML-Dokument konvertiert und im Web Browser angezeigt. Über View/Page
1.5 Programmerstellung, MATLAB Script und Function 35
Source wird der HMTL Source Code eingeblendet. Besitzt das Script Cell-Struktur, wie z. B.
Cell_structure.m in [52], dann wird zusätzlich ein Inhaltsverzeichnis mit den Links der
Cell-Titles angelegt. Die Zellen enthalten nun den Cell-Title, den Programmcode und die Ergeb-
nisse.
Zum anderen existiert ein Code Analyzer, der unter dem Tools-Button mit dem Menü-Punkt
Show Code Analyzer Report gestartet wird. Es wird ein Report erstellt, in dem Hinweise
auf mögliche Fehler aufgelistet sind. Ab (R2006a) wird damit die Programmerstellung fortlau-
fend kontrolliert und mit Farbkennung auf mögliche Fehler hingewiesen, siehe Bild 1.3.
Darüber hinaus ist ebenfalls unter Tools ein Profiler zu öffnen (Open Profiler). Er
unterstützt die Verbesserung der Code-Performance, vgl. Abschn. 1.5.5.
Mit der Desktop-Architektur ab (R14) ist auch ein An- und Ausdocken u. a. des Editor-Fensters
in den Desktopbereich mit dem Button: im Editor-Kopf nach Bild 1.3 möglich. Dadurch sind
die wesentlichen Arbeits-Fenster in einer Ebene verfügbar.
Beispiel zur Programmerstellung: Es soll ein M-File zur Darstellung eines Kreises vom
Radius r geschrieben werden. Zu definierten Winkeln aus dem Intervall 0 ≤ Θ ≤ 2π sind da-
für die kartesischen Koordinaten x, y zugehöriger Kreispunkte zu berechnen, womit der Kreis
grafisch darzustellen ist; Plot-Befehle siehe Abschn. 1.6.2.
r=1; % Kreisradius
theta=linspace(0,2*pi,100); % Winkelfolge
x=r*cos(theta); % x-Koordinate
y=r*sin(theta); % y-Koordinate
plot(x,y) % Kreisdarstellung
axis(’equal’) % Achs-Skalierung, auch: axis equal
title([’Kreis vom Radius r=’,num2str(r)])
Das Programm speichern wir mit dem Namen kreis.m in das aktuelle Verzeichnis, vgl.
[52]. Der Start erfolgt z. B. mit der Eingabe von kreis in das Command Window. Nach der
Ausführung stehen alle Variablen r, theta, x, y im Workspace.
Sind Kreise unterschiedlicher Radien zu zeichnen, so ist r in der ersten Programmzeile stets
neu zuzuweisen bzw. einzulesen: r=input(’r = ?’);. In jedem Fall ist es sinnvoller für die
obige Befehlsfolge eine Function mit der Eingangsvariablen r zu schreiben. Dies zeigen wir im
folgenden Abschnitt.
vorkommenden Variablen lokale Variable und stehen somit nicht im Workspace. Der Function-
Kopf hat die Struktur
function[ausgangsvariablen] = function_name(eingangsvariablen)
function_name und File-Name sollten identisch sein. Ein zusätzlicher Variablenaustausch
kann mit der global-Vereinbarung
global variable_1 variable_2, Anzeige: who/whos Attributes global
erfolgen. Diese Vereinbarung muss gleichzeitig in dem M-File (Skript, Hauptprogramm), in der
die Function aufgerufen wird, stehen; d. h. die aufgeführten Variablen müssen vor dem Function-
Aufruf als globale Größen im Workspace stehen, vgl. wurf.m, S. 283.
Darüber hinaus können in einer Function persistente Variable mit
persistent variable_1 variable_2
vereinbart werden. Im Gegensatz zu den global vereinbarten Größen, sind die persistenten Größen
nur in der Function, in der sie deklariert werden, bekannt; es kann also keine andere Functions
darauf zugreifen. Persistente Variable werden nur gelöscht, wenn die Function aus dem Speicher
entfernt wird (clear function_name) oder die Function geändert und danach abgespeichert wird.
Programmbeispiel: fcnPersist.m und Basis_Elemente.m in [52].
Anhand zweier Beispiele wollen wir die Handhabung mit Functions erläutern.
Beispiel 1: Zunächst sollen, entsprechend dem besprochenen Script zur Kreiserzeugung, jetzt
Kreise unterschiedlicher Radien r gezeichnet werden; es bietet sich eine Function-Formulierung
an. Der Eingangsparameter ist r, als Ausgänge wählen wir die kartesischen Koordinaten x, y;
Plot-Befehle siehe Abschn. 1.6.2. Die Function mit dem Namen fkreis kann wie folgt aufge-
baut sein:
function [x,y]= fkreis(r) % Function-Kopf
theta=linspace(0,2*pi,100); % Winkelfolge
................ wie oben, d.h. wie in kreis.m
title([’Kreis vom Radius r=’,num2str(r)])
Der Aufruf aus dem Command Window oder einem M-File kann ohne oder mit Ausgabe der
kartesischen Koordinaten erfolgen:
>> fkreis(2); % zeichnet Kreis mit r=2, keine Ausgänge
>> [x,y]=fkreis(4); % mit Übergabe von x, y; Workspace-Daten
>> [~,y]=fkreis(4); % mit Übergabe von y; Workspace-Daten
Die Befehle nargin, nargout (number of function input, output arguments), können zur Kon-
trolle der Ein- und Ausgangsargumente oder zur Steuerung des Programmablaufes eingesetzt
werden. Wir zeigen dies unten mit der modifizierten Function fkreis; vgl. fkreis_Rr.m in
[52]. Es lassen sich sowohl einfache Kreise mit den Radien R als auch zusätzliche Innenkreise
mit den Radien r < R zeichnen. Dazu muss die Anzahl der Ein- und Ausgangsargumente variiert
1.5 Programmerstellung, MATLAB Script und Function 37
werden. Mit R als Eingang wird ein einzelner Kreis, mit R, r ein zusätzlicher Innenkreis bearbei-
tet. Die Rückgabe-Matrizen V R , V r enthalten spaltenweise die kartesischen Koordinaten x, y, es
können wahlweise beide oder nur V R ausgegeben werden.
function [VR,Vr]= fkreis_Rr(R,r) % Außen- (R), Innenkreise (r)
theta=linspace(0,2*pi,100)’; % Winkelfolge
VR=R*[cos(theta) sin(theta)]; % x-, y-Koordinaten für R
plot(VR(:,1),VR(:,2)), axis(’equal’)% Plot des Kreises
if nargin == 1 && nargout == 2 % einzelner Kreis, Radius R
Vr=[]; % Leer-Matrix
return % Rücksprung u.a. ins M-File
elseif nargout <= 2 && nargin == 2 % Außen- u. Innenkreis
Vr=r*[cos(theta) sin(theta)] % x-, y-Koordinaten für r
hold on, plot(Vr(:,1),Vr(:,2)), hold off % Innenkreis zeichnen
end
ẏ = f (t, y)
mit Hilfe der E ULER-Approximation mit fester Schrittweite h nach Bild 1.5 näherungsweise be-
rechnet werden. Dabei ist es zweckmäßig, wie in Bild 5.8, neben dem Hauptprogramm bzw.
exakte Lösung
y 6 e
ẏk−1 Differenzialgl.: ẏ = f (t, y) , Lösung y(t)
d Approximation: yk = yk−1 + h f (tk−1 , yk−1 )
yk
yk−1 Definition: tk := kh, yk := y(tk ), k = 0,1,2, ..
- Beispiel: ẏ = 1/y, (·) = d /dt
h - √
t exakte Lösung: y = 2t + 1
tk−1 tk
hinaus muss das Integrationsintervall z. B. aus Anfangs- und Endzeitpunkt (ta , te ), der Anfangs-
wert (y0 = y(ta )) sowie die Schrittweite h als Eingangsgrößen definiert werden. Selbstverständ-
lich brauchen die Bezeichnungen des aktuellen Aufrufs von eulerApprox.m in dgl.m nicht
mit denen der Integrationsroutine eulerApprox übereinstimmen. Um die allgemeine Gültig-
keit dieser Function deutlich zu machen, führen wir andere Bezeichnungen ein:
function [x,y]=eulerApprox(func,startx,endx,starty,h)
x=startx:h:endx; y=0*x; y(1)=starty(1);
for i=2:length(y)
% y(i)=y(i-1) + h * feval(func,x(i-1),y(i-1)); % MATLAB ...6.51
y(i)=y(i-1) + h * func(x(i-1),y(i-1)); % MATLAB 7
end
Da eine Eingangsgröße wieder eine Function (func) ist, spricht man von Function Func-
tions, deren Aufruf in der Function Regeln unterliegt, vgl. newton_Sys.m in [52]. Bis zur
Version 6.5.1 erfolgte der Aufruf mit der feval Formulierung, dies wurde mit MATLAB 7 geändert.
Beide Formen sind in der obigen Function eulerApprox gegenübergestellt.
Die von eulerApprox aufgerufene Function fdgl der Dgl. ẏ = 1/y, in der die Ableitungs-
funktion (ẏ) näherungsweise berechnet wird, hat die einfache Form:
function [yp] = fdgl(t,y) % da eine Ausgangsv. auch: function yp=..
yp = 1/y; % Differenzialgleichung
Der Datenaustausch mit dem Script und den Functions ist in Bild 5.8 veranschaulicht. In
Bild 1.6 sind die Simulationsergebnisse dargestellt.
7 0.35
6 0.3
0.25
abs(y−yexakt)
5
y, yexakt
0.2
4
0.15
3
0.1
2 0.05
1 0
0 5 10 15 20 0 5 10 15 20
t t
Parent Function mit einem end. Dies unterscheidet diesen Function-Typ von den traditionell ver-
wendeten Standard-Functions. Wir erläutern dies am Beispiel der N EWTON-Iteration von S. 29.
Die Parent Function sei newton_par.m – siehe [52] –, die Nested Function newton_it, sie
enthält die N EWTON-Methode.
function y = newton_par(startwert,tol) % Parent Function
% Ermittelt iterativ die Loesung ausgehend von y=startwert
ab=1; % 1. Abbruch-Vergleichswert
Imax=100; I=1; % max. Iter., 1. Iter.-Schritt
y=newton_it; % Aufruf ohne Parameter-Uebergabe
%
function y=newton_it % Nested Funct. fuer NEWTON-Iter.
y=startwert; % Startwert-Umbenennung
while abs(ab) > tol && I < Imax
y0=y; % Datensicherung
y=y0-(0.5-y+0.2*sin(y))/(-1+0.2*cos(y));
ab=y-y0; % Loesungsaenderung
I=I+1; % Iterations-Schritt
end % end While-Schleife
end % end Nested Function
end % end der Parent Function
Die Nested Function newton_it kann auf die Variablen des Parent-Function’s Workspace
(hier von: startwert, ab, tol, Imax, I) zugreifen und sie verändern. Dies macht den Da-
tentransfer zwischen mehrfach geschachtelten Functions (multiple nested functions) einfach. Wir
können die Function in gewohnter Weise aufrufen, z. B. für startwert=3 und tol=1e-6:
>> y=newton_par(3,1.0e-06)
y =
6.1547e-001
Die Fähigkeit von Nested Functions auf den Parent’s Workspace zuzugreifen ermöglicht eine
übersichtliche Kontrolle der eingehenden Variablen, vgl. u. a. fmetro.m, GTräger.m in [52].
Insbesondere, wenn sie in mehrfach geschachtelte Functions eingehen. Der unangenehme Effekt
einer unkontrollierten Überschreibung von mit global vereinbarten Variablen entfällt. Darüber
hinaus wird der Speicherbedarf bei gemeinsamer Nutzung großer Datensätze reduziert.
40 1 Einführung in MATLAB
Das obige Beispiel ließe sich auch mit einer traditionellen Function erzielen und bietet so-
mit keinen wesentlichen Vorteil. Dies sieht anders aus, wenn wir die Struktur – siehe auch
newton_parent.m in [52] – geringfügig ändern, vgl. Zeile 1, 5, 6, 11:
function y = newton_parent(tol) % Parent Function
% Ermittelt iterativ die Loesung ausgehend von y=startwert
ab=1; % 1. Abbruch-Vergleichswert
Imax=100; I=1; % max. Iter., 1. Iter.-Schritt
y=@newton_it; % Funct.-Handle y bez. newton_it
function y=newton_it(startwert) % Nested Funct. fuer NEWTON-Iter.
y=startwert; % Startwert-Umbenennung
while abs(ab) > tol && I < Imax
................ wie oben
end % end While-Schleife
ab=1; I=1 % müssen zurückgesetzt werden
end % end Nested Function
end % end der Parent Function
Wird newton_parent aufgerufen, dann wird das Function Handle y bezüglich der Nes-
ted Function newton_it zurückgegeben, welcher individuell gemäß der Parameterübergabe
– hier: tol=1e-7 bzw. tol=1e-2 – der übergeordneten Function (Parent Function)
newton_parent angelegt ist, z. B.
>> y1 = newton_parent(1.0e-07); % Handle y1 für tol=1e-7
>> y2 = newton_parent(1.0e-02) % Handle y2 für tol=1e-2
y2 =
@newton_parent/newton_it
Wir können jetzt, wie bisher, diese individuellen Functions z. B. für die Startwerte 3 und 6
auswerten.
>> y1(3) % Rechnung mit tol=1.0e-07
ans =
6.154681694899654e-001
>> y2(6) % Rechnung mit tol=1.0e-02
ans =
6.154681876614523e-001
In diesem Fall werden einige Variablen der Parent Function nur einmal zugewiesen bzw. be-
rechnet, was u. a. bei komplexeren Ausdrücken Vorteile bietet. Dies entspricht der Vereinbarung
als persistente Variablen.
Bemerkung: Da die beiden Variablen ab, I in der Nested Function verändert werden, müssen
sie vor dem Verlassen der Function auf die ursprünglichen Werte zurückgesetzt werden. Ohne
diese Rücksetzung müssen die Function Handles nach jeder Ausführung neu erzeugt werden, um
den Ausgangszustand wieder herzustellen.
Beispiele mit unterschiedlichen Function-Formulierungen sind im M-File Function_Cre-
ation.m der Programmsammlung [52] zu finden. Darin sind neben den größeren Textpassagen
die Befehlszeilen enthalten, so dass einerseits Ergebnisse im Command Fester und andererseits
Grafikausgaben verfolgt werden können. Das M-File ist in Zellen (Cells) unterteilt, so dass ausge-
wählte Programmabschnitte (Zellen) mit dem Button in der Editor-Kopfzeile gestartet werden
1.5 Programmerstellung, MATLAB Script und Function 41
können – vgl. Kommentarzeilen im M-File. Zuvor sind die gekennzeichneten Functions in das
aktuelle Verzeichnis zu kopieren. Ein HTML-Dokument kann erstellt werden, vgl. S. 34.
1 clear
2 xmax=2;
3 steps=2000; % und 500
4 maxiter=32;
5 for m=1:steps
6 for n=1:steps
7 c=-xmax+2*xmax*n/steps-.5 + i*(-xmax+2*xmax*m/steps);
8 z=c;
9 for r=0:maxiter
10 z=z*z+c;
11 if abs(z)>2 break
12 end
13 end
14 Z(m,n)=sqrt(r/maxiter);
15 end
16 end
Dieser Code (mandelbr1.m aus [52]) ist einerseits aus der Command-Zeile mit
>> profile on, Mandelbr1, profile report
andererseits aus dem Profiler-Fenster, welches durch Eingabe von
>> profile viewer
bzw. mit dem Menü Tool/Open Profiler des Editors geöffnet wird, zu starten. Das Ergeb-
nis wird im Profiler-Report angezeigt. Er enthält u. a. die Gesamtrechenzeit (hier: T1 ≈ 55 s für
2000 Steps), eine Liste (Lines where the most time was spent) mit den rechenintensivsten Zeilen,
den Analyzer Report sowie eine Programmliste (Function Listing) mit den vorangestellten Spal-
ten
time: benötigte Rechenzeit, calls: Anzahl der Aufrufe, line: Zeilennummer,
wobei Zeilen u. a. bezüglich der Rechenzeit (Einstellung: time), der Anzahl maximaler Aufrufe
(numcalls) oder der Analyse (code analyzer) farbig hervorgehoben werden. Danach benötigt die
Zeile 14 76%, die anderen zwischen 8% und 3% der gesamten Rechenzeit.
Wir wollen zunächst den Einfluss der im Analyzer Report angegebenen Vorschläge:
1.5 Programmerstellung, MATLAB Script und Function 43
auf die Rechenzeit untersuchen. Da i mit einer Built-In Function ermittelt wird, kommt es in
der for-Schleife zum wiederholten Aufruf dieser Function. Um dies zu umgehen, kann man
einerseits nach Zeile 4
i=sqrt(-1); % einmaliger Aufruf, Variablen-Zuweisung
oder andererseits, wie vorgeschlagen, in Zeile 7 i durch 1i ersetzen. Wir wählen die zweite
Möglichkeit, wie in mandelbr2.m. Nach einem Neustart aus dem Profiler-Fenster ergibt sich
kaum eine Reduzierung der Rechenzeit im Gegensatz zu früheren MATLAB-Versionen.
Als weitere rechenzeitreduzierende Maßnahme bietet sich das Präallozieren; vgl. S. 28, des
erforderlichen Array-Speicherplatzes von Z mit
Z=zeros(steps);
– File mandelbr3.m – an. Die Rechenzeit reduziert sich auf T3 ≈ 14.2 s für steps=2000.
Bei kleineren Arrays, z. B. für steps=500, ist der Zeitgewinn minimal.
Schließlich führen wir eine rein reellwertige Rechnung durch. Hierzu sind die komplexen
Ausdrücke in Real- und Imaginärteile zu zerlegen; vgl. Programm-Code mandelbr4.m in [52].
Diese Vorgehensweise ist ziemlich ungewöhnlich und macht den Code äußerst undurchsichtig.
Es zeigt sich aber, dass die Berechnung mit reellen Ausdrücken gegenüber komplexen ab MAT-
LAB 6.5 erheblich schneller abläuft: T4 ≈ 6.6 s für steps=2000.
Gegenüberstellung der Rechenzeiten: Im Bild 1.7 sind die bezogenen Rechenzeiten für
steps=2000 und steps=500 gegenübergestellt. Die Rechenzeiten sind jeweils auf die von
mandelbr1.m, also dem Ausgangs-Code, bezogen. In beiden Fällen ist insgesamt eine Re-
chenzeitreduzierung von ca. 90 % bzw. ca. 60 % erreicht worden. Bemerkenswert ist der star-
ke Einfluss einer reellwertigen Rechnung mit erheblich mehr Rechenoperationen gegenüber der
komplexen Formulierung.
Zusammenfassung: Der Profiler unterstützt den Programmierer, einen bezüglich der Rechen-
zeit ausgereizten Code zu erzeugen. Wichtig ist dennoch einen gut strukturierten und damit leicht
nachvollziehbaren Code zu schreiben, wobei übliche programmiertechnische und zeitreduzieren-
44 1 Einführung in MATLAB
1.6 Grafik
Visualisierung von Ergebnissen als 2D- und 3D-Grafiken trägt maßgeblich zur Veranschauli-
chung der untersuchten Vorgänge bei. MATLAB bietet diesbezüglich vielfältige Möglichkeiten.
Wir werden, bezogen auf die Buchthemen, einige Grundlagen zur grafischen Darstellung präsen-
tieren. Erweiterungen sowie Grafik-Beispiele in [41], [53], [57] und insbesondere die MATLAB-
Demo-Beispiele abrufbar im Help Browser , vgl. Bild 1.1, unter MATLAB Demos → Graphics
liefern zusätzliche Anregungen.
Bildschirmausgabe das Ausgabe-Format shortE und für die Grafik die Linienstärke sowie
Linienart-Reihenfolge (LineStyleOrder) bei mehreren Grafen aller angelegten Figure, kann
mit get – z. B. get(0,’DefaultTextFontName’) für die Schriftart – abgefragt und nach
Bedarf mit set geändert werden, wie in:
>> get(0,’format’) % Format-Abfrage
ans = % z. B.
shortE % vorhandenes Format
>> set(0,’format’,’longE’) % es geht einfacher!
>> get(0,’DefaultLineLineWidth’) % Linienstärke ?
ans =
5.000000000000000e-001
>> set(0,’DefaultLineLineWidth’,1) % Linienstärke geändert
>> get(0,’DefaultFigureColor’); % FigureColor abgefragt
>> set(0,’DefaultFigureColor’,[0.5 0.5 0.5]) % FigureColor gesetzt
>> set(0,’Default...’,’remove’) % Standardeinstellung
Mit der Anweisung der letzten Zeile wird die Standardeinstellung wieder hergestellt. Über-
sichtlicher ist die Berücksichtigung ausgewählter Eigenschaften, z. B. LineWidth, FigureColor,
direkt am einzelnen Objekt Line, Figure usw. Dies wird in den weiteren Abschnitten gezeigt.
Um nachträglich auf Grafik-Objekte zugreifen zu können, verwendet MATLAB spezielle Va-
riable, das Handles6 . In den beiden obersten Hierarchieebenen sind das ganze Zahlen – Root hat
das Handle 0, Figure die Handles 1, 2, 3,... – bei den übrigen Objekten reelle Zahlen. Zugehörige
Eigenschaften lassen sich somit mit set festlegen oder mit get erfragen. Eine Liste festgeschrie-
bener Eigenschaften (Properties) erhält man mit get(<handle>), mögliche Eigenschaftswerte
(Property Values) werden durch set(<handle>) angezeigt. Ist das Handle eines Objekts nicht
bekannt, kann sie mit findobj konkretisiert werden, siehe Abschn. 1.6.2.3.
Alle im Folgenden behandelten 2D- und 3D-Grafik-Beispiele sowie zusätzliche Experimente
aus Plot_Exp1.m, Plot_Exp2.m, sind im Programm Grafik_Elemente.m mit Zell-
Struktur in [52] zusammengefasst; es kann schrittweise abgearbeitet werden.
ändern oder setzen und bei Bedarf mit set(h0, PropertyName, PropertyValue ), z. B. set(gcf,
’MenuBar’,’neuer_name’), nachträglich wieder ändern; mit get(gcf, PropertyName ) lässt
sich die Einstellung abfragen, z. B. get(h0,’Position’). Das Ansprechen bzw. aktualisieren
der Figure erfolgt mit figure(gcf) oder figure(h0).
Grafikfenster-Befehle
figure (nummer), ...(PropertyName,-Value) Erzeugen, Ansprechen einer Figure
subplot (zeile,spalte,zähler) Erzeugen eines Subplots
gcf (get handle to current figure) Aktuelle Figure-Handle
clf (clear current figure) Rücksetzen, löschen der Children
clf reset wie clf + figure properties zurückgesetzt
delete (figure(nummer)), delete (nummer) Figure, Handle mit nummer löschen
close (nummer) Figure nummer schließen
close all alle Figures schließen
drawnow Bildschirmaufbau
shg entspricht figure (gcf) Figure anzeigen (show graph window)
sind möglich, wobei für subplot(1,2,1) auch subplot(2,2,[1 3]) bzw. für das Argument (2,1,2)
auch (2,2,3:4) stehen kann.
Abweichend von dieser Bildteilung kann auch die Position und die Subplot-Größe mit
hs = subplot (’Position’,[left bottom width height]) manuell festgeschrieben werden;
1.6 Grafik 47
1.6.2 2D-Grafik
Standardmöglichkeiten zur grafischen Ausgabe von Daten werden zusammengestellt. Beispiele
erläutern die Handhabung, mit Plot_Exp1.m, Plot_Exp2.m und Grafik_Elemente.m
aus [52] kann am Rechner experimentiert werden.
1.6.2.1 Plot-Befehle
2D Plot-Befehle
plot ( x , y , plotstil , ...) Plot der Funktion y = f (xx), lineare Achsteilung
plot (x, [ y; z ] , [ plotstil_y, plotstil_z ] z. B. » plot(x,[y; y1],[’.’,’-’])
line ( x , y , ’PropertyName’,-Value, ... ) Plot, High-Level Aufruf, vgl. S. 57
line ( ’PropertyName’,PropertyValue, ... ) Plot, Low-Level Aufruf, vgl. S. 57
comet ( x , y , Komet-Länge ) Animation einer Trajektorie
stairs ( x , y , plotstil , ...) treppenförmige Grafik, lineare Achsteilung
stem ( x , y , ’filled’, plotstil , ...) Plot, diskrete Linien zu x j mit ◦-Marke, linear
spy ( matrix , plotstil ) Visualisierung, Sparse-Matrix-Besetzung
semilogx ( x , y , plotstil , ... ) Plot, x-Achse logarithmisch
semilogy ( x , y , plotstil , ... ) Plot, y-Achse logarithmisch
loglog ( x , y , plotstil , ... ) Plot, x, y-Achsen logarithmisch
fplot ( funktion, bereich ) Funktion-Plot, z. B. fplot(’xˆ2’,[0 2]);
hold on | off | all Vorhandenes Objekt halten, schließen
Wie alle MATLAB-Funktionen sind auch die Plot-Befehle vektor- bzw. matrixorientiert. Der plot-
Befehl
plot ([x1, x2, x3, .., xN],[y1, y2, y3, .., yN] , plotstil , ...)
bzw. vektoriell: plot (x,y , plotstil ,...),
mit gleicher Dimension von x, y, zeichnet die Punkte zu den reellen Wertepaaren xj, yj,
die standardmäßig durch eine Linie verbunden werden. Entfallen im Aufruf Abszissen- bzw
Ordinaten-Werte d. h. x oder y, z. B.:
plot ( x , plotstil ) , – entspricht plot ( 1:length(x), x , plotstil ) –,
dann werden die enthaltenen Komponenten über ihren Index aufgezeichnet. Ist x komplex, dann
wird plot(real(x), imag(x)) ausgeführt. Andere Interpretationen nach [7] in Abhängigkeit
von der Plot-Anweisung zeigt Bild 1.9 – kompl_plot.m in [52] –, mit den Datenfeldern:
x = linspace(0,10*pi,200); y = exp((1i-0.1)*x);
Der plotstil ist ein String, der im einfachsten Fall aus einem Buchstaben zur Farbenkennung
(Color) und einer Zeichenfolge für den Linien- und Markentyp (Line Style, Marker) in beliebiger
Reihenfolge besteht; z. B. wird mit
48 1 Einführung in MATLAB
Programm-Code Grafik-Ausdruck
figure(1);
clf
t=0:pi/10:2*pi; % Zeitfolge
plot(t,sin(t),’-.r*’) % 1. Plot
hold on
plot(t,sin(t-pi/2),’-mo’) % 2. Plot
plot(t,sin(t-pi),’:bs’) % 3. Plot
hold off % NextPlot
axis tight % Extremwert- Anpassung
Die Befehle der oberen Tabelle werden u. a. im unten ausgeführten Beispiel erläutert. Bemer-
kung zur Beschriftung: In den Stringausdrücken string sind auch griechische Buchstaben sowie
einige mathematische Darstellungen, z. B. 5 ˆ 2 → 52 , wie im Textverarbeitungssystem TEX bzw.
LATEX [36] möglich. Mit dem Textinterpreter, z. B. ’interpreter’,’latex’, erfolgt die
Auswahl. In der Symbol-Tabelle unter: Button Search: Text Properties→Link: TeX
Character Sequenze Table sind die zulässigen Zeichen zu finden. Einige Beispiele wer-
den im Demo-Programm LatexBeschr.m in [52] gezeigt.
50 1 Einführung in MATLAB
Beispiel: Gesucht ist der Amplituden- und Phasenfrequenzgang eines gedämpften Einmassen-
Schwingers mit der Bewegungsgleichung und der Lösung x(t):
Beispiel, linkaxes Befehl: Um Grafen mehrere Subplots vergleichen zu können, wird eine
einheitliche Skalierung vorausgesetzt, dies erreichen wir mit dem linkaxes Befehl mit den Op-
tionen ’x’, ’y’, ’xy’ ’off’ zur Skalierung der jeweiligen Achsen x, y bzw. beider, wie im
folgenden Programmcode und dem Bild 1.12:
x1=-2*pi:0.1:2*pi; y1=0.5*sin(x1); % Subplot 1
x2=-4*pi:0.1:4*pi; y2=cos(x2); % Subplot 2
ax(1)=subplot(2,2,1);
plot(ax(1),x1,y1); % automatische Skalierung
title(ax(1),’Subplot 1’)
ax(2)=subplot(2,2,2);
plot(ax(2),x2,y2); axis tight % an Extremwerte angepasst
title(’Subplot 2’)
linkaxes([ax(2), ax(1)],’xy’) % Anpassung an Subplot 2
für die Schwinggeschwindigkeit ẋ durch ẋ/Ω , wobei Ω die Erreger- oder die Eigen-Kreisfrequenz
sein kann, vergleichbare Größenordnungen geschaffen werden, andererseits lassen sich auch
mehrere Achsskalierungen einbringen. Die Kombination zweier Zeitverläufe x(t), ẋ(t) des Schwin-
gungssignals des letzten Beispiels zeigt Bild 1.13. Neben den Linien-Plots sind in Bild 1.13
zur Demostration zusätzlich die Stem-Plots (Stäbe, Stangen) der Amplituden dargestellt. Eine
Anwendung der Stem-Plots ist die Darstellung der F OURIER-Koeffizienten einer Analyse eines
Schwingungssignals, vgl. u. a. fftdemo_P.m in [52].
Teile des Progammcodes zu Bild 1.13 aus Freq_G.m, mit t, x, xp aus dem Code von S. 61,
geben wir an:
figure(’name’,’2YSkal’)
% ---- Linien-Plot
[ax,h1,h2] = plotyy(t,x,t,xp,’plot’); % Plotanweisung, 2 y-Achsen
set(get(ax(1),’Ylabel’),’String’,’Weg x’)% Achsbeschriftung
set(get(ax(2),’Ylabel’),’String’,’Geschwindigkeit xp’)
xlabel(’Zeit [s]’) % eine x-Achse
title(’Schwingungen, Weg und Geschwindigkeit’) % Titel
hold on % weitere Plots aufnehmen
% ---- stem Plot
[Ax,H1,H2] = plotyy(t(1:5:end),x(1:5:end),...
t(1:5:end),xp(1:5:end),’stem’);
set([h1 H1],’LineStyle’,’-’) % Linienart
set([h2 H2],’LineStyle’,’:’) % Linienart
set([ax Ax],’XLim’,[0 t(end)]) % x-Achsen-Skalierung
set(Ax,’Position’,get(ax(1),’Position’)) % gleiche Positionierung
hold off
Darüber hinaus kann eine zweite Abszisse im Bildkopf eingeführt werden. Neben der linearen
Unterteilung der Achsen können mit semilogx, semilogy, loglog, z. B. wie in
[ax,h1,h2]=plotyy(t,x,t,xp,@similogx,@semilogx,@plot);
– dabei gilt auch: ...,’semilogx’,’plot’); – diese auch logarithmisch unterteilt
werden. Wird das Handle @similogx nur einmal eingetragen, dann bezieht sich dies auf x, die
Achsunterteiling zu xp ist linear. MATLAB kennt weitere Diagrammtypen: bar, barh, bar3,
1.6 Grafik 53
barh3, hist, pie, pie3, für technische Darstellung sind wichtiger die Stufen-Plots stairs
und die 3D-Stab-Plots stem3.
D. h. mit der obigen findobj-Anweisung finden wir die Handles des Root-Objekts mit allen Kind-
Objekten, vgl. Bild 1.8.
Mit dem set-Befehl kann die Liste möglicher Eigenschaften, mit dem get-Befehl die einge-
stellten Eigenschaften angezeigt werden:
>> set(h(3)), set(h(5)), get(h(5)), ....
Wir erhalten recht umfangreiche Listen. Jede Eigenschaft der ausgegebenen Listen können
wir nun verändern, Voreinstellungen sind dabei in geschweifte Klammern gefasst. Welche Mög-
lichkeiten hinter jeder Eigenschaft steht, lässt sich mit dem set-Befehl zur Anzeige bringen. D. h.
für die Markierung (Marker) aus dem Objekt Line
>> set(h(5),’Marker’)
[ + | o | * | . | x | ... ... | < | pentagram | hexagram | {none} ]
54 1 Einführung in MATLAB
Nun ersetzen wir die Kreismarken der oben erstellten Grafik durch größere Quadrate:
>> set(h(5),’Marker’, ’square’,’MarkerSize’, 16)
Das Gegenstück zur set- ist die get-Anweisung, mit der die eingestellten Eigenschaften abge-
fragt werden können, z. B.:
>> {get(h(5),’Marker’); get(h(5),’MarkerSize’)} % Cell Array
ans =
’square’
[ 16]
– {get(..} dient der gemeinsamen Ausgabe. Wenn man das Handle Graphics verwenden
will, empfiehlt es sich, immer gleich nach Erzeugen der Grafik einen Handle auf die Grafik zu
speichern.
Handles können nicht nur mit findobj im nachhinein, sondern unmittelbar zugewiesen werden:
>> figure(2)
>> h1 = plot(t,sqrt(t),’-.’,’Markersize’,16)
h1 =
344.0139
In diesem Fall gibt die Grafik-Anweisung als Funktionswert nur ein Handle auf das zusätzlich
erzeugte Objekt – also Linie – zurück, wie die Anweisung
>> get(h1,’Type’)
ans =
line
bestätigt. Alle Handles und deren Zuweisung des Root-Objektes mit allen Kind-Objekten erhal-
ten wir wieder mit findobj und get
>> H = findobj >> get(H,’type’)
ans = ans =
H =
0 ’root’
2.0000 ’figure’
1.0000 ’figure’
343.0134 ’axes’
170.0134 ’axes’
344.0139 ’line’
172.0134 ’text’
171.0139 ’line’
Spezieller: Alle Axes- und alle Line-Objekte mit der Markengröße 16 folgen mit:
>> findobj(’Type’,’axes’), Hm=findobj(’MarkerSize’,16)
>> set(H(4),’Nextplot’)
[ new | add | {replace} | replacechildren ]
angezeigt, d. h. mit
>> set(H(4),’Nextplot’,’add’)
>> h2=plot(t,0.8*sqrt(t)); set(h2,’LineWidth’,2)
>> set(H(4),’Nextplot’,’replace’)
wird eine zusätzliche Grafik mit geänderter Linienstärke dargestellt und das Grafik-Fenster für
weitere Plots, wie mit hold off, geschlossen. Bei replacechildren wird das alte Grafik-
Objekt gelöscht, das neue eingebracht, wobei u. a. die Achsen aber erhalten bleiben – wichtig
für Animation, Abschn. 1.7.
Jedes grafische Objekt kann mit dem Befehl delete aus der Grafik gelöscht werden, z. B.
>> delete(h2)
Wenn hf ein Handle auf ein Grafikfenster (Typ "figure") ist, kann das zugehörige Fenster mit
close(hf) geschlossen werden, hier:
>> close(H(2))
Es gibt darüber hinaus einige globale Variablen, die (falls eine Grafik vorhanden ist) Handles
gewisser aktueller Objekte enthalten:
gcf = Handle des aktuellen Grafikfensters
gca = Handle der aktuellen Achsen
gco = Handle des aktuellen Grafikobjektes (Linie, Fläche usw.)
Beispiel:
figure(2) % Grafik-Fenster öffnen
plot(t,0.8*sqrt(t)); % Plot-Anweisung
get(gca) % Axes-Eigenschaften anzeigen
set(gcf,’Color’,[0.6 0.6 0.6]) % Farbe des Grafik-Fensters ändern
set(gca,’Nextplot’,’add’) % Folge-Plot ins gleiche Fenster
plot(t,0.6*sqrt(t)); % 2. Plot
set(gco,’LineWidth’,3) % Linienstärke ändern
set(gca,’Nextplot’,’replace’) % Plot-Fenster schließen (hold off)
Das Handle des aktuellen Grafik-Fensters erhält man mit gcf (Get Current Figure), die des
aktuellen Koordinatensystems (Axes) durch gca (Get Current Axis), die des aktuellen Objekts
durch gco (Get Current Objekt).
Die Eigenschaften der Objekte im Grafik-Fenster können in den neueren MATLAB-Versionen
sehr komfortabel mit dem Property Editor verändert werden, siehe Bild 1.16.
Handhabung einiger Linien- und Marker-Spezifikationen, wir geben drei Möglichkeiten an.
1. Der plot Befehl, einzelner Graf, siehe Bild 1.141 :
figure(2)
plot(t,sin(2*t),’-mo’,...
’LineWidth’,2,...
’MarkerEdgeColor’,’k’,...
’MarkerFaceColor’,[.49 1 .63],...
’MarkerSize’,12)
Die Grafen einer der letzten Plot-Anweisungen, siehe auch D2p_1.m in [52], sind in Bild 1.142
wiedergegeben.
3. Der line Befehl, einzelner Graf:
Mit den oben angegeben Eigenschaften können nun die Plot-Anweisungen in Bild 1.10 durch
den line Befehl ersetzt werden. line ist Kind-Objekt zum Axes-Objekt (Parent). Im Gegensatz
zum plot Befehl bleibt beim line Befehl das Grafik-Fenster offen, hold on kann entfallen, vgl.
1.6 Grafik 57
auch Plot_Exp1.m in [52]. Ein folgender line Befehl löscht also nicht den vorhandenen Inhalt.
Dementsprechend lautet die Befehlsfolge des Beispiels aus Bild 1.10:
• High-Level-Befehlsfolge:
t=0:pi/10:2*pi; % Zeitfolge
line(t,sin(t),’Color’,’r’,’LineStyle’,’-.’,’Marker’,’*’)
line(t,sin(t-pi/2),’Color’,’m’,’LineStyle’,’--’,’Marker’,’o’)
line(t,sin(t-pi),’Color’,’b’,’LineStyle’,’:’,’Marker’,’s’)
Grafik in Grafik:
Weiterhin soll gezeigt werden, wie sich Beschriftungen außerhalb eines Grafik-Fensters anbrin-
gen lassen. Dies lässt sich auch als Grafik in einer Grafik – siehe Abschn. 8.6 – interpretieren,
wobei im Gegensatz zu hier mit ’Visible’ , ’on’ , ’Box’ , ’on’ die Achsen einzublenden sind.
figure(1), clf
h = axes(’Position’,[0 0 1 1],’Visible’,’off’); % Def. 1. Achssystem
axes(’Position’,[.35 .1 .6 .8]) % Def. 2. Achssystem
% ist aktiv
t = 0:900; % Zeitvektor
plot(t,0.25*exp(-0.005*t),’LineWidth’,2) % Plot der Funktion
% Textfeld erstellen und im ursprünglichen Fenster positionieren.
str(1) = {’Plot der Funktion:’}; % oder: str{1}=’Plot der Funktion’;
58 1 Einführung in MATLAB
str(2) = {’ y = A{\ite}^{-\alpha{\itt}}’};
str(3) = {’Parameter:’}; % str ist Cell Array
str(3) = {’ A = 0.25’};
str(4) = {’ \alpha = .005’};
str(5) = {’ t = 0:900’};
set(gcf,’CurrentAxes’,h) % 1. Achssyst. aktiv
text(.025,.5,str,’FontSize’,12) % Text einbringen
Property Editor 3 im View-Menü des Figure-Fensters oder mit dem Button Show
Plot Tools..., siehe Bild 1.16.
3. Grafikfenster einrichten: Im Fenster Figure Palette/New Subplot ist das Symbol
für 2D Subplot auszuwählen und / oder mit einem Klick auf das Matrixsymbol in dem sich
öffnenden Fenster mit dem Mauszeiger und linker Maustaste die gewünschte Struktur ein-
färben und die Taste wieder frei geben.
4. Grafik-Erstellung: In Figure Palette/Variables die drei Vektoren t, y, y1 aus-
wählen (linke Maustaste + Shift/Strg). Shortcut-Menü mit rechter Maustaste öffnen (Zeiger
auf ), Darstellung Plot auswählen oder den gekennzeichneten Block t, y y1 mit der
Maus in das gewünschte Subplot-Fenster ziehen. Es folgt die Grafikerstellung mit zugehö-
rigen Einträgen in dem Plot Browser. Hiermit können die einzelnen Grafen aktiviert
– es werden Marken eingeblendet – oder mit dem Häkchen ausgeblendet werden. Gleich-
zeitig werden im Property Editor die Anzeigen -Figure, -Axes, -Lineseries
und das Layout angepasst. Diese Vorgänge lassen sich auch im Grafik-Fenster durch Po-
sitionieren des Mauszeigers auf den Grafen sowie im inneren oder äußeren Fenster und
anschließendem Klick erreichen. Die eingeblendeten Eigenschaften lassen sich interaktiv
auf die Grafik übertragen. Alle Eigenschaften zur jeweiligen Einstellung werden mit dem
More Properties Button im Inspector 4 eingeblendet, in Bild 1.16 für den angewähl-
ten Grafen y – stark verkürzt – überdeckend dargestellt.
Um die Grafen ebenfalls im unteren Fenster darzustellen, wird dieses aktiviert und die obige
Vorgehensweise wiederholt.
5. Eigenleistung: Entsprechend Bild 1.16 ist diese Grafik zu ergänzen. Hinweis: Die Legende
60 1 Einführung in MATLAB
wird über den Button Insert Legend, siehe Bild 1.16, bzw. Insert / Legend oder
mit Show Legend im Short-Cut-Menü (Mauszeiger im Plot-Feld/rechte Maustaste) einge-
blendet.
6. Code-Erzeugung: Es kann der Code bezüglich der Figure (gesamtes Bild) oder der Subplots
erzeugt werden. Den jeweiligen Code erhält man über das zugehörige Short-Cut-Menü mit
dem Menü-Punkt Show Code oder den File-Button/Generate File. Es wird u. a. die
Function createfigure(...) bzw. createaxes(...) erstellt und im Editor ange-
zeigt.
7. Dieser Code kann einerseits zum Studium der Grafik-Befehle, andererseits zur Integration
ins eigene M-File herangezogen werden, wie in plotum.m aus [52] gezeigt.
Ergänzende Informationen sind u. a. den Video-Demos unter: Help / Demos – auch unter You Tu-
be – zu entnehmen.
Vorhandene Grafiken können mit den Tools unter dem Button Insert auch unmittelbar er-
gänzt werden. Z. B. kann mit Insert/TextBox Text eingefügt und über das Shortcut Menü
anschließend zugehörige Eigenschaften berücksichtigt werden.
1.6.3 3D-Grafik
3D Plot-Befehle
plot3 ( x, y, z , plotstil ) 3D-Linien-Plot z. B. Parameterdarstellung einer Funkt.
comet3 ( x, y, z , komet-länge ) 3D-Animation einer Trajektorie
mesh ( x, y, z , farbe ) 3D-Gitter-Plot, Drahtmodell expl. Funkt.: z = f (x, y)
surf ( x, y, z , farbe ) 3D-Fläche-Plot, siehe auch surfl mit Ausleuchtung
surfc ( x, y, z , farbe ) wie surf + Höhenlinien
patch ( x, y , z , farbe ) 2D-, 3D-Fläche-Plot, vgl. auch fill, fill3
waterfall ( x, y, z ) 3D-Wasserfall-Plot
contour3 ( x, y, z , v ) 3D-Plot von Höhenlinien
contour ( x, y, z , v ) 2D-Plot von Höhenlinien
[X,Y]=meshgrid ( x, y ) Koordinatenmatrizen für Schnittpunkte in der x, y-Ebene
box on | off Box ein- bzw. ausblenden
view ( az, el ) Blickwinkel: Perspektive ändern, Azimut-, Elevation-∠
zlabel (string) z-Achsen-Beschriftung, + xlabel, ylabel
• plot3: Es können Linien mit/ohne Marken in einem 3D-Raum dargestellt werden (vgl. plot).
Z. B. von Funktionen in Parameterdarstellung: x(t) = ϕ(t), y(t) = χ(t), z(t) = ψ(t) mit
1.6 Grafik 61
sind im Bewegungsraum (t, x, ẋ) darzustellen. Zusätzlich sind die Projektionen jeweils in die
(t, x)-, (t, ẋ)-Ebene sowie in die Phasenebene (x, ẋ) aufzunehmen, siehe Bild 1.17. Wir setzen im
Programm Freq_G.m von S. 50 fort:
% ---- Darstellung im Bewegungsraum, 3D-Plot
eta_0=1.0; % bezogene Frequenz
Omega=eta_0*om_0; % Erregerkreisfrequenz
t=linspace(0,4*pi/Omega) % Zeitvektor
C=q/om_0^2./sqrt((1.0-eta_0^2)^2+4.0*D(1)^2*eta_0^2); % Amplitude
Psi=atan2(2.0*D(1)*eta_0,1.0-eta_0^2); % Phase
x=C*cos(Omega*t-Psi); % Lösung x(t)
xp=-Omega*C*sin(Omega*t-Psi); % Lösung xp(t)
figure(’name’,’3D’)
plot3(t,x,xp,’r’,’linewidth’,3), hold on % Bewegungsraum
plot3(t,x,1.2*min(xp)*ones(size(t)),’k’) % Projektion in (t,xp)-Ebene
plot3(t,1.2*max(x)*ones(size(t)),xp,’k’) % Projektion in (t,x)-Ebene
plot3(t*0,x,xp,’b’) % Phasenebene xp(x)
axis([t(1), t(end),1.2*[min(x) max(x)], 1.2*[min(xp) max(xp)]])
box on % Rahmen eingeblendet
xlabel(’Zeit’); zlabel(’xp’); ylabel(’x’) % Achs-Beschriftung
view(28,42) % Blickwinkel
Beispiel: Mit dem mesh- und surf Befehl lassen sich auch Elementgrößen einer Matrix
visualisieren; z. B. für die Matrix M
62 1 Einführung in MATLAB
• patch: Grafikfunktionen zur Darstellung einer oder mehrerer 2D- und 3D-Polygonzügen.
Die umschlossenen Flächen werden farbig angelegt und ausgeleuchtet (Coloring, Lighting).
Anwendungen: Fachwerkstrukturen, Linienmodelle (Flugzeug, Automobil). Beispiele sind
1.6 Grafik 63
view(-60,30);
subplot(224)
contour3(X,Y,Z) % 3D-Höhenlinien-Plot
2. Beispiel: 3D-Grafikgestaltung mit den Functions cylinder und surf; vgl. [52]
% ---- D3p_2.m
t = 0:pi/10:2*pi; % Zeitvektor
[X,Y,Z] = cylinder(0.5*t.*cos(t)); % Zylinderdaten
figure(1)
clf reset
subplot(2,2,1) % 1. Grafik
% colormap hot % Rot-/Gelb-Töne
% colormap cool % Blautöne
% colormap(hsv(128))
surfc(X,Y,Z,’MeshStyle’,’row’)
subplot(2,2,2) % 2. Grafik
surf(X,Y,Z,0.6*ones(size(Z))) % Mit Farb-Matrix
caxis([0 1]);
colorbar % Farblegende einblenden
subplot(2,2,3) % 3. Grafik
surf(X,Y,Z,’EdgeColor’,’interp’,’FaceColor’,[0.7 0.7 0.7])
subplot(2,2,4) % 4. Grafik
surf(X,Y,Z,’FaceLighting’,’phong’,...
’EdgeColor’,’none’,’AmbientStrength’,0.25)
1.6 Grafik 65
caxis([-1 1.25]);
colorbar
light(’Position’,[-2,2,10]) % Lichtposition x, y, z
lighting phong
Auf die Farbgebung und Ausleuchtung im 2. Beispiel S. 64 wollen wir noch eingehen. Hierzu
gehören die Farboperationen (Color Operations)
caxis | colormap | colorbar
Die Colormaps (siehe Kommentarzeilen im Programmcode sowie gray, flag, spring usw.)
legen eine Farbtabelle mit vorgegebenen Farbtönen – u. a. aus rot (R), grün (G), blau (B) – fest;
vgl. Colorbar (Farblegende) in Bild 1.20. Diesen einzelnen Farbtönen sind Farbwerte zugeordnet,
deren kleinster und größter Wert automatisch auf C_farbe (Farbmatrix) bezogen wird. Die
Extremwerte der Farbtabelle können mit
caxis(farbe_min, farbe_max)
neu skaliert werden, so dass nur ein Ausschnitt aus der Colormap zur Objekteinfärbung dient; vgl.
Programmcode und Bild 1.20 zu Beispiel 2. Dadurch wird im 1. Bild von Bild 1.20 die gesamte
Farbpalette auf die Objekt-Höhe (z-Werte) bezogen. Im 2. Bild ist die Farbtabelle durch [0, 1]
begrenzt und über C_farbe = 0.6 ein Gelbton ausgewählt. Im 3. Bild ist eine eigens kreierte
FaceColor umgesetzt, die Colormap bezieht sich nur auf das Gitternetz (EdgeColor). Im 4. Bild
wird ein Ausschnitt der neu skalierten Colormap verwendet, das Gitternetz ist ausgeblendet.
Ein weiterer optischer Effekt wird durch die Ausleuchtung (Lighting), wie im 4. Bild von
Bild 1.20 und in Patch_Exp.m aus [52], erreicht; z. B. mit:
66 1 Einführung in MATLAB
Z. B.
surf(X,Y,Z)
alpha(’color’) % color=C_farbe
1.7.1 Modellerstellung
MATLAB stellt eine Vielzahl von Möglichkeiten zur Darstellung von 2D- und 3D-Grafikobjekten
zur Verfügung; einige sind in den vorangegangenen Abschnitten genannt. Darüber hinaus ver-
1.7 Animation von 2D- und 3D-Modellen 67
feinert die Farbanlage und die Ausleuchtung der Modelle die Animations-Grafik. Wir konnten
bisher nur einige Eigenschaften anführen. Weitere Ansatzpunkte liefern die Beispiel-Programme
lin_ani_1.m, lin_ani_2.m, zyl_1.m, zyl_3DH.m (zyl_3D.m)
DrehSchw.m, QuerSchw_1/2/.m Demo-Programme zu Kapitel 3
mit ihren zugehörigen Functions aus [52]. Die dort verwendeten Eigenschaften (Properties) las-
sen sich bequem mit der Online-Hilfe interpretieren und vervollständigen. Folgende Built-In
Functions eignen sich zur Animation:
2D-Modelle (Linien, Flächen): 3D-Modelle (Oberflächen):
plot | line | patch | fill patch | fill3 | surf | surfl
patch, fill für farbig angelegte Flächen
1.7.2 Animations-Grafik
MATLAB unterstützt mehrere Vorgehensweisen zur Generierung einer Animations-Grafik, einer
Bildfolge:
1. Erstellung von Bildsequenzen u. a. mit plot-, plot3-, surf-Befehl. Gegebenenfalls sind die
Einzel-Bilder in hold on, hold off einzuschließen. Dies entspricht der bisher vorgestellten
Grafik-Erstellung, siehe Abschn. 1.7.2.1.
Die EraseMode-Methode eignet sich insbesondere für lange Sequenzen einfacher Plots. Die Zeit
des Frame-Aufbaus und die Bildqualität hängen vom EraseMode
{normal} | none | xor | background
ab. Wir geben einige Eigenschaften an:
• {normal}: Berechnet und zeichnet jedes Grafik-Objekt neu, dadurch grafisch hochwerti-
ge aber langsame Wiedergabe.
• none: Überschreibt das vorhandene Grafik-Objekt; es wird alles übereinander gezeichnet.
Das Bild kann nicht gedruckt werden, da keinerlei Information gespeichert wird.
• xor: Zeichnet und löscht pixelweise die Bildänderungen unter Einbezug der Exklusiv-Oder-
Logik (xor). D. h. nur Veränderungen werden neu dargestellt, dies ergibt einen sehr schnel-
len Bildschirmaufbau allerdings mit Qualitätsverlusten insbesondere bezüglich der Farbe.
• background: Hintergrundobjekte werden überschrieben, sie verschwinden auf dem Bild-
schirm.
Für eine Animation sind im Allgemeinen nur die Modi normal und xor geeignet. Werden die
Grafik-Objekte aufwendiger, dann kann der Zeitschritt für die Berechnung und Darstellung sehr
groß werden; wir erhalten keinen flüssigen Bewegungsablauf. In diesem Fall werden Einzelbilder
68 1 Einführung in MATLAB
(Frames) mit
F(k) = getframe k = 1, 2, . . .
erzeugt, auf dem Bildschirm ausgegeben und in dem Structure M gespeichert. Mit movie(F)
werden 12 Frames pro Sekunde, vorausgesetzt der Rechner ist schnell genug, auf dem Bildschirm
gebracht.
Syntax
1. movie(F , n, fps)
2. movie(h, F, n, fps, loc)
zu 1: movie(F) spielt den Film (Frames von F) einmal ab, bzw. mit Option n n mal ab. Ist n
negativ, so wird der Ablauf zunächst rückwärts, dann vorwärts abgespielt. Ist n ein Vektor, dann
steht das erste Element für n, die restlichen für die Bilder (Frames) im Film, vgl. Abschn. 1.7.2.1.
Die Option fps steht für Frames pro Sekunde, die Obergrenze ist rechnerabhängig.
zu 2: movie(fign, F, [ ], [ ], [ 0.1 0.1 0 0]): Film wird in fign=figure(...) ab-
gespielt mit der Position der unteren linken Ecke (0.1 0.1); die beiden letzten Positionen
sind ohne Bedeutung. Optionen n, fps wie unter 1.
In der dritten Zeile werden die zu erwartenden maximalen Achsmaße vorgegeben, die wegen des
folgenden ’replacechildren’ Modus – vgl. Abschn. 1.6.2.3 – dann festgeschrieben sind,
d. h. sie sind nicht mehr von den Datenwerten abhängig.
Zunächst verfolgen wir die Bildfolge innerhalb einer for-Schleife mit dem surf-Befehl,
for k = 0:21 % Bildfolge erstellen
as=1+k*ds; % Skalierung der x-, y-Werte
surf(as*X,as*Y,cos(2*pi*(k-1)/20).*Z,Z); % Bild
drawnow , pause(0.2) % Bildanzeige, Zeit-Verzögerung
end
Auf dem Bildschirm erscheint die zeitliche Veränderung der Fläche. Aufgrund der zu kleinen
x-,y-Achswerte in der obigen axis-Anweisung ist das Bild unvollständig, wie Bild 1.21 zeigt.
Die Werte in axis müssen geändert werden. Statt der drawnow Anweisung ist natürlich auch
die Speicherung der Filmdaten, wie unten, möglich.
Die zweite Methode arbeitet mit dem EraseMode Modus. Zunächst ist das Ausgangs-Flächen-
modell einem Handle (hier: h) zuzuweisen. Mit den zwei folgenden Zeilen erhalten wir, wie
1.7 Animation von 2D- und 3D-Modellen 69
a: b: c:
Bild 1.21: Bilderfolge zur surf-Anweisung
gehabt, eine neue Achs-Skalierung und den Modus zur Festschreibung dieser. Es folgt die Ein-
stellung des EraseMode, hier: ’none’. Die Erstellung der Bildfolge unterscheidet sich in der
for-Schleife in der set-Anweisung. Es werden die neuen Datensätze, u. a. as*X, dem Handle h
zugewiesen. Mit getframe erfolgt schließlich die elementweise Zuweisung der Film-Daten.
an. Die zugehörigen Knoten-Koordinaten im x,y-System folgen dann mit der Drehmatrix T , siehe
(2.14), zu
x cos Φ − sin Φ
xT = T , T = .
y sin Φ cos Φ
Damit ist die oben angegebene Plotanweisung bezüglich x T zu jedem Zeitschritt zu wiederholen.
Dies erreichen wir mit
set(h, ’Xdata’,x_T(1,:), ’Ydata’,x_T(2,:))
für eine gewählte Zeitfolge (t1 , t2 , ...), so dass ein Bewegungsablauf erzeugt wird. Die beiden
Methoden: EraseMode, Movie sind in den folgenden Programmsegmenten programmiert:
EraseMode; Programm: lin_ani_1.m aus [52]
end;
pause(0.5) % Zeitverzögerung
movie(F,8); % Vorlauf+8 Durchl.
Weitere Elemente lassen sich in die Animations-Grafik integrieren. Wir stellen ein Lager im
Knoten 1 in Form eines Dreiecks dar:
fill([0 0.25 -0.25 0],[0 -0.5 -0.5 0],[0 0.7 0]);
wobei der letzte Vektor für die gewählte Farbe steht. fill kann auch durch patch ersetzt werden.
Zusätzlich kennzeichnen wir den Bereich der Schwenkbewegung durch ein unterlegtes Kreisseg-
ment. Hierzu dient wieder der fill oder patch Befehl:
phi=-pi/4:pi/20:pi/4; % Winkelbereich
fill([0 2.2*cos(phi) 0],[0 2.2*sin(phi) 0],’y’,’FaceAlpha’,0.5)
Die Eigenschaft FaceAlpha sorgt für die Transparenz des Kreissegments. Diese Anweisungen
müssen hinter der ersten Plot-Anweisung und vor der Zeitschleife stehen, vgl. lin_ani_1.m
aus [52]. In Bild 1.22 ist eine Momentaufnahme der Animation dargestellt.
Übungsvorschlag: Die in Bild 1.23 skizzierte masselose Schraubenfeder wird an ihren Enden
durch die Zeitfunktionen
ul (t) = 10 + 5 sin (15 t) [LE], ur (t) = 20 cos (2 t) [LE]
ausgelenkt. Die Feder hat 5 Windungen (w = 5), in der entspannten Lage die Länge l0 = 52 [LE]
und den Windungsradius von R = 10 [LE]. Dabei steht LE für Längeneinheit, mm oder cm sind
realistisch. Durchmesseränderungen infolge der Längsverformungen sind zu vernachlässigen.
In einer Animation ist die Federdeformation zu veranschaulichen. Dazu ist in einem ersten
Schritt die Feder zum Zeitpunkt t = 0, wie in Bild 1.23 unten, per Plot-Anweisungen darzustellen,
im zweiten Schritt ist die zeitliche Verformung zu integrieren.
In [52] ist mit dem Programm feder_ani.m eine Lösung angegeben, in Pendel_q.m zu
Kapitel 5 ist die Feder in ein Animationsmodell eingebunden.
72 1 Einführung in MATLAB
Bild 1.23: Zum Übungsvorschlag: Un- und verformte Feder mit Bezeichnungen
Für das einfache Fachwerk ließ sich ein geschlossener Polygonzug erzeugen, so dass die Plot-
Koordinaten einfach anzugeben waren. Ist dies nicht mehr möglich, dann liefert die Functi-
on gplot Generierungsmöglichkeiten aus einfach zu erstellender Information. gplot erstellt x , y -
Vektoren zur grafischen Darstellung eines Gitternetzes mit n Knoten nach grafentheoretischen
Gesichtspunkten. Hierzu müssen in einer B OOLEschen Matrix (z. B. A ) die Knotenverbingun-
gen des i-ten mit dem j-ten Knoten (ai, j ) einschließlich des Koordinatenursprungs (a1,1 ) und in
einer weiteren zweispaltigen Matrix die x, y-Koordinaten (Längenangaben) festgeschrieben wer-
den. Diese Beschreibung ist nicht eindeutig; es werden Verbindungen mehrfach gezeichnet, was
von der Struktur der Verbindungen abhängt. In A können Verbindungen oder Knoten mehrfach
benannt werden. Wir wollen dies auf das bereits behandelte Fachwerk anwenden. Es sind die
Matrix der Verbindungen und die der Knoten-Koordinaten zu erstellen.
Matrix A der Verbindungen i → j (eine Möglichkeit), i = j = 1 Koordinatenursprung:
⎡ ⎤
1 1 0 Koordinatenursprung Knoten 1, Knotenverbindung: 1 → 2
⎢ 0 0 0 ⎥ keine Verbindungen 2 → 2
A =⎢ ⎣ 0 1 0 ⎦
⎥
Knotenverbindung: 3 → 2
1 1 1 Knotenverbindungen: 4 → 1, 4 → 2, 4 → 3
Knoten-Koordinaten:
⎡ ⎤
0,0 0,0 Knoten 1
⎢ 2,2 0,0 ⎥ Knoten 2
xy = ⎢
⎣ 2,2 4,2
⎥
⎦ Knoten 3
1,1 1,0 Knoten 4
y
6zM , y xM , z 3 6 xk = R cos Θk
yM , x O
Breite
I * R yk = R sin Θk
3
+ 2 x
+ 1
Θk+1 Θk
der Zylinderlängsachse und die yM -, zM -Achsen den Querachsen der Zylinderelemente zugeord-
net werden. Gedanklich führen wir eine Umbenennung der Achsen, wie in Bild 1.24, in (x, y, z)
durch. Wir betrachten die Erstellung eines Zylinders der Länge 2 , der im Abstand 1 auf der
z-Achse nach Bild 1.24 beginnt. Der Zylinder besteht aus dem äußeren Mantel sowie den bei-
den Stirnflächen, evtl. noch mit einer Bohrung für ein gleich großes Anschlusselement versehen.
Darüber hinaus soll eine optisch günstige Nullmarke zur Beobachtung von Drehschwingungen
festgelegt und grafische eingebracht werden. Im Folgenden beschreiben wir die Vorgehensweisen
für die drei Elemente: Mantelfläche, Stirnflächen, Null-Marke.
xz=Rz*cos(theta); % x-Koordinaten
yz=Rz*sin(theta); % y-Koordinaten
zz=[l1;l1+l2]*ones(1,size(xz,2)); % z-Koordinaten,[rechts; links]
wobei cz die einheitliche Zylinderfärbung festlegt. Bild 1.25 a zeigt das bisherige Ergebnis
10 10
5
5
0
0
−5
−5
−10
10 5
5
10 0 10
0
−5 −5
5 5
−10 −10
0 0
Stirnflächen
Die Stirnfläche setzt sich wie in Bild 1.26 aus approximierten Kreisausschnitten (Polygonzug)
zusammen, wobei wir von einem Anschlusselement bzw. Hohlzylinder mit dem inneren Radius
r ausgehen. Der Polygonzug 1, 2, 3, 4 nach Bild 1.26 beider Stirnflächen des Zylinders hat die
y
3s 6
* r
2 s R
4 s
s
1
x
Θk+1 Θk
x-Koordinaten
xk1 = r cos Θk , xk2 = R cos Θk , xk3 = R cos Θk+1 , xk4 = r cos Θk+1
1.7 Animation von 2D- und 3D-Modellen 75
mit Θk+1 = Θk + ΔΘ , was wir – ergänzt um die y-Koordinaten – als dyadisches Produkt
⎡ ⎤ ⎡ ⎤
r r
⎢ R ⎥ ⎢ ⎥
x =⎢ ⎥ cos Θk , cos Θk+1 , y = ⎢ R ⎥ sin Θk , sin Θk+1
⎣ R ⎦ ⎣ R ⎦
r r
schreiben. N − 1 solcher Elemente ergeben die Stirnflächen nach Bild 1.25 b, die sich mit den
folgenden MATLAB Anweisungen erzeugen lassen:
r=2; % Innen-Radius
c=2; % Farbinformation
for k=1:N-1 % N-1 Sektoren
x=[r R R r]’*cos(theta(k:k+1)); % Stirnflächen-Sektoren
y=[r R R r]’*sin(theta(k:k+1));
surf(zz(1)*ones(size(x)),x,y,c*ones(size(x))); % Stirnfl. vorne
hold on
surf(zz(2)*ones(size(x)),x,y,c*ones(size(x))); % Stirnfl. hinten
end
Für die Null-Marke wählen wir eine einfache Rechteckfläche der Breite r mit hervorgehobener
Umrandung, vgl. Bild 1.25 b. Sie ist in der neuen Null-Lage an der Zylinderaußenwand positio-
niert, macht aber die Drehung nicht mit.
10
−5
−10
10
5
0 10
−5 5
−10
0
d. h. zur ersten Spalte gehört die Starrkörperbewegung mit ϕmax = 0.25 rad, zur zweiten Spalte
die gegenseitige Verdrehung der Zylinderstirnflächen mit ϕmax = 0.5 rad. Überlagern wir den
einzelnen Moden (Spalten von V ) das Zeitsignal
2π 2π
w(tk ) = a sin (k ), k = 0, 1, 2 . . . , kmax , tk = k , a Verstärkung,
kmax kmax
dann erhalten wir die Winkelfolge
ϕn1 k
Φ n (k) = a sin (2π ), n = 1, 2 .
ϕn2 kmax
Hiermit wird jedes zu bewegende Element des Zylinders beaufschlagt. Für die Bewegung der
Zylindermantelfläche bedeutet dies: Φ n (k) geht additiv in den Sektorvektor Θ jetzt aber getrennt
für beide Stirnseiten ein, wie im Programmsegment zur Mantelfläche:
% theta Sektoren-Vektor % bereits berechnet
V=[0.25 0.25 ;0.25 -0.25]; % Max.-Verformungen, zwei Moden
kmax=30; a=1; h=2*pi/kmax; % Schritte, Verst., Schrittw.
for k=0:kmax % Bewegungsschritte
w=a*sin(k*h); % Anregungssignal
ang=V(:,1)*w; % Winkelinkrement, Mode 1
costh1=cos(theta+ang(1)); % Abkürzungen
costh2=cos(theta+ang(2));
sinth1=sin(theta+ang(1));
sinth2=sin(theta+ang(2));
ten Programmteile sind Bestandteil des Programmpakets [52] mit der Struktur nach Bild 1.29.
Es setzt sich aus dem Hauptprogramm zyl_3DH.m sowie der Function zyl_3D.m, in die
draw_zyl eingebettet ist, zusammen.
zyl_3DH.m zyl_3D.m
- - draw_zyl.m
Modalmatrix (Drehung) Zylinder-Initial.
Speicher-, Grafik- Grafik-
Zeitprofil
Eigenschaften Elemente
Animation
Hauptprogramm Function
erstellt. Die jeweilige Volumendarstellung kann danach mit einer der Anweisungen
mesh(x,y,z) % Gitterdarstellung
surf(x,y,z) % Raumfläche
erfolgen. Diese Grundformen lassen sich durch anschließende Bearbeitung einzelner oder aller
Koordinatensätze modifizieren. So können mit dem cylinder-Objekt allgemeinere Rotationskör-
per erstellt werden. Dazu wird die Kontur des Ausgangsobjekts in Form der Radien in einem Pa-
rametervektor als Eingang formuliert. Die damit erhaltenen Elemente sind äquidistant auf der Ro-
tationsachse (z-Bereich [0,1]) aneinandergereiht. Durch Anpassung der x-,y-,z-Werte sind dann
78 1 Einführung in MATLAB
die Koordinaten des gewünschten Modells zu erstellen. Dies kann mit den Modellen in Bild. 1.30
und den Programmschritten:
figure(1)
subplot(3,4,1)
mesh(x1,y1,z1,’EdgeColor’,’k’); % Zylindermantel
axis equal, axis off
subplot(3,4,2)
mesh(x2,y2,2*z2,’EdgeColor’,’k’); % Kegel
axis equal, axis off
subplot(3,4,3)
mesh(x3,y3,z3,’EdgeColor’,’k’); % Kegelstumpf
axis equal, axis off
subplot(3,4,4)
mesh(x4,y4,z4,’EdgeColor’,’k’); % Ring, Hohlwelle
axis equal, axis off
Der Koordinatenursprung liegt ursprünglich im Zentrum der Basisfläche, die z-Achse ist die
Rotationsachse. Die Rotationsachse kann durch Vertauschen der Koordinatensätze u. a. im mesh-
Aufruf auch beliebig zugeordnet werden. Zur Größenänderungen und/oder Verschiebungen wer-
den die Koordinatensätze additiv und/oder multiplikativ verändert, vgl. Kegel im obigen Pro-
gramm. Änderungen der Orientierungen lassen sich auch nachträglich mit der Function rotate
erreichen, die Grafikobjekte können damit um beliebige Winkel im Raum gedreht werden.
Einfach-Pendel
Das Pendel-Modell besteht aus der Aufhängung, dem Lager-Element, dem Pendelstab mit der La-
geranbindung, dem Lagerzapfen und der Kugel als Pendel-Endmasse. Bis auf die Kugel wurden
nur Zylinderelemente verwendet.
Die Aufhängung des Pendels besteht aus aneiandergereihte Zylinder-Elemente mit dem Radi-
envektor [0.3 1 7 7] , dies führt auf:
[x,y,z] = cylinder([0.3 1 7 7]); % Zylinderelemente
al=0.2; % Lagerversatz
h0=surf(x,y,z+al); hold on % Grafik der Zylinderelemente
set(h0,’EdgeAlpha’,0,’FaceColor’,0.9*[1 1 1]); % Farbgebung
Der Lagerversatz al sorgt dafür, dass der Koordinatenursprung ins Pendellager fällt. Das
Lager stellen wir als Hohlzylinder der Länge 0.5 LE dar. Die Drehachse ist die y-Achse. Dement-
sprechend ist das Lager zu orientieren. Dies erreichen wir im unteren Programmsegment durch
Vertauschen und Verschieben der Koordinatensätze in der surf-Anweisung.
[x,y,z]=cylinder(0.3*[1 1 0.6 0.6 1]); % Ausgangsform des Lager
z([2,3],:)=0.5; % Zylinderlänge + Stirnfläche
z([4,5],:)=0; % fehlende Stirnfläche + Bohrung
hz=surf(y,z-0.25,x); % Lager in endgültiger Position
set(hz,’EdgeColor’,’k’,’FaceColor’,’k’); % Farbanlage
Im nächsten Schritt betrachten wir den Lager-Zapfen und das Pendel mit der Orientierung des
obigen Lagers:
80 1 Einführung in MATLAB
Gekoppelte Parallelpendel
Grundsätzlich können die obigen Programmschritte direkt übernommen werden. Zweckmäßig
ist dabei die Einbindung in einzelne Functions – z. B. Feder –, wie in P_Pendel.m [52] er-
folgt. Die Pendelaufhängung, das Lagerelement sowie die Federanlenkung sind hier Zylinder.
Zwischen den beiden Pendeln besteht der Abstand von 6 LE. Die Kopplung erfolgt über eine
Schraubenfeder. Vorausgesetzt wird, dass deren Durchmesser (2 r f ) infolge Längs-Verformungen
konstant bleibt. Neu ist lediglich die 3D-Darstellung der Koppelfeder, wir geben sie deshalb an:
1.8 Computeralgebra unter MATLAB, die Symbolic Math Toolbox 81
Die Symbolic Math Toolbox ermöglicht die symbolische, d. h. exakte Behandlung mathemati-
scher Probleme in der MATLAB-Umgebung. Wir unterscheiden arithmetische (numerische) Al-
gorithmen und algebraische (symbolische) Algorithmen. Der grundlegende Unterschied ist in
Tabelle 1.1 angedeutet. In der linken Hälfte ist der bekannte Ablauf einer numerischen Rech-
nung dargestellt. In der rechten Hälfte wird mit symbolischen Variablen, die zunächst vereinbart
werden müssen, gearbeitet.
Basis der Toolboxen ist ab der Version 2008b7 das Computeralgebrasystem MuPAD (Mul-
ti Processing Algebra Data Tool) mit der MuPAD Engine. Ursprünglich von der MuPAD-For-
schungsgruppe an der Universität Paderborn entwickelt. Heute ausschließlich Bestandteil der
Symbolic Math Toolbox.
Zuordnung Operationen
Analysis Differenziation, Integration, Grenzwertbildung,
Summation, TAYLOR-Polynome
Lineare Algebra Determinante, Inverse, Eigenwerte,
Singulärwerte SVD, kanonische Formen
Lösen von Gleichungs- Symbolische und numerische Lösungen linearer
systemen algebraischer Gleichungen und Differenzialgleichungen
Spezielle mathematische Spezielle Funktionen der klassischen angewandten
Funktionen Mathematik, z. B. Cos-Integral
Variable Exaktheits-Arithmetik Numerische Auswertung mathematischer
Ausdrücke unterschiedlicher Genauigkeit
Transformationen Fourier-, Laplace-, z-Transformationen
mit zugehörigen inversen Transformationen
Einen ergänzenden Überblick geben die MATLAB-Demo-Beispiele. Sie werden mit der Com-
mand-Zeile >> symdemos im Help Browser einsehbar und lassen sich hieraus auch starten.
Die zugehörigen M-Files sym...demo.m stehen im MATLAB-Verzeichnis ...\toolbox\sym-
bolic.
1.8.1 Online-Hilfe
Einen Überblick bezüglich des vollständigen Function-Angebots - gegenüber Tabelle 1.2 - erhal-
ten wir mit
1.8 Computeralgebra unter MATLAB, die Symbolic Math Toolbox 83
⇒ >> help symbolic oder >> helpwin symbolic oder >> doc symbolic
Die Symbolic Math Toolbox overloads viele numerische Functions von MATLAB, d. h. die sym-
bolische und die numerische Function hat den gleichen Function-Namen. Wenn solche existieren,
dann lautet der Online-Hilfe-Aufruf bezüglich der symbolischen Function help sym/function
Beispiel: >> help diff % numerische Version von diff
>> help sym/diff % symbolische Version von diff
Ob zu einer numerischen Version eine symbolische existiert, wird am Ende der Hilfe-Ausgabe,
z. B. für >> help diff durch
....... .......
Overloaded methods
help sym/diff.m
help char/diff.m
angezeigt; es existieren (je nach implementierten Toolboxen) hier zwei weitere diff Befehle und
zwar der Klasse (class) sym und char.
Durch die Eingabe von syms werden alle vereinbarten symbolischen Variablen angezeigt. Ein
symbolischer Ausdruck f lautet
>> f = sym(’ u*zˆ2 + v * z + w ’).
Die symbolischen Elemente einer Matrix bzw. Vektors generiert man wie folgt:
>> A=sym(’a’,[2,3]) >> A=sym(’a%d%d’,[2,3]) >> b=sym(’b_%d_%d’,[1,3])
dabei steht das erste Argument für den Elementnamen mit einer Darstellungsvereinbarung:
A = A = b =
[ a1_1, a1_2, a1_3] [ a11, a12, a13] [ b_1_1, b_1_2, b_1_3]
[ a2_1, a2_2, a2_3] [ a21, a22, a23]
Allgemein: Steht rechts vom Gleichheitszeichen eine symbolische Größe, dann ist auch die linke
Seite (ohne vorangegangene Vereinbarung) ein symbolisches Objekt, z. B.
>> g = 5 % class(g) double
>> a = sym(’a’); g = a % class (g) sym .
Das Auffinden aller symbolischer Variablen in einem Ausdruck f erfolgt mit
>> findsym(f)
Standardmäßig benutzt die Symbolic Math Toolbox eine exakte Symbolik-Arithmetik. Wer-
den numerische Variable mit der sym Function vereinbart, dann wird die rationale Arithmetik
aufgerufen und konvertiert eine Variable sowie eine Matrix vom Typ double in die symboli-
sche Form.
Beispiel: gegeben sei die Matrix A, gesucht ist die symbolische Form S
>> A = [ 1.1000 1.2000 % class double
2.1000 2.2000 ];
>> S = sym(A)
S = % class sym
[ 11/10, 6/5 ]
[ 21/10, 11/5 ]
Die Elemente von S werden durch rationale Zahlen, d. h. Brüche mit Integerzahlen (hier klein),
dargestellt. Existieren keine rationale Zahlen, so können sie durch Gleitkommazahlen (floating-
point) in symbolischer Form dargestellt werden. Die Matrix
>> E = [ exp(1) pi ; sqrt(2) rand]
liefert die numerische Form (class(E) double)
E =
2.7183e+000 3.1416e+000
1.4142e+000 2.3114e-001
und ihre symbolische Form
>> sym(E) entspricht >> sym(E,’r’)
ans =
[3060513257434037/1125899906842624, pi]
[ 2^(1/2), 2953193568373273/4503599627370496]
1.8 Computeralgebra unter MATLAB, die Symbolic Math Toolbox 85
Optional kann durch ein zweites Argument im Aufruf von sym zwischen vier Darstellungen
unterschieden werden:
Darüber hinaus steht unter MATLAB die Variable Precision Arithmetic (vpa), in der Regel zur
hochgenauen Berechnung symbolischer Ausdrücke, zur Verfügung. Es können symbolische Zah-
lenwerte im Gleitkommaformat mit vorgebbarer Stellenzahl dargestellt und bearbeitet werden;
z. B.: vpa(pi*7.38). Das Ergebnis erscheint standardmäßig mit 32 Stellen. Eine abweichende
Stellenzahl iz wird mit
digits(iz), z. B. >> digits(40)
berücksichtigt.
ans= 2*a*xˆ2
>> diff(f,’a’,2) % ∂ 2 f / ∂ a2 , zweite partielle Ableitung nach a
ans= 2*xˆ2
Anwendungsbeispiele:
>> syms x y % Vereinbarung der sym. Größen
>> diff(xˆ3) % Differenziation nach x
ans =
3*xˆ2
>> int(sin(x),0,pi/4) % Integration bezüglich x
ans =
-1/2*2ˆ(1/2)+1
>> s = int(exp(-xˆ4),0,1) % es gibt keine exakte Lösung
s =
(pi*2ˆ(1/2))/(4*gamma(3/4)) - igamma(1/4, 1)/4 % siehe; help gamma
>> sn = subs(s) % Konvertierung sym → double
sn =
8.4484e-001
>> int(int(xˆ2 + yˆ2,y,0,sin(x)),0,pi) % Doppel-Integral
ans =
piˆ2 - 32/9 % 0π 0sin x x2 + y2 dx dy
>> double(ans) % Konvertierung sym → double
ans =
6.3140e+000
>> taylor(exp(x)*sin(x),8) % Maclaurin-Polynom
ans =
- xˆ7/630 - xˆ6/90 - xˆ5/30 + xˆ3/3 + xˆ2 + x
>> limit(1/x,x,0,’left’) % Grenzwert
ans =
1.8 Computeralgebra unter MATLAB, die Symbolic Math Toolbox 87
-inf
>> jacobian([exp(x*y) xˆ2*y],[x y]) % JACOBI-Matrix
ans =
[ y*exp(x*y), x*exp(x*y)]
[ 2*x*y, xˆ2]
>> pretty(s(1))
2 1/2
b + (b - 4 a c)
- -------------------
2 a
Die symbolische Größe s enthält standardmäßig 32 signifikante Stellen, sie lassen sich mit digits
ändern, z. B.
>> digits(40), s = solve(’x + 2 = exp(xˆ2)’)
s =
-0.5876088279761154839157886666798348798128
Beispiel für die Lösung eines linearen Gleichungssystems mit dem Backslash-Operator, vgl.
Abschn. 1.4.4. Die Koeffizientenmatrix ist eine H ILBERT-Matrix (vgl. help hilb):
>> As=sym(hilb(3)); >> bs=sum(As,2);
>> xs = (As\bs)’
xs = [ 1, 1, 1].
ẏ + y = t et
MATLAB erkennt die unabhängige Variable t als Standard-Variable. Tritt z. B. x als Parameter in
der Gleichung auf, dann müssen wir
>> y = dsolve(’Dy + y = x*t*exp(t)’,’t’)
schreiben.
Es sollen die Schwingungen y(t) für die Anfangswerte y(0) = 0, ẏ(0) = 0 zum Zeitpunkt t = 0
sowie für die Parametersätze
a) ω0 = 15 rad/s, Ω = 16 rad/s, D = 0,005
b) ω0 = 10 rad/s, Ω = 10 rad/s, D = 0,0
ermittelt werden. Wir schreiben das M-File bei_dgl.m in [52]:
Danach werden die Lösungen y(t) einer Differenzialgleichung 2. Ordnung (1.1) entsprechend
dem Operator D2 zu den Parametern nach a), b) ermittelt; vgl. Zeile 5 und 14. Im gedämpften
Fall a) ist die Lösung schon recht umfangreich. Unter Umständen lässt sie sich mit dem simple
Befehl wie in den Zeilen 6, 15 vereinfachen. Mehrfachanwendung simple(simple(..)) kann
weitere Vereinfachungen liefern! Darüber hinaus lassen sich mehrfach auftretende Ausdrücke
mit 7 subexpr(y) finden und damit die Lösung übersichtlicher dargestellen werden. Mit pretty
erfolgt eine Bildschirmausgabe, mit latex wird ein Ausdruck für das Textverarbeitungssystem
TEX erzeugt. In den Zeilen 10, 16 werden die symbolischen Parameter durch ihre numerischen
Werte ersetzt. Die Ausdrücke sind weiterhin vom Typ sym, da die symbolische Variable t noch
enthalten ist. Schließlich können mit der Plot-Function
ezplot(funktion,[t_anfang,t_end],figure_nr)
– oder wie bisher mit plot, wenn t substituiert wird – die Ergebnisse grafisch dargestellt werden;
vgl. Bild 1.32. Das Plot-Fenster lässt sich natürlich mit den bekannten Befehlen xlabel, legend,
title vervollständigen.
Der ungedämpfte Schwinger b) befindet sich in Resonanz, d. h. die Erregerkreisfrequenz Ω
stimmt mit der Eigenkreisfrequenz ω0 überein. Dementsprechend enthält die Lösung säkulare
Terme
1
y(t) = t sin ω0t, Ω = ω0 ,
2ω0
was auch der Zeitverlauf in Bild 1.322 widerspiegelt.
Soll darüber hinaus auch die Geschwindigkeit ẏ(t), z. B. für eine Darstellung in der Pha-
senebene, ermittelt werden, kann das Wegsignal y(t) nachträglich differenziert ( vgl. Zeile 21
diff(y,t)) werden oder man bearbeitet von Anfang an die äquivalenten Differenzialgleichun-
gen erste Ordnung
ẏ1 = y2 , y1 = y, y2 = ẏ
(1.2)
ẏ2 = −ω02 y1 + cos ω0t, y1 (0) = 0, y2 (0) = 0
0.06 1
Resonanz
0.04
Auslenkung y/m
Auslenkung y/m
0.5
0.02
0 0
−0.02
−0.5
−0.04
a) b)
−0.06 −1
0 10 20 0 5 10 15
Zeit t/s Zeit t/s
dieses Problem angehen. Um später die Ergebnisse beurteilen zu können, geben wir sie teilwei-
se vorab an. Die Matrix A besitzt einen einfachen Eigenwert λ1 und einen doppelten λ2,3 der
Vielfachheit ρ = 2. Der zugehörige Rangabfall bzw. Defekt d2,3 = 3 − rang(λ2,3E − A ) ist eins.
Demnach existiert zu λ2,3 nur ein (linear unabhängiger) Eigenvektor. Der fehlende, vgl. [9], kann
rekursive aus
(λ2,3E −A
A)vv3 = −vv2 , v 2 berechneter Eigenvektor (1.3)
ermittelt werden. Mit der kompletten Modalmatrix V = (vv1 , v 2 , v 3 ) folgt die J ORDAN-Matrix
⎡ ⎤
λ1 0 0
J = V −1A V = ⎣ 0 λ2 1 ⎦ . (1.4)
0 0 λ3
Um nun einmal die Unterschiede einerseits bezüglich einer numerischen und andererseits ei-
ner symbolischen Rechnung aufzuzeigen, werden wir beide Vorgehensweisen parallel behandeln.
Hierzu dient der unten aufgelistete Programm-Code sym_eig1.m aus [52]
Erläuterungen zum obigen Programmcode und den Ergebnissen: Ein übereinstimmendes Ergeb-
nis erhalten wir bezüglich des Ranges und der Determinanten von A ( Zeile 5, 6, 14, 15). Die
numerische Bestimmung der Eigenwerte (Dn), der Eigenvektoren (Vn) und der Konditionszahl
(sn) erfolgt in Zeile 8 mit dem Ergebnis
Vn =
-4.740998230350174e-001 -4.082482835849408e-001 4.082482973427853e-001
8.127425537743154e-001 8.164965830443175e-001 -8.164965788111345e-001
-3.386427307392985e-001 -4.082482931096022e-001 4.082482878181235e-001
Dn =
-9.999999999999840e-001 0 0
0 9.999999766694329e-001 0
0 0 1.000000023330555e+000
D. h. zum doppelten Eigenwert 1 existiert nur ein Eigenvektor, der fehlende (vv3 ) muss aus (1.3)
mit singulärer Koeffizienten-Matrix (E E −A A) zu λ2,3 entsprechend den Zeilen 25 - 27 berechnet
werden. Das Ergebnis ist nicht eindeutig, es wird in Abhängigkeit einer der Lösungskomponen-
ten, hier z=z1, dargestellt. Die symbolische Variable wird mit dem findsym Befehl in Zeile 28
ermittelt. Wir setzen sie willkürlich zu eins (Zeile 29). Abschließend folgt mit (1.4) eine Kontroll-
Rechnung. Dazu ist die mit eig berechnete unvollständige Modalmatrix um v 3 zu ergänzen (Zeile
1.8 Computeralgebra unter MATLAB, die Symbolic Math Toolbox 93
31) und damit (1.4) auszuführen. Die zugehörige J ORDAN-Matrix Je (Zeile 32) bestätigt die
Richtigkeit.
Alle Eigenwerte, die (1.4) erfüllen, können einfacher mit der Function jordan (Zeile 35) direkt
berechnet werden. In VJ stehen die Eigenvektoren und in J die zugehörige J ORDAN-Matrix. Auf-
grund unterschiedlicher Skalierung unterscheiden sich beide Ergebnisse optisch. Fazit: Derartige
Sonderfälle lassen sich nur mit Hilfe der Computeralgebra lösen. Praktisch, d. h. numerisch, exis-
tieren keine Mehrfacheigenwerte. Es sei denn, man korrigiert das numerische Ergebnis, wenn
man weiß, dass z. B. Nulleigenwerte mehrfach auftreten.
a=5;
94 1 Einführung in MATLAB
Auf die Formulierung in voneinander abhängigen Koordinaten mit impliziten Bindungen gehen
wir in Kapitel 5 ein. Hier betrachten wir zunächst nur Formulierungen in Minimalkoordinaten,
die die holonomen-skleronomen oder -rheonomen Bindungen, vgl. [49], [56], [67] erfüllen.
Die klassischen Vorgehensweisen unterscheiden zwischen synthetischer und analytischer Me-
thode. Wir beschreiben die Unterschiede stichwortartig anhand zweier bekannter Vorgehenswei-
sen:
• Totale Ableitung der Vektorfunktion f (qq(t), t) zweier Veränderlicher nach dem Skalar t
d ∂ f d q (t) ∂ f ∂f
f (qq(t), t) = + = J q̇q(t) + . (2.4)
dt ∂qq(t) dt ∂t ∂t
mit der unabhängigen Variablen t – hier der Zeit – sowie dem Vektor der abhängigen Variablen x
mit der zeitlichen Ableitung ẋx. Vielfach ist x der Zustandsvektor, z. B. x = [ q T , q̇qT ]T . Gehen wir
von den oben angesprochenen Methoden (z. B. N EWTON -E ULER-Formalismen), mit denen Be-
wegungsgleichungen dynamischer Mehrkörpersysteme mit f Freiheitsgraden aufgestellt werden,
aus, dann erhalten wir im Allgemeinen nichtlineare Differenzialgleichungen zweiter Ordnung in
Normalform:
mit dem f -Vektor der verallgemeinerten Koordinaten q (t), der positiv definiten und symmetri-
schen f × f -Massenmatrix M = M T > 0 , dem f -Vektor f (qq, q̇q, f E , t) der gyroskopischen, dis-
sipativen, eingeprägten Kräfte und Momente u. a. aus Dämpfer, Feder, Gravitation, Magnetfeld
usw. sowie der explizit von der Zeit t abhängigen äußeren Erreger- bzw. Störfunktion f E (t). We-
sentlich ist, dass die Beschleunigung stets linear auftritt, so dass bei mechanischen Systemen
(2.5) immer auf die Form (2.6) gebracht werden kann.
In vielen praktischen Fällen hängen g , ḡg bzw. M , f nicht explizit von der Zeit ab, man spricht
u. a. von einer autonomen, im Gegensatz zur nichtautonomen Bewegungsgleichung, bei der die
Zeit explizit auftritt.
2.3 Grundlagen
2.3.1 Kinematik starrer Körper
Zur mathematischen Formulierung der Bewegungsgleichungen, z. B. eines Modells aus einem
oder mehreren starren Körpern ist die Beschreibung von Lage, Orientierung sowie deren zeitli-
chen Ableitungen, d. h. Geschwindigkeit und Beschleunigung, ohne Berücksichtigung der ein-
wirkenden Kräfte und Momente, von grundlegender Bedeutung. Diese Beziehungen lassen sich
98 2 Modellbildung
einerseits physikalisch anschaulich [49] oder andererseits rein formal [9] gewinnen. Da wir die
Ausdrücke symbolisch mittels Computeralgebra unter MATLAB auswerten wollen, erscheint der
formale Weg der geeignetere. Zunächst betrachten wir den einzelnen freien starren Körper nach
Bild 2.1 mit dem Bezugspunkt P sowie einem beliebige Punkt S. Wir legen zwei rechtwinkli-
ge (kartesische) Koordinatensysteme zugrunde: das Inertialsystem (I) mit dem Ursprung in O
und das körperfeste Koordinatensystem (K) mit dem Ursprung in P. Das Inertialsystem ist raum-
fest; die Basisvektoren (Einheitsvektoren) von (I) ändern, im Gegensatz zu denen von (K), ihre
Orientierung nicht.
Alle absoluten zeitlichen Ableitungen beziehen sich auf das Inertialsystem in dem Impuls-
und Drallsatz gelten. Der relative Abstand |rr PS | in (K) ist konstant, die Richtung ändert sich
während der Bewegung des Körpers gegenüber (I), wie in Bild 2.1 zu t1 angedeutet.
Den Ortsvektor r S schreiben wir zunächst im (I)-System an:
Ir S = I r P + I r PS , r = [ r1 , r2 , r3 ]T ∈ R3 , (2.7)
wobei der linke Index stets die verwendete Basis, der rechte die Relativität angibt, wobei wir 0
nicht schreiben, d. h. r 0P → r P . Die Verschiebung (Translation) des Bezugspunktes P gegenüber
kurz
(I) wird durch I r P , die Orientierung von I r PS durch eine Drehung festgeschrieben. Ist die Ab-
bildungsvorschrift der Drehung T IK , die K r PS in die Basis von (I) überführt, bekannt, dann gilt
auch
Ir S = I r P + T IK K r PS , T IK ∈ R3,3 ; (2.8)
I r PS = T IK K r PS . (2.9)
2.3.1.1 Drehtmatrix
Mit Hilfe der Drehmatrix (siehe auch Drehtensor in [67]) T können Tensoren und Vektoren in
das gewünschte Koordinatensystem transformiert werden; z. B. gilt:
• T IK : Transformation von (K) nach (I) → I r PS = T IK K r PS
2.3 Grundlagen 99
γ
Kz Kx
K r1 =
OCC 6I
z
6K z
C
Kz 9
Kz , Kz
C M C
C r
C
C 6
I 3
6K r3 Kx K r2
?C
Ky
C C
:
β
C I x, K x
C Ky
C - - K r1 / ? CWC
α I r2 Iy
9
Ky , Ky
Ky
K x
zusammen. Diese einmal gewählte Reihenfolge muss beibehalten werden; sie ist nicht vertausch-
bar. Die Elementardrehungen erlauben es, durch die vielfältigen Kombinationsmöglichkeiten für
jede technische Aufgabe, z. B. Kreiseltheorie, Flugmechanik, eine geeignete Drehmatrix aufzu-
bauen.
Wählt man beispielsweise die Drehungen um die Achsen in der Reihenfolge zu x − y
− z
,
wie in Bild 2.2, so handelt es sich um die bekannten K ARDAN-Winkel, vgl. [9], [49]. Zur an-
schaulichen Deutung dieser Elementardrehungen, es sind ebene Drehungen, transformieren wir
schrittweise den Vektor
Ir = [ I r1 , I r2 , I r3 ]T −→ Kr = [ K r1 , K r2 , K r3 ]T .
Die Teiltransformationen der ebenen Drehung sind in Bild 2.2 dargestellt. Für die Elementar-
drehung α um die I x-Achse liest man die zugehörige Transformation
⎡ ⎤⎡ ⎤ ⎡
⎤
1 0 0 I r1 K r1
⎣ 0 cos α sin α ⎦ ⎣ I r2 ⎦ = ⎣ K r2
⎦ , → T α I r = K r
(2.12)
0 − sin α cos α
I r3 K r3
ab. Führt man anschließend die Drehung β um die K y
-Achse (Knotenlinie) durch, dann folgt
⎡ ⎤⎡
⎤ ⎡
⎤
cos β 0 − sin β K r1 K r1
⎣ 0 1 0 ⎦ ⎣ K r2
⎦ = ⎣ K r2
⎦ , → T β K r
= K r
(2.13)
sin β 0 cos β
K r3 K r3
100 2 Modellbildung
Die vollständige Drehtransformation setzt sich aus den drei obigen Elementardrehungen
! !
Kr = Tγ Tβ Tα I r = TKI I r , bzw. Ir = TαTTβTTγT K r = TIK K r , (2.15)
I ṙr S = I ṙr P + Ṫ
TIK T KI I r PS . (2.18)
TIK T KI = −(Ṫ
Ṫ TIK T KI )T = −T TKI .
TIK Ṫ (2.19)
und wird auch kurz Tildeoperator genannt. Alternativ kann das Kreuzprodukt in MATLAB mit
der Function cross gebildet werden. Damit lässt sich (2.18) rechnerorientiert formulieren
!
I ṙr S ω KI I r PS = I ṙr P + I ω × I r PS ,
= I ṙr P + I ω̃ (2.21)
mit e i als i-ten Einheitsvektor, z. B.: e T2 = (0, 1, 0). Gleichung (2.22) kann zu
⎡ ⎤
α̇
K ω = Tγ Tβ e 1 , Tγ e 2 , e 3 ⎣ β̇ ⎦ (2.23)
γ̇
γ̇
⎡ ⎤ (2.24)
α̇
= e 1 , T αTe 2 , T αTT βTe 3 ⎣ β̇ ⎦
γ̇
102 2 Modellbildung
folgt. Bezeichnet man nun die absoluten Geschwindigkeiten mit v , so gilt für (2.21)
!
IvS ω KI I r PS = I v P + I ω × I r PS ;
= I v P + I ω̃ IvS = I ṙr S . (2.25)
Eine Darstellung im körperfesten System erhalten wir, wenn wir auf (2.25) die inverse Transfor-
mation T KI anwenden und (2.9) einsetzen:
T KI I ṙr S = T KI I ṙr P + T KI Ṫ
TIK K r PS → K ṙr S = K ṙr P + T KI Ṫ
TIK K r PS , (2.26)
hierin ist
T KI Ṫ ω IK
TIK = K ω̃ (2.27)
ω IK
K ω̃ = T KI Ṫ
TIK = T KI Ṫ ω KI T IK .
TIK T KI T IK = T KI I ω̃ (2.28)
KvS ω IK K r PS .
= K v P + K ω̃ (2.29)
Beschleunigungen: Differenzieren wir (2.17) nach der Zeit, dann folgt die Absolutbeschleuni-
gung von S
I r̈r S = I r̈r P + T̈
TIK K r PS , K r PS = konst., (2.30)
I r̈r S = I r̈r P + T̈
TIK TKI I r PS . (2.31)
Schreiben wir für die absoluten Beschleunigungen r̈r = a , dann geht (2.32) über in
IaS ω˙ + ω̃
= I a P + I (ω̃ ω ω̃
ω )KI I r PS . (2.33)
T KI I r̈r S = T KI I r̈r P + T KI T̈
T K r PS
(2.34)
K a S = K a P + K (ω̃ ω˙ + ω̃
ω ω̃
ω )IK K r PS ,
2.3 Grundlagen 103
KaS ω IK K v P + K ω̃
= K v̇vP + K ω̃ ω IK (K ω̃
ω˙ IK K r PS + K ω̃ ω IK K r PS )
= K v̇vP + K ω̃ ˙ ω IK (K v P + K ω̃
ω IK K r PS + (K ω̃ ω IK K r PS )) (2.35)
ω IK K v S .
= K v̇vS + K ω̃
d d
ω = T KI
T KI I ω̇ (I ω ) = T KI (T TIK K ω )
dt dt
= T KI (T
TIK K ω̇ω + ṪTIK K ω ) (2.37)
ω + K ω̃
= K ω̇ ω IK K ω
T KI ω = K ω̇
I ω̇ ω.
der Lagefreiheitsgrade beträgt dann für eine räumliche bzw. ebene Bewegung nur noch
f = 6N − p, bzw. f = 3N − p . (2.38)
Die mathematische Beschreibung erfolgt durch f Differenzialgleichungen für die Bewegung und
p algebraische Gleichungen für die Reaktionskräfte.
Den Lagefreiheitsgraden werden f unabhängige Minimalkoordinaten (generalisierte, verall-
gemeinerte Koordinaten)
T
q = q1 , q2 , . . . , q f (2.39)
zugeordnet. Der Satz q , q̇q erfüllt die holonomen Zwangsbedingungen, siehe [56]. Damit lassen
sich dann die Ortsvektoren und deren zeitliche Ableitungen r (qq, t), ṙr (qq, q̇q, t) als Funktionen der
verallgemeinerten Koordinaten anschreiben. Die totale Ableitung nach t genügt
∂rr ∂rr
ṙr = q̇q + , r (qq, t), ṙr (qq, q̇q, t) (2.40)
∂qq ∂t
∂ ṙr ∂rr
= (2.41)
∂ q̇q ∂qq
abgeleitet werden kann.
In (2.39) sind Anteile der Translation und Rotation (z. B. K ARDAN-Winkel) enthalten. Orts-
vektor r und Winkelgeschwindigkeit ω eines holonomen Mehrkörpersystems sind einerseits ex-
plizit von der Zeit t abhängig oder andererseits unabhängig. Dies bedeutet für eine Zeitabhängig-
keit:
Ir = I r (qq, t)
∂I r (qq, t) ∂I r (qq, t)
I ṙr (q
q, q̇q, t) = I v (qq, q̇q, t) = q̇q + = J T (qq, t) q̇q + v̄v(qq, t)
∂qq ∂t (2.42)
dv̄v(qq, t)
I a (q
q, q̇q, q̈q, t) = J T (qq, t)q̈q +J˙T (qq, t)q̇q + = J T (qq, t)q̈q + āa(qq, q̇q, t)
dt
mit
∂ (JJ T (qq, t) q̇q) ∂JJ T (qq, t)
J˙T (qq, t) = q̇q + , (2.43)
∂qq ∂t
• Rotation: Winkelbeschleunigung
ω
∂ I ω̇ ∂ Iω
= (2.48)
∂ q̈q ∂ q̇q
Sind hingegen I r = r (qq) und I ω (qq, q̇q) nicht explizit zeitabhängig, dann entfallen in (2.42)-
(2.46) die partiellen Ableitungen nach t.
Damit müssen für gebundene Systeme die totalen Ableitungen d · /dt in den kinematischen
Beziehungen der vorangegangenen Abschnitte, z. B. für den Bezugspunkt P I ṙr P in (2.21), durch
(2.42), (2.46) ersetzt oder alternativ (2.42), (2.46) für den ausgewählten Bezugspunkt direkt an-
gesetzt werden.
Alle hier angegebenen Formulierungen, (2.42)-(2.47), eignen sich unmittelbar für eine sym-
bolische Umsetzung in MATLAB. Aus diesem Grund wurde in (2.43) – und auch später – kein
Tensor 3. Stufe ∂JJ T /∂qq eingeführt.
Beispiel 2.1: Doppelpendel mit räumlicher Bewegung
Das in Bild 2.3 skizzierte Doppelpendel bestehe aus den beiden homogenen zylin-
drischen Stäben der Längen 1 , 2 . In 0 bzw. P1 ist der Stab 1 angelenkt und kann
nur eine ebene Bewegung in der I y, I z-Ebene ausführen. In Q1 bzw. P2 befindet sich
zwischen den Stäben ein Kardangelenk, wodurch sich der Stab 2 entsprechend der Kar-
danwinkel α2 , β2 um die Achsen I x, K y
2 bewegen kann. Die Eigendrehung γ 2 um die
106 2 Modellbildung
K z2 -Achse ist blockiert, d. h. der Stab 2 kann sich nicht um seine Längsachse drehen.
Die kinematischen Beziehungen bezüglich Q1 und Q2 sind zu formulieren und sym-
bolisch mit Hilfe der Computeralgebra auszuwerten. Wesentlich dabei ist, dass sym-
bolische Differenziationen nur nach explizit auftretenden Variablen durchführbar sind.
Die totalen zeitlichen Ableitungen müssen deshalb, wie unter (2.42)-(2.47) eingeführt,
durch partielle Ableitungen nach den Variablen ersetzt werden.
Das System nach Bild 2.3 hat 3 Lagefreiheitsgrade. Als generalisierte Koordinaten
bieten sich nach Bild 2.3 an:
q = [ q1 , q2 , q3 ]T = [ α1 , α2 , β2 ]T . (2.49)
Stab 1: Die Bezugspunkte 0 und P1 fallen zusammen. Wir haben es mit einer ebenen
Bewegung um einen festen Drehpunkt zu tun. Im Einzelnen ergibt sich:
• Ortsvektor:
⎡ ⎤
0
q) = 1 ⎣ − sin α1 ⎦
I r Q1 (q (2.50)
cos α1
d ∂ I r Q1
I v Q1 (q
q, q̇q) = (I r Q1 ) = I ṙr Q1 = α̇1
dt ∂ α1
(2.51)
! ∂I r Q1 (qq)
= q̇q = J TQ1 (qq) q̇q
∂qq
d ∂ I r Q1 ∂ 2 I r Q1 2
I a Q1 (q
q, q̇q, q̈q) = I r̈r Q1 = (I v Q1 ) = α̈1 + α̇
dt ∂ α1 ∂ α12 1
(2.52)
! ∂ (JJ TQ1 (qq) q̇q)
= J TQ1 (qq) q̈q + q̇q
∂qq
• Winkelgeschwindigkeit:
Iω 1 = [ α̇1 , 0, 0 ]T (2.53)
• Winkelbeschleunigung , siehe auch (2.46):
ω 1 (q̈q) =
I ω̇ [ α̈1 , 0, 0 ]T
! ∂I ω 1 (q̇q) (2.54)
= q̈q = J R1 q̈q .
∂ q̇q
Hierin sind α1 , α̇1 , α̈1 bzw. q , q̇q, q̈q im Sinne der Computeralgebra symbolische
Variable; vgl. Abschn. 1.8.
2.3 Grundlagen 107
Stab 2: Der Ursprung des körperfesten Koordinatensystems auf (K2 ) legen wir in P2
nach Bild 2.3, so dass nach (2.8) für den Ortsvektor zu Q2
I r Q2 = I r P2 + T IK K r P2 Q2 , I r P2 = I r Q1 , K r P2 Q2 = [ 0, 0, 2 ]T (2.55)
gilt. Da keine Eigendrehung des Stabes 2 stattfindet, ist T γ 2 = E , womit sich die Dreh-
matrix nach (2.15) auf
reduziert. Die Absolutgeschwindigkeit von Q2 ergibt sich damit aus (2.25) oder (2.42)
I v Q2 (q
q, q̇q) = I vP2 ω KI2 I r P2 Q2 , I r P2 Q2 = TIK K r P2 Q2
+ I ω̃
! ∂ I r P2 (qq) ∂ I r P2 (qq)
= ω KI2 I r P2 Q2 ,
q̇q + I ω̃ = J TP2
∂qq ∂qq (2.57)
oder ∂I r Q2 (q
q)
= q̇q = J TQ2 q̇q,
∂qq
nach (2.24) zu
⎡ ⎤
0 0 ωy
ω KI2
I ω̃ = ⎣ 0 0 −ωx ⎦ (2.59)
I
−ωy ωx 0 KI 2
I a Q2 (q
q, q̇q, q̈q) = I a P2
+ I (ω̃ ω˙ 2 + ω̃ω 2ω̃
ω 2 )KI I r P2 Q2
! ∂ (JJ TQ2 (qq) q̇q) ∂ I r Q2 (2.60)
= J TQ2 (qq) q̈q + q̇q, J TQ2 =
∂qq ∂qq
108 2 Modellbildung
d I ω 2 (qq, q̇q) ∂ Iω 2 ∂ Iω 2
ω 2 (q̇q, q̈q) =
I ω̇ = q̈q + q̇q
dt ∂ q̇q ∂qq
(2.61)
1 ∂ Iω 2
= J R2 q̈q + q̇q
∂qq
mit den JACOBI-Matrizen bezüglich q und q̇q, vgl. (2.47).
MATLAB Code: (Auszug aus kin_NE.m [52], Kinematik-Teil), Fortsetzung
syms l2 alpha_2 beta_2 alpha_p2 beta_p2 alpha_pp2 beta_pp2
q = [alpha_1; alpha_2; beta_2]; % Minimalkoordinaten
q_p=[alpha_p1; alpha_p2; beta_p2]; % zeitl. Ableitung, Geschw.
q_pp=[alpha_pp1; alpha_pp2; beta_pp2]; % Beschleunigungen
%---- Drehmatrizen
T_a2 = [1 0 0; 0 cos(alpha_2) sin(alpha_2) % aus (2.12)
0 -sin(alpha_2) cos(alpha_2)]; % Elementardrehung alpha_2
T_b2 = [cos(beta_2) 0 -sin(beta_2); 0 1 0 % aus (2.13)
sin(beta_2) 0 cos(beta_2)]; % Elementardrehung beta_2
T_IK = T_a2.’*T_b2.’; % Drehmatrix (2.56)
%---- Ortsvektoren P2 -> Q2 % (2.55)
*[-0.15em] I_r_P2 = I_r_Q1;
K_r_P2Q2 = [0; 0; l2];
I_r_Q2 = I_r_P2 + T_IK * K_r_P2Q2;
J_T_Q2 = jacobian(I_r_Q2,q); % JAC.-M., Transl., Q2 (2.60)
J_T_P2 = jacobian(I_r_P2,q); % JAC.-M., Transl., P2 (2.57)
%---- Geschwindigkeitsvektoren S2
ab1 = [eye(3,1), T_a2(2,:).’, T_IK(:,3)]; % Abkürzung
I_om2 = ab1*[alpha_p2; beta_p2; 0]; % Winkelgeschw. (2.58)
I_v_Q2 = J_T_P2*q_p + ...
tilde_op(I_om2)*T_IK*K_r_P2Q2; % Abs.-Geschw. von Q2 (2.57)
% oder
% I_v_Q2 = J_T_Q2*q_p; % Abs.-Geschw. von Q2 (2.57)
%---- Beschleunigungen bezüglich Q2
J_R_2 = jacobian(I_om2,q_p); % JACOBI-M., Rotation (2.61)
I_om2_p = J_R_2*q_pp + jacobian(I_om2,q)*q_p; % Winkelbeschleunigung
I_om2_p = simple(simple(I_om2_p)); % (2.61)
I_a_Q2 = simple(simple(J_T_Q2*q_pp + ... % Abs.-Beschl. von Q2 (2.60)
jacobian(J_T_Q2*q_p,q)*q_p));
Für andere Bezugspunkte auf Stab 2, z. B. P2 , sind die zugehörigen Ortsvektoren und
damit die JACOBI-Matrizen aufzunehmen und wie oben die kinematischen Beziehun-
gen zu bilden. In kin_NE.m [52] sind zusätzliche und alternative Berechnungen der
kinematischen Beziehungen, die später zur Aufstellung der Bewegungsgleichungen
benötigt werden, angegeben.
2.3.2 Kinetik
Zur Herleitung der Bewegungsgleichungen, auf der Basis eines starren Körpers nach Bild 2.1,
mit Hilfe des Impuls- und Drallsatzes sowie der L AGRANGEschen Gleichung 2. Art, müssen zu-
2.3 Grundlagen 109
nächst die notwendigen Beziehungen zusammengestellt werden; vgl. [9], [29], [49], [64]. Dies
lässt sich auf Mehrkörpersysteme verallgemeinern, da hierbei von freigeschnittenen lokalen Kör-
pern ausgegangen wird.
p = m IvS (2.62)
mit der Masse m und der absoluten Geschwindigkeit v S des Schwerpunkts S (hier identisch mit
dem Massenmittelpunkt) in einer Inertialdarstellung erhalten wir für die Translationsbewegung
worin f (S) die Resultierende der auf den Schwerpunkt einwirkenden Kräfte ist. Diese Kräfte
setzen sich aus eingeprägten, d. h. arbeitleistenden Kräften f e und aus Zwangs- bzw. Reaktions-
Kräften f r infolge Bindungen, die keine Arbeit leisten, zusammen. Hierzu zählen u. a. auch
Gelenk- und Lagerkräfte. Mit (2.62) schreiben wir für m = konst. ausführlich
wobei die Absolutbeschleunigung des Punktes S nach (2.34) bzw. (2.35) mit den zeitlichen Ab-
leitungen nach (2.42), (2.46) einzusetzen ist.
mit dem Trägheitstensor I I (S) und der Winkelgeschwindigkeit I ω ist gleich den resultierenden
Momenten m = m e + m r (entsprechend den Kräften) einschließlich den Zwangsmomenten m r
aus den Bindungen ausgedrückt im Inertialsystem:
L
I L̇ = I m (S) . (2.67)
Der als symmetrisch vorausgesetzte Trägheitstensor I I (S) ist in der Regel zeitabhängig im Ge-
gensatz zu K I (S) im körperfesten System, so dass eine Formulierung im (K)-System vielfach
einfacher ist. Die Transformationsvorschrift für den Trägheitstensor erhalten wir ausgehend vom
110 2 Modellbildung
ablesen. Wie schon erwähnt, ist K I (S) konstant. Fallen darüber hinaus die körperfesten Koordina-
ten mit den Hauptachsen des starren Körpers zusammen, hat K I (S) Diagonalgestalt.
Den Drallsatz bezüglich (I) können wir damit auswerten. Zunächst betrachten wir den Term
(S)
L :
I L̇
(S) d (S) d
L
I L̇ = II Iω = T IK K I (S) T KI I ω
dt dt
(S)
= II ω + Ṫ
I ω̇ TIK TKI I I (S) I ω + I I (S) TIK Ṫ
TKI I ω (2.70)
= I I (S) I ω̇ ω KI I I (S) I ω ,
ω + I ω̃
Drall und Momente beziehen sich bisher auf S. Der Drallsatz hat danach im (I)- und (K)-System
denselben strukturellen Aufbau. Vielfach ist es zweckmäßiger, alle Größen auf P zu beziehen.
Hierzu sind u. a. die auf P bezogenen Momente zu ermitteln. Mit (2.65) finden wir
(P) (S)
Kf = Kf
(S)
(2.73)
Km = K m (P) − m K r̃r PSIK KaP + K ω˙ + ω̃
ω̃ ω ω̃
ω IK K r PS
Berücksichtigen wir noch den S TEINERschen Verschiebungsanteil, so erhalten wir den auf P
bezogen Trägheitstensor
(P)
KI = K I (S) + m K r̃r PS K r̃r TPS . (2.75)
(P) (P)
KI − m K r̃r PS K r̃r TPS ω
K ω̇ ω IK
+ K ω̃ KI − m K r̃r PS K r̃r TPS Kω
(2.76)
ω˙ IK K r PS + m K r̃r PS
+ K r̃r PS m K a P + m K r̃r PS K ω̃ K ω ω̃
(ω̃ ω )IK K r PS = K m (P)
(P)
KI ω
K ω̇ ω IK K I (P) K ω + m K r̃r PS K aP
+ K ω̃
(2.77)
ω IK K r̃r PS ) K r̃r TPS K ω = K m (P) .
ω IK − K ω̃
+ m ( K r̃r PS K ω̃
Der letzte Term auf der linken Seite verschwindet. Um dies zu erkennen, schreiben wir ihn um
(vgl. Entwicklungsätze für Kreuzprodukte)
dies ist das Kreuzprodukt des Vektors K r̃r PS K ω mit sich selbst. Damit lautet der Drallsatz für
einen beliebigen Bezugspunkt P im körperfesten (K)-System
(P)
KI ω
K ω̇ ω IK K I (P) K ω + m K r̃r PS K a P = K m (P) .
+ K ω̃ (2.78)
2.4 Newton-Euler-Methode
Anhand des Doppelpendels nach Bild 2.3 werden wir die Anwendung von Impuls- und Drallsatz
zeigen. Man spricht auch von der N EWTON -E ULER- Methode. Ihr liegen die freigeschnittenen
starren Körper, z. B. eines Mehrkörpersystems (MKS), hier Doppelpendel nach Bild 2.4, zugrun-
de.
Lösung:
Wie bereits festgeschrieben ist f =3 und der Vektor der generalisierten Koordinaten
(Minimalkoordinaten)
q = [ α1 , α2 , β2 ]T ,
wobei nach Bild 2.3 α1 die Drehung des Stabes 1 um den festen Drehpunkt 0 bzw. P1
und α2 , β2 die K ARDAN-Winkel des Stabes 2 in P2 , entsprechend den Drehungen um
die Inertialachse I x und die Knotenlinie K y
2 , sind.
112 2 Modellbildung
mit den Schnittkräften fx , fy , fz in Q1 bzw. P2 , vgl. Bild 2.4. Wir stellen die Elemente
worin
K r P1 S1 = [ 0, 0, 1 /2 ]T . (2.82)
Kω 1 = [ α̇1 , 0, 0 ]T ; ω1
K ω̇ = [ α̈1 , 0, 0 ]T (2.83)
ergeben.
gilt. Darin berechnet sich I a S2 wie I a Q1 in (2.52) aus Beispiel 2.1 mit angepasster
JACOBI-Matrix J TS2 = ∂I r S2 / ∂qq. Die vom Bezugspunkt unabhängigen Kräfte ergeben
114 2 Modellbildung
sich zu:
⎡ ⎤ ⎡ ⎤
0 fx
(S2 ) (S2 )
If
(S2 )
= Ife + Ifr = ⎣ 0 ⎦ − ⎣ fy ⎦ . (2.88)
m2 g fz
Damit erhalten wir die Elemente der Teil-Bewegungsgleichung (2.79) der Translation
∂ I a S2 (S )
M 2 = m2 = m2 J TS2 , f 2 (qq, q̇q) = m2 (I a S2 − J TS2 q̈q), s 2 ( fx , fy , fz ) =I f r 2 .
∂ q̈q
K r P2 S2 = [ 0, 0, 2 /2 ]T
anzuschreiben, vgl. (2.81). Wegen der Bezugspunktwahl enthält die rechte Seite von
(2.89) nur das eingeprägte Moment infolge des Gewichts
⎡ ⎤
0
(P2 ) (P2 )
Kme = K r̃r P2 S2 T KI ⎣ 0 ⎦ , Kmr = 0 → s3 = 0 . (2.90)
m2 g
Stab 1 und 2: Die drei Teilbewegungsgleichungen stellen formal ein System von
neun Gleichungen für die unbekannten Kraft- und Momentengrößen sowie die Win-
kelgrößen dar. Um die Bewegungsgleichungen zu erhalten, sind die Schnittgrößen zu
eliminieren. Hierzu nutzen wir die Tatsache, dass diese keine Arbeit bzw. Leistung
erbringen, d. h. es muss gelten
∂ Kω 1 ! ∂ I v P2 ∂ Kω 2
J R1 = ; J T2 = J TP2 = ; J R2 = (2.92)
∂ q̇q ∂ q̇q ∂ q̇q
die JACOBI-Matrizen der Rotation (JJ R ) und der Translation (JJ T ) bedeuten; eine dies-
bezüglich ausführliche Erläuterung ist u. a. in [49] angegeben. Dabei ist zu beachten,
dass J TP2 sich stets nach dem Bezugspunkt des zugehörigen Drallsatzes – hier P2 –
richtet. Die Bewegungsgleichung ergibt sich somit zu
mit
Vorteil der im Beispiel dargestellten Methode bezieht sich auf die Verfügbarkeit der Kraftbezie-
hungen. Sind die Bewegungsgleichungen gelöst, so lassen sich diese direkt ermitteln. Für eine
rechnerorientierte Vorgehensweise ist eine systematischere Aufbereitung, die weit verbreitete
N EWTON -E ULER-Methode in der Fassung von D’A LEMBERT, anzustreben; vgl. u. a. [9], [49],
[56]. Sie eignet sich insbesondere für komplexe Strukturen.
116 2 Modellbildung
wahlweise in der Basis (I) oder (K). Führen wir die schon benutzten JACOBI-Matrizen
in der keine Zwangskräfte mehr auftreten. Wählen wir speziell die Si als Bezugspunkte, d. h.
Pi → Si und r iPi Si = 0 , dann vereinfacht sich (2.95)
ṗpi = mi r̈r Si
(Si ) (Si ) (Si )
(2.98)
Li
L̇ = Ii ω̇ ωi Ii
ω i + ω̃ ωi ,
Wiederum unter der Voraussetzung eines bekannten Satzes von Minimalkoordinaten (generali-
sierte Koordinaten) liefert die L AGRANGEsche Gleichung 2. Art mit den Definitionen (2.3) nach
Abschn. 2.1
d ∂T T ∂T T ∂V T
− + = Q nk (2.110)
d t ∂ q̇q ∂qq ∂qq
mit den z. B. auf den Bezugspunkt P bezogenen eingeprägten Kräften/Momenten f enki /m menk , die
i
sich nicht aus einem Potential ableiten lassen sowie den bereits eingeführten JACOBI-Matrizen
der Translation JTi und der Rotation JRi . Die JTi beziehen sich in diesem Fall auf P und werden mit
der zugehörigen Absolutgeschwindigkeit v Pi gebildet: JTi = ∂vvPi /∂ q̇q. Reaktions-Kräfte/Momente
aus Bindungen treten nicht auf.
Um (2.110) symbolisch mit Hilfe der Computeralgebra auszuwerten, ersetzen wir die totale
Ableitung nach der Zeit t durch partielle Ableitungen (Hilfsmittel: totales Differenzial) nach den
generalisierten Koordinaten q , q̇q. Dadurch erhalten wir
T
∂ ∂T ∂ ∂T T ∂T T ∂V T ∂ ∂T T
q̈ +
q q̇ −
q + + = Qnk (2.112)
∂ q̇q ∂ q̇q ∂qq ∂ q̇q ∂qq ∂qq ∂t ∂ q̇q
2.5 Lagrange’sche Gleichung 2. Art 119
Legen wir wieder ein System aus N starren Körpern zugrunde, dann wird die kinetische Ener-
gie T , unabhängig von der Basis (I) oder (K), aus den Anteilen Ti des i-ten Körpers zunächst
bezüglich Si gebildet:
N
1 N T (Si )
T = ∑ Ti = ∑ i Si Si
m v T
v + ω I
i i ω i . (2.114)
i=1 2 i=1
D. h. wir können die Größen wahlweise in der Basis (I) oder/und (K) ausdrücken. Vielfach wird
man die Translationsenergie im (I)-System und die Rotations- oder Dreh-Energie (K I ist kon-
stant) im (K)-System anschreiben. Geht man von einer einheitlichen Darstellung im (I)-System
aus, dann ist I I durch (2.69) zu ersetzen.
Setzen wir (2.25) oder (2.29) in (2.114) ein und beachten den S TEINERschen Verschiebungs-
anteil im Trägheitstensor z. B. nach (2.75), so erhalten wir die kinetische Energie (2.114) für den
beliebigen Bezugspunkt Pi
N
1 1 (P )
T = ∑ 2
ω ir Pi Si + ω Ti I i i ω i .
miv TPi v Pi + miv TPi ω̃
2
(2.115)
i=1
Hierin wird deutlich, dass sich der Energieausdruck aus einem Translations-, einem Rotations-
und einem Mischanteil (mittlerer Term) zusammensetzt.
sowie aus Kopplungen mit linearen Federn mit den Federkonstanten k . Sind Δxxi die relativen,
lokalen Deformationen der am i-ten Körper angreifenden Federn und K i die zugehörige Steifig-
keitsmatrix, dann können wir schreiben:
1 N
VF = ∑ ΔxxTi K i Δxxi ,
2 i=1
Δxxi = Δxxi (qq) . (2.117)
ein, so gilt
1 T N T ! 1
VF =
2
q ∑ JKi K i JKi q = q TK q ,
2
KT = K . (2.118)
i=1
Das Potential des Gesamtsystems setzt sich aus der Summe der Einzelpotentiale zusammen. Die
zugehörigen Kräfte/Momente Q k bilden sich zu
T T T
∂V ∂VG ∂VF N
Qk = − =− − = − ∑ mi JTTi g − K q . (2.119)
∂qq ∂qq ∂qq i=1
Fallen Pi , Si zusammen, dann vereinfachen sich die obigen Ausdrücke wieder. Hängen darüber
hinaus, wie vielfach bei Mehrkörperproblemen, Ortsvektoren r = r (qq) und damit die Geschwin-
digkeiten v = v (qq, q̇q) sowie ω = ω (qq, q̇q) nicht explizit von der Zeit t ab, dann kann, wie schon
bei der N EWTON -E ULER-Methode ausgeführt, auch hier der kinematische Zusammenhang des
MKS mit den JACOBI-Matrizen (2.96) hergestellt werden, d. h.
für die jeweils gewählte Basis (I) oder (K). Dementsprechend sind natürlich JTi , JRi zu bilden:
∂ I v Si ∂ I r Si ∂ K v Si ∂ K r Si
(I) : JTi = = bzw. (K) : JTi = = (2.121)
∂ q̇q ∂qq ∂ q̇q ∂qq
ω i / ∂ q̇qi .
und in gleicher Weise für die Rotation J Ri = ∂ω
Setzen wir u. a. (2.120) in den Energieausdruck (2.114) ein, dann lautet die kinetische Energie
1 T
T = q̇q M q̇q (2.122)
2
mit der System-Massenmatrix
N
T (Si )
M = ∑ i Ti Ti Ri i Ri
m J T
J + J I J (2.123)
i=1
unter Berücksichtigung der gewählten Basis. Mit (2.122) können wir (2.110) unmittelbar auswer-
ten. Wir erhalten zunächst
d ∂ 1 T ∂V T
M (qq)q̈q + (MM (qq))q̇q − q̇q M (qq)q̇q + = Q nk (qq, q̇q, t) . (2.124)
dt ∂qq 2 ∂qq
Die beiden mittleren Terme auf der linken Seite, die Zentrifugal- und Coriolis-Anteile, formen
wir noch um
∂ 1 ∂
f (qq, q̇q) = (M
Mq̇q) q̇q − Mq̇q)T q̇q
(M
∂qq 2 ∂qq
(2.125)
1 T ∂
= M − M q̇q,
J J JM = (M
Mq̇q) .
2 ∂qq
2.5 Lagrange’sche Gleichung 2. Art 121
mit der Massenmatrix M nach (2.123) sowie der Vektorfunktion f mit (2.125).
In (2.110) treten bei der Auswertung redundante Terme [56] auf, die den Rechenaufwand
insbesondere bei großen Systemen erhöhen. Aus diesem Grund sind die L AGRANGEschen Glei-
chungen 2. Art für die praktische Aufstellung von Bewegungsgleichungen weniger von Bedeu-
tung.
∂
JM = (M
Mq̇q) (2.127)
∂qq
oder indirekt über die JACOBI-Matrizen bezüglich der Spalten von M
3
∂
JM = ∑ ∂qq (M
M (i, :)q̇i ) (2.128)
i=1
mit der MATLAB-Schreibweise der i-ten Spalte M (i, :) von M und der i-ten Kompo-
nente q̇i aus q̇q auswerten. Die erste Formulierung ist in unserem Fall geringfügig
schneller.
Die konservativen Kräfte der Gewichtseinflüsse ergeben sich nach (2.119) zu
2.6 Linearisierung
Wir gehen davon aus, dass für das System (2.6) eine Lösung, die einerseits zeitabhängig, eine
Sollbewegung, oder andererseits konstant, eine Ruhelage, sein kann, bekannt ist. Sollen nun klei-
ne Störbewegungen y(t) um diese Referenzlage q0 (t) betrachtet werden, dann können wir die
lineare Bewegungsgleichung (lineare Variationsgleichung), die nur lineare Terme in y und den
zeitlichen Ableitungen enthält, angeben. Ausgehend von
in eine TAYLOR -Reihe um q 0 (t) und F 0 (t) entwickeln, vgl. [49]. Wir erhalten für die einzelnen
Terme in (2.6)
f
M
∂M
M (qq0 + y , t) = M (qq0 , t) + ∑ ∂ qi 0
yi + . . .
i=1
∂ f
f (qq0 + y , q̇q0 + ẏy, F 0 + ΔF
F , t) = f (qq0 , q̇q0 , F 0 , t) + y+
∂qq 0
∂ f ∂ f
y
ẏ + ΔF
F + ...
∂ q̇q
0 ∂ fE
0
2.6 Linearisierung 123
Setzen wir diese Ausdrücke in (2.6) ein, so folgt eine Bewegungsgleichung für die Sollbewegung
M (qq0 , t) ÿy + P (qq0 , q̇q0 , F 0 , t)ẏy + Q (qq0 , q̇q0 , q̈q0 , F 0 , t)yy = h (ΔF
F , t), (2.131)
Diese Beziehungen beschreiben die Bewegung eines Mehrkörpersystems aus diskreten, starren
Körpern. Sie setzt sich aus der Sollbewegung, die im Allgemeinen einer nichtlinearen (2.130),
und der Störbewegung (2.131), die einem linearen Differenzialgleichungssystem genügt, zusam-
men.
In vielen Fällen lässt sich die Sollbewegung berechnen. Hängt z. B. (2.5), (2.6) nicht explizit
von der Zeit t ab und es existiert für F 0 = f E = konst eine konstante Sollbewegung (Ruhelage,
Gleichgewichtslage oder Arbeitspunkt), dann erhalten wir q 0 = konst – nach (2.130) – aus dem
im Allgemeinen nichtlinearen algebraischen Gleichungssystem
f (qq0 , F 0 ) = 0 ,
und N die Matrix der nichtkonservativen Kräfte (−Ny Ny), vgl. Kapitel 3. Strebt die Lösung y (t)
Ny
asymptotisch gegen Null, dann ist die Gleichgewichtslage q 0 stabil, sonst instabil.
Ist hingegen die Sollbewegung q 0 (t) zeitabhängig, dann sind auch M , P , Q zeitabhängige
Matrizen. Es liegt eine lineare zeitvariante Differenzialgleichung vor. Auch hieraus lassen sich
u. a. lokale Stabilitätsaussagen bezüglich q 0 (t) gewinnen.
angewendet werden. (2.138) ist Lösung von (2.137). Die gestörte Bewegung genügt
(2.131) mit den von null verschiedenen Matrizen in der Form
Die konstanten Systemmatrizen ergeben sich aus (2.132), (2.133), (2.134), deren sym-
bolische Auswertung ist Inhalt des folgenden Programmsegments.
MATLAB Code: (u. a. aus kin_NE.m in [52], Kinetik-Teil)
M0=subs(M,{alpha_1,alpha_2,beta_2},{0,0,0}) % Massenmatrix (2.136)
f0=subs(f,{alpha_1,alpha_2,beta_2, ... % Vektorf. f(0) aus (2.136)
alpha_p1,alpha_p2,beta_p2},{0,0,0,0,0,0})
P=subs(jacobian(f,q_p),{alpha_1, ... % geschw.-prop. Ant. (2.133)
alpha_2,beta_2,alpha_p1,alpha_p2,beta_p2},{0,0,0,0,0,0})
Q=subs(jacobian(f,q),{alpha_1, ... % ausl.-prop. Anteil (2.134)
!
alpha_2,beta_2,alpha_p1,alpha_p2,beta_p2},{0,0,0,0,0,0}) % q̈q0 = 0
K=1/2*(Q+Q.’); % Steifigkeitsmatrix (3.3)
N=1/2*(Q-Q.’); % nichtkonserv. K. (3.4)
Es ergeben sich die Systemmatrizen
⎡ (S ) ⎤
K Ixx + 4 m1 1 + 1 m2 2 1 2 m2
1 1 2 2 1
0
⎢ (S2 ) ⎥
M0 = ⎣ 2 1 2 m2
1
K Ixx + 4 2 m2
1 2
0 ⎦
(S2 )
K Iyy + 4 2 m2
1 2
0 0
⎡ ⎤
2 1 (m1 + 2m2 )g
1
0 0
K =⎣ 0 1
2 m2 g
2 0 ⎦
0 0 1
m
2 2 2 g
aus denen wir ablesen: Die Pendelbewegungen y1 , y2 , d. h. |α1 | << 1, |α2 | << 1, sind
über die Trägheitsterme gekoppelt, sie entsprechen denen eines ebenen Doppelpen-
dels. Die Bewegung y3 , d. h. |β2 | << 1, ist hiervon entkoppelt. Dies widerspricht dem
nichtlinearen Problem.
2.7 Anwendung der Modellerstellung 125
Aufgabe: Die rotierende Scheibe (Ix , Iy , Iz ) sitzt auf einer drehelastischen (kw , dw ) aber biegestei-
fen Antriebswelle, die in ihrem Fußpunkt mit der mittleren, konstanten Winkelgeschwindigkeit
Ω dreht. Der daraus resultierenden Drehung Ωt ist die Störung Φ0 cos Ωt (Winkelschwankung)
überlagert. Durch den Stab auf der Scheibe wird ein Gleitstein (Punktmasse m) reibungsfrei ge-
führt und ist durch ein Feder-Dämpferelement (k, d) an die Scheibe angekoppelt. Die entspannte
Federlänge sei L0 . Mit den Parametern aus Bild 2.5 sind zu ermitteln:
• die nichtlineare Bewegungsgleichung mit Hilfe
– des Impuls- und Drallsatzes und der N EWTON-E ULER-Methode (2.97)
– der L AGRANGEschen Gleichung 2. Art (2.112)
• die bezüglich der Gleichgewichtslage des ungestörten Systems (Φ0 = 0) linearisierte Bewe-
gungsgleichung
126 2 Modellbildung
q = [ γ, R ]T , γ = Ωt + ϕ , (2.140)
vgl. auch Bild 2.6. Neben dem Inertialsystem (I) wird das scheibenfeste, also mitdrehende,
Körper-Koordinatensystem (K) nach Bild 2.6 eingeführt. Die Drehung erfolgt um die I z-Achse,
so dass die korrespondierende Drehmatrix T γ = T KI (2.14) gilt.
Obwohl nach beiden Methoden (N EWTON-E ULER und L AGRANGE) die Zwangs- bzw. Reak-
tionskräfte (Schnittkräfte) nicht in die Betrachtung eingehen, führen wir sie dennoch teilweise
ein, vgl. Bild 2.6. Die N EWTON-E ULER-Methode wird zeigen, dass sie ausgeblendet werden,
d. h. sie leisten keine virtuelle Arbeit.
• N EWTON-E ULER-Methode: Zunächst betrachten wir die Kinematik des Gleitsteins m. Ausge-
hend von der Beschreibung im (K)-System erhalten wir mit den Bezeichnungen aus Bild 2.5 und
Bild 2.6 den Lagevektor im (I)-System
⎡ ⎤ ⎡ ⎤ ⎡ ⎤
x R−a cos γ − sin γ 0
q) = ⎣ y ⎦ = T IK ⎣ e ⎦ ,
I r S2 (q T IK = T TKI = ⎣ sin γ cos γ 0 ⎦ . (2.141)
I
z b 0 0 1
Da die Zeit in (2.141) nicht explizit auftritt, berechnet sich die Geschwindigkeit nach (2.42) zu
∂ I r S2 (qq) ∂ I r S2 (qq) ∂ I r S2 (qq)
I v S2 (q
q, q̇q) = q̇q = J T (qq) q̇q, J T (qq) = (2.142)
∂q ∂γ ∂R
mit der JACOBI-Matrix der Translation J T . Eine weitere zeitliche Ableitung ergibt nach (2.42)
die Beschleunigung
∂ (JJ T (qq)q̇q)
vS2 (qq, q̇q)
I v̇ = I a(qq, q̇q, q̈q) = I a(t) = J T (qq) q̈q(t) + q̇q . (2.143)
∂qq
Für die Drehung um die I z-Achse ist die Winkelgeschwindigkeit
I ω (q̇
q) = [ 0, 0, γ̇ ]T (2.144)
mit I a (t) nach (2.143) und den eingeprägten Kräften f e der Feder und des Dämpfers sowie der
2.7 Anwendung der Modellerstellung 127
wobei im (K)-System
T
KfF = [ −k(R − L0 ), 0, 0 ]T ; KfD = −d Ṙ, 0, 0 ; KfN = [ 0, −FN , 0 ]T (2.148)
die eingeprägten Kräfte K f F , K f D und die Zwangskraft K f N auf den Gleitstein bezogen sind.
Der Drehbewegung der Scheibe liegt der Drallsatz zugrunde. Es wird vorausgesetzt, dass
der Einfluss des Stabes auf die Massenträgheitsmomente der Scheibe vernachlässigbar ist, der
Trägheitstensor
I = diag(Ix , Ix , Iz ), Iy = Ix (2.149)
hat somit Diagonalgestalt und ist unabhängig vom Koordinatensystem (I), (K) konstant. Darüber
hinaus ist die Drehachse raumfest, so dass nach (2.71) der Drallsatz im (I)-System
ω = I m (0)
I I ω̇ (2.150)
folgt. Das auf 0 bezogene Moment I m (0) bilden wir mit den Tildeoperatoren – vgl. (2.74) –, die
mit
K r P1 = [ −a, e, b ]T ; K r S2 = [ R − a, e, b ]T (2.151)
für das eingeprägte Moment m e und das Zwangsmoment m r – letzter Term – im (I)-System.
Um die Bewegungsgleichungen für γ und R zu erhalten, muss FN eliminiert werden. Diesen
Schritt vollführen wir zweckmäßiger Weise mit Hilfe der JACOBI-Matrix der Translation J T aus
(2.142) und der der Rotation J R nach (2.145). Durch Linksmultiplikation der Teilbewegungen
(2.146), (2.150) jeweils mit J T , J R und anschließender Summation finden wir mit (2.97) die
implizite Bewegungsgleichung:
(S ) (0) (0)
ω −I m e
g (qq, q̇q, q̈q) = J TT I a (t)m − I f e 2 + J TR I I ω̇ = J TT I f r +JJ TR I m r , (2.153)
0
In (2.154) enthält der erste Term die 2×2-Massenmatrix M , der zweite die Coriolis-Kräfte/Momente
und der dritte die Feder-, Dämpfungs- und Anregungs-Kräfte/Momente.
• L AGRANGE-Methode
Für die Herleitung nach dem L AGRANGEschen Formalismus gehen wir bezüglich der Kinematik
einen etwas anderen Weg. Wir legen als generalisierte Koordinaten jetzt
ϕ
qϕ = (2.156)
R
zugrunde. In dieser Schreibweise hängt I r S2 (qqϕ , t) explizit von der Zeit t ab, was bei den zeit-
lichen Ableitungen zu berücksichtigen ist. In I r S2 (qq) nach (2.141) substituieren wir zunächst
γ → ϕ + Ωt, so dass I r S2 (qqϕ , t). Die Absolutgeschwindigkeit lautet in diesem Fall:
∂I r S2 (qqϕ , t) ∂I r S2 (qqϕ , t)
I v S2 (q
q, q̇q, t) = q̇qϕ + = J Tϕ (qqϕ , t) q̇qϕ + v̄v(qqϕ , t) . (2.157)
∂qqϕ ∂t
Alle Terme werden wieder symbolisch mit dem Rechner ausgewertet, so dass die Bewegungs-
gleichung mit den separierten Erregertermen
gebildet werden kann. Die Einzelterme ergeben sich mit dem Programm ImDrLa_1.m aus [52]
zu:
(R − a)2 + e2 m + Iz −me 2 m (Ω + ϕ̇) (R − a) Ṙ
M (qqϕ ) = , k (qqϕ , q̇qϕ ) =
−me m −m (Ω + ϕ̇)2 (R − a)
kw ϕ + dw ϕ̇ Φ0 (kw cos (Ωt) − dw Ω sin (Ωt))
p (qqϕ , q̇qϕ ) = , h (t) = .
k (R − L0 ) + d Ṙ 0
M ist keine Diagonalmatrix, d. h. es besteht eine Kopplung durch die Trägheitsterme, k ist der
nichtlineare Vektor der Coriolis- und Zentrifugalkräfte und koppelt ebenfalls die Bewegungen, p
enthält Feder- und Dämpferkräfte und h (t) die separierten Erregerterme.
• Linearisierung Für kleine Schwingungen der Scheibe ϕ sowie R der Masse m können wir
unter der Voraussetzung
aus den ersten vier Termen von (2.163) die konstante Gleichgewichtslage q ϕ,0 (Ω ), q̇qϕ,0 = 0 ,
q̈qϕ,0 = 0 in Abhängigkeit von Ω aus
zu
⎡ ⎤
0
ϕ0
qϕ,0 = = ⎣ kL0 − amΩ 2 ⎦ (2.165)
R0
k − mΩ 2
folgt. Die restlichen Terme von (2.163) beschreiben die linearen Schwingungen
M0 ÿy + (G
G +D
D) ẏy + K y = h̃h(t) , (2.166)
wobei
• Massen-Matrix M 0 : aus M mit R → R0
(R0 − a)2 + e2 m + Iz −me
M0 =
−me m
M 0 und G hängen von der Gleichgewichtslage ab, G ist darüber hinaus schiefsymmetrisch. Däm-
pfungs- und Steifigkeitsmatrix D , K sind Diagonalmatrizen, wobei K für k < mΩ 2 negativ definit
ist und somit die Schwingung nach Kapitel 3 bzw. [43], [49] instabil ist. Wir setzen deshalb
k > mΩ 2 und nach (2.165) L0 > a mΩ 2 /k, so dass R0 > 0, voraus. Die freien und erzwungenen
Schwingungen von (2.166) lassen sich mit den Methoden des folgenden Kapitels berechnen.
Die Bewegungsgleichungen und deren Linearisierung können auf der Basis der Programmab-
drucke der letzten Abschnitte programmiert oder in [52], Programm: ImDrLa_1.m, eingesehen
werden.
Weitere Beispiele, in denen Bewegungsgleichungen aufgestellt werden, enthält Kapitel 8.
3 Lineare Schwingungsmodelle
In diesem Kapitel werden lineare Systeme, d. h. Systeme, die durch lineare gewöhnliche Diffe-
renzialgleichungen beschrieben werden, numerisch behandelt.
Allerdings ist kein reales System streng durch lineare Differenzialgleichungen beschreibbar.
Die Linearität ist eine Idealisierung, die in vielen Fällen der Wirklichkeit sehr nahe kommt. Vie-
le nichtlineare Systeme haben die Eigenschaft, dass Bewegungen in einer hinreichend kleinen
Umgebung u. a. einer Gleichgewichtslage durch eine linearisierte Bewegungsgleichung (2.131)
gut beschreibbar sind.
Hierfür existieren sehr leistungsstarke und zuverlässige numerische Methoden, mit denen sich
das dynamische Verhalten im Falle kleiner Bewegungen, Schwingungen um einen Arbeitspunkt,
einer Gleichgewichtslage oder einer Referenzlösung untersuchen lässt. Parameterstudien lassen
sich äußerst effizient durchführen, grafisch auswerten und per Animation verdeutlichen. Der Ent-
wurf eines Systems wird dadurch unterstützt und macht z. B. die Bewegungsabläufe verständli-
cher und durchsichtiger.
Unter MATLAB sind die benötigten numerischen Methoden verfügbar und führen bei optima-
ler Vektorisierung mit geringem Programmieraufwand zum Ziel. Wir zeigen dies anhand der
Eigenschwingungen, der freien und fremderregten bzw. erzwungenen Schwingungen mechani-
scher Modelle mit mehreren Freiheitsgraden, der Ein-Massen-Schwinger ist als Sonderfall ent-
halten. Die zugehörigen Hilfsmittel unter MATLAB werden vorgestellt und deren Aufbereitung
beispielorientiert erläutert. Besprochene sowie weiterführende Programme sind in [52] abgelegt.
Eigenschwingungen und freie Schwingungen u. a. mechanischer, elektrischer und mechatroni-
scher Systeme ohne zeitabhängige Fremderregung beschreiben das Schwingungsverhalten nach
anfänglicher Störung. Eine Eigenschwingung wird durch spezielle Anfangswerte, die die Eigen-
schwingungsform erfüllen, ausgelöst; das System schwingt mit der zugehörigen Eigenfrequenz.
Bei der freien Schwingung erfolgt die einmalige Schwingungsanregung durch allgemeine An-
fangswerte. Sie lassen sich z. B. bei mechanischen Systemen durch einen impulsartigen Hammer-
schlag an einem beliebigen Ort erzeugen. Dadurch werden in der Regel alle Eigenschwingungen
angestoßen. Das Frequenzband umfasst somit sämtliche Eigenfrequenzen.
In jedem Falle gewinnt man Aussagen bezüglich der Stabilität der Schwingungen sowie des
Einschwingverhaltens stabiler Modelle z. B. in einen stationären Zustand, bewertet durch die
Schnelligkeit und das Überschwingen, d. h. der Frequenzanteil und das Dämpfungsverhalten der
Schwingung, festgeschrieben durch die Eigenwerte, sind zu beurteilen. Dies schließt eine Bewer-
tung der Regelgüte aktiver linearer Systeme ein.
Darüber hinaus enthalten die Eigenschwingungen Informationen bezüglich periodisch erreg-
ter Systeme, wie z. B. unwuchterregter Turborotoren [18]. Aus den Eigenwerten und Eigenvekto-
ren lassen sich u. a. Resonanz- und Scheinresonanz-Frequenzen ableiten. Weiterhin ermöglichen
die Eigenschwingungsformen Aussagen bezüglich effektiver Lagerstellen sowie Stell- und Mess-
orte aktiver Systeme, so dass u. a. Spillover-Effekte vermieden werden können.
Dem gegenüber stehen die fremderregten Schwingungen. Sie treten auf, wenn am schwingen-
den System isolierte zeitabhängige äußere Kräfte/Momente angreifen. Tritt die Zeitabhängigkeit
alleine in den Koeffizienten der Bewegungsgleichung (zeitvariante Systeme) auf, so wird von
parametererregten Schwingungen gesprochen, was hier nicht weiter verfolgt wird. Insbesondere
werden hier Systeme mit harmonischer bzw. periodischer Anregung betrachtet. Es interessieren
die Antworten in Form von Amplitude und Phasenlage gegenüber der Anregung; man spricht
auch von stationären Schwingungen. Damit lassen sich u. a. Bauteilbeanspruchungen berechnen
und das Einhalten von Einbauräumen überprüfen. Z. B. muss sichergestellt werden, dass Un-
wuchtschwingungen eines Turboläufers kein Anstreifen der Schaufeln oder/und des Rotors im
Dichtspalt u. a. an die Gehäusewandung verursacht.
Anregungsmechanismen, die zu instationären Schwingungen führen, werden später per Si-
mulation, d. h. der numerischen Integration der Bewegungsgleichungen, gewonnen, siehe u. a.
Abschn. 5.3.1. Die stationären Schwingungen des linearisierten Systems dienen dabei häufig als
Interpretations-Hilfe der Simulationsergebnisse.
Es können nur benötigte Grundlagen zu den Schwingungen angegeben werden. Die numeri-
sche Vorgehensweise, die Vektorisierung und die Programmierung stehen im Vordergrund. Ziel
soll es sein, Hilfsmittel und Anregungen für eine numerische Schwingungsanalyse bereitzustel-
len. Um einen unmittelbaren Bezug zur MATLAB-Formulierung zu haben, werden teilweise pa-
rallel zur analytischen Schreibweise die in MATLAB verwendeten Punktoperationen, u. a. | .* | .\
| .ˆ |, eingeführt. Dies unterstützt die Erstellung eines vektorisierten Codes. U. a. mit [18], [21],
[22], [44], [58] lässt sich die Thematik der Schwingungen vertiefen. In [28] werden die Probleme
auch mit MATLAB behandelt. Insbesondere wird dort auf Übertragungsfunktionen eingegangen.
3.1 Bewegungsgleichungen
Häufig führt die mathematische Formulierung insbesondere mechanischer Modelle1 direkt oder
indirekt über die Linearisierung nichtlinearer Bewegungsgleichungen, wie u. a. in Abschn. 2.6
und Abschn. 2.7 gezeigt, auf lineare Bewegungsgleichungen mit f Freiheitsgraden, vgl. (2.136),
und somit der Ordnung n = 2 f
P = D +G
G; Q = K +N
N (3.2)
M ÿy + (G
G + D )ẏy + (K
K + N )yy = h (t) (3.5)
mit
M = MT > 0 Massenmatrix, positiv definit M > 0 , M = M T stets erreichbar
G = −GGT Matrix der gyroskopischen Kräfte, schiefsymmetrisch
D =D T Dämpfungsmatrix, symmetrisch, nichtkonservativ
K = KT symmetrischer Anteil der Steifigkeitsmatrix; konservativ
N = −NNT Matrix der nichtkonservativen Kräfte, schiefsymmetrisch
h (t) Anregungsvektor (äußere Störung).
Nach den auftretenden Matrizen in einer Bewegungsgleichung wird das zugehörige mathemati-
sche Modell, z. B. MK- oder MDGK-System, benannt. Durch diese Klassifizierung gewinnt man
nicht nur erhebliche Vorteile für die mathematische und numerische Behandlung – Strukturen der
Lösungen sind bekannt –, sondern auch rein qualitative Rückschlüsse auf das Systemverhalten.
Dies ist insbesondere für Stabilitätsaussagen [43] und damit für die Beurteilung der gewonnenen
numerischen Ergebnisse wichtig und hilfreich.
Rotoren in Gleitlagern oder/und mit innerer Dämpfung führen auf (3.5). Jedoch können auch
spezielle Koordinatensysteme auf scheinbare nichtkonservative Kräfte (−Ny Ny
Ny) führen; z. B. bei
dem mathematischen Modell eines Rotorsystems mit unrunder Welle formuliert im mitdrehenden
Koordinatensystem. N ist somit eine Folge des gewählten Koordinatensystems.
Wegen der Linearität von (3.5) gilt das Überlagerungsprinzip. Die allgemeine Lösung y (t)
ist deshalb als Summe der allgemeinen Lösung y h (t) der zugehörigen homogenen Differenzi-
algleichung, sie enthält die Integrationskonstanten, und jeweils einer partikulären Lösung y p (t)
(hh(t)
= 0 ) der inhomogenen Gleichung darstellbar:
Die Integrationskonstanten werden durch Anpassen an die Anfangswerte bestimmt. Dies wird
für die allgemeine Lösung u. a. in Abschn. 8.2 gezeigt.
Führen wir den Zustandsvektor
T
x = y T , ẏyT (3.7)
nahe. Damit erfassen wir den grenzstabilen Fall (δ = 0), für den eine harmonische Lösung vermu-
tet werden kann, bzw. den asymptotisch stabilen (instabilen) Fall mit harmonischer Lösung mit
exponentiell abklingender (δ < 0) (aufklingender (δ > 0)) Amplitude sowie den aperiodischen
Grenzfall mit verschwindendem Imaginärteil (ω = 0).
Der an die Zustandsgleichung (3.8) mit b (t) ≡ 0 angepasste Lösungsansatz der homogenen
Lösung ist
T
x h = v eλt (mechanisches Modell: v = ṽvT , λ ṽvT ). (3.12)
Av = λB
Bv , Av = λvv (3.13)
mit dem Eigenwert λ und dem (Rechts-) Eigenvektor v unterschieden, wobei wir in dieser all-
gemeinen Betrachtung die in MATLAB üblichen Bezeichnungen zunächst beibehalten. Gleichun-
gen (3.13)1 und (3.13)2 sind homogene algebraische Gleichungen, die nur für bestimmte Werte
λ nichttriviale Lösungen v
= 0 besitzen. Darüber hinaus ist v nur bis auf einen beliebigen Fak-
tor ermittelbar und wird deshalb geeignet normiert ausgegeben; vgl. Online-Hilfe. Für beide
Formen existieren Codes (Unterprogramme) in unterschiedlichen Programmiersprachen, wobei
vielfach durch entsprechende Transformationen vorab (3.13)2 erzeugt wird (z. B.: A := B−1A mit
B regulär). Um den Rechenaufwand zu reduzieren, sind in der Regel bei der Code-Auswahl die
Eigenschaften der Matrizen A, B, z. B. Symmetrie, zu berücksichtigen. Die MATLAB-Functions
eig eigs
nehmen einem diese Entscheidungen teilweise ab. Es werden die Eigenwerte und Vektoren von
(3.13)1,2 berechnet; vgl. Online-Hilfe:
⇒ help eig, help eigs
Während mit eig alle Eigenwerte und Eigenvektoren z. B. einer reellen oder komplexen symme-
trischen oder unsymmetrischen quadratischen Matrix A durch Umformungen – direkte Methode
– ermittelt werden, berechnet eigs alle oder wahlweise nur einige iterativ mit vorgegebenen Spe-
zifikationen. Die quadratische Matrix A kann in diesem Fall voll besetzt sein, alle Elemente
werden explizit vorgegeben, oder spärlich besetzt sein, nur von Null verschiedene Elemente wer-
den gespeichert und bearbeitet. A , B sind dann Sparse-Matrizen, vgl. S. 15. Symmetrische oder
unsymmetrische, reelle oder komplexe Sparse-Matrizen sind zulässig; siehe auch DrehSchw.m,
QuerSch_1,2.m in [52].
Liegt ein allgemeines Eigenwertproblem vor, dann muss B symmetrisch (B BT = B ) und positiv
definit (BB > 0 ) sein, weil in eigs zunächst ein spezielles Eigenwertproblem mittels C HOLESKY-
Zerlegung formuliert wird. Tabelle 3.1 zeigt typische MATLAB-Aufrufe zur Eigenwert- und Ei-
vor. Die Gleichung (3.14) beschreibt Eigenschwingungen und freie Schwingungen ungedämpfter
Systemen, vielfach Strukturschwingungen [22]. Die in Bild 3.1 skizzierte Schwingerkette mit
den zugehörigen Systemmatrizen
⎡ ⎤ ⎡ ⎤
m1 0 0 k01 + k12 −k12 0
M = ⎣ 0 m2 0 ⎦ , K = ⎣ −k12 k12 + k23 −k23 ⎦ (3.15)
0 0 m3 0 −k23 k23 + k03
folgt. Einerseits kann ṽv nur bis auf einen beliebigen Faktor bestimmt werden, andererseits ist nur
dann ṽv
= 0 , wenn die Koeffizienten-Determinante verschwindet:
|λ 2M + K | = 0 . (3.18)
Dies liefert die charakteristische Gleichung, sie ist ein Polynom f -ten Grades in λ 2 . Folglich gibt
es f Quadrate der Eigenwerte λ12 , λ22 , ..., λ f2 , die mit der Vielfachheit ρ j ≥ 1 auftreten können.
Unter der Voraussetzung M T = M > 0 und K T = K ist nach [9] der Defekt der Koeffizienten-
matrix (λ j2M + K ) gleich der Vielfachheit ρ j von λ j2 . D. h. es existieren genau f Quadrate der
Eigenwerte λ j2 , wenn man etwaige Mehrfachwurzeln entsprechend ihrer Vielfachheit zählt. Dar-
über hinaus existieren zu den λ j2 f linear unabhängige reelle Eigenvektoren ṽv j , sie sind in der
Regel nicht zueinander orthogonal.
Neben λ j ist auch −λ j Eigenwert von (3.18), d. h. die Lösung y (t) ist nur dann (schwach)
stabil bzw. grenzstabil, wenn alle λ j verschwindende Realteile haben. Aus (3.17) folgt
wobei ṽvTM ṽv stets positiv reell und ṽvTK ṽv positiv oder negativ reell oder null ist. Die Eigenwerte
folgen damit aus (3.19) zu
ṽvTK ṽv
λ2 = − . (3.20)
ṽvTM ṽv
D. h. die Struktur der Eigenwerte und damit die Stabilität von y (t) wird durch ṽvTK ṽv festgeschrie-
ben. Wir unterscheiden:
138 3 Lineare Schwingungsmodelle
ṽvTj K ṽv j > 0, für alle j pos. def. → λ j2 < 0, λ j,1,2 = ±iω j
ṽvTj K ṽv j = 0, für mindestens ein j sem. def. → λ j2 = 0, λ j,1,2 = 0 (3.21)
ṽvTj K ṽv j < 0, für mindestens ein j neg. def. → λ j2 > 0, λ j,1,2 = ±δ j
Das System ist somit grenzstabil (bzw. schwach stabil) oder instabil. Bei Null-Eigenwerten z. B.
der Vielfachheit 2, dies ist der Fall, wenn in (3.15) k01 = k03 = 0 – die Schwingerkette ist nicht
gefesselt –, dann treten Starrkörperbewegungen auf, die Lösung enthält säkulare Terme; siehe
auch DrehSchw.m in [52].
Sind M T = M > 0 und K T = K ≥ 0 , dann können wir statt (3.16) den reellen Ansatz
zu lösen ist.
MATLAB-Formulierung: Ein Vergleich von (3.17) mit (3.23) zeigt, dass das Eigenwertproblem
vom jeweiligen Ansatz (3.16) bzw. (3.22) abhängt. In beiden Fällen liegt ein allgemeines Eigen-
wertproblem (3.13)1 vor, so dass entsprechend der MATLAB-Formulierung in (3.13)
2
λ
A → K ; B → ∓ M Berechnung von
ω2
zu beachten ist. Wir wählen den reellen Ansatz (3.23).
Zunächst geben wir unten die Programmierung des Eigenwertproblems mit eig an. Wegen bes-
serer Übersichtlichkeit und weil oft nur die niedrigsten Eigenfrequenzen interessieren, sind die
in d ausgegebenen Eigenkreisfrequenzen ω j mit der Sortier-Function sort in eine aufsteigende
Folge, gespeichert in es, zu bringen. Die Eigenvektoren sind anschließend mit dem Vektor der
Sortierindizes I wieder den Eigenwerten zuzuordnen. Danach können sie ggf., z. B. für eine bes-
sere grafische Darstellung, umskaliert werden, z. B. so, dass das betragsmäßig größte Element zu
eins wird. Programmsegment aus frei.m in [52]:
[v,d] = eig(K,M); % Eigenwertproblem
[es,I] = sort(sqrt(diag(d))); % Eigenkreisfr. in aufsteigender Folge
v = v(:,I); % Eigenvektoren neu zugeordnet
vn = v/diag(max(abs(v))); % Umskalierung der Eigenvektoren
... ...
Die Eigenschwingungen: Die Schwingungen der MK-Systeme M T = M > 0 , K T = K > 0 sind
grenzstabil; die Eigenschwingungen harmonisch. Die Eigenschwingungen bilden wir mit (3.22),
d. h. ωk , ṽvk reell:
Hierin sind die Eigenschwingungsformen (Mode shapes) enthalten. Man skizziert von (3.24) den
Anfangszustand y k (0) = ṽvk (oder von ẏyk (0)), z. B. über den Lagen von mk wie in Bild 3.2, in dem
3.2 Eigenschwingungen und freie Schwingungen 139
sich die Eigenschwingung zur Zeit t = 0 befindet, und erhält somit Aussagen über das Verhältnis
der Ausschläge (bzw. Geschwindigkeiten) zu allen Zeiten. D. h. lenkt man den Schwinger an-
fänglich entsprechend ṽvk aus – oder befindet er sich infolge harmonischer Anregung in Resonanz
–, dann schwingt er mit der zugehörigen Eigenschwingungsform mit der Eigenkreisfrequenz ωk ,
wie in Bild 3.3 oben für ω2 .
Die freien Schwingungen: Die allgemeine Lösung von (3.14), d. h. die freie Schwingung, mit
den ermittelten Eigenkreisfrequenzen ωk und Eigenvektoren ṽvk stellt sich als Summe aller Eigen-
140 3 Lineare Schwingungsmodelle
schwingungen dar:
f
y (t) = ∑ ṽvk (sk sin ωkt + ck cos ωkt) = (ṼV s ). ∗ sin ω t + (ṼV c ). ∗ cos ω t, (3.25)
k=1
mit
V = ṽv1 , ṽv2 , . . . , ṽv f
Ṽ Modalmatrix
T
ω = ω1 , ω2 , . . . , ω f Vektor der Eigenkreisfrequenzen
T
c = c1 , c2 , . . . , c f Vektoren der Inte-
T
s = s1 , s2 , . . . , s f grationskonstanten,
wobei wir Mehrfacheigenwerte [9], wie im Fall einer Starrkörperbewegung, ausschließen. Sie
bereiten numerische Schwierigkeiten, vgl. Abschn. 1.8.8, und bedürfen einer speziellen Betrach-
tung. Die Lösung enthält säkulare Terme.
Die Integrationskonstanten sk und ck bzw. s , c ermitteln sich mit 2 f vorgegebenen Anfangs-
werten y (0) = y 0 und ẏy(0) = v 0 , z. B. zum Zeitpunkt t = 0. Dies führt auf die entkoppelten
algebraischen inhomogenen Gleichungssysteme für c und s
y 0 = Ṽ
V c, v 0 = (Ṽ ω.
V s ). ∗ω (3.26)
Die Zeitverläufe der freien Schwingungen folgen direkt aus (3.25). Für eine MATLAB-Formulier-
ung gehen wir von dem Zeilenvektor t T der diskreten Zeitpunkte tk , k = 1,2, . . . aus und schrei-
ben
mit den f × f -Diagonalmatrizen bezüglich s , c . Die Dimension der Rechteck-Matrix y (tt T ) hängt
von f und dem Diskretisierungsgrad von t ab.
MATLAB-Formulierung und numerische Ergebnisse: Damit können wir (3.26) und (3.27) der
freien Schwingungen und deren grafische Darstellung programmieren, vgl. frei.m in [52]:
y0=[1.; 0.; -1.]; v0=zeros(3,1); % Anfangswerte
% Integrationskonstanten
c = v\y0; s = es.\(v\v0); % cos-, sin-Anteil (3.26)
te = 4*pi/es(1); % Zeitendpunkt, z. B.
t = linspace(0,te); % Zeitvektor, 100 Werte
y= v*(diag(s)*sin(es*t)+diag(c)*cos (es*t)); % Schwingung nach (3.27)
figure(2) % grafische Darstellung
set(gcf,’DefaultLineLineWidth’,1) % Linienstärke geändert
subplot(211)
plot(t,y(1,:),t,y(2,:),’-’,...
t,y(3,:),’o’,’MarkerSize’,2)
L=axis; xlim([L(1) te]) % Achsenskalierung
title(’Freie Schwingungen ... % Bildüberschrift
für spezielle Anfangswerte’)
xlabel(’Zeit t [s]’); ylabel (’y1, y2, y3’) % Achs-Beschriftung
legend(’y1’,’y2’,’y3’,-1) % Linienkennung
grid
3.2 Eigenschwingungen und freie Schwingungen 141
Im Bild 3.3 sind die freien Schwingungen y j (t) der symmetrischen Schwingerkette – vgl.
Tabelle 3.2 – für zwei Anfangswertzustände dargestellt. Im oberen Bild 3.3o entsprechen die
Anfangsauslenkungen denen der zweiten Eigenschwingungsform aus Bild 3.2, so dass die beiden
äußeren Massen gegenphasig, also mit einer Phasenverschiebung von π schwingen, während die
mittlere Masse in Ruhe bleibt. Die Schwingungsfrequenz ergibt sich aus ω2 zu f2 = 2π/ω2 .
Dieser spezielle Schwingungszustand folgt auch unmittelbar aus (3.25) mit
Im unteren Bild 3.3 unten sind die freien Schwingungen für allgemeinere Anfangswerte darge-
stellt, es werden alle drei Eigenschwingungsformen angestoßen.
folgt mit
das Eigenwertproblem
(λ 2M + λG
G + K )ṽv = 0 (3.30)
als Matrizenpolynom 2-ter Ordnung und aus der Determinate der Koeffizientenmatrix die cha-
rakteristische Gleichung
|λ 2M + λG
G + K| = 0 . (3.31)
|λ 2M + λG
G + K | = |λ 2M − λG
G + K | = 0, (3.32)
so dass wieder λk und −λk Eigenwerte von (3.30) sind. D. h. y (t) ist nur dann grenzstabil, wenn
alle λk verschwindende Realteile haben.
√
Sei ṽv = ṽvR − i ṽvI , i = −1 der zu ṽv = ṽvR + i ṽvI konjugiert komplexe Eigenvektor, dann
erhalten wir aus (3.30) durch Linksmultiplikation mit ṽvT
λ= (3.34)
2ṽv M ṽv
T
gewinnen. Das Vorzeichen vor der Wurzel muss (3.30) erfüllen. Für die einzelnen Terme in (3.34)
können wir die Aussagen treffen:
T
ṽv M ṽv = ṽvR − i ṽvI M ṽvR + i ṽvI
T T
T T
(3.35)
= ṽvR M ṽvR + ṽvI M ṽvI positiv reell
⎧
⎨ positiv reell
T RT IT
ṽv K ṽv = ṽv K ṽvR + ṽv K ṽvI 0 (3.36)
⎩
negativ reell
3.2 Eigenschwingungen und freie Schwingungen 143
T
ṽv Gṽv = ṽvR − i ṽvI G ṽvR + i ṽvI
T T
T T
(3.37)
= i ṽvR GṽvI − ṽvI GṽvR rein imaginär,
T T
wobei wegen G = −G GT die Terme ṽvR GṽvR = 0 und ṽvI GṽvI = 0 verschwinden müssen. Daraus
folgt, dass die Eigenwerte λ in (3.34) für positiv definites K (ṽv K ṽv > 0) stets rein imaginär sind,
T
was mit der obigen Aussage: λk , −λk Eigenwerte von (3.30) auf
√
λk,k+1 = ±iωk , i = −1
führt.
Ist K negativ definit, d. h. ṽvk K ṽvk < 0 für mindestens ein k, und der Radikand in (3.34) positiv,
T
D. h. der Kreiseleinfluss stabilisiert das System; vgl. Stabilitätssätze von T HOMSON und TAIT
sowie von P. C. M ÜLLER in [43] und Projekt Levitron-Kreisel in [52].
Im Fall ṽvT vk = 0 gibt es Starrkörpermoden mit λk = 0 bzw. K ṽvk = 0 nach (3.30).
k K ṽ
mit der n × n-Zustandsmatrix A . Der Ansatz (3.12) liefert direkt das spezielle Eigenwertproblem
λE
E v = Av
Av, ( für mech. Systeme nach (3.1): v = (ṽvT , λ ṽvT )T ), (3.39)
so dass der Zustandsvektor x mit dem Eigenvektor v korreliert, E ist die Einheitsmatrix.
Die Ordnung des Eigenwertproblems (3.39) hat sich gegenüber (3.17) verdoppelt. Wie gezeigt,
existieren für K > 0 n komplexe Eigenwerte, die paarweise konjugiert λk = +iωk , λk+1 = −i ωk
sind. D. h. ungedämpfte gyroskopische Systeme sind mit M = M T , K = K T > 0 , unabhängig von
G stets grenzstabil. Sie können aber auch für K < 0 grenzstabil sein, wenn der Drall genügend
groß, d. h. G geeignet. Wegen G (Ω ) gilt λ (Ω ).
die 2 ist für die grafische Darstellung bedeutungslos. Weitere Möglichkeiten zur Darstellung der
Eigenschwingungsformen sind mit QuerSchw_1,2.m aus [52] zu erzeugen.
Bearbeitet man das Eigenwertproblem mit eigs, dann kann es gegenüber (3.38) numerisch
stabiler sein, wenn von einer Zustandsgleichung der Form
Bẋx = Ax (3.42)
ausgegangen wird.
MATLAB -Aufruf: [v,d] = eigs(A,B,’sm’,opts);
Im Gegensatz zu (3.38), wo die Inverse von M eingeht, wird in (3.42) mit der C HOLESKY -
Zerlegung von B gearbeitet, um zunächst ein spezielles Eigenwertproblem zu formulieren. Dies
ist numerisch vorteilhafter, wirkt sich aber wegen der doppelten Dimension von B gegenüber M
nachteilig auf die Rechenzeit aus. Weitere Zustandsformen lassen sich erzeugen, vgl. [29].
Die freien Schwingungen: Die freien Schwingungen können im Reellen und im Komplexen
formuliert werden. MATLAB-orientierter und auf allgemeine Systeme übertragbar ist eine For-
mulierung im Komplexen, wobei wir Mehrfacheigenwerte ausschließen. Mit dem Ansatz (3.12)
folgt die allgemeine Lösung als Linearkombination der Eigenlösungen
n
x (t) = ∑ ckv k eλkt , (3.44)
k=1
wobei die Koeffizienten ck von Anfangswerten abhängen. Mit Hilfe der Modalmatrix
V = [vv1 , v 2 , . . . , v n ]
3.2 Eigenschwingungen und freie Schwingungen 145
Mit dem reellen Anfangswertvektor x (0) = x 0 zum Zeitpunkt t = 0 folgt unmittelbar das alge-
braische Gleichungssystem für c :
Die Zeitschriebe x (t) werden wieder mit dem zeitdiskreten Zeilenvektor t T (t=0:dt:te )
gebildet, so dass (3.45) MATLAB-orientiert lautet:
x (tt T ) = V diag(cc) eλ t ,
T
diag(cc) n × n − Matrix, λt T dyadisches Produkt. (3.47)
Jede Zeile x i (tt T ) entspricht einem zeitdiskretisierten Graphen; demnach ist x (tt T ) eine Rechteck-
matrix.
MATLAB Code der freien Schwingungen für gegebene Anfangswerte x0, siehe auch
linear_ImDrLa.m in [52]:
c = v\x0; % Integrationskonstanten (3.46)
te = 8.0*pi/imag(es(1)); % Endzeit, gewählt 8π/ωmin
t = linspace(0,te); % 100 diskrete Zeitpunkte
x = real(v*diag(c)*exp(diag(d)* t)); % freie Schwingung x (tt T ) (3.47)
plot(t,x(1,:),’-.r’, t,x(2,:),’b’) % Plot der ersten Komp. von x
Infolge Rundungsfehler enthält x kleine Imaginäranteile, die mit real unterdrückt werden.
Ist man nur an der Diskussion der Auslenkung y(t) interessiert oder ist der Ausgang von (3.38)
eine Linearkombination yM (t) der Zustandsvariablen, kann es zweckmäßig sein, die algebraische
Ausgangsgleichung (Messgleichung)
y Mk (t) = Cv k eλk t
t=0
−→ y Mk (0) = Cv k . (3.49)
Formulierung mit der Fundamentalmatrix: Mit (3.45) und (3.46) folgt die weit verbreitete
Formulierung der freien Schwingungen:
x (t) = V diag(eλ j t )V
V −1x 0 = V eΛt V −1 x 0 = Φ (t) x 0 , Λ = diag(eλ j t ), (3.50)
Sie ist für eine numerische Auswertung im Allgemeinen wenig geeignet. Wir geben dennoch
eine Berechnung der homogenen Lösung in [0, te] für den Anfangszustand x (0) = x 0 an:
t = linspace(0, te, 250); % Zeitvektor
for ii=1:length(t) % ii-ter Zeitschritt
x(:,ii) = expm(A*t(ii))*x0; % Lösung nach (3.50)
end
Diese Betrachtungsweise wird bei den erzwungenen Schwingungen im Abschn. 3.3.2.5 noch
einmal aufgegriffen.
D = αM
M + βK
K, R AYLEIGH-Dämpfung , (3.52)
λr = −δr , r = 2K + 1, 2K + 2, . . . , 2n
und die zugehörigen Eigenvektoren mit gleicher Struktur vor. Die Schwingungen sind somit
asymptotisch stabil, wenn alle Realteile δ größer Null sind, im Fall eines δ gleich Null grenz-
stabil und im Fall eines δ kleiner Null instabil.
Stabilitätsabschätzung liefert der Satz von T HOMSON -TAIT-C HETAEV (1961) [9], [43]:
Ist K = K T > 0 , dann ist das System unabhängig von G asymptotisch stabil. Ein statisch instabi-
les System, K < 0 , kann demnach beim Vorhandensein von Dämpfung nicht durch Kreiselkräfte
stabilisiert werden. D. h. auch die Definitheitseigenschaften von D sind von Bedeutung: Wenn D
D > 0 ), dann ist jede beliebige Bewegung mit Energieverlust, d. h. mit Dämpfung,
positiv definit (D
3.2 Eigenschwingungen und freie Schwingungen 147
δk δk
Dk = ! , bzw. für |δk | << ωk Dk ≈ (3.54)
ωk2 + δk2 ωk
2πDk 2πδk
ϑk = ! = . (3.55)
1 − D2k ωk
genannt.
MATLAB-Umsetzung: Vorausgesetzt die Eigenwerte λ sind wegen G (Ω ) von der Winkelge-
schwindigkeit Ω rotierender Komponenten abhängig, so lassen sich die Eigenkreisfrequenzen
ωk (Ω ) und die Abklingkonstanten δk (Ω ) für k = 1, 2, · · · , K zu = 1, 2, · · · , L Ω -Werten in
den L × K-Matrizen om und dk abspeichern. Die Programmierung von (3.54), (3.55) folgt in:
Dk=dk./sqrt(om.ˆ2 + dk ) % Lehrsches Dämpfungsmaß (3.54)
theta=2*pi*Dk./sqrt(1-Dk.ˆ2); % logarithmisches Dekrem. (3.55)
figure, plot(Om, Dk(:,1:2)) % Grafik, Dk über Ω
Vgl. auch linear_ImDrLa.m, Zentrifuge.m in [52]; insbesondere die zugehörigen grafi-
schen Auswertungen.
3. instabil, wenn mindestens ein Eigenwert λk von A einen positiven Realteil hat, ℜ(λk ) > 0,
oder die Rangbedingung nach 2. für mehrfache Eigenwerte nicht erfüllt ist.
Für die Lösung gilt wieder (3.44), (3.45) unter den dort eingeführten Voraussetzungen. Alle
Sonderfälle sind u. a. in [9] nachzulesen.
Bezüglich der rechten Seite unterscheidet man z. B. Krafterregung, Fußpunkterregung und Un-
wuchterregung. Die Bewegungen y können translatorischer wie rotatorischer Art sein. Bezüglich
der Erregerstruktur h (t) unterscheiden wir:
yp = ∑ y pk (3.58)
k=1,2
3.3 Erzwungene Schwingungen 149
für (3.1), werden hier ermittelt, wobei wir wieder statt y p stets kurz y schreiben. Die allgemeine
Lösung folgt schließlich aus der Überlagerung aller Teillösungen wie in (3.6) bzw. (3.10). Sie
ist an Anfangswerte anzupassen, wie in Abschn. 8.2 sowie in anpass.pdf und in erzw.m,
linear_ImDrLa.m aus [52] gezeigt.
Systemparameter
Masse 1 m1 = 100 kg
Masse 2 m2 = 5 kg
Steifigkeit k01 = 105 N/m
Steifigkeit k12 = 104 N/m
Dämpfung d01 = 10 Ns/m
Dämpfung d12 = 1 Ns/m
Erdbeschleunigung g = 9,83 m/s2
s
Erreger- ĥh = [20, 0]T N
c
Amplituden ĥh = [50, 0]T N
Alle vorgestellten Methoden werden auf die Zwei-Massen-Schwingerkette aus Bild 3.4 ange-
wendet und programmiert. Wichtige Programmsegmente sind abgedruckt, der vollständige Code
erzw.m mit der grafischen Auswertung in der Function: plot_erzw.m ist in [52] abgelegt.
Bemerkung zum Schwinger: In der Lage y1 = 0, y2 = 0 sind die Federn entspannt, an beiden
Massen greift eine harmonische Erregung an. Die Bewegungsgleichung entspricht (3.56) mit
G = N = 0 und h (t) nach (3.57) sowie
m1 0 k01 −k12 d01 −d12 m1 g
M = ; K = ; D = ; h =
0
,
0 m2 −k12 k12 −d12 d12 m2 g
s,c
den Erregeramplituden ĥh und Parametern aus der Tabelle neben Bild 3.4.
für y ∞ , der statischen Ruhelage, Gleichgewichtslage oder bei allgemeiner periodischer Anregung
den Mittelwert der Schwingung.
150 3 Lineare Schwingungsmodelle
Für den harmonischen Erregerterm in (3.57) bieten sich mehrere Formulierungen an, die sich im
Lösungsweg und der Interpretation der Lösung unterscheiden. Einige sollen vorgestellt werden.
Die Bewegungsgleichung (3.62) steht einerseits für eine Schwingung um y ≡ 0 andererseits für
eine um die Gleichgewichtslage y ∞ nach (3.61), denn mit y := y ∞ +yy folgt aus (3.56) mit (3.57):
s c
M ÿy + Pẏy + Qy = ĥh sin Ωt + ĥh cos Ωt . (3.62)
Der Lösungsansatz
kann entsprechend (3.57) auch als cos- (oder sin-) Funktion mit dem Phasenwinkel-Vektor Φ
Φ ),
y (t) = ŷy. ∗ cos (eeΩt ±Φ e = [1, 1, . . . , 1, 1]T Eins-Vektor, (3.64)
hier in MATLAB -orientierter Form, geschrieben werden, wobei (+ , −) für einen Phasenvoreil-
bzw Phasennacheilwinkel steht. Aus (3.64) folgt mit dem Additionstheorem
Setzen wir (3.63) in (3.62) ein und gleichen die linear unabhängigen sin - und cos -Terme ab, so
finden wir das algebraische inhomogene Gleichungssystem
s " s #
Q − Ω 2M −ΩP P ŷy ĥh
= c (3.67)
ΩP P Q − Ω 2M ŷyc ĥh
oder kurz
T s c
T
H (Ω )ȳy = h̄h, ȳy = (ŷys )T , (ŷyc )T , h̄h = (ĥh )T , (ĥh )T (3.68)
3.3 Erzwungene Schwingungen 151
und schließlich
mit der reellen Frequenzgang-Matrix F (Ω ). Gleichung (3.69) und damit die Amplituden ŷy nach
(3.65) sowie den Phasenwinkel Φ nach (3.66) werten wir in Abhängigkeit von Ω aus und er-
halten den Amplituden- und Phasenfrequenzgang. Man spricht auch von einem quasistationären
Hochlaufvorgang. Dies lässt sich unmittelbar programmieren.
Sind darüber hinaus die Zeitverläufe der harmonischen Schwingung zu Ω = konst von Inte-
resse, dann ist es zweckmäßig (3.63) auszuwerten. Mit t T = (t1 , t2 , . . . , 2π/Ω ) geht (3.63) in
die Matrizengleichung
MQ-System: Ist P = 0, liegt also ein MKN- oder MK-System vor, dann zerfällt (3.67) bezüglich
der Sinus- und Cosinus-Terme in die beiden algebraischen Gleichungssysteme f -ter Ordnung
152 3 Lineare Schwingungsmodelle
oder kurz
s,c
Q − Ω 2M ŷys,c = ĥh , (3.72)
was den Rechenaufwand gegenüber (3.67) reduziert: Ordnung ist halbiert, Umformung der Ko-
Q − Ω 2M ) = 0 tritt Resonanz auf; Ω = ω j , Die
effizientenmatrix erfolgt nur einmal. Für det(Q
Ergebnisse speichern wir in dreidimensionalen Feldern (Arrays), vgl. S. 23. Zu jeder f × nu -Seite
gehören die Ergebnisse eines Ω -Wertes.
MATLAB-Formulierung des MQ-Systems, vollständig in [52], Programm erzw.m:
% f, nu, JJ usw. vorab vereinbart % vgl. erzw.m
II=length(Om); % Dimension von Om, Ω
y_sc=zeros(f,nu,II); % 3D-Null-Array, II Seiten
for ii=1:II % Lösung von Seite ii
H0=Q-Om(ii)ˆ2*M; % Koeffizienten-Matrix (3.72)
y_sc(:,:,ii)=H0 \[h_s,h_c]; % Lösung von (3.72), 2 rechte S.
end
3.3 Erzwungene Schwingungen 153
Eine weitere Formulierung basiert auf komplexen Anregungsfunktionen. Wir ersetzen hierzu die
Zeitfunktionen der Anregungsterme in (3.62) durch
1 iΩt 1 iΩt √
cos Ωt = e + e−iΩt , sin Ωt = i e − e−iΩt , i= −1
2 2
und erhalten damit für (3.62)
M ÿy + Pẏy + Qy = ĥh eiΩt +ĥh e−iΩt (3.73)
Da in ξ̂ξ die Phaseninformation enthalten ist, muss auch ξ̂ξ komplex sein. Der Amplitudenvektor
ξ
ξ̂ berechnet sich nach einsetzen von (3.76) in (3.75) zu
−1
ξ̂ξ = −Ω 2M + iΩP
P +Q
Q ĥh = F (iΩ )ĥh, (3.77)
wobei F (iΩ ) die komplexe Frequenzgang-Matrix ist. Für den zweiten Lösungsanteil gilt
ξ = ξ̂ξ e−iΩt → ξ̂ξ = F (−iΩ )ĥh , (3.78)
so dass (3.75) mit der rechten Seite ĥh e−iΩt erfüllt ist. Die Lösung von (3.73) genügt dann
y (t) = ξ̂ξ eiΩt +ξ̂ξ e−iΩt ; ξ̂ξ konj. kompl. zu ξ̂ξ
(3.79)
= 2|ξ̂ξ |. ∗ cos (Ωeet + arg (ξ̂ξ )), MATLAB-orientiert
154 3 Lineare Schwingungsmodelle
oder
y (t) = 2Re(ξ̂ξ ) cos Ωt −2Im(ξ̂ξ ) sin Ωt = ŷyc cos Ωt + ŷys sin Ωt. (3.80)
ŷyc ŷys
Geometrisch stellt (3.79) zwei Drehzeiger dar, die gegenläufig mit Ω umlaufen. Die Resultieren-
de ist, wie in Bild 3.6 für die k-te Komponente gezeigt, die reelle Lösung (3.80).
Die Lösung von (3.81)1 ist dann y (t) = Re(ζζ (t)). Mit dem Ansatz
ζ = ζ̂ζ eiΩt
3.3.2.4 Lösungsverhalten
Alle vorgestellten Methoden zur Bestimmung der Schwingungsamplituden führen auf ein alge-
braisches inhomogenes Gleichungssystem der Struktur
H (Ω )ûu = fˆ
ûu = H −1 (Ω ) fˆ
(3.85)
= F (Ω ) fˆ
H (Ω ))
adj(H H (Ω ))
adj(H
F (Ω ) = = (3.86)
H (Ω ))
det(H N
aus der Adjungierten und der Determinanten von H . Demnach folgt für eine Lösungskomponente
aus (3.85)
Zj 1 1
û j = , aus: ûu = H (Ω )) fˆ = Z ,
adj(H
N N N
womit vier Lösungstypen zu unterscheiden sind
1. Zj
= 0, N
= 0 Allgemeine Lösung, Amplituden beschränkt
2. Zj = 0, N
= 0 Tilgung, einzelne Amplituden verschwinden
3. Zj
= 0, N = 0 Resonanz; û j → ∞
4. Zj = 0, N = 0 Scheinresonanz; Amplituden beschränkt
Ist N = 0 (Koeffizientenmatrix H singulär), dann entspricht N der charakteristischen Gleichung
des jeweils zugehörigen Eigenwertproblems gebildet mit eλt , wenn λ j = iΩ ; d. h. Eigenkreis-
frequenz ω j und Erregerkreisfrequenz Ω stimmen überein, es liegt Resonanz vor. Dies kann nur
156 3 Lineare Schwingungsmodelle
dann eintreten, wenn mindestens eine ungedämpfte (δ j = 0), also harmonische Eigenschwingung
existiert, was in dämpfungsfreien Systemen, d. h. in MK-, MGK-Systemen, für alle Eigenschwin-
gungen gilt.
Im Allgemeinen spricht man aber auch dann von Resonanz – besser von Resonanzerscheinung
–, wenn N(Ω ) gegen ein relatives Minimum strebt und Z j
= 0 ist. Dies ist der Fall, wenn in
schwach gedämpften Systemen Ω ≈ ω j mit δ j
= 0 (klein) ist.
zugrunde. Der Lösungsanteil infolge der konstanten Störung ergibt sich unmittelbar zu
x ∞ = −A
A−1b 0 . (3.88)
Für die harmonischen Terme betrachten wir, wie in Abschn. 3.3.2.2, die verkürzte Anregung
Die auftretenden Lösungstypen sind die aus Abschn. 3.3.2.4. Angewendet wird die Vorgehens-
weise in Abschn. 8.2.
Formulierung mit MATLAB Functions: Die komplexe Bewegungsgleichung (3.82) lässt sich
am einfachsten aufbereiten, um mit der Function
bode oder freqresp
aus der Control System Toolbox die Frequenz- und Phasengänge zu berechnen. Darauf wollen
wir kurz eingehen. Der Berechnung zu diesen Functions liegt die Zustandsraumdarstellung
żz = Az +B
B eiΩt
(3.92)
y = Cz +D
D eiΩt
liefert
(iΩE E −A
A)ẑz = B −→ ẑz = (iΩE A)−1B
E −A
ŷy = Cẑz +D
D
mit
s
s
T c
c
T
b̂b = 0 Tf ,1 , (ĥh )T ; b̂b = 0 Tf ,1 , (ĥh )T (3.95)
lassen sich die Matrizen in (3.93) ableiten. A entspricht (3.9), C nc ,2 f hängt von der Anzahl der nc
Ausgängen ab. Bei der Eingangsmatrix B ist eine komplexe und eine reelle Formulierung
c s
c s
b = b̂b − i b̂b oder B = b̂b , −b̂b (3.96)
denkbar. Dementsprechend enthält ŷync ,1 und damit Dnc ,1 in (3.93) eine oder aufgrund der zwei
rechten Seiten ŷync ,2 , Dnc ,2 zwei Spalten. Wir arbeiten mit dem komplexen Eingangsvektor b aus
(3.96) weiter. In erzw.m, [52] sind beide Formulierungen programmiert. Die Lösung zur kom-
plexen Eingangsmatrix lautet
bzw. mit der Schwingungsamplitude |ŷy|, dem Voreilwinkel Φ sowie der Punktoperation .∗
y = |ŷy|. ∗ ei Φ ei Ωt . (3.98)
Die Function bode gibt |ŷy| und die Phase Φ , die Function freqresp die komplexe Amplitude ŷy
aus. Die Phase berechnet sich anschließend zu
Jedem Ergebnis |ŷy|, Φ , ŷy ist in Abhängigkeit von Ω = (Ω1 , Ω2 , . . . , ΩL ) ein dreidimensiona-
les Array zugeordnet. Dabei wird von zwei möglichen Eingängen bzw. rechten Seiten in (3.92)
ausgegangen. Jedem Eingang wird eine Spalte pro Seite zugeordnet. Liegt, wie hier, nur ein ein-
dimensionaler Ausgang zu Ωk vor, dann enthält die zweite Spalte die Dimension 1 (Singleton
dimension index) und damit keine Information. Mit
y_d(:,:) = y_d(:,1,:); bzw. y_d = squeeze(y_d);
kann diese Spalte unterdrückt werden.
158 3 Lineare Schwingungsmodelle
Zur Auswertung mit den beiden Functions werden unten die wesentlichen Programmschrit-
te aus erzw.m in [52] angegeben. Weitere Aufrufvarianten sind der Online-Hilfe (z. B. help
bode) zu entnehmen. In jedem Fall sind die Systemmatrizen aus (3.92) in dem State-Space-
Model (unten; sys) für zeitkontinuierliche Systeme zusammenzufassen, womit dann weiter ge-
arbeitet wird.
MATLAB-Formulierung des Zustands-Modells (State-Space-Model), Control System Toolbox
% sys = State-Space Modell; zeitkontinuierlich (ss)
M_1=inv(M); % Inverse von M
A=[zeros(f) eye(f); % Zustandsmatrix
-M_1*[Q P]];
B=[zeros(f,nu); % Eingangsmatrix B, nu Eing.
-M_1*[h_s h_c]];
C=[eye(f) zeros(f)]; % Messmatr., f Ausgänge
Dm=zeros(f,nu); % Durchgangsmatrix, Nullmatr.
sys=ss(A,B,C,Dm); % State-Space Modell
%..................... ...........................
$t
x (t) = Φ (t) x (t0 ) + Φ (t − τ) b (τ) dτ, Φ (t) = eAt . (3.100)
t0
3.3 Erzwungene Schwingungen 159
Die Antwort (3.100) stellt im Gegensatz zur bisherigen Betrachtung bereits die Überlagerung
einer freien x h = Φ (t) x 0 , die den Einschwingvorgang wie in (3.50) beschreibt, und einer er-
zwungenen Schwingung (partikulären Lösung) dar.
Für die Impuls- bzw. Delta- und der Sprungfunktion kann das Integral auf der rechten Seite
von (3.100) angegeben werden. Dies soll stichwortartig erfolgen.
• Impulsfunktion: b (t) = b I δ (t − tI ), δ (t − tI ) Dirac-, Delta-Funktion (3.101)
Impulsantwort:
$t
x I (t) = Φ (t) x 0 + Φ (t − τ) b I δ (τ − tI ) dτ; Φ (t) = eAt
0 (3.102)
Φ (t) x0 0 ≤ t < tI , vgl. (3.50)
=
Φ (t) (xx0 + Φ (−tI ) bI ) t > tI
160 3 Lineare Schwingungsmodelle
Bild 3.9: Impuls- und Sprungantwort für das Begleitbeispiel, x (0) = [0.0005; 0; 0; 0]T
4 Simulation unter Simulink
Simulink ist eine interaktive grafische Entwicklungsumgebung zur Modellierung und Simulati-
on linearer und nichtlinearer dynamischer Systeme mittels Signalflussgrafen, wobei u. a. nichtli-
neare Zusammenhänge und viele Signalerzeugungen blockorientiert gewonnen werden. Das zu
simulierende mathematische Modell eines dynamischen Systems wird dazu grafisch mit Funkti-
onsblöcken in dem Modell-Fenster nachgebildet und als MDL-File abgespeichert. Das Simulink-
Tool arbeitet somit gleichungsorientiert im Gegensatz zu den Tools: SimScape, SimMechanics,
SimDriveline, SimPowerSystems und SimHydraulics, welche auf einer physikalischen Modellie-
rung mechanischer, elektrischer und hydraulischer Systeme in der Simulink-Umgebung basieren.
Die System-Parameter/Anfangswerte lassen sich direkt in den Funktionsblöcken oder indirekt
mittels Workspace, also durch Tastatureingabe und/oder über ein M-File unter MATLAB, einstel-
len. Die Ergebnisse sind wiederum in Simulink und/oder MATLAB darstellbar. Eine Weiterverar-
beitung der Daten in der MATLAB-Umgebung ist somit möglich.
Bezüglich der Ausführung beziehen wir uns auf MATLAB R2011a und Simulink 7.7 unter Win-
dows 7. Die Programme der Begleitbeispiele sowie die von Ergänzungen sind in [52] abgelegt.
Die für einen Einstieg in Simulink notwendigen Kenntnisse sollen kurz zusammengefasst und
später beispielorientiert ergänzt werden. Zur Vertiefung enthält u. a. Kapitel 8 mehrere Simulink-
Projekte unterschiedlicher Schwerpunkte. In Kapitel 6 werden mit der Stateflow Toolbox sowie
in Kapitel 7 mit der SimMechanics Toolbox weitere Blockelemente für die Simulink-Umgebung
eingeführt.
Ergänzende Erläuterungen zur Handhabung und Syntax sind [1] ,[2], [8], [31] zu entnehmen.
Z. B. sind in [2] Grundlagen mit Beispielen sehr detailliert und übersichtlich zusammengefasst.
Zum wesentlichen Hilfsmittel sollte aber auch hier die Online-Hilfe, die von Beginn an gezielt
einzusetzen ist, werden.
u y
Zustände x
Parameter p
Eingang Ausgang
Block−Name
T
x = xTc , xTdk (4.1)
kann zeitkontinuierliche (xxc ) oder/und zeitdiskrete (xxdk ) Zustände enthalten. Es gelten die mathe-
matischen Beziehungen
Derartige Bausteine beschreiben also das Ein-/Ausgangsverhalten mit der eindeutigen Signal-
fluss-Richtung u → y .
Darüber hinaus existieren Blöcke ohne Eingang (Quellen, Sources), z. B. Constant Blöcke,
Funktionsgeneratoren und solche ohne Ausgang, z. B. To Workspace Block (Senke, Sinks).
Alle Blöcke sind in der Block-Library und in Blocksets zusammengefasst, vgl. Abschn. 4.3.1.
Sie sind gekennzeichnet durch den Block-Namen und das Block-Icon. Bei Links-Doppelmaus-
klick auf den Block öffnet sich die Block Parameters Dialogbox, in der – neben einer kurzen
Erklärung – spezifische Parameter des Blocks eingestellt werden können (Standard- (Default-)
Werte sind vorgegeben). Darüber hinaus existiert ein Help-Button, über den gezielt die zugehö-
rige Online-Hilfe geöffnet werden kann. Bei Rechts-Mausklick auf den Block öffnet sich ein
Kontextmenü, in dem u. a. Befehle zum Editieren von Blockeigenschaften und Formatieren des
Blocks ausgewählt werden können.
4.1.2 Simulationsablauf
Entsprechend der mathematischen Formulierung des Problems wird das Simulationsmodell
durch Verbinden geeigneter Funktionsblöcke und deren zugehörigen Parametern aufgebaut. Die
Simulation des Modells setzt sich dann aus den beiden Phasen Initialisierung und Ausführung
bezüglich der Zeit, meist numerische Integration, zusammen.
• Initialisierungsphase:
1. Die Blockparameter werden an MATLAB zur Auswertung übergeben und die sich er-
gebenden numerischen Werte werden den Blöcken zugeordnet.
2. Die Modell-Hierarchie wird weitgehend aufgehoben, d. h. die Blöcke jedes Subsys-
tems, dessen Ausführung nicht an Bedingungen geknüpft ist, werden in das Gesamt-
Modell einbezogen, so dass ein einziges Block-Modell entsteht.
3. Blöcke werden entsprechend dem Ablauf der Berechnung (serielle Arbeitsweise des
Digitalrechners) mittels Sortier-Algorithmus in eine abarbeitbare Reihenfolge
gebracht. Dabei ist zu beachten, dass für jeden Block bei der Berechnung des Aus-
gangs der dazu benötigte Eingang bekannt ist. D. h. es muss beim Start der Simulation
von Blöcken, die einen vorgegebenen Ausgang besitzen, z. B. die Anfangswerte der
Integrierer, ausgegangen werden. Solche Blöcke werden History-Blöcke genannt. Blö-
cke, die in Rückführungsschleifen, z. B. ohne zwischengeschaltetem Integrierer oder
Totzeitglied, liegen, bei denen der Ausgang direkt auf den Eingang wirkt, werden
erkannt. Dies sind so genannte algebraische Schleifen, bei denen fo (xx) selbst vom
Ausgang abhängt. In Bild 4.2 ist ein derartiges Beispiel angegeben. Innerhalb dieser
4.2 Die Integrationsverfahren 163
Schleifen sind keine seriellen Rechenschritte mehr vorgebbar. Es führt nur eine kon-
vergierende iterative Berechnung des Ausgangs zum Ziel, siehe auch Abschn. 4.5.
y1=u2
u1 sqrt(2)*u(1)+4 sin y2
Fcn Trigonometric
Gain
Function
1.2
√
y1 = 2 u1 + 4, u1 = 1,2 y2
√
y2 = sin u2 = sin (1,2 2 y2 + 4), beide Seiten hängen von y2 ab
Die Tabellen 4.1 und 5.1 Seite 238 geben eine Kurzbeschreibung der verfügbaren Verfahren
wieder. Ausführliche Beschreibungen enthält die Online Hilfe u. a. unter: Choosing a Solver.
Grundlagen der mathematischen Methoden sind [59], [61], [65] zu entnehmen. Hier geben
wir, in Bezug auf die Integrator-Wahl, einen kurzen Überblick.
Grundsätzlich sind Verfahren mit fester –Tabelle 4.1– und variabler –Tabelle 5.1– Schritt-
weite h zu unterscheiden. Dabei kann die Integrationsmethode ein Einschritt- oder Mehrschritt-
verfahren sein, vgl. Bild 4.3, S. 165. Wie die Namen zum Ausdruck bringen, benutzen diese
Verfahren Information aus einem [tn , tn+1 ] oder mehreren [tn−k , . . . , tn , tn+1 ] Integrationsinter-
vallen. Dies kann wiederum auf eine explizite oder implizite Formulierung der Integrationsme-
thode, siehe Bild 4.3, S. 165, führen. Kombinationen beider Typen sind im Einsatz. Dabei werden
die Formeln auf bestimmte Eigenschaften, z. B. hohe Genauigkeit, gute Stabilität, getrimmt. Zu
den modernen Verfahren für steife Differenzialgleichungen zählen die Mehrschrittverfahren nach
den BDF-Methoden (Backward Differentiation Formula); vgl. Bild 4.3, S. 165. Unter MATLAB
gibt es eine modifizierte Methode, das NDF-Verfahren (Numerical Differentiation Formula); das
BDF-Verfahren ist optional aufrufbar.
Einschrittverfahren
Um einen kleinen Einblick in die Methoden mit den MATLAB-Bezeichnungen der Integrations-
verfahren zu erhalten, sollen zunächst die Verfahren ode4, ode5 und ode451 kurz skizziert werden.
Sie sind Vertreter der Einschrittverfahren auf der Basis der RUNGE -K UTTA-Methode. Allgemein
lassen sich, ausgehend von der skalaren Differenzialgleichung ẋ = f (t, x), die expliziten RUNGE -
K UTTA-Methoden – vgl. Bild 4.4 – wie folgt beschreiben:
Steigungswert in tn k1 = f (tn , xn ); xn := x(tn )
Es sollen die Begriffe explizite und implizite Einschritt- und Mehrschrittverfahren am Beispiel erläutert
werden.
Einschrittverfahren: Information aus [tn , tn+1 ]
E ULER vorwärts xn+1 = xn + h f (tn , xn )
- explizites Verfahren 1. Ordnung (Fehler 1. Ordnung)
A DAMS -M OULTON-Verfahren
h
xn+1 = xn + (251 fn+1 + 646 fn − 264 fn−1 − 106 fn−2 − 19 fn−3 )
720
- implizites 4-Schrittverfahren
Die Koeffizienten ai, j , bi , ci charakterisieren die s-Schrittmethode, sie werden in der so genann-
ten B UTCHER-Tabelle
c1
c2 a2,1
c3 a3,1 a3,2
..
. ... ... ...
cs as,1 as,2 . . . as,s−1
b1 b2 . . . bs−1 bs
angegeben. Damit ist das klassische RUNGE -K UTTA2 -Verfahren in der Form
0
1 1
2 2
1 1
2 0 2
1 0 0 1
1 2 2 1
6 6 6 6
formulierbar. Es ist ein 4-Schrittverfahren der Ordnung 4 mit dem algorithmischen Aufbau
k1 = f (tn , xn ) Steigungswerte ki
h h
k2 = f (tn+ 1 , xn + k1 ), zur Schreibweise: tn + → tn+ 1 usw.
2 2 2 2
h
k3 = f (tn+ 1 , xn + k2 )
2 2
k4 = f (tn+1 , xn + hk3 )
h
xn+1 = xn + (k1 + 2k2 + 2k3 + k4 ) Ergebnis, explizite Formel
6
sowie der geometrischen Interpretation nach Bild 4.4. Man beachte, dass jede Stufe eines RUN -
GE -K UTTA -Verfahrens eine Funktionsauswertung f (·) benötigt. Ein Integrationsschritt ist daher
i. a. etwa viermal so teuer wie der entsprechende E ULER-Schritt, vgl. Bild 4.3, S. 165. Dennoch
2 genauer: das Verfahren von K UTTA
4.2 Die Integrationsverfahren 167
ist aufgrund der hohen Ordnung das Verfahren von RUNGE -K UTTA viel effizienter, da u. a. mit
größerer Schrittweite gearbeitet werden kann. Dies setzt sich fort, denn die D ORMAND -P RINCE-
Methode [14] mit den Koeffizienten nach Tabelle 4.2 ist eine der effektivsten expliziten RUNGE -
K UTTA-Formeln, obwohl sich der Rechenaufwand noch einmal erhöht. Tabelle 4.2 enthält auch
0
1 1
5 5
3 3 9
10 40 40
4
5
44
45 − 56
15
32
9
8
9
19372
6561 − 25360
2187
64448
6561 − 212
729
1 9017
3168 − 355
33
46732
5247
49
176 − 18656
5103
1 35
384 0 500
1113
125
192 − 2187
6784
11
84
(5)
xn 35
384 0 500
1113
125
192 − 2187
6784
11
84 0
(4)
xn 5179
57600 0 7571
16695
393
640 − 339200
92097 187
2100
1
40
die beiden MATLAB-Verfahren ode5 und ode4. Die 7-Schrittmethode (s=7) basiert auf den beiden
(5) (4)
Ergebnissen xn und xn , die mit den gleichen Steigungswerten ki aber unterschiedlichen Ge-
(5)
wichtungen b j ermittelt werden. Greift man auf das Ergebnis xn zurück, dann handelt es sich
um das des ode5 Verfahrens mit fester Schrittweite h; Verfahren 5. Ordnung. Im anderen Fall er-
gibt sich das Ergebnis des Verfahrens ode4 der Ordnung 4. Verwendet man beide Ergebnisse, so
(5) (4)
wird – z. B. aufgrund der Abweichung |xn − xn | – ein Maß zur Ermittlung der Schrittweite h,
im Zusammenhang mit einem vorgegebenen Fehler ε, bestimmbar. Wir erhalten Methoden mit
(4) (5)
variabler Schrittweite. Dabei kann xn (ode54) oder xn (ode45) als Ergebnis akzeptiert werden.
In gleicher Weise sind die anderen Einschrittverfahren in Tabelle 5.1, S. 238 zu interpretieren.
Wie die bisher betrachteten expliziten Einschritt- (RUNGE -K UTTA-) Verfahren stellt man
auch die impliziten Verfahren (z. B. das E ULER-Rückwärts-Verfahren aus Bild 4.3, S. 165) über-
sichtlich in einem Tableau der Struktur
Nachteil der impliziten RUNGE -K UTTA-Verfahren ist, dass die ki nicht nacheinander berechnet
werden können, sondern dass in jedem Schritt ein i. a. nichtlineares Gleichungssystem von s · N
Gleichungen in den k 1 , . . . , k s gelöst werden muss, wobei N die Dimension des Differenzialglei-
chungssystems bezeichnet.
Bei weniger steifen Differenzialgleichungen folgt aus dem Fixpunktsatz für kontrahierende
Abbildungen, dass die Fixpunktiteration gegen die Lösung (ki )i=1,...,s konvergiert, wenn die
Schrittweite die L IPSCHITZ-Bedingung, vgl. [65], erfüllt; z. B. für k2 aus der obigen impliziten
RUNGE -K UTTA-Formel im -ten Iterationsschritt
1 1
k2+1 = f tn + h, xn + h k1 + k2 , = 1, 2, . . . , k21 Startwert.
2 2
Bei steifen Systemen muss das nichtlineare Gleichungssystem für die ki immer mit dem N EW -
TON -Verfahren oder einer verwandten Methode gelöst werden. Hierfür benötigt man die JACOBI -
Matrix.
Eine dritte Möglichkeit ist die Kombination eines expliziten (Prädiktorschritt (P)) und eines
impliziten (Korrektorschritt (K)) Verfahrens, die so genannte Prädiktor-Korrektor-Methode. Für
die E ULER-Verfahren nach Bild 4.3, S. 165 bedeutet dies:
P
xn+1 = xn + h f (tn , xn ) Prädiktorschritt P , E ULER-Vorwärts-Schritt
K
xn+1 = xn + h f (tn+1 , xn+1
P
) Korrektorschritt K (+ z. B. Fixpunkt-Iteration)
Mehrschrittverfahren
In ähnlicher Weise wie die oben angesprochenen Einschrittverfahren sind auch die Mehrschritt-
verfahren gekennzeichnet, wobei zusätzlich die Ordnung des Verfahrens anpassbar bzw. einstell-
bar ist, z. B. ode113, ode15s aus Tabelle 5.1, S. 238.
Bei den linearen Mehrschrittverfahren benutzt man zur Berechnung der Näherung xn+s die be-
reits ermittelten – zeitlich zurückliegenden Werte – Näherungen xn+s−1 , xn+s−2 , . . . , xn . Mehr-
schrittverfahren sind somit nicht selbststartend und arbeiten deshalb zu Integrationsbeginn u. a.
mit Einschrittverfahren zusammen. Es werden explizite und implizite s-Schritt-Verfahren un-
terschieden, vgl. Bild 4.3, S. 165. Die Mehrschrittverfahren A DAMS -BASHFORTH , A DAMS -
M OULTON usw. basieren auf der numerischen Lösung einer Integralgleichung [65], die BDF-Me-
thoden werden dagegen mit Hilfe der numerischen Differenziation konstruiert. Beispiele implizi-
4.2 Die Integrationsverfahren 169
gelöst werden. Dies kann z. B. mit dem N EWTON-Verfahren mit dem Startwert xn erfolgen; hier-
zu muss die JACOBI-Matrix (∂ F/∂ x|xn+1 ), analytisch oder näherungsweise numerisch, berechnet
werden, vgl. Optionen zum Aufruf der Integrationsverfahren unter MATLAB in Kapitel 5.
Wesentlich für die Verfahrensauswahl ist die Kenntnis der Steifigkeit der Differenzialgleichung.
Wir geben eine Definition stichwortartig an: Ein Differenzialgleichungssystem heißt steif, wenn
die Eigenwerte des Systems sehr unterschiedliche (negative) Realteile aufweisen. Als Maß der
Steifigkeit gilt u. a. der Quotient der Beträge der absolut größten und kleinsten (negativen) Real-
teile der Eigenwerte
max j |ℜ(λ j )|
S := .
min j |ℜ(λ j )|
Bei steifen Differenzialgleichungen erreicht S Werte von 106 und höher. Das Problem der Stei-
figkeit existiert ausgeprägt bei nichtlinearen Differenzialgleichungen
Die Steifigkeit wird für das linearisierte System definiert, indem das lokale Verhalten der exak-
ten Lösung x (t) in der Umgebung von tn betrachtet wird. Hierbei liegt die Anfangsbedingung
x (tn ) = x n , wo x n die berechnete Näherungslösung an der Stelle tn bedeutet, zugrunde. Unter der
Voraussetzung der gestörte Lösung
entwickeln wir (4.3) in eine TAYLOR-Reihe und brechen nach dem ersten Glied ab
∂ f
ẋxn + żz(t) = f (tn , x n ) + z (t) + O(zz2 ),
∂xx n
woraus schließlich mit (4.3) die erste Näherung
∂ f
żz(t) = z (t) = J (tn , xn ) z (t)
∂xx n
170 4 Simulation unter Simulink
folgt. Dies ist eine lineare Differenzialgleichung mit konstanter Koeffizientenmatrix J (tn , xn ),
mit deren Eigenwerte sich S ermitteln lässt. Somit wird das qualitative Verhalten von x (t) in
der Umgebung von tn durch z (t) beschrieben. Das nichtlineare Differenzialgleichungssystem
wird als steif bezeichnet, falls die Eigenwerte der JACOBI-Matrix J (tn , xn ) sehr unterschiedliche
negative Realteile haben und S groß ist. Das Maß der Steifigkeit von (4.3) ist bei nichtlinearen
im Gegensatz zu linearen Systemen abhängig vom Zeitpunkt tn und der momentanen Näherungs-
Lösung x n , so dass sich S im Verlauf der Integration sehr stark ändern kann. Moderne Verfahren
nutzen dies zur Anpassung an den Integrationsablauf und stellen damit die Schrittweite sowie
die Ordnung des Integrationsverfahrens ein.
Eine sinnvolle Erweiterung der Definition für steife Systeme ist:
max j |λ j |
S := , Anhaltswert: S > 104 , . . . , 106 ,
min j |λ j |
wobei durch die Eigenwerte λ j auch schwach gedämpfte, hochfrequente Lösungsanteile erfasst
werden.
In MATLAB sind mehrere Methoden zur Lösung steifer Systeme implementiert, vgl. Tabel-
le 5.1. Die Function ode15s verwendet BDF- oder NDF-Formeln der Ordnung k ∈ {1, 2, 3, 4, 5};
vgl. [59], [65]. NDF-Methoden sind Modifikationen der BDF-Methoden, die ebenfalls A-stabil
(absolut stabil) [59], [65] sind. Sie besitzen eine etwas größere Genauigkeit als die BDF-Me-
thoden. Die Function ode23s verwendet ein ROSENBROCK-Verfahren der Ordnung 3, wobei der
Fehler mit einer Methode der Ordnung 2 geschätzt wird. Es ist geeignet, wenn die Genauigkeits-
ansprüche nicht zu hoch sind.
ẍ − ε ( 1 − x2 ) ẋ + x = 0
mit sehr großen Parametern ε oder mechanischen Systemen mit sehr unterschiedlichen Steifig-
keits- und Dämpfungskonstanten. In diesen Fällen wird man sofort steife Löser verwenden.
Liegen keine guten Gründe dafür vor, dass eine steife Lösung zu erwarten ist, wird man zuerst
versuchen, das gegebene Problem mit einem nicht-steifen Löser zu behandeln, denn explizite
(eingebettete) RUNGE -K UTTA-Verfahren, z. B. ode45, oder Mehrschrittverfahren vom A DAMS-
Typ sind wesentlich billiger als steife Löser. Bei steifen Lösern hat man in jedem Schritt ein
nichtlineares Gleichungssystem zu lösen und hierzu die JACOBI-Matrix der rechten Seite oder
eine Näherung davon aufzustellen.
Praktisch: Beobachtet man, dass der Lösungsprozess nur sehr langsam voranschreitet, wird
man zu einem steifen Löser wechseln.
RUNGE -K UTTA-Verfahren ermöglichen eine einfache Schrittweitensteuerung (Adaptivität),
haben aber den Nachteil gegenüber dem A DAMS-Verfahren, dass in jedem Schritt die rechte Sei-
te von (4.2) an mehreren Stellen ausgewertet werden muss (für das Verfahren von D ORMAND
und P RINCE der Ordnung 5 an 6 Stellen). Beim Prädiktor-Korrektor-Verfahren kann man hohe
4.3 Simulink-Grundlagen 171
Ordnungen mit 2 oder 3 Auswertungen erreichen. Man wird daher ein Mehrschrittverfahren ver-
wenden, wenn die Auswertung der rechten Seite der Differenzialgleichung sehr teuer ist. In der
Regel wird man Verfahren hoher Ordnung nur dann verwenden, wenn die rechte Seite der Dif-
ferenzialgleichung sehr glatt ist. Man verwendet den TAYLORschen Satz, um Methoden hoher
Konsistenzordnung zu entwickeln.
Eine Regel für die Auswahl steifer Löser ist nicht so einfach zu formulieren. Einen Anhalts-
punkt geben die Stabilitätsgebiete der Verfahren, z. B. nach [59], [65]. Wenn man weiß, dass
die Eigenwerte der Linearisierung der rechten Seite in der Nähe der negativen reellen Achse
liegen, so wird man BDF bzw. NDF Formeln wählen. Weiß man, dass Eigenwerte der JACOBI-
Matrix näher an der imaginären Achse als an der negativen reellen Achse liegen, so wird man
ROSENBROCK-Methoden oder Extrapolationsverfahren verwenden.
4.3 Simulink-Grundlagen
Zunächst gehen wir auf Grundlagen zum Umgang mit Simulink ein, um daran anschließend die
Modellierung mit Simulink an einem kleinen Projekt zu vertiefen. Der Zugang zu Simulink er-
folgt mit dem Button in der Menü-Leiste des MATLAB Desktop nach Bild 1.1. Es öffnet sich
der Library Browser mit der Menüleiste File/Edit/View/Help. Insbesondere wird über
File/New/Model oder Ctrl+N ein neues Modell-Fenster mit der Menü-Leiste File/E-
dit/View/Simulation/Format/Tools/Help bereitgestellt. Entsprechend sind gespei-
cherte Simulink-Programme mit der Endung mdl zu öffnen. Für die letzten beiden Vorgänge
existieren die Standard-Button . Des Weiteren werden alle Hauptgruppen der Library ange-
zeigt, auf die wir im Folgenden eingehen werden.
ẋ = −0,5 x + 5
ist das Simulink-Modell zu erstellen. Die Zeit t und x sind mit dem To Workspace Block
und x p = ẋ mit dem Outport Block, siehe Abschn. 4.3.2, in den Workspace zu schrei-
ben. Zur Integration von ẋ wird ein Integrator Block, zur Abbildung der rechten Seite
172 4 Simulation unter Simulink
Bild 4.5: Beispiele für die Zuordnung der Funktionsblöcke der Library unter Simulink 7.7
ein Summierer, d. h. ein Sum Block (ohne Abbildung in Bild 4.5) benötigt. Die Kon-
stante 5 wird mit dem Constant Block und die Verstärkung von 0.5 mit dem Gain Block
realisiert. Nach dem Öffnen des Modell-Fensters (Ctrl+N) sind die ausgewählten
Blöcke der Library mit der linken Maustaste anzuklicken und bei gedrückter Taste ins
Modell-Fenster zu ziehen – click-and-drag mouse operation. Der Signalpfad zwischen
den Blöcken erfolgt, ausgehend vom Ein- oder Ausgang der zu verbindenden Blöcke,
ebenfalls mit gedrückter linker Maustaste. Eine automatische Signalverbindung wird
durch Aktivieren z. B. des Ausgangs-Blocks mit der linken Maustaste und anschließen-
der Aktivierung des Folgeblocks bei gleichzeitig gedrückter Strg- bzw. Ctrl- Taste
erreicht. Abschließend sind die Parameter 5, 0.5 sowie der Anfangswert x(0) = 0 des
Integrierers in die jeweilige Dialogbox einzutragen. Der Simulationsstart mit der zuvor
eingegebenen Integrationsdauer erfolgt über den Button Simulation/Start oder
dem Button. Das komplette Modell ist in Bild 4.6 abgebildet. Zum Experimentieren
dient Lib_Beisp.mdl aus [52].
Bild 4.7: Configuration Parameters Fenster von Solver und Data Import/Export, Simulink 7.7
Zeros crossing control ist die Nullstellen-Detektion spezieller Blöcke übergeordnet ein-
oder ausschaltbar.
Auf der Seite Data Import/Export nach Bild 4.7 unten wird u. a. der Datentransfer zwi-
schen Simulink und dem Workspace sowie einige Optionen organisiert:
• Load from workspace: Einerseits können unter Input ein Zeit- und Eingangsvektor t , u
und andererseits unter Initial State der Anfangswertvektor xInitial der Zustände an das
Simulink-Modell übergeben werden. Für [t,u] müssen im Modell dafür Inports-Blöcke
aus der Ports & Subsystems-Bibliothek vorhanden sein; siehe FromWorksp.mdl in [52].
• Save to workspace: Datentransfer aus dem Simulink-Modell in den Workspace. Dies bezieht
sich auf den Zeitvektor z. B. tout , auf den Zustandsvektor xout sowie auf die Ausgangsvaria-
blen yout , denen Outports-Blöcke – vgl. Bild 4.6 – aus der Ports & Subsystems-Bibliothek zu-
geordnet sein müssen. Die Reihenfolge der gespeicherten Zustände (Integrator-Ausgänge)
wird von dem Sortier-Algorithmus, wie in Abschn. 4.1.2 beschrieben, festgelegt. Sie kann
mit Format/ Block Displays/Sorted Order ins Modell-Fenster eingeblendet wer-
den. Darüber hinaus können die Zustandswerte (xFinal) zur Stopp-Zeit gespeichert wer-
den; siehe FromWorksp.mdl in [52].
• Save options: Unter Output options/Refine output ist es möglich, mit dem Refine
factor zusätzliche Ausgabewerte mittels Kurvenglättungs-Methoden im Integrationsin-
tervall [tn , tn+1 ] zu erzeugen; d. h. Refine factor = 1 liefert keine, Refine factor =
r liefert r − 1 Zwischenwerte. Der Defaultwert ist 1. Die Zwischenwerte beziehen sich nur
auf die Ausgabe und nicht auf die Darstellungen im Scope oder XY Graph.
Im Diagnostic-Fenster kann u. a. ausgewählt werden, wie bei den aufgelisteten Ereignissen
(z. B. Algebraic loop, Date overflow usw.) während einer Simulation reagiert werden soll; z. B.
mit: Warning, Error (Simulationsabbruch) oder none.
tatur oder M-File, erfolgen. Aus der MATLAB-Umgebung wird der Start mit dem Aufruf der
Function sim eingeleitet. Optionen werden mit simset gesetzt und können mit simget aufgelistet
werden, verfolge: help sim usw. Die einstellbaren Optionen umfassen z. B. die der Solver- und
Data Import/Export-Seite, z. B. RelTol, AbsTol, MaxRows, Refine usw. Ausgabe-
Daten werden entsprechend dem Function-Aufruf in eckige Klammern gesetzt, sie beinhalten
die Größen der Data Import/Export Seite unter Save to workspace. Daten des Workspace,
die im Feld Load from workspace aufgeführt sind, stehen im Aufruf hinter den Optionen. Die
Syntax eines Aufrufs lautet:
[tout, xout, yout] = sim(’modell’, timespan, options, tu)
mit – siehe auch FromWorksp.mdl in [52] –
tout Zeitvektor
xout Zustände, spaltenweise
yout Daten der Outports, spaltenweise
’model’ Name der Modelldatei, z. B. ’model’ ohne Endung mdl
timespan Zeitintervall: z. B. te Stoppzeit (bei Startzeit 0) oder
[ta, te] Start und Stoppzeit usw.
option mit simset zu kreierende
optionale Parameter (z. B. Genauigkeit) der Simulation
tu Eingangsvariablen über Inports Blöcke tu = [t, u]
Beispiel: Aufruf für eine Integration im Debugger-Mode nach Abschn. 4.3.5.8, bei der maximal
1000 Zeilenelemente ausgegeben und die Integrationsdaten mit einem zusätzlichen Zwischen-
wert geglättet werden sollen. Die Integrationszeit sei 10 s:
meine_opt= simset(’MaxRows’,1000,’Refine’,2,’debug’,’on’);
[t,x]= sim(’Prog_Name’,10,meine_opt);
dellfensters Schwing_M.mdl sind zunächst die Systemparameter und die Anfangswerte der
Integratoren mit 4 zu setzen. Danach erfolgt der Simulationsstart . Für eine grafische Darstel-
lung der Ergebnisse in der MATLAB-Umgebung kann die Click Function 5 ausgeführt werden.
Das zugehörige M-File erscheint im Editor und die Plotanweisungen werden abgearbeitet.
In den Beispiel-Programmen von Abschn. 4.5 und Abschn. 4.6, u. a. metro_S1.mdl [52]
wird gezeigt, wie Parameter von Blöcken mit Click Functions gesetzt werden können, vgl. auch
Beispiel 4.2.
c. Button Edit → create subsystem → Subsystem ist erstellt, vgl. Bild 4.10 un-
ten.
d. Eigene Kennung und Beschriftung einbringen; vgl. Abschn. 4.3.5.4.
e. Subsystem speichern; ggf. zuvor Block zur Isolierung in neues Fenster kopieren und
möglicherweise ergänzen.
2. Direkte Erstellung; vgl. Bild 4.10 rechts:
a. Block Subsystem aus Ports & Subsystems in das Modell-Fenster ziehen.
b. Doppelklick auf den Block öffnet das Fenster für das Subsystem; Modell kann erstellt
oder hineinkopiert werden.
In Bild 4.10 unten ist das Modell mit dem erstellten und anschließend maskierten Submodell,
siehe Abschn. 4.3.5.4, dargestellt. Der Model Browser mit den Modell-Elementen wird durch den
Button ein-/ausgeblendet. Experimentierfiles: SubModell_1.mdl, SubModell_2.mdl
in [52].
Texterzeugung
disp(’text’); erscheint zentriert im Block
text(x,y,’text’); über x,y positionierbar
fprintf(’text’)
disp(’text1 \ntext2’); mit Übergang auf neue Zeile \n
Grafikerzeugung
Darüber hinaus kann die Funktion des zu maskierenden Subsystems durch Grafiken im Block,
wie in Bild 4.10 unten, hervorgehoben werden. Mittels Plot-Aufruf lassen sich 2D-Grafiken di-
rekt erzeugen, z. B.
plot(sin(0:pi/100:2*pi)); oder
plot(t,y);,
wobei die Daten t und y im Fenster: Initialization/Initialization commands
z. B. wie mit
t=0:1/100:1; ; y=0.5+0.25*sin(2*pi*t);
erzeugt werden oder im Workespace liegen müssen. Im Icon-Fenster unter Units kann die
180 4 Simulation unter Simulink
Skalierungsart eingestellt werden u. a.: Normalized (Fenstereckpunkte, unten links (0,0) oben
rechts (1,1)) oder mit Autoscale automatisch an die Extremwerte des Fensters angepasst.
3D-Grafiken, z. B. mit plot3 erzeugt, müssen zunächst in ein spezielles Grafikformat konver-
tiert werden. Im Allgemeinen lassen sich Grafiken und Photos unterschiedlicher Formate (vgl.
help imread) zur Maskierung der Blöcke nutzen. Wir zeigen dies mit einer 3D MATLAB-Grafik,
die wir zunächst mit cplxroot(2,15) erzeugen. Die im Grafikfenster dargestellte Grafik expor-
tieren wir in das JPG-Format und speichern die Grafik z. B. unter SubGrafik.jpg. Dieses
File lässt sich mit
image(imread(’SubGrafik.jpg’))
einbinden, wie in Bild 4.11 gezeigt; vgl. auch SubDemo_1.mdl, SubDemo_2.mdl in [52].
a: 3D-Einbindung b: Photo-Einbindung
Labelerzeugung
Weiterhin lassen sich auch eigene Label der jeweiligen In- und/oder Outports anzeigen. Wir
geben zwei Möglichkeiten an, wobei vorausgesetzt wird, dass ein Block-Icon, wie in Bild 4.11,
existiert.
I Beschriftung der Ein- und Ausgabeports im Subsystem ändern:
– vorhandene Beschriftung mit rechter Maustaste anklicken
– Beschriftung ändern
– Edit Mask / Transparency auf Transparent setzen
II Für einen Block mit zwei Eingängen und einem Ausgang lauten die ins Drawing Com-
mand-Fenster einzutragenden Befehle:
port_label(’input’,1,’Eing 1’)
port_label(’input’,2,’Eing 2’)
port_label(’output’,1,’Ausg 1’)
vgl. Bild 4.11, wobei unter Transparency jetzt Opaque (undurchsichtig) auszuwählen
ist.
Parameter-Dialogbox
Darüber hinaus können auch subblockeigene Parameter-Dialog-Boxen erstellt werden, in denen,
wie in Standardblöcken, Parameter einzutragen oder zu aktualisieren sind, vgl. u. a. das Sub-
system der Fahrbahnunebenheit Bild 4.19 bzw. sim_v11s.mdl sowie sim_v12.mdl und
F_Profil in [52].
4.3 Simulink-Grundlagen 181
zusätzlichen Memory Block. In beiden Fällen leitet ein Goto bzw. Data Store Memory Block die
Signale an mehrere korrespondierende From bzw. Data Store Read Blöcke weiter. Der Eingang
z. B. in den Goto Block kann reell, komplex oder vektoriell aller Simulink-Datentypen sein. Dies
gilt auch für den portlosen Signalfluss in/aus Subsystemen, wie anhand eines Submodells zu
einem Ein-Massen-Schwinger mit Dat_trans.mdl in [52] gezeigt. Dabei sind einige Regeln
zu beachten, die wir anhand der Goto / From Blöcke kurz erläutern, vgl. Online Hilfe.
Wesentlich ist die Einstellung in der Parameterbox des Goto Blocks. Einerseits erhält das
Signal eine Bezeichnung (Tag), z. B. A wie in Bild 4.13 und andererseits den Tag Visibility Pa-
rameter: local, scoped, global, der vom Ort der Blöcke in der Hierarchie-Ebene des Modells
abhängig ist. Für miteinander korrespondierender Blöcke, sie enthalten den gleichen Tag Name,
ist zu unterscheiden:
• local: Goto und From Block liegen in einer Hierarchie-Ebene, d. h. in der Hauptmodellebe-
ne, wie in Bild 4.12, bzw. in einem Subsystem. Der Tag Name steht in eckiger Klammer,
z. B. [ A ].
• scoped: Neben dem Goto und From Block wird der Goto Tag Visibility Block benötigt. Da-
bei können alle drei in einer Ebene, z. B. einem Subsystem (weniger sinnvoll), liegen oder
in unterschiedlichen Ebenen, z. B. Subsystemen unterhalb des Goto Tag Visibility Blocks.
Beispiel: Goto Tag Visibility und From Block in einer Ebene und der Goto Block in einem
eingebettetem Subsystem, vgl. Bild 4.13 oder Goto Tag Visibility und Goto Block in der
übergeordneten Ebene und der From Block in einem Subsystem, vgl. GotoFrom.mdl in
[52]. Bei zwei und mehr ähnlich aufgebauten Ebenen, die jeweils Bestandteil eines Subsys-
tems sind, ist mehrfach der gleiche Tag Name zulässig. Der Tag Name steht in geschweifter
Klammer, z. B. { A } wie in Bild 4.13.
• global: Goto und From Block/Blöcke können in beliebigen Ebenen eines Modells angeord-
net sein. Mehrfach Tag Name sind auszuschließen.
Zusammenfassend: Liegen die Blöcke mit gleichem Tag Name in einer ebenen, so sind sie
mit local zu vereinbaren. Existieren mehrere geschachtelte Subsysteme, so empfiehlt sich die
scoped Vereinbarung. Namensgebungen führen weniger zu Konflikten. Bei übersichtlich ange-
ordneten Subsystemen bietet sich die global Vereinbarung an. In der Parameter-Box des Goto
Blocks werden alle Verbindungen mit den korrespondierenden From Blöcken angezeigt. Mit
einem Mausklick auf den jeweiligen Eintrag wird der From Block im Simulink-Modell hervorge-
hoben.
MATLAB-Grafik-Fensters (figure) Bild 1.11 angegeben werden. Damit sind dann bekannte Ände-
rungen und Ergänzungen möglich.
Workspace, die Subsysteme des Modells usw. Ein Mausklick auf den Modell-Knoten öffnet
die Contents Spalte ergänzt um die im Modell befindlichen Blöcken sowie zugehöriger Block-
Informationen in Abhängigkeit von der Auswahl im Feld Column View: z. B. Default, System
I/O usw. Gleichzeitig erscheinen die Modell-Eigenschaften (Model Properties) in der Dialog
Spalte.
Die Dialog- und Parameter-Fenster lassen sich durch Mausklick auf ein Blocksymbol in der
Contents Spalte in der Dialog Spalte anzeigen, Inhalte können gesichtet und geändert werden.
Vorteil: Viele über die Kontext- (Shortcut-) Menüs angewählten modell- und blockeigenen
Boxen eines Simulink-Modells sind auch im Explorer zugänglich.
In der folgenden Ausführung gehen wir nur auf die Anwahl mittels Kontext-Menü aus dem
Simulink-Modell ein. Das Handling mit dem Explorer ist für den Benutzer sehr hilfreich. Es emp-
fiehlt sich deshalb, unterstützt durch die Online-Hilfe zum Explorer, mit den Beispiel-Program-
men zu experimentieren.
des Blocks auf den die Methode angewendet wird. U1 ist der Eingang, Y1 der Ausgang (mehrere
sind möglich). Mit lassen sich diese eines angewählten Blocks anzeigen.
Im Modell-Fenster wird im Animations-Mode einerseits die Box der folgenden Methode
(Next method box), vgl. Eintrag unter Outputs, eingeblendet und nach jedem weiteren Schritt
durch der Block mit dem gesetzten Break Point durch einen farbigen Pfeil (Block Pointer) und
einer Kachel (Method Tile) markiert. Die Kachel-Farbe und deren Lage enthalten Information
über den Ausführungsschritt, z. B. rot für Update, dunkelgrün für Outputs usw.
Für das Modell aus Bild 4.14 kann somit die Zeit TM sowie der Ein- und Ausgang am sin
Block verfolgt werden. Insbesondere zeigt sich, dass in einem Integrationsschritt versucht wird,
die algebraische Schleife iterativ zu lösen. Hier liegt Konvergenz vor.
In der Spalte Simulation Loop, siehe Bild 4.15, wird die Liste der Methoden, die während der
Simulation aufgerufen werden, hierarchisch in Baumstruktur angezeigt. Jeder Knoten steht für
eine Methode, er kann als zusätzlicher Break Point gesetzt werden. Die in der untersten Ebene
auftretenden Block Namen (Methoden), z. B. Trigo..., sind Hyperlinks. Ein Klick hierauf
markiert den zugehörigen Block im Modell-Fenster.
Mit den Button können alle oder wesentliche Schritte der Integration, also auch
zu Zwischenzeiten eines Integrationsintervalls (TM, Minor Time Step), angezeigt werden. Mit
(step) werden alle Methoden sämtlicher Hierarchie-Ebenen angezeigt, mit (step over) in je-
dem Schritt die der aktuellen Hierarchie-Ebene. Alle tiefer liegenden Methoden werden natürlich
186 4 Simulation unter Simulink
abgearbeitet aber nicht angezeigt. Mit (step out) erfolgt ein Sprung ans Ende (z. B. Trigo)
der aktuellen Methode, alle Zwischenschritte werden ausgeführt.
Mit (step top) wird an die Stelle der ersten Methode des nächsten Zeitschritts gesprungen
(im Allgemeinen an den Anfang der Simulationsschleife). Mit (step blockmth) erfolgt der
Sprung zum jeweils folgenden Block.
Diese Schritte sind auch ohne Break Point ausführbar. Experimente mit weiteren Beispielpro-
grammen sollten später durchgeführt werden.
und schließlich auf einer unebenen Fahrbahn. Die Radaufhängung wird durch die Feder (kA ), den
Dämpfer (dA ) und das C OULOMBsche Reibelement (Reibkraft FC ), z. B. infolge eines Blattfeder-
pakets nach [12], beschrieben; kR berücksichtigt die Reifensteifigkeit. Die Auslenkungen xA , xR
zählen wir aus der Gleichgewichtslage, die sich infolge der Gewichte einstellt.
Systemparameter: mA = 103 kg; mR = 102 kg; dA = 12 103 N s/m
kA = 40 103 N/m; kR = 40 104 N/m; FC = 400 N
Die zugehörigen Bewegungsgleichungen ergeben sich mit Bild 4.17 nach N EWTON aus
Abschn. 2.3.2.1 zu:
Aufgrund des Reibansatzes berücksichtigen die Bewegungsgleichungen die Bereiche der Gleit-
188 4 Simulation unter Simulink
Es liegen also Bewegungsgleichungen mit Unstetigkeiten vor, vgl. Kapitel 5. Dieses kann
numerisch Schwierigkeiten bereiten. Aus diesem Grund entschärft man das Problem oft durch
die abgebildete stückweise stetige Reibkennlinie (Sättigungsfunktion, sat).
x
= Ax + Bu
(4.7)
y = Cx + Du
aufbauen. Hierzu muss die Systemgleichung (4.5) in Zustandsform überführt werden, wobei wir
die Modelle ohne und mit Reibelement unterscheiden und in dieser Reihenfolge auch in Simulink
bearbeiten wollen.
Hiermit können wir die Bewegungsgleichungen (4.5) für FC = 0 auf die Form
ẋ1 = x3
ẋ2 = x4
kA dA (4.9)
ẋ3 = − (x1 − x2 ) − (x3 − x4 )
mA mA
kA dA kR
ẋ4 = (x1 − x2 ) + (x3 − x4 ) − (x2 − xS )
mR mR mR
3 auch eine vektorielle Betrachtung mit einem oder zwei Integrierer-Blöcken ist möglich
4.4 Simulink-Modellierung eines einfachen Projekts 189
bringen, wobei xS die Eingangsfunktion nach (4.4) ist. Wir wählen x1 = xA und x2 = xR als
Ausgänge. (4.9) hat somit die Struktur
ẋx = Ax + B u, u = xs
(4.10)
y = CxCx.
y = C x + D u.
einzusetzen sind:
- Eingangsmatrix B , Eingangsvektor für das C OULOMB-Reibelement ũu:
⎡ ⎤
0 0
⎢ 0 0 ⎥ xS
B=⎢ ⎣
⎥ , ũu = (4.16)
0 −FC /mA ⎦ sign (x3 − x4 )
kR /mR FC /mR
Wir arbeiten mit der Ausgabe aller Zustandsgrößen, also mit (4.17).
Im Weiteren wollen wir die Simulink-Modellierung schrittweise aufbauen. Wir beginnen mit
der Formulierung des Fahrbahnprofils.
Das Fahrbahnprofil werden wir in zwei Schritten erzeugen. Zunächst modellieren wir die Fahr-
bahnunebenheit und daran anschließend die Rampe und das ebene Plateau nach (4.4). Das voll-
ständige Fahrbahnprofil setzt sich dann auf dem Plateau additiv aus beiden Anteilen zusammen.
Natürlich können auch gemessene Fahrbahnunebenheiten verarbeitet werden. Liegen Mess-
werte sowie ein hierzu parallel aufgenommener Zeitvektor, der ein Maß für die Geschwindigkeit
darstellt, vor, dann können diese mit dem From Workspace Block aus Sources in das Problem
eingebunden werden. Der mit anzugebende Zeitvektor dient dabei zur Synchronisierung mit der
Simulationszeit.
Zur Nachbildung der Fahrbahnoberfläche gehen wir von einem tiefpassgefilterten digitalen wei-
ßen Rauschen aus, siehe Bild 4.20 links. Der Tiefpass sei ein B UTTERWORTH-Filter 3-ter Ord-
nung (lineare gewöhnliche Differenzialgleichung 3. Ordnung)
...
y F + μ1 ωg ÿF + μ2 ωg2 ẏF + μ3 ωg3 yF = μ3 ωg3 u (4.19)
uF
uF yF Fahrbahnunebenheit
- -
Band-Limited Tiefpassfilter
White Noise
Sources liefert das digitale Rauschsignal uF . Mit dem Parameter ωg des Tiefpassfilters (Form-
filters) glätten wir das Signal und steuern den Oberwellengehalt der Fahrbahnunebenheit. Die
Amplitudenwerte werden über die Intensität des Rauschsignals eingestellt; einfachheitshalber
ziehen wir den Koeffizienten μ3 ωg3 in (4.19) in die Intensitätseinstellung uF hinein:
uF = μ3 ωg3 u.
Diesen Blockparameter stellen wir unter Noise power des Rauschgenerators ein. Der Parame-
ter Sample time des gleichen Fensters beschreibt die Impulsbreite, vgl. Bild 4.20, und ist somit
ein weiteres Maß für die Unebenheit der Fahrbahn in Abhängigkeit von der Fahrzeuggeschwin-
digkeit. Der endgültige geglättete Unebenheitsgrad in Frequenzanteil und Amplitude wird über
das Tiefpassfilter eingestellt.
Wir betrachten eine Fahrbahnunebenheit mit dem Parametersatz:
Tiefpass ωg 100 rad/sec
Rauschgenerator Noise power μ3 ωg3 u, z. B.: u = 0,1333
Sample time 0,02 sec
Seed [23341] (standard)
Die Filtergleichung (4.19) oder allgemeiner gewöhnliche lineare Differenzialgleichung lässt sich
auf unterschiedliche Weise modellieren. Wir geben drei Beispiele:
mu3*omg^3
s3+mu1*omg.s2 +mu2*omg^2.s+mu3*omg^3
Transfer Fcn1
Wir wollen (4.19) nach 1. mit einer Integriererkette realisieren. Hierzu lösen wir (4.19) nach
der höchsten Ableitung auf
...
y F = − μ1 ωg ÿF − μ2 ωg2 ẏF − μ3 ωg3 yF + uF (4.20)
...
und bilden aus y F durch Hintereinanderschalten von drei Integrierern ÿF , ẏF , yF . Die Gewich-
tungen der Ableitungen für die Rückkopplung erreichen wir mit Verstärker-Blöcken (Gain Blö-
cken). Mittels Summierer fassen wir alle Größen entsprechend der rechten Seite von (4.20) zur
höchsten Ableitung zusammen, so dass vor dem ersten Integrierer des Modells (4.20) realisiert
ist. Bild 4.19 oben zeigt das erstellte Blockmodell, mit dem die Simulation ausgeführt werden
kann. In Bild 4.20 ist das erzeugte Rauschsignal und die erzielte Fahrbahnfunktion dargestellt.
6000
Fahrbahnunebenheit [m]
4
4000
2
Intensität
2000
0
0
−2
−2000
−4000 −4
−6000 −6
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Zeit [sec] Zeit [sec]
Da das Fahrbahnmodell für sich eine Einheit darstellt, können wir es als maskiertes Subsystem
(eigener Funktionsblock) mit dem Ausgang der Fahrbahnfunktion (Zeitfunktion) kreieren; vgl.
4.4 Simulink-Modellierung eines einfachen Projekts 193
Abschn. 4.3.5.2 sowie Bild 4.19 unten. Wir werden es später in das Fahrzeugmodell einbringen.
Das Simulink-Modell sim_v11s.mdl aus Bild 4.19 ist in [52] zu finden. Für die Filterparame-
ter des Submodells ist eine Parameterbox nach Abschn. 4.3.5.4, Parameter-Dialogbox, angelegt.
Da dieses Subsystem in mehrere Modelle eingeht, wäre es günstiger, das Modell aus Bild 4.19
als Referenzmodell zu definieren, um später hierauf eine Referenz (Model Referencing) wie in
Abschn. 4.3.5.3 zu erstellen. Dies wird mit F_Profil.mdl in [52] gezeigt.
Übungsvorschlag: Modellieren Sie die Filtergleichung (4.19) mit Hilfe der zugehörigen Übertra-
gungsfunktion und bilden Sie damit ein maskiertes Submodell mit zugehöriger Parameterbox.
Function für den Interpreted MATLAB Function Block (vor Simulink 7.7: MATLAB Fcn) ist im
Editor mit:
function y = rampe(u) % rampe.m
if u < 0.1
y = 0.1 * u;
else
y = 0.01;
end
zu erstellen und unter rampe.m abzuspeichern. Der Eintrag ins zugehörige Blockfenster um-
fasst u. a:
4 MIMO Multiple Input Multiple Output System
194 4 Simulation unter Simulink
Rampenfunktion
if control > = threshold
0.01
control input output
Constant
0.1 1
if control < threshold Out1
Switch1 Clock Gain Switch
Den linearen Anteil der mathematischen Formulierung des Fahrzeugmodells nach Abschn. 4.4.2
bringen wir, wie in Abschn. 4.3.3 angegeben, über den State Space Block in die Modellierung ein.
4.4 Simulink-Modellierung eines einfachen Projekts 195
Hierzu tragen wir, nicht die numerische Form der Matrizen, sondern die eingeführte Matrizen-
Bezeichnungen A, B, C, D in die Parameter-Dialog-Box des State Space Blocks ein. Vor dem
Simulationsstart müssen die zugehörigen numerischen Werte im Workspace vorliegen. Dies lässt
sich am einfachsten mittels M-File nach Bild 4.23 (sim_v13D.m), welches die Parameter und
die verwendeten Matrizen enthält, erreichen. Das M-File sim_v13D ist vor dem Simulations-
%-----------------------------Daten-Modul sim_v13D.m
% Simulink-Modell: sim_v12.mdl
fprintf (’Lade Daten für Rampenauffahrt’)
% Systemparameter
mA=1.0e+03; % Aufbauten-Masse [kg]
mR=1.0e+02; % Rad-Masse [kg]
kA=40.0e+03; % Federst. der Radaufhängung [N/m]
kR=40.0e+04; % Reifensteifigkeit [N/m]
dA=12.0e+03; % Dämpfung der Radaufhängung [Ns/m]
d=0.01; % Rampenhöhe [m]
start auszuführen. Automatisch erfolgt dies mit dem Eintrag des Filenamens sim_v13D unter:
File-Button → Modell properties/Callbacks/InitFcn. Dieses File wird vor dem
Integrationsstart mit die Taste start ausgeführt. Ein Eintrag unter PreLoadFcn bewirkt nur
bei Öffnung des Modells eine Aktualisierung der Parameter.
4.4.5.1 Coulomb-Reibkennlinie
Der Coulomb and Viscous Friction Block, Bild 4.5, aus der Discontinuities-Library bietet sich auf
den ersten Blick für eine Modellierung an. Er basiert auf
mit dem Ausgang y, dem Eingang u sowie den Block-Parametern Gain – Wert der viskosen
Kraft (Steigung) – und Offset – Wert der Gleitreibungskraft. Da wir den Betrag der Reibkraft
FC in die Eingangsmatrix B (4.16) hineingezogen haben, ist für die C OULOMBsche Reibung des
196 4 Simulation unter Simulink
Fahrzeugmodells
u = ẋA − ẋR = x3 − x4 .
Wegen der sign-Funktion können Haftreibungsphasen nicht erfasst werden (MATLAB Definition:
sign(0)=0). Es liegt eine Unstetigkeit vor, so dass dieser Block für eine numerische Integration,
insbesondere wenn x3 ≈ x4 , ungeeignet erscheint; vgl. Abschn. 4.4.3.1. Dennoch wollen wir ihn
weiterhin einsetzen.
d. h. der Switch Block muss diese Größe in Abhängigkeit des Control-Inputs durchschalten bis
Bild 4.24: Reibkennlinie mit Bezeichnungen und Beschaltung des Switch Blocks
der Schwellwert/Threshold s0 ≥ 1 erreicht ist. Dies ist der Fall, wenn wir an den Control-Input
|u| = v10 |vrel | legen und den Block-Parameter threshold auf die maximale, bezogene Haftrei-
bungskraft F/FC (s0 ≥ 1) setzen, wie in Bild 4.24 angegeben. Dadurch werden auch die unter-
schiedlichen Größen von Haft- und Gleitreibung durch μ0 = s0 , μ = 1 näherungsweise berück-
sichtigt. Das Block-Modell der approximierten Reibkennlinie mit dem Eingang vrel = x3 − x4
4.4 Simulink-Modellierung eines einfachen Projekts 197
und dem Ausgang y sowie der Steigung im Nulldurchgang v10 = 50 s/m – vgl. Gain Block – ist in
Bild 4.25 dargestellt, siehe auch Bild 4.32. Damit sind alle benötigten Komponenten modelliert,
so dass wir die problemabhängigen Simulink-Modelle erstellen können, vgl. Bild 4.30, 4.32.
Sign
Switch Abs
1 |u| 50 1
Out1 In1
Gain
approximierte Reibkennlinie
Bild 4.26: Block-Modell Ctest.mdl zum statischen Test der Reibkennlinien mit einer Testfunktion
Bei nichtlinearen Funktionen, also hier den Reibmodellen, ist ein separater Test des Block-
Modells – Ctest.mdl aus [52] – unumgänglich. Als Eingang unserer zu testenden Modelle
nach Bild 4.26 wählen wir zunächst eine Sägezahnfunktion, die die Relativgeschwindigkeit reprä-
sentiert. Die approximierte Kennlinie kann durch Variation der Steigung im Nulldurchgang 1/v0
und den Schwellwert s0 verändert werden. Die erhaltenen Ergebnisse sind in Bild 4.27 wiederge-
geben. Bei dem Coulomb & Viscous Friction Block wird stets der Nulldurchgang der Testfunktion
(Ereignis) detektiert und somit die Umschaltung ±1 exakt vorgenommen, d. h. die Reibkennlinie
zeichnet sich durch eine Diskontinuität (Sprung) aus. Diese Arbeitsweise ist festgeschrieben und
somit nicht manipulierbar. Im Gegensatz dazu kann die Arbeitsweise des Switch Blocks mit und
ohne Nullstellenbestimmung (zero crossing detection) bezüglich der Umschaltpunkte erfolgen.
Um dies zu verdeutlichen, sind in Bild 4.28 Ergebnisse zur approximierten Kennlinie für beide
198 4 Simulation unter Simulink
1 1
0 0
−1 −1
−2 −2
Threshold 1
−3 −3
0 0.5 1 1.5 2 0 0.5 1 1.5 2
Zeit t [s] Zeit t [s]
2 2
1 1
0 0
−1 −1
−2 −2
Threshold 2 Threshold 2
−3 −3
0 0.5 1 1.5 2 0 0.5 1 1.5 2
Zeit t [s] Zeit t [s]
Bild 4.27: Ergebnisse zur C OULOMBschen und approximierten Reibkennlinie; Steigungen im Nulldurch-
gang: b), d) 5, c) 500
3 3
mit Nullstellenermittlung ohne Nullstellenermittlung
2 2
1 1
Diskontinuität
0 0
Reibkraft Reibkraft
−1 −1
−2 −2
Testfunktion Testfunktion
−3 −3
0 0.2 0.4 0.6 0.8 0 0.2 0.4 0.6 0.8
Zeit [s] Zeit [s]
Bild 4.28: Ergebnisse mit und ohne Zeros Crossing Detection des Switch Blocks
Arbeitsweisen des Switch Blocks gegenübergestellt. Die Testfunktion ist jetzt ein Sinus. Einer-
seits ist das korrekte Einhalten der Schaltpunkte, andererseits die durch den Integrator (variable
Schrittweite) vorgegebene Tastung erkennbar. Es wird über die Ereignisse hinweg integriert. Auf
die Bearbeitung von Systemen mit Ereignissen wird im Abschn. 5.6 ausführlich eingegangen.
%------------------------------Start-File sim_v12S.m
Bild 4.29: Start-File mit Aufruf des Simulink-Modells und des Datenfiles
in den Workspace schreiben, dann das Block-Modell öffnen und starten und nach der Simula-
tion die erzeugten Daten grafisch unter MATLAB auswerten; sie werden mit dem To Workspace
Block transferiert. Das Parameterfile sei sim_v13D.m [52], Bild 4.23. Bis auf die Integrati-
onszeit von 3 s sollen alle weiteren Simulationsparameter u. a. im Menü Configuration
Parameters festgeschrieben sein. Wie in Abschn. 4.3.4 beschrieben, hat der Aufruf im Start-
file sim_v12S.m dann folgende Form
time = sim (’sim_v12’, 3)
mit der die Integration über das Intervall 0 ≤ t ≤ 3 sec ausgeführt wird. Dieser Aufruf ist in das
M-File sim_v12S.m, wie in Bild 4.29 auszugsweise beschrieben, einzubinden. Die angegebe-
nen Schritte (weitere in [52]) in sim_v12S.m lassen sich u. a. mit Hilfe der Kommentarzeilen
nachvollziehen. Der Aufruf von sim_v12S erfolgt z. B. aus dem Command Window oder einem
M-File.
Bild 4.30: Fahrzeugmodell ohne Reibelement auf ebener oder unebener Fahrbahn
Modell ist dann mit dem erstellten Startfile sim_v12S.m aus dem Command Window oder
mit dem Start-Button des Modell-Fensters, sofern das Datenfile sim_v13D.m, entsprechend
dem Hinweis von S. 195, in dem Feld unter Callbacks eingetragen ist, zu starten. Darüber
hinaus ist eine Ausführung von sim_v12S.m auch bei geöffnetem Modell-Fenster durch einen
Doppel-Mausklick auf den Startblock in Bild 4.30 – z. B. mit Hilfe eines Subsystemblocks er-
stellt – möglich. Alle angesprochenen Files sind in [52] abgelegt.
Simulationsergebnisse
In Bild 4.31 sind für beide Fahrbahnprofile die Ergebnisse gegenübergestellt. Man liest ab: Wäh-
rend der Rampenauffahrt folgt das Rad (xR ) unmittelbar der Rampenfunktion, der Aufbau (xA )
ist demgegenüber leicht zeitverzögert. Dies gilt auch für den Einschwingvorgang in die Gleich-
gewichtslage. Bei unebener Fahrbahn fällt auf, dass die Radauslenkung dem Profil entspricht –
Abhebevorgänge sind nicht modelliert, vgl. Abschn. 8.6 – der Aufbau aber aufgrund der Dämp-
fung die höherfrequenten Anteile nicht enthält. Dies ist ein Maß für die mehr oder weniger gute
Fahrwerksabstimmung, sie könnte noch optimiert werden.
Übungsvorschlag: Erstellen Sie auf der Basis eines Systems zweiter Ordnung
M ẍx +D
Dẋx +Kx
Kx = Bũu
von (4.5) ein Modell in vektorieller Modellierung mit zwei Integrierern.
Hilfe in sim_v14MDK.mdl aus [52].
Für beide Reibmodelle erstellen wir auf der Basis von sim_v12.mdl nach Bild 4.30 ein
weiteres Block-Modell, wobei für die approximierte Kennlinie in (4.5) FC sign(ẋA − ẋR ) durch
F aus (4.21) zu ersetzen ist. Formal fügen wir zu sim_v12.mdl die getesteten Reibmodelle
hinzu und ergänzen das Datenfile sim_v13D.m um die Matrizen aus Abschn. 4.4.2.2 für das
4.4 Simulink-Modellierung eines einfachen Projekts 201
Auslenkungen [m]
0.015
xA
xR
0.01
0.005
ebene Fahrbahn
ohne Reibelement
0
0 0.5 1 1.5 2 2.5 3
Zeit t [s]
Auslenkungen [m]
0.015
xA
xR
0.01
0.005
unebene Fahrbahn
ohne Reibelement
0
0 0.5 1 1.5 2 2.5 3
Zeit t [s]
Bild 4.31: Einschwingvorgang nach Rampenauffahrt bei ebener und unebener Fahrbahn
System mit Reibung. Die so aufgebauten Modelle sind in Bild 4.32 zusammengefasst.
Diskussion der Simulationsergebnisse
Eine Simulation mit dem Modell nach Bild 4.32, d. h. mit dem Coulomb & Viscous Friction Block
und ebener Fahrbahn, lässt keine Integration mit variabler Schrittweite zu. Dies liegt, wie schon
202 4 Simulation unter Simulink
10 0.04
0.02
xA
5 xR 0
−0.02
ebene Fahrbahn
0 −0.04
COULOMB−Reibung
−0.06
−5
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Zeit t [s] Zeit t [s]
−3 Auslenkungen [m] Relativgeschw. [m/s]
x 10
15
0.06
10 0.04
0.02
xA
5 0
xR
−0.02
ebene Fahrbahn
0 −0.04
approx. Reibkennlinie
−0.06
−5
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Zeit t [s] Zeit t [s]
−3 Auslenkungen [m] Relativgeschw. [m/s]
x 10
15
0.06
10 0.04
xA 0.02
5 xR 0
−0.02
ebene Fahrbahn
0 −0.04
approx. Reibkennlinie
−0.06
−5
0 1 2 3 4 0 1 2 3 4
Zeit t [s] Zeit t [s]
vermutet, an der sprunghaften Änderung der Reibkraft in Bereichen, in denen die Relativge-
schwindigkeit ihr Vorzeichen wechselt. In diesem Fall ist die rechte Seite von (4.5) eine un-
stetige Funktion und somit in dieser Form nicht integrierbar. Dies hat nichts mit einer steifen
4.4 Simulink-Modellierung eines einfachen Projekts 203
−3 Auslenkungen [m]
x 10
15
xA
xR
10
unebene Fahrbahn
0
ohne Reibelement
−5
0 0.5 1 1.5 2 2.5 3
Zeit t [s]
−3 Auslenkungen [m]
x 10
15
xA
xR
10
unebene Fahrbahn
0
approx. Reibkennlinie
−5
0 0.5 1 1.5 2 2.5 3
Zeit t [s]
Differenzialgleichung zu tun, wie vielfach in der Literatur dargestellt. Auf eine korrekte Vorge-
hensweise wird in den Kapiteln 5 –8 eingegangen. Um dennoch einen Einblick in das System-
verhalten zu gewinnen, integrieren wir mit fester Schrittweite, z. B. h ≤ 0,0001. Das zugehörige
Simulationsergebnis ist in Bild 4.331 dargestellt. Man erkennt, dass sich nach einem kurzen
Einschwingvorgang ungedämpfte Schwingungen xA (t), xR (t) mit einer konstanten Amplituden-
differenz zueinander einstellen. Wie der Verlauf der Relativgeschwindigkeit zeigt, verschwindet
diese nahezu nach ca. 0,45 s. Numerisch bedeutet dies einen permanenter Vorzeichenwechsel der
Reibkraft bei betragsmäßig kleiner Relativgeschwindigkeit. Die Ursache der Dauerschwingung
in Bild 4.331 für t > 0,45 s liegt somit im Verschwinden der Relativgeschwindigkeit, was bei
korrekter Betrachtung in einer Haftreibungsphase endet. Dadurch wird der Dämpfer zwischen
Rad (R) und Aufbau (A) nach Bild 4.16 nahezu unwirksam – beide Teile können als miteinander
verhakt angesehen werden –, so dass aufgrund der fehlenden Dämpfung sich ein konservatives
Schwingungsverhalten einstellt.
Die Simulationsergebnisse in Bild 4.332,3 mit der approximierten Kennlinie des Modells auf
ebener Fahrbahn nach Bild 4.32 zeigen im Bereich 0 ≤ t ≤ 1 s auf den ersten Blick vergleichba-
res Verhalten. Vorteil dieser Modellierung ist, dass hier mit variabler Schrittweite integriert wer-
den kann. Aufgrund des steilen Nulldurchgangs der Reibfunktion liegt in diesem Bereich eine
steife Differenzialgleichung vor. Im Bereich kleiner Relativgeschwindigkeiten zeigt der Verlauf,
wiederum wegen des steilen Nulldurchgangs, eine stückweise stetige Änderung. Damit wirkt die-
ses Reibelement in der angenäherten Haftreibungszone wie ein geschwindigkeitsproportionaler
Dämpfer mit großer Dämpferkonstante bei kleiner Relativgeschwindigkeit. Dies wird deutlich,
wenn man, wie in Bild 4.333 dargestellt, die Integrationszeit auf 4 s erhöht.
Die Integration der Modelle mit unebener Fahrbahn zeigten sich bezüglich der Unstetigkeiten
204 4 Simulation unter Simulink
nicht so kritisch, da hier die Relativgeschwindigkeit aufgrund der Schwingungen nach Bild 4.34
stärkeren Schwankungen unterliegt, so dass vrel ≈ 0 weitgehend auszuschließen ist. Das dyna-
mische Verhalten zeichnet sich wieder dadurch aus, dass das Rad (xR ) dem Fahrbahnprofil un-
mittelbar folgt, der Aufbau (xA ) verhält sich dagegen ruhiger; Oberwellenanteile werden stärker
gedämpft, was bei einem Fahrzeug durch eine gute Feder- und Dämpferabstimmung anzustreben
ist. Unberücksichtigt bleiben Abhebevorgänge, also typische Zustandsereignisse. Sie können mit
den später vorgestellten Methoden erfasst werden, vgl. auch Abschn. 8.6.
2 2 2 2
a) b) c) d)
Reibkraft
0 0 0 0
Bild 4.35: Auswirkung der Integratorwahl bei steifen und unstetigen Differenzialgleichungen
Algebraische Schleifen in einem Signalfluss enthalten nur Blöcke mit direktem Durchgang (di-
rect feedthrough), deren Eingangssignale direkt auf den Ausgang durchgeschleift werden.
Hierzu zählen die mathematischen Funktionsblöcke: Sum-, Gain-, Produkt-Block – siehe
Bild 4.38 – usw. Aber auch der im vorangegangenen Abschnitt eingesetzte State Space Block mit
der Durchgangsmatrix D
= 0 , sowie Transfer Function und Zero-Pol Blöcke. Darüber hinaus
entstehen algebraische Schleifen, wenn das Ausgangssignal eines Integrierers direkt zum Setzen
des externen Anfangssignals, auch unter Zwischenschaltung weitere Blöcke mit direktem Durch-
gang, genutzt wird. Abhilfe: es ist der Ausgang des State Port Signals wie in Abschn. 5.6.4.1
Bild 5.27, zurückführen.
Wird bei der Initialisierung eines Simulink-Modells eine algebraische Schleife (algebraic loop)
erkannt, dann wird eine Warnung (kann über: Simulation/Configuration Parameters/-
Diagnostics unterdrückt werden) mit den im Signalfluss liegenden Blöcken ausgegeben. Mo-
dellierungen rein algebraischer Probleme, wie in Bild 4.2 bzw. in alg_loop_1.mdl, alg_
loop_2.mdl, Alg_Gl_Sys.mdl aus [52], enthalten zwangsweise algebraische Schleifen. Ge-
löst werden diese Schleifen in jedem Integrationsschritt iterativ, siehe Abschn. 4.3.5.8. Da die
Konvergenz und die gefundene Lösung vom Startwert im Einzugsbereich einer Lösung abhängig
sind, sollte dieser gesetzt werden. Dies kann mit den Blöcken IC bzw. Algebraic Constraint aus
den Subbibliotheken Signal Attributes bzw. Math Operations, siehe oben angegebene Program-
me, geschehen.
Treten in dynamischen Modellen algebraische Schleifen auf, dann liegen Startwerte aus dem
jeweils vorangegangenen Integrationsschritt vor, die in der Regel im Einzugsbereich der iterativ
zu bestimmenden Lösung liegen, das Problem wird entschärft. Wenn möglich, sollten dennoch
die algebraische Schleifen durch Umformulieren eliminiert werden. Dies soll beispielorientiert
gezeigt werden.
Typischer Vertreter von dynamischen Systemen mit algebraischen Schleifen sind die in Ab-
schn. 5.4 behandelten differenzial-algebraischen Gleichungen. Bild 5.13 zeigt ein mögliches
Simulink-Modell. Wir wollen uns hier auf Formulierungen durch gewöhnliche Differenzialglei-
chungen (ODE) mit mehreren Freiheitsgraden beschränken. In diesem Fall ist das Auftreten al-
gebraischer Schleifen abhängig von den Kopplungen der Differenzialgleichungen, z. B. einer
Trägheitskopplung.
Wir betrachten zunächst das einfache in Bild 4.36 abgebildete ebene mathematische Pendel
(m, L) an einem translatorisch bewegten Quader (M), der sich reibungsfrei auf einer horizontalen
Unterlage bewegt. Am Quader greift die Erregerkraft
f = q sin (Ωt + Φ) an. Im Drehgelenk A
soll das Selbsterregungsmoment mS = α − β ϕ 2 ϕ̇ mit den Parametern α, β wirken, vgl. VAN
DER P OL-Schwinger S. 234. Das Modell, Bild 4.36, stellt für f = 0 ein grobes Ersatzmodell
eines aus der Musik bekannten Metronoms dar, was später genauer zu untersuchen ist.
206 4 Simulation unter Simulink
(A)
∑ MP,k = 0 → −mẍL cos ϕ − mL2 ϕ̈ − mgL sin ϕ + α − β ϕ 2 ϕ̇ = 0 (4.24)
(k)
Elimination von Fx mit (4.22) und auflösen nach ẍ bzw. ϕ̈ liefern die in ein Simulink-Modell
umzusetzenden Bewegungsgleichungen:
mL 1
ẍ = −ϕ̈ cos ϕ + ϕ̇ sin ϕ +
2
q sin (Ωt + Φ)
M+m mL
(4.25)
1 1
ϕ̈ = ( −ẍ cos ϕ − g sin ϕ ) + α − β ϕ ϕ̇
2
L mL2
ẍ, ϕ̈ sind jeweils vor dem ersten Integrierer der Integrationskette in dem Simulink-Modell, Bild 4.38,
abzubilden. In (4.25) sind die Gleichungen über die Beschleunigungen gekoppelt, es liegt eine
Trägheitskopplung vor.
Nach dem Start des Modells, Bild 4.38 und metro_S.mdl [52], wird die Warnung einer
vorhandenen algebraischen Schleife mit dem Signalfluss der Schleife, wie in Bild 4.38 markiert,
im Command Window ausgegeben.
Zunächst formulieren wir die Ein-/Ausgänge u_1 → u_6 der in Bild 4.38 gekennzeichneten
Blöcke der algebraischen Schleife, um damit Eingang u_2 = x_pp des Integrierers 2 mit den in
Bild 4.38 eingeführten Bezeichnungen in indizierter Schreibweise, z. B. u_2 → u2 , zu bilden.
Im Einzelnen liest man ab:
208 4 Simulation unter Simulink
u1 = ue + uϕ p − u6
mL mL
u2 = u1 = ue + uϕ p − u6 (4.26)
M+m M+m
u6 = u5 uc
1
u6 = − u2 u2c − ug uc + use uc
L
und schließlich
mL 1
u2 = ue + uϕ p + u2 u2c + ug uc − use uc . (4.27)
M+m L
Da u2 = f (u2 ) eine implizite Funktion in u2 ist, kann diese algebraische Schleife nur iterativ
nach u2 für den folgenden Integrationsschritt aufgelöst werden.
Wir lösen (4.27) explizit nach u2 auf, womit die algebraische Schleife eliminierbar wird. Es ergibt
sich
mL
u2 = ue + uϕ p + ug uc − use uc (4.28)
M + m − muc
2
D. h. statt (4.25)1 ist nun (4.29), wie in metro_S0.mdl in [52], zu modellieren, es tritt keine
algebraische Schleife mehr auf. Ein Vergleich mit (4.25) zeigt, dass mathematisch in (4.25)1 ϕ̈
aus (4.25)2 einzusetzen ist. Die Trägheitskopplung in (4.29) ist nicht mehr vorhanden.
Alternativ hätten wir auch u_5 = phi_pp mit den Übertragungen in der algebraischen Schlei-
fe, Bild 4.38, formulieren können, um damit die Integrationskette für ϕ̈ zu ersetzen, vgl. me-
tro_S1.mdl in [52]. Es ergibt sich:
−m q
ϕ̈ = cos ϕ ϕ̇ 2
sin ϕ + sin (Ωt + Φ)
M + m sin 2 ϕ mL
(4.30)
M+m g 1
+ sin ϕ − α − β ϕ 2
ϕ̇
m L mL2
In diesem Fall ist sogar (4.30) unabhängig von x und den zeitlichen Ableitungen, vgl. Abschn. 5.7.4.
4.6 Vektorielle Betrachtungsweise und Modellierung 209
Die Bewegungsgleichungen von Systemen mit mehreren Freiheitsgraden überführt man zweck-
mäßigerweise in eine vektorielle Schreibweise. Hiermit lässt sich in der Regel ein übersichtliche-
res Simulink-Modell erstellen. Angewendet auf (4.25) bedeutet dies:
mL2 mL cos ϕ ϕ̈ mgL sin ϕ − α − β ϕ 2 ϕ̇ 0
+ = sin (Ωt + Φ) (4.31)
mL cos ϕ M+m ẍ −mLϕ̇ 2 sin ϕ q
oder kurz
Dabei ist M = M T die von ϕ abhängige symmetrische und positiv definite (det(M M ) > 0) Massen-
matrix, f die nichtlineare Vektorfunktion und q der Vektor der Erregeramplituden.
Zur Modellierung von (4.32) wird der Vektor ÿy vor dem ersten Integrierer abgebildet. Hierzu
multiplizieren wir zunächst (4.32) mit der Inversen von M durch:
In Bild 4.39 sind zwei Möglichkeiten zur Invertierung von M dargestellt. In der linken Bild-
hälfte wird die Invertierung und gleichzeitige Multiplikation mit der Vektorfunktion der rechten
Seite von (4.33) mit dem Divide Block vorgenommen. Die Massenmatrix M = M (ϕ) wird aus
zwei Anteilen, wie dargestellt, abgebildet. Die Integration wird jetzt vektoriell für ÿy → ẏy → y
durchgeführt. Abschließend kann y mit dem Demux Block (Demultiplexer) in seine Komponen-
ten zerlegt werden. Damit lässt sich die Vektorfunktion einschließlich der Anregung der rechten
Seite von (4.33) – meist– komponentenweise abbilden und mit dem Mux Block (Multiplexer)
vektorisieren.
210 4 Simulation unter Simulink
Auf der rechten Seite von Bild 4.39 ist die Inversion und Multiplikation mit dem MATLAB
Function Block vorgenommen. Die Abhängigkeit von M von cos ϕ wird vor der Invertierung in
dem Block erzeugt. Die vollständigen Simulink-Modelle metro_S2.-, metro_S3.mdl sind in
[52] abgelegt.
Vorteil der Vorgehensweise: Die Anzahl der Blöcke hat sich gegenüber der Modellierung von
(4.25) reduziert. Algebraische Schleifen bezüglich der Trägheitskopplungen treten nicht auf. Im
Zusammenhang mit der Subsystem-Technik nach Abschn. 4.3.5.2 sowie Abschn. 4.3.5.3 und der
folgenden Betrachtung lassen sich Systeme höherer Ordnung mit vertretbarem Aufwand erstel-
len.
durch die Schwingung des Systems selbst gesteuert. Bezüglich des Schwingungsverhaltens wol-
len wir die freien Schwingungen q = 0 und die erzwungenen Schwingungen mit q
= 0 für eine
Analyse unterscheiden.
Aufgrund des Verhältnisses von Dämpfung zur Anfachung in einem Schwingungszyklus
kommt es zu periodischen, selbsterregten Schwingungen. In der Phasenebene (ϕ̇(ϕ)) stellen
sie eine geschlossene Kurve, den Grenzzykel, dar, vgl. Bild 5.6. Für einen in metro_S1.mdl
[52] vorgegebenen Parametersatz kann der Grenzzykel für austauschbare Anfangswerte als Ein-
schwingvorgang berechnet werden. Gleichzeitig wird von einer FFT-Analyse des Schwingungs-
signals – a) mit dem Power Spectral Density Block aus Simulink Extras/Additional Sinks,
b) mit einer, unter File/Model Properties/Callbacks/StopFcn programmierten
FFT-Analyse mit grafischer Ausgabe – das Frequenzspektrum dargestellt. Hieraus lässt sich die
Selbsterregerfrequenz fs ablesen.
Bild 4.40: Gegenüberstellung von Anregung fe (Ω ) = q sin (Ωt + Φ) und Schwingung ϕ(t)
4.6 Vektorielle Betrachtungsweise und Modellierung 211
Darüber hinaus ist bekannt [58], dass, wenn die Erregerkreisfrequenz Ω in der Größenord-
nung der Selbsterregerkreisfrequenz ωs = 2π fs liegt, so genannte Mitnahme-Effekte oder auch
Zieh-Erscheinungen auftreten können. Die Abweichung von der Selbsterregerfrequenz kann um
so größer sein je stärker die Erregung q ist. Dieses Schwingungsphänomen ist u. a. in metro_S1
[52] ausführlich herausgearbeitet. Die Ergebnisse sollen kurz dargestellt werden. Die sich ein-
stellende Selbsterregungsfrequenz liegt bei fs = 1,83 Hz bzw. ωs = 11,5 rad/s. In Bild 4.40
sind für die Erregerkreisfrequenzen Ω ≈ 14,4 rad/s und Ω ≈ 23 rad/s die zugehörigen Anre-
gungen und die zugehörigen erzwungenen Schwingungen ϕ(t) dargestellt. Es ist deutlich zu
erkennen, dass nach einer kurzen Einschwingphase für Ω = 14,4 rad/s die Periodendauer, d. h.
die Frequenz, übereinstimmt. Die selbsterregte Schwingung wird frequenzmäßig von der Erre-
gung mitgenommen. Für Ω ≈ 23 rad/s ist dies nicht der Fall – bei größerem Zeitintervall sind
Schwebungen erkennbar. Die Frequenzspektren in Bild 4.41 belegen für die Erregerfrequenzen
Ω ≈ 2,88 / 14,4 / 17,25 / 23 rad/s dieses Ergebnis. Die Frequenzen der gekennzeichneten Piks
stimmen mit Ω überein. In Abschn. 5.7.4 wird gezeigt, wie man periodische Schwingungen di-
rekt aus einem Randwertproblem unter MATLAB ermittelt.
Typische Beispiele selbsterregter Schwingungen, siehe auch [58]: elektrische Klingel mit
Klöppel, Uhr mit Unruhe, Musikinstrumente (Violine, Mundharmonika, Klarinette...), Brems-
quietschen, Flattern von Kraftwagenrädern, gleitgelagerte Turbo-Rotoren, elektrische Schwing-
kreise, Regelungskreise und durch Wind angeregte Hochspannungsleitungen, Lichtmasten, Fa-
brikschornsteine usw.
Im vorangegangenen Beispiel des Einzelpendels konnte die Modellierung insbesondere durch die
eingeführte Massenmatrix vereinfacht werden. Bei Systemen mit mehreren Freiheitsgraden muss
man versuchen, auch die Vektorfunktion f in (4.33) zu vektorisieren. Um einerseits dies und an-
dererseits das Schwingungsphänomen der Synchronisierung in selbsterregungsfähigen Systemen
zu zeigen, soll das Einzelpendel auf fünf einschließlich der Quader, wie in Bild 4.42 dargestellt,
ergänzt werden. Unter http://www.stumbleupon.com/su/AeBCLu wird diesbezüglich
212 4 Simulation unter Simulink
ein Experiment mit fünf Metronome (Taktgeber in der Musik) auf einem frei beweglichen Brett
gezeigt.
Die Bewegungsgleichungen können wir durch Verallgemeinerung von (4.25) bzw. (4.31) er-
reichen, wenn wir die Pendelwinkel vektorisieren und eine Abkürzung
T
ϕ = [ ϕ1 , ϕ2 , ...., ϕ5 ]T , ϕ 2 := ϕ̇12 , ϕ̇22 , ...., ϕ̇52
ϕ̇ (4.35)
1 g 1
ϕ +
ϕ̈ cos ϕ ẍ = − sin ϕ + ϕ , ϕ̇
m s (ϕ ϕ)
L L mL2
(4.36)
1 M + 5m 1 q
cos (ϕ ϕ +
ϕ T ) ϕ̈ 2
ẍ = sin (ϕ ϕ2 +
ϕ T ) ϕ̇ sin (Ωt + Φ)
L mL L mL2
T
oder kurz mit y = [ϕ1 , ϕ2 , ..., ϕ5 , x]T = ϕ T , x
⎡ g 1 ⎤ ⎡ ⎤
− sin ϕ + m s ϕ
(ϕ , ϕ
ϕ̇ ) 0
⎢ L mL 2 ⎥ ⎣
M ÿy = ⎣ ⎦+ q ⎦ sin (Ωt + Φ) (4.37)
1
ϕ T
ϕ
sin (ϕ ) ϕ̇ 2
mL2
L
mit der symmetrischen Massenmatrix
⎡ ⎤
⎡ 1 ⎤ 1 0 0 0 0 c1
E 5×5 ϕ)
cos (ϕ ⎢ 0 1 0 0 0 c ⎥
⎢ L ⎥ ⎢ 2 ⎥
ϕ) = ⎢
M (ϕ ⎣
⎥ = ⎢ ....................................
⎦ ⎢
⎥ (4.38)
⎥
1 M + 5m ⎣ 0 0 0 0 1 c5 ⎦
ϕ T)
cos (ϕ
L mL2 c1 c2 c3 c4 c5 (M + 5m)/(mL2 )
wobei ci = 1/L cos ϕi , i = 1,2, ...,5. Ein Vergleich mit (4.31) nach Division durch mL2 zeigt,
dass sich die Struktur nicht geändert hat und sich somit der Modellierungsaufwand für (4.37)
gegenüber (4.31) nicht wesentlich ändert, vgl. metro_S4.mdl in [52].
Gegenüber der mehr theoretischen Selbsterregerfunktion
ms j (ϕ j , ϕ̇ j ) = α − β ϕ 2j ϕ̇ j (4.39)
4.6 Vektorielle Betrachtungsweise und Modellierung 213
soll eine zweite unstetige Funktion, wie bei einer Pendeluhr mit G RAHAM-Gang5 aus Gangrad
mit sägeförmigen Zähnen und Anker eingeführt werden. Das Gangrad wird von einer Feder
angetrieben, der Anker ist mit dem Pendel verbunden. Durch den Eingriff der Ankerklauen in
die Zähne des Gangrades wird bereichsweise eine Kraft ausgeübt und somit ein Moment M
(Annahme: konstant) auf das Pendel übertragen, so dass für das j-te Pendel6
⎧
⎪
⎪ ϕ̇ j > 0 : −q j1 < ϕ j < +q j2 → ms j = +M − aϕ̇ j
⎨
ϕ̇ j < 0 : −q j2 < ϕ j < +q j1 → ms j = −M − aϕ̇ j
ms j (ϕ j , ϕ̇ j ) = (4.40)
⎪
⎪ ϕ̇ j > 0 : ϕ j < −q j1 oder ϕ j > +q j2 → ms j = −aϕ̇ j
⎩
ϕ̇ j < 0 : ϕ j < −q j2 oder ϕ j > +q j1 → ms j = −aϕ̇ j
mit den Schaltwinkeln q jk und dem Dämpfungsmoment aϕ̇ j gilt. Beide Gleichungen (4.39),
(4.40) lassen sich, wie in metro_S4.mdl gezeigt, vektorisieren, so dass sie in (4.37) eingebun-
den werden können.
Eine MATLAB-Script-Version mit (4.39) ist zusätzlich in [52] abgelegt.
Ergebnisse: Ausgehend von unterschiedlichen Anfangswerten der Pendel werden zunächst die
freien Schwingungen (q = 0) mit (4.39) betrachtet. Wie in Bild 4.43 zu erkennen, synchronisieren
sich die Schwingungen nach kurzer Einschwingphase. Bekanntes Beispiel ist das Musizieren
Für jede Methode existiert in der Sub-Library: User-Defined Functions ein eigener S-Function
Block (Name: system bzw. matlablfile). In der zugehörigen Dialog-Box ist der Name der zu
erstellenden S-Function sowie zusätzliche Eingangsparameter p j , die durch Komma voneinander
zu trennen sind, einzutragen. Bild 4.44 zeigt die Box für den Level-2 Standard.
Die M-Files bestehen jeweils aus einer Haupt-Function und mehreren Sub-Functions, die ei-
nerseits indirekt über ein flag und andererseits direkt über Function-Aufrufe (Callback-Methode)
von Simulink aufgerufen werden. Dies reicht von der Initialisierung bis zur Berechnung der Aus-
gabedaten.
Die S-Function sf_carm.m aus [52] verdeutlicht anhand des Zustandsmodells zum 1/4-
Fahrzeugmodell ohne/mit Reibung aus Abschn. 4.4.1 den S-Function-Aufbau. Zunächst aber
noch einige Einzelheiten. Der Function-Kopf einer Level-1 S-Function hat folgende Struktur:
function [sys,x0,str,ts]=File_name(t,x,u,flag,p1,p2,· · ·)
Mit den Eingangsparametern der Zeit t, dem Zustandsvektor x, der Block-Eingangsgröße u,
dem Steuerflag flag sowie den optionalen User-Parametern p1, p2,... Die wesentlichen
216 4 Simulation unter Simulink
Ausgangswerte sind: der flag-abhängige Vektor sys u. a. der Ableitungs- und Ausgangsgrößen,
der Anfangswert x0 und die m×2-Matrix der m Abtastzeitinformation, z. B. [0 0] für eine
zeitkontinuierliche Abtastung, str ist leer [ ]. Auf die Begriffe in der Initialisierungsfunction
wollen wir kurz eingehen.
Initialisierungsfunction
Der Initialisierungsteil in mdlInitializeSizes, vgl. auch Tabelle 4.4 und Beispiel-Pro-
gramm sf_carm.m, enthält neben den Dimensionierungen
sizes.NumcontStates Anzahl der zeitkontinuierlichen Zustandsvariablen
sizes.Num.DiscStates Anzahl der zeitdiskreten Zustandsvariablen
sizes.NumOutputs Anzahl der Ausgänge
sizes.NumInputs Anzahl der Eingänge
weitere Festschreibungen, von denen wir die Begriffe:
• Direct feedhrough
• Dynamically sized inputs
• Setting sample times and offsets
- die Ausgangsfunktion (mdlOutputs, flag=3) sei eine Funktion vom Eingang u. Beispiel
ist die bekannte Messgleichung aus der Regelungstechnik: y = Cx +Du
Du sprungfähiger Sys-
teme, vgl. auch Beispiel 4.2.
- bei veränderlicher Abtastung (Aufruf: mdlGetTimeOfNextVarHit, flag=4), wenn in
der Berechnung zum nächsten Schritt u eingeht; vgl. Demos: vsfunc.m, dsfunc.m.
Dynamical Sized Inputs: S-Functions können für veränderliche Dimensionen des Eingangsvektors
u geschrieben werden. In diesem Fall ist sizes.NumInputs mit −1 zu vereinbaren.
Setting Sample Times and Offsets: Die Information ist in einer m×2-Matrix bei m Abtastzeiten in
festgeschriebener Reihenfolge einzugeben, siehe Template sfuntmpl.m:
ts = [ 0 0, % zeitkontinuierlich, variable Schrittweite
0 1, % zeitkontinuierlich, konstante Schrittweite
period offset, % diskrete Abtastzeit mit period>0, offset<period
-2 0 ] % variable diskrete Abtastzeit; flag=4!
Wird die Abtastzeit vom treibenden Block übernommen (geerbte Abtastzeit, inherited sample
time), dann ist NumSampleTime = 1 und ts = [-1 0] zu setzen, vgl. Beispiel 4.2.
Die Initialisierungsdaten werden durch den Aufruf
sizes = simsizes
sechs Initialisierungsdaten nach Tabelle 4.4
sys = simsizes(sizes)
im Vektor sys gespeichert und im flag=0 Schritt an Simulink übergeben.
4.7 Modellierung mit Hilfe einer S-Function 217
Feld-Name Beschreibung
sizes.NumcontStates Anzahl der zeitkontinuierlichen Zustände
sizes.Num.DiscStates Anzahl der zeitdiskreten Zustände
sizes.NumOutputs Anzahl der Ausgänge
sizes.NumInputs Anzahl der Eingänge
sizes.DirFeedthrough flag für ’direkten Durchgang’
sizes.NumSampleTimes Anzahl der Abtastzeiten
d. h. wir integrieren über die Unstetigkeit hinweg. Sollte die Integration Probleme bereiten, so
kann diese Unstetigkeit auch nach [11] durch Ausrunden der Anstückelpunkte vermieden wer-
den.
Alle Parameter, Systemmatrizen und Eingänge können einerseits innerhalb der S-Function
berechnet werden, wobei darauf zu achten ist, dass dies nur einmal während der Simulation er-
folgen soll, z. B. in der Initialisierungsphase zu flag=0. Andererseits könnten wir sie vor dem
Simulationsstart mittels Datenfile in den Workspace schreiben und dann mit dem Eintrag in die
Parameter-Dialog Box, vgl. Bild 4.44, in die S-Function einbringen. Der S-Function-Aufruf ent-
hält diese Parameterliste nach dem flag:
function [sys,x0,str,ts] = sf_carm(t,x,u,flag,A,B,C,D)
Hier erstellen wir die Systemmatrizen in der Function syspa.m, die wir an die S-Function
sf_carm.m aus [52] anhängen. Über den Eingangsparameter iflag = 0 / 1 sprechen wir das
reibungsfreie / reibungsbehaftete System an. iflag muss in der Parameter-Dialog Box als sym-
bolischer oder numerischer Wert stehen; im ersten Fall muss der numerische Wert im Workspace
bekannt sein. Die Daten-Function syspa.m entspricht dem M-File sim_v13D.m aus [52].
Da es sich um ein zeitkontinuierliches System handelt, werden nur die Function mdlIniti-
alizeSizes, mdlDerivatives, mdlOutputs aufgerufen, die restlichen werden nicht be-
nötigt, siehe sf_carm.m in [52].
Das zugehörige Simulink-Modell sim_v16m.mdl aus [52] ist in Bild 4.45 wiedergegeben.
enthält im Kopf den gewünschten Namen sowie die Function setup u. a. zur Initialisierung:
Einen Überblick soll die Level-2 M-File S-Function sf_car2m.m zum 1/4-Fahrzeug ohne/mit
Reibung vermitteln, wobei die Handhabung des Parameters iflag und der Systemgrößen ge-
genüber der Level-1 Vorgehensweise unverändert bleibt. Es soll hier die verkürzte Function
sf_car2m.m abgedruckt werden. In [52] sind zusätzliche Optionen nachzulesen:
Level-2 M-File S-Function:
function sf_car2m(block) % Haupt-Function
setup(block);
%%endfunction sf_car2m
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;
%% lokale Functions
function InitializeConditions(block)
global A % Parameterübergabe
% Setzen der Anfangswerte der Zustandsgrößen
block.ContStates.Data = zeros(size(A,1),1);
%%endfunction InitializeConditions
function Outputs(block)
global C % Parameterübergabe
% Systemausgang berechnen: y = C*x + D*u, hier: D = 0, so dass: y = C*x
%x = block.ContStates.Data;
block.OutputPort(1).Data = C * block.ContStates.Data; % = C * x
%%endfunction Outputs
x = block.ContStates.Data; % Zustandsvektor
u=block.InputPort(1).Data; % Eingangsgröße
if block.DialogPrm(1).Data == 1 % Steuerung: mit R.
vrel=x(3)-x(4); % Relativgeschw.
if abs(vrel) < v0 % Haft- / Gleitreibung
reib=vrel/v0; % Haftreibung
else
reib=sign(vrel); % Gleitreibung
end
block.Derivatives.Data = A*x + B*[u; reib]; % System mit Reibung
else
block.Derivatives.Data = A*x + B*u; % System ohne Reibung
end
%%endfunction Derivatives
%--------------------------------------------------------------------
function [A,B,C,v0] = syspa(iflag) % siehe Programmsammlung
.... unvollständig .....
get_param(’sim_sinfunc2/Signal Generator’,’Amplitude’));
% -- mit Eingang vergleichen, nur sinnvoll für Rechtecksignal
if abs(block.InputPort(1).Data - am) < eps(am);
set_param(’sim_sinfunc2/Sine Wave’,’Amplitude’,’5’)
else
set_param(’sim_sinfunc2/Sine Wave’,’Amplitude’,’1’)
end
a: Simulink-Modell b: Funktionsverläufe
Bild 4.46: Beispiel zur Parameterumschaltung in Funktionsblöcken
Der S-Function Builder unterstützt die (automatische) Erstellung von C Mex-File S-Functions
sowie die von C Quell-Codes. 1-D und 2-D Signale und Ausgänge sind zulässig. Die Datentypen
entsprechen denen von Simulink.
222 4 Simulation unter Simulink
Wie die in Bild 4.47 abgebildete Dialog-Box zeigt, ist sie in Seiten unterteilt, in die die Infor-
mationen zur Erstellung der S-Function einzutragen sind. Im Einzelnen sind dies:
Wichtig: Die eingeführten und im Builder angezeigten Bezeichnungen, u. a. für die Zustände
xC, xD und für die Ableitungen dx sind festgeschrieben. Alle weiteren Vereinbarungen sind
selbsterklärend.
Anhand des 1/4-Fahrzeuges ohne/mit approximierter Reibkennlinie aus Abschn. 4.4 mit den
um die Reibung erweiterten Zustandsgleichungen (4.9)
ẋ1 = x3
ẋ2 = x4
(4.42)
ẋ3 = − kA (x1 − x2 ) + dA (x3 − x4 ) + i f lag F /mA , i f lag = 0, 1
ẋ4 = kA (x1 − x2 ) + dA (x3 − x4 ) + kR (x2 − xS ) + i f lag F /mR
sowie der Reibkennlinie nach (4.41) kann die Erstellung der S-Function mit dem Builder nach-
vollzogen und damit experimentiert werden. Hierzu sind die beiden Modelle: sim_v16_Bc und
sim_v16_Bc1.mdl in [52] abgelegt. Sie unterscheiden sich in der Handhabung des Steuerpa-
rameters iflag für die Modellierung ohne/mit Reibung.
sf_carm.m gehen wir in sf_carc.c für das Modell sim_v16c.mdl davon aus, dass die
System-Matrizen A , B , C , D über das Datenfile sim_v13D.m in den Workspace geschrieben
werden und somit in der Parameter-Dialog Box des S-Function Blocks aufgeführt sein müssen.
5 Simulation unter MATLAB
In diesem Kapitel soll die numerische Integration linearer und nichtlinearer Anfangswertpro-
bleme sowie die Lösung von Randwertproblemen gewöhnlicher Differenzialgleichungen unter
MATLAB behandelt werden, d. h. wir arbeiten skriptorientiert. Wesentlich ist die Aufbereitung
und Anpassung der Differenzialgleichungen/Bewegungsgleichungen an die Möglichkeiten der
Löser. Mögliche Simulink-Modelle werden diskutiert.
Alternativ können Randwertprobleme auch als Anfangswertprobleme formuliert werden und
mit dem Schießvefahren gelöst werden. Die Idee hierzu ist in schiess.pdf [52] nachzulesen.
Nicht behandelt werden Differenzialgleichungen mit Totzeit (Function: dde23, ddesd) und par-
tielle Differenzialgleichungen (Function: pdepe). Beispiele mit Code-Anzeige aller verfügbaren
Methoden können mit dem Aufruf von >> odeexamples aus dem Command Window einge-
sehen und durch die Online-Hilfe vertieft werden.
Wie in Abschn. 2.2 erläutert, unterscheiden wir prinzipiell zwischen einer impliziten
Formulierung der Differenzialgleichung mit den Anfangswerten ẋx0 , x 0 zum Zeitpunkt t0 (meist
t0 = 0). Die Gleichungen (5.1), (5.2) sind gewöhnliche nichtlineare Differenzialgleichungen
(ODE1 ) n-ter Ordnung mit der unabhängigen Variablen t. Hängt ḡg bzw. g nicht explizit von
der Zeit ab, z. B. g(x)
g(x), dann sprechen wir von einer autonomen, im anderen Fall von einer nicht-
autonomen Bewegungsgleichung oder Differenzialgleichung.
In der Regel existieren für (5.1), (5.2) keine analytischen Lösungen, so dass auf Näherungen
u. a. per numerischer Integration zurückgegriffen werden muss. Hierzu gibt es eine Vielzahl von
Codes, die auf (5.1), (5.2) aufbauen und diese als Anfangswertprobleme lösen.
Bei mechanischen Modellen tritt die Beschleunigung q̈q linear auf, vgl. Kapitel 2, sie werden
deshalb durch Bewegungsgleichungen mit f Freiheitsgraden
M := M (t, q ) oder konstant sein. Gleichung (5.3) ist ebenfalls eine gewöhnliche nichtlineare Dif-
ferenzialgleichung 2 f -ter Ordnung. Setzen wir in (5.3) q̇q = v , dann folgt zunächst
E q̇q = v E = diag(1, 1, . . . , 1)
(5.4)
M v̇v = f a (t, q , v )
mit den Anfangswerten q (t0 ) = q 0 und v (t0 ) = v 0 zum Zeitpunkt t0 . Beide Gleichungen unter
(5.4) beschreiben das Anfangswertproblem in der Standardform oder expliziten Form nach (5.2)
mit dem Zustandsvektor x = (qqT , v T )T , wenn M invertierbar ist.
Die verfügbaren Integratoren in MATLAB sind mit odexx, z. B. ode45, gekennzeichnet. Sie
verarbeiten grundsätzlich (5.2). Das Gleichungssystem (5.4) in der Form
lassen nahezu alle Codes zu, wobei M konstant, zeit- oder/und zustandsabhängig sein darf. Ist
M singulär, dann wird (5.5) als differenzial-algebraisches Gleichungssystem identifiziert und
bearbeitet; vgl. Abschn. 5.2.1.
Ab MATLAB 7 R14 ist mit ode15i die Integration impliziter Differenzialgleichungen (5.1) nun
möglich.
Wir verdeutlichen die Unterschiede der mathematischen Formulierungen an einem kleinen
Beispiel.
dabei werden x und s aus der Lage der entspannten Elemente gezählt. Dies ist ein
5.1 Struktur der Differenzialgleichungen 227
ẋ1 − x3 =0
mẋ3 + k(x1 − x2 ) + mg = 0 (5.7)
fD (ṡ) + k0 x2 − k(x1 − x2 ) = 0
vor, wir behandeln es in Abschn. 5.5. Setzen wir speziell nach [66]
ṡ
fD (ṡ) = d0 ṡ + d ṡ |ṡ| , |ṡ| = , (5.8)
sign (ṡ)
Nach Bild 5.2 gehört zum negativen Vorzeichen (−) die anfachende Kennlinie
fD (ṡ− ), die durch Spiegelung an der Ordinate aus der Dämpfungsfunktion fD (ṡ) her-
vorgeht, sie interessiert hier nicht. Somit sind (5.2)1 und (5.6) wieder ein System von
expliziter Form . Darüber hinaus erhalten wir mit dem Zustandsvektor x = (x, s, ẋ, ṡ)T
⎡ ⎤ ⎡ ⎤• ⎡ ⎤⎡ ⎤ ⎡ ⎤
1 0 0 0 x 0 0 1 0 x 0
⎢ 0 1 0 0 ⎥⎢ s ⎥ ⎢ 0 0 0 1 ⎥ ⎢ ⎥ ⎢ 0 ⎥
⎢ ⎥⎢ ⎥ ⎢ ⎥⎢ s ⎥=⎢ ⎥ (5.10)
⎣ 0 0 m 0 ⎦ ⎣ ẋ ⎦ + ⎣ k −k 0 0 ⎦ ⎣ ẋ ⎦ ⎣ −mg ⎦
0 0 0 0 ṡ −k k + k0 0 0 ṡ − fD (ṡ)
eine Gleichung mit singulärer Matrix M = diag(1,1, m,0), sie entspricht (5.5) und
kann als differenzial-algebraisches Gleichungssystem interpretiert und behandelt wer-
den. Die Index-Ermittlung erfolgt im Beispiel 5.7. Berücksichtigen wir zusätzlich die
Masse der Traverse in (A) zwischen Feder und Feder-Dämpfer-Element, dann ist M
in (5.10) regulär – das letzte Hauptdiagonalelement ist von null verschieden –, so dass
wir mit (MM )−1 durchmultiplizieren und somit eine explizite Differenzialgleichung
von Typ (5.2) erhalten.
Anhand dieses recht einfachen Beispiels wird klar, dass wir ein und dasselbe Problem mit unter-
schiedlichen Methoden bearbeiten können. So kann (5.6) einerseits als implizites (5.7) oder mit
(5.9) als explizites Differenzialgleichungssystem, andererseits mit (5.10) als differenzial-algebra-
isches Gleichungssystem gelöst werden. Welche Form man letztendlich wählt, hängt auch von
228 5 Simulation unter MATLAB
den zur Verfügung stehenden Integratoren sowie deren Stabilität gegenüber den einzelnen Formu-
lierungen ab. Zur numerischen Auswertung von (5.7) und (5.10) greifen wir das Beispiel später
noch einmal auf.
Differenzialgleichungen übergeordneter Systeme, z. B. mechanische Modelle mit zusätzli-
chen elektrischen und/oder hydraulischen sowie elektromagnetischen Komponenten, sind (5.1)
bzw. (5.2) zuzuordnen.
M ÿy +P
P ẏy +Q
Q y = pp(t). (5.11)
M −1P ẏy +M
ÿy +M M −1Q y = M −1 p (t) (5.12)
5.1 Struktur der Differenzialgleichungen 229
x1 = y , x 2 = ẏy
ẋx1 0 E x1 0
= + p (t) (5.13)
ẋx2 M −1Q −M
−M M −1P x2 M −1
Systemmatrix A
oder kurz
Diese Vorgehensweise ist nur für Systeme mit diagonaler Massenmatrix oder Systeme niedriger
Ordnung und bei einmaliger Invertierung von M zweckmäßig. M ist positiv definit und symme-
trisch (dies lässt sich immer erreichen), so dass man eine C HOLESKY-Zerlegung (Funct. chol) der
Massenmatrix durchführen und damit eine explizite Inversion umgehen kann. Dies ist genauer
und mit weniger Rechenaufwand verbunden und damit schneller. Insbesondere für zeitabhängige
Massenmatrizen M = M (t), aber auch bei nichtlinearen Systemen mit lageabhängigen Massen-
matrizen M (t, y ), z. B. in Robotersystemen, ist diese Vorgehensweise zu empfehlen, da bei jedem
Integrationsschritt die Inverse M −1 (t) z. B. innerhalb des Intervalls [tk−1 , tk ] mehrfach zu bilden
ist.
Beispiel 5.2: Elektrisches Netzwerk
Als Beispiel eines strukturdiskreten, elektischen Systems betrachten wir das Netzwerk
in Bild 5.3 mit den diskreten Elementen O HMscher Widerstand R, Induktivität L und
Kapazität C sowie der Spannungsquelle u(t). Die jeweiligen Spannungsabfälle seien
uR
R
u(t) L uL
C
uC
$t
1
u(t) = Ri + L(i)˙ + i dt; i(0) = i0 (5.15)
C
gilt. Um eine explizite Form von (5.15) zu erhalten, können unterschiedliche Möglich-
keiten zur Elimination des Integrals eingeschlagen werden:
230 5 Simulation unter MATLAB
R 1 1
(i)˙+ i+ Q = u(t) (5.17)
L CL L
Q̇ − i = 0 mit i(0) = i0 , Q(0) = Q0 (5.18)
Regelkreis ist bei einer Ausgangsvektorrückführung durch das mathematische Modell in Zu-
standsform
beschrieben.
Hat das System mehrere Ein- und Ausgangsgrößen, dann spricht man von einer Mehrgrößen-
regelung (MIMO), im anderen Fall von einer Eingrößenregelung (SISO). Ist die Systemmatrix A
konstant, dann lässt sich eine exakte Lösung angeben. Ist A = A (t), dann ist dies in der Regel nicht
der Fall, wir sind auf eine dynamische Simulation mittels numerischer Integration angewiesen.
Für die Analyse linearer zeitinvarianter Systeme (LTI-Systeme) der Typen (SISO) und (MIMO)
stellt MATLAB mit der Control System Toolbox einige Functions bereit. Wir beschränken uns auf
die einer Zustandsraumdarstellung (State-Space, SS). In diesem Fall erzeugt MATLAB zunächst
ein Zustandsmodell, z. B. sys, mit
sys = ss(A,B,C,D).
Damit lassen sich beispielhaft folgende Antworten berechnen:
Anfangswertantwort initial(sys,x0,te)
Impulsantwort impulse(sys,te)
Sprungantwort step(sys,te)
Systemantwort auf beliebiges Eingangssignal lsim(sys,u,te,x0)
mit dem Anfangswertvektor x0, der beliebigen Eingangssignalmatrix u, dem Endzeitpunkt te.
Weitere Optionen sind möglich; vgl. Online-Hilfe.
Die Algorithmen basieren auf dem zugehörigen Lösungsansatz für lineare zeitinvariante Dif-
ferenzialgleichungen, wie in Kapitel 3.
aus Proportional- und Integralanteil aufgebracht. Die Lage der Masse m1 liefert ein
Sensor. Damit liegt ein Eingrößensystem (SISO) vor. Die Bewegungsgleichung hat
die Form
y T = [y1 , y2 ]
232 5 Simulation unter MATLAB
und seinen zeitlichen Ableitungen ẏy, ÿy, der Massenmatrix, der Dämpfungs- und Stei-
figkeitsmatrix
d1 + d2 −d2 k1 + k2 −k2
M = diag(m1 , m2 ), D = ; K = ,
−d2 d2 −k2 k2
den Eingangsmatrizen für die Stell- und Störgröße sowie der Messmatrix
Für die explizite Schreibweise der Strecke bilden wir zunächst die Systemmatrix
0 2×2 E 2×2
A = ,
−M M −1K −M M −1D
Mit dem Zustandsvektor x (t) = [x1 , x2 , ẋ1 , ẋ2 ]T = [yyT , ẏyT ]T folgt dann die Bewe-
gungsgleichung
ẋx(t) = Ax
Ax(t) + b u(t) + w cos Ωt
yM (t) = c Tx (t).
Soll das System mit gegebenem Stellgesetz u(t) simuliert werden, dann müssen wir
wegen des Integralanteils wieder eine Zwischengröße z. B. uI einführen
$
u(t) = −k p c Tx (t) − kI c Tx (t)dt = −k p c Tx (t) − kI uI (t) .
uI (t)
5.1 Struktur der Differenzialgleichungen 233
Fügen wir u̇I (t) = c Tx (t) zur Systemgleichung hinzu, dann folgt
ẋx(t) A O x (t) b
= + u(t)
u̇I (t) cT 0 uI (t) 0
x (t) 1 0 0 0 0 x (t)
y (t) = C = ,
uI (t) 0 0 0 0 1 uI (t)
Dies ist die für die numerische Integration benötigte explizite Form, vgl. Abschn. 8.1.
ü + u̇v̇ = sin t
v̇ + v + u = cos t ,
gesucht die explizite Form (5.2). Führen wir hierfür die neuen Variablen
y1 = u, y2 = u̇, y3 = v
ẏ1 = y2
ẏ2 = ü = sin t − y2 ẏ3
ẏ3 = cos t − y3 − y1 .
Um die Standardform ẏy = f (yy, t) zu erhalten, müssen wir ẏ3 in der zweiten Gleichung
eliminieren und erhalten
ẏ1 = y2
ẏ2 = sin t − y2 (cos t − y3 − y1 )
234 5 Simulation unter MATLAB
Den letzten Schritt wird man für eine numerische Vorgehensweise wegen der seriellen
Arbeitsweise des Digitalrechners nicht unbedingt ausführen; man wird vielmehr die
Reihenfolge der abzuarbeitenden Differenzialgleichungen so umstellen, dass für den
folgenden Schritt jeweils die rechte Seite bekannt ist. Dies bedeutet für das vorliegende
Beispiel ein Vertauschen der Gleichungen ẏ2 = · · · und ẏ3 = · · ·.
In der Elektrotechnik wurden früher stabile Oszillatoren (heute Quarz) in Form dis-
kreter Netzwerke aufgebaut, welche sich u. a. durch das VAN - DER -P OL-Modell mit
q = 0 beschreiben ließen. Für q = 0 ist (5.20) eine autonome Differenzialgleichung,
die Zeit tritt nicht explizit auf. Die Lösungen sind konstant und insbesondere peri-
odisch. Die Periodendauer T wird durch den Parameter ε festgeschrieben. Da die pe-
riodischen Schwingungen nur durch Energieaustausch (Dämpfung/Anfachung), also
ohne äußere Anregung, entstehen, spricht man von Selbsterregung bzw. selbsterregten
Schwingungen im Gegensatz zur Fremderregung. Heute dient (5.20) als Standardglei-
chung zur Beurteilung von Integrationsalgorithmen steifer Systeme. Für q
= 0 treten
Mitnahme -Effekte auf. Zu gegebenem q ist die periodische Lösung x(T + t) = x(t)
nur für bestimmte Ω stabil, diesen Bereich bezeichnet man als Mitnahmebereich, vgl.
Abschn. 4.6.1.
Die Standardform erhalten wir mit x1 = x, x2 = ẋ :
ẋ1 = x2
0
ẋ2 = ε(1 − x12 )x2 − x1 + .
q cos Ωt
M (qq, t) q̈q + k (qq, q̇q, t) = Q (qq, q̇q, t), q (t0 ) = q 0 , q̇q(t0 ) = v 0 , (5.21)
wobei der Geschwindigkeitszustand, wie in (5.4), stets durch die zeitlichen Ablei-
tungen der Lagekoordinaten beschrieben wird. Die explizite Schreibweise entspricht
(5.3).
Definieren wir die Geschwindigkeitszustände ṡs als Linearkombinationen von q̇q mit
den i. allg. lageabhängigen Linearfaktoren als Elemente der regulären Matrix H ∈ R f , f ,
dann gelten die kinematischen Differenzialgleichungen
ω
q̇q = H (qq)ω
(5.24)
ω̇ M (qq, t)−1 Q̄
ω = M̄ Q(qq, ω , t) − k̄k (qq, ω , t)
M = H TMH
M̄ MH, k̄k = H T (Mh
Mh + k ), Q = H TQ .
Q̄
Ist die Ausgangsgleichung eine autonome Bewegungsgleichung, dann lässt sich eine
andere unabhängige Variable als die Zeit t einführen. Wir zeigen dies anhand zweier
Beispiele mit jeweils einem Freiheitsgrad:
ẍ − ε(1 − x2 ) ẋ + x = 0 .
Für die autonome Differenzialgleichung ist es möglich, neben der Diskussion von x(t)
auch ẋ(x) als Phasenebenendarstellung zu betrachten. Setzen wir ẋ = v, dann folgt mit
dv dx
ẍ = = v
v
dx dt
aus der Ausgangsgleichung des VAN - DER -P OL-
Schwingers eine Differenzialgleichung 1. Ordnung
für v(x)
dv x
= v
= ε(1 − x2 ) − ; v
= 0 .
dx v
Allgemein gilt für nichtlineare Systeme:
dx dy
= P(x, y), = Q(x, y) ; P
= 0 , P, Q glatt,
dt dt
236 5 Simulation unter MATLAB
so dass
dy Q(x, y)
= .
dx P(x, y)
Bild 5.6: Van der Pol-Schwinger: Zeitverlauf x(t) und Phasenkurve ẋ(x)
dω dω
= ω ; φ̇ = ω
dt dφ
5.2 Der grundsätzliche Aufbau eines Simulationsprogramms 237
g M(ω)
ω
+ sin φ = .
ω ωm2
Der Graph ω(φ ) ist in Bild 5.73 wiedergegeben. Man erkennt, dass einerseits nur
eine Differenzialgleichung erster Ordnung zu integrieren ist und andererseits der
Funktionsverlauf einfacher erscheint, so dass dadurch mit kürzerer Integrations-
zeit zu rechnen ist, zeitweilig rückläufige Bewegungen seien ausgeschlossen.
25 2 2
20
1.5 1.5
15
1 1
ω
ω
φ
10
0.5 0.5
5
0 0 0
0 20 40 0 20 40 0 10 20
Zeit t Zeit t φ
Im einfachsten Fall setzt sich ein Simulationsprogramm aus dem Hauptprogramm, dem Pro-
grammcode des Integrationsverfahrens z. B. odexx und dem Unterprogramm (Function) z. B.
sys der zu bearbeitenden Differenzialgleichungen zusammen. Das Hauptprogramm umfasst min-
destens die Parametrisierung des zu simulierenden mathematischen Modells mit der Parameter-
übergabe (u. a. über die Global-Vereinbarung global...) an die Function der Differenzialglei-
chungen, den Integratoraufruf mit zugehörigen Optionen (z. B. Fehlertoleranz) sowie die Ergeb-
nisauswertung. Das Zusammenspiel der einzelnen Programme ist in Bild 5.8 veranschaulicht.
Unter MATLAB stehen die in Tabelle 5.1 aufgeführten Integratoren mit variabler Schrittweite
für den zugeordneten Differenzialgleichungstyp zur Verfügung. Die Methoden wurden in Ab-
238 5 Simulation unter MATLAB
Hauptprogramm
global... Parameter
[ta te], y 0 Parametrisierung
Integratoraufruf mit Optionen
- Ergebnisauswertung:
Signalanalyse
Ausgabe: plot, File
t,y
?
ODExx(’syst’,[ta te],y0,...) function[ydot] = sys(t,y,...)
global ..., Parameter
Integrationsverfahren ẏy = f (t, y )
6 6
tk , y k
ẏyk
schn. 4.2 beschrieben, vgl. auch: MATLAB-Handbücher und/oder Online-Hilfe. Es werden zu-
nächst einige Möglichkeiten der Integrationsaufrufe und Beispiele zugehöriger Optionen und
Steuerungen stichwortartig angegeben.
Syntax
[t,y] = ode..(@f,tspan,y0), % Ausgabevektoren t, y
loesung = ode..(@f,tspan,y0), % Ausgabe in Structure
[t,y] = ode..(@f,tspan,y0,options) % mit Optionen
[t,y] = ode..(@f,tspan,y0,options,p1,p2,...) % mit Parameterübergabe
[t,y,tE,yE,iE] = ode..(@f,tspan,y0,options) % System mit Ereignis
[t,y,tE,yE,iE] = ode15i(@f,tspan,y0,yp0,options) % Implizites Verf.
mit
5.2 Der grundsätzliche Aufbau eines Simulationsprogramms 239
RelTol, AbsTol,
∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗
NormControl
OutputFcn, OutputSel,
∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗
Refine, Stats
Events ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗
MaxStep, InitialStep ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗
Jacobian, JPattern,
- - - ∗ ∗ ∗ ∗ ∗
Vectorized
Mass ∗ ∗ ∗ ∗ ∗ ∗ ∗ -
MStateDependence ∗ ∗ ∗ ∗ - ∗ ∗ -
MvPattern - - - ∗ - ∗ ∗ -
MassSingular - - - ∗ - ∗ - -
InitialSlope - - - ∗ - ∗ - -
MaxOrder, BDF - - - ∗ - - - -
Ausgabehilfsmittel, Optionsabfragen
Darüber hinaus lassen sich mit OutputFcn Ausgaben als Zeitverläufe odeplot – wie in Bei-
spiel 5.6 –, als 2D- und 3D-Phasenebenen odephas2, odephas3 und der numerischen Zwi-
schenwerte odeprint erreichen.
Abfragen benutzereigener Optionen oder Standardoptionen , z. B. meine_option können
mit odeget(meine_option,’AbsTol’) für die absolute Toleranz usw. zur Anzeige ge-
bracht werden.
5.3 Integration von Systemen in Standardform 241
übergehen, insbesondere dann, wenn nicht ausnahmslos mechanische Größen vorkommen. Auf-
bereitung und zweckmäßige Schreibweisen spielen dabei eine wesentliche Rolle, woraus sich
vielfach übersichtlichere Formulierungen ergeben.
Zunächst aber betrachten wir ein einfaches Beispiel einer Differenzialgleichung erster Ord-
nung mit dem sich u. a. das Anfangswertproblem grafisch veranschaulichen lässt.
ist das Richtungsfeld in der y, t-Ebene sowie die numerische Lösung zu den Anfangs-
werten y(0) = 2 und y(0) = 3.5 für 0 ≤ t ≤ 2π zu visualisieren.
Da die Formulierung der Differenzialgleichung sehr einfach ist, schreiben wir hier
keine separate Function, sondern wie in Abschn. 1.5.4.3 eine Anonymous Function,
die im Script steht. Das Richtungsfeld wird mit der Built-in Function quiver erzeugt.
Einige Programmschritte aus dem Script Grafik_Elemente.m in [52] geben wir
an:
figure % Grafikfenster
% ---- Punkte der Richtungselemente in der y,t-Ebene
[t,y]=meshgrid(linspace(0,2*pi,20),linspace(.5,5,20));
yp=odefun(t,y); % Ableitungsfunktionen yp
quiver(t,y,ones(size(yp)),yp); % Richtungsfeld
hold on
242 5 Simulation unter MATLAB
Bild 5.9: Richtungsfeld mit zwei speziellen Trajektorien zu y(0) = 2, y(0) = 3.5
Die Anonymous Function gibt das Function Handle odefun zurück, so dass im
Gegensatz zur üblichen Formulierung mit einer Function als eigenes M-File, z. B.
function yp=odefun(t,y) % Function-Kopf
yp=2*sin(y)*cos(1.2*t); % Ableitungsfunktion
das @-Zeichen im Integratoraufruf odexx entfällt. Darüber hinaus werden keine Da-
ten von den Integrierern zurückgegeben (linke Seite fehlt) wodurch automatisch die
grafische Darstellung der Ergebnisse mit der Option: ’OutputFcn’,@odeplot
erfolgt.
Bild 5.9 zeigt das Ergebnis. Es ist deutlich erkennbar, dass durch die Anfangswerte
y(0) = 2 sowie y(0) = 3.5 jeweils eine Trajektorie ausgewählten Richtungselementen
zuzuordnen ist.
Bild 5.10: Fundament mit unwuchtigem Motor und Modell des Gleichstrommotors
Masse m = m0 + mu = 100 kg
Massenträgheitsmoment J = 0,2 kg m2
Federsteifigkeit k = 2,25 106 N/m
Dämpfungskonstante d = 225 Ns/m
Unwucht emu = 0,05 m kg, 0,01 m kg
Induktivität LA = 0,1 H
Ankerkreiswiderstand RA = 0,5 Ω, . . . 10 Ω
Widerstand (Maximalwert) RA = RA + RAN = 200 Ω
Widerstandsänderung rA (t) = RA (1 + rAmax (1 − t/th ))
bezogener Widerstand rAmax = RAN /RA
Zeitfenster der Widerst.-Änd. th = 40 s
Spannung ue = 200 V
Momentenfaktor km = 1 Nm/A
Drehdämpfung im Lager dϕ = 225 10−5 Nms/rad
Erdbeschleunigung g = 9,81 m/s2
5.3.1.1 Bewegungsgleichungen
Die Bewegungsgleichungen für die Vertikalbewegung formulieren wir mit Bild 5.11 nach dem
Prinzip von D’A LEMBERT, vgl. [55], womit folgt:
- Fundamentbewegung um die statische Gleichgewichtslage x0 = (m0 + mu )g/k
Die mathematische Modellierung des Systems setzt sich aus zwei nichtlinearen Differenzialglei-
chungen zweiter Ordnung für x(t), ϕ(t) sowie einer linearen Differenzialgleichung erster Ord-
nung für iA (t) zusammen. Die ersten beiden Gleichungen bringen wir zunächst auf eine angenä-
hert explizite Form. Hierzu dividieren wir jeweils durch m = m0 + mu bzw. J = J0 + mu e2 , führen
die Abkürzungen
(mu e)2
2δ = d/m; ω02 = k/m; 2δϕ = dϕ /J; mx = 1 − cos2 ϕ
mJ
ein und eliminieren in der ersten Gleichung ϕ̈ mit Hilfe der zweiten Gleichung. Danach erhalten
wir für die ersten beiden Gleichungen
1 mu e mu e km
ẍ = {−2δ ẋ − ω0 x +
2
2δϕ ϕ̇ + g cos ϕ − iA cos ϕ + ϕ̇ sin ϕ }
2
mx m J J
mu e km
ϕ̈ = −2δϕ ϕ̇ − (ẍ + g) cos ϕ + iA .
J J
Da ẍ auch auf der rechten Seite der Bewegungsgleichung der Drehung weiterhin auftritt, muss
bei der Programmierung sichergestellt werden, dass zunächst ẍ berechnet wird. D. h. nicht immer
wird eine strenge explizite Form der Bewegungsgleichung nötig. Wählen wir die Zustandsvaria-
blen des Zustandsvektors:
ẏ1 = y3
ẏ2 = y4
ẏ3 = {−2δ y3 − ω02 y1 +
mu e mu e km
2δϕ y4 + g cos y2 − y5 cos y2 + y24 sin y2 }/mx (5.28)
m J J
mu e km
ẏ4 = −2δϕ y4 − (ẏ3 + g) cos y2 + y5
J J
RA km 1
ẏ5 = − (1 + ΔrA (t))y5 − y4 + ue
LA LA LA
dϕ mu e
m = 2δ m =ω , = 2δϕ ,
d k 2
p1 = , p2 = p3 = J p4 = m ,
mu e km km 1
p5 = J , p6 = J , p8 = LA , p9 = LA
Die Abkürzungen der Systemparameter p j sind in Tabelle 5.4 erklärt; sie werden als globale
Variable vereinbart, d. h. die Parameterliste mit den p j hinter dem Schlüsselwort global muss im
Hauptprogramm und in der Function der Differenzialgleichungen stehen. Nach der Parametrie-
rung sind die Abkürzungen aus Tabelle 5.4 zu bilden. Es folgen die gewählten Anfangswerte und
das Integrationsintervall. Da in Bezug auf die Differenzialgleichung keine Besonderheit, z. B.
Steifheit, erkennbar ist, wählen wir den Integrator ode45
Programmausschnitte von gmotor.m mit der Function fgmotor.m aus [52]
global p1 p2 p3 p4 p5 p6 p8 p9 g ue LA RA rAmax th
% ---- Parameter
m =100; % Masse kg
mue=0.05; % Unwucht kgm
k=2.25e+06; % Federst. N/m
d=225; % Dämpfung Ns/m
............
ue=200; % Klemmspannung V
th=40 % Hochfahrzeit
246 5 Simulation unter MATLAB
% ---- Parameterabkürzungen
p1=d/m; % siehe Tabelle
p2=k/m;
............
p9=1.0/LA;
% ---- Anfangswerte
i0=(ue-km*Om)/RAst; % Stromanfangswert
y0=[0;0;0;Om;i0]; % Anfangswertvektor
% ---- Integrationsintervall
tint=[0 50]; % Integrt. über 50 s
% ---- Optionen und Integratoraufruf
options = odeset(’RelTol’,1e-04);% Optionen
[t,y]=ode45(@fgmotor,tint,y0,options); % Integratoraufruf
% ---- grafische Auswertung
figure(1) % grafische Darstellung
subplot(311)
plot(t,y(:,4)) % Winkelgeschwindigkeit
............
Die Function der Differenzialgleichungen enthält (5.28) sowie die Ansteuerung des Motors.
function yp = fgmotor(t,y)
global p1 p2 p3 p4 p5 p6 p8 p9 g ue LA RA rAmax th
% ---- Anfahrsteuerung
p7=RA*(1.0+(t<=th)*rAmax*(1-t/th))/LA; % Anfahrwiderstand
co=cos(y(2)); % Abkürzung
mx=1.0-p4*p5*co^2; % Abkürzung
yp(1)=y(3); % Fundamentblock
yp(2)=y(4); % Drehbewegung
yp(3)=(-p1*y(3)-p2*y(1)+p4*((p3*y(4)+...
p5*g*co-p6*y(5))*co+y(4)^2*sin(y(2))))/mx;
yp(4)=-p3*y(4)-p5*(yp(3)+g)*co+p6*y(5);
yp(5)=-p7*y(5)-p8*y(4)+p9*ue; % Motor
yp=yp’;
Simulationsergebnisse
Die Simulation wurde mit den Standardparametern nach Tabelle 5.3 einerseits für e mu = 0.05
m kg, RA = 0.5 Ω und andererseits für e mu = 0.01 m kg, RA = 10 Ω durchgeführt. Die Ergeb-
nisse sind in Bild 5.12 grafisch dargestellt. Deutlich wird die Kopplung zwischen der Funda-
mentschwingung x(t) und der Drehbewegung ϕ̇(t) = Ω sowie dem damit zusammenhängenden
Einfluss auf den Strom. Dadurch neigt insbesondere das Modell mit der größeren Unwucht e mu
= 0,05 m kg zu stärkeren Resonanzüberhöhungen im Bereich 25 < t < 42 s zu Ω ≈ 150 rad/s.
Durch die damit verbundene hohe Drehbelastung gewinnt das System trotz starken Stromanstiegs
kaum an Winkelgeschwindigkeit. Es bleibt nahezu in der Resonanz hängen. Unmittelbar nach
dem erreichten Spitzenwert von x(t) bzw. iA (t) ändert sich Ω sprungartig und der Strom bricht
aufgrund des kleinen Ankerwiderstandes schnell zusammen. Betrachten wir demgegenüber die
Zeitverläufe bei kleinerer Unwucht und höherem Ankerwiderstand RA , dann fällt die mit e mu
5.3 Integration von Systemen in Standardform 247
Die oben eingeschlagene Vorgehensweise ist für Systeme niedriger Ordnung vertretbar, weil man
noch den Überblick behält. Zweckmäßiger ist eine Matrix/Vektor-Schreibweise. Dazu führen wir
den Beschleunigungsvektor (ẍ, ϕ̈)T ein, so dass wir für (5.25)-(5.27) schreiben können
m mu e cos ϕ ẍ −(d ẋ + kx) + mu eϕ̇ 2 sin ϕ
=
mu e cos ϕ J ϕ̈ −dϕ ϕ̇ − mu eg cos ϕ + km iA (5.29)
LA (iA )˙ = −RA (1 + ΔrA (t))iA − km ϕ̇ + ue ,
wobei weiterhin der Zustandsvektor y = (y1 , . . . , y5 )T = (x, ϕ, ẋ, ϕ̇, iA )T gilt. Die Massen-
matrix in (5.29) ist zustandsabhängig. Wollen wir das System als explizites Gleichungssystem
behandeln, dann müssen wir (5.29)1 von links mit der Inversen
−1
m mu e cos ϕ 1 J −mu e cos ϕ
=
mu e cos ϕ J m J − (mm e cos ϕ)2 −mu e cos ϕ m
durchmultiplizieren. Diese Inverse muss in der Regel zu jedem Integrationsschritt mehrfach nu-
merisch ermittelt werden, was bei Systemen höherer Ordnung sehr rechenintensiv ist. Es stellt
sich jetzt die Frage, ob man das System in der Form (5.5) oder sogar als implizite Differenzial-
gleichung lösen sollte. Wählen wir die Form (5.5)
Neben dem Function-Namen mgmotor setzen wir die Regularität von M (yy(0)) zum Zeit-
punkt t = 0, sie ist eindeutig. Der Abhängigkeitsgrad von den Zustandsgrößen
MStateDependence |none|, |{weak}|, |strong|
ist nicht so einfach zu beantworten. Da nicht alle Elemente zustandsabhängig sind, wählen wir
weak (Standardwert). Die Eigenschaft none ist für eine reine zeitabhängige Matrix M (t) zu
setzen.
Welche der hier betrachteten Wege letztendlich der günstigste ist, kann nur mit einer Simu-
lation geklärt werden. Ist die Rechenzeit das wesentliche Kriterium, dann zeigen (5.29) trotz
Invertierung und (5.28) deutliche Vorteile. Dies liegt womöglich an der günstigen Invertierung
eines 2×2-Systems gegenüber der von M sowie dem vielfachen Aufruf der Function zur Mas-
senmatrix.
In dem Programm gmotor.m sowie in der Function fgmotor.m und mgmotor.m kann
mit Hilfe des Steuerparameters IST wahlweise (5.28) oder (5.30) ausgeführt werden.
Übungsvorschlag: Führen Sie für das Modell des Doppelpendels aus Bild 5.17 mit (5.61)-(5.63)
eine Simulation mit zustandsabhängiger Massenmatrix durch. Erstellen Sie ein einfaches Anima-
tionsmodell und zeigen Sie grafisch, dass die Summe aus kinetischer und potentieller Energie
des konservativen Systems stets konstant ist. Hilfe: doppelp.m in [52].
5.4 Differenzial-algebraische Gleichungen 249
Die bisher betrachteten Bewegungsgleichungen basieren auf einem Satz von Minimalkoordina-
ten, sie führen auf gewöhnliche Differenzialgleichungen, die numerisch sehr effizient zu inte-
grieren sind. Es ist insbesondere bei mechanischen Mehrkörpersystemen nicht immer einfach
bzw. oft unmöglich, die Minimalkoordinaten anzugeben. Daher verwendet man Mischformen,
so genannte differenzial-algebraische2 Gleichungen, kurz DAEs 3 . D. h. aufgrund der algebrai-
schen Gleichungen, die keine Beschleunigungsterme enthalten, wird die Massenmatrix M in
(5.5) singulär. Neben der Mechanik findet man derartige Beschreibungen in Anwendungen der
Mechatronik, der Elektrotechnik und Elektronik sowie in der Chemischen Verfahrenstechnik.
Z. B.: Bei der Analyse elektrischer Netzwerke mit Spannungsquellen erhalten wir mit den Ma-
schengleichungen Differenzialgleichungen der Zweigströme, die Knotengleichungen ergeben al-
gebraische Bedingungen der Ströme.
Die wichtigste Invariante für die Analyse von differenzial-algebraischen Gleichungen ist der
so genannte Index. In der Literatur finden sich verschiedene Indexbegriffe, z. B. der Differenziati-
ons-Index nach [10], der Störungs-Index nach [27], usw. Am häufigsten wird der Differenziations-
Index (d-Index) benutzt, da er eine große Klasse von praxisrelevanten Problemen abdeckt und
in vielen Fällen relativ einfach zu berechnen ist. Im Wesentlichen ist der d-Index die Zahl, die
man an Ableitungen der algebraischen Gleichungen benötigt, um das differenzial-algebraische
Gleichungssystem in ein System gewöhnlicher Differenzialgleichungen (ODE) zu überführen.
Wir werden hier nur den d-Index verwenden und schreiben deshalb kurz Index.
Mathematisch betrachtet sind differenzial-algebraische Gleichungen (auch: Algebro-Differen-
zialgleichungen) Differenzialgleichungen mit Nebenbedingungen
duu
= f (uu, λ ), 0 = g (uu, λ ); u (t0 ) = u 0 ,
dt
man spricht auch von Differenzialgleichungen auf Mannigfaltigkeiten (z. B. Kurven oder Flä-
chen). Differenziert man die Nebenbedingungen 0 = g (uu, λ ) implizit nach t, so erhält man
∂gg(uu, λ ) duu λ
∂gg(uu, λ ) dλ
0 = + .
∂uu dt ∂λλ dt
Wenn die JACOBI-Matrix von g nach λ invertierbar ist, können wir die obige Gleichung formal
λ /dt auflösen. Man erhält
nach dλ
−1
λ
dλ ∂gg(uu, λ ) ∂gg(uu, λ )
=− f (uu, λ ).
dt ∂λλ ∂uu
Zusammen mit der Differenzialgleichung für u ergibt das ein gekoppeltes System von Differen-
zialgleichungen, welches für eine stetige rechte Seite eine eindeutige Lösung besitzt. Da die
Überführung mit einer Ableitung erreicht wurde, liegt ein Index-1-Problem vor. Falls die Index-
2 auch: differentiell-algebraische
3 DAEs Differential-Algebraic Equations
250 5 Simulation unter MATLAB
1-Bedingung verletzt ist, geht die Eindeutigkeit der Lösung verloren und Bifurkationen (Lösungs-
verzweigungen) können auftreten. Wir betrachten zur Erläuterung das System
du
= λ, u2 + λ 2 = 1.
dt
Für die konsistenten Anfangswerte u(0) = 0 und λ (0) = 1 ist die Index-1-Bedingung erfüllt. Die
lokal eindeutige Lösung lautet
∂g
= 2λ = 2 cos (π/2) = 0
∂λ
zum ersten Mal verletzt und eine Bifurkation findet statt. Eine zweite Lösung durch (u, λ ) =
(1, 0) lautet
u ≡ 1, λ ≡ 0.
g = −k(x − s) + k0 s + fD (ṡ)
∂ fD
ġ = −k(ẋ − ṡ) + k0 ṡ + s̈ .
∂ ṡ
Unter der Voraussetzung ∂ fD /∂ ṡ
= 0 ist die Index-1-Bedingung erfüllt und (5.10)
kann unter MATLAB gelöst werden. Wird ∂ fD /∂ ṡ = 0, dann ist die Bedingung verletzt,
es kann zu numerischen Schwierigkeiten kommen.
Verwenden wir das quadratische Dämpfungsgesetz nach (5.8) mit Bild 5.2, dann ist
die Index-1-Bedingung stets erfüllt. Für d0 = 0 und ṡ = 0 ist sie verletzt.
5.4 Differenzial-algebraische Gleichungen 251
entwickelt. Die klassische BDF-Methode kann optional (’BDF’,’on’) aufgerufen werden. Be-
rechnungen eines neuen Schrittes mit einem BDF oder NDF setzt keine reguläre Matrix M
voraus. Dies erlaubt die Berechnung einer direkten Näherung von DAEs vom Index 1. Ist M (t0 )
bzw. M (t0 , y0 ) zum Anfangszustand t0 , y0 singulär, dann wird (5.31) als DAE bearbeitet. Das
Lösen von DAEs ist komplizierter als das von ODEs. Eine DAE hat nur dann eine Lösung, wenn
die Anfangswerte y 0 konsistent bezüglich
sind, d. h. ẏy0 muss Lösung zum Startzeitpunkt t0 sein. Standardmäßig versucht der Integrator aus-
gehend von ẏy0 = 0 mit dem vorgegebenen y 0 konsistente Anfangswerte zu finden. Sind bezüglich
ẏy0 Informationen bekannt, so können diese mit der Eigenschaft InitialSlope in der odeset
Vereinbarung übergeben werden.
ode15s und ode23t-Code (Trapezformel) wurden so getrimmt, dass man DAEs vom Index 1
entsprechend einfach, d. h. wie ODEs lösen kann. Die Codes erkennen an der Singularität von
M zum Anfangszeitpunkt eine DAE und bestimmen selbstständig die konsistenten Anfangsbe-
dingungen. Die Singularitätsbestimmung von M kann vom Benutzer durch
’MassSingular’, ’yes’ | ’no’ | {’maybe’}
gesteuert werden.
Da die Singularitätsbestimmung einer Diagonalmatrix, u. a. M , unproblematisch ist, nehmen
diese Systeme eine Sonderstellung ein und können leicht auf die semi-explizite Form
vom Index 1, d. h. ∂gg/∂λ λ regulär, gebracht werden. Dies gilt insbesondere bei konstanter Mas-
senmatrix.
Unter Simulink können direkt keine differenzial-algebraische Gleichungen gelöst werden. Es
lässt sich aber zeigen, dass in (5.33) λ eliminiert werden kann – vgl. Abschn. 5.4.4 – und somit
eine ODE vorliegt, so dass alle MATLAB-Integratoren eingesetzt werden können, vgl. [62]. Dies
ist der Grundgedanke für ein Simulink-Modell, dessen Struktur in Bild 5.13 wiedergegeben ist.
Das Subsystem (DGL) beschreibt die Differenzialgleichung (5.33)1 , das Subsystem (algebr.
Gleichung) die algebraische Gleichung (5.33)2 , welche mit dem Algebraic Constraint Block
gelöst wird. Für diese ODE-Näherung können alle Standard-ODE-Löser angesetzt werden. Der
Unterschied zum gewöhnlichen ODE-Löser ist, dass der Integrator zu jedem Zeitpunkt den Wert
von f D (t, u , λ ) für bekannte (t, u , λ ) benötigt, demzufolge muss die algebraische Gleichung
0 = g (t, u , λ ) zunächst nach λ aufgelöst werden. Dies erfolgt, ausgehend von Startwerten,
iterativ mit Hilfe der Fixpunktmethode; die Differenzialgleichung kann zum nächsten Zeitschritt
gelöst werden. Durch diese Formulierung entstehen algebraische Schleifen, die keine Probleme
bereiten solange das Verfahren konvergiert, vgl. auch algeb_gl.mdl in [52].
Zwangsbedingungen
explizit erfüllen, dies führt auf die L AGRANGEschen Gleichungen 1. Art [35]:
T T T
d ∂T ∂T ∂V
− + = Q + G T (pp) λ . (5.35)
dt ∂ ṗp ∂p ∂p
Hierbei ist T die kinetische und V die potentielle Energie und Q beschreibt die nichtkonservativen
Kräfte/Momente, wie in Abschn. 2.5, und G T (pp) λ die verallgemeinerten Reaktionskräfte, wobei
G die JACOBI-Matrix der Zwangsbedingungen
∂gg(pp, t)
G = G (pp, t) = (5.36)
∂p
Die L AGRANGEsche Gleichung (5.35) oder die N EWTON -E ULER-Methode nach Abschn. 2.4
führen auf Bewegungsgleichungen in Deskriptorform mit den holonomen Bindungen (5.34)
M (pp) ist die n p ×n p -Massenmatrix (symmetrisch, positiv definit) und f (pp, v , t) der n p -Vektor der
verallgemeinerten eingeprägten Kräfte, Kreisel- sowie Zentrifugalkräfte. (5.37) ist eine differen-
zial-algebraische Gleichung vom Index 3 eines mechanischen Systems.
254 5 Simulation unter MATLAB
mit der Deskriptorvariable y und der singulären Matrix M . Ist die Massenmatrix M invertierbar,
dann ist (5.39) darstellbar als semi-explizite differenzial-algebraische Gleichungen, vgl. (5.33):
mit
v
u = [ p T , ṗpT ]T = [ p T , v T ]T ; f D (uu, λ , t) = , f A (uu, λ , t) = g (pp, t) .
M −1 ( f +GGT λ )
Gesucht sind die Lösungen y (t) = [ p T (t) v T (t) λ T (t) ]T des Anfangswertproblems (5.38) bzw.
entsprechend für (5.40) zu den Anfangsbedingungen y (t0 ) = y 0 d. h. [ p T (t0 ), v T (t0 ), λ T (t0 ) ]T =
[ p T0 , v T0 , λ T0 ]T . Die Anfangsbedingungen müssen auch die Bindungen (5.34) erfüllen.
ṗp = v
M (pp)v̇v = f (pp, v , t) +GGT (pp, t) λ
(5.42)
0 = G(pp, t)v̇v + γ (pp, v, t) und mit v̇v nach (5.42)2
M (pp)−1 f (pp, v , t) +G
!
= G (pp, t)M GT (pp, t) λ +γγ (pp, ṗp, t) .
∂gg(pp, t)
0 = g (pp, t), 0 = G (pp, t)vv + . (5.43)
∂t
Die Anfangswerte p 0 , v 0 , λ 0 müssen einerseits diese Bedingungen erfüllen (konsistente Anfangs-
bedingungen):
Unter MATLAB können die Integratoren ode15s, ode23t (implizite BDF- bzw. NDF-Mehrschritt-
verfahren) nur für Index-1-Probleme verwendet werden. Die Anfangswerte p 0 , v 0 müssen die
konsistenten Anfangswerte (5.44) erfüllen, (5.45) wird dagegen automatisch numerisch erfüllt.
Einen Überblick bezüglich Lösungsalgorithmen für höhere Index-Probleme finden wir in [3],
[15]. Implizite Integrations-Methoden lösen Index-1-Probleme, ohne die Zwangs- bzw. Neben-
bedingungen differenzieren zu müssen, vgl. Abschn. 5.5.
Physikalisch lassen sich die Ausdrücke ∂ g/∂ p j λ = 2p j λ deuten als die den generalisierten Ko-
ordinaten p j zugeordneten generalisierten Reaktionskräfte/momente, durch die die Einhaltung
der Bindungsgleichung erzwungen wird, vgl. Bild 5.14.
Das System (5.46) ist vom Index 3, was unter MATLAB so nicht direkt lösbar ist, wir überfüh-
ren es deshalb, wie in (5.41), durch zweimalige zeitliche Differenziation der Bindungsgleichung
in ein Index-1-Problem:
0 = G (pp)vv
= 2(p1 v1 + p2 v2 ), Index 2, Geschwindigkeits-Ebene
(5.47)
0 = G (pp)v̇v + γ(vv)
= 2( p1 v̇1 + p2 v̇2 + v21 + v22 ), Index 1, Beschleunigungs-Ebene .
Setzen wir v̇v = [v̇1 , v̇2 ]T aus (5.46)2 noch ein – entspricht (5.42)3 –, so folgt
2
M −1 f +G
0 = G (pp)M GT (pp) λ + γ(vv) = 2(− gr p2 + (p21 + p22 )λ + v21 + v22 ) . (5.48)
m
ṗp = v
GT (pp) λ
M v̇v = f +G (5.49)
0 = G (pp)v̇v + γ(vv)
mit M , G (pp), f nach (5.46) sowie γ = 2( v21 + v22 ) nach (5.47)2 . Schließlich erhalten wir mit
y = [ y1 , y2 , y3 , y4 , y5 ]T = [ p1 , p2 , v1 , v2 , λ ]T die allgemeine Form
bzw. mit
Numerische Vorgehensweisen
Die folgende numerische Auswertung soll einerseits skriptorientiert unter MATLAB und anderer-
seits als Simulink-Modell nach Bild 5.13 erfolgen.
Skriptoriente Vorgehensweise: Wir arbeiten mit (5.50), also ohne explizite Invertierung von
M . D. h. ẏy = f (yy) und M müssen separat programmiert werden. Da M konstant ist, erfolgt
deren Vereinbarung einmalig im Hauptprogramm mathp.m. Hinweis: Zweckmäßiger ist die
semi-explizite Form, es braucht v̇v in (5.49) nicht eliminiert werden, vgl. Beispiele in Rheo-
bind.pdf [52]. Für ẏy = f (yy) ist die Function fmathp.m angelegt. Die Anfangswerte müs-
sen die Bindungen (5.44), d. h. (5.46)3 und (5.47) zum Zeitpunkt t0 , erfüllen. Dies geschieht
mit (5.53), wobei ϕ0 , ϕ̇0 vorzugeben sind. Bindung (5.48) wird numerisch durch den Integra-
tor erfüllt, so dass für λ0 nur ein Näherungswert vorzugeben ist, z. B. y 0 = [ L, 0, 0, 0, 0.5 ]T ,
ẏy(0) = 0 . In mathp_1.pdf [52] wird gezeigt, wie sich mit der MATLAB Function decic – vgl.
Abschn. 5.5 – konsistente Anfangswerte berechnen lassen, vgl. auch mathp_10.m. Wesentli-
che Programmausschnitte des Hauptprogramms mathp.m und der Function fmathp.m, vgl.
[52], geben wir an:
Die Function fmathp.m enthält die rechte Seite der Differenzialgleichung (5.52).
Function: fmathp.m
function yp = fmathp(t, y, m, L, gr) % Function
yp = [ y(3); y(4); % Identität
+ 2 * y(1) * y(5) % Differenzialgl.
+ 2 * y(2) * y(5) - m * gr
y(3)ˆ2 + y(4)ˆ2...
- gr * y(2) + 2 * Lˆ2/m * y(5) ]; % Bindung
258 5 Simulation unter MATLAB
Hauptprogramm: mathp.m
clear, close all
m = 1; % Masse
L = 1; % Pendellänge
gr= 9.81; % Erdbeschl.
y0 = zeros(5,1); % spezielle
y0(1) = L; % Anfangswerte
M = diag([1 1 m m 0]); % ’Massenmatrix’
options =odeset(’Mass’,M,... % Optionen
’MassSingular’,’yes’...
,RelTol’,1.0e-5);
[t, x] = ode15s(@fmathp,[0 10], y0,... % Integrationsaufruf
options,m ,L, gr); % mit Parameterübergabe
plot(t,x(:,1:4) % Plot-Ausg.
Simulink-Modell: Parallel dazu erstellen wir das Simulink Modell mathp_S.mdl nach
Bild 5.13. Mit (5.52) lassen sich die darin enthaltenen Subsysteme modellieren. Das Subsys-
tem (DGL) in Bild 5.15 a beschreibt u̇u = M −1 f D (uu, λ ) (5.52)1 – die Zeit t (Eingang: In3) tritt
nicht explizit auf –, das Subsystem (algebr. Gleichung) in Bild 5.15 b die algebraische
Gleichung 0 = g̈(uu, λ ) (5.52)2 mit dem Algebraic Constraint Block. Als Anfangsvektor ist u (0),
er muss (5.46)3 und (5.47)1 zum Zeitpunkt t0 = 0 erfüllen, vorzugeben. λ (0) wird, ausgehend
von einem Startwert, der in der Dialogbox des Algebraic Constraint Block einzutragen ist, mit
(5.52)2 ermittelt. Damit sind die Anfangswerte konsistent, vgl. auch mathp_10.m in [52]. Zur
Simulation mit dem Simulink-Modell sind alle ODE-Integratoren zulässig. Das RUNGE -K UTTA-
Verfahren ode45 lieferte die stabilsten Ergebnisse.
Bild 5.16 zeigt für die Parameter: m=1 kg, L=1 m, gr =9,81 m/s2 und u (0) = (L,0,0,0)T ein
Simulationsergebnis in Form von p1 (t), p2 (t) sowie die Bindungskraft f (t) in der masselosen
5.4 Differenzial-algebraische Gleichungen 259
Verbindungsstange:
∂ g(pp) ∂ g(pp) !
f p1 = λ; f p2 = λ; f = − f p21 + f p22 .
∂ p1 ∂ p2
Beurteilung beider Modellierungen: Die Verfügbarkeit der Bindungskräfte ist ein wichtiger
Aspekt für eine derartige Vorgehensweise. Nachteilig ist aufgrund der redundanten Koordinaten
die höhere Ordnung des Gleichungssystems gegenüber einer Formulierung in Minimalkoordi-
naten (5.77). Darüber hinaus muss in der Regel mit kleineren Schrittweiten gearbeitet werden,
um die Bindungsgleichungen nicht zu verletzen. Wird nämlich in unserem Beispiel über einen
größeres Zeitintervall te > 10 s mit RelTol 1e-04 integriert, dann weisen die Ergebnisse –
abhängig von den Anfangsbedingungen – numerische Instabilität auf, insbesondere erkennbar in
x(5) = λ (t), d. h. aufgrund von Diskretisierungs- und Rundungsfehlern stellt sich eine Lösung
ein, die die Bindungsgleichungen (5.46)3 , (5.47) auf Lage-, Geschwindigkeits- und Beschleuni-
gungsebene nicht mehr erfüllt. Mit zunehmender Zeit wächst dieser Fehler rasch an. Dies ist ein
bekanntes Problem bei der Bearbeitung von DAEs. Insbesondere treten diese numerischen Insta-
bilitäten, so genannte Drift-Effekte, in Index-1-Problemen auf, bei denen die Bindungen auf Be-
schleunigungsebene formuliert sind, vgl. Bild 5.19. Abhilfe bietet eine größere Genauigkeit bei
der Integration, z. B. ’RelTol’,1.0e-05 und kleiner, oder das Einführen von Stabilisierungs-
Methoden [5], [15], [68] sowie Abschn. 5.4.4 und Kapitel 7.
Wenn möglich, ist deshalb eine Formulierung als ODE in Minimalkoordinaten anzustreben,
um einerseits numerisch stabilere Modelle zu integrieren und andererseits Rechenzeit zu sparen.
Muss das differenzial-algebraische System vom Index 1 dennoch unter MATLAB oder Simulink
integriert werden, so zeigen Systeme, in denen einerseits λ eliminiert, andererseits durch noch-
malige Differenziation der Bindungsgleichung ein gewöhnliches Differenzialgleichungssystem
erzeugt wird, teilweise eine etwas bessere Handhabung. Die Drift-Effekte können dadurch aber
nicht unterdrückt werden. Bezogen auf das Pendel bedeutet dies: Einerseits lässt sich aus der Bin-
dungsgleichung (5.48) λ ermitteln und somit in (5.46)1 eliminieren, es bleibt ein gewöhnliches
Differenzialgleichungssystem 4. Ordnung, andererseits kann die Bindungsgleichung nochmals
nach der Zeit differenziert werden, so dass wegen λ̇ ein System 5. Ordnung zu integrieren ist.
260 5 Simulation unter MATLAB
Übungsvorschlag: Durch Differenziation der Bindungsgleichung in (5.52) erhält man eine Dif-
ferenzialgleichung für λ̇ , so dass insgesamt ein gewöhnliches Differenzialgleichungssystem vor-
liegt. Erstellen Sie hierfür ein Simulink-Modell sowie ein Scriptfile und vergleichen Sie die er-
haltenen Ergebnisse mit denen aus der differenzial-algebraischen Gleichung (5.52) für einige
Integrationsintervalle und Toleranzangaben, vgl. Bemerkungen aus Abschn. 5.4.4.
Hilfe in: mathp_S1.mdl, mathp_1.m, mathp_10.m sowie mathp_1.pdf aus [52].
Abschließend wollen wir die erwähnten Umformungen, mit denen sowohl eine MATLAB- als
auch eine Simulink-Modellierung möglich wird, verallgemeinern. Zur Simulation können alle
Integratoren eingesetzt werden. Die Drift-Effekte der Lösungen bleiben erhalten. Darüber hinaus
werden Parallelen zu der in Kapitel 7 skizzierten Arbeitsweise von SimMechanics sowie der
zugehörigen Parametereinstellungen erkennbar und verständlicher.
Der Betrachtung legen wir ein allgemeines mechanische Modell vom Index 1 zugrunde
∂gg(pp, t)
M p̈p = f (pp, ṗp, t) + G T (pp, t) λ , G (pp, t) =
∂qq (5.55)
0 = G (pp, t)p̈p +γγ (pp, ṗp, t) .
Mit (5.55) und v = ṗp erhalten wir unmittelbar ein für die numerische Vorgehensweise bedingt
geeignetes Gleichungssystem vom Index 1
⎡ ⎤⎡ ⎤ ⎡ ⎤
E 0 0 ṗp v
⎣ 0 M G T ⎦ ⎣ v̇v ⎦ = ⎣ f ⎦ , v = ṗp, E Einheitsmatrix . (5.56)
0 G 0 −λ λ −γγ
Falls die Massenmatrix M positiv definit ist und die Bindungen unabhängig sind, d. h. die JACOBI-
Matrix G vollen Rang hat, ist die Koeffizientenmatrix der linken Seite in (5.56) regulär und damit
invertierbar. Dieses Gleichungssystem ist im Prinzip ausreichend, um für konsistente Anfangsbe-
dingungen
$
p (0) = p 0 , v (0) = v 0 , − λ dt|(0)
T
die Trajektorien von p T , v T , − λ T dt zu ermitteln. Nachteil: Der Kraft- bzw. Momentenbe-
zug über λ ist nicht mehr direkt zugänglich.
GM −1 f +GM
GM −1G Tλ = −γγ
finden. Dabei ist GM −1G T regulär, wenn G den vollen Rang besitzt, so dass wir nach λ auflösen
können:
−1
λ = − GM −1G T γ +GGM −1 f . (5.57)
Setzen wir nun λ in die Ausgangsgleichung (5.55)1 ein, dann ergibt sich das explizite gewöhnli-
che Differenzialgleichungssystem (Index 0)
ṗp = v
−1 (5.58)
v̇v = M −1 { E −PGM
PGM −1 f −P
Pγ }, P = G T GM −1G T
für p (t), v (t), womit anschließend aus (5.57) λ (t) berechnet werden kann.
Alle Lösungen p (t), v (t), λ (t) aus (5.58) und (5.57) erfüllen die in (5.58) berücksichtigten
Bindungen auf Beschleunigungsebene (5.55)2 . Damit p (t), v (t) von (5.58) zugleich auch Lö-
sungen der DAE (5.55) sind, müssen auch hier die Anfangswerte p 0 , v 0 die Bindungen (5.44)
erfüllen.
... ∂φφ ∂ ∂
g = GM −1G Tλ̇
λ+ p̈p + GM −1G Tλ +φφ )ṗp + (GM
(GM GM −1G Tλ +φφ ) = 0 (5.59)
∂ ṗp ∂p ∂t
womit λ unmittelbar verfügbar ist. Mit (5.56) und insbesondere mit (5.58) und (5.60) wird eine
Simulink-Modellierung möglich. Vergleichbare Schritte müssen deshalb auch unter SimMecha-
nics verfolgt werden. Der Aufwand insbesondere in (5.60) steigt erheblich. Die zeitlichen Ab-
leitungen von g wird man zweckmäßigerweise symbolisch mit der Computeralgebra ausführen.
Die konsistenten Anfangswerte können, wie bereits erwähnt, ausgehend von g = 0 , ġg = 0 , g̈g = 0
mit der MATLAB Function decic aus Abschn. 5.5 iterativ berechnet werden. Dabei sind einige
Komponenten von p(0), ṗp(0) festzuschreiben, für die restlichen sind Schätzwerte vorzugeben.
Nicht jede Kombination führt zum Ziel.
Diesbezügliche Anwendungen zum Pendel nach Bild 5.14 sind mit mathp_1.m,
mathp_S1.mdl, mathp_10.m aus [52] durchführbar. In mathp_1.pdf sind einige Bemer-
kungen zu finden.
262 5 Simulation unter MATLAB
Da der Schubkurbeltrieb nur einen Freiheitsgrad hat, führen wir mit α, β redundan-
te Koordinaten p T = [α, β ] ein. Dies ist mit der zusätzlichen holonomen Schleifen-
Schließbedingung s = 0 nach Bild 5.17 (Zwangsbedingung, Bindung), der algebrai-
schen Gleichung (s → g)
∂ g(pp)
G (pp) = = [1 cos α, −2 cos β ] , p = (α, β )T (5.66)
∂p
folgt. Die zulässigen Anfangswerte p 0 , ṗp0 , λ0 müssen die Bindungen (5.44) und (5.45)
erfüllen. Damit ist das System als DAE vollständig beschrieben.
Wir wollen hier das Problem als gewöhnliches Differenzialgleichungssystem be-
handeln. Dafür bieten sich die Formulierungen (5.56), (5.58) und (5.60) an, wobei
wir hier (5.58) programmieren. Die Anfangswerte α(0) = α0 , β (0) = β0 , α̇(0) = α̇0 ,
β̇ (0) = β̇0 müssen die beiden Bindungsgleichungen
erfüllen. Geben wir α0 und α̇0 vor, dann genügen β0 und β̇0 den Bedingungen
1 1 cos α0
β0 = arcsin( sin α0 ), β̇0 = α̇0 .
2 2 cos β0
In DAE_K.m aus [52] sind die hier vorgestellten Wege programmiert. Sie sind mit
dem Steuerparameter IST auszuwählen:
−1
IST = 1: M ẏy = f (yy), (5.56), IST = 2: ẏy = M f (yy), (5.56)
IST = 3: (5.58), λ eliminiert, IST = 4: gew. Dgl. (5.60) mit λ̇ .
In Bild 5.18 ist ein Ergebnis dargestellt. Danach läuft infolge der vorgegebenen An-
fangswerte die Kurbel um, wobei im unteren Totpunkt aufgrund von α̇(0) Kurbel und
Pleuel nahezu zur Ruhe kommen, vgl. α̇, β̇ und die Animation mit Kurbel_q0.m
in [52]. Beim Durchgang der oberen Totpunktlage sind α̇, β̇ maximal. Hierzu ge-
hört auch eine starke Änderung der Normalkraft (λ ) am Gleitschuh. Weitere Bei-
spielrechnungen zeigen wieder Drift-Effekte, wenn mit ’RelTol’,10e-04 gerech-
net wird. Die Bindungsgleichungen werden mit fortschreitender Zeit immer schlech-
ter erfüllt. Abhilfe bietet wieder nur eine Integration mit kleiner Fehlertoleranz, z. B.
’RelTol’,
1e-05...1e-06. Die stabilsten Ergebnisse wurden mit (5.58), IST=3 erreicht.
5.4 Differenzial-algebraische Gleichungen 265
Aufgrund der numerischen Drift bei der Lösung sowohl von Index-1-DAEs (5.42) als auch der
überführten ODEs (5.58), (5.60) müssen in der Regel zur abgesicherten Integration numerische
Stabilisierungsmethoden, wie u. a. in [5], [15] und [67] beschrieben, eingeführt werden. Es sollen
die beiden Methoden: 1. BAUMGARTE-Stabilisierung, 2. Projektionsmethode skizziert werden.
ṗp = v
M (pp)v̇v = f (pp, v , t) +G
GT (pp) λ
(5.69)
0 = G (pp)v̇v + γ (t, v , p ) +2d G (pp)vv + ω 2g (pp) .
g̈g ġg
Nachteil: Es gibt keine allgemein gültigen Regeln für die Wahl von d und ω in den Zusatztermen.
Darüber hinaus verfälschen diese Terme die Systemdynamik geringfügig.
Für das Pendel und den Kurbeltrieb bedeutet dies:
g̈ + 2d ġ + ω 2 g = 0; d > 0 , (5.70)
mit geeignet gewähltem d und ω. Dies ist für sich eine homogene Schwingungsgleichung für g
mit asymptotisch stabilem Lösungsverhalten. Setzen wir ġ und g̈ nach (5.41) noch ein, dann folgt
(5.69)3 . Das Hauptproblem ist die Wahl von d und ω in Abhängigkeit von der Fehlertoleranz. In
mathp_St.m [52] ist für das mathematische Pendel aus Abschn. 5.4.3.4 (5.69)3 eingearbeitet.
Bei der Projektionsmethode wird nach jedem Integrationsschritt, dem Prädiktorschritt, die Lö-
sung p Pk+1 zum Zeitpunkt tk+1 wieder auf die Bindungsmanigfaltigkeit projiziert, so dass sich die
Näherungslösung p k+1 , v k+1 einstellt. Dies führt z. B. auf ein iteratives Minimierungs-Problem
mit nichtlinearen Nebenbedingungen in Form der Bindungen:
2 2
1. p k+1 − p Pk+1 = → min, 2. v k+1 −vvPk+1 = → min
g (ppk+1 ) = 0 G (ppk+1 )vvk+1 = 0 .
In der Regel führen differenzial-algebraische Gleichungen auf einfache Strukturen höherer Ord-
nung, verursachen aber bei der Lösung ohne zusätzliche Stabilisierung einige numerische Proble-
me. Man wird deshalb versuchen, durch Einführen f unabhängiger Koordinaten (Minimalkoor-
dinaten) q und Elimination der Reaktionskräfte/momente G Tλ auf gewöhnliche Differenzialglei-
chungen mit f = n p − nZ Freiheitsgraden überzugehen. Dies lässt sich systematisieren, wenn die
n p Lagekoordinaten
p = p (qq, t) (5.71)
durch q ausgedrückt werden; (5.71) werden als explizite Bindungen für die nZ + f Lagekoordi-
naten p bezeichnet, sie erfüllen natürlich die nZ impliziten Bindungen g (pp(qq, t)) = 0 und deren
zeitlichen Ableitungen. Für den übergeordneten Fall der rheonomen Bindungen gilt:
5.4 Differenzial-algebraische Gleichungen 267
p = p (qq, t)
∂ p (qq, t) ∂ p (qq, t) ∂ p (qq, t)
ṗp = q̇q + = J (pp(qq, t)) q̇q +
∂qq ∂t ∂t (5.72)
∂ 2 p (q
q , t) ∂ 2 p (qq, t)
p̈p = J (pp(qq, t)) q̈q + J˙(pp(qq, t)) q̇q + q̇q + ,
∂qq∂t ∂t 2
vgl. Kapitel 2 und insbesondere Abschn. 2.3.1.3. Sind die Bindungen g (pp) skleronom, dann ent-
fallen auf der rechten Seite in (5.72) die partiellen Ableitungen nach t. Mit (5.72) folgt aus (5.42)2
bei gleichzeitiger Linksmultiplikation mit J T
∂ 2 p (qq, t) ∂ 2 p (qq, t)
J M J q̈q = J
T T
f (qq, q̇q, t) −M
M J q̇q +
˙ q̇q + + J TG Tλ . (5.73)
∂qq∂t ∂t 2
mit
∂ 2 p (qq, t) ∂ 2 p (qq, t)
Mq = J M J ,
T
f q = J f (qq, q̇q, t) −JJ M J˙q̇q +
T T
q̇q + .
∂qq∂t ∂t 2
Bei baumstrukturierten Systemen, wie Einfach- und Doppelpendel, lassen sich explizite Bindun-
gen (5.72) auswerten. Bei Schleifensystemen, z. B. Kurbelsystem nach Bild 5.17, ist der Über-
gang auf explizite Bindungen schwieriger, vgl. MinM_pdf.pdf in [52].
Die Bewegungsgleichungen als DAE, insbesondere aber mit anschließendem Übergang auf
eine als ODE für einen Satz von Minimalkoordinaten q , stellen neben der Vorgehensweise aus
Kapitel 2 einen ergänzenden, systematischen Weg zur mathematischen Modellerstellung dar. Es
soll deshalb anhand des Pendels aus Abschn. 5.4.3.4 sowie dreier Varianten eines Systems mit
rheonomen Bindungen diese Methode vertieft werden, siehe auch Kapitel 8, Abschn. 8.8 Balan-
cierender Roboter.
f = 6N − r − s. (5.78)
5.4 Differenzial-algebraische Gleichungen 269
Die s nichtholonomen (Index nh) skleronomen und/oder rheonom Bindungen sind implizit durch
die nichtintegrierbare s × 1 Vektorgleichung
mit den redundanten bzw. verallgemeinerten Koordinaten p ṗp beschrieben. Die r holonomen
(Index h) Bindungen formulieren wir hier auf Geschwindigkeitsebene
λ + Q nk
M (pp)p̈p = f (pp, ṗp, t) + G T (pp, ṗp)λ (5.84)
ein und multiplizieren von links mit J qTp durch, dann folgt
∂ ṗp
J qTp M (qq) J q p q̈q + J q q̇q + − f (qq, q̇q, t) = J qTp G T λ + J qTp Q nk (5.85)
∂t
wobei J qTp G T = 0 wieder verschwindet – die Zwangskräfte stehen senkrecht auf der Geschwindig-
keitsebene. Der Term Q nk enthält alle nichtkonservativen Kräfte/Momente, einschließlich solcher
aus einem Regeleingriff, vgl. Balancierender Roboter in Abschn. 8.8.
270 5 Simulation unter MATLAB
Es sind die Bewegungen einer rollenden Kugel/Ball nach Bild 5.21 ( Masse m,
Massenträgheitsmoment Ix bezüglich beliebiger Drehachsen, Radius R) auf einer Ebe-
ne zu untersuchen, d. h. die Relativgeschwindigkeit im Berührungspunkt P ist null, es
tritt kein Schlupf auf. Es handelt sich um einen starren Körper mit einer holonomen
(Kontaktpunkt) und zwei nichtholonomen (Rollbedingung) Bindungen mit
f =6−1−2=3
Die Anbindung der Kugel an die Rollebene erfolgt durch die holonomen, skleronomen
Bindung
!
gh = I zS − R = 0. (5.87)
Die Rollbedingung ist erfüllt, wenn die Geschwindigkeit der freien Kugel in P
⎡ ⎤ ⎡ ⎤ ⎡ ⎤
I ẋS 0 0
r
ṙ
I 0P = ⎣ ẏ
I S ⎦ + I ω × ⎣ 0 ⎦ ! ⎣
= 0 ⎦
ż
I S −R 0 (5.89)
!
ω I r SP = 0
= I v S + I ω̃
die in R_Kugel.m aus [52] ausgewertet ist. Dabei kann die kinetische Energie der
Rotation TR (T = TT + TR ) wegen des geometriebedingten konstanten Trägheitstensors
wahlweise im I- oder K-Systems angeschrieben werden.
Nach symbolischer Auswertung von (5.91) erhalten wir die Massenmatrix M p , die
Vektorfunktion f p und die JACOBI-Matrix G entsprechend (5.84). Diese Ausdrücke
sind recht übersichtlich, sollen hier aber nicht abgedruckt werden, lassen sich jedoch
mit R_Kugel.m anzeigen.
Der Übergang auf die Minimalkoordinaten bzw. die generalisierten Koordinaten
T
q = [α, β , γ]T , q̇q α̇, β̇ , γ̇ (5.92)
erfolgt mit (5.83) durch Auswertung von (5.85), was wiederum in R_Kugel.m zu
finden ist. Als Ergebnis geben wir die Vektorfunktion
" #T
β̇ (γ̇ − α̇ sin β ) β̇ (α̇ − γ̇ sin β )
f (qq, q̇q) = M −1
q fq = − , α̇ γ̇ cos β , −
cos β cos β
der Bewegungsgleichung
an. Die Ausdrücke sind nichtlinear, unübersichtlich und somit schwer interpretierbar
jedoch unabhängig von den Kugelparametern m, Ix , R.
Abschließend soll (5.93) in der Basis des Inertialsystems angeschrieben werden.
Hierzu bilden wir von (5.88) die zeitliche Ableitung
I ω̇ H R q̇q → q̈q = H −1
ω = H R q̈q + Ḣ R ω − Ḣ
I ω̇ H Rq̇q , (5.94)
272 5 Simulation unter MATLAB
setzen dies in (5.93) ein und formen um, es bleibt die lineare Differenzialgleichung
ω
I ω̇ =0 (5.95)
Ix = −Rη, Iy = Rζ (5.99)
Die Berechnung konsistenter Anfangswerte führt in der Regel auf nichtlineare algebraische Glei-
chungen. Meist wird man einige Komponenten von ẏy0 , y 0 aus physikalischen Gründen vorgeben,
die restlichen müssen dann (5.101) erfüllen.
Die Built-In Function decic berechnet konsistente Anfangsbedingungen mit Hilfe der Function
der Differenzialgleichung.
5.5 Implizite Differenzialgleichungen 273
Syntax:
[y0mod, ypmod ,res]=decic(@fode,t0,y0, fixed_y0,yp0,fixed_yp0 ,p1,p2,..)
mit dem optionalen Maß res (Residuum, Defekt) der erreichten Genauigkeit, so dass
Dies ist eine implizite Differenzialgleichung 3. Ordnung. Wir gehen davon aus, dass die An-
fangswerte y 0 = (y1 (0), y2 (0), y3 (0))T gegeben seien, die Ableitungen ẏy0 müssen dann so be-
stimmt werden, dass sie (5.102) genügen. Ausgehend von der Function der Differenzialgleichun-
gen (5.102)
wobei die Parameter im Hauptprogramm DAE_i.m festgeschrieben sind, ermitteln wir zunächst
die konsistenten Anfangswerte, dabei sind y1 (0), y2 (0) die Gleichgewichtslage und y3 (0) ge-
wählt.
Da zur Lösung mit ode15i in jedem Schritt ein nichtlineares Gleichungssystem zu lösen ist,
müssen die hierzu benötigten JACOBI-Matrizen näherungsweise ermittelt werden, sofern sie
274 5 Simulation unter MATLAB
nicht analytisch angebbar sind. Wir berechnen sie für das Beispiel:
⎡ ⎤ ⎡ ⎤
0 0 −1 1 0 0
∂f ∂ f
Jy = =⎣ k −k 0 ⎦, J ẏ = =⎣ 0 0 m ⎦ . (5.103)
∂yy ∂ ẏy
−k k0 + k 0 0 d0 + 2d|ẏ2 | 0
Alle Einzelschritte sind in DAE_i.m, [52] nachzulesen. Darüber hinaus ist die explizite Form
mit (5.9) sowie die DAE-Formulierung (5.10) dort programmiert. In Bild 5.22 ist für die Parame-
ter
m=10 kg, k=2·105 N/m, k0=103 N/m d0=0,5 Ns/m d=6 Ns2 /m2
ein Einschwingvorgang dargestellt. Man erkennt, dass aufgrund des nichtlinearen Terms der
Dämpferkennlinie (5.8) die anfänglichen großen Schwingungen schnell, die Schwingung für
t > 5 nur durch den linearen Term (d0 ) langsam gedämpft werden. Als Hilfsgrößen werden
k0 + k mg
y10 = x0 = −mg ; y20 = s0 = − ; y30 = 0
k0 k k0
und deren Stabilität, festgeschrieben durch die Eigenwerte der linearen Bewegungsgleichung
herangezogen.
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 275
Unstetigkeiten ergeben sich in den meisten Fällen aus vereinfachten Annahmen, denn bei
genügend genauer Modellierung treten keine Unstetigkeiten auf, wie das sehr genaue Diodenmo-
dell in Bild 5.23 aus [45] verdeutlichen soll. Allerdings erhöht sich der Aufwand zur Parameter-
ermittlung solch sehr genauer Modellelemente erheblich. Darüber hinaus ist mit wesentlich län-
geren Rechenzeiten zu rechnen, da die Integratoren zur Simulation dieser Modellkomponenten,
z. B. mit sehr steilen Kennlinien und zusätzlichen Dynamikanteilen, mit sehr kleinen Schrittwei-
ten arbeiten müssen. Nach [23] wird das ideale Diodenmodell gegenüber dem sehr genauen ca.
10-50 mal schneller simuliert. In [11] wird eine Modellierung mit stückweise stetigen Elementen,
u. a. Geraden, und ausrunden der Übergänge zur Einhaltung der Stetigkeit vorgeschlagen, siehe
Bild 5.23. Die Steilheit der Kennlinien bleibt erhalten.
Wir wollen mit einer beispielorientierten Vorgehensweise aufzeigen, wie Probleme mit Un-
stetigkeiten unter MATLAB und Simulink gelöst werden können.
• Reibung: Gleit- und Haftreibung weisen in den Übergängen sprunghafte Unstetigkeiten auf.
• Stoßvorgänge: Stöße führen zu sprunghafter Änderung in der Geschwindigkeit, z. B. Lose
in Getrieben.
• Approximationen von Charakteristiken mit stückweise stetigen Funktionen, z. B. progressi-
ve oder degressive Kennlinien.
• Strukturvariable Systeme: Die Anzahl der Freiheitsgrade ändert sich; z. B. Übergang von
Gleit- in Haftreibung, Abheben eines Fahrzeugrades wie in Abschn. 8.6.
• Hysteresis: Systeme, die von der Vorgeschichte der Bewegung abhängig sind.
• Digital geregelte Systeme: Die während eines Abtastschritts konstante Stellgröße ändert
sich sprunghaft an den Grenzen der Abtastintervalle.
• Schaltende elektronische Komponenten: Dioden, Transistoren usw.
• Getaktete Endstufen: Die erzeugte Spannung wechselt pulsweitenmoduliert ihr Vorzeichen.
Die Schaltpunkte werden z. B. als Nullstellen eines Dreiecksignals mit der Istgröße des
Prozesses bestimmt oder direkt von einem Mikrokontroller erzeugt.
• Zeitabhängige Eingangsfunktionen: Systemerregungen werden oft als zeitabhängige
Funktionen modelliert, die zu bekannten Zeitpunkten Unstetigkeiten aufweisen, es liegt ein
Zeitereignis vor.
Die Fälle, bei denen die Unstetigkeiten zu bekannten Zeitpunkten auftreten, sind unproblema-
tisch, da die Integration zu diesen Zeitpunkten gestoppt und mit neu generierten Anfangswerten
wieder gestartet werden kann. Weitaus komplizierter sind zustandsabhängige Unstetigkeiten. Es
müssen die Unstetigkeitsstellen zweckmäßigerweise als Nullstellen zu formulierender Schalt-
funktionen parallel zur Integration ermittelt und ausgewertet werden.
In der Praxis werden Systeme mit Unstetigkeiten vielfach ohne dessen Lokalisierung bearbei-
tet; d. h. es wird über die Unstetigkeitsstelle hinwegintegriert. Bezogen auf Systeme mit C OU -
LOMBscher Reibung bedeutet dies, dass man von einem System mit Gleitreibung, also mit nicht
verschwindender Relativgeschwindigkeit zwischen der Reibpaarung, ausgeht. In Zeitabschnit-
ten möglicher Haftung neigt die numerische Lösung dann zu hochfrequenten Schwingungen um
die so genannte Schaltmannigfaltigkeit; es existiert bei dieser Formulierung keine zugehörige
Lösung. Diese Stellen sind somit sehr uneffizient zu integrieren. D. h. liegt eine Unstetigkeit in
dem Integrationsintervall [tn , tn + h] vor, dann wird die vorgegebene Fehlerschranke eines schritt-
weitengesteuerten Integrationsverfahrens trotz sehr kleiner Schrittweite h nicht einzuhalten sein.
In Bild 5.24 ist die Situation für das Beispiel des einfachen Fahrzeugmodells aus Abschn. 4.4
wiedergegeben. Dabei ist die Relativgeschwindigkeit zwischen Rad und Aufbau dargestellt. Ins-
besondere der Zeitausschnitt (rechts) weist auf das oszillierende Verhalten um vrel = 0 hin. Um
überhaupt eine Lösung zu erhalten, musste mit einem RUNGE -K UTTA-Verfahren 4. Ordnung
ohne Schrittweitensteuerung (h=0,0005) integriert werden. Solche Systeme lassen sich nur dann
effizient numerisch integrieren, wenn die Bewegungsgleichungen an die stückweise stetigen Inter-
valle angepasst werden. Wir wollen hier die Formulierung der Schaltfunktion, mit der die Bewe-
gungsgleichungen umgeschaltet werden, diskutieren und eine Möglichkeit der Nullstellensuche
skizzieren – vgl. auch [15] –, um solche Systeme numerisch zu lösen und besser zu verstehen.
Beispiele verdeutlichen die Vorgehensweise unter MATLAB und Simulink und später mit Hilfe
des Stateflow-Tools im Kapitel 6.
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 277
−3
x 10
0.06 2
0.04
1
0.02
vrel [m/s]
vrel [m/s]
0 0
−0.02
−1
−0.04
−0.06 −2
−0.08
0 0.2 0.4 0.6 0.8 1 0.28 0.3 0.32 0.34 0.36
Zeit t[s] Zeit t[s]
formuliert werden können. Führen wir mit Hilfe der sign-Funktion den Schaltvektor der Schalt-
koeffizienten sk
T T
s = s1 , s2 , . . . , snq = sign(q1 ), sign(q2 ), . . . , sign(qnq ) , (5.106)
der bei einer Zweipunkt-Schaltlogik nur die Zustände s j = ±1 annimmt, ein, dann hat die Bewe-
gungsgleichung (5.104) die Form
mit den Zeitereignissen zu den Zeitpunkten t1 , t2 oder vom Zustand abhängig sein, wie in
ẏ = |y|, (5.109)
wofür wir
y für s = sign q = 1
ẏ = mit q(t, y) = y, → ẏ = s y (5.110)
−y für s = sign q = −1
schreiben können.
Unstetigkeiten können somit nur dann auftreten, wenn mindestens eine Komponente von q ihr
Vorzeichen wechselt.
Die Lösung kann Sprünge aufweisen. So ändert sich bei Stoßvorgängen zwischen zwei Kör-
278 5 Simulation unter MATLAB
pern die Geschwindigkeitsvariable sprunghaft. Die Zeit t des eintretenden Ereignisses ist somit
immer Nullstelle der i-ten Schaltfunktion
qi (t , y − (t )) = 0 (5.111)
mit der zeitlichen Änderung y − (t) vor dem Ereignis. Die Lösung y + (t) nach dem Ereignis setzt
sich dann aus dem Funktionswert vor dem Ereignis y − (t ) und der durch das Ereignis (z. B. Stoß)
verursachten sprunghaften Änderung
y + (t ) = y − (t ) +ξξ (t , y − (t )) (5.112)
zusammen, vgl. auch Bild 5.25. y + (t ) ist der Anfangswert für das neue Integrationsintervall.
Damit setzt sich die Lösung wie folgt zusammen:
−
y (t) für t ≤ t
y (t) = (5.113)
y + (t) für t ≥ t .
q(t , y (t )) = 0; q := q j (5.114)
zum Zeitpunkt t ∈ [tn , tn+1 ]. Da die exakte Lösung y (t) nicht bekannt ist, muss die Nullstelle
der Schaltfunktion numerisch ermittelt werden. Hierzu benötigen wir eine eindimensionale Null-
stellensuche. Dies ist im Allgemeinen ein nichtlineares Problem, welches iterativ zu lösen ist.
Dabei ist es nicht ausreichend, die Funktionswerte der Schaltfunktion und der Variablen y j zu
den aufeinander folgenden diskreten Zeitpunkten tn , tn+1 zu kennen, sondern auch innerhalb des
Intervalls [tn , tn+1 ].
Zur Bestimmung der Nullstellen bieten sich ableitungsbehaftete, z. B. N EWTON-Methode,
oder ableitungsfreie Methoden, z. B. Bisection [15], an. Zweckmäßiger sind ableitungsfreie Vor-
gehensweisen, die auf einer einfachen Nullstellensuche mit anschließender Intervallverkleine-
rung basieren. Die Methode muss sicherstellen, dass ein erfolgreicher Neustart nach der Un-
stetigkeitsstelle möglich wird. D. h. nach der Lokalisierung der Schaltstelle zum Zeitpunkt t ist
darauf zu achten, dass die Integration unmittelbar hinter der Schaltstelle im Punkt t˜ mit t˜ > t neu
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 279
gestartet wird. Damit ist sichergestellt, dass kein erneuter Vorzeichenwechsel der Schaltfunktion
für die gleiche Nullstelle auftritt.
Es ist also wichtig, nicht nur eine Folge von approximierten Nullstellen τ von t , sondern
eine Folge von Intervallen I j – die stets t beinhalten – zu bestimmen, so dass
Die Bedingung t ∈ I j stellt sicher, dass q(τ j )q(τ j+1 ) ≤ 0 ist. Der Neustart ist dann mit τ̃ = τ j+1
auszuführen, wenn τ j+1 − τ j genügend klein ist.
Bild 5.26 demonstriert anhand der Dgl. ẏ = f (t, y) eine solche Nullstellensuche mittels Regula
Falsi7 .
Allgemein unterscheiden wir zwischen einer Zweipunkt-, Dreipunkt- und Mehrpunkt-Schalt-
logik. Bei der Zweipunkt-Schaltlogik (s = ±1) existiert ein eindeutiger Schaltvorgang an der
Ereignisgrenze, d. h. die Schaltfunktion q ändert das Vorzeichen; vgl. Beispiel in Abschn. 5.6.4.2.
Die Dreipunkt-Schaltlogik (s ± 1 oder s = 0) zeichnet sich dadurch aus, dass möglicherweise an
der Ereignisgrenze ein weiterer Zustand eintreten kann. Dies tritt z. B. beim Übergang von einer
Gleitreibungsphase in die Haftung auf.
ẍ + cw v ẋ = 0 Horizontalbewegung; ÿ + cw v ẏ = −g Vertikalbewegung
Bild 5.27 gibt die Simulink-Modellierung wieder, auf S. 283 ist der bezüglich der Ereignisse
erweiterte MATLAB Code angegeben. Das gemeinsame Zustandsereignis ist das Auftreffen des
Balls zur Höhe y(t ) = 0, so dass die Schaltfunktion
q(t) = y(t)
7 Man bewegt sich nur von einer Seite auf die Nullstelle zu; deshalb gleichzeitig Intervallteilung einarbeiten.
280 5 Simulation unter MATLAB
Stichwortartige Erklärung zur Vorgehensweise mittels Regula Falsi für die Dgl. ẏ = f (t, y):
• Integrator berechnet yn (tn ), yn+1 (tn+1 ) (•) mit der Schrittweite h
• Berechnung der Schaltfunktionen: q j (tn , yn ) und q j (tn+1 , yn+1 ), j = 1, 2, (◦)
?
• Nulldurchgang prüfen (q j (tn , yn ) q j (tn+1 , yn+1 ) < 0): q2 (t, y) besitzt Nullstelle
• 1. Iterationsschritt
– Regula Falsi: Näherungsweise Bestimmung der Nullstelle → τ1
– Integration ausgehend von tn , yn führt auf → τ1 = tn + h1 , y(τ1 ) = y
– Komponente q2 der Schaltfunktion berechnen: q21 (τ1 , y )
? ?
– Nullstellenprüfung: q21 (τ1 , y ) q21 (τ1 , yn ) < 0 oder q21 (τ1 , y ) q21 (τ2 , yn+1 ) < 0
– Zeitintervall neu abstecken: → [τ2 , τ3 ]
• 2. Iterationsschritt
– ....................
anzusetzen ist. D. h. parallel zur Integration muss q auf mögliche Nullstellen untersucht werden.
Diese kann hier nur bei fallender Bewegung von y bzw. von q auftreten, was zusätzlich genutzt
wird.
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 281
Simulink-Modell: Wir gehen nur auf die wesentlichen Beschaltungen der Modellkomponenten
in Bild 5.27 ein. Horizontal- und Vertikalbewegungen sind über den (Luft-) Widerstand gekop-
pelt, sie werden jeweils mit zwei Integrierer gelöst. Die Anfangswerte werden teilweise extern
vorgegeben, hierzu ist der zugehörige Port am Integrierer anzuzeigen. Das Ereignis bezieht sich
nur auf y(t). Die Nullstellensuche bezüglich q(t) wird mittels Trigger- bzw. Reset-Eingang des
Integrator 1, der auf fallende Eingangsfunktion reagiert, durchgeführt. Dadurch lassen sich
nicht interessierende Nullstellen, insbesondere unmittelbar aufeinander folgende, ausschließen.
Die Triggerschwelle ist wegen q(t ) = 0 auf null zu setzen, wodurch die Integration beim Null-
durchgang zum Zeitpunkt τ gestoppt wird. Der Abprall entspricht einem Neustart in τ mit
veränderter Geschwindigkeitskomponente
D. h. ẏ+ (τ ) muss auf den IC Block8 , der im Anfangszustand den eingestellten, später den an-
gelegten Wert durchschaltet, zurückgekoppelt werden. Um algebraische Schleifen zu vermeiden,
müssen wir das State Port Signal y_p(T) nutzen.
Die Signalbegrenzung auf ymin = 0 am Integrator 2 verhindert bei sehr kleinen Amplitu-
den y mögliche Fehlentscheidungen bei der Nullstellenbestimmung. Für y → 0 ist dieses Modell
nicht mehr geeignet. Die Bewegungsgleichung ändert sich, es liegt ein strukturvariables System
vor, vgl. Abschn. 6.3.
MATLAB Script und Function: Das Programmpaket besteht aus dem Hauptprogramm wurf.m,
der Function der Differenzialgleichung fwurf.m, sowie der der Schaltfunktionen ewurf.m,
sie sind auf S. 283 aufgeführt. Zunächst betrachten wir nur Bewegungen bis zum ersten Auf-
treffen. Neu gegenüber den bisherigen Betrachtungen ist in wurf.m die Aktivierung der Option
’Events’,@ewurf in wurf.m – vgl. Abschn. 5.2.1. Danach muss in der Function ewurf.m
u. a. die Schaltfunktion q = y programmiert werden, auf die bei der Nullstellensuche zurückge-
griffen wird. Darüber hinaus sind die Steuerparameter:
1 Abbruch bei Nullstelle
isterminal =
0 kein Abbruch
⎧
⎨ 1 Nullstellensuche bei steigender Funktion q(t)
direction = 0 Nullstellensuche in jedem Fall
⎩
−1 Nullstellensuche bei fallender Funktion q(t)
anzugeben; vgl. ewurf.m. Der MATLAB Code sucht infolge direction=-1 nur bei fallender
Funktion q(t) nach Nullstellen und bricht die Integration infolge isterminal=1 nach der ers-
ten Nullstelle q(τ ) ≈ 0 ab. Ergänzend zur bisherigen Betrachtung, der Detektierung des Auftreff-
punkts durch q1 (t) = y(t), soll der höchste Punkt der Wurfbahn mit der Schaltfunktion q2 (t) =
ẏ(t) sowie die Zeit, bei dem der Ball die Höhe h durchfällt, mit der Schaltfunktion q3 (t) = h−y(t)
ermittelt werden. Jeder Schaltfunktionskomponente q j ist ein isterminal/direction Wert
vektoriell zuzuordnen. Die Vereinbarungen sind in der Function ewurf.m nachzulesen.
Tabelle 5.5: Ereignispunkte zum Ballwurf unter MATLAB
Ereignis Zeit t x y ẋ ẏ
iE = tE = yE =
2 5.0347e-001 9.4602e+000 2.4671e+000 1.4941e+001 -1.0880e-014
3 1.0839e+000 1.6649e+001 1.0000e+000 1.0321e+001 -4.7998e+000
1 1.2680e+000 1.8455e+001 -1.1102e-016 9.3081e+000 -6.0453e+000
Tabelle 5.5 zeigt die über tE, yE, iE zusätzlich ausgegebenen numerischen Werte zu den
gefundenen Ereignissen bis zum ersten Auftreffpunkt. tE ist der Zeitpunkt des Ereignisses,
yE die zugehörigen Zustandswerte und iE der Index der Komponente des Schaltvektors q =
(y, ẏ, h − y) zum detektierten Ereignis.
Soll die weiterführende Ballbewegung wie in Bild 5.27 berechnet werden, dann muss im
Hauptprogramm ein Neustart mit geeigneten Anfangswerten organisiert werden, z. B.:
8 Initial Condition
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 283
Function der Differenzialgleichung und der Schaltfunktion: fwurf.m, ewurf.m aus [52]
function ydot = fwurf(t,y)
global g c_w
v=sqrt(y(3)ˆ2+y(4)ˆ2) % Ballgeschwindigkeit
ydot=[y(3); y(4);-c_w*v*y(3); -g-c_w*v*y(4)]; % Dgl.
function[q,isterminal,direction] = ewurf(t,y)
global h
q=[y(2) y(4) h-y(2)] % Vektor der Schaltfunktionen
isterminal=[1 0 0]; % Stopp (1) nach Nullstelle
direction=[-1 0 1]; % Nullstellensuche nur bei
% fallender/steigender/immer
% (-1)/(1)/(0) Funkt. q(t)
Für den Einmassenschwinger mit stückweise linearer Federkennlinie soll das Aufsetzen der Mas-
se auf die zweite Feder (k2 = αk1 ) am Ort |x| = xs über eine Schaltfunktion formuliert und die
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 285
• q = x − xs sign(x)
• q = |x| − xs ,
wobei unter MATLAB sign(0) = 0 gesetzt wird. Die erste Schaltfunktion weist, wie in Bild 5.29
dargestellt, Sprünge infolge der Vorzeichenwechsel um x ≈ 0 auf, so dass sie wegen des zusätz-
lichen Vorzeichenwechsels von q damit ungeeignet ist. Wir arbeiten mit q = |x| − xs . Führen wir
0.05 0.05
q q
0 0
t t
−0.05 −0.05
0 0.05 0.1 0.15 0.2 0.25 0 0.05 0.1 0.15 0.2 0.25
q = x − xs sign(x) q = |x| − xs
noch den zugehörigen Schaltkoeffizienten s = sign(q) ein, dann gilt für die Federkraft
ist gewährleistet, dass selbst kurz aufeinanderfolgende Nullstellen gefunden werden. Die Um-
schaltung organisieren wir einfachheitshalber im Hauptprogramm schaltp.m über den Schalt-
koeffizienten s. Ausgehend von einem definierten Anfangszustand, z. B. mit s=1, schalten wir
nach jeder Nullstelle durch Vorzeichenwechsel von s um; vgl. die Programmcodes schaltp.m,
fschaltp.m und eschaltp.m [52]. Diese einfache Umschaltung s → −s ist nicht immer
ausreichend, so dass vielfach weitere programmseitige Kontrollen eingearbeitet werden müssen.
Programmbeschreibung: Die Systemparameter werden in schaltp.m als Structure p verein-
bart und hinter options im Integrationsaufruf aufgelistet und damit an die anderen Function
übergeben, wenn sie ebenfalls im Function-Kopf stehen. Die Structure-Vereinbarung empfiehlt
sich immer bei einer größeren Parameteranzahl, vgl. auch Abschn. 8.6. Die Ausgabe von p ist
sehr übersichtlich:
p =
m: 5
k1: 981
alpha: 3000
d: 9.8100e+000
xs: 4.0000e-002
Q: 0
OM: 20
Im Folgenden ist das verkürzte Hauptprogramm schaltp.m sowie die Function der Diffe-
renzialgleichung fschaltp.m und die der Schaltfunktion q eschaltp.m mit dem Zustands-
vektor y = (x, ẋ)T abgedruckt. Es können wahlweise die freien oder erzwungenen Schwingungen
von (5.116), vgl. Kapitel 3, berechnet werden.
Hauptprogramm schaltp.m aus [52]:
% Parameter als Structure
p.m=5.0; % Masse [kg]
p.k1=981.; % Federsteifigkeit [N/m]
............ weitere Parameter
p.OM=20.; % Anregungskreisfrequenz [rad/sec]
%..................................... Initialisierung
t0=0; % Anfangszeitpunkt
ier=input(’ freie oder erzwungene Schwingungen f oder e ’,’s’);
if ier==’f’
p.Q=0.; te=1.75; y0=[-0.; 2]; % Endzeitpunkt, Anfangswerte
else
te=0.7; y0=[-0.; 0]; % Endzeitpunkt, Anfangswerte
end
s = sign(abs(y0(1))-p.xs); % Schalter für Start
% .................................... Integrationinitialisierung
options=odeset(’Events’,@eschaltp,’RelTol’,1.0e-8,’Refine’,4);
tout=t0; yout=y0.’; % Ausgabedaten
while te > t0 % Zeitschleife
[t,y,tE,yE,iE]=ode23(@fschaltp,[t0 te],y0,options,p,s);
% tE, yE, iE optionale Ausgabe
tout=[tout;t(2:end)]; % Datenübernahme
yout=[yout; y(2:end,:)];
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 287
In Bild 5.30 ist ein Simulationsergebnis der erzwungenen Schwingungen zu α = 3000 und
g=0 m/s2 , also mit einer relativ steifen zweiten Feder aber ohne Gewichtseinfluss, ausgehend
von den Anfangswerten x(0) = 0 m, ẋ(0) = 0 m/s dargestellt. Das Aufsetzen auf die zweite Feder
entspricht elastischen Stoßvorgängen. Dies kommt insbesondere durch die Geschwindigkeitsän-
derungen ẋ(t) sowie die kurz aufeinanderfolgenden Nullstellen von q zum Ausdruck. Bild 5.32 a
zeigt die freien Schwingungen zu α = 3000 und den Anfangswerten (x(0), ẋ(0))T = (0, 2)T ,
denen in Bild 5.32 b ein noch zu erläuternden Stoßvorgang gegenübergestellt ist.
Bild 5.30: Aufsetzen auf eine relativ steife zweite Feder; erzwungene Schwingungen ohne Gewicht
288 5 Simulation unter MATLAB
Übungsvorschlag: Die beiden Massen m1 , m2 des Schwingers nach Bild 5.31 bewegen sich auf
glatter Ebene. Die harmonische Erreger-Kraft f (Ωt) = 48 cos Ωt N greift an m1 an. Die Puffer
seien masselos, die Federelemente haben die Steifigkeiten kk1 , kk2 und die entspannte Pufferlänge
0 . Der Massenabstand in der kontaktfreien Ausgangslage beträgt Δ .
1. Formulieren Sie die Bewegungsgleichungen und die Schaltfunktion q für den Kontakt.
2. Führen Sie eine Simulation unter MATLAB und Simulink durch.
mit dem Stoßfaktor εs gegeben sei. Der Schaltzeitpunkt müsste jetzt durch den linken Intervall-
rand der Nullstellensuche τ −Δτ (Δτ << 1), d. h. kurz vor der eigentlichen Nullstelle, festgelegt
werden. Mit der geänderten Anfangsgeschwindigkeit wäre dann ein Neustart erfolgreich. Dies ist
in MATLAB anders organisiert. Um dennoch aufeinanderfolgende Nullstellen auseinander zu hal-
ten, kann einerseits die Steigung von q zur gezielten Nullstellensuche (direction=1, siehe
Bild 5.29), andererseits ein korrigierter Ort x(τ ) herangezogen werden. D. h. die Auslenkung
!
x(τ ) zur Nullstelle ist durch den exakten Wert x(τ ) = xs sign(x(τ )) zu ersetzen – vgl. Alter-
nativvorschlag zum Beispiel des Ballwurfs –, wobei direction=0/1 zulässig ist. Dies ist im
Programm stoss.m (Function-Formulierung) in [52] nachzulesen.
Wie schon erwähnt, ist in Bild 5.32 b ein solcher Vorgang für den Schwinger ohne Erregung
und Gewichtseinfluss mit dem Stoßfaktor εs = 0,9 dargestellt. Die Anregung erfolgte, wie in
Bild 5.32 a, über die gleichen Anfangswerte [x(0), ẋ(0)]T = [0, 2]T , d. h. über einen Anfangsim-
puls. Aufgrund der Dämpfung klingt der Schwingungsvorgang langsam ab, so dass keine Schalt-
vorgänge mehr auftreten. Beide Einschwingvorgänge in Bild 5.32 unterscheiden sich durch die
Anzahl der Kontakte mit der Feder k2 . Infolge des gewählten Stoßfaktors εs wird durch den Stoß
mehr Energie absorbiert.
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 289
Bemerkung: Bei massebehafteter Feder k2 bzw. massebehaftetem Anschlag wird das Schwin-
gungsverhalten erheblich komplexer. Das Federsystem bildet dann ebenfalls ein schwingungsfä-
higes System.
wobei unterschiedliche Ansätze für μ(|vvrel |) aus der Literatur bekannt sind, drei nennen wir:
μ |vrel | =
0
I: μ(|vrel |) = für C OULOMB
μ0 > μ |vrel | = 0
μ0 − μ
II: μ(|vrel |) = + μ, b>0 (5.120)
1 + b |vrel |
μ0 − μ
III: μ(|vrel |) = + μ + a|vrel |2 , b > 0, a > 0 .
1 + b |vrel |
Die zugehörigen unstetigen Reibkräfte sind in Bild 5.33 dargestellt. Darüber hinaus wird, wie
oben erwähnt, die Haftzone gerne durch ein Geradenelement mit genügend großer Steigung
(Dämpfer) oder durch kontinuierliche Reibkraftverläufe, wie in Bild 5.34, verarbeitet. In die-
sen Fällen sind die Bewegungsgleichungen steife Differenzialgleichungen, was bei der Auswahl
des Integrationsverfahren berücksichtigt werden muss. Die Reibkräfte sind eingeprägte Kräfte.
Beispiel:
vrel v
fR = k1 + k2 tanh( rel )
|vrel |2 + k3 k4
Reibkraftverlauf mit:
k1 = 0,56, k2 = 0,3,
k3 = 0,001, k4 = 0,5
Bild 5.34: Stetiger Reibkraftverlauf
Reibmodell (C OULOMB)
x1 - rauh (μ , μ0 )
x2 - fR 6
f1 (t)
m1 -
k1 s -
m2 - f2 (t) vrel
k2 s
glatt
wirkt die C OULOMBsche-Reibkraft mit dem Reibkoeffizienten μ für Gleiten und μ0 für Haften
(μ0 ≥ μ). An jeder Masse greift eine äußere Anregung f1 (t) bzw. f2 (t) an. Setzen wir entgegen
der Bewegungsrichtung ẋ1 > ẋ2 die Reibkraft fR an, dann gelten die Bewegungsgleichungen
m1 ẍ1 + k1 x1 = f1 (t) − fR
(5.121)
m2 ẍ2 + k2 x2 = f2 (t) + fR .
Wir unterscheiden die Zeitabschnitte der Gleit- und Haftreibung. Zunächst betrachten wir die
Gleitbewegungen mit vrel = ẋ1 − ẋ2
= 0. Hierfür gilt das Reibgesetz
mit der Schaltfunktion q, die der Relativgeschwindigkeit in den Kontaktpunkten der beiden Mas-
sen entspricht
1 für q > 0
q = ẋ1 − ẋ2 ; sign(q) = , (5.124)
−1 für q < 0
zu schreiben.
Verschwindet die Relativgeschwindigkeit zwischen den Massen, dann liegt Haftung vor und
es gilt das Reibgesetz
| f R0 | < μ0 f N . (5.127)
Beide Massen bewegen sich mit ẍ1 = ẍ2 und ẋ1 = ẋ2 , so dass aus (5.121) die Bewegungsglei-
chungen
folgen.
Um die Lösungen numerisch zu ermitteln, müssen wir weitere Schaltbedingungen einführen,
die den aktuellen Zustand erkennen, um somit die eine oder andere Bewegungsgleichung zu
integrieren.
Schaltlogik
Die zentrale Schaltfunktion ist weiterhin (5.124). Deren Nullstelle alleine gibt allerdings keine
Aussage darüber, welche Gleichung aktiviert werden muss. Wir unterscheiden hier drei Bewe-
gungsphasen:
D. h. es muss zwischen diesen drei Zuständen hin und her geschaltet werden. Um diese einzel-
nen Phasen gezielt anzusteuern, führen wir, wie in [15], Hilfs-Schaltfunktionen ein, die auf der
zeitlichen Ableitung von q, also
dq
= qẋx ẍx + qt = qẋx f + qt für q = q(t, ẋx), hier: qt = 0 (5.129)
dt
aufbauen. (5.129) ist hier die Relativbeschleunigung. Mit den hieraus abzuleitenden Hilfs-Schalt-
funktionen wollen wir, ausgehend von q → 0, entscheiden, ob beim Eintreten des Ereignisses
q = 0 das System im Haftreibungsbereich verharrt oder ob es diesen nur durchläuft, so dass
wieder q
= 0 vorliegt. Diese Möglichkeiten sind nur abhängig von den Kraftverhältnissen im
Haftreibungsbereich, wobei beide Vorzeichen der Relativgeschwindigkeit eingearbeitet werden
müssen. Beides erreichen wir mit q̇ nach (5.129), wenn wir
S+ = qẋx f +
0 + qt
(5.130)
S− = qẋx f −
0 + qt
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 293
und damit die Situation während der Haftung beurteilen. S+ und S− können, wie in Bild 5.36
dargestellt, als Richtungselemente bezüglich q ≡ 0 in der q, t-Ebene aufgefasst werden. Nehmen
q
6
q
S+
S @ Q X
S @
w s X
R Q z -
7
7
t
S−
streben gegen q ≡ 0, dann kann dieser Zustand nicht mehr verlassen werden. Es liegt Haftrei-
bung vor; es muss auf (5.128) umgeschaltet werden. Dieser Zustand q ≡ 0 wird erst dann wieder
verlassen, wenn eine der Richtungen von S+ oder S− das Vorzeichen wechselt. Ähnliche Inter-
pretation findet man bereits in [33]. Damit können wir die Schaltbedingungen mittels der Hilfs-
Schaltfunktionen für den Übergang aus der Haftreibungsphase in die Gleitreibung mit positiver
(s = 1) bzw. negativer (s = −1) Relativgeschwindigkeit formulieren:
Die zugehörigen Schaltbedingungen für einen direkten Übergang von einer Gleitphase in die an-
dere ohne kurzzeitiges Haften lassen sich anschaulich mit Hilfe des Richtungsfeldes in Bild 5.36
finden. Danach erfolgt ein Wechsel von einer Bewegung mit positiver Relativgeschwindigkeit zu
einer mit negativer Relativgeschwindigkeit (s = 1 → s = −1), wenn
q = 0 ∧ S− ≤ 0 (5.132)
294 5 Simulation unter MATLAB
q = 0 ∧ S+ ≥ 0. (5.133)
1
ẍ1 = ( f1 (t) − μ fN s − k1 x1 )
m1
1
ẍ2 = ( f2 (t) + μ fN s − k2 x2 ) für s = ±1 (5.135)
m2
1
ẍ1 = ẍ2 = ( f1 (t) + f2 (t) − k1 x1 − k2 x2 ) für s = 0
m1 + m2
für das einfache Reibschwingungsproblem zugrunde, es ist ein strukturvariables System. Die
Hilfs-Schaltfunktionen S± ergeben sich mit (5.130) zu
1 1
S± = ( f1 (t) ∓ m1 gμ0 − k1 x1 ) − ( f2 (t) ± m1 gμ0 − k2 x2 ) , (5.136)
m1 m2
sie sind für q = 0 auszuwerten. Die zugehörige Dreipunkt-Schaltlogik ist in Bild 5.37 zusammen-
gefasst.
# #
q = 0 ∧ S− ≤ 0 -
s=1 s = −1
"! +
I q=0 ∧ S ≥0 "!
q=0∧ S+ = 0 q=0∧
S+ < 0 ∧ S − > 0 S− = 0 S+ < 0 ∧ S− > 0
#
R
s=0
"!
aus dem Intervall [−μ0 fN , +μ0 fN ] annehmen. Voraussetzung des Haftens ist
! !
q = ẋ1 − ẋ2 = 0 ∧ q̇ = ẍ1 − ẍ2 = 0. (5.137)
Die zugehörige Kraftbilanz erhalten wir mit (5.137) aus (5.135)1,2 , wenn wir für die Reibkraft
μ fN s die Haftkraft fR0 setzen
1 1 m1 + m2 !
ẍ1 − ẍ2 = ( f1 (t) − k1 x1 ) − ( f2 (t) − k2 x2 ) − fR0 = 0. (5.138)
m1 m2 m1 m2
Da nach (5.137) die Beschleunigungsdifferenz verschwindet, können wir nach der Haftkraft auf-
lösen
1
fR0 = [m2 ( f1 (t) − k1 x1 ) − m1 ( f2 (t) − k2 x2 )] =: F(t), (5.139)
m1 + m2
d. h. Haften liegt vor, wenn
Die der Reibkraft entgegenwirkende Kraft F(t) setzt sich aus den Anregungskräften und den Fe-
derkräften zusammen und ist unabhängig von den Beschleunigungen. Mit F(t) und der betrags-
mäßig größten Haftreibungskraft | fR0 | = μ0 fN lässt sich eine Kraftdifferenz, wie in Bild 5.38 dar-
gestellt, bilden, die Aufschluss bezüglich der Fortsetzung der Bewegungszustände liefert. Nach
f
6
μ0 fN
μ0 fN > F(t)
F(t)
6
Haften: -
vrel
−μ0 fN < F(t)
- μ0 f N
Bild 5.38 hängt es von der jeweiligen Kraftdifferenz ab, ob es beim Haftzustand bleibt oder ob
ein Verlassen oder ein Durchschwingen auftreten kann. Dies wollen wir in drei Schritten erläu-
tern.
1. Befindet sich der Schwinger im Haftzustand (s = 0), dann kann dieser nach (5.140) nur
verlassen werden, wenn F(t ) = | fR0 |. Dies ist der Fall
2. Bewegen sich die Massen vor dem Eintreten des Ereignisses q(t ) = 0 mit q
= 0, d. h.
s = ±1, dann wird sich nach dem Ereignis Haften einstellen, wenn mit (5.140)
ablesen, d. h.
3. Bewegen sich die Massen vor und nach dem Eintreten des Ereignisses q(t ) = 0 mit q
= 0,
d. h. s = ±1 → s = ∓1, tritt also Durchschwingen – ohne Haftung – ein, dann muss gelten
woraus
F(t ) − μ0 fN ≥ 0; d. h. S̄+ ≥ 0, s = −1 → s = 1
und
F(t ) + μ0 fN ≤ 0, d. h. S̄− ≤ 0, s = 1 → s = −1
folgt.
Damit sind alle zuvor eingeführten Schaltzustände auch mit Hilfe der aktuellen Kraft F(t) in der
Haftreibungsphase und dem Schwellwert der Haftung | fR0 | = μ0 fN zu erklären.
Die Schaltzustände sind somit von der Gleitreibungscharakteristik unabhängig und beschrän-
ken sich nicht auf die C OULOMB-Reibkennlinie unseres Beispiels, d. h. auch die aus Bild 5.33
können hier eingearbeitet werden.
Numerische Umsetzung, Programmausschnitte
Bezüglich der Programmierung wollen wir die Programmstruktur nach Bild 5.39 angeben und
daraus einzelne Programmsegmente besprechen. Die vollständigen Codes reib_12.m (Haupt-
programm), freib_12.m (Function der Bewegungsgleichungen), ereib_12.m (Function
der Ereignisse q, S) sowie spm_12.m (Function der Hilfs-Schaltfunktionen, S± ) sind der Pro-
grammsammlung [52] zu entnehmen.
Zunächst muss aus den Anfangswerten der momentane Zustand (Haften/Gleiten) ermittelt
werden. Die Initialisierung des Schaltkoeffizienten s lassen sich mit zugehörigem q aus der
Dreipunkt-Schaltlogik nach Bild 5.37 ablesen:
t0=0.0; % Startzeitpunkt
y0=[0.; 0.; 0.; 0.]; % Anfangswerte
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 297
wobei Nullstellen von S± ausgeschlossen sind. Zur Integration benutzen wir das RUNGE -K UTTA-
Verfahren ode45 mit den Optionen und dem Integrationsaufruf:
options=odeset(’Events’,@ereib_12,’RelTol’,1.0e-6);
[t,y,tE,yE,iE]=ode45(@freib_12,[t0 te],y0,options);
Wesentlich ist auch die Programmierung der Schaltlogik nach Bild 5.37 mit der die neue
Situation nach einem Ereignis bestimmt wird. Insbesondere ist eine Fehlergrenze (hier: feps)
für die numerische Null der Relativgeschwindigkeit und der Hilfs-Schaltfunktionen sp := S+ ,
sm := S− abzuschätzen. Dies ist problemabhängig; Anhaltswert: feps ≈ 10*AbsTol. Die
Umsetzung der Schaltlogik nach Bild 5.37 könnte folgende Struktur haben:
%....................................... Schaltlogik-Anfang
if s==0 % Haftung
[x,I]=min(abs([sp, sm])); % betragsmäßiger Minimalwert
if x <= feps
if I == 1, s=1;
else s=-1;
end
end
else
if abs(q) <= feps % Nullstelle der Relativ-Geschw.
if s==1 % aus Gleitphase
298 5 Simulation unter MATLAB
if sm < 0, s=-1;
elseif sp < 0 && sm > 0, s=0;
end
elseif s == -1
if sp > 0, s = 1;
elseif sp < 0 && sm > 0, s = 0;
end
end
end
end
%...................................... Schaltlogik-Ende
if s==0 % Schaltparameter
[sp,sm]=spm_12(t,y.’); % Schaltfunktionen S+, S-
q=[sp; sm]; % Nullstelle von S+, S-
isterminal= [1; 1]; % Stopp nach Nullstelle
direction= [0; 0]; % Flanke
else
q=[y(3)-y(4)]; % Nullstelle der Relativgeschw.
isterminal= 1; % Stopp nach Nullstelle
direction= -s; % Flanke
end
Erläuterung: Liegt Haftung (s = 0) vor, dann ermitteln wir zunächst zu den aktuellen Wer-
ten t, y die Hilfs-Schaltfunktionen S± mit der Function spm_12.m und untersuchen diese auf
Nulldurchgänge. Über die Steigung im Nulldurchgang (Flanke der Hilfs-Schaltfunktion) können
wir keine Angabe machen, so dass jeweils direction=0 zu setzen ist. Für s
=0 ist die Schalt-
funktion die Relativgeschwindigkeit an dem Reibkontakt. Da mit dieser Nullstelle das Durch-
schwingen (s = 1 → s = −1 und umgekehrt) entschieden wird, können wir die Steigung von q
im Nulldurchgang zu −s angeben. Nach jedem Ereignis wird die Integration unterbrochen.
Numerische Ergebnisse
Abschließend führen wir mit reib_12.m für das anfänglich eingeführte Beispiel nach Bild 5.35
mit den beiden Parametersätzen nach Tabelle 5.7 Simulationen durch. Aufgrund der harmoni-
schen Anregung sind periodische Schwingungen zu erwarten, wenn die Erregerkräfte groß genug
oder die Reibkräfte klein genug sind. Ansonsten wird der Schwinger in der Haftung verharren.
Ausgehend von den allgemeinen Anfangswerten
die nicht einer möglichen periodischen Bewegung genügen, betrachten wir zunächst einen Ein-
schwingvorgang zum Parametersatz des 1. Beispiels. In Bild 5.40 sind die Zeitverläufe der Aus-
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 299
Beispiel 1 2 Einheit
Masse m1 1,0 1,0 kg
Masse m2 1,5 1,5 kg
Steifigkeit k1 10 10 N/m
Steifigkeit k2 10 10 N/m
Gleitreibkoeffizient μ 0,040 0,04 –
Haftreibkoeffizient μ0 0,080 0,06 –
Erdbeschleunigung g 9,81 9,81 m/s2
Erregerkraft f1 5 sin t sin t N
Erregerkraft f2 0 2 cos (t + π4 ) N
lenkungen x1 (t) , x2 (t), der Geschwindigkeiten xp1 := ẋ1 (t) , xp2 := ẋ2 (t), der Relativgeschwin-
digkeit zwischen den Massen vrel = ẋ1 − ẋ2 und der Hilfs-Schaltfunktionen S+ , S− zusammenge-
stellt. Man erkennt, dass die Haftreibungszeitabschnitte nur dann verlassen werden, wenn Null-
stellen von S+ oder S− vorliegen, was auch den Geschwindigkeitsverläufen abzulesen ist. Ob ein
Übergang vom Gleiten in die Haftung erfolgt, wird durch die Nullstelle von q = vrel und durch
die unterschiedlichen Vorzeichen von S+ und S− festgelegt; vgl. Bild 5.40. Ein direktes Durch-
schwingen (s = 1 → s = −1), so dass sich zwei Gleitreibungsphasen aneinanderreihen, tritt bei
t ≈ 1.6 sec auf; es ist q = 0 ∧ S− < 0. Insbesondere fällt auf, dass einerseits die einzelnen Zeit-
abschnitte ohne jede Überlappung aneinanderstoßen, und andererseits, dass die Ruhelage exakt
eingehalten wird. Dies ermöglicht eine effiziente numerische Integration. In Tabelle 5.8 sind in
Auslenkungen Relativgeschwindigkeit
1
x1 0.6
vrel=xp1−xp2 [m/sec]
0.5 x2 0.4
x1, x2 [m]
0.2
0 0
−0.2
−0.5 −0.4
−0.6
−1 −0.8
0 2 4 6 8 10 0 2 4 6 8 10
t [sec] t [sec]
Geschwindigkeiten Hilfs−Schaltfunktionen
1 4
xp1 S+
3
xp2 S−
0.5
xp1, xp2 [m/sec]
1
S+, S−
0
0
−1
−0.5
−2
−1 −3
0 2 4 6 8 10 0 2 4 6 8 10
t [sec] t [sec]
einem Schaltprotokoll ausgehend von den Startwerten alle Ereignisfälle in Form des Schaltkoef-
fizienten s, des Ereigniszeitpunkts τ (Näherung von t ), der Schaltfunktion q sowie der beiden
Hilfs-Schaltfunktionen S+ , S− aufgeführt. Mit diesem Schaltprotokoll sowie Bild 5.37, Bild 5.40
sind alle Schaltvorgänge nachvollziehbar.
Schaltprotokoll:
s tau* q sp sm
--------------------------------------------------------------------
0 0 0 1.3080e+000 -1.3080e+000
0 2.6902e-001 0 -1.6154e-014 2.6160e+000
1 1.6076e+000 -1.8041e-016 -2.8366e+000 -2.2056e-001
-1 4.4139e+000 4.9960e-015 -2.7078e-001 2.3452e+000
0 5.1583e+000 4.9960e-015 8.9817e-014 2.6160e+000
1 7.6160e+000 -1.0036e-013 -1.5734e+000 1.0426e+000
0 8.5177e+000 -1.0036e-013 -2.6160e+000 -2.4636e-013
-1 1.0000e+001 -6.1217e-001 -1.4189e+000 1.1971e+000
Für den zweiten Parametersatz nach Tabelle 5.7 – Beispiel 2 – gehen wir von den Anfangs-
werten
x1 (0) = −0.073269, x2 (0) = 0.17881, ẋ1 (0) = −0.15717, ẋ2 (0) = −0.17973,
die einer periodischen Lösung genügen, aus. Sie ergaben sich, ausgehend von beliebigen An-
fangswerten, aus einer Integration über mehrere Perioden (Periodendauer T = 2π), wobei am
Ende die freien Schwingungen abgeklungen sein müssen; vgl. Bild 5.41, Bild 5.42.
Die periodischen Lösungen in Bild 5.41 zeichnen sich dadurch aus, dass sich die Lösungen
nach der Periodendauer T = 2π wiederholen,
Für die Phasenkurven in Bild 5.42 bedeutet dies geschlossene Kurvenzüge. Der Mehrfachum-
lauf (fetter Linienzug) weist auf eine erste Oberschwingung hin. Dies bestätigt Bild 5.411 für
x1 (t). Typische Merkmale für Haft-Gleit-Systeme sind Sprünge und Knicke in den Phasenkur-
ven ẍ j (ẋ j ), j = 1, 2 von Bild 5.422 . Zustandsübergänge zum Haften sowie Wechsel in der Glei-
trichtung führen zu Sprüngen in den Beschleunigungen. Übergänge vom Haften zum Gleiten
sind wegen der Reibkennlinie mit einem Knick in den Beschleunigungen verbunden. Für die Ge-
schwindigkeiten bedeutet dies, dass sie zwar stetig aber nicht differenzierbar sind, vgl. Bild 5.413 .
Die Lagegrößen x1 , x2 sind dagegen immer glatt. Die gegenseitige Beeinflussung durch die Tan-
gentialkraft drückt sich durch die Knicke und Sprünge in beiden Koordinaten gleichzeitig aus.
Die sich abwechselnden Haft- und Gleitbewegungen bezeichnet man auch als Stick-Slip-Schwin-
gungen.
Das in Abschn. 4.4 behandelte 1/4-Fahrzeug mit Reibelement kann mit den hier besproche-
nen Methoden auch unter MATLAB gelöst werden. Hierzu dient das Programm reib_F.m der
5.6 Integration gewöhnlicher Differenzialgleichungen mit Unstetigkeiten 301
Auslenkungen Relativgeschwindigkeit
0.3 0.6
0.2 0.4
vrel=xp1−xp2 [m/sec]
x1, x2 [m] 0.1 0.2
0 0
−0.1 −0.2
−0.2 −0.4
x1
−0.3 x −0.6
2
−0.4 −0.8
0 2 4 6 8 0 2 4 6 8
t [sec] t [sec]
Geschwindigkeiten Hilfs−Schaltfunktionen
0.4 3
xp1 S+
xp2 2 S
−
0.2
xp1, xp2 [m/sec]
−
S ,S
0 0
+ −1
−0.2
−2
−0.4 −3
0 2 4 6 8 0 2 4 6 8
t [sec] t [sec]
Bild 5.41: Beispiel 2: Periodische Schwingungen des Zwei-Massen-Schwingers mit einem Reibkontakt
0.4 1.5
m1
1
m2
0.2
0.5
2
xpp , xpp
xp1, xp2
0 0 m2
1
−0.5
−0.2
−1
m1
−0.4 −1.5
−0.2 −0.1 0 0.1 0.2 0.3 −0.4 −0.2 0 0.2 0.4
x1, x2 xp1, xp2
Programmsammlung [52], in das das Zeitereignis – Auffahrt über die Rampe – und das Zustand-
sereignis – Haft- und Gleitreibung – realisiert sind. Darüber hinaus wird in Abschn. 4.4.1 die
Modellierung des Beispiels unter Simulink mit dem Stateflow Tool gezeigt.
Übungsvorschlag: Die Masse m des skizzierten Schwingers bewegt sich infolge Reibung auf
dem mit v0 umlaufenden Band. Die Fesselung von m erfolgt über eine Feder (Federsteifigkeit k)
und einen Dämpfer (Dämpfungskoeffizient d). Beide Kraftcharakteristiken sind linear (FF = kx,
FD = d ẋ).
Gegeben: m = 1,5 kg D = 0,... 0,01 μ = 0,08 g= 9,81 m/s2
k = 2 N/m v0 = 1,0 m/s μ0 = 1,5 μ
302 5 Simulation unter MATLAB
Beispiel 3 4 Einheit
Masse m1 1,0 1,0 kg
Masse m2 1,5 1,0 kg
Steifigkeit k1 10 0 N/m
Steifigkeit k2 10 150 N/m
Gleitreibkoeffizient μ1 0,040 1 –
Haftreibkoeffizient μ10 0,060 1 –
Gleitreibkoeffizient μ2 0,002 1 –
Haftreibkoeffizient μ20 0,004 1 –
Erdbeschleunigung g 9,81 10 m/s2
Erregerkraft f1 sin t 15 cos (2πt + π) N
Erregerkraft f2 0 60 cos (2πt) N
Dieses lässt sich am Reibschwinger nach Bild 5.35 mit der hier eingeführten Vorgehensweise
verdeutlichen, wenn wir in beiden Kontaktflächen Reibung zulassen. Die Reibkoeffizienten zwi-
schen den beiden Massen bezeichnen wir mit μ1 , μ10 und zwischen der Masse m2 und der
Auflage mit μ2 , μ20 .
5.7 Randwertprobleme gewöhnlicher Differenzialgleichungen 303
Um die vorgeschriebene Seitenzahl des Buches einzuhalten, müssen wir diese Vorgehenswei-
se auslagern. Der entsprechende Beitrag (reibung_2.pdf) ist in der Programmsammlung [52] zu
Kapitel 5 enthalten. Wir diskutieren dort die Ergebnisse der Beispiele 3 und 4 mit den Parametern
nach Tabelle 5.9. Beispielrechnungen sind mit dem in [52] abgelegten Programm reib_34.m
durchzuführen. Die Parameter zum dritten Beispiel sind [23] entnommen.
Zusammenfassend lässt sich festhalten: Treten mehrere Ereignisse in einem System und dar-
über hinaus zum gleichen Zeitpunkt auf, dann wird die Betrachtung erheblich komplexer und
umfangreicher. Bezüglich der Reibung existiert im SimMechanics Tool, Kapitel 7, ein Block,
mit dem Reibung in Gelenken unter Simulink recht einfach modellierbar wird. Dies bezieht sich
auch auf die angesprochenen Mehrfachkontaktprobleme. Wir zeigen im Abschn. 7.2 diese Mo-
dellierung anhand der Beispiele 3 und 4.
5.7.1 Grundlagen
In diesem Abschnitt soll gezeigt werden, wie Randwertprobleme (Boundary Value Problem,
BVP) mit MATLAB gelöst werden können. Bei derartigen Problemen ist die einzige unabhängi-
ge Variable (im Gegensatz zu partiellen Differentialgleichungen) u. a. der Ort x oder wie bisher
die Zeit t. Man formuliert, wie auch in MATLAB, die Probleme gerne mit x
dyy
y
(x) = = f (x, y ) auch y
(x) = f (x, y , p )
dx (5.141)
g (yy(a), y (b)) = 0 auch g (yy(a), y (b), p ) = 0 ,
zusammen, wobei auf jedem Intervall [xi , xi+1 ] die Lösung des Randwertproblems durch ein
kubisches Polynom Si (x) (x ∈ [xi , xi+1 ]) approximiert wird. Si wird so ermittelt, dass am An-
fang, dem Ende und in der Mitte des Intervalls die Differenzialgleichung (5.141)1 exakt erfüllt
wird. Zusätzlich sind Stetigkeitsbedingungen zu formulieren, so dass die aus den Teillösungen
zusammengesetzte Lösungsfunktion S(x) auf [a, b] ebenfalls stetig ist. Gleichzeitig müssen die
Randbedingungen (5.141)2 erfüllt sein. Insgesamt ergibt sich nach [60] ein nichtlineares Glei-
chungssystem, das in MATLAB iterativ durch Linearisierung (N EWTON) gelöst wird. Hierzu
ist die JACOBI-Matrix J = ∂ f /∂yy für jeden Schritt näherungsweise zu ermitteln oder die vom
Benutzer erstellte Matrix auszuwerten. Nach [60] ist S(x) eine Approximation 4. (bvp4c) bzw.
5. (bvp5c) Ordnung an eine isolierte Lösung y(x), d. h. es gilt für bvp4c
Zur Lösung des Randwertproblems muss danach eine Ortsdiskretisierung (ggf. von MAT-
LAB geändert) und Startwerte für die gesuchte Lösung auf dem Intervall [a, b] vorliegen.
Wie später gezeigt, können zusätzliche unbekannte Parameter im Vektor p zu ermitteln sein.
In diesem Fall muss die Anzahl der Bedingungen (5.141)2 um die von p erhöht werden.
Darüber hinaus kann das Vorgehen auch für Probleme mit Punktbedingungen im Innern [a, b]
(Multipoint boundary value problems) angewendet werden. Dazu wird z. B. die Stetigkeitsbedin-
gung Si−1 (xi ) = Si (xi ) in den unstetigen Komponenten u. a. durch Sprungbedingungen ersetzt.
Entsprechend der n − 1 Punktbedingungen wird das Intervall [a, b] in n Bereiche (Regionen)
unterteilt
d. h. die k-te (k = 1,2, ..) Differenzialgleichung y
k = f (yyk ) hat ihre Gültigkeit im Bereich [ak−1 , ak ],
wobei a0 = a, an = b. Zu den inneren, zusammenfallenden Bereichsgrenzen gehört der gleiche x-
Wert. Unter MATLAB werden alle Funktionswerte der linken bzw. rechten Ränder zu Matrizen
zusammengefasst. Für Systeme zweiter Ordnung und n Bereichen bedeutet dies:
y1 (a) y2 (a1 ) .. yn (an−1 ) y1 (a1 ) y2 (a2 ) .. yn (b)
Y links = , Y = . (5.145)
y
1 (a) y
2 (a1 ) .. y
n (an−1 ) rechts
y
1 (a1 ) y
2 (a2 ) .. y
n (b)
Die Vorgehensweise derartiger Probleme wird zunächst an einfachen Beispielen erläutert. Dar-
auf aufbauend sollen systematisch periodische Schwingungen behandelt werden.
Ausführliche Information mit vielen Beispielen sind dem Handbuch und der Online-Hilfe bzw.
>> odeexample –Aufruf aus dem Command Window– zu entnehmen.
Befestigt man eine Kette an den freien Enden in einem vorgegebenen Abstand w0 , dann ergibt
sich ein eindeutiger Durchhang, den man Kettenlinie, siehe Bild 5.44, nennt. Die zugehörige
5.7 Randwertprobleme gewöhnlicher Differenzialgleichungen 305
y
1 = y2
diff
y1 = y −→
(5.147)
y2 = y
y
2 = y
= d
diff
−→ 1 + y2 (x)2
in vektorieller Form
y2
y = = f (yy) , (5.148)
d 1 + y2 (x)2
Damit ist das MATLAB Script zu schreiben. Da (5.148) und (5.150) sehr übersichtliche Aus-
drücke sind, legen wir hierfür Anonymous Functions Kette_dgl, Kette_res an.
10 http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/Projekte/Kettenlinie/
306 5 Simulation unter MATLAB
Die obigen Function-Namen sol, solinit sind beliebig, die Feldnamen x, y dagegen fest-
geschrieben.
Erläuterungen und Ergänzungen: In den Zeilen 1-4 werden Randwerte und Parameter ver-
einbart, in Zeile 5 die Function der Differenzialgleichung (5.148) mit den festgeschriebenen
Argumenten (x,y), in 6 das Residuum (5.150) aus ermittelter Näherung der Randwerte ya(1),
yb(1) und den Vorgaben yL, yR erstellt.
Da (5.148) eine Differenzialgleichung 2. Ordnung, enthält y , wie in (5.147), die beiden Kom-
ponenten des Durchhangs y1 = y → y(1) am Ort x und die zugehörige Neigung y2 = y
→ y(2).
Entsprechendes gilt für die Randwerte y (a) → (ya(1); ya(2)), y (b) → (yb(1); yb(2)).
In Zeile 8 werden mit bvpset die ausgewählten Optionen gesetzt. Hier wird mit ’stats’,
’on’ eine Ausgabe von Informationen aus dem Lösungsweg erreicht. Unabhängig davon sind
sie stets in der Structure sol (Zeile 10) unter sol.stats enthalten.
Mit der Hilfs-Function bvpinit in Zeile 9 wird die Structure solinit mit den Initialisie-
rungsdaten: Gitterpunkte von x, z. B. x=linspace(0,w0,10), abgelegt im Feld solinit.x,
sowie den Schätzwerten der Lösung y an den Gitterpunkten, abgelegt in solinit.y, erstellt.
Die Argumente von bvpinit sind einerseits, wie in Zeile 9, die gewählten Gitterpunkte x(1),
x(2),...x(10) und die zugewiesenen konstanten Schätzkomponenten, z. B. [1;1] entspre-
chend Durchhang und Neigung für alle x (sehr grobe Näherung); andererseits kann das zweite
Argument von bvpinit ein Function Handle sein. Die Function wertet dann eine programmierte
Schätzfunktion an den Gitterpunkten x aus.
Beispiel: Approximieren wir den Durchhang durch eine Verbindungsgerade zwischen den Rand-
werten yL , yR , dann gilt für die Schätzfunktion
⎡ ⎤
yR − yL
y + x Geradengleichung
y ⎢ L ⎥
y =
≈ ⎣ yR − yL w0 ⎦ (5.151)
y
konstante Steigung.
w0
Legen wir hierfür wieder eine Anonymous Function an, dann ist das obige Programmsegment um
die unten angegebene Zeile 6a für die Schätzfunktion zu ergänzen sowie die Zeile 9 zu ersetzen.
Die Felder solinit.x, solinit.y der Structure solinit können natürlich auch unmittel-
bar besetzt werden. Eine Möglichkeit zeigen die folgenden Zeilen:
6a Kette_init=@(x) ([yL+(yR-yL)/w0*x;(yR-yL)/w0*ones(size(x))]);
9 solinit.x = linspace(0,w0,10); % Gitterpunkt
9a solinit.y = Kette_int(solinit.x) % Näherung
• die Vektorisierung der Differentialgleichung, so dass diese bei jedem Aufruf für alle Gitter-
punkte x ausgewertet wird,
5.7 Randwertprobleme gewöhnlicher Differenzialgleichungen 307
• die analytische Erstellung der JACOBI-Matrix der rechten Seite f (yy) von (5.148)
⎡ ⎤
0 1
∂f ⎢ y ⎥
J = = ⎣ 0 d! 2 ⎦, (5.152)
∂yy 1 + y2
2
In der linken Hälfte ohne, in der rechten mit den zusätzlichen Optionen. Danach reduzieren sich
die Aufrufe/Auswertungen von Kette_dgl von 117 auf 9 und die von @Kette_bvpJR.m von 12
auf 4. Dies sind wesentliche Faktoren zur Rechenzeitreduzierung, insbesondere bei komplexen
Systemen höherer Ordnung und vielen Stützstellen.
Eine feinere Diskretisierung und damit eine geglättete Darstellung erhält man anschließend mit:
sxinit=deval(sol,linspace(0,4,20),1);~~~~% für 1. Komponente
Alle zulässigen Optionen erhalten wir nach Eingabe von bvpset ins Command Window:
>> bvpset
AbsTol: [ positive scalar or vector {1e-6} ] (1)
RelTol: [ positive scalar {1e-3} ] (2)
SingularTerm: [ matrix ] (3)
FJacobian: [ function_handle ] (4)
BCJacobian: [ function_handle ] (5)
Stats: [ on | {off} ] (6)
Nmax: [ nonnegative integer {floor(10000/n)} ] (7)
Vectorized: [ on | {off} ] (8)
Die ersten (1) und (2) beziehen sich auf Fehlertoleranzen, (3) bezieht sich auf spezielle singuläre
Differenzialgleichungen -siehe Online-Hilfe-, mit (7) kann man die Gitterpunkte in solinit.x
nach oben begrenzen. Die restlichen haben wir bereits erläutert und eingesetzt.
308 5 Simulation unter MATLAB
5.7.3 Mehrpunkt-Randwertprobleme
Es kann vorkommen, dass innerhalb des Intervalls [a, b] weitere Randwerte, z. B. durch Sprung-,
Stetigkeits- oder Gleichungsbedingungen, erfüllt werden müssen, so dass nun ein Mehr-Punkt-
Randwertproblem mit bvp4c bzw. bvp5c zu lösen ist. Die Differenzialgleichungen müssen be-
reichsweise formuliert werden. Beispiel: Beidseitig gestützter Balken mit einem Gelenk zwi-
schen den Lagern. Rechts und links am Gelenk sind zwar die Durchbiegungen gleich, die Nei-
gungen der Biegelinie aber unterschiedlich, vgl. Übungsvorschlag.
Wir wollen diese Problematik an einem auf dem bisherigen Beispiel aufbauenden erläutern.
Hierzu fügen wir zwischen den Lagern [a, b] = [[a, a1 ], [a1 , b]] eine mittig angebrachte (konstru-
ierte) Unstetigkeit in a1 ein, so dass zwei Ketten aufgehängt werden können, vgl. Bild 5.44.
Normalerweise würde man die beiden Kettenlinien getrennt betrachten, wir fassen es zu einer
Aufgabe zusammen, so dass ein Drei-Punkt-Problem mit zwei Bereichen [a, a1 ], [a1 , b] zu lösen
ist. Die beiden Differenzialgleichungen unterscheiden sich nur in den Parametern d1 , d2
yk,2
y
k = = f (yyk ) , k = 1, 2. (5.154)
dk 1 + yk,2 (x)2
Die Randwerte im Bereich 1 [a, a1 ] seien y1 (a) = yL,1 , y1 (a1 ) = yR,1 , im Bereich 2 [a1, b]
y2 (a1 ) = yL,2 , y2 (b) = yR,2 .
MATLAB-Formulierung: Für die Initialisierung eines zugehörigen Gitternetzes setzen wir:
xinit = [0, 0.25, 0.5, 0.75, 1, 1, 1.25, 1.5, 1.75, 2]*w0/2;
wobei der doppelte Wert x=1*w0/2 zu a1 gehört. Die Bereichsansteuerung wird in einem zusätz-
lichen Argument in der Function der Differenzialgleichungen (5.154) berücksichtigt, d. h.
Unter Beachtung der Indizierung von (5.145) können die Residuen (Spaltenvektor) formuliert
werden:
function res=Kette_Mres(Y_links,Y_rechts)
global yL1 yR1 yL2 yR2
res=[Y_links(1,1)-yL1; Y_rechts(1,1)-yR1;
Y_links(1,2)-yL2; Y_rechts(1,2)-yR2];
Die Initialisierung der Schätzwerte übernehmen wir aus (5.151), wobei dies auf die Bereiche
übertragen werden muss, wie in der Function Kette_Minit.m in [52].
5.7 Randwertprobleme gewöhnlicher Differenzialgleichungen 309
In Bild 5.44 rechts ist das Ergebnis des Drei-Punkt-Randwertproblems dargestellt. Dabei fällt
die grobe Diskretisierung auf. Eine Glättung der Kurven kann nur bedingt durch deval erreicht
werden, weil die Sprungstelle durch den Mittelwert approximiert wird. Eine, zwar teure, Möglich-
keit ist eine feinere Anfangs-Diskretisierung, z. B mit xinit=[linspace(0,w0/2,20),lin-
space(w0/2,w0,20)]; sofern sie nicht von MATLAB geändert wird.
Das Programm Kette_bvp enthält beide Beispiele und ist mit allen Functions in [52] enthal-
ten.
Übungsvorschlag: Das skizzierte Modell11 besteht aus zwei Biegeträgern mit den konstanten
Biegesteifigkeiten EI1 , EI2 , die durch ein Gelenk verbunden sind. Die Abstützung erfolgt durch
die Federn c1 , c2 in A und C sowie dem Festlager und der Drehfeder cT in B. Belastung ist die
Einzelkraft F und die linear ansteigende Streckenlast q1 . Zu ermitteln ist die Biegelinie als Rand-
wertproblem. Dabei ist die Rechnung mit den Einheiten mm, N und m, kN der Systemgrößen
durchzuführen. Die Beurteilung der Rechnung soll anhand der Aufrufe der Differenzialgleichun-
gen erfolgen. Gegeben:
q1
Differenzialgleichungen: v
1 (x1 ) = 0, v
2 (x2 ) = x2
EI2 2
Parameter: 1 = 1 200 mm, 2 = 1 300 mm, F = 800 N, M = 220 Nm, q1 = 1,4 N/mm,
EI1 = 3 kN m2 , EI2 = 5 kN m2 , c1 = 50 N/mm, c2 = 300 N/mm, cT = 5 kN m
Hilfe: fGTraeger.m in [52].
11 http://www.tm-aktuell.de/TM2/Aufgabe_18-15/aufgabe_18_15.html
310 5 Simulation unter MATLAB
M (xx) ẍx + g (xx, ẋx) = 0 , M (xx) ẍx + g (xx, ẋx) = q sin (Ωt + Φ) . (5.155)
Einerseits ist mit (5.155)1 ein autonomes System, die Zeit tritt explizit nicht auf, andererseits mit
(5.155)2 ein nichtautonomes System, die Zeit tritt explizit auf, zu untersuchen. Beide Gleichungs-
typen haben wir in Abschn. 4.5 und folgenden als Anfangswertproblem gelöst. Hier formulieren
wir sie als Zwei-Punkt-Randwertproblem, um somit gezielt periodische Schwingungen zu ermit-
teln. Im Gegensatz zum Anfangswertproblem, mit dem nur stabile Schwingungen ermittelbar
sind, enthalten die Lösungen des Randwertproblems keine Information bezüglich derer Stabili-
tät, sie können stabil oder instabil sein. Physikalisch sind nur die stabilen Lösung von Bedeutung.
Mathematisch erhält man mit allen möglichen Lösungen einen besseren Überblick über die Lö-
sungsmannigfaltigkeit des Problems. Es muss also eine zusätzliche Stabilitätsuntersuchung der
gefundenen Lösung folgen, wir geben später stichwortartig eine Möglichkeit an.
Achtung! Gegenüber den bisher verwendeten Bezeichnungen der Variablen in den Randwert-
problemen ist jetzt die unabhängige Variable die Zeit t (statt die Ortskoordinate x).
zur Formulierung des Randwertproblems muss ωs explizit auftretender Parameter der Differenzi-
algleichung sein. Dies erreichen wir durch die Zeittransformation
d d dτ d d
τ = ωst → = = ωs , = ()
(5.159)
dt dτ dt dτ dτ
mit der dimensionslosen Zeit τ. Angewendet auf (5.156) ergibt
y (τ) ist 2π-periodisch. Neben den Randwerten ist jetzt auch der Parameter ωs , wie in (5.141)
zugelassen, unbekannt. Eine zusätzliche Bedingung muss her. Da in (5.160) die Zeit τ nicht ex-
plizit auftritt, können wir den Zeitnullpunkt τ0 so verschieben, dass ein Randwert yk (τ0 ) aus y
festgeschrieben werden kann, z. B. yk (τ0 ) = 0 – muss verträglich mit der Lösung sein! Die er-
weiterten Randbedingungen sind somit
y (τ + 2π) − y (τ) = 0
(5.161)
yk (τ0 ) = 0, k ∈ 1,2, . . . , n; meist τ0 = 0 .
Bemerkung: Der Zustandsvektor y (τ) enthält z. B. die Komponenten y1 = y und y2 = ẏ. Dies ist
nachteilig für eine durchgehende Betrachtung in τ. Es ist vorteilhafter die Zeittransformation in
(5.155) einzuführen, so dass y (τ) = [y, y
]T enthält.
Beispiel mit MATLAB Script
Die wesentlichen Schritte zur Vorgehensweise zeigen wir am Modell des Metronoms nach Ab-
schn. 4.5 Gleichung (4.30). Danach folgt mit y1 = ϕ, y2 = ϕ̇ und den Parametern nach Bild 4.36
" #
y2
ẏy = g . (5.162)
− M+mmsin 2 y 12 y22 sin (2y1 ) + M+m
m L sin y1 − mL2 α − β y1 y2
1 2
1
Unterschiede bezüglich der Löser bvp4c, bvp5c zeigten sich bei der Parameterübergabe an die
einzelnen Functions. Während bvp4c eine mit den ODE-Lösern vergleichbare Übergabe durch
Erweitern der Argumente zuließ, z. B.
sol = bvp4c(@fmetro_dglS,@metro_res,solinit,options,M,m,...);
ist das bei bvp5c nicht erlaubt. Beide Löser können parallel genutzt werden, wenn wir eine Functi-
on fmetro_bvp.m mit Nested Functions anlegen. U. a. sind die Parameter dann persistent, siehe
Abschn. 1.5.4.2, sie sind im Editor farblich hervorgehoben. In diesem Fall gilt für die Initialisie-
rung und den Löser-Aufruf:
Zeile 1-4 dienen der Initialisierung von: Om→ ωs , der Zeitachsendiskretisierung, Schätzung der
Lösungsfunktion und der Zusammenfassung in solinit einschließlich des unbekannten Para-
meters Om. Das Function Handle bvploeser in 5 steht für eine der Functions bvp4c, bvp5c. In
Zeile 6 wird die errechnete Frequenz zugewiesen. Die Functions zum Residuum und den JACOBI-
Matrizen ändern sich wegen des unbekannten Parameters gegenüber dem bisherigen, wir geben
sie deshalb hier an. In [52] ist die vollständige Function fmetro_bvp.m zu finden.
Die Residuen entsprechen (5.161). Die JACOBI-Matrix ∂ f (yy)/∂yy wurde symbolisch mit der
Function jacobian aus der Symbolic Math Toolbox berechnet. Die JACOBI-Matrix der Residuen
entnimmt man unmittelbar aus metro_res als partielle Ableitungen nach y a .
Ergebnis und Schwingungsanalyse: Im Gegensatz zur Simulation des Anfangswertproblems,
bei dem nach einem Einschwingvorgang z. B. der Grenzzykel erreicht wurde, wird die periodi-
sche Lösung hier direkt ermittelt, die Stabilität ist offen. Die Lösung liegt nur zu diskreten Zeit-
punkten vor und ist somit wenig aussagekräftig. Eine Beurteilung, z. B. in Form der Grund- und
Oberschwingungen, ist so nicht möglich. Aus diesem Grund aber auch für die anstehende Stabi-
litätsuntersuchung ist es sinnvoll/erforderlich eine FFT (Fast F OURIER-Transformation) mit der
Function fft, wie in fmetro_bvp.m unter sanalysefft, durchzuführen.
mit
" #
0 1×3
q̃q(yy) = cos (y1 ) . (5.164)
−q L(M+m sin2 (y
1 ))
5.7 Randwertprobleme gewöhnlicher Differenzialgleichungen 313
Es sind wegen der Anregung u. a. 2πs/Ω -periodische Lösungen zu erwarten, wobei Ω gegeben
ist. Für s = 2, 3, · · · spricht man von subharmonischen Schwingungen s-ter Ordnung. Wir wollen
nur Schwingungen mit der Kreisfrequenz Ω , d. h. s = 1, untersuchen. Neben der Grundharmo-
nischen treten in der Lösung Oberschwingungen mΩ , m = 2, 3, · · ·, auf. Für die numerische
Berechnung ist es wieder zweckmäßig, die dimensionslose Zeit τ = Ωt einzuführen, so dass
y (2π + τ) = y (τ) 2π periodisch. Aus (5.163) folgt
Das Problem enthält keine unbekannten Parameter, so dass die MATLAB-Umsetzung der aus
Abschn. 5.7.2 entspricht. Es lassen sich für (5.162) und (5.165) dennoch übergeordnete Aus-
drücke formulieren, so dass selbsterregte und erzwungene Schwingungen in fmetro_bvp.m
zusammengefasst werden können.
Ergebnis: Es sollen u. a. die Schwingungen in Abhängigkeit von diskreten Ω -Werten verfolgt
werden. Nach einer Startrechnung mit den Funktionswerten der erzwungenen Schwingungen des
linearisierten Systems (4.31) baut jeder folgende Schritt mit Ω := Ω + Δ Ω auf der vorangegan-
genen Lösung auf. Die so erhaltene Response-Kurve ist in Bild 5.46 dargestellt. Da die Erreger-
frequenz Ω in der Nachbarschaft der Selbsterregungsfrequenz ωs liegt, kommt es zu resonanzar-
tigen Überhöhungen, hier für die Maximalwerte von y1 = ϕ ausgewertet. Wie in Abschn. 4.6.1
gezeigt, treten Mitnahme-Effekte auf. Dies setzt stabile Schwingungen voraus. D. h. um diesen
Bereich abzugrenzen, muss eine Stabilitätsuntersuchung, wie im nächsten Abschnitt, folgen. Die
Ergebnisse sind bereits in Bild 5.46 eingearbeitet. Danach tritt für Ω > Ωk keine Mitnahme
mehr auf. Wie zusätzliche Rechnungen zeigten, enthalten die sich hier einstellenden Schwingun-
gen Frequenzanteile mit Ω und ωs , sie sind nicht mehr periodisch. Im unteren Frequenzbereich
Ω < 4 rad/s werden die Verhältnisse sehr komplex. Es treten Resonanzerscheinungen mit den
Oberschwingungen 2Ω , 3Ω ,... auf.
5.7.4.3 Stabilitätsuntersuchung
Soll die eine oder andere Lösung auf Stabilität untersucht werden, dann könnte man das Verhalten
der Lösung nach einer anfänglichen Störung der Lösung durch Verstimmung der Anfangswerte
per numerischer Integration klären. Liegt asymptotische Stabilität vor, dann nähert sich die ge-
störte Schwingung wieder der ursprünglichen an, im instabilen Fall entfernt sie sich von dieser.
Die Beurteilung des Verhaltens ist nicht immer eindeutig.
Sind Lösungen in Abhängigkeit von Parametern –wie oben– zu verfolgen, dann ist eine syste-
matische Stabilitätsuntersuchung aussagekräftiger. Wir können eine derartige numerische Vorge-
hensweise nur stichwortartig angeben. Die Vorgehensweise basiert auf dem Theorem von F LO -
QUET . Unter Stabilität oder asymptotischer Stabilität der periodischen Lösungen verstehen wir
das Verhalten der Lösung nach einer anfänglichen Störung (Stabilität im Sinne von L JAPUNOV).
Sei y 0 (τ + 2π) = y 0 (τ) die periodische Lösung von (5.165) bzw. (5.160), dann ergibt sich die
Differenzialgleichung der gestörten Bewegung v (τ) mit
aus einer TAYLOR-Entwicklung der rechten Seite bis zum linearen Term
∂ f (yy(τ), τ)
y 0 (τ) + v (τ) = f (yy0 (τ), τ) + v (τ). (5.167)
y (τ) y 0 (τ)
Da y
0 (τ) = f (yy0 (τ), τ) für sich erfüllt ist, bleibt die lineare Variationsgleichung
∂ f (yy(τ), τ) !
v (τ) = Q (τ) v (τ), = Q (τ) = Q (τ + 2π) . (5.168)
y (τ) y 0 (τ)
Strebt die Lösung v (τ) von (5.168) gegen Null für τ → ∞, so folgt für y 0 (τ) asymptotische
Stabilität. Nach L JAPUNOV erhalten wir diese Aussage und Aussagen über Instabilität bereits aus
der linearen Variationsgleichung (5.168) mit periodischer Koeffizientenmatrix, d. h. wir müssen
für (5.168) Stabilitätsbedingungen finden.
Die Variationsgleichung (5.168) hat n (hier n = 2) linear unabhängige Lösungen ṽvk (τ), die
die Fundamentalmatrix
bilden. Sie genügt wegen der Periodizität von Q (τ) der Matrix-Differenzialgleichung
V
(τ) = Q (τ)V
V (τ) → V
(τ + 2π) = Q (τ)V
V (τ + 2π), (5.170)
d. h. V (τ + 2π) ist auch Lösung von (5.170)1 . Damit muss sich V (τ + 2π) als Linearkombination
der linear unabhängigen Lösungen ṽvk (τ) schreiben lassen
K ist eine konstante reguläre Matrix. Die Lösungen ṽvk (τ) bestimmen wir uns numerisch aus
5.7 Randwertprobleme gewöhnlicher Differenzialgleichungen 315
V (2π) = K . (5.173)
Nach dem F LOQUET-Theorem existieren Lösungen von (5.168), die der Bedingung
genügen, wo ρ der so genannte charakteristische Multiplikator ist. Die Lösung v(τ) lässt sich
durch V (τ), d. h. die linear unabhängigen ṽv(τ), ausdrücken:
wo a ein zunächst unbekannter konstanter Vektor ist. Mit (5.174), (5.175) und (5.171) folgt dann:
(K
K − ρ E) a = 0 (5.177)
für die charakteristischen Multiplikatoren ergibt. K ist regulär und reell, folglich sind ρ und a
von Null verschieden und paarweise konjugiert komplex oder reell.
Die Stabilität von v (τ) aus (5.168) und damit von y 0 (τ) ergibt sich mit folgenden Aussagen:
Im kritischen Fall entscheiden die Terme höherer Ordnung von (5.167), ob Stabilität oder Insta-
bilität vorliegt.
Die F LOQUET-Lösung (5.175) lässt sich ausdrücken durch eine periodische Funktion
f (τ + 2π) = f (τ) ausdrücken
Funktion mit dem Hauptwert für m = 0. Die Stabilität des Systems ist somit auch durch die
Realteile der charakteristischen Exponenten bestimmt.
Vorgehensweise: Zur Stabilitätsuntersuchung der Lösung y0 (τ) des nichtlinearen Differenzial-
gleichungssystems ist die Bestimmung der Fundamentalmatrix V (τ) zu den speziellen Anfangs-
bedingungen V (0) = E und der Eigenwerte von K := V (2π), der charakteristischen Multiplika-
toren ρ, erforderlich. Hierzu muss die Variationsgleichung (5.168) entsprechend der Ordnung
(hier zwei) zu wechselnden Anfangswerten, jeweils dem -ten Einheitsvektor (=1, 2,..), nume-
risch integriert werden. Dies setzt voraus, dass die Lösung des nichtlinearen Systems, die nur zu
diskreten Zeitpunkten vorliegt, in ein F OURIER-Polynom mit der Function fft entwickelt wird.
Die zugehörigen Funktionswerte zu den diskreten Zeitpunkten des Integrators ergeben sich dann
aus einer F OURIER-Synthese. Mit dem folgenden Programmausschnitt wird K := V (2π) erstellt.
ka=2; % Ordnung des Zustandsmodells
kz1=0; % Zählvariable
while kz1 < ka % Aufbau der Fundamentalmatrix
kz1=kz1+1;
optstab=odeset(’Reltol’,1.e-8); % Optionen für Integration
[~,z]=ode45(@fmetro_stab,[0 2*pi],z0(:,kz1),optstab,c,N);
K(:,kz1)=z(end,:)’; % Spalten der Fundamentalmatrix
clear z
end
rho=eig(K); % charakteristische Multiplikatoren
Ergebnisse: In Bild 5.47 sind die mit der Response-Kurve aus Bild 5.46 korrespondierenden
charakteristischen Multiplikatoren ρ1 , ρ2 in einer komplexen Ebene eingetragen, Ω ist Kurven-
parameter. Bei Ω = Ωk sind |ρ1 | = |ρ2 | = 1, es liegt eine Stabilitätsgrenze vor. Für Ω > Ωk ist
die Lösung instabil.
Eine Besonderheit zeigt die Stabilitätsuntersuchung der selbsterregten Schwingungen. Auf-
grund der willkürlich vorgegebenen Komponente yk (τ0 ) in (5.161), d. h. der Phase der Schwin-
gung gegenüber τ0 , ist ein Multiplikator immer eins. Die restlichen bestimmen die Stabilität. Mit
der Ausgabe von fmetro_bvp.m lassen sich alle Einzelheiten nachvollziehen.
6.1 Stateflow-Elemente
Das Stateflow Tool ist ein Entwurfs- und Entwicklungswerkzeug für die Simulink-Umgebung.
Es lassen sich in einem Stateflow Chart Block aus der Stateflow Library, grafische Stateflow-
Diagramme für logische und ereignisgetriebene Abläufe, so genannte endliche Zustandsautoma-
ten (finite state machines) erstellen. Das komplette Stateflow-Modell wird auch State Machine
genannt. Das Stateflow Chart stellt ein C-Code S-Function (Mex-File, fnc_name_sfun.mexw32,
für 32-Bit-Version) dar. Die Function wird mit dem Simulationsstart automatisch generiert und
Informationen im Unterverzeichnis slprj abgelegt. Zur Erzeugung der C-Code S-Function ist
ein C-Compiler erforderlich. Mit
>> mex -setup
kann unter Windows (32 Bit) der mitgelieferte Compiler Lcc-win32 aktiviert werden (einma-
liger Vorgang, vgl. Abschn. 4.7). Optional und für die 64 Bit-Version von Windows sind andere
Compiler auswählbar.
Für den Modelltest stehen ein Parser (Überprüfung der Semantik), ein Debugger (gezielte
Fehlersuche durch schrittweise Ausführung des Charts) zur Verfügung.
Während der Simulation werden die jeweils aktiven Übergänge und Zustände im geöffneten
Stateflow-Diagramm animiert dargestellt. Es lassen sich Diagramme mit und ohne Zustände,
d. h. Zustandsdiagramme und Flussdiagramme (stateless) –vgl. ExpStatefl_3.mdl in [52]–,
grafisch im Chart erstellen. Dabei unterscheidet man grafische und nichtgrafische Elemente. Zu
den nichtgrafischen Elementen eines Charts zählen Events, Daten unterschiedlichen Typs sowie
Ein- und Ausgänge zu Simulink. Sie können im Model Workspace des zugehörigen Modells oder
im MATLAB Base Workspace gespeichert und über den Model Explorer verwaltet werden. Ein
Simulink-Modell kann mehrere Charts enthalten.
Stateflow besitzt einen objektorientierten Aufbau, d. h. jedes Objekt (Element) besitzt ein ein-
deutiges Eltern-Objekt (parent) mit beliebig vielen Kind-Objekten (children).
Eltern-Objekt → Stateflow Chart
Kinder des Charts → Im Chart enthaltende Elemente:
Zustände, Events, Variablen, Funktionen.
In den folgenden Abschnitten werden wir einige grundlegende grafische und nichtgrafische
Elemente erläutern, siehe im Help Browser: Stateflow, Stateflow Notation sowie Examples.
Ein leeres Chart erhält man einerseits innerhalb eines neuen Simulink-Modells durch die Eingabe:
>> sfnew , andererseits aus der Stateflow Library, die auch durch den Aufruf
>> stateflow oder kurz: >> sf
geöffnet wird. In diesem Fall ist das Chart in das Simulink-Modell zu ziehen (click-and-drag).
Mit einem Doppelklick auf das Chart öffnet sich der grafische Editor, wie in Bild 6.1, mit der ver-
tikalen Tool-Leiste der grafischen Elemente. Sie können in das Diagramm-Editor-Fenster gezo-
Bild 6.1: Stateflow-Diagramm-Editor mit Erklärung der Tool-Leiste und Shortcut Menü zur Arbeitsweise
gen werden. Ein Chart enthält danach die grafischen Elemente: State (Zustand), History Junction
(Gedächtnis für zuletzt aktiven Zustand), Default Transition (Standardverbindungen), Connecti-
ve Junction (Verzweigungspunkte) usw. Die Box ist im Wesentlichen ein grafisches Hilfsmittel
6.1 Stateflow-Elemente 319
zur visuellen Organisation in einem Chart. Bei mehreren Boxen wird die Ausführungsreihenfol-
ge geregelt. MATLAB Function und Graphical Function werden in ExpStateflow_2.mdl
aus [52] erklärt. Truth Table gestattet die Erstellung logischer Wahrheitstabellen mit dem Truth
Table Editor. Die Übergangspfade, die Transitionen, zwischen Zuständen untereinander und mit
Verzweigungspunkten (Connective Junction), wie in Bild 6.2, werden mit dem Mauszeiger er-
zeugt. Für alle Bedingungen der Zustand-Übergänge an den Transitionen sowie die der Zustand-
Aktionen, vgl. Bild 6.3, werden Label, deren Elemente in der Action Language (vgl. Stateflow
User’s Guide) spezifiziert sind, gesetzt.
during (du), exit (ex), bind und on event, für den Typ der Aktion mit einem abschließen-
den Doppelpunkt sowie der eigentlichen Aktionsanweisung, wie in Bild 6.3, zusammensetzen. Es
können Wertzuweisungen, logische Operationen und Events-Aktivierungen ausgeführt werden.
Die Syntax ist der der Programmiersprache C ähnlich. Für jeden Typ können mehrere Aktions-
anweisungen, getrennt durch Komma, Semikolon oder Return (vgl. MATLAB-Vereinbarungen)
aufgeführt sein. Jede Zustand-Aktion beginnt mit einer neuen Zeile. Sind nur Aktionen vom Typ
entry auszuführen, so können sie unmittelbar hinter dem Slash oder in einer neuen Zeile nach
dem Zustand-Namen ohne Schlüsselwortangabe aufgelistet werden. Ein Zustand wird aktiv bzw.
inaktiv, wenn eine zuführende bzw. wegführende Transition gültig ist.
Die Schlüsselworte im Zustand-Label, wie in Bild 6.3, wollen wir kurz erläutern:
• Entry Action: Die Entry Action wird nach der Aktivierung des Zustandes, also beim Eintritt
in den Zustand, ausgeführt.
• During Action: Eine During Action wird während der aktiven Phase des Zustandes ausge-
führt. Die Häufigkeit der Ausführung der During Action ist von der Einstellung der Update-
Methode des Charts abhängig.
• Exit Action: Eine Exit Action wird beim Verlassen infolge einer wegführenden, gültigen
Transition oder des Eintretens eines Ereignisses (event, siehe On-Event Action) ausgeführt.
• On-Event Action: Eine On-Event Action wird in der aktiven Phase des Zustandes ausgeführt,
wenn das angegebene Event auftritt. Mehrere Events sind zulässig:
on event1, event2, event3:aktion123
• Bind Action: Eine Bind Action, z. B. bind: wert, des zugehörigen Zustands oder eines
diesbezüglichen Kind-Objekts lässt die Änderung des Wertes/Events wert nur innerhalb
des Zustands zu. Andere Zustände können auf wert in ihren Aktionen zugreifen, ihren
Wert aber nicht ändern.
6.1.3 Transitionen
Eine Transition ist ein verformbarer Pfeil, der ausgehend vom Quell- zum Zielobjekt zwei Gra-
fikobjekte verbindet (unidirektionaler Signalfluss). Wie u. a. in Bild 6.2, Bild 6.4, Bild 6.8 gezeigt,
können Transitionen zwischen zwei Zuständen und zwischen Verbindungspunkten (Connective
Junction) und Zuständen verlaufen. Mit Hilfe der linken Maustaste wird ausgehend von einer
geraden Kante des Quellobjekts durch Ziehen an eine gerade Kante des Zielobjekts, die Verbin-
dung erzeugt. Die Transitionen können Label enthalten, deren Bedingungen für eine Aktivierung
gültig sein müssen. Sie werden bei aktivem Quellobjekt auf ihre Gültigkeit überprüft. Es kann
6.1 Stateflow-Elemente 321
in der Regel immer nur eine wegführende Transition aktiv sein. Verbindungspunkte (Junctions)
unterteilen eine vollständige Transition zwischen Quell- und Zielobjekt. Jeder Teil der Transition
muss gültig sein, um das Zielobjekt zu aktivieren.
Der Transitions-Label setzt sich aus einem Event, einer Bedingung (Condition), einer Bedin-
gungsaktion (Condition Action) und einer Übergangsaktion (Transition Action) zusammen. Je-
des dieser Elemente ist optional. Ein Label kann auch leer sein. Die allgemeine Form eines Labels
ist:
event[condition]{condition_action}/transition_action
Die ersten drei Elemente des Labels werden nacheinander abgearbeitet. Sind alle Bedingungen
true, dann ist die Transition gültig. Nicht gesetzte Bedingungen sind true. Ist die Transition
gültig, dann wird die Transitionsbedingung (Transition Action), die mit einem Slash / beginnt,
ausgeführt. Die Bedingung (Condition) ist ein boolscher Ausdruck.
6.1.3.1 Aktivierungsregeln
Existieren zwei oder mehrere wegführende Transitionen eines Quellobjekts – Zustand (State)
oder Verbindungspunkt (Connective Junction) – dann erscheinen ab Version 6.3 im Stateflow-
Diagramm numerierte Transitionen 1, 2,... entsprechend ihrer Überprüfungsreihenfolge auf Gül-
tigkeit bzw. Ausführung. Diese Reihenfolge ergibt sich aus festgeschriebenen Regeln und wird
als implizite Methode bezeichnet. Demgegenüber steht ab Version 6.3 die vom Benutzer festge-
legte oder explizite Ausführung. In diesem Mode setzt der Benutzer die Folge, in der die Tran-
sitionen für die Ausführung überprüft werden, teilweise oder vollständig fest. Dieser Mode ist
im Modell-Explorer bei aktiviertem Chart in der Model Hierarchy Spalte, vgl. Bild 6.9, durch
Anwahl von
User specified state/transition execution order
in der Dialog-Spalte, Chart:chart_name, zu aktivieren. Der explizite Mode bezieht sich auf
Parallel-Anordnungen von Zuständen, wie in Bild 6.4, als auch auf die Prioritäten der Transi-
tionen. Die Änderung der Folge erfolgt anschließend im Shortcut-Menü unter Execution Order,
geöffnet durch Rechtsmausklick auf die Transition. Die Reihenfolge der restlichen Transitionen
wird automatisch angepasst.
Die implizite Methode ist der Standard-Mode für alle Stateflow-Versionen. Modelle von Vor-
gängerversionen werden in diesen Mode konvertiert. Aus diesem Grund folgen noch einige Be-
merkungen zur impliziten Festlegung der Priorität.
Grundsätzlich liegen für mehrfach wegführende Transitionen von einem Quellobjekt (Zu-
stand, Verbindungspunkt) drei Vorgehensweisen zugrunde. Sie sind im Bild 6.4 in einer Parallel-
Anordnung von Superstates AA, AB, AC demonstriert. Diesbezügliche Experimente können mit
Prioritaet.mdl aus [52] durchgeführt werden. Vorgehensweisen:
6.1.5 Verbindungspunkte
Die kreisförmigen Verbindungspunkte (Connective Junctions), u. a. in Bild 6.43 , sind Elemen-
te des Connective Junction Tools, vgl. Bild 6.2. Sie können Verzweigungspunkte, von denen
dann mehrere Transitionen wegführen, bilden. Unterschiedlichste Konstruktionen bezüglich hin-
und wegführender Transitionen sind möglich; vgl. Stateflow User’s Guide sowie Demo-Beispiel
sf_boiler u. a. mit function turn_boiler(mode). Darüber hinaus sind damit for-
Schleifen, do-while-Schleifen und if-then Abfragen, zustandsfreie Flussdiagramme usw.
realisierbar, verfolge: Help Navigator/ search/ Connective Junction und aus der Programmsamm-
lung [52] ExpStateflow_1,2,3.mdl.
6.1 Stateflow-Elemente 323
Aufbauend auf Abschn. 4.3.5.7 setzen wir die Betrachtung zum Modell-Explorer im Zusammen-
hang mit dem Stateflow Tool fort. Alle Events, Variablen, Eingänge und Ausgänge (interne, ex-
terne Variablen) von und zu Simulink müssen deklariert werden. Dies geschieht mit dem Model
Explorer nach Bild 6.9. Er wird u. a. mit dem Button aus der Menü-Leiste des Grafik-Editors,
Bild 6.2, oder Simulink-Modell-Fensters geöffnete. Auf der linken Seite des Explorers wird u. a.
die Modell-Hierarchie Chart/Zustände (Einrückungen kennzeichnen Eltern-Kind-Beziehung) an-
gegeben. Es sind alle momentan geöffneten Charts/Zustände enthalten. Die deklarierten Größen
und ihre Eigenschaften können im (Base) Workspace, sie sind global verfügbar, oder im Model
Workspace, die Daten werden nur von dem zugehörigen Modell gesehen, verwaltet.
Im anschließenden Teil (Contents Spalte) werden alle nicht-grafischen Elemente mit ihren
Eigenschaften in Abhängigkeit von der Einstellung unter Column View:, z. B. Default/Data Ob-
ject/.../Stateflow, angezeigt.
Auf der rechten Seite, Dialog Spalte, des Modell-Explorers kann die den Elementen zuge-
ordnete Dialogbox der Eigenschaften mit dem Button: in der Explorer-Menüleiste – sie sind
auch separat zu öffnen – ein- und ausgeblendet werden. Es können dort in Abhängigkeit von
den mit einem Mausklick aktivierten Elemente/Objekte der ersten beiden Fenster zugehörige
Eigenschaften angezeigt und eingestellt werden. Z. B. bei aktiviertem Chart-Symbol kann insbe-
sondere die Update method für die Aktivierung nach jedem Abtastschritt (Discrete, Continuous)
des Simulink-Modells, beim Auftreten eines externen Triggersignals oder bei jeder Neuberech-
nung der Eingangssignale (inherented) ausgewählt werden. Inherited ist die Standardmethode,
die Abtastrate des Charts wird von den Simulink-Eingängen vererbt. Wird ein Zustand im Explo-
rer aktiviert, dann erscheint das Zustand-Label, welches editiert werden kann. Dies erreicht man
ebenfalls über das Shortcut Menü unter Properties des ausgewählten Zustands. Bezüglich der
Variablen, Events usw. werden Namen, Scope, Datentyp usw. einstellbar. Eigenschaften bereits
eingetragener Variablen/Events werden nach deren Aktivierung im mittleren Fenster angezeigt.
Nach einem Klick auf: Model Workspace in der Spalte Modell-Hierarchie kann der Daten-
transfer in den Model Workspace über ein MDL-, MAT-, MATLAB-File oder durch Eingabe
eines MATLAB Codes in der Dialog-Spalte erfolgen, siehe Fahrz.mdl.
Weitere Deklarationen können u. a. über die Menüpunkte Add/Data – Ctrl+D –, Add/Event –
Ctrl+E – oder die Knöpfe: des Explores hinzugefügt werden. Diese Daten sind mit einem
Namen, dem Datentyp double, single, int32, boolean usw. zu versehen. Für die Variablenspezi-
fikation ist das Scope, z. B. auf lokal, Input, Output, ... zu setzen, d. h. zur Vereinbarung eines
Eingangssignals einer Variablen von Simulink auf Input. Dadurch wird am Chart ein Eingangs-
port angezeigt. Zusätzlich sind Datentyp und evtl. Portnummer zuzuweisen. Ausgangsvariable
nach Simulink erhalten die Spezifikation: Output, der Ausgangsport wird angezeigt. Der Daten-
typ constant wird durch Einstellung des Scopes auf Constant deklariert. Eine Konstante kann
nicht modifiziert werden. Im Feld Limit Range kann der zulässige Wertebereich der Variablen
festgelegt werden; er ist einzuhalten. Matrizen-Deklarationen erfolgen durch den Eintrag im Feld
Size, z. B. 5 für eine 5×1-Matrix und [5 4] für eine 5×4-Matrix, siehe ExpStateflow_2.mdl
[52].
Deklarierte Events (Add/Event, Ctrl+E) erhalten ebenfalls einen Namen, sie können als lokale
Events oder als Input/Output-Events from/to Simulink vereinbart werden. Darüber hinaus sind
Triggerart (Rising, Falling,...) und ggf. Port-Nummer sowie Debugger-Funktionen auszuwählen.
324 6 Modellierung und Simulation mit dem Stateflow Tool
Sind Aktivitäten von Zuständen (States) an Simulink zu übergeben, dann ist dazu auf der
linken Seite, Model Hierarchy Spalte, im Explorer der Zustand auszuwählen und auf der rechten
Seite, Dialog Spalte, die Eigenschaft Output State Activity zu aktivieren. Es wird ein weiterer
Port am Chart angezeigt, siehe Bild 6.15.
FC
ẍA = −ω12 (xA − xR ) − δ1 (ẋA − ẋR ) − s, s = sign (ẋA − ẋR )
mA
(6.1)
FC kR
ẍR = ω22 (xA − xR ) + δ2 (ẋA − ẋR ) + s+ (xs − xR ),
mR mR
wobei
kA kA dA dA
ω12 = , ω22 = , δ1 = , δ2 = .
mA mR mA mR
Die Variablen und Parameter sind in Abschn. 4.4 erklärt. Haftung tritt auf, wenn die Beschleuni-
gungen beider Massen (mA , mR ) gleich sind, d. h. ẍA = ẍR . Damit folgt aus (6.1)
kR
ẍA = (xs − xR ) . (6.2)
mA + mR
Der zugehörige Schaltkoeffizient ist per Definition s = 0.
6.2 Beispiel: Schwinger mit Coulomb-Reibung 325
Die Gleichungen (6.1) und (6.2) beschreiben somit die Bewegungsphasen Gleiten und Haf-
ten. Über die Dreipunkt-Schaltlogik muss entschieden werden, welche der Bewegungsformen zu
aktivieren ist. Zu diesem Zweck führen wir die Schaltfunktion q, sie entspricht der Relativge-
schwindigkeit von Aufbau und Rad, und den Schaltkoeffizient s
q =ẋA − ẋR
sign q, Gleiten: s ± 1 (6.3)
s=
0, Haften
Mit (6.3) und (6.4) kann die Dreipunkt-Schaltlogik nach Bild 5.37 aufgebaut werden.
% ---- Systemparameter
mA=1.0e+03; % Aufbauten-Masse [kg]
mR=1.0e+02; % Rad-Masse [kg]
kA=40.0e+03; % Federsteifigkeit der Radaufhängung [N/m]
kR=40.0e+04; % Reifensteifigkeit [N/m]
dA=12.0e+03; % Dämpfung der Radaufhängung [Ns/m]
FC=400.0; % Reibkraft [N]
d=0.01; % Rampenhöhe [m]
-FC*(1/mA+1/mR)-1/mR*(kR*(xs-y(2)));
sm=-(om1+om2)*(y(1)-y(2))-(delta1+delta2)*(y(3)-y(4))...
+FC*(1/mA+1/mR)-1/mR*(kR*(xs-y(2)));
% ---- Initialisierung des Schaltkoeffizienten s0
if sm < 0 s0=-1; % vgl. Dreipunkt-Schaltlogik
elseif sp > 0 s0=1; % Gleiten, positive Relativgeschw.
else s0=0; % Haften
end
else
if q < 0 s0=-1; % Gleiten, negative Relativgeschw.
else
s0 =1; % Gleiten, positive Relativgeschw.
end
end
disp(’ ’); disp(’ok.’); disp(’ ’)
Das 1/4-Fahrzeug modellieren wir mit (6.1), (6.2) als Subsystem Fahrzeug, wie in Bild 6.5.
Hierzu wählen wir:
Eingänge: s Schaltkoeffizient s aus der Zustands-Logik
xs Fahrbahnprofil mit Rampenauffahrt
Ausgänge: xA Fahrzeugaufbau-Auslenkung xA
xR Rad-Koordinate xR
xAp Geschwindigkeit ẋA
xRp Geschwindigkeit ẋR
xAp_state ẋA , State Port-Ausgang
xRp_state ẋR , State Port-Ausgang
Die Schaltfunktion q nach (6.3) ergibt sich unmittelbar mit den Ausgängen der State Ports der
328 6 Modellierung und Simulation mit dem Stateflow Tool
Auftretende Nullstellen der Schalt- und der Hilfs-Schaltfunktionen (q, S± ) werden mit den
Hit Crossing Blöcken durch 0 (keine Nullstelle) oder 1 (Nullstelle), wie in Bild 6.13 dargestellt,
angezeigt.
Zum Aufbau der Schaltlogik müssen die Hilfs-Schaltfunktionen Sp:=S+ , Sm:=S− sowie die
boolschen Werte (0 oder 1) für eine vorliegende Nullstelle von q, Sp_I und Sm_I am Eingang
des Charts Zustands-Log anliegen.
Die bekannte Dreipunkt-Schaltlogik nach Bild 5.37 können wir, aufbauend auf den Eingangs-
größen q, Sp, Sm, Sp_I, Sm_I, direkt umsetzen. Die deklarierten Daten werden im Explorer
von Bild 6.9 angezeigt. Ausgehend von den im Daten-Modul dFahrz.m formulierten Anfangs-
bedingungen sowie des hieraus resultierenden Schaltkoeffizienten s0 wird bei Simulationsstart
die Default Transition aktiviert und gibt somit den Weg zum zunächst aktiven Zustand frei.
Im Modell-Explorer Bild 6.9 sind die Daten des Charts deklariert. Die Einstellung von s0
ist dabei so gewählt, dass sie über den Workspace eingelesen wird. Die Update method ist auf
Inherited zu stellen, womit das Chart von der schnellsten, anliegenden Datenleitungen getrieben
wird.
selection Button der Signal Selector zu öffnen und die gewünschte Ausgabe anzuwählen. In
Bild 6.14 sind die aktiven und inaktiven Phasen der Zustände haften, ngleiten, pgleiten
nach Bild 6.8 aufgezeichnet. Die einzelnen Reibphasen lassen sich interpretieren und mit den an-
deren Ergebnissen in Einklang bringen.
a: Geschwindigkeiten b: Relativgeschwindigkeiten
Bild 6.12: Geschwindigkeiten von Aufbau und Rad sowie zugehörige Relativgeschwindigkeit
ẍ + cw v ẋ = 0 Horizontalbewegung; ÿ + cw v ẏ = −g Vertikalbewegung,
332 6 Modellierung und Simulation mit dem Stateflow Tool
wobei v = ẋ2 + ẏ2 der Betrag der Ballgeschwindigkeit ist. Das Springen soll beendet sein, wenn
die Auftreffgeschwindigkeit eine vorgegebene Schranke, z. B. |v| = 10−3 m/s, unterschreitet, so
dass im zweiten Bewegungsabschnitt tu ≤ t ≤ te die Bewegungsgleichungen
Auf der Basis des Simulink-Modells aus Abschn. 5.6.4.1, Bild 5.27 ist das angepasste Simulink-
Modell in Bild 6.15 dargestellt und in [52] unter ball_stateflow.mdl abgelegt. Stateflow-
Elemente übernehmen die Berechnung der Stoßgeschwindigkeiten (v+ = −εs v− ) und die Inte-
grierersteuerung. Zur Integration der Bewegungsgleichung benötigen wir für jede Bewegungs-
richtung zwei Integrierer. Neben den Signaleingängen werden beim ersten Integrierer der Ver-
tikalbewegung y auch der Triggereingang zur Integrationsunterbrechung beim Aufprall und der
Eingang zum externen Setzen des Anfangswerts zu Simulationsbeginn und nach jedem Aufprall
benötigt. Darüber hinaus muss über den State Port die aktuelle Ballgeschwindigkeit ve als Chart-
Eingangssignal ausgegeben werden. Die Zeitpunkte der Nullstellen der Ballposition y (Schalt-
funktion) werden durch den Hit Crossing Block detektiert. Dabei wird das Ausgangssignal beim
Auftreten eines Ereignisses (Nullstelle) kurzzeitig wie in Bild 6.17c von 0 auf 1 und unmittel-
bar danach wieder auf 0 gesetzt. Die aufsteigende und abfallende Flanke (either) dieses Signals
nutzen wir als externes Triggersignal (Event) zur Steuerung des Logik-Ablaufs im Chart. Da-
zu muss das Event Aufprall im Explorer als Simulink-Eingang mit beiden Trigger-Flanken
(steigend/fallend – either –) deklariert werden, vgl. die Explorer-Einstellung.
Beim Start einer Simulation ist die State Machine und damit das Chart zunächst in Ruhe;
6.3 Beispiel: Springender Ball 333
es muss durch ein externes Event aufgeweckt werden. Ist die Update-Methode Inherited einge-
stellt, dann erfolgt der Weckvorgang durch die schnellste angelegte Simulink-Signalleitung. Un-
abhängig von der Update-Methode kann aber auch im eingeblendeten Menü Chart: u. a. durch
Aktivieren von Execute Chart At Initialization bei der Initialisierung des umgebenen Simulink-
Modells im Chart ein implizites Event ausgelöst werden. Dadurch befindet sich das Chart zum
Simulationsbeginn t = 0 in einer definierten Ausgangslage, ohne dass explizit ein Event auftritt.
Bemerkungen zum Chart, Bild 6.16
Variablen: Mit der Variablen Res wird der Integrierer gesteuert; die erzeugte steigende Flanke
0 → 1 unterbricht die Integration. v_0 ist die Geschwindigkeit nach dem Stoß, g die negative
Erdbeschleunigung g:= −g. Res, v_0, g sind somit die Output-Variablen. Die Input-Variable
v_e ist die Aufprallgeschwindigkeit. eps, s sind lokale Variablen des Stoßfaktors sowie des
Steuerparameters zur Umschaltung von v_0 und g während der Rollphase.
Das Chart in Bild 6.16 besteht aus dem Superstate Ball sowie den beiden Substates Bewe-
gung und Stoss. Das Superstate dient hier nur zur Demonstration, es kann entfallen. Ist
Ball aktiv, dann wird zunächst die Standardtransition ausgeführt und aktiviert den Zustand
Bewegung, so dass die Entry-Aktion Res=0 ausgeführt wird. Bewegung wird inaktiv nach-
dem das externe Event steigende/fallende Flanke wahr wird. Die Transition mit dem Label
Aufprall aktiviert den Zustand Stoss. Die Entry-Aktionen zu v_0, Res=1 und g=s*g
– zunächst mit s=1 – werden abgearbeitet. Durch Res 0 → 1 wird die Integration gestoppt, der
neue Anfangswert v_0 gesetzt und die Integration fortgesetzt. Da die label-freie, wegführende
Transition stets wahr ist, das gesetzte Label an der Transition vom Verbindungspunkt bis zum fol-
genden Zustand falsch ist, wird die ungesetzte Transition ausgeführt. Der Zustand Bewegung
ist bis zum Einsatz des nächsten externen Events wieder aktiv. Dies setzt sich bis zum vorletzten
Durchlauf, bei dem ve ≤ 10−3 ist, fort. Da in diesem Fall der Transitions-Label wahr ist, wird die
gesetzte Transition gegenüber der ebenfalls gültigen leeren Transition ausgeführt, d. h. die Aktio-
nen s=0 und eps=0 werden zugewiesen. Das hat zur Folge, dass nach dem nächsten externen
Event v_0=0 und g=0 ausgegeben werden und die Integration hiermit zu Ende geführt wird.
Alternativ kann zur Integrierer-Steuerung, statt der Flanke von Res 0 → 1, auch die Aktivie-
rung des Zustandes Stoss herangezogen werden. Dazu muss dieses interne Event an Simulink
übergeben werden. Hierzu ist z. B. im Explorer nach Anklicken des Zustandes Stoss im Model
Hierarchy Fenster die Eigenschaft Output State Activity im rechten Fenster zu aktivieren.
334 6 Modellierung und Simulation mit dem Stateflow Tool
Beide Realisierungen sind, wie in Bild 6.15 gezeigt, mit dem Manual Switch Block auszuwäh-
len. Die Animation der Abläufe im Chart sind im offenen Grafik-Editor zu beobachten. Detaillier-
ter wird die Animation im Debugger-Modus. Hierzu ist mit Tolls/Debug... das zugehörige
Fester zu öffnen und die Breakpoints z. B. Chart Entry und State Entry zu setzen. Die Abläufe
im Chart, sowie die der Simulationsergebnisse im Scope1 sind nun, z. B. im Step-Modus, zu
verfolgen.
Simulation
Zur Simulationsinitialisierung und der Darstellung der Ergebnisse kann das folgende M-File
ball_state_start.m aus [52] genutzt werden:
Bild 6.17: Simulationsergebnisse mit Nullstellenzeitpunkte, Ausgangssignal des Hit Crossing Blocks
Wesentlich sind die gesetzten Optionen RelTol, MaxStep und Refine. Insbesondere die Op-
tionen MaxStep und/oder Refine beeinflussen die Simulation im Übergangsbereich zum Rol-
len maßgeblich. Die unmittelbar aufeinanderfolgenden Auftreffpunkte, vgl. Bild 6.173 , können
nur durch eine richtige Abstimmung detektiert werden. Gegebenenfalls ist das Abbruchkriterium
|v| ≤ 10−3 zu entschärfen.
Die Simulationsergebnisse von Bild 6.17 sind selbsterklärend. Insbesondere der Einfluss des
Widerstandes infolge des umgebenen Mediums wird deutlich.
Übungsvorschlag: Modellieren Sie ein Chart, bei dem der Übergang in den Rollzustand durch
einen weiteren Zustand erreicht wird, d. h. die mit dem Label
[fabs(v_e)<=1.0e-03]{s=0;eps=0;}
in Bild 6.16 gesetzte Transition ist zu ersetzen. Hilfe: ball_stateflow_1.mdl aus [52].
7 Physikalische Modelle unter Simulink
Zur Bearbeitung insbesondere von Mehrdomänen-Modellen, wie in der Mechatronik, bietet die
objektorientierte Modellierung physikalischer Systeme ein geeignetes Werkzeug. Diesbezüglich
sind u. a. die Simulationsprogramme MODELICA1 [13], [63], ITI-Sim und Saber einzuordnen.
In der MATLAB/Simulink-Umgebung stehen z. Z. die blockorientierten Tools Simscape mit me-
chanischen, magnetischen, elektrischen, hydraulischen, thermischen Elementen in der Founda-
tion Library, SimMechanics für mechanische Mehrkörpersysteme, SimHydraulics für hydrauli-
sche Komponenten, SimDriveline für Antriebsstränge und SimPowerSystems für Elemente der
Leistungselektronik zu Verfügung. Bild 7.1 zeigt, dass bis auf SimPowerSystems alle anderen
in der Simscape Library eingebettet sind. Darüber hinaus sind die vorhandenen Sublibraries
des SimMechanics Tools ersichtlich; zugehörige Elementbeispiele zeigt Bild 7.2. Damit ist eine
erweiterte Multidomänen-Simulation in der Simulink-Umgebung möglich, Co-Simulation mit
anderen Programmsystemen entfallen weitgehend. Zur Modellierung werden nicht zwingend Ex-
perten der einzelnen Disziplinen benötigt. Da Simscape über eine eigene Sprache verfügt, sind
weitere Modellierungen eigener Komponenten bzw. Baugruppen möglich.
Die Arbeitsweise mit diesen Tools wollen wir anhand von SimMechanics etwas näher erläu-
tern, so dass man einen Einblick in die Arbeitsweise der physikalischen Modellierung erhält und
somit eine Einarbeitung in die anderen Tolls, unterstützt durch die jeweiligen Demos, verständli-
cher und einfacher wird.
Die Modellierung mit SimMechanics setzt einige Grundlagen der Mehrkörperbeschreibun-
gen voraus, auf die hier nicht ausführlich eingegangen werden kann. Es soll trotzdem versucht
werden, einige Begriffe in die Vorstellung einzuarbeiten. Im Einzelfall muss aber auf Spezial-
Literatur wie u. a. [6], [15], [29], [54], [56], [67] verwiesen werden.
1 http://www.modelica.org
7.1.1 Funktionsweise
Wie schon erwähnt, werden mechanische Systeme mit Blöcken der Modell-Library, die jeweils
ein mechanisches Element repräsentieren, modelliert. Einige Elemente sind in Bild 7.2 zusam-
mengestellt. Sie werden in der Simulink-Umgebung mit den zugehörigen Parameter-Dialog-
Boxen konfiguriert. Im Gegensatz zu herkömmlichen Simulink-Blöcken, die mathematische Ope-
rationen darstellen und signalflussorientiert vom Ausgang eines Blockes zum Eingang des Folge-
blocks, also unidirektional, arbeiten, repräsentieren SimMechanics Blöcke mit zugehörigen geo-
metrischen und kinematischen Verträglichkeiten physikalische Komponenten, d. h. die Blöcke
haben hier eine eindeutige mechanische Bedeutung. Dadurch wird nicht mehr gleichungsorien-
tiert sondern objektorientiert gearbeitet. Die Datenflussrichtung zwischen verbundenen Blöcken
verläuft in beide Richtungen (bidirektional), die Pfade zeigen keine Pfeile. Man denke nur an
die Kraftwirkung zweier miteinander verbundener Massen (actio und reactio), wobei es keine de-
finierte Richtung des Signalflusses gibt. Damit sind auch Verzweigungen wie in Simulink unter
SimMechanics nicht möglich. Ausgehend von der Topologie des Modells mit den Systemparame-
tern, z. B. Masse, Trägheitstensor, geometrische Abmessungen, werden die Bewegungsgleichun-
gen für eine Simulation im Rechner generiert. Die abhängigen Variablen sind Relativkoordinaten
bezogen auf die durch die Geometrie vorgegebene Referenzlage.
Neben einfachen Standardblöcken – Body, Ground, Joint Sensor usw. – existieren solche mit
7.1 SimMechanics Tool 337
komplexer Funktionalität, was die Modellierung erheblich erleichtert. Z. B. kann mit dem Joint
Stiction Actuator in Abhängigkeit von Ereignissen ein Gelenk (Dreh- oder Schubgelenk) zeit-
weilig blockiert und anschließend wieder freigegeben werden. Typische Anwendungsfälle sind
Reibverbindungen mit Stick-Slip-Bewegungen, wie bereits in Kapitel 5.6.5 aber auch später un-
ter SimMechanics behandelt. Darüber hinaus existieren in der Sublibrary Joints/Disassembled
Joint Elemente die aufgeschnitten werden können, womit Systeme mit geschlossenen Schlei-
fen – vgl. Kurbeltrieb in Kapitel 5.4 – in solche mit offenen Schleifen überführt werden kön-
nen. Eine solche Situation überbestimmter Systeme erkennt SimMechanics aber auch automa-
tisch, so dass der Anwender diesen Übergang nicht explizit einleiten muss, vgl. Demo-Beispiel:
mech_four_bar.mdl. Insbesondere die Ermittlung konsistenter Anfangsbedingungen bei
nichtlinearen Systemen wird dadurch erleichtert.
Die Verbindungen zu Simulink-Komponenten werden durch die Sensor- und Actuator Blöcke
aus der Sensor & Actuator-Library hergestellt. Wie der Name schon andeutet, transformieren
Actuator Blöcke Simulink-Signale in Bewegungen, Kräfte oder Momente. Umgekehrt überfüh-
ren Sensor Blöcke mechanische Variable in Signale. Insbesondere lassen sich damit geregelte
mechanische Systeme in einer Umgebung bearbeiten. Sie sind ab der Version 2 echtzeitfähig,
womit Hardware-in-the-Loop (HIL)-Abläufe realisierbar sind.
7.1.2 Untersuchungsmethoden
SimMechanics unterscheidet vier Methoden zur Analyse mechanischer Systeme:
• Forward Dynamics: Berechnet die Bewegung (Zeitverläufe) eines Modells infolge der an-
greifenden Kräfte/Momente sowie der Zwangsbedingungen ausgehend von vorgegebenen
Anfangsbedingungen (Lage, Geschwindigkeit). Dies entspricht der bisherigen Simulation
durch numerische Integration der Differenzialgleichungen.
• Inverse Dynamics: Bestimmt die Kräfte/Momente die erforderlich sind, um eine vorgegebe-
ne Bewegung in offenen Schleifensystemen aufrecht zu erhalten, z. B. die Antriebsmomente
eines Roboters bei vorgegebener Endeffektor-Bewegung.
• Kinematics: entspricht der inversen Dynamik bei geschlossenen Schleifensystemen.
• Trimming: Berechnung von stationären oder Gleichgewichtszuständen; dies dient vielfach
der Linearisierung um Sollbewegungen oder Arbeitspunkten bzw. Gleichgewichtslagen, vgl.
Abschn. 8.4.7.
Neben den Modellparametern und der Geometrie mit verträglichen Einheiten (in der Regel
im MKS-System) spielen die verwendeten Koordinatensysteme (CS Coordinate System) u. a. zur
Festschreibung der Topologie eine zentrale Bedeutung. In SimMechanics wird unterschieden:
Die Kontaktpunkte zweier benachbarter Körper – die Bindung –, hier den der glatten Unterla-
ge und den des Quaders, werden durch die Punkte B (Basis) und F (Follower), vgl. Prismatic
Block in Bild 7.5, charakterisiert. Dadurch können über einen Joint Sensor Block neben den Re-
lativgrößen Position, Geschwindigkeit, Beschleunigung von F gegenüber B auch Reaktionskräfte
bezüglich B oder F gemessen werden. Darüber hinaus muss bei der Einführung der Koordinaten-
systeme sichergestellt werden, dass – wie hier – bei einer Translationsbewegung F und B auf
einer Achse oder in einer Ebene liegen, d. h. es ist auf Verträglichkeit zu achten.
Da die Masse nach Voraussetzung nur einen translatorischen Freiheitsgrad hat, könnten wir
sie als Punktmasse behandeln, womit u. a. die Koordinatensysteme zusammenfallen könnten. Um
aber das Handling mit den Koordinaten zu zeigen, benutzen wir die eingeführten geometrischen
Abmessungen a, b, c, h, FD . Zunächst wählen wir den Bezugspunkt 0 nach Bild 7.3 als Ur-
sprung des World-Systems (I) mit der angegebenen Orientierung – es ist also gegenüber Bild 7.3
neu zu positionieren. Den Ursprung des dazu parallel angeordneten Ground-Systems (G) legen
wir im Abstand h auf die neue I y-Achse von (I), so dass B auf I xG liegt. Damit ist die Lage von
(K) – hier CS2 – nicht mehr frei wählbar, I xG und K x müssen wie in Bild 7.3 zusammenfallen.
Weitere körperfeste Punkte, z. B. der Schwerpunkt (Massenmittelpunkt, Center of Gravity)
CG und der Feder-Dämpfer-Angriffspunkt CS1 sind in (K) oder (I) beschreibbar; vgl. Body
Block in Bild 7.5. Sie erhalten zunächst die Orientierung von (I). Auf der Seite Orientation
7.1 SimMechanics Tool 339
in der Body-Dialog-Box kann diese jedoch verändert werden. Darüber hinaus kann sich das Ko-
ordinatensystem mit seiner Orientierung auf den vorangegangenen Körper (Adjoining) beziehen,
die dann übernommen wird. Zusätzliche Körperpunkte CS3, 4,... wie in Bild 7.4 sind u. a. zur
anschaulichen Darstellung in einer Animation festschreibbar. Diese geometrischen Daten sowie
die der Masse m und des Trägheitstensors I CG =diag(Ixx , Iyy , Izz ) bezogen auf das Schwerpunkt-
Koordinatensystem mit dem Ursprung in CG sind in der Dialog-Box nach Bild 7.4 des jeweili-
gen Körpers (Body) einzutragen. Wir wollen nun schrittweise den Block-Modell-Aufbau – man
spricht auch von der Maschine (Machine) – nach Bild 7.5 besprechen. Zu eigenen Experimenten
dient das Programm M1_sm.mdl und M1_ss.mdl für eine erste Modellierung mit Simscape
in [52].
Zunächst wird mit dem Ground Block der Fixpunkt in (I) mit I x =I z = 0, I y = h festgeschrie-
ben, hierzu ist der Vektor [0, h, 0] in die Ground-Dialog-Box einzutragen. Jede Maschine muss
mindestens einen Ground Block enthalten. Ergänzend müssen die Umgebungsparameter der Ma-
schine im Machine Environment Block angegeben werden. Hierzu ist in der Ground-Dialog-Box
das Fenster Show Machine Environment Port zu aktivieren. Danach sind beide Blöcke miteinan-
der zu verbinden. Zu den Umgebungsparametern zählen u. a. der Gravitationsvektor in Bezug auf
das gewählte World-System (I); hier [0, −9,81, 0] m/s2 sowie die angestrebte Untersuchungsme-
thode hier: Forward Dynamics. Alle weiteren Einstellungen übernehmen wir zunächst, einige
diesbezügliche Erläuterungen folgen später.
Die prismatische Führung (Schubgelenk) des Quaders wird mit dem Prismatic Block model-
liert. Der Basis-Punkt B liegt dabei an Ground, der Folgepunkt F ist Punkt des Körpers. Die trans-
latorische Bewegungsrichtung des Schubgelenkes bezüglich der eingeführten Koordinatensyste-
me ist in vektorieller Form – hier: [1 0 0], da x die Bewegungsrichtung ist – in die Dialog-Box
einzutragen. Die Anzahl weiterer Ports z. B. für den Joint Sensor Block sowie den Anfangswert-
Block IC können angezeigt werden. In den jeweiligen Dialog-Fenstern sind einerseits die ge-
wünschten Ausgabegrößen in die Simulink-Umgebung auszuwählen und andererseits sind die
Anfangswerte als numerische oder symbolische Größe vorzugeben. Der IC Block enthält hier
Lage und Geschwindigkeit zum Zeitpunkt t = 0 bezüglich der konfigurierten Gleichgewichtsla-
ge. Der Quader wird durch den Body Block repräsentiert. In der Dialog-Box nach Bild 7.4 sind
hierfür die Größe der Masse – symbolisch m oder numerisch 1.5 –, der Trägheitstensor I CG , hier
beliebig, mit den verwendeten Einheiten einzutragen. Gehen wir von einer Punktmasse aus, dann
ist I CG der Null-Tensor, was zum Warning führt. Die Lagen der körperfesten Punkte gegenüber
einer gewählten Basis u. a. World sind im unteren Box-Bereich unter Body coordinate systems
vorzugeben; Block-Ports z. B. für den Body Actuator Block sind unter Show port zu aktivieren.
Daten, auf die nur zur Darstellung in einer Animation zurückgegriffen wird, benötigen keinen
Port; vgl. die vorgenommene Parameter-Einstellung in Bild 7.4. Vorschlag: Skizzieren Sie mit
den Daten des Body Blocks den Quader mit den eingeführten Koordinatensystemen; die Maße
beziehen sich alle auf das Koordinatensystem CS2.
Das Feder-Dämpfer-Element sowie die Anregung f (t) modellieren wir zunächst mit bekann-
ten Simulink-Komponenten. Das so erzeugte vektorielle Kraftsignal [I fx , 0, 0] ist über den Body
Actuator Block auf den Körper zu bringen.
Schließlich gehen wir noch kurz auf mögliche Modellvarianten ein. Diese beziehen sich
auf die Realisierung und Aufschaltung des Feder-Dämpfer-Elements. Hierfür bieten sich die
in Bild 7.5 aufgenommenen drei alternativen Lösungen – gepunktete Signalpfade – an. Da alle
Größen von F gegenüber B des Prismatic Blocks gemessen und aufgeschaltet werden können
und speziell B ein Festpunkt ist, lässt sich, wie in der 1. Alternativen in Bild 7.5 dargestellt, die
mit Simulink-Elementen modellierte Kraft komplett über einen Joint Actuator Block einbringen.
Entsprechend ist die 2. Alternative zu verstehen, bei der das Feder-Dämpfer-Element durch den
Joint Spring & Damper Block aus der Force Elements Sublibrary von SimMechanics ersetzt wur-
de. In der 3. Alternativen wird eine Modellierung mit dem Body Spring & Damper Block aus
der gleichen Sublibrary vorgeschlagen. Dies erfordert einen weiteren Ground Block und einen
zusätzlichen Port am Body Block.
7.1 SimMechanics Tool 341
Sind die Parameter in symbolischer Form, m für die Masse usw. eingetragen, dann können die
für Simulink geltenden Möglichkeiten der numerischen Wertzuweisung, u. a. M-File, Tastaturein-
gabe, übernommen werden. Die Daten müssen also vor dem Start des SimMechanics-Modells
im Workspace stehen. Wir wählen den direkten Eintrag unter: File/Model Properties/
Callbacks in den Fenstern Model pre-load (kurz: PreLoadFcn) function und/oder
Model initialization function (kurz: InitFcn). Unter PreLoadFcn eingetragene
Datenzuweisungen oder M-Files werden bei Programm-Block-Öffnung ausgeführt. Parameter-
änderungen werden nur nach erneuter Modell-Öffnung aktiviert. Im Gegensatz dazu wird der
Eintrag unter InitFcn bei jedem Simulations-Start ausgeführt. Konfigurationsparameter (But-
ton: Simulation/Configuration Parameters), z. B. die Start- und Stoppzeit in symbolischer Form
tstart, tend oder Toleranzwerte müssen ab Simulink 6 unter PreLoadFcn aufgeführt wer-
den und stehen nur dann vor dem Modell-Start im Workspace.
Auf dieser Basis lassen sich Mehrkörpersysteme modellieren, wie das folgende Beispiel zei-
gen wird.
Blöcke Angle driver, Driver Actuator aus der Constraints & Drivers bzw. Sensors &
Actuators Library zu realisieren ist.
Lösung
Modellerstellung: Anhand von Bild 7.6 und Bild 7.8 sowie den Parametern nach Ta-
belle 7.1 lässt sich das SimMechanics Modell Bild 7.7 erstellen. Der Ursprung 0 des
Inertialsystems (I) bzw. (W ) liegt im Federfußpunkt, das Ground-System fällt mit (I)
zusammen. Gestell, Arm 1 und Arm 2 entsprechen jeweils einem Body Block. Das Ge-
stell führt, wie im einführenden Quader-Modell, eine Translationsbewegung aus, was
ein Prismatic Block (Schubgelenk) mit dem Ground Block liefert. Die Gelenke A und
B sind Drehgelenke, wozu jeweils ein Revolute Block benötigt wird.
Als Messgrößen bieten sich u. a. die Relativwinkel (Angle) Δϕ2 Δϕ3 sowie die
damit berechenbaren Gelenkmomente (Computed torque) in A, B sowie die Transla-
tionsbewegung von m1 an. Im jeweiligen Joint Sensor Block sind zugehörige Größen
auszuwählen, womit sie als Simulink-Signal, z. B. angezeigt werden können.
Wesentlich sind die Eintragungen in die Block Parameters Fenster der Body Blöcke.
Sie beinhalten neben den Masseeigenschaften die Referenzlagen, die hier der Konfi-
guration mit entspannten Federn entspricht; z. B. die Schwerpunktslage (CG) des Ge-
stells im I-System, [ FD + 0,51 , 0, 0 ], von wo aus sich die Ankopplungen CS1, CS2,
CS3 vermaßen lassen. Weitere Körperpunkte können für die Visualisierung nützlich
sein. Entsprechend sind die Masseeigenschaften der Roboter-Arme aus Tabelle 7.1
einzutragen.
Die Vorgabe von Positionen und Orientierung von Arm 1 verdeutlichen wir mit
Bild 7.9. Danach wird die Position von CS1, also die Anlenkung in A, vom vorange-
gangenen Block übernommen (Adjoining). Bezüglich dieser Lage lassen sich Schwer-
punkt (CG) und Gelenklage B im körperfesten System angeben. Die Orientierung
ϕ10 von Arm 1 entspricht der Referenzlage in Bild 7.8 bzw. Bild 7.6. Das so schritt-
weise aufgebaute Modell stellt man zweckmäßigerweise im Visualisierungs-Fenster,
vgl. Bild 7.16 und Abschn. 7.1.5, dar. Jede Änderung der Geometrie im Body Block
wird durch ein Update: Edit/Update Diagram, Ctrl+D bzw. mit dem Update-
Button im Modell oder Visualisierungsfenster übernommen. Koordinatensysteme,
Schwerpunkte usw. lassen sich ein- und ausblenden. Für Arm 2 ist entsprechend zu
verfahren.
Ergebnisse: Wenn möglich sollten zunächst Kontrollgrößen berechnet werden. Dies
wären hier die Relativwinkel Δϕ20 , Δϕ30 der Gleichgewichtslage und die sich im sta-
tionären Zustand einstellenden Gelenkmomente. Die von SimMechanics verwendeten
Relativwinkel werden aus der Referenzlage gezählt, es gilt:
Die in Bild 7.7 eingeführten Scopes zeigen also unmittelbar die relativen Drehwinkel
Δϕ2 , Δϕ3 an.
Mit dem Schnittbild in Bild 7.8 lässt sich das statische Gleichgewicht bezüglich A und
B3 anschreiben:
∑ M(A) = 0 = k12 Δϕ2 − k23 Δϕ3 + g2 (m2 + 2m3 ) cos(ϕ20 + Δϕ2 )
∑ M(B3 ) = 0 = k23 Δϕ3 + m3 g3 cos(−ϕ30 + Δϕ2 + Δϕ3 ) .
Dies sind zwei nichtlineare algebraische Gleichungssysteme für Δϕ2 , Δϕ3 , die in
RobiDaten.m, vgl. auch Newton.pdf, aus [52] mit Hilfe des N EWTON-Verfah-
rens gelöst werden; es ergeben sich die Gleichgewichtslagen (Δϕ j → Δϕ j0 ) und die
Gelenkmomente zu:
Diese Ergebnisse lassen sich mit Robi.mdl aus [52] nach dem Einschwingvorgang
bestätigen.
Die um die zeitliche Winkelvorgabe des Endeffektors erweiterte Modellierung ist im
MDL-File RobiAkt [52] gezeigt.
Bild 7.10: Joint Stiction Actuators und Prismatic Block sowie zugehörige Dialog-Box
bzw. [1] zu entnehmen. Der Actuator ist im Zusammenhang mit einem Schub- bzw. Drehgelenk
(kein Kugelgelenk, spherical primitive) einzusetzen. Dementsprechend sind die Eingangsgrößen
Kräfte/Momente mit festzuschreibenden Einheiten (MKS- oder SI- Einheiten) in die zugehöri-
gen Dialog-Boxen, wie z. B. in Bild 7.10, einzutragen. Das Objekt des Actuators ist das C OU -
f
LOMBsche Reibgesetz nach Bild 7.11. Die Extremwerte der Haftung sind Fs , Fsr (s stiction, f
forward, r reverse) bezüglich der Vorwärts- und Rückwärtsbewegung. Fk (k kinetic) ist die vor-
zeichenbehaftete Gleitreibungsgröße.
Liegt die Relativgeschwindigkeit v innerhalb des Intervalls [−vth , +vth ] nach Bild 7.11, dann
wird numerisch zwischen Haften und Gleiten entschieden. Die verwendete Schaltstrategie ist der
Online-Hilfe zum Joint Stiction Actuator zu entnehmen. Da der Schwellwert (threshold) vth > 0
346 7 Physikalische Modelle unter Simulink
von der Integrationsschrittweite abhängig sein muss, ist gleichzeitig die Absolute Tolerance der
Integrierereinstellung zu beachten; die Einstellung auto ist somit nicht erlaubt. Anhaltswert: vth
sollte 10 mal größer als die Absolute Tolerance gewählt werden.
Zur Erläuterung der Beschaltung des Joint Stiction Actuators betrachten wir wieder den Ein-
massenschwinger nach Bild 7.3, wobei in den Kontaktpunkten F/B eine Reibkraft mit dem Gleit-
reibungskoeffizienten μ =0,8 und dem Haftreibungskoeffizienten μ0 =1,5 wirken soll. Die Einstel-
lungen der Dialog-Box in Bild 7.10 übernehmen wir. Die Eingangssignale des Actuator Block
• Kinetic Friction Fk = μ m g
• Forward Stiction Limit Fsf = −μ0 m g
• Reverse Stiction Limit Fsr = +μ0 m g
sind eindeutig. Die beiden restlichen Signale sind von der Modellierung der Maschine abhängig.
Deshalb erläutern wir zunächst den External Actuation Eingang Fext , worüber sich auch andere
als Reibkräfte/momente aufschalten lassen. Bezüglich unseres Beispiels können wir, wie gezeigt,
die Kraft aus der Anregung f (t) und der des Feder-Dämpfer-Elements über den Body Actuator
Block direkt auf den Body Block legen, so dass dann Fext = 0 ist. D. h. neben den Relativkräften
der Reibung werden keine weiteren vom Joint Stiction Actuator übergeben. Wir können aber
auch, ähnlich der 1. Alternativen in Bild 7.5 mit den dort aufgeführten Gründen, die Simulink-
Modellierung der (Relativ-) Kraft
Fext = −k x − d ẋ + f (t)
mit der Gleitreibungskraft (kinetic friction) Fk = −μmg sign(v) und der Haftreibungskraft (static
7.1 SimMechanics Tool 347
Fs = kx − f (t) . (7.2)
Bei komplexeren Systemen, z. B. mit mehreren Reibelementen, ist dies nicht mehr so einfach
zu durchschauen und auch nicht erstrebenswert. Um die Vorgehensweise zu verallgemeinern,
greifen wir deshalb auf errechnete Gelenkkräfte, die als Simulink-Signale am Joint Sensor Block
anliegen
Computed force/torque FC (eigene Bezeichnung)
Reaction force/torque FRe = ( fx , fy , fz )Re ,
zurück. Dabei ist FC hier die auf F gegenüber B bezogene Kraft in Richtung der prismatischen
Führung (prismatic axis). Sie wird vom Joint Stiction Actuator erzeugt. Für die beiden Modellie-
so dass insbesondere
Resultat: In jedem Falle lässt sich also die Haftreibungskraft (static friction) Fs = Ftest aus der
berechneten Kraft FC oder der entsprechenden Komponente der Reaktionskraft FRe (siehe Joint
Sensor) und der am Actuator angelegten externen Kraft Fext erzeugen; es gilt (7.5).
Beide vorgestellten Modellierungen sind in dem in Bild 7.14 dargestellten Blockdiagramm
348 7 Physikalische Modelle unter Simulink
Bild 7.13: SimMechanics-Modell des Einmassenschwingers mit Reibung bei direkter und indirekter
Kraftaufschaltung
Bild 7.15: Zeitverläufe: Position x(t), Geschwindigkeit v(t), Beschleunigung a(t) zum Reibschwinger
Übungsvorschlag: Das Modell des Einmassenschwingers ohne/mit Reibung ist durch ein am
Quader angebrachtes Pendel mit quadratischem Querschnitt (Kantenlänge: a p = 0,01 m), der
Pendellänge von l p = 0,5 m und der Pendelmasse m p = 0,5 kg zu ergänzen. Hilfestellung in:
M1_pendel_sm.mdl [52].
Neben den üblichen grafischen Darstellungen unter MATLAB/Simulink steht eine zusätzliche
Möglichkeit im SimMechanics Visualisierungs-Fenster nach Bild 7.16 zur Verfügung. Es kön-
nen auf der Basis der in der Body Dialog-Box festgeschriebenen Körperpunkte sowie der Masse-
350 7 Physikalische Modelle unter Simulink
eigenschaften die Körper der Maschine automatisch dargestellt werden. Dabei wird zwischen
statischer Darstellung, bei der sich die Auswirkungen z. B. der Maschinenparameter unmittelbar
beobachten lassen und der Animation dieser Darstellung während der Simulation unterschie-
den. Die Visualisierungsart wird im Rahmen der Maschinen-Konfiguration in der Machine En-
vironment und Simulation/Configuration Parameters Dialog-Box eingestellt: Z. B. erfolgt dies
zunächst in der Machine Environment Box, wo das Feld Visualization zu aktivieren ist. Über den
Button Open Configuration Parameters gelangt man zur zugehörigen Dialog-Box in der unter
SimMechanics/Visualization zwischen
ausgewählt werden kann. Im ersten Fall werden die Körper der Maschine statisch im SimMecha-
nics Visualisierungs-Fenster dargestellt, siehe Bild 7.16. D. h. Parameteränderungen oder hin-
zufügen von Körpern wird während der Modellierung angezeigt. Hierzu ist das Fenster durch
Update Diagram im Simulink-Edit-Menü (oder Ctrl+D) oder mit dem zugehörigen Button in der
Menüleiste des Modell- bzw. Visualisierungsfensters u. a. nach Bild 7.16 zu öffnen und nach
jeder Komponenten- und Parameteränderung zu aktualisieren. Diese Art der Vorgehensweise ist
eine gute Kontrolle der parallel laufenden Modellierung insbesondere bei komplexen Modellen.
Es können eine oder beide Visualisierungsmöglichkeiten gleichzeitig ausgewählt werden. Ent-
scheidet man sich nur für die Animation, dann wird das Visualisierungsfenster bei Simulations-
start automatisch geöffnet. Die Animation erhöht die Rechenzeit erheblich.
Weitere Visualisierungseigenschaften einschließlich des Simulationsstarts sind in der Menü-
Leiste des Visualisierungsfensters, wie in Bild 7.16, zu finden. Dazu gehört auch die Abbildungs-
art der Körper. Hier wird zwischen
• Equivalent ellipsoids basierend auf der Masseeigenschaft und der Schwerpunktslage (Träg-
heitsellipsoid)
• Convex hulls basierend auf den Körperkoordinaten (CSs) – vgl. Body Dialog-Box
unterschieden. Die Darstellung des Trägheitsellipsoids mit dem Hauptträgheitsmoment des Kör-
pers sowie den Trägheitsradien als Hauptachsen ist nur bei angenähert gleichen Größenord-
nungen der Trägheitsmomente aller Körper der Maschine übersichtlich. Unter Convex hulls
Abbildungen werden die vorgegebenen körperfesten Punkte (CS1, CS2,...) als 2D- bzw. 3D-
Abbildungen – Flächen, Volumen – markiert und untereinander verbunden. Dadurch entstehen
ausgefüllte Flächenmodelle, die alle Körperpunkte umschließen. In Bild 7.16 ist das Robotermo-
dell aus Bild 7.6 in der Ellipsoid-Abbildungen dargestellt. Zusätzlich lassen sich u. a. Schwer-
punkte und Koordinatensysteme ein- und ausblenden.
Darüber hinaus kann die Animation im AVI-Format abgespeichert und somit von MATLAB
unabhängig vorgeführt werden. Eine realistischere Wiedergabe der Körper ist mit der Virtual
Reality Toolbox erreichbar. Beliebige virtuelle Welten können geschaffen werden.
stellenden Parameter eingehen. Einen vollständigeren Überblick mit den umgesetzten mathema-
tischen Methoden ist in [68] und in der dort aufgeführten Literatur zu finden.
Einige Probleme und Erfahrungen haben wir bereits in Abschn. 5.4 kennen gelernt. Danach er-
gaben sich für ein mechanisches Mehrkörpermodell differenzial-algebraische Gleichungen vom
Index 3, die Bindungsgleichungen bzw. Nebenbedingungen beruhen dabei auf Lageebene. Wei-
terhin wurde dort erwähnt, dass unter Simulink außer gewöhnlichen Differenzialgleichungen nur
eine spezielle Klasse differenzial-algebraischer Gleichungen vom Index 1 und somit Mehrkör-
permodelle in der Regel nicht direkt lösbar sind. Die erforderliche Index-Reduktion erfolgt nach
den in Abschn. 5.4 angegeben Methoden durch Differenziation der Bindungsgleichungen nach
der Zeit. Der damit eingehandelte Drift-Effekt und eine diesbezügliche Stabilisierung spielen
auch hier eine wesentliche Rolle.
Ein mechanisches Mehrkörpermodell besteht aus mehreren massebehafteten starren Körpern,
die durch masselose Kraftelemente (Feder, Dämpfer oder Stellmotoren) und durch masselose
starre Verbindungen (Gelenke, Koppelstangen) miteinander verbunden sind. Grundsätzlich wird
zwischen zwei topologischen Typen unterschieden und zwar der Baumstruktur, einem System
aus offenen Schleifen und solchen mit geschlossenen Schleifen, vgl. [6], [15], [29], [68].
Unabhängig von der Herleitung können beide Fälle u. a. nach [68] durch die Bewegungsglei-
chung in Deskriptorform
q̇q = H̃
Hv
T
M (qq)v̇v = f (t, q , v ) + H̃
H (qq)G λ
GT (t, q )λ (7.6)
0 = g (t, q )
formuliert werden, siehe auch Abschn. 5.4. Dabei ist der kinematische Zusammenhang zwischen
der zeitlichen Ableitung der Struktur- bzw. Konfigurationsvariablen q̇q und der Geschwindigkeits-
variablen v durch (7.6)1 hergestellt. In vielen Anwendungen ist H̃H die Einheitsmatrix, so dass
(7.6)1 eine Identität darstellt. Dies kennen wir von der Erzeugung der Standardform zur Inte-
gration gewöhnlicher Differenzialgleichungen. Die Differenzialgleichung (7.6)2 beschreibt die
Dynamik des Systems. M ist die positiv-definite Massenmatrix, f der Vektor der Zentrifugal-
und Coriolis-Kräfte/Momente einschließlich der äußeren Anregungen. Der letzte Term auf der
rechten Seite von (7.6)2 enthält die Anteile der Reaktionskräfte infolge der Kinematik. λ re-
präsentiert den Vektor der L AGRANGEschen Multiplikatoren. Schließlich beschreiben (7.6)3 die
kinematischen Bindungen, die die Bewegung einschränken. Die explizite Zeitabhängigkeit von
g erlaubt z. B. die Einarbeitung zeitabhängiger Antriebselemente.
Die Struktur insbesondere von M und g hängen im hohen Maße von der Koordinatenwahl ab.
Viele kommerzielle Software-Pakete für Mehrkörpersysteme (u. a. ADAMS) benutzen eine For-
mulierung in Absolutkoordinaten. D. h. jeder Körper des Systems hat zunächst sechs Freiheitsgra-
de. Die Einschränkung der Bewegung, z. B. infolge von Gelenken, wird durch die zugehörigen
Bindungsgleichungen festgeschrieben. Das Ergebnis ist ein System mit vielen Strukturvariablen.
Redundanzen in den Koordinaten werden durch einfach aufgebaute Bindungsgleichungen be-
rücksichtigt. Man erhält ein großes System von differenzial-algebraischen Gleichungen mit einer
spärlich besetzten Massenmatrix (Sparse-Matrix). Diese Sparse-Besetzung und der einheitliche
Aufbau der Bewegungsgleichung wird softwareseitig konsequent ausgenutzt. In SimMechanics
wird diese Strategie nicht verfolgt. Man benutzt eine Formulierung mit Relativkoordinaten. Da-
352 7 Physikalische Modelle unter Simulink
Bild 7.17: Modell zum Reibschwinger aus Abschn. 5.6.5.3 mit zwei Reibkontakten
Numerische Ergebnisse
Wir führen Simulationen zu den Beispielen 3 und 4 mit den Parametern nach Tabelle 5.9 durch.
Für Beispiel 3 betrachten wir ausgehend von den Anfangswerten
den Einschwingvorgang für 0 ≤ t ≤ 16. Die Ergebnisse sind in Bild 7.18 dargestellt. Gegenüber
dem Modell mit einem Reibkontakt nach Abschn. 5.6.5 ist die jetzige Situation wesentlich viel-
fältiger. Es existieren in kurzen Zeitintervallen mehrere Ereignispunkte, welche insbesondere in
den Beschleunigungsverläufen zum Ausdruck kommen. Dem Beispiel 4 liegen die Anfangswerte
4 40
m2 m2
2 20
2
m1
xpp , xpp
xp1, xp2
0 0
1
−2 m1 −20
−4 −40
−0.4 −0.2 0 0.2 0.4 0.6 −4 −2 0 2 4
x1, x2 xp1, xp2
die einer periodischen Schwingung genügen, zugrunde. Die Schwingungen mit der Perioden-
dauer T = 1 s sind als Phasenkurven ẋ j (x j ) sowie ẍ j (ẋ j ) in Bild 7.19 dargestellt. Einerseits
treten die bereits erwähnten Knicke in den Geschwindigkeitsverläufen, andererseits die Sprünge
in den Beschleunigungsverläufen auf. Die Ergebnisse entsprechen denen aus Abschn. 5.6.5.3 mit
reib_34.m.
8 Projekte
Anhand von acht Projekten ausgewählter Modelle wollen wir die bisherigen Grundlagen und
deren Anwendung vertiefen. Jedes Projekt beginnt mit einer Aufgabenstellung, der einige mo-
dellspezifische Aufbereitungen folgen. Darauf aufbauend wird es möglich, einzelne/alle Projekt-
punkte selbstständig zu erarbeiten oder dem hier eingeschlagenen Lösungsweg zu folgen. Dieser
beinhaltet die erforderlichen theoretischen Grundlagen sowie wesentliche programmtechnische
Umsetzungen. Aus Platzgründen beschränken wir uns bei drei Projekten hier auf die Vorstellung
des Projektes und auf die Aufgabenstellung. Die vollständigen Ausarbeitungen sind bei Interes-
se in der Programmsammlung zu Kap. 8 unter www.viewegteubner.de auf der Homepage
zum Buch [52] zu finden. Aus gleichem Grund können nur einzelne Programmausschnitte abge-
druckt werden, die vollständigen Programme stehen an gleicher Stelle wie oben zur Verfügung.
Damit können alle Berechnungen nachempfunden werden. Eigenständige Parameterstudien oh-
ne/mit Änderungen/Verbesserungen sind durchführbar. Einzelne Programmteile lassen sich in
eigene Projekte übernehmen oder regen zur Programmierung vorliegender Probleme an.
Die Zuordnung der Programme und schlagwortartige Inhaltsangaben werden stets in den Kopf-
zeilen zum jeweiligen Projekt angegeben. Damit kann gezielt speziellem Interesse nachgegangen
werden.
Für das Modell des magnetisch gelagerten Rotors mit permanentmagnetischer Radiallagerung
nach Bild 8.1 soll eine aktive Stabilisierung der Axialbewegung entworfen und das Schwingungs-
verhalten insbesondere beim Abhebevorgang aus der oberen bzw. unteren Lagerbegrenzung unter
Simulink simuliert werden. Auf der Basis der in Abschn. 8.1.1-Abschn. 8.1.4 vorgestellten Sys-
tembeschreibung und Modellierung zur Axialbewegung mit elastischer Lagerbegrenzung sowie
der aktiven Ablenkspule mit idealem Verstärker sind folgende Punkte zu bearbeiten:
1. Aufbauend auf dem vorgestellten Streckenmodell ist ein Zustandsregler-Entwurf, d. h. mit
vollständiger Rückführung von y = (y, ẏ, i)T mittels Polvorgabe und LQ-Algorithmus vor-
zunehmen. Für die Systemparameter und die Reglerauslegung ist ein M-File anzulegen.
2. Entwurf des Simulink-Modells bezüglich des Rotors und des Spulensystems sowie des Reg-
lers in Form eines Subsystems. Simulieren Sie Abhebevorgänge, wenn der stehende Rotor
sich in der unteren bzw. oberen Lagerbegrenzung befindet. Anhaltswert: 0 ≤ t ≤ 100 ms.
3. Reglererweiterung: Berücksichtigen Sie einen I-Anteils mittels Polvorgabe, wobei die Ei-
genwerte aus 1. enthalten sein sollen. Der I-Anteil soll sich einerseits auf die Auslenkung y,
andererseits auf den Strom i beziehen.
4. Erstellen Sie auf der Basis des zuvor erstellten Simulink-Modells eines mit Reglerumschal-
tung, so dass zunächst ein Abhebevorgang mit einem Regler, der den I-Anteil bezüglich
y enthält, erfolgen kann und nach 125 ms auf einen Regler, der den I-Anteil bezüglich
des Stromes i enthält, umgeschaltet wird. Diese Umschaltung ist einerseits mit dem Switch
Block, andererseits mit schaltbaren Subsystem-Blöcken zu realisieren.
5. Entwurf eines Reglers mit Approximation der zeitlichen Ableitung der Rotorauslenkung y.
Masse m 4,6 kg
O HMscher Widerstand R 3,4 Ohm
Induktivität L 26,875 mH
Strom-Kraftkoeffizient kM 32,23 N/A
Proportionalverstärkung der Leistungsstufe kI 6,255
Permanentmagnetsteifigkeit k pm 1,25 106 N/m
Lagerkontaktsteifigkeit kw 43,77 106 N/m
Lagerspiel ymax 124 10−6 m
8.1.1 Systembeschreibung
Zunächst stellen wir das Lagerprinzip eines radial permanentmagnetisch (passiv) und axial elek-
tromagnetisch (aktiv) gelagerten Rotors nach Bild 8.1 stichwortartig vor.
Wählen wir für die gegenüberliegenden Permanentmagnetringe des oberen und unteren La-
gers ungleichnamige Magnetpole, dann entsteht eine anziehende Axialkraft; der Rotor legt sich
je nach anfänglicher axialer Störung oben oder unten an die Lagerbegrenzung an. Dabei nimmt
die anziehende Kraft mit enger werdendem Spalt zu. Im Gegensatz zu dieser destabilisierenden
Kraft kommt es bei einer radialen Rotorauslenkung zu einer stabilisierenden Kraftkomponente
(passives stabiles Gleichgewicht). In Richtung des Flusses bedarf es also einer aktiven Stabilisie-
rung der Axialbewegung.
8.1 Permanentmagnet gelagerter Rotor 357
Turbomolekularpumpe
(Schnittdarstellung)
Die aktive Stabilisierung erreicht man dadurch, dass dem Fluss der Permanentmagnete ein in
Abhängigkeit von der Rotorauslenkung y und dem Spulenstrom i geregelter Fluss eines elektri-
schen Spulensystems überlagert wird, so dass die in Flussrichtung wirkende Kraft mit zunehmen-
der Spaltweite nicht mehr abnimmt sondern ansteigt. Um dies zu erreichen, sind die obere und
untere Spule in Bild 8.1 hintereinander geschaltet, so dass in Abhängigkeit von der Stromrichtung
z. B. im oberen Lager eine Verstärkung und im unteren Lager eine Abschwächung der Flussdich-
te und somit eine resultierende Kraft in Richtung von y erzeugt wird. Bei entgegengesetztem
Stromfluss dreht sich die Kraftrichtung um. Eine Stabilisierung erreichen wir somit durch eine
gezielte Ansteuerung der Schalter des Leistungsteils in Bild 8.1. Der Lastkreis, d. h. die Spulen,
werden abwechselnd an die Spannung uM = ±UM gelegt. Der Mittelwert der Spannung ūM wird
durch das Verhältnis der Einschaltdauer der Schalterpaare, d. h. das Pulsweiten-Verhältnis der
am Lastkreis liegenden Rechteckspannung, gesteuert. Dies kann mit Hardware-PWMs sowie mit
Mikrokontrollern oder speziellen Signalprozessoren realisiert werden.
Für die Magnetspulen wählen wir das einfache Modell nach Bild 8.4 aus O HMschem Widerstand
R sowie weg- und frequenzunabhängiger Induktivität L (L=const.). Die axialen Kräfte der sym-
metrischen Rotoraufhängung lassen sich aus der Differenz der Felddrücke an den Rotorenden
berechnen. Damit lauten die Bewegungsgleichungen des Rotors vom Gewicht mg sowie des Spu-
lenmodells
358 8 Projekte
Die stromdurchflossenen Spulen erzeugen die auf den Rotor wirkende Kraft kM i, die Permanent-
magnete die Kraft k pm y nach (8.1). Unberücksichtigt blieben bei der Modellierung: Kopplung
zwischen Radial- und Axialbewegung, weg- und frequenzabhängige Spuleninduktivität, Spulen-
kapazität, Nichtlinearität der Permanentmagnete, Dynamik der Sensorkreise, Filter zur Signal-
glättung (u. a. RC-Filter für uM -Glättung) usw.
Bei der zweiten Regelstrategie, dem Ausgangsgrößenregler nach Bild 8.5 unten, erfolgt die
Stabilisierung über ein einziges Stellgesetz u. Es kann die Form eines PD, PID oder Zustands-
reglers mit/ohne I-Anteil haben. Dabei gehen wir davon aus, dass die zeitliche Ableitung von y
bzw. ys durch einen Differenzierer oder Beobachter rekonstruiert oder sogar gemessen wird. Man
spricht von einem spannungsgesteuerten System.
Wir werden hier den zweiten Reglertyp zugrunde legen. Darüber hinaus ersetzen wir die Leis-
tungsstufe durch einen idealen Leistungverstärker. D. h. wir ersetzen den entsprechenden Block
in Bild 8.5 unten durch ein Proportionalglied mit dem Proportionalfaktor kI , so dass
uM = kI u . (8.3)
Mit diesen idealisierten Modellkomponenten wollen wir mittels Zustandsregler ohne/mit I-Anteil
(auch kurz nach seinem Verhalten PD/PID-Regler genannt) eine aktive axiale Rotorstabilisierung
erreichen. Dabei sind drei ausgezeichnete Betriebszustände mit den stationären Gleichgewichts-
zuständen für t → ∞
y(∞)
= 0 ∧ i(∞)
= 0, y(∞) → 0 ∧ i(∞)
= 0 bzw. y(∞)
= 0 ∧ i(∞) → 0
360 8 Projekte
1. y(∞) ∧ i(∞)
= 0 : u = −k p y − kd ẏ − k pi i
$
2. y(∞) → 0 : uy = −k p y − kd ẏ − ki y dt − k pi i (8.4)
$
3. i(∞) → 0 : ui = −k p y − kd ẏ − kii i dt − k pi i.
8.1.5 Reglerentwürfe
8.1.5.1 Zustandsregler
oder kurz
żz = A z +B
B u +V
Vv
(8.7)
y = C z.
Einfachheitshalber setzen wir weiterhin in (8.6) die Sensorverstärkungen ksy , ksi zu 1. Das Stell-
gesetz lautet:
u = −K
K zz, (8.8)
wobei der Reglerentwurf sich auf die ungestörte (v = 0) Bewegungsgleichung (8.7) bezieht. Voll-
ständige Steuer- und Beobachtbarkeit folgt aus der Anschauung. Einen numerischen Nachweis
erhalten wir über den Rang der Steuerbarkeitsmatrix Co bzw. Beobachtbarkeitsmatrix Ob
Co=rank(ctrb(A,B)); Ob=rank(obsv(A,C)); MATLAB-Aufruf.
Aus der Vielzahl der Regler-Entwurfsmethoden wollen wir drei aus der Control System Tool-
box heranziehen, die auf zwei unterschiedlichen Bewertungen basieren. Auf die Algorithmen
8.1 Permanentmagnet gelagerter Rotor 361
können wir dabei nicht näher eingehen; vgl. [1], [29], [39], [40]. Wir beschränken uns auf die
Function-Aufrufe:
• Polvorgabe (Polzuweisung, pole placement):
K = place(A, B, p)
Die Routine aus [34] errechnet die Regler-Matrix K für (8.8), so dass die Eigenwerte von
(A
A − BK
BK) denen von p entsprechen. In Bezug auf einen erforderlichen P- und D-Anteil sind
die Eigenwerte in p zu wählen; z. B.
√
p = (−520 + i 20; −520 − i 20; −750)T , i = −1 .
Alternativ kann für Single-Input-Systeme der Algorithmus von ACKERMANN [1] genutzt
werden
K = acker(A, B, p)
% II) Polvorgabe
p=[-520+i*20; -520-i*20; -750]; % Pollagen
[Kp,prec,message] = place(A,B,p) % Algorithm. nach KAUTSKY
Ka=acker(A,B,E) % Algorithm. nach Ackermann
Z. B. liefert der lqr-Algorithmus die Reglermatrix
K = [ -4.2670e+005 -8.1530e+002 7.1625e+000 ]
362 8 Projekte
Die Koeffizienten der Integralanteile ki , kii in (8.4) können manuell eingestellt werden, wenn
man die dadurch hervorgerufenen Eigenwertverschiebungen kontrolliert, z. B. durch das Ein-
schwingungsverhalten mittels Simulation. Anhaltswerte: ki = −107 , kii = −500, vgl. Bild 8.7.
Darüber hinaus ist es möglich, mit Hilfe erweiterter Systemmatrizen neue Reglerentwürfe u. a.
per Polvorgabe durchzuführen, wobei die Eigenwerte des PD-Verhaltens übernommen werden.
Dies wollen wir für die Ermittlung des Integralanteils (ki ) bezüglich y, so dass y(∞) → 0, zeigen.
Zunächst ersetzen wir den I-Anteil im Stellgesetz durch
$
Q= y dt , so dass Q̇ = y
mit dem Anfangswert zur Ruhelage des Rotors (oberer bzw. unterer Lageranschlag) aus
! kp
uy (0) = −k p y(0) − ki Q(0) = 0 → Q(0) = − y(0).
ki
Damit liegt für die erweiterte Reglerauslegung ein Differenzialgleichungssystem 4. Ordnung
1
mÿ + f (y) = −kM i − mg, y(0) = (kw ymax sign(y0 ) − mg) , ẏ(0) = 0
kw − k pm
L(i)˙+ Ri = kI uy , i(0) = 0 (8.9)
kp
Q̇ = y, Q(0) = − y0
ki
und das Stellgesetz
uy = −k p y − kd ẏ − ki Q − k pi i, uy (0) = 0 (8.10)
żzy = A y z y +B
By uy +V
Vy v y(∞) → 0
(8.11)
uy = −K K y zy
mit
A 0 B V
Ay = , By = , Vy = , A , B , V nach (8.7)
1 0 0 0 0 0
K y = [ K , ki ] , z Ty = z T , Q
sowie dem Anfangswertvektor
wobei y(0) = −(mg ± kw ymax )/(kw − k pm ) mit (+) für den Start aus dem unteren und (−) für den
aus dem oberen Lageranschlag eines stehenden Rotorsystems. Den Vektor der bisher angesetzten
8.1 Permanentmagnet gelagerter Rotor 363
p := [ppT , −150]T .
Mit (8.11) können wir dann den neuen Reglerentwurf durchführen. Die ursprünglich vorgegebe-
nen Pole p (der rechten Seite) bleiben Teil des geschlossenen Kreises.
Entsprechendes gilt für den stromlosen Betrieb mit Qi = i dt
żzi = A i z i +BBi ui +V
Vi v i(∞) → 0
ui = −K K i zi, ui (0) = 0
mit
A 0 B V
Ai = , Bi = , Vi = , A , B , V nach (8.7)
0 0 1 0 0 0
K i = [ K , kii ] , zTi = zT , Qi .
Aufgrund der Anfangswerte i(0) = 0 und Qi (0) = −k p /kii y(0) kann mit ui der Rotor nicht
aus der Ruhelage in die Lage y(∞)
= 0, i(∞) → 0 gebracht werden. Man startet deshalb z. B. mit
einem Zustandsregler und schaltet nach dem Abheben den I-Anteil hinzu.
Zweckmäßigerweise fassen wir die Parametrierung sowie den Reglerentwurf in dem M-File
Mag_RotD.m zusammen. Dieses ist in der Programmsammlung [52] zu finden, wir drucken
es hier nicht ab. Über den manuell einzustellenden Steuerparameter ou (oben/unten) sind die An-
fangswerte für einen Start aus der oberen bzw. unteren Lagerbegrenzung auszuwählen. Das File
Mag_RotD.m ist vor dem Simulationsstart auszuführen. Für eine grafische Darstellung unter
MATLAB dient das M-File Mag_RotG.m. Es ist manuell bzw. automatisch nach dem Simulati-
onsvorgang zu starten.
8.1.7 Simulink-Modelle
Die jeweiligen Regler formulieren wir als Subsysteme mit zugehörigen Parameterfenstern. Die
Simulink-Modelle enthalten dann die Modellierung der Strecke nach (8.2) mit (8.3) , vgl. Bild 8.9,
sowie das jeweilige Subsystem eines der Reglerstrategien. In Bild 8.9 ist ein Zustandsregler (kurz:
PD-Regler) realisiert, vgl. Rot_Magpd.mdl. Für einen Betrieb mit Reglerumschaltung sind
die beiden Entwürfe Mag_Rotpidi.mdl und Mag_Rotpidsub.mdl vorgesehen. Im ersten
Modell wird die Reglerumschaltung mit dem Switch Block, vgl. Bild 8.10, erreicht, im zwei-
ten Modell wird mit schaltbaren Subsystemen gearbeitet, vgl. [52]. Ist die Geschwindigkeit ẏ
nicht messbar, dann kann versucht werden, diese durch numerisches Differenzieren zu berück-
sichtigen. Dies zeigen die Simulink-Modelle Mag_Rotpidya.mdl und Mag_pidyb.mdl der
Programmsammlung [52].
364 8 Projekte
8.1.8 Simulationsergebnisse
Bild 8.6 zeigt zwei Abhebevorgänge mittels PD-Regler jeweils aus der oberen bzw. unteren La-
gerbegrenzung. In beiden Fällen löst sich der Rotor unmittelbar nach Stellgrößenaufschaltung.
Dabei ist der Stromanstieg beträchtlich. Der Strom steigt in 1 ms auf nahezu 5 A und stellt sich
im eingeschwungenen Zustand auf ≈ -5 A ein. Die Rotorendlage y(∞) befindet sich in unmittel-
barer Nähe der Lagerbegrenzung. Diese ungünstige Endlage und der damit zusammenhängende
hohe Dauerstrom von -5 A machen diesen Entwurf zunichte. Mit einem höheren P-Anteil (höhe-
re Steifigkeit) ließe sich der stationäre Zustand verbessern. Nachteilig wird sich aber der noch
höhere Stromanstieg beim Abhebevorgang auswirken. Einerseits durch die Taktung der Endstufe
und andererseits durch die realen Komponenten, u. a. der Spule, ist dies nicht mehr zu erreichen.
Die Auswirkung eines zusätzlichen I-Anteils ist in Bild 8.7 dargestellt, wobei sich dieser zu-
nächst auf y und nach 125 ms auf i bezieht. Dadurch behält der Rotor in der Abhebephase länger
Lagerbegrenzungskontakt, der Strom steigt in dieser Phase linear mit der Zeit bis auf den Abhe-
bestrom an. Daran schließt sich der Einschwingvorgang auf die stationären Werte mit y → 0 an.
Zum Zeitpunkt t = 125 ms wird auf die Stellgröße eines Regelgesetzes mit Kompensation des
Stromes umgeschaltet, wobei die Anfangswerte der Stellgröße nicht an die vorangegangene Situa-
tion angepasst wurden. Dadurch entsteht ein deutliches Überschwingen bevor der neue stationäre
Zustand mit i → 0 angenommen wird. Der Rotor wird also unabhängig von einer statischen Last
nahezu leistungsfrei in seiner Position gehalten. Frage: In welche Richtung y bewegt sich der
Rotor, wenn in Richtung der Gravitationskraft eine zusätzliche konstante Last aufgebracht wird?
Bild 8.6: Abhebeverhalten aus oberer und unterer Lage mit PD-Regler
Bild 8.7: Abhebeverhalten aus oberer und unterer Lage sowie Umschaltung auf stromlosen Zustand mit
PID-Regler
Der unwuchtige Motor nach Bild 8.11 läuft mit konstanter Winkelgeschwindigkeit Ω und regt
das Fundament zu Schwingungen an. Über den Stellzylinder (u(t)) sollen diese Vertikal-Schwin-
gungen kompensiert werden. Die Fundamentbewegungen x und ẋ werden gemessen. Für die akti-
ve Kompensation – vgl. [51], [50] – dieser speziellen Störung soll ein Störgrößenbeobachter z. B.
nach [39], [40], [42] eingesetzt werden. Die notwendigen Grundlagen werden kurz dargestellt,
so dass auf dieser Basis folgende Punkte erarbeitet werden können.
1. Erstellen Sie für die Übergabe in die Simulink-Umgebung ein Parameter-File (M-File) mit
den wesentlichen Parametern sowie der Berechnung zum Beobachterentwurf.
2. Für das unbeeinflusste System (u(t) ≡ 0, Strecke) ist das Simulink-Modell zu entwerfen und
zu testen.
3. In das gleiche Modellfenster ist der Beobachterentwurf als Subsystem einzubringen und zu
testen.
4. Mit einem Switch Block soll die Störgrößenkompensation über u(t) nach ts =0,2 s aufge-
schaltet werden.
5. Formulieren Sie die Beobachtergleichung einschließlich der Schaltbedingungen in einer M-
File S-Function und erstellen Sie das zugehörige Simulink-Modell.
6. Da Strecke und Beobachter ein lineares System mit konstanten Koeffizienten darstellt, ist ei-
366 8 Projekte
Parameter:
m := m + mu = 100 kg
k = 36 106 N/m
d =10−4 k N s /m
emu = 0,5 m kg
ku
kT = = 20 1/kg
m
Ω = 300 rad/s
q0 12 104 N
ne direkte Lösung des Problems mit den Mitteln der linearen Algebra aus Kapitel 3 möglich.
Bringen Sie die zugehörigen Bewegungsgleichungen in eine der Vorgehensweise angepass-
ten Form. Formulieren Sie die Lösungsansätze und die Lösungen. Erstellen Sie für diese
Vorgehensweise ein M-File. Vergleichen Sie die Ergebnisse mit denen aus der Simulink-
Simulation.
7. Diskutieren Sie den Kompensationsvorgang in Verbindung mit den rekonstruierten Sig-
nalen. Beurteilen Sie die Beobachterdynamik und den Einfluss der Systemparameter k, d.
Überprüfen Sie die Parameterempfindlichkeit des Beobachterentwurfs, indem Sie die Fun-
damentfedersteifigkeit k bei der Beobachterauslegung als fehlerbehaftet ansehen.
8. Aufbauend auf der analytischen Vorgehensweise ist eine zusätzliche konstante Störung q0
zuzulassen und mittels eines erweiterten Störgrößenbeobachters ebenfalls zu kompensieren.
d k ku mu 2
2δ = ; ω02 = ; kT = ; q= eΩ .
m m m m
Für den Beobachterentwurf muss die Störung w = q cos (Ωt + Φ) durch eine gewöhnliche Dif-
ferenzialgleichung modellierbar sein, d. h. bezogen auf die vorliegende Störung gilt
ẅ + Ω 2 w = 0.
Durch Umordnen bzw. Transformation gewinnen wir die für einen Beobachterentwurf allgemein
gültige Darstellung
w = Pw +Q
ẇ Qy +D
Du(t)
ẏy = Rw +SSy +E
E u(t), y = [y1 , y2 ]T = [x, ẋ]T ,
368 8 Projekte
mechanisches Modell
ẏ1 0 0 w1 0 1 y1 0
= + + u(t)
ẏ2 1 0 w2 −ω02 −2δ y2 kT
oder kurz
w = Pw ,
ẇ w = [w1 , w2 ]T = [w, ẇ]T
(8.13)
ẏy = Rw +SSy +E
E u(t), y = [y1 , y2 ]T = [x, ẋ]T .
angesetzt. Dies ist ein dynamisches Modell, für welches zunächst die unbekannten Matrizen L ,
M , N , H und damit die Dynamik zu ermitteln sind. Hierzu formulieren wir den Fehler e , der aus
w Störgröße: e = w − ŵ
der tatsächlichen w und rekonstruierten ŵ w gebildet wird. Die rekonstruierte
w strebt gegen die tatsächliche w , wenn e → 0 möglichst schnell abklingt. Um die
Störgröße ŵ
Dynamik von e zu beurteilen, formulieren wir die Fehlerdifferenzialgleichung und setzen ẇ w˙
w, ŵ
aus (8.13), (8.14) ein:
ėe = ẇ
w − ŵ
w˙
= Le + (PP −L
L −HR
HR w + (LH
HR)w LH −M
M −HS
HS)yy − (N
HS N +HE
HE
HE)u(t).
Forderung nach asymptotischer Stabilität des Fehlers e führt auf die beiden Bedingungen:
1. ėe = Le
Le, e ist asymptotisch stabil, wenn für die Realteile der Eigenwerte ℜ(λk (L
L)) < 0 gilt
2. P −L
L −HR
HR = 0 → L = P −H
HR
LH −MM −H
HS = 0 → M = LH −H HS
N +H
HE = 0 → N = −HHE .
Hierin sind P , R , S , E aus (8.13) bekannt, H , L , M , N unbekannt. Sie müssen die obigen Be-
dingungen erfüllen. Zunächst betrachten wir die Dynamik der Fehlergleichung, womit H und L
ermittelbar sind:
- Koeffizientenmatrix L = P −HR
HR
0 1 h11 h12 0 0 −h12 1
L= − =
−Ω 2 0 h21 h22 1 0 −h22 − Ω 2 0
8.2 Störgrößenkompensation harmonischer und konstanter Störungen 369
Zur Festlegung der Dynamik von e geben wir die Pole (Eigenwerte) λ1 , λ2 vor, sie genügen dem
Polynom.
Alternativer Weg zur Ermittlung von H : Wir betrachten das zur Fehlergleichung ėe = Le adjun-
gierte Problem
ėe = L Te = P Te + R T (−H
H Te )
!
= Ae + Bu
Bu, u = −Ke
Ke = − H Te Standardform
und haben damit ein Regelproblem zu lösen. Zur Bestimmung der Reglermatrix H T stehen mit
der Control System Toolbox mehrere Algorithmen zur Verfügung. Wir wählen wieder eine Pol-
vorgabe, z. B. mit zwei reellen Polen
Hierfür existieren die beiden Function acker.m und place.m. Die erste Function setzt Syste-
me mit einem Eingang voraus, so dass wir mit place.m arbeiten müssen; MATLAB-Aufruf:
H = place(P’, R’, p)’; P T → P’, R T → R’, H → H .
Mit H ist auch L und damit N, M der 2. Bedingung bekannt. Der Störgrößenbeobachter ist ausge-
legt. Die Störgrößenaufschaltung erfolgt schließlich mit
1
u(t) = − ŵ1 (t) .
kT
8.2.2 Parameterfile und Simulink-Modell
Zu 1.-4.: Die Strecke und der Beobachter sind lineare Systeme. Wir wollen die Strecke mit zwei
Integrierer modellieren. Für den Beobachter (8.14)1 wählen wir einen State Space Block. Hierbei
gehen wir von der angepassten Beobachtergleichung
y v = C v v̂v +D
Dv u v (t) Block y=Cx+Du
u v (t) = My +N
N u(t)
370 8 Projekte
aus. Damit liegt am Ausgang des State Space Blocks der vollständige Beobachtervektor y v = v̂v
an. Die rekonstruierte Größe ŵ1 folgt aus
was aber nicht den Schluss zulässt, dass nur die Messgröße ẋ benötigt wird; beachte My
My. Na-
türlich kann die Rekonstruktion (Schätzung) der Auslenkung x und/oder der Geschwindigkeit ẋ
eingearbeitet werden. Eine diesbezügliche Messung wird damit überflüssig.
Modellgleichungen: Die zur Modellierung benötigten Gleichungen stellen wir zusammen:
- Strecke mit Beeinflussung nach (8.12)
1
ẍ + 2δ ẋ + ω02 x = kT u(t) + q cos (Ωt + Φ), u(t) = − ŵ1 (t) (8.17)
kT
- Beobachter nach (8.14)
Ins Parameter-File arbeiten wir neben den Systemparametern der Strecke auch die Polvorgabe
zum Beobachterentwurf sowie die Berechnung der Systemmatrizen ein; vgl. St_Beob_sD.m
in [52]. Da die Parameter vor dem Simulationsstart im Workspace stehen müssen, muss das File
zuvor manuell oder automatisch durch den Eintrag des File-Namens unter dem File-Button →
Modell Properties, Callbacks, Feld: Model initialization function gestar-
tet werden. Die grafische Ausgabe findet teilweise auch unter MATLAB statt. Hierzu dient das
M-File St_Beob_sP.m. Zur automatischen Ausführung tragen wir es, wie das Parameterfile,
jetzt aber in das Feld: Simulation stop function ein.
Das Simulink-Modell St_Beob_s.mdl [52] einschließlich des Beobachter-Subsystems mit
dem Schalter zur Aufschaltung der rekonstruierten Störung kT u(t) = −ŵ1 ist in Bild 8.12 darge-
stellt.
beiden Zeitabschnitten sind die freien und erzwungenen Schwingungen zu ermitteln und zu über-
lagern. Sie enthalten Integrationskonstanten, die einerseits mit vorgegebenen Anfangswerten und
andererseits mit Übergangsbedingungen in ts , d. h. der Endzustand zum Schaltzeitpunkt ts ist An-
fangszustand für den zweiten Zeitabschnitt, zu ermitteln sind. Schließlich sind die Lösungen für
diskrete Zeitpunkte auszuwerten. Die Vorgehensweise ist ein typischer Vertreter der aus der Li-
teratur bekannten Anstückelmethoden [17]. Insbesondere wird gezeigt, wie man durch systema-
tische Vektorisierung einen sehr übersichtlichen, kurzen und mit der analytischen Formulierung
vergleichbaren Code erzeugen kann.
Basis für diese Vorgehensweise ist eine zweckmäßige Zustandsdarstellung für das Gesamtmo-
dell. Das Zustandsmodell der Strecke (8.17) bilden wir mit dem Zustandsvektor y :
mit
0 1 0 0
Am = ; bu = ; bm = .
−ω02 −2δ kT q
T
Die beiden ersten Terme auf der rechten Seite können wir noch zu A y T , v̂vT zusammenfassen.
Für den Cos-Term der Anregung führen wir die komplexe Relation
1 √
cos (Ωt + Φ) = (ei(Ωt+Φ) + e−i(Ωt+Φ) ), i= −1
2
ein, siehe Abschn. 3.3.2.2, so dass das Gesamtsystem folgende Form erhält:
1 T T
ẋx = Ax + b (eiΦ eiΩt + e−iΦ e−iΩt ), x = y T , v̂vT , b = b Tm , 0 T
2
oder in der für die weitere Betrachtung zweckmäßigen Form
T
1 T iΦ T
ẋx = Ax + ĥh eiΩt + ĥh e−iΩt , ĥh = b e ,0 , (8.19)
2 m
ĥh ist der zu ĥh konjugiert komplexe Vektor. Die letzte Gleichung gilt für beide Zeitabschnitte, wir
formulieren deshalb zunächst die allgemeine Lösung, sie setzt sich aus der freien und erzwunge-
nen Bewegung zusammen, und passen sie später an die beiden Zeitabschnitte an.
ẋxh = Ax h
8.2 Störgrößenkompensation harmonischer und konstanter Störungen 373
zugrunde. Der Ansatz x h = v eλt führt auf das Eigenwertproblem (λII − A )vv = 0 mit den Eigen-
werten in λ = [λ1 , . . . , λ4 ]T , den Eigenvektoren v , mit denen die Modalmatrix V = (vv1 , . . . , v 4 )
gebildet wird. Das Eigenwertproblem lösen wir numerisch
[V,Lambda]=eig(A); lambda=diag(Lambda); MATLAB
Die freien Schwingungen ergeben sich nach Abschn. 3.2.2.2 damit zu
4
xh = ∑ cj v j eλ j t = V diag(cc) eλ t , c = [c1 , c2 , c3 , c4 ]T ,
j=1
x p = ξ +ξξ = 2ℜ(ξξ ) .
ξ = ξ̂ξ eiΩt
was wir wiederum numerisch lösen. Die reelle Partikularlösung lautet dann
x p = 2 ℜ(ξ̂ξ eiΩt ) .
Die vollständige Lösung ergibt sich wiederum durch Überlagerung x = x h +xx p zu:
Die Integrationskonstanten sind einerseits mit den Anfangswerten zum Zeitpunkt t0 und anderer-
seits für den Bereich der Kompensation mit den Übergangsbedingungen zum Zeitpunkt ts → t0
zu ermitteln. Gehen wir von einem allgemeinen Zustand zum Zeitpunkt t0 aus, dann gilt für die
Anfangswerte bzw. Übergangsbedingungen x(t0 ) = x0 , so dass
c = eλ t0 .\ (V
V \(xx0 − 2ℜ(ξ̂ξ eiΩt0 ))) teilweise MATLAB-Schreibweise (Punktop. .\)!
374 8 Projekte
Zur grafischen Auswertung legen wir für jeden Zeitabschnitt einen Zeit-Vektor t T aus diskreten
Zeitpunkten an. Damit lautet die Lösungsmatrix
Programmtechnisch arbeiten wir die beiden Zeitabschnitte innerhalb einer for-Schleife ab. Die
Störgrößenaufschaltung erfolgt über einen logischen Ausdruck. Wesentliche Programmzeilen
aus St_Beob_M.m, [52] zur obigen Vorgehensweise geben wir an.
Programm-Ausschnitt:
t0=0; t=linspace(t0,ts,200); % Zeitvektor im ersten Bereich, I=1
for I=1:2 % Bereich 1, 2
A=[Am zeros(2); M L]... % Systemmatrix mit
+(I==2)*[-bu; -N ]*[cw*H cw]/kT; % zugeschaltetem Anteil
%---- erzwungene Schwingungen
xi_d=(i*Om*eye(4)-A)\hd; % komplexe Teil-Amplitude
%---- Eigenschwingungen, Gesamtlösung
[V,D]=eig(A); % Eigenwertproblem
e=diag(D); % Eigenwerte
cI=exp(e*t0).\(V\(x0-... % Integrationskonstanten
2.0*real(xi_d*exp(i*Om*t0))));
8.2.5 Ergebnisse
Zu 7.: Den Zeitverläufen in Bild 8.13, insbesondere x(t), lesen wir ab:
• 0 < t < 0,15 s: Einschwingvorgang des unbeeinflussten Systems; den Unwuchtschwingun-
gen x(t) sind aufgrund der Anfangswerte Eigenschwingungen
! überlagert.
Eigenkreisfrequenz des dämpfungsfreien Systems ω0 = mk = 600 rad/s, Periodendauer
T0 = 0.0105 s, Erregerkreisfrequenz Ω = 300 rad/s, Periodendauer T = 2 T0 .
• 0,15 < t < ts s: Unwuchtschwingungen mit der Periode T , Eigenschwingungen sind abge-
klungen.
• t = ts s: Beobachter wird zugeschaltet.
• ts < t < ts + T s: Unwuchtschwingungen sind nach ca. einer Periode T kompensiert, Eigen-
schwingungen sind durch den Schaltvorgang angeregt, vgl. Schwingungsdauer T0 .
8.2 Störgrößenkompensation harmonischer und konstanter Störungen 375
stemparametern der Strecke und dessen Modellierung abhängig ist, müssen u. a. die Parameter
sehr genau bekannt sein. Erhöhen wir z. B. die Federkonstante k der Fundamentfeder beim Be-
obachterentwurf um 10 %, also auf kB = 39,6 106 N/m, dann erhalten wir einen deutlich schlech-
teren Einschwingvorgang nach der Kompensation, worauf Bild 8.14 hindeutet. Eine Änderung
um 20 % führt bereits zur Instabilität des Systems – die anfänglich vorhandene Separierbarkeit
von Strecke und Beobachterentwurf ist verletzt. Diese Parameterempfindlichkeit im Zusammen-
hang mit einer getreuen Strecken-Modellierung machen den Einsatz in der Praxis problematisch.
376 8 Projekte
Das Primärsystem des Schwingungstilgers besitzt die Masse m1 und ist mit einem parallelge-
schaltetem Feder-Dämpfer-Element (k1 , d1 ) gegenüber der Umgebung abgestützt. Die Tilger-
masse (m2 , Sekundärsystem) ist durch ein weiteres viskoelastisches Element (k2 , d2 ) an das Pri-
märsystem angekoppelt. Die Erregung des Primärsystems erfolgt über die Kraft f (t) = q sin (Ωt)
mit der konstanten Amplitude q. Die Bewegung der Tilgermasse wird durch einen viskoelasti-
schen Anschlag (k, d, masselos) begrenzt; das Spiel gegenüber der Gleichgewichtslage sei Δ.
Parameter:
m1 =1 kg
m2 = 0,1 kg
k1 = 25 103 N/m
k2 = 4300 N/m
d1 = 0,8 Ns/m
d2 = 0,1 Ns/m
f (t) = q sin (Ω (t)t) N
q = 10 N
Ω (t) = 2πsweep t rad/s
Δ =3 mm
k = 250 103 N/m
d = 200 Ns/m
sweep = 0,1 Hz/s; Sweep-Rate
Die Antworten des Schwingungssystems auf die Erregung f (t) ist zu untersuchen. Hierzu sind
zunächst die kritischen Frequenzen (Resonanzlagen) sowie die Tilgerfrequenz abzuschätzen. Dar-
auf aufbauend ist ein Hochlauf (Sweep) mit Ω (t) durchzuführen, vgl. [4]. Die diesbezüglichen
8.3 Schwingungstilger mit viskoelastischem Anschlag 377
Schwingungssignale sind für eine grafische Darstellung in Form des Spitzenwertes und des qua-
dratischen Mittelwertes aufzubereiten. Folgende Punkte sind zu bearbeiten:
Ω
0 ≤ ≤ 60 Hz: f (t) = q sin (2πsweept 2 )
2π
zu ermitteln; frequenzmodulierte Schwingung.
4. Ermittlung der Schwingungsantwort wie unter 3. aber mit viskoelastischem Anschlag.
5. Ermittlung der stationären Schwingungen zur Tilgungsfrequenz ftilgung des ungedämpften
Systems. Ausgehend von den Anfangswerten
Neben dem Datenfile (TilgerD.m, [52]) empfiehlt sich auch ein Plotfile (TilgerP.m, [52])
zur grafischen Auswertung der Simulationsergebnisse unter MATLAB anzulegen.
e = sqrt(eig(K,M)); MATLAB-Aufruf
die kritischen Kreisfrequenzen, bei denen es auch im gedämpften System zu großen Amplituden-
überhöhungen kommt.
Tilgung tritt im ungedämpften System zu dem Ω auf, bei dem die Primärmasse m1 in Ru-
he bleibt und die Sekundärmasse m2 mit der Eigenkreisfrequenz des angehängten Feder-Masse-
System schwingt, d. h.
1 k2
ftilgung = ≈ 33 Hz . (8.26)
2 π m2
mit M , K nach (8.22). Der reelle Lösungsansatz der stationären Schwingung nach Abschn. 3.3.2.1
Das Ergebnis ist in Bild 8.16 dargestellt. Resonanzlagen und Tilgungspunkt stimmen mit der
vorangegangenen Berechnung (8.25), (8.26) überein.
Zu 2.: Das Simulink-Modell nach Bild 8.17 bilden wir mit den Subsystemen: Sweep-Generator,
Schwinger mit Stoßkraft und Auswerteblöcke.
mit der Sweep-Rate sweep in Hz/s. Demzufolge sind die Kreisfunktionen der Anregung in (8.20)
aber auch der später eingeführten Referenzsignale mit
zu bilden. Dies sind frequenzmodulierte Signale. Einen Bezug zur momentanen Kreisfrequenz
und damit zu den Ergebnissen des stationären Systems unter 1. ist durch trigonometrische Um-
380 8 Projekte
so dass näherungsweise
ist. Hiermit können wir die Auswertung im Frequenzbereich vornehmen und haben gleichzeitig
einen Bezug zu den stationären Schwingungen mit Ω = konst in (8.27) und somit zu Bild 8.16.
Das Simulink-Subsystem des Sweep-Generators zeigt Bild 8.18. Zusätzlich zur Modellierung
8.3 Schwingungstilger mit viskoelastischem Anschlag 381
von (8.31) ist über den Manual Switch Block eine Betrachtung des stationären Betriebs zu einem
vorgegebenen Ω = konst möglich.
über die Unstetigkeiten hinwegintegrieren oder durch Auswahl von: Enable zero crossing
detection in den Block-Dialog-Boxen eine event-gesteuerte Simulation, bei der Schaltpunkte
im Rahmen der numerischen Genauigkeit eingehalten werden, durchführen.
8.3.2.3 Auswertemodul
Das Schwingungssignal xk (t) setzt sich aus einem Anteil mit der Erregerfrequenz (Basisfre-
quenz) Ω – Basisharmonische – und einem mit von Ω verschiedener Frequenzen ω j
= Ω zu-
382 8 Projekte
sammen, z. B. für ω = ω j :
zur Basisfrequenz Ω multiplizieren wir (8.34) jeweils mit cos Ωt bzw. sin Ωt und bilden mit
Hilfe eines Tiefpasses mit der Eckfrequenz ωg << |Ω − ω j | die Mittelwerte x̄c , x̄s
Tiefpass 1 1
x(t) cos Ωt −→ x̄c ≈ a, (vgl. cos2 Ωt = (1 + cos 2Ωt))
2 2
1 (8.36)
Tiefpass
x(t) sin Ωt −→ x̄s ≈ b.
2
Die Schwingungsamplitude der Basisharmonischen folgt schließlich aus
!
x̂ = 2 x̄c2 + x̄s2 = a2 + b2 Signal 1. (8.37)
Die Gleichungen (8.36) und (8.37) setzen wir in ein Simulink-Subsystem um; vgl. Bild 8.21.
Zusätzlich bilden wir Amplitudenwerte der Schwingungsantwort, die neben Ω auch weitere
Frequenzen, z. B Eigenfrequenzen, enthalten. Dazu bauen wir auf dem quadratischen Mittelwert
(Effektiv-Wert) auf. Hierzu bilden wir zunächst x2 und mit einem Tiefpass den Mittelwert x¯2 . Wir
zeigen dies wieder an dem Signal aus (8.34). Es folgt:
8.3 Schwingungstilger mit viskoelastischem Anschlag 383
1 2 1 1
x2 = (a + b2 ) + (ã2 + b̃2 ) + (a2 − b2 ) cos 2Ωt + ab sin 2Ωt
2 2 2
+ (aã − bb̃) cos (Ωt + ωt) + (ab̃ + ãb) sin (Ωt + ωt)
(8.38)
+ (aã + bb̃) cos (Ωt − ωt) − (ab̃ − ãb) sin (Ωt − ωt)
1
+ (ã2 − b̃2 ) cos 2ωt + ãb̃ sin 2Ωt
2
und nach einer Tiefpassfilterung der Mittelwert
1 1 1 1
x¯2 ≈ (a2 + b2 ) + (ã2 + b̃2 ) = x̂2 + x̃2 (8.39)
2 2 2 2
bzw.
1 2
x¯2 = √ x̂ + x̃2 =: xrms (rms = root mean square). (8.40)
2
Dieser quadratische Mittelwert hat ausschließlich quantitativen Charakter. Um das Ergebnis mit
der Amplitude des harmonischen Signals (8.35) vergleichen zu können, verwenden wir den Spit-
zenwert
√
x̄¯ = 2 x¯2 = x̂2 + x̃2 Signal 2; (8.41)
d. h., enthält das Signal nur Ω -Terme, dann geht x̄¯ in x̂ über. Die beiden Auswertemethoden
(8.37), (8.41) realisieren wir in dem Simulink-Subsystem nach Bild 8.21. mit den ebenfalls inte-
grierten B UTTERWORTH-Tiefpässen 3. Ordnung – vgl. (4.19) –
...
y F + μ1 ωg ÿF + μ2 ωg2 ẏF + μ3 ωg3 yF = μ3 ωg3 u (8.42)
Zu 3., 4.: Bild 8.23 enthält Ergebnisse nach einem Sweep-Durchgang für das System ohne/mit
Anschlag. Neben den beiden Zeitschrieben x1 (t), x2 (t) sind die Ausgänge des Auswertemoduls
in Form: Maximal-Amplituden nach (8.37) – Signal 1 – der Basis-Harmonischen (Frequenz Ω )
und des vollständigen Signals (alle Harmonischen) nach (8.41) – Signal 2 – bezüglich der Aus-
lenkungen x1 , x2 sowie der der Kraft des Feder-Dämpfer-Elementes fu = k1 x1 + d1 ẋ1 dargestellt.
Auffällig sind in Bild 8.23 oben die großen Resonanzüberhöhungen bezüglich der Auslenkun-
gen x1 , x2 sowie das Kraftminimum bei der Tilgungsfrequenz von ≈ 33 Hz, wenn kein Anschlag
vorhanden ist. Da das System gedämpft ist, liegt keine vollständige Tilgung vor. Die Schwin-
gungen enthalten, bis auf wenige schmale Übergangsbereiche, lediglich die Basiskreisfrequenz
Ω.
Mit Anschlag, Bild 8.23 unten, werden die Resonanzüberhöhungen deutlich abgebaut. Die
Tilgung wird aufgrund des Maßstabes auch in dem Zeitschrieb x1 (t) deutlich. Bedingt durch den
Anschlag enthält das Schwingungssignal jetzt einen größeren Anteil an Frequenzen, die nicht
mit Ω übereinstimmen. Durch den Stoß werden Eigenschwingungen angeregt.
Zu 5. Modellseitig ist für die Ermittlung der stationären Schwingungen mit dem Schalter des
Blocks Manual Switch in Bild 8.18 statt der Zeit t eine 1 durchzuschalten. Die Sweep-Rate ist im
Datenfile TilgerD.m durch die konstante Tilgungsfrequenz sweep = ftilgung zu ersetzen.
Bild 8.22: Stationäre Schwingungen zur Tilgungsfrequenz ftilgung ; System mit Anschlag
In den Grafen von Bild 8.22 – entsprechend der Anordnung von Bild 8.23 – spiegelt sich der
Tilgungseffekt in der Signalhöhe von x1 und der Kraft wieder. Die unteren beiden Bilder stellen
die Spitzenwerte nach (8.37), (8.41) dar. Nach dem Einschwingvorgang (t > 2 s) der Tiefpässe
8.3 Schwingungstilger mit viskoelastischem Anschlag 385
Bild 8.23: Sweep-Durchgang mit sweep = 0,1 Hz/s; System ohne/mit Anschlag
386 8 Projekte
Axialkolbenverdichter werden heute in der Pkw-Klimatechnik eingesetzt. Bild 8.24 zeigt ein
Modell eines solchen Verdichtertyps. Der Verdichter besteht aus einer mit Ω rotierenden Welle,
an die in 0H der Hebel H angelenkt ist. Das andere Hebelende ist an einer Schrägscheibe S dreh-
bar befestigt. Diese ist ihrerseits mit der Gleithülse G über ein Drehgelenk in 0S verbunden. Die
Gleithülse und damit die Schrägscheibe S können sich somit translatorisch auf der Welle bewe-
gen, wodurch sich der Kippwinkel α verändert. Über eine nicht mitdrehende Wobble-Scheibe
oder Taumelscheibe W, die auf der Schrägscheibe gleit- oder wälzgelagert ist, werden über Gleit-
steine die 5-7 Kolben reibungsarm angelenkt. Die Zylinderbohrungen sind auf einem Teilkreisra-
dius R in einem feststehenden Zylinderblock angeordnet. Aufgrund der Schrägstellung und der
Rotation kommt es zur Kolbenbewegung; der Kolbenhub ist von α abhängig. Begrenzt man die
Schrägstellung von S durch Anschläge, dann gehört zum kleinsten Winkel αmin der kleinste, zum
größten Winkel αmax der größte Kolbenhub. Mittels der Abmessungen und der zwischen Welle
und Gleithülse wirkenden vorgespannten Feder (k, d) ist es möglich, die oberen Kolbentotlagen
zu unterschiedlichen Winkeln α konstant zu halten. Mit dem Dämpfungskoeffizienten d wird
eine Federdämpfung berücksichtigt, so dass anfängliche Störungen abklingen.
Die Kühlleistung ist somit durch Veränderung des Kolbenhubs über den Kippwinkel α er-
reichbar. Hierzu wird der Verdichterinnenraum, in dem sich H, S, W, G usw. befinden, mit einem
Steuerdruck pS , der auf die Unterseite der Kolben wirkt, beaufschlagt; er wirkt entgegen dem
Kolbendruck, so dass sich damit α ändert.
8.4 Axialkolbenverdichter einer Pkw-Klimaanlage 387
Der Arbeitsprozess könnte durch ein pV -Diagramm mit isentroper oder adiabater Verdichtung
und Expansion, wie in Klima_Verd.mdl in [52], berücksichtigt werden.
Wir wollen hier ein Teilproblem lösen, indem wir uns nur auf den Hebel H in Bild 8.24 be-
schränken. Die Anlenkung an die Schrägscheibe S ersetzen wir, wie in Bild 8.25 skizziert, durch
ein Feder-Dämpferelement (kH , dH ), welches bei entspannter Feder eine Länge von F hat. Die-
ser Hebelmechanismus rotiert mit konstanter Winkelgeschwindigkeit Ω . Ausgehend von belie-
bigen Anfangswerten der Hebellage schwingt dieser um seine stationäre Lage. Dieses Schwin-
gungsverhalten ist für die in Tabelle 8.2 angegeben Parameter per numerischer Simulation unter
MATLAB und mit Hilfe des SimMechanics Tools zu untersuchen. Im Einzelnen sind folgende
Punkte zu bearbeiten:
1. Ermittlung der Bewegungs- und Bindungsgleichungen (DAEs vom Index 3) ausgedrückt
durch die Schwerpunktkoordinaten Z xs , Z zs sowie den Lagewinkel φ des Hebels im rotieren-
den Z-Koordinatensystem. Die Gleithülsenmasse kann vernachlässigt werden, das System
hat somit einen Freiheitsgrad. Überführen Sie die Bewegungsgleichungen in das zugehörige
Index-1-Problem in einer semi-expliziten Form zur Integration der DAE.
2. Erstellen Sie ein M-File zur Simulation unter MATLAB mit einer Darstellungsmöglichkeit
der Zeitverläufe Z xs (t), Z zs (t), φ (t), λ1 (t), λ2 (t). Die Systemparameter nach Tabelle 8.2
sind in einem separaten Datenfile, welches auch für die Modellierung mit dem SimMecha-
nics Tool genutzt werden soll, zusammenzufassen.
3. Führen Sie einen modellbasierten Entwurf mit dem SimMechanics Tool unter Simulink
durch. Es sind gegenüber dem ersten Modell die Masseeigenschaften der Gleithülse und
ein Feder-Dämpfer-Element (k, d) wie in Bild 8.24 zu berücksichtigen, das System hat so-
mit zwei Freiheitsgrade. Aktivieren Sie das Visualisierungsfenster und beobachten Sie darin
die Einzelschritte der Modellerstellung sowie die Animation während der Simulation.
4. Vergleichen Sie die Ergebnisse beider Vorgehensweisen anhand der Gelenkkräfte in 0H .
5. Untersuchen Sie mit Hilfe der Analyse-Methode Trimming die sich einstellende stationäre
Lage.
388 8 Projekte
Zu 1): Das System hat einen Freiheitsgrad. Wir arbeiten aber nicht mit einer Minimalkoordinate,
sondern führen bewusst – meist wegen einer besseren Übersichtlichkeit – überzählige Koordina-
ten Z xs (t), Z zs (t), φ (t) ein. Ausgang der Betrachtung ist deshalb die L AGRANGEsche Gleichung
1. Art nach Kapitel 5
T T T
d ∂L ∂L ∂gg
− − λ = Q; pT = [Z xs , Z zs , φ ] (8.43)
dt ∂ ṗp ∂p ∂p
Iω = T IK K ω ,
wobei T IK die Transformationsmatrix (vom K-System ins I-System, vgl. Kapitel 2), folgt
1 1
Trot = K ω T KI I I T IK K ω =
T
Kω KI Kω ,
T
2 2
KI
darin ist K I bezogen auf das körperfeste Koordinatensystem (K) und somit zeitunabhängig. Die
Transformationsmatrix T IK ergibt sich aus zwei Teildrehungen, der Drehung γ um die Z z-Achse
8.4 Axialkolbenverdichter einer Pkw-Klimaanlage 389
Die Schwerpunktsgeschwindigkeit von SH folgt aus der zeitlichen Ableitung des Ortsvektors
im Inertialsystem. Hierfür bestimmt man zunächst den Ortsvektor Z r s im Z-System, welches
Ir s
die Rotordrehung γ mitmacht
⎡ ⎤
Z xs
Zr s = ⎣ 0 ⎦
Z zs
Ir s = T Tγ Z r s
T
I ṙr s = Ṫ
T γ Z r s + T Tγ Z ṙr s
⎡ ⎤⎡ ⎤ ⎡ ⎤⎡ ⎤
−γ̇ sin γ −γ̇ cos γ 0 Z xs cos γ − sin γ 0 Z ẋs
= ⎣ γ̇ cos γ −γ̇ sin γ 0 ⎦ ⎣ 0 ⎦ + ⎣ sin γ cos γ 0 ⎦⎣ 0 ⎦
0 0 0 Z zs 0 0 1 Z żs
bzw. ausmultipliziert
⎡ ⎤ ⎡ ⎤
−γ̇ Z xs sin γ Z ẋs cos γ
I v s = ⎣ γ̇ Z xs cos γ ⎦ + ⎣ Z ẋs sin γ ⎦ .
0 Z żs
1
Ttrans = mH γ̇ 2 Z xs2 + Z ẋs2 + Z ż2s
2
1 1 1 (8.45)
Trot = γ̇ 2 Ixx sin2 φ + γ̇ 2 Izz cos2 φ + φ̇ 2 Iyy .
2 2 2
Die potentielle Energie bildet sich zu
1
V = mH g [1, 0, 0] I r s + kH (Z xs + (H − sH ) sin φ − F )2 , (8.46)
2
wenn F die Federlänge der entspannten Feder ist, die generalisierte Kraft infolge der Dämpfung
390 8 Projekte
zu
⎡ ⎤
−dH Z ẋs + (H − sH )φ̇ cos φ
Q=⎣ 0
⎦. (8.47)
−dH Z ẋs + (H − sH )φ̇ cos φ (H − sH ) cos φ
Mit der JACOBI-Matrix der Bindungsgleichung ∂∂ggp und dem Vektor der L AGRANGEschen Multi-
plikatoren λ = [λ1 , λ2 ]T folgt der letzte Term auf der linken Seite von (8.43)
⎡ ⎤
T T λ1
∂gg 1 0 −sH cos φ
λ = λ =⎣ λ2 ⎦. (8.48)
∂p 0 1 sH sin φ
−λ1 sH cos φ + λ2 sH sin φ
Setzen wir (8.45) - (8.48) in (8.43) ein und werten diese, z. B. mit Hilfe der Computeralgebra, für
eine stationäre Rotordrehung γ̇ = Ω , γ = Ωt aus, dann erhalten wir die nichtlineare Bewegungs-
gleichungen für p = (Z xs , Z zs , φ )T sowie λ1 , λ2 im mit Ω rotierenden Z-System:
mH Z ẍs = mH Ω 2 Z xs − dH Z ẋs + (H − sH )φ̇ cos φ
− kH (Z xs + (H − sH ) sin φ − lF ) + λ1 − mH g cos Ωt
mH Z z̈s = λ2
1
Iyy φ̈ = Ω 2 (Ixx − Izz ) sin 2φ
2
− kH (Z xs + (H − sH ) sin φ − lF ) (H − sH ) cos φ (8.49)
− dH Z ẋs + (H − sH )φ̇ cos φ (H − sH ) cos φ
− λ1 sH cos φ + λ2 sH sin φ
0 = Z xs − bH − sH sin φ
0 = Z zs − aH − sH cos φ .
Dies ist ein differenzial-algebraisches Gleichungssystem vom Index 3. Für eine Simulation unter
MATLAB ist es in ein Index-1-Problem zu überführen. Hierzu müssen die Bindungsgleichungen
zweimal nach der Zeit differenziert werden, also
Statt der auf Lageebene basierenden Bindungen in (8.49)4, 5 sind die auf Beschleunigungsebene
basierenden (8.50) zu verwenden. Eine semi-explizite Form erhält man, wenn auf der linken Sei-
te der obigen drei Differenzialgleichungen nur die zweiten zeitlichen Ableitungen stehen, d. h.
wir müssen durch mH bzw. Iyy dividieren.
8.4 Axialkolbenverdichter einer Pkw-Klimaanlage 391
und bewegt sich, wie in Bild 8.24, gegen ein Feder-Dämpfer-Element (k, d). Die zugehörigen Pa-
rameter sind direkt im Block-Modell Hebelsm.mdl aus [52] eingetragen. Wir machen einige
Erklärungen zum Block-Modell Hebelsm.mdl nach Bild 8.27: Der Koordinatenursprung 0 des
Inertialsystems (I, World) fällt mit dem des drehenden Z-Systems in Bild 8.25 zusammen. Die Ur-
sprünge der körperfesten Koordinatensysteme u. a. in 0H , am Hebelende und auf der Gleithülse
lassen sich unmittelbar mit Hilfe der Abmessungen im drehenden System für t = 0 angeben, vgl.
Bild 8.28. Bei der Modellierung gehen wir von einem Dreikörpersystem aus Rotor, Hebel, Gleit-
hülse aus, jedem Körper ist ein Body Block zuzuordnen. Die Zwangsdrehung des Rotors – Win-
kel, Winkelgeschwindigkeit, -beschleunigung – erzeugen wir mit dem MATLAB Function Block1 .
Die Anbindung zur SimMechanics-Umgebung erfolgt mit dem Joint Actuator Block. Die Rotor-
lagerung ist das Drehgelenk (Revolute) mit einer Verbindung zur Umgebung (Ground Block) und
einer zum Body Block des rotierenden Rotors. Die Ports CS3, CS4 entsprechen den Ursprüngen
der Koordinatensysteme von Gelenkpunkt 0H und Gleithülse. Demzufolge schließen sich hieran
die Basen (B) des Drehgelenks (Revolute1) und des Schubgelenks (Prismatic) an. An (F) folgen
dann der Hebel (Body1) und die Gleithülse (Body2). Schließlich sind noch die Feder-Dämpfer-
Elemente einerseits zwischen zwei Body Blöcken, andererseits zwischen Gleithülse und Ground
– Dreh- und Inertial-Achse fallen zusammen – einzubringen. Die restlichen Komponenten kön-
nen als bekannt vorausgesetzt werden. Das Datenfile Hebel_Daten.m muss vor dem Start
ausgeführt werden, hierzu tragen wir den Filenamen unter Model Properties/Callbacks
ein.
1 Simulink 7.7; bei Vorgängerversionen ist der Embedded MATLAB Function Block oder eine andere Modellierung zu
wählen
8.4 Axialkolbenverdichter einer Pkw-Klimaanlage 393
Die programmseitige Darstellung, der grafische Vergleich und Verfahrenshinweise sind in He-
bel.m angegeben. Bild 8.29 zeigt ein Ergebnis. Danach erhalten wir – wie zu erwarten – über-
einstimmende Verläufe. Die Parameter und Anfangswerte der Gleithülse müssen allerdings so
394 8 Projekte
abgestimmt sein, dass dadurch das Schwingungsverhalten nur unwesentlich beeinflusst wird, d. h.
k, d → 0.
Zu 5): Die Analyse-Methode Trimming (vgl. Machine Environment Block) bestimmt in Abhän-
gigkeit von anfänglichen Störungen eine mögliche stationäre Lösung oder eine Gleichgewichts-
lage. Da sich in unseren Fall die Gleithülse ungehindert auf der Rotorlängsachse bewegen kann,
existieren zwei stationäre Lagen, d. h. die Hülse kann sich einerseits auf der positiven, anderer-
seits auf der negativen Z z-Achse befinden, dementsprechend folgt der Hebel. Welche Lage sich
einstellt, hängt u. a. von den vorgegeben Anfangswerten ab.
Einen Überblick bezüglich möglicher Lagen erhalten wir am einfachsten für den schwerelosen
Zustand (g = 0) mit (8.49). Zu der jetzt existierende Gleichgewichtslage (Index 0) verschwinden
die zeitlichen Ableitungen in (8.49). Wir lesen direkt ab:
λ20 = 0, Z z s0 = aH − sH cos φ0 .
Die restlichen drei Größen in p 0 = [Z xs0 , φ0 , λ10 ]T folgen aus der nichtlinearen Vektorfunktion
⎡ ⎤
mH Ω 2 Z xs0 − kH Z xs0 + (H − sH ) sin φ0 − lF + λ10
⎢ 1 Ω 2 (Ixx − Izz ) sin (2φ0 )− ⎥
f (pp0 ) = ⎢ ⎥
⎣ kH Z xs + (H − sH ) sin φ0 − lF (H − sH ) cos φ0 − λ10 sH cos φ0 ⎦ . (8.51)
2
0
Z xs0 − bH − sH sin φ0
Ausgehend von Schätzwerten zur Gleichgewichtslage können wir (8.51) mit Hilfe des N EWTON-
Verfahrens näherungsweise lösen. Hierzu bilden wir die TAYLOR-Entwicklung bis zum linearen
Glied
∂ f !
f (pp0 + Δpp) = f (pp0 ) + Δpp = 0 , (8.52)
p 0 0
8.4 Axialkolbenverdichter einer Pkw-Klimaanlage 395
Δppk−1
0 = −JJ −1 (ppk−1
0 ) f (p 0 ), J regulär
pk−1
(8.54)
p k0 = p k−1
0 + Δp
p0k−1
an, wobei J = ∂ f /∂ p 0 und f (pp0 ) mit den Werten aus dem k − 1 Schritt zu bilden sind. f (pp0 )
und J (pp0 ) berechnen wir z. B. symbolisch (oder analytisch). Die zugehörigen Schritte sind in
dem Programm Gleich_Lage.m [52] nachzulesen. Wir erhalten die Ergebnisse
sie entsprechen in etwa den Mittelwerten der stationären Lösungen nach der Trimming-Methode.
Damit sich stets eine definierte stationäre Lage einstellt, ist es sinnvoll, die Bewegung der Gleit-
hülse zu begrenzen.
8.5 Dreifachpendel
Schlagworte: Lagrange’sche Gleichung 2. Art, Newton-Euler-Formalismus, symbolische Auswer-
tung, Übergang zur Numerik, Animationsmodell, Linearisierung, M-File, physikalisches Modell
unter SimMechanics, Vorwärtsdynamik, Inverse Dynamik
Programme: Drei_P.m, Drei_PNE.m, fDrei_P.m, om_tilde.m, Drei_Psm.mdl, Drei_Psm_I.mdl
Hauptpendel
Masse m1 0,613 kg
Drehträgheit bezüglich S1 C1 1,64 10−2 kg m2
Schwerpunktsabstand s1 0,1065 m
Lagerabstand 01 ,02 , 01 ,03 0,18 m
Nebenpendel
Masse m2 = m3 0,210 kg
Drehträgheit bezüglich S2 , S3 C2 = C3 6,53 10−4 kg m2
Schwerpunktsabstand s2 = s 3 0,1145 m
Erdbeschleunigung g 9,81 m / s2
8.5 Dreifachpendel 397
fest liegt. Die Bezugspunkte der körperfesten Koordinatensysteme sollen mit den Massenmittel-
punkten (Schwerpunkten) der Körper zusammenfallen.
398 8 Projekte
∂rr s1 ∂rr s1
ṙr s1 = q̇1 oder ṙr s1 = q̇q
∂ q1 ∂qq
∂rr s2 ∂rr s2 ∂rr s2
ṙr s2 = q̇1 + q̇2 oder ṙr s2 = q̇q (8.57)
∂ q1 ∂ q2 ∂qq
∂rr s3 ∂rr s3 ∂rr s3
ṙr s3 = q̇1 + q̇3 oder ṙr s3 = q̇q
∂ q1 ∂ q3 ∂qq
MATLAB: (Version 1 mit dem diff Befehl oder Version 2 mit Hilfe der JACOBI-Matrix jacobian)
v_S1=diff(r_S1,q1)*q1p;
v_S2=diff(r_S2,q1)*q1p+diff(r_S2,q2)*q2p;
v_S3=diff(r_S3,q1)*q1p+diff(r_S3,q3)*q3p;
Wegen der ebenen Bewegungen lauten die Winkelgeschwindigkeitsvektoren nach Bild 8.31
I i = diag(Ai , Bi , Ci ), i = 1, 2, 3, (8.59)
wobei in die Bewegungsgleichung nur Ci eingeht. Damit können wir die kinetische Energie T =
T1 + T2 + T3
1
T = m1ṙr Ts1 ṙr s1 + m2ṙr Ts2 ṙr s2 + m3ṙr Ts3 ṙr s3 + ω T1I 1ω 1 + ω T2I 2ω 2 + ω T3I 3ω 3 (8.60)
2
und die potentielle Energie V = V1 +V2 +V3 infolge der Erdbeschleunigung g
angeben. Da keine weiteren eingeprägten Kräfte/Momente auftreten und darüber hinaus T nicht
explizit von der Zeit t abhängt, lautet die L AGRANGEsche Gleichung nach (2.112) für eine sym-
bolische Auswertung
T T T
∂ ∂T ∂ ∂T ∂ (V − T )
q̈q + q̇q + =0 (8.62)
∂ q̇q ∂ q̇q ∂qq ∂ q̇q ∂qq
8.5 Dreifachpendel 399
oder kurz
Zur Ermittlung der Massenmatrix M sowie der Vektorfunktion f in (8.63) dient der Programm-
ausschnitt von Drei_P.m aus [52], die Gleichheit der Nebenpendel wird durch Substitution der
Größen des 2. Nebenpendels (m3 , s3 , C3 ) erreicht.
8.5.2 Newton-Euler-Formalismus
Zu 1b: Die Grundlagen stehen in Abschn. 2.4.1. Das Pendel besteht aus N = 3 starren Körpern,
der Koordinatenvektor q nach (8.56) gilt weiterhin. Die N EWTON -E ULER Gleichung nach (2.97)
lautet:
n T
∑ J Ti (ṗpi − f ei ) + J TRi L̇
Li − m ei = 0 . (8.64)
i=1
∂rr si ωi
∂ω
J Ti = , J Ri = . (8.65)
∂qq ∂ q̇q
Da ein ebenes Problem vorliegt und wir die Massenmittelpunkte Si als Bezugspunkte gewählt
haben, vereinfachen sich die zeitlichen Ableitungen – vgl. (2.98) – für den Impuls p und Drall L
ṗpi = mir̈r si , ω i.
Li = I iω̇
L̇ (8.66)
400 8 Projekte
Wegen der ebenen Bewegung können wir von der reduzierten Gleichung (2.99) – der mittlere
Term verschwindet – ausgehen:
M1 0 z̈z1 fe
JT − =0 (8.68)
0 M2 żz2 me
Die zeitlichen Ableitungen lassen sich mit (8.65), (8.69) in der Form
Damit erhalten wir die Elemente in der Form von (8.63) (Ausgabe: latex(M) usw.):
⎡ ⎤
m1 s1 2 + 2 m2 l 2 + C1 −m2 ls2 sin(q1 − q2 ) m2 ls2 sin(q1 − q3 )
⎢ ⎥
⎢ ⎥
M = ⎢ −m2 ls2 sin(q1 − q2 ) C2 + m2 s2 2 0 ⎥
⎣ ⎦
m2 ls2 sin(q1 − q3 ) 0 C2 + m2 s2 2
⎡ ⎤
s2 m2 cos (q1 − q2 ) q̇22 l − s2 m2 q̇23 l cos (q1 − q3 ) + gm1 s1 sin (q1 )
⎢ ⎥
⎢ ⎥
f =⎢ −s2 m2 q̇21 l cos (q1 − q2 ) − g sin (q2 ) ⎥
⎣ ⎦
s2 m2 q̇21 l cos (q1 − q3 ) + g sin (q3 )
Mit dem Zustandsvektor ẋx = [qqT , q̇qT ]T , x ∈ R2 f ist aus (8.63) bzw. (8.77) die nichtlineare
Zustandsgleichung
q̇q q̇q
ẋx = = (8.78)
M (qq)−1 f (qq, q̇q) f (qq, q̇q)
xp=[x(4:6); % Differenzialgleichung
-eval(f_star)];
8.5 Dreifachpendel 403
8.5.4 Animationsmodell
Zu 3.: Die Einzelpendel beschreiben wir, wie in Abschn. 1.7.3, durch geschlossene Polygonzüge.
Hierzu führen wir die in Bild 8.33 angegebenen Knoten ein. Die Positionen der Knoten (xi , yi )
in dem x1 , y1 − und x2 , y2 −Achssystem sind Elemente der zur grafischen Darstellung benötigten
Vektoren:
Hauptpendel:
x 1 = [ −10, −37,5, −37,5, 37,5, 37,5, −10, −10, 190, 190, −190, −190, 10, 10 ]T
y 1 = [ −263, −263, −338, −338, −263, −263, −10, −10, 10, 10, −10, −10, −263 ]T
Nebenpendel:
Pendel-Lager
Zur Darstellung des Pendels im x1 , y1 -Achssystem sind zusätzlich die Verschiebungen in die
Anlenkpunkte 02,3 der Nebenpendel, Bild 8.31, additiv hinzuzufügen und ggf. die Lagerorte z. B.
durch Kreise zu kennzeichnen.
Die Animation baut auf den Lösungen ϕk (ti ), k = 1,2,3 zu den Zeitpunkten ti auf. Um die
Bewegung der Pendelelemente zu allen ti darzustellen, führen wir die Drehmatrix
cos ϕk (ti ) sin ϕk (ti )
T k (ti ) = , k = 1,2,3, i = 1,2,3, . . .
− sin ϕk (ti ) cos ϕk (ti )
404 8 Projekte
Hauptpendel:
x̃xT1 (ti ) x T1
= T 1 (ti )
ỹyT1 (ti ) yT
1
Null-Lage
Nebenpendel:
x̃xTk (ti ) x Tk (−1)k−1
= T k (ti ) + 1 (ti )
T , k = 2,3.
ỹyTk (ti ) yT 0
k
Null-Lage Lage von 02,3
Die MATLAB-Umsetzung geben wir hier für das Nebenpendel 2 an. Der vollständige Code ist
in Drei_P.m bzw. Drei_PNE.m [52] zu finden.
%---- Animation der Bewegung vgl. Drei_P.m, Drei_PNE.m
%---- Dreifach-Pendel, Geometrie, Maße in mm
lq=1000.0*l; % Quertraverse in mm
%---- Nebenpendel 2, 3 (links, rechts) Null-Lage
x2=[-10, -25, -25, 25, 25, 10, 10, -10, -10, 10];
y2=[-130, -130, -180, -180, -130, -130, 10, 10, -130, -130];
set(hL2,’xdata’,-Xq(1,1),’ydata’,-Xq(2,1));% Lagerbolzen
axis(L) % gleiche Achsskalierung
pause(0.015) % Zeitverzögerung + Bilderneuerung
end;
8.5.5 Schwingungsverhalten
Zu 4.: Zur Interpretation der Schwingungen betrachten wir vorab kleine Schwingungen Δϕi um
die Gleichgewichtslage ϕi ≡ 0, ϕ̇i ≡ 0, i = 1,2,3. Hierzu linearisieren wir die Bewegungsglei-
chung (8.63) – vgl. Abschn. 2.6 –
∂p ∂p ∂p
p (qq, q̇q, q̈q) ≈ p (00, 0 , 0 ) + |0 Δq̈q + |0 Δq̇q + |0 Δqq ≈ 0
∂ q̈
q ∂ q̇
q ∂qq
∂f ∂f
M (00) Δq̈q + |0 Δq̇q + |0 Δqq = 0,
∂ q̇q ∂qq
so dass die lineare Variationsgleichung
f_qp=jacobian(f,q_p); % JACOBI-Matrizen
f_q=jacobian(f,q);
% ---- Gleichgewichtslage
q1=0; q2=0; q3=0; q1p=0; q2p=0;q3p=0; q1pp=0; q2pp=0;q3pp=0;
M_0=subs(M); % Gleichgew.-Lage
Q=subs(f_q); % eingesetzt ->
P=subs(f_qp); % M_0*ypp+P*yp+Q*y=0
% ---- Eigenwerte für P=0
if any(P(:)) == 0, e=sqrt(eig(Q,M_0)), end % y=v*cos(omega*t)
Es ergibt sich:
M_0 = 3.6969e-002 0 0 P = 0 0 0
0 3.4062e-003 0 0 0 0
0 0 3.4062e-003, 0 0 0
Q = 6.4044e-001 0 0
0 2.3588e-001 0
0 0 2.3588e-001
406 8 Projekte
Danach wären alle Einzelpendel voneinander entkoppelt. Mit Δqq = v cos ωt nach Kapitel 3
folgen unmittelbar die Eigenwerte
Das linearisierte System ist also bezüglich der Gleichgewichtslage grenzstabil (schwach stabil).
Aufgrund der Entkopplung müssten wir z. B. ein Nebenpendel anfänglich auslenken können, so
dass es mit seiner Eigenkreisfrequenz schwingt, ohne die anderen dadurch anzuregen. Wir wollen
klären, ob dies auch für das nichtlineare System gilt und geben die speziellen (kleinen) Anfangs-
werte
ϕ1 = ϕ3 = 0, ϕ2 = 1/18 · π, ϕ̇i = 0
vor. Die sich einstellenden Schwingungen sind in Bild 8.34 dargestellt. Demnach verhält sich das
nichtlineare System nur über ein kurzes Zeitintervall 0 ≤ t < 10 s wie das lineare System. Das
linearisierte Modell gibt offensichtlich die Schwingungen falsch wieder.
Die L JAPUNOVschen Stabilitätssätze, vgl. [9], lösen das Problem. Wir geben eine allgemeine
Formulierung an:
• Ist das zu M (qq)q̈q = f (qq, q̇q) linearisierte System asymptotisch stabil bzw. instabil, so ist auch
das nichtlineare System asymptotisch stabil bzw. instabil.
• Ist das linearisierte System grenzstabil, wie hier, so erhalten wir keine Aussage über die
Stabilität des nichtlinearen Systems. Die Terme höherer Ordnung in der TAYLOR-Reihe
entscheiden das Stabilitätsverhalten.
Damit ist das obige Ergebnis erklärbar. Es lässt sich aber auch anschaulich verdeutlichen: Da die
Frequenz des anfänglich ausgelenkten Nebenpendels mit der Eigenfrequenz des anderen Neben-
pendels und mit der zweifachen Eigenfrequenz des Hauptpendels schwingt, werden letztere im
richtigen Takt angeregt, so dass es zu den aufschaukelnden Schwingungen, zunächst bezüglich
des Hauptpendels ϕ1 , wie in Bild 8.34, kommen muss. Es findet ein permanenter Energieaus-
tausch statt, wie dies auch in Bild 8.35 für die großen Anfangswerte
8.5 Dreifachpendel 407
Anschaulicher wird der Vorgang in einer Animation. Bild 8.36 zeigt eine Momentaufnahme
eines solchen Vorgangs. Die simulierten Bewegungen stimmen quantitativ mit experimentellen
Ergebnissen am Demo-Modell nach Bild 8.31 überein.
festzulegen. Z. B. bezeichnet 1 CS2(1 CS1) das Koordinatensystem 1 CS2 mit dem Ursprung in 02
festgeschrieben in 1 CS1. Dementsprechend können wir die zugehörigen Ortsvektoren
angeben, sie sind in der Dialog-Box einzutragen. Zur Festlegung der körperfesten Koordinaten-
systeme der Nebenpendel übernehmen wir zunächst die angrenzenden (adjoining) 1 CS2- und
1 CS3-Systeme, vgl. Eintrag in der Dialog-Box. Wir erhalten die körperfesten Systeme 2 CS1 und
3 CS1 der beiden Nebenpendel. In diesen Systemen sind die Schwerpunktslagen 2 CG, 3 CG mit
festzuschreiben.
Jedem Drehgelenk ist nach Bild 8.38 ein Revolute Block zuzuordnen. Die Drehrichtungen
aus Bild 8.31 sind in der Dialog-Box zu verwirklichen, d. h. wir müssen eine Drehung um die
8.5 Dreifachpendel 409
negative z-Achse erreichen: (0, 0, -1). Darüber hinaus besteht in 01 eine Anbindung zur Umge-
bung, was wir durch den Ground Block modellieren müssen. Ab SimMechanics 2 ist stets einem
Ground Block der Maschine ein Machine Environment Block zuzuordnen. Die Dialogbox enthält
Einträge u. a. bezüglich des Gravitationsvektors und der Analyse-Methode, wie z. B. Forward
dynamics oder Inverse dynamics, vgl. Kapitel 7.
Da die oben eingebrachte Ausgangslage eine Gleichgewichtslage ist, müssen wir für die ak-
tuellen Anfangswerte der Körper Joint Initial Condition Blöcke verwenden. Messungen der Ge-
lenkwinkel (hier: Relativwinkel) werden mit den Joint Sensor Blöcken vorgenommen, sie stellen
die Schnittstelle zur Simulink-Umgebung her.
Um die Simulation im Visualiesierungsfenster zu verfolgen, ist u. a. im Fenster: Simulati-
on/Configuration Parameters unter SimMechanics/Visualization das Visuali-
sierungsfenster zu aktivieren, vgl. Kapitel 7.
Die Simulationsergebnisse aller behandelten Methoden stimmen bei nicht überschlagenden
Pendeln sehr gut überein. Überschlagen sich die Pendel, dann können nur innerhalb eines klei-
nen Zeitfensters 0 ≤ t ≤ 20 s bei hoher Genauigkeit, z. B. RelTol 1*10−6 , gute Übereinstim-
mungen erreicht werden. Auch bei leicht abweichenden Anfangswerten in den einzelnen Metho-
den unterscheiden sich die Schwingungen immer stärker mit fortschreitender Zeit. Diese Abwei-
chungen sind systembedingt: kleinste Integrationsfehler (Störungen) führen zu völlig anderem
Schwingungsverlauf. Dies ist einerseits auf die fehlende Dämpfung, andererseits aber auf das
410 8 Projekte
Das skizzierte Viertelfahrzeugmodell (Aufbau mA , Rad mR ) bewegt sich über eine unebene Fahr-
bahn u(t). Die Reifencharakteristik wird durch ein lineares Feder-Dämpfer-Element (kR , dR )
berücksichtigt. Der Stoßdämpfer aus [12] hat nach Bild 8.41 nichtlineares und unstetiges Verhal-
ten, die Fahrzeugfeder (kA ) sei linear. Die in Bild 8.41 verwendeten Fahrzeugkoordinaten von
412 8 Projekte
c1 (vD − α)
d(vD ) = ' + c2 , für vD < vlim , vD = ẋD − ẋR (8.79)
vD − α 2
α 1+
α
approximiert, wobei
α Übergangsparameter, α > 0 stetiger Verlauf von d(vD ), vgl. Bild 8.41
c1 = (de − dc )/2, c2 = (de + dc )/2.
Damit gilt für die viskose Dämpferkraft
d(vD )vD für vD < vlim
FDD = . (8.80)
d(vlim )vlim + db (vD − vlim ) für vD ≥ vlim
Dies ist eine stückweise stetige Kennlinie. Der Umschaltpunkt vD = vlim ist zustandsabhängig.
Die Stoßdämpferelastizität wird durch eine progressive Federcharakteristik
beschrieben. Alle weiteren Feder- und Dämpferelemente seien linear. Die Fahrbahn wird punktu-
ell nachgefahren, so dass wir anschaulich von einem stehenden Fahrzeug mit Radanregung u(t)
ausgehen wollen. Die Reifenverformung wird durch ein K ELVIN -VOIGT-Modell berücksichtigt;
dies ist nur bedingt geeignet, wie später gezeigt.
Es soll das Schwingungsverhalten insbesondere mit Abhebephasen des Rades in einer Simu-
lation unter MATLAB untersucht werden. Hierzu sind die folgenden Punkte zu bearbeiten:
1. Bewegungsgleichungen für die Zustände mit und ohne Bodenkontakt des Rades sowie die
zugehörigen Schaltfunktionen bezüglich der Unstetigkeit in der Dämpferkennlinie und des
Abhebe- und Auftreffpunktes des Rades.
2. Erstellen eines M-Files für das eventgesteuerte differenzial-algebraische Modell.
3. Diskussion der Simulationsergebnisse. Beurteilung des Stoßkraftverlaufs beim Abheben
und Aufsetzen.
Die zugehörigen Lösungen sind in [52], Kap. 8 zu finden.
8.7 Dynamik des Levitron-Kreisels 413
y = [x, y, α, β , z]T
M ÿy + Gẏy + Ky = 0 ,
mit der symmetrischen Massenmatrix
Kreiselmasse m = 20 10−3 kg
Trägheitsmomente A = 1,32 10−6 kg m2
C = 2,20 10−6 kg m2
Axial-Steifigkeit kz = 0,82 N/m
Radial-Steifigkeit kr = −0,43 N/m
Kipp-Steifigkeit kϕϕ = −8,6 10−3 Nm/rad
Koppel-Steifigkeit kϕr = 0,11 N/rad
1. Bereiten Sie die Bewegungsgleichung für eine numerische Stabilitätsuntersuchung mit Hil-
fe der Eigenwerte auf. Berücksichtigen Sie dabei, dass ein rotationssymmetrisches Problem
vorliegt.
2. Berechnen Sie die Eigenwerte in Abhängigkeit von Ω für den Bereich 0 ≤ Ω ≤ 220
rad/s.
3. Stellen Sie die Eigenwerte in der komplexen Ebene mit Ω als Kurvenparameter (Eigenwert-
kurven) grafisch dar und beurteilen Sie die Stabilität.
4. Berechnen Sie die freien Schwingungen nach einer kleinen Störung der Gleichgewichtslage
bei Ω = 96, 98, 180 rad/s und stellen Sie die Zeitverläufe grafisch dar. Beurteilen Sie das
Schwingungsverhalten.
5. Wie wirkt sich eine äußere Dämpfung auf die Stabilität aus?
8.8.1 Motivation
Vielerorts wird an der Entwicklung mobiler Roboter gearbeitet. Auf den balancierenden Robo-
ter2 nach Bild 8.42 und [37] sollen die hier dargestellten Methoden zur mathematischen Modellie-
rung angewendet werden. Wesentlich soll eine systematische Herleitung und symbolische Um-
setzung in MATLAB der nichtlinearen Bewegungsgleichungen dieses räumlichen Modells sein.
Bezüglich der Stabilisierung werden erste Reglerentwürfe diskutiert. Die Parametrisierung er-
folgte in Anlehnung an [37] und ist in Balanc_Robot_Stab.m [52] festgeschrieben.
u. a. kann dadurch der Aufsatz die Kugel nicht verlassen. Es können damit nur verträgliche Aus-
lenkungen simuliert werden.
Wie unschwer zu erkennen ist, liegt ein instabiles System vor, welches durch einen Regelein-
griff über die Omniwheels stabilisiert werden muss. In einem ersten Entwurf bilden wir die hier-
für erforderlichen Stellmomente einerseits mit den messbaren Kugelwinkelgeschwindigkeiten
ζ̇ , η̇, ϑ̇ und andererseits mit den Motor-Winkelgeschwindigkeiten ϕ̇1 , ϕ̇2 , ϕ̇3 der Omniwheels.
Die Gewichtungskoeffizienten dieser Rückführungen ermitteln wir nach der LQ-Methode. Auf
eine gezielte (geplante) Bewegung des Roboter-Modells, z. B. über eine Sollwertvorgabe oder
eine Trajektorienplanung, wird nicht eingegangen. Beispielsweise: Durch überlagerte Motor-
Winkelgeschwindigkeiten werden Richtung, Geschwindigkeit und Drehung um die eigene Achse
festgelegt. Z. B. für eine geradlinige Bewegung müssen zwei Rädern gleiche Winkelgeschwindig-
keiten überlagert werden.
Die fünf freien starren Körper mit jeweils sechs Freiheitsgraden werden durch die Bindungen
• Anbindung der Kugel an die Ebene: eine holonome Bindung
• Rollbedingungen der Kugel: zwei holonome Bindungen
• Anbindung des Aufsatzes an die Kugel: drei holonome Bindungen
• Anbindung der Omniwheels an den Aufsatz: fünfzehn holonome Bindungen
• Rollbedingung zwischen Kugel und Omniwheels: drei nichtholonome Bindungen
eingeschränkt. Das Modell hat nach (5.78) somit f = 5 · 6 − 24 sechs Freiheitsgrade. Bis auf
die drei nichtholonomen Bindungen, die nur den Geschwindigkeitszustand einschränken, ließen
sich die restlichen holonomen, skleronomen Bindungen direkt bei der Aufstellung der Bewe-
gungsgleichungen einarbeiten. Wir werden die zwei holonomen Bindungen der Kugel, die ein
schlupffreies Abrollen festschreiben, sowie die drei nichtholonomen Bindungen davon ausschlie-
ßen. Die Bewegungen lassen sich dann mit elf verallgemeinerten Koordinaten beschreiben:
Die vollständige Ausarbeitung mit Diskussion der Ergebnisse ist in [52], Kap. 8 nachzulesen.
Literaturverzeichnis
[1] MATLAB & Simulink , Release Notes for R2011a, PDF Documents aller Toolboxen, vgl.
Online-Hilfe. The MathWorks, Inc., 2011.
[2] Angermann, A.; Beuschel, M.; Rau, M.: MATLAB-Simulink-Stateflow. Oldenbourg Verlag,
München, 6. Auflage, 2009, ISBN 10: 9783486589856.
[3] Arnold, M.: Zur Theorie und zur numerischen Lösung von Anfangswertproblemen für differentiell-
algebraische Systeme von höherem Index. VDI-Verlag, Fortschr. Ber., VDI, Reihe 20, Nr. 264,
Düsseldorf, 1998.
[4] Babitsky, V. I.; Krupenin, V. L.: Vibration of Strongly Nonlinear Discontinuous Systems. Springer
Verlag, Berlin, 2001, ISBN 3-540-41447-9.
[5] Baumgarte, J.: Stabilization of Contraints and Integrals of Motion in Dynamik Systems. Comp.
Math. in Appl. Mech. and Eng. 1 pp. 1-16, 1972.
[6] Bestel, D.: Analyse und Optimierung von Mehrkörpersystemen. Springer Verlag, Berlin, 1994,
ISBN 3-540-57735-1.
[8] Beucher, O.: MATLAB und Simulink. Pearson Studium, München, 4. Auflage, 2008,
ISBN 10: 9783827373403.
[9] Bremer, H.: Dynamik und Regelung mechanischer Systeme. B. G. Teubner Verlag, Stuttgart, 1988,
ISBN 3-519-02369-5.
[10] Brenan, K. E.; Campbell, S. L.; Petzold, L. R.: Numerical Solution of Initial-Value Problems in
Differential Algebraic Equations. Vol. 14 of Classics in Applied Mathematics, SIAM, Philadelphia,
PA, 1996.
[11] Brommundt, E.: Ein Reibschwinger mit Selbsterregung ohne fallende Reibkennlinie. ZAMM, 75,
11, S. 811-820, 1995.
[12] Cebon, D.: Handbook of Vehicle-Road Interaction. Swets & Zeitlinger B.V., 1999.
[13] Cellier, F. E.: Continuous System Modeling. Springer Verlag, Berlin, 1991, ISBN 0-387-97502-0.
[14] Dormand, J.; Prince, D.: Practical Runge-Kutta processes. SIAM J. Sci. Compt. 10(5), p 977-989,
1989.
[15] Eich-Soellner, E.; Führer, C.: Numerical Methods in Multibody Dynamics. B. G. Teubner Verlag,
Stuttgart, 1998, ISBN 3-519-02601-5.
[17] Fischer, U.; Stephan, W.: Mechanische Schwingungen. Fachbuchverlag Leipzig GmbH, Leipzig,
1993, ISBN 3-343-00841-9.
[18] Gasch, R.; Knothe, K.: Strukturdynamik Bd 1/2. Springer Verlag, Berlin, 1987,
ISBN 0-387-16849-4.
[19] Gasch, R; Lang, M.: Levitron – ein Beispiel für die rein permanentmagnetische Lagerung eines
Rotors. ZAMM 80, 2, S. 137-144, 2000.
[20] Gekeler, E. W.: Mathematische Methoden zur Mechanik. Springer Verlag, Berlin, 2006,
ISBN 3540302670.
[21] Genta, G.: Vibration of Structures and Machines. Springer Verlag, Berlin, 1999,
ISBN 0-387-98506-9.
[22] Géradin, M.; Rixen, D.: Mechanical Vibrations, Theory and Application to Structural Dynamics.
Wiley, 1994, ISBN 0-471-93927-7.
[23] Glocker, C.: Dynamik von Starrkörpersystemen mit Reibung und Stößen. Dissertation, Lehrstuhl B
für Mechanik, TU München, 1995.
[24] Gramlich, G.: Eine Einführung in MATLAB. Hochschule Ulm, 2011. www.hs-ulm.de/
/users/gramlich/EinfMATLAB.pdf.
[25] Gulley, N.: Picking up the Pace with the MATLAB Profiler. MathWorks, MATLAB News &
Notes (Mai 2003), The MathWorks, Inc, 2003. http://www.mathworks.com/company/
newsletters/news_notes/may03/profiler.html.
[26] Gulley, N.: Working with Cell Mode in MATLAB 7. MathWorks, MATLAB News & Notes
(Dec. 2004), The MathWorks, Inc, 2003. http://www.mathworks.de/company/
newsletters/news_notes/dec04/cellmode.html.
[27] Hairer, E.; Wanner, G.: Solving Ordinary Differential Equations II. Springer Verlag, Berlin, 1991.
[28] Hatch, M. R.: Vibration Simulation Using MATLAB and ANSYS. Chapman & Hall, London, 2001.
[29] Heimann, B.; Gerth, W.; Popp, K.: Mechatronik. Carl Hanser Verlag, Leipzig, 2. Auflage, 2001,
ISBN 3-446-18719-7.
[30] Hoffmann, J.: MATLAB und Simulink: Beispielorientierte Einführung in die Simulation dynamischer
Systeme. Addison-Wesley, Bonn, 1998, ISBN 3-8273-1077-6.
[31] Hoffmann, J.; Brunner, U.: MATLAB und Tools. Addison-Wesley, Bonn, 2002, ISBN 3-8273-1895-5.
[34] Kautsky, J.; Nichols, N. K.: Robust Pole Assignment in Linear State Feedback. Int. J. Control 41 pp
1129-1155, 1985.
[35] Kessel, S.; Fröhling, D.: Technische Mechanik. B. G. Teubner Verlag, Stuttgart, 1998.
Literaturverzeichnis 419
[36] Kopka, H.: LaTex, Bd. 1: Einführung. Addison-Wesley, Bonn, München, 2005, ISBN 3827370388.
[37] Kumagai, K.; Ochiai, T: Development of a Robot Balanced on a Ball. Journal of Robotics and
Mechatronics, Vol. 22 No. 3, 2010.
[39] Lunze, J.: Regelungstechnik 1. Springer Verlag, Berlin, 1996, ISBN 3-540-61404-4.
[40] Lunze, J.: Regelungstechnik 2. Springer Verlag, Berlin, 1997, ISBN 3-540-61898-8.
[41] Moler, C.: Numerical Computing with MATLAB. SIAM, Philadelphia, 2004, ISBN 0-89871-560-1.
www.mathworks.com/moler/.
[42] Müller, P. C.; Lückel, J.: Zur Theorie der Störgrößenaufschaltung in linearen Mehrgrößenregelsyste-
men. Regelungstechnik, 25, S. 54-59, 1977.
[43] Müller, P. C.: Stabilität und Matrizen. Springer Verlag, Berlin, 1977, ISBN 3-540-07981-5.
[44] Müller, P. C.; Schiehlen, W.: Lineare Schwingungen. Akademische Verlagsgesellschaft, Wiesbaden,
1976.
[45] Otter, M.; Elmqvist, H.; Mattson, S. E.: Objektorientierte Modellierung Physikalischer Systeme, Teil
8. at-Automatisierungstechnik 48, R. Oldenbourg Verlag, 2000.
[46] Otter, M.: Modeling Friction in Modelica with the Lund-Grenoble Friction Model. 2. International
Modelica Conference, Proceedings, pp 285-294, 2002. http://www.Modelica.org/
events/conference2002.
[47] Pelz, G.: Modellierung und Simulation mechatronischer Systeme. Hüthig, Heidelberg, 2001,
ISBN 3-7785-2848-3.
[48] Pfeiffer, F.; Glocker, C.: Multibody Dynamics with Unilateral Contacts. Springer Verlag, Berlin,
2000, ISBN 3-211-83330-7.
[49] Pfeiffer, F.: Einführung in die Dynamik. B. G. Teubner Verlag, Stuttgart, 2. Auflage, 1992,
ISBN 3-519-12367-3.
[50] Pietruszka, W. D.; Wagner, N.: Aktive Beeinflussung des Schwingungsverhaltens eines magnetisch
gelagerten Rotors. VDI-Berichte Nr. 456, 1982.
[51] Pietruszka, W. D.: Digitale Regelung und Störgrößenkompensation magnetisch gelagerter Rotoren.
VDI-Berichte Nr. 550, 1985.
[52] Pietruszka, W. D.: Programmsammlung auf der Homepage zum Buch: MATLAB und Simulink in der
Ingenieurpraxis. Vieweg+Teubner Verlag, Wiesbaden, 2011. www.viewegteubner.de.
[53] Pratap, R.: Getting Started with MATLAB. Oxford University Press, New York, Oxford, 2010,
ISBN -10: 9780199731244.
[54] Rill, G., Schaeffer, T.: Grundlagen und Methodik der Mehrkörpersimulation. Vieweg+Teubner
Verlag, Wiesbaden, 2010, ISBN 978-3-8348-0888-2.
[55] Roddeck, W.: Einführung in die Mechatronik. B. G. Teubner Verlag, Stuttgart, 3. Auflage, 2006,
ISBN 3-8351-0071-8.
420 Literaturverzeichnis
[56] Schiehlen, W.; Eberhard, P.: Technische Dynamik. B. G. Teubner Verlag, Stuttgart, 2. Auflage, 2004,
ISBN 3-519-12365-7.
[57] Schweizer, W.: MATLAB kompakt. Oldenbourg Verlag, München, 3. Auflage, 2009,
ISBN 10: 9783486591934.
[58] Sextro, W. K.; Popp, K.; Magnus, K.: Schwingungen. Vieweg+Teubner Verlag, Wiesbaden,
8. Auflage, 2008.
[59] Shampine, L. F.: Numerical Solution of Ordinary Differential Equations. Chapman & Hall, London,
1994.
[60] Shampine, L. F.; Kierzenka, J. M.; Reichelt, M. W.: Solving Boundary Value Problems for Ordinary
Differential Equations in MATLAB with bcp4c. 2000. http://www.mathworks.com/bvp_
tutorial.
[62] Shampine, L. F.; Reichelt, M. W.; Kierzenka, J. A.: Solving Index-1 DAEs in MATLAB and Simulink.
SIAM Review, 41, pp. 538-552, 1999.
[63] Tiller, M.: Introduction to Physical Modeling with Modelica. Kluver Academic Publishers, 2001,
ISBN 0-7923-7367-7.
[65] Voss, H.: Numerische Grundlagen der digitalen Simulation dynamischer Systeme. TU
Hamburg-Harburg, Report 19, 1998. www.tu-harburg.de/mat/.
[66] Wittenburg, J.: Schwingungslehre. Springer Verlag, Berlin, 1996, ISBN 3-540-61004-9.
[67] Woernle, C.: Mehrkörpersysteme: Eine Einführung in die Kinematik und Dynamik von Systemen
starrer Körper. Springer Verlag, Berlin, 1. Auflage, 2011, ISBN 10: 3642159818.
[68] Wood, G. D.; Kennedy, D. C.: Simulating Mechanical Systems in Simulink with SimMechanics.
Mathworks, The MathWorks, Inc., 2003. http://www.mathworks.com.
Stichwortverzeichnis
– abs, 9, 27, 29, 38 f, 42, 138, 154, 158, 218, 286 f, – if Abfrage, 27, 37, 42, 50, 91, 218, 297, 325, 405
297 – imag, 9, 144, 145
– addpath, 31 f – inline, siehe Function
– angle, 9 f – input, 32 f, 180, 286
– asin, 264 – int2str, 32
– atan, atan2, 9, 50 f, 61 f, 151 f – interp1, 241
– bicg, 21 – inv, 17, 91, 154, 158, 264 f, 402
– bicgstab, 21 – isempty, 30, 33, 199
– blkdiag, 117 – length, 17, 50, 91, 117, 144, 151 f, 404
– break, 27 – linsolve, 17, 21, 145
– bvp4c, bvp5c, 303 ff – linspace, 11, 35, 37, 50, 61, 70 f, 73, 140, 145, 151 f,
– bvpinit, 306 160, 241, 374, 402
– bvpset, 306 – load, 8
– cd, 31 – log, log10, 9
– cell, 25 – logspace, 11
– – cellplot, 25 – lookfor, 4, 31 f
– cgs, 21 – lu, 21
– char, 24 – min, max, 17, 61, 138, 297
– chol, 21 – nargchk, 30
– class, 6, 8, 83 – nargin, nargout, 30, 37
– clear, 8, 30 – nthroot, 9
– condeig, 91 – num2str, 32, 35
– conj, 9 f – odeplot, 241
– continue, 27 – odeset, 238 ff, 251, 258, 283
– ctranspose oder ’, 17 – odex, 164 ff
– decic, 257, 261 – odexx, 226, 238 ff
– det, 17, 91 – – ode113, 168, 204
– deval, 241, 307 – – ode15i, 272
– diag, 11 ff, 91, 113 f, 117, 140, 144 f, 258, 342, 374, – – ode15s, 170, 204, 251 ff, 258, 391
391, 401 – – ode23, 283
– diary, 8 – – ode23s, 204
– dir, 31 – – ode23t, 251 ff, 391
– disp, 32, 122, 179 – – ode45, 204, 245, 258, 263
– doc, 4 – ones, 11, 13, 23, 27, 61, 64, 73, 75 f, 241, 273, 404
– Doppelpunkt-Operator, 11 ff – path, 31
– double, 6 f, 16, 25, 83 ff, 93 ff – pause, 32, 70, 404
– eig, 17, 91, 135, 138, 374, 405 – persistent, 30, 36
– eigs, 135, 144 – pi, 6
– end Op., 11, 50, 61, 283, 286, 374 – prod, 17
– eps, 6 – Profiler
– error, 30, 218 – – profile on, 42
– eval, 30, 41, 50, 93 f, 402 – – profile viewer, 42
– exist, 26 – Punktoperation, 132
– exp, 9, 84, 86 ff, 94, 145, 154, 158 f, 374 – – elementweise Verknüpfung, 16
– expm, 145, 160 – pwd, 31
– eye, 11 ff, 91, 108, 117, 144, 158, 195, 374, 401 – qmr, 23
– feval, 30, 36 – quiver, 241
– find, 17 – rand, 11, 15, 84
– fliplr, 11 – rank, 17, 91, 360
– fopen, 32 f – real, 9, 145, 154, 158, 374
– for Schleife, 27, 28 ff, 38, 42, 50 ff, 70, 76 ff – realmax, realmin, 6
– format, 6 – repmat, 11, 14
– fprintf, 32, 179, 325 – return, 30, 33, 37
– global, 30, 36, 218, 245 f, 264, 283, 391 – rmpath, 31 f
– help, 4, 6, 30 – rref, 21
– helpwin, 4 – save, 8
426 Stichwortverzeichnis
Taylor-Reihe, 405
Tensor, 98
– Drehtensor, 98
– schiefsymmetrisch, 101
Tensortransformationsgesetz, 102
Textinterpreter
– TEX, LATEX, 49
Tildeoperator, 101 f, 112
Tilgungsfrequenz, 377
Trägheitsellipsoid, 350
Trägheitsradien, 350
Trägheitstensor, 109, 339
Transformation, 98, 100
– Drehtmatrix, 98
– Elementartransformation, 100
– inverse, 102
– Rollen, Nicken, Gieren, 100
Triggersignal, 330
Übergangsbedingung, 373
Unstetigkeiten, 275
– Beispiele, 276