Wolf Dieter Pietruszka
MATLAB und Simulink in der Ingenieurpraxis Modellbildung, Berechnung und Simulation
Wolf Diete...
71 downloads
1106 Views
109MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Wolf Dieter Pietruszka
MATLAB und Simulink in der Ingenieurpraxis Modellbildung, Berechnung und Simulation
Wolf Dieter Pietruszka
MATLAB und Simulink in der Ingenieurpraxis Modellbildung, Berechnung und Simulation 2., uberarbeitete und erganzte Auflage Mit 203 Abbildungen, 21 Tabellen und zahlreichen Beispielen
Teubner
Bibliografische Information der Deutschen Bibliothek Die Deutscine Bibliotinek verzeicinnet diese Publikation in der Deutscinen Nationalbibliograpinie; detaillierte bibliografiscine Daten sind im Internet uber abrufbar. Dr.-lng. Wolf Dieter Pietruszka, geb. 1938; Ingenieurstudium FH Kiel; Industrietatigkeit: Hamburg Flugzeugbau, Entwicklung; Diplomstudium Maschinenbau; Promotion zu Nichtlinearen Drehschwingungen 1977TU Braunschweig; ab 1975 Akad. RafORat Universitat Duisburg-Essen/Mechanik; Fachgebiete und Forschungsschwerpunkte: Nichtlineare Schwingungen, Rotordynamik, aktiv und passiv gelagerte Rotoren; Lehrveranstaltungen: Maschinendynamik, Rotordynamik, Schwingungslehre, Schwingungsanalyse mit MATLAB, Simulation dynamischer Systeme mit MATLAB
LaTeX-Formatvorlage: Harald Harders 1. Auflage2005 2. uberarbeitete und erganzte Auflage Dezember 2006
Alle Rechte vorbehalten © B. G.Teubner Verlag / GWV Fachverlage GmbH, Wiesbaden 2006 Der B. G. Teubner Verlag ist ein Unternehmen von Springer Science+Business Media, www.teubner.de Das WerkeinschlieBlichaller seiner Telle ist urheberrechtlichgeschutzt. JedeVerwertung auBerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulassig und strafbar. Das gilt insbesondere fur Vervielfaltigungen, Ubersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten waren und daher von jedermann benutztwerden durften. Umschlaggestaltung: Ulrike Weigel, vvvvw.CorporateDesignGroup.de Druck und buchbinderische Verarbeitung: Strauss Offsetdruck, Morlenbach Gedruckt auf saurefreiem und chlorfrei gebleichtem Papier. Printed in Germany
ISBN 978-3-8351-0100-5
Vorwort Das Programmsystem MATLAB®\ Simulink® ist ein Werkzeug zur numerischen Bearbeitung von einfachen bis hin zu komplexen technischen Systemen. Es ist zur sclinellen Analyse und Synthese dynamischer Vorgange insbesondere in der Forschung und Entwicklung geeignet und wird lieute zunelimend in der Industrie eingesetzt. Sein Platz in der Ausbildung an Universitaten, Hochschulen und Fachhochschulen ist seit langem unumstritten und gewinnt weiter an Bedeutung. Mit MATLAB gelingt es die Studierenden facherlibergreifend mit nur einer Plattform walirend des gesamten Studiums an die reclinergestutzte Bearbeitung von Problemen u. a. der Mathematik, der Physik und speziell der Regelungstechnik, der Mechanik, der Mechatronik und der Elektroteclinik lieranzufuliren. In Lehrveranstaltungen konnen praxisrelevante Beispiele anschaulicli bearbeitetet und dargestellt werden. The MathWorks, Inc., der Herausgeber von MATLAB® Softwareprodukten, unterstiitzt diese Aktivitaten zunehmend. Dariiber hinaus existiert ein sehr umfangreiches Literaturangebot. Dies beinhaltet vielfach ausfiihrliche Besclireibungen der M ATLAB-Handbiicher und Online-Hilfen und vermittelt somit einen breit angelegten Einstieg in den Umgang mit MATLAB® und Tools. In diesem Buch soil ein anderer, d. h. ein mehr problemorientierter Weg beschritten werden. Dazu musste zunachst 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. Signalflussgrafen, auf phanomenologische Fragestellungen und die Visualisierung. Es soUten zunachst einmal fundamentale Begriffe, Zusammenhange und Methoden verstanden worden sein. Verstehen bedeutet fiir den Ingenieur nicht nur gedankliches Nachvollziehen einer mathematischen oder numerischen Methode, sondern vor allem die Fahigkeit, die entsprechenden tjberlegungen 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 unterstutzen. Zwar unterliegen die Grundlagen in den einzelnen Disziplinen unterschiedlichen Beschreibungsformen, die Modellierung, die Simulation, die eingesetzten Methoden und die programmtechnische Umsetzung sind jedoch dieselben. Z. B. umfassen dynamische Systeme im Maschinenbau und der Elektrotechnik zeitkontinuierliche und ereignisgetriebene Vorgange, die Ursachen sind aber andere. So werden im Maschinenbau Ereignisse durch StoBe und durch tJbergange von Haft- zu Gleitreibung ausgelost, in der Elektrotechnik hingegen durch Kurzschlusse und Schaltvorgangen mittels Diode, Transistor oder Schalter. GroBer Wert wird auf die unmittelbare Umsetzung in ein entsprechendes MATLAB- bzw. Simulink-Modell gelegt. Deshalb ziehen sich textbegleitende Beispiele mit zugehorigen Programmen und Signalflussgrafen durch das gesamte Buch. Die vollstandigen sowie erganzende gut dokumentierte Programme (iiber 150) sowie eine Liste mit kurzen Erlauterungen stehen auf der Homepage zum Buch, erreichbar iiber die des Teubner Verlages www . t e u b n e r . d e , zur Verfiigung. Der Inhalt des vorliegenden Buches ist nach einzelnen Schwerpunkten in acht Kapiteln so 1 MATLAB®, Simulink® sind eingetragene Warenzeichen von "The MathWorks, Inc."
VI
abgefasst, dass auch ein direkter Einstieg in die einzelnen Kapitel moglich ist. Vorausgesetzt werden Kenntnisse in der Matrizenrechnung. Eine Einfulirung in die Arbeitsweise und den Sprachumfang von MATLAB® und der Computeralgebra mit der Symbolic Math Toolbox vermittelt das erste Kapitel. Dariiber hinaus wird auf die grafischen 2D- und 3D-Darstellungsmoglichkeiten sowie auf Ansatze zur Erstellung von Animationsmodellen und deren Visualisierung eingegangen. Dieses Kapitel ist fiir den Einstieg in MATLAB unumganglich. Im zweiten Kapitel zeigen wir die rechnergestiitzte mathematische Modellbildung anhand nichtlinearer mechanischer Modelle und deren Linearisierung. Die Grundlagen werden so aufbereitet, dass eine symbolische Auswertung mit der Computeralgebra erfolgen kann. Anhand eines Beispiels werden alle vorgestellten Methoden algorithmisch aufbereitet und programmiert. Das in der zweiten Auflage neu aufgenommene dritte Kapitel befasst sich mit linearen, mechanischen Schwingungsmodellen. Ausgehend von einer ublichen 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®. Vorangestellt werden Grundlagen zu den Integrationsverfahren, deren Klassifizierung und Eigenschaften. Die Einfiihrung erfolgt schrittweise mit der Bearbeitung eines kleinen Projektes. Neben der blockorientierten Simulation spielt die skriptorientierte Modellierung mit dem Basismodul MATLAB® des Kapitels fiinf eine wesentliche RoUe. Die Anwendung erfolgt an kleinen Beispielen. Diese beinhalten neben den Standardformulierungen als explizite bzw. implizite Differentialgleichung die Beschreibung als differential-algebraische Gleichung sowie die Formulierung von Systemen mit Ereignissen wie StoB und Reibung. Die Kapitel sechs und sieben behandeln zwei niitzliche Tools fiir die Simulink-Umgebung. Zunachst wird das Statef low® Tool vorgestellt und auf eventgesteuerte Systeme angewendet. Als Vertreter fiir eine physikalische Modellierung wird das blockorientierte SimMechanics Tool eingesetzt. Das achte Kapitel enthalt sechs fiir sich abgeschlossene Projekte, die die bisherigen Grundlagen vertiefen und erganzen. Unterschiedliche Losungswege werden gegeniibergestellt. Anregungen fiir eigene Projekte soUen vermittelt werden. Das Buch ist nicht ausschlieBlich einer Lehrveranstaltung zuzuordnen, es ist vielmehr studienbegleitend beziiglich der Grundlagen, der Anwendungen und der numerischen Ausfiihrungen einzusetzen. Es ist gleichermaBen fiir Studierende an Universitaten, Hoch- und Fachhochschulen sowie fiir Ingenieure der Praxis gedacht. Aus diesem Grund sind neben einfiihrenden Beispielen komplexere Probleme mit praxisrelevanten Komponenten enthalten. Insbesondere soUten diese Probleme auf experimentellem Wege, z. B. mit Parametervariationen, Ausgabeanpassungen, Modifikationen der numerischen Methoden, am Rechner erarbeitet werden. Das technische Problem soUte zunachst im Vordergrund, die Programmierarbeit im Hintergrund stehen. Zur Vertiefung der Programmierung existieren IJbungsvorschlage, die mit Hilfe der Projekt-Programme bearbeitet werden konnen. Neben dem Basismodul MATLAB® werden die Tools Simulink®, Symbolic Math, Stateflow®, SimMechanics und eingeschrankt die Control System Toolbox vorausgesetzt. Eine Studentenversion, siehe: www.mathworks . d e / a c a d e m i a / s t u d e n t _ v e r s i o n / , ist erhaltlich.
VII
Mein Dank gilt dem Teubner Verlag fiir die Herausgabe sowie Herm Dr. M. Feuchte und Frau McLemore fiir die Unterstiitzung und gute Zusammenarbeit bei der Erstellung der Druckvorlage. Fiir die groBziigige Bereitstellung der Software bedanke icli micli einerseits bei der Firma The MathWorks, Inc., 3 Apple Hill Drive, Natick, MA 01760-2098 USA und da speziell bei Herm Courtney Esposito und andererseits bei Frau Annegret Schumann von der The MathWorks GmbH in Aachen. Duisburg, im Oktober 2006 wdQpletruszka.de
Wolf Dieter Pietruszka
Inhaltsverzeichnis Einfuhrung in MATLAB® 1.1 Einige Bemerkungen zur Arbeitsweise von MATLAB 1.2 Basis-Elemente 1.2.1 Skalare Operationen und Datenverwaltung 1.2.2 Mathematische Funktionen 1.2.3 Vektoren und Matrizen 1.2.3.1 Vektor-, Matrizen-Operationen und Built-in Functions 1.2.4 Spezielle Datenstrukturen 1.2.4.1 Mehrdimensionale Matrizen 1.2.4.2 Zeichenketten (Character, String) 1.2.4.3 Strukturen, (Structure Array) 1.2.4.4 Zellen (Cell Array) 1.2.5 Vergleichsoperatoren und logische Operatoren 1.2.6 Verzweigungen und Schleifen 1.3 Programmerstellung, MATLAB Script und Function 1.3.1 MATLAB Editor und Verzeichnisprioritat 1.3.2 Datenein-und Ausgabe 1.3.3 MATLAB Script 1.3.4 MATLAB Function 1.3.4.1 Standard-Function und Function Functions 1.3.4.2 Nested Function 1.3.4.3 String-Auswertung und Anonymous Function 1.4 Grafik 1.4.1 Grafikfenster (Figure), Erstellung und Verwaltung 1.4.1.1 Subplot-Fenster, der subplot-Befelil 1.4.2 2D-Grafik 1.4.2.1 Plot-Befehle 1.4.2.2 Achsen und Beschriftung 1.4.2.3 Erganzende Grafik-Befehle 1.4.2.4 Interaktive Plot-Erstellung und-Tuning 1.4.3 3D-Grafik 1.5 Animation von 2D-und 3D-Modellen 1.5.1 Modellerstellung 1.5.2 Animations-Grafik 1.5.3 2D-Animation einfacher Linien-Modelle 1.5.3.1 Erstellung komplexer Linien-Modelle 1.5.4 3D-Animation eines Rotorelements 1.5.4.1 Mantelflache des Zylinders
1 4 5 5 8 9 14 19 19 19 20 21 21 23 25 26 28 29 31 31 34 36 37 39 40 40 40 41 44 46 49 55 55 56 57 59 60 61
X
Inhaltsverzeichnis 1.5.4.2 Stimflachen 1.5.4.3 Kennzeichnung der Null-Marke 1.5.4.4 Animation von Drehbewegungen 1.6 Code-Beschleunigung, der Profiler 1.7 ComputeralgebraunterMATLAB, die Symbolic Math Toolbox 1.7.1 Online-Hilfe 1.7.2 Symbolische Objekte 1.7.3 Vereinbamng symbolischer Variablen und Ausdriicke (Objekte) 1.7.4 Substitution symbolischer und numerischer GroBen, der subs Befehl 1.7.5 Beispiele aus der Analysis 1.7.6 Algebraische Gleichungssysteme, der solve Befehl 1.7.7 Gewohnliche Differenzialgleichungen, der dsolve Befehl 1.7.8 Beispiel zur linearen Algebra 1.7.9 tJbergang zur Numerik
62 62 63 64 67 68 68 69 71 71 72 74 76 78
2
Modellbildung 2.1 Strukturen der Bewegungsgleichungen 2.2 Grundlagen 2.2.1 Kinematik starrer Korper 2.2.1.1 Drehmatrix 2.2.1.2 Geschwindigkeiten und Beschleunigungen 2.2.1.3 Kinematik von Mehrkorpersystemen 2.2.2 Kinetik 2.2.2.1 Der Impulssatz 2.2.2.2 DerDrallsatz 2.3 Newton-Euler-Methode 2.3.1 Rechnerorientierte Vorgehensweise 2.4 Lagrange'sche Gleichung 2. Art 2.5 Linearisierung 2.6 Anwendung der Modellerstellung
81
3
Lineare Schwingungsmodelle 3.1 Bewegungsgleichungen 3.2 Eigenschwingungen und freie Schwingungen 3.2.1 Das Eigenwertproblem in MATLAB, allgemeine Betrachtung 3.2.2 Numerische Behandlung der Eigenwertprobleme 3.2.2.1 Das konservative System ohne gyroskopischen Einfluss 3.2.2.2 Das konservative System mit gyroskopischem Einfluss 3.2.2.3 Das gedampfte gyroskopische System 3.2.2.4 Das allgemeine nichtkonservative System 3.3 Erzwungene Schwingungen 3.3.1 Konstante Erregung 3.3.2 Harmonisch angeregte mechanische Systeme 3.3.2.1 Reelle Formulierung der Erregung 3.3.2.2 Komplexe Anregungsfunktion
117 118 120 120 122 122 127 132 133 134 135 136 136 139
83 83 83 84 86 89 94 95 95 97 102 104 108 Ill
Inhaltsverzeichnis 3.3.2.3 3.3.2.4 3.3.2.5 4
Komplexe Bewegungsgleichung Losungsverhalten Beschreibung in der Zustandsform
Simulation unter Simulink® 4.1 Zur Funktionsweise 4.1.1 Block-Stmktur 4.1.2 Simulationsablauf 4.2 Die Integrationsverfahren 4.2.1 Methoden und Bezeichnungen 4.2.2 Steifigkeit der Differenzialgleichung 4.2.3 Bemerkungen zur Wahl der Verfahren 4.3 Simulink-Grundlagen 4.3.1 Die Modell-Library 4.3.2 Einstellung des Integrators und des Datentransfers 4.3.3 Datentransfer iiber den Workspace 4.3.4 Simulationsaufruf aus der MATLAB Umgebung 4.3.5 Hilfsmittel zur Modellerstellung und Datenauswertung 4.3.5.1 Zur Erstellung eines Subsystems 4.3.5.2 Maskierung und Parameterbox 4.3.5.3 Marken und Speicher flir den Signalfluss 4.3.5.4 Zur Bearbeitung der Scope-Darstellung 4.3.5.5 Der Modell Explorer 4.3.5.6 Der Simulink-Debugger, erste Schritte 4.4 Simulink-Modellierung eines einfachen Projekts 4.4.1 1/4-Fahrzeugmodell und die Bewegungsgleichungen 4.4.2 Aufbereitung der Bewegungsgleichungen 4.4.2.1 Fahrzeugmodell ohne Reibelement 4.4.2.2 Fahrzeugmodell mit Reibelement 4.4.3 Das Fahrbahnprofil 4.4.3.1 Modellierung der Fahrbahnunebenheit 4.4.3.2 Modellierung der ebenen Fahrbahnstruktur 4.4.4 Parametrisierung des Zustandsmodells im State Space Block 4.4.5 Modellierung der Reibelemente 4.4.5.1 Coulomb-Reibkennlinie 4.4.5.2 Abschnittsweise stetige Reibfunktion 4.4.5.3 Statischer Test der Reibmodelle 4.4.6 Die Startroutine fur die MATLAB-Umgebung 4.4.7 Simulink-Modelle und Simulationsergebnisse 4.4.7.1 Das reibungsfreie Modell 4.4.7.2 Das reibungsbehaftete Modell 4.5 Modellierung mit Hilfe einer S-Function 4.5.1 M-File S-Function 4.5.1.1 Level-1 Standard 4.5.1.2 Level-2 Standard
XI 140 141 142 147 147 147 148 149 150 155 156 157 157 158 160 160 161 161 162 164 166 167 167 169 170 171 171 172 173 173 175 177 178 178 179 180 182 183 183 184 189 189 190 193
XII
Inhaltsverzeichnis 4.5.2 C Mex-File S-Function 4.5.2.1 S-Function Builder 4.5.2.2 Einfache C Mex-File S-Function
5
197 197 198
Simulation unter MATLAB® 201 5.1 Struktur der Differenzialgleichungen 201 5.1.1 Beispiele fur eine explizite Formulierung 204 5.1.1.1 Lineare mechanische, elektrisclie und regelungstechnisclie SySterne . . . . 204 5.1.1.2 Nichtlineare Systeme 209 5.2 Der grundsatzliche Aufbau eines Simulationsprogramms 213 5.2.1 Moglichkeiten zum Integratoraufruf unter MATLAB 213 5.3 Integration von Systemen in Standardform 216 5.3.1 Unwuchtiger Motor auf elastischem Fundamentblock 218 5.3.1.1 Bewegungsgleichungen 219 5.3.1.2 Aufbereitung der Bewegungsgleichungen 219 5.3.1.3 Programmausschnitte und numerische Ergebnisse 220 5.3.1.4 Formulierung mit zustandsabhangiger Massenmatrix 223 5.4 Differenzial-algebraische Gleichungen 224 5.4.1 Mathematische Hintergriinde 224 5.4.2 Moglichkeiten unter MATLAB und Simulink 226 5.4.3 Mechanische Bewegungsgleichungen mit algebraischen Bindungsgleichungen 228 5.4.3.1 Lagrange'sche Gleichung 1. Art 228 5.4.3.2 Strukturen differenzial-algebraischer Gleichungen 229 5.4.3.3 Das Problem vom Index 1 229 5.4.3.4 Erlauterung der Vorgehensweise am Beispiel 231 5.4.4 tJberfiihrung in gewohnliche Differenzialgleichungen 235 5.4.4.1 Bemerkung zur Drift-Unterdrlickung 240 5.4.4.2 tJbergang auf Minimalkoordinaten 241 5.5 Implizite Differenzialgleichungen 242 5.6 Integration gewohnlicher Differenzialgleichungen mit Unstetigkeiten 244 5.6.1 Beispiele fiir Unstetigkeiten in den Bewegungsgleichungen 245 5.6.2 Formulierung von Schaltfunktionen 247 5.6.3 Lokalisierung der Schaltpunkte 248 5.6.4 Beispiele zur Zwei-Punkt-Schaltlogik 250 5.6.4.1 Der springende Ball im umgebenen Medium 250 5.6.4.2 Unstetige Kennlinie und das StoBproblem 253 5.6.5 Dreipunkt-Schaltlogik am Beispiel eines Zwei-Massen-Schwingers mit Reibung258 5.6.5.1 Zur Modellierung der Reibkraft 258 5.6.5.2 Reibmodell mit einem Reibkontakt 259 5.6.5.3 Reibschwinger mit zwei Reibkontakten 271
Inhaltsverzeichnis
XIII
6
Modellierung und Simulation mit dem Stateflow® Tool 6.1 Stateflow-Elemente 6.1.1 Das Chart 6.1.2 Zustand und Zustand-Label 6.1.3 Transitionen 6.1.3.1 Aktivierungsregeln 6.1.4 Default Transition 6.1.5 Verbindungspunkte 6.1.6 Der Modell-Explorer 6.1.7 Erweiterte Strukturen 6.2 Beispiel: Schwinger mit Coulomb-Reibung 6.2.1 Bewegungsgleichungen und Schaltbedingungen 6.2.2 Simulink-Modell mit Chart 6.2.2.1 Datenfile 6.2.2.2 Simulink-Subsystem des Fahrzeugs 6.2.2.3 Das iibergeordnete Simulink-Modell 6.2.2.4 Das Stateflow-Diagramm und Testmoglichkeiten 6.2.2.5 Simulationsergebnisse zum Fahrzeugmodell 6.3 Beispiel: Springender Ball
273 273 274 275 276 277 278 278 279 280 280 280 281 281 282 283 284 285 286
7
Physikalische Modelle unter Simulink® 7.1 SimMechanics Tool 7.1.1 Funktionsweise 7.1.2 Untersuchungsmethoden 7.1.3 Erstes SimMechanics-Modell 7.1.4 Arbeitsweise des Joint Stiction Actuators 7.1.5 Visualisierung und Animation der Maschine 7.1.6 Einige mathematische Aspekte 7.2 Anwendungen und Ausblick
291 292 292 293 293 301 305 307 309
8
Projekte 8.1 Permanentmagnet gelagerter Rotor 8.1.1 Systembeschreibung 8.1.2 Rotor-und Magnetmodellierung 8.1.3 Die aktive Stabilisierung, Reglerstrukturen 8.1.4 Das kontinuierliche Modell 8.1.5 Reglerentwiirfe 8.1.5.1 Zustandsregler 8.1.5.2 Regler mit Integralanteil 8.1.6 Parametrierung und Reglerkoeffizienten 8.1.7 Simulink-Modelle 8.1.8 Simulationsergebnisse 8.2 StorgroBenkompensation harmonischer und konstanter Storungen 8.2.1 Grundlagen zur Strecke und zum Beobachterentwurf 8.2.2 Parameterfile und Simulink-Modell
311
311 312 313 314 315 316 316 318 319 319 320 320 323 325
XIV
Inhaltsverzeichnis
8.2.3 Beobachter iiber S-Funktion 326 8.2.4 Analytische Ermittlung der Losungen 326 8.2.5 Ergebnisse 330 8.3 Schwingungstilger mit viskoelastischem Anschlag 332 8.3.1 Das stationare System ohne Anschlag 333 8.3.2 Entwurf des Simulink-Modells 335 8.3.2.1 Sweep-Generator, Anregungsfunktion 335 8.3.2.2 Modell des mechanischen Schwingers und der StoBkraft 337 8.3.2.3 Auswertemodul 337 8.3.3 Schwingungsantwort mit einem Sinus-Sweep des Systems ohne/mit Anschlag . 339 8.3.3.1 Stationare Schwingungen zur Tilgungsfrequenz 340 8.4 Axialkolbenverdichter einer Pkw-Klimaanlage 342 8.4.1 Das Modell 342 8.4.2 Der Hebelmechanismus 343 8.4.3 Bewegungsgleichungen nach Lagrange 344 8.4.4 Das M-File, erste Ergebnisse 347 8.4.5 Modellbasierter Entwurf 348 8.4.6 Vergleich der Ergebnisse beziiglich der Gelenkkrafte 349 8.4.7 Stationare Lage, die Trimming-Methode 350 8.4.8 Der Verdichter als SimMechanics-Modell 351 8.5 Dreifachpendel 352 8.5.1 Lagrange'sche Gleichung 2. Art 354 8.5.2 Newton-Euler-Formalismus 355 8.5.3 tJbergang zur Numerik und Integration 358 8.5.4 Animationsmodell 359 8.5.5 Schwingungsverhalten 361 8.5.6 Vorwartsdynamik mit SimMechanics 363 8.5.7 Inverse Dynamik 366 8.6 Hubschwingungen eines Viertelfahrzeugs mit nichtlinearem StoBdampfer 367 8.6.1 Bewegungsgleichungen und Voraussetzungen 369 8.6.2 Programmierhinweise 373 8.6.3 Simulationsergebnisse 377 Literaturverzeichnis
379
1
Einfiihrung in MATLAB®
Ursprlinglich war MATLAB®^ ein Benutzerinterface fiir Standardroutinen der numerischen Algebra (Eispack, Unpack (=Lapack)) basierend auf Vektor- und Matrizenoperationen, worauf bereits der Name MATrix LABoratory hinweist. Kommerziell wurde das erste Programmpaket 1984 ausgeliefert. Heute ist die MATLAB® Produktfamilie in erster Linie ein Softwarepaket zur numerischen Berechnung und Visualisierung u. a. in den Mathematik- und Ingenieurwissenschaften. Es verfugt iiber 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 Losung von Differenzialgleichungen. Die Built-in Functions sind fiir Vektoroperationen bezuglich der Rechenzeit optimiert. Benutzereigene Functions (Unterprogramme) konnen das Programmpaket erweitern. Diese Functions soUten - wenn moglich - ebenfalls in vektorisierter Form abgefasst werden; dies dient auch einer guten tJbersichtlichkeit. Eine weitere Saule der MATLAB-Umgebung ist die grafische Entwicklungsumgebung Simulink®^ u. a. mit den Tools Stateflow®, SimMechanics, SimPowerSystems, SimDriveline, SimHydraulics™, Real-Time Workshop® usw.. Viele optionale Toolboxen, z.B. Control System, Signal Processing, Symbolic Mathematics erganzen die Entwicklungsplattform. Altemativen^ stellen u. a. die kommerziell vertriebenen Programmpakete MATRIXx und OMatrix sowie die frei erhaltlichen Programmpakete Octave, ein MATLAB-Clone, und Scilab mit einer benutzerfreundlichen Umgebung und einer zu MATLAB ahnlichen Syntax dar. MATLAB® 7.3, Release 2006b - kurz: (R2006b) - ist die z. Z. aktuelle Version. Die im Folgenden abgedruckten Fenster-Layouts, im Zusammenhang mit dem Betriebssystem Windows XP, basieren auf den Versionen MATLAB® 7.2/7.3 (R2006a/b). Desktop und Fenster: Das Desktop, Bild 1.1, das nach dem Start von MATLAB geoffnet wird, ist das Kemelement der MATLAB-Umgebung. In der Grundeinstellung sind Command, C u r r e n t D i r e c t o r y , Workspace und Command H i s t o r y Window zuganglich, andere Layouts sind wahlbar. Der Help-Button in der Meniileiste offnet ein Shortcut-Menii u. a. mit Hilfe-Pfaden zum Desktop Using the Desktop sowie dem jeweiligen aktiven Fenster, mit dem sich ebenfalls der Menii-Leistenaufbau und -Inhalt anpasst. Die interaktive Arbeitsweise erfolgt, wie in Bild 1.1 angedeutet, im Command Window, vgl. Help ^uiionlUsing the Command Window bei aktiven Command Window. Fiir die Programmerstellung steht ein Text-Editor zur VerfUgung. Durch An- und Ausdocken weiterer Fenster, z. B. des Editor- und Grafik-Fensters, mit Hilfe des Button: JLI im jeweiligen Fenster-Kopf, kann mit dem Desktop ab MATLAB 7 eine kompakte Arbeits-Umgebung mit eigens gestalteter Anordnung geschaffen werden. Das Fenster Workspace (Info: doc w o r k s p a c e / Link w o r k s p a c e 1 MATLAB® ist ein eingetragenes Warenzeichen der Firma "The Math Works, Inc." www.mathworks.com, bzw. www.mathworks.de 2 Simulink®, Stateflow®, Real-Time Workshop®, SimHydraulics™ sind eingetragene Warenzeichen der Firma "The Math Works, Inc." 3 0-Matrix: www.omatrix.com, Octave: http://www.octave.org/, Scilab: http://www.scilab.org/
1 Einfuhmng in MATLAB® fensterabhancjiye Menij-Leiste hier: Command Histoiiy
Hilfe einblenden
aktuelles Verzeichnis
1^ MATLAB 7.3.0 [R2006b) File
Edit
Debug
DeskJtop
Window
-L
Help
D Gi^u ^ a >n c.\u^ Shortcuts S
How to Add
0
m\f
I
BA
Value
f!^
6286.9041 53.25
53.25
i
Bans
7.9072
7.9072
'
<J
1
INI
> |
Workspace
•format compact ••a= (47 + le+02 *1. 5+4^^2 ) /4 ••a=4\ (47 + 16+02*1.5+4-^2) , A= ( •yl = 2-'-2+log(pi) *. . ••sin(0.75*pi/2) +sqrt (
I
•single(yl)^
»
53.2500 a=4\ (47 + le+02*1.5+4-"2) , A= ( 1 . 2+7S . 09)-"2 5 .2500
||
I- .^369e+003 >> yl = 2-"2+log(pi) *. . . sin(0.75*pi/2)+sgrt(exp(2*pi/3)) yl = 7.9072 |y>> single(yl) ans =
»
7.9072 x=l:10;
>> .
••x=l:10;
jjgJLSJEairjjjJ
a=(47+le+02*l.5+4^2)/4
=i =
[1 2 3 4 5 6 7 8 9 10] 1 7.9072
ausdocken des Command Fensters
»
6286.... E
Ba
Current Directory
sdmeller Zuyriff u.a. auf Tools
_E\3^^
>> format compact
Min
7.9072
aktuelles Verzeichnis einblenden
\i
Command Win dew
% gl® gH# P f e ^ ' Workspace Browser
^
What's New
Workspace
Name -^
C:\BMATL
Ve I z e i ch n isa uswa h I
Einezeile, Command Zeile
Historie der Befehlsfol(|en
Bild 1.1: Desktop, IVIATLAB® 7.3 b r o w s e r ) zeigt den Workspace Browser mit dem Namen (Name), dem Wert (Value), und dem zugehorigen Minimal-, Maximalwert (Min, Max), der im aktuellen Workspace gespeicherten GroBen. Mit einem Doppel-Klick der linken Maustaste auf das Symbol ffl offnet sich der zugehorige Army Editor, Daten werden angezeigt und konnen manipuliert werden. Wahlt man im Workspace Browser, wie in Bild 1.1, den Vektor x aus, dann wird der Button 1 . ^ angezeigt, worliber eine grafische Auswertung in auszuwahlender Darstellung erfolgt. Das C u r r e n t D i r e c t o r y Fenster enthalt den Inhalt des aktuellen Pfads. Durch einen Doppel-Klick der linken Maustaste auf den Filenamen wird das M-File im Editor angezeigt. SchlieBlich werden im Command H i s t o r y Fenster Eingabezeilen, wie in Bild 1.1 angedeutet, aufgezeichnet; sie sind mit der linken Maustaste wieder aktivierbar. In jedem Falle offnet sich mit einem Mausklick der rechten Taste das zur Mauszeigerposition gehorige Shortcut-Menu, womit weitere Ausfuhrungen eingeleitet werden konnen. Einen Umgang mit dem Desktop, dem Command Window usw. vermitteln die Video Tutorials u. a. unter: Button Help/Demos -^ MATLAB. Online-Hilfe: Eine gut strukturierte und weitgehend selbsterklarende Online-Hilfe unterstutzt das gesamte Angebot und sollte deshalb fur den Benutzer zu einem wichtigen und sehr hilfreichen Werkzeug werden. Einen detaillierten tJberblick bezuglich aller Hilfe-Kommandos erhalt man durch Eingabe von ^ help h e l p t o o l s Wir woUen, aufbauend auf den Schlusselwortern help, helpwin, doc, sie sollten stets parallel gebraucht werden, einen Einstieg in die Online-Hilfe vermitteln. Beispiel-Aufruf: help (liefert einen tJberblick im Command Window) oder spezieller help (toolbox) spezifikation, z. B. help
g e n e r a l fiir allgemeine Befehle und help ops bzw. help/ fiir arithmetische Operationen +, —, *, / , . . . einschlieBlich Querverweise. Die gleiche Information erhalt man mit help win und teilweise mit doc dargestellt im Help Browser, vgl. helpwin ops, doc ops. Querverweise sind bequem iiber Links zu erreichen. Dariiber hinaus sind mit doc thema - z. B. doc f u n c t i o n , doc e i g - gezielt die Referenzseiten der HTML-Dokumentation im Help Browser abrufbar. Da e i g eine (Built-in) Function ist, liefert help e i g , helpwin e i g - im Gegensatz zum doc Aufruf den ersten Kommentar-Block in der Function. Enthalt die Dokumentation keine Referenzseite zum ausgewahlten thema, dann wird auch mit doc der Kommentarblock angezeigt. Dies ist auf die Kommentare eigener M-Files iibertragbar, so dass sich eine eigene Programm-Hilfe schaffen lasst. Weitere Hinweise finden wir mit: doc h e l p , doc h e l p w i n , doc doc. Schliisselworte zum gleichen Themenkreis werden stets am Ende des Hilfe-Dokuments, z. B. nach help h e l p , ausgegeben. U. a. lookfor fiir die Begriffsuche in der ersten Kommentar-Zeile bzw. Block aller M-Files im MATLAB-Path, vgl. help l o o k f o r . Dariiber hinaus wird iiber das ?-Icon in der Menii-Leiste des Desktops bzw. durch Eingabe von h e l p b r o w s e r die erste/eine Seite des HTML-Documents im Help Browser geoffnet, womit eine erweiterte Online-Hilfe zur Verfiigung steht. Eine gezielte Suche u. a. iiber S e a r c h 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 fiir den eigenen Umgang mit MATLAB. Zu erwahnen sind auch die lehrreichen Demos sowie die bereits erwahnten Video Tutorials sowie weiterfiihrende Webinare und neuerdings die E-Learning Kurse am Arbeitsplatz. Letztendlich stehen alle Handbiicher im HTML- und PDF-Format zur Verfiigung, siehe unter www. mathworks . com. Wir woUen in diesem Kapitel grundlegende MATLAB-Elemente und -Befehle zusammenstellen und sie anhand kleiner Beispiele erlautern. Befehle enthalten Variable, die wir in allgemeinen Erlauterungen kursiv schreiben, optionale Parameter werden in ( )-Klammern gefasst und MATLAB-Funktionen und -Variable weitgehend durch Fettdruck hervorgehoben. Standardwerte (Default) werden, wie in den MATLAB-Dokumentationen, in geschweifte Klammem { } gesetzt. Dariiber hinaus unterscheiden wir in den abgedruckten Programmsegmenten zwei Darstellungen: 1. Programmsegmente mit fett hervorgehobenen MATLAB-Befehlen, 2. Programmsegmente und Befehlsfolgen als Kopie des Command Windows bzw. der EditorDarstellung.
Die erste Form wird immer im Zusammenhang mit unmittelbar zuvor vorgestellten Befehlen, die zweite Form insbesondere bei parallel verfiigbaren Programm-Codes - um Schreibfehler auszuschlieBen - benutzt. Sie heben sich durch die Schrift-Art und -GroBe vom FlieBtext ab. Dariiber hinaus werden Moglichkeiten zur grafischen Ausgabe von Daten sowie deren Animation aufgezeigt. Im letzten Abschnitt dieses Kapitels wird dann auf die Computeralgebra mit der Symbolic Math Toolbox eingegangen. Die Einfiihrung ist weitgehend auf die Belange dieses Buches mit den zugehorigen Projekten/LFbungen u. a. in Kapitel 8 zugeschnitten und somit nicht voUstandig. Umfassendere Grundlagen findet man u. a. in [8], [14], [30], [31], [48], [63] [67]. Insbesondere wird in der Einfiihrung von [63] auf ein weites Spektrum der Moglichkeiten unter MATLAB systematisch eingegangen und mit vielen Beispielen anschaulich dargestellt. Neben den GrafikGrundlagen sind viele Ideen unterschiedlichster Darstellungsmoglichkeiten zusammengetragen.
4
1 Einfuhmng in MATLAB®
In [48] sind neben einer mehr mathematisch orientierten Einfuhmng in MATLAB viele Builtin Function, z. B. zur Eigenwertberechnung, Losung linearer Gleichungssysteme, gewohnliche und partielle Differenzialgleichungen, FOURIER-Analysis usw., mit wichtigen mathematischen Hintergrtinden zu finden. Beispiele, Ubungen und Programmcodes dienen der Erlauterung und geben wertvoUe Tipps auch zu Grafikelementen fiir den fortgeschrittenen MATLAB-Anwender. [48] ist insbesondere dem mathematisch Interessierten sehr zu empfehlen. In [67] existieren Dokumentationen von ca. 1.000 MATLAB-Befehlen. Die Funktionen der einzelnen Befehle werden verstandlich erlautert und anhand zahlreicher Beispiele und Abbildungen verdeutlicht.
1.1
Einige Bemerkungen zur Arbeitsweise von MATLAB
MATLAB ist eine Sprache der vierten Generation (4GL)'^ 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 Ausdriicken, die der menschlichen Sprache entlehnt sind. 4GLs lassen sich daher einfacher benutzen als 3GLs. Die Ausfiihrungszeiten sind aufgrund der Interpretation oft langsamer als von 3GL, da diese zur Beschleunigung der Ausfiihrung in Assembler- oder Maschinencode iibersetzt werden. MATLAB ist eine 4GL, die spezifisch fiir Ingenieure und Wissenschaftler entwickelt wurde. Diese intuitive Sprache, die interaktive Umgebung und die eingebauten mathematischen und grafischen Funktionen machen MATLAB zu einer Plattform insbesondere fiir technische Berechnungen. 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 geandert werden. Vor MATLAB 6.5 wurde die MATLAB-Sprache in zwei Schritten ausgefiihrt. Zuerst wurde der Code in einen P-Code iibersetzt. Diesen Befehlssatz fiihrt danach der MATLAB-Interpreter aus. Einige P-Code-Anweisungen sind hochsprachliche Anweisungen, so dass ihre Ausfiihrung viel Zeit in Anspruch nimmt. Hierzu gehoren Programmteile, die mit Skalaren und mit f orSchleifen arbeiten. Nur beziiglich vektorisierter Ausfiihrungen wird der zugehorige P-Code sehr schnell ausgefiihrt. Ab MATLAB 6.5 existiert ein Just-In-Time- Accelerator, mit dem Programmteile, die insbesondere Schleifen und skalare Mathematik enthalten, automatisch beschleunigt werden. Der JITAccelerator konvertiert die bisher langsam ausgefiihrten Anweisungen vom P-Code in native Maschinenbefehle, wodurch sie sehr schnell ausgefiihrt werden. Der JIT-Accelerator lasst auch einen vorher nicht vektorisierten Code schneller ablaufen, womit die bisher angestrebte Vektorisierung scheinbar an Bedeutung verliert. Die Vektorisierung hat aber weiterhin den Vorteil einer pragnanten Formulierung der Algorithmen und liefert einen iibersichtlichen Programm-Code, vgl. insbesondere Kapitel 3 und Abschn. 8.2.4. Unter MATLAB 6.5/6.5.1 werden nicht alle Datentypen, Array-Formen, Ausdriicke usw. von JIT-Accelerator unterstiitzt, siehe Abschnitt: Programming and Data Types / Performance Acceleration des HTML-Dokuments im Help Browser. Mit MATLAB 7 sind diese Einschrankungen aufgehoben, der Programmcode wird durchgehend beschleunigt. 4 Kundenmagazin von The MathWorks: MATLAB Select 2/02, Hintergmndinformationen zur Technologie, Noch schnelleres MATLAB
1.2 Basis-Elemente
1.2
5
Basis-Elemente
Zunachst werden wir uns mit wesentlichen Elementen des MATLAB-Sprachumfangs vertraut machen. Diese ausgewahlten Elemente stellen wir stets am Anfang eines jeden Abschnittes tabellarisch zusammen, es folgen diesbezuglich kurze Erlauterungen und einfache Beispiele. Die Beispiele konnen interaktiv, d.h. iiber die Tastatur hinter dem Prompt (>>) im Command Window eingegeben, mit Return ( ^ ) abgesclilossen und sofort ausgefulirt werden. Die unten aufgelisteten Befehlsfolgen und Daten sind derartige Kopien aus dem Command Window; Kommentare folgen nach dem %-Zeichen. Darliber hinaus existiert in [59] das M-File B a s i s _ E l e m e n t e . m, mit dem sich aus dem Editor zellenweise - vgl. Abschn. 1.3.1 - die folgenden Beispiele am Rechner abarbeiten lassen.
1.2.1
Skalare Operationen und Datenverwaltung Operationszeichen, Built-in Variable, Online-Hilfe
-
*
/ \
Variablenzuweisung Rechenoperatoren Abschluss einer Befehlskette mit (,) und ohne (;) Ausgabe
Function: Imaginare Einheit \f—\. Kreiszahl K = 3.14... Pi inf Unendlich oo (infinity), z. B. 1.0 e^^^ NaN Not a Number, z. B. 0/0, inf-inf eps( (var)) MaB fiir relative Genauigkeit (Floating-Point) kleinster pos. Abstand: Ivarl + eps(var) > Ivarl realmax ({classn.)), realmin groBte/kleinste pos. Gleitkommazahl help ( befehl)
1.m, J .m pi.m inf.m nan.m eps.m realmax.m
MATLAB Online-Hilfe; vgl. auch helpwin/ doc Variablenverwaltung
clear, clearxy z who whos save verz\file (variablen) load verz\file (variablen) diary('v^rz\/z/^') diary on, diary o f f format ausgabeformat
Loscht alle oder ausgewahlte (x y z) Variablen des Workspace Variablen-Liste des Workspaces zusatzlich Dimension u. Datentyp (class) speichert Workspace in file, mat, optional auch ASCII ladt Daten mxsfile.mat in den Workspace, optional ASCII speichert nachfolgende (ASCII-) Text/Daten einer Sitzung ProtokoUdatei: speichert Sitzung zwischen o n und o f f Formate: s h o r t , l o n g , s h o r t e , l o n g e , r a t , . . . , l o o s e , compact
Variablen miissen nicht deklariert werden. In MATLAB sind alle Variablen Matrizen mit moglicherweise komplexen Elementen. Fin Vektor ist eine Matrix mit nur einer Zeile oder Spalte und ein Skalar eine 1x1 Matrix. StandardmaBig wird jeder numerische Wert als doppelt genaue
6
1 Einfuhmng in MATLAB®
FlieBkommazahl - 8 Bytes - gespeichert. Eine Zeichenkette (Character) wird ebenfalls als Vektor behandelt, dessen Elemente entsprechend der ASCII^-Zeichensatz-Tabelle in Hochkomma '....' gefasst und abgespeichert werden, vgl. Abschn. 1.2.4.2. Online-Hilfe zu den folgenden Beispielen unter: ^ help ops, help f o r m a t , help c l a s s , help d o u b l e , help s i n g l e - R 1 4 Es wird zwischen GroB- und Kleinschreibung unterschieden, d. h. a und A sind unterschiedliche Variablennamen (case sensitive). Das erste Zeichen einer Variablen und Konstanten muss ein Buchstabe sein, folgen konnen Buchstaben, Zahlen, Unterstriche ( _ ) . Die Lange umfasst ab MATLAB 6.5 63 Zeichen (Abfrage mit: namelengthmax). Ohne Zuweisung wird das Ergebnis eines Ausdrucks der Standard-Variablen a n s (steht fiir answer) zugewiesen, das Ausgabeformat ist mit format wahlbar, vgl. auch P r e f e r e n c e s unter dem File-Button in der Desktop-Meniileiste, Bild 1.1: >> f o r m a t c o m p a c t , f o r m a t l o n g e % Ausgabe ohne L e e r z e i l e n , Format >> ( 4 7 + l e + 0 2 * l . 5 + 4 ^ 2 ) / 4 % Abschluss mit Return-Taste ans = 5.325000000000000e+001 % je nach Ausgabeformat, h i e r long e
D. h. a n s ist stets die Variable der letzten Eingabe ohne direkte Zuweisung. Mit » a=(47+le+02^1.5+4^2)/4 a =
5. 3250 000000OOOOOe + 001
wird das Ergebnis der Variablen a zugewiesen. Mehrere Zuweisungen konnen in eine Zeile geschrieben werden, wenn sie durch Komma (,) oder Semikolon (;) getrennt werden >> a = 4 \ ( 4 7 + l e + 0 2 * l . 5 + 4 ^ 2 ) , a =
A=(1.2+78.09)^2
5. 32500 00000OOOOOe + 001 A = 6.286904100000001e+003 >> a=(47+le+02*l.5+4^2)/4; A=(1.2+78.09)^2;
Die Ausgabe wird durch ein Semikolon (;) unterdrlickt. Mehrere Zeilen in Form eines kurzen Programmsegments werden zeilenweise eingegeben und jeweils mit Shift + ^ (Return) abgeschlossen. Mit Return nach der letzten Eingabe erfolgt die Abarbeitung. AUe 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.325000000000000e+001
% class double
5 American Standard Code for Information Interchange
1.2 Basis-Elemente Bisherige Variablen sind FlieBkomma-Zahlen vom Typ double - 8 Bytes -, sie konnen u. a. in eine vom Typ single - 4 Bytes - konvertiert werden, dies spart Speiclierplatz und bei umfangreichen Rechnungen ab R14 Rechenzeit mit EinbuBen beziiglich der Genauigkeit: >> as = single(a); >> bs = as+a;
% as class single, MATLAB 7 % a class double, bs single, Achtung!
Zusatzlich zu den Datentypen (classname) double, single konnen vorzeichenbehaftete intS, intl6, int32, int64 und vorzeichenlose (positive) uint8,...,uint64 IntegergroBen, Festkommazahlen gebildet werden. Komplexe GroBen benotigen doppelten Speicherplatz, Real- und Imaginarteil werden getrennt verwaltet. ^ help d a t a t y p e s , help c l a s s Komplexe Variablen sind mit der komplexen Standard-Einheit i oder j zu bilden: >> format short e >> zl=0.5+7i zl = 5.0000e-001 +7.0000e+000i
% Ausgabeformat geandert % 71 komplexe Einheit, berechnet in i.m
>> z2=2-4*i; >> zl*z2 ans = 2.9000e+001 +1.2000e+001i
% Achtung! falls i eigene Variable
% class double(complex)
Die Namen der Built-in Variablen pi, i, j , inf, eps,... sollten nicht als eigene Variablen eingefiihrt werden. 1st dies nicht zu umgehen, so miissen diese vor Gebrauch mit dem Befehl clear variable geloscht werden. Dies gilt z. B. fiir: 7 ^i; 7i ist in jedem Fall die imaginare Zahl. Ohne VariablenAngabe wird mit clear der gesamte Workspace geloscht. Mit who kann die Liste der aktuellen Variablen im Workspace angezeigt werden, mit whos erhalt man zusatzlich noch die Dimension (z. B. 1x1 fiir eine Variable, 5x1 fiir einen Spaltenvektor mit 5 Elementen) und das Datenformat sowie den Speicherbedarf. Beispiel: 5; b=-single (74) ; s = ''Beispiel: who, whos, save, load'; a+b; b=-sirig >> clear. a==5; >> who Your varicables are: a ans b s
>> >> save D :\BMATL\Ueb_.1 >> clear >> load D :\BMATL\Ueb_.1 a ans s >> whos Name ca cans
;
Size 1x1 1x1 1x31
% % % %
Verzeichnis D:\BMATL muss existieren Speichert Workspace-Daten in ueb_l.mat loscht den Workspace ladt ausgew. Daten, ohne Auswahl alle
Bytes 8 4 62
Class double single char
Attributes
Ahnlich ist diese Information im Workspace Browser dargestellt und im Array Editor (ffl) auch manipulierbar. Speichern bzw. Laden der Daten ist auch liber den Meniipunkt F i 1 e / S ave Workspace As . . bzw. F i l e / I m p o r t D a t a . . im Command Window Bild 1.1 oder bei aktivem Workspace Fenster mit dem Save Button (=H) nach Bild 1.2 durchzufUhren.
1 Einfuhmng in MATLAB> y3=exp(i*pi/4) Y3
=
7.0711e-001 +7.0711e-001i
> y4=y3-cos{-)-ism{-) » y4=y3-cos(pi/4)-i^sin(pi/4) y4 = 0
•
Beispiele zur Arcus-Tangens-Funktion >> y 5 = a t a n ( 0 . 7 ) y5 = 6.1073e-001 >> y 6 = a t a n 2 ( 0 . 7 , p i )
% H a u p t w e r t von a t a r i (x) % Radian % y = 0 . 7 , x = p i ; e i n g e s c h l o s s e n e r Winkel % 4 Q u a d r a n t e n - p i < = a t a n 2 ( y , x ) > y7=angle(pi+0.7i) % wie y6; vgl. auch phase(pi+0.7i) aus y7 = % der System Identification Toolbox 2.1924e-001
•
Beispiel zum konjugiert komplexen Wert >> y8=conj(0.7+0.1j) % konjugiert komplexer Wert y8 = 7.0000e-001 -l.OOOOe-OOli >> y9=(0.7+0.1j)';
1.2.3
% konjugiert komplexer Wert, wie conj
Vektoren und Matrizen
Die Elemente von Vektoren und Matrizen werden in eckige Klammern gesetzt. Die Zeilen werden durcli Semikolon (;) oder/und Zeilenumbmcli ^ (Return) abgesclilossen. Die Elemente konnen durch Leerzeichen oder Komma (,) von einander getrennt werden. Fiir spezielle Matrizen, z. B. der Einheitsmatrix, existieren Built-in Functions. ^ help mat fun
10
1 Einfuhmng in MATLAB® Vektor- und Matrix-Formulierung
[xl x2...; yl, y2,... ] start: schrittweite : ziel linspace {start, ziel, anzahl) logspace {start, ziel, anzahl) (vek/mat).', (vek/mat)' eye {zeilen, spalten {,classn. )) ones {zeilen, spalten {,classn. )) zeros {zeilen, spalten {,..,classn. dmg{vektor {, k)) dmg{matrix {, k)) rand{zeilen,
spalten)
Vektor- und Matrix-Eingabe Zahlenfolge; Doppelpunkt-Operator (:), Vektor lineare Zahlenfolge, Vektor-Ausgabe logarithmische Zahlenfolge, Vektor-Ausgabe Transposition: komplexe, reelle Vektoren u. Matrizen Einheitsm. zeilen x spalten, classn. z. B. ' s i n g l e ' Matrix mit Eins-Elementen, z. B. ones ( 3 , 4 , ' i n t 8 ' ))Matrix mit Null-Elementen Matrix mit ^-ter Diagonalen Vektor der ^-ten Diagonalen ^=0 Oder leer -^ Haupt-, k^O -^ Nebendiagonale Matrix mit Zufalls-Elementen
a( index) A( zeile, spalte) A(end)
Vektor-Element index von a Matrix-Element von A, ^zeile.spalte Letztes Vektor-, Matrix-Element von A
sparse (A)
Sparse-Matrix, speichert keine NuU-Elemente
•
Beispiele zur Vektorformulierung: >> vz = [1 2 3] vz = 1 2
Zeilenvektor
>> vs = [ 1; 2; 3 ] vs = 1 2 3 [l+5i, 2+i, 3-7i] >> vzi vzi = l.OOOOe+000 +5.0000e+000i
Spaltenvektor, statt (;) auch Return
Zeilenvektor, komplexe Elemente 2.0000e+000 +1.OOOOe+OOOi
Der Spaltenvektor lasst sich auch durch Transponieren des reellen Zeilenvektors erzeugen » vs=[l,2,3]' vs = 1 2 3 >> vs = vz';
% transponieren eines Zeilenvektors
% transponieren von vz und Zuweisung
Bei komplexen Vektoren liefert (. . ) ' den zugehorigen konjugiert komplexen Vektor. Der Vektor des transponierten komplexen Vektors gewinnt man mit: >> vsi = vzi.' vsi =
% transponieren eines komplexen Vekt.
1.2 Basis-Elemente
11
l.OOOOe+000 +5.0000e+000i 2.0000e+000 +1.OOOOe+OOOi 3.0000e+000 -7.OOOOe+OOOi
Elementfolgen, z. B. 0, 2, 4, 6, 8, bei denen die Folgeelemente mit fester Schrittweite gebildet werden, sind mit dem Doppelpunkt-Operator in der Form start: schrittweite : ziel zu erzeugen. Der Aufruf start: ziel setzt die Schrittweite +1 an. •
Beispiele fiir Elementfolgen: >> v=0:2:8 V
% Elementfolge, Schrittweite 2
=
0 2 >> V = [ 8 : - 2 V
4
2
8 % [ ] iiberfliissig,
Schrittw.
-2
0 % Schrittweite 1
=
0
•
6
=
8 6 >> V = 0:8 V
4 : 0]
1
2
3
4
5
6
7
8
» B =
B=[[1
Beispiele zur Matrizen-Formulierung: » A=[l 2 3; A = 1 2 3 4 6 7 >> C = [ l : 2 : 5 C = 1 3 7 8
•
3 4 5;
6 7 8]
3 5 8 ;
1
Al 5 9
>> A l = 1 6
4
7]']
2 4 7
2 3
7:9]
2 3]',[2
=
[1 4 9 ;
4 4
6 4 5] 9 5
Spezielle IMatrizen werden iiber Built-in Functions erzeugt: eye, ones, zeros, diag, spdiags... >> E=eye (4) E = 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 >> I=ones(3) I = 1 1 1 1 1 1 1 1 1 >> Z=zeros{2,2], ' single' ) Z
=
0 0
0 0
0 0
% 4,4 Einheitsmatrix, Datentyp: double
% 3,3 Einsmatrix, Datentyp: double
2,3 Nullmatrix, Datentyp: single
12
1 Einfuhmng in MATLAB®
Bei einem bzw. zwei gleichen Eingangsargumenten, z. B. zeros(2) bzw. zeros(2,2), wird eine quadratische, sonst, z. B. eye(3,2), eine Rechteckmatrix erzeugt. [> Eine Matrix kann auch mit Submatrizen aufgebaut werden. Gegeben seien die quadratischen Matrizen A, B und gesucht ist die Hypermatrix Q: gegeben: A •
2 7
4 5
4 5
, B
2 7
gesucht: Q -
02x2
A=[2 4; 7 5 ] ; B = A ( : , [ 2 1 ] ) , % M a t r . A, B; % Matrix Q Q = [ z e r o s ( 2 ) e y e ( 2 ) ; -A B]
» »
-A
^2x2
B
[2 1]
Spaltentausch
Q =
0 0 0 0 - 2 - 4 - 7 - 5
1 0 4 5
0 1 2 7
Die Submatrizen konnen auch Matrizenoperationen enthalten. Die interne Function diag schreibt die Haupt-Diagonalelemente einer Matrix in einen Vektor >> ad=diag(A) ad = 1 4
% Diagonalelemente von A
und bildet aus einem Vektor eine Diagonal-Matrix >> A d = d i a g ( a d ) Ad = 1 0 0 0 4 0 0 0 8
% Diagonalmatrix
Optional lassen sich Neben-Diagonalelemente mit diag (d, j ) (obere Neben-Diagonale j positiv untere j negativ) ansprechen. Im folgenden Beispiel ist eine Matrix aus gegebenen Haupt- und Neben-Diagonalelementen zu bilden: >> >> >> >> Dd
d=[2 4 6 8]; dl=-3^ones(1,3); d2=-ones(1,2); Dd= diag(d) + diag(dl,l) = 2 -3 0 0 4 0 -3 0 1 0 6 -3 0
-1
% % % +
Haupt-Diagonalelemente 1. obere Neben-Diagonale, j=l 2. untere Neben-Diagonale, j=-2 diag(d2,-2) % Matrix-Aufbau
0
Auch Nebendiagonal-Elemente lassen sich in einen Vektor schreiben: >> d2=diag(Dd,-2)
% 2. untere Neben-Diagonale
1.2 Basis-Elemente
13
Altemativ kann von einer 4,4-Sparse-Matrix nach S. 14 ausgegangen werden, wobei die Vektoren von Haupt- und Nebendiagonale gleich lang sein miissen - hier mit full voU besetzte Matrix gebildet »
Dds = f u l l ( s p d i a g s ( [ [ d 2 ' ; 0 ; 0 ] ,
d',
[ 0 ; d l ' ] ] , [-2,
0,
1],4,4));
Vektoren- und Matrixelemente werden durch ihre Indizes (1, 2,...; nicht: 0) in mnden Klammem nach dem Namen gekennzeichnet. Ganze Zeilen und Spalten sowie Ausschnitte davon lassen sich mit dem Doppelpunkt-Operator ansprechen. Elemente konnen iiberschrieben werden. ^ help l i s t s • Beispiele fur Elementansprechung: >> vzi(3) ans = S.OOOOe+OOO -7.0000e+000i >> Dd(3,4) ans = -3 >> Dd(:,2) ans = -3 4 0 -1 >> Dd(4,2:3) ans = -1 0
% 3. Vektorelement von vzi
% Matrixelement 3. Zeile / 4. Spalte
% alle Elemente der 2. Spalte von Dd
% 4. Zeile, Spalten-Element 2 bis 3
• Matrixelemente konnen mit ihren Indizes (zeile, spalte) oder mit nur einem Index angesprochen werden. Dieser ergibt sich aus einer vektoriellen Darstellung der Matrix, die aus einer Hintereinanderschaltung aller Spaltenvektoren folgt (Speichermodell). Z. B. gilt fiir die obige DdMatrix D d ( 3 , 4 ) = Dd(15) Umwandlung mit: ind2sub ( i , j) ^k, sub2ind ( k ) ^ ( i , j) \> 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). Fiir das letzte Element einer Zeile sowie aller Zeilen oder Spalten folgt entsprechend Dd ( 3 , end) sowie Dd ( : , end) oder Dd (end, : ) • Beispiele fiir Elementzuweisung: >> vzi(3)=26 • 98 vzi = l.OOOOe+000 +5.0000e+000i >> D d ( 4.2 , :3) = = [7 0] Dd = 2 -3 0 4 0 -3 -1 0 6 7 0 0
% 3. Element wird geandert 2.0000e+000 +1.OOOOe+OOOi
2.5480e+003
% 4. Zeile, Element 2 bis 3 neu zuweisen 0 0 -3 8
1 Einfuhmng in MATLAB®
14
\> Aufgabe: Erweitere Dd, so dass der Vektor u= [ 5 6 7 8 ] in die letzte Zeile bzw. letzte Spalte geschrieben wird, losche anschlieBend die 1-te und 3-te Zeile bzw. Spalte. » »
u=[5 6 7 8] ; D=[Dd;u]; E=[Dd u'] ;
•
D([l 3],:) = [:
E(:, [1 3]) = [:
Vektor u Losung
Beispiele fiir Sparse-Matrix: Gegeben sei die Matrix 0 0 0 5 0 2 0 0 1 3 0 0 0 0 4 0
gesucht ist die Darstellung der Sparse-Matrix 5, siehe help s p a r s e : > A=[0 0 0 5; > S = s p a r s e(A) S = (3,1) (2,2) (3,2) (4,3) (1,4)
0 2 0 0;
1 3 0
% class
0;0
double
4 0],
Ausgangsmatrix Sparse-Matrix von A >> spy(S) % Elemente
7^0
1 2 3 4 5
Es werden also nur die Indizes (z. B. ( 3 , 2 ) ) und die Werte (z. B. 3) der von Null verschiedenen Elemente gespeichert. Spezielle mathematische Funktionen (siehe help s p a r fun) existieren, einige bearbeiten vollbesetzte und Sparse-Matrizen, vgl eigs. Mit spy (s) wird die Struktur von S grafisch dargestellt. Anwendung in QuerSchw_l, 2 . m und DrehSchw. m aus [59]. 1.2.3.1
Vektor-, Matrizen-Operationen und Built-in Functions
Die mathematischen Operationen -\— * / sowie die Rangfolgeregeln sind auch auf Vektor- und Matrizenoperationen bei passender Dimension anwendbar. Zusatzlich stellt MATLAB Rechenoperationen fiir die elementweise Verkniipfung sowohl fiir reelle als auch komplexe Vektoren und Matrizen zur Verfiigung. Sie werden aus den Grundoperatoren mit vorangestelltem Punkt, z. B. .* fiir elementweise Multiplikation, gebildet. ^ help ops, help a r i t h , helpmatfun, help s l a s h Oder statt s l a s h : m r d i v i d e (right matrix divide), mldivide, rdivide, Idivide Erlauterungen zur Tabelle Vektor- und Matrix-Formulierung: Ab (R14) konnen die Eingangsvariablen der Built-in-Functions, z. B. inv, det, linsolve, eig vom Typ s i n g l e oder d o u b l e sein. Das Ergebnis ist dann vom entsprechenden Typ, vgl. Beispiel zu linsolve. Fiir 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 zugehorigen Spaltenvektoren, so dass ein Zeilenvektor ausgegeben wird. Dariiber hinaus wird ein Index-Vektor der Matrix-Indizes zu den Maximal/Minimal-Elementen ausgegeben, siehe Beispiele. Weitere Eingangsargumente sowie Ausgaben sind moglich; siehe Online-Hilfe.
1.2 Basis-Elemente
15
Vektor- und Matrix-Operationen, Built-in Functions
•* A •/ -^ \ / transpose (vek/mat) oder ctranspose (vek/mat) oder dot (vek, vek), cross (vek, inv (matrix) det (matrix) linsolve (matrix, vek/mat (, eig (matrix), eigs( matrix) rank (matrix (, toleranz ))
Elementweise Rechenoperationen Links- und Rechts-Division vek/mat.' Transposition: Vektor, Matrix vek/mat'Transposition, konjugiert-komplex Skalar-, Kreuz-Produkt vek) Inverse einer quadratischen Matrix Determinante einer quadratischen Matrix option ))lineares Gleichungs-Syst. LU-Zerlegung (ab R14) Eigenwerte, Eigenvektoren einer quadrat. Matrix Rang einer Matrix, siehe auch rref
( [m, n]=) size( vek/mat (, /)) length( vek/mat)
Matrix-, Vektordimension, i=l Zeilen, i=2 Spalten GroBter Wert aus Spalten-, Zeilenindex identisch mit max(size( vek/mat))
sum (vek/mat) prod (vek/mat)
Summe der Vektorelemente bzw. Spaltenvektorelem. Produkt der Vektorelemente bzw. Spaltenvektorelem. [vmin, i n d e x ] =mm(vek/mat) Kleinstes Vektorelement bzw. Spaltenvektorelem. [ v m a x , i n d e x ] =nisix(vek/mat) GroBtes Vektorelement bzw. Spaltenvektorelem. max(matrix(:)) GroBtes Matrixelement sort (vek/mat) Elemente in aufsteigender Folge find (vek/mat {/last' I 'first')) Von Null verschiedene Elemente, oder find (A==2) •
Mit den folgenden Matrizen und Vektoren » »
A=[l 2 3 ; 4 5 6; 7 8 9 ] ; b=[ 2 4 6 8 10] ' ;
B=[l 2 3; 2 4 5;3 7 v=0:2:8;
sollen einige Operationen erlautert werden:
% Oder: do
>> v*b ans = 160 >> Dy_pr=v' •b' Dy_pr = 0 0 4 8 8 16 12 24 16 32 >> size(Dy_pr) ans = 5 5 >> c=v+b'; >> C=A+B; >> C=A*B;
Skalar-Produkt
Dyadisches Produkt 0 12 24 36 48
c==v-b'; C==A-B;
0 16 32 48 64
0 20 40 60 80 % Matrix-Dimension % 5,5-Matrix % Vektor-Addition, -Subtraktion % Matrix-Addition, -Subtraktion % Matrix-Multiplikation
1 Einfuhmng in MATLAB®
16
Matrix-Vektor-Multipl.
» c=A*v(l:3)' c = 16 34 52
•
Beispiele elementweiser Operationen: >> c=v.*b' c = 0
% Vektorelement-Multipl. % v(i) ^ b(i) 80
24
>> c=v./b' c = 0 5.0000e-001
6.6667e-001
>> c=v.\b' Warning: Divide by zero. c = Inf 2.0000e+000 1.5000e+000
% Vektorelement-Rechts-Div. % V (i) / b (i) 7.5000e-001 8.0000e-001 % Vektorelement-Links-Div. % b(i) / v(i) 1.3333e+000 1.2500e+000
>> sin(v) % elementweise Sinus-Bildung ans = % sin(v(i)) 0 9.0930e-001 -7.5680e-001 -2.7942e-001 9.8936e-001
» c==A., • B c= 1 8 21
»
4 20 56
Matrixelement-Multipl. A(i, j) *B(i, j) 9 30 72
C==A.V B
Matrixelement-Rechts-Div. A(i,j) / B(i,j) l.OOOOe+0 0 0 l.OOOOe+0 00 l.OOOOe+000 2.0 0 00e+0 0 0 1.2500e+0 00 1.2 000e+000 2.3333e+0 0 0 1.142 9e+0 0 0 1.12 5 0e+0 0 0
c =
» C=A.\B C = l.OOOOe+0 0 0 5.0 0 00e-0 01 4.2 8 57e-0 01
Matrixelement-Links-Div. B(i,j) / A(i,j) l.OOOOe+0 00 l.OOOOe+000 8.0 000e-0 01 8.3333e-001 8.7 50 0e-0 01 8.888 9e-001 Matrixelament-Potenz A(i, j)"B(i, j)
» C=A.^B C = 1 16 343 >> sqrt(A)
4 625 2097152
27 7776 43046721 elementw. Quadratwurzel
1.2 Basis-Elemente
17
ans = l.OOOOe+0 0 0 1.4142e+0 0 0 1.7 321e+0 0 0 2.0 0 00e+0 0 0 2.23 61e+0 00 2.4 4 95e+000 2.6458e+0 0 0 2.82 84e+0 00 3.0000e+000
•
Beispiele spezieller Matrizenoperationen und Matrix-Funktionen: >> C=A\B % Matrix-Links-Div.; A^(-1)^B Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.541976e-018. C = % Achtung! A singular -3.3333e-001 -4.5036e+015 -4.5036e+015 6.6 6 67e-0 01 9.0 0 72e+015 9.0 0 72e+015 0 -4.5036e+015 -4.5036e+015 >> C=A/B C = l.OOOOe+000 -5.0000e+000 -l.lOOOe+001
% Matrix-Rechts-Div.; A*B^(-1) 0 0 9.0000e+000 -3.0000e+000 1.8000e+001 -6.0000e+000
>> detA=det(A), detB=det(B) % Determinante von A und B detA = 0 % Matrix A ist singular detB = 1 % Matrix B ist regular >> inv(B) % Inverse von B; B^(-l) ans = -3.0000e+000 5.0000e+000 -2.0000e+000 -l.OOOOe+000 -l.OOOOe+000 l.OOOOe+000 2.0000e+000 -l.OOOOe+000 0 >> B*inv(B) ans = l.OOOOe+000 0 0 l.OOOOe+000 0 -1.7764e-015
% Kontr.: B * B^(-l) = E oder B/B = E % Elemente: > eig(A) ans = 1.6117e+001 -1.1168e+000 -1.0307e-015
% Eigenwerte der Matrix A
% Hinweis auf Singularitat, 0-Eigen-W.
>> [V,D]=eig(B) % Eigenwerte D und Eigenvektoren V V = % Eigenvektoren -2.80 96e-001 8.12 7 6e-0 01 8.12 7 6e-0 01 -5.0038e-001 2.4854e-002 -3.6883e-001i 2.4854e-002 +3.6883e-001i -8.1895e-001 -3.2897e-001 +3.0749e-001i -3.2897e-001 -3.0749e-001i
18
1 Einfuhmng in MATLAB® D = % Diagonalelemente sind die Eigenwerte 1.3306e+001 0 0 0 -1.5313e-001 +2.2739e-001i 0 0 0 -1.5313e-001 -2.2739e-001i % Rang der Matrix A % Rangabfall, lineare Zeilen-, Spalten% Abhangigkeit, vgl. Singularitat von A
>> rank(A) ans = 2
\> Losen linearer algebraischer Gleichungssysteme: Der spezifische Algorithmus, der zum Losen eines linearen Gleichungssystems mit dem Backslash-Operator, x=A\b, verwendet wird, hangt von der Stmktur der n x ^-Koeffizientenmatrix A ab, vgl. doc ml d i v i d e . 1st A vollbesetzt, dann wird der GAUSS-Algorithmus verwendet. Fiir eine m x ^-Matrix mit mj^n, wird eine Ausgleichslosung des iiber- bzw. unterbestimmten Gleichungssystem berechnet. >> % Beispiel 1: Losen des alg. Gl.-Systems B*x=v(l:3) >> x=B\v(l:3)'; % GAUSS-Algorithmus (Links-Division) >> x=linsolve(single(B),V(1:3)') % LU/QR-Zerlegung mit Pivotsuche X = % Ergebnis: class double / single 2.0000e+000 % hier wegen "single(B)" single 2.0000e+000 -2.0000e+000 >> % Beispiel 2: Losen des alg. Gl.-Systems B*xl=v >> % B reell symmetrisch (B=B') und positiv definit (B>0) >> X = magic(5); B = X*X'; % symm. Koeffizientenmatrix >> opts.SYM = true; opts.POSDEF = true; % Optionen gesetzt >> xl = linsolve(B,v',opts); % Optionen ausgenutzt
• Hinweis zur Rangfolgeregel (Potenzieren vor Multiplikation oder Division, dann Addition Oder Subtraktion): Gegeben sei die algebraische Gleichung 2 7
Kx = 0.5 b,
4 5
3.5 7.75
mit der quadratischen Matrix K und dem Vektor b passender Dimension; gesucht sei x. Ergebnis: mit Rangfolgeregel-Fehler >> X
x=0.5*K\b
=
X
1.5000e+000 l.OOOOe+000
•
richtig >> x = 0 . 5 * (K\b)
Oder:>>
x=K\b*0.5
=
3.7500e-001 2.5000e-001
Beispiele zu den Befehlen: sum, max, min: >> sum(A) ans = 12 15 >> sum(A,2) ans =
% Oder sum(A,1), Spaltensummen 18 % Zeilensummen
1.2 Basis-Elemente
6 15 24 >> [vmax,I]=max(A) vmax = 7 8 9 I = 3 3 3
19
% vmax maximale Spaltenelemente % I zugehoriger Index von A % I Index von A der Maximalelemente % alle Maximal-Elemente in 3. Zeile
Entsprechendes gilt fiir den Befehl min. Die Summe aller Matrix-Elemente ergibt sich durch doppelte Summenbildung oder mit dem Speichermodell von S. 13 zu: sum (sum (A) ) oder sum (A ( : ) ),
1.2.4
Spezielle Datenstrukturen
Unter MATLAB sind weitere Datenstrukturen vorhanden, die kurz erlautert werden soUen. ^ help c l a s s , help s t r f u n , help s t r u c t , help c e l l , help c h a r 1.2.4.1
Mehrdimensionale Matrizen
Mehrdimensionale Matrizen-Elemente werden mit mehr als zwei Indizes angesprochen. Mit den Built-in Functions zeros, ones, rand, randn konnen derartige Matrizen gebildet werden, z. B. >> O=ones (2, 3 , 4, 3) ; mitdemElement >> 0 ( 2 , 2 , 3 , 1 ) ; Anschaulicher und von groBerer Bedeutung sind 3D-Arrays: • Beispiel fiir 3D-Array: Struktur: K ( z e i l e , spalte, selte) Zuweisung: >> K ( l , l , l ) = l ;
»
K(2,2,2)=2;
»
K(3,3,3)=3;
Erst letzte Zuweisung erzeugt 3 x 3 x 3 - A r r a y . Aufruf: >> K(:,:,3) ans = ans ==00
>> K(:,:,2)
>> K(:,:,l)
1.2.4.2
0 0
ans = 11 0 0
0 0 0 0
a ans n s == 00 0 0 0 0 0 0 2 0 0 0
0 0 0 0
0 0 0 3
Seite 3
Seite 2
0 0
Seite 1
0 0
Zeichenketten (Character, String)
• Zeichenketten vom Typ c h a r werden durch Hochkomma begrenzt, Beispiel: >> '
Z e i c h e n k e t t e n werden d u r c h Hochkomma b e g r e n z t
• Mehrzeiliger Text gleicher Lange wird mit einem normalen Array >> [ ' T e x t z e i l e
1';'Textzeile
2']
'
1 Einfuhmng in MATLAB®
20
• mehrzeiliger Text unterschiedlicher Lange mit einem Cell Array, siehe Abschn. 1.2.4.4, und anschlieBender Konvertierung (cell -^ char) formuliert >>char ({'Textzeile 1';'Textzeile 2 ist langer'})
• Jedes Zeichen eines Character Arrays benotigt 2 Byte Speicherplatz. 1.2.4.3
Strukturen, (Structure Array)
• In Strukturen lassen sich Variablen unterschiedlichen Datentyps verwalten. Dies bietet sich fiir die Datenverwaltung einzelner System-Komponenten an, siehe Abschn. 8.6.2 • Der Name einer Structure besteht aus zwei Teilen, dem Structure-Namen vor dem Punkt und dem Feldnamen innerhalb der Structure nach dem Punkt (Separator). • Structure-Elemente werden iiber Namen und Indizes angesprochen. Syntax: Struktur=struct (' namel \wertl/name2 \wert2, ...) % Erzeugen einer Structure % Zugriff auf Feld-Elemente struktur.namel Oder Erzeugung iiber direkte Zuweisung struktur. namel =wertl; struktur. name2 =wert2; •
Beispiel, Structure erstellen, erweitem und Ausgabe: » A=[l 2 6; 4 5 9; 7 8 3 ] ; % gegebene 3,3-Matrix >> user_struktur = struct('daten',A,'dimension',[3 3]) user_struktur = daten: [3x3 double] dimension: [3 3] >> user_struktur.dimension ans = 3 3 >> user_struktur(2).daten=inv(A) user_struktur = 1x2 struct array with fields: daten dimension
% Ausgabe Feld 'dimension'
Erweiterung um inv(A)
>> user_struktur.daten ans =
Ausgabe Matrix A, auch mit user_struktur(1).daten
ans -2, lllle+000 1.5556e+000 -4.4444e-001 1, 8889e+000 -1.4444e+000 5.5556e-001 -1, lllle-001 2.2222e-001 -l.lllle-001
Inverse von A, auch mit user_struktur(2).daten
Elemente ansprechen, z.B.
1.2 Basis-Elemente
Matrix A, Element A(2,3)
>> user_struktur(1).daten(2,3) ans = 9
1.2.4.4
21
Zellen (Cell Array)
• Daten unterschiedlichen Typs, z. B. Zeichenketten (class c h a r ) , Matrizen (class d o u b l e , s i n g l e ) unterschiedlicher Dimension, Structure Arrays konnen als Zellen in einer Variablen verwaltet werden. • Cell-Elemente werden iiber ihre Indizes angesprochen. • Zur Kennzeichnung von Cell-Elementen dienen geschweifte Klammern. •
Beispiel, Cell Array erstellen (zwei Moglichkeiten) und ausgeben: >>A(1,1) >> A ( l , 2 )
= { [ 1 2 3 ; 4 5 6; 7 8 9 ] } ; = {' T e s t m a t r i x ']}
» A(2,l) = {3 + 71}; >> A(2,2) = {0 : pl/100 : 2*pi};
% % % %
Zuweisung Zuweisung Zuweisung Zuweisung
der der der der
Zelle Zelle Zelle Zelle
1,1 1,2 2,1 2,2
Oder »
A{1,1} = [1 2 3; 4 5 6; 7 8 9]; ...
% auf Klammertyp achten
Aufruf: >> A A = [3x3 double] [3.0000e+000 +7.0000e+000i] » A{1,1} ans = 1 4 7
' Testmatrix ' [1x201 double]
» A(l,l) ans = [3x3 double
% 1. Zelle, [3x3 double] % Element-Aufruf: A{1,1}(2,3) -> 6 2 5 8
3 6 9
> Ein leeres Cell Array und anschlieBende Besetzung mit einem Structure Array folgt mit: >> Z=cell(2,4); Z{1,3}=user_strutur vgl. Programms.: Basis_Elemente.m [1x2 struct] []
Mit cellplot kann Z grafisch angezeigt werden: >> c e l l p l o t (Z,' legend' ) 1.2.5
Vergleichsoperatoren und logische Operatoren Vergleichsoperatoren
==, r^= < , , >= exist ('x')
gleich, ungleich kleiner, kleiner gleich groBer, groBer gleich Existenz von x prlifen
Logische Operatoren ^
Negation
&, & & |, 11 xor
Und; Matrix-, Skalar- Vergl. Oder; Matrix-, Skalar- Vergl. Exklusiv ODER
22 ^
1 Einfuhmng in MATLAB® help ops, help r e l o p , help l o g i c a l , help b i t and
Die Symbole &, | und ^ sind die logischen Operatoren AND, OR und NOT. Sie konnen auf Zahlen, arithmetische Ausdriicke sowie Matrizen angewandt werden. Matrizen werden elementweise verkniipft. 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-Operator. Die einzelnen Verkniipfungen sind in folgender Tabelle zusammengefasst. Eingang a
b
0 0 1 1
0 1 0 1
and
or
a & b a|b 0 0 0 1
0 1 1 1
xor
not
xor(a,b)
~ a
0 1 1 0
1 1 0 0
Die A^Or-Verkniipfung hat die hochste Prioritat. Der AA^Z)-Operator hat gegeniiber dem OROperator in MATLAB die hohere Prioritat. Im Zweifelsfall sollten Klammern gesetzt werden: I1
identisch
, .,
.
a I b & c —> a I (b & c) Die Vergleichsoperatoren arbeiten bei Matrizen ebenfalls elementweise. Logisch wahr ist 1, logisch/a/^s^c/z 0. Die Operatoren , > = beziehen sich bei komplexen Variablen nur auf den Realteil, die Operatoren = = und ^ = auf Real- und Imaginarteil. • Beispiele einfacher Verkniipfungen: >> a = 5; b=-a; >> ~a ans = 0 >> (7 > 11-5 & 7 Nachweis des kleinsten Abstandes eps (b) zur nachst groBeren Zahl von b, vgl. S. 5 und S. 24: >> s=(abs(b)-eps(b)) < abs(b) & (abs (b)-0.5*eps (b)) < abs(b) s = % erster Ausdruck ist wahr, zweiter falsch 0
\> Elementweiser Matrix-Vergleich: » X=5; X>=[1 2 3; 4 5 6; 7 8 10] % beide Zeilen ergeben >> X=5*ones(3,3); X>=[1 2 3; 4 5 6; 7 8 10] % gleiches Ergebnis
1.2 Basis-Elemente
ns = 1 1 0
1 1 0
23
1 0 0
> Die Operatoren & &, 11 werden als Kurzschluss-Opemtorcn (Short-Circuit Operators) bezeichnet. Ihre skalaren Operanden werden nicht weiter evaluiert als zur Ermittlung des Wahrheitswertes erforderlich. Beispiel zum Short-Circuit Operator &&, siehe Online-Hilfe: >> b=0; a=5 's a ist beliebig >> X = (b ~= 0) && (a/b > 18.5) X =
0
>> X = (b ~= 0) & (a/b > 18.5) Warning: Divide by zero. X =
0
Es wird deutlich, dass im ersten Fall nur der Ausdruck (b ~= 0) auf den Wahrheitswert untersucht wird, im zweiten Fall - angedeutet durch das Warning - aber beide. 1.2.6
Verzweigungen und Schleifen Verzweigungen und Schleifen if bedmgung...{ elseif...) ( else...) end If-Anweisung switch...case...( otherwise... ) end Switch-Anweisung for variable = bedingung, befehle endfor-Schleife while bedingung, befehle end While-Schleife break Vorzeitiger Schleifenabbruch in for, while continue Abbruch des aktuellen Schleifendurchlaufs
^ •
help l a n g Beispiel fiir: for, if, else, elseif - vgl. F o r _ s c h l e i f e . m in Programmsammlung [59] >> f o r t = 1 . 0 : - 0 . 1 : 0 . 0 , Befehle f end % 1. For-S chleife
k=5; f o r m = 1:k f o r n = 1:k i f m == n
A(m,n) = 2 elseif abs(m-n A(m,n) = 1 else A(m,n) = 0 end end
g, 0 o.
2 . For-Schleife, If-Anweisung
Ergebn is : A = 2 0 2 0 1 0 0 1 0 0
1 0 2 0 1
0 1 0 2 0
0 0 1 0 2
end
Anmerkung: Obige Erstellung von A ist unzweckmaBig, besser: d l = 2 ^ o n e s ( k , 1) ; d 2 = o n e s ( k - 2 , 1) ; A=diag ( d l ) +diag ( d 2 , 2) +diag ( d 2 , - 2 ) ;
% bzw.:
A=2 *eye (k) + .
24
1 Einfuhmng in MATLAB®
For-Schleifen: Werden Vektoren, Matrizen, wie in der obigen for-Schleife, elementweise besetzt, dann sollte man zur Rechenzeitersparnis die Felder, trotz JIT-Accelerator - vgl. Abschn. 1.1 -, praallokieren. 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 Schatzwert aus und passt nach den Zuweisungen die aktuelle Dimension an; vgl. folgende Beispiele mit Rechenzeitangaben - siehe auch p r a e a l l . m in [59] -, in denen einer Matrix elementweise ein Wert zugewiesen wird. Die Rechenzeit wird mit den tic, toe Befehlen, vgl. Tabelle auf S. 28, ermittelt. nmax=600; mmax=600; wert=12.345; % Programm: praeall.m % ohne Felddimensionierung tic for i=l:nmax, for j=l:mmax, A(i,j)=wert; end, end toe, clear A Elapsed time is 2.515000 seconds. % mit Felddimensionierung A=zeros(nmax,mmax); tic f o r 1=1mmax, f o r j=l:mmax, toe, clear A
% Pentium (R)4 CPU 3.20 GHz
% oder A(nmax,mmax)=0; A(i,j)=wert;
end,
end
Elapsed time is 0.016000 seconds. % Riickwartsbelegung ohne praallokieren, 1. Zuweisung legt Matrix an tic for i=nmax:-l:l, for j=mmax:-l:l, A(i,j)=wert; end, end toe, clear A Elapsed time is 0.016000 seconds. % Felddimensionierung geschatzt nmax=700; mmax=600; A=zeros(nmax,mmax); t=cputime; for 1=1mmax, for j=l:mmax, A(i,j)=wert; end if (cputime-t) > 0.1 , break, end end A=A(1:i,1:j); % tatsachliche FeldgroBe
Vielfach wirkt sich auch eine Speicher-Defragmentierung durch paek positiv auf die Rechenzeit aus. •
Zwei Beispiele zur While-Sehleife
[> Beispiel 1: Gesucht ist der kleinste positive Abstand e p s _ a von | v a r |, so dass numerisch ! I v a r I + e p s _ a ( v a r ) > | v a r | , vgl. eps S. 5, MaB fiir relativen Fehler von v a r . var=5; eps_a = 1 ; while (var+eps_a) ~= var eps_a = eps_a/2;
% var=5, Startwert eps_a % while-Schleife % eps_a wird fortlaufend halbiert
1.3 Programmerstellung, MATLAB Script und Function end eps_a = eps_a*2 Ergebnis: >> eps_a =
25
% damit wieder: var+eps_a > var 2.2204e-016 % kleinster Abstand: var+eps_a > var
> Beispiel 2: Iterative Nullstellenbestimmung von / = 0.5 — x + 0.2sinx mittels N E W T O N Verfahren, vgl. N e w t o n . p d f , n e w t o n . m, n e w t on 0 .m mit Darstellung der Iterationsfolge in [59]: v-^+l
-f[x')/f'{x'),
/ = 0, 1,.
/-ter Iterationsschritt
MATLAB Code: X = 3.0; Startwert 1. Abbruch-Wert und Abbruch-Toleranz ab=l; tol=1.0e-7; max. Iterationen, 1. Iter.-Schritt Imax=100; 1=1; while abs (ab) > tol && I < Imax xO=x; % Datensicherung X =xO-(0.5-x+0.2*sin(x) )/ (-l + 0.2*cos(x) ) ab=x-xO; 1=1+1; % Losungsanderung, I t e r . - S c h r i t t e end Ergebnis: X =
1.3
6.1547e-001
Programmerstellung, MATLAB Script und Function
Es wird zwischen Script-File (kurz: Script) und Function-File (kurz: Function) unterschieden. Beide werden durch den File- bzw. Function-Namen mit der Endung . m gekennzeichnet und deshalb kurz M-File genannt. Die Bearbeitung des Files erfolgt mit dem M-File-Editor. Script- und Function-Befehle com.
•> format long e; a=12.34567890; % Format / Daten >> disp(a) % unformatierte Ausgabe 1.2345 67 8 900 0 0000e+001 >> fprintf ('%3.5f\n',a) % formatiert mit Ubergang \n in neue Zeile 12.34568 >> fprintf('%s %3.2f\n','mit Variablenzuweisung a = \ a) mit Variablenzuweisung a = 12.35 >> sprintf ('%3.2e',a) ans = 1.23e+001
% Ausgabe als Character bzw. String % class char, endgiiltige Ausgabe mit disp
» disp(['a = ',num2str(a,'%3.2f')]) % [...] >> disp(['a = ',num2str(a,4)]) % oder >> disp(['a = ' , sprintf ('%3.2f',a) ] ) a = 12.35
beachten; oder
>> % Ausgabe mit Text in Hochkomma, ' -> '' » disp( ['"Ergebnis: ' ' , a = ' , num2str (a, ' %3 . 2f' ) ] ) 'Ergebnis: ', a = 12.35
\> Ein typisches Programmsegment mit einer Aufforderung zur Tastatureingabe und einer anschlieBenden LFberpriifung dieser Eingabe, siehe auch n e w t o n _ s y s . m in [59], folgt in: dispCvgl. Programm: newton_sys.m der Programmsammlung im www') dispC ') % Leerzeile
1.3 Programmerstellung, MATLAB Script und Function
29
b e i s p i e l = i n p u t ( ' B e i s p i e l 1 oder 2 ? ' ) ; % Eingabeaufforderung i f i s e m p t y ( b e i s p i e l ) | | b e i s p i e l > 2 | | b e i s p i e l < 1, disp ( ['Eingabe-Fehler: beispiel = ',num2str(beispiel)]), return % Prog, beenden end
Fiir disp ( [' E i n g a b e - . . kann auch die Function error ( [' E i n g a b e - . ., die gleichzeitig das Programm beendet, verwendet werden. > AbschlieBend legen wir ein Text-File mit zunachst erzeugten Daten an: >> >> >> >>
t=0:pi/2:2*pi; x=[t; s i n ( t ) ] ; fid = fopen('Text_File.text','w'); fprintf(fid,'%3.6f %10.6e\n',x); fclose(fid);
% Datenerzeugung % Datei offnen, fid I d e n t . % f o r m a t i e r t e Ausgabe % Datei schlieBen
- vgl. auch save, load -. Den Inhalt des Files T e x t _ F i l e . t e x t zeigen wir mit dem Editor -z.B. >> edit Text-File.text-an: 0.000000 1.570796 3.141593 4.712389 6.283185
1.3.3
O.OOOOOOe+000 l.OOOOOOe+000 1.224647e-016 -l.OOOOOOe+000 -2.449294e-016
MATLAB Script
Ein Script-File ist ein Programm mit MATLAB-Anweisungen, siehe Bildl.3. Ein Script-File kann auf Daten des Workspace zugreifen und legt erzeugte Daten dort ab. Sie sind nach ProgrammAblauf verfiigbar und konnen somit zur DatenkontroUe abgerufen oder zur grafischen Ausgabe weiterverarbeitet werden. D. h. die Variablen sind global Script-Files enthalten keinen Deklarationsteil und keine Abgrenzung durch b e g i n / end. Kommentare sind zeilenweise durch vorangestelltes % zu kennzeichnen. Unter MATLAB 7 wird eine Block-Kommentierung - eingeschlossen durch %{.. Block ..%} - ahnlich der C-Vereinbarung, moglich; % { und % } stehen in separaten Zeilen. Ein Zeilenumbruch innerhalb eines Aus drucks wird durch die Punktfolge . . . erreicht, z.B.: 5 + 6 - . . . und 5 + 6 . . . - Leerzeichen beachten -. Scripts konnen von anderen Scripts aufgerufen werden. Messbar ist die Rechenzeit einer Befehlsfolge innerhalb der Zeitmarken tic...toe. Die Function tic speichert den Startzeitpunkt, toe ermittelt die Rechenzeit. Mit return kann eine Programmausfuhrung vorzeitig beendet werden. Die Ausfuhrung (Start) eines zuvor gespeicherten M-Files aus dem Command Fenster erfolgt durch Eingabe des File-Namens ohne Endung (.m) oder mit dem Save and r u n Button in der Editor-Menii-Leiste nach Bild 1.3. Ab MATLAB 7 (R14) stehen zusatzliche nennenswerte Tools zur Programmentwicklung zur Verfugung. Ausfiihrliche Information findet man im Help Browser unter MATLAB/Re l e a s e Notes/New F e a t u r e s und in den Video-Demos, z. B. The E d i t o r . Zum einen lasst sich der Programm-Code in Programmsegmente so genannte Zeilen (Cells) unterteilen, vgl. [33]. Jede Zelle beginnt, wie in Bild 1.4, mit einem doppelten Prozentzeichen %% (Cell divider) und einem Zell-Titel. Die Zelle selbst enthalt mehrere Anweisungen. Zur Ausfuhrung des Programms muss
30
1 Einfuhmng in MATLAB® [Evaluate cell and advance | I Evaluate c e f l
/
| Evaluate entire Pile |
I Insert cell divider | | Show cell titles |
- C,\BMATL\ltep_1\CelL5tructure.m* Tools
Debug
Desktop
Winpow
Help
e, -o o s M ^ ^ Q
««vaa
This file uses Cell Mode. For information, see the hapicj code iteratiori video, the publishing video, or help.
h Cell-Puoguaiimi-Struktui: .date]) disp (['Cell structure: %% Start % 1. Cell title t=lin3pace[0,2*pi); % Ausdrucke! 5 %% Funktion % 2. Cell title 6 f=3in(t); % Ausdrucke! 7 %% Plot % 3. Cell title 8 plot[t,f) % Ausdrucke! 1 2 3
Bild 1.4: Editor mit eingeblendeter Cell-Toolbar und Programmstmktur unter MATLAB 7.2
die zugehorige Meniileiste iiber den Editor-Button C e l l , Meniipunkt E n a b l e C e l l Mode eingeblendet werden. Steht der Cursor in der Titelzeile, z. B. S t a r t wie in Bild 1.4, so ist der Programmabschnitt bis zum nachsten Zellteiler %% farbig (gelb) unterlegt. Durch Betatigung des Button E v a l u a t e c e l l a n d a d v a n c e wird dieser Programmabschnitt ausgefuhrt. Die abschnittsweise berechneten Daten und Grafiken konnen, z. B. im Command Fenster oder im A r r a y E d i t o r , auf ihre Richtigkeit iiberpriift werden. Ein kompletter Programmdurchlauf erfolgt mit Button E v a l u a t e e n t i r e f i l e oder mit dem S a v e a n d run-Button der EditorMenii-Leiste. Beispielprogramm: C e l l _ s t r u c t u r e .m in [59]. Mit dem Button P u b l i s h t o HTML am linken Rand der Cell-Toolbar, bzw. dem Menii F i l e / P u b l i s h To HTML wird der Code eines Scripts einschlieBlich der Ergebnisse und Grafiken in ein HTML-Dokument konvertiert. Besitzt das Script Cell-Struktur, wie z. B. B a s i s _ E l e m e n t e .m in [59], dann wird zusatzlich ein Inhaltsverzeichnis mit den Links der Cell-Titles angelegt. Die Zellen enthalten nun den Cell-Title, den Programmcode und die Ergebnisse. tJber das Menii F i l e / P u b l i s h T o konnen andere Dokumente, z.B. Latex, Power Point, erstellt werden. Zum anderen existiert ein Code-Checker, der unter dem T o o l s - B u t t o n mit dem Menii-Punkt C h e c k C o d e w i t h M - L i n t gestartet wird. Es wird ein Report erstellt, in dem Hinweise auf mogliche Fehler aufgelistet sind. Ab (R2006a) wird damit die Programmerstellung fortlaufend kontrolliert und mit Farbkennung auf mogliche Fehler hingewiesen, siehe Bild 1.3. Darliber hinaus ist ebenfalls unter T o o l s ein Profiler zu offnen (Open P r o f i l e r ) . Er unterstutzt die Verbesserung der Code-Performance, vgl. Abschn. 1.6. Mit der Desktop-Architektur ab (R14) ist auch ein An- und Ausdocken u. a. des Editor-Fensters in den Desktopbereich mit dem Button: JLI im Editor-Kopf nach Bild 1.3 moglich. Dadurch sind die wesentlichen Arbeits-Fenster in einer Ebene verfiigbar. • Beispiel zur Programmerstellung: Es soil ein M-File zur Darstellung eines Kreises vom Radius r geschrieben werden. Zu definierten Winkeln aus dem Intervall 0 < 0 < 2;r sind dafiir die kartesischen Koordinaten x, y zugehoriger Kreispunkte zu berechnen, womit der Kreis grafisch darzustellen ist; Plot-Befehle siehe Abschn. 1.4.2.
1.3 Programmerstellung, MATLAB Script und Function
31
r=l; % 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 speichem wir mit dem Namen k r e i s .m in das aktuelle Verzeichnis, vgl. [59]. Der Start erfolgt z.B. mit der Eingabe von k r e i s in das Command Window. Nach der Ausfiihrung stehen alle Variablen r^ t h e t a , x, yim 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 fiir die obige Befehlsfolge eine Function mit der Eingangsvariablen r zu schreiben. Dies zeigen wir im folgenden Abschnitt. 1.3.4
MATLAB Function
Zwei Function-Typen unterscheiden wir. Erstens Functions die in einem M-File stehen und zweitens solche, die in einer Command- oder Script-Zeile ausgewertet werden. Zum ersten Typ zahlen die traditionellen Standard-Functions und die ab MATLAB 7 neuen Nested (eingebettete) Functions. Zum zweiten Typ diejenigen die eine in String gefasste Funktion auswerten und die in MATLAB 7 neu aufgenommenen Anonymous Functions. 1.3.4.1
Standard-Function und Function Functions
Fiir eine standardmaBige Unterprogrammstruktur stehen die sog. MATLAB Functions (Schlusselwort function) zur Verfugung, es ist ebenfalls ein M-File. Bis auf die Ausgangsvariablen sind alle vorkommenden Variablen lokale Variable und stehen somit nicht im Workspace. Der FunctionKopf hat die Struktur function[aus gangsvariablen] = f u n c t
ion_name(eingangsvariablen)
f u n c t i o n _ n a m e und File-Name sollten identisch sein. Ein zusatzlicher Variablenaustausch kann mit der global-Vereinbarung global variable_1 variable_2,
Anzeige: who/whos global
erfolgen. Diese Vereinbarung muss gleichzeitig in dem M-File (Skript, Hauptprogramm), in der die Function aufgerufen wird, stehen; d. h. die aufgefuhrten Variablen miissen vor dem FunctionAufruf als globale GroBen im Workspace stehen, vgl. wur f . m, S. 253. Darliber hinaus konnen in einer Function persistente Variable mit persistent variable_l variable_2 vereinbart werden. Im Gegensatz zu den global vereinbarten GroBen, sind die persistenten GroBen nur in der Function, in der sie deklariert werden, bekannt; es kann also keine andere Functions darauf zugreifen. Persistente Variable werden nur geloscht, wenn die Function aus dem Speicher entfernt wird (clear function_name) oder die Function geandert und danach abgespeichert wird. Programmbeispiel: f c n P e r s i s t .mund B a s i s _ E l e m e n t e .min [59].
32
1 Einfuhmng in MATLAB®
• Anhand zweier Beispiele wollen wir die Handhabung mit Functions erlautern. [> Beispiel 1: Zunachst soUen, entsprechend dem besprochenen Script zur Kreiserzeugung, jetzt Kreise unterschiedlicher Radien r gezeichnet werden; es bietet sich cine Function-Formuliemng an. Der Eingangsparameter ist r, als Ausgange wahlen wir die kartesischen Koordinaten x, y; Plot-Befehle siehe Abschn. 1.4.2. Die Function mit dem Namen f k r e i s kann wie folgt aufgebaut sein: function [x,y]= f k r e i s ( r ) % Function-Kopf theta=linspace(0,2*pi,100); % Winkelfolge wie o b e n , d . h . wie i n k r e i s . m t i t l e ( [ ' K r e i s vom R a d i u s r = ' , n u m 2 s t r ( r ) ] )
Der Aufruf aus dem Command Window oder einem M-File kann ohne oder mit Ausgabe der kartesischen Koordinaten erfolgen: >> f k r e i s ( 2 ) ;
% zeichnet
Kreis mit r=2,
>> [ x , y ] = f k r e i s ( 4 ) ;
% m i t Ubergabe von x,
y;
keine
Ausgange
Workspace-Daten
oder mit Function Handle f unc_h, vgl. u. a. auch Function e u l e r A p p r o x : >> f u n c _ h = @ f k r e i s % F u n c t i o n Handle >> [ x , y ] = f e v a l ( f u n c _ h , 2 ) ; % F u n c t i o n e v a l u a t i o n » [x,y]=func_h(2); % ab MATLAB 7
b i s MATLAB 6 . 5 . .
Die Befehle nargin, nargout (number of function input, output arguments), konnen zur Kontrolle der Fin- und Ausgangsargumente oder zur Steuerung des Programmablaufes eingesetzt werden. Wir zeigen dies unten mit der modifizierten Function f k r e i s ; vgl. f k r e i s _ R r . m in [59]. Es lassen sich sowohl einfache Kreise mit den Radien R als auch zusatzliche Innenkreise mit den Radien r > y=newton_par(3, 1.Oe-0 6) Y = 6.1547e-001
Die Fahigkeit von Nested Functions auf den Parent's Workspace zuzugreifen ermoglicht eine ubersichtliche KontroUe der eingehenden Variablen. Insbesondere, wenn sie in mehrfach geschachtelte Functions eingehen. Der unangenehme Effekt einer unkontrollierten tJberschreibung von mit global vereinbarten Variablen entfallt. Dariiber hinaus wird der Speicherbedarf bei gemeinsamer Nutzung groBer Datensatze reduziert. Das obige Beispiel lieBe sich auch mit einer traditionellen Function erzielen und bietet somit keinen wesentlichen Vorteil. Dies sieht anders aus, wenn wir die Struktur - siehe auch n e w t o n _ p a r e n t .m in [59] - geringfiigig andem, vgl. Zeile 1, 5, 6, 11: function y = newton_parent(tol) % Parent Function % Ermittelt iterativ die Loesung ausgehend von y=startwert ab=l; % 1. Abbruch-Vergleichswert Imax=100; 1=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 W h i l e - S c h l e i f e ab=l; 1 = 1 % miissen z u r i i c k g e s e t z t werden end % end N e s t e d F u n c t i o n end % end d e r P a r e n t F u n c t i o n
Wird n e w t o n _ p a r e n t aufgerufen, dann wird der Function Handle y beziiglich der Nested Function n e w t o n _ i t zuriickgegeben, welcher individuell gemaB der Parameteriibergabe - hier: t o l = l e - 7 bzw. t o l = l e - 2 - der ubergeordneten Function (Parent Function) n e w t o n _ p a r e n t angelegt ist, z. B.
36
1 Einfuhmng in MATLAB®
>> y l = n e w t o n _ p a r e n t ( 1 . Oe-07) ; >> y2 = n e w t o n _ p a r e n t ( l . O e - 0 2 ) y2 = @newton_parent/newton_it
% Handle y l fiir t o l = l e - 7 % Handle y2 fiir t o l = l e - 2
Wir konnen jetzt, wie bisher, diese individuellen Functions z. B. fiir die Startwerte 3 und 6 auswerten. >> yl(3) ans = 6.154681694899654e-001 >> y2(6) ans = 6.154 68187 6614523e-001
% Rechnung mit tol=l.Oe-07
% Rechnung mit tol=1.0e-02
In diesem Fall werden einige Variablen der Parent Function nur einmal zugewiesen bzw. berechnet, was u. a. bei komplexeren Ausdriicken Vorteile bietet. Dies entspricht der Vereinbarung als persistente Variablen. Bemerkung: Da die beiden Variablen ab, 1 in der Nested Function verandert werden, miissen sie vor dem Verlassen der Function auf die urspriinglichen Werte zuriickgesetzt werden. Ohne diese Riicksetzung miissen die Function Handle nach jeder Ausfiihrung neu erzeugt werden. Beispiele mit unterschiedlichen Function-Formulierungen sind im M-File F u n c t i o n _ C r e a t i o n . m der Programmsammlung [59] zu linden. Darin sind neben den groBeren Textpassagen die Befehlszeilen enthalten, so dass einerseits Ergebnisse im Command Fester und andererseits Grafikausgaben verfolgt werden konnen. Das M-File ist in Zellen (Cells) unterteilt, so dass ausgewahlte Programmabschnitte (Zellen) mit dem Button ilJ in der Editor-Kopfzeile gestartet werden konnen - vgl. Kommentarzeilen im M-File -. Zuvor sind die gekennzeichneten Functions in das aktuelle Verzeichnis zu kopieren. Ein HTML-Dokument kann erstellt werden, vgl. S. 30. 1.3.4.3
String-Auswertung und Anonymous Function
Die folgenden Function-Typen dienen der Formulierung einer Function in einer Command-Zeile Oder in einem M-File ohne dafiir ein eigenes File anzulegen. Wir fiihren drei Typen beispielorientiert auf: • Der eval-Befehl (evaluation) - vgl. auch S. 374 und newt one . m in [59] Syntax: [u, v , w , . . . ] = eval ( s t r i n g ) liefert Ausgangsargumente u, v, w, . . . des String-Ausdrucks s t r i n g . >> x='1/y^sin (y)'; % String-Ausdruck, vgl. newtone.m >> y=0.875; % Wertzuweisung >> a = e v a l (x) % Ausfiihrung d e s S t r i n g - A u s d r u c k s a = 8. 77192573984030 9e-001
•
Die inline Function - vgl. S. 374 und u. a. n e w t o n _ s y s . m in [59] Syntax: inline ( e x p r ) erzeugt ein inline function object des String-Ausdrucks e x p r . >> g=inline('5^a+7^sin(b)') % g ist Function Handle oder >> g=inline('5*a+7*sin(b)','a','b') % a, b Eingangsvariablen
1.4 Grafik
Inline g(a,b)
37
function: = 5*a+7^sin(b)
>> c = 0 : 2 ; b = p i / 4 ; >> z = g ( c , b ) z = 4.94 97e+0 0 0 9.94 97e+0 0 0
% neue V a r i a b l e n e i n g e f i i h r t % c -> a, Ausfiihrung d e r F u n c t . 1.4 95 0e+0 01
Da g Function Handle gilt auch: z = f e v a l (g, c , b) • Die Anonymous-¥m\c\ion (ab R14) - vgl. S. 374 und newtona .m, n e w t o n _ s y s .m und insbesondere F u n c t i o n _ C r e a t i o n . m b z w . F u n c t i o n _ C r e a t . p d f in [59] -. Syntax: f h a n d l e = @ ( a r g u m l i s t e ) A u s d r u c k >> >> >> >>
om=5; % Variablenzuweisung f = @(y) c o s ( o m ^ y ) ; % Function-Form, c l a s s : function_handle t=linspace(0,2*pi/om); % Zeitfolge f(t); % Auswertung der F u n c t i o n , f=cos(om*t)
Im Beispiel zur numerischen Integration mit der EULER-Methode S. 33 kann die Function f d g l .m der zu bearbeitenden Differenzialgleichung y =\/y durch eine Anonymous Function im Hauptprogramm ersetzt werden: f d g l = @ ( t , y ) 1/y: [t,y] = eulerApprox(fdgl,ta,te,yO,h);
% F u n c t i o n Handle d e r % Integrator-Aufruf
Dgl.
Die Anonymous-Functions losen insbesondere den Typ inline sowie die Auswertung mit dem feval-Befehl von Function in einer Function, wie auf S. 33, ab.
1.4
Grafik
Visualisierung von Ergebnissen als 2D- und 3D-Grafiken tragt maBgeblich zur Veranschaulichung der untersuchten Vorgange bei. MATLAB bietet diesbeziiglich vielfaltige Moglichkeiten. Wir werden, bezogen auf die Buchthemen, einige Grundlagen zur grafischen Darstellung prasentieren. Erweiterungen sowie Grafik-Beispiele in [8], [48], [63], [67] und insbesondere die MATLAB-Demo-Beispiele abrufbar im Help Browser J J , vgl. Bild 1.1, Button Demo -^ Graphics liefem zusatzliche Anregungen. ^ Wertvolle Links: 1\ I Cent e n t s-Button/ MATLAB/Functions-Categorical L i s t / H a n d l e Graphics Um die im Folgenden eingefuhrten Objekt-Eigenschaften und ihre Zuordnung besser zu verstehen, gehen wir zunachst kurz auf die Grafik-Strukturierung ein. Die MATLAB-Grafik besitzt einen objektorientierten Aufbau mit der Hierarchic nach Bild 1.7. Danach besitzt ein eindeutiges Eltern-Objekt (Parent) beliebig viele Kind-Objekte (Children). Das einzige Grafik-Objekt Root korrespondiert mit dem Bildschirm und besitzt als Eltern-Objekt die Kind-Objekte GrafikFenster (Figure) - umfasst alle erzeugten Fenster -. D.h. soUen Eigenschaften aller GrafikFenster, z. B. die Linienstarke der Graf en, gegeniiber den Standardwerten geandert werden, dann
38
1 Einfuhmng in MATLAB®
Root Figure Ul-Obj.
Axes Image
Light
Line
Patch
X
Rectangle
X
Surface
Text
Bild L7: Vereinfachte Grafik-Objekt-Hierarchie
kann dies nur durch das Root-Objekt - Kennung 0 - erfolgen. Jedes Figure-Objekt ist wiedemm Eltern-Objekt zum Axes-Objekt als Kind. Letztendlich sind dem Axes-Objekt u. a. die KindObjekte: Image, Light, , Text - auch als Kem-Objekte bezeichnet - zugeordnet. Die voUstandige Hierarchie ist im Help Browser 1\ unter dem C o n t e n t s-Button/MATLAB/Handle G r a p h i c s P r o p e r t y Browser nachzulesen. In der Root-, Figure- und Axes-Ebene sind nach dem Start von MATLAB Standardwerte festgeschrieben, sie konnen beispielhaft fiir die Line-Objekte mit: s e t (0, ' Def a u l t L i n e P r o p e r t y N a m e ' ' , P r o p e r t y V a l u e , . . . ) set(gcf,'DefaultLinePropertyName',PropertyValue,...) set(gca,'DefaultLinePropertyName',PropertyValue,...)
neu gesetzt werden. GroB- und Kleinschreibung dient nur der tJbersichtlichkeit. PropertyName ist der Name der Line-Eigenschaft^ - Line Width, Color, usw. - und Property Value ist der zu spezifizierende Wert, z.B. fiir die Linienstarke. Mit ' Def a u l t A x e s P r o p e r t y N a m e ' sind die Axes-Eigenschaften usw. in den oberen beiden Anweisungen (0, gcf) anzusprechen. • Beispiel: Die beziiglich der Root-Ebene (0) festgeschriebenen Standardwerte, u. a. fiir die Bildschirmausgabe das Ausgabe-Format s h o r t E und fiir die Grafik die Linienstarke sowie Linienart-Reihenfolge ( L i n e S t y l e O r d e r ) aller angelegten Figure, kann mit get - z.B. get (0, ' D e f a u l t T e x t F o n t N a m e ' ) fiir die Schriftart - abgefragt und nach Bedarf mit set geandert werden, Beispiele: % Format-Abfrage >> g e t ( 0 , ' f o r m a t ' ) ans = %^ vorhandenes Format shortE % ^ es geht einfacher! >> s e t ( 0 , ' f o r m a t ' , ' l o n g E ' ) % ^Linienstarke ? » get(0,'DefaultLineLineWidth') ans = 5. 0000 000000OOOOOe-001 » set(0,'DefaultLineLineWidth',1) ^ Linienstarke geandert >> get(0,'DefaultFigureColor'); ^ FigureColor abgefragt >> set(0,'DefaultEigureColor',[0.5 0.5 0.5]) % FigureColor gesetzt >> set(0,'Default...','remove') ^ Standardeinstellung
Mit der Anweisung der letzten Zeile wird die Standardeinstellung wieder hergestellt. tJbersichtlicher ist die Beriicksichtigung ausgewahlter Eigenschaften, z. B. Line Width, FigureColor, direkt am einzelnen Objekt Line, Figure usw.. Dies wird in den weiteren Abschnitten gezeigt. 6 siehe: Help Browser/Index/L/Line/defining default properties
1.4 Grafik
39
Alle im Folgenden behandelten 2D- und 3D-Grafik-Beispiele sowie zusatzliche Experimente aus P l o t _ E x p l .m, P l o t _ E x p 2 .m, sind im Programm G r a f i k _ E l e m e n t e .m mit ZellStmktur in [59] zusammengefasst; es kann sclirittweise abgearbeitet werden. 1.4.1
Grafikfenster (Figure), Erstellung und Verwaltung Grafikfenster-Befehle
figure {(nummer)), ... {{PropertyName, - Value)) subplot (zeile,spalte,zdhler) gcf (get handle to current figure) elf (clear current figure) elf reset delete (figure(^i/mm^r)), delete (nummer) close (nummer) close all drawnow shg entspricht figure (gcf)
Erzeugen, Ansprechen einer Figure
Erzeugen eines Subplots Aktuelle Figure-Handle Rucksetzen, loschen der Children wie elf + figure properties zuriickgesetzt Figure, Handle mit nummer loschen Figure nummer schlieBen alle Figures schlieBen Bildschirmaufbau Figure anzeigen (show graph window)
Der Befehl figure erzeugt ein leeres Grafik-Fenster (kurz: Figure), wie in Bild 1.9 ohne Grafik, mit zugehoriger Nummer. Die Nummer entspricht dem Object Handle, welcher die Eigenschaft des Fensters beinhaltet. Alle folgenden Grafikbefehle beziehen sich stets auf das aktuelle GrafikFenster. Den Handle (nummer) der aktuellen Figure erhalt man mit gcf. Die aktuelle Einstellung in der Form: PropertyName, PropertyValue mit get (gcf) oder get (nummer) bzw. die Property Values ausgewahlter Property Namens z. B. mit get (gcf, ' P o s i t i o n ' ) ; fiir gcf kann der Handle gesetzt werden. Z. B. lassen sich Eigenschaften mit (hO=) figure ('Un i t s ' , ' p o i n t s ' , . . . % Einheiten, z. B. auch centimeters, pixels ' P o s i t i o n ' , [100 100 300 100 ] , ... % linke untere Bildecke, Breite, Hohe ' N u m b e r T i t l e ' , ' of f , ... % Figure nummer nicht einblenden ' Name' , ' name',... % name neuer Figure-Name ' MenuBar' , ' n o n e ' ) % Menli-Leiste ausblenden andern oder setzen und bei Bedarf mit set (hO, PropertyName, PropertyValue ) , z. B. set (gcf, ' M e n u B a r ' , ' f i g u r e ' ) , nachtraglich wieder andern; mit get (gcf, PropertyName ) lasst sich die Einstellung abfragen, z . B . g e t ( h O , ' P o s i t i o n ' ) . Das Ansprechen bzw. aktualisieren der Figure erfolgt mit figure (gcf) oder figure ( h O ) . •
Beispiel: Nachtragliche Anderung der FenstergroBe (Figure): p = get ( gcf^ ' P o s i t i o n ' ) ; % a k t u e l l e GroBe set ( gcf, ' P o s i t i o n ' , [p (1 : 2) 0 . 7 5 ^ p ( 3 ) p ( 4 ) ] ) ; % Breite reduziert Anderung der Plot-Fenster-GroBe, siehe Abschn. 1.4.2, wenn oben gcf durch gca ersetzt wird. Durch elf (clear current figure) kann der Inhalt der aktuellen Figure geloscht werden. Mit delet (figure {nummer) ) oder delet {nummer) - gilt fiir jeden Handle - wird die Figure geloscht, mit c\ose(nummer) geschlossen und mit close all werden alle geoffneten Figures geschlossen.
1 Einfuhmng in MATLAB®
40 1.4.1.1
Subplot-Fenster, der subplot-Befehl
Eine Figure kann mit suhp\ot(zeilen,spalten,zdhler) in eine zeilenxspalten-MaXrix von SubplotFenster unterteilt werden. Mit der Variablen zdhler wird zeilenweise von links oben durchnummeriert, z. B. fiir das zweite Bild subplot(2,l,2) Oder subplot(212) Vertragliche Kombinationen u. a. wie in: (2,2,1)
(2,2,2)
(2,2,3)
(2,2,4)
oder
(2,2,2)
subplot 212
(2,2,1)
(2,2,2)
(1,2,1) (2,2,4)
(2,1,2)
sind moglich, wobei fiir subplot( 1,2,1) auch subplot(2,2,[l 3]) bzw. fiir das Argument (2,1,2) auch (2,2,3:4) stehen kann. Abweichend von dieser Bildteilung kann auch die Position und die Subplot-GroBe mit ( h s = ) subplot (' P o s i t i o n ' , [left bottom width height] ) manuell festgeschrieben werden; optional mit Handle h s handhabbar. • Typischer Aufruf zum Anlegen einer Figure mit Subplots: hgare(nummer) % Erzeugt Figure mit der Kennung nummer elf % Riicksetzen des handle der Figure suhp\oi(zeilen,spalten,zdhler) % Erzeugt ein Subplot-Fenster 1.4.2
2D-Grafik
Standardmoglichkeiten zur grafischen Ausgabe von Daten werden zusammengestellt. Beispiele erlautern die Handhabung, mit P l o t _ E x p l .m, P l o t _ E x p 2 .m und G r a f i k _ E l e m e n t e .m aus [59] kann am Rechner experimentiert werden. 1.4.2.1
Plot-Befehle 2D Plot-Befehle
plot( (x,) y {.plotstil), ...) line (X, y, 'PropertyName \ - Value, ...) line( 'PropertyName\PropertyValue, .. eomet ( ( x , ) y {, Komet-Ldnge)) stairs ( ( x , ) y {,plotstil),...) stem ( ( x , ) y (, 'filled',plotstil), ...) spy (matrix {, plotstil)) semilogx((x,) y (.plotstil, ...)) semilogy ( ( x , ) y (.plotstil, ...)) loglog((x,) y {,plotstil,...))
Plot der Funktiony = / ( x ) , lineare Achsteilung Plot, High-Level Aufruf, vgl. S. 45 Plot, Low-Level Aufruf, vgl. S. 45 Animation einer Trajektorie treppenformige Grafik, lineare Achsteilung Plot, diskrete Linien zu Xj mit o-Marke, linear Visualisierung, Sparse-Matrix-Besetzung Plot, x-Achse logarithmisch Plot, y-Achse logarithmisch Plot, X, y-Achsen logarithmisch
fplot {funktion,
Funktion-Plot, z.B. fplot (' x ^ 2 ' , [ 0 2 ]
bereich)
hold ( on I ojf I all)
Vorhandenes Objekt halten, schlieBen
1.4 Grafik
41
Der plot-Befehl plot ( [xl^ x2^ x 3 , . . , xN] f [yl^ y2^ y 3 , . . ^ yN] (,plotstil), . . . ) bzw. vektoriell: plot (x, y (,plotstil),. . . ), mit gleicher Dimension von x, y, zeichnet die Punkte zu den reellen Wertepaaren x j , y j , die standardmaBig durch Linien verbunden werden. Entfallen im Aufruf Abszissen- bzw OrdinatenWerte d. h. x oder y, z. B.: plot (X (.plotstil)), - entspricht plot (1 :length, x (.plotstil)) -, dann werden die enthaltenen Komponenten iiber ihren Index aufgezeichnet. 1st x komplex, dann wird plot (real (x) , imag (x) ) ausgefiihrt. Der plotstil ist ein String, der im einfachsten Fall aus einem Buchstaben zur Farbenkennung (Color) und einer Zeichenfolge fur den Linien- und Markentyp (Line Style, Marker) in beliebiger Reihenfolge besteht; z. B. wird mit plot (x, y, ' r - ' ) bzw. plot (x, y, ' r - ' , u, v , ' - . b ^ ' ) eine rote gestrichelte bzw. eine zusatzliche strichpunktierte, blaue Linie mit der *-Marke erzeugt; vgl. Beispiel S. 42 sowie die Online-Hilfe: ^ help p l o t Eine Auswahl fiir Color, Line Style, Marker ist in den folgenden Tabellen zusammengestellt: Farben k b c g
schwarz blau cyan griin
vgl.: [110]
Linien
r rot m magenta y gelb w weiB gelb
usw.
- durchgezogen - - gestrichelt : gepunktet . Punkte -. strichpunktiert
Marken o Kreise * Sterne + Kreuze X x-Marke usw.
Jeder folgende plot-Befehl loscht zunachst das vorhandene Objekt der aktuellen Figure bzw. der Subplots. Um mehrere Graphen mit mehreren plot-Befehlen in ein Bild zu zeichnen, kann das Loschen mit dem Befehl hold on nach/vor dem ersten plot-Aufruf unterbunden werden - die Axes-Eigenschaften werden an die folgenden Plots vererbt -. Mit hold o f f nach dem letzten plotBefehl wird dieser Zustand aufgehoben - die Axes-Eigenschaften sind Standard -. Wir zeigen dies sowie Erlauterung von: Line Styles, Colors, Markers im Beispiel unter Bild 1.8, siehe u. a. auch D2p_0 . m in [59]. Der benutzerfreundliche plot Befehl ist kein Kern-Objekt, wie Bild 1.7 zeigt, in die Function geht u. a. zur Liniengenerierung der line Befehl als Kern-Objekt ein. Eine Variante zur oberen Liniengestaltung mehrerer Grafen in einem Bild mit Hilfe eines Cell-Arrays sowie zur Bildteilung des Grafikfensters wird u. a. im Programmcode des EinmassenSchwingers S. 43 gezeigt, das zugehorige Grafikfenster ist in Bild 1.9 zu sehen. Wie die PlotAnweisungen in Bild 1.8 mit Hilfe des line Befehls zu formulieren sind, wird auf S. 45 gezeigt. 1.4.2.2
Achsen und Beschriftung
Die Befehle der folgenden Tabelle werden u. a. im unten ausgefiihrten Beispiel erlautert. Bemerkung zur Beschriftung: In den Stringausdriicken string sind auch griechische Buchstaben sowie einige mathematische Darstellungen, z. B. 5"2 -^ 5^, wie im Textverarbeitungssystem
1 Einfuhmng in MATLAB®
42
Grafik-Ausdruck
Programm-Code figure(l); elf t=0:pi/20:2*pi; % Zeitfolge plot ( t , sin (t) , ' - . r * ' ) % l.Plot hold on % plot ( t , sin ( t - p i / 2 ) , ' - m o ' ) % 2. Plot plot ( t , sin ( t - p i ) r' : b s ' ) % 3. Plot % NextPlot hold o f f axis tight % Achsen an Extremwerte angepasst
Bild 1.8: Beispiel zu: Line-Style, Color, Marker
T^X bzw. I ^ T ^ [43] moglich. Mit dem Textinterpreter, z. B. ' i n t e r p r e t e r ' , ' l a t e x ' , erfolgt die Auswahl. In der Symbol-Tabelle unter: Button .li I n d e x / T ^ T e x c o m m a n d s i n t e x t sind die zulassigen Zeichen zu finden. Einige Beispiele werden im Demo-Programm L a t e x B e s c h r . m in [59] gezeigt. Achs-Skalierung und Grafik-Beschriftung Manuelle Achsen-Skalierung, axis ist Vektor axis ( [x_min, x_max, y_min, y_max] ) Zuweisung der aktuellen Skalierung L = axis Umskalierung eines/mehrerer AchsmaBe axis ( [L(l:3), y_max] ) mit inf folgt automatische Skalierung axis ( [-inf x_max y_mm y_max] ) Achs-Befehle: Ein- Ausblenden, Skalierung axis {on\off\ auto \ equal \ square \ tight) Achs-Skalierung 2D, (3D) xlim ( [x_min x_max] ) , ylim, (zlim)
grid gca
{on\off)
Gittemetz ein-, ausblenden
(get handle to current axw)
-sXdib^X {string),
yXdibcX {string)
title {string) text {x^osition, y_position, legend {string_l, string_2,...
string) (, position
Aktuelle Achs-Handle X-, y- Achsen-Beschriftung Grafik-tJberschrift positionierten Text einbringen ))Linienlegende mit Positionsvereinbarung
\ a l p h a I \omega | \Omega | _ | " | . . TgX -Mode, griechische u. mathe. Zeichen Umschaltung des Textmodes, TgX, lOT^X interpreter { t e x } | l a t e x | none • Beispiel: Gesucht ist der Amplituden- und Phasenfrequenzgang eines gedampften EinmassenSchwingers mit der Bewegungsgleichung und der Losung x{t): X-\-IcooDx-\-0)QX = q cos Qt,
wobei
x{t)
=Ccos{Qt-W)
sowie den Parametern D DampfungsmaB, COo Eigenkreisfrequenz des ungedampften Systems, q bezogene Erregenamplitude, Q Erregerkreisfrequenz sowie der Schwingungsamplitude C und
1.4 Grafik
43
Phase ^ ^ ^ 1 ... 2/)T7 f2 C = -45- , , ^ = arctan ^•, T] = — . % V ( 1 - ^ ^ ) ^ + 4/^2772' I-T72' c^ C und *F sind numerisch in Abhangigkeit von 77 auszuwerten und grafisch darzustellen. Hinweis: Zusatzlich zur Achs- und Grafik-Beschriftung wird eine Moglichkeit zur manuellen Achsteilung (Tick-Marken) mit zugehoriger Beschriftung eingefuhrt. Die aktuelle Aclis-Einstellung wird mit gca im set-Befehl ubernommen und mit den Eigenscliaften ytick, yticklahel eine neue Unterteilung und Beschriftung der j-Achse (bzw. x-Achse) gesetzt. Dariiber hinaus wird eine zweifach auftretende Befehlsfolge einmalig als String f unc formuliert und spater mit den aktuellen GroBen unter eval ausgewertet, vgl. Programm Freq_G. m in [59]. % Programm Freq_G.m % Amplituden- und Phasen-Frequenzgang fiir unterschiedliche Dampfungswerte om_0=10.0; % Eigenkreisfreq. [rad/s] q =1.0; % bezogene Erregerampl. [m/s^2] eta=linspace(0.0,2,200); % bezogene Erregerfrequenz D=[0.0125 0.025 0.075 0.15]; % Dampfungswerte % Stringausdruck fiir Achsmanipulation^ spater mit eval ausgewertet func='axis(xa); set(gca,xyt^skala); set(gca,xylab,skala) ' ; % Ausgabedaten und Linestyle for 1=1:4, Dl{I}=sprintf('%s %8.4f','D=',D(I));end % Ausgabe-Cell-Array farblin={'r—^;^g:';^b-.';^kM; % Linestyle in Cell-Array figure(^name^,^Amp/Ph^,'NumberTitle^,'offM % Amplituden, Phase elf; for ii=l: length (D) % Schleife iiber Dampfungswerte C=q/om_0^2./sqrt((l.O-eta.^2) .^2 + 4.0*D (ii)^2*eta.^2); % Amplitude Psi=atan2(2.0*D (ii)*eta,l.O-eta.^2); % Phase subplot(2,1,1) % Amplitudenfrequenzgang plot(eta,C,farblinjii}), hold on % Amplituden-Plot if ii==length (D) % Beschriftung im letzten Durchlauf ylabel('Amplitude C [m]') % Beschriftung y-Achse title('Amplitudengang') % Bild-Titel legend(Dl{1:4},2) % Legende, links angeordn. grid, hold off % Raster xa=[0 eta(end) 0 0.4]; % neue Achsdaten in func skala=0:0.2:eta(end); % Skalenvektor xyt='xtick'; xylab='xticklabel'; % aktuelle Anderung eval(func); % Stringauswertung end subplot (2,1,2), hold on % Phasenfrequenzgang plot(eta,Psi*180/pi,farblin{ii}), hold on % Phasen-Plot if ii==length(D) % Beschriftung im letzten Durchlauf xlabel('Erregerfrequenz \eta [-]') % Beschriftung x-Achse ylabel('Phase \Psi [grad]M % Beschriftung y-Achse title('Phasengang') % Bild-Titel L=axis; xa=[L(l:2) -20 L(4)]; % Daten aus autom. Achsbest. skala = -20:45:L(4); % Skalenvektor xyt='ytick'; xylab='yticklabel'; % aktuelle Anderung eval(func) % Stringauswertung legend(Dl{l:4},2) text(1.5,80,'Phasengang')
44
end
1 Einfuhmng in MATLAB®
g r i d , hold off end
File
Edit
View
Insert
Tools
Desktop
Window
Help
Dcs^Hal t^| Einstellungen von Text-Eigenschaften: Mit ' F o n t S i z e ' , grofie ist die SchriftgroBe, mit ' F o n t W e i g h t ' /stdrke' die Schriftstarke
1.4 Grafik
45
und mit ' C o l o r ' ffarbe die Beschriftungsfarbe, z. B. >> t e x t ( 1 0 , 0 . 8 , ' T e s t ' , ' C o l o r ' , ' r ' , ' F o n t S i z e ' , 1 5 )
einstellbar. Angewendet auf die Achsbeschriftung folgt >> x l a b e l ( ' Z e i t ' , ' F o n t S i z e ' , 1 6 , ' F o n t W e i g h t ' , ' b o l d ' )
Einige Linienspezifikationen (LineSpec) und die Standardfarben, mit denen Mischfarben z. B. [ 0.49 1 0.63 ] abgeleitet werden konnen, sind in der folgender Tabelle zusammengestellt: Linien-, Marker-Spezifikationen und Farben PropertyName LineStyle LineWidth Color Marker MarkerSize MarkerFaceColor MarkerEdgeColor FontWight FontSize
PropertyValue Color (Grundfarben) { - } 1 -1 -. 1 : 1 none yellow [110] y {0.5},!,... [101] m magenta cyan 'r',..., [0.5 0.2 0.4],.. [Oil] c r + lol*l.l> p r o f i l e on, Mandelbrl, p r o f i l e r e p o r t andererseits aus dem Profiler-Fenster, welches durch Eingabe von >> p r o f i l e viewer bzw. mit dem Menii Tool/Op en P r o f i l e r des Editors geoffnet wird, zu starten. Das Ergebnis wird im Profiler-Report angezeigt. Er enthalt u. a. die Gesamtrechenzeit (hier: Ti ^ 54 s fiir 1000 Steps ; CPU-Takt 3.2 GHz.), eine Tabelle mit den rechenintensivsten Zeilen, wie in Bild 1.25, Ergebnisse eines Checks mit M-Lint sowie eine Programmliste mit den vorangestellten Spalten t ime: benotigte Rechenzeit, c a l l s : Anzahl der Aufrufe, l i n e : Zeilennummer Nach Bild 1.25 benotigt Zeile 8 die meiste Rechenzeit. Die Hauptursache liegt in der Built-in Variable i , well bei jedem Aufruf s q r t (-1) auszufUhren ist. Dies lasst sich durch Einfuhren
1 Einfuhmng in MATLAB®
66
Lines where the most 1 ime was spent Line Number
Code
Calls
Total Time
% Time
Time Plot
8
c=-xmax+2*xmax*n/step3-.5 + i * . . .
1000000
22.783 s
42.2%
^
15
Z(m,n)=sqEt(r/maxiteE);
1000000
10.389 s
19.2%
m
12
i f abs(z:)>2, break
5227855
6.542 s
12.1%
•
li
s=s*z+c;
5227855
3.873 s
7.2%
I
14
end
4329912
H
3.335 s
6.2%
1
Other lines & overhead
7.125 s
13.2%
•
Totals
54.047 s
100%
Bild 1.25: Profiler-Report: Liste der rechenintensivsten Zeilen ftir steps=1000 der Variablen i vor der ersten for-Schleife i=sqrt(-l); % Zeile 5, einmaliger Aufruf Oder durch ersetzen von i durch 1 i in Zeile 8 andem. Wir wahlen den ersten Schritt, wie in m a n d e l b r 2 . m. Nach Neustart ergibt sich die reduzierte Gesamtrechenzeit von T2 ~ 26.8 s. Hinweis: In MATLAB 6.1, also ohne JIT-Ace, fiihrt dies kaum zur Rechenzeiterspamis, vgl. [58]. Als weitere rechenzeitreduzierende MaBnahme bietet sich das Praallokieren; vgl. S. 24, des erforderlichen Array-Speicherplatzes von Z mit Z=zeros ( s t e p s ) ; - File m a n d e l b r S .m - an. Die Rechenzeit betragt nun T3 = 15.5 s fiir s t e p s = 1 0 0 0. Auf diese MaBnahme wird bereits im M-Lint Report hingewiesen. Bei kleineren Arrays, z. B. fur s t e p s = 2 0 0 ist der Rechenzeitgewinn minimal. Was ist noch zu versuchen? Dariiber hinaus kann durch eine gunstige Code-Gestaltung, z. B. bezuglich Zeile 8, die Rechenzeit weiter minimiert werden. Aufgrund der geringen Ausfuhrungszeit von Zeile 8 gegeniiber der Gesamtzeit fallt dies kaum ins Gewicht. SchlieBlich fiihren wir eine rein reellwertige Rechnung durch. Hierzu sind die komplexen Ausdrlicke in Real- und Imaginarteile zu zerlegen; vgl. Programm-Code m a n d e l b r 4 .m in [59]. Diese Vorgehensweise ist ziemlich ungewohnlich und macht den Code auBerst undurchsichtig. Es zeigt sich aber, dass die Berechnung mit reellen Ausdriicken gegeniiber komplexen ab MATLAB 6.5, im Gegensatz zu MATLAB 6.1, erheblich schneller ablaufen: T4 = 4.8 s fur steps=1000. Gegeniiberstellung der Rechenzeiten: Im Bild 1.26 sind die bezogenen Rechenzeiten fur s t e p s = 1 0 0 0 und s t e p s = 2 0 0 gegeniibergestellt. Die Rechenzeiten sind jeweils auf die von m a n d e l b r 1. m, also dem Ausgangs-Code, bezogen. In beiden Fallen ist insgesamt eine Rechenzeitreduzierung von ca. 90 % erreicht worden. Dariiber hinaus ist festzuhalten, dass bei groBen Arrays die Speichervorabbelegung trotz JIT-Accelerator niitzlich ist. Bemerkenswert ist der Starke Einfluss einer reellwertigen Rechnung mit erheblich mehr Rechenoperationen gegeniiber der komplexen Formulierung. Dies und insbesondere die Auswirkung der komplexen Variablen / auf die Rechenzeit scheint eine Besonderheit des Accelerators zu sein. Zusammenfassung: Der Profiler unterstiitzt den Programmierer, einen beziiglich der Rechen-
1.7 Computeralgebra unter MATLAB, die Symbolic Math Toolbox reellwertig
g
1
i-Definition Original
^lOOOSclirltte -
^•200Scliritte
praallokieren
67
-
^^^™-n
^^^^^^^^^^^^^^n 0.5 1 Bezogene Reclienzeit
1.5
Bild 1.26: Gegeniiberstellung der Rechenzeiten zeit ausgereizten Code zu erzeugen. Wichtig ist, dennoch einen gut strukturierten und damit leicht nachvoUziehbaren Code zu schreiben, wobei ubliche programmiertechnische und zeitreduzierende MaBnahmen, u. a. praallokieren des Speicherplatzes eines Arrays, beachtet werden soUten. Nach wie vor ist dabei die Vektorisierung sehr niitzlich.
1.7
Computeralgebra unter MATLAB, die Symbolic Math Toolbox
Die Symbolic Math Toolbox mit/ohne der Erweiterung der Extended Symbolic Math Toolbox ermoglicht die symbolische, d. h. exakte Behandlung mathematischer Probleme in der numerischen Umgebung von MATLAB. Dies werden wir insbesondere fiir eine symbolische Herleitung von Bewegungsgleichungen und deren numerische Auswertung nutzen. Basis der Toolboxen ist der Maple-Kern, ursprlinglich an der Universitat von Waterloo, Kanada (1980) entwickelt und heute kommerziell von Maplesoft^, Inc. vertrieben. MATLAB 6 und hoher baut auf Maple V, Version 5 (Symbolic Math Toolbox, Version 2.1) ab MATLAB 6.5 Release 13Spl auf Maple 8 (Symbolic Math Toolbox, Version 3.01) auf. Die Inhalte der beiden MATLAB Toolboxen sind: • Symbolic Math Toolbox: Zusammenfassung von mehr als 100 MATLAB Functions, die auf den Maple Kern aufsetzen, wobei Syntax und Stil dem MATLAB-Sprachumfang entsprechen. • Extended Symbolic Math Toolbox: Ermoglicht den Zugang zu alien nichtgrafischen Maple Funktionen alter Pakete und vergroBert dadurch die Funktionalitat von MATLAB. Mit beiden Toolboxen lassen sich eigene M-Files mit Zugang zu den Maple Functions und dem Maple Workspace schreiben. Wir woUen hier einige Elemente der Symbolic Math Toolbox, die fiir unsere Betrachtung wesentlich sind, kennen lernen. Einen Ausschnitt der mathematischen Themen, denen die verfiigbaren Functions zugeordnet werden, zeigt Tabelle 1.1. Einen erganzenden tJberblick geben die MATLAB-Demo-Beispiele. Sie werden mit der Command-Zeile > > s ymdemo s im Help Browser einsehbar und lassen sich hieraus auch starten. Die zugehorigen M-Files sym. . . demo . m stehen im MATLAB-Verzeichnis . . . \ t o o l b o x \ s y m bolic. 9 http//www.maplesoft.com; bzw. .de
1 Einfuhmng in MATLAB®
68
Tabelle 1.1: Themen der Symbolic Math Toolbox Zuordnung
Operationen
Analysis
Differenziation, Integration, Grenzwertbildung, Summation, TAYLOR-Polynome
Lineare Algebra
Determinante, Inverse, Eigenwerte, Singularwerte SVD, kanonische Formen
Losen von Gleichungssystemen
Symbolische und numerische Losungen linearer algebraischer Gleichungen und Differenzialgleichungen
Spezielle mathematische Funktionen
Spezielle Funktionen der klassischen angewandten Mathematik, z. B. Cos-Integral
Variable Exaktheits-Arithmetik Numerische Auswertung mathematischer Ausdrlicke unterschiedlicher Genauigkeit Transformationen
1.7.1
Fourier-, Laplace-, z-Transformationen mit zugehorigen inversen Transformationen
Online-Hilfe
Einen tJberblick bezuglich des vollstandigen Function-Angebots - gegeniiber Tabelle 1.1- erhalten wir mit ^ >> help s y m b o l i c oder >> helpwin s y m b o l i c oder >> doc s y m b o l i c Die Symbolic Math Toolbox overloads viele numerische Functions von MATLAB, d. h. die symbolische und die numerische Function hat den gleichen Function-Namen. Wenn solche existieren, dann lautet der Online-Hilfe-Aufruf bezuglich der symbolischen Function help sym/function Beispiel:
>> h e l p d i f f
% numerische Version von diff
>> h e l p
% symbolische Version von diff
sym/diff
Ob zu einer numerischen Version eine symbolische existiert, wird am Ende der Hilfe-Ausgabe, z.B. fur >> help d i f f 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 ( c l a s s) sym und c h a r . Hilfe bezuglich der Maple-Befehle erfolgt mit mhelp, z.B. >> mhelp d i f f . 1.7.2
Symbolische Objekte
Den symbolischen Objekten ist der Datentyp sym zugeordnet. Ein sym Objekt ist eine Datenstruktur, welche ein String des Symbols darstellt. Es existieren symbolische Objekte, die
1.7 Computeralgebra unter MATLAB, die Symbolic Math Toolbox
69
symbolische Variable, Ausdrlicke und Matrizen reprasentieren. Den Unterschied zum MATLABStandarddatentyp d o u b l e zeigen die beiden Beispiele >> a = s q r t ( 2 )
>> a = sqrt (sym (2 ) )
a = 1.4142
% class (a) ^ d o u b l e
a = 2^(1/2)
% class (a) ^
sym
Einerseits ist a eine numerische Variable vom Typ d o u b l e und andererseits eine symbolische Variable vom Typ sym, also ein exakter Ausdruck. Die symbolische Variable a wird u. a. durch >> d o u b l e (a)
% Daten-Konvertiemng sym ^
double
in eine numerische gewandelt, wie spater noch ausfuhrlich erlautert. 1.7.3
Vereinbarung symbolischer Variablen und Ausdrucke (Objekte)
Wie oben gesehen, miissen symbolische Objekte vereinbart werden: >> a = s y m C a ' ) ^ oder kurz >> s y m s
b = symCbM^
c = symCc')^
x =
sym('x')
a b c X
wobei angenommen wird, dass sie u. a. auch komplex seien. Die Deklarationen mit den Optionen real, unreal, positive schranken den Wertebereich der Variablen ein, z. B. >> x = s y m ( ' x ' ^ ' r e a l ' ) ;
w=sym('w','positive');
oder >> s y m s X a r e a l usw. Durch die Eingabe von s y m s werden alle vereinbarten symbolischen Variablen angezeigt. Ein symbolischer Ausdruck f lautet >> f = s y m C
u^z"2
+ v ^ z + w ')
AUgemein: Steht rechts vom Gleichheitszeichen eine symbolische GroBe, dann ist auch die linke Seite (ohne vorangegangene Vereinbarung) ein symbolisches Objekt, z. B. >> g = 5 >> a = s y m C a ' ) ;
% class(g) g = a
% class
double (g)
sym
Das Auffinden aller symbolischer Variablen in einem Ausdruck f erfolgt mit >> findsym (f) StandardmaBig benutzt die Symbolic Math Toolbox rational arithmetic operations, d. h. Maple's exakte Symbolik-Arithmetik. Werden symbolische Variable mit der sym Function vereinbart, dann wird die rationale Arithmetik aufgerufen. Die sym Function konvertiert eine Variable sowie eine Matrix vom Typ d o u b l e in die symbolische Form. Beispiel: gegeben sei die Matrix A, gesucht ist die symbolische Form S »A
= [ 1.1000 1.2000 2.1000 2.2000 ]; >> S = sym (A) S = [ 11/10, 6/5 ] [ 21/10, 11/5 ]
% class double
% class sym
70
1 Einfuhmng in MATLAB®
Die Elemente von S werden durch rationale Zahlen, d. h. Briiche mit Integerzahlen (hier klein), dargestellt. Existieren keine rationale Zahlen, so konnen sie durch Gleitkommazahlen (floatingpoint) in symbolischer Form dargestellt werden. Die Matrix >> E = [exp(l)
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) ans = [ 6121026514868074^2" (-51), pi] [ sqrt(2), 832 7 6425888330 64*2" (-55) ]
Optional kann durch ein zweites Argument im Aufruf von sym zwischen vier Darstellungen unterschieden werden: Arg.
Darstellung
Befehl
Ergebnis
f
Gleitkomma
s y m ( l / 3 , ' t' )
' 1 . 5 5 5 5 5 5 5 5 5 5 5 5 5 ' * 2 ^ (-2)
r
Rational (Standard) s y m ( l / 3 ( , ' r ' ) )
1/3
d
Dezimal
sym(l/3, 'd' )
.333333333333333314 82 961625 62 4 73 9
e
Rat. + Abweich.
s y m ( l / 3 , ' e' )
l/3-eps/12
Dariiber hinaus steht unter MATLAB die Variable Precision Arithmetic (vpa), in der Regel zur hochgenauen Berechnung symbolischer Ausdrlicke, zur Verfiigung. Es konnen symbolische Zahlenwerte im Gleitkommaformat mit vorgebbarer Stellenzahl dargestellt und bearbeitet werden; z. B.: vpa (pi*7 . 3 8 ) . Das Ergebnis erscheint standardmaBig mit 32 Stellen. Fine abweichende Stellenzahl i z wird mit digits ( i z ) , z. B. >> digits (40) eingestellt. Die Auswirkungen sollen mit dem folgenden Programm aufgezeigt werden. Hierzu wird mit einem funfstelligen (digits (5)) symbolischen Wert (vpa (b) oder kurz: vpa b 5) die Differenz zu einem symbolisch sowie einem numerisch ermittelten Wert berechnet. b=sym (exp (1) ) ; a = s y m ( l / 3 ) ; el= a*b; digits(5) e2=a*vpa(b); e3=l/3*exp(1); diff_l= double(el-e2) diff_2= double (e2)-e3
% % % % % %
% symbolische
Ausdrlicke
symbolisches Ergebnis Rechnung mit 5 Stellen Rechnung mit reduzierter Stellenzahl numerische Ausfuhrung Differenz der symbolischen Ausdrlicke Differenz gegenliber dem num. Wert
Die daraus entstehenden Differenzen aufgrund der eingeschrankten Stellenzahl sind: diff_l = -l.OOOOOOOOOOOOOOOe-005 diff_2 = 6.057180318208566e-006
1.7 Computeralgebra unter MATLAB, die Symbolic Math Toolbox 1.7.4
71
Substitution symbolischer und numerischer GroBen, der subs Befehl
Substitution einer symbolischen Variable durch einen numerischen Wert oder durch eine andere symbolische Variable oder Ausdruck erfolgt mit dem subs Befehl (vgl. auch Abschn. 1.7.9), dieser ist sehr vielseitig. Beispiel: gegeben sei ein symbolischer Ausdruck h{x) in dem x = 2 zu setzen ist >> x=sym (' x') ; h = 2 * x"2 - 3*x + 1 >>subs(h,2)
oder
>> subs (h, x, 2)
% h class sym % class double
d. h. ersetze im Ausdruck h die Variable x durch 2. Da x die symbolische Standardvariable (default) und darliber hinaus die einzige Variable ist, lief em beide Argumente in s u b s das gleiche Ergebnis. Definition der symbolischen Standardvariablen: Wird u. a. bei der Substitution keine Variable im Argument von s u b s angegeben, dann ermittelt MATLAB die Standard-Variable nach folgender Regel: Als Standard-Variable wird die Variable (Buchstabe) gewahlt, die dem x am nachsten im Alphabet steht. Sind zwei gleich weit entfernt, wird der hinter dem x stehende gewahlt. Vorausgesetzt die Variable besteht aus nur einem Buchstaben! Mit dem findsym Befehl lassen sich die Standardvariablen in jedem Fall ermitteln. Beispiel: >> syms s t ,
g = s + t;
findsym(g,1)
% 1-te
Standard-Var.
Die meisten Befehle der Symbolic Math Toolbox ermoglichen ein tJberschreiben der Standardvariablen X. Beispiel: >> f = ' a " 2 * x " 2 + b*x + c ' ; % c l a s s c h a r , oder >> f = s y m ( ' a " 2 ^ x " 2 + b x + c ' ) ; % c l a s s sym, b e i d e s m o g l i c h >> d i f f (f, ' a ' ) % ^ / / ^ a , Standardvariable iiberschrieben ans= 2*a*x"2 » d i f f (f, ' a ' , 2 ) % d^f / da^ ans= 2*x"2
1.7.5
Beispiele aus der Analysis
In der folgenden Tabelle sind einige Function angegeben, dabei ist S ein symbolischer Ausdruck und v a r eine symbolische Variable. Analysis diff (S (, v a r , n)) int (S (, v a r ^ a, b))
n-te Ableitung nach v a r , d^S/dvar^ Integr. von S bezuglich v a r in den Grenzen a , b class (a, b) sym oder d o u b l e ; /^ Sdvar MACLAURIN-Polynom der Ordnung 5 bzw, n - 1 TAYLOR-Polynom (n-1) -ter Ordnung bezuglich a
taylor (S (, n)) taylor (S (, n, a)) limit ( S ( , x , a , jacobian (S, v)
'left' ^ .
^ ))
'left' lim^^^ S, Richtung , . . , des einseit. Grenzw. JACOBI-Matrix dS/dv, S SkalarA^ektor, v Vektor
72
1 Einfuhmng in MATLAB®
Anwendungsbeispiele: >> syms X y % Vereinbarung der sym. GroBen >>diff(x^3) % Differenziation ans = 3*x^2 >> int (sin(x),0,pi/4) % Integration ans = -1/2*2^ (l/2)+l >> double (ans) % Konvertierung sym -^ double ans = 2.9289e-001 >> taylor (exp (x) *sin(x) , 4) % Maclaurin-Polynom ans = x+x^2+l/3*x^3 >> limit ( 1 / x , X, 0, ' l e f t ' ) % Grenzwert ans = -inf >> jacobian ( [exp (x*y) x^2*y] , [x y] ) % JACOBI-Matrix ans = [ y * e x p ( x ^ y ) , x^exp(x*y)] [ 2*x*y, x"2]
1.7.6
Algebraische Gleichungssysteme, der solve Befehl
Der solve Befehl ist ein vielseitiger Gleichungsloser. Er ist anwendbar auf einzelne Gleichungen sowie auf Gleichungssysteme, z. B. >> solve ( ' a ^ x ans = -b/a
+ b')
oder
>> solve ( ' a * x + b = 0 ' )
lost die Gleichung nach der Standardvariablen x auf. Ist nach einer anderen GroBe aufzulosen, so muss dies angegeben werden, z. B. >> solve ('a*x^2
+ b*x + c ' , ' a ' )
oder
>> solve (' a*x^2 + b*x + c ' , ' c ' )
Hat eine Gleichung mehrere Losungen, dann werden sie im Ausgabevektor aufgelistet. >> s = solve ( ' a ^ x " 2 + b*x + c ' ) s = [ 1/2/a^(-b+(b^2-4^a^c)^ (1/2))] [ 1/2/a^(-b-(b^2-4^a*c)^(1/2))] tJbersichtlichere Ausgabe: » pretty ( s ( l ) ) 2 - b + (b
1/2 - 4 a c)
1/2 a
1.7 Computeralgebra unter MATLAB, die Symbolic Math Toolbox
73
Den numerische Wert fiir vorgegebene a ^ b , c erhalten wir mit » a = 5 / 1 6 ; b = 0 . 3 ; c = 1/4; >> sn = subs (s) sn = -4.8000e-001 +7.5472e-001i -4.8000e-001 -7.5472e-001i Kann keine symbolische Losung gefunden werden, wird selbststandig eine numerische mit definierter Stellenzahl berechnet >> s = solve ( ' x + 2 = e x p ( x ^ 2 ) ' ) s = 1.0571035499947380777922377221533 >> sn = double (s) sn = 1.0571e+000
% class sym
% class double
Die symbolische GroBe s enthalt standardmaBig 32 signifikante Stellen, sie lassen sich mit digits andern, z. B. >> digits(40) , s = solveCx + 2 = e x p ( x ^ 2 ) ' ) s = 1.0571035499947380777 922377221532 8042 94 51
Beispiel fiir ein algebraisches Gleichungssystem mit mehreren Losungen % Ausgabe der Losungskomponenten >> [x,y] = solve('x^2^y^2 - 2^x -1
-1/2 + 1/2*1^3" (1/2)] -1/2 + 1/2*1*3" (1/2) ] -1/2-1/2*1*3" (1/2) ] -1/2-1/2*1*3" (1/2) ] 1/2*5"(l/2)+l/2] 1/2*5"(l/2)+l/2] 1/2-1/2*5" (1/2) ] l/2-l/2*5"(l/2)]
0','x^2 - y^2 -1
[ 1 / 2 * ( - 6 - 2 * 1 * 3^^( 1 / 2 ) ) ^ Ml/2) [ - 1 / 2 * ( - 6 - 2 * 1 * 3^^( 1 / 2 ) ) ^ Ml/2) [ 1 / 2 * ( - 6 + 2 * 1 * 3^^( 1 / 2 ) ) ^ Ml/2) [ - 1 / 2 * ( - 6 + 2 * 1 *^ 3^ (1/2))^ Ml/2) [ l / 2 * ( 2 + 2 * 5^^( 1 / 2 ) ) ^ Ml/2) [ - l / 2 * ( 2 + 2 * 5^^( 1 / 2 ) ) ^ Ml/2) [ l / 2 * ( 2 - 2 * 5^" ( 1 / 2 ) ) ^ Ml/2) [ - l / 2 * ( 2 - 2 * 5^ ^( 1 / 2 ) ) ^ Ml/2)
% Ausgabe als Structure XY, Ergebnis: XY.x bzw. XY.y >>XY = solve ('x^2*y^2 - 2*x -1 = 0','x^2 - y^2 -1 = 0')
XY x: [8x1 sym] y: [8x1 sym]
0'
74
1 Einfuhmng in MATLAB®
1.7.7
Gewohnliche Differenzialgleichungen, der dsolve Befehl
Vorausgesetzt es existiert eine exakte, analytische Losung einer Differenzialgleichung bzw. eines Systems, so kann die Function dsolve ^ help d s o l v e eine allgemeine oder spezielle, d. h. an Anfangswerte angepasste Losung, finden. Die Syntax lasst sich am einfachsten an Beispielen erlautem. 1. Differenzialgleichung 1. Ordnung: Gesucht sei die allgemeine Losung von y ^y
= tt^
»Y = dsolve ('Dy + y = t ^ e x p ( t ) ' ) Y=
% y ^ Dy, D Operator
l/2*t^exp(t)-l/4^exp(t)+exp (-t)*C1
% CI Integrationskonstante
MATLAB erkennt die unabhangige Variable t als Standard-Variable. Tritt z. B. x als Parameter in der Gleichung auf, dann miissen wir >> y = dsolve ('Dy + y = x ^ t ^ e x p ( t ) ' , ' t ' ) schreiben. 2. Differenzialgleichung 2. Ordnung: Ein linearer Ein-Massen-Schwinger mit Dampfung geniigt der Differenzialgleichung y + 2D(Ooy + (OQy = cosQt.
(1.1)
Es soUen die Schwingungen y{t) fiir die Anfangswerte zum Zeitpunkt ^ = 0
^(o) = 0, m = 0 sowie fiir die Parametersatze a)
(Oo = 15rad/s, Q = 16rad/s, D = 0.005
b)
(Oo = 10 rad/s, Q = 10 rad/s, D = 0.0
ermittelt werden. Wir schreiben das M-File b e i _ d g l . m in [59]: 1 2 3 4 5 6 7 8 9 10 11
clear, close all; clc syms Om omO t d
% D ist Differenzialoperator, D -> d
% Beispiel a: lineares, gedampftes System y=dsolve('D2y+2*d*omO*Dy+om0^2*y=cos(Om*t)','y(0)=0,Dy(0)=0','t') y=simple (y) % Vereinfachung der Ausdriicke subexpr(y) % sucht nach gleichen Ausdriicken pretty(y), latex(y) % Ausgabe y=subs(y,{Om omO d},{16 15 0.005}); % Param.-Substitution ezplot(y,[0,8*pi],l) % Grafische Darstellung
1.7 Computeralgebra unter MATLAB, die Symbolic Math Toolbox 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
75
% % Beispiel b: lineares ungedampftes System, Resonanz y=dsolve('D2y+om0^2^y=cos(omO^t)','y(0)=0,Dy(0)=0','t') y=simple(y); % Ausdruck vereinfachen yr=subs(y,{Om omO},{10 10}); % Parameter-Substitution ezplot (yr, [0,6^pi],2) % grafische Darstellung % Ermittlung der Geschwindigkeit fiir den Resonanz-Fall % 1. Differenziation yp=diff(yr,t) % zeitliche Ableitung ezplot(yp,[0,6*pi],3) % grafische Darstellung ylabel('Geschwindigkeit m/s') % 2. Differenzialgleichungssystem Yl2=dsolve('Dyl=y2, Dy2=-om0^2*yl+cos(omO*t)', . . . 'yl(0)=0, y2(0)=0^'t') omO=10; Yp=subs(Yl2.y2) ezplot(Yp,[0,6^pi], 4) xlabel('Zeit t/s') ylabel('Geschwindigkeit m/s')
Danach werden die Losungen y{t) zu a), b) aus (1.1), d. h. einer Differenzialgleichung 2. Ordnung entsprechend dem Operator D 2, ermittelt; vgl. Zeile 5 und 14. Im gedampften Fall a) ist die Losung schon recht umfangreich. Unter Umstanden lasst sie sich mit dem s i m p l e Befehl wie in den Zeilen 6, 15 vereinfachen. Mehrfachanwendung s i m p l e ( s i m p l e (. . ) ) kann weitere Vereinfachungen liefern! Dariiber hinaus konnen mehrfach vorkommende Ausdriicke mit 7 subexpr (y) gefunden und damit die Losung iibersichtlicher dargestellt werden. Mit pretty erfolgt eine Bildschirmausgabe, mit latex wird ein Ausdruck fiir das Textverarbeitungssystem TgX erzeugt. In den Zeilen 1 0 , 1 6 werden die symbolischen Parameter durch ihre numerischen Werte ersetzt. Die Ausdriicke sind weiterhin vom Typ sym, da die symbolische Variable t noch enthalten ist. SchlieBlich konnen mit der Plot-Function ezplot ( f u n k t i o n , [ t _ a n f a n g , t _ e n d ] , f i g u r e _ n r ) - Oder wie bisher mit plot, wenn t substituiert wird - die Ergebnisse grafisch dargestellt werden; vgl. Bild 1.27. Das Plot-Fenster lasst sich naturlich mit den bekannten Befehlen xlabel, legend, title vervollstandigen. Der ungedampfte Schwinger b) befindet sich in Resonanz, d. h. die Erregerkreisfrequenz Q. stimmt mit der Eigenkreisfrequenz coo uberein. Dementsprechend enthalt die Losung sakulare Terme y{t) = -— t sin (Oot,
Q = COQ,
was auch dem Zeitverlauf in Bild 1.272 anzusehen ist. Soil dariiber hinaus auch die Geschwindigkeit y{t), z. B. fiir eine Darstellung in der Phasenebene, ermittelt werden, kann das Wegsignal y{t) nachtraglich differenziert ( vgl. Zeile 21 diff ( y , t ) ) werden oder man bearbeitet von Anfang an die aquivalenten Differenzialgleichungen erste Ordnung
1 Einfuhmng in MATLAB®
76
(1.2)
3)2= -CO^yi + coscoo^ j i ( 0 ) = 0 , J 2 ( 0 ) = 0 wie abZeile 2 5. 0.06
N
'
III
0.04 0.02 0 •0.02 •0.04 •0.06 )
111
|r'iiilllliiiii'
10 Zeit t/s
(
a) 20
1 Resonanz £
0.5
1
0
c
•55
< -0.5 -1
b) )
(
5
10 Zeit t/s
15
Bild 1.27: Weg-Zeit-Verlaufe des gedampften a) und ungedampften b) Schwingers
1.7.8
Beispiel zur linearen Algebra
In der Schwingungstechnik treten insbesondere im Zusammenhang mit Starrkorperbewegungen von Strukturen Eigenwertprobleme mit mehrfachen Eigenwerten auf, die numerisch schwer zu handhaben sind, siehe Kapitel 3. Wir woUen deshalb ausgehend von einer speziellen 3 x3-Matrix A =
12 -20 9
19 -33 15
dieses Problem angehen. Um spater die Ergebnisse beurteilen zu konnen, geben wir sie teilweise vorab an. Die Matrix A besitzt einen einfachen Eigenwert Ai und einen doppelten ^2,3 der Vielfachheit p = 2. Der zugehorige Rangabfall bzw. Defekt ^2,3 = 3 — rang{X2^3E —A) ist eins. Demnach existiert zu ^2,3 nur ein (linear unabhangiger) Eigenvektor. Dev fehlende, vgl. [15], kann rekursive aus (^2,3^—A)v3 = —V2,
V2 berechneter Eigenvektor
(1.3)
ermittelt werden. Mit der kompletten Modalmatrix V = (vi, V2, V3) folgt die JORDAN-Matrix / = V-^AV
Ai 0 0
0 0 A2 1 0 A3
(1.4)
Um nun einmal die Unterschiede einerseits bezuglich einer numerischen und andererseits einer symbolischen Rechnung aufzuzeigen, werden wir beide Vorgehensweisen parallel behandeln. Hierzu dient der unten aufgelistete Programm-Code s y m _ e i g l . m aus [59]
1.7 Computeralgebra unter MATLAB, die Symbolic Math Toolbox 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
% numerische Berechnung A=[6 12 19; -9 -20 -33; 4 9 15] n=length(A); % numerische Bearbeitung rn=rank(A) DETn=det(A) [Vn,Dn]=eig(A) Jn=inv(Vn)*A^Vn % symbolische syms X y z A=sym(A)
77
% Systemmatrix % Dimension von A % Rang-Ermittlung % Determinante % Eigenwertproblem % Einheits- oder JORDAN-Matrix?
Bearbeitung % symbolische Matrix A
r=rank(A) % Rang-Ermittlung DET=det(A) % Determinante % Defekt, Rangabfall zum doppelten Eigenw. 1 d=n-rank(A-eye(n)) [V,D]=eig(A)
% Eigenwertproblem,
symb.
% Reihenfolge der Eigenwerte [-1 1 1] sowie der Eigenvekt. [Dx,I]=sort(subs(diag(D))); % Reihenfolge: Eigenwerte if 1(1) > 1 V=V(:, [2, 1]) ; end % Reihenfolge: Eigenvektoren Aeq= (eye (n)-A) ^ [x; y; z]+V ( :, 2) ; % lin. Gleichungen fiir Eigenvekt. [x, y, z]=solve(Aeq(1),Aeq(2),Aeq(3)); % Losung xyz=[x;y;z]; % Losungsvektor sy=findsym(xyz); % symb. Variable im Ausdruck? xyz=sym(subs(xyz,sy,1)) % Substitution sy -> 1 % Kontroll-Rechnung Ve=[V,xyz] % vollstandiger Eigenvektor Je=inv(Ve)*A*Ve % JORDAN-Matrix % direkte Berechnung aller Eigenvektoren [VJ,J]=jordan(A) % J JORDAN-Matrix
Erlauterungen zum obigen Programmcode und Ergebnisse: Ein ubereinstimmendes Ergebnis erhalten wir bezUglich des Ranges und der Determinanten von A ( Zeile 5, 6, 14, 15). Die numerische Bestimmung der Eigenwerte (Dn) und der Eigenvektoren (Vn) erfolgt in Zeile 8 mit dem Ergebnis Vn = -4.740998230350172e-001 8.12 7 425537 743157e-0 01 -3.38 64273073 92 984e-0 01 Dn = -9.999999999999889e-001 0 0
-4.0824 8314 6127 938e-0 01 8.1649657 34972 854e-001 -4.0824 82 811758122e-0 01 0 1.000000081903542e+000 0
-4.082 4 82 66314 9308e-001 8.164 9 658 83581664e-001 -4.082 4 82 997519134e-001 0 0 9.999999180964527e-001
Danach existieren drei voneinander verschiedene Eigenwerte Ai ~ — 1, A2 ~ 1, A3 ~ 1 und somi
78
1 Einfuhmng in MATLAB®
drei linear unabhangige Eigenvektoren. Die Bedingung (1.4) liefert demnach keine JORDANMatrix, sondern eine Diagonalmatrix aus den Eigenwerten. In Zeile 11 beginnen die symbolischen Operationen, der erste Schritt ist die Symbolisierung von A mit der Typ-Konvertierung class (A) -^ sym. In Zeile 17 wird der Defekt d zu ^2,3 berechnet; Ergebnis: d = l . Demzufolge liefert das Eigenwertproblem in Zeile 19 das Ergebnis V = [ 7/5, [ -12/5, [
1] -2] 1]
1.
D = [ -1, [ 0, [ 0,
0, 1, 0,
0 0 1
D.h. zum doppelten Eigenwert 1 existiert nur ein Eigenvektor, der fehlende (V3) muss aus (1.3) mit singularer Koeffizienten-Matrix (E—A) zu ^2,3 entsprechend den Zeilen 25 - 27 berechnet werden. Das Ergebnis ist nicht eindeutig, es wird in Abhangigkeit einer der Losungskomponenten y , z dargestellt. Welche der beiden es ist, wird mit dem findsym Befehl in Zeile 28 festgestellt. Wir setzen ihn willkiirlich zu eins (Zeile 29). AbschlieBend folgt mit (1.4) eine KontroURechnung. Dazu ist die mit eig berechnete unvollstandige Modalmatrix um V3 zu erganzen (Zeile 31) und damit (1.4) auszufuhren. Die zugehorige JORDAN-Matrix J e (Zeile 32) bestatigt die Richtigkeit. AUe Eigenwerte, die (1.4) erfiillen, konnen einfacher mit der Function Jordan (Zeile 35) direkt berechnet werden. In V J stehen die Eigenvektoren und in J die zugehorige JORDAN-Matrix. Aufgrund unterschiedlicher Skalierung unterscheiden sich beide Ergebnisse optisch. Fazit: Derartige Sonderfalle lassen sich nur mit Hilfe der Computeralgebra losen. Praktisch, d. h. numerisch, existieren keine Mehrfacheigenwerte. Es sei denn, man korrigiert das numerische Ergebnis, wenn man weiB, dass z. B. Nulleigenwerte mehrfach auftreten. 1.7.9
Ubergang zur Numerik
Vielfach wird man symbolisch gewonnene Ausdrlicke, z. B. Bewegungsgleichungen dynamischer Systeme, numerisch weiter bearbeiten. D.h. es muss insbesondere der Datentyp sym in einen vom Typ d o u b l e oder s i n g l e konvertiert werden. Hierfiir stehen die Function subs, eval, double, single zur Verfiigung. In jedem Fall muss der Ausdruck zahlenmaBig (symbolisch/numerisch) vorliegen. Dies erfolgt in der Regel mit dem subs Befehl. Dabei liefert dieser direkt einen Datentyp d o u b l e bzw. s i n g l e , wenn alle substituierten GroBen vom Typ d o u b l e bzw. s i n g l e sind. Ist jedoch ein symbolischer Wert, z. B. 1 / 3 , enthalten, dann ist das Ergebnis e vom Typ sym. Die Function: eval (char (e) ) oder eval ( e ) und double (e) oder single erzeugen schlieBlich den zugehorigen numerischen Wert vom Typ d o u b l e bzw s i n g l e . Auch ein wiederholter Aufruf subs (subs (e) ) fiihrt zum Ziel. Dieses ist im folgenden Programm u e _ n u m . m aus [59] fiir einige Varianten demonstriert. syms a X t f=a-kx^2
+ sin(t) + pi;
al=sym(5); tl=pi/4; xl=3/5;
% symbolischer Ausdruck % symbolische Variable % numerische Variable % numerische Variable
1.7 Computeralgebra unter MATLAB, die Symbolic Math Toolbox el=subs(f,{a x t},{al xl tl}; ell=subs (el) el2=eval(el) el21=eval(char (el)) el3=double (el) el4=single (el)
class (el) sym class(ell) double class(el2) double, oder class(el21) double class(el3) double class (el4) single
al=5; e2=subs(f,[a x t],[al xl tl])
numerische Variable class(e2) double
a=sym(5); t=pi/4; x=3/5; e3=subs(f) e31=eval(e3) e311=eval(char(e3) ) e32=double (e3)
% % % %
a=5; e4=subs(f) e5=eval(f)
% class (e4) double % class (e5) double
79
class (e3) sym class (31) double, oder class(e311) double class(e32) double
Hinweis zu einer Matrizenmultiplikation in einem symbolischen Ausdruck: > > syms A B >>f=A*B; >>g = subs(f,A,B,[l 2;34],[4 3;2 1]) g= 4 6 6 4
% symbolischer Ausdruck % Substitution % Ergebnis aus Punktoperation
D. h. die Multiplikation wird punktweise g=A. ^B ausgefuhrt, wobei class (g) d o u b l e . AbschlieBend betrachten wir das leicht modifizierte Beispiel aus [62] (siehe auch: ue_numl .m in [59]), es zeigt anschaulich noch einmal die Substitution symbolischer und numerischer GroBen sowie den tJbergang zu numerischen Ausdrlicken: % Beispiel zur Substitution mit Ubergang zur Numerik syms X y t g a % Vereinbarung symb. Variable f=x + sin(x); % symb. Ausdruck q=3*t^2 - t^t; % symb. Ausdruck g=subs(f,X,q); % Substitution x -> q h=subs(g,t,exp(y/a)) % Substitution t -> exp(y/a) pretty(h) % iibersichtliche Ausgabe ergebnis=subs(h,{y,a},[1, 9}) % numer. Ergebnis, class double y=0:0.1:1; a=pi; hvec=vectorize(h) ergebn_l=eval(hvec)' y=sym(y); a=sym(a); ergebn_2=eval(hvec) ' % Ubergang zur Numerik
% numerische Daten, y Vektor, a Skalar % h vektorisieren, -> Punktoper. % GroBen double -> ergebn_l double Werte 'symbolisierf Y, a ersetzt -> ergebn_2 sym in ergebn_2 symb ' Zahlenwerte'
80
1 Einfuhmng in MATLAB®
ergebn_31=subs(ergebn_2) ergebn_32=double(ergebn_2)
% darum h i e r ergebn_31 double % ergebnis_32 double
2
Modellbildung
MATLAB und Simulink basieren auf einer mathematischen Modellierung eines zu untersuchenden Systems, die Tools SimPowerSystems, SimMechanics, SimDriveline und SimHydraulics dagegen auf einer Modellierung physikalischer Modelle, siehe Kapitel 7. Wir woUen uns in diesem Abschnitt mit mathematischen Modellierungs-Methoden beschaftigen. Dabei beschranken wir uns auf deterministische mechanische Modelle mit konzentrierten Parametern, die sich durch gewohnliche Differenzialgleichungen beschreiben lassen. Hierzu stellen wir die fiir uns wesentlichen Grundlagen in einer hier benotigten Form kurz zusammen. Eine detailliertere Darstellung insbesondere fiir Mehrkorpersysteme (MKS^) setzt umfangreiche Kenntnisse u. a. der Kinematik und Kinetik voraus. Zur Vertiefung verweisen wir auf die einschlagige Literatur [15], [21], [56], [66], [73], [77]. In [56] werden einige hilfreiche praktische Aspekte der Methoden dargestellt. U. a. sind in [66] Grundlagen zur Modellbildung starrer und elastischer mechanischer Systeme fiir die Simulation und Regelung nachzulesen. Einen tJberblick von Modellierungsmoglichkeiten mechatronischer Systeme findet man in [54]. Dariiber hinaus wird u. a. iiber Analogiebeziehungen von elektrischen und mechanischen Elementen gezeigt, wie elektrische Systeme mit den hier vorgestellten Methoden bearbeitet werden konnen. Fiir die Formulierung der Bewegungsgleichungen von Mehrkorpersystemen bestehen u. a. nach [77] zwei grundsatzliche Moglichkeiten: • Bewegungsgleichungen in voneinander abhdngigen Koordinaten: Auf stellen unter Verwendung der impliziten Bindungen. Wir erhalten dijferenzial-algebraische Gleichungssysteme, • Bewegungsgleichungen in den voneinander unabhdngigen Minimalkoordinaten: Aufstellen unter Verwendung der expliziten Bindungen. Wir erhalten gewohnliche Differenzialgleichungen. Auf die Formulierung in voneinander abhangigen Koordinaten mit impliziten Bindungen gehen wir in Kapitel 5 ein. Hier betrachten wir zunachst nur Formulierungen in Minimalkoordinaten, die die holonomen-skleronomen oder -rheonomen Bindungen, vgl. [56], [66], erfiillen. Die klassischen Vorgehensweisen unterscheiden zwischen synthetischer und analytischer Methode. Wir beschreiben die Unterschiede stichwortartig anhand zweier bekannter Vorgehensweisen: synthetisch: NEWTON - und EULER - Methode
• Zerlegung (Freischneiden) des Systems in Einzelelemente, SchnittgroBen einfiihren • Anwendung von Impuls- und Drallsatz • Zusammensetzen des Systems u. a. durch Eliminieren der Schnittkrafte und -momente, d. h. einarbeiten der expliziten Bindungen. analytisch:
LAGRANGE
-Formalismus (2. Art)
1 MKS: besteht aus starren massebehafteten Korpern - z. B. Punktmasse, Widerstand - und masselosen Verbindungselementen - z. B. Feder, elektrische Leitung -
82
2 Modellbildung • Festlegung der generalisierten (verallgemeinerten) Koordinaten qk\ es sind / Minimalkoordinaten, / Anzahl der Freiheitsgrade. • Bestimmung der Gesamtenergien (kinetische und potentielle Energie, T, V) aus der Summe der Teilenergien T^, Vj^ sowie der generalisierten Krafte/Momente Qk der Elemente k. • Auswertung der LAGRANGEsclien Gleichung (2.110).
Die synthetische Methode bietet den Vorteil, dass z. B. Kennlinien, die das Verhalten von masselosen Elementen beschreiben, leicht eingearbeitet werden konnen; die im System wirkenden Krafte treten deutlich hervor. Nachteilig kann eine groBe Zahl von Variablen sein sowie die nicht leicht zu ermittelnden Beschleunigungen. Vorteil der analytischen Methoden ist die schematische Vorgehensweise. Da alles auf Energien aufbaut werden Symmetrien offenbar, es werden hochsten die ersten zeitlichen Ableitungen der Koordinaten benotigt. Fiir den Ingenieur ist oft von Nachteil, dass Krafte nicht unmittelbar anfallen. Heute strebt man, unabhangig von der Vorgehensweise, formale rechnerorientierte Wege an. Anforderungen an derartige Formalismen sind: • formales, schematisches Vorgehen, • kein Freischneiden, Zwangskrafte werden automatisch berlicksichtigt, • man erhalt bei mechanischen Systemen eine einheitliche Normalform. In den folgenden Abschnitten woUen wir zunachst kurz auf mogliche Strukturen der Bewegungsgleichungen eingehen, um daran anschlieBend benotigte Grundlagen und Methoden zur Formulierung von Bewegungsgleichungen mechanischer Systeme zu erarbeiten. Parallel dazu wird beispielorientiert gezeigt, wie sich damit auch komplexere kinematische Zusammenhange und schlieBlich Bewegungsgleichungen symbolisch mit Hilfe der Computeralgebra unter MATLAB generieren lassen. AbschlieBend werden alle mathematischen Schritte im Beispiel noch einmal zusammengefasst. Wesentliche Schritte fiir den tJbergang zur Numerik sind im Abschn. 1.7.9 gezeigt. In einigen Projekten aus Kapitel 8 wird dies vertieft. Bezuglich der mathematischen Schreibweise gehen wir von einer Matrizenformulierung, sieheu. a. [26], aus. Beispiele: . Spaltenvektor und Zeilenvektor (transponierter Spaltenvektor) [q\
qi
'"
qn]
(2.1)
eW
, n X m-Matrix und deren Transponierte, n = m quadratische Matrix, G '.
a2j
B
^1,1
^2,1