1 / 27

Reelle Zahlen

Reelle Zahlen. Variablen, die grundsätzlich reelle Werte annehmen können oder in Ausdrücken erscheinen, die einen reelllen Wert liefern, sollten vom Typ REAL sein. Division ganzer Zahlen.

evelyn
Download Presentation

Reelle Zahlen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Reelle Zahlen • Variablen, die grundsätzlich reelle Werte annehmen können oder in Ausdrücken erscheinen, die einen reelllen Wert liefern, sollten vom Typ REAL sein.

  2. Division ganzer Zahlen • Betrachte die Auswertung der Anweisung a = b*c/d, wobei b eine reelle Variable mit dem Wert 100.0 ist, während c und d ganze Zahlen mit den Werten 9 und 10 sind. • b*c wird zuerst ausgewertet, wobei c zunächst in den reellen Wert 9.0 umgewandelt wird. • Danach wird der Wert von d in seinen reellen Gegenwert umgewandelt, bevor die Division ausgeführt wird. Ellis et al. (1994), S. 48

  3. Division ganzer Zahlen • Was passiert, wenn der Ausdruck in der folgenden, mathematisch gleichwertigen Form geschrieben worden wäre: a = c/d*b ? • In der ersten Operation sind beide Operanden ganze Zahlen, so dass der Unterausdruck c/d als ganzzahlige Operation ausgeführt wird. • Das mathematische Ergebnis (0.9) wird abgeschnitten und liefert ein Zwischenergebnis von Null. Ellis et al. (1994), S. 49

  4. Literaturhinweis • Ellis, T.M.R., Phillips, Ivor R., and Lahey, Thomas M.: Fortran 90 Programming, Addison-Wesley Publishing Company, 1994. M. Schulz

  5. Mathematical Operations Deg_C = 5.0 * (Deg_F ­ 32.0) / 9.0  The expression on the RHS is evaluated and assigned to the REAL variable Deg_C * is the multiplication operator, ­ is the subtraction operator, / is the division operator, ** is the exponentiation, and = is the assignment operator. M. Schulz

  6. Important Built-In Functions ABS(x) Absolute value LOG(x) Natural logarithm LOG10(x) Base-10 logarithm EXP(x) Natural exponential SQRT(x) Square root SIN(x) Sine (x in radians!) COS(x) Cosine TAN(x) Tangent ASIN(x) Arcsine ACOS(x) Arccosine ATAN(x) Arctangent INT(x) Convert real to integer, truncation (7.8  7) NINT(x) Convert real to integer, rounding (7.8  8) REAL(i) Convert integer to real (1  1.0)

  7. Unix-Tipp • Wenn das aktuelle Verzeichnis “.” nicht im Suchpfad enthalten ist, dann kann man ein Programm a.exe mit dem Befehl ./a.exe starten.

  8. Tipps zur Fehlersuche • “PRINT”-Anweisungen einbauen, um den Wert bestimmter Variablen zu überprüfen • Spezielle Compileroptionen wählen, um zum Beispiel Feldbereichsüberschrei-tungen anzuzeigen

  9. G95-Optionen

  10. Fortran-Links • http://www.g95.org/ • http://www.g95.org/G95Manual.pdf • http://de.wikibooks.org/wiki/Fortran • http://de.wikibooks.org/wiki/Fortran:_Fortran_95 • http://de.wikibooks.org/wiki/Fortran:_G95

  11. Vergleichsoperatoren

  12. Energiebilanzmodell(Aufgabe 4) Projektübung Klimamodellierung (05-3034) – A. Paul

  13. Punktmodell der Strahlungsbilanz (Stocker 2004, Abschnitt 2.2) Gewöhnliche, nichtlineare Differentialgleichung erster Ordnung für die unbekannte, zeitabhängige Variable T(t)

  14. Gleichgewichtstemperatur des globalen Energiebilanzmodells: Die aus Messungen bestimmte mittlere Oberflächentemperatur beträgt 14°C (fett ausgezogen).

  15. Eis-Albedo-Rückkopplung • Die Eis-Albedo-Rückkopplung soll durch folgende Abschätzung der Elbedo parameterisiert werden:

  16. Diskretisierung t = n Dt, n=0,1,2,… T(t) in eine Taylorreihe entwickeln: Nach der ersten Ableitung auflösen: Euler-Schema

  17. Ersetzen von Dt durch -Dtund addieren: Schema der zentrierten Differenzen

  18. Das Euler-Verfahren ist das einfachste, aber auch ungenaueste Verfahren zur Lösung der gewöhnlichen Differentialgleichung erster Ordnung mit der Anfangsbedingung Im Fall des Energiebilanzmodells ist

  19. Das Euler-Verfahren wertet die Ableitung nur an den Stellen x und x+Dx aus. • Dies entspricht der Linearisierung der langwelligen Ausstrahlung. • Genauere Verfahren vom Typ “Runge-Kutta k-ter Ordnung” verwenden weitere Stützstellen im Intervall [x, x+Dx]

  20. Runge-Kutta-Verfahren k-ter Ordnung • Durch die Auswertung von f(x,y) an weiteren Stützstellen im Intervall [x, x+Dx] und eine geschickte Linearkombination kann der Fehler von O(Dx) auf O[(Dx)k] reduziert werden

  21. Die Vorschrift für das klassische Runge-Kutta-Verfahren 4. Ordung lautet: Stocker (2004), S. 33

  22. Parameterisierte REAL-Variablen • REAL-Variablen (reelle Zahlen) sind „parameterisiert“. • Der kind-Typparameter legt die Anforderungen an die minimale Genauigkeit und den Bereich des Exponenten fest.

  23. ! Parameter declarations ! Symbolic name for a real kind type with at least ! 15 decimal digits of precision and an exponent range ! from 10**300 to 10**(-300) (“double precision”) INTEGER, PARAMETER :: dp=SELECTED_REAL_KIND(P=15,R=300) ! Symbolic name for a real kind type with at least ! 6 decimal digits of precision and an exponent range ! from 10**30 to 10**(-30) (“single precision”) INTEGER, PARAMETER :: sp=SELECTED_REAL_KIND(P=6,R=30) ! Symbolic name for a default real kind type INTEGER, PARAMETER :: q=dp ! Variable declarations REAL(KIND=q) :: dpress REAL(KIND=q), DIMENSION(1:km) :: p

  24. FUNCTION- und SUBROUTINE-Unterprogramme • FUNCTION-Unterprogramme berechnen einen einzigen Wert, der an der Aufrufstelle eingesetzt wird. • SUBROUTINE-Unterprogramme gestatten die gleichzeizige Berechnung mehrerer Werte.

  25. FUNCTION- und SUBROUTINE-Unterprogramme SUBROUTINE rk4(y,dx,yp) IMPLICIT NONE ! Dummy arguments REAL(KIND=q), INTENT(IN) :: y,dx REAL(KIND=q), INTENT(OUT) :: yp ! Local variables ! dy1, dy2, dy3, dy4 = correspond to K1, K2, K3, K4 in ! fourth-order Runge-Kutta formula REAL(KIND=q) :: dy1,dy2,dy3,dy4 dy1 = f(y) dy2 = f(y + dx/2.0_q*dy1) dy3 = f(y + dx/2.0_q*dy2) dy4 = f(y + dx*dy3) yp = (dy1 + 2.0_q*dy2 + 2.0_q*dy3 + dy4)/6.0 END SUBROUTINE rk4

  26. Block IF-Struktur ! Variable declarations ! tol = criteria of convergence (K) REAL(KIND=q) :: tol [..] ! Initializations tol = 1.0E-03_q [..] ! Time loop DO itt=1,ittmax [..] ! Test for convergence IF (ABS(tf – ti) < tol) THEN EXIT END IF END DO

More Related