Pakiety Matematyczne dla Informatyków
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 Dopasowywanie modeli ogólnych do danych numerycznych (Kopernik, Kepler, Airy (1820)) Mechanizm z Antikythiry, ok. 150 r. p.n.e.
Komputery jako maszyny obliczeniowe Cyfrowe -maszyna różnicowa Babbage’a (1833) -Bomba kryptologiczna (1938 Rejewski, 1940 Turing) -Colossus 1940 -Eniac (trajektorie balistyczne 1950- prognozy pogody von Neumanna, 5kHz) -Lorenz 1963-odkrycie Chaosu -Komercjalizacja komputerów (UNIVAC I $159000 1951, Układy scalone 1958), Sinclair, Apple, Commodore, …
Komputery jako maszyny obliczeniowe Analogowe -Dumaresq (1902-komputer nawigacyjny) -AKAT-1 1959 Łukaszewicz, Bochenek, 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) 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 Schoonship (1963) Reduce (1968 Tony Hearn) Macsyma, Maxima (1968) FORM SMP (Wolfram 1979) Axiom Derive (1988) Mathematica (1988) 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 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 dydaktycznych Grafika i Animacje (również 3D)
Mathematica 10-interfejs
Format danych w Mathematice Typy danych: -Komórki wejściowe i wyjściowe -Nagłówki -ciągi znaków -wyrażenia -liczby całkowite -stałe niewymierne -ułamki -liczby rzeczywiste -liczby zespolone strumienie -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. Dzięki temu komunikacja z programem jest jednoznaczna i dostępna nawet w trybie tekstowym
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 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 Proste wyrażenie bez podstawień Set With 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 rzeczywisych 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[#] PowerRange[#] 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 spełniają 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!)
Jeszcze o tablicach i mapach Table[i,{j}] Table[f[i],{i,(imin,)imax }] Flatten Partition[…,…] Array-lista kolejnych wartości funkcji Map[f,l(,n)]-mapa funkcji f ma listę l (na poziomie n) MapAt[]-mapowanie konkretnego NestList
Jako zbiory Dane w zbiorach mają niepowtarzalne wartości i są uporządkowane DeleteDuplicates usuwa powtórzone wielkości, Union łączy zbiory Complement podaje elementy pierwszego zbioru, które nie występują w pozostałych Intersection-podaje przekrój zbiorów Subsets wypisuje podzbiory
Przestrzenie wektorowe Zbiory wektorów i liczb W ciele liczb mamy działania addytywne i multiplikatywne (łączne, z elementem neutralnym i odwrotnym*, rozdzielne) Wektory możemy dodawać do siebie i mnożyć przez skalary Istnieje iloczyn skalarny, przekształcający dwa wektory w skalar Iloczyn skalarny wektora z samym sobą daje kwadrat normy. Do ogólniejszych transformacji pomiędzy wektorami służą macierze
Jako wektory Conjugate[w].v= Sum[Conjugate[w[[i]]]v[[i]],{i,1,Min[Length[v],Length[w]] Dwa sposoby mnożenia wektorów i tensorów v.U.w U.w.v Bazy ortogonalne -zbiór prostopadłych wektorów o normie 1 -Norma danego wektora nie zależy od wyboru bazy -bazy powiązane są ze sobą transformacjami Unitarnymi Dot-iloczyn skalarny Norm-Norma wektorowa Normalize-normalizacja wektora Projection Orthogonalize-budowa bazy
Tablice –listy list -Dowolna głębokość -Dowolny wymiar w każdej głębokości -Mogą gromadzić dowolne obiekty -Macierze-szczególna rola w fizyce i matematyce Układy równań liniowych Obroty Mechanika brył Ogólna teoria względności Pole elektryczne i magnetyczne Mechanika kwantowa
Budowa macierzy i tensorów Skalar: Element macierzy: Rozkład Schmidta Rozkład Singularny Macierzy U,V-macierze unitarne przekształcające jedne wektory w inne o tej samej długości D-macierz diagonalna mająca niezerowe elementy tylko d[[i,i]]
Rozkład Schmidta dla tensorów wyższej rangi