Numerische Software

Ernst Haunschmid, Christoph Überhuber
Insttut für Angewandte und Numerische Mathematik
Technische Universität Wien

Our business is taking math and hiding it from the user.
We create tools for doing engineering and scientific work
without fooling with the math.
We focus on the applications that can be derived from the math.

Jim Tung (Direktor der MathWorks Inc.)

Aufwand für die Eigenentwicklung

Wirtschaftlichkeitsüberlegungen im Softwarebereich liegt in erster Linie der Personalaufwand zugrunde. Dabei dienen oft die lines of code, die pro Person und Zeiteinheit (im allgemeinen Monate oder Jahre) fertiggestellt werden, als grober Richtwert für die Produktivität von Software-Entwicklern. Für ein abgeschlossenes Projekt wird diese Produktivitätsmaßzahl unter Einbeziehung aller Aktivitäten des gesamten Projektverlaufs (von der Spezifikation bis zur Abnahme) ermittelt.

Beispiel (IMSL, NAG): Als Richtwerte für Aufwandsschätzungen können folgende Produktivitätszahlen numerischer Programmsysteme bzw. -bibliotheken dienen:

EISPACK: 55 Zeilen/Personalmonat,
IMSL: 160 Zeilen/Personalmonat,
NAG: 260 Zeilen/Personalmonat.

Der Gesamtaufwand zur Entwicklung einer numerischen Programmbibliothek ist enorm hoch. Für die NAG-Fortran-Library wurden bisher insgesamt mehr als 1000 Personaljahre aufgewendet.

Die persönlichen Erfahrungen unroutinierter Software-Entwickler bilden eine ungeeignete Grundlage für realistische Aufwandsschätzungen. Ein Programmieranfänger schreibt oft in sehr kurzer Zeit (wenigen Stunden) ein Programm mit 100 oder mehr Zeilen. Durch naive Hochrechnung kommt man so zu einer geschätzten Monatsleistung von mehr als 4000 Programmzeilen. Diese Leistungsschätzung liegt aber - unter anderem wegen der überproportional steigenden Komplexität größerer Softwaresysteme und des von Anfängern meist nur unzureichend berücksichtigten Test- und Dokumentationsaufwandes - um mehr als eine Größenordnung zu hoch !

Signifikante Produktivitätssteigerungen im numerischen Bereich sind durch Verwendung von Standard-Software-"Bauteilen" zu erreichen.

Beispiel (LINPACK): Würde man ein äquivalentes Programm zu den LINPACK-Routinen sgeco, sgefa und sgesl (inklusive der benötigten BLAS-Programme saxpy, sdot, sscal, sasum und isamax), d. h. ein Programm zur effizienten und zuverlässigen Lösung linearer Gleichungssysteme und zur Konditionsabschätzung, selbst entwickeln, so müßte man mit folgendem Personalaufwand rechnen:

Die genannten 8 Fortran-Unterprogramme umfassen (ohne Berücksichtigung der Kommentare) ca. 325 Zeilen Code; man müßte daher mit einem Entwicklungsaufwand von ca. 1 - 2 Personalmonaten rechnen.

Diesem Personalaufwand sind - in diesem speziellen Fall, wo ausgezeichnete "Fertigsoftware" kostenlos verfügbar ist - vergleichsweise geringfügige Aufwendungen für die Softwarebeschaffung (über das Internet) gegenüberzustellen.

Wie dieses Beispiel anhand der LINPACK-Routinen zeigt, kann durch Beschaffung eines (weit über den eigentlichen Bedarf hinausgehenden) fertigen Programmpaketes eine signifikante Einsparung an Personalaufwand erreicht werden.

Bisher war primär vom Entwicklungsaufwand die Rede. Der Aufwand für die Wartung ist aber keineswegs vernachlässigbar: Abgesehen von "one shot"-Programmen, die tatsächlich nur einmal verwendet werden (was aber nur sehr selten auftritt) und bei denen keine Wartung erforderlich ist, beträgt der Anteil der Wartung bei Großprojekten bis zu 2/3 des Gesamtaufwandes. Im Mittel wird für die Wartung eines numerischen Softwareproduktes ungefähr genausoviel aufzuwenden sein wie für dessen Entwicklung. Auch hier, beim Wartungsaufwand, bietet die Verwendung von Standard-software (Software-"Fertigteilen") wesentliche Vorteile, speziell wenn diese, wie z. B. die IMSL- und NAG-Bibliotheken, ständig professionell gewartet werden.

