Krótkie wprowadzenie do ±rodowiska Wolfram Mathematica R 9.0. Niebezpiecznie jest wychodzi za próg Bilbo Baggins, Wªadca Pier±cieni, J. R. R. Tolkien Gªównym celem pierwszych wicze«jest zaznajomienie si ze ±rodowiskiem Mathematica oraz gªównymi reguªami, które w nim panuj. Instrukcja niniejsza pomija teoretyczne uwagi odno±nie programowania funkcyjnego oraz innych subtelno±ci, istotnych w pó¹niejszym wykorzystaniu ±rodowiska. Gªównym celem tego wprowadzenia jest mo»liwie krótkie streszczenie najbardziej istotnych funkcjonalno±ci ±rodowiska Mathematica, tak, aby po jego przeczytaniu Czytelnik potraª wykorzysta Mathematik w podstawowych obliczeniach i wizualizacjach. Uwaga! Podstawowym ¹ródªem informacji o ±rodowisku Mathematica jest jego dokumentacja, a najwa»niejszym celem pierwszych zaj jest przedstawienie jak z niej korzysta. Umiej tno± ta b dzie niezb dna do realizacji kolejnych zada«, dlatego nie nale»y nie docenia wagi tego wiczenia. Rozpocznijmy od otwarcia pustego notatnika ±rodowiska Mathematica 9.0. Wpiszmy nast puj cy tekst Sin[k x] Exp[-λ x] Aby wykona t linijk nale»y wcisn [Shift]+[Enter] lub prawy [Enter]. Opisany powy»ej sposób jest uniwersaln metod wykonywania komend w tym ±rodowisku. Po wypisaniu odpowiedniego ci gu znaków wykonujemy go jedn z dwóch opisanych metod. Wykonanie tego tekstu mo»e wydawa si bezsensowne, w ko«cu to tylko jaki± wzór. Zademonstruje on jednak pot g systemu podpowiedzi ±rodowiska 1
Figure 1: Podpowied¹ do wpisanego kodu. Mathematica. Po wykonaniu podanej instrukcji ±rodowisko powinno da odpowied¹ podobn do tej na rysunku 1. Sugeruj teraz wybiera funkcje z podpowiedzi. Wybór plot zademonstruje wykorzystanie funkcji Plot[] i niesamowicie u»ytecznej funkcji Manipulate[] - przesuwaj c suwaczkami mo»emy zmienia parametry w rozwa»anych obiektach matematy(i)cznych. Mo»na te», zamiast zdecydowa si na plot wybra ró»niczkowanie po x - x derivative, co demonstruje jak w Mathematice ró»niczkowa symbolicznie. Uzyskane w wyniku ró»niczkowania wyra»enie mo»emy dalej przeksztaªca - do niego równie» pojawi si podpowiedzi. Sugeruj po±wi ci troch czasu na takim przeksztaªcaniu kolejnych wyra»e«- daje to pewne wyobra»enie o mo»liwo±ciach Mathematiki. Trzeci od prawej przycisk, spo±ród przedstawionych na rysunku 1 umo»liwia zwini cie kilku wyklikanych funkcji w jedno zªo»one wyra»enie. Sposób tworzenia kodu w oparciu o sklejanie prostszych wyra»e«jest, w mojej opinii, najlepsz metod pracy z Mathematic. Zamiast budowa wielki budynek, skupmy si lepiej na ka»dej cegieªce z osobna i dopiero maj c pewno±,»e wszystkie s dokªadnie takie jak chcemy, ª czmy je razem. W przeciwnym wypadku namierzenie bª du (które potra by bardzo subtelne) jest bardzo bardzo trudne. Drugim, po podpowiedziach, bardzo wygodnym sposobem poznawania funkcjonalno±ci ±rodowiska Mathematica jest jego bogata pomoc. Jest to podstawowe narz dzie w pracy ze ±rodowiskiem. Pomoc wywoªuje si klawiszem [F1]. Proponuj, uruchamiaj c odpowiednie pliki pomocy, skopiowa zamieszczone tam przykªady i sprawdzi do czego mog sªu»y nast puj ce funkcje Plot[], Manipulate[], ListPlot[], Animate[], 2
Simplify[]. Jak mo»na byªo zauwa»y w powy»szych przykªadach podstawow struktur danych w Mathematice jest lista. Lista to nic innego jak pewien uporz dkowany zbiór pewnych (niekoniecznie tego samego typu!) elementów. Poni»ej zamieszczam przykªady list - prosz sprawdzi jaki wynik dadz podane kody ¹ródªowe {a, b, c, 1, 2, 3} {{1,0},{0,1}} Jest to sposób zapisu macierzy w ±rodowisku Mathematica - po wi cej szczegóªów odsyªam do dokumentacji (zwªaszcza Mathematics and Algorithms Matrices and Linear Algebra). Table[1/i,{i,10}] Funkcja Table[] jest jedn z cz ±ciej u»ywanych, podczas pracy z Mathematik. Sugeruj przejrze jej dokumentacj. Poni»sze kody ¹ródªowe s przykªadami wykorzystania ±rodowiska Mathematica do tworzenia graki. Sugeruj je skopiowa do notatnika i sprawdzi co daje ich wykonanie. Przejrzenie dokumentacji wykorzystanych funkcji równie» b dzie pouczaj ce. Graphics[Table[Circle[RandomReal[{-10, 10}, {2}]], {80}]] Graphics[{Blue, FilledCurve[Line[RandomReal[{0, 10}, {10, 2}]]], Red, FilledCurve[Line[RandomReal[{0, 10}, {20, 2}]]], Green, FilledCurve[Line[RandomReal[{0, 10}, {100, 2}]]]}] Polecam wypróbowa tak»e dziaªanie funkcji Disk[], Polygon[], a tak»e mo»liwo±ci manipulowania obiektami gracznymi (kolory, grubo±ci linii etc.). Kolejnym bardzo wa»nym, z punktu widzenia pracy w ±rodowisku Mathematica, zagadnieniem s denicje funkcji. Rozwa»my poni»sze przykªady g[x_] := x + RandomReal[]; f[x_] = x + RandomReal[]; Wykorzystuj c funkcj Plot[] sprawd¹ czym ró»ni si te dwa warianty przypisania. Jak mo»na wywnioskowa po wykresach funkcji g[] i f[], przypisanie := 3
wykonywane jest ka»dorazowo przy wywoªaniu funkcji, natomiast przypisanie = wykonywane jest tylko raz. Aby unikn nieporozumie«, zwracam uwag,»e instrukcja porównania w Mathematice wykonywana jest przez == (podwójny znak równo±ci) albo === (potrójny znak równo±ci), w zale»no±ci od rodzaju porównania. Szczegóªy oczywi±cie s dokªadnie opisane w dokumentacji. Ten (przydªugi) wst p teoretyczny powinien by pomocny przy rozwi zywaniu poni»szych zada«zadanie 1. Wykorzystuj c denicj funkcji, funkcj If[] lub Which[] narysuj wykres funkcji signum. Zadanie 2. Rozwa» równanie ró»niczkowe zwane równaniem Bessela x 2 d2 y dx 2 + x dy dx + (x2 α 2 )y = 0. Znajd¹ rozwi zania tego równania (pomocna oka»e si funkcja DSolve[]). Narysuj funkcje pojawiaj ce si w rozwi zaniu (Plot[]). Przy pomocy funkcji Manipulate[] sprawd¹ jak zachowuj si te funkcje przy zmianie parametru α. Rozwi«funkcje, które pojawiªy si w rozwi zaniu w szereg pot gowy wokóª zera. Narysuj na jednym wykresie funkcj wyj±ciow, jej przybli»enie do pot gi 2., 4. i 6.. Wykorzystaj funkcje Normal[] i Evaluate[], aby przy ich pomocy rozwi za poprzedni podpunkt stosuj c funkcje. 4
Zadanie 3. Utwórz list pierwszych 20 liczb pierwszych. Zrób to wykorzystuj c funkcje Table[], If[], PrimeQ[], oraz alternatywnie z wykorzystaniem funkcji Primes[]. Wybran metod wygeneruj list 100 pierwszych liczb pierwszych, a nast pnie przedstaw j, wykorzystuj c funkcje ListPlot[]. Posªu» si funkcj Fit[] aby dopasowa do uzyskanych punktów prost. Narysuj punkty i dopasowan prost na jednym wykresie. (w zale»no±ci od wybranej metody rozwi zania problemu pomocne mog okaza si te» funkcje Flatten[], Nest[], Cases[]). Zach cam do rozwi zania tego zadania kilkoma ró»nymi metodami. Zadanie 4. Posªuguj c si funkcjami NestList[], RandomChoice[], ListPlot[] wygeneruj realizacj bª dzenia losowego generowanego przez rzut asymetryczna monet, dla której prawdopodobie«stwo zwi zane z gór jest dwa razy wi ksze od tego zwi zanego z doªem. Sprawd¹ czym ró»ni si przypisanie := od =. Narysuj odpowiednie wykresy. Aby wizualizacja bª dzenia lepiej przemawiaªa do wyobra¹ni warto wywoªa ListPlot[] z opcj Joined->True. Zadanie 4'. Korzystaj c z funkcji Histogram[] narysuj histogram poªo»e«dla bª dzenia z zadania 4. Przeanalizuj jak zmienia si wraz ze zwi kszaniem liczby losowa«(np. wykorzystuj c funkcj Animate[]). Zadanie 5. Wykorzystuj c funkcj ArrayPlot[] narysuj»óªto-ró»ow szachownic (albo w innych, wybranych, byle nie biaªo-czarnych barwach) o wymiarach n n, gdzie n b dzie parametrem, liczb caªkowit. Narysuj przy pomocy tej samej funkcji pikselowe koªo, czyli gur, w której maªymi kwadracikami przybli»a si wn trze dwuwymiarowej kuli. 5