Mathematica (1) Organizacja Mathematica Notebooks Dokument Mathematica zorganizowany jest w tzw. komórki. KaŜda komórka zawiera materiał określonego rodzaju: tekst, grafikę, dane wejściowe, dane wyjściowe itp. Zakres pojedynczej komórki wskazywany jest przez niebieską linię (Bracket) po prawej stronie dokumentu. Ciągi komórek moŝna łączyć w większe grupy (np. sekcje, rozdziały itp). To jest komórka tekstowa Komórka niŝej to Input Cell In[1]:= 3 +3 Komórka niŝej to Output Cell Out[13]= 6 Umieszczenie kursora gdziekolwiek między komórkami i wprowadzenie znaku z klawiatury automatycznie inicjuje komórkę typu Input Style dokumentów Mathematica pozwala tworzyć dokumenty o bardzo róŝnym wyglądzie (StyleSheets). KaŜdy styl ma zdefiniowany układ formatowania poszczególnych typów komórek Tak wyglądają komórki typu Input i Output w aktualnie uŝywanym StyleSheet: In[1]:= Out[1]= Sin@2 Piê3D è!!! 3 2
2 Mathematica-1.nb à To jest tytuł mniejszej jednostki, zwanej Subsection To jest komórka tekstowa w nowej "subsection". Wiersze takiej komórki albo są łamane automatycznie, albo przez uŝytkownika Nowy wiersz wprowadzony przez uŝytkownika (większy niŝ zwykle odstęp od poprzedniego wiersza). Grupę komórek moŝna zamykać i otwierać klikając w ogranicznik grupy (niebieska linia z prawej strony grupy komórek). MoŜna teŝ to uczynić z klawiatury, umieszczając kursor w komórce inicjującej grupę i naciskając sekwencję Ctrl + ' Podstawowe operacje Przeliczenie komórki następuje po wprowadzeniu do niej wyraŝenia (w szczególności polecenia) i naciśnięciu Shift+Enter (lub Enter na klawiaturze numerycznej). Na samym początku ilustracja efektu nieumyślnego przeliczenia komórki typu Input, w której chcieliśmy umieścić zwykły tekst. In[2]:= MoŜemy niechący zacząć pisać tekst w komórce przeznaczonej na dane wejściowe. Przeliczenie takiej komórki za pomocą klawiszy Shift + Enter da czasem ciekawe rezultaty popatrzmy sami BasiaiJolaposzłynalody ITomekznimii MaciekzPawłemiswoim psem czyli3dziewczynyi3chłopcyipiesrazem6osóbipies Out[2]= 54chłopcyczylidziewczynyi 3 osóbpies 2 razem + ciekawe czasem da Enter rezultaty popatrzmy sami Basiai 3 JolalodyMacieknanimiPawłemposzłypsemswoimTomekz 2 + dane klawiszy komórce komórki MoŜemy na niechący pisać pomocą przeznaczonej Shift takiej tekst w za zacząć wejściowe.przeliczenie Efekty tego typu jest bardzo łatwo objaśnić. KaŜdy ciąg znaków nie zaczynający się od cyfry Mathematica traktuje jak symbol (w klasycznym ujęciu - nazwę zmiennej), kaŝdą spację jak znak mnoŝenia, myślniki jak minusy, kropki jak znaki iloczynu skalarnego lub iloczynu macierzy. Operatory arytmetyczne: + plus - minus * iloczyn ^ potęga / iloraz
Mathematica-1.nb 3 Przykłady najprostszych obliczeń: In[5]:= H2 +2L^3 W jednej komórce moŝe znajdować się kilka wyraŝeń. Odzielamy je znakiem nowej linii In[6]:= CosA 2 3 πe Out[4]= 1 2 Out[5]= 3 Out[6]= Log@4, 64D ArcTan@1D π 4 Uwaga. Iloczyn liczby i symbolu moŝe być napisany w klasyczny matematyczny sposób, bez spacji. Iloczyn dwóch symboli moŝe być napisany ze spacją w roli znaku mnoŝenia. In[16]:= Out[16]= Out[17]= 2 Sin@4 φd 2 Sin@4 φd Sin@4 φd 2 Sin@4 φd 2 Umieszczenie średnika na końcu wyraŝenia powoduje, Ŝe wynik nie jest wyświetlany. In[9]:= 7 +8 4 5; Out[7]= 15 Jeśli chcemy umieścić kilka wyraŝeń w jednej linijce, musimy oddzielić je średnikami. Wszystkie wyraŝenia będą przeliczone. Wyświetlony będzie wartość ostatniego wyraŝenia, o ile nie następuje po nim średnik In[22]:= uproszczone = 1ëArcTanA è!!!! 3 E; Divisors@1024D Out[22]= 81, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024< In[23]:= Out[23]= uproszczone 3 π Komórkę, zawierającą więcej niŝ 1 linijkę, moŝemy podzielić (menu lub Ctrl+Shift+D). Podobnie, moŝemy połączyć dwie osobne komórki (Ctrl+Shift+M). Terminologia: Divide, Merge In[12]:= Clear@aD In[13]:= a = 1; In[14]:= In[15]:= f@x_d := Exp@ xd Sin@xD g@x_d :=f@ad +f'@ad Hx al In[16]:= Plot@8f@xD, g@xd<, 8x, a 2, a +2<, PlotStyle 8RGBColor@1, 0, 0D, RGBColor@0, 0, 1D<D;
4 Mathematica-1.nb Zaznacz myszą ostatnie 5 komórek i połącz je w jedną. (Aby zaznaczyć komórki, kliknij myszą w niebieski ogranicznik pierwszej komórki i trzymając wciśnięty lewy przycisk myszy przeciągnij zaznaczenie na ograniczniki następnych komórek). Uzyskiwanie informacji i korzystanie z systemu pomocy Aby uzyskać pomoc na temat danego symbolu, naleŝy uŝyć składni postaci?nazwasymbolu lub??nazwasymbolu In[24]:= In[1]:=?Plot Plot@f, 8x, xmin, xmax<d generates a plot of f as a function of x from xmin to xmax. Plot@8f1, f2,... <, 8x, xmin, xmax<d plots several functions fi. More?? Plot Plot@f, 8x, xmin, xmax<d generates a plot of f as a function of x from xmin to xmax. Plot@8f1, f2,... <, 8x, xmin, xmax<d plots several functions fi. More Attributes@PlotD = 8HoldAll, Protected< 1 Options@PlotD = 8AspectRatio GoldenRatio, Axes Automatic, AxesLabel None, AxesOrigin Automatic, AxesStyle Automatic, Background Automatic, ColorOutput Automatic, Compiled True, DefaultColor Automatic, DefaultFont $DefaultFont, DisplayFunction $DisplayFunction, Epilog 8<, FormatType $FormatType, Frame False, FrameLabel None, FrameStyle Automatic, FrameTicks Automatic, GridLines None, ImageSize Automatic, MaxBend 10., PlotDivision 30., PlotLabel None, PlotPoints 25, PlotRange Automatic, PlotRegion Automatic, PlotStyle Automatic, Prolog 8<, RotateLabel True, TextStyle $TextStyle, Ticks Automatic< In[2]:=?Plot* System` Plot Plot3Matrix PlotJoined PlotPoints PlotRegion Plot3D PlotDivision PlotLabel PlotRange PlotStyle
Mathematica-1.nb 5 Obsługiwane typy "proste" (z punktu widzenia klasycznych języków) Z punktu widzenia klasycznych języków programowania moŝna powiedzieć, Ŝe Mathematica obsługuje 4 typy liczbowe, typ łańcuchowy i typ "symboliczny". W tej części ograniczymy się tylko do definicji i wstępnych uwag. Zagadnienia związane z typem rzeczywistym omówimy dokładniej w innym miejscu. Integer Rational Real Complex dowolna liczba całkowita Integer/Integer gdzie licznik i mianownik są względnie pierwsze przybliŝenie rzeczywiste z dowolną zadaną dokładnością (szczegóły później) liczba zespolona postaci number + number I WyraŜenia wymierne, gdzie licznik i mianownik są całkowite, są zawsze skracane: In[25]:= 646864 ê 222222 Out[25]= 323432 111111 Wymuszenie potraktowania liczby całkowitej jak przybliŝonej liczby rzeczywistej - uŝywamy funkcji N lub dodajemy kropkę dziesiętną: In[26]:= Out[26]= 8Sqrt@2D, Sqrt@2.D, N@Sqrt@2DD< 8 è!!! 2, 1.41421, 1.41421< Liczba cyfr znaczących moŝe być dowolnie duŝa (z wyjątkami, które osobno omówimy później). In[28]:= N@Sqrt@2D, 50D Out[28]= 1.4142135623730950488016887242096980785696718753769 In[29]:= bardzomala = Out[29]= 1 100! 1ê 93326215443944152681699238856266700490715968264381621468592963895217599 9932299156089414639761565182862536979208272237582511852109168640000000 00000000000000000 In[30]:= Out[30]= bardzomala êê N 1.07151 10 158 Dokładniejsze wartości: In[31]:= Out[31]= N@bardzomala, 30D 1.07151028812546692318354675952 10 158 Ta sama liczba, ale określona od początku jako rzeczywista:
6 Mathematica-1.nb In[32]:= malarzecz = Out[32]= 1.07151 10 158 1. 100! Tym razem N zachowuje się inaczej. Wyświetlana jest stale wartość z 5 cyframi po przecinku. In[34]:= Out[34]= N@malarzecz, 50D 1.07151 10 158 Do ustalenia liczby wyświetlanych cyfr (łącznie części całkowitej i ułamkowej) przybliŝonej liczby rzeczywistej słuŝy funkcja SetPrecision. In[40]:= Out[40]= SetPrecision@malarzecz, 50D 1.0715102881254669311572666729002391829351153522626 10 158 Liczby całkowite - wybrane funkcje EvenQ[x] OddQ[x] Mod[ n, k ] Quotient[ n, k ] Reszta z dzielenia n przez k Część całkowita ilorazu n/k Divisors[n] GCD[ n 1, n 2,...] LCM Divisors[x] Prime[k] FactorInteger[n] PrimeQ[n] Największy wspólny dzielnik Najmniejsza wspólna wielokrotność Dzielniki liczby x k-ta liczba pierwsza Lista czynników pierwszych liczby n z odpowiednimi potęgami True jeśli n jest pierwsza, False w przeciwnym wypadku
Mathematica-1.nb 7 Liczby zespolone x + I y Re[z] Im[z] Conjugate[z] Abs[z] Arg[z] Mathematica uŝywa zbioru liczb zespolonych przy znajdowaniu pierwiastków. In[3]:= Out[3]= Sqrt@ 4D 2 In[4]:= 1^H1ê3L Out[4]= 1 Pierwiastek stopnia nieparzystego z liczby rzeczywistej jest obliczany jako główny pierwiastek zespolony, nie jako liczba rzeczywista. In[5]:= H 1L 1 3 % êê N Out[5]= Out[6]= H 1L 1ê3 0.5 +0.866025 Inne efekty (wyjaśnione na wykładzie): In[7]:= Out[7]= Out[8]= iii = Sqrt@ID êê N iii 2 0.707107 +0.707107 1.57009 10 16 +1. In[9]:= Out[9]= Chop@%D 1.
8 Mathematica-1.nb Obliczenia dokładne Mathematica wykonuje obliczenia dokładne na liczbach wymiernych i liczbach zespolonych o wymiernych częściach rzeczywistych i urojonych In[10]:= Sqrt@3Dê3 +64ê128 Out[10]= In[11]:= Out[11]= 126 1 2 + è!!! 1 3 9! 4! H9 4L! In[3]:= 123! Out[3]= In[12]:= Out[12]= 121463043670253296757662432418812958554542170884833823153289181618292358 92362167668831156960612640202170735835221294047782591091570411651472186 029519906261646730733907419814952960000000000000000000000000000 i j 1 k 2 +Iy z i { k j1 5 2 3 Iy { z 22 9 31 9 Mathematica automatycznie redukuje wyrazy podobne w sumach algebraicznych, skraca wyraŝenia ułamkowe i oblicza potęgi. In[13]:= 2 x^3 7 + x^2 + 8 + 5 x^3 Out[13]= 1 +x 2 +7x 3 In[14]:= Hx + 1L^3êHx +1L Out[14]= H1 +xl 2 In[15]:= Out[15]= H1 +yl Sin@xD^2êSin@xD H1 + yl Sin@xD Obliczenia przybliŝone Umieszczenie kropki dziesiętnej za liczbą całkowitą powoduje, Ŝe Mathematica uŝywa wartości przybliŝonych typu Real
Mathematica-1.nb 9 In[3]:= Sqrt@2.D Out[3]= 1.41421 Innym sposobem jest uŝycie wbudowanej funkcji N In[4]:= N@Sqrt@2DD Out[4]= 1.41421 RównowaŜna składnia: In[5]:= Sqrt@2D êê N Out[5]= 1.41421 Obliczenia z dokładnością do zadanej liczby cyfr: In[6]:= N@Sqrt@2D, 20D Out[6]= 1.4142135623730950488 Dualność składni pokazana wyŝej stosuje się do wszystkich funkcji w Mathematica (patrz dalej). Uwaga. Mathematica inaczej zachowuje się w sytuacji, gdy podajemy przybliŝenie rzeczywiste liczby wymiernej In[10]:= Sqrt@2.D Out[10]= 1.41421 In[11]:= N@Sqrt@2.D, 30D Out[11]= 1.41421 a inaczej, gdy podajemy wartość dokładną i Ŝądamy wyświetlenia podanej liczby cyfr znaczących: In[8]:= N@Sqrt@2D, 30D Out[8]= 1.41421356237309504880168872421 Nadawanie symbolom wartości czyli "definiowanie zmiennych" i związane z tym konsekwencje x = value x = y = value x =. lub Clear[x] przypisanie wartości zmiennej x przypisanie wartości zmiennym x i y jednocześnie usunięcie wartości przypisanych do x Próba uŝycia w obliczeniach symbolicznych symbolu, któremu wcześniej przypisano wartość jest jednym z najczęstszych błędów uŝytkownika.
10 Mathematica-1.nb Raz uczynione za pomocą przypisań definicje będą przez Mathematica stosowane przy kaŝdorazowym uŝyciu symbolu z nadaną wartością, do momentu ich usunięcia przez całą resztę aktualnej sesji. à Przykłady Funkcja Eliminate eliminuje zmienną z układu równań. śaden symbol uŝyty jako zmienna formalna nie moŝe mieć przypisanej wartości. Przykład niŝej ilustrueje znajdowanie krzywej przecięcia stoŝka płaszczyznami o róŝnym nachyelniu. In[359]:= Needs@"Graphics`ImplicitPlot`"D In[436]:= f@x_, y_d:= è!!!!!!!!!!!!!!!! x 2 +y 2 ; Print@"Równanie stoŝka: z = ", f@x, ydd; g@x_, y_d:= 6; Print@"Płaszczyzna prostopadła do osi stoŝka: z = ", g@x, ydd; Print@"Krzywa przecięcia stoŝka i płaszczyzny: okrąg."d krzywa = Eliminate@8z f@x, yd, z g@x, yd<, zd ImplicitPlot@krzywa, 8x, 6, 6<, ImageSize 72 3D; g@x_, y_d:= 1 x; Print@ "Płaszczyzna, która nie jest równoległa do osi stoŝka: z = ", g@x, ydd; Print@"Krzywa przecięcia płaszczyzny i stoŝka: parabola."d krzywa = Eliminate@8z f@x, yd, z g@x, yd<, zd ImplicitPlot@krzywa, 8x, 6, 6<, ImageSize 72 3D; g@x_, y_d:= x 1; Print@"Płaszczyzna równoległa do tworzącej stoŝka: z = ", g@x, ydd; Print@"Krzywa przecięcia płaszczyzny i stoŝka: hiperbola."d krzywa = Eliminate@8z f@x, yd, z g@x, yd<, zd Równanie stoŝka: z = è!!!!!!!!!!!!!!! x 2 +y 2 Płaszczyzna prostopadła do osi stoŝka: z = 6 Krzywa przecięcia stoŝka i płaszczyzny: okrąg. Out[441]= 36 y 2 x 2
Mathematica-1.nb 11 6 4 2-6 -4-2 2 4 6-2 -4-6 Płaszczyzna, która nie jest równoległa do osi stoŝka: z = 1 x Krzywa przecięcia płaszczyzny i stoŝka: parabola. Out[446]= y 2 1 2x 3 2 1-6 -5-4 -3-2 -1-1 -2-3 Płaszczyzna równoległa do tworzącej stoŝka: z = 1 +x Krzywa przecięcia płaszczyzny i stoŝka: hiperbola. Out[451]= y 2 1 2x Nadanie symbolowi y wartości 4 powoduje, Ŝe funkcja Eliminate zgłasza błąd. In[9]:= y = 4; Eliminate@8x 2 +y 2 4, y b x<, yd Out[10]= General::ivar : 4 is not a valid variable. More 3b x&&x 2 12 Symboliczne całkowanie i róŝniczkowanie
12 Mathematica-1.nb In[12]:= In[13]:= Out[13]= Out[14]= Clear@xD Integrate@x 2 Sin@xD, xd D@x 2 Sin@xD, xd H 2 +x 2 LCos@xD +2xSin@xD x 2 Cos@xD +2xSin@xD In[15]:= x = 7; D@x 2 Sin@xD, xd Out[16]= General::ivar : 7 is not a valid variable. More 7 H49Sin@7DL Nie wszystkie funkcje Mathematica "załamują się" przy uŝyciu w nich formalnej zmiennej symbolicznej, której nadano wcześniej wartość. W następnej komórce symbolom x i y są nadane wartości, natomiast wykres powierzchni rysuje się prawidłowo. (Natomiast po tytule wykresu widać, Ŝe naprawdę nastąpiło przypisanie). Wykonaj poniŝszą komórkę. In[59]:= x = y = 0; Plot3D@Sin@0.5 Hx 2 +y 2 LD, 8x, π, π<, 8y, π, π<, PlotLabel "Funkcja z = " <>ToString@Sin@0.5 Hx 2 +y 2 LDDD; x = y =. Usuwanie wartości nadanych symbolom i samych symboli In[17]:= a = 7?a Out[17]= 7 Global`a a = 7 In[19]:= Clear@aD?a Global`a Inny sposób usunięcia wartości przypisanej zmiennej - funkcja Unset (uŝyta w składni =. ): In[21]:= a = 2; a 2 +100 a =.; a 2 +100 Out[21]= 104 Out[22]= 100 +a 2 Usuwanie wszelkich wartości nadanych wszystkim istniejącym w pamięci symbolom:
Mathematica-1.nb 13 In[23]:= Clear@"Global` "D Usuwanie samych symboli: In[24]:= a = 87;?a Global`a a = 87 In[26]:= Remove@aD;?a Information::notfound : Symbol a not found. More Usuwanie wszystkich symboli z pamięci: In[28]:= In[29]:= Remove@"Global` "D? Global`* Information::nomatch : No symbol matching Global` found. More Definiowanie funkcji - wprowadzenie f [ x_ ] := rhs f [ x_ ] = rhs funkcja uŝytkownika inny sposób definiowania (szczegóły później) ZNAK PODKREŚLENIA PO LEWEJ STRONIE OBOWIĄZKOWY In[32]:= In[33]:= Out[33]= f@x_d :=x 3 2 f@1 +f@xdd fa1 + E 2 +f@xd 2 + i j 1 + 2 +H 1 +x3 L 3 y x k 3 z { 3 à Problem funkcji odwrotnej In[34]:= SolveASin@xD 1 2, xe Out[34]= Solve::ifun : Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution information. More 99x π 6 ==
14 Mathematica-1.nb à Pierwiastki nieparzystych stopni z liczb ujemnych Równanie x 3 = ama zawsze dokładnie jedno rozwiązanie rzeczywiste dla kaŝdego a rzeczywistego. Mathematica traktuje jednak to równanie ogólniej. In[35]:= Out[35]= In[36]:= Out[36]= H 8L 1ê3 2 H 1L 1ê3 N@H 8L 1ê3 D 1. +1.73205 In[37]:= Solve@x 3 8, xd Out[37]= 88x 2<, 8x 2 H 1L 1ê3 <, 8x 2 H 1L 2ê3 << Aby mieć wyłącznie rzeczywiste pierwiastki 3 stopnia z liczb ujemnych, musimy napisać własną funkcję In[38]:= In[39]:= Out[39]= cube@x_d := Sign@xD Abs@xD 1ê3 cube@ 8D 2 Dwie składnie wywoływania funkcji Mathematica In[89]:= In[90]:= ArcTan@1D 1 êê ArcTan Druga składnia ma zastosowanie, gdy uŝywana funkcja ma 1 argument. In[91]:= HSin@xD^2 +Cos@xD^2L H1 2 Sin@xD^2L HSin@xD^2 +Cos@xD^2L H1 2 Sin@xD^2L êê Simplify 4 rodzaje nawiasów Nawiasy okrągłe słuŝą do grupowania wyraŝeń. In[31]:= H3 xl H5 +yl +7 Argumenty funkcji podawane są w nawiasach kwadratowych
Mathematica-1.nb 15 In[32]:= x ApartA E Hx 1L Hx 2 +x+1l 2 Nawiasy klamrowe określają listę. Elementy listy muszą być oddzielone przecinkami. In[33]:= mojalista = 9 π 3, 2 2 3 π, π= Podwójne nawiasy kwadratowe słuŝą do indeksowania elementów list. In[34]:= In[35]:= In[36]:= In[37]:= In[38]:= macierz = 883, 2, 1<, 84, 3, 2<, 8a, b, c<, 8u, v, w<< macierz êê MatrixForm jedenelement = macierz@@3, 2DD wiersz = macierz@@4dd kolumna = macierz@@all, 1DD Wykorzystywanie poprzednich obliczeń Mathematica numeruje kolejne komórki typu Input i Output. Numeracja prowadzona jest w kolejności wykonywania obliczeń, nie w kolejności komórek w dokumencie! In[105]:= Cos@xD IntegrateA Sin@xD +Cos@xD, xe Do wyniku poprzednich obliczeń moŝna się odwoływać przy uŝyciu symbolu %. ZróŜniczkujemy ostatni wynik, aby przekonać się, czy otrzymamy całkowane przed chwilą wyraŝenie. In[106]:= D@%, xd Dodatkowo upraszczamy In[107]:= In[108]:= In[109]:= In[110]:= Simplify@%D SinA π E; Sqrt@3D 4 % +1 H ostatni wynik plus 1 L %% +10 H przedostatni wynik plus 10 L Numer ostatniej komórki pamiętany jest w zmiennej systemowej $Line In[111]:= $Line In[112]:= $Line = 0; In[1]:= Sqrt@3D
16 Mathematica-1.nb Posługiwanie się odwołaniami do poprzednich obliczeń wymaga pamiętania, Ŝe numeracja przebiega wg kolejności wykonywania obliczeń, NIE ZAŚ wg kolejności, w jakiej rozmieszczone są komórki w dokumencie. W odwołaniach do poprzednich obliczeń moŝna teŝ uŝywać funkcji In i Out. %n jest równowaŝne Out[n] In[2]:= Out@1D H wynik pierwszego obliczenia w sesji lub pierwszego obliczenia po zresetowaniu zmiennej $Line L "Historię" obliczeń moŝna wyczyścić. Jest to czasem konieczne w celu zwolnienia pamięci In[3]:= Unprotect@In, OutD; Clear@In, OutD; Protect@In, OutD; Komunikaty i ostrzeŝenia programu Komunikaty Mathematica są pogrupowane w kategorie. Przykład: ostrzeŝenie o moŝliwej literówce. In[4]:= punktx = 7 In[5]:= punktz = 8 Komunikat składa się z dwóch "identyfikatorów": kategorii komunikatu i jego nazwy. In[6]:= In[40]:= Out[40]= Sin@π, πê2d 1ê0 Power::infy : Infinite expression 1 0 ComplexInfinity encountered. More Komunkaty moŝna deaktywować za pomocą funkcji Off In[41]:= In[42]:= Out[42]= Off@Power::infyD 1ê0 ComplexInfinity Błąd polegający na "literówce" jest na ogół wychwytywany, jednak tylko "przy pierwszej pomyłce". Komórkę niŝej wykonajmy dwa razy, obserwując reakcję programu za kaŝdym razem. "Literówka" znajduje się w nazwie funkcji InverseLaplaceTransform. In[43]:= Out[43]= s InverselaplaceTransformA, s, te Hs 2 +6L General::spell1 : Possible spelling error: new symbol name "InverselaplaceTransform" is similar to existing symbol "InverseLaplaceTransform". More s InverselaplaceTransformA 6 +s2, s, te