Table Of ContentStefan Gerlach
Computerphysik
Einführung, Beispiele
und Anwendungen
Computerphysik
Stefan Gerlach
Computerphysik
Einführung, Beispiele und
Anwendungen
StefanGerlach
UniversitätKonstanz
Konstanz,Deutschland
ISBN978-3-662-49428-8 ISBN978-3-662-49429-5(eBook)
DOI10.1007/978-3-662-49429-5
DieDeutscheNationalbibliothekverzeichnetdiesePublikationinderDeutschenNationalbibliografie;
detailliertebibliografischeDatensindimInternetüberhttp://dnb.d-nb.deabrufbar.
SpringerSpektrum
©Springer-VerlagBerlinHeidelberg2016
Das Werk einschließlichallerseinerTeileist urheberrechtlichgeschützt.Jede Verwertung, die nicht
ausdrücklichvomUrheberrechtsgesetzzugelassenist,bedarfdervorherigenZustimmungdesVerlags.
DasgiltinsbesonderefürVervielfältigungen,Bearbeitungen,Übersetzungen,Mikroverfilmungenund
dieEinspeicherungundVerarbeitunginelektronischenSystemen.
DieWiedergabevonGebrauchsnamen,Handelsnamen,Warenbezeichnungenusw.indiesemWerkbe-
rechtigtauchohnebesondereKennzeichnungnichtzuderAnnahme,dasssolcheNamenimSinneder
Warenzeichen-undMarkenschutz-Gesetzgebungalsfreizubetrachtenwärenunddahervonjedermann
benutztwerdendürften.
DerVerlag,dieAutorenunddieHerausgebergehendavonaus,dassdieAngabenundInformationenin
diesemWerkzumZeitpunktderVeröffentlichungvollständigundkorrektsind.WederderVerlagnoch
dieAutorenoderdieHerausgeberübernehmen,ausdrücklichoderimplizit,GewährfürdenInhaltdes
Werkes,etwaigeFehleroderÄußerungen.
Planung:MargitMaly
GedrucktaufsäurefreiemundchlorfreigebleichtemPapier.
SpringerSpektrumistTeilvonSpringerNature
DieeingetrageneGesellschaftistSpringer-VerlagGmbHBerlinHeidelberg
Vorwort
DiesesLehrbuchmöchtedemLesereineEinführungindasnochjungeGebietder
Computerphysik geben. Es soll Studierenden der Physik und physiknaher Fächer
als Begleiter,Nachschlagewerk und zur Vertiefung im Studium dienen, aber auch
Dozenten bei der Vorbereitung von Vorlesungen zur Computerphysik eine Hilfe
sein.ZieldesBuchesistes,dieMethodenderComputerphysikundderenAnwen-
dungen zu vermitteln und zu lernen, physikalische Probleme in ein Modell und
anschließendineinComputerprogrammumzusetzen,umsophysikalischenFrage-
stellungen mithilfe des Computersnachzugehen.Ein wichtiger Schwerpunktliegt
dabei auf den Techniken (Programmierung, numerische Methoden etc.), ohne die
die Computerphysik nicht möglich wäre. Da es im deutschsprachigen Raum bis-
herkeinvergleichbaresaktuellesLehrbuchgibt,fülltdiesesWerkdamiteinegroße
Lücke.
Entstanden ist dieses Buch aus der Überarbeitung eines Vorlesungsskriptes für
dieVorlesungen„EinführungindieComputerphysik“und„ComputerphysikIund
II“,welcheseitmehrerenJahrenfürStudierendederPhysikimviertenSemesteran
derUniversitätKonstanzvonmirgehaltenwerden.Daessichumeineinführendes
Lehrbuchhandelt,sindkeinerleiVorkenntnissenotwendig.EinzigindenProjekten
werdenGrundlagenausdenEinführungsvorlesungenderPhysikverwendet.
Die Kap. 2 bis 7 befassen sich mit den Grundlagen des wissenschaftlichen
RechnensundgebeneineEinführunginLinuxunddieProgrammierung.AlsPro-
grammiersprachenwerdenCundPythonverwendet,dabeidesowohlinnerhalbals
auch außerhalb der Wissenschaft weitverbreitet sind. Spezielle wissenschaftliche
Programmiersprachen wie z.B. Fortran bieten im Vergleich dazu kaum Vorteile
undwerdendaherhierausgeklammert.AufBlack-Box-Programmeund-Methoden
wird, soweit dies möglich ist, verzichtet. Stattdessen werden die grundlegenden
Funktionenz.B.vonLinuxunddieeinfachstennumerischenMethodenbesprochen
undverwendet.IndenKap.8bis12folgteineEinführungindiewichtigstennume-
rischen Methoden, wobei zunehmend speziell auf die physikrelevanten Verfahren
eingegangenwird. DieThemen derPhysik werden erstin den Projekten (Kap.13
bis18)aufgegriffenundanhandvonBeispielendiskutiert. ImVordergrundstehen
dabeidieInhaltederComputerphysik.
V
VI Vorwort
Auf umfangreiche physikalische Diskussionen wird weitgehend verzichtet, da
dieEinführungsvorlesungenderPhysikhierfürbessergeeignetsind.Verzichtetwird
auch auf komplizierte Herleitungen, was meiner Erfahrung nach den Studenten
(meistens)entgegenkommt.DiesschafftRaum,umvermehrtaufpraktischeFragen
undAnwendungeneinzugehen,woraufesdiesemLehrbuch,nebenderVermittlung
derTechniken,schwerpunktmäßigankommt.
Auf einen Punktmöchteich ausdrücklichhinweisen: Das Wichtigstebeim Ar-
beitenmitdemComputeriststetsdasselbstständigeAusprobierenundÜben.Nur
sokannsich eindauerhafterLernerfolgeinstellen.ZuallenKapitelngibtesdaher
AufgabenmitsteigendemSchwierigkeitsgradzurÜbungundzurVertiefung.Die-
sesBuchmussimÜbrigennichtlinear„durchgearbeitet“werden.Eskannz.B.mit
den Projekten begonnen und auf die grundlegenden Kapitel zur Programmierung
undzudennumerischenMethodenbeiBedarfzurückgegriffenwerden.
Obwohl dieses Buch mit höchster Sorgfalt geschrieben und korrigiert wurde,
wird es möglicherweise trotzdem Fehler enthalten. Verbesserungsvorschläge, Be-
merkungenundsonstigeHinweisesinddaherjederzeitwillkommen.
Mein besondererDank gilt den Studierenden und Tutoren, die durch ihreTeil-
nahmeundMitarbeitandenComputerphysik-VorlesungenanderUniversitätKon-
stanzsehr viel zudiesem Lehrbuchbeigetragenhaben.Auch diezahlreichenDis-
kussionenmitKollegenundMitarbeiternwarenfürdieEntstehungdesBuchessehr
hilfreich. Dem Springer-Verlag möchteich für die Anregungzu diesem Lehrbuch
unddieprofessionelleundreibungsloseUnterstützungherzlichdanken.
Ichwürdemichfreuen,wenndiesesLehrbuchfürmöglichstvieleLeserzueinem
hilfreichenBegleiterwird.
Konstanz,Frühjahr2016 StefanGerlach
Abkürzungsliste
ASCII AmericanStandardCodeforInformationInterchange
BASH BourneAgainShell
BIOS BasicInputOutputSystem
BLAS BasicLinearAlgebraSubprograms
BTCS BackwardTime,CenteredSpace
CAS Computer-Algebra-System
CFL Courant-Friedrichs-Lewy(-Zahl)
CPU CentralProcessingUnit
DFT DiskreteFourier-Transformation
DGL Differenzialgleichung
FDTD FiniteDifference,TimeDomain
FEM Finite-Elemente-Methode
FFT FastFourierTransform
FIFO FirstIn/FirstOut
FTCS ForwardTime,CenteredSpace
GDGL GewöhnlicheDGL
GCC GNUCompilerCollection
GDB GNUDebugger
GMP GNUMultiplePrecision
GNU GNU’sNotUnix
GPL GNUGeneralPublicLicense
GPU GraphicsProcessingUnit
GSL GNUScientificLibrary
GUI GraphicalUserInterface
HPC HighPerformanceComputing
HTML HypertextMarkupLanguage
HTTP HypertextTransferProtocol
LGS LinearesGleichungssystem
IEEE InstituteofElectricalandElectronicsEngineers
IPC InterProcessCommunication
VII
VIII Abkürzungsliste
LAPACK LinearAlgebraPackage
LIFO LastIn/FirstOut
LU Lower/Upper(-Zerlegung)
MC Monte-Carlo(-Simulation)
MD Molekulardynamik
MKL (Intel)MathKernelLibrary
MPI MessagePassingInterface
MT19937 Mersenne-Twister19937
NFS NetworkFileSystem
NUMA Non-uniformMemoryAccess
OpenMP OpenMulti-Processing
OSI OpenSystemsInterconnection
PDGL PartielleDGL
POSIX PortableOperatingSystemInterface
RAM RandomAccessMemory
RNG RandomNumberGenerator
SMP SharedMemoryProcessing
SOR SuccessiveOverRelaxation
SSD SolidStateDrive
SSH SecureShell
TCP/IP TransmissionControlProtocol/InternetProtocol
USB UniversalSerialBus
Inhaltsverzeichnis
1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 WasistComputerphysik? . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 EntwicklungderComputerphysik . . . . . . . . . . . . . . . . . . . . 3
1.3 InhaltderComputerphysik. . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 ComputersimulationenundwissenschaftlichesRechnen . . . . . . 4
TeilI Computergrundlagen
2 Hard-undSoftware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 Betriebssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 DasBetriebssystemLinux . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.1 ZurHistorievonLinux . . . . . . . . . . . . . . . . . . . . . . 13
2.3.2 DiePhilosophievonUNIX/Linux . . . . . . . . . . . . . . . . 14
2.3.3 GNU-Projekt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.4 Linux-Distribution . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.5 GrafischeOberfläche . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.6 Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 ArbeitenmitLinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1 DieShell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.1 Shell-Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1.2 Shell-Variablenund-Aliasse . . . . . . . . . . . . . . . . . . . 19
3.1.3 Jobverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.4 Shell-ExpansionundTastaturkürzel. . . . . . . . . . . . . . . 21
3.2 DasDateisystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.1 WichtigeVerzeichnisse . . . . . . . . . . . . . . . . . . . . . . 22
3.2.2 Dateisystem–konkret . . . . . . . . . . . . . . . . . . . . . . . 23
IX
X Inhaltsverzeichnis
3.2.3 Zugriffsrechte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.4 Ein-undAusgabeumlenkung. . . . . . . . . . . . . . . . . . . 25
3.3 BenutzerundProzesse . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.1 Benutzerverwaltung . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.2 Prozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
TeilII ProgrammierenundDatenverarbeitung
4 ProgrammiereninC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1 GrundlagenderProgrammierung. . . . . . . . . . . . . . . . . . . . . 32
4.1.1 SoftwareEngineering . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 EinführunginC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.1 EigenschaftenvonC . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.2 „HalloWelt!“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2.3 „HalloWelt!“-Programmerklärt. . . . . . . . . . . . . . . . . 36
4.2.4 C-Variablenund-Operatoren . . . . . . . . . . . . . . . . . . . 37
4.2.5 DatentypenvonC. . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.2.6 Bedingungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.7 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2.8 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3 CfürFortgeschrittene. . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.1 Zeichen(ketten)undFelder . . . . . . . . . . . . . . . . . . . . 44
4.3.2 ZusammengesetzteDatentypen . . . . . . . . . . . . . . . . . 44
4.3.3 Zeiger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.4 DynamischeSpeicherverwaltung . . . . . . . . . . . . . . . . 47
4.4 HilfsmittelfürdieProgrammierung . . . . . . . . . . . . . . . . . . . 49
4.4.1 Kompilieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4.2 Fehlersuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.4.3 Versionsverwaltung. . . . . . . . . . . . . . . . . . . . . . . . . 52
5 ProgrammiereninPython . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.1 AllgemeineInformationenzuPython . . . . . . . . . . . . . . . . . . 55
5.2 DieProgrammiersprachePython . . . . . . . . . . . . . . . . . . . . . 56
5.2.1 VariablenundDatentypen. . . . . . . . . . . . . . . . . . . . . 56
5.2.2 Kontrollstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.3 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3 Python-Bibliotheken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6 WissenschaftlichesRechnen . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.1 WissenschaftlicheProgrammierung . . . . . . . . . . . . . . . . . . . 63
6.1.1 Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.1.2 WichtigeAlgorithmen . . . . . . . . . . . . . . . . . . . . . . . 67
6.1.3 Softwarebibliotheken. . . . . . . . . . . . . . . . . . . . . . . . 68
Description:Dieses Lehrbuch bietet dem Leser eine aktuelle Einführung in das Lösen von physikalischen Problemen mit dem Computer. Es werden die Grundlagen der Computernutzung, der Programmierung sowie der wichtigsten numerischen Methoden besprochen und anhand vieler Beispiele und Übungsaufgaben mit zunehmend