Etwas Mathematik Vorkurs Wintersemester 2016/17 Werner Struckmann 4.–14. Oktober 2016 Etwas Mathematik Aussagen Aussagen und ihre Bedeutung Aussage: Ein sprachliches Gebilde, dem man sinnvoll einen der Wahrheitswerte wahr oder falsch zuordnen kann. Menge der Wahrheitswerte: B = boolean = {0, 1} = {t, f } = {true, f al se} = {w, f } = {wahr, f al sch} TND: Tertium non datur Es gibt auch Logiken, bei denen Aussagen anders sind. Beispiele: Fuzzy-Logik, LTL (linear time logic), .... 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 2 / 42 Etwas Mathematik Aussagenlogik Menge der Aussagenvariablen: V V = {p1 , p2 , p3 , ...} Die Variablen werden z. B. auch als p, q, r, ... geschrieben. Menge der Ausdrücke: A pi ∈ A Φ, Ψ ∈ A =⇒ (¬Φ) ∈ A (Φ ∧ Ψ ) ∈ A (Φ ∨ Ψ ) ∈ A (Φ → Ψ ) ∈ A (Φ ↔ Ψ ) ∈ A Negation Konjunktion Disjunktion Implikation Äquivalenz Diese Operationen werden auch Verknüpfungen genannt. Etwas Mathematik Wahrheitswerte bei Verknüpfungen F (Φ) Φ f w Φ f f w w Ψ f w f w Φ∧Ψ f f f w ¬Φ w f Φ∨Ψ f w w w Φ→Ψ w w f w Kein exklusives Oder Φ ist erfüllbar gdw. es ex. ein Fall mit F (Φ) = w Φ ist allgemeingültig gdw. für alle Fälle gilt F (Φ) = w Φ↔Ψ w f f w Etwas Mathematik Prädikatenlogik Die Prädikatenlogik legt eine Struktur der Aussagen fest. Variable p1 , p2 , p3 , ..., x, y, z, ... Quantoren: ∃, ∀ Funktionssymbole Relationssymbole Verknüpfungen, Klammerungen 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 5 / 42 Etwas Mathematik Mengenlehre Georg Cantor, 1895 Unter einer Menge verstehen wir jede Zusammenfassung von bestimmten, wohlunterschiedenen Objekten m unserer Anschauung oder unseres Denkens zu einem Ganzen M. m∈M ZFC ist eine der axiomatischen Mengenlehren. Relationssymbol: ∈ 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 6 / 42 Etwas Mathematik Mengenlehre Beispiel: M = {2, 7, 5} = {5, 2, 5, 7, 7, 2, 2, 2} | M |= 3 Ein Axiom: Das Extensionalitätsaxiom: ∀x∀y(∀z(z ∈ x ↔ z ∈ y) ↔ x = y) 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 7 / 42 Etwas Mathematik Mengen Leere Menge: ∅ = {} Zahlenmengen: N, N0 , Z, Q, R, C Teilmenge: N⊆M Potenzmenge: P (M) = {N | N ⊆ M} Durchschnittsmenge: M ∩ N = {x | x ∈ M ∧ x ∈ N} Vereinigungsmenge: M ∪ N = {x | x ∈ M ∨ x ∈ N} Differenzmenge: M \ N = {x | x ∈ M ∧ x ∈ / N} Kartesisches Produkt: M × N = {(x, y) | x ∈ M ∧ y ∈ N} Relationen: R ⊆ M × N Funktionen: f : M → N Relationen und Funktionen können auch mehrstellig sein. Etwas Mathematik Fazit bis jetzt Was sind Aussagen? (Aussagenlogik) Wie können Aussagen formuliert werden? (Prädikatenlogik) Mengenlehre (axiomatisch) spezielle Mengen: leere Menge, Zahlenmengen Mengenoperationen Relationen, Funktionen Dies ist die Basis und die Sprache der Informatik, der Mathematik, .... Kann man alles beweisen? Auch die Widerspruchsfreiheit? Gödelsche Unvollständigkeitssätze Hinweis: Außer der Aussagenlogik und der Prädikatenlogik gibt weitere Logiken (schon erwähnt). Etwas Mathematik Summen- und Produktzeichen Summenzeichen (Sigma): b X xi = xa + xa+1 + xa+2 + ... + xb i =a Produktzeichen (Pi): b Y xi = xa · xa+1 · xa+2 · ... · xb i =a Beispiele: 5 X i =0 (i + 2) = 27 5 X i + 2 = 17 i =0 5 X 2 = 12 b X i =0 Typisch, aber nicht immer, falls a > b: Leere Summe: 0 1 = b−a+1 i =a Leeres Produkt: 1 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 10 / 42 Etwas Mathematik Gaußsche Summenformel, Beweis durch Induktion Satz: n X i =1 i= n · (n + 1) 2 Beweis: Induktionsanfang: n=1: 1 X i =1= i =1 1 · (1 + 1) 2 Induktionsschluss mit Induktionsvoraussetzung: n+1 X i =1 i= n X i =1 i + (n + 1) = n · (n + 1) + 2 · (n + 1) (n + 1) n · (n + 1) + (n + 1) = = · (n + 2) 2 2 2 Durch Induktion können z. B. Mengen und Funktionen definiert und Aussagen bewiesen werden. Es gibt mehrere Varianten der Induktion. Etwas Mathematik Landau-Symbole Definition: Es sei eine Funktion g : N −→ R gegeben. Θ(g) = {f : N −→ R | ∃c1 > 0, c2 > 0, n0 > 0 ∀n ≥ n0 . 0 ≤ c1 g(n) ≤ f (n) ≤ c2 g(n)} O(g) = {f : N −→ R | ∃c > 0, n0 > 0 ∀n ≥ n0 . 0 ≤ f (n) ≤ cg(n)} Ω(g) = {f : N −→ R | ∃c > 0, n0 > 0 ∀n ≥ n0 . 0 ≤ cg(n) ≤ f (n)} o(g) = {f : N −→ R | ∀c > 0 ∃n0 > 0 ∀n ≥ n0 . 0 ≤ f (n) < cg(n)} ω(g) = {f : N −→ R | ∀c > 0 ∃n0 > 0 ∀n ≥ n0 . 0 ≤ cg(n) < f (n)} Anwendung, Komplexität: Anzahl der Vergleiche bei Bubblesort: f (n) = n−1 X i =1 Schreibweise: i= n−1 1 1 · n = n2 − n ≤ n2 2 2 2 2 f ∈ O(n ) oder 2 f = O(n ) Etwas Mathematik Beispiele für das Summenzeichen Distributivgesetz: c · a1 + c · a2 + ... + c · an = c · (a1 + a2 + ... + an ) n X (c · ai ) = c · i =1 n X n X ai i =1 (c · ai + d ) = c · n X i =1 ai + n · d i =1 Umindizierung: n X i =0 ai = n+a X ai −a i =a Doppelsumme: n X m X ai · bj = a1 · b1 + a1 · b2 + ... + a1 · bm i =1 j =1 + a2 · b1 + a2 · b2 + ... + a2 · bm + ..... + an · b1 + an · b2 + ... + an · bm Etwas Mathematik Etwas weiteres zum Summenzeichen Häufig verwendte Formeln n X qi = 1 − q n+1 1−q qi = q−q 1−q i =0 n X i =1 q 6= 1 n+1 q 6= 1 Andere Schreibweise; I eine endliche Indexmenge, i ∈ I, 0 ∈ A, ai ∈ A X ai := 0 i ∈∅ X i ∈I ai := aj + X ai i ∈I\{j } Für das Produktzeichen gibt es auch eine Schreibweise mit einer Indexmenge. Etwas Mathematik Etwas Rechnen Potenz, Wurzel und Logarithmus: y = xn ↔ x= p n ↔ y n = logx (y) Potenz: x −n = x n · x m = x n+m n 1 xn x = x n−m xm Wurzel: p n 1 1 1 y · z = (y · z) n = y n · z n = p √ n n y· z Logarithmus: logx (y · z) = logx (y) + logx (z) y logx ( ) = logx (y) − logx (z) z logx (y n ) = n · logx (y) (x n )m = x n·m Etwas Mathematik Etwas Wichtiges für die Komplexität von Algorithmen Logarithmen vom gleichen Wert x zu unterschiedlichen Basen unterscheiden sich nur um einen Faktor, der nicht von x abhängt. Satz: Hier hängt c nicht von x ab: c · loga (x) = logb (x) Beweis: Setze c = logb (a). Damit gilt c · loga (x) = loga (x) · logb (a) = logb (aloga (x) ) = logb (x) Vermutlich haben Sie diese Regel beim Rechnen mit Taschenrechner verwendet. Beispiel: a = 10, b = e ln(10) · lg(x) = ln(x) lg(2) = Folge: → lg(x) = ln(2) = 0, 3010299957... ln(10) Wegen des Satzes kann geschrieben werden: O(log(n)) = O(loga (n)) ln(x) ln(10) Etwas Mathematik Eine weitere Regel Es gilt die Gleichung: loga (b) = 1 logb (a) Beispiel: log2 (16) = 4 log16 (2) = → Denn es gilt: 1 16 4 = p 4 16 = 2 1 4 Etwas Mathematik Kann ein Computer richtig rechnen? Wie rechnet ein Computer? Warum muss man das wissen, wenn man mit einem Computer arbeitet? Das wollen wir uns ansehen! Zuerst rechnen wir etwas selbst. 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 18 / 42 Etwas Mathematik Beispiel: Multiplikation zweier Zahlen 12 · 23 = ? 2 1 7 2 · 2 2 2 4 3 7 3 6 6 6 12·23 = (1·10+2)·(2·10+3) = 1·2·100+(1·3+2·2)·10+2·3 = 2·100+7·10+6 = 276 Etwas Mathematik Beispiel: Multiplikation zweier Zahlen 1 2 · 1 1 1 2 2 4 2 1 2 3 1 4 4 1 1 2 3 1 1 · 2 2 5 1 3 4 3 1 4 2 2 5 · 3 4 3 2 1 4 6 7 4 2 2 3 4 8 0 9 7 2 3 5 6 6 2 3 Berechnen Sie 12345 · 12345. 6 6 2 9 9 Mit einem Java-Programm kontrollieren wir unsere Ergebnisse und berechnen 123456 · 123456. 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 20 / 42 Etwas Mathematik Beispiel: Multiplikation zweier Zahlen public class Mult01 { public s t a t i c void main ( S t r i n g [ ] args ) { System . o u t . p r i n t l n ( 1 * 1 ) ; System . o u t . p r i n t l n ( 1 2 * 1 2 ) ; System . o u t . p r i n t l n ( 1 2 3 * 1 2 3 ) ; System . o u t . p r i n t l n ( 1 2 3 4 * 1 2 3 4 ) ; System . o u t . p r i n t l n ( 1 2 3 4 5 *1 2 3 4 5 ) ; System . o u t . p r i n t l n (123456*123456); } } Etwas Mathematik Beispiel: Multiplikation zweier Zahlen public class Mult01 { public s t a t i c void main ( S t r i n g [ ] args ) { System . o u t . p r i n t l n ( 1 * 1 ) ; System . o u t . p r i n t l n ( 1 2 * 1 2 ) ; System . o u t . p r i n t l n ( 1 2 3 * 1 2 3 ) ; System . o u t . p r i n t l n ( 1 2 3 4 * 1 2 3 4 ) ; System . o u t . p r i n t l n ( 1 2 3 4 5 *1 2 3 4 5 ) ; System . o u t . p r i n t l n (123456*123456); } } Ausgabe: 1 144 15129 1522756 152399025 -1938485248 Das Quadrat einer Zahl ist nicht negativ. Hat sich der Computer verrechnet? Etwas Mathematik Beispiel: Multiplikation zweier Zahlen Wir sehen uns ein zweites Beispiel an: public class Mult02 { public s t a t i c void main ( S t r i n g [ ] args ) { i n t z = 256*256*256*128+2147483647; System . o u t . p r i n t l n ( z * z ) ; } } 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 22 / 42 Etwas Mathematik Beispiel: Multiplikation zweier Zahlen Wir sehen uns ein zweites Beispiel an: public class Mult02 { public s t a t i c void main ( S t r i n g [ ] args ) { i n t z = 256*256*256*128+2147483647; System . o u t . p r i n t l n ( z * z ) ; } } Ausgabe: 1 Hat sich der Computer schon wieder verrechnet? 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 22 / 42 Etwas Mathematik Das nächste Beispiel: Kommazahlen können größere Werte annehmen Java: p u b l i c c l a s s Numerik { p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { double a = 1 . 0 / 3 . 0 , b = 10.0+a −10.0 , c ; i f ( a==b ) c = 0; else c = 1 / ( a−b ) ; System . o u t . p r i n t f ( " %20.5 f%n " , c ) ; } } Etwas Mathematik Das nächste Beispiel: Kommazahlen können größere Werte annehmen Java: p u b l i c c l a s s Numerik { p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { double a = 1 . 0 / 3 . 0 , b = 10.0+a −10.0 , c ; i f ( a==b ) c = 0; else c = 1 / ( a−b ) ; System . o u t . p r i n t f ( " %20.5 f%n " , c ) ; } } Ausgabe: -1637672591771089.50000 - 1 Billiarde 637 Billionen 672 Milliarden 591 Millionen 771 Tausend und 89,5 korrekter Wert: 0 Kann der Computer nicht rechnen? Etwas Mathematik Frage Gibt es weitere Fehler? 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 24 / 42 Etwas Mathematik Fehler beim Programmieren In Jahre 1999 wurde durch die Fehlfunktion eines Seitenairbags ein Baby getötet. Die Untersuchungen ergaben einen Softwarefehler: Die Ausführungsreihenfolge zweier Anweisungen war vertauscht worden. Der Fehler trat nur in der Software eines speziellen Fahrzeugmodells auf. Es wurde vergessen, diese spezielle Software zu testen. 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 25 / 42 Etwas Mathematik Fehler beim Programmieren Richtige Reihenfolge: airbag = ein; if (kindersitz == belegt) { airbag = aus; } Falsche Reihenfolge: if (kindersitz == belegt) { airbag = aus; } airbag = ein; 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 26 / 42 Etwas Mathematik Ariane-Rakete Bevor wir uns anschauen, wie es zu solchen Rechenfehlern kommt, sehen wir uns eine Minute einen Film an. Der Film zeigt den Start einer Ariane-Rakete. 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 27 / 42 Etwas Mathematik Ariane-Rakete Wikipedia: The launch ended in failure due to an error in the software design caused by inadequate protection from integer overflow. This resulted in the rocket veering off its flight path 37 seconds after launch, beginning to disintegrate under high aerodynamic forces, and finally self-destructing by its automated flight termination system. The failure has become known as one of the most infamous software bugs in history. The failure resulted in a loss of more than US $ 370 million. 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 28 / 42 Etwas Mathematik Dualzahlen: Darstellung 12 = 1 · 101 + 2 · 100 =8+4+0+0 = 1 · 23 + 1 · 22 + 0 · 21 + 0 · 20 = (1100)2 123 = 1 · 102 + 2 · 101 + 3 · 100 = 64 + 32 + 16 + 8 + 0 + 2 + 1 = 1 · 26 + 1 · 25 + 1 · 24 + 1 · 23 + 0 · 22 + 1 · 21 + 1 · 20 = (1111011)2 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 29 / 42 Etwas Mathematik Weitere Basen: Die Zahl 95 95 = 64 + 16 + 8 + 4 + 2 + 1 = 1 · 26 + 1 · 24 + 1 · 23 + 1 · 22 + 1 · 21 + +1 · 20 = (1011111)2 95 = 64 + 24 + 7 = 1 · 82 + 3 · 81 + 7 · 80 = (137)8 95 = 80 + 15 = 5 · 161 + 15 · 160 = (5F)16 Bei Basis 16: A=10, B=11, C=12, D=13, E=14, F=15. Auch als: a,b,c,d,e,f. Wichtige Basen für Java: 2, 8, 10, 16. Basis 2: Binärzahl, Dualzahl. Basis 8: Oktalzahl. Basis 16: Hexadezimalzahl. Etwas Mathematik Die Darstellung der Zahl 95 in Java System.out.println(" System.out.println(" System.out.println(" System.out.println(" System.out.println(" Binär: "+0b1011111); Oktal: "+0137); Dezimal: "+95); Hexadezimal: "+0x5F); Hexadezimal: "+0x5f); 4.–14. Oktober 2016 | Werner Struckmann | Etwas Mathematik | Seite 31 / 42 Etwas Mathematik Weitere Basen: Die Zahl 95 Gelten die folgenden Darstellungen? 95 = (1011111)2 95 = (10112)3 95 = (1133)4 95 = (340)5 95 = (235)6 95 = (164)7 95 = (137)8 95 = (115)9 95 = (95)10 95 = (87)11 95 = (7B)12 95 = (74)13 95 = (6B)14 95 = (65)15 95 = (5F)16 95 = (5A)17 Etwas Mathematik Dualzahlen: Addition + + 1 1 0 1 2 3 1 1 1 0 1 0 2 3 5 1 1 0 1 0 1 0 1 1 0 1 1 Das exclusive Oder reicht also für die Addition. Subtraktion, Multiplikation und Division werden auf die Addition zurückgeführt. Das exclusive Oder ermöglicht also die bitweise Rechnung. (10000111)2 = 1 · 27 + 1 · 22 + 1 · 21 + 1 · 20 = 128 + 4 + 2 + 1 = 135 Etwas Mathematik Dualzahlen: Multiplikation 1 2 · 1 1 1 1 1 0 1 0 0 1 1 0 · 0 1 0 1 1 2 2 4 2 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 4 4 (10010000)2 = 1 · 27 + 1 · 24 = 128 + 16 = 144 Etwas Mathematik Dualzahlen: Speicherung/Verarbeitung Computer speichern Zahlen meistens als Dualzahlen. Null oder Eins wird durch ein Bit repräsentiert. Java: Der Datentyp int soll zum Rechnen mit ganzen Zahlen, d. h. mit Elementen der Menge Z = {. . . , −5, −4, −3, −2, −1, 0, 1, 2, 3, 4, 5, . . .} verwendet werden. Eine Zahl vom Typ int wird durch 32 Bits gespeichert. 32 Dadurch gehören 2 = 4 294 967 296 Zahlen zum Typ int. Java deckt damit den 31 31 Bereich von −2 = −2 147 483 648 bis 2 − 1 = 2 147 483 647 ab. Die Zahl 2 147 483 647 wird maxint genannt. Das Ergebnis der Multiplikation 123456 · 123456 ist 15 241 383 936. Diese Zahl ist größer als maxint und kann daher nicht verarbeitet werden. Das obige Programm hat sich also schon bei einer Multiplikation um 15 241 383 936 − (−1 938 485 248) = 17 179 869 184, d. h. um 17 Milliarden 179 Millionen 869 Tausend 184 verrechnet. Etwas Mathematik Dualzahlen: Speicherung/Verarbeitung Es gibt verschiedene Möglichkeiten, ganze Zahlen als Dualzahlen zu speichern. Eine sehen wir uns an, das. sog. Zweierkomplement: maxint: 2 147 483 647 = minint: −2 147 483 648 = 0 1 2 3 .... 231 − 1 31 −2 31 −2 + 1 .... −3 −2 −1 0000....0000 0000....0001 0000....0010 0000....0011 ............ 0111....1111 1000....0000 1000....0001 ............ 1111....1101 1111....1110 1111....1111 Es geht bei 0000....0000 los. In jedem Schritt geht es um eins weiter. So macht es zum Beispiel Java. Für den Datentyp int werden 32 Bits benutzt. Etwas Mathematik Dualzahlen: Speicherung/Verarbeitung Zugegeben: In Java gibt es den Datentyp long, der größere Zahlen verarbeiten kann. Aber auch für diesen Datentyp gibt es eine Maximalzahl. Nicht alle Programmiersprachen behandeln Zahlen gleich. Es kommt sogar vor, dass eine Programmiersprache Zahlen auf verschiedenen Rechnern unterschiedlich bearbeitet. Computeralgebrasysteme, zum Beispiel Maple, behandeln Zahlen anders: » 123456*123456; 15241383936 » z:=256*256*256*128+2147483647; z:=4294967295 » z*z; 18446744065119617025 Fazit: Wenn man mit einem Computer arbeitet, muss man sich seine Sprache und Rechner genau anschauen. Insbesondere also wie Zahlen gespeichert werden und dargestellt werden können. Sonst kann es zu schweren Fehlern führen. Etwas Mathematik Dezimalzahlen: Rationale Zahlen Die Dezimalbruchentwicklung von rationalen Zahlen, d. h. von Elementen aus Q, ist periodisch: 17 = 4,2500000... 4 = 4,250 = 4,25 15 = 2,142857142857142857142857142857... 7 = 2,142857 Die Dezimalbruchentwicklung von irrationalen Zahlen, d. h. von Elementen aus R \ Q, ist nicht periodisch: p 2 = 1,4142135623730950488016887... π = 3,1415926535897932384626433... e = 2,7182818284590452353602874... Etwas Mathematik Dualzahlen: Rationale Zahlen Die gleichen Aussagen gelten für Dualzahlen: 1 2 15 4 1 10 π = 0,5000000... = 0,50 = (0,10)2 = (0,1)2 = 3,7500000... = 3,750 = (11,110)2 = (11,11)2 = 0,1 = 0,00011001100110011001100110011... = 0,00011 = 11.00100100001111110110101... Wenn also endlich viele Bits zur Speicherung von rationalen Zahlen in der Dualzahldarstellung benutzt werden, dann kann also nicht einmal die Zahl 0,1 korrekt gespeichert werden (→ Numerik). Etwas Mathematik Dualzahlen: Subtraktion Wie darf ein Computer subtrahieren? Die Subtraktion kann auf die Addition zurückgeführt werden: - 3 1 2 5 4 1 + 1 + 3 8 2 5 5 0 1 1 2 (Komplement von 14) 85 ergänzen die Ziffern von 14 auf 99. Komplement: k k b + b̄ = 10 − 1, 10 > b. b = 10k − 1 − b̄ k k a − b = a − (10 − 1 − b̄) = a + b̄ − 10 + 1 (s. Beispiel) Etwas Mathematik Dualzahlen: Subtraktion 35 − 14 = 21: 1 0 1 0 1 0 0 1 1 1 1 0 1 0 1 + 1 + 1 1 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 1 0 110001 ist das Komplement von 1110. 1 1 0 1 1 Etwas Mathematik Dualzahlen: Division 13 : 8 = 1,625 5 1 0 1 = 1 + + + = (1,101)2 8 2 4 8 13 = (1101)2 13 : 8 = 1 8 = (1000)2 1 1 1 0 1 1 0 0 0 0 1 0 1 0 1 1 : 1 0 0 0 0 0 0 0 0 0 0 0 0 = 1, 1 0 1