Programme in Fachzeitschriften

Programmiersprache der in renommierten Zeitschriften publizierten Programme ist vorwiegend Fortran. Die Qualität dieser Programme ist gut: Alle veröffentlichten Programme werden - wie bei Fachzeitschriften üblich - vor der Veröffentlichung durch Gutachter geprüft. Umfang und Intensität dieser Prüfung entspricht aber im allgemeinen nicht jenen Kontrollmaßnahmen, wie sie bei der Entwicklung und Wartung numerischer Bibliotheken oder spezieller numerischer Programmpakete gesetzt werden.

Bei der ACM (Association for Computing Machinery) gibt es die Veröffentlichungsreihe "Collected Algorithms of the ACM": Veröffentlichungsorgan ist seit 1975 die Zeitschrift Transactions on Mathematical Software (TOMS). Alle dort erschienenen Programme sind über den Internet-Dienst NETLIB (siehe spätere Abschnitte) in maschinenlesbarer Form kostenlos zu beziehen.

Programme in Büchern

Auf dem Buchsektor ist vor allem die "Numerische Rezeptsammlung" von Press, Flannery, Teukolsky und Vetterling zu erwähnen. Viele Verfahren aus den wichtigsten Teilgebieten des naturwissenschaftlichen Rechnens (scientific computing) werden dort durch gut verständliche einführende Texte erläutert und durch klar strukturierte (nicht auf Zuverlässigkeit und Effizienz getrimmte) Programme illustriert.

Von den "Numerischen Rezepten" gibt es vier Versionen - mit Programmen in Fortran 77 [1], C [2], Pascal und QuickBasic; auch Disketten mit den Quellprogrammen sind über den Buchhandel erhältlich. Die Fortran- und C-Programme können auch über das Internet unter der Gopherserver-Adresse cfata4.harvard.edu bezogen werden. Einen ergänzenden Band mit Beispielen gibt es in den Programmiersprachen Fortran 77 [3], C [4] und Pascal.

Unterstützung bei der Auswahl zuverlässiger und effizienter numerischer Software gibt das Buch "Computer-Numerik" [7] von Überhuber.

Numerische Softwarebibliotheken

Eine Bibliothek ist eine Einrichtung zur systematischen Erfassung, Erhaltung, Betreuung und Zugänglichmachung von Büchern. Eine Softwarebibliothek ist eine analoge Einrichtung für den Bereich der Computersoftware. Die systematische Arbeit, die mit dem Betreiben einer Software- bibliothek verbunden ist, erfordert laufend einen beträchtlichen Personaleinsatz.

Von den allgemein gehaltenen (inhaltlich breit gestreuten) mathematisch-numerischen Programmbibliotheken sind vor allem zwei zu nennen: IMSL und NAG.

IMSL

Die IMSL (International Mathematical and Statistical Library) ist die Softwarebibliothek der Visual Numerics Inc., Visual Numerics Inc. 9990 Richmond Avenue, Suite 400, Houston, Texas 77042-4548, USA (IMSL in Österreich: Uni Software Plus GmbH, Softwarepark, Hauptstraße 99, A-4232 Hagenberg).

Die Firma IMSL wurde 1971 von ehemaligen Mitarbeitern des IBM-Projekts "Scientific Software Package" (SSP) als kommerziell geführte Organisation zur Entwicklung und zum Vertrieb numerischer Software gegründet. Mittlerweile gibt es für alle gängigen Rechnersysteme (Großrechner, Workstations und PCs) speziell angepaßte Versionen der IMSL-Bibliothek. Vor einigen Jahren haben sich die Firmen IMSL und Precision Visuals zur Visual Numerics Inc. zusammengeschlossen. An der Weiterentwicklung und Wartung der IMSL-Bibliotheken ist eine Vielzahl führender (vorwiegend amerikanischer) Wissenschaftler beteiligt.

NAG

