Pakiety Matematyczne dla Informatyków Wykład 1
Obliczenia numeryczne i symboliczne Obliczenia numeryczne- prosta algebra n.p. zapasy, plany zaopatrzenia dla wojsk Ekstrapolacja- zjawiska astronomiczne, rozwiązania równań różniczkowych- Kartezjusz, Euler Dopasowyawnie modeli ogólnych do danych numerycznych (Kopernik, Kepler, Airy (1820)) Mechanizm z Antikyteny, ok. 150 r. p.n.e.
Komputery jako maszyny obliczeniowe Cyfrowe -maszyna różnicowa Babbage’a (1833) -Bomba kryptologiczna (1938 Rejewski, 1940 Turing) -Colossus 1943 (5,8MHz) -Eniac (trajektorie balistyczne 1950-prognozy pogody von Neumanna, 100kHz) -Lorenz 1963-odkrycie Chaosu -Komercjalizacja komputerów (UNIVAC I $159000 1951, Układy scalone 1958), Sinclair, Apple, Comodore, …
Komputery jako maszyny obliczeniowe Analogowe -Dumaresq (1902-komputer nawigacyjny) -AKAT-1 1959 Jacek Karpiński Zasada działania: Problem: rozwiązać równanie różniczkowe odpowiadające procesowi fizycznemu (n.p. stanowi równowagi hydrodynamicznej). Równanie jest wyrażone przez pierwiastek wielomianu funkcji i jej pochodnych. Równanie reprezentowane jest przez układ elektroniczny Przykłady elementów i operacji -cewki-różniczkowanie] -kondensatory-całkowanie -tranzystory mnożenie
Obliczenia symboliczne Żmudne, często niewykonalne (n.p. całki, równania różniczkowe) (przykłady) Oszczędzające czas-szeregi… Abstrakcyjne-bez podanych wartości początkowych Ogólne- te same zasady dla różnych obiektów matematycznych. Komputery potrafią: Liczyć Interpretować dane Przeszukiwać bazy danych Nadają się do obliczeń symbolicznych
Wczesne programy obliczeniowe Schoonschip (1963) Reduce (1968 Tony Hearn) Macsyma, Maxima (1968) FORM SMP (Wolfram 1979) Axiom Matlab (1985) Derive (1988) Mathematica (1988) R (2000) Symbol x,y; Local myexpr = (x+y)^3; Id y = x; Print; .end
Struktura Programu ~5.5 GB Jądro Interface Pakiety
Cechy programu Zalety Wady Intuicyjna obsługa Droga licencja Szeroka gama zastosowań Duża objętość Mnogość specjalistycznych pakietów i funkcji Duże pliki wyjściowe (notatniki) Bogata biblioteka wewnętrzna Duże zużycie pamięci Programowalność Język wysokiego poziomu-powolne obliczenia Wsparcie dla nowoczesnych środowisk programistycznych Możliwość licencji sieciowej
Zastosowanie Sprawdzanie obliczeń Obliczenia prototypowe Upraszczanie formuł używanych w innych programach Opracowywanie procedur dla innych programów Analiza danych specjalistycznych Wizualizacja danych Przygotowywanie prezentacji Grafika i Animacje (również 3D)
Mathematica 10-interfejs
Format danych w Mathematice Typy danych: -Komórki wejściowe i wyjściowe -string -wyrażenie -liczba całkowita -stałe niewymierne -ułamki -liczby rzeczywiste -liczby zespolone -grafika -grafika 3D -obiekty dynamiczne (dźwięk, animacja} -tablice … Cała komunikacja Mathematici z użytkownikiem jest oparta na wyrażeniach. Wyrażeniem są nawet notatniki. Pozwala to na edycję notatników nawet bez dostępu do programu. Gwarantuje to łatwą i jednoznaczną komunikację z programem
Prosta algebra Nagłówki Przywołanie funkcji: Wprost:f[x] Przed wyrażeniem f[#]&@ Po wyrażeniu //f[#]& Przełączanie katalogów Import i eksport danych
Podstawienie wartości Set[#1,#2],#1=#2-podstawienie natychmiastowe SetDelayed[#1,#2],#1:=#2 podstawienie przy każdorazowym wywołaniu (dla Funkcji) Clear[#] usuwa wartość z pamięci ClearAttributes[#1,#2] ClearAll[#] With[{#1},#2] –podstawia tymczasowo definicje z listy #1 do wyrażenia #2 #1/.#2, ReplaceAll[#1,#2]-podobnie jak with, ale używamy Rule[#] #1//.#2 ReplaceRepeated[#1,#2]-podstawienia dokonywane w kolejności Assuming[#1,#2]-traktowanie wyrażenia #2 przy założeniach #1 (potrzebna jest dodatkowa komenda)
Otrzymywanie wyników Wyświetla się: Nie wyświetla się Proste wyrażenie bez podstawień Set With Replace, With, Block W pętlach po komendzie Print,… Wyrażenia zakończone średnikiem SetDelayed W pętlach
Liczby zespolone Im r q Re Re[#]-część rzeczywista Im[#]-część urojona Conjugate[#]-sprzężenie. Abs[#]-moduł Arg[#]-faza ReIm[#]-zamiana liczby na dwuelementową listę AbsArg[#]- ---//--- FromPolarCoordinates[#] ToPolarCoordinates[#]
Równania kwadratowe W ciele liczb zespolonych liczba pierwiastków wielomianu odpowiada jego stopniowi Wilelomiany o współczynnikach zespolonych mają pierwiastki parami sprzężone
Tablice Uporząkowane ciągi dowolnych obiektów Długość listy może być dowolnie zmieniana Elementy list mogą być bezpośrednio zmieniane Listy mogą być dodawane Listy list o różnych rozmiarach i o różnych głębokościach Możliwe puste listy Jednoelementowa lista nie jest równoważna swojemu elementowi Role: listy, ciągi danych, wektory, tensory, zbiory
Podstawowe komendy Table[…,{i,imin,imax}] Range[i] Sort[#] NestList Map[f,#] KroneckerProduct-iloczyn zewnętrzny dwóch tablic Outer[#1,…]-podobnie, ale #1 może być dowolną funkcją
Jako listy Part[#,m],#[[m]]-pobierz m-ty element listy # Part[#,-m] #[[-m]]-licz od końca #[[m,n]]-dla tablic wielowymiarowych #[[m;n;l]]-elementy od m-tego do n-tego Take[#,m]-pobierz m pierwszych elementów Take[#,-m]-pobierz m pierwszych od końca elementów Take[#,{m,n}]-pobierz elementy od m-tego do n-tego First, Rest, Most, Last
Drop[#,m]-odrzuca pierwsze m elementów Drop[#,-m]- ---//--- ostatnie m elementów Drop[#,{m}] ---//--- m-ty element Append[#,x]-zwraca listę z dodanym elementem na końcu AppendTo[#,x]-dodaje x do listy # (nie zwraca jej) Prepend PrependTo Select[#,m]-Wybiera z listy elementy, które speniają warunek m Length[#]-podaje długość listy Dimensions[#]-wymiary listy wielowymiarowej (foremnej) Sort-porządkuje listę-liczby, ciągi znaków, zmienne, listy Join łączy listy
Listy jako listy-uzupełnienie Reverse[#]-odwrócenie kolejności RotateLeft[#,m]-przesunięcie wyrazów w lewo o m pozycji, pozostałe są dodawane na początku listy. Permutations[#]-daje listę wszystkich Permutacji danej listy (używać ostrożnie!)