Ć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