Die zweite Softwarebibliothek von internationaler Bedeutung stammt von der NAG Ltd. (Numerical Algorithms Group), Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, England (NAG in Deutschland: NAG GmbH, Schleißheimerstraße 5, D-85748 Garching / München, Tel.: 0049 89 3207396). Die NAG wurde 1970 in England zunächst als Nottingham Algorithms Group gegründet. Zielsetzung war damals die Entwicklung numerischer Software für die an britischen Hochschulen weit verbreiteten ICL-Computer. Später fand die Umwandlung in ein von den Hochschulen und speziellen Computer-Herstellern unabhängiges Software-Unternehmen - die Numerical Algorithms Group Ltd. (NAG Ltd.) - mit Sitz in Oxford statt.

Andere herstellerunabhängige Softwarebibliotheken

Neben den IMSL- und NAG-Softwarebibliotheken gibt es noch weitere Bibliotheken, die von den Computern spezieller Hersteller unabhängig sind (Harwell Subroutine Library, SLATEC Common Mathematical Library, CMLIB, PORT, Boeing Mathematical Software Library etc.). Diese Bibliotheken haben jedoch international keine so weite Verbreitung wie die IMSL- und die NAG-Bibliotheken.

Softwarebibliotheken der Computerfirmen

Die meisten Hersteller von Großrechnern oder Workstations für die Numerische Datenverarbeitung bieten ihren Kunden maschinenspezifisch optimierte Softwarebibliotheken an. Die Programme dieser Bibliotheken liefern oft (aber nicht immer) bessere Leistungswerte als die Programme herstellerunabhängiger Bibliotheken. Sie haben allerdings den Nachteil mangelnder Portabilität.

Beispiel (ESSL): Die Engineering and Scientific Subroutine Library (ESSL) ist ein IBM-Produkt, das besonders effiziente mathematische Routinen enthält. Die ESSL- Bibliothek wurde ursprünglich für IBM-Großrechner entwickelt. Später wurde auch eine Version für Workstations der RS/6000-Serie entwickelt. Versionen für Nicht-IBM-Computer sind in Vorbereitung.

Numerische Softwarepakete

Ein Softwarepaket ist eine systematische Zusammenstellung von Software für ein bestimmtes Gebiet. Im Gegensatz zu Softwarebibliotheken fehlt bei Softwarepaketen die ständige und systematische Betreuung.

Im Jahr 1971 wurde von der amerikanischen National Science Foundation (NSF) das NATS-Projekt (National Activity to Test Software) ins Leben gerufen. Zielsetzung waren Produktion und Verteilung numerischer Software mit möglichst hoher Qualität. Als Prototypen wurden damals zwei Softwarepakete entwickelt: EISPACK für Matrix-Eigenwertprobleme und FUNPACK für die Berechnung spezieller Funktionen.

Die Entwicklungsarbeiten wurden hauptsächlich im Argonne National Laboratory und an der Stanford University ausgeführt. Mit der Veröffentlichung der jeweils zweiten Version der beiden Pakete wurde das Projekt im Jahre 1976 formal abgeschlossen. Es war sowohl vom Resultat her als auch hinsichtlich der gewonnenen Erkenntnisse bezüglich der Organisation solcher Projekte ein großer Erfolg.

Das durch EISPACK vorgelegte Qualitätsniveau bezüglich Leistung und Portabilität war so richtungsweisend, daß eine Reihe nachfolgender Arbeitsgruppen den Terminus "PACK"als Bestandteil ihres Produktnamens verwendeten:

LINPACK war die Ergänzung zu EISPACK (das im Bereich der Linearen Algebra die Eigenwertprobleme abdeckte) für die Problembereiche der linearen Gleichungs- systeme und Ausgleichsprobleme.

LAPACK (Linear Algebra Package) ist ein Paket von Unterprogrammen zur direkten Lösung von linearen Gleichungssystemen und linearen Ausgleichsproblemen (mit vollbesetzten oder bandstrukturierten Matrizen) sowie zur Berechnung von Eigenwerten und Eigenvektoren von Matrizen.

LAPACK [5] wurde 1992 publiziert und stellt die derzeit beste Sammlung von Software für den Bereich der Linearen Algebra dar. LAPACK ist das Nachfolgeprodukt der Pakete LINPACK (direkte Lösung linearer Gleichungssysteme) und EISPACK (Lösung von Matrix-Eigenwert- und -Eigenvektor-Problemen).

Neben diesen Softwarepaketen gibt es z. B. noch das ITPACK, ELLPACK, MINPACK, FFTPACK, ... .

