Docsity
Docsity

Przygotuj się do egzaminów
Przygotuj się do egzaminów

Studiuj dzięki licznym zasobom udostępnionym na Docsity


Otrzymaj punkty, aby pobrać
Otrzymaj punkty, aby pobrać

Zdobywaj punkty, pomagając innym studentom lub wykup je w ramach planu Premium


Informacje i wskazówki
Informacje i wskazówki

Matematyka obliczeniowa - skrypt, Opracowania z Matematyka

Skrypt przygotowany w ramach programu „Matematyka kodem nowoczesności”

Typologia: Opracowania

2019/2020

Załadowany 16.07.2020

niebieski
niebieski 🇵🇱

4.8

(24)

226 dokumenty

1 / 98

Toggle sidebar

Ta strona nie jest widoczna w podglądzie

Nie przegap ważnych części!

bg1
Przemysław Koprowski
-skrypt: Matematyka obliczeniowa
Skrypt przygotowany w ramach programu
„Matematyka kodem nowoczesności”
Instytut Matematyki, Uniwersytet Śląski
KATOWICE, 2013
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62

Podgląd częściowego tekstu

Pobierz Matematyka obliczeniowa - skrypt i więcej Opracowania w PDF z Matematyka tylko na Docsity!

Przemysław Koprowski

ç-skrypt: Matematyka obliczeniowa

Skrypt przygotowany w ramach programu „Matematyka kodem nowoczesności”

Instytut Matematyki, Uniwersytet Śląski KATOWICE, 2013

Wprowadzenie do użytkowania programu Sage

1.1. Nauka obsługi

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

1.3. Deklaracje obiektów

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)

1.4. Działania na funkcjach

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

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

A =

 , B =

 ,^ C^ =

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.

1.6. Rachunek różniczkowy i całkowy

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:

  • solve służące do rozwiązywania równań i ich układów,
  • limit do obliczania granic funkcji/ciągów,
  • diff do wyznaczania pochodnej funkcji,
  • integrate do obliczania całki zarówno oznaczanej jak i nieoznaczonej.

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)

  • W dwójce musimy policzyć dwie granice jednostronne, w tym celu do listy argumentów po- lecenia limit dopisujemy odpowiednio dir = ’-’ dla granicy lewostronnej, zaś dir = ’+’ dla prawostronnej.

sage: limit(f(t), t = 2, dir = ’-’)

−∞

sage: limit(f(t), t = 2, dir = ’+’)

  • Jak widać w dwójce mamy do czynienia z asymptotą pionową. Sprawdźmy jeszcze czy funk- cja ma asymptoty ukośne obliczając lim t→±∞

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.