Visualisierung der Bewegung geladener Teilchen in elektromagnetischen Feldern Bachelor-Arbeit Patrick Daum Fachbereich Physik August 2004 . MATLABr is a registered trademark of The MathWorks Inc. For production information, please contact: The MathWorks Inc. 3 Apple Hill Drive Natick, MA 01760-2098, USA Phone: (508) 647-7000 EMail: [email protected] www.mathworks.com c NASA Space Science . Inhaltsverzeichnis 1 Einleitung 1 2 Bewegung von Teilchen in elektromagnetischen Feldern 3 2.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Gyration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Driftbewegungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3.1 2.3.2 Driften in homogenen Kraftfeldern . . . . . . . . . . . . . . . 6 2.3.1.1 Grundlage des Führungszentrums . . . . . . . . . . . 6 2.3.1.2 Ambipolare Drift . . . . . . . . . . . . . . . . . . . . 7 2.3.1.3 Gravitationsdrift . . . . . . . . . . . . . . . . . . . . 9 2.3.1.4 Diamagnetische (quasi)-Drift . . . . . . . . . . . . . 10 Driften in inhomogenen Kraftfeldern . . . . . . . . . . . . . . 11 2.3.2.1 Gradientendrift . . . . . . . . . . . . . . . . . . . . . 11 2.3.2.2 Krümmungsdrift . . . . . . . . . . . . . . . . . . . . 12 2.3.2.3 Polarisationsdrift . . . . . . . . . . . . . . . . . . . . 13 2.3.2.4 Adiabatische Invarianten . . . . . . . . . . . . . . . . 14 2.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 Numerische Beschreibung der Bewegung 17 3.1 Allgemeine Bewegungsgleichung . . . . . . . . . . . . . . . . . . . . . 17 3.2 Lösungsverfahren für DGL-Systeme . . . . . . . . . . . . . . . . . . . 18 3.3 Angewandte Lösungsverfahren . . . . . . . . . . . . . . . . . . . . . . 18 3.3.1 Euler Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3.2 Runge-Kutta Verfahren . . . . . . . . . . . . . . . . . . . . . . 20 3.3.2.1 Adaptive Schrittweite . . . . . . . . . . . . . . . . . 23 3.3.3 Burlisch-Stoer Verfahren . . . . . . . . . . . . . . . . . . . . . 24 3.3.4 Prädiktor-Korrektur Methode . . . . . . . . . . . . . . . . . . 25 3.3.4.1 Einschrittverfahren . . . . . . . . . . . . . . . . . . . 26 3.3.4.2 Mehrschrittverfahren . . . . . . . . . . . . . . . . . . 27 3.3.4.3 Adams-Bashforth-Moulton Verfahren . . . . . . . . . 28 3.4 MATLAB ODE Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 i 3.4.1 Implementierungen und Aufrufe der ODE-Solver“ . . . . . . 29 ” 3.4.1.1 Aufruf eines ODE Solvers . . . . . . . . . . . . . . . 30 3.4.1.2 ode23 Methode . . . . . . . . . . . . . . . . . . . . . 31 3.4.1.3 ode45 Methode . . . . . . . . . . . . . . . . . . . . . 32 3.4.1.4 ode15s Methode . . . . . . . . . . . . . . . . . . . . 32 3.4.1.5 ode113 Methode . . . . . . . . . . . . . . . . . . . . 32 3.5 Geschwindigkeitskriterium . . . . . . . . . . . . . . . . . . . . . . . . 32 3.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4 Visualisierung in MATLAB 4.1 Implementierung (GUI) 38 . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2 Mathematische Umsetzung . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3 Programmfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.3.1 Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.3.2 Screenshots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.3.2.1 Gyration . . . . . . . . . . . . . . . . . . . . . . . . 45 4.3.2.2 Driften . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.3.2.3 Bewegung im Dipolfeld . . . . . . . . . . . . . . . . . 46 4.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5 Zusammenfassung 49 6 Abstract 50 Literatur 51 A Formeln, Tabellen, Erläuterungen 53 A.1 Maxwellsche Gleichungen . . . . . . . . . . . . . . . . . . . . . . . . . 53 A.2 Zeitkonstanten der Bewegungen in Weltraumplasmen . . . . . . . . . 53 A.3 Erläuterung: MATLAB/MEX . . . . . . . . . . . . . . . . . . . . . . 53 B Ausgewählte Gleichungen 54 B.1 Saha Gleichung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 B.2 Gyration verktoriell . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 B.3 Gradientendrift (ausführlich) . . . . . . . . . . . . . . . . . . . . . . . 55 B.4 Simpson (Trapez-)Integration . . . . . . . . . . . . . . . . . . . . . . 56 ii C Programme 57 C.1 C-Programm: Runge-Kutta 4. Ordnung . . . . . . . . . . . . . . . . . 57 C.2 MATLAB: Runge-Kutta 4. Ordnung . . . . . . . . . . . . . . . . . . 58 C.3 Runge-Kutta-Merson Algorithmus . . . . . . . . . . . . . . . . . . . . 58 C.4 Prädiktor-Korrektur Methode . . . . . . . . . . . . . . . . . . . . . . 59 C.4.1 MATLAB: Prädiktor-Korrektur . . . . . . . . . . . . . . . . . 59 C.4.2 MATLAB: Simpson . . . . . . . . . . . . . . . . . . . . . . . . 60 C.5 Velocity-Verlet Algorithmus . . . . . . . . . . . . . . . . . . . . . . . 60 D MATLAB 61 D.1 particles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 D.2 eqMotion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 D.3 solvercontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Abbildungsverzeichnis 2.1 Gyrationsbewegung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Teilchenbahn und Führungszentrum . . . . . . . . . . . . . . . . . . . 6 ~ × B-Feld ~ 2.3 Teilchenbahn in einem E . . . . . . . . . . . . . . . . . . . 8 ~ × B-Drift ~ 2.4 Schema einer ambipoleren E . . . . . . . . . . . . . . . . . 8 2.5 Gravitationsdrift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.6 Diamagnetische Drift . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.7 Gradientendrift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.8 Krümmungsdrift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.9 Magnetischer Spiegel . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.10 Bewegung der Plasmateilchen im Magnetfeld . . . . . . . . . . . . . . 16 3.1 Euler-Approximation . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2 Schema Runge-Kutta (RK4) . . . . . . . . . . . . . . . . . . . . . . . 22 3.3 Fehlerentwicklung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.4 Burlisch-Stoer (Richardson Extrapolation) . . . . . . . . . . . . . . . 25 3.5 Implizites Euler Verfahren . . . . . . . . . . . . . . . . . . . . . . . . 26 3.6 Prädiktor Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.7 Adams-Bashforth-Moulton Integration . . . . . . . . . . . . . . . . . 28 iii 3.8 Genauigkeit der ODE Verfahren . . . . . . . . . . . . . . . . . . . . . 35 4.1 Layout des Programms . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2 Tokamak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.3 Anfangsbildschrim . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.4 Solver Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.5 Simulierte Gyration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.6 Simulierte Driften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.7 Simulierte Flugbahn in einem Dipolfeld . . . . . . . . . . . . . . . . . 47 B.1 Gyration vektoriell . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Tabellenverzeichnis 3.1 Laufzeiten von ODE-Solvern“ . . . . . . . . . . . . . . . . . . . . . 34 ” A.1 Zeitkonstanten (Beweg. Weltraumplasmen) . . . . . . . . . . . . . . . 53 iv Einleitung 1 Einleitung Die Visualisierung von physikalischen Vorgängen stellt in der modernen Physik ein unverzichtbares Hilfsmittel dar, sei es zur Darstellung komplexer Sachverhalte oder um neue Erkenntnisse über Vorgänge bei unterschiedlichen Parametern zu erhalten. Die wichtigste Grundlage dieser Visualisierungen ist die Numerik. Diese ist das Bindeglied zwischen einer analytischen Gleichung, die ein naturwissenschaftliches Problem beschreibt, und den Berechnungen auf Computern. Numerische Verfahren liefern hierbei eine approximative Lösung einer mathematisch exakten Gleichung, die aus einer physikalischen Fragestellung erwachsen ist. Diese Verfahren beschreiben somit die Wirklichkeit durch Zahlen. Was für Computer und die Mathematik zweckmäßig ist, wird für Menschen aber schnell unüberschaubar. Daher ist es nötig diese Datenmengen bzw. diese Ergebnisse entsprechend aufzubereiten. In Zeiten immer leistungsstärkerer Computer sind Softwarepakete zum numerischen Rechnen, in Wissenschaft und Lehre, nicht mehr wegzudenken. Hierbei bietet MATLABr (für MATrix LABoratory) von der Firma MathWorks ein mächtiges numerisches Softwarepaket zur Lösung diverser mathematischer Probleme und zur graphischen Darstellung der Ergebnisse. MATLABr dient im Gegensatz zu Computeralgebrasystemen nicht der symbolischen, sondern primär der numerischen Lösung von Problemen. Alle vorgestellten numerischen Pakete und ihre Optionen und Möglichkeiten beziehen sich auf das 13. und 14. Release (Versionen 6.5 und 7.0) von MATLABr . Natürlich unterscheiden sich die numerischen Methoden in Genauigkeit, Konvergenz, Stabilität, Effizienz und Schnelligkeit und müssen daraufhin genaustens geprüft werden. Ein komplexes, physikalisches Problem besteht in der Regel aus einer sequentiellen oder verketteten Anwendung dieser Methoden. Die Methoden selbst sind meist Standardverfahren und der Literatur zu entnehmen. Es können allerdings durch die Berücksichtigung neuer physikalischer Effekte Komplikationen auftreten, die im einfachsten Fall nur eine Modifikation der Methode(n), im schwierigsten Fall einen völlig neuen Zugang erfordern. Des weiteren wird es für Wissenschaftler immer wichtiger, ihre Forschungsergebnisse zu präsentieren, somit einer breiten Öffentlichkeit Rechenschaft über ihr Tun abzulegen. Hierbei ist es auf der einen Seite nötig, die Ergebnisse zu präsentieren und andererseits Erkenntnisse aus den Simulationen für eventuell durchzuführende Experimente zu gewinnen. Hauptanwendungsgebiet dieser Arbeit sind Visualisierungen von Einzelteilchenbewegungen in annähernd zeitlich konstanten Magnetfeldern. Dazu werden Erkenntnisse und bekannte Gleichungen aus der Plasma Physik verwendet und mit Hilfe von MATLABr die virtuelle Flugbahn eines Teilchens bei unterschiedlichen Parametern simuliert. Ein Magnetfeld beeinflußt die Bewegung geladener Teilchen durch die Lorentzkraft. Eine quantitative Beschreibung der Bewegungen geht von einer Kräftebilanz für ein einzelnes Teilchen aus. Mit Hilfe dieser Beziehung lassen sich die Einzelbewegungen durch Differentialgleichungen beschreiben. Dieses soll im ersten Teil dieser Arbeit geschehen. Es werden Bewegungsgleichungen für die unterschiedlichen Einzelteilchenbewegungen aufgestellt und erläutert. Die beschreibenden Differentialgleichungen sind nur in einigen Fällen analytisch lösbar, für die weiteren werden im zweiten Teil dieser Arbeit unterschiedliche numerische Lösungsverfahren vorge1 Einleitung stellt und in Bezug auf ihre Genauigkeit hin verglichen. Die Resultate dieser beiden Abschnitte werden in einem dritten Teil genutzt, um mit Hilfe von MATLABr eine Visualisierung der Flugbahnen zu simlieren. Den Abschluß dieser Arbeitet bildet ein Programm, welches die Bewegung der Teilchen in vorgegebenen elektromagnetischen Feldern moduliert und einen schematischen Einblick in die Wirkung dieser Felder auf die Teilchen ermöglicht. Es wird eine Brücke zwischen den theoretisch errechneten Datenvolumen und einer anschaulichen Visualisierung geschlagen. ” 2 Graue Theorie wird zur bunten Praxis“ (Stephen William Hawking) Bewegung von Teilchen in elektromagnetischen Feldern 2 Bewegung von Teilchen in elektromagnetischen Feldern Um die Bewegungen von Teilchen in elektromagnetischen Feldern zu beschreiben, ist es zunächst nötig, sich ein wenig mit dem Begriff des Plasmas zu beschäftigen. Das Wort Plasma (griech.: das Formbare) bezeichnet in der Physik ein vollständig oder teilweise ionisiertes Gas aus Elektronen und Ionen. Der Begriff des Plasmas wurde 1929 von Tonks und Langmuir eingeführt [35]. Bei hohen Temperaturen werden die Atome in Ionen und Elektronen aufgespalten. Der größte Teil der Materie im Weltall – Sterne und protostellare Wolken – ist im Plasmazustand. Hierbei gibt die Saha Gleichung (B.1) [32] den Betrag der Ionisation eines Gases bei einer Temperatur T im thermischen Gleichgewicht an. Von entscheidender Bedeutung für die folgenden Betrachtungen ist, dass das Plasma zwei unterschiedliche Charaktere“ ” besitzt. Je nach Dichte des Plasmas ist es als Flüssigkeit anzusehen und auch so mathematisch zu beschreiben und auf der anderen Seite muss man Einzelteilchenbewegungen betrachten. Es wird hier weniger über den Begriff Plasma geredet sondern vielmehr über Bewegungen in elektromagnetischen Feldern ohne Rückkopplung. Zunächst werden die theoretischen Grundlagen der Bewegungen und die charakteristischen Gleichungen vorgestellt. Diese führen zu der numerischen Berechnung von Teilchenbahnen und zu deren Visualisierung mit Hilfe von MATLABr . Hierzu betrachtet man bei vorgegebenen elektromagnetischen Feldern die Flugbahn eines einzelnen Teilchens. Hierbei wird die Rückwirkung der Teilchen – durch Raumladung und Ströme – auf die Felder außer Acht gelassen. Die betrachteten Felder unterliegen dabei den Maxwellschen Gleichungen1 . 2.1 Grundlagen Ausgangspunkt ist die Betrachtung einer Kräftebilanz, somit aller einzelnen Kräfte die auf ein Teilchen wirken. Es lässt sich für ein Teilchen der Ruhemasse m und der vorzeichenbehafteten Ladung q folgende NEWTONsche Bewegungsgleichung formulieren (alle Beschreibungen gehen von einer nicht relativistischen Betrachtung aus), es gilt ~ + F~ . m~v˙ = q ~v × B (2.1) Hierbei ist F~ eine geschwindigkeitsunabhängige Kraft, ~v˙ ~ die madie zeitliche Ableitung der Geschwindigkeit und B gnetische Flußdichte, somit der magnetische Fluss (Φ = R ~ dA) ~ pro Flächeneinheit. B ~ ist eine vektorielle Größe, Die magnetische Flussdichte B ihr Betrag gibt die Stärke des Magnetfeldes an. Die Richtung der magnetischen Flussdichte ergibt sich aus der Ausrichtung (gleichnamige Pole stoßen sich ab) und der Bewegung (bedingt durch die abstoßenden Kräfte) eines Probe-Dipols. Dieses ist in Analogie zur Definition des elektrischen Feldes zu 1 siehe Maxwellsche Gleichungen Anhang A.1 3 2.2 Gyration Bewegung von Teilchen in elektromagnetischen Feldern sehen, welches durch die Kraft auf eine Probe-Ladung ausgedrückt wird. Eine bewegte Ladung q erfährt eine Kraft. Die Lorentzkraft, sie ist die Kraft, die auf eine mit der Gewschwindigkeit ~v , durch ein Magnetfeld mit einer magnetischen Flussdichte ~ bewegte Ladung wirkt. Der Betrag der Kraft ist gegeben durch die GeschwinB, digkeit der Ladung, die Größe der Ladung, die magnetische Flussdichte und dem Winkel zwischen Geschwindigkeit und magnetischer Flussdichte. Diese Beziehung ist in Gleichung (2.1) dargestellt. Sie ist nur in einfachen Fällen (homogene bzw. zeitunabhängige Felder) analytisch lösbar. Für schwache räumliche Gradienten bzw. langsam zeitveränderliche Felder sollen im weiteren die soweit vorhandenen analytischen Löungen bzw. numerischen Näherungslösungen kurz skizziert werden. 2.2 Gyration Für eine erste Betrachtung ist es sinnvoll nur ein konstantes homogenes Magnetfeld anzunehmen. Dann vereinfacht sich Gleichung (2.1) zu ˙ ~ ~ = const . m~v = q ~v × B mit B (2.2) Nun lässt sich die Bewegung durch die feldlinienparallele ~vk und die feldliniensenkrechte ~v⊥ Komponente beschreiben, man erhält so m~v˙k = 0 m~v˙⊥ (2.3) ~ . = q ~v⊥ × B (2.4) Die Teilchenbewegung parallel zum Magnetfeld ist konstant v~k = const. . Für die mit der senkrechten Komponente verbundene kinetische Energie erhält man dEkin d 1 2 ˙ ~ = ~v⊥ · m · ~v⊥ = q~v⊥ · ~v⊥ × B = 0 . (2.5) = m~v dt dt 2 ⊥ Die kinetische Energie des Teilchens bleibt somit erhalten. Um die Flugbahn des Teilchens bei der Gyration zu verstehen, ist es nötig sich die Kräftebilanz anzusehen. Aus der Sicht eines außenstehenden Beobachters wirkt die Lorentzkraft als Zentripetalkraft und beschleunigt (Richtungsänderung ist Beschleunigung) das Elektron. Aus einem auf dem Elektron sitzenden Beobachters (Platzproblem) herrschen in diesem beschleunigten Bezugssystem Kräftegleichgewicht zwischen Lorentzkraft und Zentrifugalkraft, damit ergibt sich eine konstante Bahnkrümmung und demnach eine Kreisbewegung (vgl. Abb. 1(a)) und wenn vk = 0 eine geschlossene Kreisbahn. Der Radius rL dieser Kreisbahn lässt sich durch Gleichsetzen beider Kräfte bestimmen 2 ~ = |q|v⊥ sin ~v⊥ , B ~ ~er = mv⊥ = F~Zentripetal . F~Lorentz = |q| ~v⊥ × B rL Damit gilt für den Gyro- oder Larmor -Radius rL = 4 mv⊥ . |q|B (2.6) 2.2 Gyration Bewegung von Teilchen in elektromagnetischen Feldern Da die Richtung der Lorentzkraft vom Ladungsvorzeichen abhängt, ist die Umlaufrichtung für positiv und negativ geladene Teilchen entgegengesetzt. Hierbei ist der Mittelpunkt dieser Gyration das im folgenden beschriebene Führungszentrum (engl. guiding centre). Für die Kreisfrequenz der Gyration ergibt sich aus dem Larmorradius v⊥ |q|B ωB = = . (2.7) rL m Die Bewegung des Teilchens ist somit, für vk 6= 0, eine Spiralbahn um eine Führungsfeld-line (vgl. Abb. 1(b)). (a) Geschlossene Kreisbahn der Gyration (b) Orientierung der Gyration von Elektronen und Iovon Elektronen und Ionen; vk = 0 nen in einem homogenen konstanten Magnetfeld; vk 6= 0. Prinzip der Führungs-feld-line (Quelle (übersetzt): [4]) Abbildung 2.1: Gyrationsbewegung Die Newtonsche Bewegungsgleichung der Gyration ist analytsich lösbar. Hierzu betrachtet man ein kartesisches Koordinatensystem, dessen z-Komponente in Richtung ~ = (0, 0, Bz ) ist. Es ergibt sich für Gleichung (2.2) des Magnetfeldes zeigt, somit B in Koordinatenschreibweise folgendes Gleichungssystem q vy Bz m q = − vx Bz m = 0. v̇x = + v̇y v̇z (2.8) Durch Kombination der ersten beiden Gleichungen erhält man die Gleichung eines harmonischen Oszillators qBz v̈x = − m 2 vx = −ωB2 vx (2.9) v̈y = − qBz m 2 vy = −ωB2 vy , (2.10) hierbei ist die Frequenz des Oszillators, die im vorhinein bestimmte Gyro-kreisfrequenz. Die allgemeine Lösung dieser Differentialgleichungen haben die Form vx = v⊥ cos (Ωt + φ0 ) vy = −v⊥ sin (Ωt + φ0 ) mit Ω als Gyrofrequenz Ω = +ωB für Ionen und Ω = −ωB für Elektronen, φ0 ist die initialisierende Phase. Die durch die Lorentzkraft hervorgerufene Gyration eines geladenen Teilchens in einem Magnetfeld ist elementar, jede weitere Beschreibung von Bewegungen in elektromagnetischen Feldern hat als Grundlage die Gyration des Teilchens um eine Führungs-feld-line (siehe auch W.H. Kegel [15]). 5 2.3 Driftbewegungen 2.3 2.3.1 Bewegung von Teilchen in elektromagnetischen Feldern Driftbewegungen Driften in homogenen Kraftfeldern Zusätzlich zur oben beschriebenen Lorentzkraft kann in der Bewegungsgleichung eine weitere Kraft F~ hinzutreten. In den in dieser Arbeit angestellten Betrachtungen von elektromagnetischen Feldern, tritt zum Magnetfeld die Kraft, die durch das ~ Es ergeben sich im elektrische Feld auf ein Teilchen ausgeübt wird, somit F~ = q E. allgemeinen keine geschlossenen Kreisbahnen mehr. Die Teilchen driften in diesen Feldern, dabei resultieren die Bewegungen aus einer Änderung des Larmorradiusses während einer Gyration, aus Änderungen der Teilchengeschwindigkeiten oder aus Änderungen im Magnetfeld. Um die Bewegungen in solchen Feldern zu beschreiben, macht man den sogenannten guiding centre“ Ansatz. Dieser wird im folgenden ” dargestellt. 2.3.1.1 Grundlage des Führungszentrums Das guiding centre“ wurde von H. Alfvén [1] eingeführt. Dieser Ansatz geht da” von aus, dass die durch die Kraft F~ verursachte Bewegung der Gyration überlagert wird. Es ergibt sich eine Bewegung des Führungszentrums ~rgc (d.h. der Mittelpunkt des Gyrationskreises) diese wird mit der Gyrationsbewegung überlagert. Dieses wird ausgedrückt durch den Vektor ~rL , der vom Ort ~r des Teilchens zum Gyrationszentrum zeigt und dessen Betrag den Wert des Larmorradiusses hat. Somit kann man nach Abb. 2.2 schreiben vgl.Glg.(2.6) m ~. ~rgc = ~r + ~rL mit ~rL = ~v × B (2.11) |q|B 2 Dann stellt ~rgc die über die Gyrationsbewegung gemittelte Bahnkurve des Teilchens dar. Abb. 2.2 verdeutlicht die beschriebene Geometrie2 . Abbildung 2.2: Aufspaltung der Bewegung eines Teilchens im Magnetfeld mit äußerer Kraft in die Gyrationsbewegung ~rL und die Bewegung des Führungszentrums ~rgc (Quelle: Max Planck Institut für Plasmaphysik) Die Geschwindigkeit des Führungszentrums ~vgc lässt sich nun mit Hilfe der Bewegungsgleichungen ausdrücken, hierbei ergibt sich unter Annahme eines zeitlich konstanten Magnetfeldes Glg.(2.1) m ˙ 1 ~ ˙ ~ ~ ~vgc = ~rgc = ~v + ~v × B = ~v + F + q~v × B × B (2.12) |q|B 2 |q|B 2 2 6 genauere vektorielle Beschreibung siehe Anhang B.2 2.3 Driftbewegungen Bewegung von Teilchen in elektromagnetischen Feldern der letzte Ausdruck lässt sich mit Hilfe der Vektoridentität ~ ×B ~ = ~v · B ~ B ~ − B 2~v = B 2~vk − B 2~v = −B 2~v ~v × B (2.13) weiter vereinfachen. Es ergibt sich ~vgc = ~v + ~ ~ F~ × B F~ × B − ~ v = ~ v + . ⊥ k |q|B 2 |q|B 2 (2.14) Somit kann man die Geschwindigkeit des Führungszentrums in zwei Anteile zerlegen. ˙ ~ ~ ~ Einmal in die Parallelbewegung, diese ist durch m~v k = Fk wegen ~v × B ⊥ B ~ Da diese trotz konstanter gegeben und in eine Bewegung senkrecht zu F~ und B. Kraft nicht beschleunigt, sondern mit konstanter Geschwindigkeit (solange F~ 6= F~ (t) ~ 6= B(t)) ~ und B erfolgt, wird sie ähnlich der mittleren Elektronenbewegung beim Transport als Driftgeschwindigkeit ~vF D bezeichnet. Sie ist gegeben durch ~vF D = ~ F~ × B . |q|B 2 (2.15) Im folgenden sollen verschiedene Driften erläutert werden die aufgrund von unterschiedlichen Kräften F~ zustandekommen. 2.3.1.2 Ambipolare Drift In einem konstanten Magnetfeld wirkt auf ein geladenes Teilchen die Lorentzkraft, es ensteht eine Gyrationsbewegung. In einem elektrischen Feld, werden die geladenen Teilchen durch die Coloumbkraft beschleunigt, hierbei werden positiv geladene Teilchen in Feldrichtung beschleunigt und negativ geladene entgegen der Feldrichtung. Betrachtet man nun ein senkrecht zum magnetischen Feld stehendes elektrisches Feld, so wird die Ladungstrennung im elektrischen Feld durch die Gyration im Magnetfeld aufgehoben. Es ensteht eine Drift des Gyrationszentrums in der zu beiden ~ × B-Richtung. ~ senkrechten E Um diese Bewegung zu beschreiben, verwendet man den beschriebenen guiding centre“-Ansatz. Beide Felder sollen dabei homogen und ~ =”(0, 0, Ez ) und B ~ = (0, By , 0) (vgl. Abb. 2.3). Dann ergibt sich stationär sein E Gleichung (2.1) in Analogie zu den obigen Betrachtungen zu v̇x = − q vz By m (2.16) v̇y = 0 q v̇z = (Ez + vx By ) . m (2.17) (2.18) Die Bewegung längs der Magnetfeldlinie ist nun konstant beschleunigt, aber unabhängig von der x-z-Bewegung, somit lässt sich diese gesondert betrachten. Es ergibt sich für die Bewegung in der x-z-Ebene v̈x = −ωB2 (vx + Ez /By ) v̈z = −ωB2 vz . (2.19) Somit lässt sich die Bewegung in z-Richtung durch die schon bekannte harmonische Oszillation beschreiben und lösen. Für die x-Richtung ist eine solche Beschreibung erst durch ein bewegtes Bezugssystem möglich ṽx = vx + Ez /By , wobei sich dieses 7 2.3 Driftbewegungen Bewegung von Teilchen in elektromagnetischen Feldern mit der Geschwindigkeit −Ez /By in negative x-Richtung bewegt. So erhält man auch hier eine harmonische Oszillation. Analog zu den oben angeführten allgemeinen Lösungen, ergibt sich vx = v⊥ cos (ωB t) − Ez /By vz = v⊥ sin (ωB t) . (2.20) (2.21) Die Bahnkurve dieser Bewegung ist in Abb. 2.3 dargestellt. Mathematisch betrachtet stellen sich im dreidimensionalen Fall Zykloide ein. ~ × B-Drift ~ Abbildung 2.3: E von Elektronen und Ionen, vEBD = E/B (Quelle: [4]) Diese Beschreibung ist identisch mit der aus Gleichung (2.15) gefolgerten vektoriellen ~ ist und somit Schreibweise, wobei die Kraft F~ = q E ~vEBD = ~ ×B ~ E . B2 (2.22) Die Driftgeschwindigkeit ist somit ladungsunabhängig und für Elektronen und Ionen gleich groß (vgl. Abb. 2.3). Dieses führt zu einer ganzheitlichen Bewegung des Plasmas senkrecht zum elektrischen und magnetischen Feld. Man kann sich das Zu~ × B-Drift ~ standekommen der E auch anhand von energetischen Überlegungen klar machen. Auf der Seite hoher potentieller Energie ist die kinetische Energie der Teilchen klein und der momentane Gyrationsradius klein. Auf der Seite niedriger potentieller Energie hat das Teilchen kineAbbildung 2.4: Schema einer ambipoleren tische Energie aus dem elektrischen Feld aufgenommen und der Gyrationsradius ist ~ × B-Drift ~ E entsprechend größer als der mittlere Gyrationsradius. Folglich ergibt sich für die Teilchen ein Versatz in x-Richtung. Der Umlaufsinn von Elektronen und Ionen ist entgegengesetzt und infolge der entgegengesetzten Ladung sind Energiegewinn und -verlust gerade vertauscht. Somit folgt, dass die Drift für Elektronen und Ionen in dieselbe Richtung weist. Die sich ergebende Drift ist damit weder von der Ladung, noch von der Masse der Teilchen abhängig. ~ Das Plasma führt daher im E-Feld eine Drift aus, bei der sich alle Teilchen mit der ~ und E ~ bewegen. Infolge diegleichen Geschwindigkeit vEBD = E/B senkrecht zu B ser Bewegung verschwindet (mitbewegtes System) das elektrische Feld gemäß der 8 2.3 Driftbewegungen Bewegung von Teilchen in elektromagnetischen Feldern ~′ = E ~ −~v × B ~ = 0 und Transformationseigenschaft der Maxwellschen-Gleichungen E das Teilchen führt nur eine Gyrationsbewegung aus (vgl. Abb. 2.4). Die Drift führt allerdings aufgrund ihres ambipolaren Charakters (keine Trennung der Ladungen) zu keinem Strom. 2.3.1.3 Gravitationsdrift Bei der Gravitationsdrift kann analog zu der ambipolaren Drift vorgegangen werden. Die Teilchen erfahren in der Äquatorebene eine ähnliche Situation gekreuzter Felder. Hier kreuzt das horizontale Erdmagnetfeld die vertikale Gravitationskraft F~G = m~g , somit lässt sich Gleichung (2.1) schreiben als ~ + m~g m~v˙ = q ~v × B (2.23) mit g — Gravitationskonstante, hierbei ist die höhenabhängige Gravitationskong0 stante zu wählen g(h) = (1+h/R , mit g0 der mittleren Erdbeschleunigung in Mee)2 E reshöhe ≈ 9.81 m/s2 , h der Höhe über Normal-Null und RE dem mittleren Erdradius. Dann lässt sich die Driftgeschwindigkeit analog zu Abschnitt 2.3.1.2 angeben, hierbei gilt ~ m~g × B ~vGravD = . (2.24) qB 2 Die Driftgeschwindigkeit ist in diesem Fall von der Ladung und der Masse der Teil~ × B-Drift ~ chen abhängig. Wie auch bei der E ändert sich der Larmorradius kontinuierlich, allerdings ist in diesem Fall die Gravitationskraft vom Vorzeichen der Ladung unabhängig. Somit sind die Punkte der kleinen und großen Gyrationsradien die gleichen, aber aufgrund der unterschiedlichen Ladungen, sind die Richtungen entgegengesetzt (vgl. Abb. 2.5, zur Veranschaulichung nur am Äquator). Abbildung 2.5: Gravitationsdrift Es kommt zu einer Ladungstrennung, daher kann in äquatorialer Richtung ein Nettostrom, welcher die Summe aus Elektronen- und Ionendrift darstellt, festgestellt werden g (2.25) jGravD = n (mi + me ) , B mit n — Dichte der Teilchen. 9 2.3 Driftbewegungen Bewegung von Teilchen in elektromagnetischen Feldern 2.3.1.4 Diamagnetische (quasi)-Drift Vollständigkeitshalber sei an dieser Stelle noch eine weitere Drift, die in einem homogenen Magnetfeld auftreten kann genannt. Diese ist die diamagnetische Drift. Die Namensgebung drückt aus, dass das durch den diamagnetischen Strom jD hervorgerufene Magnetfeld ein entgegengesetztes Vorzeichen zum äußeren Magnetfeld hat und das gesamte Magnetfeld daher absenkt. Die diamagnetische Drift wird durch einen Druckgradienten hervorgerufen. Die diamagnetische Drift gehört streng genommen zur Magnetohydrodynamik. Hierbei wird der Plasmastrom nicht als Einzelteilchenbewegungen aufgefasst sondern der Strom als Flüssigkeit angesehen. Unter bestimmten Voraussetzungen, lässt sich aber zeigen, dass die Lorentzkraft gleich dem Druckgradienten und der elektrischen Kraft ist. Diese Drift kann somit unter die Einzelteilchenbewegungen subsumiert [7] werden. Hierzu geht man davon aus, dass die (gerichtete) Flüssigkeitsgeschwindigkeit ~v von der Größenordnung einer Teilchendriftgeschwindigkeit ist. Des weiteren werden nur Zeitskalen ω/ωB ≪ 1 betrachtet. Somit muss man nur die Kraft betrachten, welche auf ein Teilchen wirkt. Damit ergibt sich, dass die Lorentzkraft allein durch die elektrostatische Kraft und den Druckgradienten kompensiert wird. Die elektrostatische Kraft stellt sich als ~ × B-Drift ~ die oben beschriebene E dar. Im folgenden soll nur der Teil der Drift besprochen werden, der durch den Druckgradienten hervorgerufen wird. DieAbbildung 2.6: Diamagnetiser Teil lässt sich ausdrücken als die Kraft, welche sche Drift auf ein Volumenelement ∆V wirkt. Diese ist gegeben durch die Druckdifferenz. Daraus folgt F/∆V = −∇p. Im Volumenelement befinden sich ∆N = n∆V Teilchen, so dass pro Teilchen die Kraft −∇p/n ausgeübt wird. Verwendet man Gleichung (2.15) so ergibt sich ~vDD = − ~ ×B ~ ∇p . nqB 2 (2.26) Diese Drift ist in Abb. 2.6 dargestellt, zur Vereinfachung wird nur der Fall für Elektronen dargestellt. Man erkennt, dass der Druckgradient durch die Dichte ne der Teilchen verursacht wird (Te = const.). Dann nimmt längs des Druckgradienten die Zahl der gyrierenden Teilchen zu. An einem beliebigen Punkt im Plasma bewegen sich also mehr Teilchen in positive y-Richtung; die Elektronen scheinen in y-Richtung zu driften. Hierbei ist allerdings zu beachten, dass es sich nicht um eine Massenbewegung handelt, die Teilchen selbst bleiben an ihrem Ort, es entsteht jedoch ein Strom ~ ~ ~jD = ∇p × B . B2 (2.27) Dieser ist so gerichtet, dass das von ihm erzeugte Magnetfeld das ursprüngliche Magnetfeld im Gebiet hohen Druckes schwächt. 10 2.3 Driftbewegungen 2.3.2 Bewegung von Teilchen in elektromagnetischen Feldern Driften in inhomogenen Kraftfeldern In den vorherigen Beschreibungen wurde angenommen, dass es sich bei den Kraftfeldern um konstante homogene Felder handelt. Im folgenden sollen Bewegungen in elektromagnetischen Feldern beschrieben werden, die zeitlich und räumlich nicht konstant sind. Hierzu werden die einzelnen Aspekte der Inhomogenitäten genauer ~ = B(~r, t), sowie das elekuntersucht. Im allgemeinen Fall wenn das Magnetfeld B ~ = E(~r, t) raum- und zeitabhängig sind, kann man die Bewegungsgleitrische Feld E chung nicht mehr geschlossen lösen. Dennoch lässt sich an dieser Stelle ein Ansatz mit dem guiding centre“ machen. Hierzu nimmt man an, dass die räumliche Aus” dehnung der Inhomogenität bzw. die zeitliche Variation klein gegen die typischen Skalen der Gyrationsbewegung sind. Man betrachtet dann nicht mehr die schnelle Gyration sondern stützt sich gemäß dem guding centre“-Ansatz auf das langsamere ” Fortschreiten des Führungszentrums und somit eine Kreisbahn des Teilchens. Somit lässt sich die Bewegung auf die Gleichungen der Gyration zurückführen. 2.3.2.1 Gradientendrift Zunächst wird ein Magnetfeld betrachtet, dass einen Intensitätsgradienten aufweist, der senkrecht zur Feldlinienrichtung weist. Die Bewegung geladener Teilchen in einem solchen Feld ist in Abb. 2.7 dargestelt. Abbildung 2.7: Teilchenbewegung im inhomogenen Magnetfeld. Betrachtet wird ein Magnetfeld, bei dem der Gradient des Feldes senkrecht auf den Feldlinien steht (Quelle (geändert): [30]) ~ × B-Drift ~ In Analogie zu den Beschreibungen der E erwartet man, dass der instantane Gyrationsradius im Bereich einesschwächeren Magnetfeldes größer ist und daher ~ und zu ∇B ~ erfolgt. Um diese Drift zu beschreiben ist es eine Drift senkrecht zu B nötig nach Gleichung (2.15) die Kraft zu beschreiben welche auf ein Teilchen wirkt. Im inhomogenen Magnetfeld erfahren die Teilchen eine Kraft durch den Gradienten der Feldstärke. Diese lässt sich durch das magnetische Moment µ (siehe 2.3.2.4) und 11 2.3 Driftbewegungen Bewegung von Teilchen in elektromagnetischen Feldern dem Gradienten beschreiben3 . Für die Kraft gilt q ~ ~ F = ±µ∇B mit B = Bx2 + By2 + Bz2 . (2.28) Hierbei ergibt sich das magnetische Moment des Teilchens aus dem Produkt des mit der Gyrationsbewegung vebundenen Kreisstroms und der vom Strom umrandeten Fläche, es gilt 2 mv⊥ ωB 2 πrL = . (2.29) µ = IA = q 2π 2B Setzt man diese Beziehung in Gleichung (2.15) ein, so ergibt sich für die Driftgeschwindigkeit in einem Gradientenfeld ~vGD = ± 2 ~ ×B ~ mv⊥ µ∇B ~ ×B ~. = ± ∇B qB 2 2qB 3 (2.30) Die Teilchen driften somit senkrecht zur Magnetfeldrichtung und senkrecht zum Magnetfeldgradienten. Anschaulich läuft das Teilchen bei der ausgeführten Gyration in Bereiche unterschiedlicher Magnetfeldstärke und dadurch ändert sich innerhalb der Gyration der Radius. Als Beispiel kann man sich eine diskrete Sprungstelle in der Magnetfeldstärke vorstellen. Oberhalb der Sprungstelle sei ein starkes Magnetfeld und unterhalb ein schwaches, so lässt sich die Bewegung dadurch beschreiben, dass sich der Larmorradius antiproportional zur Stärke des Magnetfeldes verhält. In dem Beispiel der Sprungstelle wird das Teilchen somit im Bereich unterhalb größere und oberhalb kleinere Kreisbahnen beschreiben. Somit bewegt sich das Teilchen an der gedachten Sprungstelle entlang, nach dem Prinzip zwei vor einen zurück“. Gleiches ” gilt für einen kontinuierlichen Gradienten der Magnetfeldstärke. Hier kann man sich den Gradienten als infinitisimal kleinen Abstand der Sprungstelle denken. 2.3.2.2 Krümmungsdrift In zweiten Fall sollen gekrümmte Magnetfeldlinien betrachtet werden. Diese Krümmung wird im allgemeinen durch den Gradienten der magnetischen Feldstärke hervorgerufen. Folgen die Teilchen den Magnetfeldlinien, so erfahren sie im gekrümmten Magnetfeld aufgrund ihrer Parallelgeschwindigkeit eine Zentrifugalkraft. Die Driftgeschwindigkeit der Teilchen in diesem gekrümmten Feld setzt sich somit zu einem Anteil aus der noch zu bestimmenden Krümmungsdrift und zum anderen aus der Gradientendrift zusammen. Um die Krümmungsdrift zu bestimmen, geht man zunächst von einem Magnetfeld Abbildung 2.8: Krümm- ohne Gradienten aus. Zunächst muss die mittlere Zentriungsdrift (Quelle fugalkraft beschrieben werden, die ein Teilchen aufgrund (geändert): [27]) seiner Parallelgeschwindigkeit erfährt. Hierbei gilt mvk2 ¯~ ~eRC . FC = RC 3 12 Beschreibung der Näherung siehe Anhang B.3 (2.31) 2.3 Driftbewegungen Bewegung von Teilchen in elektromagnetischen Feldern Mit dieser mittleren Kraft, lässt sich nach Gleichung (2.15) die Geschwindigkeit der Krümmungsdrift bestimmen, es ergibt sich ~vCD = ~C × B ~ mvk2 R . qRC2 B2 (2.32) Um nun ein reales Feld zu beschreiben ist es nötig auch die Gradientendrift zu beschreiben. Unter Vakuumbedingungen lässt sich sagen, dass das Feld wirbelfrei ~ = 0 . Aus Abb. 2.8 ergibt sich ist ∇ × B dBr ds =− RC Bφ ⇒ 1 1 ∂Br =− RC Bφ ∂s (2.33) Damit lässt sich der Feldgradient aus dem Krümmungsradius der Magnetfeldlinien ~ C lässt sich nun ein relativer Gradient abschätzen. Unter Verwendung des Vektors R angeben. Es gilt ~C R ∇|B| =− 2 . (2.34) |B| RC Mit Hilfe dieser Abschätzung lässt sich nun die Gradientendrift angeben ~vGD = ∓ v⊥ rL ~ ~ C |B| . B×R 2 B RC2 (2.35) Um eine realitätsnahe Aussage über die Krümmungsdrift machen zu können, kombiniert man beide Komponenten. Somit lässt sich abschließend schreiben ~vCD + ~vGD m = q vk2 1 2 + v⊥ 2 ~ ~ RC × B , RC2 B 2 (2.36) Durch die Abhängigkeit von dem Quadrat der Geschwindigkeiten, verstärken sich die beiden Driften. In der Ionosphäre überwiegt die Krümmungsdrift gegenüber der Gravitationsdrift. 2.3.2.3 Polarisationsdrift Bisher wurden Felder mit einer Inhomogentität der magnetischen Feldintensität betrachtet, nun soll die Bewegung in einem zeitlich veränderlichen elektrischen Feld genauer beschrieben werden. Hierzu nimmt man ein elektrisches Feld an, welches mit ω0 oszilliert, somit E(t) = E0 cos (ω0 t) ist. Zur Beschreibung, bietet sich ein elektrisches Feld, welches senkrecht zu den Magnetfeldlinien liegt, an. Des weite˙ ~ ~ ren lässt sich Gleichung (2.1) mit F (t) = q E(t) annehmen und man erhält m~v = ~ + F~ (t) = q ~v × B ~ + q E(t). ~ q ~v × B Betrachtet man zunächst ein elektrisches ~ Feld E(t) = (Ex (t), 0, 0) das senkrecht zum Magnetfeld orientiert ist, lassen sich die Gleichungen für die x- und y-Komponente wieder entkoppeln und man erhält für das Fortschreiten in x-Richtung ! Ė 1 x 2 . (2.37) ~v¨x = −ωB vx ∓ ωB Bz 13 2.3 Driftbewegungen Bewegung von Teilchen in elektromagnetischen Feldern Führt man nun die schon oben beschriebene Koordinatentransformation ein, so erhält man v̈x = vx ∓ Ėx /ωB Bz . Somit ist die Gyrationsbewegung mit einer Polarisationsdrift überlagert. Für die Geschwindigkeit dieser Polarisationsdrift gilt allgemein ~vP D ~˙ 1 E =± , ωB B (2.38) sie ist in Richtung des elektrischen Feldes gerichtet, gleichzeitig findet noch eine ambipolare Drift im elektrischen Feld statt. 2.3.2.4 Adiabatische Invarianten Aus der Mechanik ist bekannt, dass bei einer periodischen Bewegung, zusätzlich zu den Erhaltungsgrößen Energie, Impuls und Drehimpuls, weitere Invarianten der Bewegung vorhanden sind. Somit die Größen nicht mehr konstant bleiben sondern nur noch im Sinne der verschiedenen Ordnungen der Störungstheorie konstant sind. So bleiben die einzelnen Größen nur noch im Sinne einer Betrachtungsweise konstant. Zunächst betrachtet man das Wirkungsintegral um im folgenden mit Hilfe der adiabatischen Invarianten die Periodizität von Bewegungen der Teilchen zu beschreiben. Für das Wirkungsintegral gilt I I = p dq (2.39) wobei q eine verallgemeinerte Koordinate und p der zugeordnete Impuls ist. Das Integral ist über die Periode der Bewegung auszuführen. Diese Invarianten haben die Dimension einer Wirkung. Die Definition durch Gleichung (2.39) hat den Vorteil, dass sie auch bei kleinen Störungen der Periodizität unbeeinflusst bleibt. Eine kleine Störung ist in diesem System derart zu sehen, dass ein Teilchen nach einem Umlauf nicht mehr an den selben Ort zurückkehrt. Die Invariante wird dann als adiabatische Invariante des Systems bezeichnet. Abbildung 2.9: Bewegung eines Teilchens im magnetischen Spiegel (Quelle (geändert): [13]) I p dq = Z2π Dieses System lässt sich nun auf die Bewegung eines Teilchens im Magnetfeld übertragen. Wenn man unter der periodischen Bewegung des Teilchens die Kreisbahn versteht, welche ein gyrierendes Teilchen ausführt, so bedeutet eine Störung, dass ∇B ≪ B/rL . Dann kann man als verallgemeinerte Koordinate die Winkelkoordinate der Gyrationsbewegung wählen und der zugehörige Impuls ist der senkrechte Drehimpuls des Teilchens. Es ergibt sich somit auf der Kreisbahn mωB rL2 dΦ = 4π 2 m mv⊥ m = 4π µ . q 2B q (2.40) 0 Für ein festes m/q ist somit das magnetische Moment µ eine adiabatische Invariante der Bewegung. Man bezeichnet µ auch als die erste adiabatische Invariante. 14 2.4 Zusammenfassung Bewegung von Teilchen in elektromagnetischen Feldern Diese erste Invariante wird dazu verwendet, die Bewegung eines Teilchens in einem sogenannten magnetischen Spiegel zu beschreiben. Darunter versteht man die Reflexion eines Teilchens im Gebiet höherer Magnetfeldstärke. Kommt ein Teilchen in den Bereich höherer Magnetfeldstärke, so nimmt wegen der Invarianz des magneti2 2 schen Momentes µ = mv⊥ /2B = const. die senkrechte Energie 1/2 mv⊥ im gleichen Maße wie B zu. Da gleichzeitig Energieerhaltung gilt, muss die parallele Komponente der Geschwindigkeit abnehmen. Bei einer völligen Abnahme der parallelen Geschwindigkeit, kann das Teilchen nicht weiter in die Richtung höherer Feldstärke vordringen, die Flugbahn dreht an der sogenannten Reflexionsebene um. Dieses ist in Abb. 2.9 dargestellt. Wenn man zwei magnetische Spiegel kombiniert, erhält man eine magnetische Flasche. Die Teilchen werden zwischen den beiden Enden der magnetischen Flasche hin und her reflektiert, diese Situation herrscht im Dipolfeld der Erde vor. Mit dieser Bewegung ist die zweite Invariante verknüpft, die longitudinale Invariante. Wenn ein geladenes Teilchen zwischen den zwei Spiegelpunkten gefangen ist, vollführt es eine Oszillation (vgl. Abb. 2.10). In Abb. 2.10 ist die Besonderheit des Erdmagnetfeldes aufgezeigt. Dieses erzeugt durch seine Geometrie magnetische Flaschen, so dass Teilchen aus der äquatorialen Ebene zu den Polen wandern. Diese Bewegung wird allerdings noch durch die Driften überlagert. Eine dritte adiabatische Invariante ist die Flussinvariante, auch diese ist verknüpft mit der guiding centre“-Drift. Diese Invariante besagt, dass der ” magnetische Fluss, welcher durch eine Kreisbahn läuft, konstant ist. 2.4 Zusammenfassung Die in diesem Abschnitt gemachten Beschreibungen der Bewegungen dienen dazu, ein genaueres Verständnis der Bewegungen von geladenen Teilchen in elektromagnetischen Feldern zu erlangen und die physikalischen Grundlagen zu erläutern. Über die beschriebenen Grundlagen ist eine numerische Behandlung der Bewegungsgleichungen möglich. Für die Beschreibung wurde die Bewegung eines einzelnen Teilchens ohne Wechselwirkungen betrachtet. Jedes Teilchen führt als eine Art Basisbewe” gung“ die Gyration um die lokale Feldlinie aus. Diese kann man durch den Larmorradius und die Gyrationsfrequenz charakterisieren. Des weiteren wurde für die Beschreibungen der Ansatz gemacht, dass sich die Bewegung eines Teilchens durch ein guiding centre“ annähern lässt. Hierbei wird die Bewegung aufgeteilt in die ” eigentliche Gyration und die Bewegung des Mittelpunktes. Die Teilchen werden wie oben beschrieben durch die Kräfte des magnetischen- sowie des elektrischen Feldes beeinflusst und auf ihre Flugbahnen gedrängt. Diese Kräfte spiegeln sich in Gleichung (2.1) wieder. Alle Bewegungen von geladenen Teilchen in Weltraumplasmen werden durch diese geprägt und führen zu den im erdnahem Weltraum messbaren (Ringströme) und sichtbaren (Polarlichter) Phänomenen. Die Bewegungen lassen sich grob zu den in Abb. 2.10 dargestellten zusammenfassen. Hierbei handelt es sich um die Gyration um die lokale Feldlinie, um eine Oszillationsbewegung entlang dieser Feldline und der überlagerten azimutalen Drift um die Erde4 . In diesem Abschnitt wurden die mathematischen Grundlagen der einzelnen Bewegungen beschrieben und diese so weit wie möglich analytisch gelöst. Um für 4 siehe Zeitkonstanten der Bewegungen in Weltraumplasmen Anhang A.2 15 2.4 Zusammenfassung Bewegung von Teilchen in elektromagnetischen Feldern Abbildung 2.10: Bewegung der Plasmateilchen im Magnetfeld (Quelle: [33]) die Visualisierung die Felder in beliebiger Kombination und Struktur berechenbar zu machen, wird das Hilfsmittel die Numerik eingestezt. So ist es möglich, die Bewegungen von geladenen Teilchen in elektromagnetischen Feldern, die durch die Newton’sche Bewegungsgleichung beschrieben werden mit dem Computer zu berechnen und diese Rechenergebnisse graphisch in Form der Visualisierung darzustellen. Die numerische Beschreibung der Bewegungen wird im folgenden Abschnitt erläutert. 16 Numerische Beschreibung der Bewegung 3 Numerische Beschreibung der Bewegung Um im folgenden eine numerische Beschreibung der Bewegungsgleichungen aus Abschnitt 2 machen zu können, ist es zunächst nötig, die einzelnen Verfahren zu beschreiben, die es ermöglichen Differentialgleichungssysteme numerisch zu lösen (vgl. [26, 29]). Dieses soll im folgenden Abschnitt geschehen. Die einzelnen Verfahren werden vorgestellt und gegeneinander abgewogen. Zusammenfassend wird beschrieben, welche Verfahren bei der Visualisierung (in Abschnitt 4) Anwendung gefunden haben. 3.1 Allgemeine Bewegungsgleichung ~ in einem kartesischen Koordinatensystem Zunächst wird Gleichung (2.1) mit F~ = q E für die einzelnen Komponenten betrachtet, dann lässt sich schreiben v̇x Ex vy Bz − vz By q q ~v˙ = v̇y = Ey + vz Bx − vx Bz . (3.1) m m v̇z Ez vx By − vy Bx So ergibt sich ein Gleichungssystem aus gewöhnlichen Differentialgleichungen (engl. ordinary differential equations (ODE’s)) welches zur Beschreibung der Bewegung gelöst werden muss. In Abschnitt 2 wurden die Bewegungen so weit wie möglich analytisch beschrieben und versucht eine analytische Lösung zu finden. Im folgenden werden die Verfahren vorgestellt, die zur numerischen Lösung solcher ODE’s verwendet werden können. Hierbei bietet sich die aufgezeigte Schreibweise in Gleichung (3.1) auch für die weitere Verarbeitung mit MATLABr an5 . Die im folgenden vorgestellten Lösungsverfahren beziehen sich auf eine ODE der Form y ′ = f (x, y), wie oben gesehen handelt es sich bei der Bewegungsgleichung aber um n teilweise gekoppelte Differentialgleichungen. Da sich aber jedes System von Differentialgleichungen auch höherer Ordnung auf eine gewöhnliche Differentialgleichung erster Ordnung zurückführen lässt sind diese Betrachtungen legitim. Für ein System von gekoppelten Differentialgleichungen y1′ = f1 (x, y1 , . . . , yn ) .. . yn′ = f1 (x, y1 , . . . , yn ) sind n Funktionen y1 (x), . . . , yn (x), so zu bestimmen, das die Anfangsbedingungen y1 (x0 ) = y0,1 , . . . , yn (x0 ) = y0,n erfüllt sind. Setzt man y = (y1 , y2 , . . . , yn )T und f = (f1 (x, y), . . . , fn (x, y)) dann kann man dieses System umschreiben und erhält y′ = f (x, y) mit y (x0 ) = y0 . (3.2) Man kann somit in weitreichender Analogie ein System der Dimension n = 1 betrachten und alle gemachten Überlegungen auf ein System mit n > 1 übertragen. 5 r arbeitet intern mit Matrizen; Skalare werden dabei mit Matrizen der Dimension MATLAB 1 × 1, Vektoren als Matrizen mit der Dimension 1 × n bzw. m × 1 dargestellt 17 3.2 Lösungsverfahren für DGL-Systeme Numerische Beschreibung der Bewegung Auch hier ist die interne Arbeitsweise von MATLABr hilfreich, da es die betrachteten Differentialgleichungen nach Gleichung (3.2) intern in Vektorform behandeln kann. 3.2 Lösungsverfahren für DGL-Systeme Um eine ODE numerisch zu lösen, wird das Verhalten eines physikalischen Systems, welches durch Differentialgleichungen in der lokalen zeitlichen und räumlichen Umgebung gegeben ist, angenähert. Durch Näherung – insbesondere einer Linearisierung – der Gesetzmäßigkeiten in der lokalen Umgebung, kann man auf einfache Weise näherungsweise den Zustand des Systems an einem um eine kleine Strecke ∆x oder einem kleinen Zeitintervall ∆t entfernten Ort bzw. Zeitpunkt bestimmen. Von dort aus ist es wiederum durch Näherung möglich den nächsten Ort oder Zeitpunkt zu erreichen. Somit lässt sich durch wiederholte Anwendung des Verfahrens die gesamte Strecke bzw. der gesamte Zeitraum annähernd berechnen. Alle numerischen Verfahren beruhen auf diesem Prinzip. Sie unterscheiden sich zumeist nur in der Schrittweite, der Anzahl der angenäherten Teilstücke oder der Länge dieser. Ein physikalisches System, welches durch ODE’s beschrieben werden kann, kann nur vollständig beschrieben werden, wenn auch die Bedingungen des Systems mit aufgenommen werden. Je nach Art der Bedingung unterscheidet man nach Anfangswertund Randwertbedingungen. Bei den Anfangswertproblemem, sind zu einem Startwert x0 die yi ’s bekannt und man sucht die Lösung der yi ’s für ein bestimmtes x0 . Im Fall der geladenen Teilchen in elektromagnetischen Feldern, sind die Anfangswerte durch den Ort ~x0 und die Geschwindigkeit ~v0 gegeben. Bei den Randwertbedingungen sind mehrere Grenzen an verschiedenen xi ’s angegeben. Die verwendeten numerischen Lösungsansätze richten sich nach den Bedingungen. 3.3 Angewandte Lösungsverfahren Jedes Verfahren zur numerischen Lösung von ODE’s stützt sich auf das oben beschriebene Grundprinzip. Als Grundlage aller weiteren beschriebenen Verfahren soll das Euler Verfahren dargestellt werden, da dieses einige grundlegende Aspekte der weiteren Behandlungen beinhaltet. Dann werden drei weitere Lösungsverfahren vorgestellt. Hierzu zählen das Runge-Kutta Verfahren, das Burlisch-Stoer Verfahren und als eine Prädiktor-Korrektur Methode das Adams-Bashforth-Moulton Verfahren. Diese Verfahren/Methoden zur Lösung von ODE’s sind gezielt ausgesucht worden, weil in den heutigen numerischen Softwarepaketen, so auch in MATLABr , diese ihre Anwendung finden. Mit der heutigen leistungsstarken Computertechnik ist es möglich immer kleinere Schritte bei der Diskretisierung zu machen und somit immer mehr an ein kontinuierliches Spektrum heranzukommen. Allerdings werden alle numerischen Verfahren zur Beschreibung von ODE’s immer eine Diskretisierung bleiben. Im folgenden sollen die Lösungsverfahren für ODE’s der Form y ′ = f (x, y) 18 (3.3) 3.3 Angewandte Lösungsverfahren Numerische Beschreibung der Bewegung vorgestellt werden, diese sind wie in Abschnitt 3.1 beschrieben ohne weiteres auf Systeme von Differentialgleichungen zu erweitern. 3.3.1 Euler Verfahren Das Euler Verfahren wird auch Einschrittverfahren genannt, weil es versucht mittels einzelner kleiner Schrittweiten h, eine genaue numerische Abbildung des über Differentialgleichungen beschriebenen Systems zu geben. Bei dem Euler Verfahren wird Gleichung (3.3) durch eine Diskretisierung ersetzt, man erhält yn+1 = yn + hf ′ (xn , yn ) . (3.4) Mit dieser Gleichung versucht man die Lösung für xn+1 = h+xn über xn anzunähern. Dieses Verfahren versucht somit über das Intervall h eine Linearisierung des Systems vorzunehmen. Dabei stellt Gleichung (3.4) die normale Geradengleichung dar. Hierbei ist yn der y-Abschnitt, f ′ (xn , yn ) die Steigung der Geraden im Punkt xn und h das Intervall. Das hier vorgestellte sogenannte explizite Verfahren geht von einer Linearisierung vom Punkt yn zu yn+1 aus und wird daher auch Euler vorwärts“ ” genannt. Die Bezeichnung explizit kommt daher, dass auf der rechten Seite der Gleichung nur bekannte Größen auftreten und daher explizit yn+1 berechnet werden kann. Mit teilweise erhöhtem Rechenaufwand ist es auch möglich ein implizites Euler Verfahren durchzuführen. Man erhält es, wenn man bei der Approximation den Funktionswert nicht am linken, sondern am rechten Rand des Intervalls bestimmt, dann gilt yn+1 = yn + hf ′ (xn+1 , yn+1 ) . (3.5) Dieses Verfahren wird auch Euler rückwärts“ genannt. Welche Berechnungen nötig ” sind um dieses implizite Verfahren zu verwenden, wird in Abschnitt 3.3.4 näher erläutert. An dieser Stelle sollen zunächst die expliziten Verfahren erläutert werden. Man erkennt, dass das explizite Euler Verfahren unsymmetrisch ist, da es nur die Bedingungen am Punkt xn ausnutzt und von dort eine Linearisierung angestrebt wird. Dieses führt bei häufiger Wiederholung und bei genügend kleinem Intervall zu einer polygonalen Approximation von y (schematische Darstellung siehe Abb. 1(a)). Die so erzeugte Näherung stimmt bis einschließlich des linearen Gliedes mit der TAYLOR-Entwicklung von y = y(x) in der Umgebung von x = xn überein. Allerdings verwendet man heute dieses Verfahren nur noch in den Grundzügen, da sich der Fehler bei wiederholter Anwendung verstärkt und zu großen Abweichungen führen kann. Im folgenden sollen die beim Euler Verfahren entstehenden Fehler und die Genauigkeit näher betrachtet werden, da diese auch für die im weiteren besprochenen Verfahren maßgebend sind. Hierzu betrachtet man eine Menge ((xk , yk ))M k=0 von Approximationen in einem Intervall [a, b] und nimmt an, dass y = y(x) die Lösung der ODE ist. Dann ergibt sich nach J.H. Mathews [22] ein sogenannter globaler und lokaler Diskretisierungsfehler. Der globale Fehler ek ist definiert als die Differenz zwischen der analytischen Lösung und der approximativen Lösung ek = max[a,b] (|y (xk ) − yk |) mit k = 1, 2, . . . , M. (3.6) 19 3.3 Angewandte Lösungsverfahren Numerische Beschreibung der Bewegung (a) unsymmetrische Euler-Approximation: die Linearisierung wird am Anfangspunkt xn gemacht (b) symmetrische EulerApproximation: die Linearisierung wird zwischen zwei Wertepaaren xn , yn und xn+1 , yn+1 angelegt Abbildung 3.1: Verschiedene Euler-Approximationen Der lokale Fehler ek+1 ergibt sich durch den in einem einzelnen Schritt begangenen Fehler. Hierbei git ek+1 = max[a,b] (|y (xk+1 ) − yk − hf ′ (xk , yk )|) mit k = 0, 1, . . . , M − 1. (3.7) Somit ist es möglich den Fehler abzuschätzen, den man innerhalb eines Intervalls [a, b] nach M Schritten gemacht hat, der Fehler liegt bei einer Größenordnung von O (h1 ) für den globalen Fehler, die Größenordnung des lokalen Fehlers liegt bei O (h2 ). Man erkennt, dass das Euler Verfahren somit für eine genaue“ numerische ” Beschreibung einer ODE nicht zu verwenden ist oder eine sehr kleine Schrittweite h und damit entsprechend viele Rechenoperationen erfordert. 3.3.2 Runge-Kutta Verfahren Das Euler Verfahren liefert somit im Allgemeinen nur grobe Näherungswerte. Im folgenden soll daher ein verfeinertes Verfahren angegeben werden, das von Runge und Kutta entwickelt worden ist. Gegeben sei wieder die durch Gleichung (3.3) beschriebene Differentialgleichung und als Anfangswert y (x0 ) = y0 . Bei diesem Verfahren teilt man ein gegebenes Intervall [a, b] wiederum in Abschnitte der Schrittweite h auf. Wenn man nun das Euler Verfahren zu grunde legen würde, erhält man nach den oben angestellten Betrachtungen schon nach kurzer Zeit starke Abweichungen der Linearisierung von der zu approximierenden Kurve. Um hier eine genauere Aussage treffen zu können wird der Endpunkt P (x0 + h) der Geraden für einen Vergleich und zur Entwicklung des Runge-Kutta Verfahrens herangezogen. Dieser Endpunkt der Linearisierung wird im folgenden als Approximationspunkt bezeichnet. Aufbauend auf dem in Abschnitt 3.3.1 beschriebenen Verfahren, kann man – so Runge-Kutta – den gesuchten Prognosewert nur dadurch grundsätzlich verbessern, indem man die für die lineare Fortschreibung yn+1 = yn + hf ′ (xn , yn ) 20 (3.8) 3.3 Angewandte Lösungsverfahren Numerische Beschreibung der Bewegung verwendete Steigung f ′ (xn , yn ) nicht nur aus der anfänglichen Steigung f ′ (x0 , y0 ) bestimmt sondern von dem (mittels der Differentialgleichung bekannten) weiteren Steigungsverhalten der Funktion y abhängig macht, indem man zunächst mit einer gewissen Teilschrittweite Hilfsapproximationen erstellt und dann über die dabei gewonnenen Steigungen mittelt. Das hier dargestellte Runge-Kutta Verfahren vierter Ordnung verwendet Halbschritte h/2, dadurch gewinnt man vier Steigungen deren gewichtetes arithmetisches Mittel gleich ′ hfges = 1 (hf1′ + 2 · hf2′ + 2 · hf3′ + hf4′ ) 6 (3.9) ist. Dieses stellt die zur linearen Fortsetzung der Funktion y benutzte Steigung dar. Durch die doppelte Gewichtung der beiden mittleren Hilfssteigungen“ f2′ und f3′ ” wird dabei im Allgemeinen ein zusätzlicher Genauigkeitsgewinn erzielt. Üblicherweise schreibt man für hfν′ auch kν mit ν = 1, . . . , 4. Man muss somit für jeden Punkt xn+1 = xn + h die vier Faktoren berechnen um auf yn+1 zu kommen. Dabei ergeben sich die Faktoren durch die Halbschritte zu k1 = hf1′ (xn , yn ) h k1 ′ k2 = hf2 xn + , yn + 2 2 h k2 ′ k3 = hf3 xn + , yn + 2 2 ′ k4 = hf4 (xn + h , yn + k3 ) . Somit erhält man durch die Vereinfachung den Wert für yn+1 über yn+1 = yn + 1 (k1 + 2k2 + 2k3 + k4 ) . 6 (3.10) Die so ermittelte Näherung stimmt mit der Taylor-Entwicklung6 bis einschließlich des Gliedes mit dem Faktor h4 überein. Der Fehler dieser Approximation liegt somit bei einer Größenordnung von O(h5 ). Zur Illustration des Verfahrens dient als Beispiel die Differentialgleichung y ′ (x) = y(x) + x − 1 mit dem Anfangswert y(0) = 1 und einer Schrittweite von h = 1. Die graphische Veranschaulichung ist in Abb. 3.2 zu sehen7 . Mit der anfänglichen Steigung m1 = y ′ (x0 ) wird bei diesem Verfahren ausgehend von einem Startpunkt A zunächst ein Euler Halbschritt gemacht. Dadurch erhält man einen ersten y1 -Wert mit y1 = y (x0 ) + m1 1/2h. Nun nimmt man an, dass der zugehörige Approximationspunkt P1 (x0 + 1/2h, y1 ) ein Punkt des Graphen ist (vgl. Abb. 3.2 oben-links) und errechnet durch einsetzen dieses Punktes in die gegebene Differentialgeichung die zugehörige Steigung m2 = f (x0 + 1/2h, y1 ) (vgl. Abb. 3.2 oben-mitte). Mit dieser Steigung führt man nun den ersten Euler Halbschritt erneut durch und erhält daraus einen weiteren Wert y2 = y (x0 ) + m2 1/2h. Wieder nimmt man an, dass der Punkt P2 (x0 + 1/2h, y2 ) ein Punkt des Graphen ist (vgl. Abb. 3.2 oben-rechts) und errechnet durch Einsetzen des Punktes P2 in die gegebene Differentialgleichung die zugehörige Steigung m3 = f (x0 + 1/2h, y2 ). Mit dieser Steigung führt man nun 6 7 genauere Betrachtungen hierzu findet man im Buch von A. Kneschke [18] (Bd. I, Seite 511) in Anhang C.1, C.2 sind hierzu zwei Algorithmen dargestellt 21 3.3 Angewandte Lösungsverfahren Numerische Beschreibung der Bewegung Abbildung 3.2: Exemplarische Darstellung des Runge-Kutta Verfahrens vierter Ordnung mit der Differentialgleichung y ′ (x) = y(x) + x − 1 einen ganzen Euler Schritt aus und erhält einen neuen y Wert y3 = y (x0 ) + m3 h, durch erneutes einsetzen ergibt sich der Punkt P3 (x0 + h, y3 ) (vgl. Abb. 3.2 untenlinks). Durch einsetzen in die Differentialgleichung ergibt sich die letzte Steigung m4 = f (x0 + h, y3 ) (vgl. Abb. 3.2 unten-mitte). Aus den so berechneten vier Steigungen wird nun nach Runge-Kutta ein gewichtetes arithmetisches Mittel gebildet und man erhält als Gesamtsteigung für die Linearisierung 1 (m1 + 2m2 + 2m3 + m4 ) 6 1 ′ (y (x0 ) + 2f (x0 + 1/2h, y1 ) + 2f (x0 + 1/2h, y2 ) + f (x0 + h, y3 )) . = 6 mges = Mit dieser Gesamtsteigung lässt sich nun in Analogie zum Euler Verfahren das Stück des Graphen approximieren (vgl. Abb. 3.2 unten-rechts). Man erhält somit nach dem Runge-Kutta Verfahren vierter Ordnung die Geradengleichung y (x0 + h) = y (x0 ) + hmges (3.11) mit dem zugehörigen Punkt B (x0 + h, y (x0 + h)), dieser wird als der gesuchte nächste Kurvenpunkt angenommen und dient als Startpunkt für den nächsten Iterationsschritt. Wie schon in den obigen Erläuterungen beschrieben, liegt der Fehler des RungeKutta Verfahrens bei einer Größenordnung von O (h5 ). Man muss nun bei dem Runge-Kutta Verfahren die Diskretisierungsfehler (Verfahrensfehler) und die numerischen Fehler (Rundungsfehler) betrachten, da sich beide in unterschiedlicher Weise auf den Gesamtfehler auswirken. Beide Fehlerarten entwickeln sich in Abhängigkeit von der Schrittweite h gegensätzlich; wird die Schrittweite verringert, so verkleinert sich zwar der Diskretisierungsfehler aufgrund von höherem Rechenaufwand wird sich 22 3.3 Angewandte Lösungsverfahren Numerische Beschreibung der Bewegung aber der numerische Fehler vergrößern. Wird dagegen die Schrittweite vergrößert, so verringert sich aufgund der geringeren Anzahl der Rechenschritte der numerische Fehler, wohingegen der Diskretisierungsfehler zunimmt. Diese Betrachtung ist für die in Abschnitt 3.3.2.1 besprochene adaptive Schrittweitenbestimmung von Bedeutung. Zumindest theoretisch gibt es jeweils für eine bestimmte Differentialgleichung zusammen mit dem Näherungsverfahren eine bestimmte optimale Schrittweite (vgl. Abb. 3.3). Diese macht man sich bei einer Schrittweitensteuerung zu nutze. Jedoch reagiert dieses Verfahren wie in Abb. 3.3 dargestellt, sehr empfindlich auf eine Veränderung der Schrittweite. Die optimale Schrittweite wird gemäß einer empirischen Beziehung festgelegt h · L ≈ 0.1 (3.12) mit L der sogenannten Lipschitzkonstanten8 , die eine obere Schranke der Ableitung darstellt. Nun stellt sich die Frage, warum die meisten numerischen Softwarepakete eben nur die RungeKutta Verfahren vierter Ordnung und nicht höhere Ordnungen implementieren. Prinzipiell sind Runge-Kutta Verfahren auch mit höheren Ordnungen möglich. Dabei sind die Grenzen des realisierbaren theoretisch nur durch die Rechenleistung und die numerische Genauigkeit der Variablen eingeschränkt. Im Allgemeinen wird aber auf das Verfahren vierter Ordnung zurückgegrif- Abbildung 3.3: Fehlerentwicklung fen. Dieses liegt darin begründet, dass zwar die Fehler geringer werden, die diese Verfahren machen, der Rechenaufwand dieser Verfahren aber nicht in Relation zu ihrem Nutzen steht. Das folgende Zitat aus [29] stellt wohl am nachhaltigsten die Stellung des Runge-Kutta Verfahrens dar. For many scientific users, fourth-order Runge-Kutta is not just the ” first word on ODE integrators, but the last word as well. In fact, you can get pretty far on this old workhorse, especially if you combine it with an adaptive stepsize algorithm. . . . Bulirsch-Stoer or predictor-corrector methods can be very much more efficient for problems where very high accuracy is a requirement. Those methods are the high-strung racehorses. Runge-Kutta is for ploughing the fields.“ 3.3.2.1 Adaptive Schrittweite Im vorherigen Abschnitt wurde erläutert, wie man das Runge-Kutta Verfahren mathematisch beschreiben kann und welche Fehler dabei auftreten. Dabei gibt es eine optimale Schrittweite, bei der die Fehler minimal sind. Allerdings ist diese Annahme nur unter der Bedingung richtig, dass die gesuchte Funktion stark veränderlich ist. Kommt es in einem Bereich zu keinen großen Abweichungen, so kann man eine sogennante adaptive Schrittweitensteuerung einführen. Diese Steuerung, bzw. diese Methode verändert die Schrittweite in Abhängigkeit von der Veränderlichkeit der gesuchten Funktion. Um eine solche Steuerung zu implementieren sind jedoch weitere Rechenschritte nötig, dieses verlangsamt zwar das Verfahren auf stark veränderlichen 8 genaue mathematische Definition siehe O. Forster [9] Kapitel II, S. 102 23 3.3 Angewandte Lösungsverfahren Numerische Beschreibung der Bewegung Stücken, führt aber zu schnelleren Ergebnissen auf nicht oder kaum veränderlichen Kurvenabschnitten. Bei dem besprochenen Runge-Kutta Verfahren vierter Ordnung wird zumeist die step doubling“-Methode verwendet, man verdoppelt bzw. halbiert ” die Schrittweite. Hierzu berechnet man zu jedem Punkt die vier Runge-Kutta Parameter k1 , k2 , k3 und k4 und macht von diesen die Schrittweite abhängig. Wegen der empfindlichen Reaktionen des Fehlers auf die Schrittweite sollte diese jedoch nicht kleiner als nötig gewählt werden. In den heutigen adaptiven Methoden wird folgendes Kriterium zur Steuerung zugrunde gelegt k3 − k2 . q = (3.13) k2 − k1 Dieser Parameter wird nach jedem Schritt berechnet und in Abhängigkeit davon wird die Schrittweite nach der Vorschrift für q < 0.5% 2hn hn für 0.5% < q < 4% hn+1 = (3.14) hn /2 für q > 4% angepasst. Hierbei wird der vorangehende Schritt wiederholt, wenn die Schrittweite halbiert wird. Somit werden für jeden zu berechnenden Punkt notfalls zwei vollständige Runge-Kutta Berechnungen durchgeführt. Eine Alternative zum nochmaligen Durchlauf aller Runge-Kutta Schritte mit veränderter Schrittweite ist möglich, wenn man zwei Integrationsverfahren unterschiedlicher Ordnung verwendet. So lässt sich das Runge-Kutta Verfahren vierter Ordnung mit dem Runge-Kutta Verfahren fünfter Ordnung durch einen Runge-Kutta-Merson Algorithmus9 so kombinieren, dass man insgesamt nur fünf Auswertungsschritte braucht um gleichzeitig auch eine Aussage über den Fehler und somit die Änderung der Schrittweite machen zu können. 3.3.3 Burlisch-Stoer Verfahren Während das adaptive Runge-Kutta Verfahren vierter Ordnung für allgemeine Systeme verwendet wird, ist für Probleme, welche durch glatte“ Differentialgleichungen ” beschrieben werden können, dabei beschreibt glatte“ den Verlauf der Lösungsfunk” tionen, die keine Unstetigkeiten10 oder scharfe Nichtlinearitäten beinhalten und auf großen Intervallen mit möglichst wenig Rechenaufwand integriert werden sollen, ein anderes Verfahren maßgebend. Das Burlish-Stoer Verfahren stellt ein solches Verfahren zur höchst präzisen numerischen Berechnung der beschriebenen Differentialgleichungen mit minimalem Rechenaufwand dar. Das Burlish-Stoer Verfahren beruht auf drei Grundideen. Die erste ist die Richardson Extrapolation. Diese geht davon aus, dass die numerische Lösung des Problems selbst als eine Art analytische Lösung angesehen werden kann. Um diese zu bekommen wird eine Fitkurve über die ermittelten Werte gelegt. Die zweite Idee beruht auf der Anpassung der Fitkurve selbst, Burlisch und Stoer erkannten die Stärke von rationalen Funktionen bei dieser Art 9 siehe Runge-Kutta-Merson Algorithmus Anhang C.3 dieses ist in den meisten physikalischen Systemem der Fall, gerade bei den in dieser Arbeit betrachteten Bewegungen 10 24 3.3 Angewandte Lösungsverfahren Numerische Beschreibung der Bewegung Abbildung 3.4: Burlisch-Stoer (Richardson Extrapolation) (Quelle geändert: [29]) der Extrapolation. Die dritte Idee ist, ein Approximationsverfahren zu finden, welches aufgrund der rationalen Funktion ruhig eine Fehlergrößenordnung von O (h2 ) haben kann und einen kleinen Rechenaufwand fordert. So ist es möglich mit nur einem Bulisch-Stoer Schritt eine große Schrittweite mit sehr genauem Ergebnis zu erreichen. Hierbei geht man nach folgendem Schema vor: Zunächst wird in immer kleineren Schritten h = H/n mit n = 2, 4, 6, 8, 12, 16, 24, 32, . . . , [ni = 2ni−2 ] , . . . numerisch integriert (hier findet zumeist das Runge-Kutta Verfahren zweiter Ordnung Anwendung), so dass zu jeder Schrittweite hi ein Integrationsergebnis yi gehört. Nun wird durch alle (hi , yi) eine gebrochen rationale Funktion (Interpolationsfunktion) angepasst mit b0 + b1 h + b2 h2 + . . . . (3.15) R(h) = a0 + a1 h + a2 h2 + . . . Das Extrapolieren dieser Interpolationsfunktion auf beliebig kleine Schrittweiten liefert nun ein optimales Ergebnis für den Zustand am Ende des Intervalls y(x0 + H) = lim R(h), dieses ist in Abb. 3.4 schematisch dargestellt. Die Extrapolation wird h→0 nach jeder Schrittweite gemacht und liefert approximativ den Endzustand sowie den Fehler. Das Verfahren wird abgebrochen, wenn der Fehler kleiner als die vorgegebene Schranke geworden ist. 3.3.4 Prädiktor-Korrektur Methode Die Verfahren, die nach dieser Methode arbeiten sind genauer und effektiver als Runge-Kutta Verfahren aber nur bei glatten“ Verläufen einsetzbar. Ein Nachteil ” dieser Verfahren ist, dass sie nicht selbststartend sind, da Zustände und Ableitungen aus Schritten zuvor benötigt werden, daher werden zunächst immer ein paar RungeKutta Schritte benötig um diese Zustände zu berechnen. Erst mit diesen Zuständen kann die Prädiktor-Methode eine Aussage über den weiteren Verlauf machen. Die nächsten Punkte werden dann der Prädiktor-Methode entnommen. Um sich den 25 Numerische Beschreibung der Bewegung 3.3 Angewandte Lösungsverfahren Mechanismus der Prädiktor-Methode klar zu machen, ist es zunächst notwendig, zu verstehen, dass das integrieren einer ODE sich grundlegend von der Suche nach einem Integranden unterscheidet. Bei einer Integration kennt man den Zusammenhang zwischen dem Integranden und der Variablen x in analoger Form. Wenn man nicht numerisch vorgehen würde, sondern analytisch, ließe sich die Linearisierung und das Vorhersagen eines Punktes auf der Kurve analytisch schreiben als xZn+1 f (x′ , y) dx′ . (3.16) yn+1 = yn + xn Bei den bisher vorgestellten Verfahren wurde eben der Integrand durch die Linearisierung ausgedrückt, diese Verfahren werden als Einschrittverfahren bezeichnet, weil der Wert xn+1 und yn+1 nur auf dem vorherigen Wert yn beruht. Die Prädiktor Methode versucht nun einen anderen Weg den Integranden auszudrücken und verwendet dazu die bereits bekannten Werte um zunächst einen Prädiktionswert yP zu berechnen und diesen mit Hilfe eines Korrekturwertes yC anzupassen. Dabei unterscheidet man bei den Vorgehensweisen zwischen den Ein- und Mehrschrittverfahren, dabei bezieht sich diese Einteilung auf die Anzahl der vorherigen Werte, die zur Berechnung herangezogen wurden. 3.3.4.1 Einschrittverfahren Die einfachste Prädiktor-Korrektur Methode ist das implizite Euler Verfahren. Hier- (a) Prädiktionswert, Näherungslösung und Korrektur (b) Korrekturberechnung Abbildung 3.5: Implizites Euler Verfahren bei wird der yn+1 Wert rückwärts berechnet siehe Gleichung (3.5). Dabei wird zunächt ein Prädiktionswert yP mittels des expliziten Euler Verfahrens ermittelt. An diesem Prädiktionspunkt wird die Ableitung, somit die Steigung mP = f ′ (xn+1 , yP ) für den Prädiktionspunkt berechnet. Ausgehend von dieser Steigung ergibt sich von xn aus eine Gerade (vgl. Abb. 5(a) rote Linie) und man erhält eine Näherung für yn+1. Diese Näherung liegt allerdings innerhalb eines Fehlers ∆x von der exakten Lösung entfernt. Um den Fehler zu verifizieren, berechnet man die Fläche, die oberhalb der exakten Lösung liegt (vgl. Abb. 5(b)). Dazu verwendet man zumeist die Trapezformel11 . Mittels dieses Fehlers ist es möglich eine Korrektur des Näherungswertes durchzuführen, daher wird dieser Schritt auch als Korrektorschritt bezeichnet. 11 26 siehe Anhang B.4 Gleichung (B.14) 3.3 Angewandte Lösungsverfahren Numerische Beschreibung der Bewegung 3.3.4.2 Mehrschrittverfahren Bei den Mehrschrittverfahren versucht man mittels mehrerer vorheriger Punkte und der Ableitung eine Aussage über den nächsten Punkt zu erhalten. Bei diesen Mehrschrittverfahren versucht man f (x, y) über ein Polynom durch mehrere vorherige Punkte xn , xn−1 , xn−2 , . . . anzunähern. Somit wird das oben angeführte Integral zu ′ ′ ′ yn+1 = yn + h a0 yn+1 + a1 yn′ + a2 yn−1 + a3 yn−2 + ... (3.17) mit yn′ = f (xn , yn ). Hierbei heißt die Methode explizit, wenn a0 = 0 und implizit wenn a0 6= 0. Abbildung 3.6: Prädiktor Methode (Quelle geändert: [6]) Die Ordnung einer Prädiktor Methode richtet sich nun nicht wie bei Runge-Kutta nach den Schritten, die gemacht wurden um einen neuen Punkt zu berechnen sondern nach der Anzahl der verwendeten bekannten Punkte. Nun ist es aber problematisch eine implizite Form von Gleichung (3.17) zu finden, da man hierzu yn+1 benötigt. Um dieses Problem zu lösen, muss man eine Abschätzung für diesen Wert festlegen, entweder geschieht dieses durch raten oder durch den Prädiktorschritt, der als Grundlage zunächst die explizite Form verwendet um von dort auf den Wert für yn+1 zu kommen. Dieses geschieht dann durch die Integration des Polynomzuges durch eine Simpson Integration12 von xn bis xn+1 . Mittels dieser Integration kann man den Wert für yn+1 korrigieren. Die Prädiktor Methode kann man wie in Abb. 3.6 verdeutlichen. Zunächst schätzt man den Prädiktionswert yP (xn + h) durch Extrapolation (Polynomzug, Splinefittung, etc.) aus vorherigen Werten yn−i und den Ableitungen y (xn ) , y ′ (xn ) , y (xn − h) , y ′ (xn − h) , . . . 12 siehe Simpson Integration Anhang B.4 27 3.3 Angewandte Lösungsverfahren Numerische Beschreibung der Bewegung ab. Dabei muss das Differentialgleichungssystem nicht ausgewertet werden. Um nun zu einer Korrektur des so erzeugten Wertes zu gelangen, berechnet man die Ableitung des Prädiktionswertes. So erhält man mit den vorherigen Ableitungen und einem Polygonzug bis zu xn + h eine weitere Aussage über den Prädiktionswert. Nun berechnet man das Integral ∆x als Fläche unterhalb der Kurve zwischen xn und xn + h mittels der Simpson Integration (siehe Anhang B.4; nur exemplarisch für MATLABr , für eine eigene Implementation lassen sich alle weiteren diskreten Integrationsverfahren nutzen). Mittels dieser Fläche lässt sich der korrigierte Wert der Kurve berechnen yn+1 = y (xn + h) = y (xn ) + ∆x. Somit wird auch deutlich, warum dieses Lösungsverfahren zunächst berechnete Punkte braucht um eine genaue Aussage über den weiteren Verlauf zu machen, in dem gezeigten Beispiel (vgl. Abb. 3.6) werden zunächst drei bekannte Punkte vorausgesetzt. 3.3.4.3 Adams-Bashforth-Moulton Verfahren Dieses Verfahren ist eines der häufigst eingesetzten Mehrschrittverfahren, es ba- (a) Vierte Ordnung des Adams-Bashforth (b) Vierte Ordnung des Adams-Moulton KorPrädiktionswertes (mit Extrapolation) rekturwertes (mit Interpolation) Abbildung 3.7: Adams-Bashforth-Moulton Integration siert auf der oben beschriebenen Prädiktor-Korrektur Methode. Somit kann man sehr viel Rechenaufwand sparen. Jedoch können diese Verfahren nur wie auch das Burlisch-Stoer Verfahren bei glatten“ Differentialgleichungen eingesetzt werden. An ” dieser Stelle soll kurz das Adams-Bashforth-Moulton Verfahren vorgestellt werden, da MATLABr es bei einigen Lösungsverfahren verwendet. Das Verfahren basiert auf der in Gleichung (3.16) dargestellten allgemeinen Form. Hierbei wird das Lagrange Polynom13 für die Approximation von f (x′ , y) mit den Punkten (xn−3 , yn−3 ) , (xn−2 , yn−2 ) , (xn−1 , yn−1) und (xn , yn ) verwendet. Man integriert über das Intervall [xn , xn+1 ]. So erhält man den Adams-Bashforth Prädiktionswert yP = yn + h (−9fn−3 + 37fn−2 − 59fn−1 + 55fn ) . 24 (3.18) In gleicher Weise ergibt sich der Korrekturwert. Nun kann man, wie oben beschrieben den Prädiktionswert für yn+1 verwenden und wiederum ein Langrange Polynom 13 28 siehe O. Forster [9] Kapitel I 3.4 MATLAB ODE Suite Numerische Beschreibung der Bewegung verwenden. Diesesmal kann man den Punkt (xn+1 , yn+1) mit verwenden. Dieses erzeugt die Adams-Moulton Korrektur, es lässt sich schreiben yC = yn + h (fn−2 − 5fn−1 + 19fn + 9fn+1 ) . 24 (3.19) Dieses ist in Abb. 3.7 gezeigt. Die Größenordnung des Fehler des Adams-BashforthMoulton Verfahrens liegt bei einer Größenordnung von O (h5 ). 3.4 MATLABr ODE SUITE Die oben beschriebenen Lösungsverfahren werden in MATLABr in unterschiedlicher Weise umgesetzt. Im folgenden soll dargestellt werden, auf welche Verfahren MATLABr bei einer Lösung zurückgreift und wie diese intern berechnet werden (hierzu sind die Arbeiten von R. Ashino und L.F. Shampine [2, 34] grundlegend). Die Sol” ver“ gehören nicht zum binären Kern von MATLABr , somit ist es möglich sich die Implementierung über die Kommandos type bzw. dbtype anzuschauen. 3.4.1 Implementierungen und Aufrufe der ” ODE-Solver“ Die numerischen Hilfsmittel, die MATLABr zur Verfügung stellt, basieren auf den schon in FORTRAN 90 verwendeten Routinen, die in den Softwarepaketen LAPACK, D02BGF und DIVPAG zusammengefasst werden. Diese Routinen implementieren die vorhergehend theoretisch beschriebenen Verfahren. Ausgehend von den in [29] beschriebenen Implementierungen ist es möglich, einzelne einfache Algorithmen für MATLABr zu entwerfen. Diese stellen schematisch dar, wie die interne Implementierung in MATLABr funktioniert, da diese unter Umständen sehr komplex ist. Die einfachen Algorithmen sind in Anhang C dargestellt, hierbei wird bei der Darstellung auf eine adaptive Schrittweitensteuerung verzichtet, da diese die Implementierung nur unnötig verkomplizieren würde, es wird auf die vorhergehend gemachten theoretischen Überlegungen verwiesen. In diesem Abschnitt werden die einzelnen Funktionen vorgestellt, die MATLABr zur numerischen Lösung von Differentialgleichungen zur Verfügung stellt. Dabei sind alle in MATLABr implementierten ODE Funktionen mit einer adaptiven Schrittweitensteuerung ausgestattet, die über die Eingabe der Genauigkeit (Toleranz) gesteuert werden. MATLABr beinhaltet die folgenden ODE Solver“: ” • ode23 expliziter Runge-Kutta-Algorithmus zweiter und dritter Ordnung (sogennates Bogacki und Shampine Paar [5]) • ode45 expliziter Runge-Kutta-Algorithmus vierter und fünfter Ordnung (sogenanntes Dormand-Prince Paar [8]) • ode15 abgewandelter Burlisch-Stoer Algorithmus (nach C.W. Gear [34]) • ode113 Adams-Bashforth-Algorithmus mit variabler Ordnung 1, . . . , 13 29 3.4 MATLAB ODE Suite Numerische Beschreibung der Bewegung Die verwendeten Algorithmen gehen zwar auf die oben vorgestellten grundlegenden Theorien zurück sind aber im Laufe der Zeit durch neue Erkenntnisse und durch neue binäre Implementationen in MATLABr optimiert worden. Daher bieten die heutigen ODE Solver“, wie sie in den Versionen 6.5 (Release 13) und 7.0 (Release ” 14) vorkommen, die schnellste und komfortabelste Möglichkeit ODE’s numerisch zu lösen. Zur weiteren Optimierung beinhalten die Runge-Kutta Verfahren immer ein Paar von Verfahren unterschiedlicher Ordnung (Analogie siehe Anhang C.3). Ein weiterer Vorteil, den MATLABr bei der Lösung von ODE’s zur Verfügung stellt, ist, dass alle Lösungsverfahren mit ein und der selben Befehlstruktur aufgerufen werden können, ohne dass man für jedes Verfahren eine spezifizierte benötigt. 3.4.1.1 Aufruf eines ODE Solvers Die numerischen Lösungsverfahren sind in MATLABr standardisiert worden, dieses führt zu einer einfachen Handhabung und ermöglicht dem Benutzer ein hohes Maß an Flexibilität, da mit nur kleinen Änderungen ein anderer ODE Solver“ ” eingebunden werden kann. In diesem Abschnitt soll die MATLABr Syntax zur Behandlung von ODE Problemen beschrieben werden und die einzelnen Optionen, die MATLABr dazu bietet näher erläutert werden. Die Syntax zum Aufruf eines ODE ” Solvers“ sieht immer wie folgt aus >> [x,y] = solvername(@fun,[xinitial xfinal], y0, {options}) Dieser Aufruf erfordert, dass das System von Differentialgleichungen bzw. Differentialgleichungen höherer Ordnung, wie in Abschnitt 3.1 beschrieben, angesehen werden können und vom Problem her der Form y ′ = f (x, y) sind. Beim Aufruf ist @fun der Name der Funktion, die die Differentialgleichung bestimmt. Das Intervall über welches die Funktion integriert werden soll, ist dabei durch [xinitial xfinal] gegeben, in der Dokumentation von MATLABr , die mit dem Aufruf doc solvername aufgerufen wird, findet man an dieser Stelle einen Vektor tspan, dieser muss den xinitial- und xfinal-Wert enthalten. MATLABr geht dann von einer natürlichen Schrittweite aus und berechnet hierzu im Intervall die Lösungen. Hat der Vektor tspan mehr als zwei Elemente, so berechnet MATLABr die Lösungen der Differentialgleichungen explizit nur an diesen Punkten. Dann ist es dem Benutzer überlassen, in welcher Weise er die Daten weiterverarbeitet und welche Interpolation er für die Darstellung verwenden möchte. Der Wert y0 gibt die Anfangsbedingungen der einzelnen Gleichungen vor, mittels der Anzahl der Elemente dieses Vektors, ist es MATLABr möglich die Anzahl der Differentialgleichungen zu bestimmen, die das System beschreiben und die gelöst werden müssen. Der Vektor options ist optional, er wird durch die Funktion odesets erzeugt. Hierbei kann man der Funktion als String die beliebigen Optionen übergeben und den gewünschten Zahlenwert. Hieraus werden die passenden Parameter für die einzelnen ODE Solver“ automatisch zusammengestellt. Dieses ist eine weitere Optimierung ” der Lösungsverfahren bzw. des Aufrufs, da man auf diese Weise nicht selbst eine Auswahl aus den Parametern treffen muss mit denen die Lösungsverfahren arbeiten. Hierbei ist die wichtigste Option die auch schon oben angesprochene Toleranz des Fehlers, man kann die relative RelTol und die absolute Toleranz AbsTol setzen. 30 3.4 MATLAB ODE Suite Numerische Beschreibung der Bewegung Hierbei wird bei jedem Ergebnis der lokale Fehler abgeschätzt, der die Bedingung |ei | ≤ r |yi | + ai mit r der relativen Toleranz und ai der absoluten Toleranz erfüllen muss. Die relative Toleranz liegt standardmäßig bei einem Wert von 10−3 die absolute Toleranz liegt bei 10−6 , diese Werte müssen je nach Problem angeglichen werden, nach der Arbeit von J.C. Polking [28] gibt es noch keinen zufriedenstellenden Automatismus, der dieses für beliebige Probleme lösen könnte. Eine weitere Option, die man mittels odeset setzen kann, ist das Ausgabeformat. Hierbei kann man die Eigenschaft OutputFcn auf verschiedene Werte setzen, so das entweder gleich ein ein- bzw. mehrdimensionaler Plot erzeugt wird. Hierzu dienen die Werte odeplot, odephas2, odephas3 und odeprint. Des weiteren lässt sich die Schrittweite für den Algorithmus angeben, dieser wird zwar intern durch die Schrittweitensteuerung geregelt, jedoch lässt sich ein Maximalwert MaxStep vorgeben. Als Standardwert ist dieser auf ein Zehntel des Integrationsintervalls gesetzt. Für manche Differentialgleichungen ist es sinnvoll, die erste Schrittweite mit InitialStep vorzugeben. Wenn der Verlauf zunächst sehr glatt“ ist und die ers” te Schrittweite zu groß gewählt wurde und die Fehlertoleranz überschritten wurde, greift automatisch die Schrittweitensteuerung ein und erniedrigt die Schrittweite. Des weiteren bietet MATLABr noch zusätzliche Optionen an, die aber für diese Arbeit nicht maßgebend sind. Man kann sich die weiteren Optionen mit doc odeset ansehen. Im folgenden sollen die einzelnen Methoden der verschiedenen ODE Solver“ kurz ” erläutert werden. 3.4.1.2 ode23 Methode Die ode23 Methode basiert auf einem Paar von Runge-Kutta Verfahren zweiter und dritter Ordnung mit einer implementierten Fehlerkontrolle vergleichbar mit dem Runge-Kutta-Merson Algorithmus. Die Methode extrapoliert den Wert yn+1 mittels Runge-Kutta dritter Ordnung und kontrolliert den Fehler über die Differenz zum Wert der zweiten Ordnung. Somit ergeben sich vier Schritte k1 = hf (xn , yn ) h k1 k2 = hf xn + , yn + 2 2 3k2 3h k3 = hf xn + , yn + 4 4 2k1 k2 4k3 k4 = hf xn + h, yn + + + 9 3 9 Die ersten drei Schritte produzieren dabei den Wert für yn+1 , es gilt 1 4 2 yn+1 = yn + k1 + k2 + k3 . 9 3 9 (3.20) Mittels des vierten Schrittes erhält man den Fehler e=− 1 1 1 5 k1 + k2 + k3 − k4 . 72 12 9 8 (3.21) 31 3.5 Geschwindigkeitskriterium Numerische Beschreibung der Bewegung Die Interpolation, die diese Methode verwendet ist ein Zweipunkt Hermite Polynon des Grades drei, welches die Werte yn und yn+1 interpoliert. 3.4.1.3 ode45 Methode Die ode45 Methode arbeitet nach dem von J.R. Dormand und P.J. Prince [8] vorgestellten Runge-Kutta Paar vierter und fünfter Ordnung. Auch hier wird wie bei der ode23 Methode ein weiterer Schritt zur Fehlerbestimmung herangezogen. Das heute in MATLABr implementierte Dormand-Prince-Paar stellt momentan einen der schnellsten ODE-Solver“ dar, die mit einer mittleren Genauigkeit arbeiten. Auch ” wenn es mit dem ode45 Algorithmus mittlerweile möglich ist, große Schrittweiten zu berechnen, so eignet er sich besonders für nicht glatte“ Differentialgleichungen. Die ” Methode verwendet die Interpolation um innerhalb eines Schrittes vier Stützstellen im gleichen Abstand zu berechnen auf denen dann der eigentliche Wert yn+1 basiert. 3.4.1.4 ode15s Methode Die ode15s Methode basiert auf Verfahren, die auf die vorherigen Ableitungen zurückgehen, dabei wird die Taylor-Entwicklung der Funktion verwendet und mittels des Differenzenquotienten aus vorherigen Punkten die ODE gelöst. 3.4.1.5 ode113 Methode Die ode113 Methode geht auf das Adams-Bashforth-Moulton Verfahren zurück, dabei ist die Schrittweite sowie die Ordnung variabel. Die Ordnung kann zwischen 1 und 13 variieren. Hierbei werden die Integrationen sehr genau über die Fehlertoleranz beobachtet, dieses geschieht graphisch in MATLABr , daher sind diese Methoden sehr aufwendig und kosten einen erheblichen Rechenaufwand. 3.5 Geschwindigkeitskriterium (Laufzeitanalyse) Für die Visualisierung der in Abschnitt 2 betrachteten Bewegungen mit den numerischen Mittel aus Abschnitt 3 stellt sich nun die Frage, ob die in MATLABr integrierten Hilfsmittel verwendet werden sollen oder MEX-Funktionen14 aus bekannten C/C++/FORTRAN-Code für die einzelnen Verfahren, wie sie in [29] aufgeführt werden, erzeugt werden soll. Während die mögliche Genauigkeit und Komplexität numerischer Verfahren mittlerweile angestiegen sind, birgt der Einsatz der Standardsoftwarepakete wie sie in MATLABr integriert sind einige Tücken. Je allgemeiner die ODE-Solver“ gehalten ” sind, desto ungenauer können sie unter Umständen werden. Man darf dabei nie aus den Augen verlieren, dass das vom Computer gelöste Problem • weder mit dem ursprünglichen Problem übereinstimmt • noch exakt gelöst wurde. 14 32 Erläuterungen siehe Anhang A.3 3.5 Geschwindigkeitskriterium Numerische Beschreibung der Bewegung Dabei stellt sich allerdings bei allen numerischen Verfahren nicht die Frage nach dem Übereinstimmen, da die Numerik immer nur innerhalb einer gewissen Grenze an das Problem herankommen kann, sondern vielmehr nach dem Maße der Exaktheit. Für spezialisierte Verfahren gilt, dass sie meistens ein hohes Maß an Genauigkeit liefern und mit dem analytischen Ergebnis, soweit vorhanden im Rahmen der Toleranz übereinstimmen, dieses ist bei vielen Algorithmen aus [29, 31] der Fall (siehe auch Anhang C). Jedoch haben diese Verfahren den Nachteil, dass sie wenn sie in MATLABr verwendet werden sollen sehr langsam laufen. Dieses beruht zum einen auf der Struktur der MEX-Funktion und deren Speicherverwaltung, zum anderen auf den unterschiedlichen Datenstrukturen. Die allgemeinen Lösungsverfahren sind gerade im Bezug auf die Verwendung in MATLABr optimiert und bieten daher einen Geschwindigkeitsvorteil. Da die Visualisierung der Bewegungen der geladenen Teilchen nicht die Exaktheit der Bewegung darstellt und auch nicht diesen Anspruch erhebt, sind für diese Arbeit die allgemeinen Lösungsverfahren von MATLABr verwendet worden. Mit diesen ist es möglich die Bewegung in einer flüssigen Simulation zu visualisieren und dieses trägt mehr zum Verständnis der Physik hinter diesen Vorgängen bei, als eine exakte Lösung. Des weiteren ist eine exakte Lösung der Bewegungen auch gar nicht nötig und im Rahmen der Physik auch nicht unbedingt sinnvoll. Die Bewegungen wie sie in Abschnitt 2 beschrieben sind, sind zumeist bei den geladenen Teilchen im Erdmagnetfeld zu finden. Hier eine exakte Lösung der Bewegungsgleichung bis auf etliche Nachkommastellen anzusetzen ist physikalisch nicht sinnvoll. Alleine kleine Diskrepanzen im Feld, die von der Theorie abweichen, führen wie auch die Numerik selbst zu kleinen Abweichungen. Somit lässt sich die reale“-Situation der geladenen Teilchen im Erd” magnetfeld wahrscheinlich am besten mit der Numerik und der in ihr beinhalteten kleinen Abweichungen darstellen. Um einen Überblick über die verschiedenen Stärken und Schwächen der vorgestellten Algorithmen zu erlangen, sollen im folgenden die Laufzeiten der einzelnen ODE” Solver“ von MATLABr mit den C-Programmen (vgl. [29], Auszüge siehe Anhang C) bzw. mit den von Hand“ implementierten Algorithmen verglichen werden. Hierbei ” werden die Berechnungen jeweils über eine Zeitspanne von 0 bis nLarmor · 2πωB durchgeführt. Dabei wählt man, um zeitlich eine Aussage treffen zu können, nLarmor je nach Rechnergeschwindigkeit so hoch, dass man vergleichbare Laufzeiten erhält. Bei einer Zeitspanne die sehr klein ist, machen sich die Unterschiede kaum bemerkbar. Die in Tabelle 3.1 dargestellten Laufzeiten der einzelnen Solver sind mit einem AMD XP2000+, mit 1GB 400 MHz DDR-RAM in MATLABr Version 6.5 (Release 13) berechnet worden. Dazu kann man in MATLABr die Kommandos tic und toc verwenden. Der Aufruf des auszuführenden Programms wird zwischen die Befehle gestellt und man erhält eine Laufzeit des Programms. Der Compiler zur Erzeugung der MEX-Funktion ist dabei auf den gcc-Compiler von Cygwin15 gesetzt worden. Des weiteren wurden die Ergebnisse der Berechnungen mit denen der Theorie in Abschnitt 2 gegenübergestellt um einen Vergleich der Genauigkeiten zu ermöglichen. Um einen Vergleich so einfach wie möglich zu gestallten, wird die Gyration zunächst ohne eine Geschwindigkeitskomponente in Richtung des Magnetfeldes betrachtet, dabei 15 c Cygwin ist eine von RedHat entwickelte UNIX-Umgebung für Windows . Grundbestandteil ist eine Bibliothek von UNIX-Funktionen, die es ermöglichen für UNIX entwickelte Programme c unter Windows auszuführen. (www.cygwin.com) 33 3.5 Geschwindigkeitskriterium Numerische Beschreibung der Bewegung werden 200 Larmorradien simuliert und die Laufzeit sowie die Abweichungen des Radiusses betrachtet. Um des weiteren eine Aussage über einen eventuellen Versatz des Führungszentrums machen zu können, wird die Gyrationsbewegung in einem zweiten Schritt mit einer Geschwindigkeitskomponente in Richtung des magnetischen Feldes betrachtet, die Abweichungen werden über die gesamten n-Gyrationen gemittelt. Bei diesen beiden Betrachtungen ergeben sich die in Tabelle 3.1 dargestellten Laufzeiten für die einzelnen Algorithmen. Bei der Berechnung der Gyrationsflugbahn eines Teilchens, wurde die Magnetfeldstärke sowie die Ladung und die Masse eines Teilchens auf 1 gesetzt, die Anfangsgeschwindigkeiten betragen vx = 0.04 und vy = 0.04 (vz = 0.04) somit ergibt sich nach Gleichung (2.6) ein theoretischer Larmorradius von rL = 0.04, die absoluten Abweichungen von diesem theoretischen Wert und der gemittelte Versatz vom Führungszentrum sind in Tabelle 3.1 dargestellt. MATLABr (integriert) Algorithmus Laufzeit [sec] abs. Abweichung rL ode23 22.7 2.15 · 10−3 ode45 7.3 1.93 · 10−3 ode15s 15.8 1.87 · 10−3 ode113 11.2 1.02 · 10−3 Verschiedene Algorithmen (implementiert) rk4 52.3 6.33 · 10−5 predcorr 38.2 0.93 · 10−3 bsstep 70.4 4.23 · 10−5 abs. Abweichung g.c. 3.42 · 10−4 0.76 · 10−4 0.68 · 10−4 0.41 · 10−4 1.54 · 10−4 0.33 · 10−4 0.06 · 10−4 Tabelle 3.1: Vergleich der Laufzeiten unterschiedlicher ODE-Solver“ ” Man erkennt, dass die in MATLABr integrierten ODE-Solver“ einen sehr großen ” Geschwindigkeitsvorteil gegenüber den weiteren Solvern haben. Man darf dabei allerdings nicht außer Acht lassen, dass die Genauigkeit der in MATLABr integrierten Solver stark schwanken. Wie oben beschrieben, gibt es keinen Automatismus für die Toleranzeinstellungen. Um vergleichbare Ergebnisse zu erhalten, sind alle Solver mit einer absoluten Toleranz von 1 · 10−10 berechnet worden. Um auch mit den in MATLABr integrierten Solvern ein möglichst genaues Ergebnis zu erhalten, sind die Toleranzwerte für jeden Solver auszuprobieren16 . Bei den Abweichungen fällt allerdings auf, dass der Versatz des Führungszentrums bei allen Algorithmen vergleichbar ist. Zum einen zeigt dieses, dass die Algorithmen alle relativ“ genau arbeiten und es bei ” keinem der Algorihmen zu einer großen Abweichung vom Theoriewert kommt und die Bewegung damit im Rahmen der Rechen- und Algorithmengenauigkeit genau beschrieben wird. Um allerdings zu vesrtehen, warum der Versatz des Führungszentrums bei den in MATLABr integrierten Solvern vergleichbar mit den genaueren“ Algorithmen ist, ” kann man eine Gyration ohne eine Geschwindigkeitskomponente in Richtung des Magnetfeldes genauer betrachten. Dann erwartet man nach der in 2 beschriebenen Theorie eine geschlossene Kreisbahn. Verwendet man die in MATLABr integrierten 16 um einen weiteren Einblick in die Unterschiede der integrierten Solver zu erhalten, wird an dieser Stelle auf [34] (S. 20, Tabelle 8) verwiesen, hier findet sich ein Vergleich der unterschiedlichen r MATLAB Solver für verschiedene Probleme 34 3.5 Geschwindigkeitskriterium Numerische Beschreibung der Bewegung ODE-Solver“, so erhält man keine geschlossene Kreisbahn sondern je nach Güte des ” Verfahrens einen mehr oder weniger dicken Kreisrand. Dieses lässt sich besonders eindrucksvoll darstellen, wenn man in MATLABr die Funktion Zoom in verwendet und ein kleines Stück des Kreisrandes sehr groß betrachtet. Dieses ist in Abb. 3.8 dargestellt. Abbildung 3.8: Genauigkeit der ODE Verfahren; Gyration eines geladenen Teilchens mit einer Ausschnittsvergrößerung von einem Segment der Größe 5 · 10−4 × 5 · 10−4 , dabei wurde die Standardeinstellung der relativen Toleranz gewählt Man erkennt, dass die einzelnen Verfahren durchaus große Unterschiede aufweisen, im Mittel liegt die Breite des Kreisrandes bei 2 · 10−3 . Dieses ist im Rahmen des Standardwertes für die relative Toleranz der ODE-Solver“ zu verstehen. Aber ge” rade diese macht das Verfahren ja auch wie oben gezeigt langsam. Will man eine höhere Genauigkeit erreichen, so muss man die relative Toleranz verändern. Dieses geht jedoch auf Kosten der Simulationsgeschwindigkeit. Durch die Breite des Bandes ist aber gerade zu erklären, warum der Versatz des Führungszentums im Mittel mit den spezialisierten Solvern vergleichbar ist. Wenn der Gyrationsradius schwankt, so wird er mal Werte annehmen, die größer bzw. kleiner dem Theoriewert sind, somit weicht auch die Berechnung des Führungszentrums ab, diese Abweichungen heben sich allerdings im Mittel gerade auf. Da in dieser Arbeit die physikalischen Prozesse und eine Verdeutlichung dieser im Vordergrund stehen, werden im folgenden zur Entwicklung der Visualisierung der Teilchenbahnen unter MATLABr die in Abschnitt 3.4 beschriebenen Verfahren verwendet. Diese erlauben eine schnelle und annähernd der Theorie entsprechende graphische Darstellung der Teilchenbahnen (die berechneten Abweichungen liegen bei einer graphischen Darstellung in MATLABr gerade bei einem drittel der Linenbreite 35 3.6 Zusammenfassung Numerische Beschreibung der Bewegung und sind somit zu vernachlässigen). Um dem Benutzer eine weitere Möglichkeit zu bieten mit höherer Genauigkeit zu arbeiten, wird zusätzlich zu der Visualisierung ein weiteres graphischen Interface zur Verfügung gestellt, welches es dem Benutzer erlaubt die Toleranzen sowie den ODE-Solver“ selbst zu wählen. Hiermit ist es ” möglich, die oben beschriebnen Phänomene selbst auszuprobieren. Grundlage einer schnellen, wenn auch wie oben gezeigt, nicht immer vollständig exakten Lösung bietet wie auch von W.H. Press [29] beschrieben, das Runge-Kutta Verfahren, hier in der Implementation von J.R. Dormand und P.J. Prince [8]. 3.6 Zusammenfassung Die in diesem Abschnitt gemachten Beschreibungen der numerischen Verfahren dienen dazu, einen Einblick in die Verfahrensweise von ODE-Solvern“ zu erhalten. Mit ” Hilfe der in MATLABr integrierten Verfahren ist es möglich, die aufgestellten Bewegungsgleichungen geladener Teilchen in elektromagnetischen Feldern numerisch zu untersuchen und darzustellen. Die in MATLABr zur Verfügung stehenden Algorithmen basieren auf den Einschritt- und Mehrschrittverfahren. Alle diese Verfahren basieren im Prinzip auf der grundlegenden Idee von Euler, dass man einen Kurvenverlauf durch linearisierte Teilstücke ausdrücken kann. Die Einschrittverfahren unterscheiden sich dann nur durch die Erzeugung dieser linearisierten Teilstücke. Dabei ist für jeden weiteren Linearisierungsschritt unterschiedlicher Rechenaufwand nötig. Die Mehrschrittverfahren, gewinnen im Gegensatz zu den Einschrittverfahren nicht nur aus der Ableitung der Kurve selbst sondern auch über die Historie“ ” des Kurvenverlaufs weitere Informationen um eine Linearisierung möglichst genau vorzunehmen. Jedes der vorgestellten Verfahren hat seine Vor- und Nachteile, die zum einen in sehr hohem Rechenaufwand zum anderen darin begründet liegen, dass sie vom Verfahren her nur mit speziellen Typen von Differenialgleichungen schnell und effizient arbeiten können. Als ein allgemein verwendetes Verfahren für fast beliebige Verläufe erweist sich das adaptive Runge-Kutta Verfahren bzw. der adaptive RungeKutta-Merson Algorithmus. Hier ist zwar der Rechenaufwand pro Schritt sehr groß, aber dieses Verfahren liefert innerhalb der Fehlertoleranz schnelle und präzise Werte. Daher wird das Runge-Kutta Verfahren auch für die Visualisierung in MATLABr standardmäßig verwendet. Die Verwendung ergibt sich bei der Visualisierung gerade aus dem Aspekt heraus, dass man nicht unbedingt mit sehr großer Genauigkeit den mathematischen Ausdruck widerspiegeln will, sondern gerade durch die Visualisierung erreichen will, dass man die Physik hinter den in Abschnitt 2 beschriebenen Formeln verdeutlicht. Die in diesem Abschnitt erläuterten Verfahren und Lösungsstrategien mit MATLABr beinhalten alle die Voraussetzung, dass man die Differentialgleichungsysteme auf Systeme gewöhnlicher Differentialgleichungen erster Ordnung zurückführen kann. Dann können diese simultan gelöst werden. Des weiteren soll an dieser Stelle noch auf den Verlet Algorithmus17 hingewiesen werden. Mit diesem Algorithmus wird eine Differentialgleichung nicht simultan sondern sequentiell gelöst. Dieses Verfahren benötigt immer zwei Schritte und soll hier nur exemplarisch für eine Reihe 17 36 siehe Velocity-Verlet Algorithmus Anhang C.5 3.6 Zusammenfassung Numerische Beschreibung der Bewegung weiterer Verfahren zur numerischen Berechnung von Differentialgleichungen dienen. Die hier vorgestellten numerischen Grundlagen dienen dazu, ein Verständnis für die Arbeitsweise der Algorithmen zu bekommen und wie diese sich bei unterschiedlichen Problemen verhalten bzw. welche Berechnungen jewels intern nötig sind um eine ODE zu lösen. Mittels dieser Grundlagen und der in MATLABr integrierten ODE Solver“ ist es möglich die Bewegung von geladenen Teilchen in elektroma” gnetischen Feldern zu beschreiben. Die Newton’sche Bewegungsgleichung ist mittels der Numerik für den Computer berechenbar und die Ergebnisse können graphisch dargestellt werden, dieses soll im folgenden Abschnitt geschehen. Basierend auf den theoretischen Grundlagen der Bewegung und auf den numerischen Verfahren zum lösen von ODE’s ist das im folgenden beschriebene Programm entwickelt worden. 37 Visualisierung in MATLAB 4 Visualisierung in MATLAB r Die beiden vorherigen Abschnitte behandelten theoretisch die Bewegungen von geladenen Teilchen mittels der Newton’schen Bewegungsgleichung und die Möglichkeiten diese numerisch zu beschreiben. Diese beiden Abschnitte sollen nun dazu dienen, die Bewegungen deutlich werden zu lassen. Hierzu werden die Bewegungen in unterschiedlichen Feldern dargestellt. In diesem Abschnitt soll beschrieben werden, welche Grundlagen aus den vorherigen Abschnitten herangezogen wurden um eine Darstellung mit MATLABr zu erreichen und wie dieses in MATLABr zu implementieren ist. Allgemein stellt sich die Frage, warum man überhaupt eine Visualisierung von Vorgängen umsetzen möchte, die im weitesten durch die mathematischen Formeln beschrieben wurden und die mit Hilfe der Numerik auch berechnet werden können. Hierzu ist wohl eine der treffensten Aussagen die von P. Marchand [21], die auch auf die Problemstellung dieser Arbeit übetragen werden kann Why would I ever want to visualize my data? At its very essence, ” science is the quest for truth. However, some of those truths are not easily discovered, and in many cases, we dont even know how to ask the appropriate questions that will lead to the truth. Consider the fact that many natural phenomena are too fast, too slow, too large, or too small to be studied through direct observation or with traditional laboratory techniques. How can we see the unseen or gain enough insight into the nature of things to even know what is worthwhile to investigate? . . . A dictionary will tell us that to visualize means: To form a mental image or vision of. . . . represent something, whether that something is a graphical representation of a real-world object, a hypothetical mathematical construct, or specific values of some measurable quantities.“ Eben das hier beschriebene Problem too large“ gegen too small“ stellt sich in dieser ” ” Arbeit. Die Mechanismen die in Abschnitt 2 beschrieben wurden, sind hauptsächlich Vorgänge, wie sie im Erdmagnetfeld vorkommen. Diese Siuation lässt sich nur im begrenzten Maße bzw. gar nicht im Labor nachstellen. Gerade hier tritt die große Diskrepanz zwischen den Skalen zum Vorschein, die Ausmaße eines geladenen Teilchens und die im Vergleich hierzu riesige Ausdehnung des Erdmagnetfeldes. Um dieses David gegen Goliath Problem zu untersuchen und die physikalischen Prozesse deutlich werden zu lassen, bedient man sich des Mittels der Visualisierung. 4.1 Implementierung (GUI) Um nun die Theorie, welche hinter den Bewegungen der geladenen Teilchen steckt näher zu verstehen, ist es sinnvoll die einzelnen Bewegungen zu simulieren und die Bedienung der Simulation so einfach wie möglich zu gestalten. Dieses unterstützt MATLABr durch die Möglichkeit graphische Bedienelemente (engl. graphical user interface (GUI)) mit einzubinden. Diese GUI’s ermöglichen einem mit denen in 38 4.1 Implementierung (GUI) Visualisierung in MATLAB allen Programmen verwendeten Objekten wie Icons“, Buttons“, etc. die Simula” ” tion mittels der Maus zu steueren ohne die Syntax von MATLABr selbst zu kennen. Man benötigt keine vertieften Kenntnisse um mit der Simulation Ergebnisse zu produzieren und einzelne Simulationsergebnisse zu speichern um diese weiter zu verwenden. Das GUI selber gliedert sich bei den neuen Versionen von MATLABr ab Version 5.3 Release 12 in eine FIG-Datei, welche dazu verwendet wird das Layout des GUI’s zu speichern und in eine m-Datei, in der die einzelnen Aufrufe bzw. Funktionen implementiert werden. Das GUI ist somit nichts anderes als wie der Name schon sagt ein Interface zwischen den teilweise komplexen Syntax Aufrufen in MATLABr und den einfachen Icons“, Buttons“ und Dropdownmenues“. ” ” ” Dieser Abschnitt soll eine kurze Zusammenfassung der Möglichkeiten darstellen, die MATLABr zur Verfügung stellt um GUI’s zu erstellen18 und gleichzeitig soll erläutert werden, wie das Programm particles entstanden ist, welches Ziel dieser Arbeit ist. Das Programm bzw. die Funktion particles (bestehend aus den Dateien: particles.m und particles.fig) bildet die graphische Steuerung der Visualisierung. Die beiden Dateien wurden mit Hilfe von GUIDE (GUI Development Environment) erzeugt. Dieses Tool lässt sich in MATLABr mit dem Aufruf >> guide starten. Das Tool GUIDE bietet die Möglichkeit, Bedienelemente direkt graphisch zu bearbeiten (Position, Höhe, Breite, Farbe etc.) und Eigenschaften einzustellen. Die Funktionen, die diese Elemente dann ausführen (Callback) sind in der m-Datei enthalten und beinhalten die MATLABr Syntax. Das GUI lässt sich dann in MATLABr mit dem Aufruf >> particles starten. MATLABr verbindet automatisch das Layout der fig-Datei und die Aufrufe in der m-Datei. Im GUIDE Editor sieht das Layout des Programms wie in Abb. 4.1 dargestellt aus. Hier können die einzelnen Schalter, Knöpfe etc. positioniert werden und die Eigenschaften der einzelnen Elemente mittels des Property-Inspectors gesetzt weden. Jedes in Abb. 4.1 dargestellte Element hat eine Callback Funktion, mittels derer die einzelnen Abläufe gesteuert werden können. Die Callback Funktionen befinden sich in der Funktion particles.m und in vollständiger und auskommentierter Form im Anhang (siehe Anhang D). Eine genaue Beschreibung aller verwendeten Bedienelemente und deren Funktion für die Simulation findet man in Abschnitt 4.3. Im folgenden sollen die in den Abschnitten 2 und 3 gemachten theoretischen Grundlagen in MATLABr umgesetzt werden. Alle in diesem und im vorherigen Abschnitt verwendeten MATLABr Dateien befinden sich auf der dieser Arbeit beigefügten CD-Rom, des weiteren beinhaltet diese eine HTML Dokumentation der Simulation (Microsoft IE, Netscape sowie MATLABr kompatibel). 18 für eine umfassende Beschreibung der einzelnen GUI Komponenten soll an dieser Stelle auf P. Marchand [21] Chapter 10 Elements of GUI Design verwiesen werden 39 4.2 Mathematische Umsetzung Visualisierung in MATLAB Abbildung 4.1: GUIDE-Ansicht des Layouts vom Programm particles (GUI Steuerung der Visualisierung); exemplarisch ist der Property-Inspector des Buttons Solver geöffnet 4.2 Mathematische Umsetzung Wie schon in Abschnitt 3.1 beschrieben, lassen sich die einzelnen Komponenten der Bewegungsgleichung Formulieren. Im folgenden soll erläutert werden, wie die in Abschnitt 2 beschriebenen Gleichungen und Bewegungen in eine Syntax von MATLABr überführt werden können und wie diese mit den numerischen Hilfsmitteln aus Abschnitt 3 gelöst werden können. Zunächst werden einige Variablen in der Funktion eqMotion.m gesetzt, diese Variablen können in einer weiteren Version des Visualisierungsprogramms geändert werden, bei der hier vorliegenden Version des Programms soll von relativen Einheiten ausgegangen werden. Diese werden allerdings direkt zu Begin der Funktion eqMotion.m gesetzt um das Programm für einen weiteren Einsatz möglichst flexibel zu gestalten. Die vordefinierten Variablen sind der Radius R0 der zur Beschreibung der radialsymmetrischen Felder verwendet wird (dieser bezieht sich auf die Einheiten von einem Erdradius) und die Masse des Teilchens mass=1 (bezieht sich auf eine Protonenmasse) sowie die Ladung charge die auf ±1 (bezieht sich auf die Ladung eines Elektrons) gesetzt wird. Gleichung (2.1) beschreibt allgemein die Bewegungsgleichung eines geladenen Teilchens in einem Magnetfeld unter der Einwirkung einer weiteren Kraft. In den in dieser Arbeit vorausgesetzten elektromagnetischen Feldern, tritt diese zusätzliche Kraft in Form der elektrischen Kraft auf. Eine spezialisiertere Form von Gleichung (2.1) stellt (3.1) dar. Hier sind die einzelnen ODE’s noch in Form eines vektoriellen Gleichungssystems beschrieben. Diese kann verwendet werden, um eine Syntax zu erstellen, mit der man in MATLABr arbeiten kann. Die oben beschriebenen Verfahren gehen auf eine Differentialgleichung der Form y ′ = f (x, y) zurück. Überträgt man dieses auf Gleichung (3.1) so geht man hier von einem System von ODE’s der vektoriellen Form ~v˙ = f ~t, ~v aus, dieses dv/dt System lässt sich in MATLABr durch 40 4.2 Mathematische Umsetzung Visualisierung in MATLAB dvdt = [ v(4,:) v(5,:) v(6,:) charge/mass*( E(1) +(v(5,:).*B(3) -v(6,:).*B(2)) ) charge/mass*( E(2) +(v(6,:).*B(1) -v(4,:).*B(3)) ) charge/mass*( E(3) +(v(4,:).*B(2) -v(5,:).*B(1)) ) ]; ausdrücken. Hierbei bilden die letzten drei Elemente die Analogie zu Gleichung (3.1), die einzelnen Komponenten des elektrischen Feldes und das Kreuzprodukt des Geschwindigkeitsvektors und der Magnetfeldkomponenten. Die Zahlen 1, 2 und 3 stehen jeweils für die Komponenten x, y und z des Vektors. Bei dem Geschwindigkeitsvektor v sind die ersten drei Komponenten v(1:3,:) der Ort und die letzten drei Komponenten v(4:6,:) die Geschwindigkeiten in die einzelnen Richtungen. Die Gesamtgeschwindigkeit ergibt sich dann aus der Vektorsumme der letzten drei Komponenten. Das magnetische Feld B sowie des elektrische Feld E sind abhängig von der Wahl im GUI. Die Felder jeweils nur in eine Raumrichtung werden durch B = B0*[strength 0 0]; E = E0*[strength 0 0]; dargestellt, wobei die Position der Variablen strength mit der Raumrichtung verknüpft ist. Weitere Feldstrukturen werden durch Überführung der einzelnen Komponenten in eine kartesische Schreibweise ausgedrückt. Im folgenden sollen die einzelnen Feldstrukturen dargestellt werden, die dem GUI zugrunde liegen. Das dBz/dy-Feld wird durch eine zusätzliche Komponente in der z-Richtung beschrieben, welche von dem Wert y abhängig ist. Dabei ergibt sich der Vektor des Magnetfeldes zu B = B0*[0 0 1+value*strength*y]; Für das Toroidal Feld (siehe Magnetic Field of Toroid by Hyperphysics [12])werden die Toroidal Koordinaten in kartesische Koordinaten umgerechnet (siehe mathworld [37], [4] Section C, Toroidal Systems) somit gilt R = sqrt(x^2+y^2); cosphi = x/R; sinphi = y/R; B = B0*R0/R*[-sinphi cosphi 0]*strength; Für die Simulation eines Tokamaks (Magnetkäfig) werden drei sich überlagernde Magnetfelder benötigt. Zunächst ein ringförmiges Feld, des weiteren ein Feld, welches durch den Stromfluss innerhalb des Ringes erzeugt wird. In diesem kombinierten Feld laufen die Feldlinien dann schraubenförmig um. So wird eine Verdrillung erzeugt, die die Teilchen innerhalb des beschriebenen Ringes hält. Ein drittes vertikales Feld fixiert die Lage des Stroms (Geometrie eines Tokamak’s siehe Abb. 4.2). Damit ergibt sich für die Beschreibung in kartesischen Koordinaten (Grundlage Transformation der Toroidal Koordinaten) folgende Darstellung19 19 siehe auch Max-Planck-Institut für Plasmaphysik (IPP MPG) 41 4.2 Mathematische Umsetzung Visualisierung in MATLAB R = sqrt(x^2 +y^2); cosphi = x/R; sinphi = y/R; rho = sqrt((R-R0)^2 + z^2); sint = -z/rho; cost = (R-R0)/rho; Bt = B0 * (R0/R)*[-sinphi Bp = B0 *(rho/R)*[-cosphi*sint B = Bt +Bp/q; cosphi -sinphi*sint 0 ]; -cost ]; Abbildung 4.2: Tokamak (Quelle: [37]) Die Magnetfeldstärke in einem Dipolfeld wird durch den Abstand vom Mittelpunkt r, durch die magetische Länge λ (Analog zur geographischen Länge) und durch das Dipolmoment M charakterisiert. Heirbei gilt M (4.1) B(r) = 3 1 + 3 sin2 λ . r Mit einer Transformation in kartesische Koordinaten ergibt sich für das Programm die folgende Darstellung r = x^2 +y^2 +z^2; B = M*r^(-2.5)*[ 3*x*z 3*y*z 3*z^2-r]*strength; Das zeitlich variable E-Feld wird durch die folgenden Zeilen beschrieben E = E0*[ 0 t*charge/mass*Btot 0]*strength; wobei Btot die Norm des B-Feldes ist somit Btot=norm(B). Mit diesen Darstellungen ist es MATLABr möglich dvdt zu beschreiben und die ODE’s zu lösen, hierzu wird der Aufruf options = odeset(options,’AbsTol’,1.e-10,’OutputFcn’,’odephas3’); feval(’solvername’,@fun,tspan,y0,options); verwendet. MATLABr erzeugt mit diesem Aufruf einen Plot der Flugbahn. Dieser Plot kann im GUI dargestellt werden. Die Callback-Funktionen in particles.m übergibt der Funktion eqMotion.m die einzelnen Parameter, welche aus dem GUI ausgelesen werden und die Funktion eqMotion.m verwendet diese um damit nach Gleichung (3.1) die Differentialgleichungen zu lösen und einen Plot der Flugbahn zu erzeugen. Im folgenden soll das Programm, welches auf den hier gemachten mathematischen Überlegungen beruht genauer beschrieben werden und Ergebnisse der Simulationen vorgestellt werden. 42 4.3 Programmfunktionen 4.3 Visualisierung in MATLAB Programmfunktionen Wie schon oben erwähnt wurde aus den in den Abschnitten 2 und 3 erläuterten Grundlagen ein Programm zur Visualisierung der Bewegung erzeugt. Dieses stellt den Schwerpunkt dieser Arbeit dar. Das Programm selbst ist in Form eines GUI’s für MATLABr programmiert worden. Die einzelnen Elemente sind zur Eingabe der unterschiedlichen Parameter, die in die Bewegungsgleichung mit einfließen. Somit ist es möglich die oben theoretisch besprochenen Flugbahnen eines Teilchens unter verschiedenen Bedingungen und mit verschiedenen initialisierenden Parametern zu simulieren. Dieses ist wie schon in der Einleitung erwähnt der maßgebende Teil dieser Arbeit. Die Visualisierung der Bewegung geladener Teilchen in elektromagnetischen Feldern, geschieht über das Programm particles. Dieses stellt eine Graphische Benutzeroberfläche zur Verfügung um die einzelnen Parameter der Bewegung einzustellen und erzeugt basierend auf den in Abschnitt 3 erläuterten numerischen Verfahren eine Berechnung und Darstellung der Flugbahn. In diesem Abschnitt soll die Funktionsweise des GUI’s und die einzelnen Bedienelemente erläutert werden. In einem zweiten Teil werden exemplarisch einige Simulationsergebnisse dargestellt, die die in Abschnitt 2 beschriebenen Feldstrukturen und die mit ihnen verbundenen Bewegungen darstellen. Mit Hilfe des GUI’s sind beliebige Parameter möglich und somit eine Visualisierung unterschiedlichster Bewegungen. Grundlage aller Bewegungen bilden die theoretischen Betrachtungen aus Abschnitt 2. 4.3.1 Bedienung Das Programm particles ist eine graphische Benutzeroberfläche. Das GUI bietet eine Methode zur Bedienung der Simulation unter Verwendung von bildlichen Schaltflächen und Befehlsleisten, die mit der Maus gesteuert werden können. Diese Art der Steuerung ist einfacher und intuitiver als eine Befehlszeilen-Oberfläche. Die in Abschnitt 4.2 dargestellten MATLABr Fragmente ließen sich auch alle über den MATLABr -Prompt eingeben. Dieses für jede Visualisierung allerdings zu wiederholen, bzw. die Befehle in einer m-Funktion iterativ (quasi als Spagetti-Code“) abzuarbei” ten würde bedeuten, dass man für jede neue Berechnung einen neuen Aufruf bzw. eine Änderung der m-Funktion benötigt. Um dieses dem Benutzer zu ersparen bzw. um eine einfachere Bedienung zu gewährleisten, wurde ein GUI in MATLABr erzeugt, dieses steuert die Parameter der Bewegungsgleichung mittels graphischer Bedienelemente und erlaubt ohne erneute Aufrufe eine weitere Simulation. Im folgenden wird kurz beschrieben, wie das Programm aufgerufen werden kann und welche Funktion die einzelnen Bedienelemente haben. Um das Programm zu starten, ändert man nach dem Start von MATLABr das Current Directory auf den Pfad, in dem das Programm liegt (Beispiel: >> cd c:\programme\ für Windowsc bzw. >> cd ../home/user/programme/). Nun kann man das Programm mit dem Aufruf >> particles starten. Nach diesem Aufruf erscheint das in Abb. 4.3 dargestellte GUI. Die Bedienelemente links des Titelbildes und unterhalb dienen zur Einstellung der Parameter der Simulation. Hierbei kann die Teilchenart durch exklusive Radiobutton’s fest43 4.3 Programmfunktionen Visualisierung in MATLAB Abbildung 4.3: Graphische Benutzeroberfläche der Visualisierung mit Titelbild gelegt werden. Diese Radiobutton’s sind in der m-Datei mit Callback Aufrufen verknüpft, diese setzen je nach gewählter Teilchenart die globalen Variablen der Masse mass sowie die Ladung charge auf die für die Teilchenart charakteristischen Werte20 . Mittels der Eingabefelder für die Positionen ist es möglich die Startposition eines Teilchens innerhalb eines kartesischen Koordinatensystems festzulegen. Die einzelnen Werte werden dann in den Variablen xpos, ypos und zpos abgelegt. Des weiteren ist es möglich die Anzahl der Iterationen nLarmor zu wählen, diese Iterationen beziehen sich auf die zu simulierende Zeitspanne. Diese Zeitspanne wird wie oben beschrieben in dem Vektor tspan gespeichert. In diesem Fall steuert man die Zeitspanne über die Angabe der Larmorradien, der Vektor ergibt sich aus der Gyrationsfrequenz Omega0=charge/mass*B0 und der Anzahl tspan=[0 nLamor*OmegaO*(2*pi)]. Unterhalb des Titelbildes befinden sich die Popup-Menüs zur Auswahl der einzelnen Felder, hier werden einige Felder fest vorgegeben, mit denen in Abschnitt 4.2 erläuterten Geometrien. Mittels des Popup-Menüs kann man zwischen folgenden Magnet- und Elektrischen-Feldern wählen und diese beliebig kombinieren B-Feld B=0, Bz, dBz/dy, dBz/dz cusp, B toroidal, B tokamak, B dipole, user defined E-Feld E=0, Ex, Ez, dEy/dt, user defined Des weiteren kann man in den Eingabefeldern die Stärke des Feldes festlegen, dabei geht man hier von einer einheitslosen Betrachtung aus. Die Buttons auf der rechten Seite sind zur Steuerung des Ablaufes der Simulation. Der START- und STOPButton sind selbsterklärend. Mit dem ADD-Button ist es mögich weitere Bewegungen in den schon simulierten Plot einzubinden. Auf diese Weise lassen sich z.B. die unterschiedlichen Gyrationsrichtungen von Elektronen und Protonen darstellen. Mittels des CLEARButtons lässt sich das Axis-Objekt löschen, bzw. die gezeichnete Flugbahn löschen. Der SOLVER-Button ruft ein weiteres GUI solvercontrol auf, mit diesem ist es möglich die Standardwerte für die in der Visualisierung verwendeten ODE Solver“ ” 20 in der jetzigen Version des Programms werden relative Einheiten verwendet, diese Beschreibung gilt somit bei einer Änderung der Konstanten in eqMotion.m 44 4.3 Programmfunktionen Visualisierung in MATLAB per Hand zu setzen. Die Standardwerte werden mit dem DEFAULT-Button wieder hergestellt. So ist es möglich auch die Genauigkeit der Solver zu vergleichen und je nach Problem insbesondere die relative Toleranz zu setzen, da es hierfür keinen Automatismus gibt. Die Standardwerte des Solvers sowie auch der anderen Eingabeelemente sind so gewählt, dass sie ohne Veränderungen eine optimale Simulation des gewählten Problems bilden. Mit dem HELP-Button ruft man die HTML-Dokumentation des Programmes auf, diese beinhaltet eine kurze Zusammenfassung der in dieser Arbeit behandelten Themengebiete, damit das Programm auch ohne den Kontext dieser Arbeit zu kennen, verwendet werden kann. Die Dokumentation führt dabei kurz in die Thematik der Bewegung geladener Teilchen in elektromagnetischen Feldern ein. Des weiteren wird ein kurzer Abriss der Solver gegeben, die verwendet wurden und der Verfahren die hinter Abbildung 4.4: Solver Control diesen stehen. Für weitere Details hierzu wird auf die entsprecheneden Kapitel in der MATLABr -Dokumentation hingewiesen. Mit dem CLOSE-Button schliesst man das Programm. Das Programm sowie die einzelnen Callback Funktionen befinden sich in auskommentierter Form im Anhang, das Programm befindet sich auf der beigefüten CD-Rom. 4.3.2 Screenshots Die in Abschnitt 2 beschriebenen Bewegungen können mit dem Programm simuliert werden. An dieser Stelle sollen exemplarisch einige Konfigurationen und die Ergebnisse dargestellt werden und mit den theoretisch diskutierten Bewegungen verglichen werden. Die hier angeführten Einstellungen dienen auch dazu, ein erstes Verständnis im Umgang mit dem Programm zu erhalten. 4.3.2.1 Gyration Zunächst soll die Gyration simuliert werden, hierzu werden in der Simulation die Parameter Elektron,xpos=0,ypos=0,zpos=0,vx=4,vy=4,vz=0 gewählt und ein Magnetfeld in Bz Richtung vorgegeben. Dabei entsteht wie in Abb. 5(a) dargestellt ein Kreis. Wählt man eine Geschwindigkeit in z-Richtung die von Null verschieden ist, so ergibt sich wie in Abb. 5(b) dargestellt eine Spiralbahn des Teilchens (die dargestellten Flugbahnen sind mit denen in Abb. 2.2 vergleichbar). 4.3.2.2 Driften In diesem Abschnitt sollen einige Driften dargestellt werden, dabei sind die Parame~ × B~ ter so gewählt, dass sie das theoretisch erläuterte Verhalten aufweisen. Die E Drift soll exemplarisch für die Gradientendrift und die Polarisationsdrift dargestellt werden. Hierbei wurden die folgenden Parameter egwählt Elektron, xpos=0, ypos=0, zpos=0, vx=40, vy=40 und vz=0 gewählt und ein Magnetfeld in Bz Richtung und einem Elektrischen Feld in Ex Richtung. Dann ergibt sich die in Abb. 6(a) dargestellte Flugbahn. Des weitern kann eine Krümmungsdrift simuliert werden, hierzu 45 4.4 Zusammenfassung Visualisierung in MATLAB (a) Simulierte Kreisbahn der Gyration (b) Simulierte Spiralbahn der Gyration Abbildung 4.5: Simulierte Gyration sind die Parameter Elektron, xpos=1, ypos=0, zpos=0, vx=4, vy=4 und vz=7 zu wählen. Dabei ergibt sich der in Abb. 6(b) dargestellte Verlauf. ~ × B-Drift ~ (a) Simulierte E (b) Simulierte Krümmungsdrift Abbildung 4.6: Simulierte Driften 4.3.2.3 Bewegung im Dipolfeld Wie in Abb. 2.10 dargestellt, kann man die Bewegung geladener Teilchen im Erdmagnetfeld als Zusammenfassung aller Bewegungen sehen. In der Visualisierung lässt sich dieses mit den Parametern xpos=1, ypos=0, zpos=0, vx=4, vy=4 und vz=8 und dem B dipol simulieren. Das Ergebniss der Visualisierung ist in Abb. 4.7 dargestellt. 4.4 Zusammenfassung Die Visualisierung bietet ein umfassendes Hilfsmittel in der modernen Physik. Einzelne physikalische Vorgänge, die sich teilweise nur über komplizierte Formeln ausdrücken lassen, verschliessen sich zumeist einem direkten Verständnis, gerade wenn 46 4.4 Zusammenfassung Visualisierung in MATLAB Abbildung 4.7: Simulierte Flugbahn in einem Dipolfeld diese Vorgänge sich im Mikrokosmus (Diskontinuum) abspielen. Erst wenn ein Vorgang simuliert wird und somit sichtbar gemacht wird, erhält man einen Einblick, was durch die Mathematik beschrieben wird. Die Bewegungen von geladenen Teilchen lassen sich durch die Newton’sche Bewegungsgleichung beschreiben, um diese Bewegungen zu simulieren, ist eine numerische Behandlung nötig. Das in dieser Arbeit entwickelte Programm particles ermöglicht eine Visualisierung von geladenen Teilchen in unterschiedlichen elektrischen bzw. magnetischen Feldern. Das Programm ist für MATLABr konzipiert und verwendet bei der Visualisierung der Bewegung, die in MATLABr integrierten numerischen Funktionen. Dabei macht man sich zu Nutze, dass MATLABr verschiedene Funktionen zur Ausführung mathematischer Optionen und für die Datenanalyse anbietet (hier seien nur die für diese Arbeit verwendeten Funktionen genannt, einen genauen Überblick findet man unter MathWorks (MATLABr Online Dokumentation)) • Matrizenmultiplikation • Polynome und Interpolation • Optimierung und numerische Integration • Gewöhnliche Differentialgleichungen • .. . Mit diesen Funktionen ist es möglich die Bewegungsgleichung von geladenen Teilchen zu beschreiben und zu berechnen. Die großen Datenmengen, die bei der Berechnung entstehen, da je nach angewendetem Lösungsverfahren unterschiedlich viele Rechenschritte nötig sind, lassen sich in MATLABr darstellen. Die mathematische ~ ~ Beschreibung der Bewegung liefert bei gegebenen Feldern B, E jeweils die Beschleunigung ~v˙ = ~a. Dieses ergibt sich aus dem zweiten Newton’schen Gesetz, dieses besagt, dass die Beschleunigung a eines Körpers der Masse m proportional zu der 47 4.4 Zusammenfassung Visualisierung in MATLAB auf ihn wirkenden Kraft F~ ist. Durch diese Beziehung kommt man auf die in Abschnitt 2 beschriebenen Bewegungen. Auf ein geladenes Teilchen wirkt in einem ~ ~ elektromagnetischen Feld die elektrische Kraft q E und die Lorentzkraft q ~v × B . Diese Kräfte sind von der Beschaffenheit des Feldes abhängig. Dieses macht sich bei der Numerik allerdings nur darin bemerkbar, das die Komponenten der Vektoren B=B0*[value1 value2 value3] bzw. E=E0*[value1 value2 value3] unterschiedlich sind. Mittels der numerischen Hilfsmittel von MATLABr ist es möglich die ODE’s zu lösen und die Teilchenbewegung anhand der Beschleunigung und der Kenntnis der Feldstruktur über einen bestimmten Zeitraum tspan zu entwickeln und darzustellen. Dieses ist mit dem Pogramm particles möglich, es basiert mathematisch auf der Beschreibung der Newton’schen Bewegungsgleichung und löst diese in Abhängigkeit der Feldstruktur mit den in MATLABr integrierten ODE ” Solvern“. Das Programm ist mit MATLABr 6.5 geschrieben und lässt sich mit folgendem Aufruf starten >> particles Die Dokumentation des Programms kann man sich entweder im Programm selbst über den HELP-Button anzeigen lassen, bzw. aus dem MATLABr Prompt mit >> open particles.html aufrufen. Voraussetzung hierfür ist allerdings, dass man MATLABr nicht als nur Terminal-Session geöffnet hat. Das Programm bietet mittels eines GUI’s eine komfortable Steuerung um schnell sichtbare Ergebnisse zu erhalten. Die einzelnen Komponenenten, die mit in die Bewegungsgleichungen einfließen wie die Ladung (Elektron/Proton), die Anfangsposition, die Geschwindigket des Teilchens, die Zeitspanne und die Feldgeometrie können mittels der graphischen Elemente ausgewählt und verändert werden. Das GUI erzeugt dann eine graphische Darstellung der virtuellen Flugbahn eines Teilchens mit den eingestellten Parametern. 48 Zusammenfassung 5 Zusammenfassung Die Bewegungen geladener Teilchen in elektromagnetischen Feldern sind unter Umständen mathematisch sehr schwer zu beschreiben und zu verstehen. Die Bewegungen der Teilchen resultieren aus den Kräften, die auf sie wirken. Nach dem zweiten Newton’schen Gesetz, sind alle Kräfte, die auf ein Teilchen wirken proportional zu seiner Beschleunigung, es lässt sich somit ein mathematischer Zusammenhang zwischen den Kräften und der Beschleunigung in Form einer Bewegungsgleichung aufstellen. Die in dieser Arbeit betrachteten Kräfte sind die Lorentzkraft und die elektrische Kraft, die auf geladene Teilchen in elektromagnetischen Feldern wirken. Diese Kräfte sind von der Beschaffenheit der Felder abhängig und können daher sehr unterschiedlich ausprägt sein. Sie führen dazu, dass die Teilchen Gyrationsbewegungen sowie Driften ausführen. Die Lösung der zu den Bewegungen gehörenden Differentialgleichung ist dabei teilweise sehr komplex. Um die mathematische Beschreibung der Einzelteilchenbewegungen verständlich werden zu lassen, sind die Bewegungen mit Hilfe von MATLABr simuliert worden. Hierbei wird aus der grauen mathematischen Theorie der Bewegungsgleichungen eine bunte und anschauliche Visualisierung geschaffen. Auf diese Weise ist ein Verständnis der einzelnen Bewegungen viel einfacher zu erreichen und man erhält einen Eindruck davon, was durch die Mathematik beschrieben wird. Warum wurde MATLABr zur Visualisierung verwendet? Die Antwort liegt in der Art und Weise wie MATLABr intern arbeitet und an den numerischen Hilfsmitteln die MATLABr zur Verfügung stellt. MATLABr arbeitet intern mit Matrizen und stellt auch Skalare durch eine 1×1 Matrix dar, sowie Vektoren durch n×1 bzw. 1×m Matrizen. Auf diese Weise ist es sehr einfach und intuitiv die Bewegungsgleichungen, welche zunächst vektoriell dargestellt wurden, in MATLABr mit Hilfe von 3 ×1 Matrizen darzustellen, wobei die einzelnen Komponenten jeweils eine Richtung im dreidimensionalem Raum darstellen. Des weiteren beinhaltet MATLABr numerische Hilfsmittel, die schon auf FORTRAN 90 Routinen zurückgehen (LAPACK, D02BGF, DIVPAG) und somit lange erprobt und zuverlässig sind. Hier seien nur das RungeKutta Verfahren vierter Ordnung, der Runge-Kutta-Merson Algorithmus und das Adams-Bashforth-Moulton Verfahren genannt. All diese Verfahren ermöglichen eine sehr schnelle numerische Berechnung der gegebenen Bewegungsgleichungen und man erhält auf diese Weise relativ genaue Ergebnisse, die im Rahmen der Rechengenauigkeit mit der Theorie übereinstimmen. Hierbei kann die Numerik niemals die analytischen Ergebnisse bis ins kleinste widerspiegeln, aber die Visualisierung der Datenmengen, die aus den numerischen Berechnungen resultieren, können uns einen viel tieferen Einblick und ein viel intuitiveres Verständnis der Physik geben, die hinter den Formeln steckt. 49 Abstract 6 Abstract The motion of charged particles is possibly hard to describe mathematically. The particles’ motion results from the analysis of all forces which have an effect on each particle. The resultant of all forces acting on a particle is proportional to the acceleration of this particle (Newton’s 2nd law), so it is possible to describe the trajectory of a charged particle in an electromagnetic field. In this case the acting forces are the Lorentz force and the electrical force. These forces depend on the composition of the field and could therefore be very variably marked; they lead to a gyration and a drift of particles. The equations of these movements are very variable and partly very complex. They depend on the fields, so it is only possible to solve this ordinary differential equation problem analytically when the fields are very homogeneous and not variable in time. When the fields vary in time and when they have a gradient of strength, the only way to solve such problems is to use numerical methods; this is done with MATLABr . In order to make the mathematical description of the particles’ motion understandable, the movements have been simulated by MATLABr . On this occasion a coloured and clear visualization is created from the grey mathematical theory of equations, an understanding of the single movements is easily achieved, and it is easier to get an impression of what is described by mathematics. Why has MATLABr been used for visualization? The answer lies in MATLABr ’s internal work and provision of numerical methods. MATLABr uses matrices for the calculations: it works internally with an 1 × 1 matrix for a scalar and uses n × 1 or 1 × m matrices for vectors. In this way it is very simple to implement the equations of motion in a very intuitive way by a 3 × 1 vector in which a single component represents a direction in the three-dimensional space. Furthermore, MATLABr contains numeric methods based on FORTRAN 90 routines (e.g. LAPACK, D02BGF and DIVPAG); therefore these methods are proven and reliable. Just a few shall be mentioned here: the Runge-Kutta method of fourth order, the Runge-KuttaMerson algorithm and the Adams-Bashforth-Moulton method. All these methods facilitate a very fast numerical calculation of the given equations of motion, so it is possible to receive relatively exact results which agree with the theory in the context of computed precision. The numerical results could never totally agree with the analytical ones, but the visualization of the data amount produced by numerical calculation enables us to gain a much deeper insight and an intuitive understanding of the physics behind the formulae. 50 LITERATUR Literatur [1] H. Alfvén, Tentative Theory of Solar Prominences, Ark. Mat. Astron. Fys. 27A, 1 (1940). [2] R. Ashino, M. Nagase, Rémi Vaillancourt, Behind and Beyond the MATLABr ODE Suite, The Centre de recherches mathématiques (CRM Université de Montréal), CRM-2651 (2000). [3] K. Betzler, Graphik-Workshop (Vorlesungsskript), Universität Osnabrück 2004. [4] H.J. de Blank, T.J. Schep, Guiding center motion, 5th Carolus Magnus Summer School, Bad Honnef, Germany, September (2001). [5] P. Bogacki, L.F. Shampine, A 3(2) pair of Runge-Kutta formulas, Appl. Math. Letters 2, 1 (1989). [6] J.J. Buchholz, Systemsimulation (Vorlesungsskript), Hochschule Bremen 1999. [7] F.F. Chen, Introduction to plasma physics and controlled fusion, Vol. 1, Plenum Press, New York 1984. [8] J.R. Dormand, P.J. Prince, A family of embedded Runge-Kutta formulae, J. Comp. Appl. Math. 6, 19 (1980). [9] O. Forster, Analysis 2, Differentialrechnung im Rn , gewöhnliche Differentialgleichungen, Vieweg Verlag, Braunschweig 1999. [10] D. Goeken, O. Johnson, Fifth-order Runge-Kutta with higher order derivative approximations; 15’th Annual Conference of Applied Mathematics, Electronic Jounal of Diff. Eqau. Conf. 02, 1 (1999). [11] V.E. Golant, Fundamentals of plasma physics, Wiley, New York 1980. [12] HyperPhysics, (Link) http://hyperphysics.phy-astr.gsu.edu/hbase/magnetic/toroid.html, Georgia State University, Stand: 29. August 2004. [13] M.-B. Kallenrode, Space Physics, Ed. II, Springer, Berlin 2001. [14] M.-B. Kallenrode, Ausarbeitungen (Vorlesung Space Physics), Universität Osnabrück 2003. [15] W.H. Kegel, Plasmaphysik, Eine Einführung, Springer, Berlin 1998. [16] M.G. Kivelson, Introduction to space physics, Cambridge University Press, Cambridge 1997. [17] R. Knerr, Lexikon der Physik, vom Atom zum Universum, Bassermann Verl., München 2000. [18] A. Kneschke, Differentialgleichungen und Randwertprobleme, VEB Verlag Technik, Berlin 1960. 51 LITERATUR LITERATUR [19] N.A. Krall, A.W. Trivelpiece, Principles of Plasma Physics, McGraw-Hill Inc., New York 1973. [20] M.S. Longair, High energy astrophysics, Cambridge University Press, Cambridge 1992. [21] P. Marchand, O.T. Holland, Graphics and GUIs with MATLABr Ed. III, Chapman & Hall/CRC, Boca Raton, 2003. [22] J.H. Mathews, Numerical Methods, Prentice-Hall Inc., Englewood Cliffs 1992. [23] A.I. Morozov, L.S. Solev’ev, Motion of charged particles in electromagnetic fields, Rev. of Plasma Phys. Vol. 2, M.A. Leontorich (1966). [24] K. Nishikawa, M. Wakatani, Plasma Physics, Ed. III, Springer, Berlin 2000. [25] T.G. Northrop, The adiabatic motion of charged particles, Interscience, New York 1963. [26] M. Oelschlägel, MATHEMATIK Bd. 18: Numerische Methoden, BSB B.G. Teubner Verlagsgesellschaft, Leipzig 1991. [27] A. Piel, Einführung in die Plasmaphysik (Vorlseungsskript 1993-98), Universität Kiel 1999. [28] J.C. Polking, MATLAB Manual for Ordinary Differential Equations, PrenticeHall Inc., Englewood Cliffs 1995. [29] W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P. Flannery, Numerical Recipes in C, (E-Book), Cambridge University Press, Cambridge 2002. [30] G.W. Prölss, Physik des erdnahen Weltraums, Springer, Berlin 2001. [31] A. Quarteroni, F. Saleri, Scientific Computing with MATLAB, Springer, Berlin 2003. [32] M.N. Saha, Ionization in the solar chromosphere, Phil. Mag. 40, 238 (1920). [33] K. Schlegel. Joachim Woch, Forschungs-Info (Okt. 2001), Max-Planck-Institut für Aeronomie, Max-Planck-Institut (2001). [34] L.F. Shampine, M.W. Reichelt, The Matlab ODE Suite, SIAM J. Sci. Comput. 18.1, 1 (1997). [35] L. Tonks, I. Langmuir, Oscillations in Ionized Gases, Phys. Rev. 33, 195 (1929). [36] D.M. Willis, A.R. Gardiner, V.N. Davda, V.J. Bone, Planar charged-particle trajectories in multipole magnetic fields, Ann. Geophysicae 15, 197 (1997). [37] Wolfram Research, http://mathworld.wolfram.com/ToroidalCoordinates.html, Wolfram Research Inc., Stand: 29. August 2004. 52 Formeln, Tabellen, Erläuterungen A Formeln, Tabellen, Erläuterungen A.1 Maxwellsche Gleichungen Die in dieser Arbeit betrachteten Felder unterliegen den Maxwellschen Gleichungen 1 ∂B , c ∂t divB = 0 , 1 ∂E 4π rotB = + j, c ∂t c divE = 4πρ . rotE = − (A.1) (A.2) (A.3) (A.4) Hierbei ist j die Stromdichte und ρ die Ladungsdichte. E und B lassen sich durch ein Vektorpotential A und ein skalares Potential Φ darstellen, die zusammen einen Vierervektor, das Viererpotential bilden B = rotA 1 ∂A − gradΦ . E = − c ∂t A.2 (A.5) (A.6) Zeitkonstanten der Bewegungen in Weltraumplasmen Teilchenart Energie Abstand Periode Gyration Periode Oszillation Periode Drift Protonen 0.6 eV 20 keV 20 MeV 3 RE 4 RE 1.3 RE 0.1 s 0.1 s 5 ms 2h 1 min 0.5 s 45 a 9h 2 min Tabelle A.1: Vergleich der Gyration-, Oszillation- und Driftperioden (Quelle: [30]) Die Zeitkonstanten beziehen sich hierbei auf die innermagnetosphärischen Bedingungen, dieses kommt im Schalenparameter (Abstand der Feldlinie vom Erdmittelpunkt) zum Ausdruck. Um an dieser Stelle, die Betrachtungen nicht unnötig zu verkomplizieren, wird an dieser Stelle der Abstand der Feldlinie direkt in Erdradien (RE ≈ 6378 km) und somit von einer äquatorialen Sicht aus angegeben. A.3 Erläuterung: MATLAB/MEX MEX-Dateien sind von MATLABr aufrufbare C/C++ oder FORTRAN Subroutinen die vom mex-Compiler unter Windows als DLL (Dynamic Link Libraries) erstellt werden. Der Vorteil dieser Art der Umsetzung ist, dass man in MATLAB auf große FORTRAN bzw. C/C++ Libraries zurückgreifen kann, ohne erneut einen MATLABr m-File zu generieren. Zur Realsisierung von MEX-Dateien ist im MATLABr System das Kommando mex vorgesehen. Dieses ist in der Lage, aus C oder C++ bzw. Fortran Code die DLL’s zu erstellen. 53 Ausgewählte Gleichungen Eine sogenannte Gateway-Funktion mexFunction() stellt dabei die Verbindung zu MATLABr her. Diese Funktion muss in jeder MEX-Datei enthalten sein. Die Usage” Messages“ werden bei MATLABr als m-File in das zur DLL gehörige Verzeichnis unter dem gleichen Namen wie die DLL gepackt. MATLABr zeigt beim Aufruf help <name der DLL> selbstständig den m-File an, indem die Usage-Messages“ ” gespeichert ist. Die Gateway-Funktion einer MEX-Datei hat die folgende Signatur void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) Die vier Parameter beschreiben die Eingabe- und Ausgabeobjekte der MEX-Funktion (left hand side, right hand side). Die Felder plhs und prhs enthalten Zeiger auf die Objekte, nlhs und nrhs deren Anzahl. Mit der Funktion void getParameters(...) lesen wir die Zeiger auf die Objekte aus und setzen die in unserem C-Code verwendeten Variablen auf die übergebenen Objekte bzw. auf die Standart Werte. B B.1 Ausgewählte Gleichungen Saha Gleichung Die Saha Gleichung [7, 32] gibt den Betrag der Ionisation eines Gases bei der Temperatur T im thermischen Gleichgewicht an: ni T 3/2 −Ui /κT ≈ 2.4 × 1021 e nn ni (B.1) mit ni , nn — Dichte von inosierten zu neutralen Atomen (Anzahl pro m3 ), T — Temperatur des Gases in Kelvin, κ — Boltzmann Konstante und Ui — Ionisationsenergie des Gases. Die Ionsiationsenergie ist die Menge an Energie, die benötigt wird um die äußeren Elektronen vom Kern zu separieren. In Abschnitt 2 wird erläutert, dass der größte Teil der Materie im Weltraum sich im Plasmazustand befindet, also in Form von dissozierten positiven Ionen und negativen Elektronen. In einer ersten Näherung kann diese Sichtweise bestätigt werden, da das interstellare Medium, die Gaswolken, sowie das Innere und die Atmosphäre einiger Planeten im Plasmazustand vorliegen. Schon wenn wir unsere eigene Atmosphäre verlassen, stellen wir einen Anstieg der Plasmadichten fest, an dieser Stelle seien die Van-Allen Gürtel sowie der Sonnenwind genannt. Die magnetischen Ausläufer dieses Plasmas und die separierten Teilchen stellen die Grundlage dieser Arbeit dar. B.2 Gyration verktoriell In Abschnitt 2.2 wurde allgemein erläutert, wie eine Gyrationsbewegung in einem kartesischen Koordinatensystem beschrieben werden kann und wie die Bewegungsgleichungen analytisch gelöst werden können. Hierbei stellt die Gyration eine der elemantarsten Bewegungsarten von Teilchen in einem elektromagnetischen Feld dar. Um mit der in Abschnitt 2.2 aufgezeigten Notation auch die Bewegung in anderen 54 Ausgewählte Gleichungen B.3 Gradientendrift (ausführlich) (a) (b) Abbildung B.1: Definition des Gyrationswinkels φ (a) und des Führungszentrums (b) (Quelle: [4]) Feldern zu lösen, ist es manchmal nötig eine andere Beschreibung zu wählen. Hierzu führt man eine Notation mit Hilfe des Führungszentrum-Ansatzes [4] ein. Als Bezugssystem wählt man die drei Einheitsvektoren e1 , e2 und b, wobei b der Einheitsvektor in Richtung des Magnetfeldes ist. Somit erhält man ein mitrotierendes Koordinatensystem (vgl. Abb. 1(a)), und es lässt sich schreiben e⊥ (t) = e1 cos (φ) + e2 sin (φ) erL (t) = e2 cos (φ) − e1 sin (φ) mit φ = φ0 − ωrL t. Dieses ist in Abb. 1(b) dargestellt. Hierbei kann man die Position ~ die sich mit der Geschwinx eines Teilchens in eine Führungszentrumsposition R, ~ bewegt und den rotierenden Gyrationsradius Vektor ~rL zerlegen. Somit digkeit vk B erhält man ~ + ~rL ~x = R m ~ ~v⊥ × B ~rL = − |q|B 2 ~v⊥ = ~r˙ L . (B.2) (B.3) (B.4) Auch mit dieser Beschreibung ergibt sich im einfachen Fall des konstanten homogenen Magnetfeldes, für die Gyration eine Helixbahn um das Führungszentrum. B.3 Gradientendrift (ausführlich) Nachdem in Abschnitt B.2 den Ansatz des guiding centres“ eingeführt wurde, kann ” man nun die Bewegung in inhomogenen Feldern beschreiben. Hier einem Magnetfeld, welches durch einen Gradienten in der Magnetfeldstärke vorgegeben ist. Man nimmt an, dass der Gyrationsradius rL = ~v⊥ /ωB klein gegenüber der Ausdehnung ~ ~ der Inhomogenität ist L = B / ∇B . Somit ist es möglich eine Gyration um das Führungszentrum zu betrachten. Dannach lässt sich diese durch die Überlagerung des Fortschreitens des Führungszentrums beschreiben. Zunächst bildet man die im 55 Ausgewählte Gleichungen B.4 Simpson (Trapez-)Integration Mittel einer Gyration auf das Teilchen wirkende Lorentzkraft, diese ist gegeben durch (nach Abb. 2.7) F̄y = −qvx Bz (y) , (B.5) wobei Bz (y) jeweils das Magnetfeld am Ort des Teilchens ist, für eine weitere Beschreibung ist es sinnvoll, dieses mit Hilfe der Taylorentwicklung um einen Punkt x0 , y0 = 0 (Ort des Führungszetrums für eine Kreisbahn) zu entwickeln. Es ergibt sich für das Magnetfeld in z-Richtung (für den in Abb. 2.7 dargestellten Fall) Bz = B0 + y (∂Bz /∂y) . (B.6) Mit dieser Entwicklung lässt sich im Mittel für die Lorentzkraft angeben; ∂B F̄y = −qv⊥ (cos ωB t) B0 ± rL (cos ωB t) . ∂y (B.7) Mit der Annäherung, rL /L ≪ 1 wird der erste Term im mittel einer Gyration Null, desweitern wird cos2 ωB t zu 1/2, somit lässt sich schreiben F̄y = ±qv⊥ rL 1 ∂B . 2 ∂y (B.8) verwendet man diese Beziehung in (2.15), so ergibt sich für die Driftgeschwindigkeit ~vGD = ± B.4 2 mv⊥ ~ ×B ~. ∇B 2qB 3 (B.9) Simpson (Trapez-)Integration Die Simpson Integration ist ein Verfahren zur numerischen Berechnung von bestimmten Integralen Zb I = f (x) dx . (B.10) a Grundlage der numerischen Intergration einer Funktion ist die Idee, die Funktion durch ein Polynom zu nähern und dieses dann zu integrieren. Man wählt somit einen Satz von k + 1 Stützstellen xi = 0, . . . , k, wertet die Funktion dort aus und legt ein Polynom k-ten Gerades durch die Funktionswerte fi = f (xi ). Im allgemeinen Fall verwendet man eine Lagrange-Interpolationsformel. Dazu bildet man hilfsweise Polynome Y x − xj li (x) = ⇒ li (xj ) = δij (B.11) xi − xj j(6=i) und es lässt sich schreiben f (x) ≈ pn (x) = X li (x)fi . (B.12) i Dann kann man das Intgral durch Zb a 56 f (x) dx ≈ X i ωi fi mit ωi = Zb a li (x) dx (B.13) Programme ausdrücken. Beim Simpson Verfahren wählt man äquidistante Stützstellen mit der Schrittweite h. Im einfachsten Fall einer linearen Interpolation (k = 1) zwischen den Endpunkten des Intervalls, erhält man mit ω0 = ω1 = h/2 die Trapezregel Zb a 1 1 f (x) dx = h f0 + f1 + O k 3 2 2 (B.14) Wählt man k = 2, erhält man mit ω0 = ω2 = h/3 und ω1 = 4/3 h die Simpsonregel; es lässt sich schreiben Zb a 1 4 1 f (x) dx = h f0 + f1 + f2 + O h5 . 3 3 3 (B.15) Das Ergebnis der Simpson Integration lässt sich dann in der Adams-Moulton Korrektur verwenden. C Programme C.1 C-Programm: Runge-Kutta 4. Ordnung Hier wird ein C-Programm dargestellt, welches dem Benutzer ermöglicht, das RungeKutta Verfahren zu testen. Hierbei müssen die Startwerte der n Differentialgleichungen eingegeben werden. Die Routine berechnet dann auf der gegebenen Funktion derivs die Runge-Kutta Näherung (Quelle übersetzt/geändert: [29]). void rk4(y,dydx,n,x,h,yout,derivs) float y[],dydx[],x,h,yout[]; void (*derivs)(); int n; /* n Variablen fuer y[1..n] und die Ableitungen dydx[1..n]*/ { int i; float xh,hh,h6,*dym,*dyt,*yt,*vector(); void free_vector(); dym = vector(1,n); dyt = vector(1,n); yt = vector(1,n); hh = h*0.5; h6 = h/6.0; xh = x*hh; for (i=1;i<=n;i++) yt[i]=y[i]+hh*dydx[i]; /* erster RK Schritt */ (*derivs)(xh,yt,dyt); /* zweiter RK Schritt */ for (i=1;i<=n;i++) yt[i]=y[i]+hh*dyt[i]; (*derivs)(xh,yt,dym); /* dritter RK Schritt */ for (i=1;i<=n;i++) { yt[i]=y[i]+h*dym[i]; dym[i] += dyt[i]; } (*derivs)(x+h,yt,dyt); /* vierter RK Schritt */ 57 C.2 MATLAB: Runge-Kutta 4. Ordnung Programme /* Berechnung der Summe */ for (i=1;i<=n;i++) yout[i] = y[i]+h6*(dydx[i]+dydt[i]+2.0*dym[i]) free_vector(yt,1,n); free_vector(dyt,1,n); free_vector(dym,1,n); } C.2 MATLAB: Runge-Kutta 4. Ordnung In Analogie zu Abschnitt C.1 lässt sich das Runge-Kutta Verfahren in MATLABr implementieren (siehe CD rk4.m). Dieses Programm dient dazu, die numerischen Prozesse zu verstehen, welche hinter diesem Verfahren stecken. Dabei ist dieses Programm nicht in Vergleich zu setzen, mit dem in MATLABr integrierten ODE Sol” vern“, da diese sehr stark optimiert sind (siehe R. Ashino [2]). function xout = rk4(x,t,tau,derivsRK,param) % Runge-Kutta Verfahren 4. Ordnung % x = Wert der abhaengigen Variablen % t = unabhaengige Variable (meistens Zeit) % tau = Schrittweite % derivsRK = function die den dx/dt Wert zurueckliefert % param = Parameter welche an derivsRK uebergeben werden koennen % % xout = Ausgabe half_tau = 0.5*tau; k1 = feval(derivsRK,x,t,param); t_half = t + half_tau; xtemp = x + half_tau+k1; k2 = feval(derivsRK,xtemp,t_half,param); xtemp = x + half_tau*k2; k3 = feval(derivsRK,xtemp,t_half,param); t_full = t + tau; xtemp = x + tau*k3 k4 = feval(derivsRK,xtemp,t_full,param); xout = x + tau/6.*(k1+k4+2*(k2+k3)); return C.3 Runge-Kutta-Merson Algorithmus Der Runge-Kutta-Merson Algorithmus ist ein Verfahren, dass auf einer Mischung aus einem Runge-Kutta vierter Ordnung und einem fünfter Ordnung beruht. Somit ist es möglich gleich in einem Schritt eine Aussage über den Fehler zu erhalten und auf diese Weise die Schrittweite anzupassen. Hierzu geht dieser Algorithmis analog zu jedem Runge-Kutta Verfahren vor. Man geht von der Gleichung dy/dx = f mit y (xn ) = yn aus. Nun macht man folgende Entwicklungsschritte k1 = hf ′ (xn , yn ) k1 h ′ k2 = hf xn + , yn + 3 3 58 C.4 Prädiktor-Korrektur Methode k3 k4 k5 Programme h 1 = hf xn + , yn + (k1 + k2 ) 3 6 1 h ′ = hf xn + , yn + (k1 + 3k3 ) 2 8 1 ′ = hf xn + h , yn + (k1 − 3k3 + 4k4 ) 2 ′ und erhält für yn+1 = yn + 16 (k1 + 4k4 + k5 ). Diese Annäherung ist von der gleichen Fehlergrößenordnung wie das Runge-Kutta Verfahren vierter Ordnung aber erlaubt gleichzeitig eine Abschätzung über den gemachten lokalen Fehler, hierbei gilt 1 9 1 e= k1 − k3 + 4k4 − k5 . (C.1) 15 2 2 Mit dieser Fehlervoraussage ist es möglich eine adaptive Schrittweitensteuerung zu machen. Hierbei muss nur die Fehlerschranke festgelegt werden. Arbeitet man mit einer festen Fehlerschranke, die in den Numerikprogrammen durch die Toleranz vorgegeben wird, dann arbeiten die Programme in den meisten Fällen mit der step ” doubling“-Methode. C.4 Prädiktor-Korrektur Methode Die in Abschnitt 3.3.4 vorgestellte Methode um mittels eines Prädiktionswertes und anschliessender Korrektur den nächsten Zustand verherzusagen, lässt sich in MATLABr durch die folgenden Funktionen implementieren. Hierbei hat man mehrer Prädiktor- und Korrektorfunktionen zur Auswahl. Je nach Problem müssen diese angepasst werden, an dieser Stelle seien nur kurz das Euler-Verfahren, das CrankNicolson Verfahren und die Simpson Integration (als weitere Möglichkeit der Korrektur) vorgestellt. C.4.1 MATLAB: Prädiktor-Korrektur Eine allgemeine Form der Prädiktor-Korrektur Methode lässt sich wie folgt in MATLAB implementieren (siehe CD predcor.m). function [xout,yout] = predcorr(odefun,xspan,y0,M,pred,corr,varagin) % PREDCORR loest eine gegebene ODE mittels der Praediktor-Korrektur % Methode, wobei x=[x0 xend] das Intervall ist, ueber der % die ODE geloest werden soll. y0 ist dabei der Startwert, % M ist die Anzahl der aequidistanten Schrittweiten zur % Berechnung. Die Funktion ODEFUN(X,Y) liefert dabei nach % y’=f(x,y) die Werte fuer f(x,y). Pred und corr sind die % verwendeten Praediktor und Korrektor Methoden, diesen werden % die zusaetzlichen Parameter P1, P2,... uebergeben. H=(xspan(2)-yspan(1))/M; xx=[tspan(1):H:tspan(2)]; u=y0; [n,m]=size(u); if n~=m, u=u’; end for x = xx(1:end-1) y = u(:,end); fn = feval(odefun,x,y,varargin{:}); upre = feval(pred,x,y,H,fn); 59 C.5 Velocity-Verlet Algorithmus Programme ucor = feval(corr,x+H,y,upre,H,odefun,fn,varargin{:}); yout = [u,ucor]; end; xout = xx; return Die Funktion implementiert eine allgemeine Prädiktor-Korrektor Methode. Hierbei repräsentieren die Strings pred und corr die zu verwendenden Prädiktor und Korrektor Methoden. So lässt sich diese Methode zum Beispiel mit einer Euler Methode als Prädiktor und einer Crank-Nicolson Methode als Korrektor aufrufen, der Aufruf lautet dann [x,y] = predcorr(fun,xspan,y0,N,’eulerstep’,’cnstep’); Hierbei sind die gewählten Verfahren mit den folgenden Zeilen zu implementieren (Euler) function [y] = eulerstep(x,y0,h,fun) y = y0 + h*fun; return bzw. Crank-Nicolson function [y] = cnstep(x,y,y0,h,fun,funn,varargin) y = y + 0.5*h*(feval(fun,x,y,varargin{:})+funn) return C.4.2 MATLAB: Simpson Die Simpson Integration (siehe Anhang B.4) lässt sich in MATLABr wie folgt kurz implementieren (siehe CD simpson.m). function [out] = simpson(a,b,M,fun,varargin) % SIMPSON berechnet nach der Simpsonregel das Integral einer % gegebenen Funktion fun ueber dem Intervall [a,b] und % teilt dieses Intervall in M aequidistante Abschnitte ein. H=(b-a)/M; x=linspace(a,b,M+1); fpm=feval(fun,x,,varargin{:}); fpm(2:end-1)=2*fpm(2:end-1); out=H*sum(fpm)/6; x=linspace(a+H/2,b-H/2,M); fpm=feval(fun,x,,varargin{:}); out = out + 2*H*sum(fpm)/3; return C.5 Velocity-Verlet Algorithmus Ein weiterer ODE-Solver“ ist der sogenannte Velocity-Verlet Algorithmus. Dieser ” Algorithmus ist durch ein Paar von Gleichungen gegeben xn+1 = xn + hxn + 60 h2 F (xn ) 2m (C.2) MATLAB und h [F (xn+1 ) + F (xn )] (C.3) 2m wobei x die Koordinate und ẋ die Geschwindikeit, m die Masse und F (x) die Kraft, welche auf die Masse m am Punkt x wirkt. ẋn+1 = ẋn + Im ersten Anschein sieht diese Methode wie eine Prädiktormethode aus, weil hier der Term xn+1 auftaucht. Dieser wird aber nicht wie bei den Prädiktor Methoden approximativ bestimmt sondern in Gleichung (C.2) zunächst bestimmt bevor er in Gleichung (C.3) verwendet wird. Der Vorteil dieses Algorithmusses liegt darin, dass er über lange Zeiträume integrieren kann, ohne das der Fehler zu groß wird. D MATLAB In diesem Abschnitt sind die MATLABr Dateien abgedruckt. Die Programme sowie die HTML-Dokumentation befinden sich auf der beigefügten CD-Rom. D.1 particles function varargout = particles(varargin) % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! % BEGIN HEAD (nicht aendern) % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! % Initialisierung des GUI und der mit ihm verbundenen Callbacks gui_Singleton = 1; gui_State = struct(’gui_Name’, mfilename, ... ’gui_Singleton’, gui_Singleton, ... ’gui_OpeningFcn’, @particles_OpeningFcn, ... ’gui_OutputFcn’, @particles_OutputFcn, ... ’gui_LayoutFcn’, [] , ... ’gui_Callback’, []); if nargin & isstr(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % Hier werden Einstellungen getroffen, bevor das GUI sichtbar wird function particles_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); % Anzeige des Titelbildes und des Logos durch Axis-Objekte axes(handles.logo) [a,map]=imread(’logo.png’); image(a); colormap(map); axis equal, axis off axes(handles.plot_axis) [a,map]=imread(’title.png’); image(a); colormap(map); axis equal, axis off function varargout = particles_OutputFcn(hObject, eventdata, handles) 61 D.1 particles MATLAB varargout{1} = handles.output; function figure1_CreateFcn(hObject, eventdata, handles) handles.figure1=hObject; guidata(hObject, handles); % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! % ENDE HEAD (nicht aendern) % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Patrick Daum, University of Osnabrueck % % (C) Version 1.0, 30-August-2004. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PARTICLES ist ein GUI zur VISUALISIERUNG der Bewegung geladener Teilchen % in elektromagnetischen Feldern, es ist enstanden im Rahmen einer % Bachelor-Arbeit % globale Variablen fuer die Bewegungen global ode; global bFieldTyp bfieldstrength; global eFieldTyp efieldstrength; global nLarmor; global charge; % Ladung % % % % global xposv yposv zposv global velx vely velz % Werte fuer die Position % Werte fuer die Geschwindigkeit ODE Funktion Variablen fuers B-Feld Variablen fuers E-Feld Anzahl der Larmorradien % Initialisierung der globalen Variablen der Bewegungen ode = ’eqMotion’; bFieldTyp=1; bfieldstrength=1; eFieldTyp=1; efieldstrength=0.2; nLarmor=10; charge=1; xposv=1; yposv=0; zposv=0; velx=4; vely=4; velz=4; % allgemeine globale Variablen fuer die Steuerung des GUI’s global dimview solvername reTol aTol helpfile % Initialisierung der globalen Variablen zur Steuerung dimview=’odephas3’; % Standardwert ist 3D, hierbei % werden die integrierten % Draw-Mechanismen von MATLAB % verwendet, fuer eine % Aenderung laesst sich % mittels type die funktion % odephas3 betrachten solvername=’ode45’; reTol = 1.e-3; aTol = 1.e-10; helpfile =’particles.html’; % Standardwert ist RK4(5) % Toleranzwerte % Online Dokumentation, diese % kann in weiteren Versionen % geaendert werden % ----------------------------------------------------------------------------% PARAMETER 62 D.1 particles MATLAB % ----------------------------------------------------------------------------% Funktion um die Notation in MATLAB zu unterstuetzen (TRUE falls alles % richtig, ansonsten FALSE) function syn = matlabsyn(value) syn=1; % TRUE Wert test= size(str2num(value)); if (test(2)>=2 | test(2)==0) label=’Fehler bei Eingabe eines Wertes; .-Notation verwenden, keine Charakter Zeichen’; msgbox(label,’SYNTAX FEHLER’,’error’); syn=0; % FALSE Wert end; % Funktion fuer exklusive Radiobuttons function mutual_exclude(off) set(off,’Value’,0) % Wert der einzelnen Buttons, dadurch wird die Ladung gesetzt function qCharge=charge_value(handles) if (get(handles.elecbutton,’Value’)==1) qCharge = (-1); else qCharge = (1); end; % ==================== RADIOBUTTON (ELEKTRON) ================================= function elecbutton_Callback(hObject, eventdata, handles) % erzeugt einen exklusiven Radiobutton, schaltet alle weiteren Buttons % aus off = [handles.protonbutton]; mutual_exclude(off); % ==================== RADIOBUTTON ENDE======================================== % ==================== RADIOBUTTON (PROTON) =================================== function protonbutton_Callback(hObject, eventdata, handles) % erzeugt einen exklusiven Radiobutton, schaltet alle weiteren Buttons % aus off = [handles.elecbutton]; mutual_exclude(off) % ==================== RADIOBUTTON ENDE======================================== % ==================== POSITIONEN ============================================= % x-Position des Teilchens (Erzeugung/Auswertung) ----------------------------function xpos_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end % je nach Version bzw. THREAD Handling in MATLAB kann es dazu kommen, dass % nicht alle Objekte im handles Vektor aufgefuehrt werden, um dieses % abzufangen, wird dem handles Vektor jeweils das entsprechende handle bei % seiner Erzeugung uebergeben handles.magnpop=hObject; guidata(hObject, handles); function xpos_Callback(hObject, eventdata, handles) 63 D.1 particles MATLAB global xposv if matlabsyn(get(hObject,’String’)) xposv=str2double(get(hObject,’String’)); else set(hObject,’String’,num2str(xposv)); end; % y-Position des Teilchens (Erzeugung/Auswertung) ----------------------------function ypos_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.magnpop=hObject; guidata(hObject, handles); function ypos_Callback(hObject, eventdata, handles) global yposv if matlabsyn(get(hObject,’String’)) yposv=str2double(get(hObject,’String’)); else set(hObject,’String’,num2str(yposv)); end; % z-Position des Teilchens (Erzeugung/Auswertung) ----------------------------function zpos_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.magnpop=hObject; guidata(hObject, handles); function zpos_Callback(hObject, eventdata, handles) global zposv if matlabsyn(get(hObject,’String’)) zposv=str2double(get(hObject,’String’)); else set(hObject,’String’,num2str(zposv)); end; % ==================== POSITIONEN ENDE ======================================== % ==================== GESCHWINDIGKEITEN ====================================== % x-Komponente der Geschwindigkeit (Erzeugug/Auswertung) ---------------------function xvel_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.magnpop=hObject; guidata(hObject, handles); function xvel_Callback(hObject, eventdata, handles) global velx if matlabsyn(get(hObject,’String’)) 64 D.1 particles MATLAB velx=str2double(get(hObject,’String’)); else set(hObject,’String’,num2str(velx)); end; % y-Komponente der Geschwindigkeit (Erzeugug/Auswertung) ---------------------function yvel_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.magnpop=hObject; guidata(hObject, handles); function yvel_Callback(hObject, eventdata, handles) global vely if matlabsyn(get(hObject,’String’)) vely=str2double(get(hObject,’String’)); else set(hObject,’String’,num2str(vely)); end; % z-Komponente der Geschwindigkeit (Erzeugug/Auswertung) ---------------------function zvel_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.magnpop=hObject; guidata(hObject, handles); function zvel_Callback(hObject, eventdata, handles) global velz if matlabsyn(get(hObject,’String’)) velz=str2double(get(hObject,’String’)); else set(hObject,’String’,num2str(velz)); end; % ==================== GESCHWINDIGKEITEN ENDE ================================= % ==================== ITERATIONEN ============================================ % diese Funktionen setzten den Wert der Larmorradien function currentiterations_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.magnpop=hObject; guidata(hObject, handles); function currentiterations_Callback(hObject, eventdata, handles) global nLarmor % Syntax abfangen if matlabsyn(get(hObject,’String’)) 65 D.1 particles MATLAB value =str2double(get(hObject,’String’)); else value=set(hObject,’String’,num2str(nLarmor)); end; % Randwertfehler abfangen if (value<=0) msgbox(’Der Wert fuer die Iterationen muss mindestens 1 betragen’,’ERROR’, ’error’); set(hObject,’String’,’1’); end; nLarmor=str2double(get(hObject,’String’)); % ==================== ITERATIONEN ENDE ======================================= % ==================== MAGN POPUP ============================================= function magnpop_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.magnpop=hObject; guidata(hObject, handles); % die einzelnen Eintragungen werden gesetzt btypes={’B = 0’, ’Bz’, ’d Bz/dy’, ’d Bz/dz cusp’, ’B toroidal’, ’B tokamak’, ’B dipole’, ’user defined’}; set(hObject,’String’,btypes); function magnpop_Callback(hObject, eventdata, handles) global bFieldTyp % Typ des Feldes bestimmen, dabei stehen die Zahlen fuer die einzelnen % Felder:1=B0, 2=Bz, 3=d Bz/dy, 4=d Bz/dz Cusp, 5=B toroidal, 6=B tokamak % 7=B dipole, 8=user defined, 9=error bFieldTyp=get(hObject,’Value’); if (bFieldTyp==8) msgbox(’Vorher in eqMotion.m definieren’,’HINWEIS’,’help’); end; if (bFieldTyp==9) msgbox(’Diese Konfiguration existiert nicht’,’ERROR’,’error’); end; % ==================== MAGN POPUP ENDE ======================================== % ==================== MAGN STRENGTH ========================================== function bstrength_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.bstrength=hObject; guidata(hObject, handles); 66 D.1 particles MATLAB function bstrength_Callback(hObject, eventdata, handles) global bfieldstrength; % Randwertfehler abfangen value =str2double(get(hObject,’String’)); if (value<0) msgbox(’Die Staerke darf nicht kleiner Null sein’,’ERROR’,’error’); set(hObject,’String’,’1’); end; % Staerke auslesen und den Wert der Magnetfeldstaerke setzen bfieldstrength=str2double(get(hObject,’String’)); % ==================== MAGN STRENGTH ENDE ===================================== % ==================== ELEK POPUP ============================================= function epop_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.epop=hObject; guidata(hObject, handles); % die einzelnen Eintragungen werden gesetzt etypes={’E = 0’, ’Ex’, ’Ez’, ’d Ey/dt’, ’user defined’}; set(hObject, ’String’,etypes); function epop_Callback(hObject, eventdata, handles) global eFieldTyp; % Typ des Feldes bestimmen, dabei stehen die Zahlen fuer die einzelnen % Felder:1=E0, 2=Ex, 3=Ez, 4=d Ey/dt 5=user defined, 6=error eFieldTyp=get(hObject,’Value’); if (eFieldTyp==5) msgbox(’Vorher in eqMotion.m definieren’,’HINWEIS’,’help’); end; if (eFieldTyp==6) msgbox(’Diese Konfiguration existiert nicht’,’ERROR’,’error’); end; % ==================== ELEK POPUP ENDE ======================================== % ==================== ELEK STRENGTH ========================================== function estrength_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.epop=hObject; guidata(hObject, handles); function estrength_Callback(hObject, eventdata, handles) global efieldstrength % Randwertfehler abfangen value =str2double(get(hObject,’String’)); if (value<0) msgbox(’Die Staerke darf nicht kleiner Null sein’,’ERROR’,’error’); 67 D.1 particles MATLAB set(hObject,’String’,’1’); end; % Staerke auslesen und den Wert der elek. Feldstaerke setzen efieldstrength=str2double(get(hObject,’String’)); % ==================== ELEK STRENGTH ENDE ===================================== % ==================== VIEW POPUP ============================================= function viewmenue_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.epop=hObject; guidata(hObject, handles); function viewmenue_Callback(hObject, eventdata, handles) global dimview % setzen der Ansichtsvariablen switch num2str(get(hObject,’Value’)) case ’1’ % 3D dimview = ’odephas3’; case ’2’ % 2D dimview = ’odephas2’; otherwise % Fehler anfangen falls falsches handle angepackt msgbox(’Diese Konfiguration existiert nicht’,’ERROR’,’error’); end % ==================== VIEW POPUP ENDE ======================================== % ----------------------------------------------------------------------------% BUTTONS % ----------------------------------------------------------------------------% ==================== START Button =========================================== function start_Callback(hObject, eventdata, handles) global reTol aTol solvername charge charge = charge_value(handles); hold off; drawTraj; rotate3d on; hold on; % ==================== STOP Button =========================================== function stop_Callback(hObject, eventdata, handles) % stoppt den Plot ueber die Funktion des odeset OutputFcn ud=get(gcf,’UserData’); ud.stop=1; set(gcf,’UserData’,ud);; % ==================== ADD Button ============================================ function add_Callback(hObject, eventdata, handles) global reTol aTol solvername charge dimview % neuen Wert fuer die Ladung holen charge = charge_value(handles); % neue Trajektorie plotten drawTraj; % DIRTY TRICK !!!! basiert auf einem Skalierungsfehler in odephas3 68 D.1 particles MATLAB % daher ist es noetig das Axis Objekt zu drehen und einen refresh zu machen % um die neue Skalierung zu bekommen if dimview==’odephas3’ rot = [1 0 0]; else rot = [1 0]; end; % durch die Drehung werden die Skalierungen und das Aspect-Ratio besser % gesetzt rotate(handles.plot_axis,rot,1); refresh; rotate3d on; view(30,10); % ==================== CLEAR Button =========================================== function clear_Callback(hObject, eventdata, handles) axes(handles.plot_axis) cla; % ==================== SOLVER Button ========================================== function solverbutton_Callback(hObject, eventdata, handles) % ruft den Solver Controller auf solvercontrol; % ==================== HELP Button ============================================ function helpbutton_Callback(hObject, eventdata, handles) global helpfile % Zunaechst muss ueberprueft werden ob die Hilfe Datei zur Verfuegung steht if (exist(helpfile)==0) msgbox(’Die Online Dokumentation kann nicht gefunden werden’,’ERROR’,’error’); else % kann die Online Dokumentation aufgerufen werden HelpPath = which(helpfile); web(HelpPath); end; % ==================== CLOSE Button =========================================== function close_Callback(hObject, eventdata, handles) % schliesst das komplette figure des GUI’s close(gcf); disp(’DANKE das Sie mit particles gearbeitet haben !’) % ----------------------------------------------------------------------------% MENUEBAR % ----------------------------------------------------------------------------% ==================== DATEI MENUE ============================================ function datei_Callback(hObject, eventdata, handles) % ==================== FIGNEW EINTRAG ======================================== function fignew_Callback(hObject, eventdata, handles) % Dieser Menuepunkt ermoeglicht es die Simulation in einem eigenen % Figure-Objekt abzuspielen, damit man dieses dann mit den Optionen der in % MATLAB integrierten FIGURE TOOLBox bearbeiten kann figure % neues Figure wird erzeugt % Simulation mit den Parametern wird in einem eigenen Figure Objekt erzeugt start_Callback(hObject, eventdata, handles); 69 D.2 eqMotion MATLAB % ==================== TAKEOVER EINTRAG ====================================== function takeover_Callback(hObject, eventdata, handles) % neues Figure erzeugen figure % Das Axis Objekt aus dem GUI kopieren, da help=copyobj(handles.plot_axis,gcf); % da beim Kopieren die Position innerhalb des GUI’s uebernommen wird, % muessen die Positionen neu gesetzt werden set(help,’Position’,[18 5 80 25]) rotate3d on; % ==================== HILFE MENUE ============================================ function help_Callback(hObject, eventdata, handles) % ==================== HILFE EINTRAG ========================================== function prog_help_Callback(hObject, eventdata, handles) % gleiche Funktion wie der im GUI implementierte HELP-Button helpbutton_Callback(hObject, eventdata, handles) % ==================== HILFE EINTRAG ========================================== function info_Callback(hObject, eventdata, handles) information; % ----------------------------------------------------------------------------% VISUALISIERUNG % ----------------------------------------------------------------------------function out = drawTraj; global ode dimview solvername reTol aTol %figNumber = watchon; %h = get(figNumber,’Children’); rotate3d on; %watchoff(figNumber); % !!!!!!!!!!!!!!!!!!!!! ODE STEUERUNG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [tspan,y0,options] = feval(ode,[],[],’init’); options = odeset(options,’RelTol’,reTol,’AbsTol’,aTol,’OutputFcn’,dimview); feval(solvername,ode,tspan,y0,options); xlabel(’x’); ylabel(’y’); zlabel(’z’); % !!!!!!!!!!!!!!!!!!!!!!!!! ENDE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! D.2 eqMotion function varargout = eqMotion(t,v,flag) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Patrick Daum, University of Osnabrueck % % (C) Version 1.0, 30-August-2004. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% global mass B0 E0 R0 m0 velscala % globale mass = R0 = m0 = vordefinierte Variablen, diese sind in relativen Einheiten angegeben 1; % relativ zu einer Protonenmasse 1; % relativ zu einem Erdradius 1; % relativ zum Dipolmoment der Erde velscala = 1.e-2; 70 % relativ Skalierung der Geschwin- D.2 eqMotion MATLAB % digkeit kann bei Aenderung der % relativen Einheiten auf 1 % gesetzt werden % diese Variablen werden an dieser Stelle nur fuer eventuelle Erweiterungen % bzw. Anwendungen auf spezielle Felder eingefuehrt, durch die einzelne % Feldstaerke, die im GUI eingegeben wird kann die Staerke der Felder direkt % gesteuert werden B0 = 1; E0 = 1; % globale Variablen global ode global bFieldTyp bfieldstrength global eFieldTyp efieldstrength global nLarmor % % % % ODE Funktion Variablen fuers B-Feld Variablen fuers E-Feld Anzahl der Larmorradien % Kontroll-Funktion des initialisierenden Aufrufs switch flag case ’’ % liefert dv/dt = f(t,v) zurueck varargout{1} = f(t,v); case ’init’ % liefert [tspan,y0,options] zurueck [varargout{1:3}] = init; otherwise error([’Unknown flag ’’’ flag ’’’.’]); end function dydt = f(t,v) % ===== Bewegungsgleichung ================================================= % setzen der Globalen Variablen global ode global bFieldTyp bfieldstrength global eFieldTyp efieldstrength global charge mass B0 E0 R0 m0 q % [E,B] = feval(’EandB’,v(1),v(2),v(3),t); % Hier ist die Newton’sche Bewegungsgleichung in vektorieller Form % dargestellt; die Positionen v(1:3,:) stellen die Position des Teilchens und % v(4:6,:) die Geschwindigkeit des Teilchens dar dydt = [ v(4,:) v(5,:) v(6,:) charge/mass*( E(1) +(v(5,:).*B(3) -v(6,:).*B(2)) ) charge/mass*( E(2) +(v(6,:).*B(1) -v(4,:).*B(3)) ) charge/mass*( E(3) +(v(4,:).*B(2) -v(5,:).*B(1)) ) ]; % Diese Funktion stellt die einzelnen Feldstrukturen zusammen function [E,B] = EandB(x,y,z,t) global charge mass B0 E0 R0 m0 global bFieldTyp bfieldstrength global eFieldTyp efieldstrength % B-FELD: Definition der einzelnen Feldstrukturen switch num2str(bFieldTyp) 71 D.2 eqMotion MATLAB case ’1’ % B=0 B = B0*[ 0 0 0 ]; case ’2’ % Bz B = B0*[ 0 0 bfieldstrength ]; case ’3’ % dBz/dy B = B0*[ 0 0 1+bfieldstrength*y ]; case ’4’ % dBz/dz cusp B = B0*[ -0.5*x (-1)*bfieldstrength*y bfieldstrength*z]; case ’5’ % B toroidal % Verwendung von Toroidal Koordinaten R = sqrt(x^2 +y^2 + 1.e-10); cosphi = x/R; sinphi = y/R; B = B0*(R0/R)*[ -sinphi cosphi 0 ]*bfieldstrength; case ’6’ % B tokamak % Verwendung von Toroidal Koordinaten R = sqrt(x^2 +y^2 + 1.e-10); cosphi = x/R; sinphi = y/R; rho = sqrt((R-R0)^2 + z^2+1.e-10); sint = -z/rho; cost = (R-R0)/rho; Bt = B0 * (R0/R)*[-sinphi cosphi 0]; Bp = B0 *(rho/R)*[-cosphi*sint -sinphi*sint -cost ]; B = Bt +Bp/q; case ’7’ % B dipole r2 = x^2 +y^2 +z^2; B = m0*r2^(-2.5)*[ 3*x*z 3*y*z 3*z^2-r2]*bfieldstrength; case ’8’ % user defined % % ==> Hier kann ein beliebiges Vektorfeld eingefuegt werden % otherwise % Hier wird der Fehler, der schon im GUI abgefangen wird nochmals zur % Sicherheit ueberprueft msgbox(’Diese Konfiguration existiert nicht’,’ERROR’,’error’); end Btot = norm(B); OmegaC=charge/mass*norm(B); % E-FELD: Definition der einzelnen Feldstrukturen switch num2str(eFieldTyp) case ’1’ % E=0 E = E0*[ 0 0 0 ]; case ’2’ % Ex E = E0*[ efieldstrength 0 0 ]; case ’3’ % Ez E = E0*[ 0 0 efieldstrength ]; case ’4’ % dEy/dt E = E0*[ 0 t*charge/mass*Btot 0]*efieldstrength; case ’5’ % user defined % % ==> Hier kann ein beliebiges Vektorfeld eingefuegt werden % otherwise % Hier wird der Fehler, der schon im GUI abgefangen wird nochmals zur % Sicherheit ueberprueft msgbox(’Diese Konfiguration existiert nicht’,’ERROR’,’error’); end % diese Funktion setzt die initialisierenden Werte fuer die Berechnung function [tspan,y0,options] = init global charge mass B0 E0 R0 m0 nLarmor velscala global xposv yposv zposv velx vely velz 72 D.3 solvercontrol OmegaC0 = charge/mass*B0; tspan = [0 nLarmor*OmegaC0*(2*pi)]; y0 = [ xposv yposv zposv velx*velscala vely*velscala velz*velscala ]; options = odeset(’Vectorized’,’on’); D.3 MATLAB % % % % % % % % % Gyrationsfrequenz Zeit ueber die entwickelt werden soll Startkoordinaten und Geschwindigkeiten x y z vx vy vz solvercontrol function varargout = solvercontrol(varargin) % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! % BEGIN HEAD (nicht aendern) % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! % Initialisierung des GUI und der mit ihm verbundenen Callbacks gui_Singleton = 1; gui_State = struct(’gui_Name’, mfilename, ... ’gui_Singleton’, gui_Singleton, ... ’gui_OpeningFcn’, @solvercontrol_OpeningFcn, ... ’gui_OutputFcn’, @solvercontrol_OutputFcn, ... ’gui_LayoutFcn’, [] , ... ’gui_Callback’, []); if nargin & isstr(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! % ENDE HEAD (nicht aendern) % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Patrick Daum, University of Osnabrueck % % (C) Version 1.0, 30-August-2004. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SOLVERCONTROL steuert die einzelnen Optionen, die den ODE Solvern uebergeben % werden koennen % globale Variablen definieren global default_aTol default_reTol % Initialisierung der globalen Variablen, diese kommen zwar in particles.m schon % vor, sind aber hier zur Absicherung nochmals als eigene Default Werte % deklariert, des weiteren dienen diese als Eintragsstring default_aTol = ’1.e-10’; default_reTol = ’1.e-3’; function solvercontrol_OpeningFcn(hObject, eventdata, handles, varargin) 73 D.3 solvercontrol MATLAB global aTol reTol solvername handles.output = hObject; guidata(hObject, handles); % setzen der momentan vorhandenen Parameter set(handles.abs_tol,’String’,num2str(aTol)); set(handles.rel_tol,’String’,num2str(reTol)); switch solvername case ’ode45’ % zunaechst werden die anderen Radiobuttons ausgeschaltet ode45_Callback(hObject, eventdata, handles); % setzen des Default ODE-Solvers set(handles.ode45,’Value’,1); case ’ode23’ % zunaechst werden die anderen Radiobuttons ausgeschaltet ode23_Callback(hObject, eventdata, handles); % setzen des Default ODE-Solvers set(handles.ode23,’Value’,1); case ’ode113’ % zunaechst werden die anderen Radiobuttons ausgeschaltet ode113_Callback(hObject, eventdata, handles); % setzen des Default ODE-Solvers set(handles.ode113,’Value’,1); case ’ode15s’ % zunaechst werden die anderen Radiobuttons ausgeschaltet ode15s_Callback(hObject, eventdata, handles); % setzen des Default ODE-Solvers set(handles.ode15s,’Value’,1); otherwise % Sicherheitsueberpruefung msgbox(’Diese Konfiguration existiert nicht’,’ERROR’,’error’); end; function varargout = solvercontrol_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; % ----------------------------------------------------------------------------% PARAMETER % ----------------------------------------------------------------------------% Funktion fuer exklusive Radiobuttons function mutual_exclude(off) set(off,’Value’,0) % ==================== RADIOBUTTON (ODE45) ==================================== function ode45_Callback(hObject, eventdata, handles) off = [handles.ode23,handles.ode113,handles.ode15s]; mutual_exclude(off) % ==================== RADIOBUTTON (ODE45) ENDE =============================== % ==================== RADIOBUTTON (ODE23) ==================================== function ode23_Callback(hObject, eventdata, handles) off = [handles.ode45,handles.ode113,handles.ode15s]; mutual_exclude(off) % ==================== RADIOBUTTON (ODE23) ENDE =============================== % ==================== RADIOBUTTON (ODE113) =================================== function ode113_Callback(hObject, eventdata, handles) 74 D.3 solvercontrol MATLAB off = [handles.ode45,handles.ode23,handles.ode15s]; mutual_exclude(off) % ==================== RADIOBUTTON (ODE113) ENDE ============================== % ==================== RADIOBUTTON (ODE15s) =================================== function ode15s_Callback(hObject, eventdata, handles) off = [handles.ode45,handles.ode23,handles.ode113]; mutual_exclude(off) % ==================== RADIOBUTTON (ODE15s) ENDE ============================== % ==================== TOLERANZEN ============================================= % absolute Toleranz ----------------------------------------------------------function abs_tol_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.magnpop=hObject; guidata(hObject, handles); function abs_tol_Callback(hObject, eventdata, handles) global default_aTol % Randwertfehler abfangen value =str2double(get(hObject,’String’)); if (value<0 | isnan(value)) msgbox(’Der Wert fuer die AbsTol muss >= 0 sein’,’ERROR’,’error’); set(hObject,’String’,default_aTol); end; % relative Toleranz ----------------------------------------------------------function rel_tol_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,’BackgroundColor’,’white’); else set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundColor’)); end handles.magnpop=hObject; guidata(hObject, handles); function rel_tol_Callback(hObject, eventdata, handles) global default_reTol % Randwertfehler abfangen value =str2double(get(hObject,’String’)); if (value<0 | isnan(value)) msgbox(’Der Wert fuer die RelTol muss > 0 sein’,’ERROR’,’error’); set(hObject,’String’,default_reTol); end; % ==================== TOLERANZEN ============================================= % ----------------------------------------------------------------------------% BUTTONS % ----------------------------------------------------------------------------% ==================== BACK BUTTON ============================================= function backbutton_Callback(hObject, eventdata, handles) global aTol reTol solvername % Fragt alle gesetzten GUI Elemente nach ihrem Wert ab und setzt die 75 D.3 solvercontrol MATLAB % entsprechenden globalen Variablen % setzen der Toleranzwerte, durch die Bedingungen in den Parameter Objekten % ist ein falscher Wert abgefangen worden aTol=str2double(get(handles.abs_tol,’String’)) reTol=str2double(get(handles.rel_tol,’String’)) % Abfragen der einzelnen RADIO-Buttons, man koennte hier durch exklusives % else if eine if Abfrage sparen, dieses traegt allerdings nicht zur % Lesbarkeit des Codes bei if (get(handles.ode45,’Value’)==1) solvername = ’ode45’; end; if (get(handles.ode23,’Value’)==1) solvername = ’ode23’; end; if (get(handles.ode113,’Value’)==1) solvername = ’ode113’; end; if (get(handles.ode15s,’Value’)==1) solvername = ’ode15s’; end; close(gcf); % schliessen des Controllers % ==================== BACK BUTTON ENDE ======================================= % ==================== DEFAULT BUTTON ========================================= function defaultbutton_Callback(hObject, eventdata, handles) global default_aTol default_reTol % setzt alle Werte auf die Default-Werte set(handles.abs_tol,’String’,default_aTol); set(handles.rel_tol,’String’,default_reTol); % zunaechst werden die anderen Radiobuttons ausgeschaltet ode45_Callback(hObject, eventdata, handles); % setzen des Default ODE-Solvers set(handles.ode45,’Value’,1); % ==================== DEFAULT BUTTON ENDE ==================================== 76 Danksagungen Diese Bachelor Arbeit entstand in der Arbeitsgruppe Umweltphysik“ des Fachbe” reiches Physik an der Universität Osnabrück. Mein Dank gilt den Mitarbeitern der Arbeitsgruppe für die Unterstützung sowie Motivation und Frau Prof. Dr. May-Britt Kallenrode für die ausserordentlich interessante Themenstellung und die Begleitung bei dieser Arbeit. Mein besonderer Dank gilt Herrn PD. Dr. Bernd Heber für seine Betreuung und sein Engagement. Seine Vorlesungen und seine Art der Lehre, gerade im Bereich der stellaren und interstellaren Physik haben mich dazu veranlasst, meine Bachelor Arbeit in diesem Bereich der Physik zu verfassen und mich auch in Zukunft in dieser Richtung zu orientieren. Ein ganz besonderer Dank gilt meinen Eltern und meiner Familie, die mir das Studium der Physik erst ermöglicht haben und die mir immer finanziell und mental zu Seite gestanden haben. Eidesstattliche Erklärung Hiermit erkläre ich an Eides statt, dass ich die vorliegende Bachelor Arbeit selbstständig verfasst, keine anderen als die angegebenen Hilfsmittel verwendet und zuvor noch keine Bachelor Prüfung abgelegt habe. Osnabrück, den 29. August 2004 Patrick Daum . Soweit sich die Gesetze der Mathematik auf die Wirklichkeit beziehen, ” sind sie nicht gewiß, und soweit sie gewiß sind, beziehen sie sich nicht auf die Wirklichkeit.“ (Albert Einstein) Dieses soll als Schlusswort dieser Arbeit gelten, die besprochenen Gleichungen und Prozesse sind zwar in vieler Hinsicht bis ins kleinste erforscht und beschrieben, jedoch stellt das Mittel der Numerik wahrscheinlich die Wirklichkeit in ihrer, in ihr selbst inne ruhenden Ungenauigkeit am besten dar.