Das von C. W. Überhuber initiierte und mitentwickelte QUADPACK [6] (für die Berechnung bestimmter Integrale und Integraltransformationen von Funktionen einer Veränderlichen) nimmt unter diesen Paketen eine Sonderstellung ein: Es ist das bisher einzige Produkt der "PACK-Serie", das aus Europa stammt. Die QUADPACK-Programme wurden sowohl in die IMSL- als auch die NAG-Bibliotheken einbezogen.

Unter den genannten Softwarepaketen befinden sich viele ausgezeichnete Produkte - der Zusatz "PACK" ist aber selbstverständlich kein stillschweigender Qualitätsnachweis. Es gibt eine Reihe anderer sehr guter Pakete, die keinen "PACK"-Namen besitzen, wie z. B. TOEPLITZ, CONFORMAL, LLSQ, ... .

Einzelne Programme der meisten aufgezählten Programmpakete können über die NETLIB bezogen werden. Manche Pakete sind von der Visual Numerics Inc. oder der NAG Ltd. gegen Ersatz der Versandspesen vollständig erhältlich.

Genauere Informationen über verfügbare Softwarepakete und deren Inhalt findet man in dem Buch "Computer- Numerik" (Überhuber [7]).

Internet

Die herkömmliche Verbreitung numerischer Software erfolgt durch Versendung von Datenträgern (Disketten, CD-ROMs etc.), auf denen die jeweilige Software gespeichert ist. Stark zugenommen hat in den letzten Jahren die Bedeutung des Internet als elektronisches Medium zur Verbreitung von Software. Der wesentliche Vorteil liegt in der stark verkürzten Zugriffszeit auf die aktuellsten Versionen der gewünschten Programme, Dokumentationen, Daten usw.

NETLIB

Von herausragender Bedeutung für die zuverlässige, einfache und effiziente Beschaffung von frei erhältlicher (public domain) Software aus dem Numerik-Bereich ist der Internet-Dienst NETLIB, der Programmbibliotheken, einzelne Programme, Bibliographien, Software-Tools etc. kostenlos zur Verfügung stellt.

Um Zugang zur NETLIB-Bibliothek zu erhalten, kann man eine E-Mail-Nachricht z. B. an eine der folgenden Adressen richten:

netlib@nac.co oder
netlib@ornl.gov oder
netlib@research.att.com

Diese E-Mail-Nachricht kann eine der folgenden Formen haben:

send index
send index from library
send routines from library
find keywords

Die Softwarebeschaffung mittels E-Mail ist eher mühsam und unterliegt einigen Einschränkungen (z. B. können nur einzelne Programme bezogen werden). Die Softwarebeschaffung kann auch mittels anonymous-FTP erfolgen.

Der Zugang zur NETLIB ist auch über das WWW möglich:

http://www.netlib.no/netlib/master/readme.html (Norwegen)
http://www.netlib.org/ (Tennessee, USA)
http://achille.research.att.com/netlib/ (New York, USA)
http://www.hensa.ac.uk/ftp/mirrors/netlib/ (England)

Um unnötige Datentransfers zu vermeiden, sollte immer der geographisch nächstgelegene Server verwendet werden.

Der gesamte Inhalt der NETLIB mit Ausnahme von TOMS ist auch auf CD-ROM erhältlich. Informationen über diese CD-ROM und andere CD-ROMs, die für Naturwissenschaftler und Techniker von Interesse sein können, erhält man über das WWW:

http://www.ptf.com/

ELIB

Vom Konrad-Zuse-Zentrum für Informationstechnik Berlin (ZIB; Heilbronnerstraße 10, D-10711 Berlin-Wilmersdorf) wird die Softwarebibliothek ELIB betrieben. Mittels anonymous-FTP kann man die ELIB über die Internet-Adresse elib.zib-berlin.de im Verzeichnis pub/elib beziehen. Am komfortabelsten kann auf die ELIB mittels des WWW-Systems zugegriffen werden:

http://elib.zib-berlin.de/

GAMS

GAMS (Guide to Available Mathematical Software) ist eine vom amerikanischen National Institute of Standards and Technology (NIST) betreute Datenbank für numerische Software, in der alle Unterprogramme der wichtigsten Mathematik-Bibliotheken dokumentiert sind. Dabei ist zu jeder Funktion eine kurze Beschreibung gespeichert. Die Unterprogramme sind gemäß dem hierarchischen GAMS-Index klassifiziert. Soferne es sich um ein frei erhältliches Unterprogramm handelt, kann man dieses im allgemeinen direkt mit Hilfe von GAMS beziehen.

