


























































































Studiuj dzięki licznym zasobom udostępnionym na Docsity
Zdobywaj punkty, pomagając innym studentom lub wykup je w ramach planu Premium
Przygotuj się do egzaminów
Studiuj dzięki licznym zasobom udostępnionym na Docsity
Otrzymaj punkty, aby pobrać
Zdobywaj punkty, pomagając innym studentom lub wykup je w ramach planu Premium
Społeczność
Odkryj najlepsze uniwersytety w twoim kraju, według użytkowników Docsity
Bezpłatne poradniki
Pobierz bezpłatnie nasze przewodniki na temat technik studiowania, metod panowania nad stresem, wskazówki do przygotowania do prac magisterskich opracowane przez wykładowców Docsity
Skrypt przygotowany w ramach programu „Matematyka kodem nowoczesności”
Typologia: Opracowania
1 / 98
Ta strona nie jest widoczna w podglądzie
Nie przegap ważnych części!
Skrypt przygotowany w ramach programu „Matematyka kodem nowoczesności”
Instytut Matematyki, Uniwersytet Śląski KATOWICE, 2013
Program Sage jest darmowym systemem matematycznym typu CAS (Computer Algebra System) dostępnym pod adresem http://www.sagemath.org. Program działa natywnie na systemach Linux i MacOS, można go jednak używać także pod Windows wykorzystując mechanizm wirtualizacji (szczegółowe na temat użytkowania Sage’a w systemie Windows są dostępne pod adresem http://www.sagemath.org/download-windows.html).
Zadanie 1. Zainstalować program Sage na swoim komputerze.
Najprostszym sposobem użycia programu Sage jest tryb konsolowy, niewymagający w ogóle graficznego środowiska pracy. Znacznie jednak wygodniej korzysta się z programu w try- bie klient-serwer. Tryb ten jest dostępny po wydaniu (z konsoli) polecenia notebook() (w środowisku Windows tryb klient-serwer jest jedynym trybem pracy). W trybie tym użytkownik pracuje w środowisku graficznym, używając przeglądarki internetowej.
Zadanie 2. Uruchomić program Sage na swoim komputerze zarówno w trybie konso- lowym jak i w trybie klient-serwer. (Użytkownicy systemu Windows wykonują tylko drugą część zadania).
W trybie klient-serwer, maszyna pełniąca rolę serwera może być dostępna zdalnie przez internet z innej lokalizacji. Pod adresem http://www.sagenb.org jest dostępny publiczny serwer, z którego po założeniu konta może korzystać każdy.
Zadanie 3. Utworzyć konto na serwerze http://www.sagenb.org i się do niego zalogować.
Rozdział 1. Wprowadzenie do użytkowania programu Sage 5
sage: 2^33^57^
95256
System Sage pozwala znajdować rozkład liczby całkowitej na iloczyn potęg jej dzielników pierwszych. Służy do tego funkcja factor. Gdybyśmy chcieli zatem ponownie rozłożyć, obli- czoną w poprzednim zadaniu, liczbę 95256 na czynniki pierwsze, to zrobimy to następująco:
sage: factor(95256)
23 · 35 · 72 Kolejną elementarną operacją arytmetyczną jest pierwiastkowanie. Wyrażenie
a zapisuje- my w programie Sage jako sqrt(a). Policzmy przykładowo pierwiastek z liczby 72:
sage: sqrt(72)
6
Zadanie 7. Wiedząc, że liczbę i =
− 1 wprowadza się w Sage’u jako po prostu i obliczyć wartość wyrażenia
(1 + i ) ·
√ 2 2
Rozwiązanie: Wprowadźmy najpierw wyrażenie w nawiasie:
sage: (1+i)*sqrt(2)/ ( 1 2
i +
Pamiętamy, że znak podkreślnika oznacza ostatni wynik zaś daszek oznacza potęgowanie. Czwartą potęgę wprowadzonej liczby obliczamy zatem poleceniem:
sage: _^
− 1
Wielokrotnie w trakcie obliczeń musimy się odwoływać do wcześniejszych wyników cząst- kowych. Trudno jednak w kółko przepisywać to samo, nieraz skomplikowane wyrażenie. Jeżeli potrzebny jest ostatni wynik możemy skorzystać z poznanego powyżej operato- ra podkreślnika. Jeżeli jednak chcemy się odwołać do wielu wcześniejszych obliczeń, to skuteczniejszym sposobem jest użycie zmiennych. Zapis: a=2 oznacza, iż do zmiennej a przypisaliśmy wartość równą 2. Zmienną możemy traktować jak „pudełko”, a przypisanie wartości, jako włożenie (w naszym przypadku dwójki) do tego pudełka. Wartość zmiennej możemy odczytać podając jej nazwę. Od chwili przypisania jej wartości, zmienne możemy wykorzystywać w wyrażeniach pisząc np. a+3, co zwróci w wyniku 5
Zadanie 8. Zdefiniować zmienną z będącą liczbą zespoloną 3 + i. Obliczyć jej z^10.
6 1.3. Deklaracje obiektów
Rozwiązanie: Definiujemy zmienną:
sage: z = 3+i
A teraz możemy ją użyć w wyrażeniu arytmetycznym aby obliczyć jej potęgę:
sage: z^
− 7584 i − 99712
Samo określenie „zmienna” sugeruje, że jej wartość nie jest permanentna. Danej zmiennej możemy zawsze przypisać nową wartość. Wracając do naszej analogi z pudełkiem, zawar- tość pudełka można zmienić wkładając do niego coś innego. Przykładowo zmiennej z wystę- pującej w poprzednim przykładzie można przypisać ją samą pomniejszoną o 2 wykonując polecenie z = z-2. Od tej chwili wartość tej zmiennej będzie wynosić (3 + i ) − 2 = 1 + i.
Zmienne nie muszą bynajmniej być skalarami. Równie dobrze może to być macierz. Macierz w systemie Sage definiuje się funkcją matrix, której argumentem jest lista wierszy macierzy, z których każdy jest listą elementów w danym wierszu. Dla przykładu zdefiniujmy macierz kwadratową
2 − 1
i wynik zapiszmy w zmiennej A :
sage: A = matrix([[1,2],[2,-1]])
sage: A ( 1 2 2 − 1
Możemy teraz obliczyć wyznacznik tej macierzy. Oczywiście zamiast przepisywać całą ma- cierz, skorzystamy z nazwy zmiennej:
sage: det(A)
− 5 Powyższy zapis det(A) odpowiada notacji matematycznej det( A ). Mimo, że jest on w pełni dozwolony, to używając programu Sage, częściej stosujemy tzw. „notację obiektową”, w której to samo wyrażenie ma postać:
sage: A.det()
− 5 W podobny sposób obliczamy macierz odwrotną do macierzy A , stosując metodę inverse klasy macierzy...
sage: A.inverse() ( (^1) 5
2 2 5 5 −^
1 5
...bądź też notację matematyczną A−^1 :
sage: A^(-1) ( (^1) 5
2 2 5 5 −^
1 5
8 1.4. Działania na funkcjach
Rozwiązanie: Musimy najpierw zadeklarować zmienną t a następnie samą funkcję g :
sage: var(’t’)
t sage: g(t) = t/(t^2+1)
sage: g
t 7 →
t t^2 + 1 Teraz możemy obliczyć jej wartość dla t = 2...
sage: g(2) 2 5 ...oraz t = − 2.
sage: g(-2)
Wróćmy do funkcji g ( t ) = (^) t 2 t +1 z poprzedniej części:
sage: var(’t’)
t
sage: g(t) = t/(t^2+1)
sage: g
t 7 →
t t^2 + 1 Używając metody plot możemy narysować jej wykres. Jako argument podajemy przedział zmienności argumentu, powiedzmy [ − 10 , 10]:
sage: g.plot((t, -10, 10))
Rozdział 1. Wprowadzenie do użytkowania programu Sage 9
Używając dodatkowego argumentu, możemy zmienić kolor wykresu:
sage: g.plot((t, -1, 1), color=’red’)
Zadanie 11. Narysować wykres funkcji f zadanej wzorem f ( t ) = (^) 1+cossin( t 2 )( t ) na prze- dziale [ − 2 π, 2 π ]. Wskazówka: Stała π jest w programie Sage dostępna pod nazwą pi.
Rozwiązanie: Definiujemy funkcję (zauważmy, że zmienna t już była używana powyżej, nie musimy zatem jej ponownie deklarować).
sage: f(t) = sin(t)/(1+cos(t)^2)
sage: f
t 7 →
sin ( t ) cos ( t )^2 + 1 Teraz korzystając z metody plot rysujemy jej wykres.
sage: f.plot((t,-2pi,2pi))
Rozdział 1. Wprowadzenie do użytkowania programu Sage 11
sage: b(x,y) = x+y
sage: b
( x, y ) 7 → x + y Możemy w końcu obliczyć złożenie utworzonych funkcji:
sage: c(t) = a(b(t))
sage: c
t 7 → sin ( t + y ) + cos ( t + y )
W programie Sage, nie musimy się ograniczać do statycznych wykresów. Bez problemu możemy też stworzyć animację obrazującą zmianę wykresu funkcji w zależności od określo- nego parametru. Rozważmy to na przykładzie funkcji g ( t ) = (^) t 2 t +1 :
sage: g(t) = t/(t^2+1)
sage: g
t 7 →
t t^2 + 1 Utworzymy złożoną z 10 klatek animację wykresu funkcji t 7 → g ( at ) dla a ∈ { 1 ,... , 10 }. Pole- cenie [n0,..,n1] tworzy ciąg liczb całkowitych {n 0 ,... , n 1 }. Listę kolejnych wykresów funk- cji t 7 → g ( at ) tworzymy teraz poleceniem [ g(a*t).plot(t,-1,1) for a in [1,..,10] ]. Funkcja animate tworzy z tej listy gotową animację, którą można wyświetlić za pomocą me- tody show. Ostatecznie zatem składnia naszego polecenia jest następująca:
sage: animate([ g(a*t).plot(t,-1,1) for a in [1,..,10] ]).show()
Zadanie 13. Stworzyć animację wykresu t 7 → f ( at ), gdzie a ∈ [0 , 4] oraz funkcja f jest zadana wzorem f ( t ) = (^) 1+cossin( t 2 )( t ).
Rozwiązanie: Postępujemy jak w poprzednim przykładzie. Najpierw definiujemy funk- cję f.
12 1.4. Działania na funkcjach
sage: f(t) = sin(t)/(1+cos(t)^2)
sage: f
t 7 →
sin ( t ) cos ( t )^2 + 1
Teraz możemy utworzyć animację. Zbiór zwracany przez polecenie [0,..,4] zawiera wy- łącznie liczby całkowite. Aby parametr a przebiegał przedział [0 , 4] z krokiem 101 , utworzymy zbiór { 0 , (^) 101 ,... , 4 } poleceniem [0,1/10,..,4]. Mamy:
sage: animate([ f(t=a/10t).plot(t,-2pi,2*pi) ... for a in [0,1/10,..,4] ]).show()
Wykresy w programie Sage mogą być również trójwymiarowe i to w dodatku interak- tywne. Rozważmy funkcję g ( x, y ) = cos( x
(^2) + y (^2) ) √ 1+ x^2 + y^2
sage: var(’x,y’)
( x, y )
sage: g(x,y) = cos(x^2+y^2)/sqrt(1+x^2+y^2)
sage: g
( x, y ) 7 →
cos
x^2 + y^2
x^2 + y^2 + 1
Wykres tej funkcji uzyskujemy poleceniem plot3d. Wykres ten jest interaktywny - użyt- kownik może kliknąć przycisk „Make interactive” i za pomocą myszy obracać oraz przybli- żać/oddalać wykres.
sage: plot3d(g, (x,-pi,pi), (y,-pi,pi), plot_points = 100)
14 1.5. Obliczenia macierzowe
Pokażemy teraz jak w programie Sage można wykonywać podstawowe operacje na ma- cierzach. Zacznijmy od zdefiniowania dwóch macierzy A oraz B.
sage: A = matrix([[-1,2],[2,1],[2,-2]])
sage: A
Teraz definiujemy drugą macierz.
sage: B = matrix([[1,-1,-2],[0,1,2]])
sage: B ( 1 − 1 − 2 0 1 2
Iloczyn macierzy to operator gwiazdka, tak samo jak iloczyn dowolnych innych obiektów.
sage: A*B
Oczywiście mnożenie macierzy nie jest przemienne.
sage: AB==BA
False Nie musimy się ograniczać do macierzy nad ciałem liczb wymiernych. Zdefiniujmy dwie macierze o współczynnikach w ciele skończonym 7-elementowym F 7.
sage: A = matrix(GF(7), [[1,-2,2],[3,2,5],[1,3,2]] )
sage: A
Zauważmy jak − 2 w pierwszym wierszu macierzy została przekształcona w 5 = − 2 ∈ F 7. Teraz definiujemy drugą macierz.
Rozdział 1. Wprowadzenie do użytkowania programu Sage 15
sage: B = matrix(GF(7), [[3,1,0],[0,5,2],[1,1,6]])
sage: B
Mnożenie lewostronne macierzy B przez odwrotność macierzy A możemy zapisać albo...
sage: A\B
...albo też:
sage: A^(-1)*B
Oczywiście wynik jest inny od mnożenia prawostronnego przez A−^1.
sage: B*A^(-1)
Zadanie 14. Obliczyć wartość wyrażenia macierzowego 40 · ( C + A · B ) −^1 , jeżeli
Rozwiązanie: Podobnie jak we wcześniejszym przykładzie definiujemy wszystkie trzy ma- cierze występujące w zadaniu:
sage: A = matrix([[1,2,1,3],[4,4,1,-1],[1,2,3,2]])
sage: A
sage: B = matrix([[1,-1,0],[0,2,1],[1,3,2],[1,1,0]])
sage: B
sage: C = matrix([[0,1,2],[2,1,0],[1,0,2]])
Rozdział 1. Wprowadzenie do użytkowania programu Sage 17
sage: (A.transpose()*A).det()
0 Jak widać wyznacznik jest zerowy, co oznacza, że rząd A jest mniejszy od jej wymiaru. Przekonajmy się ile dokładnie wynosi.
sage: (A.transpose()*A).rank()
1 Rząd okazał się jedynką. Zatem w całej macierzy 6 × 6 jest tylko jeden liniowo niezależny wiersz.
Program Sage posiada wiele narzędzi z zakresu rachunku różniczkowego i całkowego. Pod- stawowe polecenia, z których będziemy korzystać w tym podrozdziale to:
Zobaczymy teraz jak można je wykorzystać w klasycznym problemie badania przebiegu zmienności funkcji. Opierając się na wiadomościach poznanych w podrozdziale ”Deklaracje obiektów”, deklarujemy funkcję f ( t ) = t
(^2) − 1 t− 2 .¡/p¿
sage: var(’t’)
t
sage: f(t) = (t^2-1)/(t-2)
sage: f
t 7 →
t^2 − 1 t − 2 Aby wyznaczyć jej miejsca zerowe skorzystamy z polecenia solve
sage: Z = solve(f(t)==0, t)
sage: Z
[ t = ( − 1) , t = 1] Jak widać funkcja ma dwa miejsca zerowe ± 1. Wynik zwracany przez funkcję solve, to seria równości. Nam wygodniej jest jednak posługiwać się po prostu zbiorem pierwiastków. W tym celu należy z każdej równości pozostawić jedynie jej prawą stronę, używając metody rhs (skrót od angielskich słów Right Hand Side).
sage: Z = solve(f(t)==0, t)
sage: Z = [ z.rhs() for z in Z ]
18 1.6. Rachunek różniczkowy i całkowy
sage: Z
[ − 1 , 1] W ten sposób zbiór Z zawiera miejsca zerowe funkcji f. Określmy jeszcze jej dziedzinę. Do dziedziny nie należą miejsca zerowe mianownika. Mianownik wyrażenia definiującego funkcję f otrzymujemy za pomocą metody determinant. Miejsca zerowe znajdujemy tak jak powyżej.
sage: ND = solve(f.denominator()==0, t)
sage: ND = [ z.rhs() for z in ND ]
sage: ND
[2] Zatem dziedziną funkcji f jest zbiór R \ N D = ( −∞, 2) ∪ (2 , ∞ ) Policzmy teraz granice funkcji f na krańcach jej przedziałów określoności. Do wyznacze- nia granicy w programie Sage służy polecenie limit, nieskończoność to Infinity.
sage: limit(f(t), t = -Infinity)
−∞
sage: limit(f(t), t = Infinity)
sage: limit(f(t), t = 2, dir = ’-’)
−∞
sage: limit(f(t), t = 2, dir = ’+’)
f ( t ) t
sage: limit(f(t)/t, t=Infinity)
1
sage: limit(f(t)/t, t=-Infinity)
1 Zatem istnieje wspólna asymptota ukośna, nachylona pod kątem arc tg 1 = π 4 , zarówno w plus jak i minus nieskończoności. Kolejnym krokiem jest obliczenie pochodnej funkcji f. Służy do tego polecenie diff.
sage: f1 = diff(f, t)
sage: f
t 7 →
2 t t − 2
t^2 − 1 ( t − 2)^2 Policzmy miejsca zerowe pochodnej.