close

Anmelden

Neues Passwort anfordern?

Anmeldung mit OpenID

Einführung - Institut für Neuroinformatik - Ruhr-Universität Bochum

EinbettenHerunterladen
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Ubung
zur Vorlesung
Kunstliche
Neuronale Netze
¨
Einfuhrungsveranstaltung
¨
Raul Grieben
Institut fur
¨ Neuroinformatik
¨ Bochum
Ruhr-Universitat
raul.grieben@ini.rub.de
29. Oktober 2014
Allgemeines
Einfuhrung
in C++
¨
¨
Ubersicht
1
Allgemeines
2
Einfuhrung
in C++
¨
Anforderungen an Quelltexte
Datentypen
¨
Blocke
Klassen
Standard Template Library STL
3
Mathematik
Lineare Algebra
Differentialrechnung
Wahrscheinlichkeitsrechnung
Mathematik
Allgemeines
Einfuhrung
in C++
¨
Outline
1
Allgemeines
2
Einfuhrung
in C++
¨
Anforderungen an Quelltexte
Datentypen
¨
Blocke
Klassen
Standard Template Library STL
3
Mathematik
Lineare Algebra
Differentialrechnung
Wahrscheinlichkeitsrechnung
Mathematik
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Allgemeines
zu mir:
Name: Raul Grieben
Arbeitsplatz: NB 3/75
Telefon: 32-27921
E-Mail: raul.grieben@ini.rub.de
nachzulesen unter: www.ini.rub.de ⇒ The Institute ⇒
People
¨
zur Ubung:
Ort: Seminarraum NB3-57
2 Termine: Mittwoch 15:00 Uhr und 16:00 Uhr
¨
Moglichst
feste Gruppen, Aufteilung selbstorganisiert
Heute:
Einfuhrung
in C/C++ inklusive
¨
Beschreibung der Matrix-Klasse
Wiederholung mathematische Grundlagen
http://www.ini.ruhr-uni-bochum.de/PEOPLE/rolf/exercises/knn-exercise/index.html
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Allgemeines
zu mir:
Name: Raul Grieben
Arbeitsplatz: NB 3/75
Telefon: 32-27921
E-Mail: raul.grieben@ini.rub.de
nachzulesen unter: www.ini.rub.de ⇒ The Institute ⇒
People
¨
zur Ubung:
Ort: Seminarraum NB3-57
2 Termine: Mittwoch 15:00 Uhr und 16:00 Uhr
¨
Moglichst
feste Gruppen, Aufteilung selbstorganisiert
Heute:
Einfuhrung
in C/C++ inklusive
¨
Beschreibung der Matrix-Klasse
Wiederholung mathematische Grundlagen
http://www.ini.ruhr-uni-bochum.de/PEOPLE/rolf/exercises/knn-exercise/index.html
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Allgemeines zur Ubung
KNN
¨
Zweiwochiger
Rhytmus:
Aufgabenzettel in der Vorlesung und auf der Webseite
Theoretische Aufgaben
Programmieraufgaben
Punkteverteilung
Abgabetermine
Nach 1 Woche:
¨
Abgabe der handgeschriebenen Losung
auf Papier (nach
der Vorlesung oder bei mir)
¨
→ eine Losung
pro Person
¨
In der Ubung
am Mittwoch:
¨
Austeilung der Theorie-Losungen
Besprechung der theoretischen Aufgaben
¨
Vorstellung einer Losung
Vorbesprechung der Programmieraufgabe
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Allgemeines zur Ubung
KNN
¨
Zweiwochiger
Rhytmus:
Aufgabenzettel in der Vorlesung und auf der Webseite
Theoretische Aufgaben
Programmieraufgaben
Punkteverteilung
Abgabetermine
Nach 1 Woche:
¨
Abgabe der handgeschriebenen Losung
auf Papier (nach
der Vorlesung oder bei mir)
¨
→ eine Losung
pro Person
¨
In der Ubung
am Mittwoch:
¨
Austeilung der Theorie-Losungen
Besprechung der theoretischen Aufgaben
¨
Vorstellung einer Losung
Vorbesprechung der Programmieraufgabe
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Allgemeines zur Ubung
KNN
Nach 1 weiteren Woche (Zeit zur Programmierung):
Abgabe der Programmieraufgabe per E-Mail an mich
→ inklusive Beantwortung der Fragen als
Quelltext-Kommentar
¨
→ Abgabe bis Freitag 24:00 Uhr (pro Team 1 Losung)
¨
In der Ubung
am Mittwoch:
¨
Vorstellung einer Losung
einzeln
¨
Ggf. Vorstellung Musterlosung
Ggf. Vorbesprechung des neuen Aufgabenblattes
Zur Programmierung:
Teams mit je 1 – 2 Personen
Programmiersprache C++
Klasse Matrix sollte benutzt werden
Nur bisher als public deklarierte Funktionen benutzen,
keine privaten Funktionen als public deklarieren!!
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Allgemeines zur Ubung
KNN
Nach 1 weiteren Woche (Zeit zur Programmierung):
Abgabe der Programmieraufgabe per E-Mail an mich
→ inklusive Beantwortung der Fragen als
Quelltext-Kommentar
¨
→ Abgabe bis Freitag 24:00 Uhr (pro Team 1 Losung)
¨
In der Ubung
am Mittwoch:
¨
Vorstellung einer Losung
einzeln
¨
Ggf. Vorstellung Musterlosung
Ggf. Vorbesprechung des neuen Aufgabenblattes
Zur Programmierung:
Teams mit je 1 – 2 Personen
Programmiersprache C++
Klasse Matrix sollte benutzt werden
Nur bisher als public deklarierte Funktionen benutzen,
keine privaten Funktionen als public deklarieren!!
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Allgemeines zur Ubung
KNN
Scheinerwerb:
¨
Besuch der Ubung
¨
Losen
der theoretischen Aufgaben
Erstellen der Programme
¨
Vorstellen einer Losung
⇒ einmalig bis zu 10 Zusatz-Punkte
Besuch der Vorlesung
Vorzeitige Abmeldung:
¨
¨
Bis zur Ausgabe des 3. Ubungsblattes
moglich
¨
¨
Nach Abgabe der Losung
des 3. Ubungsblattes wird
Ergebnis ans PA gemeldet
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Allgemeines zur Ubung
KNN
Scheinerwerb:
¨
Besuch der Ubung
¨
Losen
der theoretischen Aufgaben
Erstellen der Programme
¨
Vorstellen einer Losung
⇒ einmalig bis zu 10 Zusatz-Punkte
(Besuch der Vorlesung)
Vorzeitige Abmeldung:
¨
¨
Bis zur Ausgabe des 3. Ubungsblattes
moglich
¨
¨
Nach Abgabe der Losung
des 3. Ubungsblattes wird
Ergebnis ans PA gemeldet
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Allgemeines zur Ubung
KNN
Scheinerwerb:
¨
(Besuch der Ubung)
¨
Losen
der theoretischen Aufgaben
Erstellen der Programme
¨
Vorstellen einer Losung
⇒ einmalig bis zu 10 Zusatz-Punkte
(Besuch der Vorlesung)
Vorzeitige Abmeldung:
¨
¨
Bis zur Ausgabe des 3. Ubungsblattes
moglich
¨
¨
Nach Abgabe der Losung
des 3. Ubungsblattes wird
Ergebnis ans PA gemeldet
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Allgemeines zur Ubung
KNN
Scheinerwerb:
¨
(Besuch der Ubung)
¨
Losen
der theoretischen Aufgaben
Erstellen der Programme
¨
Vorstellen einer Losung
⇒ einmalig bis zu 10 Zusatz-Punkte
(Besuch der Vorlesung)
Vorzeitige Abmeldung:
¨
¨
Bis zur Ausgabe des 3. Ubungsblattes
moglich
¨
¨
Nach Abgabe der Losung
des 3. Ubungsblattes wird
Ergebnis ans PA gemeldet
Allgemeines
Einfuhrung
in C++
¨
Outline
1
Allgemeines
2
Einfuhrung
in C++
¨
Anforderungen an Quelltexte
Datentypen
¨
Blocke
Klassen
Standard Template Library STL
3
Mathematik
Lineare Algebra
Differentialrechnung
Wahrscheinlichkeitsrechnung
Mathematik
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Quelltexte
Anforderungen an C++-Quelltexte
¨
Lauffahigkeit
kompilierbar unter Linux mit mitgeliefertem Makefile
⇒ #include-Direktiven Case-sensitiv und mit /
⇒ keine Leerzeichen in Dateinamen
ausfuhrbar
ohne Absturz
¨
keine Speicherlecks
Lesbarkeit
¨
moglichst
einfache Struktur
¨
aussagekraftige
Namen fur
¨ Variablen und Funktionen
Einruckung,
bitte mit Leerzeichen, nicht mit Tabs
¨
keine unbenutzten Variablen oder Funktionen
Kommentare im Quelltext
Zeilenkommentare (//) oder Blockkommentare (/* und */)
¨
Funktionen, funktionale Blocke
und Klassen dokumentieren
Kommentare in deutsch oder englisch
Richtlinie: 2-3 Zeilen Code, eine Zeile Kommentar
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Quelltexte
Anforderungen an C++-Quelltexte
¨
Lauffahigkeit
kompilierbar unter Linux mit mitgeliefertem Makefile
⇒ #include-Direktiven Case-sensitiv und mit /
⇒ keine Leerzeichen in Dateinamen
ausfuhrbar
ohne Absturz
¨
keine Speicherlecks
Lesbarkeit
¨
moglichst
einfache Struktur
¨
aussagekraftige
Namen fur
¨ Variablen und Funktionen
Einruckung,
bitte mit Leerzeichen, nicht mit Tabs
¨
keine unbenutzten Variablen oder Funktionen
Kommentare im Quelltext
Zeilenkommentare (//) oder Blockkommentare (/* und */)
¨
Funktionen, funktionale Blocke
und Klassen dokumentieren
Kommentare in deutsch oder englisch
Richtlinie: 2-3 Zeilen Code, eine Zeile Kommentar
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Quelltexte
Anforderungen an C++-Quelltexte
¨
Lauffahigkeit
kompilierbar unter Linux mit mitgeliefertem Makefile
⇒ #include-Direktiven Case-sensitiv und mit /
⇒ keine Leerzeichen in Dateinamen
ausfuhrbar
ohne Absturz
¨
keine Speicherlecks
Lesbarkeit
¨
moglichst
einfache Struktur
¨
aussagekraftige
Namen fur
¨ Variablen und Funktionen
Einruckung,
bitte mit Leerzeichen, nicht mit Tabs
¨
keine unbenutzten Variablen oder Funktionen
Kommentare im Quelltext
Zeilenkommentare (//) oder Blockkommentare (/* und */)
¨
Funktionen, funktionale Blocke
und Klassen dokumentieren
Kommentare in deutsch oder englisch
Richtlinie: 2-3 Zeilen Code, eine Zeile Kommentar
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Einfuhrung
C++
¨
heute nur kurze Einfuhrung
in C++
¨
gutes C++-Tutorial unter:
http://www.cpp-tutor.de
http://www.cplusplus.com/doc/tutorial/
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Einfache Datentypen
Einfache Datentypen
Ganzzahl: int, unsigned, short, char: -15, 7, ’a’
Fließkomma: double, float: -3.5, 0.f, 1e-4
Wahrheitswerte: bool/boolean: true, false
• Achtung! Variablen werden nicht automatisch initialisiert!
Operatoren
arithmetische Operatoren +, -, *, /, %, ++, -logische Operatoren &&, ||, !, <, ==, >=
Zuweisungsoperatoren =, +=, *=, (&=, . . .)
¨ Operatoren &, |, ˆ, ∼, <<, >>)
(Binare
Datentyp-Konvertierung
automatische Konvertierung
int ⇔ unsigned, int ⇒ double
explizite Konvertierung (int)0.5
beliebte Fehler
double x = 2/3; besser: x = 2./3.;
unsigned u = 2-3; oder while (u >= 0) . . .
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Einfache Datentypen
Einfache Datentypen
Ganzzahl: int, unsigned, short, char: -15, 7, ’a’
Fließkomma: double, float: -3.5, 0.f, 1e-4
Wahrheitswerte: bool/boolean: true, false
• Achtung! Variablen werden nicht automatisch initialisiert!
Operatoren
arithmetische Operatoren +, -, *, /, %, ++, -logische Operatoren &&, ||, !, <, ==, >=
Zuweisungsoperatoren =, +=, *=, (&=, . . .)
¨ Operatoren &, |, ˆ, ∼, <<, >>)
(Binare
Datentyp-Konvertierung
automatische Konvertierung
int ⇔ unsigned, int ⇒ double
explizite Konvertierung (int)0.5
beliebte Fehler
double x = 2/3; besser: x = 2./3.;
unsigned u = 2-3; oder while (u >= 0) . . .
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Einfache Datentypen
Einfache Datentypen
Ganzzahl: int, unsigned, short, char: -15, 7, ’a’
Fließkomma: double, float: -3.5, 0.f, 1e-4
Wahrheitswerte: bool/boolean: true, false
• Achtung! Variablen werden nicht automatisch initialisiert!
Operatoren
arithmetische Operatoren +, -, *, /, %, ++, -logische Operatoren &&, ||, !, <, ==, >=
Zuweisungsoperatoren =, +=, *=, (&=, . . .)
¨ Operatoren &, |, ˆ, ∼, <<, >>)
(Binare
Datentyp-Konvertierung
automatische Konvertierung
int ⇔ unsigned, int ⇒ double
explizite Konvertierung (int)0.5
beliebte Fehler
double x = 2/3; besser: x = 2./3.;
unsigned u = 2-3; oder while (u >= 0) . . .
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Einfache Datentypen
Einfache Datentypen
Ganzzahl: int, unsigned, short, char: -15, 7, ’a’
Fließkomma: double, float: -3.5, 0.f, 1e-4
Wahrheitswerte: bool/boolean: true, false
• Achtung! Variablen werden nicht automatisch initialisiert!
Operatoren
arithmetische Operatoren +, -, *, /, %, ++, -logische Operatoren &&, ||, !, <, ==, >=
Zuweisungsoperatoren =, +=, *=, (&=, . . .)
¨ Operatoren &, |, ˆ, ∼, <<, >>)
(Binare
Datentyp-Konvertierung
automatische Konvertierung
int ⇔ unsigned, int ⇒ double
explizite Konvertierung (int)0.5
beliebte Fehler
double x = 2/3; besser: x = 2./3.;
unsigned u = 2-3; oder while (u >= 0) . . .
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Einfache Datentypen
Einfache Datentypen
Ganzzahl: int, unsigned, short, char: -15, 7, ’a’
Fließkomma: double, float: -3.5, 0.f, 1e-4
Wahrheitswerte: bool/boolean: true, false
• Achtung! Variablen werden nicht automatisch initialisiert!
Operatoren
arithmetische Operatoren +, -, *, /, %, ++, -logische Operatoren &&, ||, !, <, ==, >=
Zuweisungsoperatoren =, +=, *=, (&=, . . .)
¨ Operatoren &, |, ˆ, ∼, <<, >>)
(Binare
Datentyp-Konvertierung
automatische Konvertierung
int ⇔ unsigned, int ⇒ double
explizite Konvertierung (int)0.5
beliebte Fehler
double x = 2/3; besser: x = 2./3.;
unsigned u = 2-3; oder while (u >= 0) . . .
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Komplexe Datentypen
Vektoren
Vektoren von Variablen gleichen Typs
std::vector<double> v(10);
Mehrdimensionale Felder
std::vector<std::vector<double> > m(5);
Index startet immer mit 0
Zugriff uber
v[0]...v[9], m[0][0]...m[4][2]
¨
¨
¨
Schneller Zugriff auf die Elemente, nachtragliche
Anderung
¨
der Große
per resize
Strukturen
Zusammenfassung verschiedener Typen zu einer Einheit
struct{int a; double b; char c;} s;
typedef struct{int a; double b; char c;} T;
Zugriff uber
.-Operator
¨
s.a = 7; s.b = M PI; s.c = ’o’;
andere Operatoren sind fur
¨ Strukturen i.A. nicht vorhanden
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Komplexe Datentypen
Vektoren
Vektoren von Variablen gleichen Typs
std::vector<double> v(10);
Mehrdimensionale Felder
std::vector<std::vector<double> > m(5);
Index startet immer mit 0
Zugriff uber
v[0]...v[9], m[0][0]...m[4][2]
¨
¨
¨
Schneller Zugriff auf die Elemente, nachtragliche
Anderung
¨
der Große
per resize
Strukturen
Zusammenfassung verschiedener Typen zu einer Einheit
struct{int a; double b; char c;} s;
typedef struct{int a; double b; char c;} T;
Zugriff uber
.-Operator
¨
s.a = 7; s.b = M PI; s.c = ’o’;
andere Operatoren sind fur
¨ Strukturen i.A. nicht vorhanden
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Komplexe Datentypen
Vektoren
Vektoren von Variablen gleichen Typs
std::vector<double> v(10);
Mehrdimensionale Felder
std::vector<std::vector<double> > m(5);
Index startet immer mit 0
Zugriff uber
v[0]...v[9], m[0][0]...m[4][2]
¨
¨
¨
Schneller Zugriff auf die Elemente, nachtragliche
Anderung
¨
der Große
per resize
Strukturen
Zusammenfassung verschiedener Typen zu einer Einheit
struct{int a; double b; char c;} s;
typedef struct{int a; double b; char c;} T;
Zugriff uber
.-Operator
¨
s.a = 7; s.b = M PI; s.c = ’o’;
andere Operatoren sind fur
¨ Strukturen i.A. nicht vorhanden
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Zeiger und Referenzen
Zeiger, Referenzen
Zeiger auf Speicherbereich double*, char*
Referenzen auf bereits existierende Objekte double&
Operatoren
Neues Objekt bzw. Array auf dem Heap erzeugen new
double* p = new double;
double* v = new double[20];
¨
Objekt auf dem Heap loschen
delete
delete p; delete[] v;
Adresse eines Objektes &
double x = 10.; double* p = &x;
Referenz auf ein Objekt &
double x = 10.; double& r = x;
Dereferenzierung *, ->
*p = x + 5.;
T* t = new T; t->a = 0; (*t).c = ’\n’;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Zeiger und Referenzen
Zeiger, Referenzen
Zeiger auf Speicherbereich double*, char*
Referenzen auf bereits existierende Objekte double&
Operatoren
Neues Objekt bzw. Array auf dem Heap erzeugen new
double* p = new double;
double* v = new double[20];
¨
Objekt auf dem Heap loschen
delete
delete p; delete[] v;
Adresse eines Objektes &
double x = 10.; double* p = &x;
Referenz auf ein Objekt &
double x = 10.; double& r = x;
Dereferenzierung *, ->
*p = x + 5.;
T* t = new T; t->a = 0; (*t).c = ’\n’;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Zeiger und Referenzen
Zeiger, Referenzen
Zeiger auf Speicherbereich double*, char*
Referenzen auf bereits existierende Objekte double&
Operatoren
Neues Objekt bzw. Array auf dem Heap erzeugen new
double* p = new double;
double* v = new double[20];
¨
Objekt auf dem Heap loschen
delete
delete p; delete[] v;
Adresse eines Objektes &
double x = 10.; double* p = &x;
Referenz auf ein Objekt &
double x = 10.; double& r = x;
Dereferenzierung *, ->
*p = x + 5.;
T* t = new T; t->a = 0; (*t).c = ’\n’;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Zeiger und Referenzen
Zeiger, Referenzen
Zeiger auf Speicherbereich double*, char*
Referenzen auf bereits existierende Objekte double&
Operatoren
Neues Objekt bzw. Array auf dem Heap erzeugen new
double* p = new double;
double* v = new double[20];
¨
Objekt auf dem Heap loschen
delete
delete p; delete[] v;
Adresse eines Objektes &
double x = 10.; double* p = &x;
Referenz auf ein Objekt &
double x = 10.; double& r = x;
Dereferenzierung *, ->
*p = x + 5.;
T* t = new T; t->a = 0; (*t).c = ’\n’;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Zeiger und Referenzen
Zeiger, Referenzen
Zeiger auf Speicherbereich double*, char*
Referenzen auf bereits existierende Objekte double&
Operatoren
Neues Objekt bzw. Array auf dem Heap erzeugen new
double* p = new double;
double* v = new double[20];
¨
Objekt auf dem Heap loschen
delete
delete p; delete[] v;
Adresse eines Objektes &
double x = 10.; double* p = &x;
Referenz auf ein Objekt &
double x = 10.; double& r = x;
Dereferenzierung *, ->
*p = x + 5.;
T* t = new T; t->a = 0; (*t).c = ’\n’;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Zeiger und Referenzen
Zeiger, Referenzen
Zeiger auf Speicherbereich double*, char*
Referenzen auf bereits existierende Objekte double&
Operatoren
Neues Objekt bzw. Array auf dem Heap erzeugen new
double* p = new double;
double* v = new double[20];
¨
Objekt auf dem Heap loschen
delete
delete p; delete[] v;
Adresse eines Objektes &
double x = 10.; double* p = &x;
Referenz auf ein Objekt &
double x = 10.; double& r = x;
Dereferenzierung *, ->
*p = x + 5.;
T* t = new T; t->a = 0; (*t).c = ’\n’;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Blocke
Bedingungen:
einzelne Verzweigung if
if (cond) {bodyTRUE}
if (cond) {bodyTRUE} else {bodyFALSE}
mehrfache Verzweigung switch
switch (i){
case 0:
body0
break; ← nicht vergessen!
...
default:
bodyDEFAULT
break;
}
?-Operator:
cond ? bodyTRUE : bodyFALSE
int b = a > 0 ? a : -a;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Blocke
Bedingungen:
einzelne Verzweigung if
if (cond) {bodyTRUE}
if (cond) {bodyTRUE} else {bodyFALSE}
mehrfache Verzweigung switch
switch (i){
case 0:
body0
break; ← nicht vergessen!
...
default:
bodyDEFAULT
break;
}
?-Operator:
cond ? bodyTRUE : bodyFALSE
int b = a > 0 ? a : -a;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Blocke
Bedingungen:
einzelne Verzweigung if
if (cond) {bodyTRUE}
if (cond) {bodyTRUE} else {bodyFALSE}
mehrfache Verzweigung switch
switch (i){
case 0:
body0
break; ← nicht vergessen!
...
default:
bodyDEFAULT
break;
}
?-Operator:
cond ? bodyTRUE : bodyFALSE
int b = a > 0 ? a : -a;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Blocke
Schleifen
while-Schleife:
while (cond) {body}
do-while-Schleife:
do {body} while (cond);
for-Schleife:
for (init ; cond ; statement) {body}
Beispiele:
while (a < b){
a = a + 1;
}
for (int i = 0; i < 10; ++i){
sum += v[i];
}
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Blocke
Schleifen
while-Schleife:
while (cond) {body}
do-while-Schleife:
do {body} while (cond);
for-Schleife:
for (init ; cond ; statement) {body}
Beispiele:
while (a < b){
a = a + 1;
}
for (int i = 0; i < 10; ++i){
sum += v[i];
}
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Blocke
Funktionen:
¨
¨
Haufig
benotigte
Aufgaben als eigene Funktion
implementieren, die an entsprechender Stelle im Code
aufgerufen wird
Vorteil: einfachere Fehlersuche, Fehler muß nur an einer
Stelle im Code gesucht werden
bessere Lesbarkeit des Codes, er wird deutlich kurzer
¨
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Blocke
Beispiel: Berechnung des Skalarproduktes zweier
Vektoren
double scalarProd(std::vector<double> x,
std::vector<double> y){
double t = 0;
for (int i=0;i<x.size();++i){
t+=x[i]*y[i];
}
return t;
}
Allgemeines
Einfuhrung
in C++
¨
Mathematik
¨
Blocke
Struktur:
ret type func name(param list){body}
ret type: Typ des zuruckgegebenen
Wertes
¨
beliebige Typen erlaubt (Ausnahme: C-Arrays)
keine Ruckgabewert:
void
¨
func name Name der Funktion
param list Liste der Parameter
Komma-separierte Liste int a, double b
Wertparameter: Wert wird kopiert double x
Referenzparameter: double& x
Standard-Werte: int a = 0, double b = 0.
body Inhalt der Funktion
Allgemeines
Einfuhrung
in C++
¨
Mathematik
main-Funktion
wichtigste Funktion main:
int main (int argc, char* argv[]){ }
Hauptfunktion, wird bei jedem Programmstart aufgerufen
argc und argv sind Kommandozeilen-Parameter
argc gibt die Anzahl von Parametern an
argv[i] sind die Paramter (als char*)
argv[0] ist immer der Programmname selbst
• Achtung! Vor argv[i] immer argc > i prufen!
¨
Funktionen zur Umwandlung der Parameter:
int atoi(char*);
double atof(char*);
Ruckgabewert
¨
0 bei Erfolg
meist 1 oder -1 im Fehlerfall
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Klassen
Klassen bilden abgeschlossene Einheiten von
Variablen (Attribute, Member-Variablen)
Funktionen (Methoden, Schnittstellen)
Konzepte von Klassen
Abgeschlossenheit, Kapselung
Zugriffsrechte public, protected, private
typisch: Funktionen public oder protected, Variablen
protected oder private
Vererbung, Polymorphie
Klasse (statisch) und Objekt (dynamisch)
Aufteilung in Deklaration und Definition
Deklaration im Header (.h oder .hpp)
Definition im Programmcode (.cc oder .cpp)
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Klassen
Klassen bilden abgeschlossene Einheiten von
Variablen (Attribute, Member-Variablen)
Funktionen (Methoden, Schnittstellen)
Konzepte von Klassen
Abgeschlossenheit, Kapselung
Zugriffsrechte public, protected, private
typisch: Funktionen public oder protected, Variablen
protected oder private
Vererbung, Polymorphie
Klasse (statisch) und Objekt (dynamisch)
Aufteilung in Deklaration und Definition
Deklaration im Header (.h oder .hpp)
Definition im Programmcode (.cc oder .cpp)
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Klassen
Klassen bilden abgeschlossene Einheiten von
Variablen (Attribute, Member-Variablen)
Funktionen (Methoden, Schnittstellen)
Konzepte von Klassen
Abgeschlossenheit, Kapselung
Zugriffsrechte public, protected, private
typisch: Funktionen public oder protected, Variablen
protected oder private
Vererbung, Polymorphie
Klasse (statisch) und Objekt (dynamisch)
Aufteilung in Deklaration und Definition
Deklaration im Header (.h oder .hpp)
Definition im Programmcode (.cc oder .cpp)
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Klassen
Konstruktoren
werden beim Erstellen eines Objektes aufgerufen
initialisieren alle Attribute des Objektes
⇒ Spezielle Konstruktor-Syntax
legen oft dynamischen Speicher an
haben den selben Namen wie die Klasse
haben keinen Ruckgabetyp
(auch nicht void)
¨
¨
konnen
verschiedene Parameter besitzen
¨
haufig:
Standard-Konstruktoren, Copy-Konstruktoren
Destruktoren
¨
werden beim Zerstoren
eines Objektes aufgerufen
sollten dynamischen Speicher wieder freigeben
haben den Namen ∼Klassenname()
haben keine Parameter und keinen Ruckgabetyp
¨
¨
konnen
auch weggelassen werden (Default-Destruktor)
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Klassen
Konstruktoren
werden beim Erstellen eines Objektes aufgerufen
initialisieren alle Attribute des Objektes
⇒ Spezielle Konstruktor-Syntax
legen oft dynamischen Speicher an
haben den selben Namen wie die Klasse
haben keinen Ruckgabetyp
(auch nicht void)
¨
¨
konnen
verschiedene Parameter besitzen
¨
haufig:
Standard-Konstruktoren, Copy-Konstruktoren
Destruktoren
¨
werden beim Zerstoren
eines Objektes aufgerufen
sollten dynamischen Speicher wieder freigeben
haben den Namen ∼Klassenname()
haben keine Parameter und keinen Ruckgabetyp
¨
¨
konnen
auch weggelassen werden (Default-Destruktor)
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Klassen
Inhalt von Matrix.h: Deklaration der Klasse Matrix (Auszug)
class Matrix{
public:
Matrix(unsigned xSizeA=0, unsigned ySizeA=0);
∼Matrix();
unsigned xSize() const;
unsigned ySize() const;
const double item(unsigned xA,
unsigned yA) const;
void item(unsigned xA, unsigned yA,
double valueA);
void invert(double epsilonA=1e-12);
protected:
unsigned rowsE, colsE;
double* dataE;
}; ← Semikolon nicht vergessen!
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Klassen
Inhalt von Matrix.h: Definition der Elemente von Matrix
Matrix::Matrix(unsigned xSizeA, unsigned ySizeA)
: xSizeE(xSizeA), ySizeE(ySizeA){
dataE = new double[xSizeE * ySizeE];
}
Matrix::∼Matrix(){
delete[] dataE;
}
inline const double Matrix::item(
unsigned xA, unsigned yA) const{
assert(xA < xSizeE && yA < ySizeE);
return dataE[xA * ySizeE + yA];
}
..
.
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Standard Template Library im Namespace std
Zeichenketten string
Containerklassen (Templates)
¨
Arrays mit variabler Lange
vector<T>
Mengen mit eindeutigen Werten set<Key>
assoziative Arrays map<Key, T>
list<T>, Iteratoren, Funktionen (sort,. . .), . . .
Ein/Ausgabe
¨
Dateistrome
zum Lesen / Schreiben von ASCII-Dateien
ifstream, ofstream
Basisklassen istream, ostream
formatierte Eingabe per istream::operator >>
formatierte Ausgabe per ostream::operator <<
Standardein- und -ausgabe cin, cout, cerr
Spezielle Zeichen ’\n’, ’\t’, ’\r’, flush, endl
Beispiel:
cout << "2 * 2 =\t" << 2*2 << ’.’ << endl;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Standard Template Library im Namespace std
Zeichenketten string
Containerklassen (Templates)
¨
Arrays mit variabler Lange
vector<T>
Mengen mit eindeutigen Werten set<Key>
assoziative Arrays map<Key, T>
list<T>, Iteratoren, Funktionen (sort,. . .), . . .
Ein/Ausgabe
¨
Dateistrome
zum Lesen / Schreiben von ASCII-Dateien
ifstream, ofstream
Basisklassen istream, ostream
formatierte Eingabe per istream::operator >>
formatierte Ausgabe per ostream::operator <<
Standardein- und -ausgabe cin, cout, cerr
Spezielle Zeichen ’\n’, ’\t’, ’\r’, flush, endl
Beispiel:
cout << "2 * 2 =\t" << 2*2 << ’.’ << endl;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Standard Template Library im Namespace std
Zeichenketten string
Containerklassen (Templates)
¨
Arrays mit variabler Lange
vector<T>
Mengen mit eindeutigen Werten set<Key>
assoziative Arrays map<Key, T>
list<T>, Iteratoren, Funktionen (sort,. . .), . . .
Ein/Ausgabe
¨
Dateistrome
zum Lesen / Schreiben von ASCII-Dateien
ifstream, ofstream
Basisklassen istream, ostream
formatierte Eingabe per istream::operator >>
formatierte Ausgabe per ostream::operator <<
Standardein- und -ausgabe cin, cout, cerr
Spezielle Zeichen ’\n’, ’\t’, ’\r’, flush, endl
Beispiel:
cout << "2 * 2 =\t" << 2*2 << ’.’ << endl;
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Standard Template Library
Inhalt von Matrix.h (Fortsetzung):
using namespace std;
ostream& operator <<
(ostream& streamA, const Matrix& mA)
{
for (unsigned xL = 0; xL < mA.xSize(); ++xL){
for (unsigned yL = 0; yL < mA.ySize(); ++yL){
streamA << mA.element(xL, yL) << ’\t’;
}
streamA << ’\n’;
}
return streamA;
}
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Weitere Elemente
Weitere Elemente der Matrix-Klasse
void initialize(double valueA);
void fillRandom(double minA, double maxA);
Matrix operator+(const Matrix& mA) const;
Matrix operator*(const Matrix& mA) const;
Weitere Funktionen:
Initialisierung des Zufallszahlengenerators
void initRNG();
gleichverteilte Zufallszahl zwischen min und max
double randomFromInterval(double minA, double maxA);
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Weitere Elemente
Weitere Elemente der Matrix-Klasse
void initialize(double valueA);
void fillRandom(double minA, double maxA);
Matrix operator+(const Matrix& mA) const;
Matrix operator*(const Matrix& mA) const;
Weitere Funktionen:
Initialisierung des Zufallszahlengenerators
void initRNG();
gleichverteilte Zufallszahl zwischen min und max
double randomFromInterval(double minA, double maxA);
Allgemeines
Einfuhrung
in C++
¨
Outline
1
Allgemeines
2
Einfuhrung
in C++
¨
Anforderungen an Quelltexte
Datentypen
¨
Blocke
Klassen
Standard Template Library STL
3
Mathematik
Lineare Algebra
Differentialrechnung
Wahrscheinlichkeitsrechnung
Mathematik
Allgemeines
Einfuhrung
in C++
¨
Outline
1
Allgemeines
2
Einfuhrung
in C++
¨
Anforderungen an Quelltexte
Datentypen
¨
Blocke
Klassen
Standard Template Library STL
3
Mathematik
Lineare Algebra
Differentialrechnung
Wahrscheinlichkeitsrechnung
Mathematik
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Summen- und Produktzeichen
Summe oder Produkt mehrerer Terme in Kurzschreibweise
N
ai = a1 + a2 + a3 ... + aN
i=1
N
c · ai + b = c · (a1 + a2 + a3 ... + aN ) + N · b
→
i=1
N
ai = a1 · a2 · a3 ... · aN
i=1
N
→
i=1
c · ai = c N · a1 · a2 · a3 ... · aN
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Summen- und Produktzeichen
Summe oder Produkt mehrerer Terme in Kurzschreibweise
N
ai = a1 + a2 + a3 ... + aN
i=1
N
c · ai + b = c · (a1 + a2 + a3 ... + aN ) + N · b
→
i=1
N
ai = a1 · a2 · a3 ... · aN
i=1
N
→
i=1
c · ai = c N · a1 · a2 · a3 ... · aN
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Summen- und Produktzeichen
Summe oder Produkt mehrerer Terme in Kurzschreibweise
N
ai = a1 + a2 + a3 ... + aN
i=1
N
c · ai + b = c · (a1 + a2 + a3 ... + aN ) + N · b
→
i=1
N
ai = a1 · a2 · a3 ... · aN
i=1
N
→
i=1
c · ai = c N · a1 · a2 · a3 ... · aN
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Summen- und Produktzeichen
Summe oder Produkt mehrerer Terme in Kurzschreibweise
N
ai = a1 + a2 + a3 ... + aN
i=1
N
c · ai + b = c · (a1 + a2 + a3 ... + aN ) + N · b
→
i=1
N
ai = a1 · a2 · a3 ... · aN
i=1
N
→
i=1
c · ai = c N · a1 · a2 · a3 ... · aN
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Summen- und Produktzeichen
Summe oder Produkt mehrerer Terme in Kurzschreibweise
N
ai = a1 + a2 + a3 ... + aN
i=1
N
c · ai + b = c · (a1 + a2 + a3 ... + aN ) + N · b
→
i=1
N
ai = a1 · a2 · a3 ... · aN
i=1
N
→
i=1
c · ai = c N · a1 · a2 · a3 ... · aN
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Matrix-Multiplikation
Vektor: 1-dimensionale Anordnung von Zahlen
a1
a2
Matrix: 2-dimensionale Anordnung von Zahlen
b11 b12
b21 b22
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Matrix-Multiplikation
Vektor: 1-dimensionale Anordnung von Zahlen
a1
a2
Matrix: 2-dimensionale Anordnung von Zahlen
b11 b12
b21 b22
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Matrix-Multiplikation
Vektor: 1-dimensionale Anordnung von Zahlen
a1
a2
Matrix: 2-dimensionale Anordnung von Zahlen
b11 b12
b21 b22
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Matrix-Multiplikation
Vektor: 1-dimensionale Anordnung von Zahlen
a1
a2
Matrix: 2-dimensionale Anordnung von Zahlen
b11 b12
b21 b22
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Matrix-Multiplikation
Multiplikation von A mit B: C = A · B
(A)i,j = aij , (B)j,k = bjk , (C)i,k = cik
∀
1 ≤i ≤ I
:
1 ≤k ≤ K
J
Multiplikationsschema:
a11 a12 . . . a1J
a21 a22 . . . a2J
..
.
aij · bjk
cik =
b11 b12 . . .
b21 b22 . . .
..
..
.
. ...
bJ1 bJ2 . . .
c11 c12 . . .
c21 c22 . . .
..
.
j=1
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Matrix-Multiplikation
Multiplikation von A mit B: C = A · B
(A)i,j = aij , (B)j,k = bjk , (C)i,k = cik
∀
1 ≤i ≤ I
:
1 ≤k ≤ K
J
Multiplikationsschema:
a11 a12 . . . a1J
a21 a22 . . . a2J
..
.
aij · bjk
cik =
b11 b12 . . .
b21 b22 . . .
..
..
.
. ...
bJ1 bJ2 . . .
c11 c12 . . .
c21 c22 . . .
..
.
j=1
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Lineare Gleichungssysteme
LGS mit N Zeilen und M Spalten:
ausgeschrieben:
a11 x1 + a12 x2
a21 x1 + a22 x2
..
..
.
+
.
aN1 x1 + aN2 x2
+ ...
+ ...
+
+
a1M xM
a2M xM
..
.
+ ...
+ ...
+
+ aNM xM
Spezialfall der Matrix-Multiplikation
Matrix-Vektor-Form: A · x = b mit
(A)n,m = anm , (b)n = bn , (x)m = xm
1 ≤ m ≤ M, 1 ≤ n ≤ N
=
=
b1
b2
..
.
=
= bN
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Lineare Gleichungssysteme
LGS mit N Zeilen und M Spalten:
ausgeschrieben:
a11 x1 + a12 x2
a21 x1 + a22 x2
..
..
.
+
.
aN1 x1 + aN2 x2
+ ...
+ ...
+
+
a1M xM
a2M xM
..
.
+ ...
+ ...
+
+ aNM xM
Spezialfall der Matrix-Multiplikation
Matrix-Vektor-Form: A · x = b mit
(A)n,m = anm , (b)n = bn , (x)m = xm
1 ≤ m ≤ M, 1 ≤ n ≤ N
=
=
b1
b2
..
.
=
= bN
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Lineare Gleichungssysteme
¨
Losung
von LGS A · x = b: Inverse von A



-1
A ·A=I =

1
0
..
.
0
1
..
.
0
0
...
...
...
...
0
0
..
.





1
⇒ A-1 · A · x = I · x = x = A-1 · b
Voraussetzung:
A ist quadratisch: M = N
¨ A =0
A ist nicht singular:
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Lineare Gleichungssysteme
¨
Losung
von LGS A · x = b: Inverse von A



-1
A ·A=I =

1
0
..
.
0
1
..
.
0
0
...
...
...
...
0
0
..
.





1
⇒ A-1 · A · x = I · x = x = A-1 · b
Voraussetzung:
A ist quadratisch: M = N
¨ A =0
A ist nicht singular:
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Lineare Gleichungssysteme
¨
Losung
von LGS A · x = b: Inverse von A



-1
A ·A=I =

1
0
..
.
0
1
..
.
0
0
...
...
...
...
0
0
..
.





1
⇒ A-1 · A · x = I · x = x = A-1 · b
Voraussetzung:
A ist quadratisch: M = N
¨ A =0
A ist nicht singular:
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Lineare Gleichungssysteme
¨
Nicht moglich
wenn LGS uberoder unterbestimmt
¨
Abhilfe: Pseudo-Inverse (Moore-Penrose-Inverse) A+
¨
Berechnung durch Singularwert-Zerlegung
(SVD)
¨ und nichtquadratische Matrizen
auch singulare
numerisch stabil
in Matrix::invert(double epsilon) implementiert
¨
Unterbestimmtes System: Losung
x mit kleinster Norm wird
berechnet
¨
¨
Uberbestimmtes
System: Losung
mit kleinstem Fehler
A · x − b wird berechnet
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Lineare Gleichungssysteme
¨
Nicht moglich
wenn LGS uberoder unterbestimmt
¨
Abhilfe: Pseudo-Inverse (Moore-Penrose-Inverse) A+
¨
Berechnung durch Singularwert-Zerlegung
(SVD)
¨ und nichtquadratische Matrizen
auch singulare
numerisch stabil
in Matrix::invert(double epsilon) implementiert
¨
Unterbestimmtes System: Losung
x mit kleinster Norm wird
berechnet
¨
¨
Uberbestimmtes
System: Losung
mit kleinstem Fehler
A · x − b wird berechnet
Allgemeines
Einfuhrung
in C++
¨
Outline
1
Allgemeines
2
Einfuhrung
in C++
¨
Anforderungen an Quelltexte
Datentypen
¨
Blocke
Klassen
Standard Template Library STL
3
Mathematik
Lineare Algebra
Differentialrechnung
Wahrscheinlichkeitsrechnung
Mathematik
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Eindimensionale Differentialrechnung
gegeben:
y = f (x)
mit
x, y ∈ R
Anstieg der Funktion an der Stelle x
f (x + δx) − f (x)
dy
d
=
=
f (x) = f (x)
δx→0
δx
dx
dx
lim
Extrempunkte (Minima/Maxima):
⇒ Notwendige Bedingung: f (x) = 0
⇒ Hinreichende Bedingung: f (x) = 0 ∧ f (x) = 0
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Eindimensionale Differentialrechnung
gegeben:
y = f (x)
mit
x, y ∈ R
Anstieg der Funktion an der Stelle x
f (x + δx) − f (x)
dy
d
=
=
f (x) = f (x)
δx→0
δx
dx
dx
lim
Extrempunkte (Minima/Maxima):
⇒ Notwendige Bedingung: f (x) = 0
⇒ Hinreichende Bedingung: f (x) = 0 ∧ f (x) = 0
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Eindimensionale Differentialrechnung
gegeben:
y = f (x)
mit
x, y ∈ R
Anstieg der Funktion an der Stelle x
f (x + δx) − f (x)
dy
d
=
=
f (x) = f (x)
δx→0
δx
dx
dx
lim
Extrempunkte (Minima/Maxima):
⇒ Notwendige Bedingung: f (x) = 0
⇒ Hinreichende Bedingung: f (x) = 0 ∧ f (x) = 0
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Ableitungen verschiedener Funktionen
a
= 0
x
= 1
n
x
√
x
= n · x n−1
1
√
=
2 x
ex
= ex
1
=
x
= cos(x)
ln(x)
sin(x)
cos(x)
= − sin(x)
..
.
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Einfache Ableitungsregeln:
konstanter Faktor c
c · f (x) = c · f (x)
c = const
Summenregel
f (x) ± g(x) = f (x) ± g (x)
Produktregel
f (x) · g(x) = f (x) · g(x) + f (x) · g (x)
Kettenregel
f g(x)
= f g(x) · g (x) =
df (x) dg(x)
·
dg(x)
dx
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Einfache Ableitungsregeln:
konstanter Faktor c
c · f (x) = c · f (x)
c = const
Summenregel
f (x) ± g(x) = f (x) ± g (x)
Produktregel
f (x) · g(x) = f (x) · g(x) + f (x) · g (x)
Kettenregel
f g(x)
= f g(x) · g (x) =
df (x) dg(x)
·
dg(x)
dx
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Einfache Ableitungsregeln:
konstanter Faktor c
c · f (x) = c · f (x)
c = const
Summenregel
f (x) ± g(x) = f (x) ± g (x)
Produktregel
f (x) · g(x) = f (x) · g(x) + f (x) · g (x)
Kettenregel
f g(x)
= f g(x) · g (x) =
df (x) dg(x)
·
dg(x)
dx
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Einfache Ableitungsregeln:
konstanter Faktor c
c · f (x) = c · f (x)
c = const
Summenregel
f (x) ± g(x) = f (x) ± g (x)
Produktregel
f (x) · g(x) = f (x) · g(x) + f (x) · g (x)
Kettenregel
f g(x)
= f g(x) · g (x) =
df (x) dg(x)
·
dg(x)
dx
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Beispiel fur
¨ die Kettenregel:
f (x) =
x2 + x + 1 =
g(x)
¨
Außere
Ableitung:
df (x)
1
1
=
= √
2
dg(x)
2 g(x)
2 x +x +1
Innere Ableitung:
dg(x)
= 2x + 1
dx
Zusammen:
df (x)
df (x) dg(x)
2x + 1
=
·
= √
dx
dg(x)
dx
2 x2 + x + 1
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Beispiel fur
¨ die Kettenregel:
f (x) =
x2 + x + 1 =
g(x)
¨
Außere
Ableitung:
df (x)
1
1
=
= √
2
dg(x)
2 g(x)
2 x +x +1
Innere Ableitung:
dg(x)
= 2x + 1
dx
Zusammen:
df (x)
df (x) dg(x)
2x + 1
=
·
= √
dx
dg(x)
dx
2 x2 + x + 1
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Beispiel fur
¨ die Kettenregel:
f (x) =
x2 + x + 1 =
g(x)
¨
Außere
Ableitung:
df (x)
1
1
=
= √
2
dg(x)
2 g(x)
2 x +x +1
Innere Ableitung:
dg(x)
= 2x + 1
dx
Zusammen:
df (x)
df (x) dg(x)
2x + 1
=
·
= √
dx
dg(x)
dx
2 x2 + x + 1
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Beispiel fur
¨ die Kettenregel:
f (x) =
x2 + x + 1 =
g(x)
¨
Außere
Ableitung:
df (x)
1
1
=
= √
2
dg(x)
2 g(x)
2 x +x +1
Innere Ableitung:
dg(x)
= 2x + 1
dx
Zusammen:
df (x)
df (x) dg(x)
2x + 1
=
·
= √
dx
dg(x)
dx
2 x2 + x + 1
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Mehrdimensionale Differentialrechnung:
gegeben: y = f (x) mit
T
x = x1 , . . . , xM ∈ RM , y ∈ R
partielle Ableitungen
∂f (x)
∂xm
⇒ Anstieg von f (x) in Richtung xm
⇒ ∀k ∈ {1, . . . , M}\{m} : xk = const
Gradient ∇f (x) =
∂f (x)
∂f (x)
∂x1 , . . . , ∂xM
T
⇒ Anstieg von f an der Position x in alle Richtungen
notwendige Bedingung fur
¨ lokale Extrempunkte:
∇f (x) = 0
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Mehrdimensionale Differentialrechnung:
gegeben: y = f (x) mit
T
x = x1 , . . . , xM ∈ RM , y ∈ R
partielle Ableitungen
∂f (x)
∂xm
⇒ Anstieg von f (x) in Richtung xm
⇒ ∀k ∈ {1, . . . , M}\{m} : xk = const
Gradient ∇f (x) =
∂f (x)
∂f (x)
∂x1 , . . . , ∂xM
T
⇒ Anstieg von f an der Position x in alle Richtungen
notwendige Bedingung fur
¨ lokale Extrempunkte:
∇f (x) = 0
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Mehrdimensionale Differentialrechnung:
gegeben: y = f (x) mit
T
x = x1 , . . . , xM ∈ RM , y ∈ R
partielle Ableitungen
∂f (x)
∂xm
⇒ Anstieg von f (x) in Richtung xm
⇒ ∀k ∈ {1, . . . , M}\{m} : xk = const
Gradient ∇f (x) =
∂f (x)
∂f (x)
∂x1 , . . . , ∂xM
T
⇒ Anstieg von f an der Position x in alle Richtungen
notwendige Bedingung fur
¨ lokale Extrempunkte:
∇f (x) = 0
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Differentialrechnung
Mehrdimensionale Differentialrechnung:
gegeben: y = f (x) mit
T
x = x1 , . . . , xM ∈ RM , y ∈ R
partielle Ableitungen
∂f (x)
∂xm
⇒ Anstieg von f (x) in Richtung xm
⇒ ∀k ∈ {1, . . . , M}\{m} : xk = const
Gradient ∇f (x) =
∂f (x)
∂f (x)
∂x1 , . . . , ∂xM
T
⇒ Anstieg von f an der Position x in alle Richtungen
notwendige Bedingung fur
¨ lokale Extrempunkte:
∇f (x) = 0
Allgemeines
Einfuhrung
in C++
¨
Outline
1
Allgemeines
2
Einfuhrung
in C++
¨
Anforderungen an Quelltexte
Datentypen
¨
Blocke
Klassen
Standard Template Library STL
3
Mathematik
Lineare Algebra
Differentialrechnung
Wahrscheinlichkeitsrechnung
Mathematik
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsrechnung
Grundlagen der Wahrscheinlichkeitsrechnung:
Zufallsvariable X
Weist einem Ergebnis eines Zufallsexperiments einen Wert
x ∈ Ω(Ergebnisraum) zu
Beispiel 1: Wurfeln
(diskrete ZV)
¨
X1 = Anzahl Augen auf dem Wurfel:
Ω1 = {1, 2, 3, 4, 5, 6}
¨
X2 = Summe Augen bei 2 Wurfeln:
Ω2 = {2, . . . , 12}
¨
X3 = Anzahl Wurfe,
bis erste 6: Ω3 = {1, 2, 3, . . .} = N
¨
Beispiel 2: Physikalische Messungen (stetige ZV)
X4 = Masse des Elektrons:
Ω4 = [9.10937891 · 10−31 kg, 9.10938691 · 10−31 kg]
X5 = Lebensdauer eines Elementarteilchens: Ω5 = [0, ∞)
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsrechnung
Grundlagen der Wahrscheinlichkeitsrechnung:
Zufallsvariable X
Weist einem Ergebnis eines Zufallsexperiments einen Wert
x ∈ Ω(Ergebnisraum) zu
Beispiel 1: Wurfeln
(diskrete ZV)
¨
X1 = Anzahl Augen auf dem Wurfel:
Ω1 = {1, 2, 3, 4, 5, 6}
¨
X2 = Summe Augen bei 2 Wurfeln:
Ω2 = {2, . . . , 12}
¨
X3 = Anzahl Wurfe,
bis erste 6: Ω3 = {1, 2, 3, . . .} = N
¨
Beispiel 2: Physikalische Messungen (stetige ZV)
X4 = Masse des Elektrons:
Ω4 = [9.10937891 · 10−31 kg, 9.10938691 · 10−31 kg]
X5 = Lebensdauer eines Elementarteilchens: Ω5 = [0, ∞)
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsrechnung
Grundlagen der Wahrscheinlichkeitsrechnung:
Zufallsvariable X
Weist einem Ergebnis eines Zufallsexperiments einen Wert
x ∈ Ω(Ergebnisraum) zu
Beispiel 1: Wurfeln
(diskrete ZV)
¨
X1 = Anzahl Augen auf dem Wurfel:
Ω1 = {1, 2, 3, 4, 5, 6}
¨
X2 = Summe Augen bei 2 Wurfeln:
Ω2 = {2, . . . , 12}
¨
X3 = Anzahl Wurfe,
bis erste 6: Ω3 = {1, 2, 3, . . .} = N
¨
Beispiel 2: Physikalische Messungen (stetige ZV)
X4 = Masse des Elektrons:
Ω4 = [9.10937891 · 10−31 kg, 9.10938691 · 10−31 kg]
X5 = Lebensdauer eines Elementarteilchens: Ω5 = [0, ∞)
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsrechnung
Wahrscheinlichkeitsfunktion fur
¨ diskrete Zufallsvariablen
weist Ergebnis xm die Wahrscheinlichkeit P(X = xm ) zu
Einzelner Wurfel:
¨
P(X1 = 1) =
1
6
P(X1 = 3) =
1
6
Summer zweier Wurfel:
¨
P(X2 = 2) =
1
36
P(X2 = 7) =
1
6
Anzahl Versuche bis “6”:
P(X3 = 1) =
1
6
P(X3 = 2) =
5
36
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsrechnung
Wahrscheinlichkeitsfunktion fur
¨ diskrete Zufallsvariablen
weist Ergebnis xm die Wahrscheinlichkeit P(X = xm ) zu
Einzelner Wurfel:
¨
P(X1 = 1) =
1
6
P(X1 = 3) =
1
6
Summer zweier Wurfel:
¨
P(X2 = 2) =
1
36
P(X2 = 7) =
1
6
Anzahl Versuche bis “6”:
P(X3 = 1) =
1
6
P(X3 = 2) =
5
36
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsrechnung
Wahrscheinlichkeitsfunktion fur
¨ diskrete Zufallsvariablen
weist Ergebnis xm die Wahrscheinlichkeit P(X = xm ) zu
Einzelner Wurfel:
¨
P(X1 = 1) =
1
6
P(X1 = 3) =
1
6
Summer zweier Wurfel:
¨
P(X2 = 2) =
1
36
P(X2 = 7) =
1
6
Anzahl Versuche bis “6”:
P(X3 = 1) =
1
6
P(X3 = 2) =
5
36
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsrechnung
Wahrscheinlichkeitsdichte fur
¨ stetige Zufallsvariablen
weist Wert x Wahrscheinlichkeit P(a ≤ x ≤ b) zu, im
Intervall [a, b] zu liegen
Masse des Elektrons:
9.10938291 · 10−31 kg ± 0.00000040 · 10−31 kg
P(9.10938251x10−31 kg ≤ X4 ≤ 9.10938331 · 10−31 kg) = 0.6827
P(9.10938171x10−31 kg ≤ X4 ≤ 9.10938211 · 10−31 kg) = 0.0214
Lebensdauer eines Elementarteilchens:
P(0 ≤ X5 ≤ Halbwertszeit) = 0.5
Dichtefunktion (oder auch kurz Dichte)
b
p(x) dx = P(a ≤ x ≤ b)
Definition:
a
Anschaulich: p(x) =
lim
(b−a)→0
P(a≤x≤b)
b−a
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsrechnung
Wahrscheinlichkeitsdichte fur
¨ stetige Zufallsvariablen
weist Wert x Wahrscheinlichkeit P(a ≤ x ≤ b) zu, im
Intervall [a, b] zu liegen
Masse des Elektrons:
9.10938291 · 10−31 kg ± 0.00000040 · 10−31 kg
P(9.10938251x10−31 kg ≤ X4 ≤ 9.10938331 · 10−31 kg) = 0.6827
P(9.10938171x10−31 kg ≤ X4 ≤ 9.10938211 · 10−31 kg) = 0.0214
Lebensdauer eines Elementarteilchens:
P(0 ≤ X5 ≤ Halbwertszeit) = 0.5
Dichtefunktion (oder auch kurz Dichte)
b
p(x) dx = P(a ≤ x ≤ b)
Definition:
a
Anschaulich: p(x) =
lim
(b−a)→0
P(a≤x≤b)
b−a
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsverteilungen
Diskrete Wahrscheinlichkeitsverteilungen P(X = x)
Gleichverteilung (Einzelner Wurfel)
¨
P(X = x) =
1
|Ω(X )|
∀x ∈ Ω(X )
Simpson-Verteilung bzw. diskrete Dreiecksverteilung
(Summe zweier Wurfel)
¨
Geometrische Verteilung (Anzahl Versuche bis “6”)
P(X = n) = p · (1 − p)n−1
Binomialverteilung (Ziehen mit Zurucklegen)
¨
Hypergeometrische Verteilung (Ziehen ohne Zurucklegen)
¨
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsverteilungen
Diskrete Wahrscheinlichkeitsverteilungen P(X = x)
Gleichverteilung (Einzelner Wurfel)
¨
P(X = x) =
1
|Ω(X )|
∀x ∈ Ω(X )
Simpson-Verteilung bzw. diskrete Dreiecksverteilung
(Summe zweier Wurfel)
¨
Geometrische Verteilung (Anzahl Versuche bis “6”)
P(X = n) = p · (1 − p)n−1
Binomialverteilung (Ziehen mit Zurucklegen)
¨
Hypergeometrische Verteilung (Ziehen ohne Zurucklegen)
¨
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsverteilungen
Diskrete Wahrscheinlichkeitsverteilungen P(X = x)
Gleichverteilung (Einzelner Wurfel)
¨
P(X = x) =
1
|Ω(X )|
∀x ∈ Ω(X )
Simpson-Verteilung bzw. diskrete Dreiecksverteilung
(Summe zweier Wurfel)
¨
Geometrische Verteilung (Anzahl Versuche bis “6”)
P(X = n) = p · (1 − p)n−1
Binomialverteilung (Ziehen mit Zurucklegen)
¨
Hypergeometrische Verteilung (Ziehen ohne Zurucklegen)
¨
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsverteilungen
Diskrete Wahrscheinlichkeitsverteilungen P(X = x)
Gleichverteilung (Einzelner Wurfel)
¨
P(X = x) =
1
|Ω(X )|
∀x ∈ Ω(X )
Simpson-Verteilung bzw. diskrete Dreiecksverteilung
(Summe zweier Wurfel)
¨
Geometrische Verteilung (Anzahl Versuche bis “6”)
P(X = n) = p · (1 − p)n−1
Binomialverteilung (Ziehen mit Zurucklegen)
¨
Hypergeometrische Verteilung (Ziehen ohne Zurucklegen)
¨
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsverteilungen
Diskrete Wahrscheinlichkeitsverteilungen P(X = x)
Gleichverteilung (Einzelner Wurfel)
¨
P(X = x) =
1
|Ω(X )|
∀x ∈ Ω(X )
Simpson-Verteilung bzw. diskrete Dreiecksverteilung
(Summe zweier Wurfel)
¨
Geometrische Verteilung (Anzahl Versuche bis “6”)
P(X = n) = p · (1 − p)n−1
Binomialverteilung (Ziehen mit Zurucklegen)
¨
Hypergeometrische Verteilung (Ziehen ohne Zurucklegen)
¨
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsverteilungen
Stetige Wahrscheinlichkeitsverteilungen p(x)
Normalverteilung (Masse eines Elektrons)
1 x−µ 2
1
pµ,σ (x) = √ e− 2 ( σ )
σ 2π
Exponentialverteilung (Lebensdauer eines
Elementarteilchens)
pλ (x) = λe−λx
x ≥0
Rechteck-Verteilung, Gleichverteilung im Intervall [a, b]
pa,b (x) =
1
b−a ,
0,
wenn a ≤ x ≤ b
sonst
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsverteilungen
Stetige Wahrscheinlichkeitsverteilungen p(x)
Normalverteilung (Masse eines Elektrons)
1 x−µ 2
1
pµ,σ (x) = √ e− 2 ( σ )
σ 2π
Exponentialverteilung (Lebensdauer eines
Elementarteilchens)
pλ (x) = λe−λx
x ≥0
Rechteck-Verteilung, Gleichverteilung im Intervall [a, b]
pa,b (x) =
1
b−a ,
0,
wenn a ≤ x ≤ b
sonst
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Wahrscheinlichkeitsverteilungen
Stetige Wahrscheinlichkeitsverteilungen p(x)
Normalverteilung (Masse eines Elektrons)
1 x−µ 2
1
pµ,σ (x) = √ e− 2 ( σ )
σ 2π
Exponentialverteilung (Lebensdauer eines
Elementarteilchens)
pλ (x) = λe−λx
x ≥0
Rechteck-Verteilung, Gleichverteilung im Intervall [a, b]
pa,b (x) =
1
b−a ,
0,
wenn a ≤ x ≤ b
sonst
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Verteilungsfunktion
Verteilungsfunktion F (x) = P(X ≤ x)
diskret:
stetig:
x
x
F (x) =
P(X = t)
t=−∞
Beispiel Normalverteilung:
Dichtefunktion
F (x) =
p(t) dt
−∞
Verteilungsfunktion
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Verteilungsfunktion
Verteilungsfunktion F (x) = P(X ≤ x)
diskret:
stetig:
x
x
F (x) =
P(X = t)
t=−∞
Beispiel Normalverteilung:
Dichtefunktion
F (x) =
p(t) dt
−∞
Verteilungsfunktion
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Grundlagen der Wahrscheinlichkeitsrechnung
Erwartungswert einer Zufallsvariablen E(X ):
diskret:
E(X ) =
x · P(X = x)
x∈Ω(X )
stetig:
∞
E(X ) =
x · p(x) dx
−∞
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Grundlagen der Wahrscheinlichkeitsrechnung
Varianz Var (X ) = E (X − E(X ))2 = E(X 2 ) − E(X )2
diskret:
(x − E(X ))2 · P(X = x)
Var (X ) =
x∈Ω(X )
x 2 · P(X = x) − E(X )2
=
x∈Ω(X )
stetig:
∞
(x − E(X ))2 · p(x) dx
Var (X ) =
−∞
∞
x 2 · p(x) dx − E(X )2
=
−∞
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Statistik
¨
Schatzen
von Parametern aus Beispielen x1 , . . . , xP
¨
Schatzen
des Erwartungswertes
1
E(X ) ≈ x =
P
P
xp
p=1
¨
Schatzen
der Varianz
Var (X ) ≈
Var (X ) ≈
1
P −1
1
P
P
¨
(xp − x)2 geschatzter
Erwartungswert
p=1
P
(xp − E(X ))2 wahrer Erwartungswert
p=1
Allgemeines
Einfuhrung
in C++
¨
Mathematik
Statistik
¨
Schatzen
von Parametern aus Beispielen x1 , . . . , xP
¨
Schatzen
des Erwartungswertes
1
E(X ) ≈ x =
P
P
xp
p=1
¨
Schatzen
der Varianz
Var (X ) ≈
Var (X ) ≈
1
P −1
1
P
P
¨
(xp − x)2 geschatzter
Erwartungswert
p=1
P
(xp − E(X ))2 wahrer Erwartungswert
p=1
Noch Fragen?
Document
Kategorie
Technik
Seitenansichten
9
Dateigröße
513 KB
Tags
1/--Seiten
melden