Computer und Physik 1 of 4 http://physik.uni-graz.at/~cbl/C+P/admin/mk_combined_fi... Computer und Physik, version dated 2005-11-15 13:44:52 2.3 Symbolische Sprachen, Entwicklungsumgebungen, Bibliotheken 2.3.1 Symbolische Sprachen 2.3.2 Entwicklungsumgebungen 2.3.3 Bibliotheken 2.3.1 Symbolische Sprachen Im Jahr 1867 publizierte der französische Astronom Charles Delaunay seine Rechnungen zur Zeitabhängigkeit der Mondbahn. Er hatte für die zwei Bände jeweils 10 Jahre (mit Hand und Kopf) gerechnet. Die Mondbahn konnte aber dadurch mit bis dahin ungekannter Genauigkeit berechnet werden. Erst 100 Jahre später wurden die Rechnungen mit Hilfe von Computer-Algebra Programmen überprüft. Man fand drei kleine Fehler. Diese Rechnung im Jahr 1970 dauerte 20 Stunden. Heute geht das vermutlich in einige Minuten. (Quelle: Scientific American, Dez. 1981, R. Pavelle, M. Rothstein, J. Fitch: Computer Algebra) Symbolische Rechnungen haben den Vorteil größerer Allgemeinheit; sie sind exakt. Was das bedeutet sieht man, wenn man zum 15.11.2005 14:02 Computer und Physik 2 of 4 http://physik.uni-graz.at/~cbl/C+P/admin/mk_combined_fi... Beispiel die nachstehende Rechnung numerisch (für einfache Genauigkeit) durchführt: Eigentlich sollte ja 1.0 herauskommen. Aufgrund der numerischen Rundungsfehler erhält man aber 1.000006. Noch deutlicher wird es bei wo ich auf meinem PC den Wert -0.0078349 (statt richtig: 0) bekomme (4-Byte-Gleitkommazahlen). Dass (1+1)*(1+1) den Wert 4 ergibt, das berechnet man im Kopf oder mit numerischen Programme. Ebenfalls im Kopf bestimmt man das Produkt (1+x)*(1+x) als 1 +2 x + x^2. Aber auch für solche "symbolischen" Rechnungen gibt es Programme. Bekannte Beispiele dafür sind MATHEMATICA und MAPLE. Wolfram Research: Home of MATHEMATICA Waterloo Maple Web Site In diesen Programmen können noch viel allgemeinere Umformungen und Rechnungen ausgeführt werden, zum Beispiel Die numerische Genauigkeit kann frei gewählt werden und so sieht das dann aus: Die Programme sind so clever, dass auch Grenzwerte, unendliche Summen, Integrale, Ableitungen und vieles andere damit "analytisch" bestimmt werden können: Die ersten Versuche in diese Richtung gab es schon Ende der 60er Jahre. Das Programmpaket "REDUCE" konnte die in der Quantenfeldtheorie auftretenden umfangreichen symbolischen Rechnungen (zum Beispiel die Berechnung von sogenannten Feynman-Graphen in der Quantenelektrodynamik) automatisieren. Andere typische Anwendungen in der Physik sind Rechnungen zur Garvitationstheorie (allgemeine Relativitätstheorie) und viele mehr. Diese Programmsysteme und ihre Nachfolger basierten meist auf Programmiersprachen wie LISP (List Processing Language), die speziell für die Manipulation von Zeichenketten (Strings) gedacht sind. Alle diese symbolischen Systeme basieren auf systematischen und rekursiven Umformungen von Strings. So kann man Multiplikationen an algebraischen Ausdrücken durch Regeln vereinfachen, wie etwa (a+b)*c wird ersetzt durch a*c + b*c wobei a, b, und c wiederum kompliziertere, zusammengesetzte Ausdrücke sein können. Damit sit auch ein Ausdruck wie der folgende vereinfachbar: (a+b)*(c+d) wird ersetzt durch (a+b)*c +(a+b)*d wird ersetzt durch a*c+b*c+a*d+b*d. Die wichtigsten dieser Regeln sind schon "eingebaut", man kann sich aber auch eine eigene Algebra durch Formulierung neuer Regeln entwerfen. Ein Problem dabei ist der hohe Speicherbedarf. Zwischenschritte benötigen oft exorbitant viel Speicher und daran kann die Fertigstellung scheitern. Es ist zum Beispiel kaum möglich, Matrizen deren Elemente symbolische Ausdrücke sind, zu invertieren, wenn sie höhere Dimension als etwa 10 haben. Die meisten der genannten Programme sind inzwischen um viele Funktionen (numerische, graphische Darstellung, Web-Output) erweitert worden und so quasi Entwicklungsumgebungen geworden. Auch ich teste neue Ideen oder Algorithmen oft zuerst (an einfacheren Fällen) mit einem symbolischen Programm, bevor ich die Ideen dann für große Systeme numerisch umsetze. 15.11.2005 14:02 Computer und Physik 3 of 4 http://physik.uni-graz.at/~cbl/C+P/admin/mk_combined_fi... Kurze Einführung in MATHEMATICA Während Mathematica und Maple numerische Fähigkeiten aufwiesen aber eben auch symbolische Sprachen sind, kombiniert MATLAB eher Eigenschaften einer Matrix-Vektor orientierten numerischen Sprache mit denen einer interaktiven graphischen Darstellungsumgebung. Daneben gibt es zum Beispiel Systeme wie IDL oder AVS, die vorwiegend den Zweck graphischer (z.B. 3d) Darstellung von (großen) Datenmengen haben, aber eben auch Sprachstrukturen zur Aufbereitung dieser Daten. Und und und und ... Aufgabe 2.3.1.A1 Aufgabe 2.3.1.A2 2.3.2 Entwicklungsumgebung Zur Programm-Entwicklung gehören viele Schritte und dazugehörende nützliche Tools: Interaktives Schreiben und Formatieren von Programm-Codes (Editor) Flußdiagramme (Flow-charts), Mindmaps (Special Purpose Tools) Übersetzung des Codes in Object-Code (Compiler) Zusammenfügen verschiedene Object-Codes zu lauffähigen Programmen ( Linker, auch Loader) Testen von Programmen (Debugger, debug ="entkäfern") Programmbibliotheken (Archiver) Benutzeroberfläche Es gibt Programm-Pakete, die viele dieser Funktionen zusammenfassen und man nennt so etwas eine Entwicklungsumgebung. Ein gutes Beispiel dafür ist DELPHI von Borland (eine Kombination von Tools, Unterprogrammen und der Programmiersprache Pascal). Daneben, und für manchen Problemstellungen fast auch als Entwicklungsumgebung einsetzbar sind Multipurpose-Tools wie MATLAB, MAPLE oder das schon erwähnte MATHEMATICA, die mehrere Funktionen in sich vereinen: Symbolische Algebra Numeri Graphische Darstellung Unterprogramme in Bibliotheken Spezielle Tools zur Einbindung anderer Programme Vorgefertige Anwendungspakete Alle diese Tools haben ihre eigenen Stärken und Schwächen. So ist meist die Graphik zwar für den interaktive Einsatz gut, für die Druckversion aber nicht von ausreichend hoher Qualität (und nicht normgerecht). Viele Versionen zeugen von der rasanten Entwicklung und Bug-Häufigkeit. Ein optimales Werkzeug für PhysikerInnen wäre alles in einem: Texteditor, auch für Formeln (TeX), die gleichzeitig auch berechnet werden können (MATHEMATICA), automatisch effizient in numerische Programme (F90 oder C) umgesetzt werden können und publikationsgerecht dargestellt werden können. Ihr werdet es erleben. Hoffentlich (?). (Hinweis eines Studenten aus dem WS2002: Eine sinnlose, aber vielleicht historisch interessante Bemerkung: Der Ausdruck Bug bei Computern kommt tatsächlich von Käfer und zwar noch aus der Zeit der Röhrencomputer bei denen sich immer wieder Käfer aufgrund der Wärme eingenistet haben und dadurch zu Rechenfehlern geführt haben. Daher hat jemand den Rechner debugen (Entkäfern) müssen.) Aufgabe 2.3.2.A1 Aufgabe 2.3.2.A2 Aufgabe 2.3.2.A3 Aufgabe 2.3.2.A4 2.3.3 Bibliotheken Viele Rechnungen in den Naturwissenschaften verwenden Standardverfahren. Einige immer wiederkehrenden Aufgaben sind Zeichen von Kurven, graphische Darstellung von Funktionen und Zusammenhängen in mehreren Dimensionen Numerische Differentiation und Integration, Lösung von Differentialgleichungen und Integralgleichungen Simulationen, Rechnungen mit Hilfe von Zufallszahlen Mathematische Statistik, Fehlerrechnung, Anpassen von parametrisierten Funktionen ("Fit") Rechnungen mit Matrizen und Vektoren, etwa Multiplikation, Addition, Invertierung und die Berechnung von Eigenwerten und Eigenvektoren Für viele dieser Probleme gibt es wohlüberlegte und gut getestete Algorithmen; es lohnt sich daher nicht, jedes Mal das Rad neu zu erfinden, sondern man sollte wenn immer es möglich ist, gute Programme aus bestehenden Programmsammlungen ("Bibliotheken") verwenden. Dabei handelt es sich meist Sammlungen von Unterprogrammen in einer oder mehreren der gängigen Sprachen (C, Fortran). Die Art des Aufrufs dieser Unterprogramme aus eigenen Programmen ist genau definiert und so kann man die Bibliotheksprogramme leicht in den eigenen Code "einbauen". 15.11.2005 14:02 Computer und Physik 4 of 4 Blas (public domain) Blas Info Lapack (public domain) Lapack Info Arpack (public domain) Arpack Home Page IMSL (proprietory) IMSL Info NAG (proprietory) NAG Home Numerical Recipes (quasi public domain) Numerical Recipes Online CERNLIB (public domain) CERN Progrm Library OpenGL (public domain) OpenGL Homepage DirectX http://physik.uni-graz.at/~cbl/C+P/admin/mk_combined_fi... Ein kleine aber hoch optimierte Sammlung von Unterprogrammen, die typisch für Rechnungen mit Matrizen und Vektoren sind (also zum Beispiel Matrix-Vektor-Multiplikationen, Skalarprodukte und anderes) Meist sind diese Programme vom Computerhersteller (oder vom Prozessorhersteller) für den jeweiligen Type optimiert verfügbar. ist aus den älteren Bibliotheken Eispack (Matrixdiagonalisierung) und Linpack (Lineare Algebra, etwa Invertierung von matrizen) hervorgegangen Spezielle Diagonalisierungsmethoden ("Arnoldi") zur Berechnung bestimmter z.B. der kleinsten) Eigenwerte allgemeiner Matrizen Sammlung von numerischen Programmen für alle möglichen Problemen (auch lineare Algebra) "Numerical Algorithms Group"; Optimierte Sammlung von numerischen Programmen für alle möglichen Problemen (auch lineare Algebra) Programmbibliothek zu einem Standardbuch von W. H. Press, B. P. Flannery, S. A. Teukolsky, W. T. Vetterling: Numerical Recipes , in dem alle wichtige numerischen Verfahren anhand von Programmbeispielen dargestellt werden. Sehr nützlich (obwohl nicht immer optimiert, dafür aber lesbar). Das Buch ist auch kapitelweise online verfügbar. Sammlung von am CERN (Europ. Kernforschungszentrum) entwickelten Programmen. Viele davon sind speziell für die Elementarteilchenphysik gedacht, viele aber von allgemeiner Bedeutung. Darunter vor allem auch ein "berühmtes" Programm zu Minimierung allgemeiner Probleme mit vielen Parametern (Minuit) Eine Sammplung von Unterprogrammen, die den hardwarunabhängigen Zugriff auf Grafikfunktionen (vor allem auch dreidimensional und bewegt) erlauben. OpenGL hat sich aus der Garphics Language GL der Firma SGI entwickelt. Eine Sammplung von Unterprogrammen, die den hardwarunabhängigen Zugriff auf Grafikfunktionen für MS-Windows erlauben. Hier sind Links zu einige Bibliotheken oder Listen mit entsprechenden Verweisen: Netlib: Collection of mathematical software, papers, and databases The Numerical Algorithms Group Ltd CPC Library NERSC: Center for Computational Sciences and Engineering : Programming Libraries NACSE: Northwest Alliance for Computational Science and Engineering UCES: Undergraduate Computational Engineering and Science CERN Program Library 15.11.2005 14:02