Elementy metod numerycznych - zajęcia 11 Mathematica - Wolfram Alpha 1 1. Labolatoria Zajęcia za 34 punktów. Proszę wysłać krótkie zwięzłe odpowiedzi na pytania oznaczone symbolem ( x, p) i numerkiem (x), gdzie x-numer pytania, p-liczba punktów. To znaczy dla pytań: Jak masz na imię?( 1, 0). Gdzie jesteś?( 2, 0). W mailu powinna się znaleźć odpowiedzi 1.Łukasz 2. Na Wydziale Matematyki i Informatyki. Odpowiedzi na oznaczone pytania mają państwo przesłać w wyznaczonym terminie jak uprzednio mailem na adres lukwit@amu.edu.pl o temacie DMENzz-xx-yyyyyy (gdzie zz-numer zajęć, xx to godzina zajęć 11 lub 10 a yyyyyy to numer indeksu). Odpowiedzi proszę umieszczać w treści meila, a nie w załącznikach. Za wysłanie odpowiedzi do końca zajęć bonus +3pkt. 2. Wstęp 2.1. Mathematica Mathematica jest programem służącym zarówno do obliczeń symbolicznych jak i numerycznych opracowanym w 1998 roku przez Stephena Wolframa. Oferuje również bardzo przydatny język programowania umożliwiający przeprowadzanie bardziej zaawansowanych obliczeń. Z punktu widzenia metod numerycznych najważniejszą cechą jest zdolność do przeprowadzania obliczeń numerycznych, które cechują się bardzo dużą dokładnością. 2.2. Obsługa Mathematice można uruchomić w dwóch trybach tekstowym lub graficznym. Tryb tekstowy włączamy poprzez uruchomienie programu math. W tym trybie mamy do dyspozycji linię komend gdzie możemy wprowadzać kolejne polecenia. Mimo ograniczeń wyświetlania w konsoli Mathematica bardzo dobrze radzi sobie z wyświetlaniem nawet bardzo skomplikowanych formuł. 1 Na podstawie zadań stworzonych przez Patryka Żywicę i Justynę Zawadę 1
Praca w trybie graficznym jest znacznie łatwiejsza szczególnie dla początkującego użytkownika. W systemie linux wpisujemy komendę mathematica a w pod windowsem wyszukujemy oporgramowanie Wolfram Mathematica 8. Aby rozpocząć pracą należy stworzyć nowy Notebook, gdzie będziemy zapisywali wszystkie nasze obliczenia. W tym trybie Mathematica nie zwraca wyników obliczeń od razu po ich wprowadzeniu.w celu dokonania obliczeń należy wybrać opcję Evaluation- Evaluate Cells albo wcisnąć Shift-Enter. 2.3. WolframAlpha Portal internetowy uruchomiony przez firmę Wolfram Research w maju 2009 roku. Jego zadaniem jest odpowiadanie na pytania zadane prze użytkownika. Natura tych pytań może być niemal dowolna, nas jednak najbardziej interesują te związane z obliczeniami numerycznymi. WolframAlpha oferuje niemal pełną funkcjonalność Mathematicy. Ciekawostką jest to, że silnik odpowiadający portalu jest napisany w Mathematice i ma około 5 milionów linii kodu. Portal WolframAlpha dostępny jest pod adresem internetowym www.wolframalpha.com Aby przeprowadzić obliczenia wprowadzamy formułę i wciskamy Enter. Problem pojawia się przy bardzo zaawansowanych lub długich poleceniach, w których wykorzystujemy polecenia kontrolujące prace Mathematicy. Część z nich nie jest rozpoznawana przez WolframAlpha. 3. Działanie 3.1. Wyrażenia i zmienne Zmienne w Mathematice tworzymy używając składni nazwa-zmiennej=wartość Aby wyświetlić wartość zmiennej należy wpisać jej nazwę nazwa-zmiennej. Do zmiennych można przypisywać nie tylko wartości liczbowe, ale również całe wyrażenia. a = 5/7 b = 436^3 c= a*b Możemy również używać wszystkich funkcji matematycznych, a przynajmniej tych współcześnie znanych. Wszystkie nazwy funkcji zaczynają się z wielkiej litery, a ich argument bądź argumenty podajemy w nawiasach kwadratowych. Sin[0] E[1] Log[2] 2
W celu otrzymania wartości liczbowej a nie symbolicznej możemy wykorzystać polecenie N []. Powoduje ono wyświetlenie wartości liczbowej wyliczonej numerycznie a nie symbolicznie. a = (5 + 15^12)/23^11-7*6/11*(2 + 22*10^(-1)); N[a] W Mathematice możemy również definiować własne funkcje: f[x_] := x*sin[x]; g[x_,y_] := x*sin[y]; Zdefiniowaliśmy przed chwilą dwie własne funkcje f i g. Aby obliczyć ich wartość postępujemy analogicznie jak z funkcjami wbudowanymi. f[5] g[6,45] Można również definiować funkcje określone różnymi wzorami w różnych przedziałach. Zapis f1[x_] := If[x > 0, x, -x]; definiuje funkcję wartość bezwzględna z x. Zadanie 3.1. Jaki jest wynik polecenia Element[P i, Reals]?( 1,1) Zadanie 3.2. Co sprawdziliśmy w poprzednim zadaniu?( 2,1) Zadanie 3.3. Czy liczba 2 105 1 jest pierwsza? ( 3,1) Czy liczba 2 607 1 jest pierwsza? ( 4,1) Czy liczba 3 207 1 jest pierwsza? ( 5,1) Czy liczba 3 2010 jest pierwsza? ( 6,1) Zadanie 3.4. Jaka jest 10000 cyfra po przecinku rozwinięcia liczby π?( 7,1) 3.2. Pochodne Pierwszą pochodną funkcji jednej zmiennej liczymy używając polecenia D[]. D[x^4 + Sin[x], x] Po przecinku musimy podać po której zmiennej pochodna jest liczona. Pochodne wyższych rzędów oraz pochodne mieszane funkcji wielu zmiennych liczy się równie łatwo: 3
a=d[x^4 + x Sin[y], x] b=d[x^4 + x Sin[y], y] c=d[x^4 + x Sin[y], {x, 3}] d=d[x^4 + x Sin[y], {y}, {x}] Gdzie np c to trzecia pochodna po x, a d pochodna po y a potem po x. Można również różniczkować wcześniej zdefiniowane funkcje. f[x_] := a * x^7+log[x]; D[f[x],x] W ten sposób liczymy pochodne symbolicznie, aby obliczyć wartość pochodnej w danym punkcie należy użyć polecenia /.zmienna > warto,... Przykładowo: D[x^4 + x Sin[y], y] /. {y -> Pi/4, x -> 7} Zadanie 3.5. Wyznacz pochodną funkcji f(x) = sin(x)/x 3 ( 8,1)? Jeśli interesuje nas wartość numeryczna należy całość podać poleceniu N[]. N[D[x^4 + x Sin[y], y] /. {y -> Pi/4, x -> 7}] N[D[x^4 + x Sin[y], y] /. {y -> Pi/4, x -> 7}] 3.3. Całki Liczenie całek nieoznaczonych jest równie łatwe co pochodnych. Integrate[x^2, x] Całki oznaczone liczymy podając po przecinku oprócz zmiennej, dolną i górną granicę całkowania. Można również obliczać całki niewłaściwe, przez podanie wartości Inf inity jako granicy. Integrate[Sin[x], {x, 0, Pi}] Integrate[E^-x, {x, 0, Infinity}] Można również liczyć całki wielokrotne, podając po przecinku kolejne zmienne i ich granice całkowania: Integrate[x*y, {x, 0, 1}, {y, 0, 1}] Niestety nie wszystkie całki daja się opisać funkcjami elementarnymi.w takich sytuacjach należy używać polecenia N Integrate []. Integrate[E^(-x^2), {x, 0, 1}] NIntegrate[E^(-x^2), {x, 0, 1}] 4
Zadanie 3.6. Oblicz całki ln 2 xdx ( 9,1)? x 5 dx x ( 10,1)? 10x x 2 dx ( 11,1)? e x e x +5 3.4. Równania Program Mathematica potrafi również rozwiązywać równania. Służy do tego polecenie Solve []. Solve[x^2 == 1, x] Solve[Sin[x] == 0, x] Solve[x^3+x^2==1,x] Zwraca ono zbiór rozwiązań wyliczonych przez program. W przypadku ostatniego równania wynik ma bardzo skomplikowaną postać (jest to wynik dokładny), aby otrzymać rozwiązanie wyliczone numerycznie należy zastosować polecenie N Solve []. NSolve[x^3 + x^2 == 1, x] Domyślnie Mathematica używa precyzji maszynowej do przechowywania i obliczania wyników w poleceniach typu N. Zachowanie te można jednak zmienić przez dodanie W orkingp recision > 50 jako jednego z argumentów polecenia. Spowoduje to, że wynik zostanie wyliczony z dokładnością do 50 cyfr po przecinku. NSolve[x^3 + x^2 == 1, x, WorkingPrecision -> 50] NIntegrate[E^(-x^2), {x, 0, 1}, WorkingPrecision -> 50] Możliwe również jest rozwiązywanie układów równań. W tym celu również używamy polecenia Solve [] i NSolve []. W tym przypadku podajemy jednak zbiór równań oraz zbiór zmiennych jako argument Solve []. Solve[{2*x + y == 1, 3*x - 4*y == 2}, {x, y}] NSolve[{2*x + y == 1, 3*x - 4*y == 2}, {x, y}] Zadanie 3.7. Rozwiąż równanie: x 2 5x + 6 = 0. Podaj polecenie ( 12,1) i wynik ( 13,1) Zadanie 3.8. Rozwiąż układ równań: x + 5y = b, 2x y = a. Podaj polecenie ( 14,1) i wynik ( 15,1) 5
3.5. Interpolacja Oczywiście Mathematica umożliwia automatyczne przeprowadzenie interpolacji wielomianowej na podstawie podanych punktów i pochodnych. W tym celu wykorzystujemy polecenie InterpolatingP olynomial [], której jako argument podajemy zbiór węzłów interpolacji. Zaczynając od prostych przykładów, następujące polecenie tworzy wielomian interpolacyjny przechodzący przez 3 punkty (w( 1) = 4; w(0) = 2; w(1) = 6): InterpolatingPolynomial[{{-1, 4}, {0, 2}, {1, 6}}, x] Możemy również określić wartości dowolnych pochodnych w danym punkcie. Przykładowo następne polecenie definiuje wielomian interpolacyjny przechodzący przez te same punkty ale spełniający dodatkowo (w ( 1) = 3; w (0) = 3; w (0) = 1; w (1) = 0: Expand[InterpolatingPolynomial[{{-1, 4, 3}, {0, 2, 3, -1}, {1, 6, 0}},x]]] Zatem ogólna składnia tego polecenia jest następująca: podajemy zbiór węzłów interpolacji poprzez podanie wartości x a następnie kolejnych pochodnych (przyjmując, że zerowa pochodna to wartość funkcji w punkcie). Do wyświetlania wielomianów w bardziej czytelnej dla człowieka formie można wykorzystać polecenie Expand []. Ma ono również swój przeciwstawny odpowiednik to jest Simplif y []. Pierwsze polecenie powoduje rozwinięcie danego wyrażenia do postaci prostej(w sensie braku mnożeń) sumy. Drugie przeprowadza szereg operacji algebraicznych i nie tylko celem przedstawienia wyniku w jak najprostszej formie. Przykładowo: Expand[((x + 1) (x - 1) + 7 x)*(x + 7) (x - 5)] Simplify[Sin[x]^2 + Cos[x]^2] Zadanie 3.9. Przedstaw podane liczby w postaci ułamka zwykłego: 0,989825 ( 16,1) 11,123425 ( 17,1) 6,757575 ( 18,1) 2,5125 ( 19,1) Zadanie 3.10. Podaj rozwinięcie wyrażenia (x + 2) 15? ( 20,1) Zadanie 3.11. Uprość wyrażenie sin2 (x)+cos 2 (x) tg(x)+ctg(x)? ( 21,1) 6
Zadanie 3.12. Do czego służy polecenie HornerF orm? ( 22,1) Zadanie 3.13. Jaki jest wynik polecenia HornerF orm[(15x 5 + x 4 x 3 5x 2 + 10x + 2)/(x 4 + 6x 3 + x 2 3x + 1)] ( 23,1)? Zadanie 3.14. Znajdź wielomian interpolacyjny dla danych f( 3) = 3, f( 1) = 0, f(5) = 10, f(8) = 2, f(10) = 4 ( 24,1)? Zadanie 3.15. Znajdź wielomian interpolacyjny dla danych f(1) = 2, f (1) = 3, f(2) = 6, f (2) = 7, f (2) = 8 ( 25,1)? 3.6. Wykresy Rysowanie wykresów w Mathematice jest bardzo proste. Służy do tego polecenie P lot [] oraz P lot3d []. Jako pierwszy argument podajemy funkcję, której wykres chcemy narysować. Jako drugi zmienną i jej zakres: Plot[Sin[x], {x, 0, 6 Pi}] Można również rysować wykresy wielu naraz: Plot[{Sin[x], Sin[2 x], Sin[3 x]}, {x, 0, 2 Pi}] Wykresy funkcji dwóch zmiennych rysujemy następująco: Plot3D[Sin[x + y^2], {x, -3, 3}, {y, -2, 2}] Najpierw podajemy funkcje, a następnie dwie zmienne wraz z zakresami. Tu również można nanosić wykresy wielu funkcji: Plot3D[{x^2 + y^2, -x^2 - y^2}, {x, -2, 2}, {y, -2, 2}] Zadanie 3.16. Za pomocą jakiego polecenia narysujesz funkcję sin(x) w przedziale [0, 8π]? ( 26,1) Zadanie 3.17. Za pomocą jakiego polecenia narysujesz funkcję 2cos(x)+x w przedziale [0, 20] 7
i wypełnisz kolorem obszar pomiędzy funkcją a osią OX?? ( 27,1) Zadanie 3.18. Co jest wynikiem polecenia? ParametricPlot3D[{(3+Cos[v]) Cos[u],(3+Cos[v]) Sin[u],Sin[v]}, {u,0,2 Pi},{v,0,2 Pi},PlotStyle->Specularity[White,50],Mesh->None] ( 28,1) 3.7. Wolfram alpha Zadanie 3.19. Wypisz wszystkie permutacje zbioru {Ala, ma, kota} (polecenie i wynik). ( 29,1) Zadanie 3.20. Jaki jest dokładny wiek Baracka Obamy co do dnia? ( 30,1) Zadanie 3.21. Na jakiej pozycji grał Gary Kubiak (football player)? ( 31,1) Zadanie 3.22. Czym jest UAM dla portalu wolfram alpha? ( 32,1) Zadanie 3.23. Ile w kamieniach waży Christiano Ronaldo? ( 33,1) Zadanie 3.24. Jaka jest odległość w milach pomiędzy Poznanie a Aveiro (Portugalia)? ( 34,1) 3.8. Bonus Napisz program w Java lub.net, który dla zadanych danych (węzłów i wartości funkcji w węzłach) będzie rysował wielomian interpolacyjny (eksport do pliku lub rysunek w aplikacji). ( XXX,5) 8