Sie sind auf Seite 1von 514

MATLAB Simulink Stateflow

Grundlagen,Toolboxen, Beispiele von Dr.-Ing. Anne Angermann, Dr.-Ing. Michael Beuschel, Dr.-Ing. Martin Rau, Dipl.-Ing. Ulrich Wohlfarth 6., aktualisierte Auflage

Oldenbourg Verlag Mnchen

Dr.-Ing. Anne Angermann, TU Mnchen Dr.-Ing. Michael Beuschel, Conti Temic microelectronic GmbH, Ingolstadt Dr.-Ing. Martin Rau, BMW AG, Mnchen Dipl.-Ing. Ulrich Wohlfarth, Patentanwaltskanzlei Charrier, Rapp & Liebau, Augsburg MATLAB and Simulink are registered trademarks of The MathWorks, Inc. See www.mathworks.com/trademarks for a list of additional trademarks. The MathWorks Publisher Logo identifies books that contain MATLAB and Simulink content. Used with permission. The MathWorks does not warrant the accuracy of the text or exercises in this book. This books use or discussion of MATLAB and Simulink software or related products does not constitute endorsement or sponsorship by The MathWorks of a particular use of the MATLAB and Simulink software or related products. For MATLAB and Simulink product information, or information on other related products, please contact: The MathWorks, Inc. 3 Apple Hill Drive Natick, MA, 01760-2098 USA Tel: 508-647-7000 Fax: 508-647-7001 E-mail: info@mathworks.com Web: www.mathworks.com

Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet ber <http://dnb.d-nb.de> abrufbar.

2009 Oldenbourg Wissenschaftsverlag GmbH Rosenheimer Strae 145, D-81671 Mnchen Telefon: (089) 45051-0 oldenbourg.de Das Werk einschlielich aller Abbildungen ist urheberrechtlich geschtzt. Jede Verwertung auerhalb der Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulssig und strafbar. Das gilt insbesondere fr Vervielfltigungen, bersetzungen, Mikroverfilmungen und die Einspeicherung und Bearbeitung in elektronischen Systemen. Lektorat: Anton Schmid Herstellung: Anna Grosser Coverentwurf: Kochan & Partner, Mnchen Gedruckt auf sure- und chlorfreiem Papier Druck: Grafik + Druck, Mnchen Bindung: Thomas Buchbinderei GmbH, Augsburg ISBN 978-3-486-58985-6

Vorwort zur sechsten Auflage


Die 6. Auflage wurde im Hinblick auf die aktuelle MATLAB-Version 7.7 (Release 2008b) vollstndig uberarbeitet und ergnzt, ohne jedoch den Umfang des Buches wesentlich zu a a erhhen. Das Ergebnis ist ein kompaktes Lehrbuch f r den Einsteiger und gleichzeitig o u ein ubersichtliches Nachschlagewerk f r den fortgeschrittenen Matlab-Anwender. u Die dem Buch beigelegte CD-ROM ist mit einem benutzerfreundlichen HTML Navigator versehen. Neben den uberarbeiteten Beispielen, Ubungsaufgaben und Lsuno gen enthlt die CD-ROM wieder eine Bibliothek der Autoren mit n tzlichen Extras f r a u u Matlab und Simulink. Danken mchten wir zuallererst Herrn Professor i. R. Dierk Schrder f r seine umfaso o u sende Unterst tzung bei der Erstellung dieses Buches. Ausgehend von seiner Idee und u seinem unerm dlichen Engagement, eine lngst notwendige Vorlesung zum Softwarepau a ket Matlab und Simulink f r Studenten der Fachrichtungen Energietechnik, Automau tisierungstechnik und Mechatronik ins Leben zu rufen, konnten wir in sehr freier und kollegialer Arbeitsweise ein Skriptum zu dieser Vorlesung erstellen. Nach einem ruhestandsbedingten Wechsel kann dieses Engagement nun unter Leitung von Herrn Professor Ralph Kennel, Ordinarius des Lehrstuhls f r Elektrische Antriebsu systeme und Leistungselektronik der Technischen Universitt M nchen, in vollem Uma u fang fortgesetzt werden. F r seine immer wohlwollende Unterst tzung sowie f r die u u u vertrauensvolle und angenehme Zusammenarbeit danken wir ihm daher sehr herzlich. Die auerst positive Resonanz von Studenten unterschiedlichster Fachrichtungen sowie zahlreiche Anfragen aus Forschung und Industrie ermutigten uns, das urspr ngliche u Skriptum einem greren Leserkreis zu erschlieen und als Buch zu verentlichen. o o Aufgrund der regen Nachfrage erscheint dieses Buch nun bereits in seiner 6. Auflage. Nicht zuletzt danken wir daher unseren zahlreichen Lesern, allen Dozenten, Studenten und Kollegen, die uns dabei mit ihren Anregungen und ihrer stets wohlwollenden Kritik unterst tzten und noch unterst tzen werden. u u F r Verbesserungvorschlge und Hinweise auf noch vorhandene Fehler sind wir jederzeit u a dankbar und werden sie auf der Internetseite www.matlabbuch.de neben weiteren aktuellen Informationen rund um Matlab verentlichen. o Dem Oldenbourg Verlag danken wir f r die Bereitschaft, dieses Buch zu verlegen. Beu sonderer Dank gilt hierbei Frau Mnch, Frau Dr. Bromm sowie Herrn Schmid f r ihre o u hilfreiche Unterst tzung whrend der Entstehung und f r die Ubernahme des Lektorats. u a u

M nchen u

Anne Angermann Michael Beuschel Martin Rau Ulrich Wohlfarth

VI

Vorwort

Vorwort zur ersten Auflage


Das vorliegende Buch Matlab Simulink Stateow wendet sich an Studenten und Ingenieure, die das Simulationswerkzeug Matlab/Simulink ezient einsetzen wollen. Zielsetzung dieses Buches ist es, dem Leser einen direkten Zugang zum Anwenden der umfangreichen Mglichkeiten dieses Programmpaketes zu ermglichen. Es o o wird prgnant dargestellt, welche wesentlichen Funktionen in Matlab und Simulink a verf gbar sind beispielsweise Ein- und Ausgabe, grasche Darstellungen oder die u verschiedenen Toolboxen und Blocksets f r die Behandlung zeitkontinuierlicher und u zeitdiskreter linearer und nichtlinearer Systeme sowie ereignisdiskreter Systeme und wie diese Funktionen zu nutzen sind. Dies wird auerdem an zahlreichen Beispielen erlutert. Um den Ansatz prgnante Einf hrung zu unterst tzen, sind zudem zu jea a u u dem Abschnitt Ubungsaufgaben mit deren Lsungen auf einer CD-ROM beigefgt. Der o u Leser hat somit die Option, sein Verstndnis des betreenden Kapitels selbstndig zu a a vertiefen und sofort praktisch zu uberpr fen. u Um den Umfang dieses Buches zu begrenzen, sind keine theoretischen Abhandlungen z.B. uber Integrationsverfahren, die Grundlagen der Regelungstechnik oder der Sig nalverarbeitung bzw. deren Implementierungen enthalten. F r den interessierten Leser u nden sich jedoch in jedem Kapitel Hinweise auf vertiefende Literatur. Ausgangspunkt dieses Buches war meine Uberlegung, Studenten so fr h wie mglich mit u o den Vorteilen des wertvollen Werkzeuges Simulation bekannt zu machen. Dies beginnt bei regelungstechnischen Aufgabenstellungen bereits bei der Modellbildung der Komponenten des betrachteten Systems und der Erstellung des Simulationsprogramms. Es setzt sich fort bei der Validierung der Modelle sowie der graschen Veranschaulichung des Systemverhaltens in den verschiedenen Arbeitspunkten und bei unterschiedlichen Randbedingungen, etwa aufgrund variabler Parameter, der Systemanalyse, der Reg lersynthese sowie der Optimierung des Gesamtsystems. Ausgehend von diesen Uberlegungen wurde ein Konzept f r dieses Buch erarbeitet, damit der Leser die verschieu denen Aufgabenstellungen mglichst anschaulich kennen lernt. Dieses Konzept wurde o aufgrund langjhriger Erfahrung bei Vorlesungen, Studien- und Diplomarbeiten, Disa sertationen und Industrieprojekten kontinuierlich verbessert. Meine Mitarbeiter und ich hoen, allen Interessierten in Studium und Beruf mit diesem Buch einen anschaulichen und ezienten Einstieg in die Simulation mit Matlab und Simulink geben zu knnen. o M nchen u Dierk Schrder o

Inhaltsverzeichnis
1 2 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.4 2.5 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.6 2.6.1 2.6.2 2.6.3 2.7 2.7.1 2.7.2 Einfhrung u MATLAB Grundlagen Erste Schritte mit Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Matlab-Desktop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Matlab-Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zuweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mathematische Funktionen und Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variablen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datentypen in Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vektoren und Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mathematische Funktionen und Operatoren f r Vektoren und Matrizen. u Strukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cell Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verwalten von Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ablaufsteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vergleichsoperatoren und logische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . Verzweigungsbefehle if und switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schleifenbefehle for und while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abbruchbefehle continue, break und return . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 5 5 7 8 9 9 9 10 12 14 15 16 17 17 19 19 20

Der Matlab-Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Matlab-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funktionen mit variabler Parameterzahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lokale, globale und statische Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hilfetext in Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Function Handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funktionen als Inline Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P-Code und clear functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Code-Optimierung in Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Matlab-Proler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Optimierung von Rechenzeit und Speicherbedarf . . . . . . . . . . . . . . . . . . . . . . . Tipps zur Fehlersuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 24 25 26 27 27 28 28 28 29 30

Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Rechengenauigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Fibonacci-Folge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

VIII 2.7.3 2.7.4 3 3.1 3.2 3.2.1 3.2.2 3.2.3 3.3 3.3.1 3.3.2 3.3.3 3.4 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.6 3.6.1 3.6.2 3.6.3 3.6.4 3.7 3.8 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 4 4.1 4.1.1 4.1.2 4.1.3 4.1.4 4.2

Inhaltsverzeichnis Funktion gerade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Berechnungszeiten ermitteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Eingabe und Ausgabe in MATLAB Benutzerdialoge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Text in Matlab (Strings) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eingabedialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formatierte Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Import und Export von Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Standardformate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formatierte Textdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Binrdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 33

Steuerung der Bildschirmausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 34 34 35 35 36 36 37 39

Betriebssystemaufruf und Dateiverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Grasche Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Figure Grundlage einer Matlab-Grak . . . . . . . . . . . . . . . . . . . . . . . . . . Achsen und Beschriftung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Plot-Befehle f r zweidimensionale Graken (2D-Grak) . . . . . . . . . . . . . . . . u Plot-Befehle f r dreidimensionale Graken (3D-Grak) . . . . . . . . . . . . . . . . . u Perspektive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Importieren, Exportieren und Drucken von Graken . . . . . . . . . . . . . . . . . . . Grasche Benutzeroberche (GUI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a GUI-Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GUI-Funktionalitt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a GUI ausf hren und exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u Aufbau des Application-M-File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Harmonisches Mittel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einschwingvorgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gau-Glocke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Spirale und Doppelhelix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funktion geradevek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dierentialgleichungen in MATLAB Anfangswertprobleme (ODEs, DAEs und DDEs) . . . . . . . . . . . . . . . . . . . . . . . Gewhnliche Dierentialgleichungen (ODEs) . . . . . . . . . . . . . . . . . . . . . . . . . . . o Dierential-algebraische Gleichungen (DAEs) . . . . . . . . . . . . . . . . . . . . . . . . . . Dierentialgleichungen mit Totzeiten (DDEs) . . . . . . . . . . . . . . . . . . . . . . . . . . Implizite Dierentialgleichungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 41 43 44 48 49 51 52 52 56 57 58

Tipps rund um die Matlab-Figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 63 63 63 63 64 65 67 67 67 80 83 86

Randwertprobleme f r gewhnliche Dierentialgleichungen . . . . . . . . . . . . . 88 u o

Inhaltsverzeichnis 4.3 4.4 4.4.1 4.4.2 4.4.3 4.4.4 5 5.1 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 5.5 5.5.1 5.5.2

IX

Partielle Dierentialgleichungen (PDEs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Feder-Masse-Schwinger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Elektrischer Schwingkreis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Springender Ball . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kettenlinie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regelungstechnische Funktionen Control System Toolbox Modellierung linearer zeitinvarianter Systeme als LTI-Modelle . . . . . . . . . . Ubertragungsfunktion Transfer Function TF . . . . . . . . . . . . . . . . . . . . . . . . . Nullstellen-Polstellen-Darstellung Zero-Pole-Gain ZPK . . . . . . . . . . . . . . . Zustandsdarstellung State-Space SS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Frequenzgang-Daten-Modelle Frequency Response Data FRD . . . . . . . . Zeitdiskrete Darstellung von LTI-Modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zeitverzgerungen in LTI-Modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o Arbeiten mit LTI-Modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eigenschaften von LTI-Modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schnelle Datenabfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rangfolge der LTI-Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vererbung von LTI-Modell-Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Umwandlung in einen anderen LTI-Modell-Typ . . . . . . . . . . . . . . . . . . . . . . . . Arithmetische Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Auswhlen, verndern und verkn pfen von LTI-Modellen. . . . . . . . . . . . . . . a a u Spezielle LTI-Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Umwandlung zwischen zeitkontinuierlichen und zeitdiskreten Systemen . Analyse von LTI-Modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Allgemeine Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modell-Dynamik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Systemantwort im Zeitbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Systemantwort im Frequenzbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interaktive Modellanalyse mit dem LTI-Viewer . . . . . . . . . . . . . . . . . . . . . . . . . Ordnungsreduzierte Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zustandsbeschreibungsformen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reglerentwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reglerentwurf mittels Wurzelortskurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reglerentwurf mit dem Control and Estimation Tools Manager und dem SISO Design Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zustandsregelung und Zustandsbeobachtung . . . . . . . . . . . . . . . . . . . . . . . . . . . Reglerentwurf mittels Polplatzierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linear-quadratisch optimale Regelung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 98 98 99 99 101 101 102 104 107 108 110 112 115 115 118 119 120 120 121 123 126 127 131 131 133 141 145 154 157 160 165 165 169 171 173 177

Probleme der numerischen Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Fehlerbegri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Kondition eines Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

X 5.5.3 5.5.4 5.6 5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 5.6.6 5.6.7 5.6.8 6 6.1 6.1.1 6.1.2 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.3 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.5 6.5.1 6.5.2 6.5.3 6.5.4 7 7.1 7.2 7.3 7.3.1 7.3.2 7.4 7.5 7.5.1

Inhaltsverzeichnis Numerische Instabilitt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 a Bewertung der LTI-Modell-Typen nach numerischen Gesichtspunkten . . 187 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Erstellen von LTI-Modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verzgerte Ubertragungsglieder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o Verzgerte Ubertragungsglieder zeitdiskretisiert . . . . . . . . . . . . . . . . . . . . . . . . o Typumwandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stabilittsanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Regelung der stabilen PT2 -Ubertragungsfunktion . . . . . . . . . . . . . . . . . . . . . . Regelung der instabilen PT2 -Ubertragungsfunktion . . . . . . . . . . . . . . . . . . . . Kondition und numerische Instabilitt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Signalverarbeitung Signal Processing Toolbox 187 187 189 190 191 191 193 194 197 199

Interpolation, Approximation und Abtastung . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Interpolation und Approximation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Anderung der Abtastrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Spektralanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diskrete Fouriertransformation (DFT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Averaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fensterung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Leistungsspektren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 204 206 206 208

Korrelation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Analoge und Digitale Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Analoge Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Digitale FIR-Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Digitale IIR-Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filterentwurf mit Prototyp-Tiefpssen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Signaltransformation im Frequenzbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Signalanalyse und digitale Filterung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Analoger Bandpass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Digitaler IIR-Bandpass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Optimierung Optimization Toolbox 215 215 217 219 222 225 225 225 226 226 227

Inline Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Algorithmensteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Nullstellenbestimmung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Skalare Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Vektorwertige Funktionen / Gleichungssysteme . . . . . . . . . . . . . . . . . . . . . . . . 236 Minimierung nichtlinearer Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Minimierung unter Nebenbedingungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Nichtlineare Minimierung unter Nebenbedingungen . . . . . . . . . . . . . . . . . . . . 247

Inhaltsverzeichnis 7.5.2 7.5.3 7.6 7.7 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.8.5 7.8.6 7.8.7 8 8.1 8.2 8.3 8.4 8.4.1 8.4.2 8.4.3 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.7 8.7.1 8.7.2 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.9 8.9.1 8.9.2

XI

Quadratische Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Lineare Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Methode der kleinsten Quadrate (Least Squares) . . . . . . . . . . . . . . . . . . . . . . . 260 Optimierung eines Simulink-Modells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nullstellenbestimmung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lsen von Gleichungssystemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o Minimierung ohne Nebenbedingungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Minimierung unter Nebenbedingungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ausgleichspolynom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Curve Fitting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lineare Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Simulink Grundlagen 270 270 270 270 270 271 271 271 273

Starten von Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Erstellen und Editieren eines Signalussplans . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Simulations- und Parametersteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Signale und Datenobjekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arbeiten mit Signalen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arbeiten mit Datenobjekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Model Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Signalerzeugung und -ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bibliothek: Sources Signalerzeugung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bibliothek: Sinks und Signal Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Signal & Scope Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 280 282 284 284 285 290 299

Mathematische Verkn pfungen und Operatoren . . . . . . . . . . . . . . . . . . . . . . . . 300 u Bibliothek: Math Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Bibliothek: Logic and Bit Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Simulationsparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Die Conguration Parameters Dialogbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Fehlerbehandlung und Simulink Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Verwaltung und Organisation eines Simulink-Modells. . . . . . . . . . . . . . . . . . . Arbeiten mit Callback-Routinen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Model Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bibliotheken: Signal Routing und Signal Attributes Signalf hrung und u -eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Drucken und Exportieren eines Simulink-Modells. . . . . . . . . . . . . . . . . . . . . . . 318 318 322 323 328

Subsysteme und Model Referencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Erstellen von Subsystemen / Bibliothek: Ports & Subsystems . . . . . . . . . . . 328 Maskierung von Subsystemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

XII 8.9.3 8.9.4 8.10 8.10.1 8.10.2 9 9.1 9.2 9.2.1 9.2.2 9.2.3 9.3 9.4 9.5 9.5.1 9.6 9.7 9.8 9.8.1 9.8.2 9.8.3 10 10.1 10.2 10.3 10.3.1 10.3.2 10.4 10.5 10.5.1 10.5.2 11 11.1 11.1.1 11.1.2

Inhaltsverzeichnis Erstellen einer eigenen Blockbibliothek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Model Referencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 Nichtlineare Dierentialgleichungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 Gravitationspendel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Lineare und nichtlineare Systeme in Simulink 345

Bibliothek: Continuous Zeitkontinuierliche Systeme . . . . . . . . . . . . . . . . . . . 345 Analyse eines Simulink-Modells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linearisierung mit der linmod-Befehlsfamilie . . . . . . . . . . . . . . . . . . . . . . . . . . . Bestimmung eines Gleichgewichtspunkts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linearisierung mit dem Simulink Control Design . . . . . . . . . . . . . . . . . . . . . . . 350 350 354 356

Bibliothek: Discontinuities Nichtlineare Systeme . . . . . . . . . . . . . . . . . . . . . . 359 Bibliothek: Lookup Tables Nachschlagetabellen . . . . . . . . . . . . . . . . . . . . . . . 362 Bibliothek: User-Dened Functions Benutzer-denierbare Funktionen . . 364 Bibliotheken: Model Verication und Model-Wide Utilities Prfblcke u o und Modell-Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Algebraische Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 S-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modellierung einer Gleichstrom-Nebenschluss-Maschine (GNM) . . . . . . . . Modellierung einer Pulsweitenmodulation (PWM). . . . . . . . . . . . . . . . . . . . . . Aufnahme von Bode-Diagrammen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abtastsysteme in Simulink 377 377 378 379 381

Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Bibliothek: Discrete Zeitdiskrete Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Simulationsparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Rein zeitdiskrete Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Hybride Systeme (gemischt zeitdiskret und zeitkontinuierlich) . . . . . . . . . . 386 Der Model Discretizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Zeitdiskreter Stromregler f r GNM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 u Zeitdiskreter Anti-Windup-Drehzahlregler f r GNM . . . . . . . . . . . . . . . . . . . . 391 u Regelkreise in Simulink 395

Die Gleichstrom-Nebenschluss-Maschine GNM . . . . . . . . . . . . . . . . . . . . . . . . . 395 Initialisierung der Maschinendaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 Simulink-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

Inhaltsverzeichnis 11.2 11.2.1 11.2.2 11.2.3 11.3 11.3.1 11.3.2 11.4 11.4.1 11.4.2 11.5 11.6 11.6.1 11.6.2 11.6.3 11.6.4 11.6.5 11.6.6 11.6.7 11.6.8 11.6.9 11.7 11.7.1 11.7.2 11.7.3 11.7.4 12 12.1 12.1.1 12.1.2 12.1.3 12.2 12.2.1 12.2.2 12.2.3 12.2.4 12.2.5 12.2.6 12.3 12.3.1 12.3.2 Untersuchung der Systemeigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Untersuchung mit Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Untersuchung des linearisierten Modells mit Matlab und der Control System Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interaktive Untersuchung eines Modells mit Simulink Control Design . . .

XIII 399 399 400 402

Kaskadenregelung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Stromregelung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Drehzahlregelung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Zustandsbeobachter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 Luenberger-Beobachter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 Strgren-Beobachter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 o o Zustandsregelung mit Zustandsbeobachter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 Initialisierungsdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gleichstrom-Nebenschluss-Maschine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stromregelung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Drehzahlregelung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grundeinstellung Zustandsbeobachter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zustandsbeobachtung mit Luenberger-Beobachter . . . . . . . . . . . . . . . . . . . . . . Zustandsbeobachtung mit Strgren-Beobachter . . . . . . . . . . . . . . . . . . . . . . o o Zustandsregelung mit Zustandsbeobachter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zustandsregelung mit Luenberger-Beobachter . . . . . . . . . . . . . . . . . . . . . . . . . . Zustandsregelung mit Strgren-Beobachter. . . . . . . . . . . . . . . . . . . . . . . . . . . o o Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zustandsdarstellung GNM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Systemanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Entwurf eines Kalman-Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Entwurf eines LQ-optimierten Zustandsreglers . . . . . . . . . . . . . . . . . . . . . . . . . Stateow Elemente von Stateow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grasche Elemente eines Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chart-Eigenschaften und Trigger-Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nichtgrasche Elemente eines Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Strukturierung und Hierarchiebildung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Superstates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Subcharts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grasche Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Truth Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Embedded Matlab Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Embedded Simulink Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 419 419 420 420 421 421 422 422 423 424 424 424 425 425 427 428 430 439 441 446 447 452 453 455 459 460

Action Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Numerische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Logische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461

XIV 12.3.3 12.3.4 12.3.5 12.3.6 12.3.7 12.3.8 12.4 12.5 12.6 12.7 12.7.1 12.7.2

Inhaltsverzeichnis Unre Operatoren und Zuweisungsaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Detektion von Wertnderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Datentyp-Umwandlungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aufruf von Matlab-Funktionen und Zugri auf den Workspace . . . . . . . . Variablen und Events in Action Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Temporallogik-Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 463 464 464 466 468

Anwendungsbeispiel: Getrnkeautomat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 a Anwendungsbeispiel: Steuerung eines Heizgeblses . . . . . . . . . . . . . . . . . . . . . 472 a Anwendungsbeispiel: Springender Ball . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 Mikrowellenherd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 Zweipunkt-Regelung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 479 483 487

Symbolverzeichnis Literaturverzeichnis Index

Einfuhrung

Matlab ist ein umfangreiches Softwarepaket f r numerische Mathematik. Wie der Nau me Matlab, abgeleitet von MATrix LABoratory, schon zeigt, liegt seine besondere Strke in der Vektor- und Matrizenrechnung. Unterteilt in ein Basismodul und zahlreia che Erweiterungspakete, so genannte Toolboxen, stellt Matlab f r unterschiedlichste u Anwendungsgebiete ein geeignetes Werkzeug zur simulativen Lsung der auftretenden o Problemstellungen dar. Das Basismodul verf gt neben den obligatorischen Ein- und Ausgabefunktionen und u Befehlen zur Programmablaufsteuerung uber eine Vielzahl mathematischer Funktio nen, umfangreiche zwei- und dreidimensionale Visualisierungsmglichkeiten, objekto orientierte Funktionalitt f r die Programmierung interaktiver Anwenderoberchen a u a und Schnittstellen zu Programmiersprachen (C, Fortran, Java) und Hardware (serielle Schnittstelle). Zustzlich werden zahlreiche Toolboxen (TB) mit erweitertem Funktionsumfang ana geboten. Im Rahmen dieses Buches werden die Toolboxen f r Regelungstechnik, Control u System Toolbox (Kap. 5), Signalverarbeitung, Signal Processing Toolbox (Kap. 6), und Optimierung, Optimization Toolbox (Kap. 7), vorgestellt. Eine Sonderstellung nimmt die Toolbox Simulink ein, die eine grasche Oberche zur Modellierung und Simulatia on physikalischer Systeme mittels Signalussgraphen zur Verf gung stellt (Kap. 811). u Hierzu kommt noch Stateow (Kap. 12), eine Ergnzung zu Simulink (Blockset), mit a dem endliche Zustandsautomaten modelliert und simuliert werden knnen. o Das vorliegende Buch soll Einsteigern einen raschen und intuitiven Zugang zu Matlab vermitteln, sowie erfahrenen Anwendern eine Vertiefung ihres Wissens ermglichen. o Zahlreiche Programmbeispiele aus den Gebieten Elektrotechnik, Mechanik, Regelungstechnik und Physik veranschaulichen das Gelesene und knnen selbst nachvollzogen o werden. Am Ende der einzelnen Abschnitte nden sich die jeweils wichtigsten Befehle in tabellarischen Ubersichten zusammengefasst, um allen Matlab-Anwendern im Sinne eines kompakten Nachschlagewerks zu dienen. In Kapitel 2 MATLAB Grundlagen wird ein Einstieg in die grundlegende Programmierung mit Matlab gegeben. Alle wichtigen Typen von Variablen, mathematischen Funktionen und Konstrukte zur Programmablaufsteuerung werden erklrt. Besonders a wird die Mglichkeit hervorgehoben, den Funktionsumfang von Matlab durch selbst o geschriebene Funktionen zu erweitern und umfangreiche Berechnungen in MatlabSkripts zu automatisieren. In Kapitel 3 Eingabe und Ausgabe in MATLAB liegt der Schwerpunkt auf den Visualisierungsfunktionen: Ein- und Ausgabe von Daten am Command Window, zwei- und dreidimensionale Grakfunktionen f r die Darstelu lung von Daten und Berechnungsergebnissen und der Import und Export von Daten. Ferner wird in die Programmierung von graschen Benutzeroberchen, so genannten a

1 Einf hrung u

Graphical User Interfaces (GUI) zur benutzerfreundlichen Gestaltung von MatlabProgrammen eingefhrt. Das Kapitel 4 Dierentialgleichungen in MATLAB u f hrt in die numerische Lsung von Dierentialgleichungen ein, wof r in Matlab efu o u ziente Algorithmen implementiert sind. Die Lsung von Anfangswertproblemen mit o und ohne Unstetigkeiten, von dierential-algebraischen Gleichungen (DAE), von Differentialgleichungen mit Totzeiten (DDE), von Randwertproblemen und von einfachen partiellen Dierentialgleichungen (PDE) wird behandelt. Nachdem nun alle wichtigen Grundfunktionen von Matlab bekannt sind, erfolgt in Kapitel 5 Regelungstechnische Funktionen eine detaillierte Darstellung der Fhigkeiten der Control System Toolbox. Dieses wichtige Thema beinhaltet alle Schrita te von der Darstellung linearer zeitinvarianter Systeme als LTI-Objekt uber deren Ma nipulation und Analyse bis zum Reglerentwurf. Hervorgehoben sei hier die sehr gute Verkn pfungsmglichkeit der Control System Toolbox mit der graschen Erweiterung u o Simulink zur Programmierung und Untersuchung dynamischer Systeme. Die digitale Signalverarbeitung ist f r viele Disziplinen der Ingenieurwissenschaften u relevant und wird durch die Behandlung der Signal Processing Toolbox in Kapitel 6 Signalverarbeitung ber cksichtigt. Es werden numerische Verfahren zur Interpolation u abgetasteter Signale, zur Spektralanalyse und Korrelation sowie zur Signalmanipulation durch analoge und digitale Filter behandelt. Viele Problemstellungen erfordern die Minimierung oder Maximierung mehr oder weniger komplexer Funktionen. Da dies hug nur numerisch mglich ist, wird in Kaa o pitel 7 Optimierung die Optimization Toolbox mit ihren Algorithmen zur Nullstellensuche und Minimierung bzw. Maximierung behandelt. Insbesondere wird auf die Minimierung unter Nebenbedingungen, die Methode der kleinsten Quadrate, die lineare Programmierung und die Optimierung der Reglerparameter eines Simulink-Modells eingegangen. Nun erfolgt der Ubergang zur graschen Erweiterung Simulink, das zur graschen Modellierung und Simulation dynamischer Systeme konzipiert ist und nahtlos mit allen Grundfunktionen und Toolboxen von Matlab zusammenarbeitet. Das Kapitel 8 Simulink Grundlagen stellt einen Einstieg in die blockorientierte grasche Programmierumgebung mit den zugehrigen Funktionsbibliotheken dar. Die Erstellung von Moo dellen wird von Anfang an erklrt. Ferner werden alle wichtigen Datentypen, Simua lationsparameter und Tools f r Verwaltung und Hierarchiebildung behandelt. In den u Kapiteln 9 Lineare und nichtlineare Systeme in Simulink und 10 Abtastsysteme in Simulink wird jeweils auf typisch vorkommende Systemklassen nher a eingegangen. In Kapitel 11 Regelkreise in Simulink erfolgt ein kompletter Reglerentwurf mit anschlieender Simulation f r eine Gleichstrom-Nebenschluss-Maschine, u wodurch vor allem das Zusammenspiel zwischen der Control System Toolbox und Simulink aufgezeigt wird. Das abschlieende Kapitel 12 Stateow behandelt die Modellierung und Simulation ereignisdiskreter endlicher Zustandsautomaten. Diese Klasse von Systemen tritt hug a bei der Steuerung und Uberwachung technischer Prozesse auf. Durch die Kombination mit Simulink lassen sich gemischt kontinuierliche und ereignisdiskrete Modelle erstellen.

1 Einf hrung u

F r eine ubersichtliche Darstellung werden folgende Schriftkonventionen verwendet: u Variablen werden kursiv geschrieben und optionale Parameter in eckigen Klammern [ ] angegeben. Die Kennzeichnung der Matlab-Befehle, der Ein- und Ausgaben sowie der Dateinamen erfolgt durch Schreibmaschinenschrift. Auf der beiliegenden CD-ROM ndet sich der Programm-Code aller im Buch gezeigten Beispiele kapitelweise in Verzeichnissen abgelegt. Weiter enthlt jedes Kapitela Verzeichnis ein Unterverzeichnis loesungen, in dem sich die Musterlsungen (Matlabo und Simulink-Dateien) zu den Ubungsaufgaben benden. Kommentiert werden diese Programme in der Datei loesung.pdf, die alle Musterlsungen, evtl. grasche Ausgao ben und Kommentare zu den Lsungswegen enthlt. Zustzlich enthlt die CD-ROM o a a a das Verzeichnis userlib mit einer Extra-Bibliothek, welche eine Auswahl n tzliu cher Matlab-Funktionen und Simulink-Blcke der Autoren enthlt und um eine Ino a stallationsroutine ergnzt wurde. Zur komfortablen Benutzung der CD-ROM steht ein a HTML-Navigator zur Verf gung, der durch Aufruf der Datei start.html gestartet u wird. Ferner stehen aktualisierte Inhalte der CD-ROM, Errata und weitere aktuelle Informationen zum Buch und rund um Matlab auf der Internetseite www.matlabbuch.de zur Verf gung. u

2
2.1

Matlab Grundlagen
Erste Schritte mit Matlab

Zum Starten von Matlab wird die Datei matlab.exe oder die entsprechende Verkn pfung im Startmen oder auf dem Desktop aufgerufen. F r ssiges Arbeiten empu u u u fehlen sich wenigstens 1 GB freier Arbeitsspeicher. Beendet wird Matlab durch Schlieen des Matlab-Desktops, durch Eingabe der Befehle quit bzw. exit oder mit der Tastenkombination Strg + Q.

2.1.1

Der Matlab-Desktop

Nach dem Starten von Matlab erscheint der so genannte Matlab-Desktop, eine integrierte Entwicklungsumgebung, die folgende Fenster enthalten kann (aber nicht muss eine mgliche Konguration zeigt Abb. 2.1): o

 

 

   

 

Abb. 2.1: Matlab-Desktop (Beispiel-Konguration)

Command Window 1 : Dieser Bereich stellt das Kernst ck von Matlab dar. Hier u werden alle Eingaben in den so genannten Workspace gemacht und die Berechnungen ausgegeben. Der Prompt >> signalisiert die Eingabebereitschaft. Jede Eingabe wird mit

2 MATLAB Grundlagen

der Return-Taste abgeschlossen. Die Regel Punkt vor Strich sowie Klammern gelten wie gewohnt. Zahlen knnen auch mit Exponent e (bzw. E) eingegeben werden. o
>> (40^3 + 3*2e3) / 7 ans = 10000

Tippt man die ersten Buchstaben eines gesuchten Befehls ein, erhlt man mit der a Tabulator-Taste eine Liste der passenden Matlab-Befehle. Editor 2 : Mit dem Matlab-Editor knnen Skripts und Funktionen erstellt und o bearbeitet werden. Er bietet neben den Funktionen zum Editieren von Text die bei Programmier-Umgebungen ublichen Mglichkeiten zum schrittweisen Abarbeiten des o Programmtextes, zur Syntax-Pr fung, zum Debuggen von Fehlern etc. u Command History 3 : Hier werden die im Command Window eingegebenen Befehle gespeichert und angezeigt. Durch Doppelklicken knnen die Befehle wiederholt werden; o auch lassen sich einzelne oder mehrere Befehle ausschneiden, kopieren oder lschen. o Gespeicherte Befehle knnen im Command Window ebenso mit den Kursortasten o und abgerufen werden; tippt man zuvor den Beginn der gesuchten Befehlszeile ein, erscheinen nur die passenden Befehle. Workspace Browser 4 : Hier werden alle im Workspace existierenden Variablen mit Namen und Wert angezeigt. Uber das Kontextmen der Namensleiste lassen sich u weitere Eigenschaften wie Gre und Datentyp (Class) sowie statistische Gren (Min, o o Max, etc.) auswhlen. Zustzlich lassen sich Variablen als Datei abspeichern, aus Dateien a a einlesen oder mittels des Variable Editors (bisher: Array Editor) einfach verndern. a Current Directory Browser 5 : Mittels des Current Directory Browsers lassen sich das gerade aktuelle Verzeichnis des Workspace einsehen oder ndern, Dateien nen, a o Verzeichnisse erstellen und andere typische Verwaltungs-Aufgaben durchf hren. u Proler (ohne Abbildung, da Registerkarte hinter 2 ): Der Proler analysiert die Rechenzeit einzelner Befehle in Matlab-Skripts und -Funktionen, siehe auch Kap. 2.6.2. Shortcut-Leiste (unterhalb der Button-Leiste): Shortcuts knnen mit einem oder o mehreren Matlab-Befehlen belegt werden, die sich dann per Mausklick jederzeit ausf hren lassen. Dies eignet sich insbesondere zum Wechseln in hug genutzte Veru a zeichnisse sowie zum Vorbelegen oder Lschen von Variablen. o Das Aussehen des Desktops kann auf vielfltige Weise individuell angepasst werden. Die a einzelnen Fenster lassen sich durch Ziehen der Titelleisten mit der Maus neu anordnen. Unter dem Men -Punkt Desktop knnen die einzelnen Fenster zu- und abgeschaltet u o werden. Insbesondere kann mit Undock bzw. dem Button das aktuelle Fenster vom Desktop separiert und mit Dock bzw. wieder dort integriert werden. Uber das Men Desktop/Save Layout knnen Desktop-Layouts gespeichert werden. u o Auf diese Weise gespeicherte sowie verschiedene Standard-Layouts knnen uber das o Men Desktop/Desktop Layout jederzeit wiederhergestellt werden. Weitere Vorgaben u knnen im Men File/Preferences eingestellt werden. o u

2.1 Erste Schritte mit Matlab

2.1.2

Die Matlab-Hilfe

Matlab stellt eine umfangreiche Hilfe zur Verf gung. Mit help [befehl] kann die Hilfe u zu einem Befehl direkt im Command Window aufgerufen und dort ausgegeben werden.
>> help sqrt SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also sqrtm, realsqrt, hypot. Reference page in Help browser doc sqrt

Alternativ kann der Hilfe-Browser (siehe Abb. 2.2) uber das Men, den Button u im Matlab-Desktop oder uber die Befehle helpwin oder doc aufgerufen werden. Mit dem Befehl lookfor suchstring kann auch die erste Kommentarzeile aller Matlab-Dateien im Matlab-Pfad nach suchstring durchsucht werden.

Abb. 2.2: MatlabHilfe-Browser

Die Verwendung der Matlab-Hilfe empehlt sich insbesondere bei der Suche nach neuen Befehlen und Funktionen. Oft nden sich am Ende des Hilfetextes Querverweise auf verwandte oder ergnzende Funktionen. a Hilfe help [befehl] helpwin [befehl] doc [befehl] lookfor suchstring Matlab Online-Hilfe im Command Window Matlab Online-Hilfe im Hilfe-Browser Matlab HTML-Dokumentation im Hilfe-Browser Suche in erster Kommentarzeile aller Matlab-Dateien

2 MATLAB Grundlagen

2.1.3

Zuweisungen

Mit = wird in Matlab eine Variable deniert und ihr ein Wert zugewiesen.1) Eine vorherige Deklaration der Variablen ist nicht erforderlich. Die Eingabe des Variablennamens ohne Zuweisung gibt den aktuellen Wert der Variablen aus. Alle Variablen bleiben im so genannten Workspace sichtbar, bis sie gelscht werden oder o Matlab beendet wird. Variablennamen2) knnen aus bis zu 63 Buchstaben oder (mit o Ausnahme des ersten Zeichens) Zahlen sowie Unterstrichen (_) bestehen. Bei Variablen wird Gro- und Kleinschreibung ber cksichtigt. u Die Ausgabe eines Ergebnisses lsst sich z.B. bei Aneinanderreihung mehrerer Ana weisungen mit Semikolon (;) unterdr cken. Ein Komma (,) zur Trennung von Anu weisungen dagegen gibt das Ergebnis aus. Entfllt das Komma am Zeilenende, wird das a Ergebnis ebenfalls ausgegeben.
>> variable_1 = 25; variable_2 = 10; >> variable_1 variable_1 = 25 >> a = variable_1 + variable_2, A = variable_1 / variable_2 a = 35 A = 2.5000

Bestimmte Variablennamen, wie pi, i, j, inf sind reserviert3) und sollten daher nicht anders belegt werden; eps bezeichnet die relative Fliekomma-Genauigkeit (z.B. eps = 2.2204e-016). Bei mathematisch nicht denierten Operationen (z.B. 0/0) wird NaN (Not a Number ) ausgegeben.
>> 1 / 0 ans = Inf

Zuweisungen = Variablenzuweisung ; , Unterdr ckung der Ausgabe u Ausgabe (aneinander gereihte Befehle)

Vorbelegte Variablen und Werte pi i, j inf


1) 2)

Kreiszahl Imaginre Einheit 1 a Unendlich

ans eps NaN

Standard-Ausgabevariable relative Fliekomma-Genauigkeit Not a Number (ung ltiges Ergebnis) u

Ohne Zuweisung speichert Matlab das Ergebnis in der Variablen ans (siehe Beispiel auf Seite 6). Variablen drfen nicht namensgleich mit Matlab-Funktionen und selbst geschriebenen Funktionen u sein. Im Zweifelsfall wird eine Uberschneidung mit which -all name angezeigt. 3) F r die Eulersche Zahl ist keine Variable reserviert; sie kann aber mit exp(1) erzeugt werden. u

2.2 Variablen

2.1.4

Mathematische Funktionen und Operatoren

In Matlab steht eine Vielzahl mathematischer Funktionen zur Verf gung; einige sind u im Folgenden zusammengestellt. Eine weiterf hrende Ubersicht erhlt man durch Einu a gabe von help elfun und help datafun. Alle aufgef hrten Funktionen knnen auch u o auf Vektoren und Matrizen angewandt werden (diese werden in Kap. 2.2.2 behandelt). Mathematische Funktionen und Operatoren +-*/^ mod(x, y) rem(x, y) sqrt(x) abs(x) sign(x) round(x) ceil(x) floor(x) Rechenoperatoren x Modulo y Rest nach Division x/y Quadratwurzel Betrag Signum (Vorzeichen) Runden Runden nach oben Runden nach unten exp(x) log(x) log10(x) erf(x/ 2) real(x) imag(x) conj(x) angle(x) Exponentialfunktion Nat rlicher Logarithmus u Zehner-Logarithmus x Normalverteilung x (x)dx Realteil Imaginrteil a komplexe Konjugation Phase einer komplexen Zahl

Trigonometrische Funktionen sin(x) cos(x) sind(x) cosd(x) Sinus Cosinus Sinus (x in Grad) Cosinus (x in Grad) tan(x) cot(x) atan(y/x) atan2(y, x) Tangens Cotangens Arcus-Tangens /2 Arcus-Tangens

2.2

Variablen

Um umfangreiche Daten ezient zu verarbeiten, bietet Matlab f r Variablen unteru schiedliche Datentypen an. Aus allen Datentypen knnen Arrays erzeugt werden. Im o Folgenden wird die Verwendung solcher Variablen sowie zugehriger Funktionen und o Operatoren erlutert. F r den schnellen Einstieg kann jedoch Kap. 2.2.1 ubersprungen a u werden, da Matlab in aller Regel automatisch mit geeigneten Datentypen arbeitet.

2.2.1

Datentypen in Matlab

Standardmig verwendet Matlab den Fliekomma-Datentyp double (64 Bit) und a wandelt Daten vor Rechenoperationen falls ntig dahin um. Der Typ single (32 Bit) o erlaubt die kompakte Speicherung groer Fliekomma-Daten. klein = single (gross) wandelt eine Variable beliebigen Datentyps in den Typ single um. Als Festkomma-Datentypen stehen int8, int16, int32 f r vorzeichenbehaftete sou wie uint8, uint16, uint32 f r Zahlen 0 zur Verf gung. Neben eingespartem Speiu u cherplatz dienen sie der Modellierung von Festkomma-Arithmetik in Matlab. Einige Rechenoperatoren unterst tzen diese Datentypen (sofern alle ubergebenen Variablen u denselben Typ besitzen), bringen jedoch in der Regel keinen Gewinn an Laufzeit.

10

2 MATLAB Grundlagen

Als weitere Datentypen stehen char (16 Bit!) f r Strings und logical f r logische u u Ausdr cke zur Verf gung. Die erzwungene Typumwandlung erfolgt wie oben gezeigt. u u Fliekomma-Zahlen werden gerundet und ggf. auf den grten bzw. kleinso ten Festkomma-Wert begrenzt! Dies gilt auch f r alle Zwischenergebnisse u innerhalb eines Rechenausdrucks. Im Folgenden werden die automatisch zugewiesenen Standard-Datentypen double bzw. char verwendet; eine Deklaration oder Umwandlung ist in der Regel nicht erforderlich. Datentypen double (x), single (x) int8 (x), int16 (x), int32 (x) uint8 (x), uint16 (x), uint32 (x) char (x) logical (x) Fliekomma (Standard f r Zahlen) u Festkomma mit Vorzeichen Festkomma ohne Vorzeichen Zeichen (Standard f r Strings) u Logischer Ausdruck Achtung:

2.2.2

Vektoren und Matrizen

Die einfachste Art, einen Vektor bzw. eine Matrix zu erzeugen, ist die direkte Eingabe innerhalb eckiger Klammern []. Spalten werden durch Komma (,) oder Leerzeichen4) getrennt, Zeilen durch Semikolon (;) oder durch Zeilenumbruch.
>> mein_vektor = [1 2 3] mein_vektor = 1 2 3 >> meine_matrix = [mein_vektor; 5 6 7] meine_matrix = 1 2 3 5 6 7

Vektoren mit fortlaufenden Elementen knnen besonders einfach mit dem Doppelpunkto Operator(start:[schrittweite:]ziel) erzeugt werden. Wird nur start und ziel angegeben, wird die Schrittweite zu +1 gesetzt. Das Ergebnis ist jeweils ein Zeilenvektor.
>> lang = 1:8 lang = 1 2 3 >> tief = 10:-2:0 tief = 10 8 6

4 4

5 2

6 0

Des Weiteren stehen die Befehle linspace (start, ziel, anzahl) und logspace f r lineu ar bzw. logarithmisch gestufte Vektoren zur Verf gung. Bei logspace werden start und u ziel als Zehnerexponent angegeben, d.h. statt 100 (= 102 ) wird lediglich 2 eingegeben.
4)

In fast allen anderen Fllen werden Leerzeichen von Matlab ignoriert. a

2.2 Variablen
>> noch_laenger = linspace (1, 19, 10) noch_laenger = 1 3 5 7 9 11 13 15 >> hoch_hinaus = logspace (1, 2, 5) hoch_hinaus = 10.0000 17.7828 31.6228 56.2341 100.0000

11

17

19

Die Funktionen ones (zeilen, spalten) und zeros (zeilen, spalten) erzeugen Matrizen mit den Eintrgen 1 bzw. 0. Analog lassen sich Matrizen hherer Dimensionen erstellen. a o Optional kann ein Datentyp aus Kap. 2.2.1 angegeben werden: zeros (zeilen, spalten, typ). Der Befehl eye (zeilen) erzeugt eine Einheitsmatrix (Spaltenzahl = Zeilenzahl).
>> zwo_drei = ones (2, 3) zwo_drei = 1 1 1 1 1 1

Der Zugri auf einzelne Elemente von Vektoren und Matrizen erfolgt durch Angabe der Indizes. Der kleinste Index ist 1 (nicht 0)! Insbesondere zur Ausgabe einzelner Zeilen bzw. Spalten eignet sich der Doppelpunkt-Operator, wobei ein allein stehender Doppelpunkt alle Elemente der zugehrigen Zeile bzw. Spalte adressiert. o
>> meine_matrix (2, 3) ans = 7 >> meine_matrix (2, :) ans = 5 6 7

Sehr n tzlich ist auch der Befehl end, der den Index des letzten Eintrags eines Vektors u bzw. einer Matrix bezeichnet.
>> meine_matrix (end) ans = 7 >> meine_matrix (end, :) ans = 5 6 7 >> M = meine_matrix; >> M (:, end+1) = [10; 11] M = 1 2 3 10 5 6 7 11

Ein hilfreicher Befehl zum Erzeugen von Testdaten und Rauschsignalen ist der Befehl rand (zeilen, spalten), der eine Matrix mit gleichverteilten Zufallswerten zwischen 0 und 1 ausgibt. Analog erzeugt randn (zeilen, spalten) normalverteilte Zufallswerte mit dem Mittelwert 0 und der Standardabweichung 1. Weitere Befehle siehe help elmat.
>> zufall = rand (2, 3) zufall = 0.8381 0.6813 0.8318 0.0196 0.3795 0.5028

12

2 MATLAB Grundlagen

Vektoren und Matrizen [x1 x2 ... ; x3 x4 ... ] start:[schrittweite:]ziel linspace (start, ziel, anzahl) logspace (start, ziel, anzahl) eye (zeilen) ones (zeilen, spalten [, typ ]) zeros (zeilen, spalten [, typ ]) rand (zeilen, spalten) randn (zeilen, spalten) Eingabe von Vektoren und Matrizen Doppelpunkt-Operator (erzeugt Zeilenvektor) Erzeugung linearer Vektoren Erzeugung logarithmischer Vektoren Einheitsmatrix Matrix mit Eintrgen 1 a Matrix mit Eintrgen 0 a Matrix mit Zufallswerten zwischen 0 und 1 Matrix mit normalverteilten Zufallswerten

2.2.3

Mathematische Funktionen und Operatoren fur Vektoren und Matrizen

Viele mathematische Operatoren knnen auch auf Vektoren und Matrizen angewandt o werden. Die Multiplikation mit * wirkt dann als Vektor- bzw. Matrixprodukt; mit ^ wird eine quadratische Matrix potenziert. Die Linksdivision A\b liefert die Lsung x o des linearen Gleichungssystems A x = b (ggf. mittels least squares-Optimierung). Die Transponierte eines Vektors bzw. einer Matrix wird durch transpose oder . erzeugt. F r die konjugiert-komplexe Transposition steht der Befehl ctranspose oder u zur Verf gung. F r reellwertige Gren liefern beide Operatoren dasselbe Ergebnis. u u o
>> zwo_drei * meine_matrix ans = 6 18 6 18

Soll eine der Operationen * / ^ elementweise ausgef hrt werden, wird dem Operator u ein Punkt (.) vorangestellt. Operationen mit Skalaren sowie mit + und - werden immer elementweise ausgefhrt. u
>> zwo_drei ./ meine_matrix ans = 1.0000 0.5000 0.3333 0.2000 0.1667 0.1429

Nat rlich funktioniert dies auch bei Matrizen mit komplexen Werten: u
>> komplex = [1+i 1-i; 2 3] komplex = 1.0000 + 1.0000i 1.0000 - 1.0000i 2.0000 3.0000 >> komplex .* komplex ans = 0 + 2.0000i 0 - 2.0000i 4.0000 9.0000

2.2 Variablen

13

Der Befehl diff (vektor [, n]) berechnet den Dierenzenvektor (n-fache numerische Differentiation). Mit conv (vektor1, vektor2) werden zwei Vektoren gefaltet. Wenn beide Vektoren die Koezienten eines Polynoms enthalten, entspricht das Ergebnis den Koefzienten nach einer Multiplikation beider Polynome.
>> diff (mein_vektor) ans = 1 1

Der Befehl inv (matrix) invertiert eine quadratische Matrix; die Befehle det und eig bestimmen deren Determinante und Eigenwerte. Der Rang einer Matrix wird mit rank (matrix) berechnet.
>> rangvoll = [1 2; 4 9] rangvoll = 1 2 4 9 >> det (rangvoll) ans = 1 >> rank (rangvoll) ans = 2 >> eig (rangvoll) ans = 0.1010 9.8990

Werden die nachstehenden Vektorbefehle wie min, sum etc. auf Matrizen angewandt, wirken sie spaltenweise, d.h. f r jede Spalte wird eine separate Berechnung durchgef hrt u u und das Ergebnis als Vektor ausgegeben. Funktionen und Operatoren fr Vektoren und Matrizen u * ^ \ .* .^ ./ Vektor- bzw. Matrixoperatoren, Linksdivision Elementweise Operatoren

matrix ., transpose (matrix) Transponierte matrix , ctranspose (matrix) Transponierte (konjugiert komplex) diff (vector [, n]) conv (vector1, vector2) n-facher Dierenzenvektor (Standard n = 1) Faltung (Polynom-Multiplikation) Weitere Funktionen min(vec) max(vec) mean(vec) std(vec) kleinstes Vektorelement grtes Vektorelement o Mittelwert Standardabweichung inv (m) det (m) eig (m) rank (m) Inverse einer Matrix Determinante Eigenwerte Rang

sum(vec) Summe der Vektorelemente prod(vec) Produkt der Vektorelemente

cumsum (v) Kumulierte Summe cumprod (v) Kumuliertes Produkt

14

2 MATLAB Grundlagen

2.2.4

Strukturen

Variablen knnen zu so genannten Strukturen zusammengestellt werden, um komplexe o Daten ubersichtlich zu verwalten. Dabei ist jedem Feld ein Name zugeordnet, der als String 5) zwischen einfache Anf hrungszeichen ( ) gesetzt wird. Eine Struktur wird mit u dem Befehl struct (name1, wert1, name2, wert2, ...) oder mit einem Punkt (.) als Separator erzeugt.
>> meine_struktur = struct (daten, meine_matrix, groesse, [2 3]);

Der Zugri auf die Daten erfolgt ebenfalls mittels eines Punktes als Separator.
>> meine_struktur.daten(1,:) ans = 1 2 3

Geschachtelte Strukturen sind ebenfalls mglich, wie das folgende Beispiel zeigt: o Eine Struktur komponist wird angelegt und ihrem Feld name der String Johann Sebastian Bach zugewiesen. Eine zweite Struktur namens datum mit den drei Feldern Tag, Monat und Jahr enthlt die entsprechenden Geburtsdaten. Anschlieend wird die a Struktur datum dem neu erzeugten Feld geboren der Struktur komponist zugewiesen.
>> >> >> >> >> komponist = struct (name, Johann Sebastian Bach); datum.Tag = 21; datum.Monat = Mrz; a datum.Jahr = 1685; komponist.geboren = datum;

Die Struktur komponist soll nun einen zweiten Eintrag mit dem String Wolfgang Amadeus Mozart als Wert f r das Feld name erhalten. Die Werte f r das Feld geboren u u werden nun direkt eingegeben (dies wre oben ebenfalls mglich gewesen). a o
>> >> >> >> komponist(2).name = Wolfgang Amadeus Mozart; komponist(2).geboren.Tag = 27; komponist(2).geboren.Monat = Januar; komponist(2).geboren.Jahr = 1756;

Die Struktur komponist ist nun eine vektorwertige Struktur, deren einzelne Elemente wie Vektoren behandelt werden knnen. Indizes, die auf die Strukturelemente verweisen, o stehen unmittelbar nach dem Namen der Struktur.
>> komponist(2) ans = name: Wolfgang Amadeus Mozart geboren: [1x1 struct] >> komponist(2).geboren ans = Tag: 27 Monat: Januar Jahr: 1756
5)

Siehe auch weitere Ausfhrungen zum Thema Strings in Kap. 3.2.1. u

2.2 Variablen

15

2.2.5

Cell Arrays

Noch eine Stufe allgemeiner gehalten sind so genannte Cell Arrays. Dies sind multidimensionale Arrays, die in jeder einzelnen Zelle Daten unterschiedlicher Datentypen enthalten knnen. Erzeugt werden Cell Arrays mit dem Befehl cell oder durch Eino schlieen der Elemente bzw. Indizes in geschweifte Klammern { }. Die einzelnen Elemente eines Cell Arrays werden ebenso wie normale Vektoren oder Matrizen adressiert, nur werden statt runder Klammern geschweifte Klammern verwendet, z.B. zelle{1,2}.6) Im Folgenden wird ein leeres 2 3-Cell Array namens zelle erzeugt:
>> zelle = cell (2, 3) zelle = [] [] [] [] [] []

Nun werden den einzelnen Zellen die folgenden Werte zugewiesen:


>> >> >> >> >> zelle zelle zelle zelle zelle {1, {1, {1, {2, {2, 1} 2} 3} 1} 3} = = = = = Zelle {1, 1} ist ein Text; 10; [1 2; 3 4]; komponist (2); date;

Die Eingabe des Namens des Cell Arrays zeigt seine Struktur. Den Inhalt einer oder mehrerer Zellen erhlt man durch die Angabe ihrer Indizes (kein Leerzeichen vor der gea schweiften Klammer { verwenden!). Verschachtelte Strukturen werden wie oben gezeigt angesprochen.
>> zelle zelle = [1x25 char ] [1x1 struct] >> zelle{2, 3} ans = 13-Dec-2008 >> zelle{2, 1}.geboren.Monat ans = Januar

[10] []

[2x2 double] 13-Dec-2008 % kein Leerzeichen vor { !

% kein Leerzeichen vor { !

Cell Arrays eignen sich insbesondere auch zum Speichern unterschiedlich langer Strings. Werden Strings dagegen in einem normalen char-Array gespeichert, m ssen alle Einu trge dieselbe Anzahl an Zeichen aufweisen. Dies lsst sich mit einem Cell Array uma a gehen.
6) Die einzelnen Zellen eines (beliebigen) Array-Typs knnen auch mit nur einem Index adressiert o werden. Fr ein zweidimensionales m n-Array ist zelle{k,j} gleichbedeutend mit zelle{(j-1)*m+k} u (siehe auch Befehle ind2sub und sub2ind). Die Reihenfolge der Elemente kann mit : ausgegeben werden, z.B. meine matrix(:).

16

2 MATLAB Grundlagen

Strukturen und Cell Arrays struct (n1, w1, n2, w2, ...) struktur.name zelle = {wert} zelle {index} = wert cell (n) cell (m, n) Erzeugen einer Struktur Zugri auf Element name Erzeugen eines Cell Arrays Erzeugen eines Cell Arrays Erzeugen eines n n-Cell Arrays Erzeugen eines m n-Cell Arrays

2.2.6

Verwalten von Variablen

Im Folgenden werden Befehle vorgestellt, die Informationen uber Art, Gre und o Speicherbedarf von Variablen liefern sowie das Lschen von Variablen erlauben. o Die Dimension eines Vektors bzw. einer Matrix lsst sich mit size (variable) bestima men. F r Vektoren eignet sich auch der Befehl length (variable), der bei Matrizen u den Wert der grten Dimension angibt. Eine Variable kann auch die Gre 0 besitzen, o o wenn sie mit variable = [] erzeugt wurde.
>> length (meine_matrix) ans = 3 >> size (meine_matrix) ans = 2 3

Mit dem Befehl who werden alle aktuell im Workspace vorhandenen Variablen aufgelistet. Mit whos erhlt man zustzlich deren Dimension (Size), Speicherbedarf (Bytes) a a und Datentyp (Class). Mit clear [variable1 variable2 ...] knnen Variablen gezielt o gelscht werden. Der Befehl clear alleine lscht alle Variablen im Workspace; clear o o all lscht zudem alle globalen Variablen.7) Dies eignet sich auch gut als Shortcut auf o dem Matlab-Desktop.
>> clear variable_1 variable_2 a A meine_matrix lang tief noch_laenger ... hoch_hinaus zwo_drei M zufall rangvoll datum ans >> whos Name komplex komponist mein_vektor meine_struktur zelle Size 2x2 1x2 1x3 1x1 2x3 Bytes 64 1252 24 312 1110 Class double struct double struct cell Attributes complex

Uber das Men Desktop/Workspace oder den Befehl workspace lsst sich der Workspace u a Browser nen. Dieser erlaubt ebenfalls eine Ubersicht der vorhandenen Variablen. o
7)

Zu globalen Variablen siehe Kap. 2.5.2

2.3 Ablaufsteuerung

17

Durch Doppelklicken auf den gew nschten Namen wird der Variable Editor (bisher: u Array Editor ) aktiviert (siehe Abb. 2.3). Dort knnen Variablen editiert und gelscht o o werden. Ein markierter Datenbereich (im Beispiel die 2. Spalte von zelle{1,3}) kann direkt grasch angezeigt werden. Die Schaltchen a uber die Auswahlliste dienen zum Anordnen mehrerer Teilfenster innerhalb des Variable Editors.

Abb. 2.3: Matlab Variable Editor

Verwalten von Variablen size (variable) length (variable) clear clear all clear [v1 v2 ...] who whos Dimensionen einer Variablen Lnge eines Vektors, grte Dimension einer Matrix a o Lscht alle Variablen im Workspace o Lscht zustzlich alle globalen Variablen o a Lscht ausgewhlte Variablen o a Liste aller im Workspace existierenden Variablen Ausf hrliche Liste aller im Workspace existierenden Variau blen mit Name, Dimension, Speicherbedarf und Datentyp

2.3

Ablaufsteuerung

Die Ablaufsteuerung umfasst neben den eigentlichen Verzweigungs-, Schleifen- und Abbruchbefehlen die Abfrage von Bedingungen sowie deren logische Verknpfung. u

2.3.1

Vergleichsoperatoren und logische Operatoren

Logische Operatoren knnen auf alle Zahlen angewandt werden. Werte ungleich 0 sind o dabei logisch wahr und 0 ist logisch falsch. Als Ergebnis erhlt man stets 0 bzw. 1. a Neben Vergleichsoperatoren stehen logische Operatoren fr UND, ODER, NEGATION u und EXKLUSIV ODER zur Verf gung, und zwar meist in der Form eines Zeichens oder u als Funktion, z.B. a & b oder and(a, b) f r a UND b. Zuerst werden mathematische, dann u logische Ausdr cke ausgewertet (f r Details siehe help precedence). Treten mehrere u u logische Operatoren auf, empehlt sich die Verwendung von Klammern!

18
>> mein_vektor >= 2 ans = 0 1 1 >> 1 == 0 | (4 > 5-2 & 4 <= 5) ans = 1

2 MATLAB Grundlagen

Hier wird eine Ergebnistabelle f r logische Verkn pfungen zweier Binrzahlen erstellt: u u a
>> a = [0 0 1 1]; >> [ a b a&b ans = 0 0 0 0 1 0 1 0 0 1 1 1 b = [0 1 0 1]; a|b xor(a,b) ~a ~(a&b) ~(a|b)] 0 1 1 1 0 1 1 0 1 1 0 0 1 1 1 0 1 0 0 0

Die Shortcut-Operatoren && und || brechen im Gegensatz zu & und | die Auswertung mehrerer logischer Ausdr cke ab, sobald das Ergebnis eindeutig ist: so wird ausdruck u in (1 | ausdruck) ausgewertet, in (1 || ausdruck) dagegen nicht. Die Auswertung erfolgt dabei von links nach rechts. Bei vektorwertigen Daten m ssen allerdings nach u wie vor die Operatoren & und | bzw. all oder any verwendet werden (siehe unten). Die Funktion any (vektor) ist wahr, wenn mindestens ein Element eines Vektors (bestehend aus Zahlen oder logischen Ausdr cken) wahr ist; all (vektor) ist nur wahr, wenn u jedes Element wahr ist. Die Funktion find (vektor) liefert die Indizes aller wahren Elemente. Eine weiterf hrende Befehls bersicht erhlt man mit help ops. u u a Der Befehl exist (name) uberpr ft, ob eine Variable, Funktion oder Datei name u existiert: Falls nicht, wird 0 zur ckgeliefert, ansonsten eine Zahl ungleich 0, z.B. 1 f r u u eine Variable, 2 f r eine Matlab-Datei, 7 f r ein Verzeichnis (siehe auch doc exist). u u Eine spezielle Anwendung logischer Operatoren ist das logical indexing. Dabei wird ein Array mit einem Index-Array derselben Gre adressiert, welches nur aus den (logio schen) Werten 0 und 1 besteht. Das folgende Beispiel setzt alle negativen Elemente von a auf 0. Der Ausdruck a < 0 liefert dabei den Vektor [1 1 0 0 0 0 0 0 0 0] zur ck; u damit werden nur die beiden ersten Elemente von a ausgewhlt und auf 0 gesetzt. a
>> a = -2:7 a = -2 -1 0 >> a (a < 0) = 0 a = 0 0 0

1 1

2 2

3 3

4 4

5 5

6 6

7 7

In einem weiteren Schritt sollen alle durch 3 teilbaren Elemente von a entfernt werden.
>> a = a (logical (mod (a, 3))) Warning: Values other than 0 or 1 converted to logical 1 a = 1 2 4 5 7

Da der Ausdruck mod(a,3) auch andere Werte als 0 und 1 liefert, muss sein Ergebnis

2.3 Ablaufsteuerung mit logical explizit in logische Ausdr cke umgewandelt werden.8) u Vergleichsoperatoren == ~= < <= > >= eq (a, ne (a, lt (a, le (a, gt (a, ge (a, b) b) b) b) b) b) gleich ungleich kleiner kleiner gleich grer o grer gleich o ~ & | && || Logische Operatoren not (a) and (a, b) or (a, b) xor (a, b)

19

NEGATION UND ODER EXKLUSIV ODER Shortcut-UND (skalar) Shortcut-ODER (skalar)

Weitere Operatoren all (vec) jedes Element wahr any (vec) mind. 1 Element wahr logical (a) Typ-Umwandlung exist (x) Existenz von x find (vec) Indizes wahrer Elemente

2.3.2

Verzweigungsbefehle if und switch

Mit Hilfe der oben behandelten Operatoren knnen Fallunterscheidungen durchgef hrt o u werden. Daf r stellt Matlab die folgenden Verzweigungsbefehle zur Verf gung: u u if ausdruck befehle [elseif ausdruck befehle ...] [else befehle] end switch ausdruck case ausdruck befehle [...] [ otherwise befehle] end Bei case knnen mehrere ODER-verknpfte Mglichkeiten innerhalb geschweifter o u o Klammern { } (d.h. als Cell Array) angegeben werden. Anders als in C wird immer nur eine Verzweigung (case) ausgef hrt; es wird kein break zum Aussprung bentigt. u o
>> test = 5; >> if test<=2; a=2, elseif test<=5; a=5, else a=10, end a = 5 >> switch test case 2; a=2, case {3 4 5}; a=5, otherwise a=10, end a = 5

In beiden Fllen sollten die Teilbefehle durch Komma bzw. Semikolon getrennt werden. a In Skripts werden die einzelnen Teilbefehle ublicherweise in eigene Zeilen geschrieben. Eine Verschachtelung mehrerer if- und switch-Konstrukte ist mglich. o

2.3.3

Schleifenbefehle for und while

Mit Schleifen knnen bestimmte Anweisungen mehrfach durchlaufen werden: o for variable = vektor befehle end while ausdruck befehle end
8) Alternativ: a (~mod (a, 3)) = []. Dabei ubernimmt die Negation ~ die Konvertierung in den Datentyp logical; die leere Zuweisung mit [] lscht die entsprechenden Elemente des Vektors a. o

20

2 MATLAB Grundlagen

>> for k=1:0, k^2, end

Die for-Schleife im obigen Beispiel wird nicht durchlaufen, da der f r k angegebene u Bereich 1:0 leer ist. Im Unterschied dazu wird im folgenden Beispiel die while-Schleife mindestens einmal abgearbeitet, da die Abbruchbedingung (siehe auch Kap. 2.3.4) erst am Ende gepr ft wird. Auerdem sind zwei end notwendig (f r if und while)! u u
>> n = 1; >> while 1, n=n+1; m=n^2, m = 4 m = 9 if m>5, break; end; end

2.3.4

Abbruchbefehle continue, break und return

Weitere Befehle zur Ablaufsteuerung sind continue, break und return. Mit continue wird innerhalb einer for- oder while-Schleife sofort zum nchsten Iterationsschritt gea sprungen; alle innerhalb der aktuellen Schleife noch folgenden Befehle werden ubergan gen. Der Befehl break dagegen bricht die aktuelle Schleife ganz ab. Der Befehl return bricht eine Matlab-Funktion bzw. ein Skript9) ab und kehrt zur aufrufenden Ebene zur ck (bzw. zum Command Window, falls die Funktion von dort aufgerufen wurde). u Im folgenden Beispiel wird uberpr ft, welche ungeraden Zahlen zwischen 13 und 17 u Primzahlen sind. Die zu testenden Zahlen m werden in der aueren Schleife, mgliche o Teiler n in der inneren Schleife hochgezhlt. a
for m = 13:2:17 for n = 2:m-1 if mod (m,n) ~= 0, continue, end sprintf ( %2d ist keine Primzahl.\n, m) break end if n == m-1 sprintf (!! %2d IST eine Primzahl!\n, m) end end

Wenn der Rest mod(m,n) ungleich 0 ist (also n kein Teiler von m ist), wirkt der continueBefehl. Der folgende sprintf-10) und der break-Befehl werden ubersprungen; es wird sofort das nchsthhere n getestet. Ist n dagegen Teiler von m und m somit keine Prima o zahl, wird die innere for-Schleife nach der Ausgabe ist keine Primzahl bei break verlassen und das nchsthhere m getestet. a o Ist m durch keine Zahl von 2 bis m-1 teilbar, so ist m eine Primzahl. Die Uberprfung u mit der zweiten if-Abfrage n == m-1 ist notwendig, da die innere Schleife zwar bei Nicht-Primzahlen vorzeitig abgebrochen wird, aber dennoch alle nachfolgenden Befehle der ueren Schleife abgearbeitet werden. Die Ausgabe am Matlab-Workspace ergibt: a
9) 10)

Matlab-Skripts und -Funktionen werden in Kap. 2.4 und 2.5 behandelt. Die Syntax des Ausgabe-Befehls sprintf wird in Kap. 3.3 erklrt. a

2.4 Der Matlab-Editor


!! 13 IST eine Primzahl! 15 ist keine Primzahl. !! 17 IST eine Primzahl!

21

Eine weiterf hrende Ubersicht zur Programm-Ablaufsteuerung bietet help lang. u Verzweigungen, Schleifen und Ablaufsteuerung if ... [elseif ... ] [else ... ] end switch ... case ... [otherwise ... ] end for variable = vektor befehle end while ausdruck befehle end break continue return If-Verzweigung Switch-Verzweigung For-Schleife While-Schleife Sofortiger Schleifen-Abbruch Sofortiger Sprung zum nchsten a Iterationsschritt einer Schleife Sofortiger Funktions-R cksprung u

2.4

Der Matlab-Editor

Neben der direkten Befehlseingabe am Matlab-Prompt knnen Befehlsfolgen auch in o so genannten Matlab-Skripts (Textdateien mit der Endung .m, daher auch M-Files genannt) gespeichert werden. Zur Bearbeitung dieser Dateien steht der Matlab-Editor zur Verf gung (siehe u Abb. 2.4). Dieser kann uber den Button auf dem Desktop oder das Men File/New/ u M-File aufgerufen werden. Ein bestehendes M-File wird uber File/Open, durch Dop pelklicken im Current Directory Browser oder mit dem Befehl edit datei genet. o

Abb. 2.4: Matlab-Editor (mit Beispieldatei zu Kap. 2.3.4)

22

2 MATLAB Grundlagen

Das Ausfhren eines Skripts geschieht durch Eingabe des Dateinamens (ohne Enu dung) im Matlab-Command-Window, in diesem Fall also mit beispiele, mit Run im Kontextmen des Current Directory Browsers oder mit dem Button . u Zum Debuggen eines Skripts (oder einer Funktion) knnen in der Spalte neben der o startet Zeilennummer Breakpoints per Mausklick gesetzt und gelscht werden.11) o den Debugger, springt zum nchsten Breakpoint. Mit a knnen einzelne Zeilen o abgearbeitet, aufgerufene Skripts bzw. Funktionen angesprungen und wieder verlassen werden. Die jeweils aktuelle Zeile ist mit einem Pfeil markiert, im Command Window (Prompt K>>) und im Workspace Browser sind die dann sichtbaren Variablen verf gbar. u Beendet wird der Debugger mit Erreichen des Skript-Endes oder mit . Whrend der Eingabe wird eine Syntax-Prfung durchgefhrt. Aullige Stellen wera u u a den im Code unterringelt und rechts neben dem vertikalen Scrollbalken farbig markiert: Syntaxfehler sind rot, Warnungen der Code-Prfung (M-Lint ) orange (d.h. fehleranflliu a ge oder ungnstige Konstrukte). F hrt man den Mauszeiger uber solch eine Markieu u rung, wird eine Beschreibung eingeblendet; ein Klick auf die Markierung positioniert den Cursor direkt an die betroene Stelle. Rechts oben erscheint als Zusammenfassung eine Ampel: Wird keine Stelle beanstandet, ist diese gr n. Eine Liste aller Fehlermelu dungen und Warnungen erhlt man ebenso im Proler (siehe Kap. 2.6.1) und uber das a Men Tools/M-Lint/Show M-Lint Report. u Kommentare werden durch das Zeichen % markiert, d.h. alle Zeichen rechts von % bis zum Zeilenende werden von Matlab ignoriert. Zum Auskommentieren lngerer Passaa gen ist das Men Text/Comment (bzw. Strg + R) und umgekehrt Text/Uncomment u (bzw. Strg + T ) hilfreich. Ebenso existiert mit %{ kommentar %} eine Maskierung mehrzeiliger Kommentare. Lange Zeilen knnen innerhalb eines Befehls mit ... umgebrochen werden (siehe o Beispiel in Kap. 3.2.2). Ebenso verbessert der Matlab-Editor mit den Symbolen die Ubersichtlichkeit durch Code Folding f r bestimmte Bereiche (z.B. for-Schleifen). u Hilfreich f r lange Skripts ist auch der so genannte Cell Mode. Er wird uber das u Men Cell/Enable Cell Mode aktiviert und ist an der zustzlichen Buttonleiste eru a kennbar (siehe Abb. 2.4). Das Skript wird dabei durch Cell Divider %% in Abschnitte unterteilt; der Kommentar nach %% wird bei der automatischen Dokumentation als Uberschrift verwendet. Der Cell Mode bietet unter anderem folgende Funktionen: Schnelle Navigation: Mit der Tastenkombination Strg + bzw. Strg + kann man direkt zum nchsten bzw. vorigen Abschnitt springen. Alternativ zeigt der Buta eine Auswahlliste aller Abschnitte und eine alphabetische Auswahlliste ton aller Funktionen in einem M-File. lsst sich ein Skript abschnittsweise a Schnelle Evaluierung: Uber die Buttons ausf hren. Mit u wird eine markierte Zahl entsprechend der eingegebenen Dierenz (bzw. Faktor) gendert und anschlieend der Abschnitt ausa gef hrt. Dabei wird das Skript nicht gespeichert! u oder uber das Men File/Publish wird der u Schnelle Dokumentation: Mittels Code eines Skripts abschnittsweise samt Uberschriften und Ergebnissen (Text und
11)

Uber das Kontextmen kann eine zustzliche Anhalte-Bedingung angegeben werden. u a

2.5 Matlab-Funktionen

23

Grak) als HTML-Dokument ausgegeben. Andere Formate und weitere Einstellungen sind uber das Men File/Publish Conguration/Edit whlbar. u a Der Function Browser bietet uber den Button eine hierarchische Online-Hilfe zu allen Matlab-Funktionen. Mit schlielich knnen die Stellen der letzten Andeo rungen (auch uber mehrere Dateien) direkt angesprungen werden. Ein einfaches Werkzeug zum Dateien-Vergleich wird aus dem Editor-Men Tools/ u Compare Against aufgerufen oder auch uber das Men im Command Window u Desktop/File and Directory Comparisons. Es vergleicht zwei Textdateien (M-Files, aber auch andere) zeilenweise und markiert Abweichungen farbig. Skripts ... % %{ kommentar %} %% Fortsetzungszeichen zum Umbruch uberlanger Zeilen Beginn einer Kommentar-Zeile Mehrzeiliger Kommentar Beginn eines Kommentars als Cell-Divider

2.5

Matlab-Funktionen

Eine Sonderform der M-Files stellen so genannte Matlab-Funktionen dar. Das sind in einer Datei abgespeicherte Matlab-Skripts, die ihren eigenen, nach auen nicht sichtbaren Workspace (d.h. Variablen-Bereich) haben. Deniert wird eine Funktion durch das Schl sselwort function in der ersten Befehlszeile der Datei: u function [out1, out2, ...] = funktionsname (in1, in2, ...) befehle In runden Klammern () nach dem Funktionsnamen12) stehen die Ubergabe-Parameter in1, in2, ..., die beim Aufruf der Funktion ubergeben werden knnen. In eckigen Klamo mern [] stehen die R ckgabewerte out1, out2, ..., die die Funktion an die aufrufende u Funktion bzw. an den Workspace zur ckgibt. Zahlreiche Matlab-Befehle sind als Funku tionen programmiert, z.B. mean(x) Anzeigen des Quellcodes mit edit mean. Funktionen knnen von anderen Funktionen und Skripts aufgerufen werden, Skripts o ebenso durch andere Skripts. Lokale Funktionen knnen in dem M-File der aufrufeno den Funktion unten angef gt werden; die lokalen Funktionen sind dann nur f r die u u Funktionen in dieser einen Datei sichtbar. Anders als bei Variablen wird Gro- und Kleinschreibung bei Funktions- und Skriptnamen nicht unterschieden! Als Beispiel sei die Funktion mittelwerte in der Datei mittelwerte.m gespeichert. Sie berechnet den arithmetischen und geometrischen Mittelwert eines ubergebenen Vektors:
function [arithm, geom] = mittelwerte (x) arithm = mean(x); geom = prod(x).^(1/length(x));
12)

% Datei mittelwerte.m % Arithmetisches Mittel % Geometrisches Mittel

Der mglichst der Dateiname sein sollte, aber nicht muss! o

24

2 MATLAB Grundlagen

Mit dem Aufruf mittelwerte(test) wird nur das erste Ergebnis der R ckgabeliste u [arithm, geom] zur ckgegeben. Werden mehrere R ckgabewerte bentigt, so muss u u o das Ergebnis in ein Array der Form [A, G] gespeichert werden:
>> test = [2 4 3]; >> [A, G] = mittelwerte (test) A = 3 G = 2.8845

2.5.1

Funktionen mit variabler Parameterzahl

Eine Strke von Matlab-Funktionen ist, mit einer unterschiedlichen Anzahl von a Ubergabe-Parametern zurechtzukommen. Hierzu existieren innerhalb einer Funktion die Variablen nargin und nargout, die die Anzahl der ubergebenen Parameter bzw. zur ckzuschreibenden Werte enthalten. Zustzlich stehen noch die Befehle inputname u a zum Ermitteln der Variablennamen der Ubergabe-Parameter und nargchk zum Uberpr fen der korrekten Anzahl der ubergebenen Parameter zur Verf gung. u u Im Folgenden soll die Funktion mittelwerte2 entweder nur den arithmetischen, nur den geometrischen oder beide Mittelwerte berechnen, wozu ein zweiter Ubergabe-Parameter schalter deniert wird. Je nach Anzahl der ubergebenen Parameter wird nun unterschiedlich verfahren: Wird nur eine Variable x ubergeben, so werden beide Mittelwerte zur ckgegeben. Wird auch u der zweite Parameter schalter ubergeben, so wird out1 das geometrische Mittel zu gewiesen, wenn schalter == g ist, ansonsten das arithmetische Mittel. out2 wird als leer deniert. Wird eine andere Zahl an Parametern ubergeben (Test mit nargchk), wird mittels error eine Fehlermeldung ausgegeben und die Funktion abgebrochen.
function [out1, out2] = mittelwerte2 (x, schalter) error (nargchk (1, 2, nargin)) if nargin == 1 out1 = mean(x); out2 = prod(x).^(1/length(x)); elseif nargin == 2 if schalter == g, out1 = prod(x).^(1/length(x)); else out1 = mean(x); end out2 = []; end % Datei mittelwerte2.m % Prfe Parameterzahl u % Arithmetisches Mittel % Geometrisches Mittel % Arithmetisches Mittel % Geometrisches Mittel % Leere Ausgabe fr out2 u

Damit ergibt sich folgende Ausgabe:


>> mittelwerte2 (test, g) ans = 2.8845

2.5 Matlab-Funktionen

25

Funktionen function [out] = name (in) Matlab-Funktion name mit Liste der Eingabeparameter in und Ausgabewerte out denieren nargin, nargout nargchk (min, max, n) isempty (name) error (info) Anzahl der Ein- bzw. Ausgabeparameter Anzahl n der Ubergabeparameter uberpr fen, u ob gilt: min n max, sonst Fehlertext G ltigkeit der Variablen name pr fen u u Abbruch der Funktion und Anzeige von info

2.5.2

Lokale, globale und statische Variablen

Die Variablen innerhalb jeder Funktion sind lokal und werden beim Verlassen der Funktion wieder gelscht. Soll eine Variable dagegen bis zum nchsten Aufruf derselben Funko a tion gespeichert bleiben, muss sie zu Beginn der Funktion mit persistent variable ... als statisch deniert werden. Statische Variablen werden durch clear functions oder bei Anderung des M-Files der Funktion gelscht. o Globale Variablen knnen mit global variable ... deniert werden. Um auf diese Variao blen zugreifen zu knnen, muss diese Denition zu Beginn jeder betroenen Matlabo Funktion sowie bei Bedarf im Workspace des Command Windows erfolgen. Angezeigt werden die globalen Variablen mit whos global, gelscht werden sie mit clear global. o So kann in der Funktion mittelwerte2 die Ubergabe des Parameters schalter vermieden werden, wenn dieser in der Funktion mittelwerte3 als global deniert wird:
function [out1, out2] = mittelwerte3 (x) global schalter out1 = mean(x); out2 = prod(x).^(1/length(x)); if ~isempty (schalter) if schalter == g, out1 = out2; end out2 = []; end % Datei mittelwerte3.m % Definiert globale Variable % Arithmetisches Mittel % Geometrisches Mittel % Gibt geometrisches Mittel aus

Hierdurch entfllt die Abfrage von nargin; es muss nur z.B. mit isempty uberprft a u werden, ob die globale Variable schalter nicht leer ist. Dann wird f r schalter == u g die R ckgabevariable out1 auf das geometrische Mittel (out2) und anschlieend u out2 auf [] gesetzt. Ebenso muss im Command Window die Variable schalter vor der ersten Zuweisung! als global deniert werden. Wird die Variable dann dort gleich g gesetzt, kann die Funktion mittelwerte3.m auf diesen Wert zugreifen.

26
>> global schalter >> schalter = g; >> test = [2 4 3]; >> [M1, M2] = mittelwerte3 (test) M1 = 2.8845 M2 = []

2 MATLAB Grundlagen

Die Anzeige aller globalen Variablen ergibt dann:


>> whos global Name schalter Size 1x1 Bytes 2 Class char Attributes global

Der Befehl assignin erlaubt einer Funktion den Schreibzugri auf andere (d.h. von ihr nicht sichtbare) Workspaces. Wird die Zeile assignin (base, name, wert) innerhalb einer Funktion aufgerufen, weist sie der Variablen name im Workspace des Command Windows den Wert wert zu. Falls die Variable name nicht existiert, wird sie dabei erzeugt. Ein Beispiel zur Verwendung von assignin ndet sich auf Seite 246. Achtung: Globale Variablen und der Befehl assignin sind innerhalb von Funktionen mit Vorsicht zu genieen, da nat rlich auch andere Funktionen, die Zugri u auf die so verwendeten Variablen haben, deren Wert verndern knnen! a o Globale und Statische Variablen in Funktionen persistent var1 ... global var1 ... clear global var1 ... assignin (base, var, x) Statische (lokale) Variablen denieren Globale Variablen denieren Globale Variablen lschen o Zuweisen des Wertes x an die Variable var im Workspace des Command Window

2.5.3

Hilfetext in Funktionen

Zur Erklrung einer Funktion kann im Kopf des zugehrigen M-Files ein Hilfetext eina o gef gt werden, der beim Aufruf von help funktion bzw. helpwin funktion ausgegeben u wird. Der Text muss mit dem Kommentarzeichen % beginnen; die Ausgabe endet mit der ersten Leerzeile. Alle weiteren auskommentierten Zeilen werden unterdr ckt. F r u u die Funktion mittelwerte lauten die ersten Zeilen z.B.
%MITTELWERTE (X) Berechnungen verschiedener Mittelwerte % [A,G] = MITTELWERTE (X) berechnet das arithmetische % Mittel A und das geometrische Mittel G des Vektors X. % Erstellt: 21.01.02

2.5 Matlab-Funktionen

27

Wird nun am Matlab-Prompt der Befehl help mittelwerte eingegeben, so sieht die Ausgabe wie folgt aus:
>> help mittelwerte MITTELWERTE (X) Berechnungen verschiedener Mittelwerte [A,G] = MITTELWERTE (X) berechnet das arithmetische Mittel A und das geometrische Mittel G des Vektors X.

2.5.4

Function Handles

Ublicherweise wird eine Funktion wie oben gezeigt direkt aufgerufen. Ein zweite, sehr mchtige Mglichkeit ist das indirekte Ansprechen der Funktion uber das ihr zugea o ordnete Function Handle.13) Ein Function Handle stellt den Zeiger auf eine Funktion dar. Dieser dient vor allem der Ubergabe einer Funktion als Parameter an eine andere Funktion und wird z.B. beim Aufruf von Gleichungslsern und Optimierungsbefehlen o verwendet (siehe Kap. 4 und 7). Ein Function Handle wird durch den Operator @ vor dem Funktionsnamen funktion erzeugt: f handle = @funktion Die dem Function Handle zugewiesene Funktion kann nun mit dem Befehl feval ausgef hrt werden. Alternativ kann das Function Handle auch wie der urspr ngliche Funku u tionsname verwendet werden: [out1, out2, ...] = feval (f handle, in1, in2, ...) [out1, out2, ...] = f handle (in1, in2, ...) Hierbei sind in1, in2, ... die Eingabeparameter der Funktion und out1, out2, ... die R ckgabewerte. F r das obige Beispiel mittelwerte wird nun das Function Handle u u fh erzeugt und die Funktion damit aufgerufen:
>> fh = @mittelwerte; >> A = fh (test) A = 3 % function_handle auf @det erzeugen % Ausfhren des function_handles fh u

2.5.5

Funktionen als Inline Object

Eine sehr bequeme Mglichkeit zum Arbeiten mit immer wieder verwendeten kleinen o Funktionen sind inline objects:14) Hiermit knnen im Matlab-Workspace Funktionen o deniert werden, ohne sie in einem M-File abspeichern zu m ssen. u Bereitgestellt und ausgef hrt wird eine solche Inline-Object-Funktion wie folgt; sowohl u die Befehlszeile (Formel) als auch die Parameter werden als Strings angegeben:
13) 14)

Das Function Handle stellt einen eigenen Datentyp dar, der wie eine Struktur aufgebaut ist. Fr eine detaillierte Erklrung zu Inline Objects siehe auch Kap. 7.1. u a

28
>> f1 = inline (x.^2+x-1, x) f1 = Inline function: f1(x) = x.^2+x-1 >> test = [2 4 3]; >> f1 (test) ans = 5 19 11

2 MATLAB Grundlagen

2.5.6

P-Code und clear functions

Wird ein Matlab-Skript oder eine Matlab-Funktion zum ersten Mal aufgerufen, er zeugt Matlab einen Pseudo-Code, der dann ausgef hrt wird. Bleibt daher die Andeu rung eines M-Files ohne Wirkung, wurde dieser Ubersetzungsvorgang nicht neu gestartet. Dies sollte automatisch geschehen, kann aber auch durch den Befehl clear functions erzwungen werden (die M-Files werden dabei nat rlich nicht gelscht!). u o Der Pseudo-Code kann auch mit pcode datei erzeugt und als P-File abgespeichert werden, um z.B. Algorithmen zu verschl sseln. Existieren sowohl M-File als auch das u gleichnamige P-File, f hrt Matlab immer das P-File aus. Nach einer Anderung des u M-Files muss daher der Befehl pcode wiederholt oder das P-File gelscht werden! o Funktionen (erweitert) f handle = @funktion functions (f handle) feval (f handle) f = inline (funktion) pcode datei clear functions Function Handle auf funktion erzeugen Function-Handle-Informationen abrufen Function Handle (d.h. Funktion) ausf hren u Funktion als Inline Object denieren P-Code zu M-File datei.m speichern Alle P-Codes im Workspace lschen o

2.6

Code-Optimierung in Matlab

Werden in Matlab umfangreiche Daten bearbeitet, gilt es Hardware-Ressourcen mgo lichst ezient zu nutzen. Dieser Abschnitt beschreibt zunchst den Matlab-Proler als a wichtiges Werkzeug f r die Suche nach Optimierungspotential. Anschlieend werden eiu nige Tipps zur Reduktion der Rechenzeit und des Speicherbedarfs sowie zur Vermeidung typischer Fehler gegeben.

2.6.1

Der Matlab-Proler

Der Matlab-Proler wird uber das Men Desktop/Proler des Matlab-Desktops oder u den Button aufgerufen. Im Feld Run this code wird die zu testende Funktion oder der Name des M-Files (ohne Endung) eingetragen und der Proler mit dem Button Start Proling gestartet.

2.6 Code-Optimierung in Matlab

29

Als Ergebnis zeigt der Proler zunchst eine Ubersicht an (Prole Summary, siehe a Abb. 2.5). Durch Anklicken der gew nschten Funktion oder Datei in der linken Spalte u gelangt man zur Detailansicht (siehe Abb. 2.6). Diese zeigt zuerst eine tabellarische Ubersicht, die unter anderem folgende Rubriken enthlt: a Laufzeit15) (time) Anzahl der Aufrufe (calls bzw. numcalls) Nicht erreichter Code (line bzw. coverage / noncoverage) Code-Prfung (mlint) u Weiter unten folgt schlielich ein Listing mit dar ber liegendem Auswahlfeld. Durch u Anklicken einer der genannten Rubriken kann dieses Kriterium durch farbige Markierung der relevanten Zeilen hervorgehoben werden.

Abb. 2.5: Proler mit Summary

Abb. 2.6: Listing mit Laufzeit-Markierung

Wird im genannten Auswahlfeld die Rubrik mlint gewhlt, werden Zeilen mit feha leranflligen oder zeitintensiven Konstrukten markiert und mit erklrenden Kommena a taren versehen.

2.6.2

Optimierung von Rechenzeit und Speicherbedarf

Matlab kompiliert eingegebene Befehle, Skripts und Funktionen unbemerkt vom Anwender bereits vor der Ausf hrung. Dies geschieht durch den so genannten JITu a Accelerator.16) Dennoch lsst sich die Ezienz von Matlab-Skripts und -Funktionen durch geeignete Programmierung noch weiter verbessern. In der Regel wird die meiste Laufzeit an wenigen Stellen innerhalb oft durchlaufener Schleifen des Matlab-Codes verschenkt; diese ndet man am besten mittels des Matlab-Prolers. Der folgende Abschnitt zeigt, wie solche Stellen optimiert werden knnen. o Groe Arrays sollten vor ihrer Verwendung mit der maximal bentigten Gre o o vorbelegt werden, damit Matlab den bentigten Speicher alloziert. Daf r eigo u nen sich Befehle wie zeros (zeilen, spalten [, typ]). Optional kann dabei auch ein kompakter Datentyp aus Kap. 2.2.1 angegeben werden.
15) 16)

Alternative Laufzeitmessung mit den Funktionen tic und toc, siehe Ubungsaufgabe in Kap. 2.7.4. Just In Time Accelerator

30

2 MATLAB Grundlagen Shortcut-Operatoren && und || (anstelle von & und |) beschleunigen skalare logische Verkn pfungen z.B. bei if- oder while-Abfragen. u Alle Hardware-Zugrie bentigen viel Zeit und sollten daher innerhalb hug o a durchlaufener Schleifen unterbleiben. Dies gilt f r Ausgaben im Command Winu dow, Lesen und Schreiben von Dateien sowie f r grasche Ausgaben jeder Art. u Das Lschen nicht mehr bentigter Variablen mit clear variable und das o o Schlieen nicht bentigter Figures mit close nummer gibt den dadurch belegten o Speicher (zumindest zum Teil) wieder frei.

Achtung:

Bei der Optimierung sind immer auch die Lesbarkeit und Wartung eines M-Files zu ber cksichtigen! Daher gelten die folgenden Anregungen ausu schlielich f r Stellen mit akuten Laufzeitproblemen: u

Strukturen und Cell-Arrays sowie Arrays hoher Dimension besitzen einen hohen Verwaltungsaufwand und sollten daher in inneren Schleifen vermieden werden. Jeder Aufruf von Matlab-Skripts und -Funktionen, die als M-File vorliegen, bentigt zustzlich Zeit. Diese lsst sich verringern, indem der Inhalt des aufgeo a a rufenen M-Files (entsprechend angepasst) in die Schleife kopiert wird. Viele Matlab-Funktionen (M-Files) bieten Aufruf-Varianten und detaillierte Fehlerbehandlung; dieser Overhead bentigt jedoch Rechenzeit. Bei genau deniero ten Rahmenbedingungen kann es sich lohnen, stattdessen eine daf r optimierte u Funktion zu erstellen und diese in das aufrufende M-File zu integrieren. Die Verwendung globaler Variablen, um Daten zwischen Funktionen auszutauschen, vermeidet das mehrfache Anlegen derselben Daten im Arbeitsspeicher. Vorsicht: Es besteht die Gefahr des unbeabsichtigten Uberschreibens! Schlielich kann Matlab mit matlab.exe -nojvm auch ohne die Java Virtual Machine neu gestartet werden. Dies spart deutlich Arbeitsspeicher. Daf r steht allein das u Command Window ohne den gewohnten Bedienkomfort und (in Zukunft) auch ohne Figures und Grasche Benutzeroberche zur Verf gung (siehe Kap. 3). a u

2.6.3

Tipps zur Fehlersuche

Auch erfahrene Matlab-Anwender sind vor Fl chtigkeitsfehlern nicht restlos gewappu net. Manche Fehler sind besonders t ckisch, da sie eine Matlab-Fehlermeldung an u ganz anderer Stelle bewirken oder lediglich durch uberraschende Ergebnisse aual len. Einige solche Fehler werden im Folgenden beschrieben und mit Tipps zur Abhilfe ergnzt: a Alte Daten eines vorherigen Projekts uberleben im Workspace. Werden gleiche Variablennamen weiter verwendet, sind diese Variablen dann noch falsch belegt. Neben unplausiblen Ergebnissen ist eine typische Fehlermeldung Index exceeds matrix dimensions. Abhilfe mit clear all.

2.7 Ubungsaufgaben

31

Ein mehrdimensionales Array wird mit zuwenig Indizes adressiert. Matlab fasst das Array dann flschlicherweise als Vektor bzw. Array niedrigerer Dimension a auf (siehe auch Funote auf Seite 15). Abhilfe durch Debugger und Anzeigen der betreenden Variable im Variable Editor. Globale oder Workspace-Variablen werden in einem anderen Skript (oder Funktion) unbeabsichtigt gendert. Abhilfe durch Funktionen mit lokalen Variablen a und durch (neue) eindeutige Namen f r globale und Workspace-Variablen. u Tippfehler bei Variablennamen, z.B. varible(k) = 2*variable(k-1), bleiben unentdeckt, wenn die Variable bei der Ausf hrung des fehlerhaften Codes u bereits vorhanden ist. In diesem Fall wird eine neue Variable mit falschem Naa men varible erzeugt; die eigentliche Variable dagegen bleibt unverndert. Abhilfe durch den Matlab-Proler: Unter der Rubrik mlint wird auf nicht verwendete Variablen und damit auf solche Tippfehler hingewiesen. Leerzeichen vor Klammern bei der Adressierung von Cell-Arrays und beim Zusammensetzen von Strings knnen zu Fehlermeldungen f hren. Fehlerfrei funko u tioniert z.B. zelle{2} statt zelle {2} (siehe Beispiel auf Seite 15) sowie [num2str(2.5), m] statt [num2str (2.5), m] (siehe Beispiel Kap. 3.2.3). Variablen und Funktionen besitzen identische Namen oder es existieren mehrere M-Files desselben Namens im Matlab-Pfad. Die Abfrage which -all name listet alle Vorkommen eines Namens im Workspace und Matlab-Pfad auf.

2.7
2.7.1

Ubungsaufgaben
Rechengenauigkeit

Alle Rechenoperationen in Matlab werden mit dem Variablentyp double (64 Bit) durchgef hrt, soweit kein anderer Typ explizit angegeben ist. An einem Beispiel kann u die Grenze der Rechengenauigkeit untersucht werden. Quadrieren Sie die Zahl 1.000 000 000 1 insgesamt 32-mal! Berechnen Sie das Ergebnis zunchst in einer Schleife! Bestimmen Sie zum Vergleich das Ergebnis mit einer einzigen a Potenzfunktion! Was fllt Ihnen auf? a Hinweis: Whlen Sie ein geeignetes Format der Zahlendarstellung, z.B. mit dem Befehl a format long g.

2.7.2

Fibonacci-Folge

Nach dem italienischen Mathematiker Leonardo Pisano Fibonacci (ca. 1175 bis 1250 n. Chr.) ist folgende Reihe benannt: n(k) = n(k 1) + n(k 2) mit n(1) = n(2) = 1

32

2 MATLAB Grundlagen

Berechnen Sie die nchsten 10 Elemente mit einer Schleife! Beginnen Sie mit dem Veka tor [1 1], an den Sie bei jedem Durchlauf ein Element anf gen! Das wievielte Element u uberschreitet als Erstes den Wert 1020 ? Verwenden Sie dazu eine Schleife mit entspre chender Abbruchbedingung! Die Elemente der Fibonacci-Reihe knnen nach Gleichung (2.1) auch explizit bestimmt o werden: 1+ 5 F k (1 F )k (2.1) mit F = n(k) = 2 5 Berechnen Sie damit ohne Schleife das 12. bis 20. Element mit elementweisen Vektoroperationen!

2.7.3

Funktion gerade

Die Funktion gerade soll aus zwei Punkte-Paaren (x1 , y1 ) und (x2 , y2 ) in kartesischen u Koordinaten die Parameter Steigung m und y0 (y-Wert f r x = 0) der Geradengleichung y = m x + y0 bestimmen. Es m ssen also 4 Werte x1, y1, x2, y2 an die Funktion ubergeben weru den, die wiederum 2 Werte m und y0 zur ckgibt. F r den Fall einer senkrechten u u Steigung (x1 = x2 ) soll eine Warnung Steigung unendlich! mittels des Befehls disp17) ausgegeben werden. Werden nur 2 Werte ubergeben, so sollen neben den Parametern m und y0 (in diesem Fall = 0) noch der Abstand r des Punktes vom Ursprung (Radius) und der mathematisch positive Winkel phi zur x-Achse in Grad zur ckgegeben werden. u Wird eine andere Anzahl von Werten ubergeben, so soll eine Fehlermeldung mit Falsche Anzahl von Parametern! und der Hilfetext der Funktion (Aufruf mit help gerade) ausgegeben werden.

2.7.4

Berechnungszeiten ermitteln

In Matlab existieren verschiedene Befehle zur Abfrage der Systemzeit und zum Messen der Berechnungsdauer, darunter tic und toc: tic startet eine Stoppuhr, toc hlt diese a wieder an und gibt die verstrichene Zeit aus. Somit kann die Laufzeit von Programmen ermittelt werden, indem sie innerhalb eines solchen tic-toc-Paares aufgerufen werden. Zum Vergleich der Laufzeit verschiedener Programmstrukturen werden die Funktionen mittelwerte aus Kap. 2.5 und mittelwerte2 aus Kap. 2.5.1 verwendet. Schreiben Sie ein Skript mittelwerte zeit.m, in dem beide Funktionen jeweils 10 000mal mit einem Testvektor aufgerufen werden. Stoppen Sie die Zeit f r 10 000 Durchlufe u a f r jede der beiden Funktionen. Wiederholen Sie diesen Test 10-mal (mittels einer Schleiu fe) und mitteln Sie anschlieend die Zeiten. Welche Funktion ist schneller und warum?
17)

Zur Verwendung des Befehls disp siehe Kapitel 3.2.3.

Eingabe und Ausgabe in Matlab

Die in diesem Kapitel vorgestellten Befehle dienen der Steuerung der Bildschirmausgabe, der komfortablen Ein- und Ausgabe von Daten im Dialog mit dem Benutzer sowie dem Import und Export von Dateien. Weitere Schwerpunkte sind die grasche Darstellung von Ergebnissen in Matlab und der Import und Export von Graken.

3.1

Steuerung der Bildschirmausgabe

Die Befehle zur Steuerung der Bildschirmausgabe sind syntaktisch an die entsprechenden UNIX-Befehle angelehnt. Sie sind vor allem zum Debuggen von Programmen oder zum Vorf hren bestimmter Zusammenhnge hilfreich. u a Soll die Bildschirmausgabe seitenweise erfolgen, wird mit more on die seitenweise Bildschirmausgabe ein-, mit more off ausgeschaltet. more (n) zeigt jeweils n Zeilen je Seite an. Die Steuerung erfolgt wie in UNIX: Ist die Ausgabe lnger als eine Seite, so a schaltet die Return-Taste um eine Zeile weiter, die Leertaste zeigt die nchste Seite an a und die Taste Q bricht die Ausgabe ab. Mit dem Befehl echo on knnen die beim Aufrufen eines Matlab-Skripts oder einer o Funktion ausgef hrten Befehle angezeigt werden; echo off schaltet dies wieder aus. u Beim Ausf hren einer Funktion funktion werden die darin aufgerufenen Befehle mit u echo funktion on ausgegeben (Ausschalten mit echo funktion off), wie das folgende Beispiel zeigt:
>> echo mittelwerte on >> [A, G] = mittelwerte (1:2:7) arithm = mean(x); geom = prod(x).^(1/length(x)); A = 4 G = 3.2011 % Arithmetisches Mittel % Geometrisches Mittel

Die Bildschirmausgabe anhalten kann man mit dem Befehl pause, der die Ausgabe beim nchsten Tastendruck fortsetzt, whrend pause (n) die Ausgabe f r n Sekunden a a u anhlt. Mit pause off schaltet man alle folgenden pause-Befehle aus; es wird also nicht a mehr angehalten. Mit pause on werden die pause-Befehle wieder aktiviert. So gibt die folgende Schleife jeweils den Zhler aus und wartet dann die dem Zhler entsprechende a a

34

3 Eingabe und Ausgabe in MATLAB

Zeit in Sekunden.1) Am Ende muss mit einem Tastendruck quittiert werden.


>> for i=1:2:6, disp(i), pause(i), end, disp(Ende), pause 1 3 5 Ende >>

Auch sehr n tzlich ist der Befehl clc (Clear Command Window ), mit dem alle Einu und Ausgaben am Command Window gelscht werden und der Cursor in die erste o Zeile gesetzt wird. Steuerung der Bildschirmausgabe more echo pause pause (n) clc Seitenweise Ausgabe am Bildschirm Zeigt Befehle bei Ausf hrung von Skripts und Funktionen an u Hlt die Bildschirmausgabe an (bis Tastendruck) a Hlt die Bildschirmausgabe f r n Sekunden an a u Lscht alle Ein- und Ausgaben im Command Window o

3.2

Benutzerdialoge

Benutzerdialoge zur Eingabe und Ausgabe von Text und Daten knnen mit den im o Folgenden beschriebenen Befehlen erstellt werden. Zu diesem Zweck wird zunchst die a Behandlung von Text in Matlab betrachtet.

3.2.1

Text in Matlab (Strings)

Texte (Strings) werden in einfache Anf hrungszeichen eingeschlossen und knnen Vau o riablen zugewiesen werden:2) string = text. String-Variablen werden als Zeilen-Vektor gespeichert und knnen mit [text1, text2] zusammengesetzt werden. Geht ein o String in einem Skript uber mehrere Zeilen, muss der String am Ende jeder Zeile ab geschlossen werden, da andernfalls der Umbruch mit ... auch als Teil des Strings interpretiert werden w rde. u
>> text = [Das ist, , ein Text!] text = Das ist ein Text! >> whos text Name Size text
1) 2)

Bytes 34

Class char

Attributes

1x17

Der Befehl disp zur Ausgabe von Zahlen und Strings wird in Kap. 3.2.3 behandelt. Matlab whlt automatisch den Datentyp char, ohne dass dieser explizit angegeben werden muss. a

3.2 Benutzerdialoge

35

3.2.2

Eingabedialog

Die Abfrage von Daten erfolgt mit dem Befehl variable = input (string). Der String wird ausgegeben; die Eingabe wird der Variablen zugewiesen. Wird keine Zahl, sondern ein String abgefragt, lautet der Befehl string = input (string, s). Als Sonderzeichen stehen innerhalb des Strings der Zeilenumbruch \n, das einfache Anf hrungszeichen u sowie der Backslash \\ zur Verf gung. Hier das Beispiel eines Eingabedialogs: u
preis = input ([Wieviel kostet heuer \n, ... die Wiesn-Ma ? ]) waehrung = input (Whrung ? a , s);

Nach Aufruf des Skripts kann man folgenden Dialog f hren: u


Wieviel kostet heuer die Wiesn-Ma ? Whrung ? a 7.90 EUR

3.2.3

Formatierte Ausgabe

F r die Ausgabe lassen sich Daten und Strings ebenfalls formatieren. Der Befehl u disp (string) gibt einen String am Bildschirm aus. Interessant wird dieser Befehl, wenn der String zur Laufzeit aus variablen Texten zusammengesetzt wird; Zahlen m ssen u dann mit num2str (variable [, format]) ebenfalls in einen String umgewandelt werden. F r vektorielle Daten kann die Ausgabe mit string = sprintf (string, variable) foru matiert und mit disp ausgegeben werden. Die Syntax zur Formatierung entspricht bei num2str und sprintf im Wesentlichen der der Sprache C (genaue Infos uber doc sprintf). Alle Variablen m ssen in einer einzigen Matrix angegeben werden, wobei jede u Spalte einen Datensatz f r die Ausgabe darstellt. Fortsetzung des obigen Beispiels: u
disp ([Aber , num2str(preis, %0.2f), , waehrung, ... pro Ma wird ein teurer Rausch!]) disp ( ) % ausgabe = sprintf (Zwei Ma kosten dann %2.2f %s., ... % preis*2, waehrung); disp (ausgabe) % mehr = sprintf (%4d Ma kosten dann %2.2f.\n, ... % [3:5; (3:5)*preis]); % disp (mehr) %

Leerzeile ausgeben Ausgabe formatieren ausgeben Ausgabe formatieren Vektoren fr Ausgabe u ausgeben

Als Ausgabe erhlt man: a


Aber 7.90 EUR pro Ma wird ein teurer Rausch! Zwei 3 4 5 Ma Ma Ma Ma kosten kosten kosten kosten dann dann dann dann 15.80 EUR. 23.70. 31.60. 39.50.

Neben den oben beschriebenen Mglichkeiten erlaubt Matlab auch die Erstellung grao scher Benutzerschnittstellen, die in Kap. 3.6 beschrieben wird.

36

3 Eingabe und Ausgabe in MATLAB

Benutzerdialoge variable string string string = = = = input (string) input (string, s) num2str (variable [, format]) sprintf (string, variable) disp (string) Abfrage einer Variablen Abfrage eines Strings Umwandlung Zahl in String Formatierten String erzeugen Textausgabe auf Bildschirm Formatierung %d %x %5.2f %.2e %s Ganze Zahl (z.B. 321) Ganze Zahl hexadezimal Fliekomma-Zahl (z.B. 54.21) Exponentenschreibweise (z.B. 5.42e+001) String

Sonderzeichen \n \t \\ %% Zeilenumbruch Tabulator Backslash \ Prozent % Anf hrungszeichen u

3.3
3.3.1

Import und Export von Daten


Standardformate

F r den Import und Export von Dateien unterst tzt Matlab standardmig u u a ASCII-Text sowie ein spezielles Matlab-Binrformat. Das Laden und Speia chern geschieht mit den Befehlen load dateiname [variable1 variable2 ...] und save dateiname [variable1 variable2 ...]. Die alternativen Klammerversionen load (dateiname [, variable1,variable2, ...]) und save (dateiname [, variable1, variable2, ...]) erlauben, den Dateinamen auch als String-Variable zu ubergeben. Wird nach load ein Dateiname ohne Endung angegeben, nimmt Matlab an, dass die Daten im Matlab-Binrformat (so genannte MAT-Files, mit der Endung MAT ) vora liegen. Bei diesem sind auer den Werten der Variablen auch deren Namen gespeichert und die Daten, falls mglich, zustzlich komprimiert. o a Zum Einlesen von Daten im ASCII-Format wird der Dateiname mit Endung angegeben. Die Daten einer Zeile m ssen dann durch Leerzeichen oder Tabulatoren getrennt u sein (keine Kommata!). Jede Zeile muss gleich viele Elemente besitzen (Kommentarzeilen sind aber erlaubt). Die eingelesenen Werte werden standardmig einer Variablen a mit dem Namen der Datei zugewiesen. Mit variable = load (dateiname) werden die eingelesenen Werte stattdessen der angegebenen Variablen zugewiesen.
>> >> >> >> >> test_vektor = [0:0.1:10]; % Spaltenvektor test_matrix = [test_vektor cos(test_vektor)]; % Matrix save test % Speichern in Datei test.mat clear % Workspace lschen o load test % Laden aus Datei test.mat % Anzeige des Workspace

>> who Your variables are: test_matrix test_vektor

3.3 Import und Export von Daten

37

Beim Speichern mit save erzeugt Matlab standardmig ein MAT-File. Die Option a -append hngt zu speichernde Variablen an ein bestehendes MAT-File an. Werden a beim Laden und Speichern keine Variablen explizit angegeben, ldt Matlab jeweils a alle Variablen des MAT-Files bzw. speichert alle Variablen aus dem Workspace. Mit der alternativen Option -ascii kann ein ASCII-Format ausgegeben werden. Die Namen der Variablen werden dann nicht gespeichert. Speichern im ASCII-Format schreibt alle Variablen untereinander in die Ausgabedatei. Bei unterschiedlicher Spaltenzahl ist ein Einlesen in Matlab dann nicht mehr ohne weiteres mglich. Selbst bei o gleicher Spaltenzahl knnen die urspr nglichen Variablen aufgrund der nicht gespeio u cherten Namen nicht mehr separiert werden.
>> >> >> >> save test.txt -ascii test_matrix clear load test.txt who % % % % Speichern in Datei test.txt Workspace lschen o Laden aus Datei test.txt Anzeige des Workspace

Your variables are: test

Die Befehle xlswrite (datei, variable) und xlsread (datei) schlielich schreiben in eine Excel-Datei bzw. lesen daraus. F r Details sei auf die Matlab-Hilfe verwiesen. u Datenimport und -export Standardformate load datei [variable ...] save datei [variable ...] [variable =] load datei.endung save datei.endung -ascii [variable ...] variable = xlsread (datei.xls) xlswrite (datei.xls, variable) Laden aus MAT-File Speichern in MAT-File Laden aus ASCII-File Speichern in ASCII-File Laden aus Excel-File Speichern in Excel-File

3.3.2

Formatierte Textdateien

Ein universeller Befehl zum Einlesen beliebig formatierter Textdateien ist vektor = fscanf (f id, f ormat), der ahnlich wie in der Sprache C arbeitet. Hauptunterschied ist allerdings die vektorisierte Verarbeitung der Daten, d.h. der Formatstring wird so lange wiederholt auf die Daten angewandt, bis das Dateiende erreicht ist oder keine Ubereinstimmung mehr gefunden wird. Dies bringt insbesondere bei groen Textdateien einen deutlichen Zeitgewinn gegen ber zeilenweisem Zugri. u Die Befehle string = fgetl (f id) und string = fgets (f id, anzahl) lesen bei jedem Aufruf jeweils eine ganze Zeile bzw. eine bestimmte (maximale) Anzahl an Zeichen aus. Zum Onen und Schlieen der Datei sind dabei jeweils die zustzlichen Befehle f id = a fopen (datei.endung, zugrif ) und fclose (f id) notwendig, wobei f id das Handle f der geneten Datei ist. Der Parameter zugrif kann aus folgenden Strings bestehen o f

38

3 Eingabe und Ausgabe in MATLAB

(siehe auch doc fopen): w, a f r Schreiben bzw. Anf gen (Datei wird bei Bedarf u u angelegt), sowie r f r Lesen. u F r die formatierte Ausgabe in eine Textdatei kann der Befehl fprintf verwendet u werden. Die Syntax entspricht der von sprintf; es knnen jeweils nur reelle Zahlen o verarbeitet werden. Die Bierpreise von Kap. 3.2.3 werden mit den nachstehenden Befehlen in eine Datei bier.txt geschrieben:3)
>> bier_id = fopen (bier.txt, w); >> fprintf (bier_id, %s\r\n, Bierpreis-, Hochrechnung); >> fprintf (bier_id, %4d Ma kosten dann %2.2f.\r\n, ... [3:5; (3:5)*preis]); >> fclose (bier_id); % Kopfzeilen

Die Ausgabe der unterschiedlich langen Kopfzeilen kann auch elegant mit einem Cell Array erfolgen, indem zunchst jede Zeile k in eine Zelle kopfzeilen {k} gespeichert a und dann mit fprintf (bier id, %s\r\n, kopfzeilen{:}) ausgegeben wird. F r das Einlesen beliebiger Textdaten stellt Matlab die sehr exible Funktion u [var1, var2, ...] = textread (datei, f ormat) zur Verf gung. Die Anzahl der R cku u gabevariablen muss dabei den Elementen des Formatstrings entsprechen; bei leerem Formatstring wird nur eine einzige Variable zur ckgegeben. Optional knnen weitere u o Parameter und zugehrige Werte angegeben werden (siehe doc textread). Das folgeno de Beispiel liest die Datei chaos.txt zeilenweise in ein Cell Array aus Strings ein:
>> zeilen = textread (chaos.txt, %s, ... delimiter, \n, ... whitespace, ) zeilen = Kopfzeile 4,5,6, 1, 2,, 3,*,0, Fusszeile % Datei und Formatstring % Zeilenumbruch als Trennzeichen % kein Zeichen berspringen u

Ein weiteres Beispiel liest dieselbe Datei als numerische Daten ein; dabei werden leere bzw. ung ltige Werte (hier *) durch NaN (Not a Number ) ersetzt. Zu beachten ist, dass u am Zeilenende jeweils ein weiterer leerer Wert gelesen wird, da die Zeilen mit einem Trennzeichen (,) enden.
>> matrix = textread (chaos.txt, delimiter, whitespace, headerlines, emptyvalues, matrix = 4 5 6 NaN 1 2 NaN NaN 3 NaN 0 NaN , ,, * , 1, NaN) ... ... ... ... % % % % % Datei und (leerer) Formatstring Komma als Trennzeichen berspringt * und Leerzeichen u berspringt die erste Zeile u ersetzt leere Felder durch NaN

3) Das Beispiel erzeugt einen Text im DOS-Format: Der Format-String \r\n gibt die beiden Zeichen carriage return (CR) und linefeed (LF) fr den Zeilenumbruch aus. Unter UNIX gengt \n. u u

3.3 Import und Export von Daten

39

Mit Ausnahme ung ltiger Werte liest auch der Befehl dlmread numerische Daten ein. u Als Trennzeichen wird ein Komma vorgegeben; der gew nschte Bereich f r die Ausgabe u u kann in Tabellen-Notation angegeben werden. Leere Werte werden immer mit 0 belegt.
>> matrix = dlmread (chaos.txt, ,, A2..C3) matrix = 4 5 6 1 2 0 % Datei, Trennzeichen, Bereich

F r sehr groe Textdateien bietet der Befehl textscan eine hhere Ezienz und Fleu o xibilitt. Zum interaktiven Einlesen formatierter Textdateien steht auerdem der a Import Wizard zur Verf gung; er wird uber das Men File/Import Data aufgerufen. u u Eine vollstndige Ubersicht der Befehle f r Dateizugrie bietet help iofun. a u Datenimport und -export formatiert f id = fopen (datei.endung, zugrif ) f fclose (f id) fprintf (f id, format, variable [, ...]) fscanf (f id, f ormat) fgetl (f id) fgets (f id, n) Datei nen o Datei schlieen Formatiertes Schreiben Formatiertes Lesen Eine Zeile lesen n Zeichen lesen

vektor = string = string = cellarray = variable = variable =

textscan (f id, format [, anzahl ] [, parameter, wert, ...]) textread (datei, format [, parameter, wert, ...]) dlmread (datei, trennzeichen [, bereich])

3.3.3

Binardateien

Zum Lesen und Schreiben binrer Daten stehen die Befehle vektor = fread (f id, a u f ormat) und fwrite (f id, matrix, f ormat ) zur Verf gung. Typische Formate sind unten aufgef hrt; Standard ist uchar. Siehe auch doc fread. u Datenimport und -export binr a vektor = fread (f id, format) fwrite (f id, matrix, format) uchar, uint16, uint32, uint64 int8, int16, int32, int64 float32, float64 bitN, ubitN, 1 N 64 Lesen Schreiben Formate ohne Vorzeichen Formate mit Vorzeichen Formate Fliekomma N Bits mit/ohne Vorzeichen

40

3 Eingabe und Ausgabe in MATLAB

3.4

Betriebssystemaufruf und Dateiverwaltung

Damit Matlab ein aufgerufenes M-File oder Daten ndet, muss sich die zugehrige o Datei im aktuellen Verzeichnis oder im Matlab-Pfad benden. Der Matlab-Pfad kann im Path Browser eingesehen und gendert werden. Der Aufruf erfolgt uber das a Men File/Set Path oder den Befehl pathtool. Im Path Browser kann man uber den u Button Add Folder dem Matlab-Pfad ein neues Verzeichnis hinzuf gen. u Ein Ausrufezeichen (!) am Beginn einer Zeile veranlasst Matlab, den Rest der Zeile dem Betriebssystem als Kommando zu ubergeben. Werden R ckgabewerte bentigt, u o eignet sich der Befehl [status, ergebnis] = system (kommando). Hilfreich kann hier auch der mchtige (aber meist un bersichtliche!) Befehl eval(string) sein: Dieser Bea u fehl interpretiert einen String als Matlab-Befehl. Das folgende Beispiel erstellt ein Verzeichnis, weist dessen Namen der Struct-Variablen verzeichnis zu und lscht das o Verzeichnis wieder. Eine weitere Ubersicht erhlt man mit help general. a
>> mkdir (testverzeichnis) >> verzeichnis = dir (testverzeic*); >> eval ([!rmdir , verzeichnis.name]) % Verzeichnis anlegen (MATLAB-Befehl) % Dir-Befehl ausfhren (MATLAB-Befehl) u % Verzeichnis lschen (Betriebssystem) o

Die nachfolgend aufgef hrten Matlab-Befehle erlauben, ahnlich wie in gngigen Beu a triebssystemen, aus Matlab heraus Verzeichnisse und Dateien zu verwalten (manuell ist dies nat rlich auch im Current Directory Browser mglich). u o Betriebssystemaufruf und Dateiverwaltung cd verzeichnis pwd dir [auswahl] ls [auswahl] mkdir verzeichnis copyfile quelle ziel delete datei ! kommando system (kommando) eval (string) Verzeichniswechsel Anzeige des aktuellen Verzeichnisses Anzeige Verzeichnis-Inhalt Anzeige Verzeichnis-Inhalt Neues Verzeichnis erstellen Datei kopieren Datei lschen o Betriebssystemaufruf Betriebssystemaufruf mit R ckgabewerten u String als Matlab-Befehl interpretieren

3.5

Grasche Darstellung

Insbesondere bei groen Datenmengen ist eine numerische Ausgabe wenig anschaulich. Daher werden nun Mglichkeiten zur graschen Ausgabe behandelt. Zuerst werden die o Matlab-Figure sowie die f r alle graschen Ausgaben gleichermaen g ltigen Befehle, u u wie Achsen-Skalierung und Beschriftung, angesprochen. In den Kapiteln 3.5.3 und 3.5.4 werden die spezischen Befehle f r zwei- und dreidimensionale Graken beschrieben u und an Beispielen ausf hrlich dargestellt; Kapitel 3.5.6 zeigt Mglichkeiten zum Import, u o Export und Drucken von Graken.

3.5 Grasche Darstellung

41

3.5.1

Die Figure Grundlage einer Matlab-Grak

Den Rahmen f r alle graschen Ausgaben stellt die so genannte Matlab-Figure dar, die u mit figure erzeugt und mit einer Nummer versehen wird. Eine vorhandene Figure kann mit figure (nummer) angesprochen werden, die Nummer (eigentlich das Handle) einer Figure erhlt man mit gcf (Get handle to Current Figure). Alle Grakbefehle wirken a stets auf die zuletzt erzeugte bzw. angesprochene Figure. Abb. 3.1 wurde mit den folgenden Befehlen erzeugt. Falls keine Nummer explizit angegeben wird, vergibt Matlab diese automatisch (hier 1).
>> figure >> plot (diff (primes (500))) % Abstand zwischen Primzahlen < 500

Abb. 3.1: Matlab-Figure

Eine Figure kann mit subplot (zeilen, spalten, zaehler) gleichmig in so genannte a Subplots unterteilt werden. Der jeweils angesprochene Subplot wird durch die Variable zaehler bestimmt; es wird zeilenweise von links oben durchnummeriert. Sind alle Argumente einstellig, knnen sie ohne Komma (und ohne Leerzeichen!) hintereinander o geschrieben werden (siehe Beispiel auf Seite 45). Der Inhalt einer vorhandenen Figure kann mit clf (Clear Figure) gelscht werden. o Die Figure selbst kann mit close nummer geschlossen (d.h. gelscht) werden. close o schliet die aktuelle Figure; close all schliet alle geneten Figures. o Matlab verwaltet alle Graken objektorientiert. Die Objekt-Hierarchie f r Grakobu jekte ist in Abb. 3.2 dargestellt. Die Eigenschaften der aktuellen Figure erhlt man mit a dem Befehl get (F igureHandle) bzw. get (gcf), die Eigenschaften des aktuellen Subplots uber das Handle gca (Get handle to Current Axis) entsprechend mit get (gca). Des Weiteren gibt set (gcf) bzw. set (gca) eine Liste der mglichen Parameter aus. o Das Abfragen und Setzen einzelner Eigenschaften geschieht wie folgt:4) get (handle, eigenschaft ) set (handle, eigenschaft, wert) Bei etlichen Grakbefehlen (z.B. plot, xlabel, text, legend, siehe ab Kap. 3.5.3) lassen sich Eigenschaften und zugehrige Werte in gleicher Weise als zustzliche Parameter o a ubergeben.
4)

Die ubergebenen Werte knnen je nach Eigenschaft eine Zahl, ein Array oder ein String sein. o

42

3 Eingabe und Ausgabe in MATLAB

Uber das Figure-Men View kann der Property Editor aufgerufen werden; er erleichtert u das Setzen einzelner Eigenschaften der Figure und aller anderen Grakobjekte, wie Achsen, Beschriftung, Linienstrken, Skalierung etc. Ist der Button aktiviert, knnen a o Objekte in der Figure angeklickt und dann deren Eigenschaften verndert werden. a
Root

Figure

Axes

UIcontrol

UImenu

UIcontextmenu

Image

Light

Line

Patch

Rectangle

Surface

Text

Abb. 3.2: Objekt-Hierarchie fr Grakobjekte u

Uber Insert kann die Figure mit frei platzierbaren Grak- und Textobjekten versehen werden. Diese Funktionen sind auch uber das Figure-Men View/Plot Edit Toolbar und u die dann eingeblendete Funktionsleiste verf gbar (siehe Abb. 3.3). u

Abb. 3.3: MatlabFigure mit Werkzeugen

3.5 Grasche Darstellung

43

Weitere Werkzeuge knnen ebenfalls uber das Figure-Men View aufgerufen werden: o u Die Figure Palette erlaubt das Hinzuf gen weiterer Daten. Uber New Subplots weru den Subplots eingef gt. Ebenso knnen Subplots mit der Maus verschoben, skaliert u o sowie auch gelscht werden. Variables bietet im Kontextmen an, verf gbare Variablen o u u zu plotten. Im Plot Browser knnen Objekte der Figure einzeln unsichtbar geschalo aktivieren bzw. deaktivieren die zuvor gewhlten a tet werden. Die Figure-Buttons Werkzeuge (siehe ebenfalls Abb. 3.3). Das so gestaltete Layout einer Figure kann uber das Figure-Men File/Generate M-File u als Matlab-Funktion ausgegeben werden. Diese lsst sich dann mit anderen Daten a wiederverwenden. Grak allgemein figure [(nummer)] subplot (zeilen, spalten, zaehler) clf close nummer close all gcf gca get (handle, eigenschaft ) set (handle, eigenschaft , wert) Erzeugen (Ansprechen) einer Figure Erzeugen eines Subplots R cksetzen der aktuellen Figure u Figure nummer schlieen (lschen) o Alle Figures schlieen (lschen) o Aktuelle Figurenummer (Handle) Aktueller Subplot (Handle) Eigenschaft auslesen Eigenschaft setzen

3.5.2

Achsen und Beschriftung

Die Skalierung der Achsen erfolgt automatisch, kann aber auch manuell mit dem Befehl axis ([xmin, xmax, ymin, ymax]) f r zweidimensionale bzw. mit u axis ([x1, x2, y1, y2, z1, z2]) f r dreidimensionale Graken eingestellt werden. u Mit axis (auto) wird die Skalierung wieder Matlab uberlassen. Die Befehle xlim ([xmin, xmax]), ylim und zlim skalieren jeweils die angegebene Achse. Der Befehl grid on erzeugt ein Gitternetz entsprechend der Achsenteilung.5) Zur genaueren Betrachtung von Ausschnitten eines Plots kann nach dem Befehl im Figure-Fenster) die Figure zoom on (oder nach Anklicken eines der Buttons mit der Maus gezoomt werden. Ein Doppelklick in die Figure stellt die urspr ngliche u Skalierung wieder her. Uber das Men Tools/Pan oder lsst sich der Ausschnitt einer u a gezoomten Figure mit der Maus verschieben (weitere Optionen uber Kontextmen). u Zur Beschriftung der Plots bestehen mehrere Mglichkeiten: Mit xlabel (string) o (und entsprechend ylabel und zlabel) werden die Achsen beschriftet; mit dem Befehl title (string) wird eine Uberschrift erzeugt. Dabei knnen ento A sprechend der L TEX-Konventionen hoch- und tiefgestellte Zeichen sowie griechische Buchstaben verwendet werden.6) So ergibt z.B. xlabel (\alpha_{yz} = b^3/c \rightarrow \pm \infty) die Beschriftung yz = b3 /c .
5) 6)

Anderung der Achsenteilung mittels Property Editor oder wie im Beispiel auf Seite 47 gezeigt. Die in Kap. 3.2 beschriebenen Sonderzeichen \n, sowie \\ gelten hier jedoch nicht.

44

3 Eingabe und Ausgabe in MATLAB

Mit legend (string1, string2 ... [, Location, richtung]) kann eine Legende erzeugt werden. Die Strings werden entsprechend der Reihenfolge der plot-Befehle zugeordnet. Die Position der Legende wird mit richtung als (englische) Himmelsrichtung angegeben: NE platziert z.B. rechts oben (Standard), W links, Best automatisch und BestOutside neben dem Plot. Der Button schaltet eine Legende sichtbar oder unsichtbar. Weitere Infos uber doc legend. Der Befehl text (x, y, string) schlielich platziert einen Text an einer beliebigen Koordinate im aktuellen Plot. Den genannten Beschriftungsbefehlen knnen optional o weitere Parameter ubergeben werden, z.B. title (berschrift, FontSize, 16, U FontWeight, Bold). Weitere Infos zur graschen Ausgabe erhlt man mit help a graph2d, help graph3d und help specgraph (Spezialbefehle); siehe auch Kap. 3.7. Grak: Achsen axis ([xmin, xmax, ymin, ymax]) axis ([x1, x2, y1, y2, z1, z2]) axis (auto) xlim ([xmin, xmax]) ylim ([ymin, ymax]) zlim ([zmin, zmax]) grid [on | off] zoom [on | off] xlabel (string) ylabel (string) zlabel (string) title (string) text (x, y, string) legend (string1, ... [, Location, ...]) Manuelle Achsen-Skalierung (2D) Manuelle Achsen-Skalierung (3D) Automatische Achsen-Skalierung Manuelle Skalierung der x-Achse Manuelle Skalierung der y-Achse Manuelle Skalierung der z-Achse Gitternetz ein | aus Zoomfunktion ein | aus Grak: Beschriftung Beschriftung der x-Achse Beschriftung der y-Achse Beschriftung der z-Achse Uberschrift erzeugen Text platzieren Legende erzeugen

3.5.3

Plot-Befehle fur zweidimensionale Graken

Der Befehl plot (xwerte, ywerte ... [, plotstil]) zeichnet die als Wertepaare (xwerte, ywerte) gegebenen Punkte. Diese werden standardmig mit einer blauen Linie vera bunden. Werden als Argument mehrere x/y-Vektoren abwechselnd ubergeben, erhlt a man unabhngige Linien. Entfllt xwerte, werden die Werte ywerte uber ihrem Ina a dex geplottet; enthlt ywerte dabei komplexe Zahlen, wird der Imaginrteil uber dem a a Realteil dargestellt. Der Befehl stairs verwendet dieselbe Syntax, erzeugt aber eine treppenfrmige Linie o (z.B. f r abgetastete Signale, siehe Beispiel in Kap. 10.3.2). Die Befehle bar und stem u erzeugen Balkendiagramme (siehe Spektren in Kap. 6.2). Die Befehle semilogx und semilogy besitzen die gleiche Syntax wie plot mit dem Unterschied, dass die x-Achse bzw. y-Achse logarithmisch skaliert wird. loglog plottet beide Achsen logarithmisch. Der Befehl polar plottet Daten in Polarkoordinaten.

3.5 Grasche Darstellung

45

Der Parameter plotstil ist ein String, der Farbe, Linien- und ggf. Punkttyp eines Plots bestimmt. Aus allen drei Kategorien kann plotstil je ein Element enthalten (muss aber nicht). So steht z.B. g-. f r eine gr ne gestrichelte Linie ( ); ro- steht f r u u u eine rote durchgezogene Linie, bei der jeder Datenpunkt zustzlich mit einem Kreis a markiert ist. Dar ber hinaus knnen optional Eigenschaft/Werte-Paare angegeben weru o den. So erzeugt z.B. plot (x, y, r, LineWidth, 2.0) einen Plot mit dicker roter Linie. Weitere Infos uber doc plot oder in Kap. 3.7. Farben k b c g schwarz blau cyan gr n u r m y w rot magenta gelb wei Punkte . o * +, x Punkte Kreise Sterne Kreuze --. : Linien durchgezogen gestrichelt gestrichelt gepunktet

Standardmig lscht jeder neue plot-Befehl zunchst alle vorhandenen Objekte der a o a aktuellen Figure (bzw. des Subplots). Dies wird mit dem Befehl hold on nach dem ersten plot-Befehl verhindert. Das folgende Beispiel erzeugt Abb. 3.4:
figure subplot (121) plot (-5:0.1:5, cos ((-5:0.1:5)*pi), k:) hold on fplot (2*sin(pi*x)/(pi*x), [-5 5], k--) subplot (122) t = (0:20)*0.9*pi; plot (cos (t), sin (t)) % % % % % % Erzeugt neue Figure Linker Subplot schwarz, gepunktet alten Plot beibehalten schwarz, gestrichelt Rechter Subplot

% Standard: blaue Linie

Abb. 3.4: Matlab-Figure mit zwei Subplots und ber u das Men Tools aktiviertem u Data Cursor (links)

Der verwendete Befehl fplot (funktion, bereich [, plotstil]) dient der einfachen Darstellung expliziter Funktionen, die als String angegeben werden. Mit erweiterter Funktionalitt steht dar ber hinaus ezplot (funktion1, funktion2 [, bereich]) zur Verf gung, a u u um auch implizite Funktionen und Parameterkurven zu plotten (siehe Abb. 3.5).
>> ezplot (x^2 - y^2 - 2) >> ezplot (sin(3*t) * cos(t) / (t+pi), ... sin(3*t) * sin(t) / (t+pi), [0, 4*pi])

46
x2 y2 2 = 0 6 4 2 0 0 2 4 6 5 0 x 5 y y 0.05 0.1 0.15 0.2 0.1 0.05

3 Eingabe und Ausgabe in MATLAB

x = sin(3 t) cos(t) / (t+), y = sin(3 t) sin(t) / (t+)

0.1

0 x

0.1

0.2

Abb. 3.5: Implizite Funktion (links) und Parameterkurve (rechts) mit dem ezplot-Befehl

Grak: 2D Plot-Befehle plot ([xwerte, ] ywerte ... [, plotstil]) stairs ([xwerte, ] ywerte ... [, plotstil]) bar (...), stem (...) loglog (xwerte, ywerte ... [, plotstil]) semilogx (xwerte, ywerte ... [, plotstil]) semilogy (xwerte, ywerte ... [, plotstil]) polar (winkel, radius ... [, plotstil]) fplot (funktion, bereich) ezplot (funktion (x, y) [, bereich]) ezplot (funktion1, funktion2 [, bereich]) hold [on | off] Plot, linear Plot, linear treppenfrmig o Plot, linear, Balken Plot, logarithmisch Plot, x-Achse logarithmisch Plot, y-Achse logarithmisch Plot, in Polarkoordinaten Plot, explizite Funktion Plot, implizite Funktion Plot, Parameterkurve Vorhandene Objekte halten

Beispiel: Frequenzgang Tiefpass und Hochpass


Im Folgenden ndet sich ein (zugegebenermaen kompliziertes) Beispiel, das Abb. 3.6 erzeugt. Dabei wird der Frequenzgang eines Tiefpasses (auch PT1 -Glied) und eines Hochpasses (auch DT1 -Glied) mit der Zeitkonstanten T im Laplace-Bereich (s = j) berechnet und ausgegeben. Die Eckfrequenz liegt jeweils bei 1/T = 20 rad s1 = 3.18 Hz. HTP (j ) = 1 1+jT HHP (j ) = 1 HTP = jT 1+jT

Hinweis f r Interessierte: Mit set wird zunchst die Achsenteilung gendert und anu a a schlieend die Beschriftung der Achsen; gca liefert das Handle des jeweiligen Subplots, um die Parameter ytick und yticklabel zu andern.
T omega = 0.05; = logspace (0, 3, 100); % Zeitkonstante [s] % Frequenzvektor [rad/s]

3.5 Grasche Darstellung


bertragungsfunktionen 20 Tiefpass Hochpass Amplitude [dB] 0 Phase [Grad] 90 60 30 0 30 60 Zeitkonstante 40 0 10 10
1 2 3

47

20

10 [rad s ]
1

10

90 0 10

10

10 [rad s ]
1

10

Abb. 3.6: Beispiel: Frequenz- und Phasengang eines Tiefpasses und eines Hochpasses frequenzgang_TP frequenzgang_HP figure (3) clf subplot (121) loglog (omega, abs (frequenzgang_TP), -) hold on loglog (omega, abs (frequenzgang_HP), --) loglog ([1 1]/T, [0.01 10], :) text (1.1/T, 0.02, Zeitkonstante) title (bertragungsfunktionen) U xlabel (\omega [rad s^-^1]) ylabel (Amplitude [dB]) legend (Tiefpass, Hochpass) xlim ([1 1e3]) skala = -40:20:40; set (gca, ytick, 10.^(skala/20)) set (gca, yticklabel, skala) = (T*j*omega + 1).^(-1); = 1 - frequenzgang_TP; % Frequenzgang Tiefpass % Frequenzgang Hochpass % Erzeugt Figure 3 % Lscht ggf. alte Plots o % Linker Subplot: Amplitude % Amplitudengang Tiefpass % % % % % % % % % % % Amplitudengang Hochpass Linie Zeitkonstante Text Zeitkonstante Titel linker Subplot Achsenbeschriftung X Achsenbeschriftung Y Legende an Standardposition Skalierung x-Achse Gewnschte Achsteilung u Setzt Achsteilung (dB) Setzt Beschriftung

subplot (122) % Rechter Subplot: Phase semilogx (omega, angle (frequenzgang_TP) *180/pi, -) % Phasengang TP hold on semilogx (omega, angle (frequenzgang_HP) *180/pi, --) % Phasengang HP grid on % Aktiviert Gitterlinien xlabel (\omega [rad s^-^1]) % Achsenbeschriftung X ylabel (Phase [Grad]) % Achsenbeschriftung Y axis ([1 1e3 -90 90]) % Skalierung x- und y-Achse skala = -90:30:90; % Gewnschte Achsteilung u set (gca, ytick, skala) % Setzt Achsteilung (Grad) set (gca, yticklabel, skala) % Setzt Beschriftung

Hinweis f r immer noch Interessierte: Der Frequenzgang kann auch mit den in Kap. 5 u behandelten Befehlen tf und bode dargestellt werden:

48

3 Eingabe und Ausgabe in MATLAB

>> tiefpass = tf ([1], [0.05 1]); >> hochpass = 1 - tiefpass; >> bode (tiefpass, b-, hochpass, r--)

Mittels des Befehls tf wird die Ubertragungsfunktion im Laplace-Bereich, bestehend aus Zhler- und Nennerpolynom, generiert. Mit dem Befehl bode wird automatisch ein a Bodediagramm erzeugt.

3.5.4

Plot-Befehle fur dreidimensionale Graken

Zur Darstellung mehrdimensionaler Zusammenhnge eignen sich 3D-Plots. Im Folgena den werden einige der daf r verf gbaren Befehle beschrieben. Die Befehle zur Beschrifu u tung und zur Achsen-Skalierung leiten sich dabei von denen bei 2D-Plots ab. Der Befehl plot3 entspricht plot, lediglich um einen dritten Datenvektor f r die zu Achse erweitert. Folgende Befehle erzeugen den dreidimensionalen Plot in Abb. 3.7:
>> phi = (0:100) / 100 * 2*pi; >> plot3 (-sin (2*phi), cos (3*phi), 1.5*phi, k.-) >> grid on

10

0 1 0 1 1 1 0

Abb. 3.7: Dreidimensionaler Plot

Zur Darstellung zweidimensionaler Funktionen als Flchen im Raum dient der Befehl a surf (xwerte, ywerte, zwerte ... [, farbe]). Sind xwerte, ywerte und zwerte Matrizen gleicher Zeilen- und Spaltenzahl, werden die beschriebenen Punkte geplottet und die dazwischen liegenden Flchen ausgef llt. Liegen alle Punkte in einem gleichmigen a u a Raster bez glich der x- und y-Achse, knnen xwerte und ywerte auch Vektoren sein. u o In diesem Fall werden die Eintrge von xwerte auf die Spalten und ywerte auf die a Zeilen der Matrix zwerte bezogen. Die Befehle mesh und waterfall besitzen dieselbe Syntax wie surf, erzeugen aber ein Gitter ohne ausgef llte Flchen bzw. ein Wasserfall-Diagramm. Dagegen erzeugt u a contour einen Plot der Hhenlinien (Linien gleicher zwerte). o Optional kann eine weitere Matrix farbe zur Festlegung der Farbe angegeben werden. Jedes Element von farbe entspricht einem Element von zwerte. Die Farb-Werte werden als Indizes f r eine Farbtabelle verwendet, die uber colormap (name) gendert werden u a kann. Der grte und kleinste Eintrag von farbe wird automatisch auf den grten bzw. o o

3.5 Grasche Darstellung

49

kleinsten Datenwert skaliert. Ohne Angabe einer Farb-Matrix wird farbe = zwerte angenommen. Die Skalierung der Farbe kann mit caxis (farbe min, farbe max) festgelegt werden. Infos uber vordenierte Farbtabellen sind uber help graph3d zu erhalten.

3.5.5

Perspektive

Die Perspektive von 3D-Plots kann mit view (horizontal, vertikal) durch Vorgabe des horizontalen und vertikalen Winkels (in Grad) verndert werden. Standard ist a (37.5, 30 ). Verschiedene Mglichkeiten sind in Abb. 3.8 zu sehen. Die Perspektive o kann auch interaktiv durch Ziehen mit der Maus verndert werden, nachdem der Bea fehl rotate3d on eingegeben oder der Button im Figure-Fenster aktiviert wurde. F r u groe Graken sollte man dabei uber das Kontextmen die Option Rotate Options/Plot u Box Rotate whlen, damit die Grak nicht whrend des Drehens neu gezeichnet wird. a a Der Befehl box on erzeugt einen Rahmen (Box ) um die 3D-Grak. Weitergehende Einstellmglichkeiten f r Perspektive und Beleuchtung bietet das Figureo u Men View/Camera Toolbar und die Befehls bersicht mit help graph3d. u u Grak: 3D Plot-Befehle [X, Y ] = meshgrid (xvektor, yvektor) plot3 (xwerte, ywerte, zwerte . . . [, plotstil]) surf (xwerte, ywerte, zwerte . . . [, farbe]) mesh (xwerte, ywerte, zwerte . . . [, farbe]) waterfall (xwerte, ywerte, zwerte . . . [. . .]) contour (xwerte, ywerte, zwerte . . . [. . .]) box [on | off] rotate3d [on | off] view (horizontal, vertikal) zlabel (string) Farben einstellen colormap (name) caxis (farbe min, farbe max) Wahl der Farbtabelle Skalierung der Farbe Koordinatenmatrizen 3D-Plot, 3D-Plot, 3D-Plot, 3D-Plot, 2D-Plot, Punkte/Linien Flche a Gitter Wasserfall Hhenlinien o

Box einblenden Interaktives Drehen Perspektive ndern a Beschriftung der z-Achse

Beispiel
Im folgenden Beispiel erzeugt der Befehl meshgrid zunchst aus den Vektoren x und y a die Matrizen X und Y , deren Zeilen bzw. Spalten den Vektoren x bzw. y entsprechen. Daraus berechnet sich dann die Matrix Z:
x = 0:0.05:2; y = -1:0.2:1; [X, Y] = meshgrid (x, y); % Erzeugt Matrizen ber Bereich von x, y u Z = (Y+1) .* cos (2*X.^2) + (Y-1) .* sin (2*X.^2) / 5;

50

3 Eingabe und Ausgabe in MATLAB

Die so erhaltenen Daten werden nun mittels verschiedener Befehle und Einstellungen geplottet (siehe Abb. 3.8):
figure subplot (221) surf (X, Y, Z) view (-40, 30) title (surf (X, Y, Z); view (-40, 30)) subplot (222) mesh (X, Y, Z) view (-20, 30) title (mesh (X, Y, Z); view (-20, 30); grid off; box on) grid off box on subplot (223) waterfall (X, Y, Z) view (-20, 10) title (waterfall (X, Y, Z); view (-20, 10)) subplot (224) contour (X, Y, Z) title (contour (X, Y, Z))
surf (X, Y, Z); view (40, 30) mesh (X, Y, Z); view (20, 30); grid off; box on 2 2 1 0 0 1 2 1 2 0 1 0 1 0 1 0 0.5 1 1.5 2

2 1

waterfall (X, Y, Z); view (20, 10) 2 1 0 1 0.5 2 1 0 1 0 0.5 1 1.5 2 1 0 0.5 1

contour (X, Y, Z)

0.5

1.5

Abb. 3.8: Beispiel: Verschiedene Darstellungen dreidimensionaler Daten

3.5 Grasche Darstellung

51

3.5.6

Importieren, Exportieren und Drucken von Graken

Zum Einlesen von Pixel-Graken bietet Matlab den Befehl imread an. Mit variable = imread (datei, format) wird eine Grak-Datei mit dem angegebenen Format7) als Variable eingelesen, wobei variable bei Graustufen-Bildern eine zweidimensionale Matrix, bei Farbbildern ein dreidimensionales Array ist. Der Befehl image (variable) gibt die so eingelesene Grak in einer Figure aus. So erzeugen die folgenden Befehlszeilen die Figure in Abb. 3.9, die das im jpg-Format vorliegende Bild foto.jpg enthlt: a
>> foto_variable = imread (foto.jpg, jpeg); >> image (foto_variable)

Das Drucken und Exportieren von Graken aus Matlab geschieht uber den Befehl print. Mit print -fnummer wird die Figure nummer auf dem Standard-Drucker ausgegeben. Mit print -fnummer -doption datei erfolgt die Ausgabe in Dateien verschiedener Grakformate.8) Uber das Men File/Print Preview knnen Lage und Gre der Figure f r den Ausdruck u o o u sowie weitere Druckoptionen (z.B. Farbraum, Linien, Schrift, etc.) eingestellt werden.
>> print -f1; >> print -f1 -dmeta bild; >> print -f1 -depsc bild; % Drucken von Figure 1 auf Standard-Drucker % Speichern als Windows-Metafile (bild.emf) % Speichern als Farb-Postscript (bild.eps)

Abb. 3.9: Mit imread und image eingebundene Grak

Matlab bietet auch die Speicherung in einem eigenen Figure-Format an; dieses eignet sich insbesondere f r sptere Weiterverarbeitung einer Figure in Matlab. Geu a speichert wird entweder uber das Figure-Men File/Save As oder mit dem Befehl u saveas (handle, datei [, format]).9) Hier knnen weitere Ausgabeoptionen uber das Men File/Export Setup eingestellt o u werden.
Mgliche Formate: bmp, ico, jpg/jpeg, pcx, tif/tiff, siehe auch doc imread. o Mgliche Formate: bmp, meta (emf), eps, jpeg, pcx24b (pcx), pdf, tiff, siehe auch doc print. o 9) Mgliche Formate: fig (speichert Figure als binres Fig-File), m (erzeugt ein Fig-File und ein o a M-File, das das Fig-File aufruft). Des Weiteren sind auch einige Formate wie bei print zulssig. a
8) 7)

52

3 Eingabe und Ausgabe in MATLAB

Grak: Importieren, Exportieren und Drucken print -fnummer print -fnummer -dformat datei saveas (handle, datei, fig) variable = imread (datei, format) image (variable) Figure auf Standarddrucker drucken Figure in Datei speichern Figure als Matlab-Figure speichern Pixel-Grak in Matrix einlesen Pixel-Grak in Figure plotten

3.6

Grasche Benutzeroberache (GUI)

Zur komfortablen Bedienung eigener Programme lassen sich in Matlab grasche Benutzerschnittstellen, so genannte GUIs 10) erstellen. GUIs sind interaktive Figures in Form einer Dialogbox, die auch Text- und Grakausgabe enthalten knnen. Als Beio spiel dient die Erstellung eines Datums-Rechners zur Bestimmung des Wochentags f r ein beliebiges Datum (siehe Abb. 3.10). u

Abb. 3.10: Beispiel: Datums-Rechner als fertiges GUI

Zur Erstellung eines GUI m ssen Layout und Funktionalitt festgelegt werden. F r u a u das Layout existiert ein grascher Editor; die Funktionalitt wird anschlieend in ein a automatisch vorgefertigtes Application-M-File eingef gt. Eine manuelle Erstellung des u u Layouts ist umstndlich und daher nicht zu empfehlen.11) Weiterf hrende Fragen bea antworten wie immer die Matlab-Hilfe (z.B. help uitools) und die Handbcher. [38] u

3.6.1

GUI-Layout

Zur Erstellung und Bearbeitung eines GUI-Layouts bietet Matlab den GUIDE-Editor an, siehe Abb. 3.11. Beim Aufrufen uber das Matlab-Men File/New/GUI oder mit u dem Befehl guide erscheint zunchst eine Start-Auswahl. Neben einer leeren GUIa Figure knnen auch verschiedene Beispiele damit erzeugt werden. o Neue Objekte innerhalb der GUI-Figure werden durch Anklicken eines Typs und Platzieren mit der Maus erzeugt. Die Gre kann ebenfalls per Maus verndert werden. o a Vorteilhaft wird im Men Tools/Grid and Rulers die Grid Size auf 10 Pixel gesetzt. u Bereits vorhandene Objekte knnen durch Ziehen mit der rechten Maustaste oder uber o das GUIDE-Men Edit/Duplicate dupliziert werden. Falls sich Objekte gegenseitig veru decken, kann die Reihenfolge im GUIDE-Men Layout gendert werden. Alle Objeku a te knnen vorbelegt und beim Ausf hren des GUI durch Funktionsaufrufe (z.B. bei o u Anklicken einer Schaltche) verndert werden und eignen sich somit auch zur Ausgaa a be, insbesondere Edit Text - und Static Text -Objekte.
10) 11)

GUI = Graphical User Interface, GUIDE = GUI Design Editor Die Datei datumsrechner manuell.m zeigt eine kompakte manuelle Programmierung.

3.6 Grasche Benutzeroberche (GUI) a

53

GUI-Objekte Push Button Toggle Button Radio Button Check Box Listbox Pop-up Menu Table Edit Text Static Text Slider Panel Button Group Axes Schaltche, die beim Anklicken eine Funktion ausf hrt a u Auswahlfeld in Form einer Schaltche a Auswahlfeld rund Auswahlfeld eckig Auswahlliste (auch mehrere Elemente gleichzeitig) Auswahlliste (immer genau ein Element) Tabelle zur Ein- und Ausgabe Editierbares Textfeld zur Ein- und Ausgabe (auch mehrzeilig) Statisches Textfeld (auch mehrzeilig) Schieberegler Gef lltes Rechteck zur graschen Gestaltung des GUI u Wie Panel, unterst tzt Exklusiv-Auswahl, siehe GUIDE-Beispiel u Ausgabebereich f r Grak (2D- und 3D-Plots) u

Das Objekt Panel gruppiert alle Objekte, die in diesem Bereich erstellt oder dorthin verschoben werden. Button Group verwaltet zudem mehrere exklusive Auswahlfelder, indem aus diesen immer nur eines ausgewhlt werden kann. a Eine Hierarchie smtlicher Objekte einschlielich der GUI-Figure als oberste Stufe zeigt a der Object Browser , der uber das GUIDE-Men View/Object Browser oder den Butu ton aufgerufen wird (Abb. 3.12).

Abb. 3.11: GUIDE-Editor mit Beispiel

Abb. 3.12: GUI-Object-Browser

Die Eigenschaften der Objekte knnen mit dem Property Inspector editiert werden, o der durch Doppelklick auf ein Objekt im GUIDE oder im Object Browser, uber das Men View/Property Inspector oder mit dem Button u aufgerufen wird (Abb. 3.13). Viele Eigenschaften lassen sich direkt im Property Inspector durch Anklicken der Eintrge in der rechten Spalte ndern. F r umfangreichere Eigenschaften (z.B. Backgrounda a u

54

3 Eingabe und Ausgabe in MATLAB

Color, String) wird zustzlich ein Button angezeigt, der beim Anklicken ein passena des Dialogfenster net. So werden die Monatsnamen im Popup-Men als Eigenschaft o u String mit dem String-Editor (Abb. 3.14) eingegeben. Je nach Objekt-Typ knnen nicht o bentigte Eigenschafts-Felder leer oder mit Default-Werten belegt bleiben, insbesondere o wenn sie beim Start des GUI initialisiert werden (siehe Beispiel Seite 57).

Abb. 3.13: GUI-Property-Inspector

Abb. 3.14: GUI-String-Editor

Im Folgenden werden die wichtigsten Objekt-Eigenschaften erlutert. Einige davon a (wie ...Color, Font...) sind selbsterklrend und werden daher nicht nher beschrieben: a a Callback enthlt den Funktionsaufruf, der bei jeder Aktivierung des Objekts durch a Anklicken oder Eingabe ausgef hrt wird. Der automatisch generierte Funktionsu name leitet sich aus der Eigenschaft Tag ab. Eine entsprechende (leere) Funktion zu jedem Objekt wird auch im Application-M-File automatisch erzeugt. Enable legt fest, ob ein Objekt vom Anwender aktiviert oder verndert werden kann a (on). Im Gegensatz zu inactive verndert sich bei off die Objekt-Farbe zu grau. a Min, Max legen den Wertebereich eines Sliders fest. Gilt M ax M in > 1, erlauben Edit Text - und Listbox -Objekte die Eingabe mehrzeiliger Texte bzw. die gleichzeitige Auswahl mehrerer Elemente. Position besteht aus dem Vektor [links unten Breite Hhe], der durch GUIDE autoo matisch gesetzt wird und Lage10) sowie Gre des Objekts bestimmt. Mithilfe des o Werkzeugs Align Object knnen Objekte komfortabel ausgerichtet werden. Der o Aufruf erfolgt uber das GUIDE-Men Tools/Align Objects oder den Button . u Siehe auch Units. String kann einen (einzeiligen) Text zur Beschriftung einer Schaltche oder eines a Auswahlfelds enthalten. Mehrzeilige Texte sind bei Textfeldern und Auswahllisten mglich. Bei Letzteren entspricht jede Zeile einem Element der Auswahlliste. Der o Text wird stets ohne Anf hrungszeichen eingegeben. u Style legt den Typ des Objekts fest und wird von GUIDE automatisch vergeben; siehe Liste der GUI-Objekte (auer Axes) auf Seite 53.
10)

Linke untere Ecke des Objekts bezogen auf linke untere Ecke des GUI-Fensters.

3.6 Grasche Benutzeroberche (GUI) a

55

Tag enthlt den (eindeutigen) Namen des Objekts.11) Diesen zeigt der GUIDE-Editor a f r das jeweils markierte Objekt auch in seiner Statuszeile an (links unten). u Der Name wird f r die zugehrige Callback-Funktion im automatisch erzeugten u o Application-M-File verwendet. Der Ubersichtlichkeit halber sollten die DefaultNamen bereits vor dem ersten Speichern des GUI durch sinnvolle Bezeichnungen ersetzt werden. Bei spteren Anderungen sollte man pr fen, ob Matlab auch die a u Funktionsnamen im Application-M-File entsprechend angepasst hat. TooltipString kann einen (einzeiligen) Text enthalten, der angezeigt wird, sobald sich der Mauszeiger f r einige Zeit uber dem Objekt bendet. Der Text wird ebenfalls u ohne Anf hrungszeichen eingegeben. u Units legt die Einheit f r die Eigenschaft Position fest. Die Default-Einstellung u characters skaliert Objekte entsprechend der Schriftgre und ermglicht so ein o o gleichbleibendes Aussehen des GUI auf unterschiedlichen Rechnern. Die Einstellung normalized erwartet Werte im Bereich 0...1, die sich auf die aktuelle Breite und Hhe der GUI-Figure beziehen; dies eignet sich besonders f r GUI-Figures o u mit vernderlicher Gre (siehe Resize unter Figure-Eigenschaften). a o Value enthlt den aktuellen Wert eines Sliders bzw. gibt an, ob ein Auswahlfeld aka tiviert ist (1) oder nicht (0). F r eine exklusive Auswahl (d.h. immer nur eine u Mglichkeit) kann ein Pop-up Menu verwendet werden; bei den ubrigen Auswahlo feldern muss dies durch einen Funktionsaufruf sichergestellt werden, der die verbleibenden Auswahlfelder auf 0 setzt.12) Alternativ wird dies auch von der Button Group unterst tzt (f r Details siehe zugehrige Matlab-Hilfe bzw. -Beispiele). u u o Bei Auswahllisten enthlt Value den Index des gewhlten Listeneintrags (durcha a nummeriert mit 1, 2, ...).13) Visible bestimmt, ob ein Objekt sichtbar ist oder ausgeblendet wird. Damit kann das GUI-Layout zur Laufzeit verndert werden. a Die wichtigsten Figure-Eigenschaften f r GUIs werden im Folgenden erlutert; auch u a hier wird auf oensichtliche Eigenschaften nicht weiter eingegangen. Zum Editieren muss der Property Inspektor durch Doppelklick auf den GUI-Hintergrund im GUIDE oder auf die GUI-Figure im Object Browser genet werden. o FileName wird beim Speichern des GUI verwendet und sollte daher hier nicht gendert werden (besser uber das GUIDE-Men File/Save As). a u Name enthlt den Text, der in der Titelzeile des GUI-Fensters angezeigt wird. a Position bestimmt Lage14) und Gre der GUI-Figure beim Onen. Diese Werte wero den durch GUIDE automatisch gesetzt. Resize ermglicht oder verhindert, dass der Anwender die Gre der GUI-Figure per o o Maus ndert (siehe auch Units unter Objekt-Eigenschaften). a
11) 12) 13) 14)

Tag in kursiver Schrift ist der Bezeichner des Objekts nicht zu verwechseln mit Tag als Datum. Siehe auch beigelegte CD-ROM, Beispiel reglerkonfigurator.m. Bei Listbox enthlt Value die Indizes aller gewhlten Elemente als Vektor. a a Linke untere Ecke der GUI-Figure bezogen auf linke untere Bildschirmecke.

56

3 Eingabe und Ausgabe in MATLAB

Tag wird nur bentigt, falls der Anwender auf die GUI-Figure mittels Handle zugreifen o mchte (z.B. von einem anderen GUI aus) oder f r printdlg (siehe unten). Das o u Handle des GUI erhlt man dann mit handles.T agN ame oder mit handle = a findobj (Tag, T agN ame). Units legt die Einheit f r die Position der GUI-Figure fest. Auch hier empehlt sich die u Default-Einstellung characters f r ein rechnerunabhngiges Aussehen des GUI. u a Die Einstellung normalized bezieht sich hier auf Breite und Hhe des Bildschirms. o Die Einstellungen zum Speichern des GUI im GUIDE-Men Tools/GUI Options u knnen ubernommen werden. Damit werden beim Speichern jeweils zwei Dateien ero zeugt (bzw. ergnzt): ein Fig-File mit dem Layout der GUI-Figure sowie ein Applicationa M-File, das die GUI-Figure aufruft und in dem schon bestimmte Funktionen vordeniert sind. Im gewhlten Beispiel werden die Dateien datumsrechner.fig und a datumsrechner.m erzeugt.

3.6.2

GUI-Funktionalitat

Die eigentliche Funktionalitt eines GUI verbirgt sich in den Callback-Funktionen. Bei a jedem Aufruf eines Objekts (d.h. Anklicken oder Eingabe) werden so genannte Callbacks ausgef hrt. Diese rufen stets das automatisch generierte Application-M-File auf und u ubergeben den Namen der gew nschten Callback-Funktion als Parameter. So erfolgt u z.B. beim Anklicken des Push Buttons (Tag = Berechnen) im Datums-Rechner der folgende Funktionsaufruf:
datumsrechner(Berechnen_Callback,gcbo,[],guidata(gcbo))

Damit ruft das Application-M-File seinerseits die gew nschte lokale Callback-Funktion u Berechnen Callback auf, die im Application-M-File wie folgt vordeniert ist:
function Berechnen_Callback(hObject, eventdata, handles)

Der Inhalt der Funktion muss durch den Anwender programmiert werden. Im vorliegenden Beispiel werden die folgenden Zeilen eingefgt. u
TagNr Monat Jahr = str2num (get (handles.TagNr, String)); = get (handles.Monat, Value); = str2num (get (handles.Jahr, String));

Wochentag = weekday (datenum (Jahr, Monat, TagNr)); set (handles.Wochentag, String, handles.TageListe (Wochentag));

Beim Aufruf dieser Callback-Funktion werden zunchst TagNr, Monat und Jahr mit get a ausgelesen. TagNr und Jahr liegen als String vor und m ssen daher noch mit str2num u in Zahlen umgewandelt werden; bei Monat entspricht das Feld Value dem gewhlten a Listenelement (Januar = 1, etc.) und muss nicht konvertiert werden. Schlielich wird mit den Matlab-Befehlen datenum und weekday der Wochentag berechnet (Sonntag = 1, etc.) und der entsprechende Eintrag des Arrays TageListe ausgegeben. TageListe wird am besten whrend der Initialisierung des GUI deniert. Um aus una terschiedlichen lokalen Funktionen auf diese Variable zugreifen zu knnen, kann diese o

3.6 Grasche Benutzeroberche (GUI) a

57

entweder als global deniert werden (dies muss allerdings in jeder darauf zugreifenden Funktion wiederholt werden!) oder uber die vorgegebene Struktur handles. Letztere wird an jede lokale Funktion ubergeben und ist somit dort sichtbar. Die Denition erfolgt zu Beginn der folgenden Funktion im Application-M-File:
function datumsrechner_OpeningFcn(hObject, eventdata, handles, varargin)

Hier kann der Anwender eigene Deklarationen und Initialisierungs-Befehle programmieren. Im vorliegenden Beispiel werden die folgenden Zeilen eingefgt: u
handles.TageListe = {Sonntag., Montag., Dienstag., Mittwoch., ... Donnerstag., Freitag., Samstag.};

[Jahr, Monat, TagNr] = datevec (now); Wochentag = weekday (now); set set set set (handles.TagNr, String, num2str (TagNr)); (handles.Monat, Value, Monat); (handles.Jahr, String, num2str (Jahr)); (handles.Wochentag, String, handles.TageListe (Wochentag));

Damit wird beim Start des GUI die Struktur handles um das Cell Array TageListe erweitert. Anschlieend wird das aktuelle Datum abgefragt und das GUI mit diesen Werten vorbelegt; dazu m ssen TagNr und Jahr wieder in Strings umgewandelt werden. u Der (automatisch erzeugte) Befehl guidata(hObject, handles) im Application-MFile (siehe Seite 59) schliet die Initialisierung ab; er wird bentigt, um die erweiterte o Struktur handles zu speichern. F r die Erstellung von Mens und Kontextmens steht ein eigener Editor zur u u u Verfgung (Aufruf uber GUIDE-Men punkt Tools/Menu Editor oder den Button ); u u f r jeden Men eintrag wird im Application-M-File die zugehrige Funktion vordeniert. u u o Toolbars knnen uber das Men Tools/Toolbar Editor oder den Button o u deniert werden. Zudem knnen vordenierte Dialogboxen vom GUI aus aufgerufen wero den. Beispiele nden sich in der Start-Auswahl des GUIDE-Editors (siehe auch help uitools). Der GUIDE-Men punkt Tools/Tab Order Editor erlaubt, die Reihenfolge der Eingabeu felder eines GUI f r das Durchsteppen mit der Tabulator-Taste festzulegen. u

3.6.3

GUI ausfuhren und exportieren

Ausgef hrt wird das fertige GUI durch Eingabe des Namens des Application-M-Files u im Matlab-Command-Window oder mit dem Kontextmen Run im Current Directory u Browser. Mit dem GUIDE-Men punkt Tools/Run oder dem Button u kann das GUI auch direkt aus dem GUIDE-Editor heraus gestartet werden (dabei werden Anderungen am GUI gespeichert). Das fertige GUI des Datums-Rechners zeigt Abb. 3.10. Mit dem GUIDE-Men punkt File/Export wird ein bereits gespeichertes GUI bei Bedarf u (z.B. zur Erzeugung eines P-Files) zu einem einzigen Export-M-File zusammengefasst. Dies kann die getrennte Speicherung von Fig-File und Application-M-File jedoch nicht ersetzen, da das Export-M-File nicht mehr mittels GUIDE grasch editiert werden kann.

58

3 Eingabe und Ausgabe in MATLAB

GUI: Vordenierte Dialogboxen cell array = inputdlg (text, titel) msgbox (text, titel [, icon]) string = questdlg (text, titel, button, ... default) dateiname = uigetfile (filter, titel) dateiname = uiputfile (filter, titel) handle = waitbar (x, [handle, ] titel) printdlg (handle) GUI: Ntzliche Befehle u string variable string variable = = = = num2str (variable [, format]) str2num (string) sprintf (string, variable) sscanf (string, format) Umwandlung Zahl in String Umwandlung String in Zahl Formatierten String erzeugen Formatierten String lesen Texteingabe Textausgabe Frage Datei nen o Datei speichern Fortschrittsbalken Drucken

3.6.4

Aufbau des Application-M-File

F r Interessierte wird im Folgenden der Aufbau des automatisch erzeugten Applicationu M-Files nher erlutert. Dazu wird der Matlab-Code des Datums-Rechners auszugsa a weise (...) wiedergegeben und kommentiert. Das Application-M-File wird sowohl beim Starten des GUI als auch bei Callbacks durch Matlab aufgerufen. Zu Beginn des Application-M-Files wird daher anhand der uber gebenen Parameter eine Verzweigung in verschiedene Aktionen durchgef hrt: Beim u Aufrufen des Application-M-Files ohne Parameter wird das GUI gestartet; wird der Name einer Callback-Funktion als Parameter ubergeben, wird diese von hier aufgerufen.
function varargout = datumsrechner(varargin) % DATUMSRECHNER M-file for datumsrechner.fig % DATUMSRECHNER, by itself, creates a new DATUMSRECHNER (...) % % DATUMSRECHNER(CALLBACK,hObject,eventData,handles,...) calls the local % function named CALLBACK in DATUMSRECHNER.M with the given input arguments. (...) % Begin initialization code - DO NOT EDIT (...) % End initialization code - DO NOT EDIT

Der nchste Abschnitt dient im Wesentlichen der Initialisierung des GUI. Innera halb der Funktion datumsrechner OpeningFcn knnen Initialisierungs-Befehle eino gef gt werden, die die Eigenschaften der GUI-Figure uberschreiben. Soll die Struku tur handles erweitert werden, muss dies vor dem Befehl guidata erfolgen. Schlielich knnen mit der Funktion datumsrechner OutputFcn auch Parameter zur aufrufenden o Funktion (bzw. zum Command Window) zur ckgegeben werden. u

3.6 Grasche Benutzeroberche (GUI) a

59

% --- Executes just before datumsrechner is made visible. function datumsrechner_OpeningFcn(hObject, eventdata, handles, varargin) % EINGEFUGT: Definiert Liste der Wochentage als Variable in der Struktur % "handles". Setzt alle Werte beim ersten Aufruf auf aktuelles Datum. handles.TageListe = {Sonntag., Montag., Dienstag., Mittwoch., ... Donnerstag., Freitag., Samstag.}; [Jahr, Monat, TagNr] = datevec (now); Wochentag = weekday (now); set (handles.TagNr, String, num2str (TagNr)); set (handles.Monat, Value, Monat); set (handles.Jahr, String, num2str (Jahr)); set (handles.Wochentag, String, handles.TageListe (Wochentag)); % EINGEFGT ENDE U % Choose default command line output for datumsrechner handles.output = hObject; % Update handles structure guidata(hObject, handles); % --- Outputs from this function are returned to the command line. function varargout = datumsrechner_OutputFcn(hObject, eventdata, handles) % Get default command line output from handles structure varargout{1} = handles.output;

Im nchsten Teil des Application-M-Files sind alle Callback-Funktionen vordea niert. F r GUI-Objekte (auer Men s und Axes) existieren je zwei Funktionen: u u ... CreateFcn und ... Callback. Erstere wird nur beim Starten des GUI aufgerufen, Letztere bei jeder Aktivierung des Objekts (durch Anklicken oder Eingabe). Jedesmal, wenn der GUI-Figure neue Objekte hinzugef gt werden, werden hier die zugehrigen u o Funktionen mit dem Namen TagName_CreateFcn und TagName_Callback angehngt, a wobei TagName der im Feld Tag stehende Bezeichner des Objekts ist.
function TagNr_Callback(hObject, eventdata, handles) % --- Executes during object creation, after setting all properties. function TagNr_CreateFcn(hObject, eventdata, handles) (...) % --- Executes on selection change in Monat. function Monat_Callback(hObject, eventdata, handles) % --- Executes during object creation, after setting all properties. function Monat_CreateFcn(hObject, eventdata, handles) (...) function Jahr_Callback(hObject, eventdata, handles) % --- Executes during object creation, after setting all properties. function Jahr_CreateFcn(hObject, eventdata, handles) (...)

60

3 Eingabe und Ausgabe in MATLAB

% --- Executes on button press in Berechnen. function Berechnen_Callback(hObject, eventdata, handles) % EINGEFUGT: Holt aktuelle Werte (ggf. mit Umwandlung String nach Zahl) % Berechnet zugehrigen Wochentag und gibt diesen aus. o TagNr Monat Jahr = str2num (get (handles.TagNr, String)); = get (handles.Monat, Value); = str2num (get (handles.Jahr, String));

Wochentag = weekday (datenum (Jahr, Monat, TagNr)); set (handles.Wochentag, String, handles.TageListe (Wochentag)); % EINGEFGT ENDE U

Hier endet das Application-M-File. Im Export-M-File schliet sich hier die Funktion datumsrechner export LayoutFcn mit der Layout-Information des GUI an. Es folgen schlielich noch weitere Funktionen zum Starten des GUI (gekrzt): u
% --- Creates and returns a handle to the GUI figure. function h1 = datumsrechner_export_LayoutFcn(policy) (...)

3.7

Tipps rund um die Matlab-Figure

Eine Strke von Matlab sind die umfangreichen graschen Ausgabemglichkeiten. a o Der folgende Abschnitt gibt einige Tipps, wie diese noch ezienter eingesetzt werden knnen. o Liniendicke und -farbe lassen sich durch Anhngen eines oder mehrerer der fola genden Eigenschaft-Werte-Paare ndern. Standard-Linienstrke ist 0.5. Die Farbe a a wird als [rot grn blau] mit Wertebereich 0 ... 1 (dunkel ... hell) angegeben. Dies u ist mglich bei plot, semilogx, semilogy, loglog, stairs und plot3. o plot (x, y, o--, LineWidth, 3, ... Color, [1.0 0.7 0.0]) Schriftart und -gre lassen sich durch Anhngen eines oder mehrerer der folo a genden Eigenschaft-Werte-Paare ndern. Dies gilt f r die Befehle text, title, a u xlabel, ylabel und zlabel. title (T iteltext, FontName, Courier, ... FontSize, 16, ... FontWeight, Bold) Bei legend muss dies dagegen wie folgt geschehen: handle = legend ... set (handle, FontName, Courier) Zum Beschriften von Datenpunkten wird der Befehl text sinnvollerweise mit einem Oset in x- und/oder in y-Richtung versehen. Die folgende Zeile beschriftet

3.7 Tipps rund um die Matlab-Figure den Datenpunkt (x, y) mit dem Wert y (zwei Nachkommastellen): text (x + 0.2, y + 0.1, num2str (y, %3.2f))

61

Die Achsenbeschriftung kann wie im Beispiel auf Seite 47 gendert werden: a Die Eigenschaft xtick (analog ytick, ztick) gibt die Position der Beschriftung als Vektor vor. xticklabel ndert die Beschriftung selbst; die zugehrigen Werte a o knnen sowohl ein Zahlenvektor als auch ein Cell Array aus Strings sein. o set (gca, XTick, [1 2 3], ... XTickLabel, {A, B, C}) Eine zweite y-Achse f r 2D-Graken ermglicht der Befehl plotyy. Dabei wird u o die linke Achse den Daten (x1, y1), die rechte (x2, y2) farblich zugeordnet. plotyy (x1, y1, x2, y2) Synchrones Zoomen gleicher Achsen unterst tzt der Befehl linkaxes. Wird u anschlieend der Ausschnitt einer Achse gendert, ndert er sich automatisch a a in den verbundenen Achsen mit. Als Parameter werden ein Vektor der AchsenHandles und die zu verbindende Richtung (x, y, xy, off) ubergeben. h(1) = subplot (211) h(2) = subplot (212) linkaxes (h, x) Ausgefallene Anordnungen von Subplots lassen sich per Drag & Drop mit den Figure-Werkzeugen realisieren; der Aufruf erfolgt mit dem Figure-Button (siehe Abb. 3.3). Der anschlieend uber den Men punkt File/Generate M-File u erzeugte Code ist allerdings etwas umstndlich. Wer interaktives Arbeiten bea vorzugt, kann mit diesen Werkzeugen auch die oben stehenden Formatierungen vornehmen. Eine Legende iterativ zusammensetzen kann analog zum Beispiel auf Seite 38 ein Cell Array legendtext. Jeder Eintrag wird uber eine Laufvariable k angef gt u (man beachte die geschweiften Klammern { }) und schlielich mit legend gemeinsam ausgegeben: legendtext {k} = String; % fr jeden Eintrag u legend (legendtext) Ein Mehrzeiliger Text wird bei den Befehlen text, title, xlabel, ylabel und zlabel mit einem Cell Array aus Strings erzeugt. title ({Zeile 1; Zeile 2}) A Ausnahme ist wieder legend; dort sind mehrzeilige Eintrge nur mit dem L TEXa Befehl \newline innerhalb eines Strings mglich: o legend (Daten 1, Daten 21\newlineDaten 22) Ein Textblock in einem leeren Teil des Figure-Fensters kann mit einem Subplot erstellt werden, dessen Achsen unsichtbar geschaltet sind. Soweit nicht mit dem Befehl axis verndert, sind die x- und y-Achse jeweils von 0 ... 1 skaliert; die Posia tion (0, 1) stellt folglich die linke obere Ecke des Subplots dar. Diese Mglichkeit o

62

3 Eingabe und Ausgabe in MATLAB kann auch in GUIs genutzt werden, um dort Sonderzeichen und Formeln auszugeben. subplot (212) set (gca, Visible, off) text (0.0, 1.0, {Zeile 1; Zeile 2}) Neben den auf Seite 43 beschriebenen Beschriftungsmglichkeiten f r griechische o u A Buchstaben und einfache Formeln steht auch ein L TEX-Interpreter f r Griechiu sche Zeichen, Steuerzeichen sowie anspruchsvolle Formeln zur Verf gung. u Dabei muss eine etwas andere Syntax f r den Befehl text verwendet werden. u text (Position, [0.5 0.3], ... Interpreter, latex, ... String, $$\hat \alpha Test {ab} \cdot \frac{a}{b}$$) Sollen Datei-, Pfad- oder Variablennamen als Titel verwendet werden, m ssen darin enthaltene Sonderzeichen (z.B. Backslash \ und Unterstrich ) f r u u eine korrekte Ausgabe konvertiert werden (man beachte dabei die Reihenfolge!). title (strrep (strrep (name, \, \\), , \ )) Die Gre einer Figure beim Drucken wird uber die folgenden Einstelluno gen verndert. Als Einheiten stehen neben inches (Standard) auch normalized a (0 ... 1), centimeters und points zur Verf gung. u set (gcf, PaperUnits, normalized, ... PaperPosition, [links unten breite hhe]) o Das Papierformat kann wie folgt gendert werden. Es besteht die Wahl zwischen a portrait (Hochformat ist Standard) und landscape (Querformat). Die Gre des o Papiers kann z.B. mit usletter (Standard) sowie A0 ... A5 speziziert werden. set (gcf, PaperOrientation, landscape, ... PaperType, A4) Um Figures auf fortlaufende Seiten zu drucken, bestehen zwei Mglichkeio ten: Werden alle Figures in einem einzigen M-File erzeugt, kann uber den Mat lab-Men punkt File/Publish ein HTML-Dokument mit allen Figures erstellt weru den (siehe auch Seite 23). Alternativ bietet sich der Befehl print mit der Option -append an allerdings nur f r PostScript-Ausgabe. u print -fnummer -dps -append P S-Datei

3.8 Ubungsaufgaben

63

3.8
3.8.1

Ubungsaufgaben
Harmonisches Mittel

Erweitern Sie die Funktion mittelwerte zur Berechnung der Mittelwerte in Kap. 2.5 um die Berechnung des Harmonischen Mittels: H(x) = n 1 1 1 + + + x(1) x(2) x(n)

Erstellen Sie ein Matlab-Skript, bei dem uber einen Eingabedialog eine frei whlbare a Anzahl an Datenstzen eingegeben werden kann. Nach jeder Eingabe werden die Mita telwerte mit obiger Funktion berechnet. Wenn keine weitere Eingabe mehr erfolgt (d.h. leere Eingabe), wird die Anzahl der Datenstze ausgegeben und danach spaltenfrmig a o ihre Lnge mit den zugehrigen Mittelwerten. Der gesamte Dialog soll z.B. folgendera o maen aussehen:
Geben Geben Geben Geben Sie Sie Sie Sie einen einen einen einen Datenvektor Datenvektor Datenvektor Datenvektor ein: [1 2 3 4 5] ein: 1:10 ein: logspace (0, 2, 100) ein:

Es wurden die Mittelwerte fr 3 Datenstze berechnet. u a Arithmetisch Geometrisch Harmonisch Datensatz Datensatz Datensatz 1 mit 5 Werten: 2 mit 10 Werten: 3 mit 100 Werten: A = 3.00 A = 5.50 A = 21.79 G = 2.61 G = 4.53 G = 10.00 H = H = H = 2.19 3.41 4.59

3.8.2

Einschwingvorgang

In vielen technischen Systemen treten exponentiell abklingende Einschwingvorgnge a auf. Diese lassen sich z.B. durch die Skalierung einer Cosinus-Funktion mit einer Exponentialfunktion darstellen (F ist die Frequenz, T die Dmpfungs-Zeitkonstante): a h(t) = cos(2F t) exp(t/T ) F = 0.05 Hz T = 50 s

Zeichnen Sie diese Funktion sowie ihre H llkurven mit Matlab, wie sie in Abb. 3.15 u dargestellt ist! Beschriften Sie die Achsen, f gen Sie eine Legende ein und markieren u Sie die Dmpfungs-Zeitkonstante T ! a

3.8.3

Gau-Glocke
zi = exp ai 2

Plotten Sie eine Gau-Glockenkurve nach Abb. 3.16!

64
Exponentiell abklingende Schwingung 1 Schwingung obere Hllkurve untere Hllkurve

3 Eingabe und Ausgabe in MATLAB

GauGlocke

0.5 Amplitude

0
0.5

0.5 Zeitkonstante 1 0 50 100 Zeit [s] 150 200


0 4 2 0 2 4 2 0 2

Abb. 3.15: Einschwingvorgang

Abb. 3.16: Gau-Glocke

Erzeugen Sie dazu zunchst die Matrizen X und Y der Koordinaten und anschlieend a 2 eine Matrix A der Abstandsquadrate, f r deren Elemente ai = x2 + yi gilt. Testen Sie u i auch die Befehle mesh sowie pcolor!

3.8.4

Spirale und Doppelhelix

Schreiben Sie ein Skript, das eine sich verj ngende Spirale erzeugt, wie in Abb. 3.17 zu u sehen (Laufvariable t 1): Winkel: = 2t Radius: r = 1 t Hhe: h = ln(t) o

Verndern Sie nun das Skript, so dass es eine Doppelhelix erzeugt (siehe Abb. 3.18)! a Verwenden Sie dazu den Befehl surf!
Spirale 2 1.5 1 0.5 0 1 0 0 1 1
1 1 Doppelhelix 2 1.5 1 0.5 0 1

0 0

Abb. 3.17: Spirale

Abb. 3.18: Doppelhelix

3.8 Ubungsaufgaben

65

3.8.5

Funktion geradevek

Die in Ubung 2.7.3 programmierte Funktion gerade soll nun zur Funktion geradevek so erweitert werden, dass die Koordinaten x1, y1, x2 und y2 auch vektoriell sein d rfen, u also die Geradengleichungen und Werte f r jeweils mehrere Punkte P1 , P2 , ... Pn mit u n = length(x1) bestimmt werden knnen. So enthlt der Vektor x1 die x1 -Koordinaten o a aller Punkte, x2 die x2 -Koordinaten aller Punkte etc. Zustzlich soll der Aufruf der Funktion geradevek ohne Ubergabe von Parametern eine a Demonstration der Funktionalitt in Form der folgenden Bildschirmausgabe im Coma mand Window liefern sowie die in Abb. 3.19 gezeigte Figure erzeugen. Zur Ermittlung der Punkte mit Geraden unendlicher Steigung eignet sich der Befehl find.
=============================================== DEMO geradevek: =============================================== a) [m,y0] = geradevek(1,2,3,1) m = -0.5000 y0 = 2.5000 =============================================== b) [m,y0] = geradevek([1 1],[2 2],[3 2],[1 4]) m = -0.5000 2.0000 y0 = 2.5000 0 =============================================== c) [m,y0,r,phi] = geradevek([0 -2],[4 1]) Steigung m +/- unendlich fr Punkt(e) 1 ! u m = Inf -0.5000 y0 = 0 0 r = 4.0000 2.2361 phi = 90.0000 153.4349 ===============================================
a) geradevek(1,2,3,1) 4 2 0 0 P1 = (1,2) P = (3,1)
2

b) geradevek([1 1],[2 2],[3 2],[1 4]) 4 2 0 0 P (2,4)


4

c) geradevek([0 2],[4 1]) 4 2 0 P1 = (0,4)

P1 = P3 = (1,2) P = (3,1)
2

P = (2,1)
2

m = 0.5, y0 = 2.5 2 4

m = [0.5 2], y0 = [2.5 0] 2 4

m = [Inf 0.5], y0 = [0 0] 2 0 2

Abb. 3.19: Ausgabe der Online-Hilfe zur Funktion geradevek

Dierentialgleichungen in Matlab

Eine wesentliche Fhigkeit von Matlab ist die numerische Lsung von Dierentialgleia o chungen. Von dieser Fhigkeit macht auch die grasche Simulationsumgebung Simua link intensiv Gebrauch (Kap. 8). In Matlab wird unterschieden zwischen gewhno lichen Dierentialgleichungen (ODEs, Ordinary Dierential Equations), dierentialalgebraischen Gleichungen (DAEs, Dierential Algebraic Equations), Dierentialgleichungen mit Verzgerungen (DDEs, Delay Dierential Equations), impliziten Diereno tialgleichungen und partiellen Dierentialgleichungen (PDEs, Partial Dierential Equations). Die in Matlab enthaltenen numerischen Lsungsalgorithmen entsprechen dem o momentanen Stand der Forschung in der numerischen Mathematik und knnen f r eine o u Vielzahl von Systemen eingesetzt werden, die durch Dierentialgleichungen beschreibbar sind. Ausf hrliche Theorie zu Dierentialgleichungen und deren numerischer Lsung u o ndet sich in [2, 11, 21, 32, 35, 36, 50].

4.1

Anfangswertprobleme (ODEs, DAEs und DDEs)

Eine klassische Aufgabenstellung in den Ingenieurwissenschaften ist das Anfangswertproblem. Gegeben ist ein dynamisches System mit eindeutig denierten Anfangszustnden, und man mchte den zeitlichen Verlauf der Zustandsgren uber einen a o o vorgegebenen Zeitraum berechnen. Bez glich Struktur und Lsbarkeit kann eine Unu o terscheidung in gewhnliche Dierentialgleichungen (ODEs), dierential-algebraische o Gleichungen (DAEs), Dierentialgleichungen mit Verzgerungen (DDEs) und implizio ten Dierentialgleichungen getroen werden.

4.1.1

Gewohnliche Dierentialgleichungen (ODEs)

Mathematisch lsst sich eine gewhnliche Dierentialgleichung mit dem Zustandsvektor a o x, dem Zeitargument t, einer beliebigen vektorwertigen Funktion f und dem Anfangszustand x0 zum Zeitpunkt t0 als Dierentialgleichungssystem erster Ordnung gem a Gleichung (4.1) darstellen. x = f (t, x) x(t0 ) = x0 (4.1)

68

4 Dierentialgleichungen in MATLAB

Bei einem System n-ter Ordnung kann (4.1) mit xi0 als Anfangswert von Gleichung i ausgeschrieben werden als: x1 = f1 (t, x1 (t), x2 (t), . . . xn (t)) . . . xn = fn (t, x1 (t), x2 (t), . . . xn (t)) xn (t0 ) = xn0 x1 (t0 ) = x10 (4.2)

Oftmals liegt das betrachtete dynamische System nicht als System von n Dierentialgleichungen, sondern als Dierentialgleichung n-ter Ordnung vor. Dies stellt keine Einschrnkung dar, vielmehr kann jede gewhnliche Dierentialgleichung n-ter Orda o nung in ein System mit n Dierentialgleichungen erster Ordnung umgewandelt werden. Die Dierentialgleichung x(n) = f t, x, x, . . . , x(n1) (4.3)

kann durch die Substitution x1 = x, x2 = x etc. in die geforderte Form (4.1) umgewan delt werden. Die Anfangsbedingungen m ssen entsprechend umgerechnet werden. u x1 = x2 x2 = x3 . . . xn1 = xn xn = f (t, x1 , x2 , . . . , xn ) Zur Lsung von Dierentialgleichungen gem (4.1) stehen in Matlab die in Tab. 4.1 o a zusammengestellten Algorithmen zur Verf gung [39]. Wichtige Grundtypen von Inteu grationsalgorithmen werden in Kap. 8.7.1 genauer erlutert. Eine Dierentialgleichung a wird als steif (sti ) bezeichnet, wenn das charakteristische Polynom gleichzeitig sehr kleine und sehr groe Nullstellen besitzt oder wenn Schaltvorgnge ber cksichtigt wera u den m ssen. u Bei der Wahl der Integrationsverfahren hat sich folgendes Vorgehen bewhrt: Zuerst a whlt man eines der drei ersten Verfahren in Tab. 4.1. Erscheint das Ergebnis nicht plaua sibel, so werden die restlichen Verfahren ausprobiert. Der Solver ode45 ist f r sehr viele u Systeme geeignet und kann somit immer in einem ersten Versuch verwendet werden. Genauere Angaben zu den zugrunde liegenden Algorithmen, der automatischen Schrittweitensteuerung und Anwendungsempfehlungen knnen [33, 39] entnommen werden. o Der einfachste Aufruf eines Solvers erfolgt durch den Befehl
[t, x] = solver(@xpunkt, tspan, x0)

(4.4)

wobei solver durch ein Verfahren aus Tab. 4.1 zu ersetzen ist (z.B. ode45). @xpunkt ist das Function Handle der Matlab-Funktion xpunkt (siehe Kap. 2.5), die als Spaltenvektor die ersten Ableitungen des Dierentialgleichungssystems zur ckliefert. xpunkt u

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)

69

Tab. 4.1: Lsungsalgorithmen (Solver) fr ODEs und DAEs o u

Solver ode45 ode23 ode113 ode15s ode23s ode23t ode23tb ode15i

Problembeschreibung Nicht steife Dierentialgleichungen Nicht steife Dierentialgleichungen Nicht steife Dierentialgleichungen Steife Dierentialgleichungen und DAEs Steife Dierentialgleichungen Mig steife Dierentialgleichungen und DAEs a Steife Dierentialgleichungen Implizite Dierentialgleichungen

Verfahren Runge-Kutta Runge-Kutta Adams NDFs (BDFs) Rosenbrock Trapez-Regel TR-BDF2 BDFs

hat f r ein System dritter Ordnung die Form: u


function dxdt = xpunkt(t, x) dxdt = [...; ...; ...];

Die Ubergabe einer Funktion als Handle ist die in Matlab bevorzugte Methode zur Ubergabe von Funktionen an andere Funktionen. Ein Handle enthlt die gesamte Infora mation, die Matlab zum Ausf hren der Funktion mittels feval bentigt. Der Solver u o ruft die Funktion xpunkt f r verschiedene Zeitpunkte t und mit dem jeweils aktuellen u Zustandsvektor x auf, wodurch die Ableitungen am aktuellen Lsungspunkt berechnet o werden. Das Argument tspan bezeichnet das Zeitintervall der gew nschten Lsung. u o Ist tspan ein Vektor aus zwei Elementen, so ist das erste Element der Startzeitpunkt und das zweite der Endzeitpunkt der Integration. Soll die Lsung zu fest vorgegebenen o Zeitpunkten bestimmt werden, so kann f r tspan eine Folge von auf- oder absteigenu den Zeitwerten angegeben werden. Die Auswertung im R ckgabeparameter t erfolgt u dann genau zu diesen Zeitpunkten. Die interne variable Integrationsschrittweite bzw. die Rechengenauigkeit wird durch tspan nicht beeinusst. Die Lsungswerte zu den o gew nschten Zeitpunkten werden durch Interpolation der von Matlab intern verwenu deten Zeitschritte berechnet. x0 ist der Spaltenvektor der Anfangswerte der Lsungso trajektorie. Der R ckgabewert t ist ein Spaltenvektor, der die Zeitpunkte aller berechneten Lsungsu o werte enthlt. Die R ckgabematrix x beinhaltet die zu den Zeitpunkten gehrenden a u o Lsungsvektoren, wobei jede Zeile von x der entsprechenden Zeile von t zugeordnet ist. o Beim Aufruf eines Solvers mit nur einem R ckgabewert wird die Lsung in einer Struku o tur gespeichert.
loesung = solver(@xpunkt, tspan, x0)

Dabei werden immer die Felder loesung.x, loesung.y und loesung.solver generiert. In loesung.x werden die vom Solver gewhlten Zeitschritte als Zeilenvektor gespeia chert. Das Feld loesung.y enthlt die Lsungsvektoren zu den Zeitpunkten loesung.x a o als Spaltenvektoren, so dass sich im Allgemeinen eine Matrix f r loesung.y ergibt. Das u Feld loesung.solver enthlt zur Information den Namen des zur Lsung verwendeten a o

70

4 Dierentialgleichungen in MATLAB

Solvers als String (z.B. ode45). Da die Integrationsschrittweite vom Solver aufgrund von Toleranzen selbst gewhlt wird, kann die Anzahl der Schritte nie genau vorherbestimmt a werden. Wenn hingegen die Auswertung der Lsung einer Dierentialgleichung zu genau o festgelegten Zeitpunkten bentigt wird, kann dies durch das Kommando deval erfolgen. o Dazu muss die Lsung in einer Struktur gespeichert worden sein. Aufgrund von zustzo a lichen Informationen im Feld idata werden evtl. bentigte Zwischenwerte interpoliert. o Dies ist hnlich wie die Angabe eines Zeitpunkte-Vektors tspan im Solver, nur dass hier a die gesamte Lsung in einer Struktur gespeichert wird und spter zu unterschiedlichen o a Zeitpunkten ausgewertet werden kann. Der Aufruf von deval lautet:
[x, xp] = deval(loesung, tint, idx)

Der Zeilenvektor tint enthlt die gew nschten Auswertezeitpunkte, und der Vektor a u idx gibt die Indizes der Elemente der Lsungstrajektorie an, die in den Lsungsvektor o o x ubernommen werden sollen. Die Angabe von idx im Aufruf von deval kann auch entfallen, was dazu f hrt, dass alle Elemente der Lsung nach x ubernommen werden. u o Die Spalten von x stellen die Lsung der Dierentialgleichung zu den Zeitpunkten tint o dar, die Spalten von xp stellen die erste Ableitung der polynomialen Interpolation der Lsung dar. Der R ckgabewert xp kann auch entfallen. o u Um eine bereits berechnete Lsung eines Anfangswertproblems auf ein lngeres Intervall o a auszudehnen, kann der Befehl odextend genutzt werden. Dabei wird der Endwert des urspr nglichen Lsungsintervalls als Anfangswert f r die weitere Integration der Lsung u o u o verwendet. Der Aufruf lautet:
loesung_ext = odextend(loesung, @xpunkt, tend)

Die Einstellungen f r Solver und Optionen werden der Struktur loesung entnommen. u F r die Fortsetzung der Integration knnen auch andere Anfangswerte x0_ext benutzt u o werden. Die Integration erfolgt dann mit den Anfangswerten x0_ext. Der Aufruf lautet:
loesung_ext = odextend(loesung, @xpunkt, tend, x0_ext)

Angetriebenes Pendel: Die numerischen Lsungsalgorithmen f r Dierentialgleio u chungen werden nun an einem einfachen Beispiel demonstriert. Abb. 4.1 zeigt ein idealisiertes Pendel. Am Ende eines masselosen Seils bendet sich die Punktmasse m, die Bewegungen nur in einer Ebene ausf hren kann. Auf die Masse wirkt die Beschleuniu gungskraft FB aufgrund der Gravitation, die Reibkraft FReib und die von auen aufu gebrachte Antriebskraft FA (t). Die Reibkraft nimmt Werte zwischen FR f r positive Winkelgeschwindigkeiten und +FR f r negative Winkelgeschwindigkeiten an. Die u Gleichungen des Systems lauten: FB = m g sin FReib = 2 FR arctan(10) (4.5) (4.6) (4.7)

a = l

Hierbei ist a der Betrag der Beschleunigung entlang der Kreistangente, ist die Winkel

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)

71

FA a FB j FReib m G
Abb. 4.1: Angetriebenes Pendel

beschleunigung und g die Erdbeschleunigung. Das Krftegleichgewicht am Massepunkt a ergibt die Dierentialgleichung des reibungsbehafteten Pendels. FR 2 FA (t) g arctan(10) (4.8) = sin l ml ml Substituiert man x1 = und x2 = , so erhlt man das zugehrige Dierentialglei a o chungssystem erster Ordnung: x1 = x2 g FR 2 FA (t) arctan(10x2 ) x2 = sin x1 l ml ml Mittels des Solvers ode45 soll die Lsung dieser Dierentialgleichung f r die Anregung o u FA (t) = 30 sin(2 0.1 t) und die Anfangswerte 0 = 0.26 (=15 ) und 0 = 0 bestimmt werden. Zuerst wird die Funktion zur Berechnung des Vektors der Ableitungen aufgestellt.
% xpunkt_pendel.m function xpunkt = xpunkt_pendel(t,x) % Geometrie, Masse, Reibung l = 5; m = 30; g = 9.81; Fr = 4; % Antriebskraft Fa = 30*sin(2*pi*0.1*t); % Berechnung von xpunkt xpunkt = [x(2); -g/l*sin(x(1)) - Fr*2/pi*atan(10*x(2))/m/l - Fa/m/l];

(4.9)

In den folgenden Programmzeilen werden zuerst die Anfangswerte und die Integrationsdauer gesetzt, anschlieend die Integration mittels ode45 durchgef hrt und schlielich u

72

4 Dierentialgleichungen in MATLAB

das Ergebnis in einer Grak dargestellt. Dazu wird die Lsung zu 200 quidistanten o a Zeitpunkten zwischen 0 und 40 s ausgewertet.
% dgl_pendel.m % Anfangswerte, Zeitspanne x0 = [15/360*2*pi; 0]; tspan = [0 40]; % Integration der DGL loesung = ode45(@xpunkt_pendel, tspan, x0); % grafische Ausgabe von phi und phipunkt tint = linspace(tspan(1), tspan(2), 200); x = deval(loesung, tint); subplot(211) plot(tint,x(1,:),tint,x(2,:))

Die Funktion xpunkt_pendel wird an ode45 als Function Handle (@xpunkt_pendel, o siehe Kap. 2.5) ubergeben.1) Die Parameter l, m und FR knnen auch erst beim Aufruf von ode45 an xpunkt_pendel ubergeben werden. Die Funktion xpunkt_pendel muss dann folgendermaen abgendert werden: a
% xpunkt_pendel2.m function xpunkt = xpunkt_pendel2(t,x,l,m,Fr) g = 9.81; % Antriebskraft Fa = 30*sin(2*pi*0.1*t); % Berechnung von xpunkt xpunkt = [x(2); -g/l*sin(x(1)) - Fr*2/pi*atan(10*x(2))/m/l - Fa/m/l];

Der Aufruf von ode45 lautet dann:


% dgl_pendel2.m % Anfangswerte, Zeitspanne x0 = [15/360*2*pi; 0]; tspan = [0 40]; % Geometrie, Masse, Reibung l = 5; m = 30; Fr = 4; % Integration der DGL loesung = ode45(@xpunkt_pendel2, tspan, x0, [], l, m, Fr);

Die Parameter l, m und Fr werden von ode45 an die Funktion der Ableitungen (xpunkt_pendel) weitergereicht. Der Platzhalter [] ist f r Optionen reserviert, die u im Anschluss an dieses Beispiel besprochen werden. Der Lsungsverlauf uber eine Zeitspanne von 40 s ist in Abb. 4.2 dargestellt. o Unter Ber cksichtigung von Optionseinstellungen lauten die allgemeinen Aufrufe der u verschiedenen Solver:
[t, x] = solver(@xpunkt, tspan, x0, options, p1, p2, ...); loesung = solver(@xpunkt, tspan, x0, options, p1, p2, ...);
1)

Eine weitere Alternative sind Inline-Objekte, siehe Kap. 7.1.

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)


Pendelbewegung 0.4 0.2 0 0.2 0.4 0 5 10 15 20 Zeit [s] 25 30 phi [rad] phipunkt [rad/s] 35 40

73

Abb. 4.2: Lsungsverlauf des angetriebenen Pendels o

Die Parameter p1, p2, ... werden an die Funktion xpunkt und an alle evtl. in den Optionen denierten Funktionen als zustzliche Argumente ubergeben. Mit der Struktur a options kann das Verhalten der Solver gesteuert werden. Eine Struktur mit Standardvorbelegungen wird durch das Kommando odeset erzeugt.
>> odeset AbsTol: RelTol: NormControl: NonNegative: OutputFcn: OutputSel: Refine: Stats: InitialStep: MaxStep: BDF: MaxOrder: Jacobian: JPattern: Vectorized: Mass: MStateDependence: MvPattern: MassSingular: InitialSlope: Events: [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ positive scalar or vector {1e-6} ] positive scalar {1e-3} ] on | {off} ] vector of integers ] function_handle ] vector of integers ] positive integer ] on | {off} ] positive scalar ] positive scalar ] on | {off} ] 1 | 2 | 3 | 4 | {5} ] matrix | function_handle ] sparse matrix ] on | {off} ] matrix | function_handle ] none | {weak} | strong ] sparse matrix ] yes | no | {maybe} ] vector ] function_handle ]

In eckigen Klammern werden die mglichen Werte bzw. in geschweiften Klammern die o Standardwerte angezeigt. Eine neue Options-Struktur mit einzelnen vernderten Werten a wird durch den Befehl odeset generiert.
options = odeset(name1, wert1, name2, wert2, ...);

Die Namen stehen f r die mglichen Felder der Options-Struktur, denen die gew nschu o u ten Werte zugeordnet werden knnen. Um z.B. das Feld RelTol auf den Wert 106 zu o setzen, ist folgendes Kommando ntig: o

74

4 Dierentialgleichungen in MATLAB

options = odeset(RelTol, 1e-6);

Wenn in einer bestehenden Options-Struktur einzelne Felder abgendert werden sollen, a so geschieht dies durch die folgende Matlab-Eingabe, wobei alle nicht vernderten a Felder ihre vorherigen Werte behalten:
options = odeset(options, name1, wert1, name2, wert2, ...);

Die Abfrage einzelner Felder einer Options-Struktur kann entweder mit dem PunktOperator (z.B. options.RelTol) oder mit dem speziellen Befehl odeget erfolgen. Wenn das Feld name der Struktur options in die Variable opt gespeichert werden soll, so geschieht dies durch:
opt = odeget(options, name)

Die Felder einer Options-Struktur lassen sich in Kategorien einteilen, von denen die wichtigsten kurz besprochen werden. Tab. 4.2 zeigt die Einteilung gem [39]. a
Tab. 4.2: ODE-Optionen: Einteilung in Kategorien

Kategorie Toleranzen Ausgabe des Solvers Jacobi-Matrix Schrittweite Masse-Matrix und DAEs Event-Erkennung speziell f r ode15s u

Feldname RelTol, AbsTol, NormControl OutputFcn, OutputSel, Refine, Stats, NonNegative Jacobian, JPattern, Vectorized InitialStep, MaxStep Mass, MStateDependence, MvPattern, MassSingular, InitialSlope Events MaxOrder, BDF

Einige Optionen sind von ihrem Namen her selbsterklrend: RelTol und AbsTol bea zeichnen die relative bzw. absolute Toleranz des Integrationsalgorithmus [41]. Mit diesen Optionen wird die Genauigkeit der Lsungstrajektorie gesteuert. InitialStep und o MaxStep kennzeichnen die Start- bzw. maximale Integrationsschrittweite. Die Letztere kann unter anderem daf r verwendet werden, dass der Solver bei periodischen u Lsungen nicht uber ganze Perioden hinwegspringt, wenn die maximale Schrittweite auf o einen Bruchteil der zu erwartenden Periode eingestellt wird. Die Option NonNegative setzt die Nebenbedingung, dass die in NonNegative angegebenen Indizes des Lsungso vektors grer oder gleich null sein m ssen. Diese Option ist nicht f r alle Solver o u u verf gbar und sollte nur dann verwendet werden, wenn der Integrator ansonsten keine u Lsung ndet. o Mit den Optionen zur Ausgabe des Solvers lsst sich die Anzahl der Ausgabewera te und der Aufruf zustzlicher Funktionen bei jedem Integrationsschritt steuern. Die a Option Refine kann auf einen beliebigen ganzzahligen Wert grer 1 gesetzt werden. o Dadurch erhht sich die Anzahl der Ausgabewerte (t,x) um diesen Faktor, wobei die o

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)

75

zustzlichen Zwischenwerte nicht durch Integrationsschritte, sondern durch Interpoa lation aus benachbarten Lsungswerten erzeugt werden. Dies dient meist dazu, den o Lsungsverlauf glatter darstellen zu knnen. Wenn die Option Stats auf on gesetzt o o wird, werden neben den R ckgabewerten der Solver-Funktion statistische Informationen u zur Lsungsberechnung, wie z.B. Anzahl der Funktionsauswertungen, Anzahl fehlgeo schlagener Schritte, Anzahl erfolgreicher Schritte etc., geliefert. Diese Information kann f r Diagnosezwecke und Rechenzeitabschtzungen wichtige Anhaltspunkte liefern. Die u a Option OutputSel kann mit einem Vektor belegt werden, der die Indizes derjenigen Zustandsgren angibt, die in den Lsungsvektor x bzw. loesung.x ubernommen werden. o o Bei groen Systemen kann dadurch Speicherplatz eingespart werden. Die in der Option OutputFcn angegebene Funktion wird bei jedem Integrationsschritt aufgerufen. Durch Angabe von
options = odeset(OutputFcn, @myoutput);

wird die Funktion myoutput mit den Argumenten t, x und flag aufgerufen. Die Funktion muss dabei folgendermaen deniert sein:
function status = myoutput(t, x, flag) % hier folgen Aktionen der Output-Funktion % und die Rckgabe von status u

Vor dem Start der Integration wird myoutput mit dem Flag init aufgerufen. Dies ermglicht vor der Integration, Initialisierungen in der Output-Funktion durchzuf hren. o u Whrend der Integration wird die Output-Funktion ohne Flag, nur mit zwei Argumena ten aufgerufen (myoutput(t, x)) und sie f hrt ihre eigentliche Aufgabe durch. Typische u Aufgaben f r eine Output-Funktion sind grasche Ausgaben, Abspeichern in Dateiu en oder zustzliche Uberwachungen. Whrend der Integration muss der R ckgabewert a a u status der Output-Funktion einen Wert von 0 oder 1 annehmen. Bei einem Status von 1 wird die Integration angehalten. Dies ist ein eleganter Weg, um z.B. uber ein GUI (siehe Kap. 3.6) eine Stopp-Schaltche zu implementieren. Nach Beendigung der Integration a wird die Output-Funktion einmalig mit dem Flag done aufgerufen. Dies dient zum Lschen von Dateien oder Variablen, zur Durchf hrung von kompletten Bildschirmo u ausgaben etc. In Matlab sind bereits vier vorgefertigte Output-Funktionen vorhanden, die direkt verwendet werden knnen oder als Basis f r eigene Funktionen dienen. o u odeplot liefert eine grasche Ausgabe der Zustandsvariablen uber der Zeit, odephas2 und odephas3 generieren zwei- bzw. dreidimensionale Phasenplots und odeprint listet die Lsung im Command Window auf. o Die Option OutputSel ist ein Vektor aus Indizes, der angibt, welche Komponenten des Lsungsvektors an die Output-Funktion ubergeben werden sollen. Wenn mittels o odeplot nur die zweite und vierte Komponente des Lsungvektors geplottet werden o soll, so geschieht dies durch die folgende Optionseinstellung:
options = odeset(OutputFcn, @odeplot, OutputSel, [2 4]);

In einem Beispiel soll die Funktionsweise von odephas2 als Output-Funktion kurz erlutert werden. Es wird die lineare homogene Dierentialgleichung zweiter Ordnung aus a

76

4 Dierentialgleichungen in MATLAB

Gleichung (4.10) mit dem Anfangswert x0 = [1 1]T betrachtet. x =Ax = 0.1 1 x 20 1 (4.10)

Die folgenden Matlab-Kommandos denieren die Funktion der Ableitungen, wobei die Systemmatrix A vom Solver als Parameter mit ubergeben wird.
% odeplot_xpunkt.m function xpunkt = odeplot_xpunkt(t, x, A) xpunkt = A * x;

In den nachfolgenden Zeilen wird die Dierentialgleichung in der Zeitspanne von 0 bis 10 s mittels ode45 gelst und der Phasenplot in Abb. 4.3 mit der Output-Funktion o odephas2 generiert, wobei ode45 mit zwei R ckgabewerten aufgerufen wurde. u
% odeplot_bsp.m A = [-0.1 1; -20 -1]; x0 = [1; 1]; options = odeset(OutputFcn, @odephas2); [t, x] = ode45(@odeplot_xpunkt, [0 10], x0, options, A);
Phasenkurve
3

x
1 2 3

4 0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

1.2

Abb. 4.3: Phasenplot der Dierentialgleichung (4.10) erzeugt mit odephas2

x1

Die Solver f r steife Dierentialgleichungen (ode15s, ode23s, ode23t, ode23tb) aru beiten ezienter, wenn ihnen zustzliche Informationen uber die Jacobi-Matrix der a rechten Seite von Gleichung (4.1) zur Verf gung gestellt werden. Die Jacobi-Matrix u wird f r die numerische Integration der genannten Algorithmen immer bentigt, wird u o sie jedoch nicht explizit speziziert, so wird sie selbst numerisch durch nite Dierenzen berechnet, was die Anzahl der Funktionsauswertungen und damit die Rechenzeit erhht. Die Jacobi-Matrix ist deniert als: o f f 1 1 x1 x2 f (t, x) f2 f2 = x1 x2 (4.11) x . . .. . . . . . Die Berechnung der Jacobi-Matrix erfolgt in einer Funktion (z.B. function J = Fjacobi(t, x)), die in der Option Jacobian angegeben wird.

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)

77

options = odeset(Jacobian, @Fjacobi);

Wenn die Jacobi-Matrix konstant ist (z.B. bei linearen Dierentialgleichungen), kann in der Option Jacobian auch direkt die konstante Matrix speziziert werden. Als Beispiel f r die Verwendung der Jacobi-Matrix soll wieder das Pendel aus Gleiu chung (4.8) dienen, auch wenn es sich tatschlich nicht um ein steifes System handelt. a F r die laufende Berechnung der Jacobi-Matrix dient die Funktion Fjacobi, wobei die u Parameter l, m und Fr beim Funktionsaufruf ubergeben werden.
% Fjacobi.m function J = Fjacobi(t, x, l, m, Fr) % Erdbeschleunigung g = 9.81; % Jacobi-Matrix J = [0 1; -g/l*cos(x(1)) -Fr*2/pi*10/(1+(10*x(2))^2)/m/l];

Zur Integration wird nun ein Solver f r steife Systeme verwendet (ode15s) und die u Funktion zur Berechnung der Jacobi-Matrix in der Option Jacobian bekannt gemacht. Zur Berechnung der rechten Seite der Dierentialgleichung dient die Funktion xpunkt_pendel2 auf Seite 72, die eine Parameter bergabe zulsst. u a
% dgl_pendel_jacobi.m % Anfangswerte, Zeitspanne x0 = [15/360*2*pi; 0]; tspan = [0 40]; % Geometrie, Masse, Reibung l = 5; m = 30; Fr = 4; options = odeset(Jacobian, @Fjacobi); % Integration der DGL [t x] = ode15s(@xpunkt_pendel2, tspan, x0, options, l, m, Fr);

Das Ergebnis der Lsungstrajektorie ist nat rlich identisch mit der Darstellung in o u Abb. 4.2. Event-Behandlung: In vielen technischen Systemen spielen Schaltvorgnge oder Una stetigkeiten eine wichtige Rolle. Dabei kann es sich um einfache unstetige funktionale Zusammenhnge oder auch um Strukturvariabilitten dynamischer Systeme handeln. a a Typische Beispiele sind Haftreibungsvorgnge, Stovorgnge oder das Auftrennen und a a Verbinden von Teilsystemen. Die numerischen Integrationsverfahren d rfen uber solche u Unstetigkeitsstellen nicht einfach hinwegintegrieren, da sich das numerische Ergebnis im Allgemeinen sehr deutlich von der Realitt unterscheiden wird. Die Solver in Mata lab sind zu diesem Zweck mit Mechanismen zur Detektion solcher Unstetigkeiten, so genannter Events, ausgestattet. Die Solver sind in der Lage, whrend der Integration a die Schrittweite so anzupassen, dass Nullstellen einer Funktion exakt mit einem Integrationsschritt getroen werden. Wenn die Nullstelle erreicht wird, kann die Integration entweder ganz normal fortgesetzt oder angehalten werden. Die Option Events wird benutzt, um die Funktion anzugeben, deren Nullstellen detektiert werden sollen. Die Funktion muss die folgende Form besitzen:
function [value, isterminal, direction] = ereignis(t, x, p1, p2, ...)

78

4 Dierentialgleichungen in MATLAB

Die Funktion ereignis wird mit dem aktuellen Zeitpunkt t, dem Zustandsvektor x und evtl. weiteren Parametern p1, p2, ... aufgerufen. Die R ckgabewerte haben die folgende u Bedeutung: value ist ein Vektor, dessen Nulldurchgnge vom Solver uberwacht werden. Die a Integrationsschrittweite wird so variiert, dass die Nulldurchgnge exakt getroen a werden. Das Element value(i) wird als i-tes Ereignis bezeichnet. isterminal(i)=1 bedeutet, dass bei einem Nulldurchgang von value(i) die numerische Integration zu beenden ist. Wenn isterminal(i)=0 ist, wird die Integration nicht unterbrochen. direction(i)=0 heit, dass alle Nulldurchgnge von value(i) zu detektieren a sind; bei direction(i)=1 werden nur Nulldurchgnge mit positiver Steigung bzw. a bei direction(i)=-1 nur Nulldurchgnge mit negativer Steigung von value(i) a detektiert. Die Uberwachung von Ereignissen wird durch die Option Events aktiviert. Zur Uberwachung der Funktion ereignis ist folgende Option notwendig:
options = odeset(Events, @ereignis);

Die Verwendung der Option Events veranlasst den Solver, weitere R ckgabewerte zu u liefern. Die allgemeinen Aufrufe der Solver lauten nun:
[t, x, te, xe, ie] = solver(@xpunkt, tspan, x0, options, p1, p2, ...); loesung = solver(@xpunkt, tspan, x0, options, p1, p2, ...);

Im Spaltenvektor te werden die Zeitpunkte des Auftretens eines Events aus der Funktion ereignis zur ckgegeben. Die Zeilen von xe enthalten den Lsungsvektor zu diesen u o Zeitpunkten. Die Werte in ie geben jeweils die Nummer der zu den Zeitpunkten te aufgetretenen Ereignisse an. Diese Nummer ist der Index des Elements value(ie) der Ereignisfunktion, bei der ein Nulldurchgang stattfand. Beim Aufruf eines Solvers mit nur einem R ckgabewert werden bei aktivierter Event-Uberwachung die zustzlichen u a Felder loesung.xe, loesung.ye und loesung.ie angelegt. In loesung.xe werden die Zeitpunkte von aufgetretenen Events abgelegt, ye enthlt die zugehrigen Lsungsveka o o toren und loesung.ie enthlt die Indizes der detektierten Events. a Zur Veranschaulichung der Mglichkeiten der Event-Lokalisierung wird wieder das Peno del aus Abb. 4.1 betrachtet. Die folgenden Modikationen in der Problemstellung sind jedoch zu beachten: Das Pendel wird nicht angetrieben, sondern nur aufgrund der Gewichtskraft beschleunigt. In der Stellung = 0 bendet sich eine starre Wand, an der das Pendel einen vollkommen elastischen Sto ohne Energieverlust vollf hrt. Setzt man u a u in Gleichung (4.9) die Antriebskraft FA auf null, so erhlt man f r > 0 das Dierentialgleichungssystem (4.12) zwischen zwei Sten. Es gilt wieder die Substitution x1 = o und x2 = . x1 = x2 g FR 2 arctan(10x2 ) x2 = sin x1 l ml (4.12)

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)

79

Wenn das Pendel aus der Anfangslage 0 = 0.26 (=15 ) losgelassen wird, gilt zunchst a Gleichung (4.12), bis die Lage = 0 erreicht ist. Dieses Ereignis wird detektiert, die Aufprallgeschwindigkeit wird ausgelesen, und die Integration wird angehalten. Der elastische Sto wird dargestellt, indem f r den nchsten Abschnitt (bis zum nchsten Sto) u a a der Anfangswert der Winkelgeschwindigkeit auf die negative Aufprallgeschwindigkeit gesetzt wird. Bis zum nchsten Sto gilt wieder Gleichung (4.12). Dies wird so lange a fortgesetzt, bis die Endzeit der Integration erreicht ist. Die zu detektierenden Ereignisse sind demnach die mit negativer Steigung erfolgenden Nulldurchgnge von . Die eina zelnen Abschnitte der Integration werden am Ende zu einer Gesamtlsungstrajektorie o zusammengesetzt. Die beschriebene Vorgehensweise wird in den nachfolgenden Matlab-Funktionen realisiert. Zunchst wird die Dierentialgleichung (4.12) in der Funktion xpunkt pendelwand a abgebildet.
% xpunkt_pendelwand.m function xpunkt = xpunkt_pendelwand(t,x,l,m,g,Fr) % Berechnung von xpunkt xpunkt = [x(2); -g/l*sin(x(1)) - Fr*2/pi*atan(10*x(2))/m/l];

Die Ereignisfunktion ereignis muss Nulldurchgnge mit negativer Steigung von = x1 a feststellen und die Integration abbrechen.
% ereignis.m function [value, isterminal, direction] = ereignis(t,x,l,m,g,Fr) value = x(1); % Nulldurchgang von phi detektieren isterminal = 1; % Integration stoppen direction = -1; % nur Nulldurchgang mit negativer Steigung detektieren

Die Funktion ereignis bentigt die Argumente l, m, g und Fr, da sie vom Solver auch o an die Ereignisfunktion ubergeben werden. Die Argumente m ssen in der Denition voru handen sein, auch wenn sie in der Funktion nicht ausgewertet werden. Die eigentlichen Kommandos zur Lsung zeigt die Datei dgl_pendelwand.m. o
% dgl_pendelwand.m l = 5; m = 30; g = 9.81; Fr = 4; % Geometrie, Masse, Reibung % Anfangswerte, Zeitspanne, Optionen x0 = [15/360*2*pi; 0]; tend = 20; tspan = [0 tend]; options = odeset(Events,@ereignis); t = []; x = []; % Variablen zur Akkumulation von t und x while 1 % Beginn Schleife % Lsung bis zum ersten Ereignis o [tout xout] = ode45(@xpunkt_pendelwand,tspan,x0,options,l,m,g,Fr); n = length(tout); t = [t; tout]; % Akkumulation von t und x x = [x; xout]; x0 = [0; -xout(n,2)]; % neue Anfangswerte setzen tstart = tout(n); % neuen Startzeitpunkt setzen tspan = [tstart tend]; if tstart>=tend % Abbruch, wenn Endzeit erreicht break end end

80

4 Dierentialgleichungen in MATLAB

% grafische Ausgabe von phi und phipunkt phi = x(:,1); phipunkt = x(:,2); subplot(211); plot(t,phi,t,phipunkt)

Die Lsungstrajektorie zwischen zwei Ereignissen wird in den Variablen tout und xout o zwischengespeichert und in den Variablen t und x akkumuliert. Mit dem Kommando options = odeset(Events,@ereignis) wird die Funktion ereignis als Ereignisfunktion bekannt gemacht. In einer while-Schleife werden die Lsungen zwischen o zwei Ereignissen berechnet, die Einzeltrajektorien akkumuliert, neue Anfangswerte und Startzeiten f r den nchsten Abschnitt gesetzt und bei Uberschreiten der Endzeit die u a Schleife abgebrochen. Schlielich wird das zusammengesetzte Ergebnis noch grasch dargestellt. Der Lsungsverlauf f r und ist in Abb. 4.4 dargestellt. Deutlich sind o u die Ereignisse als Knicke in bzw. Spr nge in zu erkennen. Eine weitere Anwendung u der Ereignisdetektion ist in [13] am Beispiel eines springenden Balls angegeben. Ein komplexeres Beispiel kann [39] entnommen werden.
Pendelbewegung 0.4 0.2 0 0.2 0.4 0 2 4 6 8 10 Zeit [s] 12 14 16 phi [rad] phipunkt [rad/s] 18 20

Abb. 4.4: Lsungsverlauf des Pendels mit elastischem Sto o

4.1.2

Dierential-algebraische Gleichungen (DAEs)

Hug lassen sich Dierentialgleichungen der Mechanik durch eine Dierentialgleichung a mit Masse-Matrix gem Gleichung (4.13) darstellen. a M(t, x) x = f (t, x) mit x(t0 ) = x0 (4.13)

In der zeit- und zustandsabhngigen Masse-Matrix sind typischerweise Massen und a Trgheitsmomente des mechanischen Systems enthalten. Wenn die Masse-Matrix nicht a singulr ist, kann Gleichung (4.13) in Gleichung (4.14) umgeformt werden und es exisa tiert eine Lsung f r alle Anfangsbedingungen t0 und x0 . o u x = M1 (t, x) f (t, x) mit x(t0 ) = x0 (4.14)

Bei nicht singulrer Masse-Matrix sind alle Solver in der Lage, ein System gem Gleia a chung (4.13) zu lsen. F r Systeme mit konstanter Masse-Matrix wird die Option Mass o u aus Tab. 4.2 direkt auf diese Matrix gesetzt. Bei zeit- und zustandsabhngigen Massea Matrizen enthlt diese Option einen Zeiger auf eine Funktion mass(t, x), die f r die a u Ermittlung der Masse-Matrix sorgt.

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)

81

Bei singulrer Matrix M(t, x) stellt Gleichung (4.13) eine dierential-algebraische a Gleichung (kurz: DAE) dar, die nur dann eine Lsung besitzt, wenn der Anfangso wert x0 konsistent mit der DAE ist. Das bedeutet, es muss eine Anfangssteilheit x(t0 ) existieren, so dass M(t0 , x0 ) x(t0 ) = f (t0 , x0 ) ist. Bei nicht konsistenter Anfangsbedingung versucht der Solver in deren Nhe eine konsistente zu nden a und das Problem mit diesem neuen Anfangswert zu lsen. DAEs knnen nur mit o o den Solvern ode15s und ode23t behandelt werden. Der Solver ode23s kann nur DAEs mit konstanter Masse-Matrix lsen. In der Option Mass muss entweder eine o konstante Matrix oder ein Zeiger auf eine Funktion zur Ermittlung der Masse-Matrix enthalten sein. Bei der Lsung von DAEs kann die Ezienz der Algorithmen dao durch gesteigert werden, dass das Problem mit diagonaler Masse-Matrix formuliert wird. Eine weitere Ezienzsteigerung ist bei nicht zustandsabhngigen Massea Matrizen (odeset(MStateDependence,none)), schwach zustandsabhngigen a Masse-Matrizen (odeset(MStateDependence,weak), Standardeinstellung) oder stark zustandsabhngigen Masse-Matrizen (odeset(MStateDependence,strong)) a durch Setzen der entsprechenden Option mglich. Bei nicht zustandsabhngiger o a Masse-Matrix wird die Funktion zu ihrer Berechnung nur mit der Zeit t, nicht jedoch mit dem Zustandsvektor x aufgerufen, d.h. eine Denition von mass(t) reicht aus. Das bekannte Pendel aus Gleichung (4.8) soll als Beispiel f r eine Dierentialgleichung u mit Masse-Matrix dienen und wird in die Form (4.13) umformuliert. Zustzlich wird a angenommen, dass die Masse m des Pendels mit der Zeit exponentiell abnimmt und das Pendel nicht angetrieben wird. m(t) = m0 exp t T (4.15)

Als Dierentialgleichungssystem mit Masse-Matrix ergibt sich: x1 = x2 m(t) x2 = m(t) g FR 2 sin x1 arctan(10x2 ) l l (4.16)

Aus Gleichung (4.16) lsst sich unschwer die Masse-Matrix ablesen. a M(t) = 1 0 0 m(t) (4.17)

Die Funktion xpunkt_pendelmass reprsentiert die rechte Seite von Gleichung (4.16). a Die Daten zu Geometrie, Anfangsmasse etc. werden als Parameter vom Solver uberge ben.
% xpunkt_pendelmass.m function xpunkt = xpunkt_pendelmass(t,x,l,m0,g,Fr,T) m = m0*exp(-t/T); % Berechnung von xpunkt xpunkt = [x(2); -m*g/l*sin(x(1)) - Fr*2/pi*atan(10*x(2))/l];

82

4 Dierentialgleichungen in MATLAB

Die kontinuierliche Berechnung der Masse-Matrix (4.17) wird in der Funktion mass realisiert. Auch hier werden die Daten des Pendels als Parameter vom Solver ubergeben.
% mass.m function M = mass(t,x,l,m0,g,Fr,T) M = [1 0; 0 m0*exp(-t/T)];

Damit der Solver die Masse-Matrix verwenden kann, muss sie uber die Option Mass auf @mass gesetzt werden. Die Lsung der Dierentialgleichung des Pendels mit zeitvariao bler Masse-Matrix mit dem Solver ode15s erfolgt gem den nachstehenden Matlaba Kommandos.
% dgl_pendelmass.m % Daten, Anfangswerte, Zeitspanne, Optionen l = 5; m0 = 30; g = 9.81; Fr = 4; T = 15; x0 = [15/360*2*pi; 0]; tspan = [0 20]; options = odeset(Mass, @mass); % Integration der DGL [t x] = ode15s(@xpunkt_pendelmass,tspan,x0,options,l,m0,g,Fr,T);

Als Lsung f r und uber die Zeitspanne von 20 s ergibt sich der in Abb. 4.5 o u oben dargestellte Verlauf. Im unteren Teil von Abb. 4.5 ist der zugehrige Masseverlauf o dargestellt.
Pendelbewegung 0.4 0.2 0 0.2 phi [rad] phipunkt [rad/s] 0.4 0 2 4 6 8 10 Zeit [s] 12 14 16 18 20

Masseverlauf m(t) 30 25 20 15 10 5 0 0 2 4 6 8 10 Zeit [s] 12 14 16 18 20

Abb. 4.5: Lsungsverlauf des Pendels mit zeitvariabler Masse-Matrix o

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)

83

Anfangswertprobleme [t,x] = solver(@xpunkt,tspan,x0,opt) lsg = solver(@xpunkt,tspan,x0,opt) [x, xp] = deval(lsg, tint, idx) lsg ext = odextend(lsg, @xpunkt, tend) options = odeset(name1,wert1,...) opt wert = odeget(options,name) Lsung eines Anfangswertproblems o solver ist z.B. ode45 Auswerten der Lsung o Erweitern der Lsung o Optionen setzen Optionen abfragen

4.1.3

Dierentialgleichungen mit Totzeiten (DDEs)

Matlab ist in der Lage, Dierentialgleichungen mit mehreren konstanten Totzeiten (Verzgerungen) zu lsen. Die rechte Seite einer derartigen Dierentialgleichung hngt o o a dann nicht nur von der Zeit und vom aktuellen Zustandsvektor, sondern auch von zeitlich verzgerten Zustandsvektoren ab. Dieser Typ von Dierentialgleichung wird o als Delay Dierential Equation (DDE) bezeichnet und hat die allgemeine Form aus Gleichung (4.18). x = f (t, x(t), x(t 1 ), x(t 2 ), . . . , x(t k )) (4.18)

Die Totzeiten 1 bis k sind positive Konstanten. Es wird die Lsung eines Anfangso wertproblems mit x(t0 ) = x0 im Intervall t0 t tend gesucht. Aus Gleichung (4.18) ist sofort ersichtlich, dass die zeitliche Ableitung x auch von der vergangenen Lsung o f r t < t0 abhngig ist. Die vergangene Lsung (History) wird mit s(t) bezeichnet und u a o es gilt: x(t) = s(t) f r u t < t0 (4.19)

Im Allgemeinen besitzen Anfangswertprobleme f r Dierentialgleichungen mit Totzeiu ten eine Unstetigkeit in der ersten Ableitung am Anfangszeitpunkt t0 , da die vergangene u Lsung s(t) die Dierentialgleichung bei t = t0 normalerweise nicht erf llt. Diese Uno stetigkeit panzt sich in Abstnden von 1 bis k in der Lsung f r t t0 fort. Ein a o u zuverlssiger Lsungsalgorithmus muss diese Unstetigkeiten bei der Integration beacha o ten. Die Lsung von Anfangswertproblemen mit Totzeiten erfolgt durch den Befehl dde23. o Dieser basiert auf dem Solver ode23, beachtet aber zustzlich die angesprochenen Una stetigkeiten. Der allgemeine Aufruf lautet:
loesung = dde23(@xpunkt, tau, history, tspan, options, p1, p1, ...)

@xpunkt ist das Function Handle zur Berechnung der rechten Seite der Dierentialgleichung (4.18). Die Denition lautet:
function dxdt = xpunkt(t, x, Z, p1, p2, ...) dxdt = [...; ...; ...];

Die rechte Seite xpunkt wird mit der Integrationszeit t, dem aktuellen Lsungsvektor o x und den verzgerten Lsungsvektoren Z aufgerufen. Dabei entspricht jede Spalte von o o

84

4 Dierentialgleichungen in MATLAB

Z einem verzgerten Lsungsvektor, Z(:,j)= x(t j ). Der Vektor tau enthlt alle o o a Verzgerungszeiten 1 bis k . o Das Argument history ist entweder ein konstanter Spaltenvektor, der die Lsung f r o u t < t0 angibt, oder das Function Handle einer Funktion, die die Lsung f r t < t0 o u berechnet.
function hist = history(t, p1, p2, ...) hist = [...; ...; ...];

Der Vektor tspan besteht aus den Elementen t0 und tend und gibt die Integrationszeit an. Mit der Struktur options knnen Optionseinstellungen analog zu Tab. 4.2 o vorgenommen werden. An alle beteiligten Funktionen werden schlielich noch die Parameter p1, p2, ... ubergeben. Eine Liste aller zulssigen Optionen liefert das Kommando a ddeset.
>> ddeset AbsTol: Events: InitialStep: InitialY: Jumps: MaxStep: NormControl: OutputFcn: OutputSel: Refine: RelTol: Stats: [ [ [ [ [ [ [ [ [ [ [ [ positive scalar or vector {1e-6} ] function_handle ] positive scalar ] vector ] vector ] positive scalar ] on | {off} ] function_handle ] vector of integers ] positive integer {1} ] positive scalar {1e-3} ] on | {off} ]

Die Optionen haben die gleiche Bedeutung wie in Tab. 4.2. Das neue Feld InitialY u dient zur Spezikation einer Unstetigkeit bei t = t0 . Ohne dessen Angabe wird f r den Anfangswert x0 = s(t0 ) verwendet. Dies entspricht einer stetigen Lsung bei t0 . Wird o das Feld InitialY mit einem Wert ungleich s(t0 ) belegt, so wird dieser als Anfangswert benutzt und die Lsung besitzt dann eine Unstetigkeit bei t0 . Um Unstetigkeiten o in der vergangenen Lsung (History) oder in den Koezienten der rechten Seite anzuo geben, werden die (positiven oder negativen) Zeitpunkte von Unstetigkeitsstellen dem Feld Jumps als Vektor zugewiesen. Zustandsabhngige Unstetigkeiten werden uber eine a Event-Funktion im Feld Events wie in Kap. 4.1.1 behandelt. Das Setzen und Andern von Feldern einer Options-Struktur geschieht mit den Kommandos ddeset und ddeget.
>> options = ddeset(Jumps,[1 3 7 8]); >> x0 = ddeget(options,InitialY);

Der R ckgabewert loesung des Aufrufs dde23 ist eine Struktur mit den Felu dern loesung.x, loesung.y, loesung.yp, loesung.solver, loesung.discont und loesung.history. Diese besitzen die gleichen Bedeutungen wie bei den ODE-Solvern in Kap. 4.1.1. Das neue Feld loesung.discont zeigt alle ber cksichtigten Unstetigkeiu ten an, auch wenn sie durch die Totzeiten 1 bis k bedingt sind. Schlielich enthlt das a Feld loesung.history die zur Berechnung verwendete vergangene Lsungstrajektorie. o

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)

85

Die Auswertung der Lsung erfolgt wie gewohnt mit dem Kommando deval (siehe o Seite 70). Bei Verwendung einer Event-Funktion existieren auch hier die zustzlichen a Felder loesung.xe, loesung.ye und loesung.ie mit der entsprechenden Bedeutung. Beispiel: Mit dem Solver dde23 wird nun eine einfache Dierentialgleichung mit Totzeiten gelst und das Ergebnis grasch dargestellt. Die Dierentialgleichung lautet: o x1 (t) = 0.4 x1 (t 1) x2 (t) = x1 (t 1) 2 x2 (t 0.5) (4.20)

o Die Lsung f r t < t0 sei konstant und gleich [ 1 2 ]. Es wird nun der Lsungsverlauf o u f r t0 = 0 t tend = 6 mit dem Anfangswert x0 = 0 berechnet. Dazu erfolgt zunchst u a die Denition der History-Funktion.
% hist_ddebsp.m function s = hist_ddebsp(t) s = [1; -2];

Die rechte Seite der Dierentialgleichung wird in der Funktion xpunkt ddebsp codiert. Dazu werden zunchst die Lsungen x(t 1) und x(t 0.5) in den Variablen x tau1 a o und x tau2 zwischengespeichert. Anschlieend wird die Ableitung xpunkt berechnet.
% xpunkt_ddebsp.m function xpunkt = xpunkt_ddebsp(x, t, Z) % verzgerte Lsung extrahieren o o x_tau1 = Z(:,1); x_tau2 = Z(:,2); % Ableitung berechnen xpunkt = [-0.4*x_tau1(1); x_tau1(1) - 2*x_tau2(2)];

Die Lsung der Dierentialgleichung erfolgt mit den nachstehenden Kommandos. Zuerst o werden die Verzgerungszeiten 1 = 1 und 2 = 0.5 in den Vektor tau gespeichert. Das o Feld InitialY wird auf den Anfangswert 0 gesetzt, da er sich von der vergangenen Lsung s(0) unterscheidet. Dadurch entsteht eine Unstetigkeit der ersten Ableitung bei o t0 = 0. Anschlieend erfolgt die Lsung mittels dde23 und eine grasche Auswertung. o
% ddebsp.m % Zeitspanne tspan = [0 6]; % Verzgerungszeiten o tau = [1, 0.5]; % Optionen setzen options = ddeset(InitialY,[0;0]); % Lsung der DGL o loesung = dde23(@xpunkt_ddebsp, tau, @hist_ddebsp, tspan, options); % grafische Auswertung tint = linspace(0, 6, 60); x = deval(loesung, tint); subplot(211); plot(tint,x(1,:),tint,x(2,:))

Das Ergebnis ist in Abb. 4.6 dargestellt. Deutlich sind die Unstetigkeiten bei t = 1 und t = 0.5 erkennbar. Diese sind durch die Unstetigkeit bei t = 0 und die Totzeiten 1 = 1 und 2 = 0.5 bedingt. Zur Lsung von DDEs mit allgemeinen Totzeiten, die nicht notwendigerweise konstant o sein m ssen, stellt Matlab das Kommando ddesd zur Verf gung. Der Aufruf lautet u u

86
DGL mit Totzeiten 3 2 1 0 1 2

4 Dierentialgleichungen in MATLAB

x (t) 1 x2(t)

3 Zeit [s]

Abb. 4.6: Lsung der Dierentialgleichung (4.20) o

loesung = ddesd(@xpunkt, @tau, history, tspan)

@xpunkt stellt die rechte Seite der Dierentialgleichung dar, @tau ist ein Function Handle auf eine Funktion zur Berechnung der Verzgerungen, history ist die Lsung in der o o Vergangenheit und tspan ist der Integrationszeitraum. Dierentialgleichungen mit Totzeiten (DDEs) loes = dde23(@xpunkt,tau,hist,tspan) loes = ddesd(@xpunkt,@tau,hist,tspan) [x, xp] = deval(loes,xint,idx) opt = ddeset(name1,wert1,...) opt wert = ddeget(opt,name) Lsung der DDE (tau konstant) o Lsung der DDE (tau variabel) o Auswertung der Lsung o Optionen setzen Optionen abfragen

4.1.4

Implizite Dierentialgleichungen

Wenn eine gewhnliche Dierentialgleichung nicht nach ihrer Ableitung x ausbar ist, o o spricht man von einer impliziten Dierentialgleichung. Die hier behandelten impliziten Dierentialgleichungen sind von der Form: f (t, x, x) = 0 x(t0 ) = x0 x(t0 ) = x0 (4.21)

Die Lsung derartiger Dierentialgleichungen erfolgt mit dem Befehl ode15i. Die mglio o chen Aufrufe lauten:
[t, x] = ode15i(@f, tspan, x0, xp0, options) loesung = ode15i(@f, tspan, x0, xp0, options)

Die Argumente des Solvers ode15i entsprechen Gleichung (4.21). @f ist das Function Handle auf die linke Seite von Gleichung (4.21), tspan ist ein Vektor zur Spezikation des Integrationsintervalls, x0 ist der Anfangswert der Lsung, xp0 ist die Anfangssteio gung der Lsung, und mittels options knnen Optionen zur Integration angegeben o o werden. In t und x wird die Lsung x(t) zur ckgeliefert. Wird nur der R ckgabewert o u u

4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)

87

loesung auf der linken Seite angegeben, so wird die Lsung in eine Struktur gespeichert o (siehe Seite 69). Als Beispiel wird die Dierentialgleichung des Pendels aus Kap. 4.1.1 nochmals mittels ode15i gelst. Auch diese Dierentialgleichung lsst sich als implizite Gleichung o a darstellen. Wenn man Gleichung (4.9) umformuliert, so erhlt man: a x1 x2 = 0 x2 + g FR 2 FA (t) sin x1 + arctan(10x2 ) + = 0 l ml ml (4.22)

Die Anregung des Pendels erfolgt mit FA (t) = 30 sin(2 0.1 t), die Anfangsauslenkung betrgt x10 = 0.26 bei der Anfangswinkelgeschwindigkeit x20 = 0. Die Anfangswerte a u o x(t0 ) und x(t0 ) m ssen konsistent mit der zu lsenden Dierentialgleichung sein. x(t0 ) berechnet sich aus der vorgegebenen Anfangsbedingung zu x(t0 ) = [0.26 0]T . Der Wert x(t0 ) lsst sich aus der Dierentialgleichung (4.22) explizit berechnen. Ist dies nicht a mglich, so kann zur konsistenten Anfangswertberechnung auch das Kommando decic o verwendet werden. Die Funktion zur Berechnung der linken Seite von Gleichung (4.22) lautet:
% f_pendel.m function f = f_pendel(t,x,xp,l,m,g,Fr) % Antriebskraft Fa = 30*sin(2*pi*0.1*t); % Berechnung von f f = [xp(1)-x(2); xp(2) + g/l*sin(x(1)) + Fr*2/pi*atan(10*x(2))/m/l + Fa/m/l];

Die Lsung der impliziten Dierentialgleichung erfolgt in folgendem m-Skript. Dabei o werden die Geometrieparameter von der Funktion f pendel ubergeben und das Ergeb nis mittels deval ausgewertet und grasch dargestellt. Abb. (4.7) zeigt den zeitlichen Verlauf von x1 (t) und x2 (t).
Pendelbewegung 0.4 0.2 0 0.2 x1 [rad] 0.4 0 5 10 15 20 Zeit [s] 25 30 x [rad/s]
2

35

40

Abb. 4.7: Lsung des angetriebenen Pendels mittels ode15i o

88

4 Dierentialgleichungen in MATLAB

% dgl_pendel_implizit.m % Geometrie, Masse, Reibung l = 5; m = 30; g = 9.81; Fr = 4; % Anfangswerte, Zeitspanne x0 = [15/360*2*pi; 0]; tspan = [0 40]; % Anfangs-Ableitung aus der DGL berechnen xp0 = [x0(2); -g/l*sin(x0(1))]; % Integration der DGL loesung = ode15i(@f_pendel,tspan,x0,xp0,[],l,m,g,Fr); % grafische Ausgabe von x1 und x2 tint = linspace(tspan(1),tspan(2),200); x = deval(loesung, tint); subplot(211) plot(tint,x(1,:),tint,x(2,:))

Implizite Dierentialgleichungen loesung = ode15i(@f,tspan,x0,xp0,options) [x,xp] = deval(loesung,xint,idx) [x0m,xp0m] = decic(@f,t0,x0,fix x0,xp0,fix xp0) Lsung der DGL o Auswertung der Lsung o Berechnung konsistenter Anfangsbedingungen

4.2

Randwertprobleme fur gewhnliche o Dierentialgleichungen

Bisher waren f r die Lsung von gewhnlichen Dierentialgleichungen immer Startu o o werte am Beginn des Lsungsintervalls gegeben. Es existieren jedoch auch technische o Problemstellungen, bei denen die Lsung der Dierentialgleichung gleichzeitig Bedino gungen am Beginn und Ende des Lsungshorizonts erf llen muss. Dies bezeichnet man o u als Randwertproblem (BVP, Boundary Value Problem). Matlab ist in der Lage, Randwertprobleme der folgenden Form zu lsen: o y (x) = dy = f (x, y) dx (4.23)

Jetzt ist x die unabhngige Variable (entspricht t bei Anfangswertproblemen) und y a die abhngige Variable. Die Randbedingungen spezizieren einen Zusammenhang der a Lsung f r mehrere Punkte x. Matlab kann nur Zweipunkt-Randwertprobleme lsen, o u o d.h. die Randbedingungen spezizieren einen Zusammenhang zwischen den Lsungso punkten am Anfang und am Ende des Lsungsintervalls. Es wird eine Lsung im Intero o vall [a b] berechnet, wobei die allgemeinen Randbedingungen lauten: g(y(a), y(b)) = 0 (4.24)

Im Gegensatz zu Anfangswertproblemen knnen Randwertprobleme keine, eine oder o mehrere Lsungen besitzen. Bei vielen Randwertproblemen sind neben der Funktion o

4.2 Randwertprobleme f r gewhnliche Dierentialgleichungen u o

89

y(x) auch unbekannte konstante Parameter gesucht. Das allgemeine Randwertproblem mit dem unbekannten Parametervektor p lautet daher: y (x) = f (x, y, p) g(y(a), y(b), p) = 0 In diesem Fall muss die Anzahl der Randbedingungen um die Zahl der unbekannten Parameter hher sein, um eine eindeutige Lsung zu erhalten. Die numerische Lsung von o o o Randwertproblemen erfolgt nicht streng vorwrts gerichtet, sondern erfordert den Eina satz eines Suchverfahrens. Dieses bentigt zum Starten eine geschtzte Anfangslsung o a o und eine anfngliche Intervalleinteilung des Lsungsbereichs, die vom Benutzer angea o geben werden m ssen. Anschlieend wird eine numerische Lsung durch Lsen eines u o o Satzes von algebraischen Gleichungen, die aus den Rand- und Intervallbedingungen resultieren, berechnet. Die Intervalleinteilung wird so lange verfeinert, bis die geforderte Genauigkeit erreicht ist. Die numerische Lsung f r Zweipunkt-Randwertprobleme o u erfolgt mit dem Matlab-Befehl bvp4c. Seine Grundsyntax lautet:
loesung = bvp4c(@ystrich,@randbed,loesinit)

(4.25)

ystrich ist eine Funktion, die in einem Spaltenvektor die rechte Seite von Gleichung (4.23) zur ckliefert. Sie wird von bvp4c mit den Argumenten x und y aufgerufen u und hat die Form:
function dydx = ystrich(x,y) dydx = [...];

Die Funktion randbed ermittelt als Spaltenvektor die Restabweichungen (Residuen) der Randbedingungen von ihren Sollwerten.
function res = randbed(ya,yb) res = [...];

Die Argumente ya und yb sind Spaltenvektoren der erzielten Funktionswerte an den Intervallgrenzen a und b. Wenn eine Randbedingung lautet y1 (a) = 5, dann muss eine Komponente des R ckgabevektors res lauten: res(i)=ya(1)-5. u Die Struktur loesinit stellt eine anfngliche Schtzlsung des Randwertproblems dar. a a o Die Struktur muss mindestens die beiden Felder loesinit.x und loesinit.y enthalten. x enthlt ein Gitter von Punkten an denen die Anfangslsung gegeben ist. Dadurch a o werden implizit auch die Intervallgrenzen des Lsungsintervalls deniert. Die Grenzen o a und b werden bestimmt aus x(1) und x(end). Das Feld y enthlt als Spaltenvektor a die anfnglichen Schtzwerte der Lsung an den Gitterpunkten x. Der Lsungsvektor a a o o loesinit.y(:,i) gehrt zum Gitterpunkt loesinit.x(i). Der Name der Struktur f r o u die Anfangslsung kann beliebig sein, die Felder mit den Gitterpunkten und zugehrigen o o Lsungsvektoren m ssen jedoch die Namen x und y tragen. Als Hilfe zur Erzeugung o u der Anfangslsung steht die Funktion bvpinit zur Verf gung. Ihre Syntax lautet: o u
loesinit = bvpinit(xinit, yinit)

90

4 Dierentialgleichungen in MATLAB

wobei xinit ein Vektor der anfnglichen Rasterpunkte ist. Das Argument yinit kann a entweder ein Spaltenvektor der Dimension der Systemordnung oder ein Function Handle sein. Wenn yinit ein Spaltenvektor ist, wird sein Wert f r alle Rasterpunkte in u xinit konstant fortgesetzt, d.h. man erhlt eine konstante Anfangslsung. Wenn yinit a o ein Function Handle ist, wird die zugeordnete Funktion an allen Gitterpunkten xinit ausgewertet. Die Funktion muss einen Spaltenvektor mit der Anfangslsung f r einen o u Gitterpunkt xinit(i) zur ckliefern. u Der Solver bvp4c liefert in der Struktur loesung die Felder x und y. Das Feld loesung.x enthlt die vom Solver gewhlten Gitterpunkte, in loesung.y sind die berechneten Wera a te der Lsung y(x) an den Gitterpunkten enthalten. In loesung.yp werden schlielich o die Ableitungen y (x) an den Gitterpunkten geliefert. Wenn die Lsung auch bei Wero ten zwischen zwei Gitterpunkten bentigt wird, kann dazu die Funktion deval, wie bei o Anfangswertproblemen auch, zur Interpolation verwendet werden. Der Aufruf lautet:
[xi, xpi] = deval(loesung, xint, idx)

xint ist ein Vektor mit den gew nschten Lsungspunkten. Zu jedem Element i des u o Vektors xint(i) wird der zugehrige Lsungsvektor xi(:,i) und die erste Ableitung o o xpi(:,i) des Lsungsvektors berechnet, die dann f r grasche Ausgaben verwendet o u werden knnen. Wenn der Vektor idx angegeben wird (optional), werden nur die Lsuno o gen mit den in idx enthaltenen Indizes in xi und xpi gespeichert. Das Kommando
loesinit = bvpxtend(sol, xnew, ynew)

dient zur Erzeugung einer neuen Startlsung f r ein Randwertproblem, das uber das o u Intervall [a b] hinausreicht. xnew muss auerhalb des urspr nglichen Intervalls [a b] u liegen, ynew ist die geschtzte Lsung am Punkt xnew. Der Aufruf a o
loesinit = bvpxtend(sol, xnew, extrap)

setzt keine Angabe einer Schtzlsung voraus, vielmehr wird diese durch Interpolatia o on bestimmt. Der Parameter kann die Werte constant, linear und solution (kubische Interpolation) haben. Der Solver bvp4c kann auch mit Optionen zur individuellen Anpassung aufgerufen werden. Dazu wird eine Options-Struktur verwendet, die mit dem Kommando bvpset erzeugt und verndert werden kann. Die einfache Eingabe von bvpset zeigt alle zulssigen a a Optionen an.
>> bvpset AbsTol: RelTol: SingularTerm: FJacobian: BCJacobian: Stats: Nmax: Vectorized: [ [ [ [ [ [ [ [ positive scalar or vector {1e-6} ] positive scalar {1e-3} ] matrix ] function_handle ] function_handle ] on | {off} ] nonnegative integer {floor(10000/n)} ] on | {off} ]

4.2 Randwertprobleme f r gewhnliche Dierentialgleichungen u o Die Vernderung einzelner Felder einer Options-Struktur erfolgt durch a
options = bvpset(options,name1,wert1,name2,wert2,...)

91

wobei name1 und name2 die Felder von options bezeichnen und wert1 und wert2 die zuzuweisenden Werte sind. Einzelne Felder knnen mit dem Befehl bvpget aus einer o Options-Struktur abgefragt werden.
var = bvpget(options, name)

Der R ckgabewert var enthlt den Wert des Feldes name aus der Struktur options. u a Mit den Feldern AbsTol und RelTol knnen die entsprechenden Toleranzen eingestellt o und die Genauigkeit der Lsung beeinusst werden [39]. In den Feldern FJacobian o und BCJacobian knnen Function Handles angegeben werden, die auf Funktionen zur o Berechnung der Jacobi-Matrix der rechten Seite des DGL-Systems in (4.23) bzw. der Funktion randbed zeigen. Zu beachten ist, dass beim Einsatz unbekannter Parameter (siehe unten) die Funktionen zur Berechnung der Jacobi-Matrizen auch die partiellen Ableitungen bez glich der unbekannten Parameter liefern m ssen [39]. Mit dem Feld u u Nmax kann die Zahl der Rasterpunkte in loesung.x nach oben begrenzt werden. Die Option Vectorized gibt an, ob die rechte Seite von Gleichung (4.23) vektorwertig aufgerufen werden kann. Dies kann die Ausf hrungsgeschwindigkeit von bvp4c erheblich u beschleunigen. Es muss dann gelten: f (x1 , x2 , . . . , y1 , y2 , . . .) = [ f (x1 , y1 ), f (x2 , y2 ), . . . ] (4.26)

Mit der Option SingularTerm kann eine spezielle Klasse singulrer Randwertprobleme a gelst werden. Diese m ssen die folgende Form besitzen: o u y (x) = 1 dy = S y + f (x, y) dx x (4.27)

Die Option SingularTerm muss mit der Matrix S aus Gleichung (4.27) belegt werden. Es ist zu beachten, dass die Funktion ystrich nach wie vor nur den Term f (x, y) zur ckliefern darf. Das singulre Randwertproblem kann nur im Intervall [0 b] gelst u a o werden. Die Randbedingungen bei x = 0 m ssen konsistent mit der notwendigen Beu dingung S y(0) = 0 f r eine stetige Lsung sein. Diese Bedingung sollte auch von der u o Anfangslsung loesinit erf llt werden. o u Der allgemeine Aufruf von bvp4c mit Optionen lautet:
loesung = bvp4c(@ystrich,@randbed,loesinit,options)

Wenn zustzlich zum Lsungsverlauf y(x) unbekannte Parameter gesucht sind, so a o m ssen bei der Anfangslsung auch anfngliche Parameterwerte in der Struktur u o a loesinit angegeben werden. Dies geschieht im Feld loesinit.parameters, in dem alle unbekannten Parameter in einem Vektor zusammengefasst werden. Sobald dieses Feld vorhanden ist, werden diese Parameter in die Lsungssuche einbezogen. Die Funko tionen xpunkt (rechte Seite der DGL) und randbed (Residuen der Randbedingungen) werden in diesem Fall vom Solver bvp4c zustzlich mit dem Parametervektor aufgerua fen. Ihre Denitionen m ssen daher lauten: u

92

4 Dierentialgleichungen in MATLAB

function dydx = ystrich(x,y,parameters) function res = randbed(ya,yb,parameters)

Wenn f r die Initialisierung der Lsung die Funktion bvpinit benutzt wird, so wird als u o drittes Argument der unbekannte Parametervektor ubergeben.
loesinit = bvpinit(xinit, yinit, parameters)

Zustzlich zu unbekannten Parametern knnen den Funktionen ystrich und randbed a o auch bekannte Parameter ubergeben werden. Diese folgen in den Funktionsdenitionen direkt auf den Vektor der unbekannten Parameter.2) Die entsprechenden Funktionsdenitionen lauten dann:
function dydx = ystrich(x,y,parameters,p1,p2,...) function res = randbed(ya,yb,parameters,p1,p2,...)

Die Parameter p1, p2 ... werden den Funktionen vom Solver ubergeben und m ssen u auch beim Solveraufruf ber cksichtigt werden. Der Aufruf ndert sich entsprechend. u a
loesung = bvp4c(@ystrich,@randbed,loesinit,options,p1,p2,...)

Beispiel: Zur Illustration der Verwendung des Solvers bvp4c wird nun als Beispiel ein Biegebalken [21] genauer betrachtet. Die Dierentialgleichung des Biegebalkens aus Abb. 4.8 lautet f r kleine Durchbiegungen (1 + y 2 1): u y = M (x) = b(x) EI(x) (4.28)

M(x)>0

Abb. 4.8: Biegebalken mit Momentenverlauf M (x)

Mit der vorgegebenen Lagerung und der Lnge des Balkens von l = 1 ergeben sich die a Randbedingungen y(0) = 0 und y(1) = 0. (4.29)

2) Wenn keine unbekannten Parameter vorhanden sind, folgen sie direkt auf die Argumente x und y bzw. ya und yb.

4.2 Randwertprobleme f r gewhnliche Dierentialgleichungen u o

93

Der Biegemomentverlauf M (x) und die Biegesteigkeit EI(x) sind von der Koordinate x folgendermaen abhngig: a M (x) = 5 4x EI(x) = 100ex (4.30)

Mit der Substitution y1 = y und y2 = y ergibt sich die in Matlab codierte rechte Seite von Gleichung (4.28) zu:
% ystrich_balken.m function dydx = ystrich_balken(x,y) dydx = [y(2); (4*x-5)/100*exp(-x)];

In der Funktion bc_balken werden die Residuen der Randbedingungen an den Positionen x = 0 und x = 1 berechnet.
% bc_balken.m function res = bc_balken(ya,yb) res = [ya(1); yb(1)];

Zunchst wird ein Anfangsgitter xmesh erzeugt. Die Anfangslsungen sollen sowohl f r a o u y1 als auch y2 f r alle Punkte des Gitters xmesh gleich null sein. Die Struktur mit der u Anfangslsung wird mit der Hilfsfunktion bvpinit erzeugt. Die Berechnung der Lsung o o erfolgt ohne die Verwendung spezieller Optionen mit dem Solver bvp4c.
% bvp_balken.m % Schtzwert fr Startlsung a u o xmesh = linspace(0,1,100); yini(1) = 0; yini(2) = 0; loesinit = bvpinit(xmesh,yini); % Lsung berechnen o loesung = bvp4c(@ystrich_balken, @bc_balken, loesinit) % Ergebnis grafisch darstellen subplot(211) plot(loesung.x,loesung.y(1,:))

Der Verlauf der betrachteten Biegelinie ist in Abb. 4.9 dargestellt. Man beachte, dass die y-Koordinaten in Abb. 4.8 und Abb. 4.9 in entgegengesetzte Richtungen zeigen. Das Kommando bvp4c kann auch Randwertprobleme mit mehr als zwei Randbedingungen lsen (Multi-Point-Randwertprobleme). Das Randwertproblem wird dann in meho rere Regionen aufgeteilt. An den Regionsgrenzen m ssen zustzliche Randbedingungen u a gelten. Die Denition mehrerer Regionen erfolgt bei der Initialisierung. Im folgenden Beispiel werden die Regionen 2 bis 1 und 1 bis 2 deniert. Die Regionsgrenzen werden beim x-Raster doppelt angegeben.
xinit = [-2 -1.5 -1 -0.5 0 0.5 1 1 1.5 2]; yinit = [1; 1]; solinit = bvpinit(xinit, yinit);

In der Funktion randbed zur Berechnung der Abweichungen von den Randbedingungen werden diese an den Grenzen 2 und 1 f r die erste Region und 1 und 2 f r die zweite u u

94
x 10
3

4 Dierentialgleichungen in MATLAB
Biegelinie

3 Durchbiegung y(x) 2.5 2 1.5 1 0.5

0 0

0.1

0.2

0.3

0.4

0.5 Position x

0.6

0.7

0.8

0.9

Abb. 4.9: Mit bvp4c berechnete Biegelinie

Region berechnet. Ein Beispiel f r ein Randwertproblem mit drei Randbedingungen u enthlt die Datei threebvp.m.3) a Randwertprobleme loes = bvp4c(@ystrich,@randb,init,opt) init = bvpinit(xinit,yinit) init = bvpxtend(sol,xnew,ynew) [xi, xpi] = deval(loes, xint, idx) opt = bvpset(name1,wert1,...) opt wert = bvpget(opt,name) Lsung eines Randwertproblems o Startlsung festlegen o Startlsung f r neues Intervall o u Auswertung der Lsung o Optionen setzen Optionen abfragen

4.3

Partielle Dierentialgleichungen (PDEs)

Den am schwierigsten zu lsenden Typ von Dierentialgleichungen stellen partielle Difo ferentialgleichungen dar. Im Gegensatz zu gewhnlichen Dierentialgleichungen stellen o sie einen funktionalen Zusammenhang zwischen der Ableitung nach dem Zeitargument t und rtlichen Variablen x her. Eine analytische Lsung von PDEs ist im Allgemeio o nen nicht mglich, und auch die numerische Lsung gestaltet sich sehr schwierig. F r o o u fortgeschrittene Anwendungen existiert eine separate PDE-Toolbox; einfache Problemstellungen knnen jedoch auch in Matlab numerisch gelst werden. o o Die in Matlab numerisch lsbaren partiellen Dierentialgleichungen hngen von der o a Zeit t und einer Ortsvariablen x ab und m ssen die folgende Form besitzen: u C x, t, u, u x u = xm t x xm f x, t, u, u x + s x, t, u, u x (4.31)

Die Lsungsfunktion u(t, x) kann numerisch im Intervall t0 < t < tf bzw. a < x < b o bestimmt werden. Die Werte a und b m ssen beschrnkt sein. m darf die Werte 0, 1 u a oder 2 annehmen, was der achen, zylindrischen und sphrischen Symmetrie entspricht. a
3)

Im Umfang von Matlab enthalten.

4.3 Partielle Dierentialgleichungen (PDEs)

95

Wenn m > 0 ist, muss auch a 0 sein. In Gleichung (4.31) stellt f einen Flussterm und s eine Quelle dar. Die Kopplung der Ortsableitung und der Zeitableitung ist auf die Multiplikation mit der Diagonalmatrix C beschrnkt, deren Elemente entweder a null oder positiv sind. Ein Element gleich null entspricht einer elliptischen Gleichung und andernfalls einer parabolischen Gleichung. Es muss mindestens eine parabolische Gleichung existieren. Ein Element der Matrix C, das zu einer parabolischen Gleichung gehrt, darf f r einzelne Werte x verschwinden, wenn diese Werte Gitterpunkte der o u festgelegten Ortsdiskretisierung sind. Unstetigkeiten in C und s d rfen ebenfalls nur an u Gitterpunkten auftreten. Zur Anfangszeit t0 muss die Lsung f r alle x eine Anfangsbedingung der folgenden o u Form erf llen: u u(x, t0 ) = u0 (x) (4.32)

Die Funktion u0 (x) wird als Anfangswertfunktion bezeichnet. An den Intervallgrenzen x = a und x = b erf llt die Lsung f r alle Zeitpunkte t die Randbedingungen: u o u p(x, t, u) + Q(x, t) f x, t, u, u x =0 (4.33)

Q(x, t) ist eine Diagonalmatrix mit Elementen immer ungleich null oder identisch null. Zu beachten ist, dass die Randbedingung bez glich der Flussfunktion f anstelle der u partiellen Ableitung u/x deniert ist und nur die Funktion p von u abhngig sein a darf. In Matlab steht zur Lsung der beschriebenen Systeme aus parabolischen und elliptio schen partiellen Dierentialgleichungen mit der Zeitvariable t und einer Ortsvariablen x der Solver pdepe zur Verf gung. Er lst Anfangs-Randwertprobleme und bentigt minu o o destens eine parabolische Gleichung im System. Der Solver wandelt die PDEs durch Diskretisierung uber die vom Anwender angegebenen Rasterpunkte in ODEs um. Die Zeitintegration erfolgt mit dem Solver ode15s. Der PDE-Solver pdepe nutzt die Fhiga keiten von ode15s zur Lsung von dierential-algebraischen Gleichungen, die auftreten, o wenn im PDE-System elliptische Gleichungen vorhanden sind. Wenn die, zu elliptischen Gleichungen gehrenden, Anfangswerte nicht konsistent mit der Diskretisierung sind, o versucht pdepe diese anzupassen. Gelingt es nicht, muss das Diskretisierungsraster feiner gewhlt werden. Der Aufruf des PDE-Solvers lautet: a
loesung = pdepe(m,@pdefun,@icfun,@bcfun,xmesh,tspan)

Das Argument m deniert die Symmetrie der Aufgabenstellung (m kann 0, 1 oder 2 sein). Die Funktion pdefun deniert die Komponenten der PDE und berechnet die Terme C, f und s aus Gleichung (4.31). pdefun hat die Form:
function [c,f,s] = pdefun(x,t,u,dudx)

Die Argumente x und t sind Skalare, u ist der Spaltenvektor der aktuellen Lsung und o dudx seine partielle Ableitung. Die Ergebnisse c, f und s sind alles Spaltenvektoren, wobei der Vektor c genau die Diagonalelemente der Matrix C aus Gleichung (4.31) enthlt. a

96

4 Dierentialgleichungen in MATLAB

In der Funktion icfun wird die Anfangslsung u(x, t0 ) zum Zeitpunkt t0 , abhngig nur o a von der Ortskoordinate x bestimmt. Die Funktion liefert in einem Spaltenvektor u die Anfangslsung und lautet allgemein: o
function u = icfun(x)

Das vierte Argument von pdepe ist eine Funktion zur Berechnung der Terme p und Q aus Gleichung (4.33) der Randbedingungen. Die Funktion bcfun lautet:
function [pl,ql,pr,qr] = bcfun(xl,ul,xr,ur,t)

ul und ur sind die aktuellen Lsungen am linken Rand bei xl=a bzw. am rechten o Rand bei xr=b. Die R ckgabewerte pl und ql entsprechen dem Vektor p und der u Diagonalen der Matrix Q aus Gleichung (4.33), ausgewertet am linken Rand bei xl=a. Entsprechendes gilt f r pr und qr am rechten Rand bei xr=b. Wenn m > 0 und a = 0 ist, u verlangt der Solver zur Lsbarkeit, dass der Fluss f an der Stelle x = a verschwindet. Der o Solver pdepe erzwingt diese Randbedingung automatisch und ignoriert andere Werte aus pl und ql. Das Argument xmesh von pdepe ist ein Zeilenvektor mit aufsteigenden Ortskoordinaten, mit dem festgelegt wird, f r welche Werte x jeweils eine Lsung f r alle Werte aus tspan u o u berechnet wird. Der Vektor xmesh muss mindestens drei Elemente besitzen. Der Zeilenvektor tspan enthlt in aufsteigender Reihenfolge alle Zeitpunkte, an denen f r alle a u Elemente aus xmesh die Lsung bestimmt werden soll. Auch hier gilt die Mindestlnge o a von drei Elementen. Der Solver akzeptiert die gleiche Options-Struktur wie gewhnliche Dierentialgleichuno gen in Kap. 4.1.1, die auch mit den dort beschriebenen Befehlen manipuliert werden kann. Auerdem knnen auch hier Parameter an die von pdepe aufgerufenen Funko tionen ubergeben werden. Die Funktionen pdefun, icfun und bcfun werden mit den zustzlichen Parametern p1, p2,... aufgerufen. Der allgemeinste Aufruf lautet dema nach:
loesung = pdepe(m,@pdefun,@icfun,@bcfun,xmesh,tspan,options,p1,p2,...)

Der R ckgabewert loesung von pdepe ist ein dreidimensionales Feld mit den folgenden u Eintrgen: a loesung(:,:,k) ist die k-te Komponente des Lsungsvektors u(x, t). o loesung(i,j,k) ist die k-te Komponente der Lsung zum Zeitpunkt tspan(i) o und am Gitterpunkt xmesh(j). Wenn die Lsung nur aus einer Komponente besteht, wird in loesung nur ein zweidio mensionales Feld zur ckgeliefert. Die Interpolation des Lsungs-Arrays zwischen zwei u o Gitterpunkten erfolgt mit dem Befehl pdeval. Ein einfaches Beispiel zur Verwendung von pdepe ist in der Online-Hilfe zu Matlab enthalten (Aufruf mit doc pdepe). Ein umfangreicheres Beispiel zur Wrmeleitung na det sich in [13].

4.3 Partielle Dierentialgleichungen (PDEs)

97

Partielle DGLs (PDEs) loesung = pdepe(m,@pdefun,@icfun,... @bcfun,xmesh,tspan,opt) [uint,dudxint] = pdeval(m,xmesh,ui,xint) Lsung einer PDE o Auswertung der Lsung o

98

4 Dierentialgleichungen in MATLAB

4.4
4.4.1

Ubungsaufgaben
Feder-Masse-Schwinger

Betrachtet wird ein Feder-Masse-Schwinger gem Abb. 4.10. In der Ruhelage bendet a

c, d

x
Abb. 4.10: Feder-Masse-Schwinger mit Dmpfung a

sich die bewegliche Masse in der Stellung x = 0. Es wird angenommen, dass sich die Masse in der Zeit von t = 0 bis t = 20 von 5 auf 1 linear verringert. Die Dierentialgleichung des Feder-Masse-Systems ist gegeben durch Gleichung (4.34). m(t) x = c x d x (4.34) Als Zahlenwerte sind gegeben: m = 5, c = 150, d = 1. Lsen Sie die Dierentialgleichung f r die Zeitspanne von t = 0 . . . 20 mit den Anfangso u werten x0 = 0.2 und x0 = 0 mit dem Solver ode45 ohne spezielle Optionen f r die u Toleranzen, und stellen Sie das Ergebnis f r den Weg x und die Geschwindigkeit x grau sch dar. Stellen Sie ebenfalls den Masseverlauf im Intervall t = 0 . . . 20 grasch dar. Hinweis: Sie knnen die Dierentialgleichung mit und ohne Masse-Matrix darstellen o und lsen. o

4.4.2

Elektrischer Schwingkreis

In dieser Aufgabe geht es um eine einfache Event-Erkennung. Betrachtet wird der in Abb. 4.11 dargestellte elektrische Schwingkreis. Die Bauelemente besitzen folgende Werte: R = 0.5, L = 104 und C = 106 . Zum Zeitpunkt t = 0.3 103 wird der Schalter geschlossen, und die resultierende Kapazitt verdoppelt sich durch die Parala lelschaltung. Dieses Ereignis soll exakt detektiert, die Integration angehalten und eine neue Integration mit den Endwerten des letzten Abschnitts als Anfangswerte gestartet werden. Bestimmen Sie den Lsungsverlauf der Zustandsgren I und UC im Intervall o o o t = 0 . . . 103 . Stellen Sie die Lsungskurven grasch uber der Zeit dar. Die Dierenti algleichungen des Schwingkreises lauten: 1 UC = I C 1 R I = UC I L L (4.35)

4.4 Ubungsaufgaben
I

99

UL

UR

UC

Abb. 4.11: Elektrischer Schwingkreis

4.4.3

Springender Ball

In dieser Aufgabe wird ein Ball untersucht, der im freien Fall auf eine elastische Oberche trit. Die Oberche besitzt eine Elastizitt c und eine Dmpfung d, wodurch der a a a a Ball wieder reektiert wird. Auf der Oberche ist die Positionskoordinate x = 0. Die a Bewegung des Balls mit der Masse m wird durch zwei verschiedene Dierentialgleichungen beschrieben. Im freien Fall gilt mit der Erdbeschleunigung g die Gleichung (4.36). x = g (4.36)

Whrend der Ber hrungsphase mit der elastischen Oberche gilt Gleichung (4.37). a u a m x = c x d x m g (4.37)

Die Bewegung kann in zwei Phasen eingeteilt werden: Freier Fall bis x = 0 und Ber hrung mit der Oberche f r x < 0. Die Ubergnge zwischen diesen Phasen solu a u a len exakt detektiert und die einzelnen Lsungstrajektorien zur graschen Darstellung o zusammengesetzt werden. Whlen Sie den Solver ode45 und die Option Events enta sprechend aus. Die folgenden Zahlenwerte sind gegeben: m = 1, c = 300, d = 0.5 und g = 9.81. Bestimmen Sie die Lsungstrajektorie f r die Zeitspanne von 20 s unter Ber cksichtio u u gung der Umschaltung zwischen den Bewegungsphasen. Verwenden Sie die Anfangswerte x0 = 1 und x0 = 0 und stellen Sie das Ergebnis grasch dar.

4.4.4

Kettenlinie

Ein Seil soll an den Punkten (0,0) und (0,1) im kartesischen Koordinatensystem aufgehngt werden. Es wird nur von seinem eigenen Gewicht mg belastet. Der sich einstela lende Verlauf y(x) wird durch die folgende Dierentialgleichung mit Randbedingungen beschrieben: y =a 1+y2 y(0) = 0 y(1) = 0 (4.38)

100

4 Dierentialgleichungen in MATLAB

Im Parameter a sind Lnge und Masse des Seils sowie die horizontale Spannkraft enta halten. Es gilt a = 4. Berechnen Sie durch Lsung eines Randwertproblems den Verlauf y(x), den das hngeno a de Seil beschreibt. Verwenden Sie als Startlsung eine waagrechte Gerade mit der Gleio chung y = 0.5.

Regelungstechnische Funktionen Control System Toolbox

Ein f r den Regelungstechniker und Systemtheoretiker bedeutsames und uerst hilfu a reiches Werkzeug stellt die Control System Toolbox dar. Mit ihrer Hilfe lassen sich alle Schritte der regelungstechnischen Untersuchung eines Systems durchf hren. Zur u Vertiefung sei auf die Fachliteratur verwiesen: [4, 17, 18, 19, 22, 26, 27, 29]. Modellhafte Beschreibung zeitkontinuierlicher und zeitdiskreter linearer, zeitin varianter Systeme (Ubertragungsfunktion, Nullstellen-Polstellen-Darstellung, Zustandsdarstellung, Frequenzgang-Daten-Modelle; Kap. 5.1) Umwandeln und Bearbeiten der Systeme (Kap. 5.2), Analyse der Systemeigenschaften (Dynamik, Zeit- und Frequenzantwort; Kap. 5.3) Entwurf und Optimierung von Reglern (Wurzelortskurve, SISO Design Tool, Zustandsregelung und -beobachtung, LQ-Optimierung, Kalman-Filter; Kap. 5.4) Zustzlich stehen noch Bewertungsalgorithmen f r Probleme der numerischen Zua u verlssigkeit zur Verfgung (Kap. 5.5), die uberwiegend in M-Files abgelegt sind und a u somit f r Anderungen und Ergnzungen oen stehen (hierzu siehe [5, 10, 16, 35, 36, 49]). u a

5.1

Modellierung linearer zeitinvarianter Systeme als LTI-Modelle

Zu Beginn einer regelungstechnischen Untersuchung steht die Modellierung des gegebenen Systems. Ausgehend von den physikalischen Gesetzen wird eine, ublicher weise mathematische, Systembeschreibung hergeleitet, die die Ursache-WirkungsZusammenhnge zwischen den Eingngen u und den Ausgngen y beschreibt. a a a Matlab stellt nun f r zeitkontinuierliche und -diskrete lineare zeitinvariante Sysu teme (LTI-Systeme) der Typen Single-Input/Single-Output (SISO) und MultipleInput/Multiple-Output (MIMO) die folgenden vier Darstellungsarten zur Verf gung: u Ubertragungsfunktion (Transfer Function TF) Nullstellen-Polstellen-Darstellung (Zero-Pole-Gain ZPK) Zustandsdarstellung (State-Space SS) Frequenzgang-Daten-Modelle (Frequency Response Data FRD)

102

5 Regelungstechnische Funktionen Control System Toolbox

Hierbei stellen die Modelle vom Typ TF, ZPK und SS parametrische Beschreibungsformen dar, whrend FRD-Modelle zur Darstellung und Analyse von gemessenen oder a simulierten Frequenzgang-Verlufen dienen. Die Analyse von FRD-Modellen beschrnkt a a sich folglich auch nur auf Frequenzraum-Methoden. Achtung: Die Koezienten der Modelle TF, ZPK und SS knnen auch aus der Meno ge der komplexen Zahlen stammen! Allerdings knnen f r solche Modelo u le nicht alle Funktionen verwandt werden, nmlich Zeitbereichsantworten a (Kap. 5.3.3), margin und allmargin (Kap. 5.3.4) und rlocus (Kap. 5.4.1).

5.1.1

Ubertragungsfunktion Transfer Function TF

Eine Ubertragungsfunktion ist eine rationale Funktion in s mit dem Zhlerpolynom num a (engl. numerator, Zhler) und dem Nennerpolynom den (engl. denominator, Nenner) a und beschreibt das Ubertragungsverhalten eines Systems im Laplace-Bereich. h(s) = num (s) am sm + am1 sm1 + . . . + a1 s + a0 = den (s) bn sn + bn1 sn1 + . . . + b1 s + b0 (5.1)

Erstellen von TF-SISO-Modellen TF-Modelle von SISO-Systemen lassen sich auf zwei Arten denieren: 1. Befehl tf(num, den): Eingabe des Zhlerpolynoms num ([2 -3]) und des a Nennerpolynoms den ([1 1]) der Ubertragungsfunktion jeweils als Vektoren mit Koezienten von s in absteigender Reihenfolge von s.
>> h = tf([2 -3],[1 1]) Transfer function: 2 s - 3 ------s + 1

2. Rationale Funktion in s: Es wird zuerst die Variable s als TF-Modell de niert und dann die Ubertragungsfunktion als rationale Funktion in s eingegeben.
>> s = tf(s) Transfer function: s >> h = (s+2) / (s^2 + 5*s + 4) Transfer function: s + 2 ------------s^2 + 5 s + 4

Achtung:

Wurde s als TF-Modell deniert, so werden alle folgenden mit rationalen Funktionen in s erstellten Modelle als TF-Modelle interpretiert, bis s neu belegt oder in ein ZPK-Modell umgewandelt wird.

5.1 Modellierung linearer zeitinvarianter Systeme als LTI-Modelle Erstellen von TF-MIMO-Modellen

103

MIMO-Systeme lassen sich als zweidimensionale Matrix H von Ubertragungsfunktionen darstellen, wobei das Matrixelement hij f r die Ubertragungsfunktion vom Eingang j u zum Ausgang i steht; die Zeilen entsprechen also den Ausgngen und die Spalten den a Eingngen (Gleiche Anordnung wie die D-Matrix der Zustandsdarstellung, Kap. 5.1.3). a num11 num12 2s 3 s2 + s 6 h11 h12 den11 den12 s+1 s+5 (5.2) H = = num21 num22 = 1 s+2 h21 h22 den21 den22 s2 + 5s + 4 2s2 + 6s + 10 Die Eingabe in Matlab kann auf zwei Arten erfolgen: 1. Denieren der einzelnen TF-SISO-Modelle mit tf
>> >> >> >> h11 h12 h21 h22 = = = = tf([2 -3],[1 1]); tf([1 1 -6],[1 5]); tf([1 2],[1 5 4]); tf(-1,[2 6 10]);

oder als rationale Funktionen in s:


>> >> >> >> >> s = h11 h12 h21 h22 tf(s); = (2*s-3) / (s+1); = (s^2+s-6) / (s+5); = (s+2) / (s^2+5*s+4); = -1 / (2*s^2+6*s+10);

Zusammenf gen zur Matrix H: u


>> H = [h11 h12 ; h21 h22];

2. Denieren von zwei Cell Arrays der Dimension N y N u (N y: Anzahl der Ausgnge, N u Anzahl der Eingnge): Der eine enthlt alle Zhlerpolynome a a a a (NUM), der andere alle Nennerpolynome (DEN). NUM = n11 n12 n21 n22 DEN = d11 d12 d21 d22 (5.3)

Auch hier werden in Matlab jeweils die Vektoren mit den Koezienten von s in absteigender Reihenfolge von s eingegeben.
>> NUM = { [2 -3] [1 1 -6] ; [1 2] -1 }; >> DEN = { [1 1] [1 5] ; [1 5 4] [2 6 10] };

Aufruf von tf mit den Parametern NUM und DEN.


>> H = tf(NUM,DEN);

104

5 Regelungstechnische Funktionen Control System Toolbox

Die Ausgabe ist in beiden Fllen identisch: a


>> H Transfer function from input 1 to output... 2 s - 3 #1: ------s + 1 #2: s + 2 ------------s^2 + 5 s + 4

Transfer function from input 2 to output... s^2 + s - 6 #1: ----------s + 5 #2: -1 ---------------2 s^2 + 6 s + 10

Systeme nur mit Verstrkung a Bestehen alle Ubertragungsfunktionen nur aus Verstrkungsfaktoren, so gen gt folgena u der Aufruf, um das TF-Modell G des Systems zu erzeugen:
>> G = tf([1 2 ; 3 0]) Transfer function from input 1 to output... #1: 1 #2: 3

Transfer function from input 2 to output... #1: 2 #2: 0

5.1.2

Nullstellen-Polstellen-Darstellung Zero-Pole-Gain ZPK

Eine der Ubertragungsfunktion hnliche Beschreibungsform des Ubertragungsverhala tens ist die Nullstellen-Polstellen-Darstellung: h(s) = k (s z1 ) . . . (s zm1 ) (s zm ) (s p1 ) . . . (s pn1 ) (s pn ) (5.4)

Hier ist k ein reeller oder komplexer Verstrkungsfaktor, die z1 . . . zm bzw. die p1 . . . pn a sind die reellen und/oder konjungiert komplexen Paare der Nullstellen (engl. zeros) bzw. der Polstellen (engl. poles). Sie entsprechen somit den Wurzeln des Zhler- bzw. a Nennerpolynoms der Ubertragungsfunktion.

5.1 Modellierung linearer zeitinvarianter Systeme als LTI-Modelle Erstellen von ZPK-SISO-Modellen

105

Wie bei den TF-Modellen stehen auch hier zwei Mglichkeiten zur Verf gung, ein ZPKo u Modell zu erzeugen: 1. Befehl zpk(z,p,k): Eingabe des Nullstellenvektors z ([-6 1 1]), des Polstellenvektors p ([-5 1]) und des (skalaren) Verstrkungsfaktors k (3). a
>> h = zpk([-6 1 1],[-5 1],3)

Zero/pole/gain: 3 (s+6) (s-1)^2 --------------(s+5) (s-1)

2. Rationale Funktion in s: Hierzu wird die Variable s als ZPK-Modell deniert und dann die Ubertragungsfunktion als rationale Funktion in s eingegeben.
>> s = zpk(s) Zero/pole/gain: s >> h = 2 * 1 / ((s-1)*(s+2)) Zero/pole/gain: 2 ----------(s-1) (s+2)

Achtung:

Wurde s als ZPK-Modell deniert, so werden alle folgenden mit rationalen Funktionen in s erstellten Modelle als ZPK-Modelle interpretiert, bis s neu belegt oder in ein TF-Modell umgewandelt wird.

Erstellen von ZPK-MIMO-Modellen Auch hier wird die zweidimensionale Matrix H mit der Dimension N y N u und den u Matrixelementen hij f r die Ubertragungsfunktion vom Eingang j (Spalten) zum Ausgang i (Zeilen) aufgestellt. H = h11 h12 h21 h22 = k11 k21 z11 p11 z21 p21 k12 k22 z12 p12 z
22

p22 (5.5)

1 2 (s 1) (s + 2) = (s 1) (s 2) 1 (s + 4) (s + 1)

(s 1)2 (s + 6) 3 (s 1) (s + 5) s+1 1 2 (s + 2 s + 2) (s + 1)

106

5 Regelungstechnische Funktionen Control System Toolbox

Die Eingabe in Matlab erfolgt auf die zwei schon bekannten Arten: 1. Denieren der einzelnen ZPK-SISO-Modelle mit zpk
>> >> >> >> h11 h12 h21 h22 = = = = zpk([],[-2 1],2); zpk([-6 1 1],[-5 1],3); zpk([1 2],[-4 -1],1); zpk(-1,[-1 -1+i -1-i],-1);

oder als rationale Funktionen in s:


>> >> >> >> >> s = h11 h12 h21 h22 zpk(s); = 2 * 1 / ((s-1)*(s+2)); = 3 * (s^2-2*s+1)*(s+6) / (s^2+4*s-5); = (s^2-3*s+2) / (s^2+5*s+4); = -1 * (s+1) / ((s^2+2*s+2)*(s+1));

Zusammenf gen zur Matrix H: u


>> H = [h11 h12 ; h21 h22];

2. Denieren von zwei Cell Arrays (Dimension N y N u, Ausgnge i = 1 . . . N y, a Eingnge j = 1 . . . N u) f r die Nullstellenpolynome (Z) und die Polstellenpolynoa u me (P) sowie der N y N u-Matrix der Verstrkungsfaktoren (K). a Z = z11 z12 z21 z22 P = p11 p12 p21 p22 K = k11 k12 k21 k22 (5.6)

>> Z = { [] [-6 1 1 ] ; [1 2] -1 }; >> P = { [-2 1] [-5 1] ; [-4 -1] [-1 -1+i -1-i] }; >> K = [2 3 ; 1 -1];

Aufruf von zpk mit den Parametern Z, P und K.


>> H = zpk(Z,P,K) Zero/pole/gain from input 1 to output... 2 #1: ----------(s+2) (s-1) #2: (s-1) (s-2) ----------(s+4) (s+1)

Zero/pole/gain from input 2 to output... 3 (s+6) (s-1)^2 #1: --------------(s+5) (s-1) #2: - (s+1) -------------------(s+1) (s^2 + 2s + 2)

5.1 Modellierung linearer zeitinvarianter Systeme als LTI-Modelle

107

5.1.3

Zustandsdarstellung State-Space SS

In der Zustandsdarstellung wird nicht die Ubertragungsfunktion zwischen den Eingangsund Ausgangsgren betrachtet, sondern f r jedes Speicherelement (= Integrator) eine o u Dierentialgleichung 1. Ordnung ermittelt. So ergibt sich f r ein System mit n Speiu chern nicht eine Ubertragungsfunktion n-ter Ordnung, sondern ein Satz von n Dierentialgleichungen 1. Ordnung. In Matrix-Schreibweise ergeben sich f r den Fall eines u Multiple-Input/Multiple-Output-Systems (MIMO) folgende Gleichungen: Zustands-DGL: Ausgangsgleichung: mit x: u: y: x y = = Ax + Bu Cx + Du A: B: C: D: Systemmatrix Eingangsmatrix Ausgangsmatrix Durchschaltmatrix (5.7) (5.8) (N x N x) (N x N u) (N y N x) (N y N u)

Zustandsvektor Eingangsvektor Ausgangsvektor

(N x 1) (N u 1) (N y 1)

Hierbei ist N x die Ordnung des Systems bzw. die Anzahl der Speicherelemente, N u die Zahl der Eingangsgren und N y die Anzahl der Ausgangsgren. o o Im hug auftretenden Fall eines Single-Input/Single-Output-Systems (SISO) a mit nur einer Eingangs- und einer Ausgangsgre vereinfachen sich die Gleichungen o (5.7) und (5.8) durch Ersetzen von B durch b (N x 1), C durch cT (1 N x) und D durch d zu (b, c Spaltenvektoren, d skalar): Zustands-DGL: Ausgangsgleichung: x y = = Ax + bu cT x + d u (5.9) (5.10)

Die Eingabe in Matlab erfolgt mit dem Befehl ss(A, B, C, D), wobei A, B, C und D die entsprechenden System-Matrizen bzw. -Vektoren sind: Kein Durchschaltanteil: Da in der physikalischen Realitt die meisten a Strecken Tiefpass-Charakteristik aufweisen, entfllt in der Regel der Durchschalta anteil, so dass D = 0 gesetzt werden darf, unabhngig von den Dimensionen von a u und y.
>> ss(A,B,C,0)

SISO: Der ublicherweise als Spaltenvektor denierte Vektor c muss als Zeilen vektor ubergeben, also transponiert werden! Der Vektor d hingegen ist skalar.
>> ss(A,B,c,d)

Zustandsminimale Darstellung: Werden das System sys und der zustza liche Parameter min ubergeben, so wird ein SS-Modell erzeugt, das aus der minimalen Anzahl von Zustnden besteht. a
>> ss(sys,min)

108

5 Regelungstechnische Funktionen Control System Toolbox

Als Beispiel dient nun ein MIMO-System mit zwei Zustnden, drei Eingngen und drei a a Ausgngen. Die beschreibenden Matrizen sind mit folgenden Werten belegt: a 0 1 0 0 0 1 2 1 1 0 A = B = C = 1 2 D = 0 0 0 3 4 0 1 2 3 1 0 0 0 Matlab-Eingabe:
>> SYS = ss([1 2 ; 3 4],[1 1 0 ; 0 1 2],[0 1 ; 1 2 ; 3 1],0) a = x1 x2 b = x1 x2 c = y1 y2 y3 d = y1 y2 y3 u1 0 0 0 u2 0 0 0 u3 0 0 0 x1 0 1 3 x2 1 2 1 u1 1 0 u2 1 1 u3 0 2 x1 1 3 x2 2 4

5.1.4

Frequenzgang-Daten-Modelle Frequency Response Data FRD

Im Gegensatz zu den drei bereits vorgestellten Modellen basiert das FrequenzgangDaten-Modell nicht auf einer mathematischen Beschreibung des Systems, sondern auf einem aus einer Messung oder Simulation aufgenommenen Frequenzgang-Datensatz. Dieser kann z.B. aus der Messung der Amplitude und des Phasenwinkels des Ausgangssignals eines Systems bei Anregung mit einem sinusfrmigen Signal bei unterschiedlichen o Frequenzen ermittelt werden. Das Ausgangssignal y(t) geht aus dem Eingangssignal sin(t) wie folgt hervor: y(t) = | G() | sin t + () = | F (j) | Im e j (t + ()) (5.11)

5.1 Modellierung linearer zeitinvarianter Systeme als LTI-Modelle

109

Mathematisch gesehen stellt die Frequenzgangfunktion die komplexe Antwort eines Systems auf Anregung mit einem sinusfrmigen Eingangssignal dar: o F (j) = | F (j) | e j () = | F (j) | =
2

am (j)m + . . . + a1 (j) + a0 (5.12) bn (j)n + . . . + b1 (j) + b0


2

Re{F (j)} + Im{F (j)} Im{F (j)} Re{F (j)}

(5.13) (5.14)

() = arctan

Erstellen von FRD-SISO-Modellen Die Eingabe in Matlab geschieht mit dem Befehl frd(ant, f req, eh). Hierbei ist ant der Vektor mit den komplexen Frequenzantworten zu den entsprechenden im Vektor f req gespeicherten Frequenzen. eh ist ein optionaler Parameter f r die Einheit der u Frequenz in rad/s (Standardwert) oder Hz. Als Beispiel dient hier ein PT1 -Glied: F = 1 1 + jT = 1 jT = 1 + (T )2 1 1 + (T )2 e j
arctan(T )

(5.15)

>> freq = [0.01 0.1 1 10 100 1000 10000] ; >> ant = (1-j*freq) ./ (1+freq.^2) ; >> sysfrd = frd(ant,freq,Units,rad/s) Frequency(rad/s) ---------------0.0100 0.1000 1.0000 10.0000 100.0000 1000.0000 10000.0000 Response -------9.999e-001 - 9.999e-003i 9.901e-001 - 9.901e-002i 5.000e-001 - 5.000e-001i 9.901e-003 - 9.901e-002i 9.999e-005 - 9.999e-003i 1.000e-006 - 1.000e-003i 1.000e-008 - 1.000e-004i

% Frequenzpunkte % PT1 erzeugen

Continuous-time frequency response.

Erstellen von FRD-MIMO-Modellen FRD-MIMO-Systeme werden auf die gleiche Art und Weise erzeugt, nur dass hier der Frequenzantworten-Vektor ant ein Tensor1) der Dimension N y N u Nf mit der Anzahl der Ausgnge N y, der Anzahl der Eingnge N u und der Lnge Nf des Frea a a quenzenvektors f req ist.
1)

Multidimensionale Matrix, siehe [6, 34].

110

5 Regelungstechnische Funktionen Control System Toolbox

5.1.5

Zeitdiskrete Darstellung von LTI-Modellen

Bei zeitdiskreten Modellen wird die z-Transformation statt der Laplace-Transformation verwendet, die Dierentialgleichungen gehen in Dierenzengleichungen uber. Zeitdiskre te Modelle werden analog den zeitkontinuierlichen Modellen deniert, zustzlich muss a nun die Abtastzeit Ts als Parameter Ts angegeben werden. Ist die Abtastzeit noch nicht festgelegt, so wird Ts auf den Wert -1 gesetzt. Die Matlab-Befehle lauten: systf syszpk sysss sysf rd = = = = tf (num,den,Ts) zpk (z,p,k,Ts) ss (a,b,c,d,Ts) frd (ant,f req,Ts)

Erstellen zeitdiskreter TF- und ZPK-Modelle Eine zeitdiskrete Ubertragungsfunktion wird als rationale Funktion in z deniert, ent weder als Ubertragungsfunktion oder in Nullstellen-Polstellen-Darstellung: z 0.5 z 0.5 = hZP K = hT F = 2 z +z2 (z + 2)(z 1) Auch hier gibt es wieder zwei Mglichkeiten zur Eingabe: o 1. Befehl tf(num, den, Ts) bzw. Befehl zpk(z, p, k, Ts): Eingabe der entsprechenden System-Parameter wie in Kap. 5.1.1 und 5.1.2 und der Abtastzeit Ts .
>> h = tf([1 -0.5],[1 1 -2],0.01) Transfer function: z - 0.5 ----------z^2 + z - 2 Sampling time: 0.01 >> h = zpk(0.5,[-2 1],1,0.01) Zero/pole/gain: (z-0.5) ----------(z+2) (z-1) Sampling time: 0.01

2. Rationale Funktion in z: Erst die Variable z als TF- bzw. ZPK-Modell de nieren und dann die Ubertragungsfunktion als rationale Funktion in z eingeben.
>> z = tf(z,0.01) Transfer function: z Sampling time: 0.01 >> h = (z-0.5) / (z^2 + z - 2) Transfer function: z - 0.5 ----------z^2 + z - 2 Sampling time: 0.01 >> z = zpk(z,0.01) Zero/pole/gain: z Sampling time: 0.01 >> h = (z-0.5) / ((z+2)*(z-1)) Zero/pole/gain: (z-0.5) ----------(z+2) (z-1) Sampling time: 0.01

5.1 Modellierung linearer zeitinvarianter Systeme als LTI-Modelle Zeitdiskrete Ubertragungsfunktion im DSP-Format

111

In einigen Bereichen der Regelungstechnik, z.B. in der digitalen Signalverarbeitung, werden Ubertragungsfunktionen oft als rationale Funktionen in der Variablen z 1 und in aufsteigender Reihenfolge angegeben. Dies kollidiert bei der normalen Eingabe von Ubertragungsfunktionen in z mit unterschiedlicher Ordnung von Zhler- und Nennera polynom mit der Regel der absteigenden Reihenfolge. Um dieses Problem zu vermeiden, bietet Matlab den Befehl filt(num, den, Ts), der ein TF-Modell in DSP-Format erzeugt. Da es sich hierbei immer um ein zeitdiskretes Modell handelt, kann die Angabe f r Ts auch unterbleiben. u
>> h = filt([1 -0.5],[1 1 -2],0.01) Transfer function: 1 - 0.5 z^-1 ----------------1 + z^-1 - 2 z^-2 Sampling time: 0.01

hDSP =

z 1 0.5z 2 1 + z 1 2z 2

= hT F =

z 0.5 z2 + z 2

Erstellen zeitdiskreter SS-Modelle Die zeitdiskrete Zustandsdarstellung eines SS-Systems lautet (mit a(k) = a(k Ts )): Zustands-DGL: Ausgangsgleichung: x(k + 1) y(k) = = A x(k) + B u(k) C x(k) + D u(k) (5.16) (5.17)

Die Eingabe erfolgt genauso wie in Kap. 5.1.3 zuz glich der Eingabe von Ts . u
>> sys = ss([ 3 ],[ 1 3 ],[ 0.5 ],0,-1);

LTI-Modelle tf (num,den[,Ts]) zpk (z,p,k[,Ts]) ss (A,B,C,D[,Ts ]) Ubertragungsfunktion: Vektor der Zhlerkoezia enten num, Vektor der Nennerkoezienten den Nullstellen-Polstellen-Darstellung: Nullstellenvektor z, Polstellenvektor p, Verstrkungsvektor k a

Zustandsdarstellung: Systemmatrix A, Eingangsmatrix B, Ausgangsmatrix C, Durchschaltmatrix D frd (ant,f req,eh[,Ts]) Frequenzgang-Daten-Modelle: Frequenzantwort ant, Vektor der Frequenzen f req, Einheit rad/s (Standard) oder Hz (eh=Units,rad/s) Abtastzeit f r zeitdiskrete Systeme u Ts ohne Ts : zeitkontinuierliches Modell Ts = 1: zeitdiskretes Modell, Ts unspeziziert

112

5 Regelungstechnische Funktionen Control System Toolbox

5.1.6

Zeitverzogerungen in LTI-Modellen

Oft treten in realen Systemen Zeitverzgerungen auf, d.h. die Signale werden nicht soo fort, sondern erst nach Ablauf einer bestimmten Zeit am Eingang wirksam, am Ausgang sichtbar oder innerhalb des Systems treten verzgernde Eekte auf. Zur Modellierung o bietet die Control System Toolbox nun die im Folgenden erluterten Befehle. Da die a Zeitverzgerungen durch das Setzen von hierf r vordenierten Eigenschaften der LTIo u Modelle erfolgt, empehlt sich vor dem Weiterlesen das Studium von Kap. 5.2.1. Zeitverzgerungen zwischen Ein- und Ausgngen o a F r TF- und ZPK-Modelle lassen sich im Frequenzbereich Zeitverzgerungen Td zwiu o schen den einzelnen Ein- und Ausgngen festlegen. In der Laplace-Notation bedeutet a dies eine Multiplikation der Ubertragungsfunktion mit eTd s . In Matlab wird die Zeitverzgerung zwischen Eingang j und Ausgang i eingegeben o uber die Eigenschaft ioDelay des LTI-Modells, der eine Matrix Td mit den Zeitverzgeo rungen der einzelnen Ein-/Ausgnge zugewiesen wird (Die Matrix muss die gleiche a Dimension wie das LTI-Modell sys haben): set(sys,ioDelay,Td) Als Beispiel wird der Ubertragungsfunktion von Eingang 2 zu Ausgang 1 des TF-MIMOModells aus Kapitel 5.1.1, S. 103 eine Zeitverzgerung von 0.4 Sekunden hinzugefgt: o u
>> set(H,ioDelay,[0 0.4 ; 0 0]) ; >> H(1,2) Transfer function: s^2 + s - 6 exp(-0.4*s) * ----------s + 5

Zeitverzgerungen am Eingang oder Ausgang o Existiert am Ein- oder Ausgang eines Modells eine Zeitverzgerung, so kann diese mito tels der Eigenschaften InputDelay bzw. OutputDelay in das LTI-Modell eingebaut werden. Bei SS-LTI-Modellen lautet die Zustandsdarstellung des Systems im Zeitbereich mit der Verzgerungszeit Tde zwischen Eingang u und Zustandsvektor x bzw. Tda o zwischen Zustandsvektor x und Ausgang y wie folgt: Zustands-DGL: Ausgangsgleichung: x(t) y(t) = = A x(t) + B u(t Tde ) C x(t Tda ) + D u(t (Tde + Tda )) (5.18) (5.19)

Hiermit vereinfacht sich auch die Eingabe von gleichen Zeitverzgerungen zwischen Eino und Ausgngen: Anstatt f r jedes einzelne Matrixelement f r die Werte von ioDelay a u u den gleichen Wert angeben zu m ssen, bentigt man hier nur die Angabe eines Vektors u o mit den Zeitverzgerungen am Eingang (InputDelay) oder Ausgang (OutputDelay). o

5.1 Modellierung linearer zeitinvarianter Systeme als LTI-Modelle Interne Zeitverzgerungen o

113

Mit den Eigenschaften InputDelay, OutputDelay und ioDelay lassen sich zwar einfache Zeitverzgerungen erzeugen. Nicht mglich ist aber die Realisierung von Systemen, o o bei denen die Zeitverzgerungen nicht am Eingang, Ausgang oder zwischen einem Eino gang und einem Ausgang liegen. Ein Beispiel hierf r sind R ckkoppelschleifen, die im u u Vorwrtszweig eine Zeitverzgerung enthalten, denn die Gesamt bertragungsfunktion a o u eines solchen Systems mit einer Ubertragungsfunktion e3s /(1 + s) im Vorwrtszweig a (Zeitverzgerung 3 Sekunden) lautet: o G= e3s 1 + s + e3s

Die e-Funktion im Nenner kann nicht mehr mit einer Ausgangsverzgerung realio siert werden. Um dies zu ermglichen, sieht Matlab die interne Zeitverzgerung o o InternalDelay statt ioDelay bei SS-LTI-Modellen vor. Erzeugt wird obige R ckkoppelschleife in Matlab aus den Ubertragungsfunktionen u der einzelnen LTI-Modelle und R ckkoppeln mit dem feedback-Befehl, wobei dieser u als Eingabe zwingend ein TF-LTI-Modell bentigt. o
>> s = tf(s); >> sys = tf(ss(exp(-3*s)/(s+1))); >> feedback(sys,1);

Pad-Approximation fr zeitkontinuierliche Systeme2) e u Durch die Pad-Approximation wird die Zeitverzgerung eTd s des zeitkontinuierlichen e o Systems angenhert durch eine rationale Funktion. Dies geschieht mit dem Befehl a pade (sys,n) pade (sys,ni,no,nio) [num,den] = pade (sys,ni,no,nio) sysx = pade (sys,ni,no,nio)

Hierbei gibt der Parameter n die Ordnung der rationalen Funktion an. Bei MIMOSystemen kann die Ordnung jeweils einzeln f r jeden Eingang im Vektor ni, f r jeden u u Ausgang im Vektor no und in der Matrix nio f r die Zeitverzgerungen zwischen den u o Ein- und Ausgngen angegeben werden. Die Ausgabevariablen num und den enthalten a Zhler und Nenner der rationalen Approximations-Funktion als TF-Modell, whrend a a bei sysx der Modell-Typ des Ursprungsmodells sys erhalten bleibt. So ergibt sich mit der Pad-Approximation f r die Teil bertragungsfunktion H(1,2) e u u aus obigem Beispiel die rationale Ubertragungsfunktion:
>> pade(H(1,2)) Transfer function: -s^3 + 4 s^2 + 11 s - 30 -----------------------s^2 + 10 s + 25
2)

Im zeitdiskreten Fall entspricht der Pad-Approximation der Befehl delay2z. e

114

5 Regelungstechnische Funktionen Control System Toolbox

Zeitverzgerungen bei zeitdiskreten Systemen o Bei zeitdiskreten Systemen funktioniert die Eingabe der Verzgerungszeiten ebenso wie o bei den zeitkontinuierlichen Systemen, nur werden hier die Vielfachen n der Abtastzeit Ts ubergeben. Dies entspricht im z-Bereich dann einer Multiplikation mit z n , was dem Hinzuf gen eines n-fachen Poles bei z = 0 gleichkommt. Das folgende Beispiel zeigt die u Erzeugung einer zeitdiskreten Eingangsverzgerung von vier Abtastperioden. o
>> h = tf([1 -0.5],[1 1 -2],0.01,InputDelay,4) Transfer function: z - 0.5 z^(-4) * ----------z^2 + z - 2 Sampling time: 0.01

Nat rlich knnten somit alle zeitdiskreten Zeitverzgerungen realisiert werden, doch u o o aus Gr nden der Ubersichtlichkeit, der Speicherung und der Berechnung empehlt sich u die Verwendung der Zeitverzgerungs-Eigenschaften [37]. Sollten die Zeitverzgerungen o o doch einmal in Polstellen umgewandelt werden, so geschieht dies mit dem Befehl sysp = delay2z (sys) Bei obigem Modell h ergibt sich folglich die ausmultiplizierte Ubertragungsfunktion:
>> h = delay2z(h) Transfer function: z - 0.5 ----------------z^6 + z^5 - 2 z^4 Sampling time: 0.01

Die Zustandsdarstellung lsst sich z.B. wie folgt schreiben: a Zustands-DGL: Ausgangsgleichung: x(k + 1) = A x(k) + B u(t n) y(k + m) = C x(k) + D u(k n)

Zeitverzgerung Eigenschaften und Befehle o sys.InputDelay sys.OutputDelay sys.ioDelay sys.InternalDelay totaldelay (sys) delay2z (sys) pade (sys,n) Eingangs-Zeitverzgerung des LTI-Modells sys o Ausgangs-Zeitverzgerung des LTI-Modells sys o Ein-/Ausgangs-Zeitverzgerungen des LTI-Modells sys o Interne Zeitverzgerungen bei komplexem LTI-Modell sys o Ermittelt die gesamte Zeitverzgerung des Systems o Ersetzt Zeitverzgerungen durch Pole bei z = 0 o Pad-Approximation mit Ordnung n e

5.2 Arbeiten mit LTI-Modellen

115

5.2
5.2.1

Arbeiten mit LTI-Modellen


Eigenschaften von LTI-Modellen

LTI-Objekte Unabhngig von der gewhlten Darstellungsart eines Systems speichert Matlab alle a a Daten eines LTI-Modells als so genanntes LTI-Objekt (LTI-object) in einer Variablen ab, die die Form einer Struktur bzw. eines Cell Arrays (Kap. 2.2.4 bzw. 2.2.5) aufweist. Eigenschaften eines LTI-Objekts bestehen also aus verschiedenen Feldern mit vorgegebenen Namen (EigN ame) und den ihnen zugewiesenen Werten (EigW ert). Der Zugri auf die einzelnen Felder (Eigenschaften) erfolgt entweder mit dem . Befehl oder mit den Befehlen get (Abrufen der Eigenschaften) und set (Andern der Eigenschaften), wobei bei den Eigenschaftsnamen Gro- und Kleinschreibung nicht unterschieden wird. Online-Hilfe zu den Eigenschaften von LTI-Objekten erhlt man mit ltiprops. a Setzen und Andern von Modell-Eigenschaften Um einer Eigenschaft EigN ame den Wert EigW ert zuzuweisen, gibt es drei Mglicho keiten: 1. Befehle tf, zpk, ss oder frd: Beim Erstellen eines LTI-Objekts knnen eine o oder mehrere Eigenschaften durch paarweise Angabe ihres Namens EigN ame und ihres Wertes EigW ert bestimmt werden: sys sys sys sys = = = = tf (num,den,Ts,EigN ame,EigW ert, ...) zpk (z,p,k,Ts,EigN ame,EigW ert) ss (a,b,c,d,Ts,EigN ame,EigW ert) frd (ant,f req,Ts,eh,EigN ame,EigW ert)

2. Befehl set: Hier werden die Werte einer oder mehrerer Modell-Eigenschaften wie folgt gesetzt oder gendert: a set(sys,EigN ame1,EigW ert1,EigN ame2,EigW ert2, ...) Wird der set(sys)-Befehl ohne zustzliche Parameter aufgerufen, so werden alle a f r ein LTI-Objekt mglichen Einstellungen angezeigt. u o 3. .-Befehl: Mit dem .-Befehl f r Strukturen knnen auf einfache Weise die u o Eigenschaften von LTI-Objekten gendert werden. So wird mit a sys.EigN ame = EigW ert der Eigenschaft EigN ame des Modells sys der Wert EigW ert zugewiesen.

116

5 Regelungstechnische Funktionen Control System Toolbox

Abrufen von Modell-Eigenschaften Die einzelnen Modell-Eigenschaften knnen auf zweierlei Arten abgerufen werden: o 1. Befehl get(sys,EigN ame): Der Befehl get ist das Pendant zu set und liefert den Wert der angegebenen Eigenschaft zur ck. Wird nur get(sys) aufgeu rufen, so werden smtliche Eigenschaften von sys angezeigt bzw. an eine Variable a ubergeben. 2. .-Befehl: Mit dem Befehl sys.EigN ame wird der Wert EigW ert der Eigenschaft EigN ame des LTI-Objekts sys angezeigt oder anderen Variablen zugewiesen. Beispiel Erst wird mit tf eine zeitdiskrete Ubertragungsfunktion sys deniert, deren Eigenschaft Notes den String LTI-Objekt zugewiesen bekommt.
>> sys = tf([1 -0.5],[1 1 -2],-1,Notes,LTI-Objekt) Transfer function: z - 0.5 ----------z^2 + z - 2 Sampling time: unspecified

Dann wird mit set die noch unspezizierte Abtastzeit Ts auf 0.05 gesetzt und die Eigenschaft InputName mit dem String Eingang belegt.
>> set(sys,Ts,0.05,InputName,Eingang) >> sys.OutputName = Ausgang Transfer function from input "Eingang" to output "Ausgang": z - 0.5 ----------z^2 + z - 2 Sampling time: 0.05

Weiter wird der Variablen abtastzeit die Abtastzeit Ts und der Variablen notiz der Inhalt der Eigenschaft Notes zugewiesen.
>> abtastzeit = sys.Ts abtastzeit = 0.0500 >> notiz = get(sys,Notes) notiz = LTI-Objekt

5.2 Arbeiten mit LTI-Modellen Abschlieend werden mit get alle Eigenschaften angezeigt.
>> get(sys) num: den: ioDelay: Variable: Ts: InputDelay: OutputDelay: InputName: OutputName: InputGroup: OutputGroup: Name: Notes: UserData: {[0 1 -0.5]} {[1 1 -2]} 0 z 0.05 0 0 {Eingang} {Ausgang} [1x1 struct] [1x1 struct] {LTI-Objekt} []

117

Allgemeine und modellspezische Eigenschaften Es gibt nun die bei allen LTI-Objekten existierenden allgemeinen Eigenschaften (generic properties) und die von der Darstellungsart (TF, ZPK, SS, FRD) abhngigen a modellspezischen Eigenschaften (model-specic properties). In den folgenden Tabellen steht in der ersten Spalte der Name der Eigenschaft, in der zweiten Spalte eine kurze Beschreibung und in der dritten Spalte die Art des Wertes. Allgemeine Eigenschaften von LTI-Modellen Ts InputDelay OutputDelay ioDelay InputName OutputName InputGroup OutputGroup Notes Userdata Abtastzeit (in Sekunden) Eingangs-Zeitverzgerung o Ausgangs-Zeitverzgerung o Ein-/Ausgangsverzgerungen o Namen der Eingnge a Namen der Ausgnge a Gruppen von Eingngen a Gruppen von Ausgngen a Bemerkungen Zustzliche Daten a Skalar Vektor Vektor Matrix Cell-Vector von Strings Cell-Vector von Strings Cell Array Cell Array Text beliebig

Eigenschaften von TF-Modellen num den Variable Zhlerkoezienten a Nennerkoezienten TF-Variable Cell Array reeller Zeilenvektoren Cell Array reeller Zeilenvektoren s,p,z,q oder z^-1

118

5 Regelungstechnische Funktionen Control System Toolbox

Eigenschaften von ZPK-Modellen z p k Variable Nullstellen Polstellen Verstrkungen a ZPK-Variable Cell Array reeller Spaltenvektoren Cell Array reeller Spaltenvektoren zweidimensionale reelle Matrix s,p,z,q oder z^-1

Eigenschaften von SS-Modellen a b c d e StateName Systemmatrix Eingangsmatrix Ausgangsmatrix Durchschaltmatrix Deskriptormatrix Namen der Zustnde a zweidimensionale reelle Matrix zweidimensionale reelle Matrix zweidimensionale reelle Matrix zweidimensionale reelle Matrix zweidimensionale reelle Matrix Cell-Vector von Strings

Eigenschaften von FRD-Modellen Frequency Frequenzpunkte ResponseData Frequenzantwort Units Einheit der Frequenz Reeller Vektor Komplexwertige mehrdim. Matrix rad/s oder Hz

5.2.2

Schnelle Datenabfrage

Da Matlab die Daten eines Modells in ein LTI-Objekt speichert (Kap. 5.2.1), gibt es zum schnellen und bequemen Auslesen der wichtigsten Modell-Daten folgende Befehle (sys: TF-, ZPK- oder SS-Modell; sysf rd: FRD-Modell): [num,den,T s] [z,p,k,T s] [a,b,c,d,T s] [ant,f req,T s] = tfdata (sys) = zpkdata (sys) = ssdata (sys) = frdata (sysf rd)

So liefert tfdata f r die Ubertragungsfunktion h = tf ([2 -3],[1 1]) aus Kap. 5.1.1: u
>> [num,den,Ts] = tfdata(h) num = [1x2 double] den = [1x2 double] Ts = 0 >> num{1,1} ans = 2 -3 % Abfrage des Cell arrays

5.2 Arbeiten mit LTI-Modellen

119

Da num und den bei tf sowie p und z bei zpk auch bei SISO-Systemen immer Cell Arrays sind, kann f r diese Modell-Typen das Abspeichern in Zeilenvektoren und nicht u in Cell Arrays mit dem Parameter v erzwungen werden, wodurch sich der Zugri vereinfacht.
>> [num,den,Ts] = tfdata(h,v) ; >> num = 2 -3

Schnelle Datenabfrage tfdata (sys) zpkdata (sys) ssdata (sys) frdata (sysf rd) Hauptdaten Hauptdaten Hauptdaten Hauptdaten num,den,T s aus TF-LTI-Modell auslesen z,p,k,T s aus ZPK-LTI-Modell auslesen a,b,c,d,T s aus SS-LTI-Modell auslesen ant,f req,T s aus FRD-LTI-Modell auslesen

5.2.3

Rangfolge der LTI-Modelle

Werden Operationen auf LTI-Modelle verschiedener Typen gleichzeitig angewendet oder erhalten Befehle als Eingabe unterschiedliche Modell-Typen, so wird der Typ des Antwortmodells nach folgender Rangliste bestimmt (A > B: A hat Vorrang vor B): FRD > SS > ZPK > TF (5.20)

Intern bestimmt Matlab obiger Regel entsprechend zuerst den Modell-Typ mit der hchsten Prioritt und wandelt dann alle Modelle anderen Typs in diesen um, bevor o a es die Operation ausf hrt. Soll diese Regel durchbrochen werden und die Ausgabe in u einem bestimmten Modell-Typ erfolgen, so sind hier zwei Wege mglich (TF-Modell o systf, SS-Modell sysss): Vorheriges Umwandeln: Es werden erst alle Modelle in den gew nschten u Modell-Typ umgewandelt und dann die Operation ausgefhrt. u
sys = systf + tf(sysss) % Erst umwandeln, dann rechnen

Nachfolgendes Umwandeln: Es wird erst die Operation ausgef hrt und das u Ergebnis in den gew nschten Modell-Typ umgewandelt. u
sys = tf(systf + sysss) % Erst rechnen, dann umwandeln

Achtung:

Die beiden Vorgehensweisen sind numerisch nicht identisch! Aufgrund der unterschiedlichen Abfolge der Umwandlungen kann es hier zu Problemen bei der numerischen Darstellung kommen (Kap. 5.5)!

120

5 Regelungstechnische Funktionen Control System Toolbox

5.2.4

Vererbung von LTI-Modell-Eigenschaften

Von Interesse ist auch, wie bei Operationen auf LTI-Modellen deren Eigenschaften behandelt werden. Gleiches gilt beim Verkn pfen mehrerer Modelle verschiedener Typen. u Obwohl dies oft von der Operation abhngig ist, lassen sich doch einige Grundregeln a angeben: Diskrete LTI-Modelle: Werden durch eine Operation zeitdiskrete LTIModelle verkn pft, so m ssen alle Modelle die gleiche Abtastzeit haben bzw. bis u u auf eine alle Abtastzeiten unspeziziert sein (sys.Ts = -1). Die Abtastzeit des Ergebnisses ist dann die der Einzelmodelle, falls nicht alle Abtastzeiten unspeziziert waren. Notes und UserData werden bei den meisten Operationen nicht vererbt. Verknpfung zweier Systeme: Werden zwei Systeme mit Befehlen wie +, *, u [,], [;], append oder feedback verkn pft, so werden die Namen f r Ein- oder u u Ausgnge (InputName, OutputName) sowie Gruppen von Ein- oder Ausgngen a a (InputGroup, OutputGroup) vererbt, wenn sie bei beiden Systemen gleich sind. Andernfalls bleibt die entsprechende Eigenschaft des neuen Systems unbesetzt. Variable Variable: Bei TF- und ZPK-Modellen gilt folgende Rangfolge: -- Zeitkontinuierliche Modelle: -- Zeitdiskrete Modelle: p > s z^-1 > q > z

5.2.5

Umwandlung in einen anderen LTI-Modell-Typ

Um LTI-Modelle verschiedener Typen gemeinsam bearbeiten zu knnen, um sie zu vero binden oder um Operationen auf sie anwenden zu knnen, die nur f r einen bestimmten o u Typ mglich sind, knnen die Typen ineinander umgewandelt werden. o o Explizite Umwandlung Soll ein LTI-Modell in einen bestimmten Typ umgewandelt werden, so geschieht dies mit den Befehlen zur Erstellung von LTI-Modellen, nur dass jetzt das umzuwandelnde Modell sys als Parameter ubergeben wird: sys sys sys sysf rd = = = = tf (sys) zpk (sys) ss (sys) frd (sys,f req) % % % % Umwandlung Umwandlung Umwandlung Umwandlung in in in in TF-Modell ZPK-Modell SS-Modell FRD-Modell

Hierbei knnen die Typen TF, ZPK und SS ohne weiteres ineinander umgewandelt o werden, bei der Umwandlung in ein FRD-Modell muss zustzlich noch der Frequenzena vektor f req angegeben werden. Eine Umwandlung eines FRD-Modells in einen anderen Typ ist nicht mglich. o

5.2 Arbeiten mit LTI-Modellen Zustzlich bietet Matlab bereits folgende Umwandlungsfunktionen: a TF TF: ZPK: SS: [num,den] [z,p,k] [A,B,C,D] = = = tf2zp(num,den) tf2ss(num,den) zp2ss(z,p,k) ZPK zp2tf(z,p,k) SS

121

ss2tf(A,B,C,D,iu) ss2zp(A,B,C,D,iu)

Automatische Umwandlung Es gibt Operationen, die nur auf bestimmte Modell-Typen angewendet werden knnen. o Werden nun Modelle eines anderen Typs als Parameter an so einen Befehl ubergeben, so wandelt Matlab diese erst in den bentigten Modell-Typ um und f hrt dann die o u entsprechende Operation aus. So berechnet z.B. der Befehl step die Sprungantwort eines Systems basierend auf der Zustandsdarstellung (SS), in die alle anderen Modell-Typen umgewandelt werden. Achtung: Auch hier sind die in Kapitel 5.5 aufgef hrten Probleme bei der numeriu schen Darstellung von Systemen zu beachten!

5.2.6

Arithmetische Operationen

Da es sich bei den LTI-Modellen um mathematische Darstellungsformen handelt, knnen auch die meisten (Matrix-)Operationen auf sie angewendet werden. o Addition und Subtraktion Das Addieren bzw. das Subtrahieren zweier Systeme entspricht dem Parallel-Schalten, es werden also bei gleichem Eingangssignal die Ausgnge addiert oder subtrahiert: a Addition: Subtraktion: y y = = y1 + y2 = G1 u + G2 u y1 y2 = G1 u G2 u = = sys = sys1 + sys2 sys = sys1 - sys2

sys1

y1
c e + T E

sys1

y1
c e T E

r E

r E

sys2

sys

y2

sys2

sys

y2

sys = sys1 + sys2

sys = sys1 - sys2

Abb. 5.1: Signalussplan Addition und Subtraktion

122

5 Regelungstechnische Funktionen Control System Toolbox

F r Modelle in Zustandsdarstellung ergibt sich ( f r Subtraktion): u u A = A1 0 0 A2 B = B1 B2 C = C1 ()C2 D = D1 D2

Multiplikation: Die Multiplikation entspricht der Reihenschaltung zweier LTIModelle, wobei wegen der matrixhnlichen Struktur auf die Reihenfolge der Systeme zu a achten ist: y = G2 v = G2 (G1 u) = (G2 G1 ) u = sys = sys2 * sys1

uE

sys1

vE

y sys2

sys = sys2 * sys1

Abb. 5.2: Signalussplan Multiplikation

F r Modelle in Zustandsdarstellung ergibt sich wieder: u A = A1 B1 C2 0 A2 B = B1 D2 B2 C = C1 D1 C2 D = D1 D2

Inversion, links- und rechtsseitige Matrix-Division: Diese Operationen sind naturgem nur deniert f r quadratische Systeme, d.h. Systeme mit der gleichen Ana u zahl von Ein- und Ausgngen (gleichbedeutend mit D ist quadratisch). a Inversion: Linksseitige Matrix-Division: Rechtsseitige Matrix-Division: u = G1 y G1 1 G2 G1 G2 1 = = = sys = inv(sys) sys1 \ sys2 sys1 / sys2

F r Modelle in Zustandsdarstellung ergibt sich die Inversion mit D quadratisch und u invertierbar zu: A = A B D1 C + Addition Subtraktion B = B D1 C = D1 C D = D1

* Multiplikation ^ Potenz . Transposition

inv Matrix-Inversion / rechtsseitige Matrix-Division \ linksseitige Matrix-Division

5.2 Arbeiten mit LTI-Modellen

123

5.2.7

Auswhlen, verndern und verknupfen von a a LTI-Modellen

Auswhlen von LTI-Modellen a LTI-Modelle lassen sich aufgrund ihrer matrixhnlichen Struktur sehr leicht bearbeiten. a So knnen einfach Teilsysteme extrahiert oder verndert werden; Ein- und Ausgnge o a a lassen sich bequem hinzuf gen oder lschen. u o Anhand des folgenden Beispiels sollen diese Funktionen erlutert werden: Zuerst wird a ein MIMO-TF-Modell sys mit zwei Ein- und zwei Ausgngen erzeugt. Anschlieend a wird daraus ein Teilsystem teilsys extrahiert (Ubertragungsfunktion von Eingang 2 nach Ausgang 1). Nun wird diesem Teilsystem eine I-Ubertragungsfunktion zugewiesen und in das Originalsystem eingefgt. u
>> systf = tf([h11 h12;h21 h22]) Transfer function from input 1 to output... 2 s + 1 #1: ------s + 0.1 #2: 0

Transfer function from input 2 to output... 1 #1: ------s + 0.5 #2: 1 ----s - 1 % H von Eingang 2 nach Ausgang 1

>> teilsys = systf(1,2) Transfer function: 1 ------s + 0.5 >> teilsys = tf(1,[1 0]) Transfer function: 1 s >> systf(1,2) = teilsys;

Gelscht wird nun die erste Spalte respektive der Eingang 1, dann wird eine neue o Spalte (= neuer Eingang) angehngt. Hier ist auf die zwei Mglichkeiten der Zuweia o sung zu achten: Bei sys(i,j) = neu bleibt der Typ des Modells unverndert, bei a sys = [sys, neu] wird er auf den Typ von neu gewandelt.

124
>> systf(:,1) = []

5 Regelungstechnische Funktionen Control System Toolbox

Transfer function from input to output... 1 #1: s #2: 1 ----s - 1

>> systf(:,2) = [ tf(1,[1 -1]) ; tf(1,1) ] ;

Bei SS-Modellen geschieht bei der Extraktion Folgendes: teilsys = sys(i,j) erzeugt ein Teilsystem mit den Matrizen a, b(:,j), c(i,:) und d(i,j). Verknpfen von LTI-Modellen u Zum einfachen Zusammensetzen von Systemen aus mehreren Teilsystemen gibt es einige hilfreiche Funktionen: Horizontale Verknpfung: Die horizontale Verkn pfung addiert bei einem System u u mit verschiedenen Eingngen die entsprechenden Ausgnge miteinander, d.h. sie f gt a a u eine neue Spalte an H an: sys = [ sys1 , sys2 ] u1 u2
u1
E

sys1
c e T E

y = [ H1 , H2 ]

= H1 u1 + H2 u2

u2 sys

sys2

Vertikale Verknpfung: Die vertikale Verkn pfung verwendet f r beide Systeme u u u die gleichen Eingnge und setzt den Ausgang aus den beiden Teilausgngen zusammen. a a Sie entspricht dem Hinzuf gen einer neuen Zeile in der Matrix-Schreibweise. u sys = [ sys1 ; sys2 ]
u
r E E

sys1

y1

y1 y2

H1 u H2

sys2

y2

sys

Diagonale Verknpfung: Beim diagonalen Verkn pfen wird aus den Systemen ein u u neues System kreiert, die Teilsysteme bleiben aber vllig entkoppelt: o sys = append(sys1,sys2) y1 y2 H1 0 u1 u2 0 H2
u1
E

sys1

y1

u2 sys

sys2

y2

5.2 Arbeiten mit LTI-Modellen

125

Parallele Verknpfung: Das parallele Verkn pfen ist die generalisierte Form der u u Addition von Systemen. Es knnen sowohl die Ein- als auch die Ausgnge angegeben o a werden, die miteinander verkn pft werden sollen: Die Indexvektoren in1 und in2 geben u an, welche Eingnge u1 von sys1 und u2 von sys2 miteinander verbunden werden, und a die Indexvektoren out1 und out2 geben an, welche Ausgnge y1 von sys1 und y2 von a sys2 summiert werden. Das erstellte System sys hat dann Dim(v1 )+Dim(u)+Dim(v2 ) Eingnge und Dim(z1 ) + Dim(y) + Dim(z2 ) Ausgnge. a a
v1
E E

sys1 y1 c e y2 T

E E E

z1 y

sys = parallel(sys1,sys2,in1,in2,out1,out2)

u v2

u1

u2 E sys

sys2

z2

Serielle Verknpfung: Das serielle Verkn pfen ist die generalisierte Form der Mulu u tiplikation von Systemen. Es wird angegeben, welche Ausgnge outputs1 von sys1 mit a welchen Eingngen inputs2 von sys2 verbunden werden. Das erstellte System sys hat a dann Dim(u) Eingnge und Dim(y) Ausgnge. a a
v2
E

sys = series(sys1,sys2,outputs1,inputs2)

u E sys1 sys

y1 uE sys2 2 z1
E

Rckgekoppeltes System: u Besonders hilfreich ist die R ckkopplungsfunktion u feedback. Mit ihr lsst sich die Ubertragungsfunktion eines geschlossenen Regelkreises a sys = (E + vor rueck)1 vor mit den Ubertragungsfunktionen vor im Vorwrts- und a rueck im R ckwrtszweig einfach erzeugen. Standardwert f r sign ist 1 f r Gegenu a u u kopplung, f r Mitkopplung muss explizit +1 angegeben werden. u
u Ee E vor T
r

sys = feedback(vor,rueck[,sign])
sys rueck

Das folgende einfache Beispiel soll nun die Funktion des Befehls feedback verdeutlichen. Betrachtet wird das folgende System aus einem Integrator im Vorwrtszweig a (integrator), dessen Ausgang y mit einem Verstrkungsfaktor V (proportional) a r ckgekoppelt wird. u Zeitkonstante: Verstrkungsfaktor: a Ubertragungsfunktion: TI V = = 3s 2
u Ee E 1 s TI T V
r

y = G(s) = u

1 s TI 1+V 1 s TI

126
>> integrator

5 Regelungstechnische Funktionen Control System Toolbox


= tf(1,[3 0])

Transfer function: 1 --3 s >> proportional = tf(2,1) Transfer function: 2 >> feedback(integrator,proportional) Transfer function: 1 ------3 s + 2

Verknpfen von LTI-Modellen u [ sys1 , sys2 ] [ sys1 ; sys2 ] append (sys1,sys2) parallel() series () feedback (sys1,sys2[,sign]) Horizontales Verkn pfen u Vertikales Verkn pfen u Diagonales Verkn pfen u Paralleles Verkn pfen u Serielles Verkn pfen u Berechnen eines r ckgekoppelten Systems u

5.2.8

Spezielle LTI-Modelle

Mit der Control System Toolbox knnen auf schnelle Art und Weise stabile zeitkontinuo ierliche und zeitdiskrete mit Zufallswerten besetzte Testsysteme sowie Systeme 2. Ordnung deniert werden. Zufallswertsysteme Die Befehle rss bzw. drss erzeugen stabile zeitkontinuierliche bzw. zeitdiskrete LTIModelle in Zustandsdarstellung, deren Matrizen mit Zufallswerten besetzt werden. sys = rss (n[,p,m])) sys = drss (n[,p,m])

Mit den Befehlen rmodell bzw. drmodell knnen zufallswertige zeitkontinuierliche o bzw. zeitdiskrete TF-Modelle n-ter Ordnung und SS-Modelle n-ter Ordnung mit m Eingngen und p Ausgngen erzeugt werden: a a [num,den] = rmodel (n) [num,den] = drmodel (n)

[A,B,C,D] = rmodel (n[,p,m])

[A,B,C,D] = drmodel (n[,p,m])

5.2 Arbeiten mit LTI-Modellen System 2. Ordnung Ein System 2. Ordnung mit der Ubertragungsfunktion G(s) = 1 2 s2 + 2 0 D s + 0

127

(5.21)

a mit der Kennkreisfrequenz 0 und dem Dmpfungsfaktor D wird als TF- bzw. als SSModell wie folgt deniert: [num,den] [A,B,C,D] = = ord2 (0 ,D) ord2 (0 ,D)

Spezielle LTI-Modelle drmodel, drss rmodel, rss ord2 (0 ,D) Stabiles zeitdiskretes Modell mit Zufallswerten Stabiles zeitkontinuierliches Modell mit Zufallswerten System 2. Ordnung (Kennkreisfrequenz 0 , Dmpfung D) a

5.2.9

Umwandlung zwischen zeitkontinuierlichen und zeitdiskreten Systemen

Oft ist es erforderlich, ein zeitkontinuierliches System in ein zeitdiskretes umzuwandeln oder umgekehrt. So z.B. wenn Ergebnisse aus einer Simulation mit (abgetasteten) Messdaten verglichen werden sollen oder mit der Abtastung einhergehende Probleme selbst von Interesse sind. Matlab stellt dazu f r TF-, ZPK- oder SS-Modelle die beiden Befehle u sysd = c2d (sysc,Ts [,methode]) sysc = d2c (sysd [,methode]) zur Verf gung, wobei c2d ein zeitkontinuierliches Modell sysc in ein zeitdiskretes sysd u und d2c ein zeitdiskretes in ein zeitkontinuierliches Modell umwandelt. Anzugeben ist die Abtastzeit Ts bei der Diskretisierung und der optionale Parameter methode, der festlegt, mit welcher Diskretisierungsmethode umgewandelt werden soll: Halteglied 0. Ordnung (ZOH), Halteglied 1. Ordnung (FOH), Tustin-Approximation (Trapezmethode) u.a. Standardwert ist hier das Halteglied 0. Ordnung. Halteglied 0. Ordnung (Zero Order Hold ZOH): Die Berechnungsvorschrift ist denkbar einfach, der abgetastete Wert wird einfach bis zur nchsten Abtastung gehalten: a u(t) = u [k] k Ts t (k + 1) Ts (5.22)

128

5 Regelungstechnische Funktionen Control System Toolbox

Wird ein zeitdiskretes Modell mit ZOH in ein zeitkontinuierliches konvertiert, so gelten folgende Einschrnkungen: a Es d rfen keine Pole bei z = 0 liegen. u Negative reelle Pole im z-Bereich werden zu komplex-konjungierten Polpaaren im s-Bereich, d.h. die Ordnung erhht sich dort. o Halteglied 1. Ordnung (First Order Hold FOH): Die FOH interpoliert linear zwischen den beiden Abtastwerten und ist f r stetige Sysu teme in der Regel genauer als ZOH, aber nur f r die Diskretisierung geeignet. u u(t) = u [k] + t k Ts ( u [k + 1] u [k] ) Ts k Ts t (k + 1) Ts (5.23)

Tustin-Approximation (Trapezmethode, Bilineare Methode): Die Tustin-Approximation [22] verwendet zur Berechnung von u [k] den Mittelwert der Ableitungen am linken und rechten Intervallrand. Sie ist nicht deniert f r Systeme mit u Polen bei z = 1 und schlecht konditioniert f r Systeme mit Polen nahe z = 1. Es u ergibt sich als Zusammenhang zwischen s und z: z = e s Ts = 1 + s Ts 2
Ts 2

1 s

s =

2 z1 t z + 1

(5.24)

Im folgenden Beispiel wird die kontinuierliche Ubertragungsfunktion eines PT2 -Gliedes F (s) = 1 s2 + 0, 7 s + 1

deniert und dann mittels verschiedener Methoden diskretisiert: Halteglied 0. Ordnung (zoh), Halteglied 1. Ordnung (foh) und Tustin-Approximation (tustin). Anschlieend wird die Sprungantwort geplottet (Abb. 5.3 links).
>> sysc = tf([1],[1 .7 1]) % PT_2

Transfer function: 1 --------------s^2 + 0.7 s + 1 >> sysd = c2d(sysc,1.5) % Halteglied 0.~Ordnung

Transfer function: 0.6844 z + 0.4704 ----------------------z^2 - 0.1951 z + 0.3499 Sampling time: 1.5

5.2 Arbeiten mit LTI-Modellen


>> sysd1 = c2d(sysc,1.5,foh) Transfer function: 0.2654 z^2 + 0.7353 z + 0.1542 -----------------------------z^2 - 0.1951 z + 0.3499 Sampling time: 1.5 >> sysd2 = c2d(sysc,1.5,tustin) Transfer function: 0.2695 z^2 + 0.5389 z + 0.2695 -----------------------------z^2 - 0.4192 z + 0.497 Sampling time: 1.5 >> step(sysc,r-,sysd,c--,sysd1,g-.,sysd2,k-,20)
Step Response
1.4

129
% Halteglied 1.~Ordnung

% Tustin-Approximation

1.2

Amplitude

0.8

0.6

0.4

0.2

sysc sysd (ZOH) sysd1 (FOH) sysd2 (Tustin)


0 2 4 6 8 10 12 14 16 18 20

Time (sec)

Abb. 5.3: Verschiedene Diskretisierungsmethoden

Abtastung mit genderter Abtastzeit a Soll ein bestehendes zeitdiskretes TF-, ZPK- oder SS-Modell mit einer neuen Abtastzeit abgetastet werden, so kann dies nat rlich uber die Befehlsfolge c2d(d2c(sys),Ts) u geschehen. Die Control System TB bietet hierf r aber den einfacheren Befehl d2d(sys,Ts) an, der u ein ZOH-System erwartet. Hierbei muss die neue Abtastzeit keineswegs ein Vielfaches der alten Abtastzeit sein, auer die Pole im z-Bereich sind komplex: Dann muss die neue Abtastzeit ein geradzahliges Vielfaches der alten sein. F r die Ubertragungsfunktion F (s) = 1/(s + 1) ergibt sich (Abb. 5.4): u

130

5 Regelungstechnische Funktionen Control System Toolbox


Step Response
1

0.9

0.8

0.7

Amplitude

0.6

0.5

0.4

0.3

0.2

0.1

sysc sysd (ZOH) sysdd (ZOH resampled)


0 1 2 3 4 5 6 7 8 9 10

Time (sec)

Abb. 5.4: Abtastung mit genderter a Abtastzeit

>> sysc

= tf(1,[1 1])

% PT_1

Transfer function: 1 ----s + 1 >> sysd = c2d(sysc,2) % Halteglied 0.~Ordnung

Transfer function: 0.8647 ---------z - 0.1353 Sampling time: 2 >> sysdd = d2d(sysd,0.7) Transfer function: 0.5034 ---------z - 0.4966 Sampling time: 0.7 >> step(sysc,r-,sysd,c--,sysdd,g-.,10) % Neue Abtastzeit

Umwandlung zeitkontinuierlicher und zeitdiskreter Systeme c2d (sysc,Ts [,methode]) d2c (sysd[,methode]) d2d (sys,Ts ) methode Zeitkontinuierliches in zeitdiskretes System wandeln Zeitdiskretes in zeitkontinuierliches System wandeln Abtastung mit genderter Abtastzeit a Diskretisierungsmethode: zoh, foh, tustin, imp, prewarp, matched

5.3 Analyse von LTI-Modellen

131

5.3

Analyse von LTI-Modellen

Ist ein regelungstechnisches System modelliert, so folgt als zweiter Schritt die Untersuchung der Systemeigenschaften. Um Aussagen uber das Verhalten eines Systems zu machen, stellt die Control System Toolbox ein umfangreiches Spektrum von AnalyseFunktionen bereit: Von den allgemeinen Systemeigenschaften uber Modelldynamik im Zeit- und Frequenzbereich bis zur Uberpr fung der Regelbarkeit. u

5.3.1

Allgemeine Eigenschaften

Die allgemeinen Eigenschaften sind vor allem n tzlich f r die Programmierung komu u plexer Skripts und Funktionen, die mglichst allgemein gehalten sein sollen, z.B. f r o u Auswerteprogramme, die je nach ubergebenem Modell-Typ verschiedene Werte retour nieren, unterschiedliche Analyse-Funktionen aufrufen oder verschiedene Darstellungsarten whlen sollen. a So gibt class (objekt) den Typ von objekt zur ck, der unter anderem cell, double u oder char lauten kann. Gegenteiliges erledigt der Befehl isa (objekt,classname): Er uberprft, ob objekt vom Typ classname ist. u
>> sys = ss([ 1 2 ; 3 4 ],[ 1 1 ; 0 1 ],[ 3 1 ],0) ; >> class(sys) ans = ss >> isa(sys,cell) ans = 0

Mit isct (sys) und isdt (sys) wird getestet, ob sys zeitkontinuierlich bzw. zeitdiskret ist, whrend issiso (sys) eine logische 1 liefert, wenn sys ein SISO-System ist. a
>> isct(sys) ans = 1 >> issiso(sys) ans = 0

Mit isempty (sys) wird das Fehlen von Ein- und Ausgngen ermittelt; hat das System a Verzgerungen, liefert hasdelay (sys) eine 1. isproper (sys) liefert eine 1, wenn der o Rang des Zhlerpolynoms von sys kleiner oder gleich dem des Nennerpolynoms ist. a
>> sys = tf([1 3],[2 1 5]) ; >> isempty(sys) ans = 0 >> hasdelay(sys) ans = 0 >> isproper(sys) ans = 1

132

5 Regelungstechnische Funktionen Control System Toolbox

Ein wichtiger Befehl zur Ermittlung von Systemeigenschaften ist der Befehl size. Abhngig von den ubergebenen Parametern liefert er die Anzahl der Systemein- und a -ausgnge, der Dimensionen von LTI-Arrays, Angaben uber die Systemordnung bei TF-, a ZPK- und SS-Modellen und Anzahl der Frequenzen eines FRD-Modells: Anzahl der Systemein- und -ausgnge f r ein einfaches LTI-Modell; a u f r LTI-Arrays zustzlich die Lnge ihrer Dimensionen. u a a d = size(sys): Zeilenvektor d mit Anzahl der Ein- und Ausgnge [N y N u] f r ein a u einfaches LTI-Modell, [N y N u S1 S2 . . . Sp ] f r ein S1 S2 u . . . Sp LTI-Array mit N u Systemein- und N y Systemausgngen a size(sys,1): Anzahl der Systemausgnge a size(sys,2): Anzahl der Systemeingnge a size(sys,order): Systemordnung/Anzahl der Zustnde bei SS-Modellen a size(sys,frequency): Anzahl der Frequenzen eines FRD-Modells size(sys):
>> sys = tf([1 3],[2 1 5]) ; >> size(sys) Transfer function with 1 output and 1 input. >> d = size (sys) d = 1 1 >> Ns = size(sys,order) Ns = 2 >> sys = [ tf([1 3],[2 1 5]) , zpk([1 -1],[2 2],2) ] Zero/pole/gain from input 1 to output: 0.5 (s+3) -----------------(s^2 + 0.5s + 2.5) Zero/pole/gain from input 2 to output: 2 (s-1) (s+1) ------------(s-2)^2 >> d = size(sys) d = 1 2

Allgemeine Eigenschaften class (sys) isa (sys,classname) hasdelay (sys) isct (sys) isdt (sys) isempty (sys) isproper (sys) issiso (sys) size (sys) Gibt den Modell-Typ von sys aus Wahr, wenn sys vom Typ classname ist Wahr, wenn sys Zeitverzgerungen hat o Wahr, wenn sys zeitkontinuierlich ist Wahr, wenn sys zeitdiskret ist Wahr, wenn sys keine Ein- oder Ausgnge hat a Wahr, wenn Rang(Zhler) Rang(Nenner) a Wahr, wenn sys ein SISO-Modell ist Liefert die Dimensionen von sys

5.3 Analyse von LTI-Modellen

133

5.3.2

Modell-Dynamik

Ohne einen Zeitverlauf oder Antworten auf verschiedene Testsignale zu kennen, knnen o anhand verschiedener Kennwerte schon wichtige dynamische Systemeigenschaften angegeben werden, wie z.B. stationre Verstrkungen und Einschwingverhalten, Resonanza a frequenzen und Systemstabilitt. a Stationre (Gleich-)Verstrkung a a Mit dem Befehl dcgain (sys) ermittelt man die Verstrkung des Systems sys f r Frea u quenzen s = 0 (kontinuierliche Systeme) bzw. f r z = 1 (diskrete Systeme). Systeme u mit dominierendem integrierendem Verhalten haben die Gleichverstrkung unendlich. a
>> sys = [ tf(zpk([-1],[1 0],2)) , tf([2 1 -6],[2 1 1 -4 ]) ] Transfer function from input 1 to output: 2 s + 2 ------s^2 - s Transfer function from input 2 to output: 2 s^2 + s - 6 ------------------2 s^3 + s^2 + s - 4 >> dcgain(sys) ans = Inf 1.5000

Natrliche Frequenzen und Dmpfungen u a o a Die nat rlichen Frequenzen n und die zugehrigen Dmpfungen D eines Systems weru den bestimmt aus den konjungiert komplexen Polen j durch: n = 2 + 2 D = 2 + 2 (5.25)

F r reelle Eigenwerte wird die Dmpfung noch mit sign(Eigenwert) multipliziert. Im u a zeitdiskreten Fall werden uber z = esTs den Polen z entsprechende kontinuierliche Pole s berechnet (nat rlicher Frequenzvektor , Dmpfungsvektor d, Polstellenvektor p). u a damp (sys) [,d] = damp (sys) [,d,p] = damp (sys)
>> sys = tf(1,[2 -3 1 2]) >> damp(sys) Eigenvalue -5.83e-001 1.04e+000 + 7.94e-001i 1.04e+000 - 7.94e-001i Damping 1.00e+000 -7.95e-001 -7.95e-001 Freq. (rad/s) 5.83e-001 1.31e+000 1.31e+000

134 Bandbreite

5 Regelungstechnische Funktionen Control System Toolbox

Ein weiterer interessanter Wert eines Systemes ist seine Bandbreite, die in Matlab deniert ist als die erste Frequenz (in rad/s), bei der die Verstrkung auf 70,79% ihres a stationren Wertes (Gleich-Verstrkung) fllt, bei der also die Verstrkung um 3 dB a a a a abgenommen hat. Ermittelt wird dieser Wert in Matlab mit dem Befehl bandwidth (sys) f b = bandwidth (sys,dbdrop) Zustzlich zum System sys kann auch noch der Verstrkungswert dbdrop (in dB) angea a geben werden, an dem die Bandbreite ermittelt werden soll. Das folgende Beispiel erlutert die Funktion des Befehls bandwidth. F r das System a u sys wird zuerst die Bandbreite fb ermittelt. Anschlieend wird die Verstrkung in a dB f r die Gleichverstrkung und mittels des Befehls freqresp (siehe Kap. 5.3.4) die u a Verstrkung bei der Bandbreiten-Frequenz fb berechnet.3) Diese unterscheiden sich um a 3 dB, und auch der Vergleich der linearen Verstrkungswerte ergibt Gleiches. a
>> sys = tf([2 1 -6],[2 1 1 -4 ]) Transfer function: 2 s^2 + s - 6 ------------------2 s^3 + s^2 + s - 4 >> fb = bandwidth(sys) fb = 1.76299380692774 >> dB_dc = 20*log10(dcgain(sys)) dB_dc = 3.52182518111363 >> dB_fb = 20*log10(abs(freqresp(sys,fb))) dB_fb = 0.52183436632361 >> dB_dc - 3 ans = 0.52182518111363 >> abs(freqresp(sys,fb))/0.7079 ans = 1.50009860084947 >> dcgain(sys) ans = 1.50000000000000
3)

Zur Erinnerung: Der dB-Wert von x wird berechnet nach X dB = 20 log10 (x).

5.3 Analyse von LTI-Modellen Polstellen und Nullstellen eines LTI-Modells4)

135

Die Pole eines Systems werden ermittelt mit pole (sys) und stellen bei SS-Modellen die Eigenwerte der Systemmatrix A dar, bei TF- und ZPK-Modellen sind es die Wurzeln des Nennerpolynoms, die auch mit dem Matlab-Befehl roots berechnet werden knnen o (Polstellenvektor p und Vektor r mit den Wurzeln des Polynoms c). p = pole (sys) r = roots (c) Der Befehl zero (sys) gibt die Nullstellen des Systems an. Wird das Ergebnis von zero dem Vektor [z,k] zugewiesen, enthlt z den Nullstellenvektor und k die a Verstrkung des Systems bei Nullstellen-Polstellen-Darstellung: a z = zero (sys) [z,k] = zero (sys) Im Beispiel werden zuerst die Polstellen des ZPK-Modells berechnet, dann aus diesem Zhler und Nenner des entsprechenden TF-Modells extrahiert und anschlieend die a Wurzeln des Nennerpolynoms ermittelt, die nat rlich zu den Polstellen identisch sind. u Zu guter Letzt werden noch der Nullstellenvektor und die ZPK-Verstrkung ermittelt. a
>> sys = zpk([-0.2 0.6],[-0.5 -0.7-0.8*i -0.7+0.8*i 0.3],2) Zero/pole/gain: 2 (s+0.2) (s-0.6) ----------------------------------(s+0.5) (s-0.3) (s^2 + 1.4s + 1.13) >> pole(sys) ans = -0.5000 -0.7000 - 0.8000i -0.7000 + 0.8000i 0.3000 >> [num,den] = tfdata(tf(sys),v) ; >> den den = 1.0000 1.6000 1.2600 0.0160 >> roots(den) ans = -0.7000 + 0.8000i -0.7000 - 0.8000i -0.5000 0.3000 >> [z,k] = zero(sys) z = -0.2000 0.6000 k = 2

-0.1695

4) Matlab enthlt bereits den Befehl [V ,D] = eig(A), mit dem die Eigenwertmatrix D und die a Eigenvektormatrix V der Matrix A berechnet werden, so dass gilt: A V = V D (Eigenwertproblem

A = x).

136

5 Regelungstechnische Funktionen Control System Toolbox

Im Zusammenhang mit den Nullstellen- und Polstellenvektoren sind die Befehle esort und dsort zwei n tzliche Sortierfunktionen: u s = esort (p) [s,ndx] = esort (p) s = dsort (p) [s,ndx] = dsort (p)

esort ordnet die im Vektor p abgespeicherten Pole eines kontinuierlichen Systems, zuerst die instabilen Pole und dann, nach Realteil in absteigender Reihenfolge, die anderen Pole. ndx bezeichnet den Index der Pole im Vektor p.
>> pc = pole(sys); >> [sc,ndxc] = esort(pc); >> [ pc , sc , ndxc ] ans = -0.5000 0.3000 -0.7000 - 0.8000i -0.5000 -0.7000 + 0.8000i -0.7000 + 0.8000i 0.3000 -0.7000 - 0.8000i

4.0000 1.0000 3.0000 2.0000

dsort ordnet die im Vektor p abgespeicherten Pole eines diskreten Systems, zuerst die instabilen Pole und dann, nach Betrag in absteigender Reihenfolge, die anderen Pole.
>> pd = pole(c2d(sys,1)); >> [sd,ndxd] = dsort(pd) ; >> [ pd , sd , ndxd ] ans = 1.3499 1.3499 0.6065 0.6065 0.3460 + 0.3562i 0.3460 + 0.3562i 0.3460 - 0.3562i 0.3460 - 0.3562i

1.0000 2.0000 3.0000 4.0000

Nullstellen-Polstellen-Verteilung Die Aufgaben von pole und zeros vereinigt die Funktion pzmap. Mit ihr lsst sich a die Null- und Polstellenverteilung grasch anzeigen bzw. als Nullstellenvektor z und Polstellenvektor p abspeichern. pzmap (sys) [p,z] = pzmap (sys) F r die Achsenskalierung stehen die beiden Befehle sgrid und zgrid zur Verf gung. u u sgrid sgrid (z,wn) zgrid zgrid (z,wn)

F r den kontinuierlichen Fall erzeugt sgrid in der s-Ebene ein Gitternetz mit konu stanten Dmpfungen (Bereich von 0 bis 1 mit Schrittweite 0,1) und konstanten nat rlia u chen Frequenzen (Bereich von 0 bis 10 rad/s mit Schrittweite 1 rad/s). In der (diskreten) z-Ebene erzeugt zgrid ein Gitternetz mit konstanten Dmpfuna gen (Bereich von 0 bis 1 mit Schrittweite 0,1) und konstanten nat rlichen Frequenzen u (Bereich von 0 bis mit Schrittweite /10).

5.3 Analyse von LTI-Modellen

137

F r das folgende Beispiel zeigt Abb. 5.5 die Null- und Polstellenverteilung der denierten u ZPK-Ubetragungsfunktion f r den zeitkontinuierlichen Fall in der s-Ebene (links) und u f r den zeitdiskreten Fall (Abtastzeit 1 s) in der z-Ebene (rechts). Nullstellen werden u durch und Polstellen durch gekennzeichnet.
>> sys = zpk([-0.2 0.6],[-0.5 -0.7-0.8*i -0.7+0.8*i 0.3],2) Zero/pole/gain: 2 (s+0.2) (s-0.6) ----------------------------------(s+0.5) (s-0.3) (s^2 + 1.4s + 1.13) >> sysd = c2d(sys,1) Zero/pole/gain: 0.47509 (z+0.5171) (z-0.8187) (z-1.827) -------------------------------------------(z-0.6065) (z-1.35) (z^2 - 0.6919z + 0.2466) Sampling time: 1 >> subplot(121), pzmap(sys) , sgrid >> subplot(122), pzmap(sysd), zgrid

PoleZero Map
1 0.64 0.8 0.76 0.6 0.86 0.5 0.34 0.16 0.8 0.6 0.4 0.94 0.2 1 0.8 0.6

PoleZero Map
0.5/T 0.6/T 0.4/T 0.7/T 0.8/T 0.1 0.3/T 0.2 0.3 0.40.2/T 0.5 0.6 0.7 0.8 0.1/T 0.9

Imaginary Axis

Imaginary Axis

0.4

0.4 0.2 0.9/T

0.2 0.985 0 0.2 0.985 0.4 0.94

/T 0 /T 0.2 0.4 0.6 0.8 1 1 0.8/T 0.7/T 0.2/T 0.3/T 0.9/T 0.1/T

0.2 0.4 0.6 0.8 0.5 0.34 0.16 0.5 0 0.5 1

0.6 0.86 0.8 0.76 0.64 1 1

0.6/T 0.4/T 0.5/T 0.5 0 0.5 1 1.5 2

Real Axis

Real Axis

Abb. 5.5: Nullstellen-Polstellen-Verteilung (pzmap): s-Ebene (links), z-Ebene (rechts)

Da die Funktion pzmap nur f r SISO-Systeme geeignet ist, erweitert der Befehl iopzmap u diese Funktionalitt auch auf MIMO-Systeme, wobei jeweils f r jede Ein-/Ausgangsa u kombination in einem Subplot die Null-Polstellenverteilung angezeigt wird. iopzmap (sys[,sys2,...]) Auch lassen sich Null-Polstellenverteilungen von Systemen mit unterschiedlichen Anzah len von Ein- und Ausgngen anzeigen. Anhand der MIMO-ZPK-Ubertragungsfunktion a aus Kap. 5.1.2 wird dies in Abb. 5.6 dargestellt:

138
>> >> >> >> Z P K H = = = =

5 Regelungstechnische Funktionen Control System Toolbox


{ [] [-6 1 1 ] ; [1 2] -1 }; { [-2 1] [-5 1] ; [-4 -1] [-1 -1+i -1-i] }; [2 3 ; 1 -1]; zpk(Z,P,K)

Zero/pole/gain from input 1 to output... 2 #1: ----------(s+2) (s-1) (s-1) (s-2) ----------(s+4) (s+1)

#2:

Zero/pole/gain from input 2 to output... 3 (s+6) (s-1)^2 #1: --------------(s+5) (s-1) - (s+1) --------------------(s+1) (s^2 + 2s + 2)

#2:

>> iopzmap(sys,H)

PoleZero Map
From: In(1) 1 From: In(2)

0.5 To: Out(1)

Imaginary Axis

0.5

1 1

0.5 To: Out(2)

0.5

1 4

2 6

Real Axis

Abb. 5.6: Nullstellen-Polstellen-Verteilung fr MIMO-Systeme (iopzmap) u

5.3 Analyse von LTI-Modellen Normen eines LTI-Modells (H2 und H )

139

Mit Normen lassen sich bei der Stabilittsanalyse Aussagen uber die Entfernung der a Systemzustnde vom Ruhezustand machen. Die Control System Toolbox unterst tzt a u zwei Normen: Die H2 -Norm und die H -Norm. Whrend die H2 -Norm nicht fr FRDa u a Modelle geeignet ist, bearbeitet die H -Norm smtliche Modell-Typen. Die Befehls-Syntax lautet: norm (sys) norm (sys,2) norm (sys,inf [,tol]) [ninf ,fpeak] = norm (sys,inf ) Standardnorm ist die H2 -Norm, die mit norm(sys) bzw. norm(sys,2) kalkuliert wird. Die H -Norm wird mit norm(sys,inf [,tol]) aufgerufen, der optionale Parameter tol legt die Berechnungsgenauigkeit fest. Sie liefert die maximale Verstrkung ninf des a Frequenzgangs zur ck, wobei fpeak die zugehrige Frequenz ist. So wird z.B. die H u o Norm f r die Berechnung des Phasenrandes (siehe Kap. 5.3.4) verwendet. u Die H -Norm der folgenden Ubertragungsfunktion wird berechnet und der Frequenzgang in Abb. 5.7 gezeigt.
>> sys = tf(1,[1 2 100]) Transfer function: 1 --------------s^2 + 2 s + 100 >> [ninf,fpeak] = norm(sys,inf) ninf = 0.0503 fpeak = 9.8995 >> bode (sys)
Bode Diagram
40 30

Magnitude (dB) Phase (deg)

20 10 0 10 20 30 40 0

45

90

135

180 10
0

10

10

Frequency (rad/sec)

Abb. 5.7: Bode-Diagramm fr u sys = tf(1,[1 2 100])

140

5 Regelungstechnische Funktionen Control System Toolbox

Kovarianz mit weiem Rauschen Mit dem Befehl covar(sys,W ) lsst sich schlielich die Ausgangs-Autokorrelationsa funktion des Systems sys auf Anregung mit weiem Rauschen (Amplitude W ) bestimmen. Bei SS-Modellen gibt es zustzlich die Zustands-Autokorrelationsfunktion. a [P ,Q] = covar (sys,W ) P ist hierbei die Autokorrelationsfunktion yy des Ausgangs und Q die Autokorrelationsfunktion xx der Zustnde. a
>> sys = tf(1,[1 1]) ; Transfer function: 1 ----s + 1 >> P = covar(sys,1) P = 0.5000 >> sys = tf(1,[eps 1]) Transfer function: 1 --------------2.22e-016 s + 1 >> P = covar(sys,1) P = 2.2518e+015

Modell-Dynamik dcgain (sys) bandwidth (sys) damp (sys) zero (sys) pole (sys) roots (c) eig (A) esort(p) dsort(p) pzmap (sys) iopzmap (sys) sgrid, zgrid norm (sys) covar (sys,W ) stationre (Gleich-)Verstrkung a a Bandbreiten-Frequenz bei Verstrkung 3 dB a nat rliche Frequenz und die Dmpfung u a Nullstellen eines LTI-Modells Pole eines LTI-Modells Wurzeln eines Polynoms c (Matlab) Eigenwerte und Eigenvektoren der Matrix A (Matlab) Ordnet die zeitkontinuierlichen Pole Ordnet die zeitdiskreten Pole Nullstellen-Polstellen-Verteilung (SISO-Systeme) Nullstellen-Polstellen-Verteilung (MIMO-Systeme) Gitternetz in der s- bzw. z-Ebene (Wurzelortskurven; Nullstellen- und Polstellen-Verteilung) Normen eines LTI-Modells (H2 und H ) Kovarianz mit weiem Rauschen

5.3 Analyse von LTI-Modellen

141

5.3.3

Systemantwort im Zeitbereich

F r den Regelungstechniker ist es sehr wichtig, das Verhalten eines Systems im Zeitbeu reich zu kennen. Zur Erinnerung: Das Ausgangssignal im Zeitbereich (zeitkontinuierlich und zeitdiskret) ergibt sich aus (siehe auch [8],[17])
t

y(t) = C eAt x0 +
=0 k1

C eA(t ) B + D u( ) d

(5.26)

y[k] = C Ak x0 +
i=0

C Aki1 B + D u[i]

(5.27)

mit dem Anfangswertvektor x0 und dem Eingangssignalvektor u sowie der freien Bewegung (linker Term) und der erzwungenen Bewegung (rechter Term). In der Regel interessieren vor allem die Antworten auf bestimmte Eingangssignale, wie z.B. die Impulsantwort oder Sprungantwort. Die Control System Toolbox stellt unter anderem folgende Funktionen bereit: Anfangswertantwort (initial), Impulsantwort (impulse), Sprungantwort (step). Mittels gensig knnen bestimmte Eingangssignale o generiert werden und lsim berechnet den Zeitverlauf f r beliebige Eingangssignale. u Anfangswertantwort Die Anfangswertantwort beschreibt das Verhalten des Systems auf bestimmte Anfangswerte des Zustandsvektors x0 und wird als die freie Bewegung bezeichnet (linker Term in Gleichung (5.26) bzw. (5.27)), der Einuss der Eingnge wird also zu null gesetzt. a Sie wird berechnet mit dem Befehl initial: initial (sys,x0 ,[,t]) [y,t,x] = initial (sys,x0 ,[,t]) Hierbei ist sys ein SS-Modell (MIMO) und x0 der Vektor mit den Anfangswerten. Der optionale Parameter t bestimmt den Zeitvektor: Ist t skalar, so gibt er das Ende der Berechnungsperiode an, ist er deniert als t = 0:dt:Tf , so reicht der Zeitvektor von 0 bis Tf mit der Schrittweite dt. Ist sys zeitdiskret, so sollte dt gleich der Abtastzeit Ts sein, ist sys zeitkontinuierlich, so sollte dt ausreichend klein sein, da f r die Berechnung u der Antworten das System mit ZOH bzw. FOH diskretisiert wird und anschlieend mit dt abgetastet wird. Wird die zweite Variante gewhlt, so ist y der Ausgangsvektor, t der Zeitvektor a und x der Zustandsvektor der Zustnde. F r den Fall eines SIMO-Modells hat der a u Ausgangsvektor y so viele Zeilen wie t Elemente und so viele Spalten wie das System Ausgnge, also die Dimension length(t)N y. Bei MIMO-Modellen erweitert sich y a um eine dritte Dimension, nmlich die Anzahl der Eingnge N u: a a SIMO: MIMO: Dim(y) = length (t) N y Dim(y) = length (t) N y N u

142

5 Regelungstechnische Funktionen Control System Toolbox

Sowohl die uber den Zeitvektor t als auch die uber die Dimension von y gemachten Aussagen gelten allgemein f r alle Antwortfunktionen initial, impuls, step und lsim. u So wurden die Verlufe in Abb. 5.8 erzeugt mit: a
>> >> >> >> >> >> >> >> >> systf = tf(5,[1 1 10]) ; sys = ss(systf) ; [y,t,x] = initial(sys,[4 -1],12) ; subplot(221) plot(t,x(:,1),r-,t,x(:,2),g--) subplot(122) plot(t,y) subplot(223) plot(x(:,1),x(:,2))

% Anfangswertantwort

Freie Bewegung 5 y (t) 4 3 0 2 5 0 4 2 x1, x2 0 2 4 0 5 Zeit t 10 2 3 4 x1 x2 5 Zeit t 10 x2 1 0 1

Zustandstrajektorien

0 x1

Abb. 5.8: Anfangswertantwort (initial): Zeitverlufe und Zustandstrajektorien a

Impulsantwort Die Impulsantwort eines Systems ist deniert als die Antwort auf die Anregung des Systems mit einem Dirac-Impuls (t) bzw. einem Einheitsimpuls bei diskreten Systemen [k]. Die zugehrigen Befehle lauten: o impulse (sys[,t]) y = impulse (sys[,t]) [y,t[,x]] = impulse (sys[,t]) Hier kann sys ein beliebiges LTI-Modell sein, f r den optionalen Zeitvektor t und u MIMO-Modelle gilt das bereits oben Gesagte. Die R ckgabe von x ist nur bei SSu Modellen mglich, hier wird der Anfangswertvektor auf null gesetzt. o

5.3 Analyse von LTI-Modellen Sprungantwort

143

Die Sprungantwort ergibt sich, wenn das System mit einem Einheitssprung (t) beaufschlagt wird. Die Befehle lauten analog denen bei der Impulsantwort: step (sys[,t]) y = step(sys[,t]) [y,t[,x]] = step(sys[,t]) Ein Beispiel f r ein SIMO-Modell mit einer PT1 - und einer PT2 -Ubertragungsfunktion u zeigt Abb. 5.9, der entsprechende Programmcode steht nachfolgend:
>> sys2in = [ tf(5,[1 1 10]) , tf(1,[1 1]) ] ; >> subplot(211) , impulse(sys2in); % Impulsantwort >> subplot(212) , step(sys2in); % Sprungantwort
Impulse Response
From: In(1) 2 1.5 1 0.5 0 0.5 1 0 2 4 6 8 10 12 0 2 4 6 8 10 12 From: In(2)

Amplitude

Time (sec) Step Response


From: In(1) 1 From: In(2)

Amplitude

0.8 0.6 0.4 0.2 0 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Time (sec)

Abb. 5.9: Impulsantwort (impulse) und Sprungantwort (step)

Systemantwort auf beliebiges Eingangssignal: Eine sehr hilfreiche Funktion ist lsim(sys,u,t): Mit ihr kann die Systemantwort auf ein mehr oder weniger beliebiges Eingangssignal u getestet werden. Die Befehls-Syntax lautet: lsim (sys,u,t,[,x0]) [y,t] = lsim (sys,u,t) [y,t[,x]] = lsim (sys,u,t,[,x0]) sys ist ein LTI-Modell (Anfangswertvektor x0 nur bei SS-Modellen), u ist eine beliebige Eingangssignalmatrix, die so viele Zeilen wie t Elemente und so viele Spalten wie das System Eingnge hat (Dimension length(t) N u). a

144

5 Regelungstechnische Funktionen Control System Toolbox

Ist die Abtastzeit dt des Zeitvektors zu gro gewhlt, w rde also unterabgetastet wera u den, erkennt lsim dies und gibt eine Warnung aus. Testsignal erzeugen: Um Standardtestsignale nicht selber programmieren zu m ssen, weist die Control Sysu tem Toolbox den Befehl gensig auf, der ein Testsignal u und den zugehrigen Zeitvektor o t erzeugt. [u,t] = gensig(typ,tau[,Tf ,T s]) Mit dem Parameter typ kann gewhlt werden zwischen Sinussignal (sin), einem pea riodischen Rechtecksignal (square) und einer periodischen Pulsfunktion (pulse). Die Periodendauer ist tau, Tf bestimmt die Dauer des Signals und T s die Abtastzeit. Abb. 5.10 zeigt die Antwort der unten stehend denierten PT1 - und PT2 -Modelle auf das mit gensig erzeugte Rechtecksignal.
>> >> >> >> sys2in = [ tf(1,[1 1]) ; tf(1000,[1 5 1000]) ] ; [u,t] = gensig(square,3,10,0.01) ; % beliebiges Eingangssignal [y,t] = lsim(sys2in,r-,u,t) ; % Antwort auf beliebiges Eingangssignal plot(t,y(:,1),t,y(:,2),t,u)
Antwort auf beliebiges Eingangssignal 2 1.5 1 0.5 0 0.5 1 0 1 2 3 4 5 Zeit t 6 7 8 9 10 u(t) PT1 PT2

Abb. 5.10: Antwort auf beliebiges Eingangssignal (gensig und lsim)

Systemantwort im Zeitbereich initial (sys,x0 ,[,t]) impulse (sys[,t]) step (sys[,t]) lsim (sys,u,t,[,x0]) gensig (typ,tau) Anfangswertantwort berechnen Impulsantwort berechnen Sprungantwort berechnen Systemantwort auf beliebiges Eingangssignal Testsignal erstellen

5.3 Analyse von LTI-Modellen

145

5.3.4

Systemantwort im Frequenzbereich

F r den Regelungstechniker interessant ist auch das Systemverhalten im Frequenzbeu reich: Oft sind die Testsignale sinusfrmig oder die Parameter des Systems sind nicht o genau bekannt. Mittels der Methoden zur Frequenzganguntersuchung knnen sehr umo fangreiche Aussagen uber frequenzabhngige Systemeigenschaften gemacht werden: staa tionre Gleichverstrkung, Bandbreite, Amplituden- und Phasenrand, Stabilitt des a a a geschlossenen Regelkreises. Erinnert werden soll an dieser Stelle, dass der Frequenzgang F (j) deniert ist als die Ubertragungsfunktion eines LTI-SISO-Systems auf der imaginren Achse [17]. Vora aussetzung hierf r ist also, dass das System asymptotisch stabil ist, die Realteile aller u Eigenwerte kleiner null sind. Es wird nur der eingeschwungene Zustand betrachtet, die Anteile der Realteile i sind bereits asymptotisch abgeklungen. Frequenzantwort berechnen Zur schnellen Berechnung von Frequenzantworten dienen die Befehle evalfr und freqresp. f rsp = evalfr (sys,f ) H = freqresp (sys,w) Soll die Frequenzantwort eines Systems sys lediglich f r eine einzelne Frequenz f eru mittelt werden, so geschieht dies mit evalfr. Anzumerken ist, dass f auch eine komplexe Frequenz sein kann. Die Frequenzantworten f r mehrere Frequenzen berechnet u freqresp, wobei w der Frequenzvektor ist. Die Ergebnisvariable H ist in jedem Fall ein dreidimensionaler Array der Dimension N y N u length(w), so dass die einzelnen Elemente mit H(i,j,k) angesprochen werden m ssen: k-te Frequenzantwort der u Ubertragungsfunktion von Eingang j nach Ausgang i.
>> sys = tf([3 -1],[-2 1 1]) Transfer function: -3 s + 1 ------------2 s^2 - s - 1 >> w = [-j , -2-j , -1+j] w = 0 - 1.0000i -2.0000 - 1.0000i -1.0000 + 1.0000i >> [ evalfr(sys,w(1)) ; evalfr(sys,w(2)) ; evalfr(sys,w(3))] ans = 0 - 1.0000i 0.5846 - 0.3231i 0.6000 + 0.8000i >> H = freqresp(sys,w) H(:,:,1) = 0 - 1.0000i H(:,:,2) = 0.5846 - 0.3231i H(:,:,3) = 0.6000 + 0.8000i

146 Bode-Diagramm

5 Regelungstechnische Funktionen Control System Toolbox

Das Bode-Diagramm stellt den Frequenzgang von F (j) getrennt nach Betrag und Winkel dar (Kap. 5.1.4), ubereinander aufgetragen uber der logarithmischen Frequenzachse. Oben wird der Amplitudengang logarithmisch in Dezibel (1 dB = 20 log10 | F (j) |) und unten der Phasengang in Grad angezeigt. Diese Darstellung hat den groen Vorteil, dass sich der Gesamtfrequenzgang F (j) der Serienschaltung mehrerer LTI-Systeme (Produkt der einzelnen Frequenzgnge Fi (j)) a
n

F (j) =
i

| Fi (j) | e j

n i

i ()

(5.28)

ergibt aus der Summation der logarithmierten Teilbetrge | Fi (j) | und der Summation a der einzelnen Winkel i (j): Amplitudengang : | F (j) | = log10 | F1 (j) | + log10 | F2 (j) | + . . . + log10 | Fn (j) | Phasengang : () = 1 () + 2 () + . . . + n ()

In Matlab wird ein Bode-Diagramm des LTI-Modells sys erstellt mit den Befehlen bode (sys[,w]) [mag,phase,w] = bode (sys) Es kann der Frequenzvektor w mit der Untergrenze wmin und der Obergrenze wmax explizit angegeben werden (in rad/s und in geschweiften Klammern!). Auch kann mit logspace (Kap. 2.2.2) ein Frequenzvektor mit logarithmischem Abstand der Frequenzpunkte erzeugt werden: w = wmin:schrittweite:wmax w = { wmin , wmax } w = logspace (start,ziel,anzahl) Wird die dritte Version des Befehlsaufrufes ausgef hrt, so speichert bode den Amu plitudengang in mag, den Phasengang in phase und den zugehrigen Frequenzvektor o in w. Zu beachten ist, dass mag und phase dreidimensionale Arrays der Dimension N y N u k mit k = length(w) sind. Im Fall eines MIMO-Systems stellen mag(i,j,k) und phase(i,j,k) die Werte von Amplituden- und Phasengang f r die Ubertragungsu funktion von Eingang j nach Ausgang i dar. Auch im Fall eines SISO-Modells sys m ssen die Werte f r die Frequenz k angesprochen werden mit mag(1,1,k) bzw. u u phase(1,1,k)! Bei zeitkontinuierlichen Systemen werden nur positive Frequenzen auf der imaginren a Achse berechnet, bei zeitdiskreten Systemen wird die Ubertragungsfunktion auf dem (oberen) Einheitskreis ausgewertet gem a z = ej Ts 0 N = (5.29) Ts a mit der Nyquist-Frequenz N (Die untere Hlfte des Einheitskreises entspricht wegen der Periodizitt der z-Ubertragungsfunktion mit 2N der oberen). a

5.3 Analyse von LTI-Modellen

147

Anmerkung: Sollen mehrere Systemantworten in ein Bode- bzw. Nyquist-Diagramm geplottet werden, so knnen die Befehle bode bzw. nyquist wie folgt aufgerufen werden: o bode (sys1,sys2,...,sysN [,w]) nyquist (sys1,sys2,...,sysN [,w]) bode (sys1,stil1,...,sysN ,stilN ) nyquist (sys1,stil1,...,sysN ,stilN )

Hierbei sind sys1, sys2 etc. die einzelnen Systeme, die alle die gleiche Anzahl an Einsowie Ausgngen haben m ssen. Werden Linienarten (stil1, stil2 etc.) angegeben, a u so muss dies f r alle Systeme geschehen, es kann dann aber kein Frequenzvektor w uberu geben werden. Soll dies trotzdem geschehen, so m ssen die entsprechenden Diagramme u von Hand erstellt werden, z.B. mit loglog und semilogx (Kap. 3.5.3). Das Beispiel soll die Mglichkeiten des Befehls bode verdeutlichen: Es wird eine o Ubertragungsfunktion sysPT1 deniert und dann mit der Abtastzeit 0.05 diskreti siert (sysPT1d). Die beiden Ubertragungsfunktionen werden in den linken Teilplot (subplot(121)) in Abb. 5.11 mit bode (sysPT1,r-,sysPT1d,b--) geplottet.
>> sysPT1 = tf(1,[0.05 1]) ; >> sysPT1d = c2d(sysPT1,0.05) Transfer function: 0.6321 ---------z - 0.3679 Sampling time: 0.05 >> subplot(121) , >> bode(sysPT1,r-,sysPT1d,b--)

Bode Diagram
0 40

Bode Diagram

Magnitude (dB)

10 20 30 40 0

Magnitude (dB) Phase (deg)


1 0 1 2 3

20 0 20 40 60 0 45 90 135 180

Phase (deg)

45 90 135 180 10 10 10 10 10

10

10

10

10

Frequency (rad/sec)

Frequency (rad/sec)

Abb. 5.11: Bode-Diagramme: sysPT1 (-) und sysPT1d (--) (links), sysPT2 fr unterschiedliu che Dmpfungen (rechts) a

148

5 Regelungstechnische Funktionen Control System Toolbox

Die Erzeugung des rechten Teilplots (subplot(122)) von Abb. 5.11 gestaltet sich umfangreicher: Die Ubertragungsfunktion sysPT2 soll f r verschiedene Dmpfungen in u a ein Bode-Diagramm mit verschiedenen Linienstilen geplottet werden: In der ersten for-Schleife wird ein TF-Modell mit vier (size(sysPT2)=length(d)+1) Eingngen und einem Ausgang deniert, wobei der jeweilige Dmpfungswert aus dem a a Vektor d genommen wird. Da die Anzahl der Parametervariationen f r d beliebig whlu a bar sein soll, werden mit der zweiten for-Schleife die Bode-Diagramme ubereinan der gelegt, was den vorherigen Befehl hold on erfordert (aktiviert Haltefunktion des Teilplots). Die Linienstile sind in dem Cell Array stil gespeichert und werden mit stil {n}5) aufgerufen.
>> >> >> >> >> >> >> >> >> >> >> sysPT2 = tf(10,[1 0.05 10]); d = [sqrt(2)/2 1.6 3] ; for n = 1:1:length(d) , sysPT2 = [ sysPT2 ; tf(10,[1 d(n) 10]) ] ; end; subplot(122) , hold on; stil = {r- b-. k- g--} for n = 1:1:(length(d)+1) , bode(sysPT2(n),stil{n}); end;

Wie aus dem Vergleich der beiden PT1 -Frequenzgnge in Abb. 5.11 links sofort zu sehen, a stimmen die beiden Verlufe aufgrund der viel zu groen Abtastzeit nur schlecht uberein, a was sich in der Sprungantwort deutlich zeigt (Abb. 5.12). Eine geringere Abtastzeit f hrt u dann zu besserem Ergebnis (sysPT1dneu).
>> sysPT1dneu = d2d(sysPT1d,0.01) ; >> step(sysPT1,r-,sysPT1d,b-.,sysPT1dneu,g--) >> legend(sysPT1,sysPT1d,sysPT1dneu,4)
Step Response
1.4

1.2

Amplitude

0.8

0.6

0.4

0.2

sysPT1 sysPT1d sysPT1dneu


0 0.05 0.1 0.15 0.2 0.25 0.3

Time (sec)

Abb. 5.12: Sprungantworten von sysPT1, sysPT1d und sysPT1dneu

5) Genau genommen m sste bei beliebiger Zahl von Dmpfungswerten d und ergo beliebiger Zahl von u a Eingngen der Befehl zur Auswahl des Linien-Stils stil {1+mod(n-1,size(sysPT2,1))} lauten, so dass a die vier Linienarten fr n > 4 zyklisch wiederholt wrden. u u

5.3 Analyse von LTI-Modellen Amplituden- und Phasenrand

149

Eine weitere Hilfe im Rahmen von Stabilittsuntersuchungen stellen die beiden Befehle a margin und allmargin dar, die die Stabilittsreserven Amplitudenrand und Phasena rand f r geschlossene Regelkreise berechnen. u Der Amplitudenrand (Amplitudenreserve) ist deniert als die Verstrkung FR , a die zustzlich in die Ubertragungsfunktion des oenen Regelkreises eingebracht werden a muss, damit der geschlossene Regelkreis gerade instabil wird: Der Wert ergibt sich aus der Inversen des Betrags | F (j) | bei der Phasen-Durchtrittsfrequenz . Der Phasenrand (Phasenreserve) R ist deniert als der Winkelabstand zu 180, bei dem der Wert des Betrags | F (j) | der Ubertragungsfunktion des oenen Regelkreises 1 ist, die zugehrige Frequenz wird Amplituden-Durchtrittsfrequenz A o genannt. F r die Stabilitt des geschlossenen Regelkreises muss gelten: u a A < gleichbedeutend A = FR > 1 gleichbedeutend R = 0 R > 0

An der Stabilittsgrenze gilt: a

und FR = 1 und

Die genaue Befehls-Syntax f r den Befehl margin lautet: u margin (sys) [Gm,P m,Wcg,Wcp] = margin (sys) [Gm,P m,Wcg,Wcp] = margin (mag,phase,w) Dabei ist Gm der Amplitudenrand mit der Phasen-Durchtrittsfrequenz Wcg und P m der Phasenrand mit der Amplituden-Durchtrittsfrequenz Wcp. Die Werte mag, phase und w entsprechen den R ckgabewerten des Befehls bode. u Wird der Befehl ohne R ckgabe-Variable aufgerufen, so plottet er ein Bode-Diagramm u mit den Amplituden- und Phasenrndern wie in Abb. 5.13. Erzeugt wurde der Plot in a Abb. 5.13 mit den folgenden Zeilen:
>> sys = zpk([],[-1 -1 -1],4)

Zero/pole/gain: 4 ------(s+1)^3 >> margin(sys) >> [Gm,Pm,Wcg,Wcp] = margin(sys) Gm = 2.0003 Pm = 27.1424 Wcg = 1.7322 Wcp = 1.2328

150

5 Regelungstechnische Funktionen Control System Toolbox


Bode Diagram Gm = 6.02 dB (at 1.73 rad/sec) , Pm = 27.1 deg (at 1.23 rad/sec)
20

Magnitude (dB) Phase (deg)

0 20 40 60 80 100 0

90

180

270 10
2

10

10

10

10

Frequency (rad/sec)

Abb. 5.13: Bode-Diagramm mit Amplituden- und Phasenrand

Der Befehl allmargin greift etwas weiter als margin: Er berechnet f r das System mit u oener R ckf hrschleife verschiedene Kenngren zur Stabilitt und liefert diese in eine u u o a struct-Variable stabil zur ck. u stabil = allmargin (sys) Die einzelnen Felder der Struktur stabil lauten wie folgt (Frequenzen in rad/s): GainMargin GMFrequency PhaseMargin PMFrequency DelayMargin Amplitudenrand: inverse Amplitude bei den Frequenzen GMFrequency Frequenzen, bei denen der Phasenwinkel 180 durchluft. a Phasenrand: positiver Winkelabstand von 180 an den Stellen PMFrequency in Grad Frequenzen, bei denen die Amplitude 0 dB6) durchluft. a Totzeitrand: Bei noch grerer Totzeit ist das System instabil o (Sekunden bei zeitkontinuierlichen, Vielfache der Abtastzeit bei zeitdiskreten Systemen) Zu DelayMargin gehrige Frequenz o 1 bei Stabilitt des geschlossenen Regelkreises, 0 bei Instabilitt. a a

DMFrequency Stable

Anhand des obigen Beispiels soll die Bedeutung der einzelnen Felder erlutert werden. a Zuerst wird der Variablen stabil das Ergebnis von allmargin(sys) zugewiesen: Das System ist stabil, der Amplitudenrand betrgt 2.0003, der Phasenrand 27.1424 und a
6)

Entspricht Verstrkung 1. a

5.3 Analyse von LTI-Modellen

151

der Totzeitrand 0.3843 Sekunden. Diese Werte knnen auch aus Abb. 5.13 abgelesen o werden.
>> stabil = allmargin(sys) stabil = GainMargin: 2.0003 GMFrequency: 1.7322 PhaseMargin: 27.1424 PMFrequency: 1.2328 DelayMargin: 0.3843 DMFrequency: 1.2328 Stable: 1

Nun wird dem System eine Totzeit von stabil.DelayMargin+0.01 zugef gt, der Totu zeitrand also um 0.01 Sekunden uberschritten. Die erneute Berechnung mit allmargin gibt nun neue Werte zur ck und veriziert die Instabilitt des neuen Systems. u a
>> sys.ioDelay = stabil.DelayMargin + 0.01 Zero/pole/gain: 4 exp(-0.39*s) * ------(s+1)^3 >> allmargin(sys) ans = GainMargin: [1x8 double] GMFrequency: [1x8 double] PhaseMargin: -0.7063 PMFrequency: 1.2328 DelayMargin: -0.0100 DMFrequency: 1.2328 Stable: 0

Nyquist-Diagramm Eine andere Mglichkeit, den Frequenzgang darzustellen, ist das Nyquist-Diagramm. o Aufgetragen werden Real- und Imaginrteil der komplexen Ubertragungsfunktion des a oenen Regelkreises F0 (j) f r Werte von = 0 bis = . Die entstehende u Kurve wird als Ortskurve von F0 (j) bezeichnet. Auf Basis des Nyquist-Stabilitts-Kriteriums kann die Stabilitt des geschlossenen a a Regelkreises (bei Einheitsr ckf hrung und negativer R ckkopplung) im Nyquistu u u Diagramm abgelesen werden [26]:
Der geschlossene Regelkreis ist stabil, wenn der vom kritischen Punkt 1 + j 0 zum laufenu den Ortspunkt F (j) (= Ortskurve des aufgetrennten Regelkreises) weisende Fahrstrahl fr wachsendes von +0 bis + eine Winkelnderung a
=+

=+0

soll = nr + na

erfhrt. a

152

5 Regelungstechnische Funktionen Control System Toolbox

Dabei darf die Ubertragungsfunktion F0 (p) folgenden auch einen Totzeitanteil enthaltenden Aufbau haben F0 (p) = Z0 (p) pTt ; e N0 (p) n0 > m0 , Tt 0 ,

a wobei m0 und n0 den Grad des Zhler- und Nennerpolynoms von F0 angeben und nr , na und nl jeweils die Anzahl der Wurzeln von N0 (p) rechts (instabil), auf (grenzstabil) und links (stabil) der imaginren Achse der p-Ebene, [. . . ], bezeichnen. a

Diese Aussage kann auch so formuliert werden:


Der geschlossene Regelkreis ist stabil, wenn die Ortskurve des oenen Regelkreises den kritischen Punkt 1 + j 0 im Gegenuhrzeigersinn so oft umkreist, wie F (s) positive reelle Pole besitzt.

F r das Erzeugen eines Nyquist-Diagramms lautet die Befehls-Syntax wie folgt: u nyquist (sys[,w]) [re,im] = nyquist (sys,w) [re,im,w] = nyquist (sys) F r den Frequenzvektor w sowie das Ubereinanderlegen von Ortskurven mehrerer Sysu teme in ein Nyquist-Diagramm gilt das bereits unter dem Bode-Diagramm Gesagte. Wiederum soll ein Beispiel den Befehl nyquist anschaulich machen: Aus dem ZPKModell sys werden drei diskrete ZPK-Modelle mit verschiedenen Abtastzeiten gemacht und anschlieend in ein Nyquist-Diagramm geplottet.
>> >> >> >> >> sys = zpk([],[-1 -1 -1],4) ; sysd1 = c2d(sys,0.3) ; sysd2 = c2d(sys,1.5) ; sysd3 = c2d(sys,4.0) ; nyquist(sys,r-,sysd1,b-.,sysd2,k- ,sysd3,g--)

Nyquist Diagram
4 3 2 1 0 1 2 3 4 3

Imaginary Axis

Real Axis

Abb. 5.14: Nyquist-Diagramm: sys und sysd1-sysd3 mit verschiedenen Abtastzeiten

5.3 Analyse von LTI-Modellen

153

F r die oben denierten PT1 - und PT2 -Funktionen sind die Nyquist-Diagramme in u Abb. 5.15 dargestellt.
>> >> >> >> >> >> >> >> subplot(121) nyquist(sysPT1,r-,sysPT1d,b--) subplot(122) hold on; stil = {r- b-. k- g--} ; for n = 2:1:size(sysPT2,1) , nyquist(sysPT2(n),stil{1+mod(n-1,size(sysPT2,1))}); end;

Nyquist Diagram
0.6 4 3

Nyquist Diagram

Imaginary Axis

Imaginary Axis
0.5 0 0.5 1

0.4 0.2 0 0.2 0.4 0.6

2 1 0 1 2 3 4 2 1 0 1 2

Real Axis

Real Axis

Abb. 5.15: Nyquist-Diagramme : sysPT1 (-) und sysPT1d (--) (links), sysPT2 fr unteru schiedliche Dmpfungen (rechts) a

Systemantwort im Frequenzbereich evalfr (sys,f ) freqresp (sys,w) bode (sys[,w]) margin (sys) allmargin (sys) nyquist (sys[,w]) Berechnet Antwort bei einer komplexen Frequenz f Berechnet Antworten f r ausgewhlte Frequenzen w u a Berechnet das Bode-Diagramm Berechnet Amplitudenrand und Phasenrand Berechnet Stabilittskenngren a o Berechnet das Nyquist-Diagramm

154

5 Regelungstechnische Funktionen Control System Toolbox

5.3.5

Interaktive Modellanalyse mit dem LTI-Viewer

Neben den oben gezeigten Mglichkeiten bietet Matlab einen interaktiven LTI-Viewer o an, mit dem auf schnelle und einfache Weise ein System innerhalb einer Figure untersucht werden kann. Aufgerufen wird dieser Viewer mit dem Befehl ltiview, wodurch sich ein leerer LTIViewer onet. Mit dessen Men -Befehlen und den Kontextmen s (rechte Maustaste) u u knnen dann unterschiedliche Systeme geladen und exportiert werden, verschiedene o Ausgabetypen, wie Sprungantwort, Bode-Diagramm etc., gewhlt und gleichzeitig im a LTI-Viewer angesehen werden, wie z.B. in Abb. 5.16 dargestellt.

Abb. 5.16: Interaktive Modellanalyse mit dem LTI-Viewer

Schon beim Aufruf gibt es verschiedene Mglichkeiten, um bestimmte Voreinstellungen o festzulegen: ltiview (sys) ltiview (plottype,systems,extras) ltiview (open,systems,viewers) Wird nur ein System sys ubergeben, so wird der LTI-Viewer standardmig mit dessen a Sprungantwort genet. Mittels des Parameters plottype kann man eine oder meho rere Darstellungsarten f r die ubergebenen Systeme whlen. Der Parameter extras u a enthlt die zustzlichen Eingabeparameter der verschiedenen Zeit- und Frequenzanta a worten. F r einen bereits geneten LTI-Viewer (Handle viewers) kann nun mit dem u o Wert clear f r den Parameter open und weglassen von systems der LTI-Viewer u zur ckgesetzt werden, mit current werden dem LTI-Viewer Systeme hinzugefgt. u u Der Parameter extras enthlt die zustzlichen Eingabeparameter der verschiedenen a a

5.3 Analyse von LTI-Modellen

155

Zeit- und Frequenzantworten, z.B. die Angabe des Eingangssignals u, des Zeitvektors t und des Anfangswertvektors x0 bei Aufruf von ltiview(lsim,sys1,sys2,u,t,x0). Im folgenden Beispiel (Abb. 5.17) wird zuerst ein schwingungsfhiges PT2 -System sys a erzeugt, das im LTI-Viewer mit der Darstellung als Bode-Diagramm und als NullstellenPolstellen-Verteilung genet wird, wobei der Handle des LTI-Viewers in h gespeichert o wird. Anschlieend wird im oenen LTI-Viewer noch ein PT1 -System angezeigt.
>> >> >> >> [num,den] = ord2(10,0.2); sys = tf(num,den); h = ltiview({step;pzmap},sys); ltiview(current,tf(dcgain(sys),[0.3 1]),h)

Abb. 5.17: LTI-Viewer

Die Grundeinstellungen des LTI-Viewers sowie einige andere Grundeinstellungen der Control System Toolbox lassen sich mittels des interaktiven Tools Control System Toolbox Preferences einstellen, das mit dem Befehl ctrlpref gestartet wird. Die insgesamt vier Einstell-Fenster zeigt Abb. 5.18. So knnen im Register Units Einstellungen zu den standardmig verwendeten Eino a heiten getroen werden: F r die Frequenz entweder Hz oder rad/sec (Standard), u wobei f r die Darstellung lineare lin scale oder logarithmische Skalierung log u scale (Standard) eingestellt werden kann. F r die Verstrkung kann dB (Standard) u a oder der Absolutwert mit absolute angegeben werden. Die Phase kann entweder in 360-Einteilung mit degree (Standard) oder in rad radians erfolgen. Im Register Style knnen Einstellungen zu den Gitterlinien, der Schriftauswahl f r o u die Beschriftung und der Achsen-Farbe getroen werden.

156

5 Regelungstechnische Funktionen Control System Toolbox

Abb. 5.18: Control System Toolbox Preferences-Tool zur Festlegung von Grundeinstellungen der Control System Toolbox

Im Register Options knnen Angaben zur Anstiegs- und zur Abklingzeit bei den o Zeitantwort-Darstellungen, also Impulsantwort (Befehl impulse) und Sprungantwort (Befehl step), sowie zur Phasendarstellung im Bodediagramm (Befehle bode und margin) eingestellt werden. Im Register SISO Tool knnen f r das SISO Design Tool Angaben zur Struktur des o u dort verwendeten Reglers sowie f r die Darstellung des dort gezeigten Bodediagramms u getroen werden (siehe hierzu Kap. 5.4.2).

Interaktive Modellanalyse mit dem LTI-Viewer h = ltiview (systems) ctrlpref Onet einen LTI-Viewer mit den Systemen systems und weist seinen Handle der Variablen h zu Onet das Control System Toolbox Preferences Tool zur Festlegung von Grundeinstellungen der Control System Toolbox

5.3 Analyse von LTI-Modellen

157

5.3.6

Ordnungsreduzierte Darstellung

F r die Analyse der Systemeigenschaften kann es hilfreich sein, eine reduzierte Systemu darstellung zu verwenden: So lsst sich z.B. oft das tief- und hochfrequente Verhalten a eines Systems getrennt untersuchen, ohne wichtige Eigenschaften auer Acht zu lassen. Automatische Ordnungsreduktion Mit dem Befehl minreal lassen sich in der Zustandsdarstellung nicht beobachtbare und nicht steuerbare Zustnde eliminieren bzw. bei Ubertragungsfunktionen (TF a und ZPK) identische Nullstellen und Pole krzen. Der optionale Parameter tol u gibt die Toleranz f r die Zustands-Elimination bzw. Nullstellen-Polstellen-K rzung an. u u Diese liegt standardmig bei tol = sqrt(eps), bei greren Toleranzen werden mehr a o Zustnde eliminiert. a sysr = minreal (sys[,tol]) msys = sminreal (sys) F r LTI-Systeme in Zustandsdarstellung eliminiert der Befehl sminreal alle Zustnde, u a die aufgrund struktureller Gegebenheiten vorhanden sind, aber keinen Einuss auf das Ein-/Ausgangsverhalten haben. Wie im folgenden Beispiel leicht zu erkennen ist, f hrt erst die Angabe der Toleranz u 0.01 zur gew nschten K rzung der Nullstelle bei -0.999 mit dem Pol bei -1.001. u u
>> sys = zpk([-0.999 1],[-1.001 2],0.5) Zero/pole/gain: 0.5 (s+0.999) (s-1) ------------------(s+1.001) (s-2) >> minreal(sys) Zero/pole/gain: 0.5 (s+0.999) (s-1) ------------------(s+1.001) (s-2) >> minreal(sys,0.01) Zero/pole/gain: 0.5 (s-1) --------(s-2)

Im Beispiel f r sminreal wird das System sys, dessen zweiter Zustand weder mit dem u Eingang noch mit dem Ausgang verkn pft ist, auf das Teilsystem sys(1,1) minimiert. u
>> sys = ss ([1 2 ; 0 3 ],[4 ; 0],[5 0],0) ; >> msys = sminreal(sys); >> [ msys.a msys.b msys.c msys.d ] ans = 1 4 5 0

158

5 Regelungstechnische Funktionen Control System Toolbox

Explizite Ordnungsreduktion Soll ein System hoher Ordnung vereinfacht werden oder unterschiedlich schnelle Zustnde getrennt untersucht werden, so ist modred7) das geeignete Werkzeug. a rsys = modred (sys,elim) rsys = modred (sys,elim[,methode]) Neben dem System sys muss dem Befehl modred im Parameter elim der Vektor mit den Indizes der zu eliminierenden Zustnde ubergeben werden. Als Berechnungsvorschrift a methode gibt es zwei grundstzlich voneinander verschiedene Methoden: a mdc (matching dc-gain) erzeugt ein reduziertes Modell, das die gleiche stationre a Gleichverstrkung (Kap. 5.3.2) aufweist wie das Originalmodell. Die Ableia tungen (linke Seite) der in elim angegeben Zustnde werden zu null gesetzt a und damit diese Zustnde in den restlichen Gleichungen eliminiert. (Standard) a del (delete) entfernt einfach die in elim ubergebenen Zustnde aus dem Origia nalmodell, was zwar nicht zu ubereinstimmender stationrer Gleichverstrkung a a f hren muss, aber in der Regel zu besserer Ubereinstimmung im Freu quenzbereich fhrt. u Beispiel Aus den PT1 - und PT2 -Ubertragungsfunktionen sysPT1 und sysPT2 wird das Gesamtsystem sys erzeugt und jeweils mit del und mdc zwei reduzierte Darstellungen sys1mdel und sys2mdel bzw. sys1mmdc und sys2mmdc berechnet.
>> T = 0.2 ; V = 0.8 ; >> wn = T/0.001 ; d = 0.05 ; >> sysPT1 = ss(tf(V,[T 1])) ; >> sysPT2 = ss(tf(wn^2,[1 2*d*wn wn^2])) ; >> sys = sysPT1 + sysPT2 ; >> sys1mdel = modred(sys,[2,3],del) ; >> sys2mdel = modred(sys,[1],del) ; >> sys1mmdc = modred(sys,[2,3],mdc) ; >> sys2mmdc = modred(sys,[1],mdc) ; >> sys.a ans = -5.0000 0 0 0 -20.0000 -156.2500 0 256.0000 0 >> [sysPT1.a , sys1mdel.a , sys1mmdc.a ] ans = -5 -5 -5 >> [sysPT2.a , sys2mdel.a , sys2mmdc.a ] ans = -20.0000 -156.2500 -20.0000 -156.2500 -20.0000 -156.2500 256.0000 0 256.0000 0 256.0000 0
7) Dieser Befehl wird gerne mit dem Befehl balreal verwendet, der mittels der Gramschen Steuerbarkeits- und Beobachtbarkeitsmatrizen eine verbesserte Zustandsdarstellung berechnet [17, 37].

5.3 Analyse von LTI-Modellen

159

Abschlieend werden die Sprungantworten in Abb. 5.19 und die Bode-Diagramme in Abb. 5.20 geplottet.
>> >> >> >> >> >> >> >> figure(1) subplot(221) subplot(222) subplot(223) subplot(224) figure(2) subplot(121) subplot(122) , , , , step(sys,r-) step(sysPT1,b-,sysPT2,g--) step(sys1mdel,b-,sys1mmdc,g--) step(sys2mdel,b-,sys2mmdc,g--)

, bode(sysPT1,r-,sys1mdel,b-,sys1mmdc,g--) , bode(sysPT2,r-,sys2mdel,b-,sys2mmdc,g--)

Step Response

Step Response

(a)
2

(b)
2 1.5

Amplitude

Amplitude

1.5

0.5 sys 0 0 0.2 0.4 0.6 0.8 1 1.2

0.5 sysPT1 sysPT2 0 0 0.2 0.4 0.6 0.8 1 1.2

Time (sec)

Time (sec)

Step Response

Step Response

(c)
2

(d)
3 2.5 1.5

Amplitude

Amplitude
sys1mdel sys1mmdc

2 1.5 1

0.5 0.5 0 sys2mdel sys2mmdc 0 0.1 0.2 0.3 0.4 0.5 0.6

0.2

0.4

0.6

0.8

1.2

Time (sec)

Time (sec)

Abb. 5.19: Sprungantworten Modellreduktion: (a) sys, (b) sysPT1 (-) und sysPT2 (--); (c) sys1mdel (-) und sys1mmdc (--), (d) sys2mdel (-) und sys2mmdc (--)

Ordnungsreduktion minreal (sys,[tol]) modred (sys,elim) sminreal (sys) Zustands-Elimination/Nullstellen-Polstellen-K rzung u Ordnungsreduktion Strukturierte Ordnungsreduktion

160

5 Regelungstechnische Funktionen Control System Toolbox

Bode Diagram
10 5 40 20 0 20 40 60 80 0

Bode Diagram

Magnitude (dB)

0 5 10 15 20 25 30 0

Phase (deg)

Phase (deg)
1 0 1 2

Magnitude (dB)

45

45

90

135

90 10 10 10 10

180 10
1

10

10

10

Frequency (rad/sec)

Frequency (rad/sec)

Abb. 5.20: Bode-Diagramm Modellreduktion: sysPT1 (-), sys1mdel (-) und sys1mmdc (--) (links); sysPT2 (-), sys2mdel (-) und sys2mmdc (--) (rechts)

5.3.7

Zustandsbeschreibungsformen

Je nach Untersuchungsziel knnen unterschiedliche Darstellungsformen eines Syso tems erw nscht sein. So lassen sich im Zustandsraum durch geeignete Matrixu Transformationen verschiedene Darstellungen eines Systems erzeugen, z.B. die Beobachtbarkeits- und Steuerbarkeitsmatrizen f r die Untersuchung von Beobachtbaru keit und Steuerbarkeit. Kanonische Zustandsbeschreibungen Mit dem Befehl canon bietet die Control System Toolbox die Mglichkeit, in Abhngigo a keit des Parameters type zwei kanonische Zustandsbeschreibungen zu realisieren: csys = canon (sys,type) [csys,T ] = canon (sys,type) Bei SS-Modellen wird f r beide Typen in der Variablen T die Transformationsmatrix u gespeichert, die den transformierten Zustandsvektor xc = Tx erzeugt. Wird als type modal ubergeben, so wird eine Zustandsbeschreibung erstellt, bei der in der Diagonalen der Systemmatrix die reellen Eigenwerte i des Systems und die komplexen Eigenwerte j jeweils in 22-Untermatrizen stehen (A diagonalisierbar):

5.3 Analyse von LTI-Modellen 0 0 0 2

161

Beispiel: reelle Eigenwerte 1 , 2 konj. komplexer Eigenwert j

1 0 A = 0 0

0 0

0 0

(5.30)

Eine zweite Darstellungsart ist die Beobachter-Normalform, f r die als type u companion angegeben wird. Voraussetzung hierf r ist die Steuerbarkeit des Systems u vom ersten Eingang aus. Die Systemmatrix des Systems wird aus den Koezienten des charakteristischen Polynoms (s) wie folgt gebildet (n: Anzahl der Zustnde): a 0 0 . . . . . . 0 cn 1 0 0 . . . 0 cn1 . . . . . 0 1 0 ... . n n1 + . . . + cn1 s + cn A = . (s) = s + c1 s . . (5.31) . 0 ... . . . . . . . . 0 . . . . . . 1 0 c2 0 . . . . . . 0 1 c1 Beobachtbarkeit Bei der Systemanalyse ist es zunchst wichtig zu wissen, ob und welche Zustnde eines a a Systems beobachtbar sind. Dies geschieht entweder uber die Beobachtbarkeitsmatrix Ob oder mittels der Beobachtbarkeitsform des Systems. Die Beobachtbarkeitsmatrix Ob (Observability Matrix) wird gebildet aus der Systemmatrix A und der Ausgangsmatrix C nach: C CA2 (5.32) Ob = C A . . . CAn1 Hat die Beobachtbarkeitsmatrix vollen Rang, so ist das System vollstndig beobachta bar, andernfalls entspricht der Rang von Ob der Anzahl der beobachtbaren Zustnde. a In Matlab wird die Beobachtbarkeitsmatrix berechnet mit: Ob = obsv (A,C) Ob = obsv (sys) Sollen auch Aussagen gemacht werden dar ber, welche Zustnde nicht beobachtbar sind, u a so gelingt dies mittels der Beobachtbarkeitsform. Ist ein System nicht vollstndig a beobachtbar, so existiert eine Ahnlichkeitstransformation auf Stufenform, f r die gilt: u A = T A TT B = TB C = C TT (5.33)

Das transformierte System stellt sich wie folgt dar: A = Ano A12 0 Ao B = Bno Bo C = [ 0 Co ] (5.34)

162

5 Regelungstechnische Funktionen Control System Toolbox

Ano ist die Matrix der unbeobachtbaren Zustnde und Bno die Matrix der unbeobachta baren Eingnge, Ao , Bo und Co sind die Matrizen des beobachtbaren Teilsystems. a In Matlab wird die Beobachtbarkeitsform erzeugt durch: [Abar,Bbar,Cbar,T ,k] = obsvf (A,B,C[,tol]) Die drei Variablen Abar, Bbar und Cbar enthalten die auf Stufenform transformierten Matrizen A, B und C. Der Vektor k hat als Lnge die Dimension von A: In jedem a Element wird die Anzahl der beobachtbaren Zustnde whrend der iterativen Matrixa a Transformation gespeichert. Die Anzahl der Eintrge ungleich null von k gibt also die a Anzahl der Iterationsschritte an, die Summe der Vektorelemente von k die Anzahl der beobachtbaren Zustnde. Auch hier ist T die Transformationsmatrix, der optionale a Parameter tol gibt die Toleranz bei der Berechnung der Beobachtbarkeitsform an. Ein Beispiel soll die beiden Befehle obsv und obsvf veranschaulichen.
>> A = [ 6 -1 ; 1 4 ] A = 6 -1 1 4 >> B = [ -2 2 ; -2 2 ] B = -2 2 -2 2 >> C = [ 1 0 ; 0 1 ] C = 1 0 0 1 >> Ob = obsv(A,C) Ob = 1 0 0 1 6 -1 1 4 >> rank(Ob) ans = 2

Wie bereits an der Ausgangsmatrix C zu erkennen, ist das System vollstndig beobachta bar. Gleiches liefert die Stufenform der Beobachtbarkeitsform (k=2):
>> [Abar,Bbar,Cbar,T,k] = obsvf(A,B,C) Abar = 6 -1 1 4 Bbar = -2 2 -2 2 Cbar = 1 0 0 1 T = 1 0 0 1 k = 2 0

5.3 Analyse von LTI-Modellen Steuerbarkeit

163

Eine weitere interessante Eigenschaft ist die Steuerbarkeit eines Systems. Sollen bestimmte Zustnde eines Systems geregelt werden, so m ssen sie steuerbar sein. Um a u Aussagen uber die Steuerbarkeit eines Systems zu machen, eignen sich sowohl die Steu erbarkeitsmatrix Co als auch die Steuerbarkeitsform der Zustandsdarstellung. Die Steuerbarkeitsmatrix Co (Controllability Matrix) eines Systems mit n Zustnden ist deniert als: a Co = B AB A2 B ... An1 B (5.35)

Hat die Steuerbarkeitsmatrix vollen Rang, so ist das System vollstndig steuerbar, a andernfalls entspricht der Rang von Co der Anzahl der steuerbaren Zustnde. Die a Befehls-Syntax lautet: Co = ctrb (A,B) Co = ctrb (sys) Sollen auch Aussagen gemacht werden uber die Zustnde, die nicht steuerbar sind, so a gelingt dies mittels der Steuerbarkeitsform. Ist ein System nicht vollstndig steua erbar, so existiert auch hier eine Ahnlichkeitstransformation auf Stufenform, f r die u gilt: A = T A TT B = TB C = C TT (5.36)

Das transformierte System stellt sich wie folgt dar:

A =

Anc 0 A21 Ac

B =

0 Bc

C = [ Cnc Cc ]

(5.37)

Alle nicht steuerbaren Zustnde benden sich in der Teilmatrix Anc , die nicht steuera baren Eingnge enthlt Cnc , das steuerbare Teilsystem hat die Matrizen Ac , Bc und a a Cc . In Matlab erhlt man die Steuerbarkeitsform durch: a [Abar,Bbar,Cbar,T ,k] = ctrbf (A,B,C[,tol]) F r die zur ckgegebenen Variablen gilt analog zur Beobachtbarkeitsform: Die drei Vau u riablen Abar, Bbar und Cbar enthalten die auf Stufenform transformierten Matrizen A, B und C, k die Anzahl der steuerbaren Zustnde whrend der iterativen Matrixa a Transformation. Die Anzahl der Eintrge ungleich null von k gibt wiederum die Anzahl a der Iterationsschritte an, die Summe der Vektorelemente von k die Anzahl der steuerbaren Zustnde. F r T und tol gilt Analoges wie bei der Berechnung der Beobachtbara u keitsform.

164

5 Regelungstechnische Funktionen Control System Toolbox

Anhand des folgenden Beispiels wird die Funktion von ctrb und ctrbf gezeigt.
>> A = [ 6 -1 ; 1 4 ] A = 6 -1 1 4 >> B = [ -2 2 ; -2 2 ] B = -2 2 -2 2 >> C = [ 1 0 ; 0 1 ] C = 1 0 0 1 >> Co = ctrb(A,B) Co = -2 2 -10 10 -2 2 -10 10 >> rank(Co) ans = 1

Der Rang der Steuerbarkeitsmatrix Co ist nicht voll, deshalb ist das System nicht vollstndig steuerbar. Das gleiche Ergebnis erhlt man, wenn man die Steuerbarkeitsa a form aufstellt.
>> [Abar,Bbar,Cbar,T,k] = ctrbf(A,B,C) Abar = 5.0000 -0.0000 2.0000 5.0000 Bbar = 0 0 2.8284 -2.8284 Cbar = -0.7071 -0.7071 0.7071 -0.7071 T = -0.7071 0.7071 -0.7071 -0.7071 k = 1 0

Zustandsbeschreibungsformen canon (sys,type) obsv (A,C), obsv (sys) obsvf (A,B,C[,tol]) ctrb (A,B), ctrb (sys) ctrbf (A,B,C[,tol]) Kanonische Zustandsbeschreibungen Beobachtbarkeitsmatrix Stufenform der Beobachtbarkeitsmatrix Steuerbarkeitsmatrix Stufenform der Steuerbarkeitsmatrix

5.4 Reglerentwurf

165

5.4

Reglerentwurf

Das abschlieende Ziel einer regelungstechnischen Untersuchung stellt der Entwurf eines Reglers dar, mit dem ein gew nschtes Systemverhalten eingestellt werden soll. Erster u Schritt ist dabei die Auswahl eines geeigneten Reglers, der in einem zweiten Schritt parametriert wird. Bei guten Simulationsergebnissen des geschlossenen Regelkreises folgt dann die Implementierung am realen System mit anschlieenden Tests. Sind die so erzielten Ergebnisse von ausreichender G te, ist die regelungstechnische Aufgabe abgeschlossen. u In der Regel werden aber noch Verbesserungen erforderlich sein, so dass einige oder auch alle Stufen der Untersuchung, angefangen von der Modellierung des Systems uber die Systemanalyse bis hin zur Reglersynthese, ein oder mehrere Male durchlaufen werden m ssen. u F r den Entwurf und die Auslegung eines Reglers stellt die Control System Toolbox u nun einige Verfahren zur Verf gung: u Wurzelortskurven-Verfahren SISO Design Tool Polplatzierung in Verbindung mit Zustandsr ckf hrung und -beobachtung u u Linear-quadratisch optimale Regelung Kalman-Filter als Zustandsbeobachter f r verrauschte Gren u o

5.4.1

Reglerentwurf mittels Wurzelortskurve

Ein klassisches Verfahren zum Einstellen der Reglerparameter von SISO-Systemen ist der Entwurf mithilfe von Wurzelortskurven (WOK). Eine Wurzelortskurve beschreibt das Verhalten der Pole des geschlossenen Regelkreises in Abhngigkeit eines R ckf hrverstrkungsfaktors k und stellt diese Abhngigkeit in a u u a a der komplexen Nullstellen-Polstellen-Ebene mit den Realteilen Re{} = als x-Achse und den Imaginrteilen Im{} = als y-Achse dar. a

u Ee E GR T k '

E G S

r E

GM '

Abb. 5.21: Signalussplan Regelkreis

166

5 Regelungstechnische Funktionen Control System Toolbox

Im Rahmen der Control System Toolbox setzt sich die Ubertragungsfunktion G0 des oenen Regelkreises nach Abb. 5.21 zusammen aus den Ubertragungsfunktionen der Strecke GS , des Reglers GR , eines Mess-Sensors GM und des R ckf hrverstrkungsfaku u a tors k (n Zhlerpolynome, d Nennerpolynome): a nR nS nM dR dS dM n0 d0

G0 = k GR GS GM = k

= k

(5.38)

Die Ubertragungsfunktion des geschlossenen Regelkreises nach Abb. 5.21 lautet bei negativer R ckkopplung (n Zhlerpolynome, d Nennerpolynome): u a

G =

GR GS 1 + k GR GS GM

nR nS dM dR dS dM + k nR nS nM

(5.39)

Die Pole des geschlossenen Regelkreises entprechen den Wurzeln des Nennerpolynoms von G nach der Gleichung

d0 + k n0 = dR dS dM + k nR nS nM = 0 .

(5.40)

Die Control System Toolbox stellt f r das WOK-Verfahren f r SISO-LTI-Modelle den u u Befehl rlocus zur Verf gung mit der Befehls-Syntax: u rlocus (sys[,k]) [r,k] = rlocus (sys) r = rlocus (sys,k) Das ubergebene LTI-Modell sys ist hierbei die positive Ubertragungsfunktion des oenen Regelkreises G0 = GR GS GM = sys = sysM * sysS * sysR

ohne den Verstrkungsfaktor k, der optional ubergeben werden kann. Somit wird sys a gebildet durch das entsprechende Verkn pfen der Einzelmodelle (Achtung auf die Reiu henfolge der Modelle, siehe auch Kap. 5.2.6 und 5.2.7): Der erste Aufruf mit rlocus (sys[,k]) ohne Variablenr ckgabe erzeugt die Wurzelortsu kurve von sys in einem Plot. Werden nicht explizit Verstrkungsfaktoren mit dem Veka tor k angegeben, so whlt Matlab passende Werte. a In diesem Zusammenhang sei an das Plotten einer Nullstellen-Polstellen-Verteilung mit dem Befehl pzmap erinnert (Kap. 5.3.2). Auch hier stehen die Befehle sgrid bzw. zgrid zur Verf gung, mittels derer ein Gitternetz mit Linien gleicher Dmpfung (Geraden vom u a Ursprung) und gleicher nat rlicher Frequenz (Kreise um den Ursprung) eingeblendet u werden knnen. o

5.4 Reglerentwurf

167

Wird als Befehlsaufruf [r,k] = rlocus(sys) gewhlt, so werden in der Matrix r die a komplexen Wurzelorte zu den entsprechenden Verstrkungsfaktoren im Vektor k r cka u geliefert. Die Matrix r hat length(k) Spalten, wobei in der n-ten Spalte jeweils die dem Wert k(n) zugehrigen Pole abgelegt sind. o Im Beispiel wird die Wurzelortskurve von sys in Abb. 5.22 gezeigt. Ausgegeben werden weiter der minimale und maximale Wert f r k und die zugehrigen Ortskurvenpunkte. u o
>> sys = zpk([],[-0.1 -1-i -1+i],1) Zero/pole/gain: 1 ---------------------(s+0.1) (s^2 + 2s + 2) >> rlocus(sys) >> [r,k] = rlocus(sys) ; >> [ k(1) , k(max(find(k<inf))) ] ans = 1.0e+005 * 0 9.2571 >> [ r(:,1) , r(:,max(find(k<inf))) ] ans = -0.1000 -98.1571 -1.0000 + 1.0000i 48.0285 +84.4046i -1.0000 - 1.0000i 48.0285 -84.4046i
Root Locus
2

1.5

Imaginary Axis

0.5

0.5

1.5

2 1.5

0.5

0.5

Real Axis

Abb. 5.22: Wurzelortskurve fr sys u

168

5 Regelungstechnische Funktionen Control System Toolbox

Verstrkungsfaktoren auslesen a Sehr hilfreich im Zusammenhang mit rlocus ist der Befehl rlocfind, der den Verstrkungsfaktor k und die entsprechenden Pole r f r eine durch Mausklick bestimmte a u Polstelle im mit rlocus erzeugten WOK-Diagramm ausgibt. [k,r] = rlocfind (sys[,p]) Durch Angabe des Vektors p mit frei gewhlten Polstellenorten berechnet rlocfind a Ortskurvenpunkte, die nahe den angegebenen Werten in p liegen. Die k-Werte werden berechnet nach k = | den(p)/num(p) |, die Pole sind wieder die Wurzeln nach Gl. (5.40).
Root Locus
2 0.66 0.52 0.4 0.26 0.12 1.75 1.5 0.8 1.25 1 0.9 0.75 0.5 0.25 2 0.66 0.52 0.4 0.26 0.12 1.75 1.5 0.8 1.25 1 0.9 0.75 0.5 0.25

Root Locus

1.5

1.5

Imaginary Axis

0.5

Imaginary Axis

0.97

0.5

0.97

0.25 0.5 0.97 0.5 0.75 1 0.9 1 1.25 1.5 0.8 1.5 1.75 0.66 2 2 1.5 0.52 1 0.4 0.26 0.5 0.12 0 0.5 1

0.25 0.5 0.97 0.5 0.75 1 0.9 1 1.25 1.5 0.8 1.5 1.75 0.66 2 2 1.5 0.52 1 0.4 0.26 0.5 0.12 0 0.5 1

Real Axis

Real Axis

Abb. 5.23: k-Wert ermitteln mit rlocfind (links); Pole fr p-Wert ermitteln (rechts) u

Abb. 5.23 zeigt links die dem per Mausklick markierten Punkt -0.6019 - 0.6646i zugehrigen Pole als +. Zustzlich wurde mit sgrid ein Gitternetz erzeugt. o a
>> [kf,rf] = rlocfind(sys) % K-Werte durch Mausklick ermitteln Select a point in the graphics window -0.6019 - 0.6646i kf = 0.7420 rf = -0.6409 + 0.8605i -0.6409 - 0.8605i -0.8183 >> sgrid

Weiter wurden f r den Punkt p = [-0.9-0.6i] der Verstrkungsfaktor kff und die u a Wurzeln rff berechnet und dann p ( ) sowie die zugehrigen rff ( ) in Abb. 5.23 o rechts geplottet:

5.4 Reglerentwurf
>> p = [-0.9-0.6i] % k-Werte fr p ermitteln u p = -0.9000 - 0.6000i >> [kff,rff] = rlocfind(sys,p) kff = 0.6610 rff = -0.6952 + 0.8544i -0.6952 - 0.8544i -0.7096 >> hold on >> plot(p,ks,rff,kd)

169

Wurzelortskurven-Verfahren rlocus (sys[,k]) rlocfind (sys[,p]) Berechnet die Wurzelortskurve Gibt Verstrkung und Pole der WOK zur ck a u

5.4.2

Reglerentwurf mit dem Control and Estimation Tools Manager und dem SISO Design Tool

F r den Reglerentwurf von SISO-Systemen bietet die Control System Toolbox auch ein u interaktives Werkzeug an, mit dem die Untersuchung des Systems und der komplette Reglerentwurf in vorgefertigten Formularen abluft: Den Control and Estimation a Tools Manager, u.a. mit dem SISO Design Tool.

Abb. 5.24: Control and Estimation Tools Manager

170

5 Regelungstechnische Funktionen Control System Toolbox

Der in Abb. 5.24 gezeigte Control and Estimation Tools Manager stellt eine Vielzahl von Auslegungsmglichkeiten f r Regler f r unterschiedliche Systeme bereit. So kann o u u im Men Architecture die Struktur des Regelsystems eingestellt, im Men Compenu u sator Editor der Regler bearbeitet, im Men Graphical Tuning graphisch getunt, u im Men Analysis Plots graphische Analyse betrieben und im Men Automated u u Tuning automatisch der Regler eingestellt werden Gestartet wird das SISO Design Tool mit dem Befehl sisotool bzw. folgenden Befehlen: sisotool (sys[,comp]) sisotool (view,sys,comp,options) Ohne Parameter wird ein leeres SISO Design Tool genet, mit sys kann ein SISO-LTIo Modell ubergeben werden, comp ist ein SISO-LTI-Modell f r den Regler. Der Parameter u view kann auf rlocus f r Wurzelortskurven-Kriterium oder bode f r Auslegung u u im Bode-Diagramm gesetzt werden. options ist eine struct-Variable mit zwei Feldern: options.feedback gibt an, ob der Regler im Vorwrtspfad (forward, Standard) oder a im R ckwrtspfad (feedback) sitzt; options.sign bestimmt, ob die R ckkopplung u a u negativ (-1, Standard) oder positiv (1) ist.8) Das in Abb. 5.25 gezeigte SISO Design Tool wurde erzeugt mit:
>> options.location = forward ; >> options.sign = -1 ; >> sisotool(zpk([],[-0.1 -1-i -1+i],1),1,options) ;

Abb. 5.25: SISO Design Tool


8) Da eine tiefer gehende Beschreibung den Rahmen dieses Buches sprengen w rde, wird auf das u Handbuch [37] und die sehr umfangreiche Online-Hilfe verwiesen.

5.4 Reglerentwurf

171

5.4.3

Zustandsregelung und Zustandsbeobachtung

Die im Folgenden vorgestellten Verfahren basieren auf der Darstellung der Systeme im Zustandsraum und wenden die Theorie der Zustandsregelung und Zustandsbeobachtung an, die im Rahmen dieses Skriptums nur kursorisch und ohne Herleitungen dargestellt wird. F r die vertiefte Auseinandersetzung mit den theoretischen Voraussetzungen sei u auf die einschlgige Literatur verwiesen (z.B. [17, 18, 27]). a Zustandsregler Ein Zustandsregler basiert auf dem Prinzip der vollstndigen Zustandsr ckf hrung uber a u u die R ckfhrmatrix K, wie sie in Abb. 5.26 dargestellt ist. Der Zustandsregler stellt u u somit einen Proportional-Regler im R ckf hrzweig dar. F r den Reglerentwurf wird u u u beim Zustandsregler die Sollwertvorgabe w zu null gesetzt.
E D

w eu r E E B T

E eE T

xE r

c Ee E

A ' r K '
Abb. 5.26: Zustandsregler

Zustands-DGL Strecke: Ausgangsgleichung: Regelgesetz (w = 0): Geschlossener Regelkreis:

x y u x

= = = =

Ax + Bu Cx + Du Kx (A B K) x

(5.41) (5.42) (5.43) (5.44)

Grundvoraussetzung f r einen Zustandsregler ist die R ckf hrung aller Zustnde, d.h. u u u a alle Zustnde m ssen gemessen werden, was in praxi meist nicht mglich ist. Deshalb a u o werden Zustandsbeobachter erforderlich, die aus den vorhandenen Messgren die feho lenden Zustnde schtzen. a a Zustandsbeobachter (Luenberger-Beobachter) Der klassische Beobachteransatz nach Luenberger verwendet ein zur Strecke identisches Modell, wobei uber die R ckfhrmatrix L der Ausgangsfehler zwischen realem u u Ausgang y und geschtztem Ausgang y das Modellverhalten an das Streckenverhalten a heranfhrt. u

172

5 Regelungstechnische Funktionen Control System Toolbox


E D

rE B

E eE T

xE r

c Ee E

A ' e c e L ' T
rE B Ec eE T

xE r

Ee E T

A
E D
Abb. 5.27: Zustandsbeobachter

Zustands-DGL Beobachter: Ausgangsgleichung: Ausgangsfehler: Neue Zustands-DGL:

x y e x

= = = = =

Ax+Bu+Le Cx+Du y y = C (x x) (A LC) x + (B LD) u + L y u (A LC) x + [B LD L] y

(5.45) (5.46) (5.47)

(5.48)

Zustandsregler mit Luenberger-Beobachter Wird f r den Zustandsregler der geschtzte Zustandsvektor x verwendet, so ergibt sich u a die Gleichung des geschlossenen Regelkreises zu: x e = A BK B K x e 0 ALC (5.49) (5.50)

e = x x

F r die Auslegung des Zustandsreglers (R ckfhrmatrix K) und des Zustandsbeobachu u u ters (R ckfhrmatrix L) wird in der Regel das Verfahren der Polplatzierung (Kap. 5.4.4) u u gewhlt. Hierbei ist zu beachten, dass die Beobachterdynamik schneller sein sollte als a die Reglerdynamik!

5.4 Reglerentwurf

173

5.4.4

Reglerentwurf mittels Polplatzierung

Ein gngiges Verfahren zur Auslegung eines Zustandsreglers ist die Polplatzierung, bei a der die Zustandsregler-R ckfhrmatrix K so berechnet wird, dass die Pole des geschlosu u senen Regelkreises den Polen eines vorgegebenen Wunsch-Polynoms entsprechen. Zustandsregler-Rckfhrvektor k/Rckfhrmatrix K berechnen u u u u Die Control System Toolbox bietet hierzu zwei Befehle: acker und place. Beide Befehle berechnen den R ckf hrvektor k bzw. die R ckf hrmatrix K so, dass die Streckenpole u u u u mit den im Vektor p ubergebenen Polen ubereinstimmen, wobei die Wunsch-Pole nicht mehrfach sein sollten: k = acker (A,b,p) K = place (A,B,p) [K,prec,message] = place (A,B,p) Die beiden Befehle unterscheiden sich dadurch, dass acker nur f r SISO-Systeme geeigu net ist, place hingegen auch f r MIMO-Systeme. Zudem wird acker schnell numerisch u instabil. Zustzlich gibt place an, wie nahe die Eigenwerte des geschlossenen Systems bei den a gew nschten Polen liegen (prec) und speichert bei Abweichungen grer als 10% eine u o Warnungsmeldung in message. Das Handbuch [37] empehlt den Befehl place. Zustandsbeobachter-Rckfhrmatrix L berechnen u u Ebenso wie f r die Berechnung der Zustandsregler-R ckfhrmatrix K knnen acker u u u o und place auch f r die Berechnung der R ckfhrmatrix L des Zustandsbeobachters u u u verwendet werden. Hierbei wird die Systemmatrix A transponiert und statt der Eingangsmatrix B die transponierte Ausgangsmatrix C an die Befehle ubergeben (Aus gangsvektor c bei acker). Die R ckfhrmatrix L ergibt sich dann aus dem Transpou u nierten des Ergebnisses von acker bzw. place. L = acker (A,c,p) . L = place (A,C,p) . Zustandsbeobachter erstellen Ist die R ckfhrmatrix L berechnet, so kann auf einfache und schnelle Weise der Beobu u achter erstellt werden. Der Befehl estim erzeugt die Systemgleichungen des Zustandsbeobachters est wie folgt: est = estim (sys,L) est = estim (sys,L,sensors,known) Im ersten Fall wird angenommen, dass alle Eingnge stochastische Gren (Prozessraua o schen w und Messrauschen v) sind und alle Ausgnge gemessen werden. Die Systema gleichungen von Strecke (links) und Beobachter (rechts) lauten:

174

5 Regelungstechnische Funktionen Control System Toolbox x y x = A x + L (y C x) = C E x

x = Ax+Bw y = Cx+Dw

Werden zustzlich noch die Indexvektoren sensors und known angegeben, so bestima men diese die gemessenen Ausgnge y bzw. die bekannten Eingnge u. Die nicht gea a messenen Ausgnge stehen in z; w und v sind wieder Prozess- und Messrauschen. Die a Systemgleichungen lauten (Strecke links, Beobachter rechts): x = A x + B1 w + B2 u z C1 D11 D12 = x+ w+ u C2 D21 D22 y x = A + B2 u + L(y C2 x D22 u) x D22 y C2 x+ u = E 0 x

Das durch estim erhaltene Beobachtermodell est mit den Eingngen [ u ; y ] und a den Ausgngen [ y ; x ] zeigt Abb. 5.28. a

u y

(known)

E E

(sensors)

est

y E x E
Abb. 5.28: Modell est des Zustandsbeobachters

Das folgende Beispiel soll die einzelnen Befehle verdeutlichen: Aus den Streckenpolen von sys werden die Beobachterpole polo berechnet und mittels place der R ckf hru u vektor l bestimmt, mit dem dann der Beobachter est erzeugt wird. Anschlieend wird die Sprungantwort von sys in y gespeichert, das als zweites Eingangssignal f r das Beu obachtermodell est dient. Dessen Sprungantwort wird mit lsim erzeugt, wobei xo0 die Anfangswerte des Beobachters sind. Das Ergebnis zeigt Abb. 5.29.
>> sys = ss(tf(100,[1 2 100])) ; >> polo = 3*real(pole(sys)) + imag(pole(sys))/3*i ; >> [ pole(sys) polo ] ans = -1.0000 + 9.9499i -3.0000 + 3.3166i -1.0000 - 9.9499i -3.0000 - 3.3166i >> l = place(sys.a,sys.c,polo). l = -3.5200 1.2800 >> est = estim(sys,l,1,1) ; >> t = 0:0.01:4 ; >> [y,t,x] = step(sys,t) ; >> xo0 = [0.5 -0.4] ; >> [yo,to,xo] = lsim(est,[ones(size(t)) y],t,xo0) ;

5.4 Reglerentwurf
Ausgang 3 x1 x
1o

175

Zustand 1 1 0.5 0 0.5 0 1 0.5 0 0.5 0 1 2 Zeit t 3 4 x2 x


2o

y y 2

1 1 2 Zustand 2 3 4 0

2 0

2 Zeit t

Abb. 5.29: Zustnde und Ausgnge bei Zustandsbeobachtung a a

Zustandsregler mit Zustandsbeobachter erstellen Sind die R ckf hrmatrizen L und K berechnet, so kann der komplette Zustandsregler u u mit Beobachter erstellt werden mit dem Befehl reg. rsys = reg (sys,K,L) rsys = reg (sys,K,L,sensors,known,controls) Hierbei sind K und L die mit acker oder place kalkulierten R ckf hrmatrizen von Zuu u standsregler und -beobachter, sensors die Indizes der gemessenen Ausgnge y, known a die Indizes der bekannten Eingnge ud und controls die Indizes der Steuereingrie u. a Die Gleichungen von Strecke und komplettem Regler lauten wieder: x = Ax+Bu y = Cx+Du x = A L C (B L D) K x + L y

u = Kx

Das Gesamtreglersystem rsys ist in Abb. 5.30 dargestellt:

ud (known) E y (sensors) E

est
(L)

xE

Abb. 5.30: Gesamtreglersystem rsys (Zustandsregler und -beobachter)

Auch hier soll ein Beispiel die Funktionsweise von reg verdeutlichen: Das System sys soll zustandsgeregelt werden. Hierzu werden die Wunsch-Pole des Beobachters und des Reglers anhand der Streckenpole festgelegt, wobei die Beobachterpole schneller und strker bedmpft sind als die des Reglers. a a

176

5 Regelungstechnische Funktionen Control System Toolbox

>> sys = ss(tf(100,[1 2 100])) ; >> polo = 10*real(pole(sys)) + imag(pole(sys))/10*i ; >> polc = 5*real(pole(sys)) + imag(pole(sys))/ 5*i ;

Mit dem Befehl place werden nun die R ckf hrvektoren l und k bestimmt. Zum spteu u a ren Vergleich wird neben dem Gesamtsystem rsys (Regler mit integriertem Beobachter) noch der Beobachter est erzeugt.
>> l = place(sys.a,sys.c,polo). l = -1.4004 5.7600 >> k = place(sys.a,sys.b,polc) k = 2.0000 -2.2200 >> est = estim(sys,l,1,1) ; >> rsys = reg (sys,k,l) ;

Die Sprungantwort von sys wird in y gespeichert, das als zweites Eingangssignal f r u est dient. Die Sprungantwort wird sowohl f r est als auch f r reg mit lsim kalkuliert, u u xo0 und xc0 sind die Anfangswerte des Beobachters und des Reglers.
>> >> >> >> >> >> t = 0:0.01:4 ; [y,t,x] = step(sys,t) ; xo0 = [0.5 -0.04] ; [yo,to,xo] = lsim(est,[ones(size(t)) y],t,xo0) ; xc0 = [0 0] ; [yc,tc,xc] = lsim(rsys,ones(size(t)),t,xc0) ;
Ausgang 2 x 0.5 0 0.5 0 1 x 0.5 0 0.5 0 1 2 Zeit t 3 x x
2 2o 1c 1 1o 1c

Zustand 1 1 x x 1 2 Zustand 2 3

1.5

y yo y
c

1 4 0.5

0.5 0

2 Zeit t

Abb. 5.31: Zustnde und Ausgnge bei Zustandsregelung und -beobachtung a a

Wie sich aus Abb. 5.31 ablesen lsst, schwingt der Beobachter jetzt sehr schnell auf das a Systemverhalten ein. Der Zustandsregler regelt sehr schnell und ohne Uberschwingen auf einen konstanten Wert aus, der allerdings nicht dem gew nschten Wert von 1 entspricht. u

5.4 Reglerentwurf

177

Dieser stationre Regelfehler hngt mit der genderten Ubertragungsfunktion des gea a a schlossenen Regelkreises zusammen [17, 18]. Abhilfe kann hier durch eine Sollwertanpassung geschaen werden, die durch Einf gen einer Konstanten im Sollwertpfad den u stationren Regelfehler f r eine F hrungsgre zu null macht. Dies f hrt aber zu eia u u o u nem bleibendem Regelfehler bei Strungen, was nur durch einen Zustandsregler mit o Fhrungsintegrator behoben werden kann. Zu dieser Problematik ndet sich ein u ausf hrliches Beispiel in der Ubungsaufgabe Kap. 5.6.7. u Polplatzierung acker (A,b,p) place (A,B,p) Polplatzierung mit Ackermanns Formel Polplatzierung nach [14]

Zustandsbeobachter und Zustandsregler erstellen estim (sys,L) reg (sys,K,L) Zustandsbeobachter erstellen Zustandsregler mit Zustandsbeobachter erstellen

5.4.5

Linear-quadratisch optimale Regelung

Eine weiteres Verfahren zum Auslegen eines Zustandsreglers ist die linear-quadratisch optimale Regelung, die zur Berechnung der Reglerparameter ein quadratisches G teu kriterium minimiert und nicht ein bestimmtes Einschwingverhalten vorgibt. F r ein zu regelndes LTI-System mit der Zustandsbeschreibung (zeitkontinuierliches u System links, zeitdiskretes System rechts) x = Ax+Bu y = Cx+Du und der Zustandsr ckf hrung u u u = Kx

xk+1 = A xk + B uk yk = C xk + D uk

(5.51) (5.52)

uk = K xk

(5.53)

soll die R ckfhrmatrix K so bestimmt werden, dass das quadratische G tekriterium u u u J (x, u) =
t=0

xT Q x + uT R u + 2 xT N u dt

(5.54)

minimal wird. Die Lsung dieses Minimierungsproblems wird in der Regel durch das Lsen der zuo o gehrigen algebraischen Matrix-Riccati-Gleichung f r S berechnet.9) o u 0 = AT S + S A ( S B + N ) R1 ( BT S + NT ) + Q
9)

(5.55)

In der Control System Toolbox mit den Befehlen care bzw. dare, siehe auch Online-Hilfe und [37].

178

5 Regelungstechnische Funktionen Control System Toolbox

Die R ckf hrmatrix ergibt sich mit S zu: u u K = R1 ( BT S + NT ) F r den zeitdiskreten Fall lauten die Gleichungen wie folgt: u

(5.56)

J (xk , uk ) =
n=1

xk T Q xk + uk T R uk + 2 xk T N uk

(5.57)

0 = AT SA S (AT SB + N) (BT XB + R)1 (BT SA + NT ) + Q (5.58) K = (BT XB + R)1 (BT SA + NT ) (5.59)

Hierbei ist Q die Gewichtungsmatrix der Zustnde und R die Gewichtungsmatrix der a Eingnge. Die Matrix N gewichtet die Verkn pfung von Eingngen und Zustnden a u a a und ist wichtig f r den Fall, dass die Durchgrismatrix D = 0 ist. Das System muss u stabilisierbar sein, d.h. alle nicht steuerbaren Teilsysteme m ssen asymptotisch stabil u sein. LQ-optimale Regler-Rckfhrmatrix K berechnen u u Die Control System Toolbox stellt f r die Berechnung der R ckfhrmatrix K eines u u u LQ-optimalen Zustandsreglers die folgenden vier Befehle bereit: [K,S,e] [K,S,e] [Kd,S,e] [K,S,e] = = = = lqr (A,B,Q,R[,N ]) dlqr (A,B,Q,R[,N ]) lqrd (A,B,Q,R[,N ],T s) lqry (sys,Q,R[,N ])

Immer eingegeben werden m ssen die System-Matrizen A und B bzw. das ganze Sysu tem sys bei lqry und die Gewichtungsmatrizen Q und R. Die Gewichtungsmatrix N hingegen wird standardmig zu null gesetzt. Bei lqrd kommt noch die Abtastzeit T s a hinzu. Der Ausgabevariablen K wird die Regler-R ckf hrmatrix zugewiesen, S ist die Lsung u u o der zugehrigen Riccati-Gleichung und e = eig(A-B*K) enthlt die Eigenwerte des o a geschlossenen Regelkreises. Die Befehle im Einzelnen: lqr berechnet die R ckfhrmatrix K f r ein kontinuieru u u liches System anhand von Gleichungen (5.545.56), dlqr f hrt Gleiches f r ein diskretes u u System mittels Gleichungen (5.575.59) durch. Der Befehl lqrd hingegen ermittelt f r u u ein kontinuierliches System die R ckfhrmatrix Kd des diskreten Reglers f r das dem u u kontinuierlichen System entsprechende, mit T s und ZOH abgetastete diskrete System (Kap. 5.2.9).

5.4 Reglerentwurf

179

F r den Fall, dass statt der Zustnde die Systemausgnge Ziel der Optimierung sein u a a sollen, minimiert lqry die quadratische G tefunktion: u

J (y, u) =
t=0

yT Q y + uT R u + 2 yT N u dt

(5.60)

Kalman-Filter Das Kalman-Filter ber cksichtigt den Umstand, dass sowohl das System als auch das u Ausgangssignal y in der Regel einen Rauschanteil w bzw. v haben, f r deren Erwaru tungswerte bzw. Varianzen gilt: E{w} = 0 E{wwT } = Q E{v} = 0 E{vvT } = R E{wvT } = N (5.61) (5.62)

Optimierungsziel ist es nun, den Zustandsvektor x so zu schtzen (), dass der quadraa x tische Mittelwert des Fehlers x x minimal wird: P =
t

lim E{(x x)(x x)T } = min

(5.63)

Abb. 5.32 zeigt das Kalman-Filter f r den zeitkontinuierlichen Fall. u


E D

u rE B

x xE y c c yv E eE r C E eE e E U U T      A ' H
T T r

G w

L '
rE B Ec eE T

e c e T
Ee r E T

xE r

A
E D
Abb. 5.32: Kalman-Filter

180

5 Regelungstechnische Funktionen Control System Toolbox

Strecke:

x yv

= = = = =

Ax+Bu+Gw Cx+Du+Hw+v Ax+Bu+Le Cx+Du yv y

(5.64) (5.65) (5.66) (5.67) (5.68)

Beobachter:

x y

Ausgangsfehler:

Die R ckfhrmatrix L wird durch das Lsen einer algebraischen Matrix-Riccatiu u o Gleichung ermittelt, im diskreten Fall wird zustzlich noch die Matrix M bentigt, die a o den Schtzwert des vorangegangenen Abtastschritts neu berechnet. F r eine ausf hrlia u u che Einf hrung sei auf die Literatur (z.B. [18]) und das Handbuch [37] verwiesen. u F r die Auslegung des Kalman-Filters wird ublicherweise das Verfahren der linearu quadratischen Optimierung (Kap. 5.4.5) verwendet. Kalman-Filter erstellen Ein Kalman-Filter lsst sich mit den Befehlen kalman bzw. kalmd generieren: kalman era stellt, abhngig vom Typ des Systems, ein kontinuierliches oder diskretes Kalman-Filter. a Ist schon ein kontinuierliches Filter entworfen und funktioniert zufrieden stellend, so ist kalmd sehr n tzlich, um das entsprechende diskrete Kalman-Filter mit der Abtastzeit u T s zu erzeugen. [kest,L,P ] = kalman (sys,Qn,Rn[,N n,sensors,known]) [kest,L,P ,M ,Z] = kalman (sys,Qn,Rn,N n) [kest,L,P ,M ,Z] = kalmd (sys,Qn,Rn,T s) Das System sys wird gebildet mit der Systembeschreibung aus Gleichung (5.64) und Gleichung (5.65): sys.a = A sys.b = [ B G ] sys.c = C sys.d = [ D H ]

Obligatorisch sind auch die Varianzmatrizen Qn und Rn, die das Prozess- bzw. Messrauschen beschreiben, die Matrix N n ist standardmig null. Zustzlich knnen noch die a a o Indexvektoren sensors und known speziziert werden: Sie enthalten die Indizes der Messausgnge bzw. der bekannten Eingnge (analog zum Befehl estim, Kap. 5.4.4, a a Seite 173). Bei kalmd muss noch die Abtastzeit T s angegeben werden. In kest wird die Zustandsdarstellung des Kalman-Filters (SS-Modell) zur ckgeliefert, u wobei [ u ; yv ] seine Eingnge und [ y ; x ] seine Ausgnge sind (Abb. 5.33). a a Die Matrix L ist wieder die Beobachter-R ckfhrmatrix L (Kalman-Verstrkung) und u u a P ist die Kovarianzmatrix des stationren Fehlers. Im diskreten Fall wird noch die a Matrix M und die Fehlerkovarianzmatrix Z ausgegeben [37]. Im folgenden umfangreichen Beispiel wird der Entwurf eines Kalman-Filters f r u ein System mit Prozess- und Messrauschen gezeigt.

5.4 Reglerentwurf

181

(known)

E E

yv

(sensors)

kest

y E x E
Abb. 5.33: Modell kest des Kalman-Filters

Basierend auf einer PT2 -Ubertragungsfunktion wird das System strecke mit Prozessrauschen w deniert.
>> >> >> >> sys = ss(tf(1000,[1 10 1000])) ; strecke = ss(sys.a,[sys.b sys.b],sys.c,sys.d) ; strecke.inputname = {u w} ; strecke.outputname = {y} ;

Weiter werden die (skalaren) Varianzen Qn und Rn mit dem Wert 1 belegt und mittels kalman die komplette Systemdarstellung des Kalman-Filters kest erzeugt.
>> Qn = 0.1 ; >> [kest,L,P] >> [L,P] L = 0.3613 1.7205 P = 0.0498 0.0093 Rn = 0.2 ; = kalman(strecke,Qn,Rn) ;

0.0093 0.0440

Um die Systemantworten des Systems mit Prozess- und Messrauschen testen zu knnen, o wird das System rausch so deniert, dass es drei optimale Eingnge f r u, w und v hat, a u wobei Letzterer den Prozess nicht beeinusst, aber direkt auf den Ausgang wirkt.
>> rausch = ss(sys.a,[sys.b sys.b 0*sys.b],... [sys.c ; sys.c ],[0 0 0 ; 0 0 1] ); >> rausch.inputname = {u w v} ; >> rausch.outputname = {y yv} ;

Schlielich m ssen zur Simulation mit lsim ein Eingangssignal u, hier als Rechteckfunku tion mit Amplitude 2 und Periode 3, sowie die Rauschsignale w und v erzeugt werden.
>> >> >> >> >> [u,tt] = gensig(square,3,6,0.01) ; u = 2 * u ; randn(seed,0) ; w = sqrt(Qn) * randn(length(tt),1) ; v = sqrt(Rn) * randn(length(tt),1) ;

Zuerst wird nun mit lsim die Systemantwort ohne Rauschen berechnet (yideal), dann die Systemantwort yrausch mit den Rauschsignalen w und v. Der Beobachter wird nun mit dem Eingangssignal u und dem verrauschten Ausgangssignal yrausch(:,2) (=yv) beaufschlagt, wodurch das geschtzte Ausgangssignal yestim erzeugt wird. Die a nachfolgenden Zuweisungen dienen nur zum einfacheren Ansprechen der einzelnen Systemantworten.

182

5 Regelungstechnische Funktionen Control System Toolbox

>> [yideal,t] = lsim(rausch,[u,0*w,0*v],tt) ; >> [yrausch,t] = lsim(rausch,[u,w,v],tt) ; >> [yestim,t] = lsim(kest,[u,yrausch(:,2)],t) ; >> y = yrausch(:,1) ; >> yv = yrausch(:,2) ; >> ye = yestim(:,1) ; % System-Ausgang % Verrauschter System-Ausgang % Geschtzter Ausgang a

Um eine Aussage uber die G te der Signale machen zu knnen, wird der Messfehler u o emess und der Schtzfehler des Kalman-Filters ebeob deniert und die Kovarianzen a berechnet.
>> emess = y - yv ; >> ebeob = y - ye ; >> [ cov(emess) cov(ebeob) ] ans = 0.2082 0.0145 % Messfehler % Schtzfehler a

Letzter Schritt ist der Plot einer Figure, wie sie sich in Abb. 5.34 darstellt.
>> >> >> >> figure (1) subplot(311) , plot(t,yideal(:,1)) subplot(312) , plot (t,yv,k:,t,y,r-,t,ye,b--) subplot(313) , plot(t,emess,:,t,ebeob,k-)

Ausgangssignal yideal ohne Rauschen 4 2 0 2 Verrauschte Ausgangssignale 4 2 0 2 Schtz und Messfehler 2 0 2 Zeit t
Abb. 5.34: Kalman-Filterung: Ausgangssignale, Schtz- und Messfehler a

yv y ye

emess ebeob

5.4 Reglerentwurf LQ-optimalen Zustandsregler mit Kalman-Filter erstellen

183

Analog zum Befehl reg kann mit lqgreg ein LQ-optimaler Zustandsregler mit KalmanFilter erstellt werden. Als Parameter werden hier die Systemgleichung des KalmanFilters kest und die R ckfhrmatrix K ubergeben, die zuvor mit kalman und einem der u u Befehle lqr, dlqr, lqrd oder lqry berechnet wurden. rlqg = lqgreg (kest,K[,controls]) Wird zustzlich noch der Indexvektor controls angegeben, so hat das Kalman-Filter a zustzliche Eingnge ud , die nicht als Steuergren verwendet werden. Die Indizes bea a o zeichnen dann die Steuereingrie u. Die Gleichungen von Strecke und komplettem Regler lauten: x = Ax+Bu+Gw y = Cx+Du+Hw+v x = A L C (B L D) K x + L yv

u = Kx

Das Gesamtreglersystem rlqg im geschlossenen Regelkreis zeigt Abb. 5.35.


w u
E E Strecke r

u
r

K '

kest
(L)

rlqg

' ' '

ud
c ' e

yv

Abb. 5.35: Geschlossener Regelkreis mit LQ-optimalem Regler und Kalman-Filter (rlqg)

Auf ein Beispiel sei an dieser Stelle verzichtet und auf die ausf hrlichen Fallbeispiele u ( Design Case Studies) im Handbuch der Control System Toolbox [37] verwiesen. Linear-quadratisch optimale Regelung lqr (A,B,Q,R[,N ]) dlqr (A,B,Q,R[,N ]) lqrd (A,B,Q,R[,N ],T s) lqry (sys,Q,R[,N ]) lqgreg (kest,k) LQ-optimaler Regler f r kontinuierliches System u LQ-optimaler Regler f r zeitdiskretes System u LQ-optimaler diskreter Regler f r zeitkontinuu ierliches System LQ-optimaler Regler mit Ausgangsgewichtung LQ-optimalen Regler erstellen Kalman-Filter kalman (sys,Qn,Rn,N n) kalmd (sys,Qn,Rn,T s) Kalman-Filter berechnen Diskretes Kalman-Filter f r zeitkontinuierliches u System berechnen

184

5 Regelungstechnische Funktionen Control System Toolbox

5.5

Probleme der numerischen Darstellung

Bereits bei der Modellierung realer Probleme m ssen Vereinfachungen getroen werden, u z.B. Linearisierung um einen Arbeitspunkt oder Ordnungsreduktion. Das so erstellte mathematische Modell gibt zwar nur das Verhalten des vereinfachten Systems wieder, ist aber in sich exakt. Die rechnerinterne Umsetzung stellt nun eine weitere, an sich unerw nschte Vereinfachung dieses exakten Modells dar. Diktiert wird diese Vereinu fachung z.B. durch die Zahlendarstellung und den eingeschrnkten Zahlenbereich des a Rechners oder durch die vorhandene begrenzte Rechenleistung und Speicherkapazitt. a Die Wissenschaft, die sich auf theoretischer Ebene mit diesen Problemen beschftigt, ist a die numerischen Mathematik. Sie stellt die Algorithmen zur nherungsweisen Lsung a o mathematischer Probleme aus den verschiedensten Arbeitsgebieten (Naturwissenschaften, Technik etc.) zur Verf gung und bewertet die Lsungsverfahren nach verschiedenen u o Gesichtspunkten, z.B. nach dem Rechenaufwand oder dem Speicherplatzbedarf. Dem Anwender stellt sich also die Frage, was er bei der Umsetzung am Rechner beachten muss, um eine mglichst gute und zuverlssige Lsung seines Problems zu erhalten. o a o Ohne allzu tief in die Theorie der numerischen Mathematik einzusteigen, werden im Folgenden einfache Bewertungsmastbe aufgezeigt und die LTI-Modelle Zustandsdara stellung, Ubertragungsfunktion und Nullstellen-Polstellen-Darstellung verglichen.

5.5.1

Fehlerbegri

Zur Unterscheidung der mglichen Ursachen f r fehlerhafte Lsungen von numerischen o u o Problemen werden die Fehler beim Ubergang zur numerischen Darstellung ublicherweise in folgende Klassen unterteilt: 1. Datenfehler oder Eingangsfehler resultieren aus fehlerhaften Eingangsdaten, z.B. verrauschten Messdaten. Ihre Auswirkungen auf die Lsung lassen sich nicht o vermeiden, doch kann und muss ihr Einuss auf das Ergebnis minimiert werden. 2. Verfahrensfehler entstehen durch nicht vollstndige Modellierung eines Proa blems, insbesondere durch die Diskretisierung des Problems oder die endliche Anzahl von Schritten bei Iterationsverfahren. 3. Rundungsfehler folgen aus der Art der Zahlendarstellung und dem begrenzten Zahlenbereich im Rechner und stellen ein nicht zu unterschtzendes Problem dar. a Wichtig im Zusammenhang mit dem Fehlerbegri ist auch die Denition des absoluten Fehlers k und des relativen Fehlers k (falls xk = 0) f r die Nherungswerte u a x = (1 , . . . , xn ) an die exakten Werte x = (x1 , . . . , xn ) mit 1 k n: x k = xk xk k = xk xk xk (5.69)

Die beiden Fehler knnen sich f r ein Problem durchaus unterschiedlich verhalten. o u Die Problematik der Daten- oder Eingangsfehler wird durch die Konditionierung des Problems beschrieben und in Kap. 5.5.2 erlutert, die Verfahrens- und Rundungsfehler a werden in Kap. 5.5.3 dargestellt.

5.5 Probleme der numerischen Darstellung

185

5.5.2

Kondition eines Problems

Der Begri der Kondition eines Problems behandelt die Auswirkung von Datenfehlern auf die Berechnungsergebnisse. Hierbei heit ein Problem gut konditioniert, wenn gerin ge Anderungen in den Eingangsdaten auch nur geringf gig Anderungen in den Ergebu nissen zeitigen, und schlecht konditioniert, wenn schon kleine Anderungen in den Eingangsdaten zu groen Abweichungen der Ergebnisse von der richtigen Lsung f hren.10) o u So kann ein schlecht konditioniertes Problem auch mit einem sehr guten und numerisch stabilen Lsungsalgorithmus nicht befriedigend gelst werden. o o Zur Abschtzung der Konditionierung eines Problems werden in der numerischen Maa thematik Konditionszahlen bez glich unterschiedlicher Probleme deniert, die angeben, u wie stark sich die Anderung eines Eingangswertes auf einen Lsungswert auswirkt. o So stellt das Lsen von linearen Gleichungssystemen A x = b und das Ermitteln von o Eigenwerten und -vektoren eine wichtige Aufgabe in der numerischen Simulation dar. Da lineare Gleichungssysteme oft sehr schlecht konditioniert sind, wird zur Fehlerabschtzung die Kondition der Matrix A wie folgt deniert [10]: Aus dem gestrten a o linearen Gleichungssystem A (x + x) = b + b (5.70)

mit der Strung b ergibt sich der Fehler x = A1 b, der mittels der beliebigen o Vektor- bzw. Matrixnormen || || abgeschtzt werden kann durch: a ||x|| ||A1 || ||b|| (5.71)

Der relative Fehler ergibt sich dann zu: ||x|| ||x|| Denition: ||A1 || ||A|| ||b|| ||b|| (5.72)

cond(A) := ||A1 || ||A||

heit die Konditionszahl der Matrix A.

Die Konditionszahl cond(A) ist f r eine nat rliche Norm grer oder gleich eins. Matu u o lab bietet zur Uberpr fung der Kondition von Matrizen verschiedene Befehle an: u cond (A[,p]) condest (A) condeig (A) Der Befehl cond (A,p) berechnet die Konditionszahl der Matrix A bez glich der Inversiu on mit dem Typ der Norm p, der sein kann: 1 f r die nat rliche Norm, 2 f r die Spektralu u u norm (Standardwert), fro f r die Frobenius-Norm und inf f r die Unendlich-Norm. u u Die nat rliche Norm (1-Norm) verwendet der Befehl condest (A), der einen andeu ren Algorithmus zur Abschtzung verwendet als cond (A,1). Der Befehl condeig (A) a schlielich bestimmt einen Vektor von Konditionszahlen f r die Eigenwerte der Matrix u A. Eine Matrix kann f r die Berechnung der Eigenwerte und bez glich der Lsung eines u u o
10)

Es werden auch die Begrie gutartig und bsartig verwendet. o

186

5 Regelungstechnische Funktionen Control System Toolbox

linearen Gleichungssystems (Matrix-Inversion) durchaus unterschiedlich gut konditioniert sein. In der Anwendung ist eine gngige Regel, dass der Wert von log10(cond(A)) die Ana zahl der Dezimalstellen angibt, die bei der Lsung des linearen Gleichungssystems durch o Rundungsfehler verloren gehen. Ein weiterer Anhaltspunkt f r schlechte Kondition ist, u wenn cond (A) sehr viel grer als 1/sqrt(eps) ist. o

Konditionzahlen cond (A[,p]) condest (A) condeig (A) Konditionszahl der Matrix A bez glich Inversion mit Norm p u Konditionszahl der Matrix A bez glich Inversion (1-Norm) u Konditionszahl der Matrix A bez glich Eigenwerten u

5.5.3

Numerische Instabilitt a

Im Gegensatz zum Konditionsproblem11) beschreibt die numerische Stabilitt bzw. a Instabilitt die Auswirkungen des verwendeten Lsungsalgorithmus auf das Ergebnis. a o Da in einem Digitalrechner in der Regel mit Gleitkomma-Arithmetik gerechnet wird und die Menge der darstellbaren Zahlen durch die endliche Zahl von hierf r zur Verf gung u u stehenden Stellen12) im Rechner begrenzt ist, m ssen die berechneten Zahlen oft geu rundet werden. Durch diese Rundungsvorgnge kann es zum Problem der Auslschung a o von Stellen kommen. Tritt dies bei einer mehrstugen Berechnung in mehreren Zwischenergebnissen auf, so knnen sich diese Fehler aufschaukeln und zur numerischen o Instabilitt f hren. Dieses Verhalten wird auch als Fehlerfortpanzung bezeichnet. a u Da die arithmetischen Grundoperationen Addition, Subtraktion, Multiplikation und Division unterschiedlich empndlich gegen ber der Auslschung sind, kann die Reihenfolge u o der Operationen in einem Algorithmus einen wesentlichen Einuss auf das Ergebnis haben. F r die arithmetischen Grundoperationen zwischen zwei Zahlen gelten folgende u Grundregeln: Multiplikation und Division sind gutartige Operationen. Addition und Subtraktion sind gutartig, wenn die beiden Zahlen gleiches (Ad dition) bzw. entgegengesetztes (Subtraktion) Vorzeichen haben. Dies entspricht der Addition der Betrge beider Zahlen und der Multiplikation mit dem resultiea renden Vorzeichen. Addition und Subtraktion sind bsartig und f hren zur numerischen Instabio u litt, wenn die beiden Zahlen ungleiches (Addition) bzw. gleiches (Subtraktion) a Vorzeichen haben und ungefhr gleich gro sind. Dies entspricht der Subtraka tion der Betrge beider Zahlen und der Multiplikation mit dem resultierenden a Vorzeichen.
11) 12)

Dieses wird auch als Problem der natrlichen Stabilitt bzw. Instabilitt bezeichnet. u a a Ublicherweise als Wortlnge bezeichnet. a

5.6 Ubungsaufgaben

187

5.5.4

Bewertung der LTI-Modell-Typen nach numerischen Gesichtspunkten

Die Zustandsdarstellung (SS-LTI-Modell) ist f r die numerische Berechnung u grundstzlich am besten geeignet! Deshalb sind auch viele Algorithmen in Mata lab und in der Control System Toolbox f r SS-LTI-Modelle implementiert, Modelle u in anderen Darstellungsarten werden automatisch umgewandelt oder m ssen explizit u konvertiert werden (Kap. 5.2.5). Nichtsdestoweniger m ssen auch SS-LTI-Modelle gut u konditioniert sein, um eine sinnvolle Lsung zu liefern. Hierzu kann der Befehl ssbal o von Nutzen sein, mit dem eine normierte bzw. austarierte Zustandsdarstellung erzeugt wird, die starke Grenunterschiede in den Vektor- und Matrixelementen vermeidet. o Die Ubertragungsfunktion (TF-LTI-Modell) ist in der Regel nur f r Systeme niedu riger Ordnung (< 10) geeignet und vor allem bei sehr unterschiedlich groen Koezienten oft schlecht konditioniert. Ein weiteres Problem der TF-LTI-Modelle ist, dass bei der Konvertierung in ein SS-LTI-Modell eine mglichst austarierte Zustandsdarstelo lung13) erzeugt wird, die oft eine schlecht konditionierte Systemmatrix bez glich der u Eigenvektoren hat, vor allem bei Systemen hherer Ordnung. o Wenn mglich, ist die Nullstellen-Polstellen-Darstellung (ZPK-LTI-Modell) der o Ubertragungsfunktion vorzuziehen, da insbesondere die Polstellen bei der Konvertierung in die Zustandsdarstellung nicht verflscht werden! Probleme knnen in diesem Fall a o jedoch bei mehrfachen Polstellen und bei Polstellen bei null auftreten. Zusammenfassend knnen folgende Empfehlungen gegeben werden: o Wenn mglich, Modelle in Zustandsdarstellung als SS-LTI-Modell beschreiben. o Eine normierte bzw. austarierte Beschreibung bei SS-LTI-Modellen verwenden. Die Probleme, die bei der numerischen Simulation auftreten knnen, immer im o Hinterkopf behalten und die gewonnenen Ergebnisse auf ihre Verlsslichkeit ubera pr fen. u

5.6
5.6.1

Ubungsaufgaben
Erstellen von LTI-Modellen

Erstellen Sie f r die folgenden Ubertragungsfunktionen jeweils ein TF-LTI-Modell und u speichern Sie den entsprechenden Namen in der Objekt-Eigenschaft Notes ab. Whlen a Sie dazu geeignete Werte f r die Parameter. u Plotten Sie in eine Figure in tabellarischer Form jeweils zeilenweise f r die verschiedenen u Ubertragungsfunktionen den Namen, die Sprungantwort, das Bode-Diagramm und das Nyquist-Diagramm, wie in Abb. 5.36 dargestellt.
13)

Siehe auch den Befehl ssbal in [37].

188

5 Regelungstechnische Funktionen Control System Toolbox

P-Glied: I-Glied: D-Glied: PI-Glied: PD-Glied:

F (s) = KP F (s) = KI s KI s

mit mit mit mit mit

KP = 1 KI = 1 KD = 1 KP = 1, KI = 1 K = 1, TV = 1

F (s) = KD s F (s) = KP +

F (s) = K (1 + s TV )

Warum d rfen beim D- und PD-Glied keine Sprungantworten ausgegeben werden? u


Step Response Amplitude Bode Diagram
1 0 1 1 0 1 10
0

PGlied

1 0 deg 0 0.5 Time (sec) 1


2

dB

Imaginary Axis

Nyquist Diagram 0.1 0 0.1 1 0 Real Axis 1

10

Frequency (rad/sec)
50 0 50 90 10
0

Amplitude

dB

2 1

Imaginary Axis

IGlied

10 0 10 1 0.5 Real Axis 0

deg

0.5 Time (sec)

10

Frequency (rad/sec)
50 0 50 90 10
0

Imaginary Axis

dB

DGlied

20 0 20 1 0.5 Real Axis 0

deg

10

Frequency (rad/sec) Amplitude

PIGlied

1.1 1
0 90 10
2

deg

dB

1.2

40 0

Imaginary Axis

0.5 Time (sec)

10

10

40 20 0 20 40 1

0 Real Axis

Frequency (rad/sec)
40 0 90 0 10
1

Imaginary Axis

PDGlied

dB

10 0 10 1 0 Real Axis 1

deg

10

10

Frequency (rad/sec)

Abb. 5.36: Eigenschaften von Ubertragungsfunktionen

Anmerkung: In den Abb. 5.365.38 wurden zum Teil die Achsbeschriftungen wie Bode Diagramm, Phase etc. nachtrglich mit dem Property Editor entfernt, da sie sich a wegen der vielen Subplots teilweise uberlappen.

5.6 Ubungsaufgaben

189

5.6.2

Verzogerte Ubertragungsglieder

Erzeugen Sie wiederum TF-Modelle f r die folgenden verzgerten Ubertragungsfunku o tionen und stellen Sie sie wie in Aufgabe 5.6.1 grasch dar (Abb. 5.37). V 1+sT 2 V 0 PT2 -Glied: F (s) = 2 2 s + s 2D0 + 0 V KI IT1 -Glied: F (s) = s 1+sT V DT1 -Glied: F (s) = KD s 1+sT PT1 -Glied: F (s) = Tt -Glied: F (s) = eTt s
Step Response Amplitude

mit mit mit mit mit

V = 0.8, T = 0.2 0 = T /0.005; D = 0.05, V, T wie PT1 KI = 1, V = 1, T = 0.2 KD = 1, V = 1, T = 0.2 Tt = 0.1


Bode Diagram Nyquist Diagram 0.4 0.2 0 0.2 0.4 1

PT1Glied

0.5 0
0 90 10
0

deg

dB

0 40

0.5 Time (sec)

10

10

Imaginary Axis

0.5

0.5

Frequency (rad/sec)
100 0 100 0 180 10
1

Real Axis Imaginary Axis 5 0 5 4 2 0 2 4 Real Axis Imaginary Axis 10 0 10 1 0.5 Real Axis Imaginary Axis 2 0 2 0 2 Real Axis Imaginary Axis 1 0 1 1 0 Real Axis 1 4 0

Amplitude

PT2Glied

1 0 deg 0 1 2 3
2 3

dB

10

10

Time (sec) Amplitude dB 2 1 0


90 180 10 0 100

Frequency (rad/sec)

IT1Glied

deg

1 Time (sec)

10

10

Frequency (rad/sec)
20 0 20 90 0 10
0

Amplitude

DT1Glied

2 0 deg 0 0.5 Time (sec) 1


1 2

dB

10

10

Frequency (rad/sec)
1 0 1 0 720 10
0

Amplitude

TtGlied

0.5 0 deg 0 0.5 Time (sec) 1


2

dB

10

Frequency (rad/sec)

Abb. 5.37: Eigenschaften von verzgerten Ubertragungsfunktionen o

190

5 Regelungstechnische Funktionen Control System Toolbox

5.6.3

Verzogerte Ubertragungsglieder zeitdiskretisiert

Diskretisieren Sie nun die in Aufgabe 5.6.2 erzeugten Ubertragungsfunktionen mit der Abtastzeit 0.1 s und stellen Sie diese grasch dar (Abb. 5.38).

Step Response Amplitude

Bode Diagram
0 40 0 180 10
0

PT1Glied

0.5 0 deg 0 0.5 Time (sec) 1


1 2

dB

10

10

Frequency (rad/sec)
100 0 100

Amplitude

PT2Glied

1 0 0 0.5 Time (sec) 1 0 360 0 10


0 100 90 270 10
0

deg

dB

10

Frequency (rad/sec) dB deg

IT1Glied

Amplitude

1 0.5 0 0 0.5 Time (sec) 1

10

10

Frequency (rad/sec)
20 0 20 90 0 10
0

Amplitude

DT1Glied

2 0 deg 0 0.5 Time (sec) 1


1 2

dB

10

10

Frequency (rad/sec)
1 0 1 0 720 10
1

Amplitude

TtGlied

0.5 0 deg 0 0.5 Time (sec) 1


0 1 2

dB

10

10

10

Frequency (rad/sec)

Abb. 5.38: Eigenschaften von verzgerten zeitdiskreten Ubertragungsfunktionen o

5.6 Ubungsaufgaben

191

5.6.4

Typumwandlung

Wandeln Sie beide TF-Modelle f r das PT1 - und PT2 -Glied aus Aufgabe 5.6.2 in SSu LTI-Modelle um und uberpr fen Sie die Korrektheit der Umwandlung anhand der Foru mel y(s) 1 = C ( sE A ) B . u(s) (5.73)

5.6.5

Stabilittsanalyse a
x k = u as2 + bs + c

Die folgende Ubertragungsfunktion 2. Ordnung

lsst sich in Zustandsdarstellung beschreiben durch: a c b k a x + a u x = a und 1 0 0 Die Lsung des charakteristischen Polynoms von A o = det (E A ) = 2 + lautet bekanntlich: 1,2 = 1 b 2a 2a b2 4ac b c ! = 0 + a a

y =

0 1 x

Abhngig von den Parametern a, b und c existieren nun eine reelle doppelte Lsung, a o zwei reelle Lsungen oder eine Lsung mit konjugiert komplexen Eigenwerten. o o 1. Denieren Sie zuerst das SS-LTI-Modell in Abhngigkeit von a, b, c und k. Varia ieren Sie nun die Werte von a, b und c jeweils zwischen 1, 0 (nicht f r a) und u +1 und ermitteln Sie die Art der Eigenwerte, wie z.B. in der Matlab-Ausgabe in Tab. 5.1 gezeigt. 2. In einem weiteren Schritt soll nun f r zwei feste Werte von a und b nur noch c u zwischen 1 und 1 variiert werden und untersucht werden, wie sich die Polstellen verndern. Hierzu soll eine Polstellenmatrix P erzeugt werden, in der f r die a u verschiedenen Werte von c die entsprechenden Polstellen abgespeichert werden. 3. Anschlieend soll der Verlauf der Polstellen in eine Figure geplottet werden, wie sie Abb. 5.39 zeigt. Hierbei markiert ein den Anfang bei c = 1 und ein das Ende f r c = 1. Achtung: Die Pole bestehen zum Teil aus komplexen Variablen. u

192

5 Regelungstechnische Funktionen Control System Toolbox

Tab. 5.1: Stabilittstabelle einer PT2 -Ubertragungsfunktion a a | b | c || Re<0 | Re=0 | Re>0 || konj | ------------------------------------------------1 | -1 | -1 || 2 | 0 | 0 || 1 | -1 | -1 | 0 || 1 | 1 | 0 || 0 | -1 | -1 | 1 || 1 | 0 | 1 || 0 | -1 | 0 | -1 || 0 | 2 | 0 || 1 | -1 | 0 | 0 || 0 | 2 | 0 || 0 | -1 | 0 | 1 || 1 | 0 | 1 || 0 | -1 | 1 | -1 || 0 | 0 | 2 || 1 | -1 | 1 | 0 || 0 | 1 | 1 || 0 | -1 | 1 | 1 || 1 | 0 | 1 || 0 | -----------------------------------------------1 | -1 | -1 || 1 | 0 | 1 || 0 | 1 | -1 | 0 || 0 | 1 | 1 || 0 | 1 | -1 | 1 || 0 | 0 | 2 || 1 | 1 | 0 | -1 || 1 | 0 | 1 || 0 | 1 | 0 | 0 || 0 | 2 | 0 || 0 | 1 | 0 | 1 || 0 | 2 | 0 || 1 | 1 | 1 | -1 || 1 | 0 | 1 || 0 | 1 | 1 | 0 || 1 | 1 | 0 || 0 | 1 | 1 | 1 || 2 | 0 | 0 || 1 | -----------------------------------------------Polstellen (a=1, b=1; o Anfang, x Ende) 1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 2

Stabil

INSTABIL

Imaginrteil

1.5

0.5 Realteil

0.5

Abb. 5.39: Eigenschaften von verzgerten Ubertragungsfunktionen o

5.6 Ubungsaufgaben

193

5.6.6

Regelung der stabilen PT2-Ubertragungsfunktion

Wie aus Tab. 5.1 abzulesen ist, verhlt sich die PT2 -Ubertragungsfunktion aus Aufgabe a 5.6.5 mit den Parametern a = 1, b = 0.5, c = 1 und K = 1 stabil. 1. Streckenverhalten: Untersuchen Sie das Streckenverhalten der PT2 -Ubertragungsfunktion mit den geeigneten Matlab-Befehlen, z.B. Nullstellen- und Polstellenverteilung stationre Gleichverstrkung a a Eigenfrequenzen Dmpfungsverhalten a Verwenden Sie den LTI-Viewer zur Untersuchung des Streckenverhaltens im Zeitund Frequenzbereich, z.B. Impuls- und Sprungantwort, Bode-Diagramm. 2. Regelung: Nun soll eine Regelung f r die PT2 -Ubertragungsfunktion erstellt u werden. Entwerfen sie Regler mit unterschiedlichen Charakteristika: P-Regler: PI-Regler: VP VP + VI

VP s + VI 1 = s s VD s2 + VP s + VI 1 = PID-Regler: VD s + VP + VI s s Verwenden Sie sowohl die Matlab-Befehle als auch das SISO Design Tool. Plotten Sie Sprungantworten und Stabilittsgrenzen wie in Abb. 5.40 und Abb. 5.41. a
Step Response
Amplitude
2 1.5 1 0.5 0 0 2 4 6 8 10 12 14 16 Strecke PRegler 18 20

Step Response
Amplitude
2 1.5 1 0.5 0 0 2 4 6 8 10 12 14 16 Strecke PIRegler 18 20

Time (sec)

Step Response
Amplitude
2 1.5 1 0.5 0 0 2 4 6 8 10 12 14 16 Strecke PIDRegler 18 20

Time (sec)

Time (sec)

Abb. 5.40: Sprungantworten der geschlossenen Regelkreise

194

5 Regelungstechnische Funktionen Control System Toolbox


Bode Diagram Gm = Inf dB (at Inf rad/sec) , Pm = 9.49 deg (at 3.3 rad/sec)

Phase (deg) Magnitude (dB)

100 0 100 0 90 PRegler 180 2 10 10


1 0 1 2

10 Frequency (rad/sec)

10

10

Bode Diagram Gm = Inf dB (at Inf rad/sec) , Pm = 7.75 deg (at 3.3 rad/sec) Phase (deg) Magnitude (dB)

100 0 100 0 90 PIRegler 180 3 10 10


2 1 0 1

10 Frequency (rad/sec) Bode Diagram Gm = Inf , Pm = 75.2 deg (at 5.46 rad/sec)

10

10

Phase (deg) Magnitude (dB)

100 0 100 0 90 PIDRegler 180 3 10 10


2 1 0 1 2

10 10 Frequency (rad/sec)

10

10

Abb. 5.41: Stabilittsgrenzen der oenen Regelkreise a

5.6.7

Regelung der instabilen PT2-Ubertragungsfunktion

1. Regelung mit P-Regler Nun wird der Parameter c der PT2 -Ubertragungsfunktion auf -1 gesetzt, das Verhalten der Strecke wird also instabil. Entwerfen Sie nun einen P-Regler, der das Streckenverhalten im geschlossenen Regelkreis stabilisiert und erstellen Sie das LTI-Modell sys_r des geschlossenen Regelkreises. 2. Regelung mit Zustandsregler mit Sollwertanpassung Nun soll das Uberschwingen ganz unterdr ckt und der stationre Regelfehler des u a P-Reglers vermieden werden. Hierzu dient ein Zustandsregler mit Sollwertanpassung nach Abb. 5.42.

5.6 Ubungsaufgaben
E D

195

w E

KV

u eu r E E B T

E eE T

xE r

E cE e

A ' r K '

Abb. 5.42: Zustandsregler mit Sollwertanpassung

Berechnen Sie den Rckfhrvektor K des Regelgesetzes u = K x (u = 0) u u mit acker oder place (Wunsch-Pole z.B. 1.1 und 1). Welche Eigenschaften m ssen die Wunsch-Pole aufweisen, damit das Uberschwingen vermieden wird? u 1 . Berechnen Sie den Sollwertanpassungsfaktor KV = C (A BK)1 B Erzeugen Sie das LTI-Modell sys_z des zustandsgeregelten Systems mit der Zustands-DGL x = (A B K) x + B u und uberpr fen Sie, ob die Pole dieses u Systems tatschlich den gew nschten Polen entsprechen. a u Plotten Sie die Sprungantworten des Systems mit P-Regler (sys_r), mit Zustandsregler ohne (sys_z) und mit Sollwertanpassung (sys_z*Kv) wie in Abb. 5.43.
Step Response
2

1.8

1.6

1.4

Amplitude

1.2

0.8

0.6

0.4

0.2

PRegler ZustandsRegler Sollwertanpassung


0 5 10 15 20 25

Time (sec)

Abb. 5.43: Regelung instabile PT2 -Funktion: Sprungantworten mit P-Regler (- ), Zustandsregler ohne (--) und mit Sollwertanpassung (-)

196

5 Regelungstechnische Funktionen Control System Toolbox

3. Regelung mit Zustandsregler mit Fhrungsintegrator u Die Parameter der PT2 -Ubertragungsfunktion lauten nun a = 1, b = -0.5, c = 1 und K = 1, d.h. die Ubertragungsfunktion ist weiter instabil, kann aber nicht mehr mit einem P-Regler stabilisiert werden. Zustzlich wirkt nun die Strgre a o o z auf den Zustand x1 . Entwerfen Sie wieder einen Zustandsregler mit Sollwertanpassung wie in Punkt 2. Erstellen Sie das System sys_s, das sys_z aus Aufgabe 2 ergnzt um a einen zweiten Eingang f r die Strung: sys_s.b = [sys.b [2;0]]. u o Da die R ckf hrung mit K proportional erfolgt, kann eine Strung nicht ausgegliu u o chen werden, es muss ein Zustandsregler mit Fhrungsintegrator entworfen u werden, wie ihn Abb. 5.44 zeigt.
c

F w e xE E I
T

xI E

KI

u eu E E B T

Ec eE T

xE r

r E

A ' r K '

Abb. 5.44: Zustandsregler mit Fhrungsintegrator u

Der Integrator mit dem Zustand xI und der Verstrkung KI wird der Strecke a zugeschlagen, so dass sich f r die Berechnung des erweiterten R ckf hrvektors u u u [ K KI ] folgende Zustandsdarstellung der Strecke (F hrungs bertragungsfunktiu u on von u nach xI ) ergibt:

x xI

A 0 x xI C 0

B u 0

y = Cx

(5.74)

F r die geregelte Strecke mit Strung lautet die Zustands-DGL (von w nach y): u o x xI = x A BK BKI C 0 xI + 0 F w 1 0 z y = [ C 0 ] x (5.75)

Erzeugen Sie das System sys_f nach Gleichung (5.74) und berechnen Sie damit den erweiterten R ckf hrvektor [ K KI ]. Erstellen Sie damit das geregelte System u u sys_zf nach Gleichung (5.75) mit F = [ 2 0 ]T .

5.6 Ubungsaufgaben

197

Simulation und Ausgabe: Der Sollwert ist eine Sprungfunktion bei 0 Sekunden, die Strung soll nun nach 15 und nach 35 Sekunden wirken (Abb. 5.45). o Erzeugen Sie den Zeitvektor t (0 bis 50 s) und die beiden Sprungfunktionen f r u Sollwert w und Strgre z und simulieren und plotten Sie mit lsim die Zeito o verlufe f r die beiden Systeme sys_s und sys_zf. a u
Fhrungs und Strverhalten 1.6 1.4 1.2 1 Amplitude 0.8 0.6 0.4 0.2 0 0.2 0 5 10 15 20 25 30 Time (sec) 35 40 45 50 Strung Sollwertanpassung Fhrungsintegrator

Abb. 5.45: Regelung instabile PT2 -Funktion mit Strung: Sprungantworten Zustandso regler mit Sollwertanpassung (-) und Zustandsregler mit Fhrungsintegrator (--) u

5.6.8

Kondition und numerische Instabilitt a

Betrachtet wird das folgende lineare Gleichungssystem (aus [5]):

1 a a 1

1 0

mit seiner Lsung o 1 1 a2 a . 1 a2

x1 =

x2 = a x1 =

198

5 Regelungstechnische Funktionen Control System Toolbox

1. Kondition (Natrliche Instabilitt) u a u Berechnen Sie nun f r Werte von a = 1 + 10n f r n = 1, . . . , 9 die Konditiu onszahl cond(A), den Wert f r log10(cond(A)) sowie die Lsung des linearen u o Gleichungssystems x = A\b bzw. xe = (A-E)\b mit der Strung E = [ 0.0001 o 0.0001 ; 0.0001 -0.0001 ]. Vergleichen Sie die Lsungsvektoren x und xe des ungestrten und des gestrten o o o Systems! 2. Numerische Instabilitt a Die Addition der beiden Komponeneten x1 und x2 des Lsungsvektors x ergibt o rechnerisch: 1 a 1 a2 1 a2 1 1+a

x1 + x2

u Berechnen Sie nun wie oben f r Werte von a = 1+10n f r n = 1, . . . , 9 die Summe u x1 + x2 , und zwar zum einen als Summe der Elemente des Lsungsvektors des o linearen Gleichungssystems und zum anderen mit der (mathematisch korrekten) Formel 1/(1 + a) und vergleichen Sie die Ergebnisse.

Signalverarbeitung Signal Processing Toolbox

Methoden der Signalverarbeitung im Zeit- und Frequenzbereich ermglichen die Aufbeo reitung, Filterung und Analyse von Daten. In der Regel liegen diese in Form abgetasteter Messwerte vor und knnen zur weiteren Bearbeitung in Matlab als Vektor eingelesen o werden. Zur Vertiefung sei auf weiterf hrende Literatur verwiesen. [24] [31] u

6.1

Interpolation, Approximation und Abtastung

Messungen werden meist zu diskreten Zeitpunkten durchgef hrt. Bei der Auswertung u kann es notwendig sein, die Abtastzeitpunkte verschiedener Datenkanle zu synchronia sieren. Daf r werden Befehle zur Interpolation und zur Anderung der Abtastrate eingeu setzt. Zudem knnen Daten mit einer mathematischen Funktion approximiert werden. o

6.1.1

Interpolation und Approximation

Durch Interpolation lassen sich Zwischenwerte zu vorhandenen Daten erzeugen. F r u eindimensionale Interpolation steht in Matlab der Befehl interp1 (x werte, y werte, u x auswertung, methode) zur Verf gung sowie analog die Befehle interp2 und interp3 f r hhere Dimensionen. Die Messdaten m ssen dabei jeweils in der Reihenfolge aufu o u steigender Koordinaten vorliegen. Das Beispiel in Abb. 6.1 links wird mit den folgenden Zeilen erzeugt. Dabei fllt auf, a dass eine Extrapolation (d.h. uber den Bereich der gegebenen Testpunkte hinaus) nur mit Splines und kubischer Interpolation mglich ist. Lineare Interpolation liefert in o diesem Fall nur NaN.
x = -0.6:2.4; y = exp (-x.^2/2); x_interp = -1:0.1:3; y_interp_linear = interp1 (x, y, x_interp, linear); y_interp_cubic = interp1 (x, y, x_interp, cubic); y_interp_spline = interp1 (x, y, x_interp, spline); figure plot (x, y, ko) hold on plot (x_interp, exp (-x_interp.^2/2), k:) plot (x_interp, y_interp_linear, b-.) plot (x_interp, y_interp_cubic, g--) plot (x_interp, y_interp_spline, r-)

200

6 Signalverarbeitung Signal Processing Toolbox

Liegen insbesondere zweidimensionale Messdaten unsortiert vor, erzeugt griddata a (x werte, y werte, z werte, x ausw, y ausw, methode) daraus ein gleichmiges Raster aus interpolierten Datenpunkten. Diese Funktion eignet sich auch zur graschen Darstellung eines Kennfeldes aus ungleichmig verteilten Messpunkten (siehe Abb. 6.1 a rechts), wie es mit den folgenden Befehlen erzeugt wird.
x = rand (100, 1) * 4 - 2; y = rand (100, 1) * 4 - 2; z = x .* exp (-x.^2 - y.^2); [XI, YI] = meshgrid (-2:.25:2, -2:.25:2); ZI = griddata (x, y, z, XI, YI, v4); figure mesh (XI, YI, ZI) hold on plot3 (x, y, z, o)
interp1 1 0.8 0.6 0.4 0.2 0 1 0.5 2 0 0 1 2 3 2 2 2 0 Testpunkte ideal linear kubisch Splines

% Erzeugt Zufallszahlen-Vektor % Testpunkte % Koordinaten-Raster % Kennfeld aus Testpunkten % Kennfeld zeichnen % Testpunkte zeichnen
griddata

0.5

Abb. 6.1: Verschiedene Interpolationsverfahren

Wenn Messdaten durch ein Polynom approximiert werden sollen, bietet sich das Basic Fitting Tool an. Dazu werden die Messdaten zuerst in einer normalen Figure geplottet und anschlieend das Basic Fitting Tool im Figure-Men Tools gestartet. Bei diesem u Werkzeug handelt es sich um ein GUI zur einfachen Visualisierung von Approximationsfunktionen. Es knnen verschiedene Typen von Funktionen ausgewhlt werden, die o a auch sofort in der Figure mit Legende angezeigt werden. Bei Auswahl der Check Box Show Equations werden zustzlich die Gleichungen der Funktionen angezeigt. a Die folgenden Matlab-Befehle erzeugen Datenpaare und stellen sie in einer Figure dar (siehe Abb. 6.2). Diese zeigt die Datenpaare als Kreise und die vom Basic Fitting Tool erzeugten Approximationen inklusive der zugehrigen Gleichungen. o
x = -0.6:2.4; y = exp (-x.^2/2); plot (x, y, ko)

Der Vorteil dieses Tools besteht in der schnellen graschen Beurteilung des Resultats. F r genauere Ergebnisse oder f r die Abarbeitung in Skripts ist der Befehl polyfit u u jedoch besser geeignet.

6.1 Interpolation, Approximation und Abtastung

201

Abb. 6.2: Interpolation mit dem Basic Fitting Tool

Ein ahnliches Tool stellt das GUI Data Statistics dar. Es wird durch den Men punkt u Tools/Data Statistics der entsprechenden Figure gestartet. Damit lassen sich Mittelwert, Standardabweichung, Median und weitere statistische Gren ermitteln (siehe o Abb. 6.3). Die gleichen Daten lassen sich auch im Workspace Browser anzeigen (die Spaltenauswahl erfolgt uber das Kontextmen der Namensleiste). u

Abb. 6.3: Data Statistics GUI

Interpolation und Approximation y int = interp1 (x, y, x auswertung, methode) Interpolation koef = polyfit (x, y, ordnung) f Polynom-Approximation z int = griddata (x, y, z, x ausw, y ausw, methode) Daten rastern

202

6 Signalverarbeitung Signal Processing Toolbox

6.1.2

Anderung der Abtastrate

Zur Erhhung der Abtastrate eines Signals sowie zu deren Reduzierung (Upsampling o bzw. Downsampling) stellt Matlab jeweils zwei Befehle bereit. Der Befehl downsample (daten, faktor [, of fset]) tastet die Daten um einen ganzzahligen Faktor langsamer ab. So greift z.B. faktor = 4 jeden vierten Datenpunkt heraus (siehe Abb. 6.4 Mitte). Der optionale (und ebenfalls ganzzahlige) Oset muss kleiner sein als der Faktor und verschiebt die Abtastpunkte nach rechts. Wird als Daten eine Matrix ubergeben, wendet Matlab den Befehl auf jede Spalte separat an.
t = 0.025:0.025:1; x = 4*sin (2*pi*t) + cos (pi/4 + 16*pi*t); y = downsample (x, 4); figure subplot (131) plot (x, .-) title (Originalsignal) subplot (132) plot (y, .-) title (Abtastrate reduziert) % Zeitvektor % Datenvektor ("Messwerte") % Reduzierung der Abtastrate

Der Befehl upsample (daten, faktor [, of fset]) tastet die Daten um einen ganzzahligen Faktor hher ab, indem er zwischen zwei Datenpunkten eine entsprechende Anzahl o Nullen einf gt (siehe Abb. 6.4 rechts). u
z = upsample (y, 4); subplot (133) plot (z, .-) title (Abtastrate wieder erhht) o
Originalsignal 5 Amplitude 5

% Erhhung der Abtastrate o

Abtastrate reduziert 5

Abtastrate wieder erhht

20 Samples

40

5 Samples

10

20 Samples

40

Abb. 6.4: Originalsignal (links), mit downsample reduzierte (Mitte) und mit upsample wieder erhhte Abtastrate (rechts) jeweils zum Vergleich zustzlich das abgetastete Signal () o a

In beiden Fllen muss der Anwender daf r Sorge tragen, dass er beim Downsampling a u das Abtasttheorem nicht verletzt (wie in Abb. 6.4 der Fall!) bzw. beim Upsampling die Daten zustzlich geeignet ltert und skaliert. a Die folgenden Befehle ber cksichtigen beide Aspekte: decimate (daten, faktor) arbeiu tet analog zu downsample, ltert die Daten zuvor jedoch mit einem Anti-Aliasinglter (Tschebysche-Tiefpass 8. Ordnung). Optional kann eine andere Filterordnung auch

6.2 Spektralanalyse

203

direkt angegeben werden. Bei groen Datenstzen ist es ratsam, mit der Option fir a ein schnelleres FIR-Filter zu verwenden. Details zu digitalen Filtern siehe ab Kap. 6.4.2.
y = decimate (x, 4, 8, fir); % Reduzierung der Abtastrate, FIR-Filter 8. Ord.

Der Befehl interp (daten, faktor) (nicht zu verwechseln mit interp1!) erhht die Abo tastrate, indem er die Zwischenpunkte mit einem speziellen Interpolationslter erzeugt. Abb. 6.5 zeigt das vorige Beispiel mit diesen beiden Befehlen.
z = interp (y, 4);
Originalsignal 5 Amplitude 5

% Erhhung der Abtastrate o


Abtastrate reduziert 5 Abtastrate wieder erhht

20 Samples

40

5 Samples

10

20 Samples

40

Abb. 6.5: Originalsignal (links), mit decimate reduzierte (Mitte) und mit interp wieder erhhte Abtastrate (rechts) jeweils zum Vergleich zustzlich das abgetastete Signal () o a

Schlielich existiert auch die Kombination aus Up- und Downsampling zur Anderung der Abtastrate mit einem rationalen Faktor zaehler/nenner. Der Befehl resample (daten, zaehler, nenner) erhht zunchst die Abtastrate um den Faktor zaehler, lo a tert die Daten mit einem Anti-Aliasinglter (FIR-Tiefpass) und reduziert anschlieend die Abtastrate um den Faktor nenner, wobei beide Faktoren ganzzahlig sein m ssen. u Beginnen oder enden die Daten nicht mit Werten nahe Null, ist das Ergebnis dort ungenau, da resample intern die Daten mit Nullen ergnzt. a Anderung der Abtastrate downsample (daten, faktor [, of fset]) upsample (daten, faktor [, of fset]) decimate (daten, faktor [, ordnung] [, fir]) interp (daten, faktor) resample (daten, zaehler, nenner) Reduktion ohne Filterung Erhhung ohne Filterung o Reduktion mit Filterung Erhhung mit Filterung o Anderung mit Filterung

6.2

Spektralanalyse

Grundlage der Spektralanalyse ist die Fouriertransformation. Dazu kommen Methoden wie Averaging oder Fensterung, mit denen sich das Ergebnis der Analyse verbessern lsst. Darauf aufbauend bietet Matlab Funktionen zur Bestimmung von Leistungsa spektren eines Signals.

204

6 Signalverarbeitung Signal Processing Toolbox

6.2.1

Diskrete Fouriertransformation (DFT)

Die Diskrete Fouriertransformation (DFT) eines Zeitsignals x(t) leitet sich von der kontinuierlichen Fouriertransformation ab: X(j) =

x(t) exp (jt) dt

(6.1)

Um die DFT zu erhalten, wird das Integral durch eine Summe von N Rechtecken der a Hhe x(nTs ) angenhert.1) Dabei entspricht Ts der Abtastzeit, Fs = 1/Ts der Abtasto frequenz und N der Anzahl der Messwerte:
N 1

Xd (k ) =
n=0

x(nTs ) exp (jk nTs )

(6.2)

Die DFT Xd existiert nur f r diskrete Frequenzen k = k. Die Frequenzauflsung u o = 2/(N Ts ) bzw. F = 1/(N Ts ) ist umgekehrt proportional zur Messdauer N Ts . Aufgrund des Abtasttheorems entspricht die hchste messbare Frequenz Fmax = Fs /2 = o 1/(2Ts ) der halben Abtastfrequenz. Je nach Phasenlage der einzelnen Frequenzkomponenten treten in der Regel komplexe Spektralkoezienten auf. Sollen die reellen Fourierkoezienten ai , bi der Fourierreihe
K

x(t) = a0 +
k=1

ak cos(kk t) + bk sin(kk t)

(6.3)

u mittels der DFT bestimmt werden, muss die Abtastzeit Ts ber cksichtigt und das Ergebnis auf die Messdauer N Ts normiert werden. Dazu werden die Elemente von Xd durch N geteilt.2) Ebenso werden alle Frequenzen ab Fmax ausgeblendet (Index k N/2) und daf r die verbleibenden Elemente mit Ausnahme des Gleichanteils (Index k = 0), der u nur einmal vorkommt verdoppelt. a0 = 1 Re {Xd (0)} N ak>0 = 2 Re {Xd (k)} N bk>0 = 2 Im {Xd (k)} N

Die in Matlab implementierte Funktion fft (x) verarbeitet einen Datenvektor x und gibt einen Vektor X derselben Lnge mit den Spektralkoezienten zur ck. Daher sind a u die Koezienten mit Index k = 2, 3, ... symmetrisch zu denen mit Index k = N, N1, ... . Die Indizes werden im Weiteren, wie bei Matlab ublich, von 1 bis N gezhlt a und nicht von 0 bis N1. Im folgenden Beispiel wird zunchst ein Messvektor x mit dem zugehrigen Zeita o vektor t erzeugt.
t = 0.01:0.01:0.5; x = 5 + 8*sin(2*pi*8*t) + 4*cos(2*pi*33*t);
1) 2)

% Zeitvektor (Fs = 100 Hz) % Datenvektor ("Messwerte")

Die Breite Ts der Rechtecke ist dabei nicht in der Denition der DFT bercksichtigt. u Dies schliet die Bercksichtigung der Rechteckbreite Ts ein. u

6.2 Spektralanalyse

205

Als Nchstes werden daraus die Abtastzeit Ts , die Anzahl der Messwerte N und der a Frequenzvektor f zur spteren Anzeige des Spektrums bestimmt. Die Fouriertransa formierte X wird normiert und auf den Bereich < Fmax begrenzt (die Indizes werden mit floor auf ganze Zahlen abgerundet). Abb. 6.6 zeigt Mess-Signal und Spektrum.
Ts = diff (t(1:2)); N = length (x); f = [0:floor((N-1)/2)] / (N*Ts); X = fft (x); X = X / N; X = [X(1) 2*X(2:floor((N-1)/2)+1)]; figure subplot (121) plot (t, x, .-) title (Signal) subplot (122) stem (f, abs (X)) xlabel (Frequenz [Hz]) title (Spektrum)
Signal 25 20 15 10 5 0 5 10 15 0 0.1 0.2 0.3 Zeit [s] 0.4 0.5 0 0 10 20 30 Frequenz [Hz] 40 50 Amplitude 8 6 4 2 10 Spektrum

% Abtastzeit % Lnge des Datenvektors a % Frequenzvektor fr Plot u % Fouriertransformation % Normierung % Begrenzen auf < F_max

Abb. 6.6: Zeitsignal und Spektrum

In diesem Beispiel betrgt die Abtastzeit Ts = 10 ms und die hchste messbare Frequenz a o demnach Fmax = 50 Hz. Es werden N = 50 Messwerte ausgewertet; die Frequenzauflsung ist somit F = 2 Hz. Das Spektrum wird f r alle Frequenzen 0, F, 2F, ... o u bis Fmax berechnet. Liegt ein Frequenzanteil des Mess-Signals dazwischen (wie der Anteil mit 33 Hz im Beispiel), tritt der so genannte Leakage-Eekt auf: Die Amplitude verteilt sich auch auf Nachbarfrequenzen. Dies ist immer dann der Fall, wenn die gesamte Messzeit N Ts kein ganzzahliges Vielfaches der Periodendauer der zu analysierenden Frequenz ist. Eine feinere Frequenzauflsung F ist als Abhilfe gegen Leakage nur bedingt geeignet, o da sich dadurch Rauschen strker auswirkt. Eine bessere Mglichkeit ist die Verwendung a o von Fensterfunktionen. Zustzlich bietet sich insbesondere bei Leistungsspektren a eine Mittelwertbildung im Frequenzbereich an (so genanntes Averaging).

206

6 Signalverarbeitung Signal Processing Toolbox

6.2.2

Averaging

Steht ein ausreichend langer Messdatensatz zur Verf gung, kann dieser in Sequenzen u zerlegt werden, die einzeln mittels DFT transformiert werden, um anschlieend den Mittelwert der einzelnen Spektren zu berechnen. Das folgende Beispiel verwendet ein Mess-Signal uber 25 s, zu welchem Rauschen hin zugef gt wird. Die Lnge einer Sequenz wird mit N seq = 50 Messpunkten vorgegeben. u a
t = 0.01:0.01:25; x = 5 + 8*sin(2*pi*8*t) + 4*cos(2*pi*33*t); x = x + 5*(randn (1,length(t))); Ts = diff (t(1:2)); N_seq = 50; N = length (x); f = [0:N_seq/2-1] / (N_seq*Ts); X = zeros (1, N_seq); for k = 1:N/N_seq x_seq = x (1+(k-1)*N_seq:k*N_seq); X = X + abs (fft (x_seq)); end X = [X(1) 2*X(2:N_seq/2)] / N; % Zeitvektor (Fs = 100 Hz) % Datenvektor ("Messwerte") % Rauschen hinzufgen u % % % % Abtastzeit Lnge einer Sequenz a Lnge des Datenvektors a Frequenzvektor fr Plot u

% Leeres Array erzeugen % Sequenz ausschneiden % DFT und Summation % Begrenzen, Normieren

Abb. 6.7 zeigt links zum Vergleich das Spektrum der ersten Sequenz sowie rechts das Spektrum mit 50fachem Averaging. Das Rauschen wird dabei zu einem gleichmigen a Teppich gemittelt.
Spektrum ohne Averaging 10 8 Amplitude 6 4 2 0 Amplitude 10 8 6 4 2 0 Spektrum mit 50fachem Averaging

10

20 30 Frequenz [Hz]

40

50

10

20 30 Frequenz [Hz]

40

50

Abb. 6.7: Spektrum ohne und mit 50fachem Averaging

6.2.3

Fensterung

Zur Verminderung des Leakage-Eekts kann neben Averaging auch eine Fensterung des Datensatzes vor der diskreten Fouriertransformation erfolgen. Die grundlegende Idee kann folgendermaen beschrieben werden: Die endliche Aufzeichnung eines unendlich

6.2 Spektralanalyse

207

langen periodischen Zeitsignals stellt mathematisch gesehen die Multiplikation des Zeitsignals mit einer Rechteck-Fensterfunktion dar. Diese hat nur whrend der Aufzeichnung a den Wert 1, ansonsten 0. Im Frequenzbereich faltet sich somit das Spektrum des Zeitsignals mit dem des Rechteckfensters. F r das Auftreten des Leakage-Eekts ist das u langsame Abklingen des Rechteckspektrums, also die steilen Flanken des Fensters im Zeitbereich verantwortlich. Verwendet man stattdessen ein Fenster mit achen Flanken, d.h. Messwerte in der Mitte des Fensters werden hher gewichtet als Messwerte o am Rand, dann kann der Leakage-Eekt verringert werden. F r die Erzeugung verschiedener Fensterfunktionen der Datenlnge n stehen in Matu a lab unter anderem die Befehle rectwin (n), triang (n), bartlett (n), hamming (n), hann (n) und blackman (n) zur Verf gung, siehe Abb. 6.8. Eine gute Ubersicht bietet u zudem das Window Design and Analysis Tool, das mit wintool gestartet wird.
Fensterfunktionen

1 0.8 F(n) 0.6 0.4 0.2 0 0 5 10 n Rechteck Dreieck Hamming Hann Blackman 15 20

Abb. 6.8: Fensterfunktionen der Datenlnge 21 a

Die DFT wird nun nicht mehr auf den Datensatz direkt, sondern auf den gefensterten Datensatz angewandt. Der Aufruf f r einen Datensatz x (Zeilenvektor) unter Verwenu dung des Hamming-Fensters lautet dann:
X = fft (hamming (length (x)) .* x);

Ein ausf hrlicheres Beispiel ist in den folgenden Matlab-Befehlen gegeben. Der u Leakage-Eekt tritt bei den Frequenzen 11 Hz und 33 Hz auf (Abb. 6.9 links).
t = 0.01:0.01:0.5; x = 8*sin(2*pi*11*t) + 4*cos(2*pi*33*t); Ts = diff (t(1:2)); N = length (x); f = [0:floor((N-1)/2)] / (N*Ts); X = fft (hamming (N) .* x); X = X / N; X = [X(1) 2*X(2:floor((N-1)/2)+1)]; % Zeitvektor (Fs = 100 Hz) % Datenvektor ("Messwerte") % Abtastzeit % Lnge des Datenvektors a % Frequenzvektor fr Plot u % Fouriertransformation % Normierung % Begrenzen auf < F_max

Durch eine Datenfensterung kann die Aufweitung des Spektrums verringert werden. Allerdings wird durch die Fensterung auch die Amplitude reduziert (Abb. 6.9 rechts). Es muss je nach Anwendung entschieden werden, ob dies zulssig ist oder nicht. a

208
Spektrum ohne Fensterung 10 8 Amplitude 6 4 2 0

6 Signalverarbeitung Signal Processing Toolbox


Spektrum mit HammingFenster 10 8 Amplitude 0 10 20 30 Frequenz [Hz] 40 50 6 4 2 0

10

20 30 Frequenz [Hz]

40

50

Abb. 6.9: Spektrum ohne und mit Datenfensterung mit Hamming-Fenster

Fensterfunktionen rectwin (laenge) Rechteck triang (laenge) Dreieck (Rand > 0) bartlett (laenge) Dreieck (Rand = 0) wintool hamming (laenge) Hamming hann (laenge) Hann blackman (laenge) Blackman

Window Design and Analysis Tool

6.2.4

Leistungsspektren

In der Messtechnik werden anstelle der oben behandelten Amplitudenspektren meist a Leistungsdichtespektren verwendet. Das Autoleistungsdichtespektrum xx erhlt man durch Quadrieren der DFT und anschlieende Normierung auf N und Fs . Als Einheit wird ublicherweise W / Hz bei linearer bzw. dB / Hz bei logarithmischer Darstellung verwendet, wobei 10 dB einem Faktor 10 der Leistung entsprechen.3) xx (f ) = 1 Xd (2f ) N Fs
2

1 N Fs

N 1

x(nTs ) exp (j2f nTs )


n=0

(6.4)

Die gesamte Leistung4) P des Signals erhlt man daraus und mit der Frequenzauflsung a o F = Fs /N wie folgt. 1 xx (nF ) = P = F N2 n=0

3)

N 1

N 1

Xd (2 nF )
n=0

(6.5)

Die Leistung ist proportional zum Quadrat der Amplitude; daher entsprechen 10 dB nur dem Faktor 10 der Amplitude; 20 dB entsprechen Faktor 10 der Amplitude und somit Faktor 100 der Leistung. 4) Die Aquivalenz mit der aus dem Zeitsignal berechneten Leistung gilt bei Verwendung von Fenste rung oder Averaging nur nherungsweise. a

6.2 Spektralanalyse

209

Der Befehl pwelch5) (x, fenster, ueberlappung, Nff t, Fs) gibt das Leistungsdichte spektrum aus. Durch eine Uberlappung der einzelnen Sequenzen von 50% wird der Verlust relevanter Information minimiert; die Daten werden standardmig mit einem a Hammingfenster beaufschlagt. Parameter, die nicht gendert werden sollen, knnen a o leer ([]) gelassen werden. Ohne R ckgabeparameter wird das Spektrum grasch ausu gegeben. Abb. 6.10 wird mit den folgenden Zeilen erstellt.
t = 0.01:0.01:25; % Zeitvektor (Fs = 100 Hz) x = 2 + 8*sin(2*pi*8*t) + 4*cos(2*pi*33*t); % Datenvektor ("Messwerte") x = x + 5*(randn (1,length(t))); % Rauschen hinzufgen u [Pxx, F] = pwelch (x, rectwin (250), [], 250, 100); plot (F, 10*log10(Pxx)) % alternativ: plot (F, pow2db (Pxx))

F r die Umrechnung zwischen Amplitude (Absolutwert!) bzw. Leistung und dB stehen u die Befehle xdb = mag2db (abs (x)) und x = db2mag (xdb) mit xdb = 20 log10 (x) sowie u analog pow2db und db2pow mit xdb = 10 log10 (x) zur Verf gung.
Autoleistungsdichtespektrum mit "pwelch" 20 Leistungsdichte [dB/Hz] 15 10 5 0 5 10 0 10 20 30 Frequenz [Hz] 40 50

Analyse mit spectrogram

20 15 10 5

Time

10

20 30 Frequency (Hz)

40

Abb. 6.10: Autoleistungsdichtespektrum mit pwelch und Rechteckfenster

Abb. 6.11: Spektralanalyse eines nichtperiodischen Signals mit spectrogram

F r eine quantitative Analyse der Leistungsdichte6) empehlt es sich, wie in Abb. 6.10 u den Befehl pwelch mit Rechteckfenster rectwin zu verwenden (Achtung: Leakage!). Weitere Methoden zur Berechnung (eigentlich Abschtzung) des Leistungsdichtespeka trums knnen der Matlab-Hilfe zu pwelch entnommen werden. o Eine interaktive Analyse ist mit dem Spectrum Viewer mglich, der mittels sptool o aufgerufen wird (siehe Abb. 6.12). Im Startfenster muss zunchst uber den Men punkt a u File/ Import ein Signal aus dem Workspace oder einer Datei importiert werden; dabei sollten auch Abtastfrequenz und Name (zur Verwendung im sptool) eingegeben werden. Anschlieend wird im sptool mit dem Button Create (bzw. View ) in der rechten
Benannt nach einer Verentlichung von P.D. Welch, 1967 o Der Rauschanteil besitzt die Leistungsdichte 52 W / 50 Hz = 0.5 W / Hz = 3 dB / Hz. Mit F = 100 Hz / 250 = 0.4 Hz besitzt die sin-Komponente eine Leistungsdichte von 82 W / 2 / 0.4 Hz = 80 W / Hz = 19 dB / Hz, der Gleichanteil die Leistungsdichte 22 W / 0.4 Hz = 10 W / Hz = 10 dB / Hz.
6) 5)

210

6 Signalverarbeitung Signal Processing Toolbox

Spalte der Spectrum Viewer aufgerufen. Nach Einstellen der gew nschten Analyseparau meter kann mit dem Button Apply das Spektrum ausgegeben werden (siehe Abb. 6.13). Vielfltige Einstellmglichkeiten bestehen uber die Buttonleiste und das Men . a o u

Abb. 6.12: sptool: Startfenster

Abb. 6.13: sptool: Spectrum Viewer

Der Befehl cpsd (x, y, fenster, ueberlappung, Nff t, Fs) bestimmt das Kreuzleistungsdichtespektrum der Signale x und y. Er verwendet dieselben Standardeinstellungen wie pwelch. Der Befehl spectrogram (x, fenster, ueberlappung, Nff t, Fs) schlielich eignet sich zur Spektralanalyse nichtperiodischer Signale, deren Komponenten sich also in Amplitude oder Frequenz uber der Zeit ndern (z.B. Sprachsignale). Optional knnen a o Fensterung (standardmig hamming) und Uberlappungsbereich der DFT-Sequenzen a (standardmig Nff t/2) gendert werden. Die folgenden Zeilen erzeugen und analysiea a ren ein nichtperiodisches Signal. Abb. 6.11 (siehe vorherige Seite) zeigt das Resultat.
t = 0.01:0.01:25; x = 5 + 8 * sin (2*pi*(8+t).*t) + ... t .* cos (2*pi* 33 *t); spectrogram (x, 125, [], 125, 100) % Zeitvektor (F = 100 Hz) % Datenvektor frequenzvariabler Anteil % amplitudenvariabler Anteil % Spektralanalyse mit spectrogram

Spektralanalyse fft (x) db2mag (xdb), mag2db (abs (x)) db2pow (xdb), pow2db (x) pwelch (x, fenst, ueb, Nff t, Fs) cpsd (x, y , fenst, ueb, Nff t, Fs) spectrogram (x, fenst, ueb, Nff t, Fs) sptool Diskrete Fouriertransformation Umrechnung Amplitude dB Umrechnung Leistung dB Autoleistungsdichtespektrum Kreuzleistungsdichtespektrum Analyse nichtperiodischer Signale Signal Processing Tool

6.3 Korrelation

211

6.3

Korrelation

Korrelationsfunktionen dienen der Analyse der Ahnlichkeit bzw. der Ubereinstimmung von Signalen. Korrelationsfunktionen sind sowohl f r zeitkontinuierliche als auch f r u u zeitdiskrete Signale deniert. Im Rahmen der Signalanalyse in Matlab liegen alle Signale in abgetasteter Form vor, so dass hier nur zeitdiskrete Korrelationsfunktionen betrachtet werden. Die Kreuzkorrelationsfunktion xy zweier Signale x(n) und y(n) im Zeitbereich ist deniert durch: xy (k) = 1 N
N 1

x(n + k) y(n)
n=0

(6.6)

Die Korrelationsfunktion kann auch mit nur einem Signal gebildet werden. Dadurch entsteht die Autokorrelationsfunktion xx . Die Autokorrelationsfunktion ist stets eine gerade Funktion, daher gilt xx (k) = xx (k). xx (k) = 1 N
N 1

x(n + k) x(n)
n=0

(6.7)

F r k = 0 erhlt man die Leistung P des Signals. u a xx (0) = 1 N


N 1 2

x(n)
n=0

= P

(6.8)

Zur exakten Berechnung der Korrelationsfunktionen wre es eigentlich notwendig, einen a unendlich langen Datensatz zu verwenden, d.h. N . Die in den Gleichungen (6.6) und (6.7) angegebenen Berechnungsvorschriften stellen also nur Nherungen dar, die a sich mit steigendem N immer mehr dem Idealfall annhern. Genauere Informationen a zur Korrelationsmesstechnik knnen [31] entnommen werden. o Die Kreuzkorrelationsfunktion zweier Signale x und y (Abtastwerte der zugehrigen o Zeitfunktionen) wird in Matlab durch den Befehl xcorr berechnet: cxy = xcorr (x, y, options) Wird options weggelassen, so wird die Korrelationsfunktion nicht auf die Signallnge N a bezogen, d.h. der Faktor 1/N in Gleichung (6.6) entfllt. Wird die Option biased ana gegeben, erhlt man die Kreuzkorrelationsfunktion gem Gleichung (6.6). Die Option a a coeff skaliert das Ergebnis so, dass xy (0) = 1 gilt. Schlielich normiert unbiased das Ergebnis nicht auf die Signallnge N sondern auf den (vernderlichen) Uberlapa a pungsbereich N |k|; dies empehlt sich f r eine quantitative Analyse der Amplitude u korrelierender Signalanteile aber nur solange |k| N gilt. Die Autokorrelationsfunktion xx kann durch Angabe nur eines Signalvektors bestimmt werden. cxx = xcorr (x, options) xcorr liefert einen Vektor der Lnge 2N 1. Bei einer Datensatzlnge von N sind nur a a Verschiebungen im Bereich N + 1 k N 1 sinnvoll. Bei Verschiebungen auerhalb

212

6 Signalverarbeitung Signal Processing Toolbox

dieses Bereichs sind die Korrelationsfunktionen null. Innerhalb der Vektoren cxx bzw. cxy sind die Elemente der Korrelationsfunktionen wie folgt angeordnet: xx (N + 1) = cxx(1) xx (N + 2) = cxx(2) . . . . . . xx (0) = cxx(N ) xx (1) = cxx(N + 1) . . . . . . xx (N 1) = cxx(2N 1)

Korrelation xcorr (x, options) xcorr (x, y, options) Autokorrelation Kreuzkorrelation

Beispiel zur Autokorrelation


Als Beispiel f r die Anwendung der Autokorrelationsfunktion wird eine einfache Uberu tragungsstrecke betrachtet. Das Nutzsignal (z.B. Sprache, Messwerte) wird durch abgeschwchte Echos gestrt. Mithilfe der Autokorrelationsfunktion sollen die Laufzeiten a o der Echos bestimmt werden. Zunchst wird das Nutzsignal als Zufallsfolge uber einen Zeitraum von 0.5 s mit der Aba tastfrequenz Fs erzeugt. Anschlieend werden zwei Echosignale aus dem urspr nglichen u Signal durch Zeitverzgerung um 30 ms bzw. 100 ms und durch Dmpfung generiert. Das o a Gesamtsignal wird schlielich der Autokorrelation unterzogen.
Fs Ts t N signal = = = = = 44.1e3; 1/Fs; 0:Ts:0.5; length (t); randn (1, N); % % % % % Abtastfrequenz [Hz] Abtastzeit Zeitvektor Lnge des Datensatzes a Nutzsignal als Zufallszahlen erzeugen

echo1 = zeros (1, N); delay1 = 30e-3; delayIndex1 = round (delay1 / Ts); echo1 (delayIndex1+1:end) = 0.5 * signal echo2 = zeros (1, N); delay2 = 100e-3; delayIndex2 = round (delay2 / Ts); echo2 (delayIndex2+1:end) = 0.1 * signal compound = signal + echo1 + echo2; cxx = xcorr (compound, unbiased);

% Verzgertes und abgeschwchtes Echo 1 o a % Verzgerung Echo 1 [s] o % Index-Verschiebung Echo 1 (1:end-delayIndex1); % Verzgertes und abgeschwchtes Echo 2 o a % Verzgerung Echo 2 [s] o % Index-Verschiebung Echo 2 (1:end-delayIndex2); % zusammengesetztes Signal % Autokorrelation

6.3 Korrelation

213

Die gesuchte Laufzeit der Echosignale kann direkt an der Zeitachse der Autokorrelationsfunktion in Abb. 6.14 abgelesen werden. Bei der graschen Darstellung mit den folgenden Befehlen werden nur die Daten auf der positiven Zeitachse geplottet:
plot (t, cxx (N:2*N-1)) title (Autokorrelation (unbiased)) xlabel (Verschiebung [s])
Signal im Zeitbereich (Ausschnitt) 3 2 1 0 1 2 3 0 1 2 Zeit [s] 3 4 x 10 5
3

% Nur positive Zeitachse plotten

Autokorrelation (unbiased) 1.2 1 0.8 0.6 0.4 0.2 0 0.2 0 0.05 0.1 Verschiebung [s] 0.15

Abb. 6.14: Autokorrelationsfunktion zur Bestimmung der Echolaufzeit

Beispiel zur Kreuzkorrelation


Als Beispiel f r die Anwendung der Kreuzkorrelation soll nun mithilfe von vier Sendern u im Raum die Position eines Empfngers bestimmt werden; die Position der Sender sei a bekannt. Die Sender strahlen verschiedene, dem Empfnger bekannte zyklische Signala folgen bestehend aus 1 und +1 aus. Der Empfnger empfngt alle vier zeitverzgerten a a o Signale und zustzliches Rauschen. Mithilfe von vier Kreuzkorrelationsfunktionen sollen a die Laufzeiten (d.h. Abstnde zu den Sendern) bestimmt werden. a Zunchst werden die spezischen Signalfolgen der Sender erzeugt. Entsprechend der a Laufzeiten werden diese Signalfolgen dann verzgert. Zu dem entstehenden Summeno signal wird noch Rauschen hinzugef gt. Zur Bestimmung der Signallaufzeiten werden u die Kreuzkorrelationsfunktionen jeweils zwischen der gesendeten Signalfolge und dem empfangenen Signal gebildet. Daraus kann direkt die Laufzeit vom jeweiligen Sender abgelesen werden (Abb. 6.15). Durch die Option biased verringert sich die Amplitude der Korrelationssignale mit zunehmender Laufzeit entsprechend des reduzierten Uberlappungsbereichs. Die Matlab-Befehle zur Extraktion der Signallaufzeiten und zur graschen Darstellung gem Abb. 6.15 sind im Folgenden aufgefhrt. a u
Fs Ts t N = = = = 10e3; 1/Fs; 0:Ts:0.5; length (t); % % % % Abtastfrequenz Abtastzeit Zeitvektor Lnge des Datensatzes a

214
seq1 seq2 seq3 seq4 delay1 delay2 delay3 delay4 = = = = = = = = sign sign sign sign (randn (randn (randn (randn (1, (1, (1, (1, N)); N)); N)); N));

6 Signalverarbeitung Signal Processing Toolbox


% % % % % % % % (delay1 (delay2 (delay3 (delay4 / / / / Ts); Ts); Ts); Ts); % % % % Zufallsfolge Zufallsfolge Zufallsfolge Zufallsfolge Laufzeit Laufzeit Laufzeit Laufzeit von von von von Sender Sender Sender Sender Sender Sender Sender Sender 1 2 3 4 1 2 3 4 1 2 3 4

100e-3; 200e-3; 150e-3; 400e-3; = = = = = = = = round round round round

delayIndex1 delayIndex2 delayIndex3 delayIndex4 delayedSeq1 delayedSeq2 delayedSeq3 delayedSeq4

Index-Verschiebung Index-Verschiebung Index-Verschiebung Index-Verschiebung

[seq1(end-delayIndex1+1:end) [seq2(end-delayIndex2+1:end) [seq3(end-delayIndex3+1:end) [seq4(end-delayIndex4+1:end)

seq1(1:end-delayIndex1)]; seq2(1:end-delayIndex2)]; seq3(1:end-delayIndex3)]; seq4(1:end-delayIndex4)]; % Rauschen % Summensignal % % % % Kreuzkorrelation Kreuzkorrelation Kreuzkorrelation Kreuzkorrelation Sender Sender Sender Sender 1 2 3 4

noise = randn (1, N); compound = delayedSeq1 + delayedSeq2 + ... delayedSeq3 + delayedSeq4 + noise; cxy1 cxy2 cxy3 cxy4 = = = = xcorr xcorr xcorr xcorr (compound, (compound, (compound, (compound, seq1, seq2, seq3, seq4, biased); biased); biased); biased);

N_min = (length (cxy1) - 1) / 2 + 1; N_max = length (cxy1);

% Min Index fr Plot u % Max Index fr Plot u

plot (t, cxy1 (N_min:N_max), ... t, cxy2 (N_min:N_max), ... t, cxy3 (N_min:N_max), ... t, cxy4 (N_min:N_max)) legend (S1, 100 ms, S2, 200 ms, S3, 150 ms, S4, 400 ms) xlabel (Laufzeit [s]) title (Kreuzkorrelation (biased))

Kreuzkorrelation (biased) 1 S1, 100 ms S2, 200 ms S3, 150 ms S4, 400 ms

0.5

0 0 0.05 0.1 0.15 0.2 0.25 Laufzeit [s] 0.3 0.35 0.4 0.45 0.5

Abb. 6.15: Kreuzkorrelationsfunktionen zur Laufzeitbestimmung

6.4 Analoge und Digitale Filter

215

6.4

Analoge und Digitale Filter

Filter dienen dazu, bestimmte Frequenzbereiche aus Daten hervorzuheben oder zu dmpfen, um z.B. ein Nutzsignal vom Rauschen zu trennen. Soweit nicht anders angea geben, wird im Folgenden unter der Grenzfrequenz (oder auch Eckfrequenz) diejenige Frequenz verstanden, bei der der Amplitudengang des Filters gegen ber dem Durchu lassbereich um 3 dB abfllt; dies entspricht einer Reduzierung der Amplitude um Faka tor 2 bzw. einer Halbierung der Ausgangsleistung.

6.4.1

Analoge Filter

Analoge Filter werden zur Auslegung oder Simulation physikalischer Systeme bentigt; o eine Anwendung auf abgetastete Daten ist nur mithilfe von Integrationsalgorithmen mglich, wie z.B. in Simulink. Die Ubertragungsfunktion7) eines analogen Filters im o Laplace-Bereich lautet allgemein f r die Eingangsgre x und die Ausgangsgre y wie u o o folgt. Die Zhlerterme mit b1 ... bn haben dabei dierenzierenden, die Nennerterme mit a a1 ... am integrierenden Charakter. H(s) = B(s) b1 sn + b2 sn1 + . . . + bn s + bn+1 y(s) = = x(s) A(s) a1 sm + a2 sm1 + . . . + am s + am+1 (6.9)

Konkurrierende Kriterien f r die Auslegung sind neben der gew nschten Flankensteilu u heit die Welligkeit im Durchlass- und die Dmpfung im Sperrbereich. Daher werden a verschiedene Filtertypen unterschieden, die jeweils auf bestimmte Kriterien hin optimiert sind. Die folgenden Standardlter stehen als Matlab-Befehle zur Verf gung.8) u besself (ordnung, butter (ordnung, cheby1 (ordnung, cheby2 (ordnung, ellip (ordnung, omega) omega, s) welligkeit, omega, s) welligkeit, omega, s) welligkeit, daempfung, omega, s)

Bei cheby1 wird die Welligkeit im Durchlassbereich angegeben, bei cheby2 die Dmpa fung im Sperrbereich. Bei ellip (auch Cauer -Filter) wird beides speziziert. Welligkeit und Dmpfung werden jeweils in dB angegeben.9) a
[B, A] = butter (4, 1000*2*pi, s); % Butterworth-Tiefpass 4. Ord., Fg = 1 kHz

Die Grenzfrequenz omega wird in rad/s angegeben und kann einen beliebigen positiven Wert annehmen. Ein mit butter ausgelegtes Filter hat bei der Grenzfrequenz eine Dmpfung von 3 dB. Bei besself ist sie grer, kann aber mit einem Korrektura o faktor10) angepasst werden. Bei cheby1 und ellip entspricht die Dmpfung dann der a Welligkeit, bei cheby2 der Dmpfung im Sperrbereich (siehe auch Abb. 6.16). a
Die Indizes beginnen hier nach Matlab-Konvention bei 1, nicht bei 0! Die Option s dient zur Unterscheidung von digitalen Filtern; besself ist nur analog verfgbar. u 9) Eine Dmpfung von 20 dB entspricht 1/10 der ungelterten Signalamplitude. a 10) Korrekturfaktor f r die Grenzfrequenz bei der Auslegung von Bessel-Tiefpssen 1. bis 12. Ordnung: u a 1.000, 1.272, 1.405, 1.514, 1.622, 1.728, 1.832, 1.932, 2.028, 2.120, 2.209, 2.295.
8) 7)

216

6 Signalverarbeitung Signal Processing Toolbox

Abb. 6.16 zeigt die Ubertragungsfunktion einiger analoger Tiefpsse mit der Grenza frequenz 1 kHz jeweils f r die Ordnung 2, 4 und 8. Der Frequenzgang H wird mit u freqs (zaehler, nenner) bestimmt. Der ebenfalls zur ckgegebene Frequenzvektor W u besitzt dabei die Einheit rad/s; alternativ kann er mit freqs (zaehler, nenner, W ) explizit vorgegeben werden. Ohne R ckgabeparameter plottet freqs Betrag und Phase u der Ubertragungsfunktion.
[H, W] = freqs (B, A); loglog (W/(2*pi), abs (H));
Bessel (korrigiert) Amplitude [dB] 0 20 40 0 20 40 Butterworth 0 20 40

% Frequenzgang und Frequenzvektor berechnen % Frequenzgang ausgeben


Tschebyscheff Typ 1 0 20 40 Elliptisch (Cauer)

0.1

1 10 Frequenz [kHz]

0.1

1 10 Frequenz [kHz]

0.1

1 10 Frequenz [kHz]

0.1

1 10 Frequenz [kHz]

Abb. 6.16: Ubertragungsfunktion einiger analoger Filter der Ordnung 2, 4 und 8

Um einen Hochpass zu erzielen, wird an die Befehle die Option high angehngt. a Enthlt die Variable omega zwei Frequenzen, wird ein Bandpass erstellt bzw. nach a zustzlichem Anf gen der Option stop eine Bandsperre. a u Die Parameter des Filters knnen wahlweise als Zhler und Nenner der Ubertragungso a funktion, als Nullstellen und Pole sowie in Zustandsdarstellung (jeweils im s-Bereich) ausgegeben werden. Die Unterscheidung erfolgt uber die Anzahl der zur ckzugebenden u Parameter. Das folgende Beispiel erzeugt zunchst einen Tschebysche-Hochpass 6. Ordnung mit a 3 dB Welligkeit oberhalb von 1 kHz; es werden die Nullstellen z, die Pole p und der Verstrkungsfaktor k ausgegeben. Die zweite Zeile erstellt ein elliptisches Filter (Cauer) a als Bandsperre zwischen 100 Hz und 200 Hz, das zustzlich eine Dmpfung von 20 dB a a im Sperrbereich besitzt; das Filter wird in Zustandsdarstellung berechnet.
[z, p, k] = cheby1 (6, 3, 1000*2*pi, high, s); [a, b, c, d] = ellip (6, 3, 20, [100 200]*2*pi, stop, s); % Hochpass % Bandsperre

Analoge Filter besself (ordnung, omega) butter (ordnung, omega, s) cheby1 (ordnung, welligkeit, omega, s) cheby2 (ordnung, welligkeit, omega, s) ellip (ordnung, welligkeit, daempf, omega, s) [H, W ] = freqs (zaehler, nenner [, W ]) Bessel-Filter (nur analog) Butterworth-Filter Tschebysche-Filter Typ 1 Tschebysche-Filter Typ 2 Elliptisches Filter (Cauer) Frequenzgang analog

6.4 Analoge und Digitale Filter

217

6.4.2

Digitale FIR-Filter

Die Ubertragungsfunktion eines digitalen Filters im z-Bereich lautet allgemein f r die u Eingangsgre x und die Ausgangsgre y: o o H(z 1 ) = B(z 1 ) b1 + b2 z 1 + . . . + bn+1 z n y(z 1 ) = = x(z 1 ) A(z 1 ) a1 + a2 z 1 + . . . + am+1 z m (6.10)

Der Ausgangswert y(k) wird demnach als gewichtete Summe aktueller und vergangener Eingangswerte (Zhler B) sowie vergangener Ausgangswerte (Nenner A) berechnet: a a1 y(k) = b1 x(k) + b2 x(k1) + . . . + bn+1 x(kn) a2 y(k1) . . . am+1 y(km) Bei digitalen Filtern unterscheidet man IIR-Filter11) und FIR-Filter.12) Bei FIR-Filtern sind die Koezienten a2 , . . . , am+1 = 0, da der Ausgangswert nur aus den Eingangswerten berechnet wird, es entfllt also die zweite Zeile von (6.11). a FIR-Filter besitzen eine endliche Impulsantwort und sind daher stets (im regelungstechnischen Sinn) stabil. Sie bewirken eine lineare Phasenverschiebung des Eingangssignals (mittlere Totzeit Tt = nTs /2 bei Abtastzeit Ts ). Nachteilig ist die im Vergleich zu IIR-Filtern hhere bentigte Ordnung (d.h. groe Anzahl an Koezienten). o o Ein FIR-Tiefpasslter wird mit dem Befehl fir1 (ordnung, grenzfrequenz) ausgelegt, der einen Koezienten-Vektor der Lnge n+ 1 zur ckgibt (siehe Abb. 6.17 links, ). a u Die normierte Grenzfrequenz muss im Bereich 0 . . . 1 liegen, wobei der Wert 1 der halben Abtastfrequenz entspricht. Hochpass, Bandpass und Bandsperre werden wie bei analogen Filtern erstellt.
fir1 fir1 fir1 fir1 (20, (20, (20, (20, 0.2); 0.2, high); [0.2 0.4]); [0.2 0.4], stop); % % % % Tiefpass, Durchlassbereich Hochpass, Durchlassbereich Bandpass, Durchlassbereich Bandsperre, Sperrbereich < 0.2 F_max > 0.2 F_max 0.2 ... 0.4 F_max 0.2 ... 0.4 F_max

(6.11)

Die Filter-Ubertragungsfunktion kann mit freqz (zaehler, nenner, N, Fs) berechnet werden; der Befehl wertet Gleichung (6.10) f r z k = exp(jkTs ) aus. Das Argument u N bestimmt die Auflsung; die Abtastfrequenz Fs wird in Hz angegeben. Der nenner o ist in diesem Fall skalar a1 = 1. Bei der Auslegung des Filters (hier mit Rechteckfenster) ist zu beachten, dass die Lnge der Fensterfunktion stets n+1 betrgt. a a
B = fir1 (20, 0.2, rectwin (20+1)); % FIR-Tiefpass mit Rechteckfenster [H, F] = freqz (B, 1, 200, 100); % bertragungsfunktion und Frequenzvektor U plot (F, abs (H)) % Plotten

Abb. 6.17 zeigt die Koezienten (links) und die Ubertragungsfunktion (rechts) eines FIR-Filters der Ordnung n = 20, der Abtastfrequenz Fs = 100 Hz und der Grenzfrequenz Fg = Fs /2 0.2 = 10 Hz. Es sind die Ergebnisse ohne Fensterfunktion (d.h. mit Rechteckfenster rectwin) und mit Hamming-Fenster dargestellt.
11) 12)

Innite Impulse Response Finite Impulse Response

218

6 Signalverarbeitung Signal Processing Toolbox

Bei der Filter-Ubertragungsfunktion ohne Fensterung (rechts, ) fllt dabei die deuta liche Welligkeit in der Nhe der Grenzfrequenz auf, das so genannte Gibbssche Phnoa a men.13) Dieser Eekt kann durch verschiedene Fensterfunktionen verringert werden, die das Zeitsignal skalieren. Die Funktion fir1 verwendet standardmig ein Hamminga Fenster (siehe auch Kap. 6.2).
FilterKoeffizienten 0.3 0.2 0.1 0 0.1 10 FIR FIR + Hamming Amplitude Filterbertragungsfunktion FIR FIR + Hamming

Amplitude

0.5

5 0 5 Nummer der Koeffizienten

10

10

20 30 Frequenz [Hz]

40

50

Abb. 6.17: Koezienten und Ubertragungsfunktion eines FIR-Filters ohne Fensterfunktion (= Rechteckfenster) und mit Hamming-Fenster (Standard)

In Abb. 6.18 () wird ein FIR-Filter (Tiefpass mit Fg = 20 Hz und Hamming-Fenster) auf die Daten aus Abb. 6.6 angewandt. Dies geschieht mit dem Befehl filter (zaehler, nenner, daten). Zu Beginn ist dabei das Einschwingen des Filters zu erkennen, ebenso die deutliche Verzgerung des Signals um fast eine Periode (Tt = 20 0.01 s/2 = 0.1 s). o
x_fir = filter (B, 1, x);

Die genannte Verzgerung bzw. Phasenverschiebung kann mit dem Befehl filtfilt o vermieden werden (siehe Abb. 6.18, ). Dabei wird das FIR-Filter zunchst wie gea wohnt und danach zustzlich r ckwrts auf die Daten angewandt. Durch diese doppelte a u a Filterung erhht sich nat rlich auch die eektive Ordnung des Filters. o u Ein Filter mit frei vorgegebenem Frequenzgang erstellt der Befehl fir2 (ordnung, frequenzvektor, amplitudenvektor). Der Frequenzvektor enthlt normierte Frequena zen in aufsteigender Folge und muss mit 0 beginnen und mit 1 enden (= Fs /2); doppelte Werte sind mglich. Zu jeder Frequenz gibt ein zweiter Vektor die zugehrigen o o Amplituden vor. Abb. 6.19 zeigt im Vergleich den vorgegebenen Sollverlauf und die mit fir2 approximierte Ubertragungsfunktion. Wie bei fir1 kann optional ein Fenster speziziert werden (Standard ist ein Hamming-Fenster).
frequenz = [0.0 0.3 0.3 0.6 1.0]; amplitude = [1.0 1.0 0.5 0.5 0.0]; B = fir2 (50, frequenz, amplitude); % Normierte Frequenzen % Amplituden % FIR-Filter mit Ordnung 50

13) Ein begrenztes Zeitsignal entsteht durch die Multiplikation eines beliebig langen Signals mit einem Rechteckfenster. Die Fouriertransformierte dieses Fensters, die Spaltfunktion, tritt daher in der Filter Ubertragungsfunktion auf.

6.4 Analoge und Digitale Filter


Diskrete Filterung mit FIR 20. Ordnung 30 ungefiltert FIR filter FIR filtfilt

219
FIRFilterdesign mit fir2 FIR2 Sollverlauf

1 Amplitude 0.8 0.6 0.4 0.2

20 Amplitude

10

10

0.1

0.2 0.3 Zeit [s]

0.4

0.5

10

20 30 Frequenz [Hz]

40

50

Abb. 6.18: Ungeltertes sowie mit FIR-Filter 20. Ordnung geltertes Signal

Abb. 6.19: Ubertragungsfunktion mit fir2 sowie vorgegebener Sollverlauf

FIR-Filter fir1 (ordnung, grenzfrequenz) fir2 (ordnung, frequenz, amplitude) filter (zaehler, 1, daten) filtfilt (zaehler, 1, daten) [H, F ] = freqz (zaehler, 1, N, Fs) FIR-Standardlter FIR-Filter nach Ubertragungsfunktion Diskrete Filterung von Daten Diskrete Filterung, phasenkorrigiert Frequenzgang diskret

6.4.3

Digitale IIR-Filter

Im Gegensatz zu FIR-Filtern arbeiten IIR-Filter rekursiv, da zur Berechnung auch vergangene Ausgangswerte zur ckgef hrt werden. Dadurch wird die gleiche Flankenu u steilheit eines Filters bei deutlich niedrigerer Ordnung erreicht. Sie werden z.B. im Zusammenhang mit abgetasteten Systemen eingesetzt (siehe Kap. 10). IIR-Filter werden mit den gleichen Befehlen wie analoge Filter ausgelegt, wobei die Option s entfllt; ein Bessellter steht nicht zur Verf gung. Die Frequenzen werden wie a u bei FIR-Filtern auf die halbe Abtastfrequenz Fmax = Fs /2 normiert; die Erstellung von Hochpass-, Bandpassltern und Bandsperren erfolgt ebenso wie bei analogen Filtern. Die Filter knnen wahlweise als jeweils zeitdiskrete Ubertragungsfunktion, Pole und o Nullstellen oder Zustandsdarstellung ausgegeben werden. Hier folgen Beispiele einiger Filter 6. Ordnung:
[B, A] = butter (6, 0.6); % Tiefpass, Grenzfrequenz 0.6*Fs/2 [z, p, k] = cheby1 (6, 3, 0.6, high); % Hochpass, 3 dB Durchlass-Welligkeit [a, b, c, d] = ellip (6, 3, 20, [0.3 0.6], stop); % Bandsperre

Die Filter werden wieder mit den Befehlen filter (zaehler, nenner, daten) und analog filtfilt auf Daten angewandt (siehe Kap. 6.4.2). Als Beispiel sollen die folgenden Matlab-Befehlszeilen dienen. Die hohe Frequenz von 33 Hz wird durch ein

220

6 Signalverarbeitung Signal Processing Toolbox

Butterworth-Tiefpass 2. Ordnung mit einer Grenzfrequenz von 20 Hz unterdr ckt. Das u Beispiel zeigt, dass bei IIR-Filtern schon niedrige Filterordnungen zur Erzielung guter Ergebnisse ausreichen (Abb. 6.20).
t = 0.01:0.01:1; x = 5 + 8*sin(2*pi*8*t) + 4*cos(2*pi*33*t); [B, A] = butter (2, 20/50); x_filt = filter (B, A, x); x_filtfilt = filtfilt (B, A, x); % Zeitvektor Fs = 100 Hz % Beispiel-Signal % Auslegung IIR-Filter % Filtern mit filter % Filtern mit filtfilt

plot (t, x , k:) hold on plot (t, x_filt , r-) plot (t, x_filtfilt , b--) axis ([0 0.5 -10 30]) xlabel (Zeit [s]) title (Diskrete Filterung) legend (ungefiltert, IIR filter, IIR filtfilt, 1)

Der Befehl yulewalk (ordnung, frequenzvektor, amplitudenvektor) approximiert einen frei vorgegebenen Frequenzgang mittels Least-Squares-Verfahren. yulewalk lsst sich wie fir2 verwenden, gibt jedoch neben dem Zhler auch den Nenner der a a Ubertragungsfunktion zur ck. Der Frequenzvektor muss ebenfalls mit 0 beginnen und u mit 1 enden (= Fs /2); doppelte Werte sind mglich. Zu jeder Frequenz gibt der zweite o Vektor die Amplituden vor. Abb. 6.21 zeigt Sollverlauf und die mit yulewalk approxi mierte Ubertragungsfunktion.
frequenz = [0.0 0.3 0.3 0.6 1.0]; amplitude = [0.5 0.5 0.2 0.2 1.0]; [B, A] = yulewalk (4, frequenz, amplitude); [H, F] = freqz (B, A, 200, 100);
Diskrete Filterung mit IIR 2. Ordnung 30 ungefiltert IIR filter IIR filtfilt
Amplitude 1 0.8 0.6 0.4 0.2 YULEWALK Sollverlauf

% % % %

Normierte Frequenzen Amplituden IIR-Filter mit Ordnung 4 bertragungsfunktion Fs = 100 Hz U


IIRFilterdesign mit yulewalk

20 Amplitude

10

10

0.1

0.2 0.3 Zeit [s]

0.4

0.5

10

20 30 Frequenz [Hz]

40

50

Abb. 6.20: Ungeltertes sowie mit IIR-Filter 2. Ordnung geltertes Signal

Abb. 6.21: Soll- und Istverlauf der Ubertragungsfunktion mit yulewalk

6.4 Analoge und Digitale Filter

221

Neben den beschriebenen Befehlen zur Filterauslegung steht mit fdatool ein interaktives Filter Design and Analysis Tool zur Verf gung (siehe Abb. 6.22). Dieses kann auch u uber den Button New oder Edit im sptool aufgerufen werden. Filter bertragungsfunktionen lassen sich gut mit dem Filter Visualization Tool fvtool u (zaehler, nenner) darstellen und analysieren (siehe Abb. 6.23 mit der Darstellung der Sprungantwort). Das kann ebenso aus dem sptool heraus mit dem Button View der Filter-Spalte aufgerufen werden. Die Abtastfrequenz lsst sich im Men Anaa u lysis/Sampling Frequency und die Achsenskalierung unter dem Men punkt Analyu sis/Analysis Parameters einstellen.

Abb. 6.22: fdatool: Filter Design and Analysis Tool

Abb. 6.23: fvtool

IIR-Filter butter (ordnung, grenzfrequenz) Butterworth-Filter cheby1 (ordnung, welligkeit, grenzfrequenz) Tschebysche-Filter Typ 1 cheby2 (ordnung, welligkeit, grenzfrequenz) Tschebysche-Filter Typ 2 ellip (ordnung, welligkeit, daempf, grenzfreq) Elliptisches Filter (Cauer) yulewalk (ordnung, frequenz, amplitude) Beliebige Ubertragungsfunktion filter (zaehler, nenner, daten) filtfilt (zaehler, nenner, daten) [H, F ] = freqz (zaehler, nenner, N, Fs) sptool fdatool fvtool (zaehler, nenner) Diskrete Filterung (Daten) Diskr. Filt., phasenkorrigiert Frequenzgang diskret Signal Processing Tool Filter Design and Analysis Tool Filter Visualization Tool

222

6 Signalverarbeitung Signal Processing Toolbox

6.4.4

Filterentwurf mit Prototyp-Tiefpassen

Die beschriebenen Standardbefehle f r analoge und digitale IIR-Filter basieren auf anau logen Prototyp-Tiefpssen, deren Grenzfrequenz und Charakteristik entsprechend transa formiert werden. Mithilfe der im Folgenden beschriebenen Transformationen lassen sich zudem auch benutzerdenierte Filter (z.B. mit aperiodischem Einschwingen) elegant erstellen. Entsprechend der Standardbefehle stehen die folgenden Prototyp-Tiefpsse mit der nora mierten Grenzfrequenz 1 rad/s zur Verf gung, die jeweils Nullstellen z, Polstellen p und u Verstrkung k ausgeben. a [z, [z, [z, [z, [z, p, p, p, p, p, k] k] k] k] k] = = = = = besselap (ordnung) buttap (ordnung) cheb1ap (ordnung, welligkeit) cheb2ap (ordnung, welligkeit) ellipap (ordnung, welligkeit, daempf ung)

Zur weiteren Verarbeitung wird die Zustandsdarstellung (state space) der Filter bentigt. Die Umrechnung erfolgt mit dem Befehl zp2ss. o Um die gew nschte Filtercharakteristik zu erhalten, m ssen nun die Prototypen f r die u u u entsprechende Grenzfrequenz skaliert und gegebenenfalls in einen anderen Filter-Typ (z.B. Hochpass) transformiert werden. Beides erledigen die folgenden vier Befehle. [a, [a, [a, [a, b, b, b, b, c, c, c, c, d] d] d] d] = = = = lp2lp lp2hp lp2bp lp2bs (a, (a, (a, (a, b, b, b, b, c, c, c, c, d, d, d, d, omega) omega) omega, bandbreite) omega, bandbreite)

Die Frequenz omega (in rad/s) ist bei Tief- und Hochpass die Grenzfrequenz, bei Bandpass und -sperre die Mittenfrequenz, welche durch das geometrische Mittel omega = omega1 omega2 aus den beiden Grenzfrequenzen omega1 und omega2 bestimmt wird. Die Bandbreite ist die Dierenz beider Grenzfrequenzen. Abschlieend muss die Zustandsdarstellung des Filters noch mit ss2tf in eine Ubertragungsfunktion (transfer function) umgerechnet werden. Der Entwurf eines ButterworthBandpasses 4. Ordnung mit einem Durchlassbereich von 40...80 Hz sieht damit folgendermaen aus:
omega = [40 80] * 2 * pi; % Grenzfrequenzen [z, p, k] = buttap (4); % Prototyp-Tiefpass 4. Ordnung [a, b, c, d] = zp2ss (z, p, k); % Umrechnung in Zustandsform [a, b, c, d] = lp2bp (a, b, c, d, sqrt(prod(omega)), diff(omega)); % Bandpass [B, A] = ss2tf (a, b, c, d); % Analoges Filter

Wie bei der Standardfunktion besself gilt auch f r besselap, dass die Dmpfung bei u a der Grenzfrequenz grer als 3 dB ist. Soll dies korrigiert werden, muss die Frequenz des o Prototyp-Tiefpasses erhht werden (siehe Funote zu Korrekturfaktoren auf Seite 215). o Ebenso ist eine Korrektur bei Filtern mit aperiodischem Einschwingen erforderlich. Im folgenden Beispiel wird ein Tiefpass 4. Ordnung mit aperiodischem Einschwingverhalten f r eine Grenzfrequenz von 100 Hz ausgelegt. Der zugehrige Prototyp-Tiefpass u o

6.4 Analoge und Digitale Filter wird dabei durch direkte Vorgabe der Pole erstellt:
ordnung = 4; z = []; p = -ones (ordnung, 1); k = 1; % % % % Ordnung des Filters Keine Nullstellen Polstellen bei s=-1 entsprechend der Filterordnung Verstrkung 1 a

223

Bei dieser Art Filter lautet der Korrekturfaktor 1/ 21/ordnung 1. Abb. 6.24 zeigt Ubertragungsfunktion und Sprungantwort des Filters.
omega = 100 * 2 * pi; korrektur = 1 / sqrt (2 ^(1 / ordnung) -1); [a, b, c, d] = zp2ss (z, p, k); [a, b, c, d] = lp2lp (a, b, c, d, korrektur); [a, b, c, d] = lp2lp (a, b, c, d, omega); [B, A] = ss2tf (a, b, c, d); % % % % % % Grenzfrequenz 100 Hz Korrekturfaktor > 1 Umrechnung in Zustandsform Korrektur Transformation bertragungsfunktion U

bertragungsfunktion 0 Amplitude [dB] 1 0.8 20 Amplitude 0.6 0.4 0.2 0

Sprungantwort

40 bertragungsfunktion 3 dB 10 100 Frequenz [Hz] 1000

10 Zeit [ms]

15

20

Abb. 6.24: Ubertragungsfunktion mit 3 dB-Linie sowie Sprungantwort eines 100 Hz-Tiefpasses 4. Ordnung mit aperiodischem Einschwingverhalten

Um aus analogen digitale Filter zu erstellen, m ssen entsprechende analoge Protou typen erzeugt und anschlieend in eine zeitdiskrete Form transformiert werden. Dies geschieht meist mit der Bilinearen Transformation (auch Tustin-Approximation). Diese f hrt den s-Bereich (Laplace) abhngig von der Abtastfrequenz Fs mit der folu a genden Rechenvorschrift in den z-Bereich uber. s = 2 Fs z1 z+1 (6.12)

Dabei muss allerdings der Frequenzbereich < omega < in analoger Darstellung auf den durch die Abtastfrequenz begrenzten Bereich Fs /2 < F < Fs /2 abgebildet werden. Diese Abbildung ist nur f r die Frequenz 0 (d.h. s = 0 bzw. z = 1) exakt; u alle anderen Frequenzen sind verzerrt. Bei Filtern soll jedoch das Ubertragungsver o halten im Bereich der Grenzfrequenz Fg mglichst genau nachgebildet werden. Um dies

224

6 Signalverarbeitung Signal Processing Toolbox

zu erreichen, muss die Grenzfrequenz f r die Auslegung des analogen Filters mit so u genanntem Pre-warping entgegengesetzt verzerrt werden. u Uber den Zusammenhang g = 2Fg kann die Formel auch f r Frequenzen in rad/s angewandt werden (siehe auch nachstehendes Beispiel zum manuellen Pre-warping): Fg, pre-warped = Fg Fs tan Fg Fg Fs (6.13)

Der Befehl bilinear (a, b, c, d, Fs [, Fp ]) f hrt die Bilineare Transformation durch. u Wird die optionale Frequenz Fp (meist = Fg ) vorgegeben, wendet er zudem das Pre warping an, so dass eine exakte Ubereinstimmung bei Fp vorliegt. Beide Frequenzen werden in Hz angegeben. F r das obige Filter mit aperiodischem Einschwingen lautet u der Aufruf demnach wie folgt (Abb. 6.25 zeigt links das Resultat):
[e, f, g, h] = bilinear (a, b, c, d, Fs, 100); [Bp, Ap] = ss2tf (e, f, g, h); % Fs = 300 Hz, Fp = Fg = 100 Hz % bertragungsfunktion U

Die folgenden Zeilen greifen das Beispiel von Seite 222 auf. Da zwei Grenzfrequenzen vorliegen, muss hier das Pre-warping manuell auf beide angewandt werden. Anschlieend wird der Prototyp-Tiefpass wie gehabt erstellt und dann mit bilinear (ohne Fp ) transformiert. Abtastfrequenz ist 200 Hz. Abb. 6.25 zeigt rechts den Frequenzgang sowie zum Vergleich den des analogen Filters und des digitalen Filters ohne Pre-warping.
Fs = 200; % Abtastfrequenz 200 Hz omega = [40 80] * 2 * pi; % Grenzfrequenz omega = 2 * Fs * tan (omega / Fs / 2); % Grenzfrequenz mit Pre-warping [z, p, k] = buttap (4); % Prototyp-Tiefpass [a, b, c, d] = zp2ss (z, p, k); % Umrechnung in Zustandsform [a, b, c, d] = lp2bp (a, b, c, d, sqrt(prod(omega)), diff(omega)); % Bandpass [e, f, g, h] = bilinear (a, b, c, d, Fs); % Dig. Filter mit Pre-warping [Bp, Ap] = ss2tf (e, f, g, h); % bertragungsfunktion U

Als alternative Transformationsvorschrift versucht der Befehl impinvar (zaehler, nenner, Fs), die Impulsantwort eines analogen Filters mglichst genau mit einem dio gitalen Filter nachzubilden. Gegen ber der Bilinearen Transformation ist allerdings die u Amplitude im Durchlassbereich verflscht sowie die Dmpfung im Sperrbereich deutlich a a reduziert. Praktisch eignet sich impinvar nur f r Tiefpsse niedriger Ordnung. u a Analoge Prototyp-Tiefpsse a besselap (ordnung) buttap (ordnung) cheb1ap (ordnung, welligkeit) cheb2ap (ordnung, welligkeit) ellipap (ordnung, welligkeit, daempf ) Filterdarstellung zp2ss ss2tf Zustandsdarstellung Ubertragungsfunktion Filter-Transformationen lp2lp lp2hp lp2bp lp2bs Tiefpass Tiefpass Tiefpass Tiefpass Tiefpass Hochpass Bandpass Bandsperre

Diskretisierung bilinear Bilineare Transformation impinvar Impulsinvarianz

6.5 Ubungsaufgaben
Prewarping mit "bilinear" Prewarping manuell

225

1 Amplitude Amplitude 150 0.8 0.6 0.4 0.2 0 0 Analog Digital ohne P. mit Prewarping 3 dB 50 100 Frequenz [Hz]

1 0.8 0.6 0.4 0.2 0 0 20 40 60 Frequenz [Hz] 80 100

Abb. 6.25: Digitale Filter ohne und mit Pre-warping im Vergleich zum analogen Filter. Aperiodischer Tiefpass (links) und Butterworth-Bandpass (rechts)

6.5
6.5.1

Ubungsaufgaben
Signaltransformation im Frequenzbereich

Transformieren Sie ein Rechtecksignal im Frequenzbereich in ein Dreiecksignal! Erzeugen Sie dazu mit der Funktion square (zeit vektor) eine Periode des Rechtecksignals (Frequenz 20 Hz, Abtastzeit Ts = 1 ms, siehe Abb. 6.26 links )! Wenden Sie die DFT auf dieses Signal an! Skalieren Sie anschlieend die Fourierkoezienten, so dass Gleichung (6.14) in Gleichung (6.15) ubergeht (siehe Abb. 6.26 rechts) und wenden Sie die inverse DFT ifft (x) auf die skalierten Koezienten an! Kontrollieren Sie Ihr Ergebnis im Zeitbereich! hRechteck (t) = hDreieck (t) = sin(3t) sin(5t) sin(7t) sin(t) + + + + 1 3 5 7 sin(t) sin(3t) sin(5t) sin(7t) + 2 2 2 1 3 5 72 (6.14) (6.15)

6.5.2

Signalanalyse und digitale Filterung

Ein vorgegebenes Signal soll analysiert und der relevante Anteil herausgeltert werden. Sie nden die Datei ueb signal.dat (ASCII) bzw. ueb signal.mat (Matlab-Format) mit dem Datensatz auf der beigelegten CD-ROM. Laden Sie den Datensatz! Analysieren Sie das Spektrum des Signals und legen Sie ein FIR-Filter so aus, dass nur die beiden niedrigsten Frequenzanteile passieren knnen, o die hheren jedoch gedmpft werden! Eliminieren Sie auerdem den Gleichanteil des o a Signals!

226

6 Signalverarbeitung Signal Processing Toolbox


Fourierkoeffizienten bk 1.5 Rechteck Dreieck Rechteck Dreieck

Zeitsignale 1 0 1 0 0.01 0.02 0.03 Zeit [s] 0.04 0.05

1 0.5 0 0 100 200 300 Frequenz [Hz]

400

500

Abb. 6.26: Rechteck- und Dreiecksignal (links) und zugehrige Fourierkoezienten bk (rechts) o

6.5.3

Analoger Bandpass

Bestimmen Sie die Ubertragungsfunktion eines mehrfachen Bandpasses im LaplaceBereich! Die Grenzfrequenzen des Filters seien 10, 20, 70 und 100 Hz (siehe idealisierte Ubertragungsfunktion in Abb. 6.27 ). Uberlagern Sie dazu zwei Butterworth-Filter 8. Ordnung!
GesamtFilter 1 Ideal 8. Ord.

0.5

50 Frequenz [Hz]

100

150

Abb. 6.27: Idealisierte Filter Ubertragungsfunktion ( ) und Verlauf bei Teilltern 8. Ordnung ()

6.5.4

Digitaler IIR-Bandpass

Bestimmen Sie die zeitdiskrete Ubertragungsfunktion des Bandpasses aus Aufgabe 6.5.3! Die Abtastfrequenz sei 300 Hz. Erstellen Sie das Filter alternativ unter Verwendung von Prototyp-Tiefpssen! Nhern a a Sie die ideale Ubertragungsfunktion in Abb. 6.27 auch mittels des Befehls yulewalk an und vergleichen Sie die Ubertragungsfunktion mit den vorigen Ergebnissen! Warum kann die Ubertragungsfunktion aus Aufgabe 6.5.3 nicht direkt in ein IIR-Filter transformiert werden? Wann ist dies trotzdem mglich? o

Optimierung Optimization Toolbox

Die Lsung vieler technischer Problemstellungen erfordert die Minimierung oder Mao ximierung mehrdimensionaler Zielfunktionen. Anschaulich betrachtet ist man in der Situation eines Wanderers, der das tiefste Tal oder die hchste Erhebung nden muss. o Oftmals treten neben das eigentliche Minimierungsproblem zustzliche Gleichungs- oder a Ungleichungsnebenbedingungen, die eine Einschrnkung der Lsungsmenge von Anfang a o an bedeuten. Man spricht dann von Optimierung unter Nebenbedingungen oder constrained optimization. Ein weit verbreitetes Verfahren zur angenherten Lsung ubera o bestimmter Gleichungssysteme ist die Methode der kleinsten Quadrate (least squares). Dieses Verfahren wird hug zur Kurveninterpolation (curve tting) eingesetzt, ist aber a nicht auf diese Anwendung beschrnkt. Auch hier existieren Varianten mit Nebenbea dingungen sowie lineare und nichtlineare least squares-Verfahren. Eine Unterproblemstellung bei der Optimumsuche ist hug die Nullstellenbestimmung von nichtlinearen a Gleichungssystemen. F r diese Problemstellung bietet die Optimization Toolbox veru schiedene Suchalgorithmen an. Ziel dieser Einf hrung in die Optimization Toolbox ist nicht die Erklrung oder Herleiu a tung der verschiedenen Optimierungsalgorithmen, sonderen deren eziente Anwendung. An geeigneter Stelle wird kurz auf charakteristische Eigenschaften und Besonderheiten einzelner Algorithmen hingewiesen, f r detaillierte Informationen siehe [9, 23, 25, 42]. u Im Folgenden wird nicht mehr zwischen Minimierung und Maximierung unterschieden, vielmehr werden wir uns auf das Minimierungsproblem beschrnken. Alle Maximiea rungsprobleme mit der Zielfunktion F (x) lassen sich auf das zugehrige Minimierungso problem mit der Zielfunktion F (x) zur ckf hren. Es gelten die folgenden typograu u schen Konventionen: Vektorwertige Funktionen werden in Grobuchstaben, skalare Funktionen in Kleinbuchstaben, Vektoren in Kleinbuchstaben in Fettschrift und Matrizen in Grobuchstaben in Fettschrift gedruckt. Die Optimization Toolbox erwartet die zu optimierende Zielfunktion und alle Nebenbedingungen als eine Matlab-Funktion im M-File-Format oder als inline object. Das Verwenden von inline objects anstelle von Matlab-Funktionen kann vor allem innerhalb von Matlab-Skripts von Vorteil sein. Das Erstellen von Matlab-Funktionen wurde in Kap. 2.5 erklrt. Die Ubergabe der zu optimierenden Funktionen an die entsprea chenden Matlab-Algorithmen erfolgt durch Function Handles (Kap. 2.5 und 4.1.1), die die gesamte Information der zugehrigen Funktion enthalten, die Matlab zu deren o Ausf hrung bentigt. Die Ubergabe einer Funktion als String in einfachen Anf hrungsu o u zeichen ist aus Kompatibilittsgr nden zwar noch mglich, sollte aber vermieden wera u o den. Ein Function Handle wird durch Voranstellen des @-Operators vor den Funktions-

228

7 Optimierung Optimization Toolbox

namen erzeugt. Eine Funktion mit dem Namen fkt wird durch das folgende Kommando als Handle an die Funktion fzero zur Nullstellenbestimmung (Kap. 7.3) ubergeben:
fzero(@fkt,...)

Auf die Mglichkeit der Funktionsdenition als inline object wird in Kap. 7.1 kurz o eingegangen.

7.1

Inline Objects

Anstatt eine Matlab-Funktion als M-File auf der Festplatte zu speichern, kann die Funktion auch im Matlab-Workspace als inline object abgelegt werden. Prinzipiell kann jede Matlab-Funktion auch als inline object erzeugt werden, besonders geeignet sind jedoch kleine Funktionen, die innerhalb eines Matlab-Skripts wiederholt aufgerufen werden. Auf diese Weise kann der gesamte bentigte Programmtext innerhalb einer o einzigen Skript-Datei untergebracht werden. Zur Denition der Funktion f1 (x) = x2 + x 1 ist folgende Befehls-Syntax ntig: o
>> f1 = inline(x^2+x-1, x) f1 = Inline function: f1(x) = x^2+x-1

Das Ergebnis ist das inline object f1 im Matlab-Workspace. Im Befehl inline knnen o nach der Funktionsdenition auch mehrere unabhngige Variablen deniert werden. Die a zweidimensionale Funktion f2 (x1 , x2 ) = x2 x2 + 3x1 x2 wird erzeugt durch 1 2 2
>> f2 = inline(x1^2-x2^2+3*x1*x2^2, x1, x2) f2 = Inline function: f2(x1,x2) = x1^2-x2^2+3*x1*x2^2

Die Auswertung erfolgt durch Aufruf des inline objects an der gew nschten Stelle. Mehu rere Funktionsargumente werden durch Komma getrennt.
>> y1 = f1(3), y2 = f2(3,2) y1 = 11 y2 = 41

Die denierten inline objects knnen einschlielich Speicherplatzbedarf wie Variablen o uber den Befehl whos angezeigt werden. Der Inhalt der inline objects kann durch Ein gabe des Objektnamens abgefragt werden.
>> f2 f2 = Inline function: f2(x1,x2) = x1^2-x2^2+3*x1*x2^2

7.2 Algorithmensteuerung

229

Durch den Befehl inline knnen beliebige Matlab-Ausdr cke als inline object im o u Workspace abgelegt werden. Es knnen daher auch vektorwertige Funktionen erzeugt o T werden. Die vektorwertige Funktion F3vek (x1 , x2 ) = x2 x2 + 3x1 x2 x2 + x2 1 1 2 2 1 wird durch den Befehl
>> f3_vek = inline([x1^2-x2^2+3*x1*x2^2; x1^2+x2-1], x1, x2) f3_vek = Inline function: f3_vek(x1,x2) = [x1^2-x2^2+3*x1*x2^2; x1^2+x2-1]

erzeugt. Die Auswertung erfolgt wieder durch einfachen Aufruf an der gew nschten u Stelle.
>> y3 = f3_vek(3,2) y3 = 41 10

Wenn eine Funktion ganze Vektoren als Argument erhlt und diese elementweise ausa gewertet werden sollen (dadurch erspart man sich for-Schleifen), dann knnen generell o statt der Operatoren *, /, ^ die elementweisen Punkt-Operatoren .*, ./, .^ verwendet werden. Dadurch ist die Funktion sowohl mit Vektoren als auch mit Skalaren aufrufbar. Wird in den nachfolgenden Optimierungsalgorithmen statt einer M-File-Funktion ein inline object als Zielfunktion verwendet, so wird kein Function Handle, sondern einfach der Name des inline objects ubergeben (ohne @-Operator). inline objects f = inline(Funktionsdef,var1,var2,...) inline object erzeugen

7.2

Algorithmensteuerung

Alle Algorithmen der Optimization Toolbox verwenden eine Variable options (Datentyp structure) zur Steuerung der jeweiligen Berechnungen. Wird f r options eine u leere Variable [] angegeben oder wird options weggelassen, so werden Standardeinstellungen verwendet. Die Befehle optimget und optimset dienen zur Manipulation der Variablen options. Die Eingabe
>> options=optimset options = Display: MaxFunEvals: MaxIter: TolFun: TolX: FunValCheck: OutputFcn: PlotFcns: ActiveConstrTol: Algorithm: [] [] [] [] [] [] [] [] [] []

230
AlwaysHonorConstraints: BranchStrategy: DerivativeCheck: Diagnostics: DiffMaxChange: DiffMinChange: FinDiffType: GoalsExactAchieve: GradConstr: GradObj: HessFcn: Hessian: HessMult: HessPattern: HessUpdate: InitialHessType: InitialHessMatrix: InitBarrierParam: InitTrustRegionRadius: Jacobian: JacobMult: JacobPattern: LargeScale: LevenbergMarquardt: LineSearchType: MaxNodes: MaxPCGIter: MaxProjCGIter: MaxRLPIter: MaxSQPIter: MaxTime: MeritFunction: MinAbsMax: NodeDisplayInterval: NodeSearchStrategy: NonlEqnAlgorithm: NoStopIfFlatInfeas: ObjectiveLimit: PhaseOneTotalScaling: Preconditioner: PrecondBandWidth: RelLineSrchBnd: RelLineSrchBndDuration: ScaleProblem: ShowStatusWindow: Simplex: SubproblemAlgorithm: TolCon: TolConSQP: TolGradCon: TolPCG: TolProjCG: TolProjCGAbs: TolRLPFun: TolXInteger: TypicalX: UseParallel: [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []

7 Optimierung Optimization Toolbox

7.2 Algorithmensteuerung

231

erzeugt die leere Struktur options, wobei [] bedeutet, dass jeweils die Standardeinstellung verwendet wird. Einzelne Felder werden durch den Befehl
options=optimset(oldopts, param1, value1, param2, value2, ...)

verndert. Um die momentanen Optionen TolX und MaxIter zu verndern, ohne explizit a a eine Variable oldopts anzulegen, dient folgende Eingabe:
>> options = optimset(options, TolX, 1e-6, MaxIter, 30);

Alle Felder innerhalb von options knnen, wie bei jeder Struktur im Workspace, durch o Eingabe von options angezeigt werden. Die Extraktion einzelner Felder aus options erfolgt mit dem Befehl optimget.
>> par = optimget(options, TolX) par = 1.0000e-006

Nicht alle Felder werden f r jeden Befehl aus der Optimization Toolbox auch tatschlich u a verwendet. Eine Ubersicht uber die von einem Befehl verwendeten Felder kann mit der Eingabe optimset(@befehlsname) erzeugt werden. Gleichzeitig werden dabei die Standardwerte mit ausgegeben. Ein wichtiges Feld, das f r fast alle Algorithmen der u Optimization TB verwendet werden kann, stellt Display dar. Die zulssigen Werte sind a off, final, notify und iter. Bei off erfolgt keine Ausgabe, bei notify erfolgt eine Ausgabe nur, wenn der Algorithmus nicht konvergiert ist, bei final wird nur das Endergebnis ausgegeben und bei iter wird schlielich Information zu jedem Iterationsschritt ausgegeben. Der Standardwert ist nicht bei allen Algorithmen identisch. Mit der Option FunValCheck kann uberpr ft werden, ob eine zu optimierende Funku tion g ltige Werte liefert. FunValCheck kann die Werte On und Off annehmen. Bei u aktivierter Option wird eine Warnung angezeigt, wenn die Funktion einen komplexen R ckgabewert, Inf oder NaN liefert. u Die Variable options kann f r alle Befehle der Optimization TB zur Algorithmensteueu rung benutzt werden. Wenn f r unterschiedliche Befehle jedoch unterschiedliche Optiou nen verwendet werden sollen, so m ssen auch verschiedene Variablen (z.B. options1, u options2) erzeugt werden. Abbruchkriterien: Bei allen Algorithmen der Optimization Toolbox lassen sich Abbruchkriterien und Informationen zum berechneten Ergebnis uber zustzliche R ckgaa u bewerte abfragen. Dies geschieht uber den Aufruf:
[..., exitflag, output] = optim(@funktion, x0, ...);

Der Platzhalter optim steht f r ein Kommando der Optimization Toolbox. Im R ckgau u bewert exitflag wird Information zum Abbruch des Algorithmus, in output werden detaillierte Informationen zum Ergebnis geliefert. Die Werte und Bedeutungen variieren f r unterschiedliche Algorithmen. Die Bedeutungen f r exitflag werden bei der Beu u schreibung der Algorithmen tabellarisch zusammengefasst, die Bedeutungen von output knnen in der Online-Hilfe nachgelesen werden. o

232

7 Optimierung Optimization Toolbox

Optionseinstellungen options=optimset leere Variable options erzeugen options=optimset(oldopts,par1,val1) Manipulation einzelner Felder optimset(@befehlsname) von befehlsname verwendete Felder anzeigen optimget(options,par1) Wert des Feldes par1 anzeigen

7.3

Nullstellenbestimmung

Viele Unterproblemstellungen bei Optimierungsaufgaben erfordern das Lsen nichtlio nearer Gleichungssysteme und die Nullstellenbestimmung nichtlinearer Funktionen. Im Allgemeinen lassen sich f r nichtlineare Funktionen die Nullstellen nur numerisch beu stimmen, da allgemeing ltige Lsungsformeln nicht existieren. Das Lsen einer nichtliu o o nearen Gleichung kann stets in eine Nullstellensuche umgewandelt werden, so dass hier nur die Nullstellensuche behandelt wird. Matlab bietet zur Nullstellenbestimmung die Befehle fzero f r skalare und fsolve f r vektorwertige nichtlineare Funktionen bzw. u u Gleichungssysteme an.

7.3.1

Skalare Funktionen

Zuerst soll die Nullstellenbestimmung einer skalaren Funktion mit dem Befehl fzero untersucht werden. Dieser Befehl implementiert einen numerischen Algorithmus zur Nullstellensuche. Der Begri Nullstelle ist im Zusammenhang mit fzero physikalisch motiviert, d.h. es geht hier um die Frage, an welchen Stellen x eine Funktion f (x) f r reellwertiges x das Vorzeichen wechselt. Dies bedeutet zweierlei: Zum einen werden u komplexe Nullstellen von Polynomen nicht erfasst, zum anderen sind Ber hrpunkte von u f (x) und der x-Achse keine Nullstellen in diesem Sinne. fzero kann in den folgenden zwei Varianten angewandt werden:
nullst = fzero(@funktion, x0, options) [nullst, f_wert] = fzero(@funktion, x0, options)

funktion gibt den Funktionsnamen der M-Funktion oder des inline objects an, dessen Nullstelle bestimmt werden soll. Wenn x0 als skalare Zahl angegeben wird, verwendet fzero den Wert x0 als Startwert f r die Nullstellensuche. Das Suchintervall wird u ausgehend vom Startwert x0 so lange vergrert, bis ein Vorzeichenwechsel der Funko tion auftritt. Das tatschlich verwendete Suchintervall hngt also davon ab, in welcher a a Richtung zuerst ein Vorzeichenwechsel auftritt. Um das Suchintervall genau zu spezizieren, kann f r x0 ein Vektor der Lnge 2 angegeben werden, wobei die Vorzeichen u a der Funktion f (x) an den Intervallgrenzen unterschiedlich sein m ssen (dann existiert u sicher mindestens eine Nullstelle). Als Beispiel wird die Funktion f (x) = x6 + x5 3x4 x2 6x + 1 (7.1)

7.3 Nullstellenbestimmung

233

und die verschiedenen Anwendungsmglichkeiten des Matlab-Befehls fzero betracho tet. Um anschaulich zu zeigen, wie der Befehl fzero arbeitet, wird der Graph der Funktion f (x) betrachtet (Abb. 7.1). Zuerst wird die M-Funktion funktion1.m mit
funktion1.m
20 10

f(x)
0 10 3

Abb. 7.1: Graph der Funktion f (x) = x6 + x5 3x4 x2 6x + 1

folgendem Inhalt erzeugt:


% funktion1.m function y = funktion1(x) y = x.^6 + x.^5 - 3*x.^4 - x.^2 - 6*x + 1;

Die Nullstelle in der Nhe von x 0.2 wird ausgehend vom Startwert x0=0 durch a folgenden Befehl berechnet.
>> x0 = 0; [nullst fwert] = fzero(@funktion1, x0) nullst = 0.1620 fwert = 0

Wird der Startwert zu x0=-0.8 gewhlt, so ndet fzero eine andere Nullstelle. a
>> x0 = -0.8; [nullst fwert] = fzero(@funktion1, x0) nullst = -1.2766 fwert = -8.8818e-016

Ausgehend von der Grak in Abb. 7.1 f hrt die Spezikation eines Suchintervalls zielu gerichteter zum gew nschten Ergebnis. Alle vier Nullstellen der Funktion f (x) knnen u o durch eine Befehlsfolge bestimmt werden.
>> x01=[-2.5 -2]; x02=[-1.5 -1]; x03=[0 0.5]; x04=[1.5 2]; >> options=optimset(@fzero); options=optimset(Display,final); >> [nullst1 fwert1] = fzero(@funktion1, x01, options) Zero found in the interval [-2.5, -2] nullst1 = -2.1854 fwert1 = 2.1316e-014

234

7 Optimierung Optimization Toolbox

>> [nullst2 fwert2] = fzero(@funktion1, x02, options) Zero found in the interval [-1.5, -1] nullst2 = -1.2766 fwert2 = -8.8818e-016 >> [nullst3 fwert3] = fzero(@funktion1, x03, options) Zero found in the interval [0, 0.5] nullst3 = 0.1620 fwert3 = 0 >> [nullst4 fwert4] = fzero(@funktion1, x04, options) Zero found in the interval [1.5, 2] nullst4 = 1.6788 fwert4 = 0

fzero bricht nach einer erfolgreichen Nullstellensuche immer ab und sucht nicht nach weiteren. Mehrere Nullstellen knnen nur durch Vorgabe mehrerer Suchintervalle beo stimmt werden. Wenn die Nullstelle nicht exakt bestimmt werden muss, kann die Rechengenauigkeit von fzero verndert werden. Die Genauigkeit wird durch den Paraa meter TolX in der Variablen options gesteuert. Es handelt sich dabei um die maximale Abweichung in x-Richtung. Standardmig wird TolX=eps verwendet, was der a Floating-Point-Genauigkeit von Matlab entspricht. Die Auswirkung der Vernderung a der Genauigkeit wird anhand von nullst4 untersucht. Wird die Genauigkeit auf 1e-6 verringert, so liefert fzero ein schlechteres Ergebnis zur ck. Die Anzahl der Iterationsu schritte ist daf r geringer. Der Funktionswert ist bei verringerter Genauigkeit weiter u von null entfernt.
>> tol=1e-3; options=optimset(@fzero); >> options=optimset(options,TolX,tol,Display,final); >> [nullst4 fwert4] = fzero(@funktion1, x04, options) Zero found in the interval [1.5, 2] nullst4 = 1.6781 fwert4 = -0.0372

Da es sich bei funktion1 um ein Polynom in x handelt, steht noch ein weiterer Befehl zur Bestimmung aller Nullstellen (einschlielich komplexer) zur Verf gung. Der Befehl u roots erhlt in einem Vektor alle Polynomkoezienten als Argument und liefert alle a Nullstellen zur ck. u
>> poly = [1 1 -3 0 -1 -6 1]; nullst = roots(poly) nullst = -2.1854 1.6788 -1.2766 0.3106 + 1.1053i 0.3106 - 1.1053i 0.1620

7.3 Nullstellenbestimmung

235

Bei allgemeinen nichtlinearen Funktionen f hrt nur die Verwendung von fzero zum u Ziel. Als weiteres Beispiel soll nun die Lsung der Gleichung o arctan(x) = 0.5x (7.2)

dienen. Deniert man sich das inline object funktion2, so lassen sich mit einer einfachen Befehlsfolge die drei Lsungen bestimmen. o
>> funktion2 = inline(atan(x)-0.5.*x,x); >> options=optimset(@fzero); options=optimset(Display,final); >> x01 = [-3 -1]; nullst1 = fzero(funktion2, x01, options) Zero found in the interval [-3, -1] nullst1 = -2.3311 >> x02 = [-1 1]; nullst2 = fzero(funktion2, x02, options) Zero found in the interval [-1, 1] nullst2 = 0 >> x03 = [2 3]; nullst3 = fzero(funktion2, x03, options) Zero found in the interval [2, 3] nullst3 = 2.3311

Parameterbergabe: Oftmals ist es w nschenswert, neben den Funktionsargumenten u u noch weitere Parameter an die zu optimierende Funktion zu ubergeben. Dies geschieht f r alle Befehle der Optimization Toolbox nach dem selben Schema: Nach dem Optionsu argument knnen beliebig viele Parameter an die Funktion ubergeben werden. Die zu o optimierende Funktion wird dann nach dem Funktionsargument x auch mit den Parametern p1, p2,... als zustzlichen Argumenten aufgerufen. Dies soll mit dem Befehl a fzero an einem Beispiel verdeutlicht werden. Es werden die Nullstellen der Funktion f (x) = ep1 x p2 x (7.3)

gesucht, wobei die Parameter p1 und p2 mit an die Funktion ubergeben werden sollen. Die zugehrige Matlab-Funktion mit zustzlichen Parametern lautet: o a
% f_param.m function y = f_param(x,p1,p2) y=exp(p1.*x) - p2.*x;

An die Funktion f_param werden die Werte p1=1 und p2=3 ubergeben. Eine Nullstelle im Intervall 1 x 2 wird bestimmt durch die folgenden Befehle, wobei die Parameter nach den Optionen im Aufruf von fzero angegeben werden:
>> x0=[1 2]; options=optimset(@fzero); p1 = 1; p2 = 3; >> x = fzero(@f_param,x0,options,p1,p2) x = 1.5121

Durch die Ubergabe von Parametern an die zu optimierende Funktion kann dieselbe Matlab-Funktion f r verschiedene Parameterkombinationen verwendet werden. u

236

7 Optimierung Optimization Toolbox

Abbruchkriterium: Wird die Funktion fzero mit vier R ckgabewerten aufgerufen, u so erhlt man Information uber das Abbruchkriterium in der Variablen exitflag und a detaillierte Informationen zum Ergebnis in der Variablen output (siehe Online-Hilfe). Der Aufruf lautet dann:
[nullst, f_wert, exitflag, output] = fzero(@funktion, x0, options)

Die Bedeutung von exitflag ist in Tab. 7.1 zusammengefasst.


Tab. 7.1: Bedeutung von exitflag bei fzero

Wert 1 1 3 4 5 6

Beschreibung Konvergenz auf eine eindeutige Lsung o Abbruch durch die Output-Funktion Funktion lieferte NaN oder Inf Funktion lieferte einen komplexen Wert Konvergenz auf einen singulren Wert a Es wurde kein Vorzeichenwechsel erkannt

7.3.2

Vektorwertige Funktionen / Gleichungssysteme

Das numerische Lsen von Gleichungssystemen erfolgt mit dem Befehl fsolve fr nichto u lineare Gleichungssysteme und mit dem Befehl \ (slash) f r lineare Gleichungssysteme. u Zunchst sollen Gleichungssysteme betrachtet werden, die weder uber- noch unterbea stimmt sind, die also entweder keine oder eine endliche Anzahl an Lsungen besitzen. o Im Falle eines linearen Gleichungssystems bedeutet das, dass es keine oder genau eine Lsung gibt. Das lineare Gleichungssystem o x1 + 2x2 + 3x3 = 1 2x1 + 3x2 + 6x3 = 3 3x1 + 2x2 + 7x3 = 0 (7.4)

lsst sich durch Einf hren der Matrix-Schreibweise a u Ax =b mit x = x1 x2 x3


T

(7.5)

durch die nachfolgenden Befehle lsen. o


>> A = [1 2 3; 2 A = 1 2 2 3 3 2 >> b = [1; 3; 0] b = 1 3 0 3 6; 3 2 7] 3 6 7

7.3 Nullstellenbestimmung
>> x = A\b x = -7.5000 -1.0000 3.5000

237

Der Befehl A\b liefert prinzipiell dasselbe Ergebnis wie inv(A)*b (zu inv siehe Kap. 2.2.2), nur wird statt der Berechnung der inversen Matrix das GauEliminationsverfahren [20] verwendet. Dies ist in vielen Fllen numerisch g nstiger. a u A\b wird auch als Matrix-Linksdivision bezeichnet. Uber die eindeutige Lsbarkeit des o linearen Gleichungssystems kann vorab durch Berechnung der Determinante von A entschieden werden.
>> determinante = det(A) determinante = 2

Bei nichtlinearen Gleichungssystemen kann es neben keiner auch mehrere Lsungen o geben. Der Befehl fsolve stellt Algorithmen zur Lsung von Gleichungssystemen der o Form F (x) = 0 (7.6)

zur Verf gung, wobei F (x) eine vektorwertige Funktion mehrerer Vernderlicher ist. u a Die Syntax lautet:
x = fsolve(@funktion, x0, options) [x fval] = fsolve(@funktion, x0, options) [x fval exitflag] = fsolve(@funktion, x0, options) [x fval exitflag,output] = fsolve(@funktion, x0, options)

Mit der Variablen options knnen verschiedene Algorithmen ausgewhlt werden, es o a kann die von den Algorithmen verwendete Jacobi-Matrix durch den Benutzer vorgegeben und die Toleranz f r die Lsungssuche eingestellt werden. Es wird prinzipiu o ell zwischen Large-Scale- und Medium-Scale-Algorithmen unterschieden. Large-ScaleAlgorithmen sind besser f r Gleichungssysteme mit einer hohen Anzahl an freien Vau riablen geeignet, whrend Medium-Scale-Algorithmen f r niederdimensionale Problea u me ausreichend sind. Diese Auswahl wird durch das Feld LargeScale der Optionsstruktur mit den Werten on oder off getroen. Der Standardwert ist off. Mit dem Feld NonlEqnAlgorithm kann der Medium-Scale-Algorithmus explizit gewhlt werden; a beim Large-Scale-Algorithmus hat dieses Feld keine Bedeutung. Standardmig wird a der Trust-Region dogleg Algorithmus gewhlt; dies kann durch die Werte gn oder lm a auf Gau-Newton bzw. Levenberg-Marquart gendert werden. Genauere Informatioa nen hierzu und zu den verwendeten Algorithmen nden sich in [42]. Wird options im Argument weggelassen, werden Standardeinstellungen verwendet. Das zu lsende Gleichungssystem F (x) muss in einer M-Funktion oder einem inline o object als vektorwertige Funktion deniert werden. x0 wird als Startwert f r den Opu timierungsalgorithmus verwendet, x ist das Ergebnis der Optimierung und fval gibt den Funktionswert bei der Lsung x an. exitflag gibt die Bedingung an, unter der o der Optimierungsalgorithmus beendet wurde. Eine Zuordnung der Werte von exitflag

238

7 Optimierung Optimization Toolbox

zu den Bedeutungen enthlt Tab. 7.2. output enthlt detaillierte Informationen zum a a Ergebnis (siehe Online-Hilfe).
Tab. 7.2: Bedeutung von exitflag bei fsolve

Wert 1 2 3 4 0 1 2 3 4

Beschreibung Konvergenz auf eine eindeutige Lsung o Anderung in x kleiner als vorgegebene Toleranz Anderung der Funktion kleiner als vorgegebene Toleranz Betrag der Suchrichtung kleiner als vorgegebene Toleranz Anzahl der Iterationen oder Funktionsauswertungen uberschritten Abbruch durch die Output-Funktion Konvergenz auf ein Ergebnis ungleich null Vertrauensbereich wurde zu gering Linienoptimierung nicht erfolgreich

Zur Veranschaulichung soll folgendes Gleichungssystem betrachtet werden: F (x) = x2 3x2 + ex1 1 sin(x1 ) + x2 ex2 =0 (7.7)

Die Denition von F in Matlab erfolgt durch die M-Funktion funktion3.m. Diese wertet fsolve bei jedem Iterationsschritt aus.
% funktion3.m function F = funktion3(x) F = [x(1)^2 - 3*x(2) + exp(-x(1)), sin(x(1)) + x(2) - exp(-x(2))];

Nun kann die Optimierungsroutine fsolve mit der Matlab-Funktion funktion3 als Argument gestartet werden. In den Optionen wird im nachfolgenden Matlab-Code angegeben, dass jeder Iterationsschritt angezeigt werden soll. Der Startwert wird zunchst a auf x0 = [1 1] festgelegt.
>> >> >> >> x0 = [1 1]; options = optimset(@fsolve); options = optimset(options, Display, iter); [x, fval, exitflag] = fsolve(@funktion3, x0, options) Norm of First-order Trust-region Iteration Func-count f(x) step optimality radius 0 3 4.83529 6.91 1 1 6 0.198145 1 1.57 1 2 9 4.24063e-005 0.126672 0.0134 2.5 3 12 1.72925e-009 0.00565829 0.000136 2.5 4 15 9.5719e-020 1.90387e-005 1.06e-009 2.5 Optimization terminated: first-order optimality is less than options.TolFun.

7.3 Nullstellenbestimmung
x = 0.4879 0.2840 fval = 1.0e-009 * 0.2911 -0.1048 exitflag = 1

239

Neben der Lsung x und dem Funktionswert fval zeigt exitflag = 1 an, dass der o Optimierungsalgorithmus erfolgreich konvergiert ist. Die zustzliche Ausgabe zu den a Iterationsschritten 1 bis 5 gibt Auskunft uber den Verlauf der Nullstellensuche. Es wird jeweils die Anzahl der Funktionsauswertungen (Func-count), der Funktionswert (f(x)) und der Betrag der Schrittweite (Norm of step) ausgegeben. Da bei den Algorithmen Ableitungen 1. Ordnung (Jacobi-Matrix) verwendet werden, ist die Anzahl der Funktionsauswertungen grer als die Anzahl der Iterationsschritte. Die Jacobi-Matrix wird o numerisch in der Nhe der aktuellen Position x bestimmt. Die Zahl der Iterationsschrita te hngt vom gewhlten Anfangswert ab. Whlt man den Anfangswert weiter von der a a a (unbekannten) Lsung entfernt, so steigt die Iterationszahl und damit auch der Recheno aufwand. Die Zahl der notwendigen Rechenoperationen bis zur gesuchten Lsung kann o also nie exakt vorherbestimmt werden.
>> >> >> >> x0 = [10 10]; options = optimset(@fsolve); options = optimset(options, Display, iter); [x, fval, exitflag] = fsolve(@funktion3, x0, options) Norm of First-order Trust-region Iteration Func-count f(x) step optimality radius 0 3 4989.42 1.39e+003 1 1 6 2687.41 1 905 1 2 9 241.483 2.5 157 2.5 3 12 36.3099 6.25 39.4 6.25 4 15 20.1537 4.95502 19.4 6.25 5 18 6.11052 1.53276 9.34 6.25 6 21 0.118046 0.714296 1.16 6.25 7 24 0.000355241 0.141307 0.0636 6.25 8 27 1.2034e-009 0.0072647 0.00012 6.25 9 30 1.44578e-021 1.00765e-005 7.11e-011 6.25 Optimization terminated: first-order optimality is less than options.TolFun. x = 0.4879 0.2840 fval = 1.0e-010 * 0.0149 -0.3799 exitflag = 1

Bei nichtlinearen Gleichungssystemen kann es auch mehr als eine Lsung geben. Wenn o man die ungefhre Lage der Lsungen kennt, so sollte der Anfangswert in deren Nhe a o a gewhlt werden. Die zweite Lsung des Gleichungssystems in (7.7) kann durch Wahl a o der Anfangswerte des Optimierungsalgorithmus zu x0 = [2 2] gefunden werden.

240

7 Optimierung Optimization Toolbox

>> x0 = [-2 2]; >> options = optimset(@fsolve); >> options = optimset(options, Display, final); >> [x, fval, exitflag] = fsolve(@funktion3, x0, options) Optimization terminated: first-order optimality is less than options.TolFun. x = -0.9229 1.1227 fval = 1.0e-007 * 0.4070 0.0576 exitflag = 1

Aus diesen Ausf hrungen sollte vor allem Folgendes klar geworden sein: Der Optimieu rungsalgorithmus kann immer nur eine Lsung nden. Weitere Lsungen knnen durch o o o Variation der Anfangswerte berechnet werden. Wenn eine spezielle Lsung bentigt o o wird, so sollte man sich vorab ein grobes Bild uber deren Lage machen (z.B. durch grasche Methoden), damit die Anfangswerte entsprechend gesetzt werden knnen. o Bei Problemstellungen hoher Ordnung oder bei rechenzeitkritischen Anwendungen kann die Anzahl der Funktionsauswertungen (Func-count) dadurch reduziert werden, dass die f r die Algorithmen bentigte Jacobi-Matrix nicht numerisch approximiert wird, u o sondern in der zu optimierenden Funktion als zweiter Ausgabewert bereitgestellt wird. Dazu muss die Jacobi-Matrix entweder von Hand oder mit der Symbolic-Toolbox bestimmt werden. Damit der Optimierungsalgorithmus fsolve die bereitgestellte JacobiMatrix verwenden kann, muss die Option options.Jacobian auf on gesetzt werden. Die Jacobi-Matrix ist deniert als: Jij = Fi xj (7.8)

Die neu zu denierende Funktion funktion4 wird nun f r das Beispiel in Gleichung u (7.7) um die Jacobi-Matrix erweitert.
% funktion4.m function [F, J] = funktion4(x) F = [x(1)^2 - 3*x(2) + exp(-x(1)), sin(x(1)) + x(2) - exp(-x(2))]; J = [ 2*x(1)-exp(-x(1)), -3; cos(x(1)), 1+exp(-x(2)) ];

Die Funktion funktion4 muss jetzt nur noch einmal pro Iterationsschritt ausgewertet werden. Der Aufruf der Optimierungsroutine lautet dann:
>> x0 = [-2 2]; options = optimset(@fsolve); >> options = optimset(options, Display, iter, Jacobian, on); >> [x, fval, exitflag] = fsolve(@funktion4, x0, options)

7.4 Minimierung nichtlinearer Funktionen

241

Norm of First-order Trust-region Iteration Func-count f(x) step optimality radius 0 1 29.9547 61.8 1 1 2 2.63653 0.879018 10.7 1 2 3 0.0877609 0.373429 1.42 2.2 3 4 0.000731682 0.131078 0.116 2.2 4 5 9.46897e-008 0.0141595 0.0013 2.2 5 6 1.69041e-015 0.000163722 1.74e-007 2.2 Optimization terminated: first-order optimality is less than options.TolFun. x = -0.9229 1.1227 fval = 1.0e-007 * 0.4071 0.0576 exitflag = 1

Das Ergebnis ist identisch wie im Fall ohne Verwendung der Jacobi-Matrix, nur sind wesentlich weniger Funktionsauswertungen ntig. o Nullstellenbestimmung [nullst, fwert]=fzero(@funktion, x0, options) Nullstelle einer skalaren Funktion bestimmen \ (slash) Lsung eines linearen Gleichungssystems Ax = b o [x,fval,exitflag]=fsolve(@funktion,x0,options) Lsung eines nichtlinearen Gleichungssystems o

7.4

Minimierung nichtlinearer Funktionen

Die Optimization Toolbox bietet zahlreiche Algorithmen zur Minimierung nichtlinearer Funktionen. In diesem Abschnitt wird die Minimierung skalarer Funktionen einer und mehrerer Vernderlicher ohne Nebenbedingungen behandelt (unconstrained optimizaa tion). Der einfachste Fall ist die Minimumsuche einer skalaren Funktion einer Variablen in einem vorgegebenen Intervall. Diese Aufgabe knnte durch Nullsetzen der Ableitung o der Funktion gelst werden. Dabei handelt es sich dann aber normalerweise um das o Problem, die Nullstelle einer nichtlinearen Funktion zu nden. Dies muss sehr hug a durch numerische Verfahren gelst werden. Auerdem muss der so gefundene Punkt kein o Extremwert sein, es kann sich auch um einen Sattelpunkt handeln. Die Algorithmen der Optimization Toolbox tragen all diesen Problemstellungen Rechnung. Die Minimumsuche einer skalaren Funktion einer Variablen in einem vorgegebenen Intervall erfolgt durch den Befehl fminbnd. Der Algorithmus liefert ein lokales Minimum innerhalb der Grenzen x1 < x < x2 . Der Aufruf erfolgt durch
[x, fval, exitflag] = fminbnd(@funktion, x1, x2, options)

242

7 Optimierung Optimization Toolbox

wobei die Variablen fval, exitflag und options nicht zwingend notwendig sind. funktion muss eine kontinuierliche Funktion ohne Sprungstellen sein. Ferner ist das Konvergenzverhalten der Optimierungsroutine umso langsamer, je nher die Lsung an a o einem der Randbereiche liegt. Die Bedeutungen der verschiedenen R ckgabewerte f r u u exitflag sind in Tab. 7.3 zusammengefasst.
Tab. 7.3: Bedeutung von exitflag bei fminbnd

Wert 1 0 1 2

Beschreibung Konvergenz zu einer Lsung auf der Basis von options.TolX o Anzahl der Iterationen oder Funktionsauswertungen uberschritten Abbruch durch die Output-Funktion Inkonsistentes Suchinterval (x1 > x2)

Es sollen nun die Minima und Maxima der Funktion f (x) = 0.5x3 x2 x + e0.1x (7.9)

bestimmt werden. Zur Eingrenzung der Suchintervalle wird der Graph der Funktion in Abb. 7.2 herangezogen. Die Funktion aus Gleichung (7.9) wird in der M-Funktion funktion5.m deniert. Das Minimum wird durch folgenden Aufruf bestimmt.
funktion5.m
2

f(x)

0 2 2 1 0 1 2 3
Abb. 7.2: Graph der Funktion f (x) = 0.5x3 x2 x + e0.1x

>> options = optimset(@fminbnd); options = optimset(options,Display,final); >> x1 = 1; x2 = 2; >> [x, fval, exitflag] = fminbnd(@funktion5, x1, x2, options) Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-004 x = 1.6826 fval = -0.9487 exitflag = 1

7.4 Minimierung nichtlinearer Funktionen

243

Neben dem Ergebnis x = 1.6826 wird hier auch der Funktionswert am Minimum (fval) und zu jedem Iterationsschritt der verwendete Algorithmus angegeben (Procedure). Das lokale Maximum erhlt man durch Minimierung von funktion6 = -1*funktion5. a Der nachfolgende Aufruf startet die Optimierung.
>> options = optimset(@fminbnd); options = optimset(options,Display,final); >> x1 = -1; x2 = 0; >> [x, fval, exitflag] = fminbnd(@funktion6, x1, x2, options) Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-004 x = -0.3565 fval = -1.1717 exitflag = 1

Der verwendete Algorithmus in fminbnd basiert auf dem Goldenen-Schnitt-Suchverfahren und parabolischer Interpolation. Der Befehl fminsearch stellt dieselbe Funktionalitt wie fminbnd zur Verf gung, verwendet aber als Optimierungsalgorithmus die a u Simplex-Methode. Diese verwendet weder numerisch noch analytisch berechnete Gradienten und liefert daher auch hug f r unstetige Funktionen das gew nschte Ergebnis. a u u Zur Minimierung skalarer Funktionen mehrerer Vernderlicher ohne Nebenbedinguna gen (unconstrained optimization) steht der Befehl fminunc zur Verf gung. Der Aufruf u erfolgt durch
[x, fval, exitflag] = fminunc(@funktion, x0, options)

wobei fval und exitflag optionale Ausgabewerte sind. Die Bedeutung des R ckgau bewerts exitflag ist in Tab. 7.4 zusammengefasst. Standardmig geht fminunc von a
Tab. 7.4: Bedeutung von exitflag bei fminunc

Wert 1 2 3 0 1 2

Beschreibung Konvergenz auf eine eindeutige Lsung o Anderung in x kleiner als vorgegebene Toleranz Anderung der Funktion kleiner als vorgegebene Toleranz Anzahl der Iterationen oder Funktionsauswertungen uberschritten Abbruch durch die Output-Funktion Linienoptimierung nicht erfolgreich

einem so genannten Large-Scale-Optimierungsproblem aus. Das bedeutet, die Anzahl der zu optimierenden Parameter x1 . . . xn ist sehr gro. In diesem Fall muss der Gradient der zu optimierenden Funktion als zweites Ausgabeargument analytisch mit angegeben werden, damit die numerischen Berechnungen nicht zu aufwendig werden. Hier sollen nur Medium-Scale-Optimierungsprobleme betrachtet werden, so dass die Large-Scale-

244

7 Optimierung Optimization Toolbox

Optimierung in der Variablen options mit dem Befehl options = optimset(options, LargeScale, off) deaktiviert werden sollte. In diesem Fall werden die vom Optimierungsalgorithmus verwendeten Gradienten durch Funktionsauswertungen numerisch bestimmt. Der Optimierungsalgorithmus verwendet eine Quasi-Newton-Methode mit einer gemischt quadratischen und kubischen Abstiegsmethode (f r Details siehe [42]). Die u Minimierungsprozedur soll wieder an einem Beispiel vorgestellt werden. Betrachtet wird die Funktion: f (x1 , x2 ) = 2x4 + x4 2x2 2x2 + 4 sin(x1 x2 ) 1 2 1 2 (7.10) Der Graph von f (x1 , x2 ) ist in Abb. 7.3 dargestellt. Ziel ist die Bestimmung der beiden Minima. Das erste Minimum in der Nhe der Werte x = [1 1] wird ohne Anzeige bei a

Zielfunktion 10 5 0

f(x1,x2)

5 1 x2 0 1 1 0 1

x1

Abb. 7.3: Graph der Funktion f (x1 , x2 ) = 2x4 + x4 2x2 2x2 + 4 sin(x1 x2 ) 1 2 1 2

jedem Iterationsschritt durch die folgende Befehlsfolge bestimmt:


>> options = optimset(@fminunc); >> options = optimset(options,Display,final,LargeScale,off); >> x0 = [1 -1]; >> [x, fval] = fminunc(@funktion7, x0, options) Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x = 0.9039 -1.1732 fval = -4.6476

Das zweite Minimum in der Nhe von x = [1 1] wird durch die Vorgabe entsprechender a Anfangswerte ermittelt. Die Befehlsfolge lautet:
>> options = optimset(@fminunc); >> options = optimset(options,Display,final,LargeScale,off); >> x0 = [-1 1];

7.4 Minimierung nichtlinearer Funktionen


>> [x, fval] = fminunc(@funktion7, x0, options) Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x = -0.9039 1.1732 fval = -4.6476

245

Die Genauigkeit, aber auch der Rechenaufwand kann durch Verringerung von TolX oder TolFun in der Variable options erhht werden. Grundstzlich hat die Wahl der Ano a fangswerte auf das Konvergenzverhalten des Optimierungsalgorithmus einen entscheidenden Einuss. In der Nhe des Ursprungs ist die Funktion (7.10) sehr ach, wodurch a ihre Ableitungen 1. und 2. Ordnung sehr klein werden. Das kann dazu f hren, dass der u Optimierungsalgorithmus innerhalb seiner Toleranzen einen Ergebniswert liefert, obwohl gar kein Minimum vorliegt. Dieses Verhalten kann durch die Wahl der Startwerte x0 = [0.01 0.01] erzeugt werden. Man darf also nie blind auf das Ergebnis der Optimierungsroutine vertrauen, sondern muss sich immer von der Plausibilitt uberzeugen. a Um manuell in den Verlauf einer Optimierung eingreifen zu knnen, gibt es bei vieo len Befehlen der Optimization Toolbox die Mglichkeit, bei jedem Iterationsschritt eine o selbstdenierte Output-Funktion aufzurufen. Typischerweise werden dort Aktionen wie die Uberwachung von Abbruchkriterien oder die Aufzeichnung des Verlaufs der Optimierung durchgef hrt. Die Output-Funktion wird durch die Option OutputFcn aktiviert. u Im folgenden Beispiel wird der Verlauf der Optimierung in der Variable verlauf protokolliert und am Ende ausgegeben. In den ersten beiden Spalten der Variablen verlauf ist das Optimierungsergebnis nach jedem Iterationsschritt enthalten, die dritte Spalte enthlt den jeweils zugehrigen Funktionswert. a o
>> options=optimset(@fminunc); >> options=optimset(options,OutputFcn,@outfcn,Display,final,... LargeScale,off); >> x0 = [-1 1]; >> [x, fval] = fminunc(@funktion7, x0, options) Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x = -0.9039 1.1732 fval = -4.6476 >> verlauf verlauf = -1.0000 1.0000 -4.3659 -1.0000 1.0000 -4.6290 -0.8626 1.1615 -4.6473 -0.9039 1.1800 -4.6476 -0.9042 1.1722 -4.6476 -0.9039 1.1732 -4.6476 -0.9039 1.1732 -4.6476

Die Aufzeichnung des Verlaufs der Optimierung erledigt die Output-Funktion outfcn. Die drei obligatorischen Argumente x, OptimValues und state beschreiben den Fortschritt der Optimierungsroutine zum aktuellen Iterationsschritt. x ist der Ergebnis-

246

7 Optimierung Optimization Toolbox

vektor, OptimValues ist eine Struktur, die den Funktionswert, die Iterationszahl, den Gradienten, die Schrittweite, etc. enthlt und state ist ein String, der die Werte init, a interrupt, iter und done annehmen kann. Die Felder in OptimValues hngen vom a verwendeten Algorithmus ab. Eine genaue Beschreibung der Felder ist im Matlab Helpdesk unter Optimization Toolbox/Optimization Options/Output Function enthalten. Der Zustand init wird bei der Initialisierung des Algorithmus erreicht, iter wird bei jedem Ende einer normalen Iteration und done nach Abschluss aller Iterationen erreicht. Im Zustand interrupt werden gerade umfangreiche Zwischenrechnungen durchgef hrt und der Algorithmus ist innerhalb der aktuellen Iteration unterbrechbar. Die u Unterbrechung wird uber den R ckgabewert stop gesteuert. Wird stop nicht gesetzt u oder auf false gesetzt, arbeitet der Algorithmus normal weiter. Wird stop auf true gesetzt, bricht der Algorithmus mit der aktuellen Iteration ab. Die Funktion outfcn kann noch weitere Argumente besitzen, die z.B. durch ubergebene Parameter belegt werden (siehe S. 235). Die folgende Funktion outfcn speichert den Verlauf des Optimierungsvorgangs (Zwischenergebnisse und zugehrige Funktionswerte) in der Matrix o suchfolge ab und weist das Ergebnis nach Beendigung der Optimierung der Variablen verlauf im Matlab-Workspace zu.
function stop = outfcn(x, OptimValues, state) persistent suchfolge; switch state case init suchfolge=[]; case iter suchfolge = [suchfolge; x, OptimValues.fval]; case done assignin(base,verlauf,suchfolge); end stop = false;

Um den Fortschritt einer Optimierung auszugeben, kann eine Plot-Funktion uber die Option PlotFcns deniert werden. Eine Plot-Funktion kann analog zu einer OutputFunktion selbst programmiert werden, oder es wird eine der vordenierten PlotFunktionen aus Tab. 7.5 verwendet.
Tab. 7.5: Vordenierte Plot-Funktionen

Funktion

Ausgabe

@optimplotx aktueller Optimierungswert @optimplotfunccount Anzahl der Funktionsaufrufe @optimplotfval aktueller Funktionswert @optimplotconstrviolation maximale Verletzung einer Nebenbedingung @optimplotresnorm Norm der Residuen @optimplotstepsize aktuelle Schrittweite @optimplotfirstorderopt Optimalittsbedingung erster Ordnung a

7.5 Minimierung unter Nebenbedingungen

247

Minimierung ohne Nebenbedingungen [x,fval,exitflag]=fminbnd(@funktion,x1,x2,options) Minimierung einer Funktion einer Variablen im Intervall x1 < x < x2 [x,fval,exitflag]=fminunc(@funktion,x0,options) Minimierung einer Funktion mehrerer Variablen mit dem Startwert x0

7.5

Minimierung unter Nebenbedingungen

Bei vielen Optimierungsproblemen ist man nicht nur an einem Minimum der Zielfunktion interessiert, vielmehr muss die unabhngige Variable x auch verschiedene Nebena bedingungen erf llen. Diese Nebenbedingungen knnen vom Anwender willk rlich festu o u gelegt sein oder durch physikalische Begrenzungen bedingt sein (z.B. Obergrenze der PKW-Geschwindigkeit). Man unterscheidet zwischen Gleichungs- und Ungleichungsnebenbedingungen, die beide gleichzeitig vorkommen knnen. Die Optimierung unter o Nebenbedingungen wird als constrained nonlinear optimization bezeichnet. Neben der allgemeinen Minimierung unter Nebenbedingungen wird in Kap. 7.5.2 der Spezialfall einer quadratischen Zielfunktion mit ausschlielich linearen Gleichungs- und Ungleichungsnebenbedingungen behandelt (quadratische Programmierung). Unter bestimmten Voraussetzungen ist dann ein lokales Minimum immer auch das globale Minimum. Einen weiteren wichtigen Spezialfall stellt die lineare Programmierung in Kap. 7.5.3 dar. Hier liegt eine lineare Zielfunktion mit linearen Nebenbedingungen zugrunde, deren globales Minimum in einer endlichen Zahl von Iterationsschritten erreicht wird.

7.5.1

Nichtlineare Minimierung unter Nebenbedingungen

Der allgemeine Fall der numerischen Minimierung nichtlinearer Funktionen unter linearen und nichtlinearen Nebenbedingungen wird als nichtlineare Programmierung bezeichnet. Die Funktionsweise zahlreicher Algorithmen wird in [9, 25] beschrieben. Die Optimization Toolbox bietet f r diese Problemstellung den Befehl fmincon an, welu cher eine Funktion f (x) unter mehreren Nebenbedingungen minimiert. Diese werden in lineare und nichtlineare Nebenbedingungen aufgeteilt, so dass sich der Optimierungsalgorithmus fmincon auf die folgende Problemstellung anwenden lsst: a min f (x)
x

unter den Nebenbedingungen

(7.11) (7.12) (7.13) (7.14) (7.15) (7.16)

c(x) 0 ceq (x) = 0 Ax b Aeq x = beq lb x ub

248

7 Optimierung Optimization Toolbox

c und ceq sind vektorwertige nichtlineare Funktionen, A und Aeq sind konstante Matrizen, b und beq sind konstante Vektoren und lb und ub sind die unteren bzw. oberen Grenzen f r den Ergebnisvektor x. Der Aufruf des Optimierungsalgorithmus unter u Ber cksichtigung von Nebenbedingungen erfolgt durch: u
[x,fval,exitflag]=fmincon(@funktion,x0,A,b,Aeq,... beq,lb,ub,@nonlcon,options)

Beim Aufruf von fmincon m ssen nicht alle Parameter angegeben werden. Nicht veru wendete Eintrge m ssen dann lediglich durch ein leeres Element [] ersetzt werden. a u funktion ist die zu minimierende Funktion, x0 ist der vom Optimierungsalgorithmus verwendete Startwert und A bis ub beschreiben die linearen Nebenbedingungen gem a den Gleichungen (7.14) bis (7.16). Uber die Variable options wird in gewohnter Weise der Optimierungsalgorithmus gesteuert. In der Matlab-Funktion nonlcon werden die nichtlinearen Ungleichungs- und Gleichungsnebenbedingungen gem den Gleichungen a (7.12) und (7.13) deniert. Die nichtlinearen Nebenbedingungen m ssen exakt wie in u den obigen Gleichungen deniert werden, d.h. sie m ssen insbesondere auf = 0 bzw. u 0 enden. Allgemein hat eine M-Funktion f r die nichtlinearen Nebenbedingungen u dann folgendes Aussehen:
% Nichtlineare Nebenbedingungen function [c, ceq] = nonlcon(x) c = ... % nichtlineare Ungleichungs NB ceq = ... % nichtlineare Gleichungs NB

Die Ungleichungsnebenbedingung muss das erste, die Gleichungsnebenbedingung das zweite Funktionsergebnis von nonlcon sein. Im Lsungsvektor ist x die Lsung des o o Optimierungsproblems, fval der Funktionswert an dieser Stelle und exitflag gibt Auskunft uber die Abbruchbedingung des Algorithmus. Die Bedeutung der Werte von exitflag ist in Tab. 7.6 zusammengefasst.
Tab. 7.6: Bedeutung von exitflag bei fmincon

Wert 1 2 3 4 5 0 1 2

Beschreibung Konvergenz auf eine Lsung o Anderung in x kleiner als vorgegebene Toleranz Anderung der Funktion kleiner als vorgegebene Toleranz Betrag der Suchrichtung und Verletzung der Nebenbedingungen innerhalb der Toleranzen Betrag der Richtungsableitung und Verletzung der Nebenbedingungen innerhalb der Toleranzen Anzahl der Iterationen oder Funktionsauswertungen uberschritten Abbruch durch die Output-Funktion Keine plausible Lsung gefunden o

7.5 Minimierung unter Nebenbedingungen

249

Der Befehl fmincon verwendet intern verschiedene Optimierungsalgorithmen. Es stehen die Algorithmen trust-region-reective, active-set und interior-point zur Verf gung. u Beim trust-region-reective-Algorithmus muss die Zielfunktion zustzlich den Gradiena ten bei jeder Funktionsauswertung zur ckliefern. Der Gradient wird analog zur Jacobiu Matrix in Kap. 7.3 deniert. Allgemein hat die Zielfunktion dann die folgende Form:
% Zielfunktion mit Gradientenangabe function [f, g] = funktion(x) f = ... % Zielfunktion von x g = [ ... ] % Gradient als Vektor von x

Wird der active-set - oder interior-point -Algorithmus verwendet, m ssen diese in der u Variablen options durch einen der folgenden Befehle aktiviert werden:
options=optimset(options,Algorithm,active-set) options=optimset(options,Algorithm,interior-point)

In diesen Fllen kann die Angabe des Gradienten in der Zielfunktion unterbleiben, der a Gradient wird dann bei jedem Iterationsschritt numerisch bestimmt. F r alle Algorithu men gilt die Einschrnkung, dass sowohl die Zielfunktion als auch alle nichtlinearen a Nebenbedingungen stetig sein m ssen. Ferner werden immer nur abhngig vom Startu a wert x0 lokale Minima geliefert. Zur Darstellung der Funktionsweise von fmincon soll wieder die Funktion in Gleichung (7.10) auf Seite 244 betrachtet werden. Jetzt soll jedoch die Nebenbedingung beachtet werden, dass der Ergebnisvektor nur auf dem Kreis mit der Gleichung (x1 0.5)2 + x2 = 1 2 (7.17)

liegen darf. Es handelt sich also um eine nichtlineare Gleichungsnebenbedingung. Abb. 7.4 links zeigt nochmals die Funktion aus Gleichung (7.10), Abb. 7.4 rechts zeigt die Nebenbedingung (7.17) in der Ebene z = 5 und auf die Zielfunktion projiziert. Die Optimierungsaufgabe besteht nunmehr im Aunden des Minimums der Kurve im Raum in Abb. 7.4 rechts. Die Denition der Nebenbedingung erfolgt durch:
% Nebenbedingung (x1-0.5)^2+x2^2=1; Datei neben.m function [c, ceq] = neben(x) c = []; ceq = ( x(1)-0.5 )^2 + x(2)^2 -1;

Wie aus Abb. 7.4 ersichtlich ist, existieren zwei lokale Minima. Das erste Minimum in der Nhe von x = [0.5 1] wird durch die Befehlsfolge a

250
Zielfunktion 10

7 Optimierung Optimization Toolbox


Gleichungs NB 5

f(x ,x )

f(x1,x2) 0 1
2

5 0 5 1 x 1 0 x1 1

5 1 0 x 1
2

0.5

0.5 x1

1.5

Abb. 7.4: Graph der Zielfunktion f (x1 , x2 ) = 2x4 + x4 2x2 2x2 + 4 sin(x1 x2 ) (links) und 1 2 1 2 Nebenbedingung auf die Zielfunktion projiziert (rechts)

>> options = optimset(@fmincon); >> options = optimset(options,Display,final,Algorithm,active-set); >> x0 = [0.5 -1]; >> [x, fval] = fmincon(@funktion7, x0,[],[],[],[],[],[],@neben,options) Optimization terminated: directional derivative predicts change in objective value less than options.TolFun and maximum constraint violation is less than options.TolCon. x = 0.8523 -0.9359 fval = -4.2450

bestimmt. Es wurde der active-set -Algorithmus ausgewhlt, so dass die Angabe von a Gradienten nicht ntig ist. Das zweite Minimum in der Nhe von x = [0.2 1] (abzuo a lesen aus Abb. 7.4) kann durch Abndern der Anfangswerte berechnet werden. a
>> options = optimset(@fmincon); >> options = optimset(options,Display,final,Algorithm,active-set); >> x0 = [0.5 1]; >> [x, fval] = fmincon(@funktion7, x0,[],[],[],[],[],[],@neben,options) Optimization terminated: directional derivative predicts change in objective value less than options.TolFun and maximum constraint violation is less than options.TolCon. x = -0.2868 0.6171 fval = -1.4721

In der Ausgabe werden neben dem Ergebnisvektor x das Abbruchkriterium und der Funktionswert an der Stelle x angegeben. Wenn das lokale Minimum innerhalb des Bereichs liegt, der durch die Nebenbedingungen begrenzt wird, so sind auch die Nebenbedingungen unwirksam. Dies ist meist nur f r Ungleichungsnebenbedingungen mglich. u o Als Beispiel f r eine lineare Ungleichungsnebenbedingung soll wieder die Funktion aus u

7.5 Minimierung unter Nebenbedingungen Gleichung (7.10) verwendet werden. Die Nebenbedingungen lauten nun: x1 x2 und x2 1

251

(7.18)

In der x1 -x2 -Ebene ist dies der mit B gekennzeichnete Bereich in Abb. 7.5. Um die
Ungleichungs NB 1 0 x
2

1 2 2 1 x
1

Abb. 7.5: Begrenzung des Lsungsraumes o durch Gleichung (7.18)

Darstellung gem Gleichung (7.14) zu erreichen, m ssen die Matrix A und der Vektor a u b gem Gleichung (7.19) deniert werden. a A= 1 1 0 1 b= 0 1 (7.19)

A und b werden anschlieend dem Optimierungsalgorithmus ubergeben. Der Aufruf erfolgt durch die Befehle:
>> A = [-1 1; 0 -1]; b = [0; 1]; >> options = optimset(@fmincon); >> options = optimset(options,Display,final,Algorithm,active-set); >> x0 = [1 0]; >> [x, fval] = fmincon(@funktion7, x0,A,b,[],[],[],[],[],options) Optimization terminated: directional derivative predicts change in objective value less than options.TolFun and maximum constraint violation is less than options.TolCon. Active inequalities (to within options.TolCon = 1e-006): lower upper ineqlin ineqnonlin 2 x = 0.9135 -1.0000 fval = -4.4428

Aus der Ausgabe ist ersichtlich, dass f r die Minimumsuche die zweite Nebenbedingung u in Gleichung (7.18) relevant war (Active inequalities: 2), da das lokale Minimum ohne Ber cksichtigung von Nebenbedingungen nicht im Bereich B in Abb. 7.5 liegt. In u diesem einfachen Fall kann man auch anhand der Lsung x2 = 1 schlieen, dass die o

252

7 Optimierung Optimization Toolbox

Nebenbedingung x2 1 die Beschrnkung bei der Lsungssuche darstellt. Die Lsung a o o liegt also auf der Geraden x2 = 1. Der Befehl fmincon kann beliebig viele Gleichungs- und Ungleichungsnebenbedingungen gleichzeitig ber cksichtigen. Es muss jedoch beachtet werden, dass uberhaupt noch u ein g ltiger Lsungsraum bestehen bleibt. Die Nebenbedingungen d rfen sich nicht u o u vollstndig gegenseitig ausschlieen. Auch hier ist, genauso wie bei den bisherigen Opa timierungsalgorithmen, zu beachten, dass immer nur ein lokales Minimum in der Nhe a des Startwerts gefunden wird. Wenn die Zielfunktion nicht skalar, sondern vektorwertig ist, dann spricht man von einem Optimierungsproblem mit mehreren Zielgren (multiobjective optimization proo blem). Es m ssen also mehrere Funktionen gleichzeitig bestimmte Optimalittsbedinu a gungen einhalten (goal attainment problem). Die Optimization Toolbox bietet hierf r u den Befehl fgoalattain an. Eine weitere typische Problemstellung bei vektorwertigen Zielfunktionen ist die Minimierung des schlechtest mglichen Ergebnisses (worst case). o Es soll also das Maximum der einzelnen Komponenten der Zielfunktion minimiert werden. Diese Form von Optimierungsproblem wird ublicherweise als Minimax-Problem bezeichnet. F r diesen Zweck enthlt die Optimization Toolbox den Befehl fminimax. u a F r genauere Informationen zu fgoalattain und fminimax konsultieren Sie bitte die u Online-Hilfe zu Matlab oder [42]. Optimtool: Alle Optimierungsalgorithmen knnen auch uber ein grasches Tool, das o so genannte optimtool bedient werden. Der Start erfolgt durch Eingabe von
>> optimtool

an der Befehlszeile. In der graschen Benutzeroberche knnen Solver, Algorithmus, zu a o optimierende Funktion, Startwert, Nebenbedingungen und alle Optionen (hnlich zur a Variablen options) angegeben werden. Es kann dabei auch auf Variablen im Matlab Workspace und auf Funktionen zugegrien werden. Die Verwendung von optimtool wird nun anhand der Optimierung von funktion7.m mit der Nebenbedingung aus Abb. 7.4 veranschaulicht. Solver und Algorithmus knnen uber Pull-Down-Men s ausgewhlt werden. Die zu optio u a mierende Funktion und die Nebenbedingung werden als Function Handle (@funktion7, @neben) eingetragen. Der Startwert der Optimierung wird direkt eingetragen. Durch Anklicken des Buttons Start wird die Optimierung gestartet und das Ergebnis im Fenster links unten dargestellt. Alle Einstellungen und das Ergebnis sind in Abb. 7.6 dargestellt.

7.5 Minimierung unter Nebenbedingungen

253

Abb. 7.6: Optimierung mittels optimtool

Minimierung unter Nebenbedingungen [x,fval]=fmincon(@funktion,x0,A,b,Aeq,beq,lb,ub,@nonlcon,opt) Minimierung einer Funktion mehrerer Variablen unter Gleichungs- und Ungleichungsnebenbedingungen optimtool Start der graschen Oberche zur Optimierung a [x,fval]=fminimax(@funktion,x0,A,b,Aeq,beq,lb,ub,@nonlcon,opt) Lsung eines Minimax-Problems o [x,fval]=fgoalattain(@funktion,x0,@goal,weight,A,b,Aeq,beq,lb,... ub,@nonlcon,options) Lsung eines goal attainment -Problems o

7.5.2

Quadratische Programmierung

Einen wichtigen Spezialfall der nichtlinearen Minimierung stellt die quadratische Programmierung dar, der eine quadratische Zielfunktion mit linearen Gleichungs- und Un-

254

7 Optimierung Optimization Toolbox

gleichungsnebenbedingungen zugrunde liegt. Die Problemstellung lautet: 1 min xT Q x + gT x x 2 Ax b Aeq x = beq lb x ub unter den Nebenbedingungen (7.20) (7.21) (7.22) (7.23)

Die Matrix Q und der Vektor g sind konstant und beschreiben die quadratische Form der Zielfunktion, wobei Q symmetrisch sein muss. Dies stellt keine Einschrnkung dar, da a bei nicht symmetrischer Matrix Q einfach eine symmetrische Matrix Q = 0.5(Q+QT ) generiert werden kann, die den Wert der quadratischen Form (7.20) unverndert lsst.1) a a Die Matrix A und der Vektor b kennzeichnen die Ungleichungsnebenbedingungen, die Matrix Aeq und der Vektor beq die Gleichungsnebenbedingungen und die Vektoren lb und ub sind untere bzw. obere Schranken f r die Zielvariable x. Die Nebenbedingung u in Gleichung (7.23) kann ohne Probleme in die Nebenbedingung in Gleichung (7.21) integriert werden, die Bedienung des Algorithmus wird durch die explizite Angabe von Schranken f r x aber komfortabler. Die Ezienz des zugehrigen Matlab-Algorithmus u o wird jedoch gesteigert, wenn keine Nebenbedingungen in Form von Gleichung (7.23) angegeben werden. F r eine positiv semidenite, symmetrische Matrix Q ist die Prou blemstellung in Gleichung (7.20) konvex, und damit ist jede lokale Lsung auch eine o globale Lsung. Der Algorithmus zur quadratischen Programmierung arbeitet viel ezio enter als allgemeine nichtlineare Optimierungsalgorithmen und sollte bei entsprechender Problemstellung bevorzugt eingesetzt werden. Quadratische Programme treten im Bereich der Regelungstechnik hug bei der Online-Optimierung von Stellgren linearer a o Systeme mit quadratischen G tefunktionalen und linearen Nebenbedingungen auf. Ein u typisches Beispiel ist die modellbasierte prdiktive Regelung von LTI-Systemen [7]. a In Matlab wird ein quadratisches Programm durch den Befehl quadprog gelst. Seine o Syntax lautet:
[x,fval,exitflag,output] = quadprog(Q,g,A,b,Aeq,beq,lb,ub,x0,options)

In x und fval werden der Lsungsvektor und der zugehrige Funktionswert zur cko o u gegeben. exitflag gibt Auskunft uber die Art des Abbruchs des Algorithmus (siehe Tab. 7.7). Die Argumente Q bis ub von quadprog entsprechen den Vektoren und Matrizen aus den Gleichungen (7.20) bis (7.23). Das Argument x0 ist der Startwert der Minimumsuche, und mit der Struktur options kann die ubliche Algorithmus-Steuerung vorgenommen werden. Uber den R ckgabewert output lassen sich Informationen uber u den verwendeten Algorithmus, Zahl der Iterationen und ein Ma der Optimalitt aba fragen.
1)

Diesen Schritt fhrt quadprog automatisch aus, wenn keine symmetrische Matrix angegeben wird. u

7.5 Minimierung unter Nebenbedingungen

255

Tab. 7.7: Bedeutung von exitflag bei quadprog

Wert 1 3 4 0 2 3 4 7

Beschreibung Konvergenz auf eine Lsung o Anderung der Funktion kleiner als vorgegebene Toleranz Lokales Minimum gefunden Anzahl der Iterationen uberschritten Problemformulierung ist unplausibel Problemformulierung ist unbegrenzt Aktuelle Suchrichtung f hrt zu keiner Verkleinerung des Funktionswerts u Betrag der Suchrichtung kleiner als Toleranz

Nun soll ein einfaches Beispiel mit symmetrischer Matrix Q und Ungleichungsnebenbedingung mittels quadprog gelst werden. Die Problemstellung lautet: o min 2x2 + 5x2 + 10x2 + 4x1 x2 + 6x1 x3 + 12x2 x3 + 3x1 2x2 + x3 1 2 3
x

(7.24)

unter der Nebenbedingung: x1 + x2 x3 4 (7.25)

Die folgenden Matlab-Befehle lsen das quadratische Programm mit dem Anfangswert o x0 = [1 1 1]. Da die entstehende Matrix Q positiv denit ist, ist das Optimierungsproblem streng konvex, und das berechnete Minimum ist das globale Minimum.
% quadprog_bsp.m % Matrizen der quadratischen Form Q = 2.*[2 2 3; 2 5 6; 3 6 10]; g = [3 -2 1]; % Matrizen der Nebenbedingung A = [-1 -1 1]; b = [-4]; % Optionen und Anfangswert options = optimset(@quadprog); options = optimset(options,LargeScale,off); x0 = [1 1 1]; % Optimierung starten [x,fval,exitflag] = quadprog(Q,g,A,b,[],[],[],[],x0,options) Optimization terminated. x = -0.1000 2.4667 -1.6333 fval = 1.9000 exitflag = 1

256

7 Optimierung Optimization Toolbox

Quadratische Programmierung [x,fval,exitflag,output] = quadprog(Q,g,A,b,Aeq,beq,lb,ub,x0,opt) Lsen eines quadratischen Programms o

7.5.3

Lineare Programmierung

Ein weiterer wichtiger Spezialfall der Minimierung unter Nebenbedingungen ist die Minimierung einer linearen Zielfunktion unter linearen Gleichungs- und Ungleichungsnebenbedingungen. Dies bezeichnet man als lineare Programmierung. Diese Optimierungsmethode wird oft bei wirtschaftlichen Produktions- und Transportproblemen eingesetzt und ist das in der Praxis am weitesten verbreitete Verfahren. Es verdankt seinen hua gen Einsatz sowohl seiner Einfachheit als auch dem Vorhandensein zuverlssiger numea rischer Lsungsalgorithmen. o Die Problemstellung der linearen Programmierung lautet: min f (x) = gT x
x

unter den Nebenbedingungen

(7.26) (7.27) (7.28) (7.29)

Ax b Aeq x = beq lb x ub

Der Vektor g deniert die lineare Zielfunktion. Die Matrizen und Vektoren A, b, Aeq und beq beschreiben die Ungleichungs- und Gleichungsnebenbedingungen. Zur einfachen Angabe von Schranken f r den Lsungsvektor x existieren die unteren und oberen u o Schranken lb und ub. Die folgenden Eigenschaften eines linearen Programms seien festgehalten [25]: Ohne Nebenbedingungen besitzt es keine Lsung, da die lineare Zielfunktion f auf einem o unbeschrnkten Bereich keinen Extremwert besitzt. Sofern eine Lsung existiert, liegt a o diese aufgrund der Linearitt von Zielfunktion und Nebenbedingungen immer auf dem a Rand des durch die Nebenbedingungen denierten zulssigen Bereichs, und zwar enta weder an einer Ecke (eindeutige Lsung) oder auf einer Kante (mehrdeutige Lsung). o o Der bekannteste numerische Algorithmus zur Lsung eines linearen Programms ist die o Simplex-Methode. Diese liefert in einer endlichen Anzahl von Iterationsschritten das globale Minimum der Zielfunktion auf dem zulssigen Bereich. Die maximal ntige Itea o rationszahl ist gleich der Zahl der Eckpunkte des zulssigen Bereichs. a Der Matlab-Befehl linprog zur Lsung eines linearen Programms basiert ebenfalls o auf einer Variante der Simplex-Methode. Seine Syntax lautet:
[x,fval,exitflag,output] = linprog(g,A,b,Aeq,beq,lb,ub,x0,options)

Die R ckgabewerte x und fval enthalten den Lsungsvektor und den zugehrigen Wert u o o der G tefunktion. Das Flag exitflag gibt Auskunft uber die Art des Abbruchs des Alu gorithmus (siehe Tab. 7.8). Uber den R ckgabewert output lassen sich Informationen u

7.5 Minimierung unter Nebenbedingungen

257

Tab. 7.8: Bedeutung von exitflag bei linprog

Wert 1 0 2 3 4 5 7

Beschreibung Konvergenz auf eine Lsung o Anzahl der Iterationen uberschritten Problemformulierung ist unplausibel Problemformulierung ist unbegrenzt Der Funktionswert NaN ist aufgetreten Aktuelle und duale Problemformulierung sind unplausibel Betrag der Suchrichtung kleiner als Toleranz

uber den verwendeten Algorithmus und die Zahl der Iterationen abfragen. Die Argu mente g bis ub entsprechen den Vektoren und Matrizen der Gleichungen (7.26) bis (7.29). Mit x0 kann ein Startwert vorgegeben werden, und mit der Struktur options knnen Optionen f r linprog vorgegeben werden. Durch Setzen der Option Simplex o u auf on wird der urspr ngliche Simplex-Algorithmus verwendet, der keine Angabe eines u Anfangswerts zulsst, da dieser vom Algorithmus selbst berechnet wird. Ein trotzdem a angegebener Anfangswert x0 wird in diesem Fall ignoriert. Die Anwendung der linearen Programmierung soll nun anhand eines Transportproblems gezeigt werden. An den Angebotsorten A1 , A2 und A3 stehen jeweils 4, 5 und 6 Mengeneinheiten eines Gutes zur Verf gung. An den Nachfrageorten B1 , B2 , B3 und B4 u werden jeweils 1, 3, 2 und 5 Mengeneinheiten des Gutes bentigt. Die Transportkosten o von Ai nach Bj betragen cij und sind proportional zur transportierten Menge. Es gelten folgende Werte: c11 = 1 c12 = 2 c21 = 5 c22 = 1 c31 = 2 c32 = 3 c13 = 4 c14 = 3 c23 = 2 c24 = 6 c33 = 7 c34 = 1 (7.30)

Gesucht sind die vom Ort i zum Ziel j transportierten Mengen xij , die die Transportkosten f (x) minimieren. Die gesuchten Mengen fasst man im Vektor x zusammen. x = [x11 x12 x13 x14 x21 x22 x23 x24 x31 x32 x33 x34 ]T (7.31)

Durch Denition des Vektors g ergibt sich die Zielfunktion als Transportkostenfunktion gem Gleichung (7.33). a g = [c11 c12 c13 c14 c21 c22 c23 c24 c31 c32 c33 c34 ]T f (x) = gT x (7.32) (7.33)

An den Nachfrageorten B1 bis B4 ist zu beachten, dass die nachgefragte Menge auch der tatschlich transportierten Menge entspricht. Dies f hrt auf die folgenden Gleichungsa u

258 nebenbedingungen:
3 3 3

7 Optimierung Optimization Toolbox

xi1 = 1
i=1 i=1

xi2 = 3
i=1

xi3 = 2
i=1

xi4 = 5

(7.34)

An den Angebotsorten ist zu beachten, dass die abtransportierte Menge hchstens der o verf gbaren Menge entspricht. Dies f hrt auf die folgenden Ungleichungsnebenbedinu u gungen:
4 4 4

x1j 4
j=1 j=1

x2j 5
j=1

x3j 6

(7.35)

Ferner ist zu beachten, dass keine negativen Transportmengen xij zugelassen sind, dass also alle xij 0 sind. Das folgende Matlab-Skript lst das beschriebene Transportproblem mittels linprog. o Man kann sich am Ergebnis x zumindest von der Einhaltung der Nebenbedingungen leicht uberzeugen.
% linprog_bsp.m % Angebote a1 = 4; a2 = 5; a3 = 6; % Nachfragen b1 = 1; b2 = 3; b3 = 2; b4 = 5; % Transportkostenmatrix c = [1 2 4 3; 5 1 2 6; 2 3 7 1]; % Vektor g der Zielfunktion g = [c(1,:).; c(2,:).; c(3,:).]; % Matrix der Gleichungsnebenbedingungen Aeq = [1 0 0 0 1 0 0 0 1 0 0 0; 0 1 0 0 0 1 0 0 0 1 0 0; 0 0 1 0 0 0 1 0 0 0 1 0; 0 0 0 1 0 0 0 1 0 0 0 1]; beq = [b1 b2 b3 b4].; % Matrix der Ungleichungsnebenbedingungen A = [1 1 1 1 0 0 0 0 0 0 0 0; 0 0 0 0 1 1 1 1 0 0 0 0; 0 0 0 0 0 0 0 0 1 1 1 1; -1.*eye(12)]; b = [a1 a2 a3 zeros(1,12)].; % Lsung des Transportproblems als lineares Programm o x = linprog(g,A,b,Aeq,beq) Optimization terminated.

7.5 Minimierung unter Nebenbedingungen


x = 1.0000 0.0000 0.0000 0.0000 0.0000 3.0000 2.0000 0.0000 0.0000 0.0000 0.0000 5.0000

259

Eine spezielle Form der linearen Programmierung stellt die Binary Integer Programmierung dar. Es handelt sich dabei um ein lineares Programm mit der zustzlichen a Nebenbedingung, dass die Elemente des Ergebnisvektors nur aus 0 oder 1 bestehen d rfen. Eine Lsung dieser Optimierungsprobleme erfolgt mit dem Befehl bintprog, u o dessen Syntax lautet:
[x,fval,exitflag]=bintprog(g,A,b,Aeq,beq,x0,options)

Der Algorithmus erzeugt einen binren Suchbaum durch wiederholtes Hinzuf gen von a u Nebenbedingungen. An jedem Punkt des Suchbaums wird ein lineares Programm gelst. o Die Bedeutung der R ckgabewerte f r exitflag ist in Tab. 7.9 zusammengefasst. u u
Tab. 7.9: Bedeutung von exitflag bei bintprog

Wert 1 0 2 4 5 6

Beschreibung Konvergenz auf eine Lsung o Anzahl der Iterationen uberschritten Problemformulierung ist unplausibel Die Anzahl der Knoten des Suchbaums wurde uberschritten Die max. Laufzeit des Algorithmus wurde uberschritten Die Anzahl der LP-Iterationen wurde uberschritten

Lineare Programmierung [x,fval,exitflag,output] = linprog(g,A,b,Aeq,beq,lb,ub,x0,options) Lsen eines linearen Programms o [x,fval,exitflag]=bintprog(g,A,b,Aeq,beq,x0,options) Lsen eines Binary Integer Programms o

260

7 Optimierung Optimization Toolbox

7.6

Methode der kleinsten Quadrate (Least Squares)

Unter den Begri Methode der kleinsten Quadrate fallen verschiedene Optimierungsverfahren, die jedoch alle zum Ziel haben, eine quadratische Fehlersumme zu minimieren. Es wird unterschieden zwischen linearen und nichtlinearen least squares-Verfahren, jeweils ohne und mit Nebenbedingungen. Da least squares-Verfahren hug zur Bea stimmung von Ausgleichspolynomen angewandt werden, hat sich auch der Begri curve tting durchgesetzt. Das lineare least squares-Verfahren ohne Nebenbedingungen kann auf das Lsen von o uberbestimmten Gleichungssystemen angewandt werden. Das Gleichungssystem Cx =d Cxd =0 (7.36) mit C IRnm und d IRn1 sei uberbestimmt (n > m) und besitze deshalb kei ne Lsung. Da keine exakte Lsung existiert, kann Gleichung (7.36) auch als Minio o mierungsproblem aufgefasst werden. Das Minimierungsproblem zur Bestimmung der bestmglichen Lsung hat dann die Form o o min C x d
x 2 2 2

(7.37)

wobei . . . 2 die quadratische euklidsche Norm eines Vektors ist. Setzt man F (x) = C x d und f hrt die Berechnung der euklidschen Norm aus, so lautet das Minimieu rungsproblem:
n

min
x i=1

Fi (x)2

(7.38)

o Fi (x) ist die Abweichung einer Komponente in Gleichung (7.36) von der exakten Lsung des Gleichungssystems. Der Vektor x wird nun so bestimmt, dass die Fehlerquadratsumme minimal wird (daher stammt auch der Name Methode der kleinsten Quadrate). Ein typischer Anwendungsfall der linearen Methode der kleinsten Quadrate ist die Bestimmung eines Ausgleichspolynoms durch vorgegebene Messpunkte. Zur Bestimmung einer Kennlinie y = g(u) werden n Messpunkte aufgenommen. Die Eingangsgren ui werden o im Vektor u = [u1 . . . un ] und die Messwerte yi im Vektor y = [y1 . . . yn ] abgelegt. Die Kennlinie soll durch ein Polynom m-ter Ordnung approximiert werden (m < n). Der Ansatz lautet: y i = a0 + a1 u i + a2 u 2 + . . . + am u m i i (7.39)

Jeder Messpunkt soll mglichst gut auf dem zu bestimmenden Ausgleichspolynom lieo gen. Das lineare Gleichungssystem, das dieses Problem beschreibt, kann analog zu Gleichung (7.36) formuliert werden. Die bentigten Matrizen ergeben sich dann zu: o a0 y1 1 u1 u2 um 1 1 a1 y2 1 u2 u2 um 2 2 x= . d= . (7.40) C=. . .. . . . . . . . . . 1 un u2 um n n am yn

7.6 Methode der kleinsten Quadrate (Least Squares)

261

Die Berechnung der optimalen Lsung des uberbestimmten Gleichungssystems gem o a (7.38) erfolgt durch den Matlab-Befehl \ (slash). Das Optimierungsproblem in Gleichung (7.37) kann auch analytisch gelst werden [31] und ist immer eindeutig, solange o n m gilt, d.h. solange die Anzahl der Gleichungen grer als die Anzahl der Polyo nomkoezienten ist. Im folgenden Beispiel sind im Messvektor u die Eingangsgren o einer Messreihe abgelegt. Die zugehrigen Messwerte sind im Vektor y abgelegt. Die o Wertepaare sind aus der Funktion y = 1 + 2u 0.1u2 + u3 (7.41)

durch Uberlagerung eines Rauschsignals erzeugt worden und in der Datei datensatz.mat gespeichert. Die optimalen Polynomkoezienten a0 bis a3 im Sinne von Gleichung (7.37) werden in Matlab durch die folgenden Befehle berechnet.
>> load datensatz.mat >> d = y; C = [ones(length(u),1), u, u.^2, u.^3]; >> x = C \ d x = 1.0008 2.0035 -0.0994 1.0008

Da es sich hier um ein lineares Optimierungsproblem handelt, existiert eine eindeutige, von Anfangswerten unabhngige Lsung. Die Abweichungen von den exakten Werten a o sind auf die verrauschten Messdaten zur ckzuf hren. u u F r die Lsung der linearen Methode der kleinsten Quadrate zur Berechnung von Polyu o nomkoezienten existiert der spezialisierte Befehl polyfit. Dieser bestimmt in absteigender Reihenfolge die Koezienten eines Ausgleichspolynoms n-ter Ordnung f r die u Datenpaare u und y(u). Die Lsung von Gleichung (7.41) mittels polyfit lautet: o
>> load datensatz.mat >> x = polyfit(u, y, 3) x = 1.0008 -0.0994 2.0035

1.0008

Wenn aus physikalischen Uberlegungen oder sonstigen Gr nden die Polynomkoezienu ten nur positiv sein d rfen, so erhlt man eine erste Nebenbedingung. Die erweiterte u a Problemstellung ist in Gleichung (7.42) angegeben. Man bezeichnet dies auch als nonnegative least squares. min C x d
x 2 2

f r u

x0

(7.42)

Die Berechnung der optimalen Lsung unter der Nebenbedingung x 0 erfolgt mit o dem Befehl lsqnonneg. Aufgrund der Nebenbedingung knnen in der zu minimiereno den Fehlerche mehrere lokale Minima auftreten. Hier kann deshalb optional ein Starta wert angegeben werden; entfllt die Angabe eines Startwertes, wird der Ursprung als a Anfangsbedingung verwendet. Die Befehls-Syntax lautet:
x = lsqnonneg(C,d,x0,options) [x,resnorm,residual,exitflag] = lsqnonneg(C,d,x0,options)

262

7 Optimierung Optimization Toolbox

x enthlt den optimalen Ergebnisvektor, in der Variablen resnorm wird die quadriera te euklidsche Norm norm(C*x-d)^2 des Restfehlers ausgegeben, residual enthlt den a Restfehler d-C*x und exitflag gibt Aufschluss uber die Abbruchbedingung des Algo rithmus. Die Bedeutung der Werte von exitflag ist in Tab. 7.10 zusammengefasst.
Tab. 7.10: Bedeutung von exitflag bei lsqnonneg

Wert >0 0

Beschreibung Konvergenz auf eine Lsung o Anzahl der Iterationen uberschritten

Angewandt auf obiges Beispiel in Gleichung (7.41) ergibt sich als Optimum f r die u Polynomkoezienten unter Ber cksichtigung der Nebenbedingung x 0: u
>> d = y; C = [ones(length(u),1), u, u.^2, u.^3]; >> x0 = [1 1 1 1]; options=optimset(@lsqnonneg); >> options=optimset(options,Display,final); >> [x,resnorm] = lsqnonneg(C,d,x0,options) Optimization terminated. x = 0.6928 2.0035 0 1.0008 resnorm = 4.7689

Soll kein Anfangswert angegeben werden, kann x0=[] gesetzt werden. Die Beurteilung dieses Ergebnisses im Vergleich zum optimalen Ergebnis ohne Nebenbedingung kann durch Berechnung von dessen Norm erfolgen.
>> norm(C*lsqnonneg(C,d,x0,options)-d) Optimization terminated. ans = 2.1838 >> norm(C*(C\d)-d) ans = 0.3779

In den vorstehenden Matlab-Befehlen wurde die Norm des Ergebnisses der nonnegative least squares-Optimierung und die Norm des Ergebnisses ohne Nebenbedingung berechnet. Auf diese Weise steht ein Ma zur Beurteilung der Qualitt des erzielten a Ergebnisses zur Verf gung. norm berechnet die euklidsche Norm (nicht deren Quadrat); u um den Wert von resnorm zu erhalten, muss das Ergebnis von norm noch quadriert werden. Zur Ber cksichtigung von allgemeineren Gleichungs- und Ungleichungsnebenbedingunu gen kann der Befehl lsqlin verwendet werden. Dieser ist auf Optimierungsprobleme

7.6 Methode der kleinsten Quadrate (Least Squares) gem den Gleichungen (7.43) bis (7.46) anwendbar. a min C x d
x 2 2

263

(7.43)

unter den Nebenbedingungen Ax b Aeq x = beq lb x ub (7.44) (7.45) (7.46)

C, d, A, b, Aeq und beq sind konstante Matrizen bzw. Vektoren. lb und ub stellen untere und obere Grenzen f r x dar. Der Aufruf der Optimierungsroutine erfolgt durch u den Befehl:
[x,resnorm,residual,exitflag] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)

Nicht bentigte Argumente von lsqlin werden dabei durch [] ersetzt. Die Bedeutung o der R ckgabewerte entspricht denen des Befehls lsqnonneg. Die Bedeutung der Werte u von exitflag enthlt Tab. 7.11. a
Tab. 7.11: Bedeutung von exitflag bei lsqlin

Wert 1 3 0 2 4 7

Beschreibung Konvergenz auf eine Lsung o Vernderung des Residuums kleiner als Toleranz a Anzahl der Iterationen uberschritten Die Problemstellung ist unplausibel Ung nstige Konditionierung verhindert weitere Optimierung u Betrag der Suchrichtung kleiner als Toleranz

Als Beispiel soll wieder das Ausgleichspolynom 3. Ordnung zum Eingangsvektor u und zum Messvektor y betrachtet werden. Zustzlich wird die Nebenbedingung a x1 + x2 = 3 (7.47)

ber cksichtigt (diese ist f r die exakte Lsung auch erf llt). Mit den Matrizen Aeq und u u o u beq wird schlielich die Form (7.45) erreicht. Aeq = 1 1 0 0 beq = 3 (7.48)

Zu beachten ist hier, dass vier unbekannte Parameter gesucht werden, so dass die Maa trix Aeq mit Nullen ergnzt werden muss. Die Optimierungsroutine wird durch die nachfolgende Befehls-Sequenz gestartet.

264

7 Optimierung Optimization Toolbox

>> d = y; C = [ones(length(u),1), u, u.^2, u.^3]; >> x0 = [4 -1 1 1]; options=optimset(@lsqlin); >> options=optimset(options,Display,final,LargeScale,off); >> Aeq = [1 1 0 0]; beq = [3]; >> [x,resnorm] = lsqlin(C,d,[],[],Aeq,beq,[],[],x0,options) Optimization terminated. x = 0.9986 2.0014 -0.0990 1.0011 resnorm = 0.1431

Die Polynomkoezienten x1 und x2 erf llen die Nebenbedingung (7.47). Durch die u Vorgabe von Gleichungs- oder Ungleichungsnebenbedingungen knnen gegebene physio kalische Zusammenhnge mit in die Optimierungsroutine eingebracht werden. a Wenn Messdaten nicht durch ein Polynom sondern eine beliebige nichtlineare Funktion approximiert werden sollen, spricht man von nichtlinearem curve tting. Allgemein handelt es sich dabei um ein Problem der Form: min F (x, xdata ) ydata
x 2 2 n

= min
x i=1

(F (x, xdata,i ) ydata,i )

(7.49)

xdata und ydata sind Messdatenvektoren, die durch die vektorwertige Funktion F (x, xdata ) approximiert werden sollen. Im Vektor x sind die zu optimierenden Parameter der Funktion F zusammengefasst. Die Lsung des Optimierungsproblems aus o Gleichung (7.49) erfolgt in Matlab mit dem Befehl lsqcurvefit. Der Aufruf erfolgt durch:
[x,resnorm,residual,exitflag]=lsqcurvefit(@funktion,x0,xdata,ydata,lb,ub,options)

Die Denition der Ausgleichsfunktion funktion hat das folgende Format:


function F = funktion(x,xdata) F = ... % abhngig von den Parametern x und den Eingangsdaten xdata a

Zustzlich knnen neben den Datenvektoren xdata und ydata und dem Startwert x0 a o f r die Optimierungsroutine auch die Nebenbedingungen lb und ub als Bereichsgrenu zen f r den Parametervektor x ubergeben werden. Uber die Variable options erfolgt u in gewohnter Weise die Steuerung des Optimierungsalgorithmus (siehe Kap. 7.2). Die Bedeutung der Werte von exitflag ist in Tab. 7.12 zusammengefasst. Die Problemstellung und deren Lsung soll nun anhand eines praktischen Beispiels aufo gezeigt werden. Ein technischer Prozess wird durch einen Impuls am Eingang angeregt. Zu den Zeitpunkten t = [t1 . . . tn ] wird der zugehrige Prozessausgang y = [y1 . . . yn ] o aufgezeichnet. Durch Messrauschen sind die Werte y gestrt. Es wird vorausgesetzt, o dass ungefhre Kenntnis uber den Prozessantwortverlauf vorliegt, z.B. durch grasche a Analyse. Die betrachtete Prozessantwort ist in Abb. 7.7 dargestellt. Sie wird im Zeitbereich als abklingende Sinus-Schwingung mit den unbekannten Parametern K, T und

7.6 Methode der kleinsten Quadrate (Least Squares)

265

Tab. 7.12: Bedeutung von exitflag bei lsqcurvefit

Wert 1 2 3 4 0 1 2 4

Beschreibung Konvergenz auf eine Lsung o Vernderung in x kleiner als Toleranz a Vernderung des Residuums kleiner als Toleranz a Betrag der Suchrichtung kleiner als Toleranz Anzahl der Iterationen uberschritten Abbruch durch die Output-Funktion Die Problemstellung ist unplausibel Ung nstige Konditionierung verhindert weitere Optimierung u

angesetzt. y(t) = K et/T sin(t) (7.50)

Die Messvektoren t und y sind bereits aus einer Messung vorhanden und in der Datei datensatz_curve.mat gespeichert. Die Ausgleichsfunktion wird hier aufgrund ihrer Einfachheit als inline object deniert. Die optimalen Parameter K, T und sind im Vektor x zusammengefasst und werden durch die folgenden Befehle bestimmt.
>> load datensatz_curve.mat >> f_fit = inline(x(1).*(exp(-xdata./x(2)).*sin(x(3).*xdata)),x,xdata); >> x0 = [1 1 4]; options = optimset(@lsqcurvefit); >> options = optimset(options,Algorithm,levenberg-marquardt,Display,final); >> [x,resnorm] = lsqcurvefit(f_fit,x0,t,y,[],[],options) Optimization terminated: the relative change in the sum-of-squares of the functions is less than options.TolFun x = 2.5158 1.9949 6.2752 resnorm = 0.6391

2 1 y(t) 0 1 2

4 Zeit [s]

10

Abb. 7.7: Prozessantwort nach einer Impulsanregung

266

7 Optimierung Optimization Toolbox

Es ergibt sich demnach K = 2.499, T = 2.011 und = 6.283 (die exakten Werte ohne Messrauschen wren K = 2.5, T = 2 und = 2). Dieses Beispiel zeigt, dass a mit der Optimierungsroutine lsqcurvefit die Parameter nichtlinearer Funktionen aus verrauschten Messdaten extrahiert werden knnen. Es ist zu beachten, dass sowohl die o Lsung als auch die Konvergenzgeschwindigkeit vom gewhlten Startwert x0 abhngen. o a a Als Erweiterung der linearen Methode der kleinsten Quadrate gem Gleichung (7.37) a soll nun ein nichtlineares least squares-Verfahren behandelt werden. Hierbei handelt es sich um den allgemeinsten Fall der Methode der kleinsten Quadrate. Ein ausf hrliches u Anwendungsbeispiel hierzu folgt in Kap. 7.7. Ziel der nichtlinearen Methode der kleinsten Quadrate ist die Optimierung einer nichtlinearen vektorwertigen Funktion F (x) mit den freien Parametern x gem Gleia chung (7.51). min F (x)
x 2 2 n

= min
x i=1

Fi (x)2

(7.51)

Zur Lsung von Optimierungsproblemen wie in Gleichung (7.51) stellt die Optimizatio on Toolbox den Befehl lsqnonlin zur Verf gung. Die quadratische Summe aus Gleiu chung (7.51) wird nicht explizit berechnet, stattdessen wird eine vektorwertige Funktion F (x) an lsqnonlin ubergeben. Der Aufruf lautet
[x,resnorm,residual,exitflag] = lsqnonlin(@funktion,x0,lb,ub,options)

wobei funktion die vektorwertige Funktion darstellt. Neben dem Startwert x0 der Optimierungsroutine und den Optionen, knnen untere und obere Grenzen f r die Pao u rameter x angegeben werden. Nicht bentigte Argumente werden durch [] ergnzt. Bei o a der Wahl der Anfangswerte muss auch ber cksichtigt werden, dass immer nur lokale u Minima bestimmt werden knnen. Die Bedeutung des R ckgabewerts exitflag ist in o u Tab. 7.13 erklrt. a
Tab. 7.13: Bedeutung von exitflag bei lsqnonlin

Wert 1 2 3 4 0 1 2 4

Beschreibung Konvergenz auf eine Lsung o Vernderung in x kleiner als Toleranz a Vernderung des Residuums kleiner als Toleranz a Betrag der Suchrichtung kleiner als Toleranz Anzahl der Iterationen uberschritten Abbruch durch die Output-Funktion Die Problemstellung ist unplausibel Linienoptimierung kann Ergebnis nicht verbessern

7.7 Optimierung eines Simulink-Modells

267

Methode der kleinsten Quadrate (MKQ, Least Squares) \ (slash) lineare MKQ ohne Nebenbedingungen x=polyfit(u,y,n) Koezienten eines Ausgleichspolynoms [x,resnorm,res,exit]=lsqnonneg(C,d,x0,options) lineare MKQ mit x 0 [x,resnorm,res,exit]=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options) lineare MKQ mit Nebenbedingungen [x,resnorm,res,exit]=lsqcurvefit(@funktion,x0,xdata,ydata, lb,ub,options) nichtlineares curve tting [x,resnorm,res,exit]=lsqnonlin(@funktion,x0,lb,ub,options) nichtlineare MKQ

7.7

Optimierung eines Simulink-Modells

Alle Befehle zur Minimierung nichtlinearer vektorwertiger Funktionen sind grundstza lich zur Optimierung von Parametern eines Simulink-Modells geeignet. Die Erstellung eines Simulink-Modells wird detailliert in den Kap. 8 bis 10 behandelt. Als Anwendung des Befehls lsqnonlin soll die Optimierung der Reglerparameter Kp , KI und Kd eines PID-Reglers mithilfe der Methode der kleinsten Quadrate behandelt werden. Die quadratische Fehlersumme der Systemantwort auf einen Einheitssprung soll innerhalb eines vorgegebenen Zeitintervalls mglichst klein werden. Die Sprungantwort g(t, x) des Syso tems ist nichtlinear von der Zeit und von den gesuchten Reglerparametern x abhngig. a Wenn das System in Simulink simuliert wird, so kann man zu jedem Integrationsschritt den Systemausgang aufzeichnen lassen. Je nach eingestellten Reglerparametern x wird sich ein unterschiedliches Ausgangssignal y(t, x) ergeben. Fasst man die einzelnen Aba tastschritte yi (x) = y(ti , x) zum Ausgangsvektor y(x) zusammen, so erhlt man eine vektorwertige Funktion, die von lsqnonlin minimiert werden kann. Bei einem konstanten Sollwert yref und n Integrationsschritten ergibt sich die zu minimierende Funktion F (x) zu: y1 (x) yref y2 (x) yref F (x) = (7.52) . . . yn (x) yref Die im Sinne der Methode der kleinsten Quadrate optimalen Reglerparameter x knnen o dann mit lsqnonlin bestimmt werden.
x = lsqnonlin(@funktion,x0,lb,ub,options)

Die Matlab-Funktion funktion enthlt die Denition von F (x) gem Gleia a chung (7.52). Als Beispiel wird das in Abb. 7.8 dargestellte schwingungsfhige System a

268

7 Optimierung Optimization Toolbox

3. Ordnung mit Sttigung und Anstiegsbegrenzung betrachtet. Die Sttigung ist auf 8, a a
4 s3+2.5s2+3s+4.6 Saturation Rate Limiter Plant

1 u

1 y

Abb. 7.8: Regelstrecke als Simulink-Modell

der Anstieg auf 3 begrenzt. Der Prozess in Abb. 7.8 soll durch einen PID-Regler geregelt werden, wobei die Reglerkoezienten noch unbekannt sind. Die Regelungsstruktur ist in Abb. 7.9 dargestellt. Da die Optimization Toolbox nur Funktionen minimieren

1 reference

PID PID Controller

1 yout

Plant

Abb. 7.9: Regelungsstruktur fr die Strecke aus Abb. 7.8 u

kann, muss nun eine Funktion erstellt werden, die den Fehler (Dierenz zwischen Sollund Istwert) f r alle Simulationszeitpunkte zur ckliefert. Diese Funktion erhlt als Aru u a gumente die drei Koezienten eines PID-Reglers, ruft das Simulink-Modell simopt.mdl (Abb. 7.9) auf und berechnet den Fehlervektor, welcher anschlieend von lsqnonlin minimiert wird. Die entsprechende Funktion lautet:
function F = simopterror(x) Kp = x(1); % Variablennamen in die des Simulink-Modells umbenennen KI = x(2); Kd = x(3); % Optionen fr Simulink-Modell setzen, Workspace auf den der Funktion u % simopterror.m setzen opt=simset(solver,ode5,SrcWorkspace,Current); % Simulation von simopt.mdl im Intervall 0..10 s starten [tout,xout,yout] = sim(simopt,[0 10],opt); F = yout - 1; % Fehlersignal berechnen; Sollwert ist 1

Die Umbenennung der Reglerparameter ist notwendig, da im Simulink-Modell die Bezeichnungen Kp, KI und Kd verwendet werden. Mittels simset werden Optionen an das Simulink-Modell ubergeben. Insbesondere wird durch simset(SrcWorkspace,Current) erreicht, dass die Simulation im Workspace der Funktion simopterror abluft. Dies ist f r die Verwendung der Variablen Kp, KI und a u Kd durch das Simulink-Modell ntig. Die Matlab-Funktion simopterror kann nun mit o der Optimierungsroutine lsqnonlin bez glich der Reglerparameter x(1)=Kp, x(2)=KI u und x(3)=Kd minimiert werden. Hinsichtlich des Rechenaufwands ist zu beachten, dass

7.7 Optimierung eines Simulink-Modells

269

bei jedem Funktionsaufruf von simopterror das Simulink-Modell simopt simuliert werden muss. Der Aufruf der Optimierung erfolgt durch das folgende Matlab-Skript:
% opt_simopt.m % Optimierung des Simulink-Modells simopt.mdl durchfhren u x0=[1, 1, 1]; % Anfangswerte der Reglerparameter options = optimset(Algorithm,levenberg-marquardt,Display,final,... TolX,0.01,TolFun,0.01); x = lsqnonlin(@simopterror,x0,[],[],options) % Optimierung starten % Variablen wieder umbenennen Kp = x(1); KI = x(2); Kd = x(3);

Die Ausgabe des Befehls lsqnonlin lautet dann:


>> opt_simopt Optimization terminated: the relative change in the sum-of-squares of the functions is less than options.TolFun x = 2.2444 1.6018 1.9923

Nach erfolgreicher Optimierung wird das Simulink-Modell nochmals gestartet, um das Regelergebnis mit dem des ungeregelten Systems zu vergleichen. Die Erhhung der o Dmpfung in der Sprungantwort des geregelten Systems ist in Abb. 7.10 deutlich era kennbar. Bei nichtlinearen Systemen wie in Abb. 7.8 muss man stets beachten, dass die
1.5 1.5

1 yout yout 0.5

0.5

4 t [s]

10

4 t [s]

10

Abb. 7.10: Sprungantwort des ungeregelten (links) und des geregelten Systems nach der Optimierung der Reglerparameter (rechts)

im Sinne der least squares-Optimierung berechneten Parameter von der Sprunghhe o des Sollwerts abhngen, da die Anstiegsbegrenzung und die Sttigung dann verschiea a den stark wirksam werden.

270

7 Optimierung Optimization Toolbox

7.8
7.8.1

Ubungsaufgaben
Nullstellenbestimmung
2

Bestimmen Sie die Nullstellen der Funktion f (x) = ex x2 + x. Stellen Sie zur Bestimmung der Suchintervalle die Funktion im Intervall x = [1 . . . 2] grasch dar.

7.8.2

Losen von Gleichungssystemen


3x1 4x2 + 5x3 = 1 3x1 + 4x2 + x3 = 4 5x1 x2 3x3 = 0

1. Lsen Sie das lineare Gleichungssystem o

2. Lsen Sie das folgende nichtlineare Gleichungssystem mit dem Befehl fsolve. o Verwenden Sie bei der Lsung die Jacobi-Matrix, um die Zahl der Funktionsauso wertungen zu reduzieren. x1 ex2 = 0 x2 + ex1 = 0 (7.53)
2

7.8.3

Minimierung ohne Nebenbedingungen


2

1. Bestimmen Sie die Minima und Maxima der Funktion f (x) = x2 5 ex mithilfe des Befehls fminbnd. Stellen Sie zur Festlegung der Suchintervalle die Funktion im Bereich x = [2.5 . . . 2.5] grasch dar. 2. Bestimmen Sie 2das Minimum und die drei Maxima der Funktion 2 f (x) = 10 ex1 x2 (x3 + x2 + 0.5) 1 2 ohne Ber cksichtigung von Nebenbedingungen mittels des Befehls fminunc. Stelu len Sie zur Festlegung der Startwerte der Optimierungsalgorithmen die Funktion im Bereich x1 = [3 . . . 3], x2 = [3 . . . 3] grasch dar.

7.8.4

Minimierung unter Nebenbedingungen

Bestimmen Sie das globale Minimum der Funktion aus Aufgabe 7.8.3.2 unter der Gleichungsnebenbedingung x2 /1.252 +(x2 +1)2 /22 = 1 mithilfe des Befehls fmincon. Stellen 1 Sie die Nebenbedingung projiziert auf die Funktion aus Aufgabe 7.8.3.2 im selben Bild dar. Daraus lsst sich ein passender Startwert f r die Optimierung ablesen. a u Hinweis: Bei der Nebenbedingung handelt es sich um eine Ellipse mit der Parameterdarstellung x1 (t) = 1.25 sin(t), x2 (t) = 2 cos(t) 1, t = 0 . . . 2.

7.8 Ubungsaufgaben

271

7.8.5

Ausgleichspolynom

Der Datensatz ausgl_daten.mat (siehe beigefgte CD-ROM) enthlt verrauschte u a Messdaten einer Kennlinie y(u). Bestimmen Sie die Koezienten eines Ausgleichspolynoms 1., 3. und 5. Ordnung. Welche Ordnung ist Ihrer Meinung nach ausreichend? F r Interessierte: Lsen Sie diese Aufgabe mit dem Befehl polyfit. u o

7.8.6

Curve Fitting

Der Datensatz curve_daten.mat (siehe beigefgte CD-ROM) enthlt die Impulsantu a wort y(t) eines gedmpften schwingungsfhigen Systems. Es ist bekannt, dass in der a a Impulsantwort genau zwei Frequenzen enthalten sind und dass die Schwingung abklingend ist. Bestimmen Sie aus dem Messdatensatz mittels des Befehls lsqcurvefit die Parameter x = [T 1 2 1 2 ] der Ausgleichsfunktion y = f (x, t) = et/T (sin(1 t 1 ) + sin(2 t 2 )). Hinweis: Verwenden Sie als Startwert f r die Optimierung den Vektor x0 = [2 4 10 1 2]. u

7.8.7

Lineare Programmierung

In dieser Aufgabe soll ein optimaler Terminplan f r einen Produktionsprozess ermittelt u werden (Netzplantechnik). Die Produktion besteht aus sieben Arbeitsschritten a1 bis a7 , wobei a1 den Beginn und a7 das Ende mit den Ausf hrungszeiten d1 = d7 = 0 kennu a zeichnet. Alle anderen Arbeitsschritte mit den jeweiligen Dauern di und Abhngigkeiten sind im Netzplan in Abb. 7.11 dargestellt.
t2

a2
t1=0 d2=2 t4 t3 t6 t7

a1
d1=0

a6
d6=4

a7
d7=0

a4
d4=3 t5

a3
d3=3

a5
d5=2
Abb. 7.11: Netzplan des Produktionsprozesses

Es sollen mittels eines linearen Programms die optimalen Anfangszeitpunkte ti der einzelnen Arbeitsschritte ai ermittelt werden, so dass die Gesamtdauer der Herstellung

272

7 Optimierung Optimization Toolbox

minimal wird. Die Zielfunktion ergibt sich damit zu: f (t) = gT t = t7 mit t = [ t1 t2 t3 t4 t5 t6 t7 ]T (7.54)

Ferner ist zu beachten, dass alle Startzeitpunkte positiv sein m ssen und ein Arbeitsu schritt erst dann beginnen kann, wenn der vorhergehende Arbeitsschritt bereits abgeschlossen ist. F r den Arbeitsschritt a5 bedeutet dies, dass die Gleichung t5 t3 d3 u gelten muss. Allgemein m ssen also noch Ungleichungsnebenbedingungen der folgenden u Form gelten: tj ti dj (7.55)

Berechnen Sie nun die optimalen Anfangszeitpunkte ti und die minimale Produktionszeit. Ist das Ergebnis eindeutig?

Simulink Grundlagen

Simulink ist eine Blockset -Erweiterung von Matlab zur Modellierung, Simulation und Analyse dynamischer Systeme. Die grasche Bedienoberche erlaubt die Erstellung a des betrachteten Systems in der ubersichtlichen und intuitiv zugnglichen Form eines a Signalussplans bestehend aus verkn pften Funktionsblcken. Eine textorientierte (und u o damit hug auch un bersichtlichere) Programmierung der Dierential- und Dierena u zengleichungen bleibt dem Benutzer somit erspart. In einer umfangreichen Bibliothek stellt Simulink eine groe Anzahl vorgefertigter Funktionsblcke f r lineare, nichtlineao u re, diskrete und hybride Systeme zur Verf gung. Auch eigene Blcke und Bibliotheken u o knnen erstellt werden. o In diesem Kapitel werden die grundlegenden Eigenschaften von Simulink behandelt, wie das Erstellen und Arbeiten mit einem Simulationsmodell. Dar ber hinaus werden die u grundlegenden Simulink-Bibliotheken vorgestellt und deren wichtigste Blcke besproo chen. Nach der Erstellung des zu untersuchenden Modells in Simulink durch die Verknpfung u der bentigten Funktionsblcke wird die Simulation gestartet. Whrend der Simulation o o a knnen die Signale an beliebigen Stellen im Signalussplan des Modells abgegrien und o dargestellt werden. Genauso knnen Signale aber auch f r die grasche Darstellung, o u Aufbereitung und Weiterbearbeitung in Matlab gespeichert werden. Auch eine Belegung und Vernderung der Parameter aller Funktionsblcke ist direkt oder von Matlab a o aus mglich. F r die Analyse von Simulationsergebnissen knnen sowohl simulinkeigene o u o Werkzeuge als auch jederzeit alle durch Matlab und dessen Toolboxen zur Verf gung u gestellten Analysewerkzeuge verwendet werden.

8.1

Starten von Simulink

Bevor mit Simulink gearbeitet werden kann, muss Matlab, wie unter Kap. 2.1 beschrieben, gestartet werden. Bei UNIX-basierten Betriebssystemen erscheint nach Eingabe des Befehls simulink im Matlab-Command-Window das Fenster der Bausteinbibliothek Library: simulink, Abb. 8.1. Wer unter Windows arbeitet, startet Simulink entweder durch Linksklick auf das Simulink-Icon in der Toolbar des Matlab-CommandWindow oder durch Eingabe von simulink. Es net sich der Simulink Library Browo ser, Abb. 8.2, von dem aus die Bausteinbibliothek aus Abb. 8.1 per Rechtsklick auf in der linken Fensterhlfte genet werden kann. a o Die Bausteine der Unterbibliotheken Sources, Sinks, Math Operations, Logic and Bit Operations, Signal Routing, Signal Attributes und Ports & Subsystems (Signalerzeugung, -ausgabe, Mathematische Verkn pfungen, Logik- und Bit-Operationen, Signalf hrung u u

274

8 Simulink Grundlagen

Abb. 8.1: Fenster der Simulink-Bausteinbibliothek

Abb. 8.2: Simulink Library Browser fr Matlab unter Windows u

und -eigenschaften, Subsysteme) werden in diesem Kapitel behandelt. Die Bausteine unter Continuous, Discontinuities, Lookup Tables, User-Dened Functions, Model Verication und Model-Wide Utilities folgen in Kap. 9, die Funktionsblcke in Discrete werden in o

8.1 Starten von Simulink

275

Kap. 10 behandelt. Durch Links-Doppelklick auf ein Bibliotheks-Icon (z.B. ) werden in der rechten Fensterhlfte des Library Browsers (bzw. bei Verwendung der Bausteina bibliothek Abb. 8.1 in einem neuen Fenster) die in dieser Unterbibliothek enthaltenen Standard-Funktionsbausteine angezeigt. Nun knnen sie, wie im folgenden erklrt, o a durch Drag & Drop mit der linken Maustaste in ein Simulationsfenster hineinkopiert werden. Simulink-Demos Um die Eigenschaften der verschiedenen Funktionsbausteine und die Einsatzmglicho keiten von Simulink kennen zu lernen, steht dem Benutzer ein breites Spektrum an Beispielmodellen (Simulink-Demos) aus vielen Anwendungsgebieten zur Verf gung. Die u Simulink-Demos sind erreichbar durch Links-Klick auf die Schaltche a im linken unteren Eck des Matlab-Command-Window und Auswahl von Simulink/Demos im erscheinenden Startmen . Ebenso knnen sie uber die Bausteinbibliothek aus u o Abb. 8.1 oder vom Simulink Library Browser aus uber die Simulink Online-Hilfe (Men Help/Simulink Help) genet werden. Es stehen zahlreiche, gut dokumentierte u o Modelle zu unterschiedlichsten Aufgabenstellungen u.a. aus den Bereichen Automotive und Aerospace zum Ausprobieren bereit. Eigenschaften der Funktionsbausteine Alle Funktionsbausteine sind nach einem einfachen Muster, wie in Abb. 8.3 dargestellt, aufgebaut. Jeder Block hat einen oder mehrere Ein- und Ausgnge (Ausnahmen a sind u.a. Blcke der Sources- und Sinks-Bibliothek), einen Namen, und innerhalb des o Block-Rechtecks wird das charakteristische Merkmal des Blocks dargestellt (Ubertragungsfunktion, Kurvenverlauf, Dateiname etc.). Der Name kann vom Benutzer gendert a

Abb. 8.3: Simulink Funktionsbaustein

werden (Links-Doppelklick auf den Namen), jeder Name darf jedoch nur einmal pro Modellebene (siehe Kap. 8.9) vergeben werden. Bei Links-Doppelklick auf den Block wird die Block Parameters Dialogbox genet (Ausnahmen sind z.B. Scope, Slider Gain, o Subsystem, S-Function Builder), in der die spezischen Parameter des Blocks eingestellt werden knnen (Default-Werte sind vorgegeben), wie z.B. Amplitude, Frequenz oder o Phase in Abb. 8.4. Zur Eingabe der Parameter knnen Zahlenwerte oder Namen von o im Matlab Workspace denierten Variablen verwendet werden. Auch alle zulssigen a Matlab-Ausdr cke sind verwendbar; sie werden whrend der Simulation ausgewertet. u a Genderte Parameter-Einstellungen knnen durch Klick auf den OK -Button (Fenster a o wird geschlossen) oder den Apply-Button (Fenster bleibt erhalten) ubernommen wer den. Source-Blcke haben keinen Apply-Button, sie m ssen vor Simulationsbeginn stets o u geschlossen werden. Ein Doppelklick auf den Help-Button net das Fenster der Onlineo Hilfe.

276

8 Simulink Grundlagen

Abb. 8.4: Block Parameters Dialogbox des Funktionsbausteins Sine Wave aus der Unterbibliothek Sources

Die spezischen Parameter eines Blocks knnen dar ber hinaus auch vom Matlabo u Command-Window aus uber den Befehl set param (siehe Kap. 8.3) eingestellt werden. Dies ist besonders bei der automatisierten Ausf hrung und Modikation von Simulinku Modellen n tzlich. u Ein Rechtsklick auf den Block net das zugehrige Kontextmen , in dem u.a. Befehle o o u zum Editieren und Formatieren des Blocks, aber auch die Block Properties Dialogbox angewhlt werden knnen. Die Block Properties Dialogbox ermglicht es, jedem Block a o o zustzliche individuelle Eigenschaften zuzuweisen, wie beschreibenden Text, Anmerkuna gen oder so genannte Callbacks, Funktionen oder Programme, die z.B. beim Initialisieren des Blocks oder Onen/Schlieen der Block Parameters Dialogbox ausgef hrt werden. u Callbacks existieren auch auf Modell-Ebene und werden in Kap. 8.8.1 behandelt. Simulink-Modelle Vom Fenster der Bausteinbibliothek (Library: simulink) bzw. vom Library Browser aus knnen neue Simulationsfenster durch den Men punkt File/New/Model (im Library o u Browser alternativ uber den Button ), oder bereits bestehende Simulink-Dateien durch das Men File/Open (Button u ) genet werden. Nun knnen per Drag & o o Drop mit der linken Maustaste Funktionsbausteine aus den gew nschten Bibliotheu ken geholt und im Simulationsfenster abgelegt und zu einem Blockdiagramm verknpft u werden. Eine Simulink-Datei erhlt beim Speichern (Men punkte File/Save bzw. Fia u le/Save As im Simulationsfenster) standardmig die Extension .mdl. Abb. 8.5 zeigt a die Men leiste eines neu geneten Simulationsfensters. Uber die Men s File, Edit u o u etc. kann das erstellte Blockdiagramm vollstndig kontrolliert werden. Die wichtigsten a Men punkte sind in der Toolbar als Icons besonders leicht zugnglich gemacht. u a

8.2 Erstellen und Editieren eines Signalussplans

277

Abb. 8.5: Menleiste und Toolbar eines Simulink-Modells u

8.2

Erstellen und Editieren eines Signalussplans

Simulink kann fast ausschlielich mit der Maus bedient werden. Durch einen Doppelklick auf eine der Unterbibliotheken des Library-Fensters werden die dort enthaltenen Funktionsblcke in einem eigenen Fenster angezeigt. Ein Doppelklick auf die Unterbibliotheken o (im rechten Fensterteil) des Library Browsers zeigt die enthaltenen Blcke im gleichen o Fenster an. Aus diesen Funktionsblcken kann der gew nschte Signalussplan aufgebaut o u werden. Zum Formatieren und Editieren stehen folgende Mglichkeiten zur Verf gung: o u Kopieren: Drag & Drop mit der rechten Maustaste kopiert einen Block (auch in ein anderes Fenster). Verschieben: Mit der linken Maustaste kann ein Block innerhalb eines Fensters positioniert werden. o o Markieren: Mit der linken Maustaste knnen Blcke durch einzelnes Anklicken ausgewhlt werden, oder es kann um mehrere Blcke ein Auswahlrahmen gezogen werden. a o Vergrern/Verkleinern: Markierte Blcke knnen durch Ziehen an einer Ecke mit o o o der linken Maustaste in ihrer Gre verndert werden. o a Lschen: Markierte Blcke und Linien werden uber den Men befehl Edit/Clear geo o u lscht (oder Taste Del/Entf). Mit Edit/Undo bzw. der Tastenkombination Ctrl+Z o knnen einzelne Bearbeitungsschritte r ckgngig gemacht werden. o u a Subsysteme: Es knnen zusammenhngende Teilsysteme markiert und uber den o a Men punkt Edit/Create Subsystem zu einem Subsystem zusammengefasst werden (sieu he Kap. 8.9.1). Verbinden zweier Blcke: Weg 1: Klicken Sie mit der linken Maustaste auf den Auso gang eines Blocks (auerhalb dessen Rand) und ziehen Sie die Maus bei gedr ckter u Taste bis zu einem Blockeingang. Nach dem Loslassen wird automatisch eine Verbindungslinie erzeugt. Weg 2: Aktuellen Block markieren, Taste Strg/Ctrl gedr ckt u halten und Zielblock mit linker Maustaste anklicken die Blcke werden automatisch o verbunden. Signalverzweigung: Ein Signal kann verzweigt werden, indem man mit der rechten Maustaste auf eine bereits bestehende Verbindunglinie klickt und bei gedr ckter Taste u von dort eine Verbindungslinie zu einem Blockeingang zieht. Verschieben einer Linie: F r mehr Ubersichtlichkeit kann eine Verbindungslinie u nachtrglich verschoben werden. Mit der linken Maustaste knnen Eckpunkte beliebig a o und Geradenst cke parallel verschoben werden. u

278

8 Simulink Grundlagen

Erzeugen von Vektorlinien: Zur einfacheren Unterscheidung zwischen Pfaden, die skalare Signale f hren und Pfaden, die Signale im Vektor(1-D)- oder Matrixu bzw. Array(2-D)-Format (Kap. 8.4.1) f hren, kann durch Auswahl des Men punkts u u Format / Port/Signal Displays / Wide Nonscalar Lines die Liniendicke der nichtskalaren Signale vergrert werden. o Anzeige von Signaldimension und -datentyp: Der Men punkt u Format / Port/Signal Displays / Signal Dimensions zeigt die Dimension (Kap. 8.4.1) des auf einer Verbindungslinie gef hrten Signals an, mit Format / Port/Signal u Displays / Port Data Types wird zustzlich der Datentyp (Kap. 8.4.1) des Signals an a der Verbindungslinie mitangezeigt. Formatieren eines Blocks: Nach Klick mit der rechten Maustaste auf einen Block erscheint das zugehrige Kontextmen des Blocks. Unter Format nden sich Mglichkeio u o ten zur Einstellung von Schriftart und -gre sowie zur Positionierung des Blocknamens, o Kippen und Drehen des Blocks. Mit Foreground Color und Background Color knnen o Umrisse und Hintergrund der Blcke farblich markiert werden. o Formatieren einer Linie: Nach Klick mit der rechten Maustaste auf eine Verbindungslinie erscheint das zugehrige Kontextmen der Verbindungslinie bzw. des auf ihr o u gef hrten Signals. Hier stehen Befehle zum Ausschneiden, Kopieren und Lschen der u o Linie zur Verf gung. u Block Properties Dialogbox: Unter Edit/Block Properties im Simulationsfenster oder mit Block Properties aus dem Block-Kontextmen erhlt man die Block Properu a ties Dialogbox, in der einige allgemeine Blockparameter gesetzt werden knnen. Zum o Beispiel kann man sich unter Block Annotation wichtige (auch blockinterne) Parameter (Block property tokens) automatisch unterhalb des Blocknamens anzeigen lassen, unter Callbacks kann zu vorgegebenen Block-Callback-Routinen (z.B. OpenFcn, CloseFcn) Matlab-Code eingetragen werden, der bei Ausf hrung der entsprechenden Aktion auf u den Block (z.B. Onen, Schlieen) ausgef hrt wird. u Signal Properties Dialogbox: Die Signal Properties Dialogbox einer Verbindungslinie bzw. eines Signals kann z.B. uber Auswahl von Signal Properties aus dem Kon textmen der Verbindungslinie aufgerufen werden. Hier kann u.a. der Name der Veru bindungslinie vergeben oder ein beschreibender Text eingegeben werden. F r die Veru gabe eines Signal-Namens gibt es allerdings auch einen sehr viel einfacheren Weg: Links-Doppelklick auf die Verbindungslinie schaltet in den Texteingabemodus f r den u gew nschten Signal-Namen um. Mittels der Signal Properties Dialogbox kann das Signal u auch whrend der Simulation auf den Matlab-Workspace geschrieben werden (siehe a Kap. 8.5.2).

8.3

Simulations- und Parametersteuerung

Durch Linksklick auf den Startbutton in der Toolbar des Modells bzw. Auswahl des Men punktes Simulation/Start wird die Simulation des programmierten Modells u gestartet. Whrend der Simulation kann uber den Button a (bzw. Simulation/Pause) die Simulation angehalten oder uber (bzw. Simulation/Stop) abgebrochen werden.

8.3 Simulations- und Parametersteuerung

279

Alternativ besteht auch die Mglichkeit, eine Simulation von der Matlabo Kommandozeile aus zu kontrollieren. Dies ist besonders dann sinnvoll, wenn Simulationslufe automatisch, also ohne manuelles Starten und Auswerten, abgearbeitet werden a u sollen. Dies kann mit den Befehlen sim oder set param ausgef hrt werden. Steuerung mit dem sim-Befehl Bei Verwendung des Befehls sim lautet der Aufruf:
[t,x,y] = sim(sys)

Sollen auch Simulationsparameter ubergeben werden, lautet der Aufruf:


[t,x,y] = sim(sys, timespan, options, ut)

Mit diesem Befehl knnen alle Optionen, die standardmig in die Register Solver und o a Data Import/Export der Conguration Parameters Dialogbox eingetragen werden, auch von Matlab aus gesteuert werden. Uber die Argumente auf der rechten Seite knnen die o Simulationszeit (t), die Zustnde (x) und die Ausgnge (y, Festlegung durch Outporta a Blcke auf der obersten Modellebene, siehe S. 330) des Modells aufgezeichnet wero den. F r die Parameter des sim-Befehls gilt: sys ist der Name des Simulink-Modells u (sys.mdl), [tStart tFinal] f r timespan deniert Start- und Stoppzeit der Simulation. u Der Parameter ut ermglicht das Einlesen vorhandener Daten in die Inport-Blcke des o o obersten Levels analog der Check Box Input im Register Data Import/Export der Conguration Parameters Dialogbox (siehe S. 311). Mithilfe des Arguments options knnen o wichtige Simulationsparameter wie Integrationsalgorithmus, Schrittweiten, Fehlertoleranzen, Rene-Faktor, Ausgabeoptionen etc. ubergeben werden. Die Erzeugung der Op tionenstruktur options (Format: structure!) erfolgt durch den Befehl:
options = simset(name1, value1, name2, value2, ...)

Die in der Conguration Parameters Dialogbox gesetzten Parameter werden dadurch nicht verndert, sondern nur beim durch sim angestoenen Simulationslauf auer Kraft a gesetzt. Mit
newopts = simset(oldopts, name1, value1, name2, value2, ...)

kann die bereits bestehende Optionenstruktur oldopts an den durch name1 , name2 etc. bestimmten Stellen modiziert werden. Bei Aufruf von simset ohne Argumente werden alle properties und ihre mglichen Werte ausgegeben. Mit o
oldopts = simget(sys)

erhlt man in der Variable oldopts die aktuelle Optionenstruktur options des Simulinka Modells sys.mdl, die mit simset oder uber die Conguration Parameters Dialogbox eingestellt wurde. Beispiel:
sim(sys,[ ], simset(simget(sys),Solver,ode23,MaxStep,0.01));

280

8 Simulink Grundlagen

setzt f r sys.mdl den Integrationsalgorithmus auf ode23 mit grter Schrittweite von u o 0.01 Sekunden. Mit [ ] f r timespan werden die in der Conguration Parameters Diau logbox gesetzten Werte f r Start- und Stoppzeit ubernommen. u Steuerung mit dem set param-Befehl Bei Verwendung des Befehls set param lautet der Aufruf:
set param(sys, SimulationCommand, cmd)

Mit diesem Befehl kann das Simulationsmodell mit dem Namen sys.mdl mit start bzw. stop f r cmd gestartet und gestoppt werden. Nach einer Pause (pause) kann mit u continue fortgefahren werden. Mit update kann ein Modell aktualisiert werden. Der aktuelle Status der Simulation des Modells sys kann mit
get param(sys, SimulationStatus)

abgefragt werden. Neben der Steuerung des Simulationsablaufs ermglicht der o set param-Befehl auch das Setzen von Simulations- und Blockparametern. Am Beispiel des Simulink-Modells bsp math.mdl (Abb. 8.20) soll verdeutlicht werden, wie mit a o set param beliebige Blockparameter verndert werden knnen:
set_param(bsp_math/Constant,Value,100) set_param(bsp_math/Sine Wave,Bias,1) set_param(bsp_math/Math Function,Function,log10)

setzt den Wert des Constant-Blocks von 80 auf 100 (vergl. Abb. 8.20!), im Sine Wave wird der Bias von 0 auf 1 gesetzt und in der Math Function wird anstelle der Exponentialfunktion die 10er-Logarithmusfunktion verwendet.

8.4
8.4.1

Signale und Datenobjekte


Arbeiten mit Signalen

Simulink versteht unter dem Begri Signale Daten, die whrend der Simulation eia nes Modells an den Ausgngen der Funktionsblcke erscheinen. Die Verbindungslinien a o zwischen den Funktionsblcken eines Blockdiagramms sind damit zu verstehen als grao sche Reprsentation der mathematischen Beziehungen zwischen den Signalen (d.h. den a Blockausgngen). a Signale in Simulink haben charakteristische Eigenschaften, die vom Benutzer festgelegt werden knnen, wie z.B. einen Namen (Kap. 8.2), eine Dimension (siehe unten), einen o Wertebereich, oder einen Datentyp (siehe unten). Zur ubersichtlicheren Handhabung von Signalen bietet Simulink die Datenobjekt-Klasse Simulink.Signal an, mit der ein Signal assoziiert werden kann (Kap. 8.4.2). In Simulink werden bei Signalen drei Dimensionen unterschieden: 1-D-Signale, hug auch als 1-D Arrays oder Vektoren bezeichnet, mit nur einer a Dimension, ihrer Lnge n a

8.4 Signale und Datenobjekte

281

2-D-Signale, hug auch als 2-D Arrays oder Matrizen bezeichnet, mit zwei Dia mensionen, [m n]. Darunter fallen auch Zeilen- ([1 n]) und Spaltenvektoren ([m 1]). multidimensionale Signale oder n-D Arrays mit mehr als zwei Dimensionen. Bei einem 3-D-Signal wird die nach Zeile und Spalte dritte Dimension als Seite (page in der Online-Hilfe) bezeichnet. Je nach Art knnen die Funktionsblcke Signale einer oder mehrerer Dimensionen an o o ihrem Eingang akzeptieren oder am Ausgang ausgeben. Mit den Blcken Mux und Bus Creator aus der Bibliothek Signal Routing (siehe o Kap. 8.8.3) knnen beliebig viele Signale zu so genannten composite-Signalen, also Vero bundsignalen zusammengefasst werden. Verbundsignale gleichen Kabelb ndeln, mit deu nen ein Simulink-Modell ubersichtlicher gestaltet werden kann. Der Multiplexer-Block Mux ist der (zwar sehr viel einfacherere) Vorgnger des Bus Creator, jedoch ist er bei a weitem nicht so leistungsfhig und sollte nur noch dann verwendet werden, wenn die a zusammenzufassenden Signale alle die gleichen Eigenschaften (v.a. gleiche Datentypen) haben. Der Ausgang eines Bus Creator wird als Signal-Bus bezeichnet. Unter einem virtuellen Signal versteht Simulink die grasche Reprsentation eines ana deren im Signalussplan weiter oben liegenden nichtvirtuellen Signals. Virtuelle Si gnale sind rein grasche Elemente und werden bei der Simulation und Codegeneration ignoriert. Whrend der Simulation verwendet Simulink die Routine signal propagation, a um ein virtuelles Signal zu seiner nichtvirtuellen Signalquelle zur ckzuverfolgen, d.h. u um herauszunden, welche Funktionsblcke am Ende tatschlich verbunden sind: In o a

1 2 3 Constant 3 4 5 4 5 6

1 [3x1] nvs1 2{9} vs1<nvs1, nvs2> [3x2] nvs2 [3x2] <nvs2> [3x1] <nvs1> Display 3 4 5 Display 1 Bus Selector
Selected signals : nvs1,nvs2

2 3

4 5 6

Constant 1

Bus Creator
Number of inputs = 2

Abb. 8.6: Beispiel zu virtuellen Signalen: bsp sigprop.mdl

Abb. 8.6 werden die nichtvirtuellen Signale nvs1 und nvs2 von den Blcken Constant o und Constant1 erzeugt und mithilfe eines Bus Creator zum neuen composite-Signal-Bus vs1 zusammengefasst. Mittels Bus Selector wird dieser anschlieend wieder in seine urspr nglichen Signalanteile zerlegt. vs1 ist standardmig ein virtuelles Signal, da es u a lediglich eine grasche Zusammenfassung von nvs1 und nvs2 darstellt. Die Ausgangssignale des Bus Selector sind ebenfalls virtuell, da sie nur ein grasches Abbild der Ursprungssignale nvs1 und nvs2 sind. Mithilfe der Routine signal propagation kann Simulink erkennen, dass vs1 aus nvs1 und nvs2 besteht (automatische Erweiterung des Signal-Labels vs1 um <nvs1,nvs2>) als auch, dass es sich bei den Ausgngen des a Bus Selectors eigentlich um nvs1 und nvs2 handelt (automatische Erzeugung der Signal-

282

8 Simulink Grundlagen

Label <nvs1> bzw. <nvs2>). Simulink erkennt also, dass eigentlich die Funktionsblcke o Constant bzw. Constant1 und Display bzw. Display1 direkt miteinander verkn pft sind. u Bei virtuellen Signalen steht in der Signal Properties Dialogbox die Option Show propagated signals zur Verf gung, die auf on oder all gesetzt die im Beispiel gezeigte u automatische Erweiterung des Signal-Labels um die enthaltenen bzw. dahinter stehenden Signale erzeugt. Neben den bisher beschriebenen Eigenschaften ist jedem Signal in Simulink auch ein bestimmter Datentyp zugewiesen, der unter anderem bestimmt, wie viel Speicher f r die u Darstellung des Signals alloziert wird. Simulink unterst tzt ebenfalls die von Matlab u unterst tzten Datentypen u double (double-precision oating point nach IEEE Standard 754, mit 64 bit Speicherbedarf pro Zahl) single (single-precision oating point nach IEEE Standard 754, mit 32 bit Speicherbedarf pro Zahl ) int8 , uint8 , int16, uint16, int32, uint32 (signed/unsigned 8-, 16- bzw. 32-bit integer). boolean (0 oder 1, wird intern als uint8 behandelt) Der Default-Datentyp eines Simulink-Modells ist double. Die Mglichkeit, den Dateno typ von Signalen und Blockparametern in Simulink zu spezizieren ist besonders dann sinnvoll, wenn aus einem Simulink-Modell ausf hrbarer Code f r Echtzeitanwendungen u u erzeugt werden soll, da der Speicherbedarf und damit die Ausf hrungsgeschwindigkeit u stark vom gewhlten Datentyp abhngen. a a

8.4.2

Arbeiten mit Datenobjekten

Simulink bietet die Mglichkeit an, Signale und Blockparameter mithilfe von so geo nannten Datenobjekten leichter zu handhaben und zu verwalten. Solche Datenobjekte knnen unter Verwendung der von Simulink zur Verf gung gestellten Datenobjekto u Klassen (wie z.B. Simulink.Signal oder Simulink.Parameter ) leicht erstellt werden. Eine Liste aller existierenden Simulink Datenobjekt-Klassen erhlt man mit der Sua che nach class summary in der Online-Hilfe. Mit dem Simulink Data Class Designer (Men Tools/Data Class Designer ) knnen auch eigene Datenobjekt-Klassen erstellt u o werden. Jedes Datenobjekt (hier die Variable param1 ) kann z.B. mit dem Model Explorer (Kap. 8.4.3), aber auch durch Zuweisung im Matlab-Command-Window erstellt werden:

8.4 Signale und Datenobjekte


param1= Simulink.Parameter param1 = Simulink.Parameter (handle) Value: [] RTWInfo: [1x1 Simulink.ParamRTWInfo] Description: DataType: auto Min: -Inf Max: Inf DocUnits: Complexity: real Dimensions: [0 0]

283

Durch Zuordnung zur Klasse Simulink.Parameter knnen der Variable param1 nicht nur o ein Wert, sondern auch wichtige zustzliche Eigenschaften (Wertebereich, Datentyp, a Dimension usw.) zugewiesen werden. Die Eigenschaften von param1 wie z.B. Wert, Einheit, Wertebereich knnen nun z.B. durch einfache Zuweisung o
param1.value = 0.2; param1.DocUnits = Hz; param1.Min = 0; param1.Max = 1 param1 = Simulink.Parameter (handle) Value: 0.2000 RTWInfo: [1x1 Simulink.ParamRTWInfo] Description: DataType: auto Min: 0 Max: 1 DocUnits: Complexity: real Dimensions: [1 1]

gesetzt bzw. verndert werden. Die Verwendung des Simulink.Parameter -Datenobjekts a param1 erfolgt wie eine gewhnliche Variable, die in der Block Parameters Dialogbox o (Kap. 8.1) beim gew nschten Parameter anstelle eines numerischen Werts eingetragen u wird. Die Erstellung von Simulink.Signal -Datenobjekten erfolgt analog. Die Zuordnung eines Signals zu einem Simulink.Signal -Datenobjekt (z.B. sig1 ) erfolgt hier jedoch uber die Signal Properties Dialogbox (Kap. 8.2): Signal name = sig1, Check Box Signal name must resolve to Simulink signal object aktivieren. Unter dem Men punktTools/Data Object Wizard kann der Data Object Wizard geu startet werden, mit Hilfe dessen die (mit einem Namen versehenen) Signale und Blockparameter eines Simulink-Modells automatisch auf ihre Zuordnung zu einem Datenobjekt untersucht werden knnen. F r nicht zugeordnete Signale und Parameter knnen dann o u o Datenobjekte erzeugt und eine Verkn pfung durchgef hrt werden. Der Data Object Wiu u zard ist vor allem dann sinnvoll, wenn wichtige Eigenschaften von Signalen und Blockparametern mittels Datenobjekten zentral verwaltet und gehandhabt werden sollen.

284

8 Simulink Grundlagen

8.4.3

Der Model Explorer

Der Model Explorer wird uber den Men punkt View/Model Explorer aufgerufen. Es u o net sich eine grasche Oberche, mit der der Benutzer zur jedem Zeitpunkt Uberblick a hat uber alle geneten Simulink-Modelle und Stateow Charts (der Model Explorer o ersetzt den Stateow Explorer ) sowie Einuss nehmen kann auf deren Simulationsparameter (Kap. 8.7), evtl. erzeugten C-Code, globale und lokale Variablen, Datenobjekte und Signale. Abb. 8.7 zeigt das Fenster des Model Explorers. Aus der links aufgelisteten Model Hierarchy ist zu erkennen, dass nur drei Modelle genet sind: das Demoo Modell vdp.mdl, ein Modell untitled.mdl (das den Block Chirp Signal enthlt) und a das Beispiel bsp sigprop.mdl aus Kap. 8.4.1. Durch Markierung von Base Workspace in der Model Hierarchy erscheint im mittleren Fensterteil eine Inhaltsliste der im Matlab-Workspace denierten Matlab-Variablen (hier param2 ) und Datenobjekte (hier param1, siehe Kap. 8.4.2). Im rechten Fensterteil, dem Dialog View, werden die Eigenschaften bzw. Parameter des in der Model Hierarchy bzw. in der Inhaltsliste markierten Objekts (hier param1 ) dargestellt. Ein Vergleich von Abb. 8.7 mit Kap. 8.4.2 zeigt, dass die Eigenschaften des Simulink.Parameter -Datenobjekts param1 auch uber den Model Explorer uberwacht bzw. verndert werden knnen. a o

Abb. 8.7: Fenster des Model Explorers mit geo neten SimulinkModellen vdp.mdl, untitled.mdl und bsp sigprop.mdl

Durch eine integrierte Suchfunktion kann in allen geneten Charts, Modellen und ihren o Subsystemen z.B. nach Blcken (hier: Search: by Name), Eigenschaften (von Variablen o und Signalen wie z.B. Name oder Wert), Datenobjekt-Klassen oder Strings gesucht werden. Mittels des Men s Add knnen globale (im Matlab-Workspace) und lokale u o (im Model Workspace) Matlab-Variablen, Datenobjekte, Stateow Events und Daten erstellt werden ohne das Matlab-Command-Window zu benutzen. Liegt f r ein Modell u oder Chart C-Code vor (z.B. erzeugt mit dem Real-Time Workshop), so knnen alle o zugehrigen Files angezeigt (hier unter Code for untitled ) und deren Inhalt im Dialog o View dargestellt werden.

8.5

Signalerzeugung und -ausgabe

Zur Signalerzeugung und -ausgabe knnen entweder die Blcke der Bibliotheken Sources o o und Sinks verwendet werden, oder der so genannte Signal & Scope Manager, der zwar

8.5 Signalerzeugung und -ausgabe

285

eine globalere Handhabung bietet, jedoch bei eingeschrnkten Mglichkeiten. Speziell a o zur Speicherung von Signalen auf den Matlab-Workspace steht dar ber hinaus auch u noch die Option Signal Logging zur Verf gung. u Alle drei Mglichkeiten werden im Folgenden vorgestellt. o

8.5.1

Bibliothek: Sources Signalerzeugung

Ein Doppelklick auf das Sources-Icon im Simulink Library Browser (Abb. 8.2) net das o Fenster der Unterbibliothek mit den zugehrigen Blcken. Als Standardquellen stehen o o unter anderem verschiedene Signalgeneratoren zur Verf gung, aber auch andere Blcke, u o die Eingaben aus einer Datei oder dem Matlab-Workspace ermglichen. o Im Unterschied zu den anderen Funktionsblcken besitzen die Block Parameters Dialogo boxen aller Sources-Blcke keinen Apply-Button. Sie m ssen daher vor Simulationsstart o u unbedingt geschlossen werden. Im Folgenden werden die wichtigsten Blcke kurz beschrieben. o Constant Der Constant-Block erzeugt einen zeitunabhngigen reellen oder komplea xen Wert. Dieser kann ein Skalar (Ein-Element-Array), ein Vektor oder eine Matrix sein, je nachdem welche Form f r den Parameter Constant Value u Constant eingetragen wurde und ob die Check Box Interpret vector parameters as 1-D aktiviert ist. Ist die Check Box deaktiviert, werden Zeilen- und Spaltenvektoren im Constant Value-Feld mit ihren Dimensionen, also [1 n] bzw. [n 1] als Matrizen ber cksichtigt. Ist die Check Box jedoch aktiviert, werden Zeilen- und Spaltenvektou ren einfach als Vektoren der Lnge n, also 1-D-Signale, behandelt. Im Register Signal a Attributes knnen zustzlich noch eine Unter- und Obergrenze, sowie der Datentyp o a (Kap. 8.4.1) des erzeugten Signals angegeben werden. Die Default-Abtastzeit inf (siehe auch Kap. 10.1) soll verdeutlichen, dass sich der Ausgangswert (normalerweise) nicht a u a ndert. Dennoch kann der unter Constant Value eingetragene Wert nat rlich whrend der Simulation verstellt werden es sei denn, die Check Box Inline Parameters im Optimization-Register der Conguration Parameters Dialogbox wurde explizit aktiviert (siehe S. 313). Eine Anderung des Sampling mode von Sample based auf Frame based ist nur bei installiertem Signal Processing Blockset sinnvoll, da nur diese SimulinkErweiterung das Arbeiten mit framebasierten Signalen ermglicht. o
1

From File
untitled.mat From File

Mit dem From File-Block knnen Daten aus einem MAT-File (siehe o Kap. 3.3) eingelesen werden. Eine solche Datei kann z.B. whrend eia ner vorangegangenen Simulation mit einem To File-Block (siehe S. 293) erzeugt worden sein. Die in dem MAT-File abgelegten Daten m ssen folu

286

8 Simulink Grundlagen

[10

11

12]

[1x3]

...

3 (10 11 12) Constant 2, Constant value = [10 11 12], Interpret vector param. as 1 = on D

...

Constant , Constant value = [10 11 12], Interpret vector param. as 1 = off D 10 11 12

[3x1]

...

3 (10 11 12) Constant 3 Constant value = [10 ; 11 ; 12], Interpret vector param. as 1 = on D

...

Constant 1 Constant value = [10 ; 11 ; 12], Interpret vector param. as 1 = off D

Abb. 8.8: Beispiele zum Constant-Block: bsp constant.mdl

gendes Format aufweisen: t1 u11 u21 un1 t2 tf inal u12 u1f inal u22 u2f inal un2 unf inal

Dabei ist t ein Vektor aus monoton ansteigenden Zeitwerten, u1 bis un sind die Vektoren der Ausgangssignale. Das Ausgangsignal des From File-Blocks wird damit zu einem Vektor-Signal (1-D Array) der Lnge n. Daten, die mit einem To File-Block geschrieben a werden (Array bzw. Matrix), knnen vom From File-Block ohne Modikation eingelesen o werden. Sollen Daten, die mit einem To Workspace-Block geschrieben und in eine Datei gespeichert wurden, gelesen werden, muss Folgendes beachtet werden: Der To Workspace-Block schreibt keine Zeitwerte; diese knnen jedoch uber die Check o Box Time im Register Data Import/Export der Conguration Parameters Dialogbox (siehe S. 311) gespeichert werden (z.B. in der Variable tout ). Der Array (z.B. simout ), der vom To Workspace-Block geschrieben wurde, muss vor dem Abspeichern in ein MATFile transponiert werden, damit dieses File von einem From File-Block gelesen werden kann. Mit den Befehlen
matrix = [tout; simout]; save filename matrix

wird aus der Simulationszeit tout und dem Array simout eine Variable matrix mit dem vom From File bentigten Format erzeugt und in einem MAT-File mit Namen lename o abgespeichert.

8.5 Signalerzeugung und -ausgabe From Workspace

287

Der From Workspace-Block liest Daten vom Matlab-Workspace ein und stellt sie dem Simulink-Modell zur Verf gung. Die einzulesenden Daten u From m ssen in Form eines Matlab-Ausdrucks im Textfeld Data angegeben u Workspace werden, der ausgewertet eine Matrix (2-D Array), eine Struktur oder ein Simulink.Timeseries-Datenobjekt ergeben muss. Mit der Option Form output after nal data value by kann bestimmt werden, wie das Ausgangssignal des From Workspace aussehen soll nach dem letzten Zeitschritt, an dem Daten aus dem Matlab-Workspace vorlagen (z.B. Extrapolation oder Halten des letzten Wertes).
simin

Matrix: Sollen skalare oder Vektor-Signale (1-D Arrays) eingelesen werden, so muss der Ausdruck im Textfeld Data ausgewertet eine Matrix ergeben, in der ein Vektor von ansteigenden Zeitwerten einem Vektor oder einer Matrix aus Signalwerten zugewiesen wird. Sollen die n skalaren oder Vektor-Signale u1 bis un eingelesen werden, so muss sich der Matlab-Ausdruck (Default-Name simin) im Textfeld Data zu folgendem Ausdruck ergeben (t ist ein Vektor aus monoton ansteigenden Zeitwerten): u11 u21 un1 t1 u12 u22 un2 t simin = 2 tf inal u1f inal u2f inal unf inal Struktur: Unter Verwendung der Formate Structure (hier ist das Zeit-Feld leer) und Structure with time knnen sowohl skalare, Vektor(1-D)- als auch Matrix(2-D)-Signale o eingelesen werden. Folgendes Beispiel der [2 2]-Matrix u3 soll verstndlich machen, a wie eine Structure with time aufgebaut sein muss: strukturname.time = [t1 t2 tf inal ]T strukturname.signals.values = [u31 u32 u3f inal ]T strukturname.signals.dimensions = [2 2] F r skalare und Vektor-Signale ist das gezeigte Format dasselbe wie beim Einlesen von u Daten uber das Register Data Import/Export der Conguration Parameters Dialogbox (Kap. 8.7). Bei einer Structure oder Structure with time akzeptiert ein From WorkspaceBlock wie gezeigt jedoch nur ein Element im Feld strukturname.signals. Eine Structure with time, die durch einen To Workspace-Block geschrieben wurde, kann ohne Probleme eingelesen werden. Simulink.Timeseries-Datenobjekt: Signale, die mittels Signal Logging (siehe S. 297) geschrieben wurden, sind standardmig Datenobjekte der Klasse Simua link.Timeseries. Die geschriebenen Daten stehen dabei im Feld Data (skalare, Vektoroder Matrix-Signale), die zugehrigen Zeitwerte im Feld Time. Ein solches Datenobjekt o kann ohne Modikation von einem From Workspace-Block eingelesen werden.

288 Ramp

8 Simulink Grundlagen

Ramp

Der Ramp-Block generiert ein rampenfrmiges Signal als Anregung f r o u ein Simulink-Modell. In der Block Parameters Dialogbox knnen die Steio gung der Rampe, Startzeit und -wert des Blockausgangs eingestellt werden. Zeilen- oder Spaltenvektoren knnen mithilfe der Check Box Interpret o vector parameters as 1-D im Vektor- oder im Matrix-Format ausgegeben werden.

Random Number und Band-Limited White Noise Der Random Number-Block erzeugt normalverteilte Zufallszahlen mit beliebigem Mittelwert (Mean, Default-Wert ist 0) und Varianz (Variance, Default-Wert ist 1). Unter Initial Seed kann ein Startwert f r den Zufallsu Random generator angegeben werden. Soll das Ausgangssignal direkt oder indirekt Number integriert werden (in zeitkontinuierlichen oder hybriden Systemen), so sollte auf den Band-Limited White Noise-Block ubergegangen werden. Hier ist die Bandbreite des Ausgangssignals durch die Wahl der Sample time beBandLimited grenzbar. Eine gute Approximation von idealem weien Rauschen erhlt a White Noise man mit einer Wahl von Sample time 1/100 2/max, wobei max (in rad/sec.) die Bandbreite, bzw. 1/max die kleinste Zeitkonstante des betrachteten dynamischen Systems darstellt. Noise power bestimmt die Leistung des Ausgangssignals. Repeating Sequence Der Repeating Sequence-Block erlaubt es, ein beliebiges Signal zu spezizieren, das kontinuierlich wiederholt wird. Der Parameter Time values muss ein Vektor von monoton ansteigenden Zeitwerten sein. Der AusgaRepeating bevektor Output values muss in seiner Lnge mit dem Parameter Time a Sequence values korrespondieren. Zwischenwerte werden durch lineare Interpolation ermittelt. Der hchste Wert im Zeitvektor gibt das Wiederholungsintervall f r den o u Ausgabevektor an. Signal Builder Der Block Signal Builder ermglicht die schnelle Erzeugung von austauscho baren Signalgruppen. Durch Links-Doppelklick erscheint die Signal Builder Dialogbox, in der alle Arten von abschnittsweise linearen Anregungssignalen in Gruppen grasch erstellt werden knnen. o

Signal 1

Signal Builder

In der Beispieldatei bsp sigbuild.mdl (Abb. 8.9) werden mit dem Signal Builder drei Signalgruppen erzeugt (Abb. 8.10), wobei jede aus den Signalen Signal 1 und Signal 2 besteht. Am Signal Builder-Block entstehen daher zwei Ausgnge. Uber einen Multia plexer werden die Signale zusammengefasst und auf einen Integrator gegeben, der die Verlufe auntegriert. Wie die Signal Builder Dialogbox (Abb. 8.10) zeigt, ist Signal a 1 ein (nicht periodisches) Rechtecksignal; seine Rechteckbreite variiert von Gruppe zu

8.5 Signalerzeugung und -ausgabe

289

Signal 1

Signal 2

1 s Integrator

Scope

Signal Builder

Abb. 8.9: Beispiel bsp sigbuild.mdl

zum

Signal

Builder:

Abb. 8.10: Signal Builder Dialogbox des Beispiels bsp sigbuild.mdl mit drei Signalgruppen

Gruppe. Beim Dreiecksignal Signal 2 (ebenfalls nicht periodisch) wird die Amplitude von Gruppe zu Gruppe verndert. Jede Gruppe ist als Registerkarte realisiert, die durch a einfachen Links-Klick aktiviert werden kann. Die Signale der jeweils aktiven Gruppe werden auf den Ausgang des Signal Builder gegeben. So kann das Simulink-Modell ohne jeden Umbau schnell mit unterschiedlichen Signalen oder Signalgruppen beaufschlagt und getestet werden. Signal und Pulse Generator Mit dem Signal Generator knnen Signale verschiedener Form (z.B. Sinus, o Sgezahn) erzeugt werden; der Pulse Generator gibt Rechteckimpulse mit a y-Oset gleich Null als Anregung aus, aufgetragen uber die Simulationszeit (Time(t) = Use simulation time) oder uber ein externes Zeitsignal (Ti me(t) = Use external signal ). Die wichtigsten Parameter wie Amplitude, Frequenz, Pulsbreite etc. knnen beliebig gewhlt werden. o a

Signal Generator

290

8 Simulink Grundlagen Bei beiden Blcken knnen, wie beim Constant-Block, Zeilen- oder Spalo o tenvektoren mithilfe der Check Box Interpret vector parameters as 1-D im Vektor- oder im Matrix-Format ausgegeben werden. F r zeitdiskrete und u hybride Systeme muss im Pulse Generator der Pulse type auf Sample based umgestellt werden.

Pulse Generator

Sine Wave Dieser Block ermglicht die Erzeugung eines Sinus-Signals sowohl in zeito kontinuierlichen (Sample time = 0) als auch in zeitdiskreten (Sample time > 0) Modellen. Im Time based Modus bestimmt sich das AusgangssigSine Wave nal aus den einstellbaren Parametern Amplitude, Bias, Frequency, Phase uber den Zusammenhang y = Amplitude sin(F requency time t + P hase) + Bias. Bei Time(t) = Use simulation time ist time t die interne Simulationszeit, bei Time(t) = Use external signal wird f r time t ein beliebiges auen angelegtes Zeitsignal veru wendet. Da die Einheit der Phase [rad] ist, ist es mglich hier direkt mit Bruchteilen o und Vielfachen von pi (siehe Kap. 2.1) zu arbeiten. Um bei groen Simulationszeiten Rundungsfehler zur vermeiden, kann in den Sample Based Modus umgeschaltet werden. Wie beim Constant-Block knnen Zeilen- oder Spaltenvektoren mithilfe der Check o Box Interpret vector parameters as 1-D im Vektor- oder im Matrix-Format ausgegeben werden. Step Mithilfe des Step-Blocks kann ein stufenfrmiges Anregungssignal erzeugt o werden. In der Block Parameters Dialogbox knnen Anfangs- und Endo wert des Sprungsignals sowie der Zeitpunkt des Sprungs festgelegt werden. Wie beim Constant-Block knnen Zeilen- oder Spaltenvektoren mithilfe o der Check Box Interpret vector parameters as 1-D im Vektor- oder im Matrix-Format ausgegeben werden.

Step

8.5.2

Bibliothek: Sinks und Signal Logging

In der Unterbibliothek Sinks nden sich die Standard-Ausgabe-Blcke von Simulink. Es o besteht die Mglichkeit, Signale grasch darzustellen, sowie Ergebnisse in ein File oder o in den Matlab-Workspace zu speichern. Zur Speicherung von Daten auf den Matlab-Workspace bietet Simulink zustzlich zur a Sinks-Bibliothek auch die Mglichkeit des so genannten Signal Logging an. Diese Option o wird von der Signal Properties Dialogbox (Kap. 8.2) aus gesteuert und kommt komplett ohne Verwendung von Sinks-Blcken aus. Sie wird am Ende dieses Unterkapitels o behandelt. Im Folgenden werden die wichtigsten Blcke der Sinks-Bibliothek kurz beschrieben. o

8.5 Signalerzeugung und -ausgabe

291

Sinks Signalausgabe
Scope, Floating Scope, Viewer Scope Mit dem Scope-Block knnen whrend einer Simulation Signale dargeo a stellt werden. Die Signale werden dabei uber die Simulationszeit aufgetra gen. Wird vor der Simulation das Scope-Fenster (Abb. 8.11) durch LinksDoppelklick auf einen Scope-Block genet, kann der Verlauf der auf den o Scope Scope-Block gef hrten Signale direkt mitverfolgt werden. Die Buttons in u der Toolbar des Scope-Fensters ermglichen ein Vergrern von Teilbereichen der dargeo o stellten Daten, eine automatische Skalierung der Achsen, eine Speicherung der Achseneinstellungen f r nachfolgende Simulationen sowie ein direktes Ausdrucken der Kurven. u

Drucken Scope Parameters Zoom in x- und y-Richtung Zoom in x-Richtung Zoom in y-Richtung Autoskalierung

Scope Fenster am MATLAB Command Window andocken Signal Selector Achse auswhlen/ Achsenauswahl aufheben floating scope Achseneinstellungen wiederherstellen Achseneinstellungen speichern

Abb. 8.11: Scope-Fenster

Bei Klick auf den Scope Parameters-Button des Scope-Fensters erscheint die Scope Parameters-Dialogbox. In der Registerkarte General knnen Achseneinstellungen manuell vorgenommen wero den. Eine Number of axes > 1 erzeugt im Scope-Fenster mehrere Teilbilder, hnlich wie a beim Matlab-Befehl subplot (siehe S. 44). Die Eingabe eines Zahlenwerts (sec.) im Parameter Time range stellt die aufgezeichneten Signale nur bis zum angegebenen Zeitpunkt dar. Ein Rechtsklick auf eine Achse (im Scope-Fenster) und Auswahl von Axes Properties im Kontextmen stellt noch weitere Mglichkeiten der Achseneinstellungen u o zur Verf gung. u Unter Sampling kann bei Auswahl von Decimation ein Auslassungsfaktor angegeben werden. Beispiel: Bei einer Eingabe von 100 wird im Scope-Fenster nur jeder 100ste eingelesene Signalwert angezeigt. Mchte man mehrere Signale gemeinsam in einem Bild darstellen lassen (und nicht in o einem Teilbild pro Signal), so ist es sinnvoll, das Scope mit einem composite-Signal (siehe S. 281) zu beaufschlagen. Die Signal-Farb-Zuordnung ist dann wie folgt (ab dem siebten Signal wird mit der Farbwahl wieder von vorne begonnen):

292 1. Signal: Gelb 2. Signal: Magenta 3. Signal: Cyan 4. Signal: Rot 5. Signal: Gr n u 6. Signal: Dunkelblau

8 Simulink Grundlagen

Ein Floating Scope (Auswahl auch uber Schaltche oating scope in der Toolbar des a Scope-Fensters) ermglicht die Darstellung eines oder mehrerer Signale aus dem Modell, o wobei die Signallinien nicht mit dem Scope-Block verkn pft sind: Wird die Check Box u oating scope in der Scope Parameters-Dialogbox aktiviert so verschwindet der Blockeingang. Whrend der Simulation werden dann innerhalb der jeweils aktiven Achse a (dicker blauer Rahmen, Button Achse auswhlen/Achsenauswahl aufheben) die Signale a angezeigt, deren Verkn pfungslinien markiert waren: einfacher Mausklick auf die Linie u (bei gedr ckter Shifttaste knnen mehrere Linien markiert werden) oder Auswahl uber u o den Signal Selector in der Toolbar des Scope-Fensters. Bei Verwendung eines oating scope muss sichergestellt sein, dass im Register Optimization der Conguration Parameters Dialogbox (siehe S. 313) die Check Box Signal storage reuse deaktiviert ist. Dies lsst jedoch den Speicherbedarf stark ansteigen. Wenn nur wenige Signale online a inspiziert werden sollen, ist es daher sinnvoller, diese Signale vor Simulationsstart als so genannte Test points (siehe Abb. 8.16) zu deklarieren. F r diese Signale wird dann kein u Signal storage reuse durchgef hrt. Jedes im Floating Scope aktuell angezeigte Signal u wird mit einem -Icon markiert. In der Registerkarte Data history der Scope Parameters-Dialogbox kann auf die Menge an gespeicherten und angezeigten Daten Einuss genommen werden. Um Daten uber das gesamte Simulationsintervall anzuzeigen, kann entweder die Check Box Limit data points to last deaktiviert werden oder im angrenzenden Textfeld ein Zahlenwert der Anzahl der eingelesenen Datenpunkte angegeben werden. Save data to workspace speichert die angezeigten Signale auf den Workspace unter dem angegebenen Variable name und Format (Array bei Number of axes = 1, Structure und Structure with time bei Number of axes 1). Ein gespeicherter Array hat die folgende Form: t1 u11 u21 un1 u12 u22 un2 t2 tf inal u1f inal u2f inal unf inal Dieses Format kann von einem From Workspace-Block ohne Modikation eingelesen werden. Eine gespeicherte Structure erhlt die drei Felder time, signals und blockName. Das a Zeit-Feld bleibt jedoch leer. Soll dort auch die Simulationszeit mit abgelegt werden, so muss als Format Structure with time gewhlt werden. Wird z.B. ein composite-Signal a siehe S. 281) der Breite n auf den Scope-Block gef hrt, hat die gespeicherte Structure u with time folgendes Aussehen:

8.5 Signalerzeugung und -ausgabe strukturname.time = [t1 t2 tf inal ]T u21 un1 u11 u22 un2 u1 strukturname.signals.values = 2 u1f inal u2f inal unf inal strukturname.signals.dimensions = n strukturname.signals.label = Label des auf den Scope-Block gef hrten u Signals strukturname.signals.title = Titel des ScopePlots strukturname.signals.plotStyle = [0 0] strukturname.blockName = Modellname/Name des Scope-Blocks

293

Wer sich vor allem bei komplexen Modellen die unter Umstnden zahlreichen Scopes a sparen will, verwendet stattdessen so genannte Viewer Scopes. Dazu wird im Kontextmen der gew nschten Signallinie der Punkt Create & Connect Viewer/Simulink/Scope u u -Icon, das sich bei Links-Doppelklick zu gewhlt. Die Signallinie erhlt dann ein a a einem Viewer Scope-Fenster (im Aussehen vergleichbar mit Abb. 8.11) net. Eine o Speicherung der dargestellten Signale auf den Workspace erfolgt analog zum Scope. Bei aktivierter Check Box Save to model signal logging object in der Registerkarte History der Viewer Scope Parameters-Dialogbox wird ein Datenobjekt logsout der Klasse Simulink.ModelDataLogs erzeugt, hinter dem nach Entpacken mit
logsout.unpack(all)

ein (bei einem composite-Signal (siehe S. 281) mehrere) Simulink.TimeseriesDatenobjekt zum Vorschein kommt. Zeit- und Signalwerte knnen aus den Feldern o Time bzw. Data entnommen werden. Viewer Scopes werden mit dem Signal & Scope Manager (Kap. 8.5.3) verwaltet und knnen dort nat rlich auch erzeugt werden. o u To File Der To File-Block schreibt seine Eingangsdaten zusammen mit dem Vektor der korrespondierenden Zeitpunkte in Form eines Array (bzw. einer Matrix ) in ein MAT-File (siehe Kap. 3.3). Der Array entspricht dem vom To File From File-Block bentigten Format und kann daher von diesem Block oho ne Modikation eingelesen werden. Ein From Workspace-Block kann die Transponierte des Array lesen. In der Block Parameters Dialogbox knnen der Name des MAT-File o und des Array angegeben werden, mit Decimation und Sample time kann wie unter To Workspace erlutert verfahren werden. a
untitled.mat

To Workspace
simout To Workspace

Der To Workspace-Block schreibt seine Eingangsdaten auf den MatlabWorkspace in Form eines Array, einer Structure oder Structure with time und benennt diese mit dem unter Variable name eingetragenen Namen. Decimation erlaubt wie beim Scope-Block, dass Datenwerte bei der

294

8 Simulink Grundlagen

Aufzeichnung ausgelassen werden. Bei Verwendung eines Variable-step-Solvers (siehe Kap. 8.7) wird der Parameter Sample time n tzlich: Da in diesem Fall die Intervalle u zwischen den Zeitschritten whrend der Simulation nicht konstant sind, kann hier durch a die Angabe eines Faktors (in Sekunden) eine konstante Schrittweite f r die Aufzeichu nung der Eingangssignale festgelegt werden. Beim Default-Wert 1 werden die Daten mit der vom Solver vorgegebenen Zeitschrittweite geschrieben. Ein mit einem To Workspace-Block gespeicherter Array hat folgendes Aussehen: u11 u21 un1 u22 un2 u12 u1f inal u2f inal unf inal Eine von einem To Workspace-Block geschriebene Structure with time besitzt die drei Felder time, signals und blockName mit folgendem Aussehen (bei einer Structure bleibt das time-Feld leer): strukturname.time = [t1 t2 tf inal ]T u21 un1 u11 u22 un2 u1 strukturname.signals.values = 2 u1f inal u2f inal unf inal strukturname.signals.dimensions = n strukturname.signals.label = Label des auf den To Workspace-Block gef hrten Signals u strukturname.blockName = Modellname/ Name des To Workspace Blocks Um einen gespeicherten Array mit einem From Workspace-Block wieder einzulesen, wird der korrespondierende Zeitvektor bentigt. Es kann die standardmig im Data Imo a port/Export -Register der Conguration Parameters Dialogbox (siehe S. 311) geschriebene Variable tout verwendet werden. Eine Structure with time kann ohne Modikation von einem From Workspace-Block eingelesen werden. XY Graph, Viewer XY Graph Ein XY Graph stellt seine Eingangssignale (Skalare) ubereinander aufge tragen in einer Matlab-Figure dar. Der erste (obere) Eingang wird dabei der x-Achse, der zweite der y-Achse zugeordnet. In der Block Parameters Dialogbox knnen die Limits der Achsen manuell eingestellt werden. o

XY Graph

Ein so genannter Viewer XY Graph erspart dem Benutzer den XY Graph-Block. Dazu wird zunchst das Kontextmen der Linie des auf der x-Achse aufzutragenden a u Signals und hier der Punkt Create & Connect Viewer/Simulink/XY Graph gewhlt. a Die Signallinie erhlt ein a -Icon. Danach wird im Kontextmen des auf der y-Achse u aufzutragenden Signals der Punkt Connect To Existing Viewer/XY Graph/Axis y aus-Icon markiert wird. gewhlt, wodurch die Signallinie ebenfalls mit einem a

8.5 Signalerzeugung und -ausgabe

295

Viewer XY Graphs werden mit dem Signal & Scope Manager (Kap. 8.5.3) verwaltet und knnen dort nat rlich auch erzeugt werden. o u Beispiel Am Beispiel bsp sources sinks.mdl (Abb. 8.12) soll die Funktionsweise der Blcke o Sine Wave, Repeating Sequence, Scope und XY Graph verdeutlicht werden. Es werden eine Sinuswelle und ein selbst erzeugter Sgezahn sowohl einzeln als auch ubereinander a aufgetragen dargestellt.

Sine Wave

Sinus Periodendauer : 125.664s Amplitude : 1

Repeating Sequence

Sinus ber Saegezahn Saegezahn Periodendauer : 200s Amplitude : 2.5

Abb. 8.12: Beispiel zur Benutzung von Sources- und Sinks-Blcken: o bsp sources sinks.mdl

Parameter des Sine Wave-Blocks: Sine type: Time based Time (t): Use simulation time Amplitude: 1 Frequency (rad/sec): 0.05

Bias: 0 Phase (rad): 0 Sample time: 0

Damit wird eine Sinuswelle mit Periodendauer T = 2/ = 2/0.05 s = 125.664 s und Amplitude 1 erzeugt. Parameter des Repeating Sequence-Blocks: Time values: [0:20:200] Output values: [0:0.25:2.5]

Aus diesen Daten kann die Periodendauer des Sgezahns zu 200 s und die Amplitude a zu 2.5 abgelesen werden. Parameter des Sinus uber Saegezahn-Blocks (XY Graph): x-min: 1 x-max: 1 y-max: 2.5 y-min: 0 Sample time: 1

Mit dieser Parametereinstellung wird der Ausschnitt auf der x- und y-Achse des XY Graphs auf die Amplituden der Eingangssignale zugeschnitten. Simulationsparameter im Register Solver der Conguration Parameters Dialogbox (detaillierte Beschreibung in Kap. 8.7.1): Start time: 0.0 Stop time: 1000.0 Variable-step-Solver type: Discrete(no contin. states) Max step size: 2.0 Zero crossing control: Use local settings

296

8 Simulink Grundlagen

Durch diese Wahl der wichtigsten Simulationsparameter wird die Simulation etwas verlangsamt (Integration mit fester oberer Schrittweite ist aufwndiger zu berechnen), so a dass der Verlauf der Signale bequem in den Scopes und dem XY Graph mitverfolgt werden kann. In den Scope-Blcken wurde die Check Box Limit data points to last deo aktiviert, um sicherzustellen, dass die Signale in vollstndiger Lnge angezeigt werden a a knnen, unabhngig von der gewhlten Schrittweite. Da das Modell keine kontinuiero a a lichen Zustnde enthlt, wurde der Algorithmus Discrete(no continuous states) zur a a Integration verwendet. Die explizite Wahl dieses Solvers ist jedoch an sich nicht ntig: o Simulink erkennt automatisch, ob das Modell kontinuierliche Zustandsgren enthlt o a oder nicht und whlt in letzterem Fall den Solver Discrete(no continuous states) aua tomatisch (auch wenn weiterhin der Default-Algorithmus ode45 eingestellt ist). Der Benutzer wird mittels einer Warnung im Command Window uber die automatische Solver-Wahl informiert. Die Abb. 8.13 und 8.14 zeigen die Ergebnisse der Simulation.

Abb. 8.13: Fenster der Scope-Blcke nach Simulation des Systems bsp sources sinks.mdl o

Abb. 8.14: Fenster des XY GraphBlocks nach Simulation des Systems bsp sources sinks.mdl

8.5 Signalerzeugung und -ausgabe

297

Signal Logging
Wird in der Signal Properties Dialogbox (Kap. 8.2/S. 278) eines Signals die Check Box Log signal data aktiviert, so kann das zugehrige Signal auch ohne Verwendung von To o Workspace-Blcken, Scopes oder Viewer Scopes auf den Matlab-Workspace gespeichert o werden. Im Register Data Import/Export der Conguration Parameters Dialogbox (siehe S. 311) muss dazu die Check Box Signal logging aktiviert (was standardmig der Fall a ist) und im angrenzenden Textfeld ein Variablenname eingetragen sein (Default-Name logsout ).

sig1

Sine Wave

Repeating Sequence

Sinus ber Saegezahn

Abb. 8.15: Speichern von Signalen auch ohne Scope-Blcke: bsp sources sinks sl.mdl o

Abb. 8.16: Signal Properties Dialogboxen des Beispiels bsp sources sinks sl.mdl

Abbildungen 8.15 und 8.16 zeigen am Beispiel bsp sources sinks sl.mdl, dass die Scope-Blcke aus bsp sources sinks.mdl entfallen knnen, wenn nur die Signalspeio o cherung, nicht aber die grasche Darstellung in Simulink im Vordergrund steht. Durch Aktivierung der Check Boxen Log signal data knnen nun die Ausgangssignale des Sine o Wave und der Repeating Sequence unter den Namen sig1 und sig2 gespeichert werden. Wie zu erkennen ist, kann das Signal Logging auch f r Signale durchgef hrt werden, u u f r die kein Signalname vergeben wurde (sig2, hier wurde nur ein Logging name veru geben). Die geloggten Signale werden im Simulink-Modell mit einem -Icon markiert

298

8 Simulink Grundlagen

und im Matlab-Workspace in der Variable logsout aus der Datenobjekt-Klasse Simulink.ModelDataLogs gespeichert. Entpacken von logsout mittels
logsout.unpack(all)

extrahiert sig1 und sig2 als Datenobjekte der Klasse Simulink.Timeseries mit den Unterfeldern sig1.Data bzw. sig2.Data, aus denen schlielich die Simulationsdaten (als Array) entnommen werden knnen. Mit o
logsout.sig1.Data

bzw.
logsout.sig2.Data

kann auch direkt (ohne vorheriges Entpacken) auf die Daten der geloggten Signale zugegrien werden. Eine bequeme Methode geloggte Signale zu betrachten und zu modizieren ist das Matlab-Werkzeug Time Series Tools, das nach einer Simulation mittels des Men punkts u Tools/Inspect logged signals aufgerufen werden kann (Abb. 8.17). Ist im Register Data Import/Export der Conguration Parameters Dialogbox (siehe S. 311) die Check Box Inspect signal logs when Simulation ist paused/stopped aktiviert, net sich die Time o Series Tools-Oberche nach der Simulation automatisch. a

Abb. 8.17: Die Time Series Tools-Oberche zum Inspizieren von geloggten Signalen a

8.5 Signalerzeugung und -ausgabe

299

Im linken Teil des Fensters werden die im Workspace vorhandenen Simulink- (und evtl. Matlab-)Timeseries-Datenobjekte aufgelistet (hier sig2 und sig1 ). Das jeweils markierte Datenobjekt (hier sig2 ) wird im mittleren Fensterteil in den Registern Time Series Plot uber die Simulationszeit aufgetragen dargestellt, im Register Time Series Data sind die Datenwerte aufgelistet, und knnen sogar verndert werden. o a F r eine Inspektion der geloggten Signale mit dem Time Series Tools-Werkzeug muss u die Variable logsout nicht entpackt werden!

8.5.3

Der Signal & Scope Manager

Mit dem Signal & Scope Manager kann die Erzeugung und grasche Darstellung von Signalen modellweit gehandhabt werden; Sources- und Sinks-Blcke werden dabei nicht o mehr bentigt. Die Verwendung des Signal & Scope Managers soll an Abb. 8.18 vero deutlicht werden, in der links die herkmmliche Realisierung von Signalquellen und o Senken (bsp ssm1.mdl), rechts die Realisierung mittels Signal & Scope Manager gezeigt ist (bsp ssm2.mdl). Der Signal & Scope Manager wird uber den Men punkt Tools/Signal & Scope Manager u oder aus dem Kontextmen einer beliebigen Signallinie gestartet. Abbildung 8.19 zeigt u die Register Generators und Viewers des Signal & Scope Managers von bsp ssm2.mdl. Die gew nschten Signalquellen und -senken (z.B. Sine Wave) wurden nach Auswahl aus u der Typliste (z.B. Generators/Simulink ) im linken Fensterteil uber den Button Attach to model zur Liste Generators/Viewers in model hinzugef gt und uber den Signal Seu lector (Button ) mit den Eingngen der entsprechenden Modell-Blcke (z.B. Sum2:2, a o Sum1:2, Sum:1 ) verbunden. Uber die Schaltche a knnen die Block Parameters Diao logboxen der Generators und Viewers genet und deren Parameter eingestellt werden. o Die mit dem Signal & Scope Manager erzeugten Signalquellen und -senken werden im Blockdiagramm als grau unterlegter Text (z.B. ) bzw. mit einem Viewer-Icon gekennzeichnet. Ein Doppelklick auf den unterlegten Text bzw. das Viewer-Icon onet wie gewohnt die Block Parameters Dialogboxen bzw. Fenster der Generators und Viewers. Viewer -Scopes knnen auch uber das Kontextmen einer Signallinie erzeugt o u
Sum1

1 Constant
Sum2

Sum1

bsp_ssm1.mdl

Constant

bsp_ssm2.mdl
Sine Wave Constant1 Sum2

1 Constant1
Sum

max min sig Check Dynamic Range Scope

Sine Wave Sum Sine Wave

max min sig Check Dynamic Range

Sine Wave

Terminator

BandLimited White Noise

BandLimited White Noise

Abb. 8.18: Links: Signalerzeugung und -ausgabe mit Sources- und Sinks-Blcken: o u bsp ssm1.mdl. Rechts: Realisierung ber den Signal & Scope Manager: bsp ssm2.mdl

300

8 Simulink Grundlagen

(Punkt Create & Connect Viewer ) bzw. mit einem Signal verkn pft werden (Punkt u Connect to Existing Viewer ), siehe dazu S. 293.

Abb. 8.19: Dialogbox des Signal & Scope Managers von bsp ssm2.mdl: Generators-Register (links), Viewers-Register (rechts)

8.6
8.6.1

Mathematische Verknupfungen und Operatoren


Bibliothek: Math Operations

In der Unterbibliothek Math Operations benden sich Blcke zur mathematischen Vero kn pfung von Signalen. Neben einfachen Bausteinen zur Summation und Multiplikau tion stehen Blcke mit vordenierten Funktionen aus dem Bereich der Mathematik o und Trigonometrie zur Verf gung. Im Folgenden werden die wichtigsten Blcke kurz u o beschrieben, der Algebraic Constraint-Block wird in Kap. 9.6 gesondert behandelt. Sum Der Ausgang des Sum-Blocks ist die Addition seiner Eingangssignale. Sind alle Eingangssignale skalar, so ist auch das Ausgangssignal skalar. Bei Sum gemischten Eingangssignalen wird elementweise addiert. Beispiel: Werden auf einen Sum-Block die Signale 1, Sinus(x) und der Vektor [4 4 5 6] gef hrt, so entsteht u ein Ausgangssignal der Form [5+Sinus(x) 5+Sinus(x) 6+Sinus(x) 7+Sinus(x)]. Hat der Sum-Block nur einen Eingang, und ist dieser ein Vektor, werden dessen Elemente zu einem Skalar addiert. Beispiel: Wird auf den Sum-Block nur der Vektor [4 4 5 6] gef hrt, so entsteht am Ausgang zu jedem Zeitschritt der Wert 19. Unter List of signs u kann die Anzahl und Polaritt der Eingnge durch die Eingabe einer Zahl > 1 oder a a einer Folge von + und bestimmt werden.

8.6 Mathematische Verkn pfungen und Operatoren u Product, Divide und Dot Product

301

Der Product-Block f hrt eine elementweise oder Matrix-Multiplikation u bzw. Division seiner Eingangssignale (1-D- und 2-D-Signale) durch, abhngig vom Wert der Parameter Number of inputs und Multiplicatia Product on. F r Multiplication = Element-wise(.*) gilt: Eine Folge von * und u / erzeugt eine Multiplikation oder Division der einzelnen Elemente der Eingangssignale (Matlab-Operation y = u1.*u2). Beispiel: Werden auf Divide einen Product-Block mit Number of inputs = */*, die Signale 5, Sinus(x) und der Vektor [4 4 5 6] gef hrt, so entsteht ein Ausgangssignal der Form u [20/Sinus(x) 20/Sinus(x) 25/Sinus(x) 30/Sinus(x)]. Hat der ProductDot Product Block nur einen Eingang, und ist dieser ein Vektor, so ist der Ausgang das Produkt der Vektorelemente. F r Multiplication = Matrix(*) gilt: Sind die Signale A, u B und C an den Eingngen 1, 2 und 3 Matrizen der entsprechenden Dimensionen, so a entsteht bei einer Number of inputs = **/ das Matrizen-Produkt ABC 1 am Ausgang. Der Divide-Block ist ein Product-Block, bei dem der Number of inputs standardmig a zu */ gesetzt ist. Der Dot Product-Block berechnet das Skalarprodukt seiner Eingangsvektoren. Der Blockausgang ist gleich dem Matlab-Befehl y = sum(conj(u1).*u2). Math Function und Trigonometric Function
u e Math Function

sin Trigonometric Function

Im Math Function-Block steht eine Anzahl an vorgegebenen gngigen maa thematischen Funktionen zur Verf gung, wie z.B. Exponential- und Logau rithmusfunktionen. Unter Function knnen diese direkt ausgewhlt wero a den. Analog stellt der Trigonometric Function-Block alle wichtigen trigonometrischen und hyperbolischen Funktionen zur Verf gung, auswhlbar unu a ter Function. Im Gegensatz zum Fcn-Block (Unterbibliothek User-Dened Functions) knnen beide Blcke auch 2-D-Signale verarbeiten. o o

Gain und Slider Gain Der Gain-Block verstrkt sein Eingangssignal (1-D- oder 2-D-Signal) a mit dem Ausdruck, der unter Gain angegeben wurde. Uber Multiplication kann eingestellt werden, ob eine elementweise oder eine MatrixMultiplikation des Eingangs mit dem Gain stattnden soll. Der Slider GainBlock erlaubt die Verstellung des skalaren Verstrkungsfaktors whrend a a der Simulation. Im Slider Gain-Fenster (net sich bei Links-Doppelklick o auf den Block) kann die Verstellung uber einen Schieberegler oder die di rekte Eingabe eines Wertes geschehen. Dar ber hinaus knnen die Grenzen u o des Schiebereglerbereichs unter Low und High angegeben werden.

1 Gain 1 Slider Gain

302 Beispiel

8 Simulink Grundlagen

Das folgende einfache Beispiel aus der Physik soll die Funktionsweise der Blcke Proo duct, Divide, Gain und Math Function verdeutlichen (zum Mux-Block siehe Kap. 8.4.1 und 8.8.3). Abb. 8.20 zeigt das System bsp math.mdl, das die Gleichung f (t) = 80 exp( 1 t) sin (0.25 t + ) 80 3

grasch modelliert. Die gedmpfte Sinus-Schwingung und ihre Einh llenden werden a u aufgezeichnet. Der Clock-Block liefert die Simulationszeit. Diese wird f r die Berechnung u der Exponential-Funktion in den Einh llenden bentigt. u o

Sine Wave u Product Product1

Clock Divide 80 Constant

1 Gain

Math Function

1 Gain1

Mux

gedaempfte Sinusschwingung

Abb. 8.20: Beispiel zur Benutzung von Sources-, Sinks- und Math Operations-Blcken: o bsp math.mdl

Parameter des Sine Wave-Blocks: Sine type: Time (t): Amplitude: Frequency (rad/sec): Time based Use simulation time 1 0.25 Bias: 0 Phase (rad): pi/3 Sample time: 0

Damit wird eine Sinuswelle mit Periodendauer T = 2/ = 2/0.25 s = 25.133 s und Amplitude 1 erzeugt. Simulationsparameter im Register Solver der Conguration Parameters Dialogbox (siehe S. 304): Start time: 0.0 Variable-step-Solver: Discrete(no continuous states) Zero crossing control: Use local settings Stop time: 400.0 Max step size: 0.005

In Abb. 8.21 sind die Ergebnisse der Simulation dargestellt.

8.6 Mathematische Verkn pfungen und Operatoren u

303

Abb. 8.21: Fenster des Scope-Blocks nach der Simulation von bsp math.mdl

8.6.2

Bibliothek: Logic and Bit Operations

Bitwise Operator Der Bitwise Operator wendet auf seine Eingangssignale vom Typ integer, Fixed-Point oder boolean die unter Operator ausgewhlte Logikfunktion a an (AND, OR usw.). Defaultmig akzeptiert der Bitwise Operator nur a Bitwise ein Eingangssignal, das er uber die in Operator spezizierte Logikfunktion Operator mit der unter Bit Mask angegebenen Bitmaske verknpft. Wird die Check u Box Use bit mask ... deaktiviert, werden beliebig viele Eingangssignale akzeptiert und verkn pft. Das Ausgangssignal des Bitwise Operator als Ergebnis der Verkn pfung ist u u immer skalar.
Bitwise AND 0xD9

Logical Operator Der Logical Operator-Block verkn pft die korrespondierenden Elemente u seiner Eingnge gem den unter Operator zur Verf gung stehenden Loa a u gikfunktionen. Der Ausgang kann die Werte 1 (TRUE) oder 0 (FALSE) Logical Operator annehmen. Die Eingnge knnen beliebige Dimension (bis n-D) haben, a o diese muss jedoch f r alle gleich sein. Der Ausgang hat dann dieselbe Diu mension. Beispiel: Werden die Vektoren [0 0 1] und [0 1 0] durch OR miteinander verkn pft, so entsteht am Ausgang der Vektor [0 1 1]. Eine Verstellung u des Output data type im Register Signal Attributes ist nur f r Simulink-Modelle aus u sehr viel lteren Matlab-Versionen erforderlich, bei denen die meisten Blcke stana o dardmig nur double akzeptierten. a
AND

304 Relational Operator

8 Simulink Grundlagen

Der Relational Operator-Block verkn pft seine zwei Eingnge gem den u a a unter Relational operator zur Verf gung stehenden Vergleichsoperatoren. u Der Ausgang kann die Werte 1 (TRUE) oder 0 (FALSE) annehmen. BeiRelational spiel: Liegt das Signal u1 am oberen Eingang und u2 am unteren, wird der Operator Ausgang zu y = u1 < u2, y = u1 u2 etc. n-D-Eingangssignale werden analog zum Logical Operator verarbeitet. Auch bez glich des Output data type gelten u die f r den Logical Operator getroenen Aussagen. u
<=

8.7

Simulationsparameter

Vor dem Start der Simulation sollten die Simulationsparameter f r das Modell festgelegt u werden. Dies geschieht durch Aufruf der Conguration Parameters Dialogbox unter dem Men punkt Simulation/Conguration Parameters. Dort sind alle Parameter schon u mit Default-Werten belegt, d.h. die Simulation knnte auch direkt gestartet werden. o Es empehlt sich jedoch, die Parameter stets an das jeweilige Modell anzupassen, um optimale Ergebnisse zu erzielen.

8.7.1

Die Conguration Parameters Dialogbox

Register Solver Hier knnen Beginn und Ende der Simulation, Optionen f r den Integrationsalgoritho u mus, die Behandlung von Multitasking-Systemen (siehe S. 385) und die Steuerung der zero crossing detection (siehe S. 309) festgelegt werden. Abb. 8.22 zeigt das Fenster des Solver -Registers mit der Default-Einstellung. F r die numerische Lsung der Dierentialgleichungen bietet Simulink eine Vielzahl von u o Algorithmen (engl. Solver) an, die ein breites Spektrum an Problemstellungen abdecken. Es sind die gleichen Algorithmen, die auch in Matlab zur Lsung von Dierentialgleio chungen, Kap. 4.1.1, zur Verf gung stehen. Eine genaue Auistung der Variable-stepu Algorithmen f r zeitkontinuierliche Systeme ndet sich in Tab. 4.1. u Dar ber hinaus bietet Simulink zustzlich Fixed-step-Solver f r die Simulation von zeitu a u kontinuierlichen Systemen mit fester Schrittweite an. Die Algorithmen ode5, ode4 und ode3 basieren wie die Algorithmen ode45 und ode23 auf dem Runge-Kutta-Verfahren, ode2 basiert auf der Trapezformel nach Heun, und ode1 verwendet das Polygonzugverfahren nach Euler (explizite Rechnung). Daneben steht noch der Algorithmus ode14x zur Verf gung, der mit einer Kombination aus Newton-Raphson-Verfahren und Extrau polation arbeitet. F r zeitdiskrete Systeme steht der Discrete-Algorithmus sowohl vom u Typ Variable-step als auch Fixed-step zur Verf gung. F r Systeme, die keine Zustandsu u gren enthalten, whlt Simulink automatisch den Solver Discrete. o a In [31] wird der Groteil der von Matlab/Simulink verwendeten Integrationsalgorithmen ausf hrlich und verstndlich dargestellt. Vier der bekanntesten Integrationsverfahu a ren sollen an dieser Stelle kurz wiederholt werden, um die Aufgabenstellung bei der

8.7 Simulationsparameter

305

Abb. 8.22: Solver-Register der Conguration Parameters Dialogbox

numerischen Integration von Dierentialgleichungen zu verdeutlichen. Numerische Integration von Dierentialgleichungen: Das Verhalten eines dynamischen Systems mit der Ausgangsgre y(t) und der Anregung u(t) kann allgemein o mithilfe einer oder mehrerer inhomogener Dierentialgleichungen 1. Ordnung y(t) = f (u(t), y(t)) beschrieben werden. Zur Berechnung des Zeitverlaufs von y(t) muss diese Gleichung integriert werden. Die numerische Integration liefert eine Nherungslsung y1 der anaa o lytischen Lsung y(t1 ) der Dierentialgleichung: o
t1 t1

y1 = y0 +
t0

f (u(t), y(t))dt

y(t1 ) = y(t0 ) +
t0

f (u(t), y(t))dt

(8.1)

a Der entstehende Fehler dy = y1 y(t1 ) hngt vom Integrationsverfahren ab. Polygonzugverfahren nach Euler (explizite Rechnung): Dies ist das einfachste a und bekannteste Integrationsverfahren. Die Integration von t0 bis t1 wird angenhert a durch die Hhe hy0 des Dreiecks, das durch die Verlngerung der Tangente y0 an die o wahre Kurve y(t) im Punkt (y0 , t0 ) bis t1 entsteht. Damit berechnet sich y1 abhngig a von der Schrittweite h zu: y 1 = y 0 + hy 0

306
y y1 dy y(t1) y0 y0 h t0 t1 t y(t) hy0

8 Simulink Grundlagen

Abb. 8.23: Polygonzugverfahren nach Euler (explizite Rechnung); Integrationsschrittweite h (nach [31])

Abb. 8.23 zeigt das Vorgehen. Deutlich ist der entstehende Fehler dy zu erkennen. Das explizite Euler-Verfahren neigt daher bei groer Schrittweite zur Instabilitt. a Trapezverfahren von Heun: Beim Trapezverfahren von Heun wird das Integral auf der rechten Seite von Gl. (8.1) durch die so genannte Trapezregel (Abb. 8.24) approximiert. Dadurch entsteht die Nherung (Abb. 8.25): a y1 = y0 + h (y0 + y1 ) 2 (8.2)

y yn+1 yn yn-1 yn-2 A2 A1 h tn-2 tn-1 tn tn+1 t


gesamte Trapezflche unter dem Kurvenabschnitt [yn-1 yn] :

A1=h yn-1

A2= 1 h (yn-yn-1) 2

Abb. 8.24: Trapezregel: Die Flche a unter dem Kurvenabschnitt [yn1 yn ] wird durch ein Trapez approximiert

y (P) y1 y1 y0 y0 h t0

y(P) 1

y0+y(P) 1 2 t1 t

Mittelwert der Steigungen

Abb. 8.25: Trapezverfahren nach Heun; Integrationsschrittweite h (nach [31])

Da Gl. (8.2) implizit ist (y1 taucht wegen y1 = f (u1 , y1 ) auch auf der rechten Seite der Gleichung auf), muss sie bei nicht separierbaren Variablen iterativ gelst werden. Dazu o P wird zunchst z.B. mit dem Polygonzugverfahren nach Euler ein Schtzwert y1 bzw. a a

8.7 Simulationsparameter

307

y1 bestimmt, der dann auf der rechten Seite von Gl. (8.2) anstelle von y1 eingesetzt P wird. Dies wird in Abb. 8.25 durch (P ) verdeutlicht. Runge-Kutta-Verfahren: Hier wird das Integral von t0 bis t1 mithilfe der Keplerschen Fassregel angenhert. Da dies ein implizites Verfahren ist, m ssen die zum a u Zeitpunkt t0 noch nicht bekannten Funktionswerte y1 und y2 durch die Prdiktora Korrektor-Methode berechnet werden. Zunchst wird mit der expliziten Euler-Methode a P ein Schtzwert y1 bestimmt, und dieser mit der Trapezformel von Heun zu y1 korrigiert. a Das Polynom 3. Ordnung P3 (t) durch y0 und y1 liefert bei t2 schlielich den Schtzwert a P y2 . Damit berechnet sich y2 zu: y2 = y0 + 2h P [y0 + 4y1 + f (u2 , y2 )] 6

y y1 y0 y0 h t0 t1 y1

P3(t2) = y2 P3(t)

t2

Abb. 8.26: Runge-Kutta-Verfahren; Integrationsschrittweite h (nach [31])

Wie zu erkennen ist, handelt es sich beim Runge-Kutta-Verfahren um ein Doppelschrittverfahren. Meistens wird der Doppelschritt von t0 nach t2 zu einem Schritt zusammengezogen und die Schrittweite halbiert. Explizite Rechnung nach Adams-Bashforth: Hier handelt es sich um ein Mehrschrittverfahren, d.h. zur Nherung des Integrals von t0 bis t1 bzw. tn bis tn+1 werden a zustzlich die Steigungen an bereits vergangenen Punkten verwendet. Abb. 8.27 zeigt, a dass durch die drei Punkte yn , yn1 und yn2 ein Interpolationspolynom P2 (t) gelegt wird. Damit kann in Gleichung (8.1) f (u(t), y(t)) unter dem Integral durch P2 (t) ersetzt werden. yn+1 berechnet sich dann zu: yn+1 = yn + h [23yn 16yn1 + 5yn2 ] 12

Um das Verfahren nach Adams-Bashforth starten zu knnen, m ssen zunchst die ersten o u a Werte mit einem Einschrittverfahren wie Euler oder Runge-Kutta berechnet werden. Wie bereits angesprochen, bietet Simulink Integrationsalgorithmen (Solver) vom Typ Variable-step und Fixed-step an. Variable-step-Solver arbeiten mit variabler Integrationsschrittweite. Die Dierentialgleichungen werden zunchst unter Verwendung der Schrittweite zu Beginn, der a

308
y yn yn-1 yn-2 h tn-2 tn-1 tn tn+1 t P2(t) P2(tn+1)

8 Simulink Grundlagen

Abb. 8.27: Verfahren nach Adams-Bashforth; Integrationsschrittweite h (nach [31])

Initial step size, gelst. Sind die Ableitungen der Zustandsgren zu Simulationsbeginn o o zu gro, kann eine manuell gewhlte Initial step size vom Solver auch unterschritten a werden. Whrend der Simulation wird versucht, die Dierentialgleichungen unter Vera wendung der grtmglichen Schrittweite Max step size zu lsen. Wird die Max step o o o size auf auto gesetzt, berechnet sich ihr Wert abhngig von Start time und Stop time a zu: Max step size = Stop time Start time 50 (8.3)

Durch die Mglichkeit der Schrittweitenanpassung knnen Variable-step-Solver whrend o o a der Simulation die Anderung der Zustandsgren vom letzten zum aktuellen Zeitpunkt o uberwachen (Fehlerberwachung). Dar ber hinaus wird bei variabler Schrittweite die u u Erkennung von Unstetigkeitsstellen wie z.B. Sprungstellen mglich (zero crossing deo tection). F r einen ersten Versuch eignet sich bei zeitkontinuierlichen Systemen in der u Regel der Default-Algorithmus ode45. Fehlerberwachung: Damit die Integrationsschrittweite an die Dynamik der Zuu standsgren angepasst werden kann, wird bei jedem Integrationsschritt die Anderung o jeder Zustandsgre vom letzten zum aktuellen Zeitpunkt berechnet. Diese Anderung o wird mit local error ei (i = 1, . . ., Anzahl der Zustandsgren im System) bezeichnet, o siehe Abb. 8.28. Der Variable-step-Solver ermittelt nun bei jedem Integrationsschritt, ob der local error jeder Zustandsgre die Bedingungen f r den acceptable error erf llt, o u u der durch die Parameter Relative tolerance und Absolute tolerance der Conguration Parameters Dialogbox (abgek rzt mit reltol und abstol ) bestimmt wird: u ei max (reltol |xi |, abstol) acceptable error Erf llt eine der Zustandsgren diese Bedingung nicht, wird die Integrationsschrittweite u o herabgesetzt und erneut gerechnet. Dass der acceptable error uber eine Maximalwert Auswahl bestimmt wird, hat folgenden Grund: Ein f r Relative tolerance eingegebener u Wert entspricht der zulssigen Anderung in % des aktuellen Betrags der Zustandsgre a o xi . Wenn der acceptable error nur durch reltol |xi | bestimmt w rde, knnte dieser bei u o o a sehr kleinem |xi | so klein werden, dass die Zustandsgren sich nicht mehr ndern d rften. Dies wird durch einen festen Wert von abstol abgefangen. Bei Wahl der Absolute u

8.7 Simulationsparameter

309

tolerance zu auto wird mit dem Wert 106 zum Startzeitpunkt begonnen. Danach wird a abstol auf reltol max (|xi |) gesetzt. So wird gewhrleistet, dass in Bereichen, wo |xi | sehr klein oder null ist, sich die Zustandsgre noch ndern darf. Abb. 8.28 soll diesen o a Sachverhalt verdeutlichen.
xi(t) local error ei

tn tn+1

Durch diese Vorgehensweise wird sichergestellt, dass in Bereichen, in denen die Zustandsgren sehr steile Verlufe (d.h. hohe Dynamik) aufweisen, die Schrittweite autoo a matisch verkleinert wird. In Bereichen, in denen sich die Zustandsgren kaum ndern o a (z.B. im eingeschwungenen Zustand), kann dagegen durch Verwendung der grtmglio o chen Schrittweite Max step size Rechenzeit gespart werden. Die Wahl von abstol gilt modellweit, d.h. f r alle Zustnde. Kann damit nicht die u a gew nschte Genauigkeit erzielt werden, so bieten die Blcke Integrator, Transfer Fcn, u o State Space und Zero-Pole die Mglichkeit, den Wert von abstol in der Block Parameters o Dialogbox individuell zu setzen. F r die in den genannten Blcken gef hrten Zustnde u o u a wird dann der globale, in der Conguration Parameters Dialogbox gesetzte Wert von abstol uberstimmt. zero crossing detection: Unter zero crossings versteht Simulink Unstetigkeiten im Verlauf der Zustandsgren sowie gewhnliche Nulldurchgnge. Unstetige Signale o o a knnen durch folgende zero crossing-Blcke erzeugt werden: Abs, Backlash, Compao o re To Zero, Dead Zone, From Workspace, Hit Crossing, If, Integrator, MinMax, Relay, Relational Operator, Saturation, Sign, Signal Builder, Step, Switch, Switch Case sowie Subsysteme, deren Ausf hrung durch Steuersignale kontrolliert wird (siehe S. 330) und u eventuell vorhandene Stateow Charts. Diese Art von Funktionsblcken f hrt zero croso u sing-Variablen mit sich, die von der unstetigen Zustandsgre abhngen und an einer o a Unstetigkeitsstelle ihr Vorzeichen ndern. Simulink fragt am Ende jedes Integrationsa schritts diese Variablen ab und kann so erkennen, ob innerhalb des aktuellen Schritts ein zero crossing aufgetreten ist. Wenn ja, wird der Zeitpunkt des Auftretens durch Interpolation zwischen dem letzten und dem aktuellen Wert der entsprechenden zero crossing-Variablen mglichst genau festgestellt. Simulink rechnet dann bis zum linken o Rand der Unstetigkeitsstelle und fhrt beim nchsten Integrationsschritt am rechten a a Rand fort. Bei zu grob gewhlten Toleranzen kann es passieren, dass Nulldurchgnge a a (von Zustandsgren xi oder zero crossing-Variablen) nicht erkannt werden, wenn die o

Acceptable error Acceptable error wird durch wird durch reltol*|xi| bestimmt Acceptable error reltol*|xi| bestimmt wird durch abstol bestimmt

}
Abb. 8.28: Fehlerberwachung bei Variableu step-Solvern

310

8 Simulink Grundlagen

entsprechende Variable zu Beginn und Ende des aktuellen Integrationsschritts dasselbe Vorzeichen hat (siehe Abb. 8.29 links). Besteht dieser Verdacht, m ssen die Toleranzen u verkleinert werden, um sicherzustellen, dass der Variable-step-Solver die Schrittweite klein genug whlt. a
xi(t) xi(t)

t
Nulldurchgang nicht detektiert Nulldurchgang detektiert

t
Abb. 8.29: Erkennung von Nulldurchgngen a hngt von Toleranzen ab a

Die Option Zero crossing control (erscheint nur bei Variable-step-Solvern) ermglicht o es, die Erkennung von Unstetigkeitsstellen modellweit zu aktivieren (Enable all ) oder zu deaktivieren (Disable all, Kompromiss zwischen Rechenzeit und Genauigkeit!). Bei Wahl von Zero crossing control = Use local settings kann die zero crossing detection f r jeden der oben genannten zero crossing-Blcke durch Aktivierung/Deaktivierung der u o Check Box Enable zero crossing detection in der jeweiligen Block Parameters Dialogbox individuell zugelassen bzw. unterdr ckt werden. Die Optionen Time tolerance, Number u of consecutive zero crossings, Algorithm und Signal threshold sind von Interesse, wenn in einem Simulinkmodell Unstetigkeiten in beliebig kurzen (bis hin zu innitesimal kleinen) Zeitabstnden auftreten. Ein solches Verhalten kann z.B. durch die Modellierung a von schaltenden Regelungen oder von Leistungsstellgliedern hervorgerufen werden oder einfach in der Natur des modellierten physikalischen Systems liegen, wie die DemoModelle bounce.mdl und doublebounce.mdl verdeutlichen. Im Normalfall reichen die Default-Werte aus. Fixed-step-Solver arbeiten mit fester Schrittweite; eine Fehler berwachung und Eru kennung von Unstetigkeitsstellen ist nicht mglich. Da die Anzahl der Integrationsschrito te jedoch bekannt ist, kann die Rechenzeit f r ein Simulationsmodell genau abgeschtzt u a werden. Dies ist besonders dann von Bedeutung, wenn aus dem Blockdiagramm z.B. mit dem Real-Time Workshop Code erzeugt und f r eine Hardwareanwendung (Miu crocontroller, DSP etc.) weiterverwendet werden soll. Ein weiterer Vorteil besteht darin, dass bei Simulation mit konstanter Schrittweite ein Vergleich mit Mess-Signalen (z.B. aus digitalen Regelsystemen) sowie eine Weiterverwendung der Simulationsergebnisse in der Praxis (z.B. Einlesen in digitale Regelsysteme) mglich ist. o Bei Auswahl eines Fixed-step-Solvers erscheinen neben der Option Fixed step size (fundamental sample time) f r die Schrittweite unter Tasking and sample time options u noch weitere Optionsfelder: Periodic sample time constraint steht standardmig auf a Unconstrained. Eine Umstellung auf Ensure sample time independent ist nur bei Model Referencing (Kap. 8.9.4) von Belang, Specied wird nur f r die Simulation von u Multitasking-Systemen bentigt. Letzteres gilt auch f r die Check Boxen Higher prioo u rity value indicates higher task priority und Automatically handle data transfers between tasks, eine Aktivierung ist daher im Normalfall nicht notwendig. Diese und die Opti-

8.7 Simulationsparameter

311

on Tasking mode for periodic sample times werden in Kap. 10.3.2 (S. 386) genauer besprochen. Register Data Import/Export In diesem Register besteht die Mglichkeit, Daten auf den Matlab-Workspace zu o schreiben oder von diesem zu lesen, ohne entsprechende Blcke wie To Workspace, o From Workspace etc. im Modell zu platzieren. Dar ber hinaus knnen die Zustnde u o a des Modells mit Anfangswerten belegt werden. Dies ist besonders dann sinnvoll, wenn bei einer vorangegangenen Simulation des gleichen Modells der Endzustand mit Save to workspace - Final states gespeichert wurde und die aktuelle Simulation von diesem Zustand aus gestartet werden soll. Abb. 8.30 zeigt das Fenster des Data Import/ExportRegisters mit der Default-Einstellung.

Abb. 8.30: Data Import/Export-Register der Conguration Parameters Dialogbox

Wird die Input -Check Box unter Load from workspace aktiviert, knnen im angreno zenden Textfeld die einzulesenden Daten angegeben werden. Die Daten knnen unter o anderem in den bekannten Formaten Array, Structure, Structure with time oder als Simulink.Timeseries-Datenobjekt vorliegen. Fr Daten im Format Array gelten die u auf Seite 287 im Zusammenhang mit dem From Workspace-Block gemachten Angaben. Die Vektoren der einzelnen Signale werden in der Reihenfolge der Spalten in die Inport-Blcke (Unterbibliotheken Sources und Ports & Subsystems, Kap. 8.9.1) auf der o obersten Ebene des Simulationsmodells eingelesen. Eine einzulesende Structure oder Structure with time muss das auf Seite 312 angegebene Format haben. Wichtig: In der Block Parameters Dialogbox jedes Inport-Blocks muss unter Port dimensions die Dimension des korrespondierenden Einzelsignals (Feld strukturname.signals.dimensions) eingetragen werden.

312

8 Simulink Grundlagen

Unabhngig vom Format gilt: Bei Aktivierung der Check Box Interpolate data in der a Block Parameters Dialogbox der Inport-Blcke inter- oder extrapoliert Simulink die o Daten linear, wenn dies ntig ist. o F r die Initialisierung von Zustnden im Modell muss die Initial state-Check Box aktiu a viert werden. Im angrenzenden Textfeld kann dann eine Variable (Format Array, Structure oder Structure with time) eingetragen werden, die die Anfangswerte enthlt. Diese a Option ist besonders dann sinnvoll, wenn die eingelesenen Zustandswerte in einer vorangegangenen Simulation mit der Option Save to workspace, Check Box Final state oder einem To Workspace-Block auf den Workspace gespeichert wurden. In diesem Fall ist es mglich, die Simulation mit exakt denselben Werten der Zustandsgren beginnen zu o o lassen, mit denen eine vorangegangene beendet wurde. Ausgangsgren des Modells knnen durch die standardmig aktivierte Check Box o o a Output unter dem eingetragenen Variablennamen (default: yout ) auf den Workspace gespeichert werden. Simulink erkennt nur solche Signale als Ausgnge an, die auf einen a Outport-Block (Unterbibliotheken Sinks und Ports & Subsystems, Kap. 8.9.1) gef hrt u sind. Ebenso knnen die Zustandsgren (default: xout ) eines Modells durch Aktivieo o rung der States-Check Box unter dem angegebenen Variablennamen gespeichert werden. Wurde eine der unter Save to workspace zur Verf gung stehenden Check Boxen u aktiviert, knnen unter Save options zustzliche Optionen zur abgespeicherten Dateno a menge angegeben werden. An Formaten stehen die bekannten Formate Array, Structure und Structure with time zur Verf gung. Ein gespeicherter Array (von Ausgangs- oder u Zustandsgren) hat folgendes Aussehen (stimmt mit To Workspace-Block uberein): o u21 un1 u11 u22 un2 u12 u1f inal u2f inal unf inal Eine Structure with time besitzt zwei Felder, time und signals. Bei der Structure bleibt das time-Feld leer. Bei Speicherung von n Zustandsgren bzw. n Ausgangsgren mito o tels n Outport-Blcken erhlt die Structure with time folgendes Aussehen: o a strukturname.time = [t1 t2 tf inal ]T strukturname.signals(1).values = [u11 u12 u1f inal ]T strukturname.signals(1).dimensions = Dimension des Signals 1 strukturname.signals(1).label = Label des Signals 1 o strukturname.signals(1).blockName = Modellname/Name des zugehrigen Blocks strukturname.signals(n).values = [un1 un2 unf inal ]T strukturname.signals(1).dimensions = Dimension des Signals n strukturname.signals(n).label = Label des Signals n strukturname.signals(n).blockName = Modellname/Name des zugehrigen Blocks o Information uber die automatische Zuordnung der Zustandsgren zu Spalten bei Array o bzw. Feldern bei Structure und Structure with time erhlt man z.B. uber den Befehl a (mit sys = Modellname, siehe auch S. 354):
[sizes, x0, xstring] = sys

8.7 Simulationsparameter

313

Werden die Zustandsgren auf den Workspace geschrieben, so kann bei einer Struco ture oder Structure with time nat rlich auch das Feld strukturname.signals.blockName u abgefragt werden. Die Check Boxen Signal Logging (standardmig aktiviert) und Inspect signal logs when a Simulation ist paused/stopped ermglichen die Speicherung von Signalen mittels Signal o Logging und deren Analyse (siehe S. 297). Bei Simulation mit einem Variable-step-Solver knnen im Register Data Import/Export o noch zustzliche Ausgabeoptionen festgelegt werden: Durch Auswahl der Option Rene a output im Parameterfeld Output options besteht die Mglichkeit bei groer Integratio onsschrittweite durch Eingabe eines Rene factors > 1 zustzlich Zwischenwerte durch a Interpolation berechnen zu lassen. Dies erzeugt feiner aufgelste Kurvenverlufe, erhht o a o jedoch die Rechenzeit kaum. Die Zeiten, zu denen diese zustzlichen Zwischenwerte bea rechnet werden, knnen explizit angegeben werden, wenn die Option Produce additional o output gewhlt wird. Unter Output times kann hier ein Zeitpunkt oder ein Vektor mit a Zeitpunkten eingetragen werden. Produce specied output only gibt das Simulationsergebnis nur zu den eingetragenen Zeitwerten aus. Register Optimization Abbildung 8.31 zeigt das Fenster des Optimization-Registers mit der DefaultEinstellung (die Optionen unter Code generation erscheinen nur bei installiertem RealTime Workshop). Eine Aktivierung der Check Box Inline parameters unterdr ckt die Mglichkeit, Blocku o parameter whrend einer Simulation zu verstellen. Allein die Parameter, die im Matlab a Workspace als Variable deklariert wurden und anschlieend mithilfe der Dialogbox Model Parameter Conguration (Auswahl von Congure) als Global(tunable) parameters ausgewiesen wurden, bleiben verstellbar: Dazu whrend der Simulation den Wert der a Variablen im Workspace ndern und die Anderung mit dem Men punkt Edit/Update a u diagram ubernehmen. Da nicht verstellbare Blockparameter von Simulink als Konstan ten behandelt werden knnen, wird gegen ber der Default-Einstellung (die die meio u sten Blockparameter whrend der Simulation verstellbar lsst) Rechenzeit und Arbeitsa a speicherbedarf gespart. Daneben knnen weitere Optionen eingestellt werden, die Rechen- und Speicheraufwand o einer Simulation beeinussen: Block reduction ermglicht Simulink die automatische Zusammenlegung von Blcken o o whrend der Simulation, dies spart Rechenzeit. a Wenn die Check Box Implement logic signals as boolean data deaktiviert ist, knnen o Blcke (Logical Operator, Relational Operator (siehe S. 303 und 304), Hit Crossing (siehe o S. 362) und Combinatorial Logic), die am Ausgang standardmig den Datentyp boolean a ausgeben, auf Ausgabe von double umgeschaltet werden. Dazu muss in deren Block Parameters Dialogbox jedoch vorher der Output data type auf Logical umgestellt werden. Dies ist jedoch nur dann ntig, wenn Simulink-Modelle aus sehr viel lteren Versionen o a simuliert werden sollen bei denen die meisten Blcke standardmig nur den Datentyp o a double akzeptierten.

314

8 Simulink Grundlagen

Abb. 8.31: Optimization-Register der Conguration Parameters Dialogbox

Die Check Box Conditional input branch execution bezieht sich auf Simulink-Modelle, in denen Switch- oder Multiport Switch-Blcke (Bibliothek Signal Routing, Kap. 8.8.3) o verwendet werden. Aktiviert bewirkt sie, dass whrend der Simulation (bis auf wenige a Ausnahmen) jeweils nur die Blcke des Signalpfades berechnet werden, der tatschlich o a durch das Kontrollsignal der Blcke an den Ausgang durchgeschaltet wird. Dies verrino gert die Rechenzeit. Die Check Box Signal storage reuse sollte nur deaktiviert werden, wenn eine im Modell implementierte C-MEX S-Funktion mit dem Simulink Debugger (siehe Kap. 8.7.2) auf Fehler durchsucht oder im Modell ein oating scope (siehe S. 292) oder oating display verwendet wird. F r das Ein- und Ausgangssignal jedes Blocks wird dann ein separater u Speicherbereich alloziert. Der Speicher, der bei der Simulation eines Modells belegt wird, erhht sich dadurch stark. o Die Option Application lifespan wird bentigt, falls sich Blcke im Modell benden, die o o die bereits vergangene oder die absolute Zeit bentigen (z.B. Blcke aus dem Simulink o o Fixed Point Blockset oder Timer-Blcke f r die Erzeugung von Code mit dem Realo u Time Workshop). Normalerweise kann dieser Parameter auf der Standardeinstellung inf belassen werden.

8.7 Simulationsparameter Register Diagnostics

315

Im Register Diagnostics kann bestimmt werden, wie mgliche Ereignisse whrend eines o a Simulationslaufs von Simulink behandelt werden sollen. Die Ereignisse sind mehreren Ursachengruppen wie Solver (Abb. 8.32), Sample Time, Data Validity, Type Conversion usw. zugeordnet, deren individuelle Ereignisliste durch Markierung des entsprechenden Unterregisters (siehe Abb. 8.32, linker Fensterteil) angezeigt werden kann. F r jedes der u aufgelisteten Ereignisse (Algebraic loop, Minimize algebraic loop, Block priority violation usw.) kann nebenstehend ausgewhlt werden, wie reagiert werden soll: Bei none wird das a Ereignis ignoriert, warning erzeugt eine Warnung im Matlab-Fenster, error erzeugt eine Fehlermeldung und ruft den Abbruch der Simulation hervor. Register Hardware Implementation Soll aus einem Simulink-Modell spter einmal Code f r digitale Systeme erzeugt werden, a u so sollten die Optionen des Hardware Implementation-Registers (Abb. 8.33) beachtet werden. Hier knnen die Eigenschaften der Hardware speziziert werden, auf der der o Code spter ausgef hrt werden soll (unter Embedded Hardware). Mit Kenntnis dieser a u Eigenschaften kann Simulink dann bereits whrend der Simulation des Modells auf im a Zusammenhang mit der Zielhardware evtl. auftretende Probleme (wie z.B. einen Arith metischen Uberlauf) aufmerksam machen. Unter Device vendor kann der gew nschte u Hardware-Hersteller ausgewhlt werden (z.B. ARM, Analog Devices, Freescale, Ina neon, Texas Instruments) und dazu unter Device type eine Liste aktuell verf gbarer u Mikroprozessoren. Entspricht die sptere Anwendungsumgebung keinem der Listeneina trge, knnen nach Auswahl von Device vendor = Generic und Device type = Custom a o die charakteristischen Eigenschaften der Hardware wie Number of bits, native word size und Byte ordering auch individuell eingetragen werden.

Abb. 8.32: Diagnostics-Register (Ursachengruppe Solver) der Conguration Parameters Dialogbox

316

8 Simulink Grundlagen

Abb. 8.33: Hardware Implementation-Register der Conguration Parameters Dialogbox

Register Model Referencing

Abb. 8.34: Model Referencing-Register der Conguration Parameters Dialogbox

Im oberen Fensterteil Rebuild options for all referenced models des Model ReferencingRegisters (Abb. 8.34) kann ausgewhlt werden, wie mit Modellen verfahren werden a soll, die vom betrachteten Modell referenziert werden (siehe dazu Kap. 8.9.4). Bei der

8.7 Simulationsparameter

317

Default-Einstellung Rebuild options = If any changes detected wird nur dann das Simulation Target erneut erstellt, wenn sich z.B. das referenzierte Modell selbst, von ihm verwendete Workspace-Variablen oder eingebundene S-Funktionen gendert haben. Im a unteren Fensterteil Options for referencing this model wird unter Total number of instances allowed per top model festgelegt, wie oft das betrachtete Modell als Referenz innerhalb anderer Modelle einbindbar ist. Unter Model dependencies knnen dem beo trachteten Modell vom Benutzer zugeordnete Files angegeben werden (z.B. M-Files, die uber Callback-Routinen (Kap. 8.8.1) mit dem betrachteten Modell verkn pft sind). Sie u werden dann bei Simulation aller Simulink-Modelle die das betrachtete Modell referen zieren auf Anderungen mit berprft. u u

8.7.2

Fehlerbehandlung und Simulink Debugger

Tritt whrend der Simulation ein Fehler auf, hlt Simulink die Simulation an und ein a a Simulation Diagnostics Viewer wird genet. Im oberen Teil des Fensters (Abb. 8.35) o sind die am Fehler beteiligten Blcke des Modells aufgelistet. Werden sie angeklickt, o erscheint im unteren Fensterteil die genaue Beschreibung des Fehlers und im Modell wird zustzlich die Fehlerquelle farbig hervorgehoben, um ihre Lokalisierung zu erleichtern. a

Abb. 8.35: Fehlermeldung im Simulation Diagnostics Viewer

Ein Linksklick auf den Open-Button net im Allgemeinen die Block Parameters Diao logbox des zugehrigen Blocks, so dass dort direkt Parameternderungen vorgenommen o a werden knnen. o Soll ein Simulink-Modell auf Fehler durchsucht werden, so hilft der Simulink Debugger. Mithilfe des Simulink Debuggers kann die Simulation abschnittsweise ausgef hrt und u Zustnde, Eingangs- und Ausgangsgren uberpr ft werden. Der Simulink Debugger a o u kann z.B. vom Simulink-Modell aus (Button bzw. Men punkt Tools/Simulink debugu ger ) gestartet werden. An dieser Stelle soll am Beispiel bsp math.mdl ein kurzer Einblick in die grasche Bedienoberche des Simulink Debuggers (Abb. 8.36) gegeben werden. a Wird die Simulation uber den Button in der Toolbar des Debuggers gestartet, hlt a der Debugger automatisch nach dem ersten Simulationssschritt bsp math.Simulate an. Mithilfe der Schaltchen a kann nun die Simulation blockweise oder schrittweise fortgesetzt und dabei Ein- und Ausgnge der gerade ausgef hrten Blcke angezeigt a u o werden. Abb. 8.36 oben zeigt das Fenster des Debuggers von bsp math.mdl nach Simu(blockweise Fortsetzung) sowie das lationsstart und zweimaliger Aktivierung von Blockdiagramm von bsp math.mdl mit eingeblendeter Debugger-Information.

318

8 Simulink Grundlagen

Im Breakpoints-Register des Debuggers knnen die Punkte, an denen der Debugger o anhlt selbst gesetzt sowie zustzliche Haltebedingungen (z.B. bei zero crossings) festa a gelegt werden. Um die Fehlersuche nicht zu behindern, sollten im Optimization-Register der Conguration Parameters Dialogbox (siehe S. 313) die Check Boxen Signal storage reuse und Block reduction deaktiviert werden.

8.8

Verwaltung und Organisation eines Simulink-Modells

Die Punkte in diesem Unterkapitel dienen der graschen und strukturellen Organisation aber auch der komfortableren Durchf hrung einer Simulation sowie dem Drucken eines u Simulink-Modells.

8.8.1

Arbeiten mit Callback-Routinen

Zur schnellen Modikation, Simulation und Auswertung eines Simulink-Modells wird es sinnvoll sein, Denitionen von Blockparametern oder Befehlsfolgen zur graschen

Abb. 8.36: Fenster des Simulink Debuggers (oben) und SimulinkModell bsp math.mdl (unten)

8.8 Verwaltung und Organisation eines Simulink-Modells

319

Darstellung oder Weiterverarbeitung von Simulationsergebnissen in Matlab-Skripts (M-Files) zusammenzufassen. Auf diese Weise hat man zu jedem Zeitpunkt Ubersicht uber die Parameter, mit denen aktuell simuliert wird, bzw. muss nach der Simulation Analyse- und Plotbefehle nicht immer wieder hndisch aufrufen. Um diese Matlaba Skripts mit dem Simulink-Modell fest zu verkn pfen, werden Model Callback-Routinen u verwendet. Matlab-Skripts (und nat rlich alle Arten von Matlab-Befehlen) knnen u o jedoch auch mit Blcken verkn pft werden. In diesem Fall werden Block Callbacko u Routinen verwendet. Unter Callback-Routinen versteht man Funktionen oder Programme, die ausgef hrt u werden, wenn eine bestimmte Aktion auf ein Simulink-Modell oder einen Block ausgef hrt wird, wie z.B. Laden, Initialisieren, Starten oder Speichern eines Modells oder u Kopieren, Verschieben, Lschen eines Blocks. o Model Callback-Routinen Soll ein Matlab-Skript z.B. automatisch bei der Initialisierung eines Simulink-Modells ausgef hrt werden, um in ihm denierte Blockparameter in den Matlab-Workspace u zu laden, wird unter File/Model properties der Model Properties-Editor aufgerufen. Im Register Callbacks wird links der Punkt InitFcn ausgewhlt und im rechten Fenterteil a der Name des Matlab-Skripts (ohne die Extension .m) eingetragen (Abb. 8.38). Sollen die Parameter auch bereits schon beim Onen des Simulink-Modells zur Verf gung u stehen, wird das Matlab-Skript zustzlich unter PreLoadFcn eingetragen. Information, a welche Callback-Routinen wann aufgerufen werden, erhlt man durch Aktivieren der a Check Box Callback tracing unter File/Preferences/Simulink Preferences. Damit wird Simulink veranlasst, alle Callback-Routinen bei ihrem Aufruf im Matlab-CommandWindow aufzulisten. Aus dem Matlab-Command-Window kann die Verkn pfung eines Matlab-Skripts u mittels Model Callback-Routine mit dem set param-Befehl durchgef hrt werden. Der u Befehlsaufruf
set param(sys, InitFcn, sys ini)

verknpft das Matlab-Skript sys ini.m als Model initialization function mit dem u Simulink-Modell sys.mdl. R ckgngig gemacht werden kann diese Verknpfung uber u a u die Befehlszeile:
set param(sys, InitFcn, )

Callback-Tracing wird durch die folgende Befehlszeile aktiviert:


set param(0, CallbackTracing, on)

Welche Callback-Routinen Simulink f r Modelle anbietet, und wie diese bei Verwendung u des set param-Befehls bezeichnet werden, zeigt Abb. 8.38. Beispiel In diesem einfachen Beispiel werden die Ausgnge eines Constant- und eines Repeating a Sequence-Blocks miteinander verglichen. Die Signale werden einzeln auf den Workspace

320

8 Simulink Grundlagen

geschrieben und knnen mit Matlab grasch dargestellt werden. Die Parameter der o Blcke werden im Matlab-Skript bsp parameter ini.m deniert. Ein Matlab-Skript o f r die grasche Ausgabe kann z.B. aussehen wie die Datei bsp parameter plot.m. u Der Model Properties-Editor aus Abb. 8.38 zeigt, wie die Matlab-Skripte mit bsp parameter.mdl verkn pft wurden. Aus Abb. 8.39 rechts ist das Ergebnis der Siu mulation zu entnehmen. Hier wurden die im Format Array gespeicherten Einzelsignale verst Konst, repeat und erg in zwei Subplots uber die Simulationszeit tout aufgetragen.

[u1] Goto1

[u1] From1 [u2] From2 [u3]

Konst Constant

verst Gain >=

verst_Konst To Workspace1 erg To Workspace


[u2] Goto2

Scope

From3

Repeating Sequence

Relational Operator

repeat To Workspace2
[u3] Goto3

Abb. 8.37: Beispiel zur Verwendung von Callback-Routinen: bsp parameter.mdl

%bsp_parameter_ini.m %Constant Konst= 1.15; %Repeating Sequence zeit=[0:15:135]; wiederhol=[0,0,5,5,10,10,20,20,10,10]; %Gain verst=10;

%bsp_parameter_plot.m subplot(2,1,1) plot(tout,verst_Konst,tout,repeat); grid on; set(gca,Fontsize, 13); title(verst_Konst und repeat); subplot(2,1,2) plot(tout, erg); grid on; set(gca,Ylim,[0 2],Fontsize, 13); title(Ergebnis des Vergleichs);

8.8 Verwaltung und Organisation eines Simulink-Modells

321

Abb. 8.38: Callbacks-Register im Model Properties-Editor von bsp parameter.mdl (die Bezeichungen der Callback-Routinen bei Verwendung des set param-Befehls entsprechen den Listeneintrgen im linken Fensterteil) a
verst_Konst und repeat 20 15 10 5 0 0

50

100

150

200

250

300

350

400

450

500

Ergebnis des Vergleichs 2 1.5 1 0.5 0 0

50

100

150

200

250

300

350

400

450

500

Abb. 8.39: Links: Block Parameters Dialogbox der Repeating Sequence. Rechts: Ergebnis der Simulation, erzeugt mit bsp parameter plot.m

Block Callback-Routinen Block Callback-Routinen sind Funktionen, die entweder bei einer bestimmten Aktion auf einen Funktionsblock ausgef hrt werden (z.B. Onen, Schlieen, Verschieben, Lschen) u o oder zu bestimmten Zeitpunkten des Simulationslaufs, genauso wie Model Callbacks (z.B. Onen des Modells, Initialisierung, Simulationsstart oder -stop). Zum interaktiven Setzen von Block Callback-Routinen wird im Kontextmen des gew nschten Blocks der u u Punkt Block properties ausgewhlt, der die Block Properties Dialogbox net. Im Regia o ster Callbacks knnen nach Auswahl der gew nschten Callback-Routine die bentigten o u o Befehle oder Matlab-Skripts (ohne die Extension .m) im rechten Fensterteil eingetragen werden. F r ein Setzen von Block Callback-Routinen im Command Window wird u der set param-Befehl verwendet. Der Aufruf
set param(sys/Constant1, OpenFcn, block ini)

zum Beispiel verknpft das Matlab-Skript block ini.m als Callback-Routine OpenFcn u

322

8 Simulink Grundlagen

mit dem Block Constant1 des Modells sys.mdl. Dadurch wird beim Onen des Blocks Constant1 nicht mehr die Block Parameters Dialogbox genet, sondern es werden nur o die in block ini.m gespeicherten Befehle abgearbeitet. Im Beispiel pt1fun.mdl (Abb. 9.19 links) wurde die Block Callback-Routine OpenFcn, verkn pft mit dem Matlab-Befehl edit(pt1sfun m2.m), auf ein leeres maskiertes u Subsystem (im Modell ganz unten) angewendet um bei Doppelklick nicht das darunterliegende Subsystem erscheinen zu lassen, sondern das File pt1sfun m2.m im MatlabEditor zu nen. o

8.8.2

Der Model Browser

Der Model Browser (leider nur unter Windows verf gbar) ermglicht es dem Simulinku o Benutzer, in einem komplexen Modell mit mehreren Modellebenen (erzeugt durch Subsysteme, Kap. 8.9) leichter zu navigieren. Aufgerufen wird der Model Browser uber den

Abb. 8.40: Fenster des Simulink Model Browsers fr das Demo-Modell f14 digital.mdl u

Button in der Toolbar des Simulink-Modells oder durch Auswahl des Men punkts u View/Model Browser Options/Model Browser. Das Fenster des Simulink-Modells wird dann in zwei Unterfenster aufgeteilt. Abb. 8.40 zeigt das Fenster des Demo-Modells f14 digital.mdl nach Start des Model Browsers. Die im Modell existierenden Subsysteme (wie z.B. Controllers, F14 Aircraft Dynamic Model ) werden im linken Fensterteil aufgelistet. Ein Linksklick auf einen Listeneintrag net das Subsystem. Tiefer vero schachtelte Subsysteme erscheinen ebenfalls in der Liste im linken Fensterteil, ihrem jeweils uberlagerten Subsystem zugeordnet. Einr cken der Listeneintrge verdeutlicht u a die Verschachtelungstiefe.

8.8 Verwaltung und Organisation eines Simulink-Modells

323

8.8.3

Bibliotheken: Signal Routing und Signal Attributes Signalfuhrung und -eigenschaften

Die Blcke dieser Unterbibliotheken dienen der graschen Organisation von Funktio onsblcken und ihren Verbindungslinien. Komplexere Modelle knnen so ubersichtlich o o gestaltet und komfortabel bedient werden.

Signal Routing Signalfuhrung


Bus Creator, Bus Selector Mit einem Bus Creator knnen Signale zu einem neuen composite-Signalo Bus kombiniert werden. Anders als beim Mux sind hier den Eigenschaften der Einzelsignale keine Grenzen gesetzt. Number of inputs legt die Anzahl der Einzelsignale fest, die Default-Wahl Inherit bus signal names from input ports in der List Box bewirkt, dass an Einzelsignale evtl. vergebene Namen auch im Signal-Bus bzw. bei einer spteren Zerlegung des Signala Busses mittels Bus Selector oder Demux weiterverwendet werden.

Bus Creator

Signale, die mithilfe eines Mux- oder Bus Creator-Blocks zusammengefasst wurden, knnen auer mit einem Demux-Block auch mit einem Bus o Selector aus dem Signal-Bus wieder rekonstruiert werden. Es besteht auch die Mglichkeit verschiedene Einzelsignale wieder neu zusammenzufassen. Im folgeno den Beispiel (Abb. 8.41) wurden die drei Einzelsignale der Constant-Blcke mit einem o Bus Creator zusammengefasst. In der Block Parameters Dialogbox des Bus Selector Blocks sind sie unter Signals in the bus aufgelistet. Uber den Select >>-Button kann ausgewhlt werden, welche der Signale extrahiert oder neu zusammengefasst werden a sollen. Im Beispiel wurden A und signal3 ausgewhlt. Damit erhlt der Bus Selector a a zwei Ausgnge, an denen A und signal3 abgegrien werden knnen. W rde die Check a o u Box Output as bus aktiviert, w rden A und signal3 zu einem neuen Ausgangssignal u zusammengefasst. Der Bus Selector htte dann nur einen Ausgang. a
Bus Selector
[1 2 3] Constant 2 4 Constant (5 6) 2 2 Bus Creator B 3 A 3 3{6} Bus Selector 3 3 <A> 2 <signal 3> 2 Display 1 1 2 3 Display 5 6

Constant 1

Abb. 8.41: Beispiel zum Bus Creator und Bus Selector-Block: bsp busselector.mdl

324

8 Simulink Grundlagen

Abb. 8.42: Block Parameters Dialogbox des Bus SelectorBlocks

Data Store Memory, Data Store Read, Data Store Write


A Data Store Memory A Data Store Read A Data Store Write

Mit einem Data Store Memory-Block kann von einem Simulink-Modell aus ein Data Store-Speicherbereich deniert und initialisiert werden, in den mit Data Store Write Daten abgelegt und mit Data Store Read wieder ausgelesen werden knnen. Der Name des Speicherbereichs muss dazu im Feld o Data store name aller drei Blcke angegeben werden. Die Dimension der o zu speichernden Daten wird im Data Store Memory durch entsprechende Dimensionierung des Initial value festgelegt. Ein einmal denierter Data Store-Speicherbereich ist von allen Ebenen eines Simulink-Modells aus zugnglich und erlaubt daher den einfachen a Austausch von Daten zwischen Subsystemen (Kap. 8.9.1) als auch mit referenzierten Modellen (Kap. 8.9.4), ohne dass die Daten mittels Einund Ausgngen (und entsprechenden Inport- und Outport-Blcken) von a o Ebene zu Ebene geleitet werden m ssen. u

Ein Data Store-Speicherbereich kann auch mithilfe von Datenobjekten der Klasse Simulink.Signal eingerichtet, beschrieben und ausgelesen werden. In diesem Fall knnen o Daten auch modell bergreifend ausgetauscht werden, was besonders beim Arbeiten mit u referenzierten Modellen (Kap. 8.9.4) hilfreich ist. Goto und From
[A] Goto [A] From

Die Blcke Goto und From erlauben es, Signale von einem Funktionsblock o zu einem anderen zu schicken, ohne dass diese Blcke tatschlich grasch o a miteinander verbunden sind (siehe Abb. 8.37, bsp parameter.mdl). Wie bei der Verwendung von Data Store-Speicherbereichen (siehe S. 324) er halten komplexe Modelle dadurch mehr Ubersichtlichkeit. Im Unterschied zu Data Store-Speicherbereichen knnen Goto- und From-Blcke jedoch o o nicht f r den Datenaustausch mit referenzierten Modellen (Kap. 8.9.4) u verwendet werden.

8.8 Verwaltung und Organisation eines Simulink-Modells

325

Wird im Goto-Block im Textfeld Goto Tag ein Name (default-Name A) eingetragen, so schickt dieser sein Eingangssignal an einen oder mehrere From-Blcke, in denen derselbe o Name in ihrem Goto Tag-Textfeld steht. Die Sichtbarkeit eines solches Tags kann im Goto-Block zu local, scoped oder global festgelegt werden. Mux und Demux Mit dem Mux-Block knnen wie mit einem Multiplexer 1-D Arrays (also o skalare oder Vektor-Signale, Kap. 8.4.1) zu einem neuen composite-VektorSignal kombiniert werden. Sobald eines der Einzelsignale ein 2-D Array ist (Matrix) entsteht am Ausgang des Mux ein (composite-)Signal-Bus. Unter Number of inputs knnen die Namen, die Dimensionen und die Anzahl o der Eingangssignale angegeben werden. Beispiel: Mit dem Eintrag [4 3 1] werden drei Eingnge deniert mit der Signalbreite 4 am ersten und a 3 am zweiten Eingang. Die Signalbreite des dritten Eingangs wird durch Eintrag von 1 nicht festgelegt.

Mux em Demux

Der Demux-Block hat die umgekehrte Funktion. Er teilt ein aus Einzelsignalen kombiniertes Signal wieder in Einzelsignale auf. Der Demux-Block arbeitet entweder im Vektor-Modus (Check Box Bus selection mode ist deaktiviert) oder bus selection-Modus (Check Box Bus selection mode ist aktiviert). Im Vektor-Modus werden am Eingang nur 1-D-Signale akzeptiert, deren Elemente der Demux abhngig von der Number of outputs a auf seine Ausgnge aufteilt. F r Number of outputs kann eine Zahl > 1 oder ein Zeilena u vektor eingetragen werden. Wird ein Zeilenvektor angegeben, hngt die Aufteilung der a Elemente des Eingangssignals auf die Ausgnge von der Breite des Eingangssignals, der a Anzahl und der Breite der Ausgnge ab. Im bus selection-Modus werden am Eingang a nur Signale akzeptiert, die entweder der Ausgang eines Mux-Blocks oder eines anderen Demux-Blocks sind. Die drei nachfolgenden kurzen Beispiele (Abb. 8.43 8.45) sollen die Arbeitsweise eines Demux-Blocks verdeutlichen:
1 [1 2 3 ] Constant
3

em

Display 3 Display2 Display1

Demux Number of outputs = 3

Abb. 8.43: Beispiel 1 zum Demux-Block: Ein 3-elementiges Eingangssignal wird in 3 skalare Einzelsignale aufgeteilt: bsp1 demux.mdl

1
2 2

2 Display 3 4 Display2 Display1

(1:4) Constant

em

Demux Number of outputs = 3

Abb. 8.44: Beispiel 2 zum Demux-Block: Ein 4-elementiges Eingangssignal wird in 3 Einzelsignale aufgeteilt (automatische Verteilung der Elemente): bsp2 demux.mdl

326
1 4 4 (1:7) Constant Demux Number of outputs = [4 2 1] Display2 7 em 2 Display 7 Display1 2 3 4 2 5 6

8 Simulink Grundlagen

Abb. 8.45: Beispiel 3 zum Demux-Block: Ein 7-elementiges Eingangssignal wird in 3 Einzelsignale aufgeteilt (benutzerdenierte Aufteilung): bsp3 demux.mdl

Selector Mit dem Selector knnen aus einem 1-D Array (Vektor), 2-D Array (Mao trix) oder hherdimensionalen Signal einzelne Elemente ausgewhlt oder o a zu einem neuen Signal verkn pft werden. Folgendes Beispiel (Abb. 8.46) u verdeutlicht die Verwendung f r 1-D und 2-D Arrays. u
1 (1:7) Constant
7

Selector

3 6 Display

Constant 1 1 3 4 6 8 10 2 5 9
[3x3] [2x2]

Selector Number of input dimensions = 1 1. Index = [1 3 6] Input port size = 7

5 9 Display 1

6 10

Selector1 Number of input dimensions = 2 1. Index = [2 3] 2. Index = [3 2]

Abb. 8.46: Beispiele zum Selector-Block: bsp selector.mdl

8.8 Verwaltung und Organisation eines Simulink-Modells Switch, Manual Switch und Multiport Switch

327

Switch

Der Switch-Block schaltet abhngig vom Kontrollsignal u2 am Eingang 2 a (mittlerer Eingang) eines seiner beiden Eingangssignale durch. Parameter sind die Criteria for passing rst input (u2 , > Threshold, u2 = 0 ) und die Schaltschwelle (Threshold ). Beim Manual Switch erfolgt die Auswahl eines der beiden Eingangssignale per manuellem Links-Doppelklick. Beim Multiport Switch liegt das Kontrollsignal am obersten Eingang an. Abhngig vom gerundeten Wert des Kontrollsignals wird der jeweilige Eina gang durchgeschaltet. Beispiel: Bei einem Wert des Kontrollsignals von 3, 3 (gerundet 3) wird das Signal am Eingang 3 an den Ausgang weitergeleitet. Der Kontrolleingang wird bei der Nummerierung der Eingnge nicht a gezhlt. Uber Number of inputs kann die Anzahl der Eingangssignale festa gelegt werden.

Manual Switch

Multiport Switch

Signal Attributes Signaleigenschaften


Probe Der Block Probe (zu deutsch: Sonde, Pr fkopf) fragt sein Eingangssignal u auf wichtige Eigenschaften ab: Breite, Abtastzeit, Dimension, ob es reell Probe oder komplex ist und ob es sich um ein rahmenbasiertes Signal handelt (Aktivierung der entsprechenden Check Boxen). Abhngig von der Anzahl der aktia vierten Check Boxen hat der Probe-Block einen oder mehrere Ausgnge, an denen die a Signaleigenschaften abgegrien werden knnen. o
W:0, Ts:[0 0], C:0, D:0, F:0

Rate Transition Der Rate Transition-Block vereinfacht die Verknpfung von Blcken mit u o unterschiedlichen Abtastzeiten. Mithilfe der Check Boxen Ensure data integrity during transfer und Ensure deterministic data transfer kann auf Rate Transition den bentigten Speicherplatz sowie auf die zeitliche Verzgerung bei der o o Daten bertragung Einuss genommen werden. Der Rate Transition-Block erkennt autou matisch, ob er als Zero-Order Hold (Ubergang von einem langsamen zu einem schnellen Block) oder als Unit Delay (Ubergang von einem schnellen zu einem langsamen Block) arbeiten muss. Systeme mit gemischten Abtastzeiten werden in Kap. 10.3 (S. 385) behandelt. Signal Conversion Der Signal Conversion-Block erzeugt ein den Werten nach dem Eingang gleiches Ausgangssignal, jedoch kann der Typ des Signals verndert wera den. Bei Wahl von Contiguous copy aus der Dropdown-Liste unter Output z.B. wird das mit einem Mux erzeugte composite-Eingangssignal in

Signal Conversion

328

8 Simulink Grundlagen

einen neuen, zusammenhngenden Speicherbereich kopiert. Dies kann vor a allem bei der Erstellung von Code aus einem Simulink-Modell hilfreich sein. Virtual bus konvertiert den an seinem Eingang anliegenden nichtvirtuellen SignalBus (siehe Kap. 8.4.1) in einen virtuellen, was vor allem bei breiten Signal-Bussen den Speicherberarf erheblich verringern kann.

8.8.4

Drucken und Exportieren eines Simulink-Modells

Genauso wie Matlab-Figures knnen auch Simulink-Modelle ausgedruckt und exporo tiert werden. Mit print -ssys wird das Modell sys auf dem Standard-Drucker ausgegeben. Der Druck uber File/Print lsst jedoch die Einstellung mehrerer Druckoptionen a zu. Hier kann z.B. die zu druckende Modellebene gewhlt werden. a Der Export eines Simulink-Modells in eine Datei erfolgt analog zu Matlab-Figures:
print -ssys; print -ssys -dmeta sys; print -ssys -deps sys; % Drucken von sys.mdl auf Standarddrucker % Speichern als Windows-Metafile (sys.emf) % Speichern als Encapsulated Postscript (sys.eps)

8.9
8.9.1

Subsysteme und Model Referencing


Erstellen von Subsystemen / Bibliothek: Ports & Subsystems

Um komplexe Modelle ubersichtlicher zu gestalten, bietet Simulink die Mglichkeit der o Hierarchiebildung, d.h. der Unterteilung von Modellen in so genannte Subsysteme an. Neben dem Vorteil, dass sich die Anzahl der im Simulationsfenster dargestellten Funktionsblcke reduziert, knnen funktionell verwandte Blcke sinnvoll zu eigenen Moo o o dellteilen (Subsystemen) zusammengefasst werden, welche durch Masken (Kap. 8.9.2) leichter bedienbar gemacht werden, oder (mit oder ohne Maske) zur Erstellung einer eigenen Blockbibliothek (Kap. 8.9.3) herangezogen werden knnen. Daneben besteht die o Mglichkeit, Subsysteme abhngig von Bedingungen auszuf hren (Enabled Subsystem, o a u Triggered Subsystem, Enabled and Triggered Subsystem, For Iterator-, Function-Call-, If Action-, Switch Case Action- und While Iterator Subsystem), wodurch der Benutzer die Ausf hrungsreihenfolge bzw. den Ablauf von Modellteilen steuern kann. Bei Auswahl u des blau unterlegten Blocks Subsystem Examples aus der im folgenden behandelten Bibliothek Ports & Subsystems erhlt der Benutzer eine Zusammenstellung der o.g. bedingt a ausgef hrten Subsysteme mit Beispielen und hilfreichen Kommentaren. u Ubersicht uber die (beliebig tief) verschachtelten Subsysteme behlt der Benutzer mit a dem in Kap. 8.8.2 beschriebenen Model Browser. Ein Subsystem kann auf zwei Wegen erstellt werden:

1. Die Funktionsblcke, die zusammengefasst werden sollen, werden im besteheno den Modell mithilfe eines Auswahlrahmens markiert (damit wird sichergestellt,

8.9 Subsysteme und Model Referencing

329

dass alle Verbindungslinien ebenfalls markiert werden). Im Men Edit wird dann u der Punkt Create Subsystem ausgewhlt. Die markierten Blcke werden von Sia o mulink durch einen Subsystem-Block ersetzt. Ein Doppelklick auf diesen Block onet ein neues Fenster mit dem Namen des Subsystem-Blocks. Die Ein- und Ausgangssignale des Subsystems werden mit der dar ber liegenden Systemebene u automatisch durch Inport- und Outport-Blcke verknpft. o u 2. Aus der Unterbibliothek Ports & Subsystems wird ein gew nschter Subsystemu Block in das Modell kopiert. Mit einem Doppelklick wird das Fenster genet und o die gew nschten Funktionsblcke eingef gt. Die Verbindungen zur nchsthheru o u a o en Ebene werden durch Inport- und Outport-Blcke hergestellt. Das Subsystem o enthlt standardmig bereits einen Inport- und einen Outport-Block. a a Die Block Parameters Dialogbox eines Subsystems erhlt man durch Wahl von Subsya stem parameters... im Kontextmen des Blocks. Hier knnen z.B. Schreib- und Leseu o rechte gesetzt werden.

Ports & Subsystems Ports und Subsysteme


If und If Action Subsystem Mithilfe der Blcke If und If Action Subsystem knnen if-then-elseo o Bedingungen, wie sie z.B. aus der Programmiersprache C bekannt sind, realisiert werden. Im If-Block knnen die Anzahl der Eingnge (Numo a If Action Subsystem ber of inputs) sowie if- und elseif-Bedingungen (Textfelder if expression, elseif expressions) angegeben werden. Durch Aktivierung/Deaktivierung if(u1 > 0) u1 der Check Box Show else condition wird der else-Ausgang erelse zeugt/unterdr ckt. Das If Action Subsystem enthlt standardmig einen u a a If Action Port Block, der den zustzlichen Action-Eingang erzeugt. Hier kann a gewhlt werden, ob die Zustandsvariablen des If Action Subsystems bei Ausf hrung a u gehalten oder auf ihre Initialisierungswerte zur ckgesetzt werden sollen. Abb. 8.47 u zeigt, wie die Anweisung if (u1 > 0) {If Action Subsystem1;}else{If Action Subsystem;} mithilfe von Subsystemen in Simulink umgesetzt werden kann.
In1 Action Out1
if(u1 > 0) u1 else

If
In1

if { } else { } Out1 In1 Out1

If Action Subsystem

If Action Subsystem1

Abb. 8.47: Realisierung einer ifthen-else-Bedingung in Simulink mit If- und If Action Subsystem-Blcken o

Die Bibliothek Ports & Subsystems bietet noch weitere Subsystem-Blcke an, mit denen o auch for-, switch-, while- und do-while-Schleifen realisiert werden knnen. o

330 Inport und Outport

8 Simulink Grundlagen

Inport- und Outport-Blcke stellen allgemein die Eingnge zu und o a Ausgnge von einem Simulationsmodell dar. Simulink nummeriert die a Inport- und Outport-Blcke (unabhngig voneinander) automatisch begino a nend bei 1. Im Textfeld Port dimensions (Register Signal Attributes) kann 1 die zulssige Breite des Inport-Eingangssignals angegeben werden (Zahl > a Out1 1, z.B. 3). Eine manuelle Festlegung der Port dimensions ist z.B. dann ntig, wenn Daten im Format Structure oder Structure with time aus dem Workspace o in die Inport-Blcke auf der obersten Modellebene (d.h. nicht in einem Subsystem) eino gelesen werden sollen (siehe S. 311).
1 In1

Steht ein Outport-Block innerhalb eines bedingt ausgef hrten Subsystems (Blcke Enabu o led Subsystem, Triggered Subsystem und Enabled and Triggered Subsystem), ist die Option Output when disabled von Bedeutung: hier kann angegeben werden, wie mit dem Ausgang verfahren wird, wenn das Subsystem gerade nicht ausgef hrt wird (Zur cksetzen u u oder Halten auf dem letzten Wert). Initial output gibt an, auf welchen Wert der Ausgang jeweils zur ckgesetzt wird. u Uber Inport- und Outport-Blcke auf der obersten Modellebene knnen Daten aus dem o o Workspace eingelesen bzw. dorthin geschrieben werden. Dazu muss im Register Data Import/Export der Conguration Parameters Dialogbox (siehe S. 311) die Input - bzw. Output -Check Box aktiviert und im angrenzenden Textfeld der Name der einzulesenden Variablen bzw. der Variablen, auf die geschrieben werden soll, eingetragen sein. o Inport- und Outport-Blcke auf der obersten Modellebene knnen auch dazu verwendet o werden bei einer Linearisierung (Befehl linmod, Kap. 9.2.1) des Simulink-Modells Einund Ausgnge des linearisierten Systems festzulegen. a In einem Subsystem ubernehmen Inport- und Outport-Blcke die Funktion der Eino und Ausgnge. Die Verkn pfung mit den auf das Subsystem gef hrten Signalen der a u u nchsthheren Ebene ist wie folgt geregelt (analog f r Outport-Blcke): Ein Inporta o u o Block mit der Port number 1 bekommt sein Eingangssignal von dem Block, der mit dem obersten Eingang des Subsystems verbunden ist. Inport- und Outport-Blcke sind auch in den Bibliotheken Sources bzw. Sinks zu nden. o

Enabled Subsystem Ein Enabled Subsystem enthlt einen Enable-Block (ebenfalls aus Ports a & Subsystems) und weist einen zustzlichen Eingang auf, an den das a Enable(Freigabe)-Signal angelegt werden kann. Es wird an jedem InteEnabled grationsschritt, an dem das Enable-Signal einen positiven Wert hat, ausSubsystem gef hrt. Der Parameter States when enabling im Enable-Block gibt an, wie u die Zustandsvariablen bei einer erneuten Ausf hrung belegt werden (Zur cksetzen oder u u Halten auf dem letzten Wert). Show output port weist dem Enable-Block einen Ausgang zu, so dass das Steuersignal weiterverarbeitet werden kann.
In1 Out1

8.9 Subsysteme und Model Referencing

331

Abb. 8.48 verdeutlicht die Verwendung eines Enabled Subsystem-Blocks. Hier wird eine Sinuswelle sowohl als Eingang als auch als Enable-Signal auf ein Subsystem gef hrt. Im u Enabled Subsystem wird das Eingangssignal durchgeschleift. Der Scope-Block speichert die Signale im Format Structure with time auf den Workspace, von wo aus sie in einer Matlab-Figure geplottet werden knnen (Abb. 8.49). Da das Subsystem nur f r o u positives Enable-Signal ausgef hrt wird, ist der Subsystemausgang Out1 whrend der u a negativen Sinushalbwelle Null.

Scope

In1

Out1

Enable 1 In1 1 Out1

Sine Wave Enabled SubSystem

Abb. 8.48: Beispiel zum Enabled Subsystem: bsp ensub.mdl und Subsystem Enabled Subsystem
1 Out1 Sine Wave 0.5

0.5

10

Abb. 8.49: bsp ensub.mdl

Simulationsergebnis

von

Model Mithilfe des Model-Blocks knnen andere Simulink-Modelle in das betracho tete Modell (das den Model-Block enthlt) eingebunden werden (Model a Model Referencing, siehe dazu Kap. 8.9.4). Unter Model name muss der Name des referenzierten Modells eingetragen werden, unter Model arguments erscheinen z.B. die Namen von Blockparametern, die im Model Explorer (Kap. 8.4.3) deniert wurden und im referenzierten Modell ebenfalls diesen Namen tragen. Im Textfeld Model argument values knnen die Model arguments dann mit Werten belegt werden. o
Unspecified Model Name

332 Subsystem und Atomic Subsystem

8 Simulink Grundlagen

Der Subsystem-Block dient dem Erstellen von Teil- oder Untersystemen innerhalb eines Simulationsmodells. Die Verkn pfung zur dar ber liegenu u Subsystem den Modellebene wird durch Inport-Blcke f r Eingangssignale des Subo u systems und Outport-Blcke f r die Ausgnge bewerkstelligt. Die Anzahl o u a In1 Out1 der Ein- und Ausgnge des Subsystem-Blocks passt Simulink automatisch a Atomic Subsystem den im Subsystem-Fenster vorhandenen Inport- und Outport-Blcken an. o Die Ein- und Ausgnge des Subsystem-Blocks werden standardmig nach den Namen a a der Inport- und Outport-Bausteine benannt. Durch entsprechende Umbenennung der Inport- und Outport-Blcke kann die physikalische Funktion des Subsystems unterstrio chen werden (z.B. kann bei einem Regler statt In1, In2 : Sollwert, Istwert und statt Out1 : Reglerausgang eingesetzt werden).
In1 Out1

Im Kontextmen kann unter Subsystem parameters... die Block Parameters Dialogu box des Subsystem-Blocks genet werden. Durch Aktivierung der Check Box Treat as o atomic unit wird der Block zu einem Atomic Subsystem. Whrend die Grenzen eines a Subsystems bei der Simulation ignoriert werden (d.h. ein normales Subsystem ist virtuell), bilden die Blcke eines Atomic Subsystems eine nicht-trennbare Einheit. Kommt o u ein Atomic Subsystem whrend der Simulation zur Ausf hrung, so wird Simulink dann a gezwungen alle Blcke innerhalb des Atomic Subsystems hintereinander abzuarbeiten, o bevor mit einem anderen Block fortgefahren werden kann. Triggered Subsystem und Function-Call Subsystem Ein Triggered Subsystem enthlt einen Trigger-Block (ebenfalls aus Ports a & Subsystems) und weist einen zustzlichen Eingang auf, an den das a Trigger(Auslse)-Signal angelegt werden kann. Ein getriggertes Subsyo Triggered stem wird nur zum Zeitpunkt des Trigger-Impulses ausgefhrt. Getriggert u Subsystem werden kann auf eine positive (rising) oder negative Flanke im Steuerfunction () signal (falling) oder auf beide Flanken (either, Parameter Trigger type Out1 In1 im Trigger-Block). Bei der Option function-call kann das Auslsen des o Trigger-Impulses durch eine selbst programmierte S-Funktion gesteuert Function Call Subsystem werden. Das getriggerte Subsystem wird dann zu einem Function-Call Subsystem. Abb. 8.50 verdeutlicht die Funktion eines Triggered Subsystem-Blocks. Hier werden zwei Sinuswellen unterschiedlicher Frequenz auf das Subsystem gefhrt. Der Sine u Wave-Block stellt dabei das Trigger-Signal (Amplitude 0.2, Frequenz 10 rad/sec.) zur Verf gung. Im Subsystem wird das Eingangssignal durchgeschleift. Im Scope werden u die Signale aufgezeichnet (Abb. 8.51). Der Parameter Trigger type des Trigger-Blocks steht auf either, so dass das Subsystem sowohl f r steigende als auch f r fallende Flanke u u des Sine Wave-Ausgangs ausgef hrt wird. Wie aus Abb. 8.51 zu erkennen ist, realisiert u somit der Ausgang Out1 ein Sample&Hold des Sine Wave1-Signals mit der doppelten Frequenz des Trigger-Signals.
In1 Out1

8.9 Subsysteme und Model Referencing

333

Scope Sine Wave


In1 Out1

Trigger 1 In1 1 Out1

Sine Wave1 Triggered SubSystem

Abb. 8.50: Beispiel zu getriggerten Subsystemen: bsp trigsub.mdl und Subsystem Triggered Subsystem
1 Out1 Sine Wave1 SineWave

0.5

0.5

10

Abb. 8.51: bsp trigsub.mdl

Simulationsergebnis

von

8.9.2

Maskierung von Subsystemen

Durch die Option der Maskierung von Subsystemen wird die Parametrierung von komplexeren Subsystemen erleichtert. Die Parameter knnen auf diese Weise in einer einzio gen Block Parameters Dialogbox zusammengefasst werden. Durch die Maskierung wird aus einem komplexen Subsystem ein neuer, eigener Block erzeugt. Eine benutzerdenierte Unterbibliothek (Kap. 8.9.3) kann so entworfen werden. Variablen, die in einem maskierten Subsystem verwendet werden und uber die Block Parameters Dialogbox mit Werten belegt werden knnen (im Beispiel die Parameter m o und b), sind lokale Variablen (die im Model Workspace liegen, Zugri auf diesen hat man z.B. mit dem Model Explorer, Kap. 8.4.3) und damit nicht auf dem Matlab-Workspace sichtbar. Nur so ist gewhrleistet, dass maskierte Blcke wie Standard-Funktionsblcke a o o in einem Simulationsmodell mehrfach verwendet werden knnen. o Beispiel Als Beispiel soll das in Abb. 8.52 bzw. 8.53 gezeigte Subsystem mx+b maskiert werden. Das Subsystem berechnet uber die Gleichung y = m x + b aus dem Eingangssignal x eine Gerade mit der Steigung m und dem y-Achsenabschnitt b. In der Block Parameters Dialogbox (Maske des Subsystems) sollen m und b spter als beliebig vernderbare a a Parameter auftreten.

334

8 Simulink Grundlagen

Clock

mx+b

Scope

Abb. 8.52: Beispiel zur Maskierung von Subsystemen: bsp mask.mdl

1 x

m Steigung

1 y

yAchsenabschnitt

Abb. 8.53: Subsystem mx+b

Wird das Subsystem mx+b markiert, kann unter Edit der Punkt Mask Subsystem aufgerufen werden und die Mask Editor Dialogbox erscheint. Das Initialization-Register erlaubt die Initialisierung der Parameter des neuen Blocks, die im Parameters-Register deniert wurden. Im Documentation-Register kann eine kurze Funktionsbeschreibung sowie der Text des Help-Fensters (bei Klick auf den Help-Button) eingetragen werden. Im Register Icon stehen Optionen zur Gestaltung des Block-Icons zur Auswahl. Im Parameters-Register des Mask Editors (Abb. 8.54 links) werden am Prompt die Namen, unter welchen die Parameter in der Block Parameters Dialogbox erscheinen sollen, eingetragen, sowie unter Variable die zugehrigen Variablen, die in den Blcken o o des Subsystems deniert wurden. Als Type wurde edit gewhlt; in der Block Parameters a Dialogbox erscheint dann unter dem Parameternamen ein Textfeld, in das der Benutzer einen Wert eintragen kann (Abb. 8.54 rechts). Dieser Wert wird von Matlab aufgrund der Aktivierung der Check Box Evaluate ausgewertet und danach der zum Parameter gehrigen Variablen (also m oder b) zugewiesen. Durch Aktivierung der Check Box o Tunable bleiben die Parameter whrend der Simulation verstellbar. a Bei Doppelklick auf den Subsystem-Block in bsp mask.mdl erscheint nun nicht mehr das Subsystem-Fenster sondern eine Block Parameters Dialogbox, wie in Abb. 8.54 rechts. Im Documentation-Register des Mask Editors (Abb. 8.55 links) wird unter Mask type die Bezeichnung des Blocks (im Beispiel Geradenberechnung) eingetragen. Im Textfeld Mask description wird der beschreibende Text des Blocks eingetragen, der in der Block Parameters Dialogbox unter der Blockbezeichnung erscheint (Abb. 8.54 rechts). Der Hilfe-Text unter Mask help soll die Bedienung des Blocks erleichtern. Im Register Icon kann das Icon des Blocks gestaltet werden. Es stehen Befehle zum Darstellen von Text und Linien sowie Ubertragungsfunktionen zur Verf gung. Mit dem u Befehl image knnen auch Bitmaps (z.B. im TIFF- oder GIF-Format) eingebunden o werden. F r das Subsystem mx+b wurde mithilfe der Befehle plot([0 1],[0.1 0.1]) u plot([0.1 0.1],[0 1]) ein x-y-Koordinatensystem sowie mit plot([0 2],[0.3 3]) eine Gerade mit m > 0 und b > 0 gezeichnet. F r die Option Units wurde Normalized u gewhlt (linke untere Blockecke = (0, 0), rechte obere Blockecke = (1, 1) ). Mithilfe der a Optionen Frame, Transparency und Rotation knnen unter anderem die Sichtbarkeit des o Blockrahmens und eine eventuelle Drehung der Grak bei Drehung oder Spiegelung des

8.9 Subsysteme und Model Referencing

335

Abb. 8.54: Maskieren von Subsystem mx+b: Parameters-Register und resultierende Block Parameters Dialogbox

Abb. 8.55: Maskieren von Subsystem mx+b: Documentation-Register und resultierende Block Parameters Dialogbox

Blocks eingestellt werden. Soll anstelle einer Grak Text in einen Block eingef gt weru den, stehen daf r die Drawing commands disp(Text) bzw. disp(Variablenname) u zur Verf gung. Variablenname muss dabei die Variable eines im Parameters-Register u denierten Prompts sein. Es wird dann der Wert der Variable dargestellt, sofern ihr in der Block Parameters Dialogbox ein solcher zugewiesen wurde. Mit disp(Text) dargestellter Text kann durch den Befehl \n innerhalb der Anf hrungsstriche umgebrochen u werden.

336

8 Simulink Grundlagen

Clock

mx+b

Scope

Abb. 8.56: Maskieren von Subsystem mx+b: Icon-Register und resultierendes Simulink-Modell bsp mask.mdl

Um weitere Anderungen an einem maskierten Subsystem vorzunehmen, kann der Mask Editor nach Markierung des Blocks jederzeit mit dem Men punkt Edit/Edit Mask aufu gerufen werden. Der Punkt Edit/Look Under Mask net das Subsystem-Fenster wie o der Doppelklick bei unmaskierten Subsystemen. Mit dem Unmask -Button im Mask Editor links unten kann die Maskierung eines Subsystems r ckgngig gemacht werden. u a Die im Mask Editor eingetragenen Informationen werden aufgehoben bis das Modell geschlossen wird.

8.9.3

Erstellen einer eigenen Blockbibliothek

Eigene Blcke (wie z.B. selbstprogrammierte S-Funktionen) oder Subsysteme mit hug o a verwendeten Teilmodellen, die man mit Masken genau auf die eigenen Bed rfnisse zuu geschnitten hat, knnen in einer eigenen Blockbibliothek zusammengestellt und damit o schnell wiederverwendbar gemacht werden. Uber den Library Browser ist ein Zugri auf diese eigene Bibliothek jederzeit mglich. o Von einem beliebigen Simulink-Modell oder vom Library Browser aus kann ein neues, leeres Bibliotheksfenster (vergleichbar mit dem Fenster der Simulink-Bausteinbibliothek aus Abb. 8.1) mit dem Men punkt New/Library erstellt werden. Durch Ziehen mit der u linken Maustaste knnen nun Blcke oder Subsysteme aus einem Simulink-Modell oder o o Standard-Unterbibliotheken in das Bibliotheksfenster gezogen werden. F r Blcke gilt: u o soll der Link (also die Verkn pfung) mit dem Standard-Funktionsblock aufgebrochen u und der in die eigene Bibliothek gestellte Block selbst zu einem Referenzblock werden, muss dem Block vorher eine Maske gegeben werden. Dazu wird der gew nschte Block u markiert und anschlieend im Command Window der Befehl

8.9 Subsysteme und Model Referencing

337

set_param(gcb, Mask,on)

aufgerufen. Im Kontextmen des Block kann danach mit dem Punkt Edit Mask der aus u Kap. 8.9.2 bekannte Mask Editor aufgerufen und die Blockmaske gestaltet werden. Subsysteme knnen mit oder ohne Maske in die eigene Blockbibliothek gestellt werden o und dort als Referenzblock dienen. Folgende Schritte lassen die eigene Blockbibliothek auch im Library Browser erscheinen: 1. Das neue Bibliotheksfenster muss zunchst in einem dem Matlab-Pfad (siehe a Kap. 3.4) zugehrigen Verzeichnis abgespeichert werden. Dabei muss jede eigene o Bibliothek in einem eigenen Verzeichnis stehen. 2. Dieses Verzeichnis muss standardmig ein slblocks.m-File enthalten. Dazu wird a der Befehl
edit slblocks.m

im Matlab-Command-Window aufgerufen und das sich nende Template-File o $M AT LABP AT H\toolbox\simulink\blocks\slblocks.m in das gleiche Verzeichnis wie die eigene Blockbibliothek abgespeichert. 3. In der gespeicherten Kopie von slblocks.m werden nun die allgemeinen Platzhalter (vor allem bei blkStruct.Name und blkStruct.OpenFcn) durch die eigenen Angaben ersetzt. Beispiel: Folgende Befehle in der Datei slblocks.m lassen die eigene Blockbibliothek mit dem Dateinamen eBib.mdl (die das maskierte Subsystem mx+b aus Kap. 8.9.2 und einen maskierten Gain-Block enthlt) im Library Browser unter dem Eintrag Eigene a Blcke erscheinen (Abb. 8.57): o
function blkStruct = slblocks blkStruct.Name = [Eigene sprintf(\n) Blcke]; o blkStruct.OpenFcn = eBib;

Abb. 8.57: Library Browser, mit Eintrag der selbstdenierten Blockbibliothek Eigene Blcke o

338

8 Simulink Grundlagen

Auf der beiliegenden CD-ROM sind die Dateien eBib.mdl und slblocks.m im Verzeichnis simulink grund/lib1 zu nden. Dieses Verzeichnis einfach dem Matlab-Pfad hinzuf gen (Men punkt File/Set Path im Matlab-Command-Window), um Eigene u u Blcke im Library Browser anzeigen zu lassen. o

8.9.4

Model Referencing

Model Referencing bietet die Mglichkeit, beliebige bereits vorhandene Simulinko Modelle in ein anderes, gerade betrachtetes Modell einzubinden. Das referenzierte Modell kann dadurch unabhngig vom gerade betrachteten Modell entworfen werden (und a umgekehrt). Im Gegensatz zu Subsystemen m ssen die einzubindenden Modellteile nicht u in das gerade betrachtete Modell hineinkopiert werden, sondern verbleiben vor (auch unabsichtlichen) Anderungen gesch tzt in einem eigenen Modell. u Um eine Referenz auf ein bereits vorhandenes Simulink-Modell zu erstellen wird ein Model-Block (siehe S. 331) aus der Bibliothek Ports&Subsystems in das gerade betrachtete Modell eingebracht und durch Eingabe des Namens des Simulink-Modells unter Model name eine Referenz auf dieses Modell erzeugt. Das referenzierte Modell muss sich dabei im gleichen oder in einem zum Matlab-Pfad gehrigen Verzeichnis (Kap. 3.4) o benden. Bei Simulationsstart des betrachteten Modells wird ein so genanntes Simulation Target (eine ausf hrbare C MEX S-Funktion, die unter Windows die Erweiterung u msf.mexw32 erhlt) des referenzierten Modells im aktuellen Verzeichnis erzeugt, sowie a ein Verzeichnis slprj, das alle bei der Erzeugung des Simulation Target verwendeten Dateien enthlt. Bei jedem erneuten Simulationsstart des betrachteten Modells wird a von Simulink uberpr ft, ob sich das referenzierte Modell seit der letzten Erzeugung u des Simulation Target verndert hat. Abhngig von der Wahl des Parameters Rebuild a a options im Register Model Referencing (siehe S. 316) der Conguration Parameters Dialogbox des betrachteten Modells wird dann das Simulation Target neu erzeugt oder nicht. Zur Erstellung des Simulation Target ist ein C-Compiler erforderlich. Dieser muss vor der ersten Verwendung von Model Referencing mit dem Setup-Befehl
mex -setup

ausgewhlt werden. Unter Windows sollte der mit jeder Matlab-Version mitgelieferte a Compiler Lcc-win32 gewhlt werden. a Beispiel Anhand der Simulink-Modelle bsp referencing.mdl (Abb. 8.58 links) und bsp referencing g.mdl (Abb. 8.58 rechts) soll das Vorgehen beim Model Referencing verdeutlicht werden: In bsp referencing g.mdl wird das Eingangssignal uber einen Gain-Block mit dem Verstrkungsfaktor gain10+5 zum Ausgang gefhrt. Durch die a u Verwendung eines Inport- und Outport-Blocks am Ein- und Ausgang entsteht beim Refeo renzieren von bsp referencing g.mdl in bsp referencing.mdl an den Model-Blcken jeweils ein Ein- und ein Ausgang.

8.9 Subsysteme und Model Referencing

339

bsp _referencing .mdl bsp _referencing _g In1 Out1 Model


gain =0.1

Model

Sine Wave Sine Wave Sine Wave bsp _referencing _g In1 Out1 Model1 Model1
gain =0.5

bsp _referencing _g.mdl

Scope
1 In1 K Gain
Verstrkung=gain *10+5

1 Out1

Abb. 8.58: Simulink-Modell bsp referencing.mdl (links) und referenziertes Modell bsp referencing g.mdl (rechts)

Um beim Referenzieren den Wert des Verstrkungsfaktors variabel gestalten zu knnen, a o muss die Variable gain im Model Explorer als Matlab-Variable im Model Workspace ) und mit einem Wert belegt werden von bsp referencing g.mdl deniert (Button sowie unter Model arguments eingetragen werden (Abb. 8.59). In der Block Parameters Dialogbox der Blcke Model und Model1 in bsp referencing.mdl erscheint gain o dann unter Model arguments (grau unterlegt, da eine Vernderung nur uber den Model a Explorer mglich ist). Im Feld Model argument values kann gain mit beliebigen Wero ten (hier 0.1 und 0.5) belegt werden. Abbildung 8.60 zeigt das Simulationsergebnis von bsp referencing.mdl. Einschrnkungen bez glich Solver-Auswahl bestehen in der aktuellen Simulink-Version a u nicht mehr. Daher wurde als Solver f r beide Modelle der Variable-step-Solver Disu crete(no continuous states) gewhlt. a Einige Einschrnkungen m ssen beim Einsatz von Model Referencing noch in Kauf a u genommen werden (f r eine Liste siehe Online-Hilfe unter model referencing limitatiu ons), sie werden jedoch von Version zu Version abgebaut.

340

8 Simulink Grundlagen

Abb. 8.59: Model Explorer (oben) und Block Parameters Dialogbox des Blocks Model (links)

10 8 6 4 2 0 2 4 6 8 10 0 1 2 3 4 5 Model Sine Wave Model1

Abb. 8.60: Simulationsergebnis bsp referencing.mdl

von

8.10 Ubungsaufgaben

341

8.10
8.10.1

Ubungsaufgaben
Nichtlineare Dierentialgleichungen

Schreiben Sie ein Simulink-Modell, das folgenden Satz von nichtlinearen Dierentialgleichungen lst: o x = (y x) y = xz + x y z = xy z Erstellen Sie ein Matlab-Skript zur Initialisierung des Modells mit = 3, = 26.5 und = 1. Verkn pfen Sie das Skript mit Ihrem Modell als Model Callback-Routine u InitFcn. Zeichnen Sie x uber z in einem XY Graph auf. Whlen Sie als Parameter x-min = 15, a x-max = 15, y-min = 0 und y-max = 50. Lassen Sie die Zustandsvariablen x, y und z whrend der Simulation auf den Workspace a speichern (mit der Option Save to workspace/States in der Conguration Parameters Dialogbox) und schreiben Sie ein weiteres Matlab-Skript, mit dem Sie die Trajektorie im Zustandsraum grasch darstellen knnen (z.B. mit dem plot3-Befehl). Verkn pfen o u Sie das Skript mit Ihrem Modell als Model Callback-Routine StopFcn. F r die Programmierung der Dierentialgleichungen bentigen Sie den Integrator-Block u o aus der Unterbibliothek Continuous (Kap. 9.1). Die Default-Einstellungen in der Block Parameters Dialogbox knnen Sie bis auf die Initial condition ubernehmen. Geben Sie o hier einen Wert > 0, z.B. 5 ein. Abb. 8.61 zeigt die Simulationsergebnisse f r die angegebene Parameterkonstellation u und eine Simulationszeit von 100 Sekunden.
lorenz strange attractor

45 40 35 30 25 20 15 10 5 20 10 0 y 5 10 20 10 x 0 10 5 z

Abb. 8.61: Trajektorie des Lorenz Attraktors

342

8 Simulink Grundlagen

Hinweis: Die drei Dierentialgleichungen beschreiben den aus der Mathematik und Physik bekannten Lorenz Attraktor. Sie stellen ein einfaches Modell atmosphrischer a Konvektionsvorgnge dar und wurden 1961 von Edward Lorenz zur Wettervoraussage a aufgestellt. F r bestimmte Kombinationen von , und entsteht ein chaotisches Sysu temverhalten, das um zwei Gleichgewichtspunkte im Raum schwingt.

8.10.2

Gravitationspendel

In dieser Ubungsaufgabe soll das Modell eines Gravitationspendels, wie in Abb. 8.62 dargestellt, programmiert und das Subsystem anschlieend maskiert werden. Wichtige Systemparameter sollen uber die Maske des Subsystems einstellbar gemacht werden. Es gilt:

r
Auslenkwinkel aus der Ruhelage Winkelgeschwindigkeit Winkelbeschleunigung a Beschleunigung l Lnge des Seils a m Masse des Pendels incl. Seil g Erdbeschleunigung, g = 9.81 m/s2 G Erdanziehungskraft a Fr () winkelgeschwindigkeitsabhngige Reibkraft im Lager Kraft durch Erdbeschleunigung FB A Aufhngungspunkt (Drehpunkt) a r Radiusvariable der Bewegungsebene
Abb. 8.62: Zum mathematischen Gravitationspendel

j j, j

a FB j

Fr(-j) m G

Die Betrachtungsweise des Pendels erfolgt idealisiert (Seil ist nicht dehnbar, Pendelmasse punktfrmig, nur Schwingungen in der r -Ebene mglich). Allein eine wino o kelgeschwindigkeitsabhngige Reibkraft Fr () soll im Lager am Aufhngungspunkt a a angreifen. Sie wird uber eine arctan-Funktion modelliert und versucht, das Pendel zu jedem Zeitpunkt zu verlangsamen. Die Gleichungen des Systems lauten 1. Beschleunigung: 2. Kraft durch Erdbeschleunigung: 3. Reibkraft: a = l FB = G sin = m g sin Fr () = Fr () = 1.3 arctan(50 )

Daraus ergibt sich die Momentensumme um den Punkt A zu c + M (A) = 0: l m a l FB + l Fr () = 0

8.10 Ubungsaufgaben

343

und es folgt f r die DGL des reibungsbehafteten Gravitationspendels: u = = g Fr () sin + l ml g 1 sin 1.3 arctan(50 ) l ml

F r die Programmierung der DGL bentigen Sie wieder Integrator-Blcke aus der u o o Continuous-Unterbibliothek. Whlen Sie beide Male die Initial condition source zu exa ternal und f hren Sie von auen geeignete Werte f r den Auslenkwinkel zu Beginn, 0 , u u und die Anfangswinkelgeschwindigkeit 0 auf die Integratoren, mit denen das Pendel gestartet werden soll! Das Pendel soll innerhalb eines Subsystems programmiert werden, aus dem die Zustandsvariablen Winkel und Winkelgeschwindigkeit ( und ) sowie die Winkelbeschleu nigung () als Ausgnge herausgef hrt werden sollen. Sie sollen in einem Scope oder a u einer Matlab-Figure aufgezeichnet werden. Abb. 8.63 links zeigt das auere Erschei nungsbild des maskierten Pendels mit seinen Ausgngen. a Maskierung: Ahnlich wie im zuvor behandelten Beispiel sollen die Parameter m, l, 0 und 0 uber die Maske des Subsystems einstellbar sein. In Abb. 8.63 rechts ist die Block Parameters Dialogbox gezeigt, die das maskierte Pendel erhalten soll. Uberlegen Sie sich auerdem einen tatschlich hilfreichen Hilfetext f r den Block! a u

Gravitations pendel mit Reibung

Abb. 8.63: Erscheinungsbild des maskierten Pendels und zugehrige Block Parameters Diao logbox

Hinweise: Uberlegen Sie sich, wie Sie fein aufgelste Kurvenverlufe f r , und erzeugen o a u knnen, ohne ubermige Rechenzeiteinbue. o a

344

8 Simulink Grundlagen

Vergessen Sie nicht, dass die bentigte Sinus-Funktion ihr Eingangssignal in der o Einheit rad erwartet. Wie knnten Sie Ihre Signale auf den Matlab-Workspace speichern, ohne dabei o uber einen Scope- oder To Workspace-Block zu gehen?

Abb. 8.64: Winkel, Winkelgeschwindigkeit und Winkelbeschleunigung des reibungsbehafteten Gravitationspendels, dargestellt in einem Scope-Block fr die Parameter m = 30 kg, l = 5 m, u 0 = 45 , 0 = 1 rad/sec.

Lineare und nichtlineare Systeme in Simulink

Aufbauend auf den im vorangegangenen Kapitel gelegten Simulink-Grundlagen treten nun Blcke f r die Reprsentation der Dynamik in zeitkontinuierlichen Systemen hino u a zu (Unterbibliothek Continuous), nichtlineare Anteile in Systemen wie z.B. Sttiguna gen und Totzeiten (Unterbibliothek Discontinuities) sowie programmierbare MatlabFunktionen und Nachschlage-Tabellen der Unterbibliotheken User-Dened Functions und Lookup Tables. Als eigene Punkte werden auerdem die Analyse von SimulinkModellen, die Behandlung von algebraischen Schleifen sowie die Programmierung von S-Funktionen vorgestellt. Abtastsysteme in Simulink werden in Kap. 10 ausf hrlich behandelt. u

9.1
Derivative

Simulink-Bibliothek: Continuous Zeitkontinuierliche Systeme

Eine Dierentiation des Eingangssignals wird mit dem Derivative-Block durchgef hrt. Der Ausgang des Blocks berechnet sich zu u/t, wobei u jeweils die Anderung der entsprechenden Gre seit dem vorangegangenen o Derivative Integrationsschritt bezeichnet. Der Anfangswert des Ausgangssignals ist 0. Zur Linearisierung wird der Derivative-Block durch ein DT1 -Verhalten s/(Ns + 1) approximiert, dessen Zeitkonstante N unter Linearization Time Constant eingegeben werden kann.
du/dt

Integrator Der Integrator integriert sein Eingangssignal. Der Anfangswert, von dem aus integriert wird, kann in der Block Parameters Dialogbox z.B. direkt s gesetzt werden, durch Wahl von internal unter Initial condition source und Integrator Eingabe eines Startwerts in das Textfeld Initial condition. Wird die Initial condition source auf external gesetzt, entsteht am Block-Icon ein weiterer Eingang, an den ein auerhalb des Blocks gesetzter Anfangswert angelegt werden kann.
1

Der Ausgang des Integrator-Blocks kann durch ein Signal von auen auf den Anfangswert zur ckgesetzt werden. Unter External reset kann eingestellt werden, durch welches u

346

9 Lineare und nichtlineare Systeme in Simulink

Verhalten des R cksetzsignals der Reset ausgelst werden soll (z.B. rising f r die posiu o u tive Flanke). Bei Wahl von External reset zu rising, falling, either, level oder level hold entsteht ein eigener Eingang f r das R cksetzsignal. u u Soll das Ausgangssignal begrenzt werden, wird die Check Box Limit output aktiviert und die gew nschten Werte in die saturation limit -Textfelder eingetragen. Eine Aktivieu rung der Check Box Show saturation port ermglicht das Abgreifen des entsprechenden o Sttigungssignals: 1 f r Ausgang in positiver Sttigung, 1 in negativer und 0 dazwia u a schen. Durch Aktivierung der Check Box Show state port entsteht ein zustzlicher Ausgang a (state port ), an dem die Zustandsgre des Integrators abgegrien werden kann. Die o Zustandsgre des Integrators stimmt in ihren Werten mit dem Ausgangssignal des o Integrators uberein; Simulink berechnet Ausgangssignal und Zustandsgre jedoch zu o leicht unterschiedlichen Zeitpunkten. In manchen Fllen wird die Verwendung der Zustandsgre ntig: Wird das Ausgangsa o o signal des Integrators direkt oder uber Blcke, die dem Signal keine zeitliche Verzgeo o rung aufprgen an den R cksetz- oder Anfangswerteingang zur ckgef hrt, entsteht eia u u u ne Schleife, im Falle des Anfangswerteingangs sogar eine algebraische Schleife (siehe Kap. 9.6). Dies kann vermieden werden, wenn anstelle des Ausgangssignals die Zustandsgre zur ckgef hrt wird. o u u a o Enthlt ein Modell Zustandsvariable, deren Betrag sich um mehrere Grenordnungen unterscheidet, kann die Spezizierung des Parameters Absolute tolerance in den einzelnen Integrator-Blcken des Modells zustzlich zur Absolute tolerance in der Congurao a tion Parameters Dialogbox (siehe S. 308) helfen, dass dieser Wert bei der numerischen Integration eingehalten wird. Zur einfacheren Linearisierbarkeit trotz R cksetzung und/oder begrenztem Ausgangsu signal kann die Check Box Ignore limit and reset when linearizing aktiviert werden. Beide Optionen werden dann bei einer Linearisierung (Kap. 9.2.1) ignoriert. Ein Eintrag unter State Name weist der im Integrator gef hrten Zustandsvariablen einen u Namen zu, bei mehreren Zustandsgren (z.B. 2) muss die folgende Formatierung eino gehalten werden: {Name1, Name2 } State-Space
x = Ax+Bu y = Cx+Du StateSpace

Der State-Space-Block bildet ein lineares System in Zustandsdarstellung nach, das durch folgendes Gleichungssystem beschrieben wird (siehe auch Kap. 5.1.3): x = Ax + Bu y = Cx + Du

Die Ordnung des Systems wird durch die Dimension der Systemmatrix A bestimmt. Ist N x die Anzahl der Zustandsvariablen, N u die Anzahl der Eingangsgren und N y die o Anzahl der Ausgnge, m ssen die Systemparameter folgende Dimensionen besitzen: A: a u N x N x, B: N x N u, C: N y N x und D: N y N u. Damit bestimmt N u die Breite des Eingangssignals und N y die des Ausgangssignals.

9.1 Bibliothek: Continuous Zeitkontinuierliche Systeme

347

Unter Initial conditions knnen die Anfangswerte der Zustandsgren ubergeben wero o den (Zeilen- oder Spaltenvektor), Absolute tolerance und State Name werden wie beim Integrator behandelt. Transfer Function Mit dem Transfer Fcn-Block kann die Ubertragungsfunktion eines linearen Systems modelliert werden. Er entspricht dem Befehl tf(num, den) s+1 u a Transfer Fcn der Control System Toolbox. Parameter sind die Polynome f r Zhler (Numerator coecient ) und Nenner (Denominator coecient ) der Ubertragungsfunktion, sie m ssen in absteigender Ordnung von s eingegeben werden. Die u Ordnung des Nennerpolynoms muss dabei grer oder gleich der Ordnung des Zhlerpoo a lynoms sein. Beispiel: Der Eintrag [4 3 0 1] unter Numerator coecient und [1 0 7 3 1] unter Denominator coecient erzeugt eine Ubertragungsfunktion der Form:
1

H(s) =

3 2 y(s) = 44s +23s + 1 u(s) s + 7s + 3s + 1

Unter Numerator coecient knnen auch Matrizen angegeben werden. Die Breite des o Ausgangssignals richtet sich dann nach der Anzahl der Zeilen in der Matrix. Als Eingangssignale werden jedoch nur skalare Gren akzeptiert. o Absolute tolerance und State Name werden wie beim Integrator behandelt. Transport Delay Der Transport Delay-Block gibt sein Eingangssignal verzgert um die unter o Time delay 0 angegebene Zeit aus. Bis die Simulationszeit die angegebene Verzgerungszeit zu Simulationsbeginn erstmals uberschreitet, gibt der o Transport Transport Delay-Block den unter Initial output angegebenen Wert aus. F r u Delay die Zwischenspeicherung der Daten wird ein Puerspeicher benutzt, dessen Gre unter Initial buer size eingetragen werden kann. Uberschreitet die gespeicherte o Datenmenge diese Gre, alloziert Simulink automatisch weitere Speicherbereiche. Die o Simulationsgeschwindigkeit kann dadurch erheblich vermindert werden. Unter Pade order kann ein ganzzahliger Wert 0 angegeben werden, der bestimmt, welche Ordnung m (f r Zhler und Nenner gleich) die Pad-Approximation Rm,m (s) u a e (siehe z.B. [48]) des Blocks (mit einem Time delay = Tt ) haben soll: esTt Rm,m (s) = p0 + p1 (sTt ) + p2 (sTt )2 + . . . + pm (sTt )m q0 + q1 (sTt ) + q2 (sTt )2 + . . . + qm (sTt )m mit p0 = q0

Diese Option ist dann von Bedeutung, wenn ein Simulink-Modell linearisiert werden soll. Die Default-Einstellung Pade order = 0 (d.h. m = 0) resultiert darin, dass bei einer Linearisierung der Transport Delay-Block durch ein Verstrkungsglied mit Faktor a 1 ersetzt wird. F r eine vernderliche Zeitverzgerung stehen die Blcke Variable Time Delay und Vau a o o riable Transport Delay zur Verf gung. u

348 Zero-Pole
(s1) s(s+1) ZeroPole

9 Lineare und nichtlineare Systeme in Simulink

Im Gegensatz zur Transfer Fcn erzeugt der Zero-Pole-Block aus den Para metern Zeros, Poles und Gain eine Ubertragungsfunktion in einer nach Nullstellen und Polen faktorisierten Form (m = Anzahl der Nullstellen, n = Anzahl der Pole, hier Beispiel f r ein SISO-System): u H(s) = K Z(s) (s Z(1)) (s Z(2)) . . . (s Z(m)) =K P(s) (s P (1)) (s P (2)) . . . (s P (n))

Z(s) kann dabei ein Vektor oder eine Matrix sein, welche die Nullstellen des Systems enthlt, P(s) ist der Vektor der Pole. Die skalare oder vektorielle Gre K enthlt den a o a oder die Verstrkungsfaktoren des Systems. Die Anzahl der Elemente in K entspricht a der Zeilenzahl von Z(s). Die Anzahl der Pole muss dabei wieder grer oder gleich der o Nullstellenzahl sein. Komplexe Nullstellen oder Pole m ssen in konjugiert komplexen u Paaren angegeben werden. Der Zero-Pole-Block entspricht dem Befehl zpk(z,p,k) aus der Control System Toolbox. Absolute tolerance und State Name werden wie beim Integrator behandelt. Beispiel In diesem Beispiel soll die Problematik des R cksetzens eines Integrator-Blocks nher u a beleuchtet werden. Ein Integrator integriert das Signal 0.5 des Constant-Blocks auf. Erreicht sein Ausgang den Wert 2, erfolgt eine R cksetzung auf den vom Ramp-Block u erzeugten Anfangswert (External reset = rising). Die Lsung nach Abb. 9.1 w rde o u eine Schleife erzeugen, da der Ausgang des Relational Operator-Blocks und damit das R cksetzsignal direkt vom Integratorausgang abhngt. u a
0.5 Constant 1 s xo Integrator Anfangswert 2 >= Relational Operator Scope

Constant1

Abb. 9.1: Beispiel zur IntegratorRcksetzung; es entsteht eine Schleife: u bsp continuous.mdl

Dieses Problem knnte durch das Einf gen eines Memory-Blocks (Unterbibliothek Diso u crete, Kap. 10.2) in den R ckf hrzweig gelst werden (Abb. 9.2). Bei greren Schrittu u o o weiten wird die merkliche Verzgerung des R cksetzsignals das eigentliche Systemvero u halten jedoch verflschen (siehe auch Abb 9.4 rechts). Diese Lsung wird daher nicht a o empfohlen. Abbildung 9.3 zeigt die korrekte, von Simulink vorgesehene Lsung des Schleifenproo blems. Hier wurde anstelle des Ausgangssignals die Zustandsgre des Integrators abo gegrien (Aktivierung der Check Box Show state port ). Die Scope-Daten zeigt Abb. 9.4 links.

9.1 Bibliothek: Continuous Zeitkontinuierliche Systeme

349

0.5 Constant 1 s xo Integrator Anfangswert 2 >= Relational Operator Scope

Constant1

Memory

Abb. 9.2: Beispiel zur Integrator-Rcku setzung; Vermeidung der Schleife durch Memory-Block: bsp continuous1.mdl. Diese Lsung wird nicht empfohlen! o

Steigt das Signal des Ramp-Blocks uber den Wert 2, wird der Integratorausgang pro portional zum Anfangswert ansteigen. Eine Begrenzung des Ausgangs auf 2 verhindert dies (Aktivierung der Check Box Limit output, Upper saturation limit = 2).
0.5 Constant 1 s xo Integrator Anfangswert 2 >= Relational Operator Scope

Constant1

Abb. 9.3: Beispiel zur Integrator-Rcku setzung; Korrekte Lsung des Schleifeno problems durch Abgreifen der Zustandsgre: bsp continuous2.mdl o
Ausgangssignal des rckgesetzten Integrators bei Abgreifen der Zustandsgre; korrekte Lsung 2

Ausgangssignal des rckgesetzten Integrators bei Verwendung eines MemoryBlocks 2

Integratorausgang
0 5 10 15 Zeit [s] 20 25

Integratorausgang

1.5

1.5

0.5

0.5

10 15 Zeit [s]

20

25

Abb. 9.4: Beispiel zur Integrator-Rcksetzung: Scope-Daten aus Abb. 9.2 (links) und Abb. 9.3 u (rechts)

350

9 Lineare und nichtlineare Systeme in Simulink

9.2

Analyse eines Simulink-Modells

Die Befehle linmod und trim ermglichen die bequeme Analyse eines Simulink-Modells. o Sie werden in Kap. 9.2.1 vorgestellt. Der in alteren Simulink-Versionen zur Verf gung stehende Simulink LTI-Viewer wurde u aus dem Simulink Basispaket herausgenommen und in stark erweiterter Form in das Tool Simulink Control Design integriert, das auf Basis einer gut bedienbaren graschen Oberche die Linearisierung bequem bedienbar macht. In Kap. 9.2.3 wird kurz in das a Simulink Control Design eingef hrt. Kap. 11.2.3 behandelt ebenfalls den grundlegenden u Umgang mit dem Simulink Control Design am Beispiel der Gleichstrom-NebenschlussMaschine.

9.2.1

Linearisierung mit der linmod-Befehlsfamilie

Mit der Matlab-Befehlsfamilie linmod (linmod, linmod2, linmodv5 und dlinmod) wird die Linearisierung von Simulink-Modellen mglich. Anstelle von linmod knnen o o auch die Blcke Time-Based Linearization und Trigger-Based Linearization aus der Untero bibliothek Model-Wide Utilities (Kap. 9.5.1) verwendet werden. Aus nichtlinearen Simulink-Modellen ist damit eine unkomplizierte Ermittlung eines linearen Modells mglich, von bereits linearen Modellen kann die Zustandsdarstellung o oder Ubertragungsfunktion direkt aus der Blockdiagrammform gewonnen werden. Das linearisierte System wird in Matlab in Zustandsdarstellung mit den Matrizen A, B, C und D oder als Zhler- und Nennerpolynom der Ubertragungsfunktion ausgegeben. Die a Ein- und Ausgnge des Systems m ssen in Simulink mit Inport- und Outport- Blcken, a u o die sich auf der obersten Modellebene benden, gekennzeichnet werden. Funktionsblcke der Unterbibliotheken Sources und Sinks werden von Simulink nicht als Ein- und o Ausgnge (in Bezug auf den linmod-Befehl) erkannt! Die Blcke schlieen sich jedoch a o nicht aus: Inport-Blcke und Sources z.B. knnen parallel verwendet werden, wenn sie o o auf einen Sum-Block gef hrt werden. u Verwendung von linmod
sys lin = linmod(sys, x, u, para)

erzeugt die linearisierte Darstellung des Simulink-Modells sys.mdl in der Variablen sys lin (Format Structure). F r direkte Ausgabe der Zustandsdarstellung des linearisierten Modells lautet der u Aufruf:
[A,B,C,D] = linmod(sys, x, u, para)

bzw. f r Ausgabe der Ubertragungsfunktion: u


[num,den] = linmod(sys, x, u, para)

Mit dem Zustandsvektor x und Eingangsvektor u kann ein bestimmter Arbeitspunkt angegeben werden, um den linearisiert werden soll. Die Default-Werte sind

9.2 Analyse eines Simulink-Modells

351

jeweils 0. Mit dem 3-elementigen Vektor para knnen zustzliche Optionen deo a niert werden: F r zeitvariante Modelle kann mit para(2) explizit ein fester Zeitu punkt t > 0 angegeben werden, an dem die Linearisierung durchgef hrt wird. u Wird para(3) = 1 gesetzt (der Default-Wert ist 0), so bleiben die Zustandsgren o von Blcken, die durch die Wahl der Ein- und Ausgangsgren keine Wirkung o o auf das Ein-/Ausgangsverhalten haben, bei der Berechnung des linearen Modells unber cksichtigt. Die Dimension der Zustandsmatrizen weicht dann von der Ordu nung des urspr nglichen Blockdiagramms ab. para(1) ist bei linmod ohne Funku tion. Bei der Linearisierung mit dem Befehl linmod wird auf bereits vorhandene analytisch berechnete lineare Darstellungen (z.B. werden Transport Delay-Blcke durch o eine Pad-Approximation mit der angegebenen Ordnung ersetzt, siehe S. 347) f r e u jeden Funktionsblock zur ckgegrien. Bei Ansto der Linearisierung werden alle u Blcke durch ihre lineare Darstellung ersetzt und daraus die linearisierte Darstelo lung des Simulink-Modells gebildet. Verwendung von linmod2 Der Aufruf des Befehls linmod2 erfolgt analog zu linmod:
sys lin = linmod2(sys, x, u, para)

linmod2 verwendet einen Linearisierungsalgorithmus, bei dem die Zustands- und Eingangsvariablen durch Strsignale zur Ermittlung der Zustandsdarstellung von o Simulink aus dem Arbeitspunkt ausgelenkt werden. Der Algorithmus ist speziell f r eine Minimierung von Rundungsfehlern ausgelegt. Mit para(1) wird die untere u Grenze des skalaren perturbation level, d.h. Strfaktors, festgelegt (Default-Wert o u ist 108 ). Bei der Linearisierung wird dieser vom Algorithmus f r jede Zustandsvariable zur Ermittlung der System-Matrizen individuell gesetzt. Die Koezienten der System-Matrizen des linearen Modells sind daher nat rlich abhngig von der u a Gre des perturbation level. o Verwendung von linmodv5 Der Aufruf des Befehls linmodv5 erfolgt analog zu linmod1) :
sys lin = linmodv5(sys, x, u, para, xpert, upert)

Wie linmod2 verwendet auch linmodv5 einen Linearisierungsalgorithmus, bei dem die Zustands- und Eingangsvariablen durch Strsignale zur Ermittlung der Zuo standsdarstellung von Simulink aus dem Arbeitspunkt ausgelenkt werden. Es wird der sog. full model perturbation-Algorithmus verwendet, ein lteres Verfahren, das a bereits vor 1998 entwickelt wurde. Mit xpert und upert knnen die perturbation levels, d.h. Strfaktoren, f r die o o u Zustands- und Eingangsvariablen vom Benutzer selbst deniert werden. para(1) ist nur dann von Belang, wenn xpert und upert nicht angegeben wurden; in diesem Fall werden sie mit dem Default-Wert von para(1) = 105 berechnet zu: xpert =
1)

linmodv5 entspricht dabei einem Aufruf des linmod-Befehls mit der Option v5:

sys lin = linmod(sys, x, u, para, xpert, upert, v5 )

352

9 Lineare und nichtlineare Systeme in Simulink para(1)+1e-3*para(1)*abs(x), upert = para(1)+1e-3*para(1)*abs(u). Die Koezienten der ermittelten System-Matrizen des linearen Modells sind abhngig von a der Gre von xpert und upert. o Hinweis: Derivative- und Transport Delay-Blcke sollten vor einer Linearisierung o mit linmodv5 durch die entsprechenden Blcke der Control System Toolbox, Swito ched derivative for linearization bzw. Switched transport delay for linearization der Unterbibliothek Simulink Extras/Linearization ersetzt werden.

Die Zuordnung der Zustandsvariablen zu Blcken im nichtlinearen Modell wird bei der o Linearisierung beibehalten. Bei Bedarf kann sie mit
[sizes,x0,xstring] = sys

f r das (nichtlineare oder linearisierte) Modell sys.mdl uberpr ft werden. Alternativ u u kann f r das linearisierte Modell bei R ckgabe der System-Matrizen in eine Struktur u u auch das Unterfeld sys lin.StateName abgefragt werden. Steht das linearisierte Simulink-Modell in Zustandsdarstellung (A,B,C,D bzw. sys lin.a, sys lin.b, sys lin.c, sys lin.d ) zur Verf gung, knnen weitere Befehle der Conu o trol System Toolbox (Kap. 5.1) verwendet werden. Zum Beispiel kann mit
sys = ss(A,B,C,D)

aus dem System in Zustandsdarstellung ein LTI-Objekt (LTI steht f r linear time inu variant ) erzeugt werden, oder mit
bode(A,B,C,D)

bzw.
bode(sys lin)

das Bode-Diagramm (Betrag und Phase der Ubertragungsfunktion) berechnet und in einer Matlab-Figure dargestellt werden. F r die Linearisierung von Abtastsystemen bzw. die Erzeugung eines zeitdiskreten liu nearisierten Modells existiert der spezielle Befehl dlinmod. Dieser wird in Kap. 10.3.2 ausf hrlich besprochen. u Sollen anstelle des Befehls linmod die Blcke Time-Based- oder Trigger-Based Linearizatio on (Kap. 9.5.1) verwendet werden, so entfllt die Angabe des Arbeitspunkts. Der Block a Time-Based Linearization berechnet das lineare System zu einem festlegbaren Zeitpunkt, beim Block Trigger-Based Linearization kann die Linearisierung des Simulink-Modells durch ein Trigger-Signal ausgelst werden. o

9.2 Analyse eines Simulink-Modells Beispiel

353

Abb. 9.5 zeigt ein Modell einer Strecke 2. Ordnung, dessen Ausgang uber eine einfa che Zeitverzgerung an den Eingang zur ckgef hrt ist. Ausgnge des Systems sind die o u u a Ausgangssignale der Transfer Fcn-Blcke, Eingang ist die Angrisstelle des Anregungso signals.
1 2s2 +1.5s+0.1 Anregung 1 In1 Strecke 1 s+1 bertragungsfunktion im Rckfhrzweig y Speicherung

1 Out1 2 Out2

Abb. 9.5: Beispiel zur Systemlinearisierung: bsp linmod.mdl

Mit dem Befehlsaufruf


[A,B,C,D] = linmod(bsp_linmod) A = -0.7500 1.0000 0 B = 1 0 0 C = 0 0 D = 0 0 -0.0500 0 0.5000 -1.0000 0 -1.0000

0.5000 0

0 1.0000

wird die Zustandsdarstellung des Systems gewonnen,


[num,den] = linmod(bsp_linmod) num = 0 0 den = 1.0000 1.7500 0.8000 0.5500 0.0000 0 0.5000 0.0000 0.5000 0.5000

gibt die Koezienten der Zhler- und Nennerpolynome der System bertragungsfunka u tionen zur ck, die mit u
sys1=tf(num(1,:),den)

354 bzw.
sys2=tf(num(2,:),den)

9 Lineare und nichtlineare Systeme in Simulink

in die bekannte Ubertragungsfunktion-Form gebracht werden knnen. o Mit


sys_lin=linmod(bsplinmod) sys_lin = a: b: c: d: StateName: OutputName: InputName: OperPoint: Ts: [3x3 double] [3x1 double] [2x3 double] [2x1 double] {3x1 cell} {2x1 cell} {bsplinmod/In1} [1x1 struct] 0

erhlt man neben den Daten der Zustandsdarstellung (sys lin.a,...,sys lin.d ) noch Zua satzinformation z.B. uber die Zuordnung der Zustnde zu den im Modell programmiera ten Blcken (sys lin.StateName) oder den aktuellen Arbeitspunkt (sys lin.OperPoint ). o Ohne vorherige Linearisierung kann die Zuordnung der Zustnde auch aus dem Paraa meter xstring im Befehlsaufruf
[sizes, x0, xstring] = bsp_linmod sizes = 3 0 2 1 0 1 1 x0 = 0 0 0 xstring = bsplinmod/Strecke bsplinmod/Strecke bsplinmod/bertragungsfunktion U im Rckfhrzweig u u

ermittelt werden.

9.2.2

Bestimmung eines Gleichgewichtspunkts

Mit dem Matlab-Befehl trim kann der Gleichgewichtspunkt (eingeschwungener Zustand, x = 0) eines Modells bestimmt werden. Der Befehl

9.2 Analyse eines Simulink-Modells

355

[x,u,y] = trim(sys,x0,u0,y0)

ndet den Gleichgewichtspunkt des Modells sys.mdl, der dem Anfangszustand (x0, u0, y0) am nchsten liegt. Bei nichtlinearen Systemen knnen mehrere Gleichgea o wichtspunkte existieren. trim liefert aber immer nur einen Gleichgewichtspunkt, der den Anfangswerten am nchsten liegt. Werden diese Anfangswerte nicht explizit ana gegeben, so sucht Simulink den Gleichgewichtspunkt, der der Bedingung x0 = 0 am nchsten kommt. Existiert kein Gleichgewichtspunkt, gibt Simulink den Punkt aus, an a dem die Abweichungen der Zustandsableitungen x von 0 minimiert werden. Beispiel F r das System aus Abb. 9.6 (entspricht Abb. 9.5)2) soll nun der Gleichgewichtspunkt u f r den Anfangszustand u
x0=[1; 1; 1], u0 = [3]

gefunden werden.
1 2s2 +1.5s+0.1 Anregung 1 In1 Strecke 1 s+1 bertragungsfunktion im Rckfhrzweig y Speicherung

1 Out1 2 Out2

Abb. 9.6: Beispiel zur Ermittlung eines Gleichgewichtspunkts: bsp trim.mdl

Der Aufruf von trim gibt die gefundene Lsung aus. o


2) Wichtiger Hinweis zur Matlab-Version 5.3: Enthlt ein Simulink-Modell, auf das der trim-Befehl a angewendet werden soll, Scope- und To Workspace-Blcke, so drfen in diesen die Variablen zur Dao u tenspeicherung nicht mit den Default-Namen der Argumente der linken Seite x, u, y und dx des trimBefehls benannt werden! Beim Aufruf von trim knnen sonst die entsprechenden Rckgabeparameter o u nicht berechnet werden. Ab der Matlab-Version 6 knnen im oben beschriebenen Fall zwar die Rckgabeparameter korrekt o u berechnet werden, jedoch wird beim Aufruf von trim der Datenvektor y des Blocks Speicherung mit den Rckgabewerten von trim uberschrieben. u

356
[x,u,y,dx] = trim(bsp_trim,x0,u0) x = 0 2.5806 1.2903 u = 1.4194 y = 1.2903 1.2903 dx = 1.0e-015 * 0.1110 0.0000 0

9 Lineare und nichtlineare Systeme in Simulink

Durch Angabe von dx als Argument der linken Seite beim Aufruf von trim kann Information uber die verbleibende Abweichung der Zustandsableitungen von 0 erhalten werden.

9.2.3

Linearisierung mit dem Simulink Control Design

Wird bei installiertem Simulink Control Design der Men punkt Tools/Control Deu sign/Linear Analysis aufgerufen, so net sich der Control and Estimation Tools Manao ger, die grasche Bedienoberche des Simulink Control Design. Mit diesem Zusatzproa dukt aus der Simulink-Familie knnen f r nichtlineare Simulink-Modelle Arbeitspunkte o u speziziert und an diesen eine Linearisierung durchgef hrt werden. Desweiteren wird u eine umfassende Analyse der linearisierten Modelle sowie der Entwurf und die Modikation von linearen Steuerungs- und Regelungselementen unterst tzt. u In diesem Kapitel sollen die grundstzlichen Funktionen des Simulink Control Dea sign bez glich Linearisierung am Beispiel einer vereinfachten Erregerussregelung einer u Gleichstrom-Nebenschluss-Maschine dargestellt werden.

0.8 psisoll 1 In1

2*tan(u/2)

iEsoll iE

2.25 5.1e 2 +0.03s 5s Regelkreis

iE

2*atan(u/2)

psi Scope 1 Out1

Inverse Magnetisierungs kennlinie

Magnetisierungs kennlinie

Abb. 9.7: Beispiel zur Linearisierung mit dem Simulink Control Design: bsp linmod scd.mdl

Abbildung 9.7 zeigt den Regelkreis bei Verwendung von normierten Gren. Er wird o durch die Modellierung der Magnetisierungskennlinie = f (iE ), die den Zusammenhang zwischen Erregeruss und Erregerstrom iE darstellt, als (hysteresefreie) Arcustangens-Funktion = 2 arctan(iE /2) (bzw. iEsoll = 2 tan(soll /2)) nichtlinear. Um eine Linearisierung durchf hren zu knnen, m ssen zunchst Ein- und Ausgangsu o u a

9.2 Analyse eines Simulink-Modells

357

gren des Modells festgelegt werden. Dies kann vor oder nach Start des Control and o Estimation Tools Managers durch Rechtsklick auf die gew nschte Signallinie geschehen: u im erscheinenden Kontextmen der Signallinie wird dann unter Linearization Points u z.B. Input Point oder Output Point gewhlt. Die so erzeugten Ein- und Ausgangsa punkte werden (wie in Abb. 9.7 erkennbar) mit einem (Ausgnge) gekennzeichnet. a - (Eingnge) bzw. a -Icon

Abb. 9.8: Analysis I/Os-Register des Control and Estimation Tools Managers fr u bsp linmod scd.mdl

Im Register Analysis I/Os des Control and Estimation Tools Managers erscheinen dann die zugehrigen Blockausgnge (hier die Ausgnge der Blcke In1 (Typ Inport) und o a a o Magnetisierungskennlinie (Typ Fcn) als aktive Ein- und Ausgnge in der Liste im rechten a Fensterteil (Abb. 9.8). Nach Klick auf den Button Linearize Model wird die Linearisierung (um den StandardArbeitspunkt Null) des Modells gestartet und im linken Fensterteil erscheint unter Linearization Task ein Unterpunkt Model (f r jeden Linearisierungsvorgang ein eigener), u hinter dem sich der komplette Datensatz des linearisierten Modells verbirgt. Bei Klick auf Model knnen diese Daten im rechten Fensterteil inspiziert bzw. exportiert oder o modiziert werden. Bei aktivierter Check Box Plot linear analysis ... kann der LTIViewer (Kap. 5.3.5) gestartet werden (vorausgesetzt, die Control System Toolbox ist installiert), der das Linearisierungsergebnis in einer whlbaren Plot-Art (Step response, a Bode response, Nyquist plot uvm.) darstellt. Abbildung 9.9 zeigt das Linearisierungsergebnis im Control and Estimation Tools Manager. Dasselbe Ergebnis wird auch bei Aufruf des Befehls
[A,B,C,D] = linmod(bsp_linmod_scd)

erhalten. Nach Auswahl von Operating Points im linken Fensterteil knnen die Arbeitspunkte o f r die Zustnde x, Eingnge u und Ausgnge y mit Werten = 0 belegt werden oder u a a a

358

9 Lineare und nichtlineare Systeme in Simulink

alternativ wenn z.B. nur Wertebereiche bekannt sind berechnet werden. Wichtig ist hierbei, dass die Ein- und Ausgnge, f r die ein Arbeitspunkt = 0 gewhlt werden a u a soll, wie beim linmod-Befehl mit Inport- und Outport-Blcken versehen werden m ssen o u (wie in bsp linmod scd.mdl bereits geschehen), die Input - und Output -Points und

dienen nur der Denition der Ein- und Ausgnge f r die Bestimmung der Systema u Matrizen!

Abb. 9.9: Ergebnis der Linearisierung bei x = [0 0], u = 0, y = 0 im Control and Estimation Tools Manager fr bsp linmod scd.mdl u

Standardmig wird als Linearisierungsmethode Block by block analytic verwendet, bei a der, wie vom linmod-Befehl her bekannt (siehe S. 351), jeder Block durch seine analytisch berechnete lineare Darstellung ersetzt wird. Daneben besteht auch die Mglicho keit, mit dem Verfahren der Numerical perturbation zu linearisieren, bei dem, wie vom linmodv5-Befehl her bekannt (siehe S. 351), zur Ermittlung der System-Matrizen die Systemvariablen durch Einbringen von Strsignalen aus dem Arbeitspunkt ausgelenkt o werden. Die Wahl der Linearisierungsmethode sowie der zugehrigen Optionen erfolgt o durch Aufruf des Men punkts Tools/Options... aus dem Control and Estimation Tools u Manager. Im sich onenden Options-Fenster kann u.a. auch die Reihenfolge bei der Zuordnung Zustnde/Zustandsvariablen manuell festgelegt werden. a

9.3 Bibliothek: Discontinuities Nichtlineare Systeme

359

9.3

Simulink-Bibliothek: Discontinuities Nichtlineare Systeme

Rate Limiter und Saturation Der Rate Limiter-Block begrenzt die erste Ableitung des Eingangssignals auf die unter Rising slew rate (Begrenzung bei positiver Steigung des Eingangssignals) bzw. Falling slew rate (Begrenzung bei negativer Steigung Rate Limiter des Eingangssignals) angegebenen Werte. Der Saturation-Block begrenzt den Maximalwert des Eingangssignals nach oben (Upper limit ) und unten (Lower limit ). Beide Blcke stehen auch als Dynamic-Variante zur o Saturation Verf gung, bei denen eine dynamisch vernderbare Rising/Falling slew u a rate bzw. ein dynamisches Upper/Lower limit an die zwei zustzlichen Eingnge up a a und lo gelegt werden kann. Backlash Der Backlash-Block modelliert das Verhalten eines Systems mit Lose. Lose knnen z.B. in mechanischen Anordungen, die Getriebe beinhalten, als o Getriebespiel auftreten. Zwischen den Zhnen der ineinander greifenden a Backlash Zahnrder kann hier durch ungenaue Fertigung oder Abnutzung ein Spiel a entstehen. Der Parameter Deadband width gibt die Loseweite (Breite der Totzone symmetrisch um den Initial output ) an. Der Backlash-Block kann sich jeweils in einem der drei folgenden Betriebszustnde benden: a Positiver Anschlag: Ausgangssignal steigt proportional zum Eingangssignal, y(i) = u(i) 1/2 Deadband width. Beispiel Getriebe: Zahnrder im Eingri, a positive Drehzahl des Antriebs bewirkt positive Drehzahl an der Last. Entkoppelt: Kehrt sich das Eingangssignal um, muss erst die gesamte Loseweite durchquert werden, bis der negative Anschlag erreicht wird. Der Ausgang ist whrenddessen vom Eingang entkoppelt. Beispiel Getriebe: Nach Drehricha tungsnderung lsen sich Zahnrder voneinander, Drehzahl der Last kann durch a o a Motor nicht gesteuert werden. Negativer Anschlag: Ausgangssignal sinkt proportional zum Eingangssignal, y(i) = u(i) + 1/2 Deadband width. Beispiel Getriebe: Zahnrder wieder im Eina gri, diesmal an gegen berliegender Zahnanke, negative Drehzahl des Antriebs u bewirkt negative Drehzahl an der Last. Das Beispiel-Modell bsp backlash.mdl aus Abb. 9.10 verdeutlicht die Funktionsweise des Backlash-Blocks: Mithilfe eines Rate Limiter-Blocks wird aus dem Rechtecksignal (Amplitude 1 und Frequenz 0.4 Hz) des Signal Generator der Sgezahn u mit gleicher a positiver und negativer Steigung erzeugt. Der Sgezahn ist Eingangssignal des Backlasha Blocks. Der Backlash-Block hat Initial output = 0 und eine Deadband width = 1. Aus

360

9 Lineare und nichtlineare Systeme in Simulink

der Matlab-Figure (erzeugt mit dem Matlab-Skript bsp backlash plot.m, das als Model Callback-Routine StopFcn verkn pft wurde, siehe dazu Kap. 8.8.1) sind die drei u Betriebszustnde gut zu erkennen. Am positiven Anschlag steigt y um 0.5 versetzt zu a u an. Nach dem Richtungswechsel von u bleibt y konstant bis die Loseweite durchquert ist und sinkt dann am negativen Anschlag um 0.5 versetzt zu u.
1.4 1.2 u = Eingang Backlash y = Ausgang Backlash

u ausgabe Signal Generator 1 Constant Rate Limiter y Backlash To Workspace


ausgabe

1 0.8 0.6 0.4 0.2 0 0 2 4 Zeit [s] 6 8 10

Abb. 9.10: Beispiel zum Backlash-Block: bsp backlash.mdl (links) und Ergebnis der Simulation (rechts)

Quantizer Der Quantizer-Block setzt sein Eingangssignal in ein stufenfrmiges Auso gangssignal um. Die Stufenhhe wird dabei durch den Quantization ino terval Parameter bestimmt. Zum Integrationszeitpunkt i berechnet sich der Ausgang y(i) abhngig vom Quantization interval Parameter q und a Eingang u(i) unter Zuhilfenahme der Matlab-Funktion round zu: y(i) = q round( u(i) ) q

Quantizer

Parabel f(u) quantisierte Parabel ausgabe To Workspace

Clock (u(1)5)^2 + 3 Quantizer

Abb. 9.11: Beispiel zum Quantizer-Block: bsp quantizer.mdl

Im Beispiel aus Abb. 9.11 wird mit einem Fcn-Block (Unterbibliothek User-Dened Functions, Kap. 9.5) eine in x- und y-Richtung verschobene Parabel erzeugt und quantisiert. Eingang und Ausgang des Quantizer-Blocks werden in einer Matlab-Figure (Abb. 9.12, erzeugt mit dem Matlab-Skript bsp quantizer plot.m, das als Model

9.3 Bibliothek: Discontinuities Nichtlineare Systeme


30 25 ausgabe 20 15 10 5 0 0 2 4 Zeit [s] 6 8 10 Parabel quantisierte Parabel

361

Abb. 9.12: Ergebnis bsp quantizer.mdl

der

Simulation

von

Callback-Routine StopFcn verkn pft wurde, siehe dazu Kap. 8.8.1) aufgezeichnet. Als u Quantization interval wurde q = 5 gewhlt. a Dead Zone Mit dem Dead Zone-Block kann ein System modelliert werden, das in einem bestimmten Bereich des Eingangssignals am Ausgang den Wert 0 erzeugt. Die untere und obere Grenze der Totzone werden durch die PaDead Zone rameter Start of dead zone und End of dead zone festgelegt. Liegt das Eingangssignal innerhalb dieser Grenzen, entsteht am Ausgang der Wert 0. F r Werte u des Eingangssignals u Start of dead zone wird der Ausgang zu y = u Start of dead zone. F r Werte des Eingangssignals u End of dead zone wird der Ausgang zu u y = u End of dead zone. Im Block Dead Zone Dynamic knnen an die Eingnge up o a und lo Signale f r dynamisch vernderbare Werte von Start/End of dead zone angelegt u a werden. Relay Mit dem Relay-Block wird abhngig vom Eingangssignal der Ausgang zwia schen den zwei Werten Output when on und Output when o geschaltet. Das Relais ist eingeschaltet, on, wenn der Eingang u dem Switch on Relay point wird. Dann gilt: y = Output when on. Dort bleibt es, bis u Switch o point wird. Nun gilt: y = Output when o. Der Switch on point muss immer grer o oder gleich dem Switch o point gewhlt werden. F r Switch on point > Switch o a u point modelliert der Relay-Block eine Hysterese, bei Switch on point = Switch o point wird ein Schalter modelliert. Coulomb & Viscous Friction Der Coulomb & Viscous Friction-Block modelliert ein System mit Haft- und Gleitreibung. Diese Reibungsarten knnen z.B. in mechanischen Systemen o mit translatorischen oder rotatorischen Bewegungen auftreten. Durch die

Coulomb & Viscous Friction

362

9 Lineare und nichtlineare Systeme in Simulink

Haftreibung entsteht am Nulldurchgang des Eingangssignals (z.B. Drehzahl bei rotatorischen Bewegungen) eine Unstetigkeitsstelle. Erst wenn das antreibende Moment einer rotatorischen Bewegung grer als das Haftreibmoment wird, kann die Drehmasse in o Bewegung gesetzt werden. Sinkt das antreibende Moment unter das Haftreibmoment, bleibt die Drehmasse stehen. F r Drehzahlen > 0 entsteht ein linear ansteigendes Reibu moment (Gleitreibung). Die Gre der Haftkraft bzw. des Haftmoments wird durch den Parameter Coulomb o friction value (Oset) festgelegt. Die Steigung der Gleitreibung wird durch Coecient of viscous friction (Gain) bestimmt. Hit Crossing Der Hit Crossing-Block erkennt den Zeitpunkt, zu dem das Eingangssignal den unter Hit crossing oset eingetragenen Wert in der unter Hit crossing direction angegebenen Richtung durchluft. Ist die Check Box Show outa Hit Crossing put port aktiviert, wird zum Crossing Zeitpunkt eine 1 am Ausgang, sonst 0 ausgegeben. Wird im Optimization-Register der Conguration Parameters Dialogbox die Check Box Implement logic signals as boolean data deaktiviert, ist das Ausgangssignal vom Typ double, ansonsten boolean.

9.4

Bibliothek: Lookup Tables Nachschlagetabellen

Lookup Table Die Lookup Table bildet das Eingangssignal anhand der in der Nachschlagetabelle (Vector of input values Table data) abgelegten Information auf den Ausgang ab. Fllt der aktuelle Wert des Eingangssignals genau a Lookup Table mit einem Tabellenpunkt (Punkt im Vector of input values) zusammen, wird der zugehrige Punkt aus Table data ausgelesen. Liegt der aktuelle Wert des Eino gangssignals auerhalb des Tabellenbereichs oder zwischen zwei Tabellenpunkten, wird mit dem unter Lookup method gewhlten Verfahren extra- bzw. interpoliert. a Im folgenden Beispiel bsp lookuptable.mdl (Abb. 9.13 links) wurde die Lookup Table mit folgenden Werten ausgestattet (bsp lookuptable ini.m als Model CallbackRoutine PreLoadFcn und InitFcn, Kap. 8.8.1):
% Vector of input values vecin=[-10:2:10]; % Vector of output values vecout=[-5 -5 -5 -2 -2 -2 4.5 4.5 4.5 0 -1];

Eingang der Lookup Table ist ein Rampensignal mit Steigung 1, so dass der gesamte Wertebereich der Nachschlagetabelle durchfahren wird. Am Ausgang entsteht

9.4 Bibliothek: Lookup Tables Nachschlagetabellen

363

die in der Lookup Table abgelegte Stufenkurve. Nach der Simulation wird uber bsp lookuptable plot.m (als Model Callback-Routine StopFcn) das Ergebnis grasch dargestellt (Abb. 9.13 rechts). Eine bequeme Mglichkeit, die Daten von Blcken aus o o
Werte der Lookup Table (o) und Ausgangssignal 5 4 3 2 1 0 1 2 3 4 5 10 8 6 4 2 0 2 4 6 8 10 Eingangssignal: Rampe mit Steigung 1

auslese Ramp Lookup Table To Workspace

Abb. 9.13: Beispiel zur Lookup Table: bsp lookuptable.mdl (links) und Simulationsergebnis (rechts)

Ausgang der Lookup Table

Abb. 9.14: Lookup Table Editor mit Daten von bsp lookuptable.mdl

der Lookup Tables-Bibliothek zu uberwachen und zu andern, bietet der Lookup Table Editor (Abb. 9.14), der uber den Men punkt Tools/Lookup Table Editor genet wird. u o Hier werden im rechten Fensterteil die Daten der Table blocks (linker Fensterteil) in Tabellenform (Zeilen oder Spalten) dargestellt. Per Mausklick kann der Inhalt jeder Tabellenzelle gendert werden. Um die Anderungen bei der Simulation wirksam werden a oder Men punkt Fiu zu lassen, m ssen die Table blocks aktualisiert werden (Button u le/Update Block Data). Im Fall von bsp lookuptable.mdl werden die Variablen vecin und vecout dann mit neuen Werten belegt.

364 Lookup Table (2-D)

9 Lineare und nichtlineare Systeme in Simulink

Der Lookup Table (2-D)-Block ermglicht die Ablage einer zweidimensionao len Nachschlagetabelle. Mit dem Parameter Table Data werden die mglio chen Ausgangswerte in Form einer Matrix festgelegt. Row index input vaLookup lues bestimmt die zu den Reihen der Matrix, Column index input values Table (2D) die zu den Spalten der Matrix korrespondierenden Werte. Mit Row index input values und Column index input values werden also die Punkte in der x-y-Ebene deniert, Table data enthlt dann die zugehrigen z-Werte. a o Das Signal am ersten (oberen) Eingang des Lookup Table (2-D)-Blocks wird mit Row index input values, das Signal am zweiten (unteren) Eingang wird mit Column index input values verglichen. Ist f r das Wertepaar am Blockeingang ein Eintrag unter Table u data vorhanden, wird dieser an den Ausgang gegeben; andernfalls wird automatisch zwischen den unter Table data abgelegten Werten inter- oder extrapoliert. Hierbei gelten die Aussagen f r die Lookup Table. u Lookup Table (n-D) Bei Verwendung einer Lookup Table (n-D) kann die Nachschlagetabelle 2 bis n Dimensionen besitzen. Sie wird im Textfeld Number of table dimensions festgelegt und bestimmt die Anzahl der Blockeingnge. Die Interpoa Lookup lation zwischen den durch die in den Zeilen 1 bis n der Tabelle Breakpoints Table (nD) denierten Datenpunkten kann mit konstantem Wert (None Flat ), linear (Linear ) oder mit Spline-Interpolation (Cubic Spline) durchgef hrt werden. Gleiches u gilt f r die Extrapolation uber vorhandene Datenpunkte hinaus. u
2D T(u)

9.5
Function

Bibliothek: User-Dened Functions Benutzer-denierbare Funktionen

Mithilfe des Fcn-Blocks kann auf ein Signal ein im Stil der Sprache C frei programmierbarer mathematischer Ausdruck angewendet werden. Mit u kann auf das (skalare) Eingangssignal bzw. die erste Komponente eines Fcn vektoriellen Eingangssignals Bezug genommen werden, u(i) oder u[i] bezeichnen die i-te Komponente eines vektoriellen (1-D) Eingangssignals. Der mathematische Ausdruck darf numerische Konstanten, mathematische Funktionen (Kap. 2.1), arithmetische, logische und Vergleichsoperatoren (Kap. 2.3.1) enthalten, sowie nat rlich u Klammern und im Matlab-Workspace denierte Variablen. Bez glich der Prioritt der u a Operatoren bei der Auswertung des Parameters Expression gelten die Regeln der Sprache C. Matrizenoperationen werden jedoch nicht unterst tzt. u
f(u)

9.5 Bibliothek: User-Dened Functions Benutzer-denierbare Funktionen Beispiel: Der Ausdruck (u[1]/m - g*sin(u[3])*cos(u[3]) + l*power(u[2],2)*sin(u[3]))/... (M/m + power(sin(u[3]),2))

365

in einem Fcn-Block weist dem skalaren Ausgang y folgenden Ausdruck mit den auf dem Matlab-Workspace bekannten Variablen m, M , l und g zu: u[1] g sin u[3] cos u[3] + l u[2]2 sin u[3] y = m M + sin2 u[3] m MATLAB Function Der MATLAB Fcn-Block stellt eine Erweiterung des Fcn-Blocks dar. Unter dem Parameter MATLAB function knnen neben mathematischen Auso u MATLAB Fcn dr cken auch Matlab-Funktionen (Kap. 2.5) auf das Eingangssignal angewendet werden. Wichtig ist dabei, dass die Breite des von der spezizierten Matlab-Funktion ausgegebenen Signals dem Wert im Textfeld Output dimensions des MATLAB Fcn-Blocks entspricht. Der Default-Wert 1 weist dem Blockausgang die Signalbreite des Eingangs zu. Unter Output signal type kann der Typ des Ausgangssignals angegeben werden (auto, real oder complex ).
MATLAB Function

Die Berechnung eines MATLAB Fcn-Blocks bentigt sehr viel mehr Zeit als die eines Fcno Blocks, da bei jedem Integrationsschritt der Matlab parser aufgerufen wird, der die Syntax analysiert. Bez glich Rechenzeiteinsparung ist daher bei einfachen Funktionen u die Verwendung des Fcn- oder Math Function-Blocks besser; komplizierte Operationen sollten als S-Funktion geschrieben werden. Embedded MATLAB Function Mit dem Embedded MATLAB Function-Block kann wie mit dem MATLAB Fcn-Block Matlab-Code in Form einer Matlab-Funktion (Kap. 2.5) in ein Simulink-Modell (oder Stateow-Chart, siehe Kap. 12.2.5) eingebracht Embedded MATLAB Function werden. Gegen ber dem MATLAB Fcn-Block hat die Embedded MATLAB u Function jedoch entscheidende Vorteile. Werden die verwendeten Matlab-Befehle auf die in der Embedded Matlab Function Library verf gbaren Befehle beschrnkt, kann u a bei Simulationsstart automatisch eine ausf hrbare Datei (unter Windows mit der Eru weiterung sfun.mexw32, C-Code im automatisch erzeugten Verzeichnis slprj ) aus dem Embedded MATLAB Function-Block erzeugt werden. Diese kann mithilfe des Real-Time Workshop entweder direkt auf einer Zielhardware ausgef hrt oder f r die sptere Eru u a zeugung von C-Code aus dem gesamten Simulink-Modell (ebenfalls wieder mit dem Real-Time Workshop) verwendet werden. Die Befehle der Embedded Matlab Function Library stehen bereits in C zur Verf gung und knnen bei Code-Erzeugung vom u o Real-Time Workshop direkt eingebunden werden. Eine umfangreiche Liste der bereits zur Verf gung stehenden Befehle (die Library wird von Version zu Version erweitert) u ndet sich in der Online-Hilfe; hier einfach nach Embedded Matlab Function Library
u

fcn

366

9 Lineare und nichtlineare Systeme in Simulink

1 0 0 1 1 0 1 0 1 1
m_out m_in cond_inv flag

1 0 1 Display

1 0 0 Display 1 1

1 0

Constant

Embedded MATLAB Function 0

0 0

0 0 Display 1 0

0 0

1 0

0 1

m_out m_in cond_inv flag

Constant

Embedded MATLAB Function

Display

Abb. 9.15: Beispiel bsp embedded.mdl: Aufruf mit einer [3 3]-Matrix (oben) und einer [2 3]-Matrix (mitte). Unten: Der Embedded MATLAB-Editor mit dem Code der eingebetteten Funktion cond inv

suchen. Auf die Programmierung von S-Funktionen zur Code-Erzeugung muss somit also nur noch zur ckgegrien werden, wenn in der Funktion tatschlich dynamische u a Systeme realisiert werden sollen. Das Beispiel bsp embedded.mdl zeigt, wie mit einer Embedded MATLAB Function eine einfache Matrix-Inversion mit vorangehender Abfrage der Matrix-Dimension realisiert werden kann. Abb. 9.15 zeigt das Beispiel bei Speisung mit einer [3 3]-Matrix (oben) und einer [2 3]-Matrix (mitte) sowie den Embedded MATLAB -Editor, der sich bei Links-Doppelklick auf den Embedded MATLAB Function-Block onet. Die im Code der Funktion cond inv verwendeten Matlab-Befehle size, zeros und inv gehren zur o Embedded Matlab Function Library. S-Function, S-Function Builder und Level-2 M-File S-Function Der S-Function-Block ermglicht es, eine als Matlab-Executable File o (MEX-File in C, C++, Ada oder Fortran) oder Matlab-Skript (Level-1 M-File) programmierte S-Funktion in ein Simulink-Blockdiagramm einzubinden. Der Name der S-Funktion muss dazu im Parameterfeld S-function name eingetragen werden. Mithilfe des S-function parameters-Textfeldes

system S Function

9.5 Bibliothek: User-Dened Functions Benutzer-denierbare Funktionen

367

system S Function Builder mlfile Level M 2 file S Function

knnen der aufgerufenen S-Funktion zustzliche Parameter ubergeben o a werden, z.B. Matlab-Ausdr cke oder Variablen. Mehrere Parameter u m ssen dabei durch ein Komma getrennt werden. Durch Klick auf den u Edit -Button onet sich der Quellcode der S-Funktion im Matlab-Editor (zum Matlab-Editor siehe Abb. 2.4/Kap. 2.4). Das Textfeld S-function modules ist nur von Belang, wenn mit dem Simulink-Zusatzprodukt RealTime Workshop Code aus dem Simulink-Modell, das den S-Function-Block enthlt, erzeugt werden soll. a

C MEX S-Funktionen knnen auch bequem unter Verwendung des Blocks S-Function o Builder programmiert werden. Dieser stellt eine graphische Oberche u.a. mit vorgea fertigten Registern wie z.B. Initialization oder Continuous Derivatives dar, welche die R mpfe von Standard-C-Routinen reprsentieren. Eigener C-Code muss dann nur noch u a in die Textfelder der entsprechenden Register eingetragen werden. Der Level-2 M-File S-Function-Block erlaubt das Einbinden einer als Matlab-Skript im Level-2 geschriebenen S-Funktion. Beim Programmieren einer M-File S-Funktion sollte immer der aktuelle Typ Level-2 verwendet werden. Bei diesem Typ wurde gegen ber dem bisherigen Typ Level-1 M-File der Umfang der zur Verf gung stehenden u u Routinen stark erweitert und an die f r C MEX S-Funktionen verf gbaren Routinen u u angeglichen. Bereits bestehende, mit lteren Matlab-Versionen erstellte Level-1 M-File a S-Funktionen brauchen nicht konvertiert zu werden; zum Einbinden kann wie gewohnt der S-Function-Block verwendet werden. Zur nheren Erluterung von S-Funktionen siehe Kap. 9.7 und Abb. 9.19. a a

9.5.1

Bibliotheken: Model Verication und Model-Wide Utilities Prufblocke und Modell-Erganzungen

Diese Unterbibliotheken stellen Blcke zur Verf gung, die sowohl der Uberprfung von o u u Simulink-Modellen auf ein bestimmtes statisches oder dynamisches Verhalten dienen, als auch Blcke, mit deren Hilfe modellweite Zusatzinformation abgelegt und Zusatzo eigenschaften deniert werden knnen. Sie dienen der leichteren und komfortableren o Bedienung, Handhabung und Dokumentation von Simulink-Modellen.

Model Verication Prufblcke o


Assertion Der Assertion-Block uberwacht, dass keines der Elemente seines Eingangs signals Null wird. F r den Fall, dass Null erreicht wird, kann vom Benutzer u festgelegt werden, ob die Simulation unterbrochen werden soll oder nicht, ob eine Standardwarnung erscheint oder eine selbstdenierte CallbackRoutine (M-File) ausgef hrt werden soll. u

Assertion

Wie auch bei allen anderen Blcken der Model Verication-Bibliothek kann beim o Assertion-Block die Uberwachung des Eingangssignals problemlos deaktiviert werden. Damit m ssen Prfblcke nach erfolgreicher Uberwachung nicht aus dem Simulinku u o

368

9 Lineare und nichtlineare Systeme in Simulink

Modell entfernt werden. Eine globale Aktivierung/Deaktivierung aller Prfblcke u o kann bequem uber das Diagnostics-Register (Untergruppe Data Validity/Debugging; Kap. 8.7.1 und Abb. 8.32) der Conguration Parameters Dialogbox durchgef hrt weru den. Check Static Gap und Check Dynamic Gap Diese Blcke uberwachen, ob ihr Eingangssignal (beim Check Dynamic Gap o der Eingang sig) immer grer gleich oder kleiner gleich einer statischen o (Parameter Upper/Lower Bound ) oder dynamischen Grenze (Eingnge a min und max ) geblieben ist. Wie beim Assertion-Block kann der Benutzer bestimmen, welche Aktion bei Verletzung der Uberwachungsbedingung eintreten soll. Der Block Check Dynamic Range wird im Beispiel aus Abb. 8.18 behandelt.

Check Static Gap max min sig Check Dynamic Gap

Check Static Lower Bound und Check Dynamic Lower Bound Die Blcke Check Static Lower Bound und Check Dynamic Lower Bound o uberwachen ihr Eingangssignal auf Einhaltung einer statischen oder dyna mischen unteren Schranke. Der Benutzer kann wieder bestimmen, welche Aktion bei Verletzung der Uberwachungsbedingung eintreten soll. F r die Uberwachung auf Einhaltung einer oberen Schranke m ssen die u u Blcke Check Static Upper Bound und Check Dynamic Upper Bound vero wendet werden.

Check Static Lower Bound min sig Check Dynamic Lower Bound

Model-Wide Utilities Modell-Ergnzungen a


DocBlock Ein Doppelklick auf den DocBlock erzeugt ein Textle und onet es in dem unter File/Preferences spezizierten Editor. Hier kann Hilfe- und Dokumentationstext eingegeben werden. Das Textle wird beim Speichern dem DocBlock zugeordnet und kann nach Schlieen jederzeit durch Doppelklick auf den Block wieder genet und modiziert werden. o

DOC DocBlock

Time-Based Linearization und Trigger-Based Linearization


T=1 TimedBased Linearization

Die Blcke Time-Based Linearization und Trigger-Based Linearization ruo fen zu einem vorgebbaren Zeitpunkt bzw. abhngig von einem Triggera signal die Routinen linmod bzw. dlinmod auf, welche eine Linearisierung des Simulink-Modells durchf hren (siehe auch Kap. 9.2.1). Das Eru gebnis der Linearisierung wird als Struktur im Matlab-Workspace abgespeichert. Die Struktur trgt den Namen des Modells, an den z.B. a

TriggerBased Linearization

9.6 Algebraische Schleifen

369

Time Based Linearization angehngt wird. Die Felder a, b, c und d der Struktur enta halten die Matrizen A, B, C und D der Zustandsdarstellung des linearen Modells, des Weiteren werden die Namen der Zustnde, Eingnge, Ausgnge, und die Abtastzeit als a a a Felder abgelegt. Das Feld OperPoint enthlt Information uber den Wert der Eingnge a a und Zustnde zum Zeitpunkt der Linearisierung. a

9.6

Algebraische Schleifen

Algebraische Schleifen knnen in Modellen auftreten, in welchen Blcke mit direct o o feedthrough verwendet werden. Bei diesen Blcken hngt das Ausgangssignal vom o a Eingangssignal zum gleichen Zeitpunkt ab. Blcke mit direct feedthrough sind beio spielsweise Sum, Gain, Product, State Space mit Durchschaltmatrix D = 0, Integrator bez glich des Anfangswerteingangs (die Schleife, die durch die R ckf hrung des u u u Integrator-Ausgangssignals an den R cksetzeingang entsteht ist nicht algebraisch) sowie u Transfer Function und Zero-Pole, wenn Zhler- und Nennerpolynom gleicher Ordnung a sind. Wird der Ausgang eines Blocks mit direct feedthrough direkt oder uber andere direct feedthrough-Blcke an seinen Eingang zur ckgef hrt, so hngt das aktuelle Eingangso u u a signal des Blocks vom eigenen Ausgang zum gleichen Zeitpunkt ab, der wiederum vom Eingangssignal zum gleichen Zeitpunkt abhngt. Eine algebraische Schleife entsteht. a Beim Integrator tritt eine algebraische Schleife immer dann auf, wenn sein Ausgangssignal direkt oder uber direct feedthrough-Blcke das externe Anfangswertsignal steuert. o Die Schleifenproblematik kann durch den bereits im Beispiel von Kap. 9.1 (Abb. 9.3) angegebenen Ansatz gelst werden: Anstelle des Integrator-Ausgangssignals wurde dort o die Integrator-Zustandsgre am state port abgegrien und f r die R ckf hrung vero u u u wendet. Der state port ist ein zustzlicher Ausgang, der durch Aktivierung der Check a Box Show state port erzeugt werden kann. Ausgangssignal und Zustandsgre eines o Integrator-Blocks sind dem Wert nach gleich, werden jedoch von Simulink intern zu unterschiedlichen Zeitpunkten berechnet, so dass die Schleifenproblematik vermieden wird. Enthlt ein Modell eine algebraische Schleife, wird von Simulink zu jedem Integratia onsschritt eine Routine aufgerufen, die diese Schleife iterativ lst (Newton-Raphsono Algorithmus). Damit das Verfahren konvergiert, ist es in vielen Fllen ntig, einen a o Startwert vorzugeben. Dies kann z.B. durch Einbringen eines Initial Condition (IC)-Blocks geschehen (Unterbibliothek Signal Attributes). Eine relativ bequeme Mglichkeit zur Lsung einer algebraischen Schleife ist der von o o Simulink bereitgestellte Block Algebraic Constraint aus der Unterbibliothek Math Operations. Der Startwert f r das Iterationsverfahren kann hier durch Spezizierung des u Parameters Initial guess vorgegeben werden.

370 Algebraic Constraint


f(z)

9 Lineare und nichtlineare Systeme in Simulink

Solve f(z) = 0

Algebraic Constraint

Der Algebraic Constraint-Block zwingt sein Eingangssignal zu 0 und gibt an seinem Ausgang den Wert der Gre z aus, f r die der Eingang 0 wird. o u Die Ausgangsgre muss das Eingangssignal durch eine wie auch immer o geartete R ckf hrung beeinussen. u u

Unter Initial guess kann ein Startwert f r die Gre z angegeben werden, von dem u o aus der Algorithmus f r die Lsung der algebraischen Schleife gestartet wird. Durch u o geschickte Wahl von Initial guess kann die Genauigkeit der Lsung verbessert werden, o bzw. in kritischen Fllen wird die Lsung der algebraischen Schleife damit uberhaupt a o erst ermglicht. Folgendes Beispiel soll die Funktion des Algebraic Constraint-Blocks o verdeutlichen. Es soll die Lsung der Gleichung o f (z) = 1 1 3 z sin z z 5 = 0 7 28

gefunden werden. Zu der im Block Display angezeigten Lsung der Gleichung kann der o Algorithmus jedoch erst ab einem Initial guess > 1.5 konvergieren.

(1/7)* u^3 Fcn (1/28)* sin (u) Fcn1 5 Constant z Solve z f(z) = 0 Algebraic Constraint
f(z)

Display

Sum

Abb. 9.16: Beispiel einer algebraischen Schleife: bsp algloop.mdl

9.7

S-Funktionen

S-Funktionen sind Funktionen, die mittels eines S-Function-, S-Function Builder- oder Level-2 M-File S-Function-Blocks (Unterbibliothek User-Dened Functions) innerhalb eines Simulink-Modells ausgef hrt werden knnen. Der Simulink-Benutzer kann auf diese u o Weise eigene Algorithmen in ein Simulink-Modell einbringen. Dies ist ein Vorteil vor allem dann, wenn diese Algorithmen nicht mehr durch Standard-Funktionsblcke realio siert werden knnen oder bereits bestehender Code (legacy code, z.B. C, C++) in das o Modell eingebunden werden soll. Auerdem kann mithilfe von S-Funktionen die von Simulink zur Verf gung gestellte Bausteinbibliothek um beliebige Funktionen erweitert u

9.7 S-Funktionen

371

werden. Wichtig bei der Programmierung einer S-Funktion ist die Einhaltung eines a ueren Rahmens (Aufruf bestimmter Routinen, Setzen von Flags etc.), der Simulink ermglicht, whrend des Simulationslaufs korrekt mit der S-Funktion zu kommunizieo a ren. Simulink bietet dazu f r jede Programmiersprache ein eigenes Template File an, das u diesen ueren Rahmen mit allen oder hug verwendeten Routinen bereits enthlt. a a a Diese Template Files sollten vom Benutzer unbedingt als Ausgangsbasis verwendet werden; sie erleichtern die Programmierung eigener S-Funktionen erheblich. Die Template Files und viele hilfreiche Beispiele erhlt man durch Doppelklick auf den (blau hina terlegten) Block S-Function Examples in der Unterbibliothek User-Dened Functions. Es o net sich das Bibliotheksfenster Library: sfundemos wie in Abb. 9.17 gezeigt.

Abb. 9.17: Bibliotheksfenster der SFunction Examples: Doppelklick auf eine Untergruppe zeigt Beispiele und Template Files an

Wie aus Abb. 9.17 zu erkennen ist, knnen S-Funktionen in den folgenden Programo miersprachen realisiert werden: in Matlab als M-File S-Funktionen vom (bisherigen) Typ Level-1 (Template File sfuntmpl.m, Einbinden mit Block S-Function) oder vom aktuellen Typ Level-2 (Template msfuntmpl.m, Einbinden mit Block Level-2 M-File S-Function), wobei angeraten wird, M-File S-Funktionen nur noch im Level-2 zu programmieren. Bei diesem Typ wurde das Spektrum der verf gbaren Standard-Routinen stark erweiu tert und an C MEX S-Funktionen angepasst. Der Vorteil einer Programmierung in Matlab ist vor allem der geringe Entwurfsaufwand: Es knnen alle Matlabo Befehle (auch aus allen Toolboxen) bei der Programmierung verwendet werden. Nachteil: geringe Ausf hrungsgeschwindigkeit, da die S-Funktion bei jedem Inu tegrationsschritt von Simulink mithilfe eines Parsers Zeile f r Zeile interpretiert u werden muss. Dar ber hinaus ist eine Erzeugung von ausf hrbarem Code f r u u u Echtzeitanwendungen nicht mglich. Das Verzeichnis f r M-File-Template Files o u ist $M AT LABP AT H\toolbox\simulink\blocks. in den Programmiersprachen C, C++, Fortran oder Ada als MEX S-Funktionen (MEX steht f r Matlab-Executable). Die Templates f r C sind u u a sfuntmpl basic.c (hug benutzte Routinen) und sfuntmpl doc.c (alle verf gbaren Routinen und ausf hrliche Kommentare) wenn der Code mittels u u eines S-Function-Blocks eingebunden werden soll. F r C MEX S-Funktionen kann u daneben auch der Block S-Function Builder (siehe S. 367) verwendet werden. Das Verzeichnis f r C MEX-Templates ist $M AT LABP AT H\simulink\src. F r u u die Programmierung von Level-1 S-Funktionen in FORTRAN steht als Template sfuntmpl fortran.f, f r Level-2 S-Funktionen sfuntmpl gate fortran.c u

372

9 Lineare und nichtlineare Systeme in Simulink zur Verf gung, beide ebenfalls in $M AT LABP AT H\simulink\src. Die u Ada-Templates sfuntmpl adb.txt und sfuntmpl ads.txt sind unter $M AT LABP AT H\simulink\ada\examples\template zu nden.
Grundlegende C MEX SFunktion Routinen Beginn des Simulationslaufs: Initialisierung
?

mdlInitializeSizes

Grundlegende M Level-2 SFunktion Routinen function setup(block)

Berechne Zeitpunkt des nchsten a - Abtastschritts (bei Blcken mit o variabler Abtastzeit)
?

mdlGetTimeOfNextVarHit

Berechne Ausgangsvektor y fr grte Schrittweite u o


?

mdlOutputs Outputs

S i m u l a t i o n s s c h l e i f e

Berechne mit grter Schrittweite o aktuelle zeitdiskrete Zustnde xk+1 a


?

mdlUpdate Update

Berechne die Ableitungen x


?

mdlDerivatives Derivatives

Berechne Ausgangsvektor y 
?

mdlOutputs Integration (mit kleinerer Schrittweite) mdlDerivatives Outputs

Berechne die Ableitungen x


?

Derivatives

Lokalisiere Nulldurchgnge a
?

Ende des Simulationslaufs: Fhre u weiter geforderte Aufgaben aus

mdlTerminate Terminate

Abb. 9.18: Schritte beim Simulationslauf

MEX S-Funktionen m ssen vor Simulationsstart vom Benutzer mit dem Befehl u
mex -optionen sfunktion name.extension

compiliert und gelinkt werden (zu Compiler-Installation und Setup-Vorgang siehe Kap. 12 oder Kap. 8.9.4). optionen und extension m ssen je nach verwendeter u

9.7 S-Funktionen

373

Programmiersprache angepasst werden. Vorteil von MEX S-Funktionen ist z.B. die schnellere Ausf hrungsgeschwindigkeit, da bei Simulationsstart die S-Funktion als u ausf hrbarer Code vorliegt. Weiterer Vorteil ist, dass bereits vorhandener Code in u ein Simulink-Modell eingebunden werden kann. Eine wichtige Anwendung speziell von C MEX S-Funktionen ist dar ber hinaus der Zugri auf Hardware (z.B. ADu Wandler), da dies in der Programmiersprache C ublicherweise problemlos mglich o ist. Auerdem knnen bereits existierende Hardwaretreiber eingebunden werden. o Nachteil: Die Programmierung ist f r unge bte Benutzer sehr viel komplizierter u u und damit aufwndiger. a Wie jeder Standard-Funktionsblock kennt auch eine S-Funktion (und damit die Blcke o S-Function, S-Function Builder und Level-2 M-File S-Function) die Aufteilung der Signale in einen Eingangsvektor u, einen Zustandsvektor x und einen Ausgangsvektor y. In S-Funktionen werden zeitkontinuierliche und zeitdiskrete Zustandsvariablen getrennt voneinander behandelt, d.h. es werden unterschiedliche Routinen zur Berechnung von x bzw. xk+1 aufgerufen. Abb. 9.18 zeigt die Schritte, die Simulink bei einem Simulationslauf ausf hrt, und die u grundlegenden Routinen, die bei diesen Schritten in einer C MEX- bzw. Level-2 M SFunktion aufgerufen werden. Die C MEX-Routinen entsprechen den in einer Level-1 M-File S-Funktion zur Verf gung stehenden Routinen. Neben diesen grundlegenden u Routinen steht in C MEX- aber auch in Level-2 M-File S-Funktionen eine groe Anzahl weiterer (optionaler) Routinen zur Realisierung des gew nschten Systemverhaltens zur u Verf gung. Sie knnen den Template Files, den Beispieldateien oder der Online-Hilfe u o (nach S-function callback methods suchen) entnommen werden. Beispiel: PT1 Im folgenden Simulink-Beispiel pt1fun.mdl (Abb. 9.19 links) ist im Zeitkontinuierlichen ein einfaches PT1 -Glied mit der Ubertragungsfunktion Y (s) = 1/(1 + sT ) U (s) mittels einer S-Funktion in mehreren Varianten realisiert: pt1sfun m2 : Level-2 M-File S-Funktion, Datei pt1sfun m2.m pt1sfun c : C MEX S-Funktion, Datei pt1sfun c.c pt1sfun csfb : C MEX S-Funktion, erstellt mit dem S-Function Builder pt1sfun m : Level-1 M-File S-Funktion, Datei pt1sfun m.m Die Zeitkonstante T wird als vom Benutzer whlbarer Parameter im entsprechenden a Block (Textfelder Parameters bzw. S-Function Parameters) ubergeben. Abb. 9.19 zeigt das Simulink-File, die Block Parameters Dialogbox des Blocks Level-2 M-File S-Function und das Simulationsergebnis im Block Scope f r eine Zeitkonstante T = 0.5 s. u Auf der beliegenden CD-ROM (Verzeichnis simulink systeme) sind die Quellcodes aller im Beispiel pt1fun.mdl verwendeten S-Funktionen abgelegt. Die C MEX S-Funktion pt1sfun c.c3) muss vor Simulationsstart mit dem Aufruf
3) In der Unterbibliothek C-File S-Functions/Continuous der S-Function Examples benden sich 2 a hnliche, zwar viel komplexere, aber sehr hilfreiche Beispiele zur Realisierung von Zustandssystemen als C MEX S-Funktion: Continuous time system (sfuncdemo csfunc.mdl, bzw. csfunc.c) und State space with parameters (sfuncdemo stspace.mdl, bzw. stspace.c).

374

9 Lineare und nichtlineare Systeme in Simulink

pt1sfun _m2 Step Level M 2 file S Function pt1sfun _c S Function u0 Scope1 y0 Scope2 Scope

pt1sfun _csfb S Function Builder

pt1sfun _m S Function1 Scope3

Abb. 9.19: Beispieldatei pt1fun.mdl (links), Block Parameters Dialogbox des Blocks Level-2 M-File S-Function (rechts oben) und Ergebnis des Blocks Scope (rechts unten)

mex pt1sfun_c.c

in eine ausf hrbare Form (pt1sfun c.mexw32 unter Windows)4) ubersetzt werden. u Das Ubersetzen der S-Funktion pt1sfun csfb wird im S-Function Builder uber den Button Build (rechts oben) angestoen. Es entstehen die Dateien pt1sfun csfb.c (Standard-Code), pt1sfun csfb wrapper.c (Benutzer-Code) und (unter Windows) pt1sfun csfb.mexw32. Im Folgenden soll der Quellcode der Level-2 M-File S-Funktion pt1sfun m2.m vorgestellt und kurz besprochen werden:
% Quellcode der Level-2 M-File S-Funktion pt1sfun_m2.m, % fr das Matlab-Release R2008b (Matlab 7.7, Simulink 7.2) u function pt1sfun_m2(block) % PT1SFUN_M2 modelliert das Verhalten eines PT1-Gliedes. Die Zeit% konstante T wird als Parameter bergeben u setup(block); %endfunction
4) Wurde das File bereits in einer Matlab-Version vor der aktuellen Version 7.7 ubersetzt, bendet sich im aktuellen Verzeichnis die alte Form pt1sfun c.dll. Diese wird bei Aufruf von mex pt1sfun c.c umbenannt in pt1sfun c.dll.old und danach die neue Form pt1sfun c.mexw32 gespeichert. Man erhlt a eine ausfhrliche Info-Meldung im Command-Window. Dies gilt auch fr den S-Function Builder. u u

9.7 S-Funktionen
function setup(block) %%%% Beginn Block-Info %%%% % Eigenschaften (Anzahl I/Os, Dimension, Datentyp, Komplexitt, a % Direct Feedthrough Y/N etc.) sollen dynamisch bezogen werden block.SetPreCompInpPortInfoToDynamic; block.SetPreCompOutPortInfoToDynamic; % Anzahl der kontinuierlichen Zustandsgren (kann nicht dynamisch o % bezogen werden) block.NumContStates = 1; % Anzahl der bergebenen Parameter u block.NumDialogPrms = 1; % Nur T wird bergeben u block.DialogPrmsTunable = {Nontunable}; % T soll whrend der Simulation a % nicht verstellbar sein % Abtastzeit und Offset werden zu Null gesetzt, da System % zeitkontinuierlich gerechnet wird (knnte auch dynamisch bezogen werden) o block.SampleTimes = [0 0]; %%%% Ende Block-Info %%%% % Bentigte Routinen in dieser S-Funktion o block.RegBlockMethod(CheckParameters, @CheckPrms); block.RegBlockMethod(PostPropagationSetup, @DoPostPropSetup); block.RegBlockMethod(InitializeConditions, @InitializeConditions); block.RegBlockMethod(Outputs, @Outputs); block.RegBlockMethod(Derivatives, @Derivatives); %endfunction % berprfe ubergebenen Parameter U u function CheckPrms(block) if block.DialogPrm(1).Data <= 0 error(Die Zeitkonstante T muss grer Null gewhlt werden); o a end %endfunction % Definiere den Data Type Work Vector DWork als "globale" (d.h. von % allen Funktionen)lesbare Variable; DWork dient als Speicher fr die u % System-Matrizen. function DoPostPropSetup(block) block.NumDworks = 1; block.Dwork(1).Name block.Dwork(1).Dimensions block.Dwork(1).DatatypeID block.Dwork(1).Complexity %endfunction = = = = Systemmmatrizen;% muss angegeben werden 4; % A,B,C,D 0; % double Real; % reell

375

376

9 Lineare und nichtlineare Systeme in Simulink

% Definiere System-Matrizen als Elemente von DWork % und setze Anfangswert der Zustandsgre o function InitializeConditions(block) % Zustandsmatrix A (hier skalar) block.Dwork(1).Data(1) = [-1/block.DialogPrm(1).Data]; % Eingangsmatrix B (hier skalar) block.Dwork(1).Data(2) = [ 1/block.DialogPrm(1).Data]; % Ausgangsmatrix C (hier skalar) block.Dwork(1).Data(3) = [ 1 ]; % Durchschaltmatrix D (hier skalar und gleich Null, da sich beim PT1 % der Eingang nicht direkt auf den Ausgang auswirkt) block.Dwork(1).Data(4) = [ 0 ]; block.ContStates.Data(1) = zeros(size(block.Dwork(1).Data(1),1),1); %endfunction % Berechne Systemausgang zu y = C*x+D*u function Outputs(block) x = block.ContStates.Data(1); u = block.InputPort(1).Data; C = block.Dwork(1).Data(3); % Ausgangsmatrix C D = block.Dwork(1).Data(4); % Durchschaltmatrix D block.OutputPort(1).Data = C*x + D*u; %endfunction % Berechne Zustandsableitung zu x = A*x+B*u function Derivatives(block) x u A B = = = = block.ContStates.Data(1); block.InputPort(1).Data; block.Dwork(1).Data(1); % Zustandsmatrix A block.Dwork(1).Data(2); % Eingangsmatrix B

block.Derivatives.Data(1) = A*x + B*u; %endfunction

Zunchst m ssen im Teil Block-Info die grundlegenden Eigenschaften wie Anzahl a u und Breite der Ein- und Ausgnge, Anzahl der Zustandsgren und der Paramea o ter der S-Funktion gesetzt werden. Was die Eigenschaften der Ein- und Ausgnge a angeht wurde mit dem Aufruf von block.SetPreCompInpPortInfoToDynamic bzw. block.SetPreCompOutPortInfoToDynamic5) von der Mglichkeit Gebrauch gemacht, o
5) Das Setzen der grundlegenden Eigenschaften in mdlInitializeSizes. In dieser Funktion knnen nicht nur o sondern auch die Anzahl der Zustandsgren dynamisch o Unterschied zu einer C MEX S-Funktion mssen in einer u manuell gesetzt werden.

setup entspricht in C der Funktion die Eigenschaften der Ein- und Ausgnge, a bezogen werden (DYNAMICALLY SIZED). Im Level-2 M-File S-Funktion letztere jedoch

9.8 Ubungsaufgaben

377

diese von Simulink automatisch (d.h. abhngig von anderen in der S-Funktion angea gebenen Informationen sowie von dem die S-Funktion speisenden Block) bestimmen zu lassen. Diese Informationen bentigt Simulink, um die Kompatibilitt (bez glich o a u Signalbreite, -datentyp usw.) des Level-2 M-File S-Function-Blocks mit den anderen Blcken des Modells sicherzustellen. Anschlieend werden die im Weiteren verwendeten o u Routinen6) aufgerufen: CheckPrms zur Uberpr fung des ubergebenen Parameters T , DoPostPropSetup in der der Data Type Work Vector 7) DWork deniert wird (zur Speicherung der System-Matrizen) und InitializeConditions zur Belegung von DWork mit Daten und Initialisierung der Zustandsgre. Outputs und Derivatives entsprechen o den Routinen mdlOutputs und mdlDerivatives bei C MEX S-Funktionen (Abb. 9.18). Einen Uberblick uber alle setzbaren Blockeigenschaften bzw. alle Routinen erhlt man a bei Durchsicht des Templates msfuntmpl.m.

9.8
9.8.1

Ubungsaufgaben
Modellierung einer Gleichstrom-Nebenschluss-Maschine (GNM)

Modellieren Sie den Ankerkreis und die mechanische Trgheit einer Gleichstroma Nebenschluss-Maschine in Simulink! Als Eingangsgren sind die Ankerspannung UA o sowie das Widerstandsmoment MW zu verwenden. Folgende Gleichungen und Daten sind gegeben: Ankerstrom: Gegenspannung: Drehzahl: Inneres Drehmoment: IA = EA = N = 1 (UA EA RA IA ) dt LA CE N 1 (MMi MW ) dt 2J CM IA CE 2

MMi = CM =

6) callback methods, die Suche nach Level-2 M-File Method in der Online-Hilfe liefert eine Liste aller verfgbaren Routinen. u 7) Informationen zu Sinn und Zweck von Work Vectors liefert die Suche nach work vectors in der Online-Hilfe. Unter Using DWork Vectors in Level-2 M-File S-Functions ndet man Hilfe zu Verwendung von DWork vectors in Level-2 M-File S-Funktionen.

378 Ankerwiderstand: Ankerinduktivitt: a Fluss: Motorkonstante: Trgheitsmoment: a RA = LA = =

9 Lineare und nichtlineare Systeme in Simulink 250 m 4 mH 0.04 Vs

CE = 240.02 J = 0.012 kg m2

Fassen Sie die Parameter der Gleichstrom-Nebenschluss-Maschine in einem MatlabSkript zusammen und initialisieren Sie damit Ihr Simulink-Modell (Callback-Routinen verwenden). Testen Sie das Modell, indem Sie einen Sprung der Ankerspannung von 0 auf 50 V ohne Widerstandsmoment MW = 0 simulieren. Schreiben Sie ein weiteres Matlab-Skript, das Ihnen automatisch im Anschluss an die Simulation die in Abb. 9.20 dargestellten Verlufe erzeugt. a
Ankerspannung U [V] A 50 200 150 100 50 0 0 0.1 Zeit [s] 0.2 50 0 0.1 Zeit [s] 0.2 0 0 0.1 Zeit [s] 0.2 0 200 400 Ankerstrom I [A] A 600 Drehzahl N [U/min]

Abb. 9.20: Simulationsergebnis der Gleichstrom-Nebenschluss-Maschine bei Sprung der Ankerspannung UA : GNM lsg.mdl

9.8.2

Modellierung einer Pulsweitenmodulation (PWM)

Um eine variable Ankerspannung mit hohem Wirkungsgrad zu erzeugen, soll die Zwischenkreisspannung eines Stromrichters mittels einer Pulsweitenmodulation (PWM) getaktet werden. Durch das Tastverhltnis (= relative Einschaltdauer) wird so die mittlere a wirksame Ankerspannung eingestellt. Erweitern Sie das obige Modell der Gleichstrom-Nebenschluss-Maschine um eine Dreipunkt-PWM als Stellglied f r die Ankerspannung UA ! Folgende Daten der PWM u sind gegeben: Zwischenkreisspannung: Umax = 200 V Pulsfrequenz: FP WM = 5 kHz

Hinweis: Vergleichen Sie dazu den Sollwert der Ankerspannung mit einem positiven Dreiecksignal; schalten Sie entsprechend die Zwischenkreisspannung Umax bzw. die Spannung null auf den Ausgang der PWM (= UA ) durch. Verfahren Sie entsprechend mit negativen Sollwerten (siehe auch Beispiel in Abb. 9.21).

9.8 Ubungsaufgaben
PWMSpannung [V] 200 100 0 100 200 0 0.2 0.4 0.6 0.8 1 Zeit [ms] 1.2 1.4 1.6 1.8

379

Sollwert (Eingang) Istwert (Ausgang)

Abb. 9.21: Verhalten der Dreipunkt-PWM bei variabler Sollspannung: Es sind die positive und negative Dreiecksspannung sowie die getaktete Ausgangsspannung gezeigt. Datei PWM.mdl

Testen Sie das Modell, indem Sie einen Sprung der Ankerspannung (Mittelwert) von 0 auf 50 V simulieren (siehe Abb. 9.22).
Ankerspannung U [V] A 50 200 150 100 50 0 0.048 0.05 Zeit [s] 50 0 0.1 Zeit [s] 0.2 0 0 0.1 Zeit [s] 0.2 Ist Soll 0 200 Ankerstrom I [A] A 600 400 Drehzahl N [U/min]

Abb. 9.22: Simulationsergebnis der Gleichstrom-Nebenschluss-Maschine mit PWM bei Sprung der Ankerspannung UA : GNM lsg.mdl

9.8.3

Aufnahme von Bode-Diagrammen

Berechnen Sie die Zustandsdarstellung des Ankerkreises der GNM in Matlab mit dem Befehl linmod (R ckgabe als Structure) oder einem der Blcke Time-Basedu o oder Trigger-Based Linearization. Whlen Sie als Eingangsgren die Ankerspannung UA und das Widerstandsmoa o o ment MW , als Ausgangsgre die Drehzahl N (GNM bode lsg.mdl). Stellen Sie nun den Amplituden- und Phasenverlauf der beiden UbertragungsN (s) N (s) funktionen und als Bode-Diagramme in zwei Matlab-Figures UA (s) MW (s) uber das Frequenzintervall [1 10000] rad/s dar wie in Abb. 9.23 und 9.24 gezeigt (GNMbode.mdl). Verwenden Sie dazu den Matlab-Befehl bode. Wie knnen die o untere und obere Grenze des gew nschten Frequenzintervalls im bode-Befehl mit u ubergeben werden?

380

9 Lineare und nichtlineare Systeme in Simulink

Abb. 9.23: Bode-Diagramm der Ubertragungsfunktion N (s)/UA (s)

Abb. 9.24: Bode-Diagramm der Ubertragungsfunktion N (s)/MW (s)

10

Abtastsysteme in Simulink

Sobald ein System z.B. durch Hardware-Beschrnkungen nicht mehr als unendlich a schnell abgetastet betrachtet werden kann, muss von der zeitkontinuierlichen Darstellung im Laplace-(s-) oder Zeit-Bereich auf die zeitdiskrete Darstellung im z- oder ebenfalls wieder im Zeit-Bereich ubergegangen werden. Simulink unterst tzt den Entwurf u zeitdiskreter, d.h. abgetasteter Systeme mit der Bibliothek Discrete und einem eigenen Werkzeug, dem Model Discretizer, der in Kap. 10.4 vorgestellt wird.

10.1
Abtastzeit

Allgemeines

Bei zeitdiskreten Systemen muss f r jeden Block die zugehrige Abtastzeit Ts in Seu o kunden angegeben werden. Alle zeitdiskreten Blcke sind intern an ihrem Eingang mit o einem Abtaster und an ihrem Ausgang mit einem Halteglied 0. Ordnung ausgestattet, d.h. der Eingang wird zu allen Zeitpunkten t = k Ts abgetastet; der Ausgang bleibt zwischen zwei Abtastvorgngen konstant. Auf diese Weise knnen Blcke mit a o o unterschiedlichen Abtastzeiten kombiniert sowie kontinuierliche und zeitdiskrete Blcke o gemischt werden (Ausnahmen bei fester Simulations-Schrittweite siehe Kap. 10.3.2). Blcke, deren Ausgangssignal sich whrend der Simulationsdauer nicht ndert, haben o a a eine konstante Abtastzeit. Diese kann geerbt sein (siehe unten) oder durch Wahl des Parameters sample time in der Block Parameters Dialogbox zu inf eingestellt werden. Simulink weist Blcken, deren Parameter als nicht-verstellbar deklariert wurden (siehe o S. 313) ebenfalls eine konstante Abtastzeit zu. Bei der Vorgabe der Abtastzeit gibt es folgende Besonderheiten zu beachten: Oset: Wird f r die Abtastzeit (Parameter sample time) ein Vektor der Lnge 2 u a fset], wird die erste Zahl als Abtastzeit interpretiert und die zweite angegeben, z.B. [Ts of als Oset, d.h. die Abtastung ndet zu den Zeitpunkten t = k Ts + of fset statt. Vererbung: Abtastzeiten (und Osets) knnen an nachfolgende und speisende Blcke o o vererbt werden, indem dort als Abtastzeit der Wert 1 angegeben wird. Grasche Darstellung Zum Plotten zeitdiskreter Verlufe eignet sich der Befehl a
stairs(x, y [, plotstil ])

der analog zu plot verwendet werden kann, aber eine stufenfrmige Ausgabe erzeugt. o

382

10 Abtastsysteme in Simulink

Handelt es sich um reine Datensequenzen, so sollte der Befehl


stem(x, y [, plotstil ])

verwendet werden. Es wird jeder Abtastwert yi zu seinem zugehrigen Zeitpunkt xi o einzeln als vertikaler Strich abgeschlossen mit einem ungef llten (oder gef llten: plotstil u u = filled) Kreis dargestellt. Farbliche Markierung / Sample Time Legend Der Men punkt Format / Sample Time Display / Colors in der Men leiste des Simulinku u Modells ermglicht eine farbliche Unterscheidung von Blcken in einem Simulinko o Modell, das zeitdiskrete Blcke enthlt. Unterschiedliche Abtastzeiten, zeitkontinuierlio a che Blcke, sowie Subsysteme knnen somit schnell voneinander unterschieden werden. o o Zuordnung: schwarz = zeitkontinuierliche Blcke, gelb = Subsysteme und Blcke, die o o Signale mit unterschiedlichen Abtastzeiten zusammenfassen (z.B. Mux, Demux), rot = Blcke mit der k rzesten Abtastzeit, gr n = Blcke mit der zweitk rzesten Abtastzeit o u u o u etc. Wenn der Men punkt Format / Sample Time Display / Colors aktiviert ist, kann mit u View / Sample Time Legend oder mit Ctrl+J eine Legende der Abtastzeiten in einem eigenen Fenster dargestellt werden. Damit erhlt man eine ubersichtliche Darstellung a aller verwendeten Abtastzeiten, ihrer Werte und ihrer zugeordneten Farbe. Bei mehreren geneten Simulink-Modellen wird im Sample Time Legend -Fenster f r jedes Moo u dell eine eigene Registerkarte hinzugef gt. Wichtig: beim jeweils ersten Onen eines u Simulink-Modells muss der Men punkt Edit / Update Diagram gewhlt werden, bevor u a die Sample Time Legend angezeigt werden kann.

10.2

Simulink-Bibliothek: Discrete Zeitdiskrete Systeme

F r die Modellierung und Simulation zeitdiskreter dynamischer Systeme steht die speu zielle Bibliothek Discrete zur Verf gung. Die in den Simulink-Grundlagen (Kap. 8) beu schriebenen Blcke f r Signalerzeugung (Sources), -ausgabe (Sinks), mathematische Vero u kn pfungen (Math Operations) sowie zur graschen Organisation (Signal Routing, Signal u Attributes) sind wie gewohnt zu verwenden, die Abtastzeit wird hier in das (soweit vorhandene) Parameterfeld Sample time eingetragen. Auch eine Vererbung der Abtastzeit (Sample time = 1) von speisenden oder nachfolgenden zeitdiskreten Blcken ist o mglich (auer bei Sources-Blcken). o o Im Folgenden werden die wichtigsten Discrete-Blcke vorgestellt. o Discrete Filter Der Block Discrete Filter stellt eine Filter-Ubertragungsfunktion (IIR oder 1 FIR) nach Gleichung (6.10) 1
1+0.5z Discrete Filter

H(z 1 ) =

B(z 1 ) b1 + b2 z 1 + b3 z 2 + . . . + bm+1 z m = A(z 1 ) a1 + a2 z 1 + a3 z 2 + . . . + an+1 z n

10.2 Bibliothek: Discrete Zeitdiskrete Systeme

383

dar (wobei n m gelten muss). Die Koezienten werden absteigenden z-Potenzen o beginnend mit z 0 zugeordnet. Im Textfeld Numerator coecient knnen die Koezienten des Zhlerpolynoms auch in Form einer Matrix eingetragen werden, die Breite des a Ausgangssignals entspricht dann der Anzahl der Zeilen dieser Matrix. Mit diesem Block lassen sich vorteilhaft digitale Filter (Kap. 6.4.2) implementieren. Discrete State-Space
y(n)=Cx(n)+Du(n) x(n+1)=Ax(n)+Bu(n) Discrete State Space

Der Block Discrete State-Space stellt ein zeitdiskretes System in Zustandsform dar. Er entspricht dem Block State-Space bei kontinuierlichen Systemen.

Discrete Transfer Function


1 z+0.5 Discrete Transfer Fcn

Der Block Discrete Transfer Function ist hnlich wie das Discrete Filter a aufgebaut. Er stellt die folgende Ubertragungsfunktion dar: H(z) = b1 z m + b2 z m1 + b3 z m2 + . . . + bm+1 B(z) = A(z) a1 z n + a2 z n1 + a3 z n2 + . . . + an+1 (10.1)

Die Koezienten werden ebenfalls absteigenden z-Potenzen zugeordnet; diese beginnen aber mit z m bzw. z n (n m ). Werden die Vektoren der Zhler- und Nennerkoeziena ten eines Discrete Transfer Function-Blocks auf dieselbe Lnge gebracht, indem an den a k rzeren Nullen angef gt werden, verhlt sich dieser Block wie ein Discrete Filter-Block. u u a Im Textfeld Numerator coecient knnen die Koezienten des Zhlerpolynoms auch in o a Form einer Matrix eingetragen werden, die Breite des Ausgangssignals entspricht dann der Anzahl der Zeilen dieser Matrix. Discrete Zero-Pole Im Block Discrete Zero-Pole knnen anstelle der Koezienten die Pole o und Nullstellen einer Ubertragungsfunktion nach Gleichung (10.1) sowie z(z0.5) ein Verstrkungsfaktor vorgegeben werden. Voraussetzung daf r ist die a u Discrete Faktorisierbarkeit der Ubertragungsfunktion. Im Textfeld Zeros knnen o ZeroPole die Koezienten der Nullstellen auch in Form einer Matrix eingetragen werden, die Breite des Ausgangssignals entspricht dann der Anzahl der Zeilen dieser Matrix.
(z1)

Discrete-Time Integrator
K Ts z1 DiscreteTime Integrator

Der Discrete-Time Integrator-Block entspricht im Wesentlichen dem kontia nuierlichen Integrator. Neben der Abtastzeit (Ts ) und einem Verstrkungsfaktor (Gain value) kann in jedem Block der Integrationsalgorithmus (Integrator method ) gewhlt werden (y: Integratorausgang, u: Integratoreina gang, n: aktueller Abtastzeitpunkt, K: Verstrkungsfaktor): a

384 Integration: ForwardEuler (Euler explizit): y(n) = y(n1) + K Ts u(n1) bzw.

10 Abtastsysteme in Simulink

y(z) 1 = K Ts u(z) z1

Integration: BackwardEuler (Euler implizit): y(n) = y(n1) + K Ts u(n) bzw. y(z) z = K Ts u(z) z1

Integration: Trapezoidal (Trapezformel nach Heun): y(n) = y(n1) + KTs/2 u(n) + u(n1) bzw. y(z) z+1 = KTs/2 u(z) z1

Wird die Integrator method zu Accumulation gewhlt, so wird unabhngig vom Wert der a a Sample time und des Gain value bei der Berechnung von y(n) die Abtastzeit Ts = 1 sec. und der Verstrkungsfaktor K = 1 gewhlt. a a Memory Der Memory-Block gibt an seinem Ausgang das Eingangssignal zum vorangegangenen Integrationsschritt aus. Intern stellt der Memory-Block also ein Halteglied 0. Ordnung dar, wobei das Signal jeweils uber eine Schrittwei te gehalten wird. Bei Simulation mit den Integrationsalgorithmen ode15s und ode113 (beides Mehrschrittverfahren) sollte der Memory-Block nicht verwendet werden.

Memory

Unit Delay
1 z Unit Delay

Der Unit Delay-Block tastet das Eingangssignal ab und verzgert es um o einen Abtastschritt. Dieser Block stellt damit das Grundelement zeitdiskreter Systeme dar.

Zero-Order Hold Der Zero-Order Hold-Block tastet das Eingangssignal ab und hlt es bis a zum nchsten Abtastzeitpunkt konstant. Er ndet bei abgetasteten Sysa temen dann Verwendung, wenn ansonsten keiner der oben beschriebenen zeitdiskreten Blcke eingesetzt wird (die alle ein Halteglied 0. Ordnung o mit einschlieen).

ZeroOrder Hold

Der ebenfalls verf gbare Block First Order Hold ist aufgrund seines Prdiktionsverhalu a tens f r die meisten Anwendungen nicht geeignet. u

10.3 Simulationsparameter

385

10.3

Simulationsparameter

Bei der Wahl des Solvers f r eine zeitdiskrete Simulation muss beachtet werden, ob u es sich um ein rein zeitdiskretes oder ein hybrides (gemischt zeitdiskretes und zeitkontinuierliches) System handelt. Dar ber hinaus muss darauf geachtet werden, ob die u zeitdiskreten Blcke gleiche oder unterschiedliche Abtastzeiten haben. o Folgende Aufstellung soll die Wahl des Solvers erleichtern.

10.3.1

Rein zeitdiskrete Systeme

Zeitdiskrete Blcke haben gleiche Abtastzeiten o Simulation mit fester Schrittweite: Es sind sowohl der Discrete (no continuous states)Solver als auch andere Fixed-step-Solver verwendbar. Die Wahl von auto bei Fixed step size resultiert in einer der Abtastzeit entsprechenden Integrationsschrittweite. Bei Simulation mit kleinerer Schrittweite muss die Fixed step size so gewhlt werden, dass a sich die Abtastzeit der Blcke als ein ganzzahliges Vielfaches der Fixed step size ergibt. o Beispiel: Bei einer Sample time = 0.7 kann als Fixed step size 0.1, 0.05 etc. gewhlt a werden. Bei Nichtbeachtung erhlt man eine entsprechende Fehlermeldung. a Simulation mit variabler Schrittweite: Es sind sowohl der Discrete (no continuous states)-Solver als auch andere Variable-step-Solver verwendbar. Die Wahl von auto bei Max step size resultiert in einer festen(!), der Abtastzeit entsprechenden Integrationsschrittweite. Bei Werten grer oder kleiner der Abtastzeit f r Max step size wird die o u Schrittweite automatisch auf die Abtastzeit gesetzt. Zeitdiskrete Blcke haben gemischte Abtastzeiten o Simulation mit fester Schrittweite: Bei Wahl eines Fixed-step-Solvers m ssen alle Abu tastzeiten in dem durch die Simulations-Schrittweite vorgegebenen Raster liegen; dies gilt auch f r Abtastzeiten, die durch einen Oset verschoben sind. Es sind sowohl der u Discrete (no continuous states)-Solver als auch andere Fixed-step-Solver verwendbar. Bei Wahl von auto bei Fixed step size ergibt sich f r die Integrationsschrittweite ein u Wert, der dem grten gemeinsamen Teiler der unterschiedlichen Abtastzeiten ento spricht (fundamental sample time). Beispiel: Ein Modell mit den Abtastzeiten 0.75 und 0.5 w rde bei obiger Einstellung mit einer Schrittweite von 0.25 simuliert. Dies muss u auch bei einer manuellen Wahl der Fixed step size ber cksichtigt werden. u Allgemein muss bei Simulation mit fester Schrittweite auf die Ubergnge zwischen a Blcken mit unterschiedlichen Abtastzeiten geachtet werden: o Wird im Feld Tasking mode for periodic sample times (nur sichtbar bei fester Schrittwei te) die Einstellung SingleTasking gewhlt, werden die Ubergnge zwischen verschiedea a nen Abtastzeiten von Simulink ignoriert und brauchen nicht speziell behandelt zu werden. Bei SingleTasking werden zu jedem Abtastschritt alle Blcke unabhngig von ihrer o a Abtastzeit einfach nacheinander berechnet. Die Einstellung MultiTasking dagegen legt strengere Mastbe an, wie sie bei der Simulation einer Multitasking-Umgebung (z.B. a Mikroprozessor) notwendig sind. In einer solchen Umgebung knnen sich periodische o

386

10 Abtastsysteme in Simulink

Tasks (in Simulink werden diese durch Blcke mit fester Abtastzeit modelliert) abhngig o a von ihrer Prioritt gegenseitig unterbrechen (i.A. haben die Tasks mit den k rzesten a u Abtastzeiten die hchste Prioritt). Dies kann bei unsachgemer Verknpfung von o a a u Tasks unterschiedlicher Prioritt zu Datenverlusten und unvorhersehbaren Ergebnissen a f hren. Simulink erzeugt in diesem Fall entsprechende Fehlermeldungen. Werden in eiu nem Simulink-Modell ausschlielich periodische Tasks, d.h. Blcke mit fester Abtastzeit o verwendet, so kann der Benutzer die Handhabung der Ubergnge zwischen unterschieda lichen Abtastzeiten automatisch von Simulink durchf hren lassen. Dazu muss die Check u Box Automatically handle data transfers between tasks aktiviert werden. Sollen in einem Simulink-Modell unter Multitasking-Bedingungen jedoch auch asynchrone Ereignisse simuliert werden (z.B. modelliert durch bedingt ausgef hrte Subsysteme u wie Enabled Subsystem, Triggered Subsystem oder Function-Call Subsystem, siehe S. 329), so knnen die Ubergnge zwischen diesen und anderen periodischen oder asynchronen o a Tasks von Simulink nicht mehr automatisch gehandhabt werden. Hier ist es notwendig einen Rate Transition-Block (aus Signal Attributes, S. 327) zur fehlerfreien Daten beru tragung einzuf gen. u Wird der Parameter Tasking mode for periodic sample times auf Auto gestellt, whlt a Simulink SingleTasking, wenn im Modell alle Blcke die gleiche Abtastzeit haben, und o MultiTasking, wenn unterschiedliche Abtastzeiten auftreten. Simulation mit variabler Schrittweite: Es sind sowohl der Discrete (no continuous states)-Solver als auch andere Variable-step-Solver verwendbar. Bei diesen Solvern wird die Integrationsschrittweite unabhngig, ob f r Max step size auto oder ein anderer a u Wert gewhlt wurde so eingestellt, dass alle Blcke zu ihren individuellen Abtastzeita o punkten berechnet werden.

10.3.2

Hybride Systeme (gemischt zeitdiskret und zeitkontinuierlich)

Hybride Systeme enthalten sowohl zeitdiskrete als auch kontinuierliche Elemente. Auch bei dieser Art von Systemen knnen innerhalb eines Systems mehrere unterschiedliche o Abtastzeiten auftreten, z.B. wenn periodische Tasks oder asynchrone Ereignisse in einer Multitasking-Umgebung modelliert werden sollen. In diesem Fall sind die Hinweise f r u rein zeitdiskrete Systeme mit unterschiedlichen Abtastzeiten zu beachten (Kap. 10.3.1, S. 385). Die Solver Discrete (no continuous states) f r feste und variable Schrittweite sind nicht u mehr verwendbar, da das System ja nun sowohl zeitdiskrete als auch zeitkontinuierliche Zustandsgren hat. Die Solver ode23 und ode45 (Runge-Kutta-Verfahren variabler o Ordnung) sind empfehlenswert. Aufgrund der unstetigen Signalverlufe, die durch das a Halten der Signale am Ausgang der zeitdiskreten Blcke entstehen, sollten die Solver o ode15s und ode113 nicht verwendet werden. zeitdiskrete Blcke haben gleiche Abtastzeiten o Simulation mit fester Schrittweite: Die Wahl von auto bei Fixed step size resultiert in einer der Abtastzeit entsprechenden Integrationsschrittweite. Ansonsten muss die Fixed

10.3 Simulationsparameter

387

step size so gewhlt werden, dass sich die Abtastzeit der Blcke als ein ganzzahliges a o Vielfaches der Fixed step size ergibt. Bei Nichtbeachtung erhlt man eine entsprechende a Fehlermeldung. o u Simulation mit variabler Schrittweite: Bei Werten grer der Abtastzeit f r Max step size wird die maximale Schrittweite automatisch auf die Abtastzeit gesetzt. zeitdiskrete Blcke haben gemischte Abtastzeiten o Simulation mit fester Schrittweite: Es gelten die Aussagen zur Simulation von rein zeitdiskreten Systemen mit unterschiedlichen Abtastzeiten aus Kap. 10.3.1, S. 385, mit Ausnahme, dass der Solver Discrete (no continuous states) nat rlich nicht weiter veru wendet werden kann. o u Simulation mit variabler Schrittweite: Bei Werten grer der Abtastzeit f r Max step size wird die maximale Schrittweite automatisch auf die Abtastzeit gesetzt. Beispiel
Sample time =0sec.

Step 1 s 2 +0.5s+1 Transfer Fcn Sine Wave


Sample time =0sec.

Anregung kontinuierlich abgetastet Zero Order Hold 0.1129z+0.1038 z2 1.562z+0.7788 Discrete Transfer Fcn
Sample time =0.5sec. Sample time =0.5sec.

Scope

pt2_diskret _zoh

0.05263 z2 +0.1053 z+0.05263 z2 1.579z+0.7895 Discrete Transfer Fcn 1


Sample time =0.5sec.

pt2_diskret _tustin

Abb. 10.1: Simulink-Modell bsp hybrid.mdl: Zeitkontinuierliches System (oben) und zeitdiskretisierte Systeme mit Abtastzeit 0.5 s (unten)

Abb. 10.1 zeigt oben ein kontinuierliches System mit und ohne Abtastung sowie unten die mit der Zero-Order Hold ZOH (Sprunginvarianzmethode) und der TustinApproximation (Trapezmethode) ins Zeitdiskrete ubertragenen Systeme. Diese wurden mit den folgenden aus der Control System Toolbox, Kap. 5.2.9, bekannten Befehlen erzeugt:
pt2 = tf([1], [1 0.5 1]); % Erzeugt kontinuierliches PT2 pt2_diskret_zoh = c2d(pt2, 0.5, zoh) % Diskretisieren mit ZOH, Ts=0.5s pt2_diskret_tustin = c2d(pt2, 0.5, tustin) % Diskretisieren mit tustin, Ts=0.5s

Soll das Abtastsystem aus einem bestehenden (zeitkontinuierlichen, zeitdiskreten oder hybriden) Simulink-Modell erstellt werden, ist dies analog zu Kap. 9.2.1 mit den Befehlen

388

10 Abtastsysteme in Simulink

sysd lin = dlinmod(sys , T s, x, u, para)

und
sysd lin = dlinmodv5(sys , T s, x, u, para, xpert, upert)

mglich, deren Syntax den Befehlen linmod und linmodv5 entspricht. Der zustzliche o a Parameter Ts ist die Abtastzeit. Zur Diskretisierung zeitkontinuierlicher Modellteile wird grundstzlich die Diskretisierungsmethode Zero-Order Hold ZOH verwendet. a Die Ubertragungsfunktion des im Discrete Transfer Fcn-Block abgelegten Abtastsystems (pt2 diskret zoh) kann daher alternativ mit den folgenden Befehlen erzeugt werden, wenn der Block Transfer Fcn in Abb. 10.1 zwischen Inport- und Outport-Blcke geo setzt (nicht in der Abbildung gezeigt) und das Simulink-Modell unter dem Namen bsp hyb.mdl gespeichert wird.
[A, B, C, D] pt2_diskret_zoh = dlinmod(bsp_hyb, 0.5); = tf(ss(A, B, C, D, 0.5))

F r eine ausf hrliche Beschreibung der Analyse eines linearisierten Simulink-Modells u u mit Matlab und der Control System Toolbox sei auf Kap. 11.2.2 verwiesen. Die Ergebnisse der Simulation sind aus Abb. 10.2 zu ersehen. F r Sprunganregung u (Abb. 10.2 links) liegen die Signale abgetastet und pt2 diskret zoh ubereinander, da hier die Anregung zwischen den Abtastschritten konstant bleibt. F r Speisung mit u einem Sinus-Signal (Abb. 10.2 rechts) stimmen die Signale abgetastet und pt2 diskret zoh nicht lnger uberein. Hier verndert sich die Anregung (kontinuierliches Sinus-Signal) a a zwischen den Abtastschritten. Damit ist die Voraussetzung Sprunginvarianz f r die u Diskretisierung mit Zero-Order Hold ZOH nicht mehr gegeben. Wird in Abb. 10.1 ein Zero-Order Hold-Block direkt nach dem Schalter (noch vor der Verzweigung) eingefgt, u so ist die Sprunginvarianz der Anregung wieder gegeben und die Signale abgetastet und pt2 diskret zoh stimmen wieder uberein.
1.5

1
1

0
0.5 Anregung kontinuierlich abgetastet = pt2_diskret_zoh pt2_diskret_tustin 0 0 2 4 6 Zeit [sec.] 8 10

Anregung kontinuierlich abgetastet pt2_diskret_zoh pt2_diskret_tustin 2 4 6 Zeit [sec.] 8 10

2 0

Abb. 10.2: Simulationsergebnisse von bsp hybrid.mdl

10.4 Der Model Discretizer

389

10.4

Der Model Discretizer

Der Model Discretizer erlaubt eine Zeitdiskretisierung beliebig vieler zeitkontinuierlicher Blcke ohne den im Beispiel bsp hybrid.mdl gemachten Umweg uber Matlab. o Voraussetzung (und Nachteil) f r seine Benutzung ist allerdings eine installierte Conu trol System Toolbox, wobei deren Version auch lter sein kann (Version 5.2 aufwrts, a a aktuelle Version der Control System Toolbox ist 8.2). Die grasche Bedienoberche des Model Discretizers wird uber den Men punkt a u Tools/Control Design/Model Discretizer genet. F r Anwender, die ihr Simulinko u Modell zwar zeitdiskret berechnen lassen wollen, jedoch den bekannten (und geliebten) s-Bereich nicht verlassen wollen, besteht die Mglichkeit, die diskretisierten Blcke mit o o einer Maske versehen zu lassen, in die die Parameter wie bisher im s-Bereich eingegeben werden knnen. Der Model Discretizer bringt f r diesen Anwendungsfall eine spezielle o u Block-Bibliothek Library: discretizing mit, die mit dem Befehl
discretizing

vom Command Window aus aufgerufen werden kann (Abb. 10.3). Sie enthlt eine Ausa wahl der angesprochenen zeitdiskreten Blcke mit zeitkontinuierlicher Maske. o

Abb. 10.3: Fenster der Bausteinbibliothek des Model Discretizers

Abbildung 10.4 zeigt die Beispieldatei bsp hybrid md.mdl, in der die Blcke Transfer o Fcn1 und Transfer Fcn2 (Kopien von Transfer Fcn) mit dem Model Discretizer diskretisiert wurden. F r beide wurde die Transform method zu Zero-order hold und die Sample u die Distime zu 0.5 gewhlt und durch einen Links-Klick auf die Schaltche a a kretisierung gestartet. Bei Transfer Fcn1 wurde zustzlich die Option Replace current a selection with zu Discrete blocks (Enter parameters in z-domain) ausgewhlt, durch die a der Block die in Abb. 10.4 unten links gezeigte neue Block Parameters Dialogbox erhielt. Wie zu erkennen ist, stimmen die berechneten Parameter bzw. deren gerundete Werte mit den im Block-Icon der Discrete Transfer Fcn angezeigten (f r bsp hybrid.mdl in u Matlab berechneten) Parametern uberein. Bei Transfer Fcn2 wurde die Option Replace current selection with zu Discrete blocks (Enter parameters in s-domain) ausgewhlt, a die, wie bereits oben angesprochen, den Block zwar diskretisiert, ihm jedoch eine zeit-

390

10 Abtastsysteme in Simulink

kontinuierliche Maske (Block Parameters Dialogbox, siehe Abb. 10.4 unten rechts) zuweist, in die Parameter auch weiterhin im s-Bereich eingetragen werden knnen. Die o mit dem Model Discretizer erzeugte diskretisierte Version der Transfer Fcn2 stimmt mit dem Block Discretized Transfer Fcn der discretizing-Bibliothek (Abb. 10.3) uberein. Nach Simulation von bsp hybrid md.mdl kann die Ubereinstimmung der Signale pt2 diskret zoh, pt2 d zoh md1 und pt2 d zoh md2 uberpr ft werden. Die verbleibenu den minimalen Abweichungen ergeben sich durch die in die Discrete Transfer Fcn eingetragenen gerundeten Werte der Zhler- und Nennerkoezienten. a

Step
Sample time =0sec.

1 s 2 +0.5s+1 Transfer Fcn kontinuierlich

0.1129z+0.1038 z2 1.562z+0.7788 pt2_diskret _zoh Discrete Transfer Fcn


Sample time =0.5sec.

num (z) den(z) Transfer Fcn1


Sample time = 0.5sec.

Scope pt2_d_zoh_md 1

zoh 1 s 2 +0.5s+1 Transfer Fcn2


Sample time = 0.5sec.

pt2_d_zoh_md 2

Abb. 10.4: Oben: bsp hybrid md.mdl und Model Discretizer-Bedienoberche, unten: Block a Parameters Dialogboxen der Blcke Transfer Fcn1 und Transfer Fcn2 nach Diskretisierung o

10.5 Ubungsaufgaben

391

10.5
10.5.1

Ubungsaufgaben
Zeitdiskreter Stromregler fur GNM

Elektrische Maschinen werden meist digital geregelt. Daher soll in dieser Aufgabe f r u die Gleichstrom-Nebenschluss-Maschine aus Kap. 9.8.1 ein zeitdiskreter Stromregler implementiert werden. Kopieren Sie sich dazu das f r die Aufgaben 9.8.1 und 9.8.2 u programmierte Simulink-Modell und die zugehrige Initialisierungsdatei in Ihr aktuelles o Arbeitsverzeichnis und bauen Sie darauf auf. Die Abtastzeit ist gegeben zu Ts = 800 s F r den Reglerentwurf wird angenommen, dass die Ubertragungsfunktion des Ankeru kreises (Gegenspannung vernachlssigt) die folgende Form habe: a GI (s) = 1 IA (s) 1 1 = L UAsoll (s) 1 + sTstr RA 1 + s RA A

Die Ubertragungsfunktion 1/(1 + sTstr ) ist dabei das vereinfachte Modell der PWM als PT1 . Es ist zu beachten, dass die (Ersatz-)Zeitkonstante Tstr nun nherungsweise der a halben Abtastzeit (= mittlere Totzeit) entspricht, also: Tstr = Ts 2

Legen Sie zunchst einen analogen PI-Stromregler GRI (s) nach dem Betrags-Optimum a o (BO) aus (siehe [29]), wenn T = Tstr die kleinere, T1 = LA /RA die grere Zeitkonstante und V = 1/RA die Verstrkung des Ankerkreises GI (s) ist: a GRI (s) = T1 UAsoll (s) = IAsoll (s) IA (s) 2 T V 1 1 + sT1 = VRI 1 1 + sTRI

Transformieren Sie anschlieend die Regler bertragungsfunktion in den z-Bereich; veru wenden Sie dazu die Befehle tf, c2d und tfdata mit der Transformationsmethode zoh. Implementieren Sie den zeitdiskreten Stromregler mit einem geeigneten Block aus der Discrete-Bibliothek.

10.5.2

Zeitdiskreter Anti-Windup-Drehzahlregler fur GNM

In einem weiteren Schritt soll nun f r die Drehzahlregelung ein Abtastregler eingesetzt u werden. Damit der Ankerstrom den zulssigen Maximalwert von IAmax = 20 A nicht a

392

10 Abtastsysteme in Simulink

ubersteigt, soll der Drehzahlregler zustzlich mit einer Anti-Windup-Funktion ausgea stattet werden. Die Abtastzeit sei ebenfalls Ts = 800 s. Die Ubertragungsfunktion der Drehzahlstrecke (incl. des geschlossenen Ankerstromregelkreises) ergibt sich zu: GN (s) = N (s) 1 1 CM = IAsoll (s) 1 + s 2Tstr s 2J

Legen Sie zunchst wieder einen analogen PI-Drehzahlregler GRN (s) nach dem Syma metrischen Optimum (SO) aus (siehe [29]), wenn T = 2Tstr die kleinere, T1 = 2J die grere Zeitkonstante und V = CM die Verstrkung der Teilstrecke ist! o a GRN (s) = T1 IAsoll (s) = Nsoll (s) N (s) 2 T V 1 1 + s 4T = VRN 1 1 + s TRN

Begrenzen Sie nun den Strom am Reglerausgang auf IAmax und berechnen Sie die Dierenz I zwischen unbegrenztem und begrenztem Ausgang! Erweitern Sie den entworfenen PI-Drehzahlregler, so dass gilt: IAsoll, unbegrenzt = 1 TN VRN (Nsoll N ) I dt + VRN (Nsoll N )

I = IAsoll, unbegrenzt IAsoll, begrenzt Der Regler soll in der entworfenen analogen Form erhalten bleiben und nicht wie der Ankerstromregler diskretisiert werden. Erweitern Sie daher nun den Regler durch Einf gen u entsprechender Abtast- und Halteglieder, so dass ein Regler mit zeitsynchroner Abtastung entsteht! Simulieren Sie einen Drehzahlsprung von Nsoll = 0 auf 1000 U/min bei einem Widerstandsmoment von MW = 10 Nm. Schreiben Sie ein Matlab-Skript, das Ihnen automatisch im Anschluss an die Simulation die in Abb. 10.5 bzw. 10.6 dargestellten Verlufe erzeugt. a

10.5 Ubungsaufgaben

393

Ankerspannung U [V] A 200 150 100 50 0 0 0.1 Zeit [s] Ist Soll 0.2 20 15 10 5 0 0

Ankerstrom I [A] A 1000 500 Ist Soll 0.1 Zeit [s] 0.2 0 0

Drehzahl N [U/min]

Ist Soll 0.1 Zeit [s] 0.2

Abb. 10.5: Simulationsergebnis der Gleichstrom-Nebenschluss-Maschine mit zeitdiskreten Reglern

Ankerspannung U [V] A 200 150 100 50 0 0 0.1 Zeit [s]


Ankerspannung U [V] A 200 150 100 50 0 0 0.1 Zeit [s] Soll 0.2

Ankerstrom I [A] A 20 15 10 5 500 Ist Soll 0 0.1 Zeit [s] 0.2 0 0 1000

Drehzahl N [U/min]

Ist 0.2

Ist Soll 0.1 Zeit [s] 0.2

Abb. 10.6: Simulationsergebnis der Gleichstrom-Nebenschluss-Maschine mit zeitdiskreten Reglern und PWM

11

Regelkreise in Simulink

In diesem Kapitel sollen nun die in den vorangehenden Simulink-Kapiteln 8 und 9 erworbenen Kenntnisse und Fertigkeiten mit den in Kapitel 5.3 gezeigten Verfahren zur Analyse und dem Entwurf von Reglern verkn pft werden. u Anhand des Beispielsystems Gleichstrom-Nebenschluss-Maschine werden die einzel nen Schritte vom Aufbau des Regelkreises in Simulink uber die Berechnung der Regler koezienten bis hin zur Auslegung der bentigten Zustandsbeobachter gezeigt. o

11.1

Die Gleichstrom-Nebenschluss-Maschine GNM

Als regelungstechnisches Beispielsystem wird eine Gleichstrom-Nebenschluss-Maschine nach Signalussplan Abb. 11.1 betrachtet, die strom- und drehzahlgeregelt werden soll.

MW UA
Ee E T E

IA

MM i c Ee E CM N
'

r E

EA

1 RA

1 1 + sTA

1 2 Js

CE N
Abb. 11.1: Signalussplan der Gleichstrom-Nebenschluss-Maschine (konstanter Fluss)

Die Gleichungen in der Dierentialgleichungsform lauten (der Einfachheit halber wird nur der Bereich konstanten Nennusses = N betrachtet): Ankerspannung: Gegenspannung: Drehzahl: Inneres Drehmoment: Ankerzeitkonstante: UA = EA + RA IA + LA CE N 1 (MMi MW ) 2J CM IA LA RA d IA dt (11.1) (11.2) (11.3) (11.4) (11.5)

EA = dN = dt MMi = TA =

396

11 Regelkreise in Simulink

11.1.1

Initialisierung der Maschinendaten


RA LA TA N J CE = = = = = = 250 4 16 0.04 0.012 236.8 m mH ms Vs kg m2 = 2 38.2 = 2 CM

Die Maschinendaten der Gleichstrom-Nebenschluss-Maschine lauten: Ankerwiderstand: Ankerinduktivitt: a Ankerzeitkonstante: Nennuss: Trgheitsmoment: a Maschinenkonstanten:

Diese Daten werden in der Initialisierungsdatei gnm_i.m gespeichert, die vor dem Start der Simulink-Simulation am Matlab-Prompt von Hand aufgerufen werden muss oder aber durch Eintragen des Dateinamens in das Feld Model post-load function in der Registerkarte Callbacks des Untermen s Modell Properties im Menu File beim Starten u der Simulation automatisch aufgerufen wird. Zustzlich werden noch die allgemeinen a Simulationsparameter Stop time Tstop und die maximale Integrationsschrittweite der Simulation Max step size step_max festgelegt (Abb. 11.3). Ebenso wird als Eingangssignal ein Sprung des Spannungssollwerts zum Zeitpunkt Tsprung auf den Wert UAsoll bestimmt.
%% %% %% gnm_i.m Kap 11.1.1 Initialisierungsdatei zu gnm.mdl

%% Allgemeine Simulationsdaten Tstop = 0.2 ; % Stopp der Simulation step_max = 0.0001 ; % Maximale Schrittweite %% Spannungs-Sollwertsprung Tsprung = 0 ; % UAsoll = 50 ; % %% Widerstandsmomenten-Sprung T_MW = 0 ; % MW = 0 ; % %% Maschinendaten der GNM RA = 0.250 ; LA = 0.004 ; TA = LA / RA ; PsiN = 0.04 ; J = 0.012 ; CM = 38.2 ; CE = 2*pi*CM ;

Zeitpunkt des Sprungs [ s ] Sollspannung [ V ] Zeitpunkt des Sprungs [ s ] Sprunghhe o [ Nm ]

% % % % % %

Ankerwiderstand Ankerinduktivitt a Ankerzeitkonstante Nennfluss Trgheitsmoment a Motorkonstanten

[ [ [ [ [

Ohm ] H ] s ] Vs ] kg m^2 ]

11.1 Die Gleichstrom-Nebenschluss-Maschine GNM

397

11.1.2

Simulink-Modell

Mit dem Signalussplan aus Abb. 11.1 und den Variablennamen aus der Initialisierungsdatei gnm_i.m kann nun ohne weiteres das Simulink-Modell gnm.mdl programmiert werden (Abb. 11.2). Es werden folgende Blcke verwendet: o Library Block Sources: Step, Inport Sinks: To Workspace, Outport Library Block Continuous: Integrator, Transfer Fcn Math: Sum, Gain

UA

Ankerkreis
1 TA.s+1

Widerstands moment

Massentrgheit
1 s Integrator

1/RA UAsoll Gain

CM*PsiN Gain 1 1 IA

1/(2*pi *J) Gain 2

N To Workspace1

Transfer Fcn IA To Workspace2

2 N

CE*PsiN Gain 3

Abb. 11.2: Simulink-Modell gnm.mdl der Gleichstrom-Nebenschluss-Maschine

Die Einstellungen der Punkte Solver und Data Import/Export in den CongurationParameters zeigen Abb. 11.3 und Abb. 11.4. Im Data Import/Export werden als Save to Workspace-Variablen t f r die Zeit (Time) und y f r die Ausgabe (Output ) gewhlt. u u a

Abb. 11.3: Conguration Parameters: Auswahl Solver

398

11 Regelkreise in Simulink

Abb. 11.4: Conguration Parameters: Auswahl Data Import/Export

Mit To Workspace-Blcken explizit im Workspace gespeichert werden der Ankerstrom o IA und die Drehzahl N in die Workspace-Variablen IA bzw. N (Abb. 11.5).1)

Abb. 11.5: Block Parameters: To Workspace-Blcke fr Drehzahl N und Ankerstrom IA o u

Der Inport-Block UA und die Outport-Blcke IA und N werden f r die Erstellung der o u Zustandsdarstellung bzw. der Ubertragungsfunktionen mittels linmod vom Eingang UA zu den Ausgngen IA und N bentigt: Diese knnen dann mit den in Kap. 5 (Control a o o System Toolbox) vorgestellten Verfahren untersucht und bearbeitet werden.
Die Ausgangsblcke IA und N liefern das gleiche Ergebnis wie die Workspace-Variablen IA bzw. N. o Diese unntige Verdopplung der Workspace-Variablen dient hier nur der besseren Verstndlichkeit! o a
1)

11.2 Untersuchung der Systemeigenschaften

399

11.2
11.2.1

Untersuchung der Systemeigenschaften


Untersuchung mit Simulink

F r eine erste Untersuchung der Systemeigenschaften wird eine Simulink-Simulation u mit einem sprungfrmigen Verlauf der Ankerspannung gestartet. o Hierzu wird als Eingangssignal der Step-Block UAsoll verwendet, dem als Parameter f r u Step time und Final Value die in gnm_i.m gesetzten Variablen Tsprung und UAsoll ubergeben werden. Der Wert Initial Value wird zu Null gesetzt. Somit springt also zum Zeitpunkt Tsprung der Ausgang des UAsoll-Blocks von Null auf den Wert Final Value. Die Anzeige der als Workspace-Variablen IA und N gespeicherten Signale in Abb. 11.6 erfolgt mit dem Matlab-Skript gnm_a.m:
%% %% %% gnm_a.m Kap 11.2.1 Ausgabedatei zu gnm.mdl

figure subplot(211) plot(t,N*60) title(Drehzahl N [U/min]) subplot(212) plot(t,IA) title(Ankerstrom IA [A]) xlabel(Zeit t) if exist(druck) == 1 , print(-deps ,p_gnm_nia.eps) , end if exist(druck) == 1 , print(-depsc,p_gnm_nia_c.eps) , end
Drehzahl N [U/min] 600 500 400 300 200 100 0 0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2

Ankerstrom IA [A] 60 40 20 0 20 40 0

0.02

0.04

0.06

0.08

0.1 Zeit t

0.12

0.14

0.16

0.18

0.2

Abb. 11.6: Sprungantwort von Drehzahl N und Ankerstrom IA (erzeugt mit gnm a.m)

400

11 Regelkreise in Simulink

11.2.2

Untersuchung des linearisierten Modells mit Matlab und der Control System Toolbox

Um die umfangreichen Untersuchungsverfahren der Control System Toolbox auf ein Simulink-Modell anwenden zu knnen, muss dieses erst in ein LTI-Modell umgewandelt o werden, was mit den Matlab-Befehlen linmod, linmod22) bzw. dlinmod und dem aus der Control System Toolbox stammenden Matlab-Befehl ss geschieht (Kap. 9.2.1). In einem ersten Schritt wird aus dem Simulink-Modell, das sich (intern) aus einem System von ODEs (Ordinary Dierential Equations; siehe Kap. 4) zusammensetzt, die lineare zeitinvariante Zustandsdarstellung generiert: [A,B,C,D] = linmod (sys[,x,u]) [A,B,C,D] = linmod2 (s