Die GAMS-Datenbank kann auch mittels des WWW-Systems abgefragt werden:

http://gams.nist.gov/

IMSL und NAG

Informationen über die IMSL und die NAG Bibliotheken kann man über das WWW erhalten:

IMSL: http://www.imsl.com/
NAG: http://www.nag.co.uk/

Interaktive multifunktionale Programmsysteme

Wenn es nicht um Höchstleistungen bei der zuverlässigen und effizienten Lösung sehr großer numerischer Probleme im Produktionsbetrieb geht, sondern um die komfortable interaktive Bearbeitung kleiner bis mittelgroßer, rasch wechselnder Aufgaben am PC oder auf einer Workstation, bieten sich multifunktionale Programmsysteme an. Diese vereinigen - mit unterschiedlichen Schwerpunkten - die Funktionalität von Numerik-, Symbolik- und Graphik-Systemen in umfassenden Softwareprodukten mit einheitlicher Benutzerschnittstelle.

Wenn der Schwerpunkt der Anwendung auf der numerischen Lösung "mittelgroßer" Probleme liegt, kommen z. B. die matrix-orientierten Systeme MATLAB, OCTAVE, MLAB, GAUSS und XMATH in Frage. Für große, sehr rechenaufwendige Probleme empfiehlt sich die Verwendung spezieller numerischer Softwarebibliotheken (IMSL oder NAG) oder -pakete.

MATLAB

MATLAB ist unter den multifunktionalen Programmsystemen der prominenteste Vertreter der numerisch orientierten Produkte. Mit diesem interaktiven Programmsystem der MathWorks Inc. kann man Gleichungen sehr einfach definieren und auswerten, Daten und selbstdefinierte Funktionen speichern und wiederverwenden sowie Berechnungs- ergebnisse graphisch darstellen. Im Zentrum von MATLAB steht die interaktive numerische lineare Algebra und Matrizenrechnung: MATrix LABoratory.

MATLAB verfügt über einen Interpreter und läßt sich programmieren. Auf diese Weise kann man die Funktionalität des Systems noch erweitern. Aus MATLAB können auch Fortran- und C-Programme aufgerufen werden, wodurch man die Bearbeitung rechenintensiver Aufgaben beschleunigen und bestehende Software einbinden kann. Eine Reihe von Zusatzmodulen, sogenannte Toolboxen, sind für verschiedene Anwendungsgebiete und spezielle Aufgabenstellungen erhältlich: Signalverarbeitung, Splines, Chemometrie, Optimierung, Neuronale Netze, Regelungssysteme, Statistik, Bildverarbeitung etc.

Bibliographie

[1] W.H. Press, B.P. Flannery, S.A. Teukolsky, W.T. Vetterling: Numerical Recipes in Fortran - The Art of Scientific Computing, 2nd edn. Cambridge University Press, Cambridge 1992.

[2] W.H. Press, B.P. Flannery, S.A. Teukolsky, W.T. Vetterling: Numerical Recipes in C - The Art of Scientific Computing, 2nd edn. Cambridge University Press, Cambridge 1992.

[3] W.H. Press, B.P. Flannery, S.A. Teukolsky, W.T. Vetterling: Numerical Recipes in Fortran - Example Book, 2nd edn. Cambridge University Press, Cambridge 1992.

[4] W.H. Press, B.P. Flannery, S.A. Teukolsky, W.T. Vetterling: Numerical Recipes in C - Example Book, 2nd edn. Cambridge University Press, Cambridge 1992.

[5] E. Anderson, Z. Bai, C. Bischof, J. Demmel, J.,J. Dongarra, J. DuCroz, A. Greenbaum, A.S. Hammarling, A. McKenney, S. Ostrouchov, D.C. Sorensen: LAPACK User's Guide, 2nd ed. SIAM Press, Philadelphia 1995.

[6] R. Piessens, E. de Doncker, C.W. Ueberhuber, D.K. Kahaner: QUADPACK - A Subroutine Package for Automatic Integration. Springer-Verlag, Berlin Heidelberg New York Tokyo 1983.

[7] C.W. Überhuber: Computer-Numerik. Springer Verlag, Berlin Heidelberg NewYork Tokyo 1995.


Zum Inhaltsverzeichnis, Pipeline 19, Juni 1996