Abschnitt 2.3 als pdf-File

Werbung
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
Herunterladen