Ćwiczenia 1

Transkrypt

Ćwiczenia 1
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
Modelowanie numeryczne w fizyce atmosfery
Ćwiczenia 1
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
Sylwester Arabas
(ćwiczenia do wykładu prof. Lecha Łobockiego)
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
Instytut Geofizyki, Wydział Fizyki Uniwersytetu Warszawskiego
10. marca 2014 r.
o ćwiczeniach
Ćwiczenia 1
wstęp
Prowadzący
o mnie: http://www.igf.fuw.edu.pl/˜ slayoo/
kontakt: [email protected] / pok. 424A, IV piętro IGF
o ćwiczeniach
plan na dziś
Zasady zaliczenia, narzędzia
C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
do napisania: dwa programy i dwa raporty
z „doświadczenia numerycznego”
język: dowolny obiektowy (C++, Python, Fortran. . . )
na ćwiczeniach: przykłady w C++
gnuplot-iostream:
przykład (wykres)
narzędzia
Materiały do ćwiczeń
screen
vim
clang++
http://www.igf.fuw.edu.pl/˜ slayoo/mnfa2014/
plan na dziś
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
literatura
na zajęciach: zaznajomienie się z narzędziami
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
praca domowa: zdobycie dostępu do tych narzędzi
(lub alternatywnych) w domu / na uczelni
C++: polecana literatura
Ćwiczenia 1
Bjarne Stroustrup1
(autor C++, AT&T)
The C++ Programming
Language
Paweł Klimczewski2
(FUW/IFT/KMMF)
Programowanie w języku C++
w środowisku systemu UNIX
Polecane strony:
cplusplus.com
cppreference.com
en.wikibooks.org/
wiki/C++
wstęp
o ćwiczeniach
stackoverflow.com
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
1: strona domowa BS: http://www.research.att.com/˜ bs/
2: wykłady o C++ na stronie domowej PK: http://www.fuw.edu.pl/˜ pablo/programowanie1/wyklad.php
C++: nomenklatura
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
typy/struktury danych:
proste (POD)
złożone (struktury=klasy)
algorytmy:
funkcje
metody klas/struktur
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
parametry czasu kompilacji:
typy (POD/klasy)
wartości stałe
1
2
3
4
5
6
7
8
9
// dyrektywa preprocesora
#include <cstdlib>
// definicja funkcji
int main()
{
// wartość funkcji
return EXIT_SUCCESS;
}
C++: nomenklatura
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
typy/struktury danych:
proste (POD)
złożone (struktury=klasy)
algorytmy:
funkcje
metody klas/struktur
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
parametry czasu kompilacji:
typy (POD/klasy)
wartości stałe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// dyrektywa preprocesora
#include <cstdlib>
// definicja klasy=struktury
struct solver
{
// pola
int t=0;
// metody
void advance(int nt) {}
solver() {} // ctor
};
// definicja funkcji
int main()
{
// deklaracja (+wyw. ctora)
solver s;
// wywołanie metody
s.advance(10);
// wartość funkcji
return EXIT_SUCCESS;
}
C++: nomenklatura
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
typy/struktury danych:
proste (POD)
złożone (struktury=klasy)
algorytmy:
funkcje
metody klas/struktur
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
parametry czasu kompilacji:
typy (POD/klasy)
wartości stałe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <cstdlib>
#include <array>
template <
typename real_t,// p. czasu
int n_dims
// kompilacj
> struct solver
{
int t=0;
std::array<int,n_dims> n;
void advance(int nt) {}
solver( // ctor
int nx,
// p. czasu
int ny
// wykonania
) : n({nx,ny}) {}
};
int main()
{
solver<double, 2> s(64,64);
s.advance(10);
return EXIT_SUCCESS;
}
Stroustrup: C++ Programming Styles and Libraries1
Ćwiczenia 1
wstęp
Without a good library, most interesting tasks are
hard to do in C++; but given a good library, almost
any task can be made easy.
o ćwiczeniach
plan na dziś
C++
literatura
nomenklatura
biblioteki
Here ”easy” means that the programming language
isn’t a source of significant complexity so that a
programmer can concentrate on the fundamental
problems of the task in hand.
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
1
http://www2.research.att.com/ bs/style and libraries.pdf
Blitz++: wydajne (optymalizacja przez kompilator)
i czytelne (dla człowieka) operacje macierzowe
źródła: http://sf.net/p/blitz/
Ćwiczenia 1
podręcznik: http://blitz.sf.net/resources/blitz-0.9.pdf
wstęp
pakiety:
o ćwiczeniach
Debian/Ubuntu: libblitz0-dev
Fedora: blitz-devel
Gentoo: dev-libs/blitz
Arch: blitz
MacPorts: blitz
Homebrew: blitz
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
alternatywy w C++: NT2 , Armadillo, . . .
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
alternatywy w innych językach:
tablice w Fortranie (nie obiektowe, liczne ograniczeniaa )
w Pythonie: NumPyPy, Numba, numexpr
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
a
por. np. http://arxiv.org/abs/1301.1334
Blitz++: przykład
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <blitz/array.h>
int main()
{
// instancja klasy Array
blitz::Array<double, 2> a(64,64);
// odwoływanie się do indeksów
{
using namespace blitz::tensor;
a = i*i + j*j;
}
// wycinki tablic
{
blitz::Range i(10,20), j(10,20);
a(i,j) += 10;
}
// wyrażenie tablicowe (nic jeszcze nie policzone!)
auto xpr = a*a;
}
gnuplot-iostream
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
źródła:
http://gitorious.org/gnuplot-iostream
podręcznik:
http://gitorious.org/gnuplot-iostream/pages/Home
pakiety:
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
Debian/Ubuntu: libgnuplot-iostream-dev
... ?
gnuplot-iostream: przykład (kod)
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <blitz/array.h>
#define GNUPLOT_ENABLE_BLITZ // nie potrzbne w najnowszej wersij!
#include <gnuplot-iostream/gnuplot-iostream.h>
#include <boost/math/constants/constants.hpp>
int main()
{
int nx = 32, ny=32;
blitz::Array<double, 2> a(nx,ny);
{
using namespace blitz::tensor;
using boost::math::constants::pi;
double sgma = 8;
a = pow(2 * pi<double>() * pow(sgma, 2), -1) * exp(-(
pow(i - nx/2, 2) +
pow(j - ny/2, 2)
) / 2 / pow(sgma, 2));
}
{
Gnuplot gp;
gp << "set term svg dynamic\n"
<< "set output 'out.svg'\n"
<< "splot"
<< " '-' binary " << gp.binfmt(a) << " with image failsafe notitle,"
<< " '-' binary " << gp.binfmt(a) << " with lines notitle\n";
gp.sendBinary(a);
gp.sendBinary(a);
}
}
gnuplot-iostream: przykład (wykres)
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
0.0025
C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
0.002
0.0025
0.002
0.0015
0.001
0.0005
0
0.0015
0.001
0.0005
0
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
0
5
10
15
20
25
30
35 0
5
10
15
20
25
30
35
screen
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
screen – multiplekser terminala
$ man screen
$ screen
ctrl-a-c nowe okno
ctrl-a-spacja cykliczne przełączanie pomiędzy oknami
ctrl-a-d odłączenie sesji
$ screen -d odłączenie sesji spoza sesji (np. zdalnej)
$ screen -r ponowne przyłączenie do sesji
vim
Ćwiczenia 1
wstęp
o ćwiczeniach
vim ($ man vim) – edytor plików tekstowych
plan na dziś
C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
$ vimtutor
$ vim
I tryb edycji
dd usuniêcie linii
/ciąg wyszukiwanie ”ciąg”
X shift-G przejście do linii X
:w plik – zapis do ”plik”
:q wyjście
clang++
Ćwiczenia 1
wstęp
o ćwiczeniach
plan na dziś
C++
clang++ – kompilator C++
literatura
nomenklatura
biblioteki
cytat
Blitz++
Blitz++: przykład
gnuplot-iostream
gnuplot-iostream:
przykład (kod)
gnuplot-iostream:
przykład (wykres)
narzędzia
screen
vim
clang++
$
$
$
$
clang++
clang++
clang++
clang++
−−help
plik.cpp
-std=c++11 plik.cpp
-lboost iostreams -lboost system -lblitz plik.cpp

Podobne dokumenty