E-book – pobierz wersję na urządzenia przenośne

Transkrypt

E-book – pobierz wersję na urządzenia przenośne
Dlaczego warto nauczać z komputerem?
Rewolucja technologiczna
Na naszych oczach obserwujemy rewolucj˛e technologii informatycznych: tempo zmian jest tak niesłychanie szybkie jak
nigdy w historii rozwoju cywilizacji. Od pojawienia si˛e komputerów osobistych, nast˛epnie internetu i telefonii komórkowej,
aż do najnowszych osiagni˛
˛ eć w postaci smartfonów czy tabletów mija niewiele lat w sensie czasu historycznego.
A co ze szkołami?
Jak to tempo zmian rozwoju technologii przekłada si˛e na zmiany w metodach kształcenia przedmiotów takich jak matematyka czy fizyka? Odpowiedź jest pesymistyczna: przedmioty te sa˛ nauczane w wi˛ekszości szkół metodami tradycyjnymi
"tablica-kreda". Ba, nawet jeśli tablica jest interaktywna, to cz˛esto służy jedynie wyświetlaniu klasycznych treści. Zastosowanie nowoczesnych technologii nierzadko kończy si˛e na ich bardzo powierzchownych aspektach. Cz˛esto komputer bywa
po prostu lepsza˛ maszyna˛ do pisania. Podobne obserwacje można odnieść do kształcenia w szkołach wyższych.
Z naszej praktyki wynika, że stosowanie metod numerycznych, w szczególności wspomaganych wizualizacja˛ niektórych
zagadnień z matematyki i fizyki, pozwala studentom znacznie lepiej zrozumieć analizowane problemy. Należy wyraźnie
podkreślić, że nie negujemy tradycyjnych metod w odniesieniu do nauczania fundamentalnych aspektów teorii matematycznych i fizycznych. Należy jednak sobie odpowiedzieć na pytanie, co może komputer wnieść nowego dla poszerzenia
możliwości poznania danego przedmiotu czy zagadnienia? W wielu przypadkach okazuje si˛e że może i to bardzo wiele.
Problemy z kadra?
˛
Wykorzystywanie komputera do rozwiazywania
˛
problemów na lekcjach należy obecnie do rzadkości z oczywistych
powodów nieprzygotowania kadry dydaktycznej do wyzwań i potrzeb obecnych czasów. Mówiac
˛ wprost nie wiemy jak
powinno si˛e korzystać z komputera by było to nie tylko z pożytkiem dla uczniów, ale i adekwatnie do możliwości, które
komputer daje. Popularnym skojarzeniem do słów: komputer i edukacja jest magiczne słowo e-learning. Jednak e-learning
jest usprawnieniem organizacyjnym nauczania. My si˛egamy gł˛ebiej i ingerujemy w treści i metody nauczania.
Inicjatywa iCSE w Uniwersytecie Ślaskim
˛
Zdarza si˛e, że przeprowadzanie obliczeń przy pomocy przysłowiowego“ołówka i kartki papieru” czy “kredy i tablicy”
oznacza ogromna˛ strat˛e czasu na żmudne i czasochłonne przeliczenia i skutkuje brakiem czasu na dyskusj˛e istoty problemu.
Jest to jedna z przyczyn, która wymusiła na nas realizacj˛e nowatorskiego programu dydaktycznego w Instytucie Fizyki
Uniwersytetu Ślaskiego.
˛
Program ten o nazwie iCSE (nazwa pochodzi od pierwszych liter słów: innovation, Computer,
Science,Education) był inspirowany podobnym programem na uczelniach w Norwegii, gdzie z czasem stał si˛e cz˛eścia˛ strategii rozwoju szkolnictwa wyższego. Innowacyjność iCSE polega na integracji metod komputerowych, w tym wizualizacji,
metod numerycznych, symulacji i analizy danych z kierunkowymi przedmiotami wybranych nauk ścisłych. Opracowaliśmy
prawie 200 tematów, w których wykorzystujemy otwarto-źródłowy (a co za tym idzie: bezpłatny i ogólnodost˛epny)program
komputerowy o nazwie SAGE do analizy i wizualizacji problemów z matematyki, fizyki, chemii i biofizyki. Podnosi to
2
atrakcyjność zaj˛eć dydaktycznych i wzrost umiej˛etności studentów. Uważamy, że podobny sposób nauczania może być
wdrażany wcześniej: w szkole średniej. Ale to wymaga wysiłku zarówno kadry dydaktycznej jak i uczniów. Coś za coś.
Lepsze kwalifikacje dla rynku pracy!
Bez solidnej edukacji komputerowej zintegrowanej z matematyka˛ i przedmiotami ścisłymi młodzi ludzie już obecnie
staja˛ si˛e mało atrakcyjni na rynku pracy. Tradycyjne metody nauczania oddalaja˛ uczniów i studentów od rzeczywistych
problemów, z którymi przyjdzie im si˛e zetknać
˛ w późniejszym życiu zawodowym. Współcześnie zarówno inżynier, projektant, analityk finansowy, aktuariusz jak i pracownik naukowy korzystaja˛ na co dzień z wyników obliczeń numerycznych i
symulacji komputerowych, przeprowadzanych w sposób mniej lub bardziej świadomy, zależnie od konkretnego przypadku
i rodzaju wykorzystywanego oprogramowania.
Nauka i technika XXI wieku, jakkolwiek zbudowana na misternej konstrukcji osiagni˛
˛ eć poprzednich pokoleń, zawiera
elementy jakościowo odmienne. Oznacza to, że można wskazać dziedziny nauki, konieczne w strukturze współczesnych
przedmiotów i studiów, których jednak niemożna skutecznie nauczać bez użycia komputera.
O ksiażce
˛ słów kilka:
Wdrażajac
˛ projekt iCSE w Instytucie Fizyki, powstał pomysł stworzenia materiałów dla nauczycieli i uczniów szkół.
Na stronie projektu:http://icse.us.edu.pl, można znaleźć wiele materiałów, których cz˛eść jest skierowana bezpośrednio
do uczniów. W ramach projektu do końca kwietnia 2013 roku prowadzone były warsztaty w wybranych szkołach. Duże
zainteresowanie ze strony nauczycieli za-skutkowało projektem przygotowania skryptu, który mógłby być punktem wyjścia
do efektywnego użycia komputera w szkołach. Skrypt obejmuje wybrane tematy z matematyki, które sa˛ koncepcyjnie
najprostsze do zrealizowania. Różnorodne zagadnienia z fizyki można znaleźć na stronach internetowych projektu. Autorzy
sa˛ otwarci na wszelkie sugestie i uwagi krytyczne zarówno kadry dydaktycznej jaki i uczniów szkół każdego szczebla
oraz moga˛ służyć pomoca˛ przy wdrażaniu proponowanych metod oraz materiałów do nauczania matematyki i przedmiotów
ścisłych.
dr hab. Marcin Kostur, prof UŚ
prof. dr hab. Jerzy Łuczka
3
4
Spis treści
1
Podstawowe informacje o Sage
1.1
Instalacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
1.1.1
Instalacja w systemie Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.1.2
Instalacja w systemie Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
1.2
Rozpoczynamy prac˛e z programem Sage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
1.3
Obliczenia arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
1.3.1
Podstawowe operatory arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
1.3.2
Dokładność wykonywanych obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
1.3.3
Operatory porównania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
1.3.4
Stałe matematyczne i zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
1.3.5
Zero na poczatku
˛ liczby całkowitej
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
1.3.6
Upraszczanie wyrażeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
1.3.7
Liczby całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
1.3.8
Zapisywanie skomplikowanych wyrażeń
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
1.3.9
Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
Wyrażenia algebraiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
1.4.1
Deklaracja zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
1.4.2
Podstawienia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
1.4.3
Wyrażenia wymierne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
1.4.4
Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
Równania, nierówności i ich układy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
1.5.1
Rozwiazywanie
˛
równań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
1.5.2
Rozwiazywanie
˛
nierówności . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
1.5.3
Rozwiazywanie
˛
układów równań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
1.5.4
Rozwiazywanie
˛
układów nierówności . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
1.5.5
Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
1.4
1.5
2
9
Funkcje
51
2.1
Podstawowe wiadomości o funkcjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
2.1.1
Definicja funkcji, dziedzina, przeciwdziedzina i zbiór wartości . . . . . . . . . . . . . . . . . . . .
52
2.1.2
Wykres funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
5
SPIS TREŚCI
2.1.3
2.2
2.3
2.4
3
5
55
Najcz˛eściej zadawane pytania dotyczace
˛ funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
2.2.1
Zbiór wartości funkcji kwadratowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
2.2.2
Porównywanie ze soba˛ dwóch funkcji. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
Funkcje poznane w szkole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
2.3.1
Funkcja liniowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
2.3.2
Funkcja kwadratowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
2.3.3
Funkcja wymierna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
2.3.4
Funkcja wykładnicza i logarytmiczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
Rachunek prawdopodobieństwa i statystyka
87
3.1
Rachunek prawdopodobieństwa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
3.2
Statystyka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.3
4
Określanie dziedziny funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1
Średnia arytmetyczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.2.2
Odchylenie standardowe i wariancja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.2.3
Średnia geometryczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.2.4
Mediana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.2.5
Dominanta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
3.2.6
Grupowanie i prezentacja danych statystycznych . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Stereometria
117
4.1
Bryły platońskie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
4.2
Graniastosłupy i ostrosłupy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
4.3
Bryły obrotowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
4.4
Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Dodatek A
143
6
Wst˛ep
Na wst˛epie chciałbym zacytować słowa znanego polskiego matematyka, profesora Hugo Dyonizego Steinhausa
(1887-1972):
1
Matematyka podobna jest do wieży, której fundamenty położono przed wiekami, a do której dobudowuje si˛e
coraz wyższe pi˛etra. Aby zobaczyć post˛ep budowy, trzeba iść na pi˛etro najwyższe, a schody sa˛ strome i składaja˛
si˛e z licznych stopni. Rzecza˛ popularyzatora jest zabrać słuchacza do windy, w której nie zobaczy ani pośrednich
pi˛eter, ani praca˛ wieków ozdobionych komnat, ale przekona si˛e, że gmach jest wysoki i wcia˛ż rośnie.
Ksia˛żka˛ ta˛ chciałbym przede wszystkim zach˛ecić czytelnika do nauki matematyki ale też pokazać, że jej nauka może być
łatwa i przyjemna. Dziś w dobie komputerów jest to możliwe, gdyż wiele zagadnień matematycznych można bardzo łatwo
zilustrować z pomoca˛ odpowiednich programów komputerowych. Z pewnościa˛ każdy z czytelników korzystał kiedyś z
kalkulatora. Jest to najprostsze narz˛edzie potrafiace
˛ szybko wykonywać obliczenia arytmetyczne. Bardziej rozbudowane
posiadaja˛ dodatkowe funkcje liczace
˛ na przykład pot˛egi, logarytmy czy funkcje trygonometryczne. Jednakże dzisiejsze
narz˛edzia matematyczne posiadaja˛ dużo wi˛eksze możliwości. Niestety wi˛ekszość z tych narz˛edzi jest płatna i sporo kosztuje.
W ksia˛żce tej b˛ed˛e korzystał z programu matematycznego o nazwie Sage2 , który jest całkowicie darmowy, a możliwościami
dorównuje, jeśli nie przewyższa, komercyjnym rozwiazaniom.
˛
Jest to cały pakiet przeróżnych narz˛edzi do wykonywania
wszelkiego rodzaju obliczeń. Możemy wykonywać obliczenia numeryczne – takie jak na kalkulatorze (nazywamy je
arytmetycznymi), ale możemy też wykonywać obliczenia symboliczne (na wyrażeniach algebraicznych, tzn. takich, które
oprócz liczb i operatorów zawieraja˛ też zmienne czy też parametry). Dzi˛eki temu, możemy definiować funkcje, równania,
układy równań, czy dowolne wyrażenia algebraiczne i na nich wykonywać obliczenia. Mamy też do dyspozycji mnóstwo
narz˛edzi graficznych do rysowania wykresów funkcji, figur geometrycznych na płaszczyźnie i w przestrzeni.
Podstawowe informacje na temat instalacji oraz sposobów korzystania z programu Sage zawarłem w rozdziale pierwszym.
Opisuj˛e w nim również jak wykonywać obliczenia arytmetyczne, algebraiczne, jak rozwiazywać
˛
równania, nierówności czy
ich układy.
W rozdziale drugim pokazuj˛e jak z pomoca˛ programu łatwo jest badać własności funkcji jednej zmiennej. Sage pozwala
definiować takie funkcje w ten sam naturalny sposób jak robicie to zwykle na lekcjach matematyki, tzn. za pomoca˛ wzoru
f (x) = wyrazenie, gdzie wyrazenie może być dowolnym wyrażeniem algebraicznym zawierajacym
˛
pewna˛ zmienna.˛ Na
przykład zapis f (x) = x + 5 wystarczy aby narysować wykres tej funkcji, znaleźć jej miejsca zerowe, obliczać wartości w
dowolnym punkcie, itd.
1
Jest to cyctat z artykułu pt. „Czem jest matematyka i na czem polega jej post˛ep?”, który został wygłoszony przez profesora Hugo Dyonizego
Steinhausa w trakcie serii popularnych odczytów matematycznych, wygłoszonych zima˛ 1926-1927 roku przez profesorów Uniwersytetu i Politechniki
we Lwowie.
2
http://www.sagemath.org/
7
SPIS TREŚCI
Trzeci rozdział poświ˛econy jest rachunkowi prawdopodobieństwa i statystyce matematycznej. Jak wiemy, podczas rozwia˛
zywania zadań z rachunku prawdopodobieństwa cz˛esto musimy wykonywać wiele obliczeń kombinatorycznych. Program
Sage posiada cała˛ gam˛e gotowych funkcji kombinatorycznych, mi˛edzy innymi do zliczania kombinacji czy wariacji. Poza
tym mamy możliwość definiowania zbiorów. Na podstawie zdefiniowanych zbiorów można definiować rodziny ich podzbiorów. Podobnie można tworzyć ciagi
˛ oraz zbiory podciagów
˛
o określonej długości. To wszystko powoduje, że można
w bardzo ciekawy i prosty sposób zilustrować nawet dość skomplikowane zadanie kombinatoryczne.
W rozdziale czwartym pokazuj˛e, jak łatwo uczyć si˛e stereometrii majac
˛ takie narz˛edzie jak Sage. Stereometria jest działem
geometrii, która w szczególny sposób wymaga dobrej wyobraźni. Jak si˛e przekonacie, można bardzo łatwo rysować bryły w
przestrzeni trójwymiarowej, w dodatku mamy możliwość podgladania
˛
tych brył z różnych perspektyw, poprzez obracanie
ich za pomoca˛ myszy komputerowej.
Do ksia˛żki dołaczony
˛
został również interaktywny arkusz programu Sage, w którym zawarte sa˛ mi˛edzy innymi gotowe do
użycia i przetestowania przykłady z ksia˛żki.
8
Rozdział 1
Podstawowe informacje o Sage
Sage1 jest oprogramowaniem matematycznym składajacym
˛
si˛e z bardzo dużej liczby narz˛edzi przydatnych w wielu dziedzinach matematyki. Możemy z jego pomoca˛ wykonywać zarówno obliczenia numeryczne jak i symboliczne. Z łatwościa˛
rozwia˛żemy wszelkiego rodzaju równania, nierówności czy układy równań. Szybko wykona za nas wszelkie obliczenia
na liczbach, obliczenia kombinatoryczne czy statystyczne. Pomysłodawca˛ i liderem projektu Sage jest William Stein, matematyk z Uniwersytetu Waszyngtońskiego. Wcześniej projekt nazywał si˛e SAGE, System for Algebra and Geometry
Experimentation2 . Pierwsza wersja programu została opublikowana w lutym 2005 roku. Był i jest do dziś rozpowszechniany jako darmowe oprogramowanie oparte na licencji GNU General Public License 3 . Mamy wi˛ec wolny dost˛ep nie tylko
do samego programu ale też do jego źródeł.
Sage oparty jest na j˛ezyku programowania Python4 , przy pomocy którego integruje ze soba˛ wiele znanych darmowych
bibliotek matematycznych. Niektóre z nich przedstawia tabela:
Biblioteki
Przeznaczenie
GAP, Maxima, Singular
Algebra
Singular
Geometria algebraiczna
MPIR, MPFR, MPFI, NTL, mpmath
Obliczenia arytmetyczne dowolnej precyzji
Maxima, SymPy, GiNaC
Rachunek różniczkowy
Symmetrica, Sage-Combinat
Kombinatoryka
GSL, SciPy, NumPy, ATLAS
Obliczenia numeryczne
PARI/GP, FLINT, NTL
Teoria liczb
R, SciPy
Obliczenia statystyczne
Poza tym zawiera wiele bibliotek własnych, zawierajacych
˛
narz˛edzia, których nie można znaleźć w dost˛epnych darmowych
bibliotekach badź
˛ też okazało si˛e, że można utworzyć ich odpowiedniki lepsze i szybsze. Dzi˛eki temu wszystkiemu jest on
bardzo bogata˛ alternatywa˛ dla takich narz˛edzi komercyjnych jak Maple, Mathematica, czy MATLAB.
1
http://www.sagemath.org
Stein, William. SAGE: A Computer System for Algebra and Geometry Experimentation. Retrieved 30 March 2012.
3
http://pl.wikipedia.org/wiki/GNU_General_Public_License
4
http://pl.wikipedia.org/wiki/Python
2
9
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.1
Instalacja
Jeśli ktoś nie chce badź
˛ nie może zainstalować programu Sage na swoim komputerze, to może skorzystać z udost˛epnionego
on-line notatnika Sage. Znajduje si˛e on na stronie http://www.sagenb.org. Aby móc tworzyć własne arkusze, edytować je i zapisywać, musimy utworzyć konto użytkownika. Autorzy strony nie umieścili typowego formularza rejestracyjnego
nowych użytkowników, w zamian możemy skorzystać z już istniejacego
˛
konta, które posiadamy u innego usługodawcy, np.
Google, Yahoo, OpenId, itd. Ich list˛e zobaczymy po wejściu na stron˛e po prawej stronie w postaci odpowiednich ikon.
Po klikni˛eciu na wybrana˛ ikon˛e – ja osobiście skorzystałem z konta Google – zobaczymy okno logowania.
10
1.1. INSTALACJA
Po zalogowaniu możemy już w pełni korzystać z notatnika Sage.
Inna metoda korzystania z programu Sage, to instalacja na własnym komputerze. Mamy dwie wersje instalacyjne do wyboru,
jedna jest wersja˛ gotowa˛ do użycia, tzw. prekompilowana, natomiast druga wymaga samodzielnej kompilacji źródeł. Ja
opisz˛e tylko pierwsza˛ wersj˛e, gdyż jest prostsza. Jeśli ktoś chciałby wypróbować t˛e druga,˛ to pomocne informacje znajdzie
na przykład pod adresem
http://www.sagemath.org/doc/installation/source.html.
Wszystkie potrzebne pliki pobierzemy ze strony
http://www.sagemath.org/download.html
Po wejściu na nia,˛ wybieramy serwer, z którego b˛edziemy pobierać pliki (najlepiej jak najbliższy naszej lokalizacji), np.
ftp://ftp.fu-berlin.de/unix/misc/sage/index.html
po czym musimy wybrać odpowiednia˛ wersj˛e, w zależności od systemu, na którym pracujemy, np. Windows, Linux, Mac
OS X, itd. Po wybraniu rozpocznie si˛e pobieranie pliku.
1.1.1
Instalacja w systemie Linux
Jeśli pracujemy w systemie linux, to po pobraniu odpowiedniego pliku, np.
sage-5.12-linux-64bit-ubuntu_12.04.3_lts-x86_64-Linux.tar.lzma
wystarczy go rozpakować do dowolnego katalogu, do którego mamy prawa zapisu. W tym celu otwieramy terminal,
wchodzimy do katalogu gdzie zapisaliśmy pobrany plik i wydajemy polecenia:
tar --lzma -xvf
sage-5.12-linux-64bit-ubuntu_12.04.3_lts-x86_64-Linux.tar.lzma
mv sage-5.12-linux-64bit-ubuntu_12.04.3_lts-x86_64-Linux
/ścieżka/do/katalogu/sage-5.12
11
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Możemy już korzystać z programu wydajac
˛ polecenia:
cd /ścieżka/do/katalogu/sage-5.12
./sage
Powinniśmy zobaczyć interaktywny wiersz poleceń Sage.
Właściwie to wystarczy, aby zaczać
˛ prac˛e z programem. Jednak warto wykonać jeszcze par˛e kroków, dzi˛eki
czemu b˛edzie można uruchamiać go z dowolnego miejsca na dysku. W tym celu należy skopiować plik
/ cieka /do/katalogu/sage-5.12/sage do katalogu, w którym zwykle instalowane sa˛ programy, np.
/usr/local/bin/. Aby tego dokonać, wydajemy polecenie
cp /ścieżka/do/katalogu/sage-5.12/sage /usr/local/bin/
Nast˛epnie otwieramy plik /usr/local/bin/sage w swoim ulubionym edytorze tekstu i zmieniamy wartość zmiennej
SAGE_ROOT na ścieżk˛e do katalogu, gdzie rozpakowaliśmy program, tzn.
SAGE_ROOT=/ścieżka/do/katalogu/sage-5.12
Dzi˛eki tym zabiegom, z dowolnego miejsca na dysku, możemy wydać polecenie sage (bez kropki i slasha) i mamy
uruchomiony program. Możemy już korzystać z wszelkich dobrodziejstw, które nam dostarcza Sage.
Zaraz po uruchomieniu interaktywnego wiersza poleceń na ekranie pojawi nam si˛e kilka informacji, m. in. wersja programu
oraz podpowiedź, że poleceniem notebook() uruchomimy interfejs notatnika. Polecenia wpisujemy po napisie sage:.
12
1.1. INSTALACJA
Aby zobaczyć wynik polecenia, wciskamy klawisz Enter. Jak widzimy, polecenie notebook() uruchamia tzw. notatnik
programu Sage. Można go też uruchomić wydajac
˛ bezpośrednio w terminalu systemowym polecenie sage -n.
Z notatnika możemy korzystać za pomoca˛ dowolnej przegladarki
˛
internetowej. Po jej uruchomieniu wystarczy w polu adresu
wpisać adres http://localhost:8080
Domyślnie mamy do dyspozycji konto użytkownika admin z hasłem sage. Jeśli próba zalogowania si˛e nie powiedzie
(np. podamy zły login lub hasło), to pod przyciskiem
Sign in pojawi si˛e link Sign up for a new Sage Notebook account.
Po klikni˛eciu na niego otworzy si˛e formularz, przy pomocy którego b˛edzie można utworzyć konto nowego użytkownika.
13
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Po zalogowaniu zobaczymy notatnik, identyczny jaki widzieliśmy po wejściu na stron˛e http://sagenb.org.
14
1.1. INSTALACJA
1.1.2
Instalacja w systemie Windows
Jeśli pracujecie na systemie operacyjnym Microsoft Windows, przed instalacja˛ programu Sage musicie zainstalować dodatkowy program, który stworzy odpowiednie środowisko dla Sage-a. Twórcy programu zalecaja˛ VirtualBox, który możemy
pobrać ze strony . Wybieramy wersj˛e dla Windows i instalujemy.
Nast˛epnie należy pobrać plik aplikacji. Jeżeli nie b˛edziemy korzystać z opcji „multiuser server” powinna wystarczyć nam
wersja Small Sage Virtual Machine dost˛epna do pobrania bezpośrednio na stronie
http://boxen.math.washington.edu/home/emil/doc/html/en/SAGE-DOWNLOAD.html
Po zakończeniu pobierania aplikacji uruchamiamy program VirtualBox, nast˛epnie wybieramy z menu File opcj˛e Import
Appliance. Otwarte zostanie okno Appliance Import Wizard, na którym klikamy w przycisk Choose i wskazujemy ścieżk˛e
do pliku sage-lite-vm-a1.ova, który wcześniej pobraliśmy. Akceptujemy wszystkie domyślne ustawienia i klikamy
na Finish . Import odpowiednich danych może potrwać kilka minut.
15
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Możemy teraz uruchomić nasza˛ wirtualna˛ maszyn˛e, zaznaczajac
˛ ja˛ na liście w lewym oknie i klikajac
˛ na przycisk Start .
16
1.1. INSTALACJA
W razie potrzeby cały proces instalacji został szczegółowo opisany na stronie
http://wiki.sagemath.org/SageApplianceInstallation.
Dla osób zainteresowanych uruchomieniem aplikacji Saga w systemie operacyjnym Windows bezpośrednio z bootowalnej
płyty CD na stronie
http://boxen.math.washington.edu/home/emil/doc/html/en/SAGE-DOWNLOAD.html
znajdziemy
obraz
dysku „Live CD” w formacie iso obsługiwanym przez wi˛ekszość programów służacych
˛
do wykonywania kopii płyt
CD/DVD.
17
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.2
Rozpoczynamy prac˛e z programem Sage
Z opisu instalacji dowiedzieliście si˛e już jak uruchomić interaktywny wiersz poleceń oraz notatnik programu Sage.
Myśl˛e, że najch˛etniej wybierana˛ forma˛ pracy z programem b˛edzie notatnik, dlatego na nim si˛e teraz skupimy. Po klikni˛eciu
na link New Worksheet otworzy si˛e okienko, w które wpisujemy nazw˛e tworzonego arkusza. Po wpisaniu nazwy klikamy na
przycisk Rename .
Arkusz składa si˛e z komórek, w które wpisujemy polecenia. Polecenia w notatniku i w interaktywnym wierszu poleceń
sa˛ takie same. Dodatkowo w notatniku możemy wprowadzać kilka poleceń w jednej komórce. Aby wykonać obliczenia z
danej komórki naciskamy przycisk Evaluate lub wciskamy Shift+Enter. Pami˛etajmy, że wyświetlany jest zawsze wynik
ostatniego polecenia w komórce.
Jeśli chcielibyśmy zobaczyć wynik wcześniejszej instrukcji, to możemy użyć polecenia print.
Chciałbym jeszcze na samym poczatku
˛ powiedzieć o kilku nawykach, które warto sobie wyrobić podczas pracy z notatnikiem.
18
1.2. ROZPOCZYNAMY PRACE˛ Z PROGRAMEM SAGE
Po pierwsze, możemy wstawiać do komórek komentarze do naszych poleceń.
Widzimy, że komentarze poprzedzamy symbolem #. Warto je dodawać, gdyż okaża˛ si˛e bardzo cenne, kiedy b˛edziemy chcieli
skorzystać z naszego arkusza po kilku miesiacach
˛
lub latach.
Możemy też dodawać do arkusza opisy mi˛edzy komórkami. W tym celu przytrzymujemy klawisz Shift i klikamy w miejsce
na arkuszu, w które chcemy wstawić opis.
Otworzy si˛e okienko, troch˛e przypominajace
˛ interfejs typowego programu do edycji tekstu. Jak widzimy, można edytować
tekst w dowolny sposób, pogrubiać, zmieniać kolor czcionki, wstawiać listy, tabele, itd. Po wprowadzeniu tekstu, dokonujemy zapisu przyciskiem Save changes .
Kolejna˛ ważna˛ rzecza,˛ o której należy wiedzieć, to uzyskiwanie pomocy na temat poleceń. Czasami zdarza si˛e, że znamy
nazw˛e polecenia, ale nie pami˛etamy jak dokładnie z niego skorzystać albo nie pami˛etamy pewnych opcji, z których
chcielibyśmy skorzystać. Myśl˛e, że powodów może być wiele.
19
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Aby uzyskać informacje na temat określonego polecenia, np. sqrt do wolnej komórki arkusza, wpisujemy
Zatem wystarczy wpisać polecenie i po nim znak zapytania.
Jeśli chcemy wstawić nowa˛ komórk˛e pomi˛edzy dwie już istniejace,
˛ najeżdżamy kursorem na puste pole mi˛edzy tymi
komórkami aż pojawi si˛e niebieski poziomy pasek i klikamy na niego.
Jeśli chcemy zakończyć prac˛e z notatnikiem najlepiej jest kliknać
˛ na przycisk Save & quit dzi˛eki czemu dokument przed
zamkni˛eciem zostanie zapisany. Jeśli ktoś nie chce zapisywać zmian, to może kliknać
˛ w przycisk Discard & quit .
20
1.2. ROZPOCZYNAMY PRACE˛ Z PROGRAMEM SAGE
Po ponownym uruchomieniu notatnika programu Sage i zalogowaniu si˛e na stronie http://localhost:8080 zobaczymy list˛e wszystkich swoich arkuszy.
Aby otworzyć któryś z nich wystarczy kliknać
˛ na jego nazw˛e. Jak widzimy możemy w tym miejscu usunać
˛ arkusz,
zatrzymać jeśli został wcześniej uruchomiony, czy zapisać na dysku po klikni˛eciu przycisku Download .
Opisz˛e teraz jak wykonywać różnego rodzaju obliczenia zarówno numeryczne jak i symboliczne, jak rozwiazywać
˛
równania
i nierówności oraz wiele innych zagadnień. Przykłady poleceń Sage b˛ed˛e poprzedzał słowem sage: , wyniki natomiast
słowem wynik: , np.
sage: 2^123
wynik: 10633823966279326983230456482242756608
Wszystkie opisywane polecenia można wykonywać zarówno w notatniku jak i w interaktywnym wierszu poleceń.
21
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.3
Obliczenia arytmetyczne
1.3.1
Podstawowe operatory arytmetyczne
Najprostsze wykorzystanie programu, to wykonywanie obliczeń podobnych do tych, które znacie z kalkulatorów. Najcz˛e˛
ściej wykonujemy na nich podstawowe operacje arytmetyczne +, -, ·, :. W Sage-u wykonujemy je podobnie, pami˛etajac
tylko, że „*” oznacza znak mnożenia, a „/” znak dzielenia. Wykonajmy kilka obliczeń.
sage: 7 + 5 - 4 * 2 / 5
wynik:
52
5
Oprócz tych czterech operatorów, mamy do dyspozycji duża˛ ilość innych funkcji matematycznych odpowiadajacych
˛
pot˛egowaniu, pierwiastkowaniu, logarytmowaniu, funkcje trygonometryczne, itd.
sage: 3^4
wynik: 81
Widzimy, że symbol „^” oznacza pot˛eg˛e, tzn. 3^4 = 34 . Sage potrafi pracować na bardzo dużych liczbach i do tego robi
to bardzo szybko. Mówiac
˛ o bardzo dużych liczbach mam na myśli liczby składajace
˛ si˛e z tysi˛ecy a nawet milionów cyfr.
Przyjrzyjmy si˛e uważnie obrazkowi poniżej.
Widzimy tam, że Sage wykonał pot˛egowanie
1234567891234567
w całkowitym czasie 7.01 s, a wynik jest liczba˛ składajac
˛ a˛ si˛e z 9989518 cyfr, czyli prawie 10 milionów cyfr. Wynik
ten uzyskałem na moim laptopie, który nie jest bardzo szybkim komputerem.
Aby obliczyć pierwiastek stopnia drugiego, mamy do dyspozycji funkcj˛e sqrt.
sage: sqrt(121)
wynik: 11
Zatem sqrt(121) =
√
121 = 11.
Nie ma zaimplementowanych funkcji obliczajacych
˛
pierwiastki innych stopni. Jednakże nie sa˛ nam potrzebne, gdyż mamy
operator pot˛egowania „^”. Wiemy przecież, że pierwiastek stopnia m, to pot˛ega
√
m
1
a = am .
22
1
,
m
tzn.
1.3. OBLICZENIA ARYTMETYCZNE
Obliczmy na przykład wartość nast˛epujacego
˛
wyrażenia:
q
5
√
72 + 3 12,
wystarczy napisać
sage: (7^2 + 3 * sqrt(12))^(1/5)
wynik:
√
15
6 3 + 49
Obliczmy teraz kilka logarytmów. Mamy do dyspozycji funkcj˛e log.
sage: print log(16,2)
sage: print log(100)
wynik: 4
wynik: 4.605
Zatem log(16,2) = log2 16 = 4. Pierwszy parametr funkcji log, to liczba logarytmowana, a drugi to podstawa
logarytmu. Jeśli nie podamy drugiego parametru, to zostanie obliczony logarytm naturalny danej liczby.
Poza wymienionymi wyżej działaniami, mamy do dyspozycji jeszcze wiele innych. Na jeden z nich chciałbym zwrócić
szczególna˛ uwag˛e. Jest on zdefiniowany za pomoca˛ symbolu procenta %. Zobaczmy jak działa.
sage: 7 % 5
wynik: 2
sage: 7 == 5 * 1 + 2
wynik: True
sage: 12 % 3
wynik: 0
sage: 12 == 3 * 4 + 0
wynik: True
Zatem a % b zwraca reszt˛e z dzielenia a przez b, wg. wzoru
a % b = r oznacza, że a = b · n + r dla pewnej liczby całkowitej n
oraz 0 ≤ r < b.
Otrzymaliśmy tym samym operator, przy pomocy którego możemy sprawdzić czy dana liczba całkowita jest podzielna przez
inna˛ liczb˛e całkowita,˛ np.
23
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
sage: (7237626 % 5543) == 0
wynik: False
Rozwia˛żmy nast˛epujace
˛ zadanie:
Przykład 1. Ile jest wszystkich liczb naturalnych trzycyfrowych podzielnych przez 73?
Utwórzmy list˛e wszystkich takich liczb.
sage: lista = []
sage: for n in range(100, 1000):
if n % 73 == 0:
lista = lista + [ n ]
sage: lista
wynik: [146, 219, 292, 365, 438, 511, 584, 657, 730, 803, 876, 949]
Przygotowaliśmy na poczatku
˛ pusta˛ list˛e. Sage obejmuje elementy listy nawiasami kwadratowymi
[a1 , a2 , . . . , ak ].
Poleceniem for n in range(100, 1000): przechodzimy zmienna˛ n po wszystkich liczbach z zakresu od
100 do 999 włacznie
˛
i wykonujemy instrukcje zapisane w kolejnych wierszach. Instrukcja if n % 73 == 0:
sprawdza czy liczba n jest podzielna przez 73. Jeśli tak, to wykonywana jest instrukcja w kolejnym wierszu, tzn.
lista = lista + [ n ], która dodaje liczb˛e n do naszej listy.
Aby odpowiedzieć na pytanie postawione w zadaniu, wystarczy policzyć elementy naszej listy albo wydać polecenie:
sage: len(lista)
wynik: 12
1.3.2
Dokładność wykonywanych obliczeń
Sage zwykle stara si˛e zwracać jak najdokładniejsza˛ wartość wyników obliczeń. Spójrzmy na prosty przykład.
sage: sqrt(53)
√
wynik:
53
Nie otrzymaliśmy wyniku w postaci ułamka dziesi˛etnego, gdyż wiemy, że każdy taki ułamek b˛edzie tylko zaokragleniem
˛
tej liczby do pewnej liczby miejsc po przecinku. Tak si˛e dzieje z każda˛ liczba˛ niewymierna.˛ Jeśli jednak zależy nam na
przybliżonym wyniku z dokładnościa˛ do określonej liczby miejsc po przecinku, to możemy skorzystać z metody N.
sage: N(sqrt(53))
24
1.3. OBLICZENIA ARYTMETYCZNE
wynik: 7.28010988928052
sage: N(sqrt(53), digits=3)
wynik: 7.28
sage: N(sqrt(53), digits=60)
wynik: 7.28010988928051827109730249152703279377766968257647743837818
Widzimy, że możemy z łatwościa˛ sterować dokładnościa˛ zwracanych wyników za pomoca˛ opcji digits metody N. Ustala
ona ilość cyfr dla całej liczby, dlatego należy obchodzić si˛e ta˛ opcja˛ ostrożnie. Przyjrzyjmy si˛e przykładowi:
sage: N(sqrt(1323232323232), digits=5)
wynik: 1.1503 × 106
sage: (1.1503 * 10^6)^2
wynik: 1.3232 × 1012
sage: N(sqrt(1323232323232))
wynik: 1.15031835733939 × 106
Wynik pierwszego pierwiastkowania jest, jak widzimy, obarczony dużym bł˛edem.
1323232323232 > 1.1503 × 106
2
= 1.3232 × 1012 = 1323200000000.
W drugim przypadku mamy już dużo lepiej
1.15031835733939 × 106
2
= 1.32323232323200 × 1012 = 1323232323232.
Jeśli liczba jest mniejsza od jedności, to metoda N liczb˛e cyfr zlicza od przecinka, tzn.
sage: (2/3).N(digits=3)
wynik: 0.667
Powiedziałem wyżej „przecinka”, jednak widzimy, że cz˛eść ułamkowa˛ liczby rzeczywistej oddzielamy kropka.˛
1.3.3
Operatory porównania
Możemy z łatwościa˛ porównywać ze soba˛ liczby za pomoca˛ operatorów
==, >, <, >=, <=.
sage: 12 > 16
25
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
wynik: False
sage: 0.6 == 3/5
wynik: True
sage: 2^8 <= 8^2
wynik: False
Jeżeli chcemy porównać wartości liczbowe wyrażeń zawierajacych,
˛
oprócz standardowych operatorów dodawania, mnożenia, itd. również funkcje, np. sqrt czy log, to możemy wtedy użyć instrukcji N.
sage: sqrt(3) == 3^(1/2)
√
√
wynik:
3= 3
sage: sqrt(3).N() == 3^(1/2).N()
wynik: True
Widzimy, że w pierwszym przypadku wyświetlona została po prostu równość, a dopiero po użyciu metody N, porównane
zostały wartości liczbowe wyrażeń. Metoda N musi zostać dodana do obydwu stron, gdyż w przeciwnym przypadku, gdybym
dajmy na to użył tylko do lewej strony
sage: sqrt(3).N() == 3^(1/2)
√
wynik: 1.73205080756888 = 3
wówczas widzimy, że po lewej mamy wartość liczbowa,˛ która jest tylko pewnym przybliżeniem pierwiastka z trzech, a z
prawej wartość symboliczna,˛ która jest dokładna.
1.3.4
Stałe matematyczne i zmienne
W obliczeniach możemy wykorzystywać też stałe matematyczne. Mamy na przykład zdefiniowana˛ liczb˛e π .
sage: pi
wynik: π
Otrzymaliśmy dokładny wynik. Jeśli potrzebujemy wartości numerycznej, to możemy użyć funkcji N.
sage: N(pi, digits=3)
wynik: 3.14
sage: N(pi, digits=60)
wynik: 3.14159265358979323846264338327950288419716939937510582097494
26
1.3. OBLICZENIA ARYTMETYCZNE
Obliczmy wartość funkcji sinus, dla kata
˛ 600 .
sage: sin(pi/3)
wynik:
1√
3
2
Możemy definiować własne zmienne i przypisywać im wartości.
sage: x = 3/5
W powyższym przykładzie zdefiniowałem zmienna˛ x i przypisałem jej wartość 35 . Przypisania dokonujemy operatorem „=”.
Zauważmy, że w wyniku tego polecenia Sage nie wyświetlił żadnego wyniku. Aby go zobaczyć należy wydać jeszcze jedno
polecenie zawierajace
˛ tylko nazw˛e zmiennej lub użyć funkcji print, tzn.
sage: x
wynik:
3
5
Funkcja print wyświetla zawsze wartość zmiennej w postaci tzw. wierszowej, czyli takiej, jaka˛ wprowadzamy do komórki
arkusza czy w wierszu poleceń.
sage: print x
wynik: 3/5
sage: x.N(digits=2)
wynik: 0.60
Widzimy, że instrukcja zawierajaca
˛ tylko nazw˛e zmiennej wyświetla wynik w postaci odpowiednio sformatowanej (w tym
przypadku w postaci ułamka zwykłego). Na zdefiniowanych zmiennych możemy wykonywać obliczenia tak, jak na liczbach.
sage: x = 5; y = 5/2; z = pi/6
sage: wyn = x / y * cos(z)
sage: wyn
√
wynik:
3
Jak widzimy można w jednym wierszu wydać wiele instrukcji, ale każda musi być oddzielona średnikiem. Można też
nadpisywać wartości zmiennych (wcześniej jak pami˛etamy x było równe 35 ) czy też przypisywać im wyniki innych obliczeń.
27
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.3.5
Zero na poczatku
˛
liczby całkowitej
Wiemy, że w systemie dziesi˛etnym liczby 12 i 012 sa˛ równe. Jednak Sage takie liczby traktuje zupełnie inaczej.
sage: 12
wynik: 12
sage: 012
wynik: 10
Otóż, jeśli na poczatku
˛ liczby całkowitej składajacej
˛ si˛e z cyfr ze zbioru {0, 1, 2, 3, 4, 5, 6, 7} stoi zero, to Sage traktuje ja˛
jako liczb˛e zapisana˛ w systemie ósemkowym, tzn. systemie pozycyjnym o podstawie 8. Zatem liczba 012 to 2·80 +1·81 = 10.
sage: 0123
wynik: 83
3 · 80 + 2 · 81 + 1 · 82 = 3 + 16 + 64 = 83.
Jeśli w zapisie liczby pojawi si˛e kropka, to Sage potraktuje t˛e liczb˛e jako dziesi˛etna.˛
sage: 01.23
wynik: 1.23000000000000
Jeśli wpisalibyśmy przez przypadek
sage: 029
to dostaniemy komunikat o bł˛edzie,
gdyż liczby w systemie ósemkowym moga˛ si˛e składać tylko z wymienionych wyżej cyfr od 0 do 7.
28
1.3. OBLICZENIA ARYTMETYCZNE
1.3.6
Upraszczanie wyrażeń
Rozpatrzmy teraz nast˛epujacy
˛ przykład:
sage: x = (log(8,sqrt(2))+log(4,1/2))/log(sqrt(8),2)
sage: x
log(4)
log( 1
2)
wynik:
+
log(8)
√
log( 2)
log 2
log (2)
√ 2
Możemy wyrażenie to uprościć za pomoca˛ metody simplify.
sage: x.simplify()
wynik:
4 log (8) 2 log (4)
−
3 log (2) 3 log (2)
Pewnie zauważyliście teraz, że to wyrażenie można jeszcze bardziej uprościć. Użyjmy wi˛ec innej metody o nazwie
simplify_radical.
sage: x.simplify_radical()
wynik:
8
3
Tym razem widzimy, że otrzymaliśmy satysfakcjonujacy
˛ wynik. Oczywiście mogliśmy użyć poznanej już metody N, aby
uzyskać wartość numeryczna˛ tego wyrażenia, jednakże nie byłaby to wartość dokładna.
sage: x.N()
wynik: 2.66666666666666
Do wyrażeń zawierajacych
˛
funkcje trygonometryczne warto stosować polecenie simplify_trig().
sage: w = (sin(pi/7))^2+(cos(pi/7))^2)
sage: w.simplify_trig()
wynik: 1
29
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.3.7
Liczby całkowite
Sage posiada też wiele funkcji przydatnych w teorii liczb, czyli w dziale matematyki zajmujacym
˛
si˛e badaniem liczb
całkowitych. Wiecie zapewne, co to sa˛ liczby pierwsze czy złożone. Możemy na przykład łatwo sprawdzić, czy liczba
12324241 jest pierwsza. Wystarczy wydać polecenie:
sage: is_prime(12324241)
wynik: False
Otrzymaliśmy w wyniku informacj˛e False, czyli „Fałsz”, zatem jest to liczba złożona. Znajdźmy wi˛ec liczb˛e pierwsza˛
wyst˛epujac
˛ a˛ zaraz po niej.
sage: next_prime(12324241)
wynik: 12324253
sage: 12324253 in Primes()
wynik: True
Wyświetlmy teraz 20 poczatkowych
˛
kolejnych liczb pierwszych.
sage: primes_first_n(20)
wynik: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]
Albo zobaczmy wszystkie liczby pierwsze od 1 do 100.
sage: list(primes(1, 100))
wynik: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Wyświetlmy dwunasta˛ oraz dwudziesta˛ pierwsza˛ liczb˛e pierwsza.˛
sage: nth_prime(12)
wynik: 37
sage: nth_prime(21)
wynik: 73
W wielu zadaniach dotyczacych
˛
liczb całkowitych musimy rozkładać dana˛ liczb˛e na czynniki pierwsze, np. podczas
wyłaczania
˛
całości przed pierwiastek. Do tego celu służy funkcja factor.
sage: factor(30030)
wynik: 2 · 3 · 5 · 7 · 11 · 13
30
1.3. OBLICZENIA ARYTMETYCZNE
Rozwia˛żmy nast˛epujace
˛ zadanie.
Przykład 2. Wyłacz
˛ cz˛eść całkowita˛ z pierwiastka:
√
343035.
Wiemy, że do rozwiazania
˛
tego zadania dobrze jest znać rozkład liczby spod pierwiastka na czynniki pierwsze. Zobaczmy
jak on wyglada.
˛
sage: factor(343035)
wynik: 34 · 5 · 7 · 112
Zatem
√
343035 =
√
34 · 5 · 7 · 112 =
√
34 ·
√
5·7·
√
√
112 = 99 35.
Sage domyślnie wyłacza
˛ cz˛eści całkowite spod pierwiastka, tzn.
sage: sqrt(343035)
√
wynik: 99 35
1.3.8
Zapisywanie skomplikowanych wyrażeń
Wyrażenia składajace
˛ si˛e z niewielkiej ilości działań zwykle zapisujemy jako jedna˛ instrukcj˛e. Aby rozwiazać
˛
nast˛epujace
˛
proste zadanie:
Przykład 3. Zapisz wyrażenie arytmetyczne w jak najprostszej postaci.
√
12 + 18
33 − 7
wystarczy wydać polecenie:
sage: w1 = (12 + sqrt(18)) / (3^3 - 7); w1
wynik:
3 √
3
2+
20
5
Myśl˛e, że otrzymana postać jest wystarczajaco
˛ prosta. Weźmy teraz troch˛e bardziej skomplikowane wyrażenie.
Przykład 4. Doprowadź wyrażenie do najprostszej postaci.

4·
12 +
3
100
√
2
18
33 − 7
√

3
2+4
Zauważmy, iż w liczniku w nawiasie, znajduje si˛e wyrażenie z poprzedniego przykładu, które w programie Sage nazwaliśmy w1. Możemy wi˛ec wykorzystać go w definicji nowego wyrażenia co z pewnościa˛ uprości nam zapis.
31
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
sage: w2 = 4*w1^2 / (3/100 * (sqrt(2) + 4)^3); w2
wynik: √
3
2+4
Usuńmy jeszcze niewymierność z mianownika.
sage: w2 = (w2 / (sqrt(2)-4)).simplify_radical(); w2
wynik: −
3
14
Pomnożyłem mianownik wyrażenia w2 przez
√
2 − 4 i uprościłem poleceniem simplify_radical.
sage: w2 = w2 * (sqrt(2)-4)
wynik: −
3 √
6
2+
14
7
Ostatecznie, całość pomnożyłem przez
√
2 − 4. Wykonaliśmy nast˛epujace
˛ operacje:
√
√
3 2 − 12
3√
6
3
2−4
√
·√
=
=−
2+ .
2 − 16
14
7
2+4
2−4
Przykład 5. Oblicz wartość wyrażenia:
π + cos
6 4
2 π
sin
+1
3
sin2
π sage: w3 = ((sin(pi/6))^2 + cos(pi/4)) / \
((sin(pi/3))^2 + 1)
wynik:
2√
1
2+
7
7
Tym razem widzimy, że Sage zwrócił nam bardzo ładny wynik, którego z pewnościa˛ nie musimy bardziej upraszczać.
Zauważmy, że przy definiowaniu powyższego wyrażenia, mianownik przeniosłem do nowego wiersza. Jeśli instrukcja jest
bardzo długa, to możemy ja˛ podzielić znakiem „\” ustawionym na końcu dzielonej linii. Ewentualnie, gdy wyrażenie jest
bardzo skomplikowane, to możemy podobnie jak w poprzednim przykładzie, podzielić go na kilka wyrażeń przypisanych
do różnych zmiennych i zapisać całość za ich pomoca.˛ Zbudujmy tym sposobem powyższe wyrażenie.
sage: w3_licznik = (sin(pi/6))^2 + cos(pi/4)
sage: w3_mianownik = (sin(pi/3))^2 + 1
sage: w3 = w3_licznik / w3_mianownik; w3
32
1.3. OBLICZENIA ARYTMETYCZNE
2√
1
2+
7
7
wynik:
1.3.9
Zadania
1. Oblicz wartości podanych wyrażeń:
(a) 231 · 7878 − 1212,
(b)
54 + 732
,
3245 − 123
(c) 31 · 23212 ,
(d)
√
151293 ,
r
687 + 211
,
39304
√ (f) log12 288 3 ,
√
4
6561
√ ,
(g)
√
log 5 3 25
sin π3 + cos 2π
3
.
(h)
sin2 π4 + cos2 (π)
(e)
2. Wyłacz
˛ całość przed znak pierwiastka.
√
√
(a) 20164824181593, (b) 3 7535933164375,
3
(c)
√
4
35113033753497567.
3. Czy wśród siedemdziesi˛eciu pi˛eciu kolejnych liczbach naturalnych wi˛ekszych od 100 jest 14 liczb pierwszych?
4. Wykaż, że liczba 327 + 329 jest podzielna przez 30.
ODPOWIEDZI
393
(c) 753732969663574511399999635456
1561
√ √
3
(f) 52 (g) 27
(h)
−
( 3 − 3).
4
9
1. (a) 1818606
(b)
q
(e)
1
17
·
3
449
4
√
√
√
2. (a) 271779 273 (b) 1037575 7 (c) 2081667 8103.
3. Tak.
33
(d) 1860867
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.4
Wyrażenia algebraiczne
W poprzednim podrozdziale dowiedzieliście si˛e jak wykonywać obliczenia na liczbach. Sage doskonale sobie radzi
również z obliczeniami symbolicznymi, tzn. potrafi wykonywać obliczenia czy przekształcenia na wyrażeniach algebraicznych. Wiemy, że wyrażenie algebraiczne podobnie jak arytmetyczne składa si˛e z działań oraz liczb ale wyst˛epuja˛ w nim dodatkowo zmienne. Zmienne oznaczamy zwykle literami, np. a, b, x, y, itd., ale moga˛ to być też
wyrazy, np. wynik, licznik, Pole_kwadratu. Nie możemy używać nazw, które sa˛ poleceniami Sage-a, np.
print, sqrt, simplify, itd.
1.4.1
Deklaracja zmiennych
Przed użyciem zmiennych należy je wcześniej zadeklarować poleceniem var.
sage: var(’x’, ’a’)
Przypominacie sobie zapewne, że zmiennych używaliśmy już wcześniej. Przypisywaliśmy im wartości liczbowe badź
˛
wartości wyrażeń arytmetycznych. Jeżeli chcemy wykonywać obliczenia symboliczne na zmiennych, to musimy wcześniej
je zadeklarować.
sage: (z^2+3*z)/z
Natomiast po zadeklarowaniu
sage: var(’z’)
sage: (z^2+3*z)/z
wynik:
z2 + 3 z
z
Możemy to wyrażenie przypisać do innej zmiennej czy też uprościć, podobnie jak to robiliśmy z wyrażeniami arytmetycznymi.
sage: wyr1 = ((z^2+3*z)/z)
sage: wyr1.simplify_radical()
wynik: z + 3
Zwróćmy uwag˛e, że zmiennej wyr1 nie deklarowałem i program nie protestował. Otóż w momencie, gdy nowo utworzonej
zmiennej przypiszemy wyrażenie algebraiczne, tzn. zawierajace
˛ inna˛ zmienna˛ już zadeklarowana,˛ to ta zmienna staje si˛e
również zadeklarowana.
34
1.4. WYRAŻENIA ALGEBRAICZNE
Sprawdzimy to za pomoca˛ poleceń:
sage: type(z)
wynik: <type ’sage.symbolic.expression.Expression’>
sage: type(wyr1)
wynik: <type ’sage.symbolic.expression.Expression’>
Widzimy, że zarówno z jak i wyr1 sa˛ wyrażeniami symbolicznymi.
1.4.2
Podstawienia
Do wyrażeń algebraicznych możemy dokonywać podstawień. Służy do tego celu polecenie substitute.
sage: var(’x’)
sage: wyr2 = (x^2+2*x-1)/(x+1)
sage: wyr2.substitute(x = 4)
sage: wyr2
wynik:
23
5
Czyli w wyniku otrzymaliśmy wartość wyrażenia dla x = 4. Możemy też dokonywać podstawień innych wyrażeń algebraicznych.
sage: wyr3 = wyr2.subs(x = y^2-3)
2
wynik:
(y 2 − 3) + 2 y 2 − 7
y2 − 2
Czyli każdy x wyst˛epujacy
˛ w poprzednim wyrażeniu został zastapiony
˛
przez y 2 − 3.
Zobaczmy jak wygladaj
˛ a˛ nasze wyrażenia po uproszczeniu. W powyższym przykładzie użyłem krótszej nazwy subs
polecenia substitute.
sage: wyr2.simplify_radical()
wynik:
x2 + 2 x − 1
x+1
sage: wyr3.simplify_radical()
wynik:
y4 − 4 y2 + 2
y2 − 2
35
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.4.3
Wyrażenia wymierne
Wyrażenia z ostatnich przykładów określamy mianem wymiernych, tzn. sa˛ ułamkami oraz w liczniku i w mianowniku
zawieraja˛ pewne wielomiany. Sage posiada funkcje specjalnie przeznaczone do tego typu wyrażeń. Możemy przykładowo
wyrażenie wymierne rozłożyć na sum˛e ułamków
sage: wyr3.expand_rational()
wynik:
y4
4 y2
2
−
+ 2
2
2
y −2 y −2 y −2
albo jeszcze lepiej
sage: wyr3.partial_fraction()
wynik: y 2 −
y2
2
−2
−2
Mamy też funkcje zwracajace
˛ licznik (numerator) albo mianownik (denominator) wyrażenia.
sage: licznik = wyr3.numerator()
wynik: y 4 − 4 y 2 + 2
sage: mianownik = wyr3.denominator()
wynik: y 2 − 2
Rozwia˛żmy nast˛epujace
˛ zadanie.
Przykład 6. Wykaż, że różnica kwadratów dwóch kolejnych liczb całkowitych jest liczba˛ nieparzysta.˛
Z pomoca˛ Sage-a możemy powyższa˛ tez˛e wykazać bardzo szybko poleceniem:
sage: var(’n’)
sage: roznica = (n+1)^2 - n^2; w
2
wynik: (n + 1) − n2
sage: roznica.simplify_radical()
wynik: 2 n + 1
Każda liczba postaci 2n+1, gdzie n jest całkowita, jest oczywiście liczba˛ nieparzysta.˛ Wyświetlmy kilka takich różnic dla
n z zakresu od -2 do 6 włacznie.
˛
sage: for x in range(-2, 7):
print( roznica.subs(n=x) )
36
1.4. WYRAŻENIA ALGEBRAICZNE
wynik: −3, −1, 1, 3, 5, 7, 9, 11, 13.
Jak widzimy, sa˛ to liczby nieparzyste.
1.4.4
Zadania
1. Wykaż, że dla dowolnej liczby naturalnej n, wyrażenie n5 − n jest podzielne przez 30.
2. Oblicz wartości wyrażeń
√
x − 3x3 + 2
5
, (c) 37x3 + 5x,
2
x +1
(a) 2x3 − 3x2 + 5, (b)
dla x ∈ {1, 2, . . . , 20}.
3. Doprowadź podane wyrażenia do najprostszej postaci.
x5 + x3 −
√
(a)
3
x2
√
3
x7
, (b)
4. Dla których liczb naturalnych n ≤ 100 wyrażenie
log2 a3 + log2 a5
sin2 α + tan2 α
,
(c)
.
4 log2 a − log4 a6
1 − cos2 α
n4 − 4n3 + 4n2 + 16n
jest liczba˛ całkowita?
˛
384
ODPOWIEDZI
1. Wsk.: Użyć polecenia (n^5-n).factor().
2.
√
√
3. (a) − 5 x3 + 3 x(x4 + x2 ), (b) 8, (c)
cos2 α+1
.
cos2 α
4. n ∈ {12, 24, 36, 48, 60, 72, 84, 96}.
37
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.5
Równania, nierówności i ich układy
1.5.1
Rozwiazywanie
˛
równań
Rozwia˛żmy na poczatek
˛ bardzo proste równanie liniowe:
2x + 6 = 0.
W szkole wszystkich uczono, że wiadome przenosimy na jedna˛ stron˛e, niewiadome na druga˛ albo mówiono, że należy odjać
˛
6 od obydwu stron równania, czyli
2x = −6.
No i na koniec dzielimy obie strony przez liczb˛e stojac
˛ a˛ przy niewiadomej. Otrzymujemy tym samym wynik
x = −3.
Opisane kroki możemy powtórzyć w Sage-u. Najpierw zdefiniujmy sobie równanie.
sage: rownanie = 2*x + 6 == 0
wynik: 2 x + 6 = 0
Odejmijmy 6 od obydwu stron równania.
sage: rownanie.subtract_from_both_sides(6)
wynik: 2 x = (−6)
No i na koniec dzielimy obustronnie przez 2.
sage: rownanie.divide_both_sides(2)
wynik: x = (−3)
Jak si˛e zapewne domyślacie, nie jest to jedyna metoda rozwiazywania
˛
tego typu równań przy pomocy Sage-a. Jednakże
chciałem pokazać, że można z pomoca˛ programu wykonywać te same operacje, które wykonujecie podczas rozwiazywania
˛
równań. Najcz˛eściej jednak do rozwiazywania
˛
równań stosuje si˛e polecenie solve, które poznaliście już w poprzednich
rozdziałach.
sage: solve(rownanie, x)
wynik: [x = (−3)]
Aby sprawdzić czy otrzymane rozwiazanie
˛
jest poprawne, możemy podstawić go do naszego równania.
sage: rownanie.substitute(x=-3)
38
1.5. RÓWNANIA, NIERÓWNOŚCI I ICH UKŁADY
wynik: (−3) = (−3)
czy sprawdzić wartość logiczna˛ całego wyrażenia:
sage: bool( rownanie.substitute(x=-3) )
wynik: True
Polecenie solve potrafi też rozwiazywać
˛
równania zawierajace
˛ parametry. Na przykład zobaczmy jak wyglada
˛ ogólny
wzór rozwiazań
˛
równania liniowego
ax + b = 0.
sage: var(’a,b’)
sage: r_lin = a*x + b == 0
sage: solve(r_lin, x)
b
wynik: x = −
a
Teraz możemy rozwiazać
˛
dowolne równanie liniowe. Wystarczy podstawić w miejsce parametrów konkretne liczby. Dla
równania
3x + 12 = 0
piszemy:
sage: solve(r_lin.subs(a=3, b=12), x)
wynik: [x = (−4)]
Rozwia˛żmy teraz troszeczk˛e bardziej skomplikowane równanie
−3x5 + 14x4 + 33x3 − 144x2 − 28x + 240 = 0.
sage: solve(-3*x^5 + 14*x^4 + 33*x^3 - 144*x^2 - 28*x + 240, x)
4
wynik: x = (−3) , x = 5, x = −
,x = 2
3
Zauważmy, że nie przyrównałem wyrażenia do zera. W takiej sytuacji polecenie solve domyślnie przyjmuje zero. Zdajemy
sobie spraw˛e, że tym razem mielibyśmy sporo wi˛ecej pracy przy szukaniu rozwiazań
˛
tego równania. Zapewne uczono was,
że najpierw powinniśmy lewa˛ stron˛e takiego równania (wielomian), w miar˛e możliwości, rozłożyć na czynniki liniowe.
39
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Znamy różne sposoby, aby tego dokonać, np. przez grupowanie wyrazów i wyłaczanie
˛
wspólnych czynników badź
˛ odgadywanie pierwiastka i dzielenie przez odpowiedni dwumian, itd. W Sage-u możemy to zrobić za pomoca˛ polecenia factor.
sage: f = -3*x^5 + 14*x^4 + 33*x^3 - 144*x^2 - 28*x + 240
sage: f.factor()
2
wynik: −(3 x + 4)(x + 3)(x − 2) (x − 5)
Narysujmy teraz wykres tego wielomianu i zaznaczmy wszystkie jego pierwiastki punktami w kolorze czerwonym.
y
400
300
200
100
-4
-2
2
4
-100
-200
-300
Rysunek ten uzyskamy za pomoca˛ nast˛epujacych
˛
instrukcji:
sage: pkt = [(-3,0), (-4/3,0), (2,0), (5,0)]
sage: plot(f, x, -4, 6) + \
points( pkt,size=15,color=’red’)
Obie funkcje plot oraz points sa˛ opisane dokładnie w rozdziale o funkcjach.
Możemy operować na lewej i prawej stronie równania z osobna.
sage: r_nie = sqrt(x+2*x^2) == (sin(x)+2*x^3)
sage: r_nie
√
wynik:
2 x2 + x = 2 x3 + sin (x)
sage: r_nie.left()
√
wynik:
2 x2 + x
40
6
x
1.5. RÓWNANIA, NIERÓWNOŚCI I ICH UKŁADY
sage: r_nie.right()
wynik: 2 x3 + sin (x)
sage: r_nie/r_nie.right()
√
wynik:
2 x2 + x
=1
2 x3 + sin (x)
Równania można tworzyć ze zdefiniowanych wcześniej wyrażeń algebraicznych. Jeśli mamy np. trzy wyrażenia
sage: wyr1 = sqrt(2*x+4)
sage: wyr2 = x^2-4; wyr3 = x^3-8
to możemy utworzyć nast˛epujace
˛ równania:
sage: r_nie1 = wyr1 == wyr2
wynik:
√
2 x + 4 = x2 − 4
sage: r_nie2 = wyr1 / wyr2 == wyr3
√
wynik:
2x + 4
= x3 − 8
x2 − 4
itd...
Możemy też wyodr˛ebnić tylko jedna˛ stron˛e równania. Zobaczmy jak wyglada
˛ prawa strona równania r_nie1 oraz lewa
strona równania r_nie2.
sage: r_nie1.right()
wynik: x2 − 4
sage: r_nie2.left()
√
wynik:
2x + 4
x2 − 4
Widzimy, że równanie drugie jest wymierne i w liczniku posiada pierwiastek kwadratowy. Oznacza to, że powinniśmy
zbadać jego dziedzin˛e. Przyrównajmy wi˛ec jego mianownik do zera i rozwia˛żmy to równanie.
sage: mianownik = r_nie2.left().denominator()
wynik: x2 − 4
sage: solve(mianownik == 0, x)
41
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
wynik: [x = (−2) , x = 2]
˛ nierówność
Dodatkowo wyrażenie pod pierwiastkiem kwadratowym nie może być ujemne. Zatem musimy rozwiazać
2x + 4 ≥ 0.
Sposoby rozwiazywania
˛
nierówności opisz˛e w kolejnym podrozdziale.
1.5.2
Rozwiazywanie
˛
nierówności
Do rozwiazywania
˛
nierówności możemy użyć także polecenia solve. Zatem aby rozwiazać
˛
nierówność z poprzedniego
przykładu wystarczy wydać polecenie:
sage: solve(2*x+4 >= 0, x)
wynik: [[x ≥ (−2)]]
√
2x + 4
jest zbiór
x2 − 4
Otrzymujemy wi˛ec, że dziedzina˛ wyrażenia
h−2, ∞) ∩ R \ {−2, 2} = (−2, ∞) \ {2}.
Rozwia˛żmy teraz nast˛epujac
˛ a˛ nierówność:
2x2 + 7x − 11 ≤ −x2 − 2x + 19.
Piszemy wi˛ec polecenia:
sage: nierownosc =
2*x^2 + 7*x - 11 <= -x^2 - 2*x + 19
sage: solve(nierownosc, x)
wynik: [[x ≥ (−5) , x ≤ 2]]
Otrzymaliśmy rozwiazanie:
˛
x ∈ h−5, 2i. Zilustrujmy je na wykresie.
sage: f1 = plot(2*x^2 + 7*x - 11, x, -7, 4, color=’red’)
sage: f1 = plot(-x^2 - 2*x + 19, x, -7, 4, color=’blue’)
sage: show(f1+f2)
42
1.5. RÓWNANIA, NIERÓWNOŚCI I ICH UKŁADY
y
20
10
-7 -6 -5 -4 -3 -2 -1
1 2 3 4
x
-10
Widzimy, że na przedziale h−5, 2i, czerwona krzywa odpowiadajaca
˛ lewej stronie nierówności leży poniżej niebieskiej.
1.5.3
Rozwiazywanie
˛
układów równań
˛
układy równań. Weźmy nast˛epujacy
˛ układ:
Funkcja˛ solve możemy też rozwiazywać

3x − 2y = 1,
2x − 5y = −3
Aby znaleźć rozwiazanie
˛
wystarczy wydać polecenia:
sage: var(’x,y’)
sage: solve([3*x-2*y==1, 2*x-5*y==-3], x,y)
wynik: [[x = 1, y = 1]]
Przekazujemy funkcji solve list˛e równań (obj˛eta˛ nawiasami kwadratowymi), tworzac
˛ a˛ dany układ. Zilustrujmy to rozwia˛
zanie na wykresie. Moglibyśmy z każdego z równań tego układu wyznaczyć zmienna˛ y i narysować wykresy powstałych
funkcji przy pomocy użytej wcześniej funkcji plot. Jednakże nie musimy tego robić, ponieważ Sage posiada specjalna˛
funkcj˛e do ilustrowania równań. Funkcja ta nazywa si˛e implicit_plot. Zobaczmy jak si˛e jej używa.
sage: implicit_plot(3*x-2*y==1,(x,-2,2),(y,-2,2),color="red")\
+ implicit_plot(2*x-5*y==-3,(x-2,2),(y,-2,2),color="blue")\
+ points([(1,1)], size=15,color=’green’, figsize=4)
43
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
2
1
0
-1
-2
-1
-2
0
1
2
Jako pierwszy parametr przekazujemy funkcji implicit_plot równanie, które chcemy wykreślić, nast˛epnie podajemy
przedziały dla zmiennych x i y .
Dowiedzieliśmy si˛e wcześniej, że rozwiazaniem
˛
układu jest para (1, 1), wi˛ec wziałem
˛
takie przedziały aby zawierały
˛
istotnie leży w punkcie przeci˛ecia
jedynk˛e. Dodatkowo użyłem funkcji points aby podkreślić, że otrzymane rozwiazanie
si˛e tych prostych.
Rozwia˛żmy inny przykład, troch˛e bardziej złożony.

√
√
y − 3x = 2 3,
x2 + y 2 = 4.
sage: var(’x,y’)
sage: solve([y-sqrt(3)*x==2*sqrt(3), x^2+y^2==4], x,y)
hh
wynik:
x = (−1) , y =
i
√ i
3 , [x = (−2) , y = 0]
Zwróćmy uwag˛e, że w tym przypadku nie udałoby si˛e zilustrować drugiego równania funkcja˛ plot, ponieważ nie można
w sposób jednoznaczny wyznaczyć z tego równania zmiennej y . Widzimy, że
y=
√
√
4 − x2 , lub y = − 4 − x2 .
Funkcja implicit_plot wykona ten wykres bez przeszkód.
sage: implicit_plot(y-sqrt(3)*x==2*sqrt(3),(x,-3,3),(y,-3,3))\
+ implicit_plot(x^2+y^2==4,(x-3,3),(y,-3,3),color="blue")\
+ points([(1,1)], size=15,color=’green’, figsize=4)
44
1.5. RÓWNANIA, NIERÓWNOŚCI I ICH UKŁADY
3
2
1
0
-1
-2
-3
-3
1.5.4
-2
-1
0
1
2
3
Rozwiazywanie
˛
układów nierówności
Jak widzimy funkcja solve radzi sobie z równaniami, nierównościami oraz układami równań. Okazuje si˛e, że możemy też
przy jej pomocy rozwiazywać
˛
układy nierówności. Rozwia˛żmy nast˛epujacy
˛ układ równań.

y < x2 ,
y > x.
sage: solve([y<x^2, y>x],x,y)
wynik:
x < y, x2 − y > 0
Widzimy, że dostaliśmy praktycznie nasze nierówności nieznacznie przekształcone. Dzieje si˛e tak, ponieważ rozwiazaniami
˛
układów nierówności sa˛ zwykle pewne nieskończone zbiory, które opisuje si˛e właśnie nierównościami. Myśl˛e, że dużo
wi˛ecej zobaczymy, gdy ten układ przedstawimy graficznie.
sage: rp = region_plot([y<x^2,y>x],(x,-2,2),(y,-2,2),\
bordercol=’blue’, incol=’lightgray’)
sage: show(f1 + f2 + rp)
45
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
y
2
1
-2
-1
1
2
x
-1
-2
Jak widzimy, do narysowania zbioru rozwiazań
˛
układu nierówności użyłem funkcji region_plot. Jako pierwszy parametr podajemy list˛e nierówności, nast˛epnie przedziały w jakich maja˛ być wyszukane rozwiazania.
˛
Dodatkowo opcjami
bordercol oraz incol można sterować kolorami obramowania oraz wypełnienia otrzymanego obszaru.
W przypadku układu nierówności z jedna˛ niewiadoma,˛ wynik funkcji solve jest zupełnie wystarczajacy.
˛ Rozwia˛żmy np.
taki układ:

(x − 1)2 < x2 + 3,
 3 − 2x >= 6 − 4x − 2 .
5
3
sage: solve([(x-1)^2<x^2+3, (3-2*x)/5<6-(4*x-2)/3], x)
13
(−1) < x, x <
wynik:
2
Rozwia˛żmy teraz nast˛epujace
˛ zadanie:
Przykład 7. Podaj wszystkie liczby całkowite, które spełniaja˛ układ nierówności:

2(5x − 2) < 3(4x − 3) + 14,
4(x + 2) < 3x + 21.
Znajdźmy najpierw rozwiazanie
˛
tego układu w zbiorze liczb rzeczywistych.
sage: solve([ 2*(5*x-2) < 3*(4*x-3)+14, \
4*(x+2) < 3*x+21], x)
9
wynik:
< x, x < 13
−
2
46
1.5. RÓWNANIA, NIERÓWNOŚCI I ICH UKŁADY
Teraz możemy wyświetlić wszystkie liczby całkowite spełniajace
˛ otrzymane nierówności.
sage: min_x = ceil(-9/2)
sage: for x in range(min_x, 13):
print(x)
wynik: −4, −3, −2, −1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Użyłem funkcji ceil do znalezienia liczby całkowitej nie wi˛ekszej od −
1.5.5
9
= −4.5 czyli min_x = -4.
2
Zadania
1. Rozwia˛ż równania:
(a) x + 2 = 3x − 5,
(e) logx 125 = 5,
(b) x2 + 3x − 1 = 0,
(f) 3x (x2 − 4) = 0,
(c)
√
3
2x2 − 4x − 4 = 0,
(d) log3 (x + 1) = 27,
(g)
x+2
3
=
,
x−1
2x − 5
(h) (2x − 1)(x + 2) = (x − 1)2 .
2. Rozwia˛ż nierówności:
(a) 3x2 − 5x − 1 ≥ 0,
(b) x − 2 ≤ (x + 3)(x − 1),
(c)
√
3
4x + 6 < 2x + 8,
(d) x5 + (x − 4)3 + x2 > 2x4 + 3x,
(e)
x2 − 3x − 4
> 0,
x+1
(f)
4x − 5
3x + 2
≤
.
2x − 1
2x − 5
3. Rozwia˛ż układy równań i zilustruj rozwiazanie
˛
na wykresie.

5x + 2y = 4

x2 + y = 5
(a)
x − 4y = −2,
(c) √
 x + 4y = 0,



x − 2y + 3z = 6



x2 + 2x + y 2 − 4x = 20
(b) −2x − 4y − 3z = 0
(d)

2x − y = 0.



x + y − z = 3,
47
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
4. Rozwia˛ż układy nierówności graficznie.

x + 2y ≤ 2
(a)
x + 3y ≥ −2,

2x2 − y ≥ 6
(c)
0.5x − y > −6,

3x2 − y < 6
(b)
−2x − y ≥ 0

√x − y > 0,
(d)
y > x2 .
5. Rozwia˛ż analitycznie układy nierówności.


 x+2 >0
3x − 1
(a)

x + 3 ≥ −2,


x2 − 4x ≥ 0
(b)
x−1


< 3.
2+x
ODPOWIEDZI
√
√
√
√
3
3
1
−
13
−
3
+
1,
x
=
3
+
1
(b) x = − 12 13
,
x
=
(c)
x
=
−
2
2
2
h
i
1
(d) [x = 7625597484986] (e) x = e( 5 log(125)) (f) [x = (−2) , x = 2]
√
√
√
√
(g) x = − 32 2 + 1, x = 23 2 + 1 (h) x = − 12 37 − 52 , x = 12 37 − 52
1. (a) x =
7
2
√
√
√
x ≤ − 16 37 + 56 , x ≥ 16 37 + 65
(b) x ≤ − 12 5 − 21 , x ≥
(c) x > (−2) , x < − 78
(d) [[x > 2.26322664925]] (e) [[x > 4]]
√
√
1
1
, x > 52 , x ≤ 14 745 + 31
(f) x > 2 , x ≤ − 4 745 + 31
4
4
2. (a)
3. (a)
x=
6
11
,y =
7
11
(b)
x=
96
23
2
(a)
1
0
-1
-2
-1
0
1
√
5−
, y = − 39
, z = − 12
23
23
(c) [[x = 2.31964624131, y = (−0.380759651308)]]
√
√
√
(d) x = − 15 101 + 15 , y = − 25 101 + 25 , x = 15 101 + 51 , y =
-2
1
2
2
48
2
5
√
101 +
2
5
1
2
1.5. RÓWNANIA, NIERÓWNOŚCI I ICH UKŁADY
6
6
(c)
4
(d)
4
2
2
0
0
-2
-2
-4
-4
-4
-4 -3 -2 -1 0 1 2 3 4
-2
0
2
6
(b)
(a)
2
-2 -1
1
-2
4
2
4
2
-1
6
8
1 2
-2
10
-2
-4
-3
-6
-4
4.
1
10
(c)
(d)
0.8
5
0.6
0.4
-15
-10
-5
5
10
0.2
-5
0.2
5. (a) [(−5) < x, x < (−2)] , 13 < x , [x = (−5)]
(b) [(−2) < x, x < 0] , [4 < x] , x < − 27 , [x = 0] , [x = 4] .
49
0.4
0.6
0.8
1
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
50
Rozdział 2
Funkcje
2.1
Podstawowe wiadomości o funkcjach
W rozdziale tym chciałbym omówić pewne zagadnienia zwiazane
˛
z poj˛eciem funkcji. Funkcja jest jednym z ważniejszych
poj˛eć współczesnej matematyki. Po raz pierwszy tego terminu użył G. W.Leibniz (1646-1716) 1 , jednak nie podał on
dokładnej definicji. Zrobił to w 1718 roku J. Bernoulli (1667-1748). Oczywiście nie znaczy to, że matematycy dopiero
w XVII wieku zacz˛eli stosować funkcje, tzn. dostrzegać zależności mi˛edzy różnymi wielkościami i je badać. Przecież bez
znajomości poj˛ecia funkcji jesteśmy w stanie stwierdzić, że pole koła zależy od długości jego promienia, że przebyta droga
przez dany obiekt zależy od czasu poruszania si˛e tego obiektu czy też wykonujac
˛ jakiekolwiek obliczenia na liczbach wiemy,
że wynik b˛edzie zależał od tych liczb. Do tych wszystkich stwierdzeń nie potrzebujemy definicji funkcji. Jednakże kiedy
badamy wielkości powiazane
˛
ze soba˛ pewna˛ relacja,˛ to ścisła definicja tej relacji w znaczny sposób ułatwia badanie tego
zwiazku.
˛
Definicja˛ tych zwiazków
˛
jest zwykle pewna funkcja.
Przyjrzyjmy si˛e nast˛epujacemu
˛
zadaniu.
Przykład 8. Wykaż, że różnica mi˛edzy sześcianem dowolnej liczby naturalnej i ta˛ liczba˛ jest podzielna przez
6.
Mowa jest tu o pewnym zwiazku
˛
mi˛edzy liczbami, a dokładniej liczbami naturalnymi i pewna˛ grupa˛ liczb naturalnych
podzielnych przez 6. Jeśli wykażemy, że własność t˛e posiada pi˛eć, dziesi˛eć czy może nawet tysiac
˛ poczatkowych
˛
liczb
naturalnych, to i tak nie b˛edzie to dowodem tezy postawionej w zadaniu. Zwykle jednak rozwiazuj
˛ ac
˛ zadania zwiazane
˛
z liczbami naturalnymi czy całkowitymi przeprowadzamy test dla kilku przykładowych liczb, co może dać nam pewne
wskazówki do rozwiazania
˛
badź
˛ upewnić, że zadanie rzeczywiście jest dobrze sformułowane. Zobaczmy wi˛ec jak wyglada
˛
dziesi˛eć poczatkowych
˛
różnic. Pomog˛e sobie programem Sage.
sage: var(’n’)
sage: liczby_naturalne = range(1,11)
sage: for n in liczby_naturalne:
sage:
1
print n^3-n, "= 6 *", (n^3-n)/6
G. W. Leibniz, Methodus tangentium inversa, seu de functionibus, 1673.
51
ROZDZIAŁ 2. FUNKCJE
W wyniku tych poleceń zobaczymy list˛e wartości wyrażenia n3 − n dla n ∈ h1, 11i ∩ N oraz ich rozkład na iloczyn liczby
6 i pewnej liczby całkowitej.
Poleceniem var(’n’) utworzyliśmy zmienna˛ o nazwie n. Nast˛epnie
zdefiniowaliśmy list˛e liczb naturalnych z zakresu od 1 do 10 włacz˛
nie poleceniem range(1,11). Widzimy wi˛ec, że druga z liczb powinna być o jeden wi˛eksza od wymaganego zakresu. Na koniec instrukcja˛
for n in liczby_naturalne przechodzimy zmienna˛ n po wcześniej zdefiniowanej liście liczb i wyświetlamy dla każdej z nich wyrażenie n^3-n, "= 6 *", (n^3-n)/6. Wi˛ecej na temat definiowania
wyrażeń arytmetycznych i geometrycznych dowiecie si˛e w rozdziale 4.
Aby wykazać, że własność t˛e posiadaja˛ wszystkie liczby naturalne, możemy posłużyć si˛e ogólnym wzorem tejże różnicy,
tzn. n3 − n gdzie n oznacza pewna˛ liczb˛e naturalna.˛ Zauważmy wtedy, że można ja˛ przedstawić w postaci iloczynu trzech
kolejnych liczb naturalnych,
n3 − n = n(n2 − 1) = n(n + 1)(n − 1) = (n − 1)n(n + 1).
Oznacza to, że wśród tych liczb przynajmniej jedna jest parzysta oraz jedna podzielna przez 3. Jest to wystarczajacy
˛ dowód
na to, że liczba n3 − n jest podzielna przez 6.
Powyższe uzasadnienie jest wystarczajace,
˛ ponieważ zdefiniowaliśmy relacj˛e wia˛żac
˛ a˛ każda˛ liczb˛e naturalna˛ n z dokładnie
jedna˛ liczba˛ postaci n3 − n.
2.1.1
Definicja funkcji, dziedzina, przeciwdziedzina i zbiór wartości
Relacje zdefiniowane na elementach dwóch zbiorów nazywamy funkcjami. Precyzyjniej, jeśli mamy dwa zbiory X i Y ,
to relacj˛e, która każdemu elementowi zbioru X przyporzadkowuje
˛
dokładnie jeden element zbioru Y nazywamy funkcja.˛
Zbiór X nazywamy zbiorem argumentów lub dziedzina,˛ a zbiór Y przeciwdziedzina.˛
Wygodnie jest funkcjom nadawać nazwy, np. f, g, h, itp. Zapis f : X → Y oznacza funkcj˛e o nazwie f określona˛ na
zbiorze X o wartościach w zbiorze Y . Upraszcza on wiele sformułowań, np. zamiast mówić, że funkcja f dla argumentu x
przyjmuje wartość y , możemy zapisać krótko: f (x) = y .
Poza dziedzina˛ i przeciwdziedzina˛ jest jeszcze jeden zbiór ściśle zwiazany
˛
z dana˛ funkcja˛ f , który nazywamy zbiorem
wartości funkcji. Zbiór ten zwykle oznaczamy symbolem Wf i definiujemy go nast˛epujaco:
˛
Wf = f (x) : dla wszystkich x ∈ X .
Możemy powiedzieć, że jest to podzbiór przeciwdziedziny funkcji składajacy
˛ si˛e tylko z tych wartości, które zostały przypisane pewnym argumentom. Definicja funkcji nie wymaga, aby każdemu elementowi przeciwdziedziny coś przyporzadko˛
wać.
Funkcj˛e z naszego przykładu moglibyśmy zdefiniować nast˛epujaco:
˛
f (n) = n3 − n,
gdzie n jest dowolna˛ liczba˛ naturalna.˛ Z określenia tej funkcji wynika, że jej dziedzina˛ jest zbiór liczb naturalnych, tj.
52
2.1. PODSTAWOWE WIADOMOŚCI O FUNKCJACH
Df = N, natomiast przeciwdziedzina˛ mógłby być zbiór liczb naturalnych lub wymiernych czy też zbiór liczb rzeczywistych.
Wynika to z faktu, że wartości tej funkcji zawsze sa˛ liczbami naturalnymi czyli należa˛ do wszystkich wymienionych zbiorów.
Aby wyznaczyć zbiór wartości funkcji musimy znaleźć zbiór optymalny w takim sensie, że każdej liczbie z tego zbioru
b˛edzie odpowiadać pewien argument (w naszym przypadku pewna liczba naturalna). Możemy go zdefiniować nast˛epujaco:
˛
Wf = n3 − n : dla wszystkich n ∈ N = {0, 6, 24, 60, 120, 210, . . .}.
2.1.2
Wykres funkcji
Jak wiemy, funkcje liczbowe daja˛ si˛e ilustrować za pomoca˛ wykresu. Z wykresu możemy łatwo odczytać wiele interesujacych
˛
nas własności funkcji. Gdy mamy funkcj˛e dana˛ wzorem y = f (x), wtedy jej wykres jest zbiorem punktów na
płaszczyźnie, postaci
x, f (x) .
Można też powiedzieć, że wykres funkcji jest zbiorem punktów, które sa˛ rozwiazaniami
˛
równania
y = f (x).
Na przykład funkcj˛e liniowa˛ f (x) = 23 x + 1 możemy traktować jako równanie dwóch zmiennych x i y postaci y = 23 x + 1.
Zbiorem rozwiazań
˛
tego równania sa˛ punkty leżace
˛ na nast˛epujacej
˛ prostej:
y
4
3
2
1
-4
-2
2
4
x
-1
-2
Powyższy wykres uzyskałem przy pomocy poleceń:
Jak widzimy, program Sage pozwala w bardzo podobny
sposób definiować funkcje jak to robimy w matema-
sage: var(’x’)
tyce. Najpierw zdefiniowałem nazw˛e zmiennej poleceniem
sage: f(x) = (2/3)*x+1
var(’x’) (nazwa˛ może być dowolna litera), a nast˛epnie
sage: plot(f, x, -5, 5)
określiłem funkcj˛e wzorem: f(x)= (2/3)* x + 1.
We wzorze funkcji możemy wykorzystywać wszystkie znane operatory arytmetyczne, np. +, -, *, / gdzie symbol
"*" oznacza mnożenie oraz "/" dzielenie. Mamy do dyspozycji też wiele innych znanych operatorów, np. pot˛egowanie,
logarytmy, itd. Na koniec wydałem polecenie plot(f, x, -5, 5), dzi˛eki któremu program narysował wykres funkcji
f dla x ∈ h−5, 5i.
53
ROZDZIAŁ 2. FUNKCJE
Zwróćmy uwag˛e, że nie każde równanie, w którym wyst˛epuja˛ dwie zmienne x i y opisuje pewna˛ funkcj˛e. Przykładowo zbiór
punktów spełniajacych
˛
równanie
x3 − y 2 + xy = 0,
tworzy nast˛epujac
˛ a˛ krzywa:
˛
0.2
0.1
-0.2
-0.1
0.1
0.2
-0.1
Widzimy, że ta krzywa nie jest wykresem żadnej funkcji jednej zmiennej, gdyż w przeciwnym przypadku jednemu argumentowi przyporzadkowane
˛
byłyby dwie wartości. Jeśli byłby to wykres funkcji, to każda pionowa prosta mogłaby go przeciać
˛
w co najwyżej jednym punkcie.
Wykresy krzywych, które nie sa˛ funkcjami możemy uzyskać za pomoca˛ funkcji parametric_plot. Używamy jej
podobnie jak funkcji plot, jednakże rysowana krzywa musi być zdefiniowana parametrycznie.
sage: var(’x’)
sage: parametric_plot( (t^2-t, t^3-t^2), (t, 0, 1.2))
Każdy punkt (x, y) spełniajacy
˛ równanie x3 − y 2 + xy = 0 jest postaci t2 − t, t3 − t2 . Oznacza to, że

x = t2 − t
y = t3 − t2 ⇒ y = t · (t2 − t) = t · x.
Wstawiajac
˛ t=
y
x
do pierwszego równania otrzymujemy
x=
y2
y
−
⇒ x3 = y 2 − xy.
2
x
x
Po przeniesieniu wszystkiego na lewa˛ stron˛e otrzymujemy wyjściowe równanie
x3 − y 2 + xy = 0.
54
2.1. PODSTAWOWE WIADOMOŚCI O FUNKCJACH
Wróćmy na chwil˛e do naszego poprzedniego przykładu. Powiedzieliśmy, że dziedzina˛ funkcji f (n) = n3 − n jest zbiór
liczb naturalnych. Zatem wykres tej funkcji składa si˛e z pewnych punktów na płaszczyźnie. Kilka poczatkowych
˛
punktów
wykresu tej funkcji wyglada
˛ nast˛epujaco:
˛
1000
800
600
400
200
0
2
4
6
8
10
Powyższy wykres punktowy wykonałem w programie Sage poleceniem point.
sage: point([(n, n^3-n) for n in range(1, 11)])
Funkcja point przyjmuje jako argument list˛e punktów. Listy w programie Sage definiujemy zapisujac
˛ ich elementy w
nawiasach kwadratowych, każdy oddzielajac
˛ przecinkiem, np. [1,2,3,4,5]. W naszym przykładzie została utworzona
lista z nast˛epujac
˛ a˛ zawartościa˛
[(1,0), (2,6),... , (10, 10^3-10)]
Utworzyliśmy ja˛ bardzo łatwo poleceniem [(n, n^3-n)for n in range(1, 11)], które tworzy pary
(n, n^3-n) dla kolejnych liczb naturalnych z zakresu od 1 do 10 włacznie
˛
i dodaje je do listy.
2.1.3
Określanie dziedziny funkcji
Bardzo cz˛esto autorzy definicji funkcji podaja˛ tylko wzór postaci y = f (x). Wtedy musimy sami określić dziedzin˛e. Zwykle
przyjmujemy najwi˛ekszy zbiór na którym funkcja może być określona.
Gdyby powyższa funkcja była zdefiniowana wzorem
f (x) = x3 − x
bez żadnych dodatkowych założeń, to za dziedzin˛e przyj˛elibyśmy cały zbiór liczb rzeczywistych, tzn. Df = R. Możemy to
zrobić, bowiem każda˛ liczb˛e rzeczywista˛ można podnieść do sześcianu, czy też każde dwie liczby rzeczywiste możemy od
siebie odjać.
˛ Spójrzmy jak wygladałby
˛
wykres naszej funkcji w przedziale (−5, 5).
55
ROZDZIAŁ 2. FUNKCJE
y
100
50
-4
-2
x
4
2
-50
-100
Rysujac
˛ wykresy funkcji w programie Sage mamy do dyspozycji wiele ciekawych opcji. Możemy sterować wartościami najmniejszymi ymin oraz najwi˛ekszymi ymax, opcja˛ gridlines=True pokażemy siatk˛e, czy też opcja
axes_labels=[’x’,’y’] dopisze do osi odpowiednie etykiety. Możemy zmienić kolor, np. color=’red’ lub
grubość linii thickness=2. Mamy jeszcze wiele innych opcji do dyspozycji. Wydajac
˛ polecenie plot? zobaczycie
opis ich wszystkich.
Zastosujmy kilka z wymienionych wyżej opcji instrukcji plot do poprzedniej funkcji.
sage: f(x) = x^3-x
sage: plot(f, x, -5,5,ymin=-20,ymax=20,gridlines=True,\
axes_labels=[’x’,’y’],color=’red’,thickness=2,\
legend_label=r’$f(x) = x^3-x$’,fontsize=11)
f(x) = x3 −x
y
20
10
-4
-2
2
-10
-20
56
4
x
2.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI
Przy określaniu dziedziny funkcji zwykle musimy rozwiazać
˛
pewne równanie czy nierówność. Określmy dziedzin˛e nast˛epujacej
˛ funkcji
√
f (x) =
3x2 + x
.
x2 + 3x − 4
Wiemy, że pod pierwiastkiem kwadratowym nie może być liczb ujemnych, wi˛ec:
sage: var(’x’)
sage: solve(3*x^2+x>=0, x)
1
wynik:
x≤ −
, [x ≥ 0]
3
Dodatkowo mianownik musi być różny od zera, zatem:
sage: solve(x^2+3*x-4==0, x)
wynik: [x = 1, x = (−4)]
Otrzymujemy wi˛ec, że dziedzina˛ funkcji jest zbiór
Df =
2.2
1
−∞,
3
∪ h0, ∞) \ {−4, 1}.
Najcz˛eściej zadawane pytania dotyczace
˛ funkcji
Rozpatrzmy funkcj˛e zdefiniowana˛ wzorem
f (x) =
−4x2 − 4x + 11
.
x2 + 2x − 3
Jak widzimy, jest to funkcja wymierna, gdyż mamy ułamek oraz w liczniku i mianowniku znajduje si˛e pewien wielomian.
Najwi˛ekszy zbiór na którym możemy ja˛ określić jest postaci
Df = R \ {−3, 1}.
Nie możemy dołaczyć
˛
liczb −3 i 1, gdyż wtedy mianownik byłby równy zero, a wiemy przecież, że dzielenie przez zero
jest niewykonalne. Punkty, w których mianownik si˛e zeruje znajdziemy poleceniem
sage: solve(x^2+2*x-3, x)
wynik: [x = (−3) , x = 1]
Jeśli szkicujemy wykres funkcji w przedziale zawierajacym
˛
punkty wykluczone z dziedziny, to powinniśmy poinformować
o tych punktach instrukcj˛e plot. Służy do tego opcja exclude.
sage: f(x) = (-4*x^2-4*x+11)/(x^2+2*x-3)
sage: plot(f, x, -7,4,exclude=[-3,1],ymin=-20,ymax=10)
57
ROZDZIAŁ 2. FUNKCJE
y
10
5
-6
-4
-2
2
x
4
-5
-10
Opcja˛ exclude=[-3,1] pomin˛eliśmy argumenty, dla których mianownik si˛e zeruje. Możemy dodatkowo użyć opcji
detect_poles="show", która dorysuje w pomini˛etych punktach asymptoty pionowe czyli proste, do których wykres
funkcji zbliża si˛e dowolnie blisko lecz nigdy ich nie przecina.
y
15
10
5
-6
-4
-2
2
4
x
-5
-10
-15
-20
Z wykresu funkcji możemy odczytać wi˛ekszość jej istotnych własności. Z powyższego wykresu, gdybyśmy nawet nie znali
wzoru funkcji, potrafilibyśmy odpowiedzieć na nast˛epujace
˛ pytania:
1. Jaka jest dziedzina funkcji?
Powyższy rysunek przedstawia wykres danej funkcji na stosunkowo małym przedziale (−7, 4). Możemy jednak
przyjać,
˛ że Df = R\{−3, 1}, gdyż szkicujac
˛ wykres funkcji zawsze staramy si˛e pokazać jej najważniejsze własności,
a takimi z pewnościa˛ sa˛ punkty, w których funkcja nie jest określona. Możemy wi˛ec przyjać,
˛ że poza tym przedziałem
funkcja zachowuje si˛e już „stabilnie”, tzn. nie zmienia swoich istotnych własności. Zakładamy wi˛ec, że jest określona
w każdym punkcie zbioru (−∞, −7i ∪ h4, ∞).
58
2.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI
2. Jaki jest zbiór wartości funkcji?
Tu myśl˛e, że każdy z czytelników odpowie natychmiast, że Wf = R.
3. Zbadaj różnowartościowość funkcji.
Funkcja przedstawiona na wykresie nie może być różnowartościowa,2 ponieważ dowolna linia pozioma może przeciać
˛
wykres funkcji różnowartościowej w co najwyżej jednym punkcie.
4. Zbadaj monotoniczność funkcji.
Funkcja jest malejaca
˛ w przedziałach
(−∞, −3), (−3, −1) oraz , (1, ∞).
Zwróćmy uwag˛e, że bł˛edne byłoby stwierdzenie: funkcja jest malejaca
˛ na zbiorze
(−∞, −3) ∪ (−3, −1) ∪ (1, ∞) = R \ {−3, 1}.
Gdybyśmy wzi˛eli np. x1 = −4 < x2 = 2, to wtedy
f (x1 ) = f (−4) = −7.4 < f (x2 ) = f (2) = −2.6.
Czyli dla tych dwóch argumentów x1 < x2 wartości funkcji wzrastaja,˛ tzn. spełniaja˛ nierówność f (x1 ) < f (x2 ). Ale
taka˛ własność (wraz ze wzrostem argumentów wzrastaja˛ wartości) posiadaja˛ tylko funkcje rosnace.
˛ 3
Aby odpowiadać na pytania bardziej szczegółowe, zwykle musimy znać wzór funkcji. Czasami na podstawie wykresu jesteśmy w stanie go znaleźć. W przypadku gdy wiemy jakiego rodzaju jest ta funkcja, np. liniowa, kwadratowa, wykładnicza,
itd., zadanie jest dość łatwe. W bardziej ogólnych sytuacjach posługujemy si˛e specjalnymi algorytmami do poszukiwania
wzorów funkcji. Jeśli kogoś interesuje to zagadnienie, to zach˛ecam do poczytania sobie aproksymacji badź
˛ interpolacji.
Program Sage ma kilka takich algorytmów zaimplementowanych. W dalszej cz˛eści tego rozdziału b˛edziecie mieli okazj˛e
poznać jedna˛ z nich.
Dodajmy wi˛ec do listy powyższych pytań jeszcze kilka, ale takich gdzie musimy skorzystać ze wzoru naszej funkcji, tzn.
f (x) =
−4x2 − 4x + 11
.
x2 + 2x − 3
5. Wyznacz miejsca zerowe funkcji.
Wiecie zapewne, że miejsca zerowe leża˛ w punktach przeci˛ecia wykresu funkcji z osia˛ Ox. Można byłoby próbować
określić ich pozycj˛e z wykresu. Przygladaj
˛ ac
˛ si˛e jeszcze raz wykresowi tej funkcji mog˛e stwierdzić, że miejsca zerowe
znajduja˛ si˛e w pobliżu punktów −2 18 oraz 58 . Jeszcze raz podkreślam, że w pobliżu a nie dokładnie. Aby mieć pewność
jakie to sa˛ punkty musimy rozwiazać
˛ równanie f (x) = 0, tzn.
−4x2 − 4x + 11
= 0.
x2 + 2x − 3
2
Funkcja jest różnowartościowa, jeśli dla każdych dwóch różnych argumentów przyjmuje dwie różne wartości.
Funkcja f jest rosnaca,
˛ jeśli dla x1 , x2 ∈ Df , takich że x1 < x2 zachodzi nierówność f (x1 ) < f (x2 ), natomiast funkcja f jest malejaca,
˛ jeśli
dla x1 , x2 ∈ Df , takich że x1 < x2 zachodzi nierówność f (x1 ) > f (x2 ).
3
59
ROZDZIAŁ 2. FUNKCJE
W programie Sage możemy je rozwiazać
˛ poznanym już poleceniem solve.
sage: solve(f, x)
√
√
1
1
wynik: x = − 3 − , x = 3 −
2
2
Widzimy wi˛ec, że nasza wcześniejsza próba odgadni˛ecia miejsc zerowych była obarczona bł˛edem.
Gdybyśmy chcieli to równanie rozwiazać
˛
r˛ecznie, to przyrównalibyśmy licznik do zera (wiadomo, że mianownik
nigdy nie może być zerem). Czyli rozwiazalibyśmy
˛
nast˛epujace
˛ równanie kwadratowe:
−4x2 − 4x + 11 = 0.
Znajac
˛ wzory na wyróżnik trójmianu kwadratowego (potocznie zwany ”delta”)
˛ oraz wzory na jego pierwiastki
obliczymy miejsca zerowe. Skorzystajmy ponownie z programu Sage i wykonajmy te obliczenia. Możemy nawet
zdefiniować ogólny wzór na trójmian kwadratowy.
sage: var(’a,b,c’)
sage: trojmian = a*x^2 + b*x + c == 0
sage: solve( trojmian, x )
√
√
b + b2 − 4 ac
b − b2 − 4 ac
wynik: x = −
,x = −
2a
2a
Otrzymaliśmy tym sposobem znane wzory na pierwiastki trójmianu kwadratowego. Podstawiajac
˛ teraz w miejsce
parametrów odpowiednie liczby otrzymamy wynik.
sage: solve(trojmian.subs(a=-4,b=-4,c=11), x)
√
√
1
1
wynik: x = − 3 − , x = 3 −
2
2
Oczywiście w obydwu przypadkach otrzymaliśmy to samo. Zach˛ecam do samodzielnego sprawdzenia tych wyników.
Użyliśmy funkcji subs aby podstawić w równaniu trojmian w miejsca odpowiednich parametrów liczby.
6. Jaka˛ wartość posiada funkcja dla argumentu x = −2?
Obliczanie wartości funkcji dla danego argumentu jest chyba najbardziej naturalna˛ operacja˛ wykonywana˛ podczas
pracy z funkcjami. Aby udzielić odpowiedzi na to pytanie, wystarczy obliczyć
f (−2) =
−4 · (−2)2 − 4 · (−2) + 11
= −1.
(−2 + 3)(−2 − 1)
60
2.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI
Program Sage poda nam ten wynik po wykonaniu polecenia
sage: f(-2)
wynik: −1
7. Dla jakich argumentów funkcja przyjmuje wartość y = 5?
Bardzo łatwo jest obliczyć wartość funkcji dla danego argumentu, jak to widzieliśmy w poprzednim punkcie. W tym
zadaniu odwracamy sytuacj˛e, majac
˛ wartość funkcji, pytamy dla jakich argumentów funkcja ja˛ przyjmuje. Musimy
wi˛ec rozwiazać
˛ równanie
−4x2 − 4x + 11
= 5.
x2 + 2x − 3
Możemy takie równania rozwiazywać
˛
geometrycznie, pytajac
˛ w jakich punktach prosta o równaniu y = 5 przetnie
wykres naszej funkcji. Przyjrzyjmy si˛e ich wykresom.
y
10
5
-6
-4
-2
2
4
x
-5
-10
sage: plot(f, x, -7, 4, exclude=[-3,1],\
detect_poles="show", ymin=-10, ymax=10)\
+ plot(5, x, -7, 4, color=’red’)
Narysowałem tym razem wykresy dwóch funkcji w jednym układzie współrz˛ednych. Aby tego dokonać wystarczy dodać
do siebie dwa wykresy operatorem +.
Widzimy, że istnieja˛ dwa argumenty, w których funkcja przyjmuje wartość 5, jednak trudno jest z wykresu określić
ich dokładne położenie. Znajdźmy je rozwiazuj
˛ ac
˛ równanie w tradycyjny sposób. W pierwszym kroku można pozbyć
si˛e kreski ułamkowej mnożac
˛ obustronnie równanie przez cały mianownik, otrzymujac
˛
−4x2 − 4x + 11 = 5(x + 3)(x − 1).
61
ROZDZIAŁ 2. FUNKCJE
Wymnażajac
˛ prawa˛ stron˛e i przenoszac
˛ wszystko na lewa˛ otrzymamy do rozwiazania
˛
równanie kwadratowe
9x2 + 14x − 26 = 0.
Obliczamy wi˛ec delt˛e ∆ = 1132,
√
√
∆ = 2 283 oraz pierwiastki
√
√
√
−7 − 283
−7 + 283
−14 − 2 283
=
, x2 =
.
x1 =
18
9
9
Chciałbym zwrócić uwag˛e jeszcze na powyższy pierwiastek z delty. Pami˛etamy jak uczono nas, że zawsze o ile to
możliwe wyłaczamy
˛
całości przed znak pierwiastka. Aby to zrobić najlepiej dobrze jest znać rozkład kanoniczny
liczby spod pierwiastka.
Operacj˛e t˛e możemy wykonać w Sage’u poleceniem factor.
sage: delta = 14^2-4*9*(-26)
sage: factor(delta)
wynik: 22 · 283
√
√
√
Stad
˛ otrzymujemy ∆ = 1132 = 2 283
Zadanie z tego podpunktu możemy uzyskać natychmiast poleceniem solve.
sage: solve(f(x)==5, x)
1√
7
7
1√
wynik: x = −
283 − , x =
283 −
9
9
9
9
8. Dla jakich argumentów funkcja przyjmuje wartości niedodatnie?
Pytanie to jest równoważne nast˛epujacemu:
˛
rozwiazać
˛ nierówność f (x) ≤ 0, tzn.
−4x2 − 4x + 11
≤ 0.
(x + 3)(x − 1)
Zapisałem mianownik w postaci iloczynowej4 , gdyż znam jego miejsca zerowe {−3, 1}.
Rozwiazuj
˛ ac
˛ nierówności wymierne zwykle zast˛epujemy kresk˛e ułamkowa˛ iloczynem, gdyż
licznik
≤0
mianownik
tylko wtedy, gdy licznik · mianownik ≤ 0.
Oczywiście pami˛etamy o dziedzinie wyrażenia wymiernego, tzn. z rozwiazania
˛
nierówności z prawej strony należy
wykluczyć te, dla których mianownik si˛e zeruje. A wi˛ec mamy do rozwiazania
˛
nierówność
(−4x2 − 4x + 11) · (x + 3)(x − 1) ≤ 0,
4
Jeśli ∆ > 0 i x1 , x2 sa˛ pierwiastkami trójmianu ax2 + bx + c, to możemy go zapisać w postaci iloczynowej a(x − x1 )(x − x2 ).
62
2.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI
gdzie x 6= −3 i x 6= 1. Ponieważ znamy już miejsca zerowe funkcji, czyli miejsca zerowe licznika, możemy trójmian
z lewego nawiasu również zapisać w postaci iloczynowej
−4(x +
√
3 + 0.5)(x −
√
3 + 0.5) · (x + 3)(x − 1) ≤ 0.
Nierówności wielomianowe najprościej rozwiazuje
˛
si˛e geometrycznie, metoda˛ tzw. „w˛eżyka”. Polega ona na naszkicowaniu w˛eżyka, który przechodzi od prawej strony osi liczbowej do lewej, przecinajac
˛ ja˛ w miejscach gdzie leża˛
pierwiastki wielomianu o krotności nieparzystej, badź
˛ odbija si˛e od niej dla pierwiastków o krotności parzystej. Start
w˛eżyka zależy od znaku współczynnika stojacego
˛
przy najwyższej pot˛edze zmiennej x.
Zapiszmy nasz wielomian w postaci ogólnej.
sage: w = -4*(x+sqrt(3)+0.5)*(x-sqrt(3)+0.5)*(x+3)*(x-1)
sage: w.simplify_radical()
wynik: −4.0 x4 − 12.0 x3 + 15.0 x2 + 34.0 x − 33.0
Skoro −4 < 0, wi˛ec w˛eżyk startuje od dołu (w przeciwnym przypadku startowałby z góry).
Wykonajmy szkic w˛eżyka za pomoca˛ programu Sage.
sage: plot(-4*(x+sqrt(3)+0.5)*(x-sqrt(3)+0.5) \
* (x+3)*(x-1), x, -4, 2, fill = 0)
y
-3
-2
-1
1
x
-10
-20
-30
-40
Widzimy, że w˛eżyk przecina oś Ox w każdym punkcie, gdyż wszystkie pierwiastki sa˛ jednokrotne. Aby podać
rozwiazanie
˛
naszej nierówności wystarczy wskazać przedziały, w których wykres (w˛eżyk) leży pod osia˛ Ox. Dla
ułatwienia tego zadania, użyłem opcji fill=0, która koloruje pole mi˛edzy wykresem funkcji a osia˛ Ox. Wartość 0
oznacza prosta˛ o równaniu f (x) = 0 czyli oś Ox. Otrzymujemy odpowiedź
√
√
x ∈ (−∞, −3) ∪ h− 3 − 0.5, 1) ∪ h 3 − 0.5, ∞).
63
ROZDZIAŁ 2. FUNKCJE
Zwróćmy uwag˛e, że prawy kraniec pierwszego i drugiego przedziału jest otwarty, gdyż −3 i 1 nie należa˛ do dziedziny
funkcji.
9. Określ zbiór wartości funkcji na przedziale h−1, 1).
Wiemy, że nasza funkcja w przedziale h−1, 1) jest malejaca,
˛ zatem w lewym krańcu tego przedziału musi być wartość
najwi˛eksza, natomiast w prawym wartość najmniejsza. Ponieważ 1 6∈ Df , a wartości funkcji w pobliżu jedynki z
lewej strony robia˛ si˛e coraz mniejsze, wi˛ec najmniejsza wartość funkcji nie istnieje i przyjmujemy wtedy, że jest to
−∞. Wartość najwi˛eksza natomiast, to f (−1) = − 11
. Zatem na przedziale h−1, 1) funkcja f przyjmuje wartości ze
4
zbioru:
Wf =
2.2.1
11
−∞, −
4
.
Zbiór wartości funkcji kwadratowej
W arkuszach maturalnych bardzo cz˛esto pojawia si˛e zadanie podobne do tego z punktu 9 ale dotyczy ono zwykle funkcji
kwadratowej. Ogólna postać takiego zadania wyglada
˛ nast˛epujaco:
˛
Przykład 9. Określ zbiór wartości funkcji f (x) = ax2 + bx + c na przedziale hx1 , x2 i.
Określenie zbioru wartości funkcji kwadratowej na danym przedziale powinniśmy zaczać
˛ od obliczenia wartości funkcji
na krańcach danego przedziału oraz znalezieniu wierzchołka paraboli. Zwykle wierzchołek oznaczamy jako par˛e (p, q).
Nast˛epnie mamy dwie możliwości:
. p należy do przedziału hx1 , x2 i – wówczas wartościa˛ najmniejsza˛ funkcji jest najmniejsza z liczb f (x1 ), f (x2 ) i q ,
natomiast wartość najwi˛eksza funkcji jest najwi˛eksza˛ z nich.
. p nie należy do przedziału hx1 , x2 i – wtedy wartościa˛ najmniejsza˛ funkcji jest mniejsza z liczb f (x1 ), f (x2 ), natomiast
wartość najwi˛eksza jest liczba˛ wi˛eksza˛ z tych dwóch.
Zilustrujmy t˛e metod˛e na konkretnym przykładzie.
Przykład 10. Określ zbiór wartości funkcji f (x) = −x2 + 4x + 5 na przedziale h−2, 4i.
Obliczamy
f (−2) = −(−2)2 + 4 · (−2) + 5 = −7; f (4) = −42 + 4 · 4 + 5 = 5,
oraz
p=−
b
4
=−
= 2.
2a
2 · (−1)
∆
Wtedy q = f (p) = −22 + 4 · 2 + 5 = 9. Można posłużyć si˛e również wzorem q = − 4a
.
Ponieważ p = 2 ∈ h−2, 4i, wi˛ec wyznaczamy najwi˛eksza˛ i najmniejsza˛ liczb˛e ze zbioru {−7, 5, 9}, co daje odpowiedź:
Wf = h−7, 9i.
64
2.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI
Rozwia˛żmy teraz to zadanie z pomoca˛ Sage’a.
sage: lk = -2 # lewy kraniec przedziału
sage: pk = 4
# prawy kraniec przedziału
sage: a = -1; b = 4; c = 5;
sage: f(x) = a*x^2+b*x+c
sage: p = -b/(2*a)
sage: q = f(p)
sage: if p > lk and p < pk:
fmin = min( f(lk), f(pk), q )
fmax = max( f(lk), f(pk), q )
sage: else:
fmin = min( f(lk), f(pk) )
fmax = max( f(lk), f(pk) )
sage: print ’min =’, fmin
sage: print ’max =’, fmax
wynik: min = −7
max = 9
Teraz aby określić zbiór wartości dowolnej funkcji kwadratowej w danym przedziale, wystarczy zmienić wartości krańców
przedziału lk, pk oraz podać odpowiednie współczynniki a, b, c.
Program obliczy wartości współczynników p i q , po czym instrukcja˛ if p > lk and p < pk: sprawdzi czy p ∈
(lk, pk). Jeśli tak, to wartości minimalna i maksymalna sa˛ wyszukiwane w zbiorze {f (lk), f (pk), q}, w przeciwnym
przypadku w zbiorze {f (lk), f (pk)}.
Na koniec zobaczmy wykres naszej funkcji w przedziale h−2, 4i z zaznaczonym wierzchołkiem oraz punktem (−2, −7).
65
ROZDZIAŁ 2. FUNKCJE
9
8
7
6
5
4
3
2
1
-3
-2
-1
1
-1
2
3
4
-2
-3
-4
-5
-6
-7
2.2.2
Porównywanie ze soba˛ dwóch funkcji.
Cz˛esto si˛e zdarza, że badamy kilka funkcji i interesuja˛ nas relacje jakie mi˛edzy nimi zachodza.˛ Na przykład, może nas
interesować dla jakich argumentów jedna funkcja przyjmuje wartości wi˛eksze niż druga albo czy ich wykresy maja˛ wspólne
punkty, itd. Dla przykładu rozwia˛żmy nast˛epujace
˛ zadanie:
Przykład 11. Dla jakich argumentów funkcja f (x) = −x3 − x2 + 2x przyjmuje wartości mniejsze niż funkcja
g(x) = −2x − 4?
Możemy to zadanie sformułować bez użycia terminu „funkcja”, np.
Przykład 12. Rozwia˛ż nierówność −x3 − x2 + 2x < −2x − 4, gdzie x ∈ R.
Rozwia˛ż˛e najpierw to zadanie jak zwykła˛ nierówność. Przenoszac
˛ wszystko na lewa˛ stron˛e otrzymujemy
−x3 − x2 + 4x + 4 < 0.
Pogrupujmy parami wyrazy wielomianu po lewej stronie nierówności oraz wyłaczmy
˛
wspólny czynnik przed nawias, tzn.
−x2 (x + 1) + 4(x + 1) < 0.
Otrzymujemy stad
˛
(4 − x2 )(x + 1) < 0.
Rozkładajac
˛ jeszcze trójmian z pierwszego nawiasu na czynniki liniowe (zamiast obliczać delt˛e i pierwiastki warto zauważyć, że można tu skorzystać ze wzoru skróconego mnożenia na różnic˛e kwadratów dwóch liczb) dostajemy nierówność
(2 + x)(2 − x)(x + 1) < 0.
Narysujmy teraz wykres wielomianu stojacego
˛
z lewej strony.
sage: plot((2+x)*(2-x)*(x+1), x, -3, 3, fill=0)
66
2.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI
y
6
4
2
-3
-1
-2
1
2
3
x
-2
-4
Rozwiazaniem
˛
nierówności jest wi˛ec zbiór (−2, −1) ∪ (2, ∞). Wynik ten możemy uzyskać również poleceniem:
sage: solve((2+x)*(2-x)*(x+1)<0, x)
wynik: [[x > (−2) , x < (−1)] , [x > 2]]
Prawda, że łatwo i szybko?
Nasze zadanie możemy też rozwiazać
˛ geometrycznie. Przyjrzyjmy si˛e wykresom
y
4 f(x) =−x3 −x2
2 g(x) =−2x−4
-3
-2
-1
1
-2
+2x
2
-4
-6
-8
-10
uzyskanym za pomoca˛ poleceń
sage:
f(x) = -x^3-x^2+2*x
sage:
g(x) = -2*x-4
sage:
wykres_f = plot(f, x, -3, 3, color=’green’,\
legend_label=r’$f(x) = -x^3-x^2+2x$’)
67
3
x
ROZDZIAŁ 2. FUNKCJE
sage:
wykres_g = plot(g, x, -3, 3,\
legend_label=r’$g(x) = -2x-4$’,\
fill=f, fillcolor=(0.9,0.9,0.9) )
sage:
wykres_f + wykres_g
Pytamy w jakich przedziałach wykres funkcji f leży poniżej wykresu funkcji g . Z rysunku łatwo odczytać, że dla
x ∈ (−2, −1) ∪ (2, ∞).
2.3
Funkcje poznane w szkole
Rozwia˛żmy teraz kilka zadań dotyczacych
˛
funkcji, które poznaliście badź
˛ dopiero poznacie w szkole.
2.3.1
Funkcja liniowa
Prawdopodobnie funkcja liniowa była pierwsza˛ funkcja,˛ która˛ poznaliście w szkole.
Wiecie zatem, że charakteryzuje ona wielkości wprost proporcjonalne. Oznacza to, że jeśli x i y oznaczaja˛ pewne wielkości
wprost proporcjonalne, to zachodzi mi˛edzy nimi zwiazek
˛
y =a·x
dla pewnej liczby rzeczywistej a 6= 0. Przykładowo jeśli x zwi˛ekszymy dwukrotnie, to y też zwi˛ekszy si˛e dwukrotnie
a(2x) = 2(ax) = 2y.
Ogólny wzór funkcji liniowej zawiera jeszcze jeden współczynnik b ∈ R, tzn.
f (x) = ax + b.
Jest to funkcja bardzo łatwa w analizie, bo jak wiemy jej wykresem jest linia prosta. Zatem wystarczy, że poznamy dwa
punkty jej wykresu i już możemy naszkicować wykres. Majac
˛ równanie funkcji, znalezienie dwóch punktów jest banalnie
proste, gdyż możemy wybrać dowolne dwie liczby (bo dziedzina˛ funkcji liniowej jest cały zbiór liczb rzeczywistych) i
obliczyć dla nich wartości.
Troch˛e trudniej jest w sytuacji odwrotnej, tzn. majac
˛ dane dwa punkty znaleźć wzór funkcji liniowej. Weźmy np. punkty
A = (−3, 2) i B = (2, −1). Zadanie możemy rozwiazać
˛ na kilka sposobów. Przykładowo na lekcjach geometrii poznaliście
zapewne wzór na równanie prostej przechodzacej
˛ przez dwa punkty A = (xA , yA ), B = (xB , yB ), które jest postaci:
y − yA =
yB − yA
(x − xA ).
xB − xA
68
2.3. FUNKCJE POZNANE W SZKOLE
Innym sposobem jest wykorzystanie ogólnego wzoru funkcji liniowej. Podstawiajac
˛ współrz˛edne punktów do równania
y = ax + b,
otrzymamy układ równań, z którego b˛edziemy mogli obliczyć współczynniki a i b. Znajdźmy równanie prostej tym właśnie
sposobem (pierwszy sposób pozostawiam jako ćwiczenie dla czytelnika). Otrzymujemy wi˛ec układ równań

a · (−3) + b = 2
a · 2 + b = −1
Łatwo go rozwia˛żemy metoda˛ przeciwnych współczynników. Wystarczy pomnożyć pierwsze równanie przez (−1) i dodać
do drugiego.
5a = −3
czyli a = −
3
= −0.6.
5
Otrzymaliśmy proste równanie z jedna˛ niewiadoma˛
b = −1 − 2a = −1 − 2 · (−0.6) = 0.2.
˛
układów równań, np.
Polecenia solve można użyć również do rozwiazywania
sage: var(’a, b’)
sage: solve( [a*(-3)+b==2, a*2+b==-1], a, b )
3
1
a= −
wynik:
,b =
5
5
Otrzymujemy wi˛ec równanie prostej
f (x) = −0.6x + 0.2.
Program Sage wykona t˛e prac˛e za nas jeszcze szybciej. Otóż posiada specjalna˛ metod˛e find_fit, która potrafi dobierać
współczynniki poszukiwanej funkcji, tak aby była jak najlepiej dopasowana do listy punktów, które podajemy jako parametr.
W naszym przypadku wydajemy instrukcje:
sage: var(’a, b’)
sage: funkcja_lin(x) = a * x + b
sage: find_fit( [(-3,2), (2,-1)], funkcja_lin )
Po wykonaniu zobaczymy współczynniki:
wynik: [a = (−0.6) , b = 0.2]
Jak widzimy, dla funkcji liniowej to dopasowanie jest bardzo dokładne. Otrzymaliśmy te same współczynniki jak z poprzednich obliczeń. Dla bardziej złożonych funkcji to dopasowanie może nie być tak dokładne. Na dokładność wpływa przede
wszystkim liczba punktów przekazanych funkcji find_fit.
69
ROZDZIAŁ 2. FUNKCJE
Przyjrzyjmy si˛e teraz wykresowi funkcji, której wzór otrzymaliśmy.
sage: f(x) = -0.6 * x + 0.2
sage: plot(f, -1.5, 1.5,\
legend_label=r’$f(x)=-\frac{3}{5}x+\frac{1}{5}$’)
1
0.8
f(x) =−53 x + 15
0.6
0.4
0.2
-1.5
-1
-0.5
0.5
1
1.5
-0.2
-0.4
-0.6
Widzimy, że jest ona malejaca
˛ w całej swojej dziedzinie (Df = R). Jeśli a < 0, to funkcja liniowa maleje, natomiast dla
a > 0 rośnie.
Łatwo jest wyznaczyć punkt przeci˛ecia wykresu funkcji liniowej z osia˛ Oy , gdyż jest to zawsze punkt o współrz˛ednych
2
(0, b), czyli w tym przypadku (0, 10
). Z tego powodu b nazywany jest współczynnikiem przesuni˛ecia, gdyż powoduje on
przesuni˛ecie wykresu funkcji f (x) = ax o b jednostek w pionie. Rysujac
˛ wykres, możemy najpierw narysować prosta˛
przechodzac
˛ a˛ przez poczatek
˛ układu współrz˛ednych, czyli punkt (0, 0), a potem przesunać
˛ o odpowiednia˛ liczb˛e jednostek
w gór˛e badź
˛ w dół.
1
0.8
0.6
( ) =−35 x + 15
g(x) =−35 x
f x
0.4
0.2
-1.5
-1
-0.5
0.5
-0.2
-0.4
-0.6
-0.8
70
1
1.5
2.3. FUNKCJE POZNANE W SZKOLE
b
Miejsce zerowe możemy wyznaczyć wzorem x0 = − o ile a 6= 0 lub instrukcja˛ solve(a*x+b, x). Sa˛ one postaci
a
x0 = −
Zatem punkt
2.3.2
1
,0
3
0.2
2
1
= = .
−0.6
6
3
jest przeci˛eciem wykresu tej funkcji z osia˛ Ox.
Funkcja kwadratowa
Druga,˛ dość obszernie omawiana˛ funkcja˛ w szkole, jest z pewnościa˛ funkcja kwadratowa. Wiemy, że wykresem funkcji
kwadratowej jest parabola. Znali ja˛ już starożytni Grecy. W III wieku p.n.e. Appolonius z Perge, matematyk grecki opisał
w swojej ksi˛edze “Stożkowe” mi˛edzy innymi parabol˛e. Dlaczego ksi˛ega nosiła taki tytuł? Otóż wi˛ekszość krzywych które
poznaliście w szkole, tj. prosta (możemy ja˛ też do nich zaliczyć), parabola, hiperbola, okrag,
˛ elipsa, można otrzymać z
przekroju stożka odpowiednia˛ płaszczyzna.˛
Parabola powstaje przez przeci˛ecie stożka płaszczyzna˛ równoległa˛ do jego tworzacej
˛ i nie zawierajac
˛ a˛ jego wierzchołka.
Możemy to zobaczyć na poniższych rysunkach.
Otrzymałem je poleceniem, które widzicie poniżej. W interaktywnym arkuszu dołaczonym
˛
do tej ksia˛żki znajdziecie
t˛e instrukcj˛e. B˛edziecie mogli dokładniej si˛e przyjrzeć temu przekrojowi. Ja umieściłem tylko trzy zdj˛ecia z różnych
perspektyw.
sage: implicit_plot3d(x^2+y^2-z^2,\
(x,-15,15), (y,-15,15),(z,-15,15),\
opacity=0.3, aspect_ratio=1)+\
implicit_plot3d(2*sqrt(2)*x+sqrt(2)*y-3*z+12,
(x,-15,15), (y,-15,15), (z,-15,15)
,opacity=0.5, color=’gray’, aspect_ratio=1)
Już Galileusz odkrył, że jak wyrzucicie kamień wysoko przed siebie, to tor jego lotu podczas spadania wyznaczy krzywa˛ w
kształcie paraboli.
71
ROZDZIAŁ 2. FUNKCJE
Wiele własności funkcji kwadratowej mieliście okazj˛e sobie przypomnieć podczas rozwiazywania
˛
zadań z poprzedniego
podrozdziału. Pojawił si˛e tam wzór na wyróżnik kwadratowy (delt˛e), wzory na pierwiastki i postać iloczynowa˛ czy też sposób wyznaczania zbioru wartości tej funkcji na ustalonym przedziale. Oprócz postaci ogólnej i liniowej funkcja kwadratowa
może przyjmować jeszcze postać kanoniczna˛
f (x) = a(x − p)2 + q,
b
∆
jest wierzchołkiem paraboli.
gdzie punkt (p, q) = − , −
2a 4a
Każda z tych postaci ma swoje szczególne zastosowanie. Z postaci iloczynowej łatwo jest wskazać miejsca zerowe funkcji.
Widać też przedziały, w których funkcja przyjmuje wartości dodatnie badź
˛ ujemne, co wykorzystujemy przy rozwiazywaniu
˛
nierówności kwadratowych. Z postaci kanonicznej natomiast łatwo zbadać monotoniczność czy podać zbiór wartości
funkcji.
Rozwia˛żmy nast˛epujace
˛ zadanie:
Przykład 13.
Wiedzac,
˛ że liczby −1 i 2 sa˛ miejscami zerowymi funkcji f (x) = ax2 + bx − 3 znajdź
współczynniki a i b oraz zapisz ja˛ w postaci kanonicznej.
Skoro liczby −1 i 2 sa˛ miejscami zerowymi funkcji, wi˛ec f (−1) = f (2) = 0, co daje nast˛epujacy
˛ układ równań:

a · (−1)2 + b · (−1) − 3 = 0
a · 22 + b · 2 − 3 = 0
czyli

a − b − 3 = 0
4a + 2b − 3 = 0.
Mnożac
˛ pierwsze równanie przez 2 i dodajac
˛ do drugiego otrzymujemy 6a − 9 = 0, czyli a =
pierwszego równania otrzymujemy b = a − 3 =
3
2
−3=
− 32 .
Obliczmy teraz współrz˛edne wierzchołka paraboli, gdyż przydadza˛ nam si˛e do rozwiazania.
˛
3
q = f (p) =
2
f (x) =
− 32
1
3 =
2
2· 2
2
1
3 1
27
− · −3=− .
2
2 2
8
Otrzymujemy wi˛ec
3
2
x−
72
Wstawiajac
˛ np. do
Możemy zapisać wi˛ec postać ogólna˛ funkcji
3
3
f (x) = x2 − x − 3.
2
2
p=−
3
.
2
1
2
2
+−
27
.
8
2.3. FUNKCJE POZNANE W SZKOLE
W programie Sage współczynniki a, p i q znajdziemy posługujac
˛ si˛e użyta˛ już wcześniej funkcja˛ find_fit.
sage: var(’a,p,q’)
sage: find_fit([(-1,0), (2,0), (0,-3)], a*(x-p)^2+q,\
parameters=[a,p,q], variables=[x])
wynik: [a = 1.5, p = 0.5, q = (−3.375)]
Zwróćmy uwag˛e, że oprócz punktów wyznaczonych przez miejsca zerowe podałem jeszcze jeden punkt o współrz˛ednych
(0, −3). Łatwo go wyznaczyć, gdyż jest on punktem przeci˛ecia paraboli z osia˛ Oy . Skoro leży na osi Oy , to pierwsza
jego współrz˛edna musi być 0. Jak podstawicie do postaci ogólnej w miejsce x zero, to w wyniku otrzymacie oczywiście c.
Zatem jest to punkt (0, c). Gdybyśmy nie podali tego punktu, to program miałby problem ze znalezieniem współczynników,
ponieważ parabol posiadajacych
˛
miejsca zerowe w punktach (−1, 0), (2, 0) jest nieskończenie wiele. Na poniższym rysunku
przedstawiłem kilka z nich. Kolorem niebieskim narysowana jest parabola z naszego zadania.
a =1
a =−1.5
a =3
a =−5
10
5
-2
-1
1
-5
73
2
3
ROZDZIAŁ 2. FUNKCJE
Rozwia˛żmy jeszcze jedno zadanie zwiazane
˛
z funkcja˛ kwadratowa.˛
Przykład 14. Wiedzac,
˛ że poniższy wykres jest wykresem funkcji kwadratowej
f (x) = ax2 + bx + c,
znajdź współczynniki a, b, c. Zapisz t˛e funkcj˛e w postaci kanonicznej i określ przedziały monotoniczności tej
funkcji.
y
3
2.5
2
1.5
1
0.5
-4
-3
-2
-1
1
-0.5
2
3
4
x
-1
-1.5
Z wykresu funkcji możemy odczytać jedno miejsce zerowe x1 = −4 oraz wierzchołek paraboli (1, 2.5). Te dane sa˛
wystarczajace,
˛ aby zbadać monotoniczność funkcji. Otóż funkcja jest rosnaca
˛ dla x ∈ (−∞, 1i oraz jest malejaca
˛ dla
x ∈ h1, ∞).
Pozostaje znaleźć brakujace
˛ współczynniki. Nieuprzejmy autor tego zadania ukrył przed nami dość ważna˛ cz˛eść wykresu,
która jak wiemy zawiera drugie miejsce zerowe. Gdybyśmy je znali, to powtarzajac
˛ metod˛e z poprzedniego zadania,
dostalibyśmy rozwiazanie.
˛
Możemy oczywiście znaleźć brakujace
˛ miejsce zerowe. Wystarczy zauważyć, że sa˛ one położone symetrycznie wzgl˛edem
prostej x = p czyli
x1 + x2
= p.
2
Wstawiajac
˛ za x1 = −4 oraz p = 1, obliczamy x2 = 6. Reszt˛e zadania pozostawiam czytelnikowi jako ćwiczenie.
Rozwia˛żmy to zadanie teraz inna˛ metoda.˛ Majac
˛ współrz˛edne wierzchołka paraboli i dowolny inny punkt leżacy
˛ na niej
możemy znaleźć trójmian kwadratowy wykorzystujac
˛ jego postać kanoniczna.˛ Podstawiajac
˛ do a(x − p)2 + q nasze dane,
otrzymujemy
f (x) = a(x − 1)2 + 2.5.
Wiemy również, że punkt (−4, 0) leży na wykresie tej funkcji. Po podstawieniu do powyższego wzoru, otrzymujemy
0 = a(−4 − 1)2 + 2.5.
Zatem a = −0.1. Szukane współczynniki otrzymamy po sprowadzeniu postaci kanonicznej do ogólnej.
f (x) = −0.1(x − 1)2 + 2.5 = −0.1(2 −2x + 1) + 2.5 = −0.1x2 + 0.2x + 2.4.
74
2.3. FUNKCJE POZNANE W SZKOLE
2.3.3
Funkcja wymierna
Wspomniałem wcześniej o funkcji wymiernej, czyli takiej, w której definicji używamy kreski ułamkowej (operacji dzielenia)
oraz w liczniku oraz w mianowniku znajduje si˛e wielomian.
Jedna˛ z prostszych jej odmian jest tak zwana funkcja homograficzna. Charakteryzuje ona wielkości odwrotnie proporcjonalne, tzn.
y=
a
,
x
przy czym musimy koniecznie założyć, że x 6= 0.
Jeśli przykładowo trzykrotnie wzrośnie zmienna x, to wartość y trzykrotnie zmaleje,
a
1 a
1
= · = · y.
3·x
3 x
3
Podobnie jak parabola, wykres funkcji homograficznej jest również krzywa˛ stożkowa,˛ która˛ nazywamy hiperbola.˛ Powstaje
przez przeci˛ecie stożka płaszczyzna,˛ która nie jest równoległa do tworzacej
˛ ani też prostopadła do jego osi obrotu.
Z pewnościa˛ rysowaliście w szkole wykresy hiperbol w prostokatnym
˛
układzie współrz˛ednych. Wiecie wi˛ec, że obie osie
układu sa˛ asymptotami jej wykresu. Własność ta powoduje, że funkcja homograficzna dobrze ilustruje operacj˛e przesuwania
wykresu o dany wektor [p, q].
Przesuńmy wykres funkcji f (x) =
5
x
o wektor [−2, 1]. Wiemy, że wzór otrzymanej funkcji b˛edzie wtedy wygladał
˛
nast˛epujaco:
˛
h(x) =
5
+ 1.
x+2
75
ROZDZIAŁ 2. FUNKCJE
y
10
f(x) = x5
5 +1
h(x) = x +2
8
6
4
2
-10
-8
-6
-4
-2
-2
2
4
6
8
x
-4
-6
-8
sage: f(x) = 5/x
sage: plot(f, x, -10, 8, exclude=[0], color=’green’) +\
plot(f(x+2)+1, x, -10, 8, exclude=[-2],\
detect_poles="show") +\
plot(1, x, -10, 8, linestyle=’--’, color=’gray’)
Aby
opcji
zobaczyć
asymptot˛e
pionowa,˛
detect_poles="show".
powstała˛
Natomiast
po
pozioma˛
przesuni˛eciu
asymptot˛e
hiperboli,
narysowałem
należy
użyć
poleceniem
plot(1, x, -10, 8, linestyle=’--’, color=’gray’).
Rozwia˛żmy nast˛epujace
˛ zadanie.
Przykład 15. Przekształćmy wzór funkcji f (x) =
1 + 3x
do postaci kanonicznej, tzn.
4 − 6x
f (x) =
e
+ q.
x−p
Program Sage posiada funkcj˛e partial_fraction przeznaczona˛ specjalnie dla wyrażeń wymiernych. Rozkłada on
wyrażenie na sum˛e ułamków, które w licznikach posiadaja˛ tylko liczby. My potrzebujemy dokładnie takiej postaci. Zatem
sage: var(’x’)
sage: f = (1+3*x)/(4-6*x)
sage: f.partial_fraction()
wynik: −
1
3
−
2 (3 x − 2) 2
76
2.3. FUNKCJE POZNANE W SZKOLE
Otrzymujemy wi˛ec e = − 32 , p =
2
3
oraz q = − 12 . Czyli funkcja może być zapisana w postaci:
f (x) = −
2.3.4
3
1
− .
2(3x − 2) 2
Funkcja wykładnicza i logarytmiczna
Sa˛ jeszcze dwie klasy funkcji, które mogliście poznać w szkole:
Funkcja wykładnicza
Funkcja logarytmiczna
x
f (x) = a
f (x) = loga x
a > 0 ∧ a 6= 1
Napisałem definicje tych funkcji obok siebie, gdyż sa˛ one ze soba˛ zwiazane
˛
w sposób szczególny. Otóż sa˛ funkcje, które
możemy odwracać. Odwrócenie funkcji f polega na znalezieniu drugiej funkcji zwykle oznaczanej symbolem f −1 takiej,
że dla każdego argumentu x ∈ Df zachodzi zwiazek
˛
f −1 f (x) = x.
Zachodzi też zwiazek
˛
odwrotny, tzn. dla każdego argumentu x ∈ Df −1 mamy
f f −1 (x) = x.
Jak si˛e zapewne domyślacie, funkcja wykładnicza i logarytmiczna sa˛ funkcjami odwracalnymi i każda z nich jest odwrotnościa˛ drugiej. Zatem prawdziwe sa˛ wzory
loga ax = x,
oraz
aloga x = x.
(2.1)
Wynikaja˛ one z definicji logarytmu, gdyż jak wiemy
loga b = c ⇔ ac = b
Dziedzina˛ funkcji logarytmicznej jest zbiór (0, ∞), a zbiorem wartości jest R. Dla funkcji wykładniczej mamy odwrotna˛
sytuacj˛e, tzn. dziedzina˛ jest zbiór liczb rzeczywistych, a zbiorem wartości jest przedział (0, ∞). I tak dzieje si˛e zawsze w
przypadku funkcji wzajemnie odwrotnych. Narysujmy wykresy tych funkcji dla a = 2. Logarytm o podstawie a liczby b,
czyli loga b w programie Sage obliczamy poleceniem log(b,a).
sage: plot(2^x, x,-4,7, color=’red’, aspect_ratio=0.1)
sage: plot(log(x,2),x,0,60, exclude=[0], aspect_ratio=6)
77
ROZDZIAŁ 2. FUNKCJE
y
y
y =2x
6
60
4
50
40
2
30
10
20
-2
10
-4
-2
4
2
6
x
20
30
40
50
60
x
y =log2 x
-4
Widzimy, że obie funkcje sa˛ wówczas rosnace,
˛ przy czym wykładnicza rośnie wiele razy szybciej od logarytmicznej.
Użyłem opcji aspect_ratio aby odpowiednio wyskalować osie tych układów. Dla funkcji wykładniczej ustawiłem
aspect_ratio=0.1, co oznacza, że długość jednej jednostki poziomej stanowi dziesi˛eć jednostek pionowych. W
przypadku funkcji logarytmicznej użyłem aspect_ratio=6, co oznacza, że długość jednej jednostki pionowej stanowi
sześć jednostek poziomych. Spróbujcie narysować te wykresy bez tych opcji.
Dla a = 0.5 wykresy wygladaj
˛ a˛ nast˛epujaco:
˛
y
y
4
60
y =(12 )x
50
2
40
10
30
30
40
50
60
x
-4
10
-4
20
-2
20
-6
y =log0.5x
-2
4
2
x
-6
Tym razem obie funkcje sa˛ malejace.
˛ Ogólnie gdy a ∈ (0, 1), to funkcja wykładnicza i logarytmiczna maleja,˛ natomiast dla
a > 1 obie rosna.˛
Przykład 16. Napisz wzór funkcji wykładniczej f (x) = ax−p + q majac
˛ jej wykres.
y
8
6
4
2
-6
-4
-2
2
-2
Podaj wzór funkcji do niej odwrotnej.
78
x
2.3. FUNKCJE POZNANE W SZKOLE
Z wykresu od razu widzimy, że q = −2.
Łatwo odczytamy z wykresu współrz˛edne dwóch punktów: (−2, 0) oraz (0, 6). Podstawmy je do równania f (x) = ax−p −2.
Wtedy

a−p − 2 = 6 ⇒ a−p = 8
a−2−p − 2 = 0 ⇒ a−p · a−2 = 2.
Podstawiajac
˛ teraz pierwsze równanie do drugiego, otrzymamy
8 · a−2 = 2 ⇒ a−2 = 4−1 ⇒ a2 = 4 ⇒ a = 2.
Wybieramy tylko rozwiazanie
˛
dodatnie, gdyż wiemy, że a > 0. Po podstawieniu do pierwszego z równań otrzymujemy
równość
2−p = 8 ⇒ 2−p = 23 .
Czyli p = −3 oraz f (x) = 2x+3 − 2.
Sprawdźmy w programie Sage, czy nie popełniliśmy nigdzie bł˛edu:
sage: var(’a,p,q’)
sage: a = solve(8*a^(-2) == 2, a)
sage: p = solve(2^(-p) == 8, p)
wynik: [a = (−2) , a = 2], [p = (−3)]
Jak widzimy, wszystko si˛e zgadza.
Aby znaleźć funkcj˛e odwrotna,˛ musimy z równania y = 2x+3 − 2 wyznaczyć zmienna˛ x.
sage: x,y = var(’x,y’)
sage: f = y == 2^(x+3) -2
sage: f.solve(x)
wynik:
3 log (2) − log (y + 2)
x=−
log (2)
Przekształćmy to równanie samodzielnie. Logarytmujac
˛ obustronnie poniższe równanie logarytmem o podstawie 2, na
podstawie wzorów (2.1) y + 2 = 2x+3 otrzymujemy log2 (y + 2) = x + 3. Zatem
x = log2 (y + 2) − 3.
Wzór funkcji odwrotnej jest nast˛epujacy:
˛
f −1 (x) = log2 (x + 2) − 3.
79
ROZDZIAŁ 2. FUNKCJE
Widzimy, że otrzymaliśmy go po zamianie zmiennej x ze zmienna˛ y w poprzednim równaniu. Korzystajac
˛ z własności
logarytmu wynik, który dał nam program Sage możemy przekształcić do takiej samej postaci. Proponuj˛e wykonać to zadanie
jako ćwiczenie.
Sage domyślnie definiuje logarytmy o podstawie e, gdzie e jest tzw. liczba˛ Eulera. Należy o tym pami˛etać, gdyż zwykle w
ksia˛żkach matematycznych log(a) oznacza logarytm dziesi˛etny liczby a.
Liczba e jest ważniejsza˛ liczba˛ w matematyce niż liczba π , która˛ doskonale znacie. Odkrył ja˛ w XVI wieku szkocki
matematyk John Napier (Neper), z tego powodu nazywana jest również liczba˛ Nepera.
Neper ułożył tablice logarytmów, które były bardzo pomocne przy skomplikowanych obliczeniach astronomicznych. Znacie
zapewne nast˛epujac
˛ a˛ ciekawa˛ własność logarytmów:
loga (b · c) = loga b + loga c.
Przez wiele lat wykorzystywano ja˛ do obliczania iloczynów dużych liczb. Dzi˛eki niej mnożenie liczb zast˛epujemy sumowaniem. Znajdźmy tym sposobem na przykład iloczyn 128 · 512.
log2 (128 · 512) = log2 128 + log2 512 = 7 + 8 = 15.
Majac
˛ teraz odpowiednie tablice, w których mog˛e odczytać dla jakiej liczby logarytm przy podstawie 2 wynosi 15, dostan˛e
wynik. Oczywiście wiemy, że szukana˛ liczba˛ jest
215 = 32768.
Czyli 128 · 512 = 32768. Dziś, majac
˛ do dyspozycji komputery, nie musimy korzystać z tego typu udogodnień. Sage potrafi
wykonywać mnożenie na bardzo dużych liczbach w mgnieniu oka.
sage: %time 99412424142345342342 * 9994313131231343242423
wynik: 993558896013381860643561589195210232574666
wynik: CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Program Sage może nam podać wartość liczby Eulera z bardzo duża˛ dokładnościa,˛ np. zobaczmy dla 30 miejsc po przecinku
(mógłbym zamiast 30 użyć 30000, lecz wtedy ksia˛żka zbyt mocno zwi˛ekszyłaby swoja˛ obj˛etość).
sage: e = exp(1)
wynik: 2.71828182845904523536028747135
sage: e.N(digits=30)
Wyrażenie exp(x) oznacza funkcj˛e wykładnicza˛ y = ex , zatem exp(1) = e1 = e.
Liczba e posiada wiele definicji. Jedna˛ z nich jest granica ciagu
˛
e = lim
n→∞
1+
Oznacza to, że jak b˛edziemy obliczać kolejne wyrażenia 1 +
1
n
1 n
n
n
.
dla coraz to wi˛ekszych liczb naturalnych, to b˛edziemy
otrzymywać lepsze przybliżenie liczby e. Obliczmy je dla liczb naturalnych od 1 do 10, a potem od 10000 do 10010.
80
2.4. ZADANIA
sage: var(’n’)
sage: for n in range(1,11):
print N( (1 + 1/n)^n )
sage: for n in range(10000,10010):
print N( (1 + 1/n)^n )
Widzimy, że gdy n jest wi˛eksze niż 10000, wartości nie różnia˛ si˛e już tak bardzo od siebie i możemy określić wartość liczby
e do trzech miejsc po przecinku, tzn. e ≈ 2.718.
Można też wyznaczyć wartość liczby e wzorem
e=
∞
X
1
.
n!
n=0
sage: e = sum([1/factorial(n) for n in range(0,200)])
sage: e.N()
wynik: 2.71828182845905
2.4
Zadania
1. Podaj wzór funkcji liniowej f (x) = ax + b i naszkicuj jej wykres wiedzac,
˛ że jest ona malejaca,
˛ przecina oś OY
w punkcie (0, −1) oraz współczynnik a jest jednym z rozwiazań
˛
równania x2 − 9 = 0.
2. Wykresem funkcji liniowej jest odcinek o końcach w punktach A = (−3, 1) i B = (2, 2). Podaj dziedzin˛e tej funkcji,
zbiór wartości oraz punkty przeci˛ecia z osiami układu współrz˛ednych.
3. Funkcja f określona jest wzorem

−2x + 1, dla x ≤ 1,
f (x) =
3x − 4, dla x > 1.
Naszkicuj wykres, podaj miejsca zerowe oraz określ zbiór wartości tej funkcji.
81
ROZDZIAŁ 2. FUNKCJE
4. Dla podanych funkcji kwadratowych podaj miejsca zerowe i postać iloczynowa˛ (o ile istnieja)
˛ oraz współrz˛edne
wierzchołka paraboli i postać kanoniczna.˛ Nast˛epnie naszkicuj ich wykresy.
(a) f (x) = 2x2 − 3x − 2, (b) f (x) = −5x2 + 20x − 20,
(c) f (x) = 3x2 + 4x + 5, (d) f (x) = −x2 + 5x − 4,
5. Funkcja f (x) = −x2 + x + 6 została zdefiniowana na przedziale h−3, 2i. Naszkicuj wykres tej funkcji oraz podaj jej
zbiór wartości.
6. Wiedzac,
˛ że poniższy wykres jest wykresem funkcji kwadratowej f (x) = ax2 + bx + c, znajdź współczynniki a, b, c,
zapisz ja˛ w postaci kanonicznej i określ przedziały monotoniczności tej funkcji.
y
3
2
1
-2
-1
1
2
3
4
x
-1
-2
-3
7. Funkcja f (x) = ax2 + 2x + 1 posiada tylko jedno miejsce zerowe. Znajdź współczynnik a oraz określ przedziały
monotoniczności tej funkcji.
8. Dla funkcji wymiernej f (x) =
jej wykres.
−4
− 5 podaj dziedzin˛e funkcji, zbiór wartości, określ monotoniczność i naszkicuj
x−2
3x − 2
. Podaj miejsce zerowe tej funkcji oraz punkt przeci˛ecia si˛e
4 − 2x
!
√
√
3
wykresu tej funkcji z osia˛ OY. Czy do wykresu tej funkcji należy punkt o współrz˛ednych A =
3 − 1,
−1 ?
2
9. Niech b˛edzie określona funkcja wzorem f (x) =
2 − 2x
za pomoca˛ pakietu Sage i na jego podstawie znajdź jej wzór w postaci
10. Naszkicuj wykres funkcji f (x) =
x+3
e
f (x) =
+ q.
x−p
ax + 5
oraz wyznacz współczynnik a wiedzac,
˛ że wykres tej funkcji
3x − 2
przechodzi przez punkt A = (2, 1). Dla jakich argumentów funkcja przyjmuje wartości wi˛eksze niż 1?
11. Określ dziedzin˛e funkcji homograficznej f (x) =
12. Oblicz
(a) log343 7, (b) log√8 32, (c) log 13 2712 , (d) log √1
√
3
25, (e) 3log3 123 , (f) 64log6
5
82
√
6
362
.
2.4. ZADANIA
13. Naszkicuj wykresy podanych funkcji, określ ich dziedziny, zbiór wartości oraz miejsca zerowe
(a) f (x) = log 21 (x − 5), (b) f (x) = log3 (x + 1) − 4, (c) f (x) = log2 x2 .
14. Znajdź współczynniki a i p funkcji wykładniczej f (x) = ax−p majac
˛ jej wykres na poniższym rysunku. Dla jakich
argumentów funkcja przyjmuje wartości z przedziału h2, 128i?
y
16
12
8
4
-3
-1
-2
1
0
2
x
15. Znajdź współczynniki a, p funkcji logarytmicznej f (x) = loga (x + p) majac
˛ jej wykres na poniższym rysunku. Dla
jakiego argumentu funkcja przyjmuje wartość 0.5?
y
4
2
-4
-3
-2
-1
1
2
4
3
x
-2
-4
ODPOWIEDZI
1. f (x) = −3x − 1.
y
7
6
4
5
4
2
-2
-1.5
-1
-0.5
3
0.5
1
x
2
1
-2
-4
Wf = −1,∞)
-3
-2
-1
-1
-2
Zad. 1.
83
1
2
3
Zad. 3.
ROZDZIAŁ 2. FUNKCJE
2. f (x) = 0.2x + 1.6, Df = h−3, 2i, Wf = h1, 2i. Punkty przeci˛ecia z osia˛ Ox nie istnieja˛ natomiast z osia˛ Oy :
(0, 1.6).
3. Wf = h−1, ∞). Wykres jest widoczny na rysunku powyżej.
4.
(a) f (x) = 2(x − 0.5)(x − 2), f (x) = 2(x − 34 )2 −
25
.
8
(b) f (x) = −5(x − 2)2 – jest to jednocześnie postać liniowa i kanoniczna.
(c) Skoro ∆ = −44 < 0, wi˛ec postać iloczynowa nie istnieje. Postać kanoniczna: f (x) = 3(x + 23 )2 +
11
.
3
(d) f (x) = −(x − 1)(x − 4), f (x) = −(x − 52 )2 + 49 .
60
-4
(a)
(b )
-2
50
100
4
2
(c)
80
-50
40
60
-100
30
40
-150
20
20
10
-4
-200
-2
4
2
-4
-4
(d
)
-2
-2
0
2
4
4
2
-10
-20
-30
-40
-50
Zad. 4.
5. Wf = h−∞, 25
i
4
10
10
5
5
-2
2
4
6
-2
2
-5
-5
-10
-10
-15
-15
-20
-20
Zad. 5.
4
6
Zad. 8.
6. a = − 23 , b = 1 13 , c = 2. Funkcja rośnie dla x ∈ (−∞, 1i, maleje dla x ∈ h1, ∞). Postać kanoniczna: f (x) =
− 23 (x − 1)2 + 83 .
7. Ponieważ ∆ = 0, wi˛ec a = 1. Skoro p = x0 = −1, wi˛ec f & dla x ∈ (−∞ − 1i oraz f % dla x ∈ h−1, ∞).
8. Df = R \ {2}, Wf = R \ {−5}.
√
√
9. Miejsce zerowe: x0 = 32 . Punkt przeci˛ecia z osia˛ Ox: (0, − 12 ). Punkt ( 3−1, 23 −1) nie leży na wykresie tej funkcji.
84
2.4. ZADANIA
10. Asymptot˛e pozioma˛ znajdziecie poleceniem: limit((2-2*x)/(x+3), x=infinity). Natomiast poleceniem
((2-2*x)/(x+3)).partial_fraction() zobaczycie szukana˛ postać funkcji. Zatem e = 8, p = −3, q =
−2, tzn. f (x) =
8
x+3
− 2.
11. a = − 12 , Df = R \ { 23 }, f (x) > 1 dla x ∈ ( 32 , 2).
12. (a) 13 , (b)
(c) −36, (d) − 43 , (e) 123, (f) 16.
10
,
3
5
50
3
1
5
6
7
8
9
10
-8
-10
14. f (x) = 2x+2 . f (x) ∈ h2, 128i dla x ∈ h−1, 5i.
√
2
-6
-3
Zad. 13.
15. a = 2, p = 4. f (x) = 0.5 dla x =
200
-4
-4
-2
150
-2
-2
-1
13.
100
-1
2
0
4
(b)
(a)
4
2 − 4.
85
(c)
1
2
3
4
5
ROZDZIAŁ 2. FUNKCJE
86
Rozdział 3
Rachunek prawdopodobieństwa i statystyka
matematyczna
Rachunek prawdopodobieństwa, to dział matematyki zajmujacy
˛ si˛e badaniem zdarzeń zachodzacych
˛
podczas wykonywania
doświadczeń losowych. Teori˛e t˛e zapoczatkowali
˛
Pierre de Fermat oraz Blaise Pascal w XVII wieku badajac
˛ pewna˛ gr˛e
losowa.˛
Natomiast bodźcem do powstania statystyki była analiza danych pochodzacych
˛
z tzw. spisów powszechnych dotyczacych
˛
narodzin oraz zgonów. Takie spisy były już prowadzone w starożytnym Rzymie. Poczatkowo
˛
terminem statystyka określano
dane zapisane tabelarycznie. Dzisiejsza statystyka obejmuje cała˛ gam˛e narz˛edzi służacych
˛
do analizy danych ale też metody
pozyskiwania i prezentacji tych danych.
3.1
Rachunek prawdopodobieństwa
Słowo “prawdopodobieństwo” pojawia si˛e nie tylko w literaturze matematycznej. Słyszymy przecież bardzo cz˛esto stwierdzenie, że coś prawdopodobnie si˛e wydarzy, np. istnieje prawdopodobieństwo, że jutro b˛edzie padać. Słowo to używane jest
też naprzemiennie ze słowem “szansa”.
Oznaczmy symbolem Ω zbiór wszystkich możliwych wyników, które możemy otrzymać podczas pewnego doświadczenia.
Cz˛esto mówimy, że jest to przestrzeń wszystkich zdarzeń elementarnych.
Z tego powodu elementy zbioru Ω nazywamy zdarzeniami elementarnymi, a jego podzbiory zdarzeniami. Przypomnijmy
teraz klasyczna˛ definicj˛e prawdopodobieństwa.
Prawdopodobieństwo zajścia pewnego zdarzenia A ⊂ Ω jest równe
P (A) =
|A|
,
|Ω|
gdzie
|A| – oznacza ilość zdarzeń elementarnych sprzyjajacych
˛
zdarzeniu A, czyli jest to po prostu ilość elementów tego zbioru,
|Ω| – jest liczba˛ wszystkich możliwych zdarzeń, czyli wszystkich elementów zbioru Ω.
87
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
Wzór jest prosty w zapisie, jednakże ukrywa w sobie pewna˛ problematyk˛e zwiazan
˛ a˛ ze zliczaniem elementów zbiorów A
i Ω.1 Oczywiście my b˛edziemy zajmować si˛e zbiorami, których elementy da si˛e policzyć, gdyż b˛eda˛ to albo zbiory skończone
albo takie, których elementy możemy ponumerować.2
Zobaczmy to na kilku przykładach.
Przykład 1. Rzucamy dwa razy kostka˛ do gry. Określ przestrzeń zdarzeń elementarnych.
Łatwo zliczymy ilość elementów przestrzeni Ω przy pomocy tak zwanej reguły mnożenia, która oparta jest na poj˛eciu
iloczynu kartezjańskiego. Jeśli ktoś nie pami˛eta badź
˛ jeszcze nie miał okazji si˛e dowiedzieć, co to takiego iloczyn
kartezjański zbiorów, to już przypominam. Jeśli weźmiemy sobie np. dwa zbiory A = {a1 , a2 , a3 } i B = {b1 , b2 }, to
iloczyn kartezjański tych zbiorów oznaczamy A × B i jest to zbiór par
(a1 , b1 ), (a1 , b2 ), (a2 , b1 ), (a2 , b2 ), (a3 , b1 ), (a3 , b2 ) ,
czyli wszystkich możliwych par, w których na pierwszym miejscu stoi element zbioru A, a na drugim element zbioru B . Jak
łatwo zauważyć, liczba tych par jest równa iloczynowi liczby elementów pierwszego zbioru przez liczb˛e elementów zbioru
drugiego, tzn.
|A × B| = |A| · |B|.
Warto podkreślić, że kolejność elementów w każdej takiej parze jest ważna, tzn. jeśli a 6= b, to para (a, b) jest różna od pary
(b, a).
Oczywiście zbiorów może być wi˛ecej niż dwa oraz liczba elementów tych zbiorów może być dowolna (nie tylko skończona). Z geometrii znacie iloczyn kartezjański R × R, jest to płaszczyzna, której używacie na geometrii analitycznej
dwuwymiarowej. Jak wiecie, każdy punkt na tej płaszczyźnie jest reprezentowany przez pewna˛ par˛e (x, y), gdzie x, y ∈ R
i takich par jest nieskończenie wiele.
Wróćmy jednak do naszego zadania. Zauważmy, że przestrzeń Ω składa si˛e z par (X, Y ) gdzie X i Y sa˛ liczbami ze zbioru
{1, 2, 3, 4, 5, 6}, czyli możemy zapisać, że
Ω = {1, 2, 3, 4, 5, 6} × {1, 2, 3, 4, 5, 6}.
Ile takich par możemy utworzyć? Oczywiście 6 · 6 = 36. Pierwszy element pary, X możemy wybrać na 6 sposobów i dla
każdego wybranego już elementu X możemy wybrać Y również na 6 sposobów. Odp. Ω = 36.
Program Sage posiada bardzo ciekawe dwie funkcje, Set oraz CartesianProduct. Pierwsza służy do definiowania
zbiorów, natomiast druga tworzy iloczyn kartezjański zbiorów.
˛ si˛e z cyfr od 1 do 6, a nast˛epnie utwórzmy iloczyn kartezjański
Zdefiniujmy sobie zbiór o nazwie Kostka składajacy
Kostka × Kostka = Omega.
sage: Kostka = Set([1,2,3,4,5,6])
sage: Omega = CartesianProduct(Kostka, Kostka).map(tuple)
1
2
Okazuje si˛e, że nie jest to możliwe dla dowolnych zbiorów. Dział matematyki zajmujacy
˛ si˛e tym problemem nazywa si˛e teoria˛ miary.
O takich zbiorach mówimy, że sa˛ przeliczalne.
88
3.1. RACHUNEK PRAWDOPODOBIEŃSTWA
sage: Omega.list()
Jak widzimy, Omega zawiera wszystkie możliwe pary. Możemy zobaczyć ich ilość za pomoca˛ polecenia
sage: Omega.cardinality()
wynik: 36
Weźmy teraz jako przykład typowa˛ sytuacj˛e w grze w karty. Zazwyczaj na poczatku
˛
rozgrywki uczestnicy otrzymuja˛ w
sposób losowy pewna˛ ilość kart, np.
Przykład 2. Z talii 52 kart otrzymujemy w sposób losowy 5 kart. Określ ilość możliwych rozdań.
Przede wszystkim należy zwrócić uwag˛e, że w tym przypadku nie ma znaczenia kolejność wyst˛epowania kart, w przeciwieństwie do poprzedniego zadania, gdzie kolejność wyst˛epowania elementów w parach była istotna. Kiedy dostaniemy
pi˛eć kart, nie ważne w jakiej kolejności je ułożymy w dłoni, to b˛edzie wcia˛ż tych samych pi˛eć kart. Mamy wi˛ec do czynienia z podzbiorami. Zatem pytanie możemy sformułować nast˛epujaco:
˛ ile istnieje podzbiorów pi˛ecioelementowych zbioru
składajacego
˛
si˛e z 52 kart.
n
oznacza ilość wszystkich k – elementowych podzbiorów zbioru n – elementowego i
k
możemy go obliczyć za pomoca˛ wzoru
n
n!
.
=
(n − k)! k!
k
Przyjmijmy oznaczenie, że
Takie podzbiory nazywamy kombinacjami, ściślej k –
elementowymi
kombinacjami zbioru n – elementowego.
52
Udzielmy wi˛ec odpowiedzi do naszego zadania: |Ω| =
. Z powyższego wzoru możemy wyliczyć dokładna˛ wartość
5
Omegi, jednak nie zrobi˛e tego, w zamian wykorzystam program Sage. Wystarczy wydać polecenie
sage: Omega = binomial(52,5)
i zobaczymy wynik |Ω| = 2598960.
Mało tego, możemy sobie w tym programie taka˛ tali˛e kart zdefiniować.
sage: Kolory = Set(["Trefl", "Karo", "Kier", "Pik"])
sage: Wartosci = Set([2, 3, 4, 5, 6, 7, 8, 9, 10, \
"Walet", "Dama", "Krol", "As"])
sage: Karty = CartesianProduct(Wartosci, Kolory)
sage: Karty = Karty.map(tuple)
89
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
Zobaczmy ile istnieje kolorów kart.
sage: Kolory.cardinality()
wynik: 4
różnych wartości
sage: Wartosci.cardinality()
wynik: 13
oraz wszystkich kart
sage: Karty..cardinality()
wynik: 52
Możemy teraz zdefiniować rodzin˛e wszystkich rozdań 5 – kartowych w sposób nast˛epujacy:
˛
sage: Rozdania = Subsets(Karty, 5)
Wiemy już ile ich jest i dlatego, że jest ich sporo, nie b˛edziemy ich tu wszystkich wyświetlać a tylko jedno losowe rozdanie.
sage: Rozdania.random_element()
wynik: {(As, Karo) , (9, Pik) , (9, Kier) , (7, Kier) , (5, Karo)}
Sprawdźmy dla pewności czy wszystkich rozdań jest rzeczywiście tyle ile obliczyliśmy wzorem na kombinacje.
sage: Rozdania.cardinality()
wynik: 2598960
Wszystko si˛e zgadza. Chciałbym zwrócić uwag˛e jeszcze raz na oznaczenie
n
.
k
Jest ono znane w matematyce pod nazwa˛ symbolu Newtona. Nazywany jest też współczynnikiem dwumianowym, a ta
nazwa bierze si˛e stad,
˛ że dowolna˛ pot˛eg˛e dwumianu x + y możemy obliczyć wg. wzoru
n X
n k n−k
x y
,
(x + y) =
k
k=0
n
zwany dwumianem Newtona. Jak widzimy, współczynniki tego dwumianu sa˛ odpowiednimi symbolami Newtona. Już na
przełomie XI i XII w. Chińczycy odkryli, że współczynniki te układaja˛ si˛e symetrycznie, tworzac
˛ tzw. trójkat
˛ Pascala.
90
3.1. RACHUNEK PRAWDOPODOBIEŃSTWA
Możemy go wygenerować w Sage-u za pomoca˛ poleceń
sage: for n in [0..5,step=1]:
wsp = [binomial(n,k)
for k in [0..n,step=1] ]
sage: print wsp
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
Teraz możemy łatwo zapisać wzór np. na sześcian sumy dwóch liczb biorac
˛ współczynniki z czwartego poziomu od góry:
(x + y)3 = x3 + 3x2 y + 3xy 2 + y 3 .
Przestrzeń zdarzeń elementarnych może posiadać nieskończenie wiele elementów. Przyjrzyjmy si˛e prostej grze.
Przykład 3. Dwóch graczy na przemian rzuca symetryczna˛ moneta.˛ Wygrywa ten, który pierwszy wyrzuci
orła. Określ przestrzeń zdarzeń elementarnych.
Widzimy, że liczba zdarzeń jest nieskończona. Może si˛e przecież zdarzyć, że orzeł nigdy nie wypadnie. Przestrzeń zdarzeń
elementarnych składa si˛e z nast˛epujacych
˛
ciagów
˛
Ω = (O), (R, O), (R, R, O), (R, R, R, O), . . . .
Nieskończona też jest liczba zdarzeń np. takiego doświadczenia:
Przykład 4. Weźmy sobie kwadrat o boku 2 cm i sprawdźmy jaka˛ mamy szans˛e, że losowo wybrany punkt
tego kwadratu b˛edzie leżał na trójkacie,
˛
którego podstawa˛ jest jeden z boków kwadratu, a wierzchołek leży na
przeciwległym boku.
Możemy t˛e sytuacj˛e zilustrować rysunkiem, który wykonam w Sage-u. Najpierw zdefiniujmy sobie pi˛eć punktów, które
b˛eda˛ wierzchołkami kwadratu oraz trójkata.
˛
91
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
sage: A = (0, 0); B = (2, 0);
sage: D = (0, 2); C = (2, 2);
sage: W = (1.7, 2)
Możemy teraz narysować te wielokaty
˛ za pomoca˛ polecenia polygon2d,
sage: kwadrat = polygon2d([A, B, C, D], \
fill=False, thickness=2)
sage: trojkat = polygon2d([A, B, W], \
color=(0.9,0.9,0.9))
Teraz poleceniem (kwadrat+trojkat).show() możemy zobaczyć nasz rysunek.
2
1.5
1
0.5
1
0.5
1.5
2
Przestrzenia˛ zdarzeń elementarnych jest w tym przypadku zbiór wszystkich punktów leżacych
˛
na naszym kwadracie. Czy
możemy te punkty zliczyć? Oczywiście nie da si˛e tego zrobić tak, jak miało to miejsce w poprzednich zadaniach, nie
możemy nawet tych punktów ponumerować. Ale przecież zbiór wszystkich tych punktów daje nam pole tego kwadratu,
zatem możemy przyjać,
˛ że
|Ω| = 2 · 2 = 4.
Liczba punktów leżacych
˛
na trójkacie,
˛
to oczywiście pole tego trójkata.
˛ Zwróćmy uwag˛e, że wysokość tego trójkata
˛ nie
zależy od położenia wierzchołka i jest zawsze równa 2, zatem
|A| =
2·2
= 2.
2
92
3.1. RACHUNEK PRAWDOPODOBIEŃSTWA
Otrzymujemy tym samym odpowiedź, że
P (A) =
2
1
= .
4
2
Obliczenie prawdopodobieństwa pewnego zdarzenia jest, jak widzimy, ściśle zwiazane
˛
ze zliczaniem elementów pewnych
zbiorów. Elementy te sa˛ zwykle albo ciagami,
˛
albo podzbiorami.
Dział matematyki zajmujacy
˛ si˛e tego typu zliczaniem nazywany jest kombinatoryka.˛ Nazwa zwiazana
˛
jest z poj˛eciem
kombinacji, które poznaliście już w zadaniu z kartami, jednakże nie ogranicza si˛e tylko do nich.
Rozwia˛żmy teraz kilka zadań z prawdopodobieństwem, w trakcie których poznacie badź
˛ przypomnicie sobie inne poj˛ecia
kombinatoryki.
Przykład 5. Asia, Basia, Czarek, Darek i Eryk wsiadaja˛ do tramwaju. Jakie jest prawdopodobieństwo, że
chłopcy okaża˛ si˛e dżentelmenami i wpuszcza˛ dziewcz˛eta pierwsze?
Musimy najpierw obliczyć na ile sposobów może ta piatka
˛ osób wejść do tramwaju, b˛edzie to nasz zbiór Ω, czyli wszystkich
możliwych zdarzeń. Widzimy, że możliwości jest tyle, ile sposobów przestawienia mi˛edzy soba˛ tej piatki.
˛
Takie zamiany
miejsc nazywamy permutacjami. Ogólnie elementy zbioru n – elementowego możemy poprzestawiać na
n! = 1 · 2 · . . . · (n − 1) · n
sposobów. Mówimy, że istnieje n! (“n silnia”) permutacji tego zbioru. Zatem dostajemy
|Ω| = 5! = 1 · 2 · 3 · 4 · 5 = 120.
W Sage-u możemy silni˛e obliczyć poleceniem factorial(5). Zobaczmy jak tworzy si˛e permutacje w programie Sage:
sage: p = Permutations([’A’,’B’,’C’,’D’,’E’])
Teraz poleceniem p.list() zobaczymy wszystkie możliwe układy tych pi˛eciu liter odpowiadajacych
˛
naszym osobom.
Ponieważ jest ich
sage: Omega = p.cardinality()
wynik: 120
wi˛ec nie b˛ed˛e ich tu wyświetlał.
Musimy teraz obliczyć na ile sposobów może ta piatka
˛ wejść do tramwaju. Pami˛etamy, że kobiety maja˛ wejść pierwsze.
Asia i Basia oczywiście moga˛ wejść na dwa sposoby. Natomiast chłopcy na 3! = 6 sposobów.
sage: p = Permutations([’C’,’D’,’E’])
sage: p.list()
93
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
Na każdy układ dziewczat,
˛ chłopcy moga˛ si˛e ustawić na 6 sposobów zatem
|A| = 2 · 6 = 12.
Obliczamy wi˛ec prawdopodobieństwo, że chłopcy okazali si˛e dżentelmenami:
P (A) =
Przykład 6.
1
12
= .
120
10
W urnie mamy trzy kule białe i cztery czarne. Losujemy trzy kule bez zwracania. Jakie jest
prawdopodobieństwo, że kule b˛eda˛ tego samego koloru?
Utwórzmy sobie taka˛ urn˛e w programie Sage.
sage: KuleBiale = Set(["1b", "2b", "3b"])
sage: KuleCzarne = Set(["1c", "2c", "3c", "4c"])
sage: Urna = KuleBiale + KuleCzarne
Nasza urna zawiera nast˛epujace
˛ elementy:
sage: Urna.list()
wynik: [1c, 1b, 2b, 2c, 3c, 3b, 4c]
Zbiór Ω składa si˛e z wszystkich podzbiorów 3 – elementowych naszej urny.
sage: Omega = Subsets(Urna, 3); Omega
94
3.1. RACHUNEK PRAWDOPODOBIEŃSTWA
Możemy te podzbiory policzyć z rysunku, lecz wiemy, że jest ich binomial(7, 3), czyli
7
|Ω| =
= 35.
3
Policzmy teraz ile jest podzbiorów, które zawieraja˛ kule tego samego koloru. Musimy wtedy losować albo tylko ze zbioru
kul białych albo czarnych, tzn.
sage: Subsets(KuleBiale, 3).list()
wynik: [{3b, 1b, 2b}]
sage: Subsets(KuleCzarne, 3).list()
wynik: [{3c, 1c, 4c} , {3c, 1c, 2c} , {3c, 4c, 2c} , {1c, 4c, 2c}]
Widzimy wi˛ec, że jest ich łacznie
˛
5, zatem |A| = 5. Można oczywiście obliczyć wzorem
3
4
|A| =
+
= 5.
3
3
Dostajemy wi˛ec odpowiedź, że prawdopodobieństwo wylosowania kul tego samego koloru wynosi
P (A) =
5
1
= .
35
7
Kiedy tworzymy rodziny podzbiorów danych zbiorów, musimy pami˛etać, że ich liczba bardzo szybko rośnie. Weźmy jako
przykład bardzo mały zbiór {1, 2, 3}. Wszystkie jego podzbiory możemy zobaczyć za pomoca˛ poleceń:
sage: Zbior = Set([1,2,3])
sage: Podzb = Subsets(Zbior)
sage: Podzb.list()
wynik: [{} , {1} , {2} , {3} , {1, 2} , {1, 3} , {2, 3} , {1, 2, 3}]
95
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
Rodzina podzbiorów tego zbioru zawiera nast˛epujac
˛ a˛ liczb˛e elementów:
sage: PPodzb = Subsets(Subsets(Zbior))
sage: PPodzb.cardinality()
wynik: 256
Natomiast rodzina podzbiorów uzyskanego zbioru zawiera aż tyle elementów:
sage: PPPodzb = Subsets(Subsets(Subsets(Zbior)))
sage: PPPodzb.cardinality()
wynik: 115792089237316195423570985008687907853269984665640564039457584007913129639936
Ilość cyfr tej liczby to:
sage: PPPodzb.cardinality().ndigits()
wynik: 78
Dzieje si˛e tak gdyż liczba podzbiorów zbioru trzyelementowego składa si˛e z 23 podzbiorów, rodzina jej podzbiorów składa
3
si˛e z 22 = 256 podzbiorów, no i ta duża liczba to
23
22 .
Przykład 7. Do windy 5–pi˛etrowego budynku wsiadły cztery osoby. Jakie jest prawdopodobieństwo, że każda
osoba wysiadzie
˛
na innym pi˛etrze?
Najpierw zdefiniujmy zbiór wszystkich możliwych zdarzeń Ω. Na ile wszystkich sposobów moga˛ te osoby wysiaść
˛ z windy?
W takich zadaniach kluczem do rozwiazania
˛
jest dobry opis elementów, które chcemy zliczać. Jak zapisać przykładowo
sytuacj˛e, że wszyscy wysiedli na pierwszym pi˛etrze? Możemy ja˛ przedstawić za pomoca˛ takiego oto ciagu
˛
(1, 1, 1, 1).
Pierwszy element ciagu
˛ odpowiada pierwszej osobie i informuje, że wysiadła na 1 pi˛etrze, drugi element ciagu
˛ odpowiada
drugiej osobie i informuje, że wysiadła również na 1 pi˛etrze, itd. Opiszmy w podobny sposób sytuacje np., że osoby pierwsza
i trzecia wysiadły na drugim pi˛etrze, druga na piatym
˛
i czwarta na trzecim:
(2, 5, 2, 3).
Co tak naprawd˛e otrzymujemy?
Widzimy, że sa˛ to ciagi
˛ czteroelementowe budowane z liczb odpowiadajacych
˛
numerom pi˛eter, czyli należacych
˛
do takiego
zbioru
{1, 2, 3, 4, 5}.
W kombinatoryce takie ciagi
˛ nazywamy wariacjami. Zatem czteroelementowe ciagi
˛ składajace
˛ si˛e z numerów pi˛eter sa˛
czteroelementowymi wariacjami.
96
3.1. RACHUNEK PRAWDOPODOBIEŃSTWA
Dodatkowo zauważmy, że numery pi˛eter moga˛ si˛e powtarzać, tzn. kilka osób może wysiaść
˛ na jednym pi˛etrze. Takie wariacje
nazywamy wariacjami z powtórzeniami. Liczba k – elementowych wariacji z powtórzeniami zbioru n – elementowego
wynosi:
Wnk = nk .
Dla k = 4 i n = 5 możemy obliczyć |Ω| = 54 = 625.
Zliczmy teraz wszystkie takie sytuacje, w których każda osoba wysiada na innym pi˛etrze. Oznaczmy zbiór tych zdarzeń
litera˛ A. Elementami tego zbioru sa,˛ podobnie jak wcześniej, ciagi
˛ czterowyrazowe, lecz teraz wymagamy aby numery pi˛etr
si˛e nie powtarzały. Sa˛ to również wariacje, ale bez powtórzeń. Wszystkich k – elementowych wariacji bez powtórzeń
zbioru n – elementowego jest
Vnk =
n!
.
(n − k)!
Dzi˛eki temu możemy obliczyć
|A| =
5!
5!
=
= 120.
(5 − 4)!
1!
W pakiecie Sage mamy polecenie factorial do liczenia silni, np.
sage: A = factorial(5)
wynik: 120
Ilość elementów zdarzenia A, możemy obliczyć jeszcze inaczej bez używania wariacji.
Zauważmy, że pierwsza osoba może wysiaść
˛ na 5 sposobów, druga ma już 4 pi˛etra do wyboru, trzeciej pozostaja˛ 3 pi˛etra no
i czwarta ma już tylko 2 do wyboru. Posługujac
˛ si˛e reguła˛ mnożenia, otrzymujemy
|A| = 5 · 4 · 3 · 2 = 120.
Prawdopodobieństwo, że na każdym pi˛etrze wysiadzie
˛
inna osoba wynosi
P (A) =
120
24
|A|
=
=
.
|Ω|
625
125
Zilustrujmy zbiór Ω w programie Sage. Utwórzmy najpierw zbiór pi˛eter
sage: Pietra = Set([1, 2, 3, 4, 5])
a nast˛epnie zbiór ciagów
˛
jako poczwórny iloczyn kartezjański pi˛eter
sage: Omega = CartesianProduct(Pietra, Pietra,\
Pietra, Pietra)
Wiemy, że Ω zawiera 625 elementów, dlatego nie b˛ed˛e ich wszystkich wyświetlał, zamiast tego zobaczmy losowo wybrany
element.
97
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
sage: Omega.random_element()
wynik: [2, 1, 1, 5]
Sprawdźmy czy liczba wszystkich zdarzeń zbioru Omega jest taka sama jak obliczona Ω.
sage: Omega.cardinality()
wynik: 625
Jak widzimy wszystko si˛e zgadza.
Przykład 8. Mamy rozdać 7 paczków
˛
czterem osobom. Jakie jest prawdopodobieństwo, że każda osoba
otrzyma co najmniej jednego paczka?
˛
Najpierw odpowiedzmy na pytanie, na ile sposobów możemy rozdać 7 paczków
˛
czterem osobom? Zauważmy, że to pytanie
można sformułować inaczej:
Ile rozwiazań
˛
ma równanie
a+b+c+d=7
w zbiorze liczb całkowitych nieujemnych? Przykładowym rozwiazaniem
˛
jest nast˛epujaca
˛ czwórka liczb:
a = 2, b = 1, c = 4, d = 0.
Rozwiazanie
˛
to interpretujemy tak: pierwsza osoba otrzymała dwa paczki,
˛
druga jeden, trzecia cztery, a czwarta nie dostała
w ogóle. Jak zliczyć wszystkie takie rozwiazania?
˛
Liczba ta jest równa
4+7−1
3
=
10
3
= 120.
Już wyjaśniam skad
˛ si˛e to wzi˛eło. Niech symbol “•” oznacza paczek.
˛
Zauważmy, że wtedy powyższe przykładowe rozwia˛
zanie można zilustrować w ten sposób:
osoba 1
osoba 2
osoba 3
••
•
• • ••
osoba 4
Przyjrzyjmy si˛e jeszcze kilku przykładowym rozdaniom
osoba 1
osoba 2
osoba 3
••
•
• • ••
•
••
• • •
•
• • •
• •
••
osoba 4
Widzimy, że pytanie możemy sformułować nast˛epujaco:
˛ Na ile sposobów mog˛e wybrać trzy przegródki (kreski oddzielajace
˛
osoby) ze zbioru 10 – elementowego (3 przegródki + 7 paczków),
˛
czyli na tyle ile jest kombinacji 3 – elementowych zbioru
10 – elementowego, tzn.
4+7−1
3
=
98
10
3
= 120.
3.1. RACHUNEK PRAWDOPODOBIEŃSTWA
Możemy nawet napisać ogólny wzór na liczb˛e rozwiazań
˛
równania
x1 + x2 + . . . + xn = k
w zbiorze liczb całkowitych nieujemnych.3 Jest ona równa
Kkn
n+k−1
=
.
k
W programie Sage możemy bardzo łatwo sobie takie rozmieszczenia zdefiniować poleceniem
sage: Rozwiazania = Compositions(7, length=4, min_part=0)
Zbiór Rozwiazania zawiera wszystkie rozwiazania
˛
naszego równania. Zobaczmy kilka poczatkowych:
˛
sage: Rozwiazania.list()
Polecenie Compositions generuje wszystkie możliwe rozkłady liczby 7 na sumy liczb naturalnych. Dodajac
˛ opcj˛e
min_part=0 dopuszczamy do sytuacji, że niektóre składniki moga˛ być zerami. Opcja length=4 daje nam wszystkie
czteroskładnikowe rozkłady.
Ich liczba wynosi:
sage: Rozwiazania.cardinality()
wynik: 120
czyli dokładnie tyle ile obliczyliśmy wyżej. Teraz musimy obliczyć, na ile sposobów możemy rozdać tych 7 paczków
˛
tak,
aby każda osoba otrzymała co najmniej jednego.
3
Rozwiazania
˛
tego równania cz˛esto interpretujemy, jako liczb˛e rozmieszczeń k – nierozróżnialnych elementów w n – komórkach. Rozmieszczenia
tego typu nazywamy kombinacjami z powtórzeniami.
99
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
Rozwia˛żmy to zadanie najpierw z pomoca˛ Sage-a.
sage: A = Compositions(7, length=4)
Zbiór A zawiera wszystkie rozwiazania
˛
równania a + b + c + d = 7 nie pozwalajac,
˛ aby któraś z liczb była równa zero.
Wyświetlmy te rozwiazania
˛
sage: A.list()
Ich liczba wynosi:
sage: A.cardinality()
wynik: 20
Bez pomocy programu można też w miar˛e łatwo zliczyć elementy zbioru A. Chcemy, aby każda osoba otrzymała paczka,
˛
zatem na poczatku
˛
dajmy każdemu po jednym. Zostaja˛ nam jeszcze trzy, które rozdajemy już zupełnie losowo. Ilość
możliwych rozdań zliczymy podobnie, jak elementy zbioru |Ω|, czyli ich liczba jest równa liczbie wszystkich całkowitych
nieujemnych rozwiazań
˛
równania
a + b + c + d = 3.
Zatem
|A| =
4+3−1
6
=
= 20.
3
3
Prawdopodobieństwo, że każda osoba otrzyma conajmniej jednego paczka
˛
wynosi
P (A) =
20
1
= .
120
6
Rozwia˛żmy teraz pewne zadanie tylko za pomoca˛ programu Sage. Zach˛ecam jednak czytelników do samodzielnego rozwia˛
zania bez pomocy programu.
100
3.1. RACHUNEK PRAWDOPODOBIEŃSTWA
Przykład 9. Bankomat może wypłacać pieniadze
˛
w banknotach: 10zł, 20zł, 50zł i 100zł. Jakie jest prawdopodobieństwo, że wypłacajac
˛ kwot˛e 230zł, bankomat użyje każdej z wymienionych nominałów?
Zadanie jest troszeczk˛e podobne do poprzedniego, gdyż możemy go sformułować nast˛epujaco:
˛ ile rozwiazań
˛
nieujemnych
całkowitych posiada równanie
10a + 20b + 50c + 100d = 230?
Program Sage posiada metod˛e WeightedIntegerVectors, która podaje wszystkie możliwe rozwiazania
˛
tego równania. Wydajmy wi˛ec nast˛epujace
˛ polecenie:
sage: kwota230=WeightedIntegerVectors(230,[10,20,50,100])
Utworzyliśmy tym samym list˛e wszystkich rozwiazań.
˛
Wyświetlmy jej zawartość.
sage: kwota230.list()
Mamy tu wszystkie 52 rozwiazania,
˛
czyli |Ω| = 52. Wyświetlmy teraz tylko te rozwiazania,
˛
w których każdy nominał został
użyty.
sage: for k in kwota230:
if k[0]!=0 and k[1]!=0 and k[2]!=0 and k[3]!=0:
print (k[0], k[1], k[2], k[3])
Widzimy, że sa˛ tylko cztery takie rozwiazania,
˛
czyli |A| = 4 oraz
P (A) =
1
4
= .
52
13
101
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
3.2
Statystyka
3.2.1
Średnia arytmetyczna
Jak wspomniałem we wst˛epie, statystyka zajmuje si˛e analiza˛ danych oraz metodami pozyskiwania i prezentacji tych danych.
Sadz˛
˛ e, że jedna˛ miar˛e statystyczna˛ każdy z czytelników zna, gdyż jest to średnia arytmetyczna. Najprostsza miara, która
daje nam pewne informacje o typowych wartościach badanej grupy danych. Wiemy, że dla danych d1 , d2 , . . . , dn obliczamy
ja˛ wzorem
Sa =
d 1 + d 2 + . . . + dn
.
n
Utwórzmy sobie w programie Sage troch˛e przykładowych danych do obliczeń.
[13, 5, 16, 12, 9, 17, 8, 23, 11, 24, 15, 21, 7, 8, 17, 23, 13, 16, 17, 20, 21, 14, 16, 22]
Średnia˛ arytmetyczna˛ tych liczb obliczymy poleceniem
sage: Sa = mean(Dane); Sa
wynik:
46
3
Zatem
Sa =
46
.
3
Sprawdźmy, ile wynosi liczba naszych danych
sage: n = len(Dane); n
wynik: 24
Czyli liczba elementów naszego zbioru to n = 24. Cz˛esto si˛e zdarza, że żadna z danych nie przyjmuje wartości równej
średniej, jak w naszym przypadku. Widzimy, że dane sa˛ dość mocno rozrzucone, tzn. jest duża rozbieżność mi˛edzy
najmniejsza˛ wartościa,˛ a najwi˛eksza.˛
sage: Dmin = min(Dane); print ’Dmin=’, Dmin
sage: Dmax = max(Dane); print ’Dmax=’, Dmax
wynik: Dmin = 5
wynik: Dmax = 24
Ogólnie średnia arytmetyczna nie mówi nam, że wszystkie czy wi˛ekszość wartości naszych danych sa˛ bliskie tej średniej
lecz, że położenie środka tych danych leży w jej pobliżu.
Pami˛etamy przecież z geometrii jak wyznacza si˛e środek S odcinka na osi liczbowej o końcach A = xA oraz B = xB . Jest
to punkt
xS =
xA + xb
,
2
czyli średnia arytmetyczna końców tego odcinka.
102
3.2. STATYSTYKA
3.2.2
Odchylenie standardowe i wariancja
Dość dobra˛ miara,˛ mówiac
˛ a˛ nam jak bardzo dane sa˛ oddalone od średniej arytmetycznej, jest odchylenie standardowe.
Im mniejsza jest wartość odchylenia standardowego, tym dane sa˛ mniej rozrzucone. Ogólny wzór dla danych d1 , d2 , . . . , dn
jest nast˛epujacy
˛
r
σ=
(d1 − S)2 + (d2 − S)2 + . . . + (dn − S)2
=
n
r
d21 + d22 + . . . + d2n
− S2.
n
Odchylenie standardowe jest ściśle zwiazane
˛
z innym poj˛eciem statystycznym, wariancja.˛ Wariancja jest kwadratem
odchylenia standardowego i oznaczamy ja˛ symbolem σ 2 , czyli
σ2 =
d2 + d22 + . . . + d2n
(d1 − S)2 + (d2 − S)2 + . . . + (dn − S)2
= 1
− S2.
n
n
Zobaczmy jak wygladaj
˛ a˛ te dwie wielkości dla naszych danych.
sage: OdchStand = std(Dane); OdchStand
r
wynik:
2098
69
Zapiszmy wynik w postaci numerycznej.
sage: N(OdchStand, digits=4)
wynik: 5.514
Możemy wi˛ec stwierdzić, że dane sa˛ średnio o 5.5 oddalone od średniej arytmetycznej.
Aby obliczyć wariancj˛e, wystarczy ostatni wynik podnieść do kwadratu. Sage posiada do tego celu funkcj˛e variance.
sage: Wariancja = variance(Dane); Wariancja
wynik:
3.2.3
2098
69
Średnia geometryczna
Znacie zapewne ze szkoły jeszcze średnia˛ geometryczna.˛ Dla dwóch liczb a i b jest ona pierwiastkiem kwadratowym z
iloczynu tych liczb, tzn.
Sg =
√
a · b.
Istnieje wiele ciekawych interpretacji geometrycznych, np. jest równa wysokości trójkata
˛ prostokatnego
˛
opuszczonej z
wierzchołka kata
˛ prostego.
103
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
a
˛ jest podobny do tych mniejPonieważ cały trójkat
h
szych trójkacików
˛
prostokatnych,
˛
które utwo-
b
rzyła nam wysokość, wi˛ec
h
b
= .
a
h
Po przekształceniu otrzymujemy
h=
√
a · b.
Inna interpretacja mówi, że średnia geometryczna jest równa długości odcinka łacz
˛ acego
˛
środki ramion trapezu o podstawach a i b, tzn.
a
a· b
b
Ogólny wzór na średnia˛ geometryczna˛ dla danych d1 , d2 , . . . , dn wyglada
˛ nast˛epujaco:
˛
Sg =
p
n
d1 · d2 · . . . · dn .
W programie Sage jest on zdefiniowany w pakiecie scipy.stats. Po jego zaimportowaniu mamy do dyspozycji polecenie stats.gmean, które właśnie oblicza średnia˛ geometryczna.˛ Sprawdźmy, ile ona wynosi dla naszych danych.
sage: import scipy.stats as stats
sage: Sg = stats.gmean(Dane); Sg
wynik: 14.2211529148
3.2.4
Mediana
Kolejna˛ miara˛ wykorzystywana˛ w statystyce jest mediana. Najprościej można powiedzieć, że jest to wartość leżaca
˛ po
środku danych, które sa˛ uporzadkowane
˛
niemalejaco.
˛
Gdy liczba danych jest nieparzysta, to bierzemy poprostu środkowy element. Jeśli liczba danych jest parzysta, to oczywiście środkowego elementu nie ma, zamiast niego bierzemy
średnia˛ arytmetyczna˛ dwóch elementów środkowych. Zatem dla n nieparzystych: M e = d n+1 , a dla dla n parzystych:
2
d n2 + d n2 +1
Me =
.
2
Przypomnijmy, że liczba danych w naszym przykładzie wynosi
sage: n = len(Dane); n
wynik: 24
104
3.2. STATYSTYKA
Jest to liczba parzysta, wi˛ec mediana jest równa średniej arytmetycznej wyrazów d12 i d13 danych uporzadkowanych.
˛
Aby
posortować je w porzadku
˛
niemalejacym
˛
wystarczy wydać polecenie
sage: Dane.sort()
wynik: [5, 7, 8, 8, 9, 11, 12, 13, 13, 14, 15, 16, 16, 16, 17, 17, 17, 20, 21, 21, 22, 23, 23, 24]
Sprawdźmy, które to elementy
sage: d12 = Dane[12-1]; print d12
sage: d13 = Dane[13-1]; print d13
wynik: 16, 16
Zatem
d12 = 16, d13 = 16.
Zwróćmy uwag˛e, że zmniejszyłem indeksy o jeden. Zrobiłem to dlatego, iż Sage rozpoczyna numerowanie list od zera, a
nie od jeden. U nas pierwszy element to Dane[0], a ostatni Dane[23]. Wobec tego mediana wynosi:
Me =
16 + 16
= 16
2
W Sage-u mamy gotowa˛ funkcj˛e liczac
˛ a˛ median˛e o nazwie median.
sage: Me = median(Dane); Me
wynik: 16
3.2.5
Dominanta
W statystyce wykorzystuje si˛e jeszcze wiele innych miar, jednakże nie b˛ed˛e o nich teraz pisał. W szkole średniej mogliście
poznać jeszcze jedna˛ z nich, tzw. dominant˛e, inaczej zwana˛ mod˛e. Dominanta, jak nazwa wskazuje, jest to wartość, która
dominuje, czyli najcz˛eściej wyst˛epuje w rozważanych danych. Zatem, aby ja˛ znaleźć, należy zliczyć ilość wystapień
˛
każdej
wartości w danych, a nast˛epnie wybrać t˛e najcz˛eściej si˛e pojawiajac
˛ a.˛
Wydajmy w Sage-u nast˛epujace
˛ polecenia:
sage: for d in Dane:
print ’liczba wystapien wartosci ’, d,\
’ w naszych danych, to: ’, Dane.count(d)
105
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
Zobaczymy nast˛epujace
˛ informacje:
Widzimy, że najcz˛eściej wyst˛epujacymi
˛
wartościami sa˛ 16 i 17. Obie wystapiły
˛
trzykrotnie. Zatem przyjmujemy, że
dominantami naszego zbioru danych sa˛ liczby 16 i 17. Mamy do dyspozycji też gotowe polecenie: mode.
sage: mode(Dane)
wynik: [16, 17]
3.2.6
Grupowanie i prezentacja danych statystycznych
Dane statystyczne cz˛esto grupowane sa˛ wzgl˛edem powtarzajacych
˛
si˛e wartości i zapisywane w tabelce. Ułatwia to wiele
obliczeń, mi˛edzy innymi dominant˛e otrzymujemy natychmiast. Zapiszmy w ten sposób nasze dane.
Wartość
5
7
8
9
11
12
13
14
15
16
17
20
21
22
23
24
Liczba powtórzeń
1
1
2
1
1
1
2
1
1
3
3
1
2
1
2
1
Średnia˛ arytmetyczna˛ liczymy wtedy wzorem na tzw. średnia˛ ważona,˛ czyli dzielimy sum˛e iloczynów wszystkich kolumn
naszej tabeli przez sum˛e drugiego wiersza.
Sa =
5 · 1 + 7 · 1 + 8 · 2 + . . . + 24 · 1
368
46
=
= .
1 + 1 + 2 + ... + 1
24
3
W takiej tabelce bardzo łatwo zlokalizujemy dominant˛e lub dominanty. Widzimy, że 16 i 17 powtarzaja˛ si˛e najcz˛eściej, a
dokładnie po trzy razy czyli sa˛ to dominanty naszego zbioru danych. Dane statystyczne grupujemy cz˛esto w odpowiednie
przedziały.
Wspomniałem wcześniej, że statystyka zajmuje si˛e też prezentowaniem danych. Najcz˛eściej używanym sposobem prezentacji jest histogram. Obrazuje on przy pomocy wykresu rozkład liczebności badanych danych w ustalonych przedziałach.
106
3.2. STATYSTYKA
Przykład 10.
Nauczyciel wychowania fizycznego przeprowadził wśród chłopców pewnej klasy konkurs
skoków w dal. Wyniki skoków (w metrach) sa˛ nast˛epujace:
˛
{2.7, 2.9, 3.1, 3.3, 3.2, 3.4, 3.5, 3.6, 3.5, 3.7, 3.5, 3.6, 3.5, 3.7, 3.8, 4.0, 4.2, 4.1, 4.2, 4.0, 4.2, 4.1, 4.5, 4.6, 4.61,
4.62, 4.9, 5.03}.
Utwórzmy histogram dla tych danych.
W bibliotece matplotlib.pyplot as plt mamy dost˛epna˛ funkcj˛e hist, która służy do generowania histogramów.
Aby skorzystać z tej funkcji należy dane pogrupować w odpowiednie przedziały. Możemy to zrobić nast˛epujaco:
˛
Długość skoku
2.70-3.08
3.09-3.47
3.48-3.86
3.87-4.25
4.26-4.64
4.65-5.03
Liczba uczniów
2
4
9
7
4
2
Widzimy, że wyniki zawieraja˛ si˛e w przedziale od 2.7 do 5.03 metra. Podzieliłem długość tego przedziału, tzn. 5.03 − 2.7 =
2.33 przez liczb˛e możliwych ocen, czyli 1 − 6, dzi˛eki czemu otrzymałem długość przedziału 2.33/6 ≈ 0.38.
Możemy już wygenerować histogram.
sage: import matplotlib.pyplot as plt
sage: v = [2.8, 2.9, 3.1, 3.3, 3.2, 3.4, 3.5, 3.6, 3.5, 3.7,\
3.5, 3.6, 3.5, 3.7, 3.8, 4.0, 4.2, 4.1, 4.2, 4.0, 4.2, 4.1, \
4.5, 4.6, 4.61, 4.62, 4.9, 5.0]
sage: plt.hist(v, bins=6, range=(2.7, 5.03))
sage: plt.savefig(’Histogram.png’)
sage: plt.close()
107
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
Najważniejszymi argumentami funkcji hist sa:
˛ lista danych v, liczba przedziałów bins=6 oraz zakres danych
range=(2.7, 5.03).
Widzimy, że czworo uczniów oddało skok długości z przedziału h3.09, 3.47i czyli otrzymali ocen˛e dostateczna.˛ Najwi˛eksza
liczba uczniów (dziewi˛ecioro) oddała skok z przedziału h3.48, 3.86i na ocen˛e dostateczna,˛ itd.
Prostsza˛ forma˛ prezentowania danych statystycznych jest zwykły wykres słupkowy. Używamy go wówczas gdy nie chcemy
grupować danych. Weźmy nast˛epujacy
˛ przykład:
Przykład 11. Poniższa tabelka przedstawia oceny ze sprawdzianu z matematyki pewnej klasy liceum.
Ocena
1
2
3
4
5
6
Liczba uczniów
1
5
7
8
4
3
Sporzadź
˛ wykres słupkowy ilustrujacy
˛ rozkład ocen z tego sprawdzianu.
Do sporzadzania
˛
wykresów słupkowych mamy funkcj˛e bar_chart Dla naszych danych wystarczy wydać polecenie:
sage: bar_chart([1,5,7,8,4,3], width=1)
8
7
6
5
4
3
2
1
0
1
2
3
4
5
6
Jako pierwszy parametr przekazałem list˛e liczby uczniów, którzy otrzymali odpowiednie oceny. Ponieważ lista ta składa si˛e
sześciu elementów, czyli tyle ile możliwych ocen, wi˛ec jako drugi parametr ustawiłem width=1, co powoduje, że szerokość
słupka b˛edzie wynosiła dokładnie tyle ile skok do oceny wyższej. Z wykresu odczytujemy, że ocen˛e niedostateczna˛ otrzymał
jeden uczeń, dopuszczajac
˛ a˛ ocen˛e otrzymało pi˛ecioro uczniów, itd.
108
3.2. STATYSTYKA
Na koniec tego podrozdziału rozwia˛żmy jeszcze dwa przykłady.
Przykład 12. Poniższa tabela zawiera informacje o ilości przeczytanych ksia˛żek w ciagu
˛ jednego roku szkolnego przez
uczniów pewnej klasy.
Odpowiedz na pytania:
1. Jaka średnia ilość przeczytanych ksia˛żek przypadała na jednego ucznia tej klasy?
2. Jak duże było odchylenie liczby przeczytanych ksia˛żek od tej średniej?
3. Ilu uczniów przeczytało wi˛ecej ksia˛żek niż średnia?
4. Jaka była mediana i dominanta przeczytanych ksia˛żek tego roku?
5. Naszkicuj histogram na podstawie tych danych.
W rozwiazaniu
˛
pomożemy sobie programem Sage. Najpierw musimy zdefiniować dane. Można to zrobić na kilka sposobów.
Jeden najprostszy, to utworzyć r˛ecznie list˛e ksia˛żek przeczytanych przez wszystkich uczniów, tzn.
sage: dane = [0,0,3,3,3,3,6,6,6,6,6,9,\
9,9,9,9,9,9,9,12,12,15]
Można też najpierw stworzyć list˛e par (liczba_uczniw, liczba_ksiaek) na podstawie tabeli, a nast˛epnie przekształcić ja˛ do postaci jak wyżej. Możemy to zrobić w ten sposób:
sage: lista_par = [(0,2),(3,4),(6,5),(9,8),(12,2),(15,1)]
dane = []
for para in lista_par:
for i in [1..para[1]]:
dane = dane + [para[0]]
Efekt b˛edzie ten sam
wynik: [0, 0, 3, 3, 3, 3, 6, 6, 6, 6, 6, 9, 9, 9, 9, 9, 9, 9, 9, 12, 12, 15]
Drugi sposób jest może troch˛e skomplikowany na pierwszy rzut oka. Zauważmy jednak, że gdyby uczniów było dużo wi˛ecej
oraz liczba ksia˛żek przypadajaca
˛ na jednego ucznia byłaby wi˛eksza, to z pewnościa˛ wypisywanie wszystkich elementów tej
listy byłoby ucia˛żliwe.
109
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
Wyobraźmy sobie, że mamy analogiczne zadanie, lecz dane bierzemy z kilku lat oraz dla uczniów całej szkoły. Wyobrażacie
sobie zapewne jak wiele pracy mielibyśmy wtedy z budowa˛ takiej listy. Powyższe instrukcje wykonaja˛ to zadanie tak szybko
jak dla naszej niewielkiej ilości danych. Skoro mamy już dane wprowadzone, możemy zaczać
˛ rozwiazywać
˛
zadanie.
Ad. 1. Średnia liczba przeczytanych ksia˛żek przez jednego ucznia, to
sage: S = mean(dane)
sage: N(S, digits=4)
wynik: 6.955
S=
153
= 6.955.
22
Ad. 2. Odchylenie liczby przeczytanych ksia˛żek od tej średniej wynosi:
sage: Std = std(dane)
sage: N(Std, digits=4)
wynik: 3.860
r
σ=3
255
= 3.860.
154
Ad. 3. Liczba uczniów, którzy przeczytali wi˛ecej ksia˛żek niż średnia klasy, to 11. Liczb˛e t˛e możemy łatwo znaleźć zliczajac
˛
po prostu liczby nie mniejsze od 6.955. A gdyby danych było dużo wi˛ecej i do tego nie byłyby posortowane, np. takie?
[2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4,
8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1,
2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4,
8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1,
2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4,
8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 3, 9, 5, 4,
1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5,
4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9,
5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3,
9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1,
3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4,
1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5,
4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4]
Sortowanie znacznie ułatwia zadanie, jednak przy takiej ilości danych mielibyśmy, mimo wszystko, sporo pracy.
110
3.2. STATYSTYKA
Można jednak wykorzystać do tego celu Sage-a.
sage: liczba_el = 0
sage: S = mean(dane)
sage: for x in dane:
if x >= S:
liczba_el = liczba_el + 1
sage: liczba_el
wynik: 11
Otrzymaliśmy wi˛ec
liczba_el = 11.
Przeszliśmy przez list˛e danych (z naszego zadania) podstawiajac
˛ kolejne jej elementy do zmiennej x i sprawdzamy czy
ten element jest wi˛ekszy lub równy od średniej. Jeśli tak to zwi˛ekszamy przygotowana˛ wcześniej zmienna˛ liczba_el o
jeden. W tym przypadku zbadanie 20 elementów czy 2000 nie zrobi programowi zapewne wielkiej różnicy.
Ad. 4. Dominant˛e znajdziemy przygladaj
˛ ac
˛ si˛e tabelce podanej w treści zadania. Widzimy, że jest nia˛ 9, która wystapiła
˛
aż
osiem razy. Mamy 22 dane, wi˛ec mediana jest równa
Me =
d11 + d12
15
=
= 7.5.
2
2
Ad. 5. Sporzadźmy
˛
histogram za pomoca˛ programu Sage.
8
7
6
5
4
3
2
1
2
4
6
8
10
12
14
Otrzymałem go za pomoca˛ poleceń:
sage: d = finance.TimeSeries(dane)
sage: d.plot_histogram(bins=6,fill=False,normalize=False)
111
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
Przykład 13. Poniższy diagram przedstawia dane dotyczace
˛ liczby godzin nieobecności uczniów pewnej klasy
w miesiacu
˛ listopadzie. Oś pozioma reprezentuje liczb˛e godzin, natomiast pionowa liczb˛e uczniów.
Utwórz analogiczna˛ tabelk˛e, jak w treści poprzedniego przykładu, tj.
Dane z histogramu odczytujemy nast˛epujaco:
˛
– liczb˛e opuszczonych godzin w przedziale h0, 5) miało 8 uczniów,
– liczb˛e opuszczonych godzin w przedziale h5, 10) miało 12 uczniów,
– liczb˛e opuszczonych godzin w przedziale h0, 5) miało 9 uczniów, itd.
Jak zwykle, podczas rozwiazywania,
˛
b˛ed˛e korzystał z programu Sage. Utwórzmy dwie listy danych, jedna˛ dla liczby
uczniów, druga˛ dla liczby godzin.
sage: liczba_uczniow = [8, 12, 9, 3,
2,
4,
6,
1,
3]
sage: liczba_godzin = [0, 5, 10, 15, 20, 25, 30, 35, 40]
Teraz możemy utworzyć tabelk˛e poleceniami:
sage: naglowek = [’Liczba godzin’,’Liczba u c z n i w ’]
sage: html.table([(liczba_godzin[i], liczba_uczniow[i])\
for i in [0..7]], header = naglowek)
112
3.3. ZADANIA
Gdybyśmy chcieli wykonywać inne obliczenia statystyczne, warto byłoby utworzyć sobie list˛e godzin wszystkich uczniów.
Można ja˛ przygotować za pomoca˛ nast˛epujacych
˛
poleceń:
sage: lista_godz = []
sage: j = -1
sage: for lu in liczba_uczniow:
j = j+1
for i in [1..lu]:
lista_godz = lista_godz+[liczba_godzin[j]])
3.3
Zadania
Poniższe zadania prosz˛e spróbować rozwiazać
˛ z pomoca˛ programu Sage.
1. Oblicz, ile przekatnych
˛
ma dwunastokat
˛ foremny.
2. Zapomnieliśmy PIN-u do naszego telefonu. Wiemy, że składał si˛e z czterech cyfr. Przypominamy sobie tylko, że
składał si˛e on z cyfr nast˛epujacego
˛
zbioru
{0, 3, 4, 6, 8, 9}.
Ile maksymalnie prób należałoby wykonać, aby odgadnać
˛ PIN?
3. Na ile sposobów możemy wybrać trójk˛e klasowa,˛ tak aby były w niej dwie dziewcz˛eta i jeden chłopiec? Wiemy, że
klasa liczy 32 uczniów, wśród których jest 14 dziewczat.
˛
4. Przestawiamy w sposób losowy cyfry liczby 123452345. Jakie jest prawdopodobieństwo, że takie same cyfry b˛eda˛
stały obok siebie?
5. Rzucamy pi˛eć razy symetryczna˛ moneta.˛ Jakie jest prawdopodobieństwo, że za pierwszym i za piatym
˛
razem wypadnie orzeł?
6. Mama upiekła 6 zupełnie różnych babeczek. Na ile sposobów może je rozdać swoim dzieciom Alicji i Bolkowi, aby
każde z nich otrzymało tyle samo babeczek?
113
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
7. Rozwia˛ż równania w zbiorze liczb całkowitych nieujemnych
(a) a + b + c + d + e = 15,
(b) 2a + 3b + 4c + 5d = 17.
8. Pi˛eć kobiet i pi˛eciu m˛eżczyzn zasiada przy okragłym
˛
stole. Jakie jest prawdopodobieństwo, że m˛eżczyźni nie usiad
˛ a˛
obok siebie?
9. Igor w dniu swoich imienin zabiera do przedszkola 30 cukierków, aby podzielić si˛e nimi z kolegami, koleżankami
oraz pania.˛ Jakie jest prawdopodobieństwo, że każdy otrzyma przynajmniej dwa cukierki, jeżeli grupa przedszkolna
liczy 12 dzieci?
10. Jakie jest prawdopodobieństwo, że z losowo wybranych trzech liczb danego zbioru
{1, 2, 3, 4, 5, 6, 7}
b˛edzie można utworzyć trójkat?
˛
11. Kupiliśmy 8 ksia˛żek i chcemy je ułożyć na trzech półkach naszej biblioteczki. Na pierwszej półce mamy już 25
ksia˛żek, na drugiej 24, a na trzeciej 27. Jakie jest prawdopodobieństwo, że układajac
˛ te ksia˛żki losowo na tych trzech
półkach, na każdej z nich b˛edzie tyle samo ksia˛żek?
12. Poniższa tabela zawiera informacje o ilości przejechanych kilometrów przez pewnego rowerzyst˛e w miesiacu
˛ lipcu.
Odpowiedz na pytania:
(a) Ile średnio kilometrów przejechał w ciagu
˛ dnia ten rowerzysta?
(b) Jak duże było odchylenie liczby przejechanych kilometrów od średniej?
(c) Jaka była mediana i dominanta przejechanych kilometrów w miesiacu
˛ lipcu?
(d) Naszkicuj histogram na podstawie tych danych.
13. Wygeneruj w programie Sage przykładowe dane poleceniem
sage: Dane = [N(100*random(), digits=4) \
for i in [1 .. 40]]
114
3.3. ZADANIA
Oblicz dla tych danych:
(a) Średnia˛ arytmetyczna˛ i geometryczna.˛
(b) Mod˛e i median˛e.
(c) Odchylenie standardowe.
(d) Sporzadź
˛ histogram.
ODPOWIEDZI
1. 54.
2. W64 = 64 = 1296.
2
1
3. C14
· C18
=
14
2
·
18
1
= 1638
4. |Ω| = 9!, |A| = 5!, P (A) =
1
.
3024
5. |Ω| = 25 = 32, |A| = 23 = 8, P (A) = 14 .
6. C63 = 20.
5
7. (a) K15
=
8. |Ω| =
10!
,
10
15+5−1
5
|A| = 2 ·
= 3876. (b) 18.
5!
,
5
P (A) =
1
.
7560
9. |Ω| = 11058116888, |A| = 1820, P (A) =
10. |Ω| = 35, |A| = 13, P (A) =
11. |Ω| = 45, |A| = 6, P (A) =
5
.
30379442
13
.
35
2
.
15
12.
13.
115
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
116
Rozdział 4
Stereometria
4.1
Bryły platońskie
Geometria jest jedna˛ z najstarszych dziedzin matematyki. Wi˛ekszość odnalezionych starożytnych tekstów matematycznych
si˛egajacych
˛
prawie 2000 lat p. n. e. zawiera mi˛edzy innymi twierdzenie Pitagorasa. Pitagoras jest uznawany za jednego z
najwi˛ekszych matematyków starożytności. Wiemy, że badał figury płaskie, jak wi˛ekszość ówczesnych filozofów zajmuja˛
cych si˛e matematyka.˛ Jednakże uznaje si˛e, że jako pierwszy zaczał
˛ badać zasady budowy wielościanów foremnych, które
sam nazywał figurami kosmicznymi.
Istnieje tylko pi˛eć wielościanów foremnych. Wynika to z faktu, że dowolny róg wielościanu foremnego składa si˛e przynajmniej z trzech ścian i suma katów
˛
płaskich tych ścian przy tym wierzchołku jest mniejsza niż 3600 .
I tak za pomoca˛ trójkata
˛ równobocznego możemy otrzymać czworościan (łacińska nazwa, to tetraedr). Przy każdym
narożniku mamy 3 · 600 = 1800 < 3600 . Narysujemy go w programie Sage poleceniem tetrahedron.
sage: tetrahedron()
Rys. 4.1: Czworościan - tetrahedron.
117
ROZDZIAŁ 4. STEREOMETRIA
Skoro 4 · 600 = 2400 < 3600 , wi˛ec istnieje wielościan, którego każdy róg zbudowany jest z czterech trójkatów.
˛
Jest nim
ośmiościan (łac. oktaedr).
sage: octahedron(frame=False, \
color=[’red’,’green’,’blue’,’yellow’])
Rys. 4.2: Ośmiościan - octahedron.
Aby ukryć obramowanie otaczajace
˛ brył˛e, które odpowiada trójwymiarowemu układowi współrz˛ednych, używamy
opcji frame=False. W notatniku programu Sage, po wygenerowaniu rysunku pokazuje si˛e nam dodatkowy przycisk
Make interactive, po klikni˛eciu którego można brył˛e obracać za pomoca˛ myszki. Jest to dobry sposób, aby przyjrzeć si˛e dokładniej niektórym szczegółom danej bryły. Na powyższych rysunkach widzicie cały czas ten sam ośmiościan,
tylko z różnych perspektyw. Ostatni z prawej rysunek, otrzymaliśmy za pomoca˛ specjalnej metody stickers, która
powoduje rozsuni˛ecie ścian bryły. Stosujemy ja˛ nast˛epujaco:
˛
sage: octahedron(color=[’red’,’green’,’blue’,’yellow’],\
frame=False).stickers(0.2, 0.2)
Za pomoca˛ trójkatów
˛
równobocznych można zbudować jeszcze jeden wielościan foremny – dwudziestościan (łac. ikosaedr). W tym przypadku, narożnik zbudowany jest za pomoca˛ pi˛eciu trójkatów
˛
5 · 600 = 3000 < 3600 . Wi˛ecej z pomoca˛
trójkatów
˛
nie da si˛e zbudować wielościanów foremnych, gdyż 6 · 600 = 3600 ≥ 3600 .
Rys. 4.3: Dwudziestościan - icosahedron.
118
4.1. BRYŁY PLATOŃSKIE
Powyższe rysunki można otrzymać za pomoca˛ poleceń:
sage: icosahedron(frame=False)
sage: icosahedron(frame=False).stickers(0.07, 0.07)
Za pomoca˛ kwadratu możemy zbudować jedynie sześcian (łac. heksaedr), gdyż 3 · 900 = 2700 < 3600 , ale z czterech
kwadratów jest to już nie możliwe, gdyż (4 · 900 = 3600 ≥ 3600 ). Do narysowania czworościanu służy polecenie cube.
sage: cube(color=[’red’,’blue’,’green’],frame=False)
Rys. 4.4: Sześcian - cube.
Ostatnim odkrytym wielościanem foremnym był dwunastościan (łac. dodekaedr). Budujemy go za pomoca˛ pi˛eciokata
˛
foremnego.
Rys. 4.5: Dwunastościan - dodecahedron.
119
ROZDZIAŁ 4. STEREOMETRIA
sage: dodecahedron(frame=False)
sage: dodecahedron(frame=False).stickers(0.5, 0.5)
Filozof grecki Platon traktował wielościany foremne w szczególny sposób, tzn. porównywał je z żywiołami. Czworościanowi przypisywał ogień, sześcianowi Ziemi˛e, ośmiościanowi powietrze, a dwudziestościanowi wod˛e.
Dwunastościan traktował jako coś, co łaczy
˛
wszystko – utożsamiał go z Wszechświatem. Z tego powodu wielościany
foremne cz˛esto określa si˛e mianem brył platońskich. Jednak nie on był ich odkrywca,˛ lecz starożytny matematyk grecki
Teajtetos.
4.2
Graniastosłupy i ostrosłupy
Dziś dział geometrii zajmujacy
˛ si˛e badaniem brył w przestrzeni nazywamy stereometria.˛ W szkole poznaliście zapewne
pi˛eć rodzajów brył: graniastosłupy, ostrosłupy, walce, stożki oraz kule.
Dowolny wielościan możemy narysować w programie Sage za pomoca˛ funkcji Polyhedron. Jednakże funkcja ta wymaga
od nas podania wierzchołków podstaw rysowanego graniastosłupa. Narysuj˛e za pomoca˛ tej funkcji graniastosłup sześciokatny,
˛
którego jedna z podstaw ma wierzchołki w punktach
(0, 0, 0), (2, 0, 0), (3, 1.5, 0), (2, 3, 0), (0, 3, 0), (−1, 1.5, 0),
natomiast druga
(0, 0, 2), (2, 0, 2), (3, 1.5, 2), (2, 3, 2), (0, 3, 2), (−1, 1.5, 2).
sage: podst1 = [[0,0,0],[2,0,0],[3,1.5,0],\
[2,3,0],[0,3,0],[-1,1.5,0]]
sage: podst2 = [[0,0,2],[2,0,2],[3,1.5,2],\
[2,3,2],[0,3,2],[-1,1.5,2]]
sage: gr = Polyhedron(vertices = podst1 + podst2)
sage: gr.show()
Po czym zobaczymy na ekranie nasz graniastosłup. Graniastosłup widoczny na rysunku 4.6 z prawej otrzymamy po dodaniu
opcji frame=False funkcji show, tzn. gr.show(frame=False).
Minusem tej metody jest to, że musimy sami definiować listy punktów b˛edacych
˛
wierzchołkami wielościanu. Przyjrzyjmy
si˛e uważnie powyższym listom. Widzimy, że każdy punkt pierwszej podstawy ma trzecia˛ współrz˛edna˛ równa˛ zero. Oznacza
to, że leży ona w płaszczyźnie Oxy . Druga podstawa jest kopia˛ pierwszej, tylko trzecia współrz˛edna każdego punktu wynosi
˛
Aby zbudować graniastosłup,
2. Otrzymaliśmy tym samym graniastosłup prosty, tzn. jego ściany boczne sa˛ prostokatami.
możemy najpierw zdefiniować list˛e wierzchołków wielokata
˛ na płaszczyźnie (co jest zadaniem łatwym), a nast˛epnie dołożyć
120
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
Rys. 4.6: Graniastosłup sześciokatny.
˛
do każdego punktu trzecia˛ współrz˛edna˛ raz 0, a raz liczb˛e niezerowa,˛ np. 2. Zobaczmy jak wygladaj
˛ a˛ punkty pierwszej
podstawy powyższego graniastosłupa na płaszczyźnie.
sage: podst1 = [[0, 0], [2, 0], [3, 1.5],\
[2, 3], [0, 3], [-1, 1.5]]
sage: points(podst1,gridlines=True,size=30)\
+ line(podst1, thickness=1, color=’red’)
3
1.5
-1
1
2
3
Najpierw użyłem funkcji point do zaznaczenia punktów w układzie współrz˛ednych. Opcja gridlines=True powoduje, że widoczna jest siatka (przerywane cienkie linie), natomiast opcja˛ size regulujemy wielkość kropek. Nast˛epnie
połaczyłem
˛
wszystkie punkty linia˛ poleceniem line. Opcja˛ thickness sterujemy grubościa˛ linii.
Myśl˛e, że bez problemu każdy z czytelników potrafiłby zdefiniować list˛e punktów podstaw dla graniastosłupa trójkatnego,
˛
czworokatnego
˛
czy pi˛eciokatnego.
˛
121
ROZDZIAŁ 4. STEREOMETRIA
Narysujmy teraz za pomoca˛ funkcji Polyhedron ostrosłup czworokatny
˛ taki jak na rysunku 4.7.
sage: podst = [[0,0,0],[3,0,0],[3,2,0],[0,2,0]]
sage: wierzch = [[(0+3+3+0)/4, (0+0+2+2)/4, 2]]
sage: os = Polyhedron(vertices = podst + wierzch)
sage: os.show(frame=False,opacity=0.3,color=’blue’)
Rys. 4.7: Ostrosłup czworokatny.
˛
Najpierw zdefiniowałem wierzchołki podstawy oraz wierzchołek ostrosłupa. Pierwsze dwie współrz˛edne wierzchołka wy˛ o wierzchołkach (0, 0), (3, 0), (3, 2), (0, 2). Obracajac
˛ odpowiedznaczyłem jako środek masy1 podstawy, czyli prostokata
nio ten ostrosłup w notatniku Sage możemy zobaczyć, że wierzchołek istotnie leży nad środkiem podstawy.
Dodatkowo w funkcji show użyłem opcji opacity, która daje efekt przezroczystości (im bliższa wartość zeru, tym
wi˛eksza przezroczystość). Dzi˛eki funkcji Polyhedron możemy łatwo i szybko rysować bardzo wymyślne wielościany,
nawet w przestrzeni czterowymiarowej. Narysujmy przykładowo sześcian, do którego doklejono ostrosłup o podstawie takiej
samej jak ściana sześcianu.
sage: podst1 = [ [0,0,0],[3,0,0],[3,3,0],[0,3,0] ]
sage: podst2 = [ [0,0,3],[3,0,3],[3,3,3],[0,3,3] ]
sage: wierzch = [ [(0+3+3+0)/4, (0+0+3+3)/4, 5] ]
sage: v = podst1 + podst2 + wierzch
sage: bryla = Polyhedron(vertices = v)
sage: (bryla).show(frame=False, figsize=4, opacity=0.3)
Funkcji Polyhedron brakuje opcji zaznaczania dowolnych odcinków czy numerowania wierzchołków, co jak wiemy jest
bardzo pomocne przy rozwiazywaniu
˛
zadań.
1
Współrz˛edne środka masy wielokata
˛ wypukłego na płaszczyźnie wyznaczamy jako średnie arytmetyczne współrz˛ednych jego wierzchołków.
122
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
Problem ten można rozwiazać
˛
rysujac
˛ wielościan samodzielnie za pomoca˛ funkcji line3d ewentualnie polygon3d
służacych
˛
do rysowania linii oraz wielokatów
˛
w przestrzeni trójwymiarowej. Narysujmy np. graniastosłup pi˛eciokatny.
˛
sage: h = 2
# wysokosc
# wierzcholki podstaw
sage: vp1 = [[0,0,0],[2,0.5,0],[2.5,2,0],[0.5,3,0],[-1,2,0]];
sage: vp2 = [[0,0,h],[2,0.5,h],[2.5,2,h],[0.5,3,h],[-1,2,h]];
Zaczałem
˛
od zdefiniowania zmiennej: h – „wysokość”, tzn. trzecia współrz˛edna wierzchołków jednej z podstaw. Nast˛epnie
definiujemy listy wierzchołków podstaw. Wystarczy teraz połaczyć
˛
odpowiednio te punkty liniami.
sage: gr5 = None
# krawedzie boczne
sage: for i in range(0,5):
gr5 = gr5 + line3d([vp1[i], vp2[i]],
color=’blue’,thickness=3)
# obramowanie podstaw
sage: for i in range(0,5):
gr3 = gr3 + line3d([vp1[i], vp1[(i+1) % 5]],\
color=’blue’,thickness=3)
gr3 = gr3 + line3d([vp2[i], vp2[(i+1) % 5]],\
color=’blue’,thickness=3)
sage: gr5.show(frame=False)
Powinniśmy zobaczyć graniastosłup taki jak na rysunku 4.8.
123
ROZDZIAŁ 4. STEREOMETRIA
Rys. 4.8: Graniastosłup pi˛eciokatny.
˛
Już wyjaśniam powyższe polecenia. Otóż gr5 = None powoduje utworzenie pewnego obiektu o nazwie gr5,
ale na razie niczego mu nie przypisujemy. Później b˛edzie tam zapisany nasz graniastosłup. Nast˛epnie instrukcja
for i in range(0,5): powoduje, że zmienna i przyjmuje kolejno wartości 0, 1, 2, 3, 4 i za każdym razem
wykonywana jest instrukcja
gr5 = gr5 + line3d([vp1[i], vp2[i]], color=’blue’, thickness=3)
rysujaca
˛ linie. Zatem
[vp1[0], vp2[0]] oznacza odcinek o końcach [0, 0, 0], [0, 0, 2],
[vp1[1], vp2[1]] oznacza odcinek o końcach [2, 0.5, 0], [2, 0.5, 2], itd.
aż do [vp1[4], vp2[4]] oznacza odcinek o końcach [−1, 2, 0], [−1, 2, 2].
Ostatecznie rysujemy obramowanie podstaw przechodzac
˛ po sasiednich
˛
wierzchołkach. Zauważmy, że użyłem operatora
%, który w wyniku zwraca reszt˛e z dzielenia liczby stojacej
˛ z lewej strony przez liczb˛e stojac
˛ a˛ z prawej, tzn. (i+1)% 5.
Zobaczmy, jak wygladaj
˛ a˛ wartości tego wyrażenia dla i przechodzacego
˛
przez zbiór {0, 1, 2, 3, 4}.
(1+1)% 5 = 2 % 5 = 2, (1+2)% 5 = 3 % 5 = 3,
(1+3)% 5 = 4 % 5 = 4, (1+4)% 5 = 5 % 5 = 0.
Użyłem tego operatora dlatego, aby połaczyć
˛
ostatni wierzchołek vp1[4] z poczatkowym,
˛
czyli vp1[0]. Podobnie dla
drugiej podstawy. Pokolorujmy jeszcze podstawy naszego graniastosłupa.
sage: gr5 = polygon3d(vp1,color=’blue’,opacity=0.1)\
+ polygon3d(vp2,color=’blue’,opacity=0.1)
sage: gr5.show(frame=False)
124
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
Można też poleceniem text3d opisać wierzchołki, np.
# kolorowe podstawy
sage: for i in range(0,n):
gr5 = gr5 + text3d(’A%1i’%(i+1), v_podst1[i], size=14)
gr5 = gr5 + text3d(’B%1i’%(i+1), v_podst2[i], size=14)
sage: gr5.show(frame=False)
Widzicie wi˛ec, że możemy łatwo tworzyć bryły i je modyfikować. Ponieważ nie ma gotowej funkcji, która potrafi rysować
dowolne graniastosłupy z możliwościa˛ pokazywania przekatnych
˛
oraz opisywaniem wierzchołków, postanowiłem taka˛
funkcj˛e napisać.
125
ROZDZIAŁ 4. STEREOMETRIA
Definicj˛e tej funkcji możecie zobaczyć w dodatku A. Jest ona również zdefiniowana w notatniku programu Sage dołaczonym
˛
do tej ksia˛żki. Zobaczmy jak ta funkcja działa.
sage: g = graniastoslup(5)
sage: g.show(frame=False)
sage: g = graniastoslup(5,przekatne_gr=True)
sage: g.show(frame=False)
sage: g = graniastoslup(5,przekatne_sb=True)
sage: g.show(frame=False)
Z lewej strony widzimy graniastosłup pi˛eciokatny,
˛
taki jak we wcześniejszym przykładzie. Na kolejnych rysunkach widać
ten sam graniastosłup po użyciu opcji pokazujacych
˛
odpowiednie przekatne.
˛
Narysujmy też kilka innych graniastosłupów.
sage: g = graniastoslup(3,przekatne_sb=True)
sage: g.show(frame=False)
sage: graniastoslup(4,przekatne_gr=True,\
przekatne_sb=True).show(frame=False)
sage: g = graniastoslup(6,przekatne_gr=True)
sage: g.show(frame=False)
Łatwo możemy dodać sterowanie kolorami ścian i podstaw czy też oznaczać pewne przekroje tych graniastosłupów.
Zostawiam to zadanie jako ćwiczenie dla czytelnika.
Rozwia˛żmy teraz kilka zadań z graniastosłupami.
Przykład 1. Oblicz pole powierzchni całkowitej graniastosłupa prawidłowego czworokatnego,
˛
którego przekatna
˛ długości 5 cm jest nachylona do podstawy pod katem
˛
600 .
126
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
Wiemy, że kat
˛ mi˛edzy przekatn
˛ a˛ graniastosłupa prawidłowego, a płaszczyzna˛ podstawy to kat,
˛ jaki tworzy ta przekatna
˛ z
przekatn
˛ a˛ podstawy. Narysujmy graniastosłup czworokatny
˛ z widoczna˛ przekatn
˛ a˛ główna˛ i przekatn
˛ a˛ podstawy.
sage: g = graniastoslup(4,przekatne_gr=True)
sage: g.show(frame=False)
Z danych wynika, że ](A3 , A1 , B3 ) = 600 oraz |A1 B3 | = 5 cm. Zatem trójkat
˛ A1 , B3 , A3 jest trójkatem
˛
prostokatnym
˛
odpowiednio o katach
˛
300 , 600 , 900 , który widoczny jest na rysunku po prawej stronie. Każdy, kto rozwiazywał
˛
zadania ze
stereometrii czy planimetrii w szkole średniej z pewnościa˛ dosyć cz˛esto miał z nim styczność. Warto znać jego podstawowe
własności. Narysowałem go poleceniami:
sage: v= [[0,0], [2,0], [2,2*sqrt(3)] ]
sage: tr = polygon(v, fill=False)
oraz dodałem odpowiedni opis funkcja˛ text.
sage: tr = tr \
+ text(r"$a\sqrt{3}$",[3.33, 2], fontsize=14)\
+ text(r"$60^0$",[0.33, 0.15], fontsize=14)\
127
ROZDZIAŁ 4. STEREOMETRIA
+ text(r"$30^0$",[2.81, 3.42], fontsize=14)\
+ text(r"$a$",[1.5, -0.13], fontsize=14)\
+ text(r"$2a$",[1.23, 2], fontsize=14)
sage: tr.show(axes=False)
Aby obliczyć pole powierzchni całkowitej potrzebujemy długości kraw˛edzi podstawy oraz wysokość tego graniastosłupa.
Przyjmijmy oznaczenia,
b = |A1 A2 | = |A2 A3 | = |A3 A4 | = |A4 A1 |, H = |A1 B1 | = |A2 B2 | = |A3 B3 | = |A4 B4 |.
Wtedy
P = 2b2 + 4bH,
tzn. siatka tego graniastosłupa składa si˛e z dwóch kwadratów o boku b oraz czterech prostokatów
˛
o wymiarach b × H .
W pierwszym rozdziale dowiedzieliście si˛e jak definiujemy funkcje w programie Sage. Przygotujmy wi˛ec sobie funkcj˛e , za
pomoca˛ której później obliczymy szukane pole.
sage: var(’b,H’)
sage: P(b,H) = 2*b^2 + 4*b*H
Z własności trójkata
˛ A1 , B3 , A3 możemy obliczyć wysokość |A3 B3 | = H . Skoro
2a = |A1 B3 | = 5 cm
wi˛ec a = 2.5 cm oraz
√
√
H = a 3 = 2.5 3 cm.
√
Odcinek a = |A1 A3 | = 2.5 cm jest przekatn
˛ a˛ kwadratu o boku b, zatem b 2 = 2.5 (przekatna
˛ kwadratu o boku b ma
√
˛
długość b 2). Stad
√
5 2
2.5
b= √ =
cm.
4
2
Możemy już obliczyć pole powierzchni całkowitej graniastosłupa
sage: b = 5*sqrt(2)/4
sage: H = 5*sqrt(3)/2
sage: P(b,H)
wynik:
√ 25 √ √
2 4 3+ 2
8
128
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
Przykład 2. W graniastosłupie prawidłowym sześciokatnym
˛
długość krótszej przekatnej
˛
podstawy wynosi
3 i jest dwa razy krótsza od dłuższej przekatnej
˛
tego graniastosłupa. Oblicz obj˛etość i pole powierzchni tego
graniastosłupa.
Wykonajmy najpierw odpowiedni rysunek.
sage: g = graniastoslup(6,przekatne_gr=True)
sage: g.show(Frame=false)
Z danych zadania wynika, że |A2 A4 | = 3 oraz
|A2 B5 | = 2|A2 A4 | = 6.
Oznaczmy sobie literka˛ a długość boku sześciokata
˛ foremnego podstawy, np. a = |A1 A2 | oraz litera˛ H wysokość tego graniastosłupa, np. H = |A4 B4 |. Jak wiemy sześciokat
˛ foremny składa si˛e z sześciu identycznych trójkatów
˛
równobocznych.
a
a 3
a
a
600
Zatem pole powierzchni całkowitej i obj˛etość graniastosłupa obliczymy za pomoca˛ wzorów
√
√
a2 3
+ 6 · a · H = 3a2 3 + 6aH,
P = 2 · Pp + Pb = 2 · 6 ·
4
oraz
√
√
a2 3
3a2 3
V = Pp · H = 6 ·
·H =
H.
4
2
129
ROZDZIAŁ 4. STEREOMETRIA
Skorzystaliśmy tu ze wzoru na pole trójkata
˛ równobocznego o boku a, tzn.
√
a2 3
.
4
Widzimy na powyższym rysunku, że
√
|A2 A4 | = a 3 = 3.
Zatem a =
√
3. Musimy jeszcze obliczyć wysokość graniastosłupa. Wystarczy zastosować twierdzenie Pitagorasa do
trójkata
˛ A2 , A 5 , B 5 :
|A2 A5 |2 + |A5 B5 |2 = |A2 B5 |2 .
√
Ponieważ |A2 A5 | = 2a = 2 3, |A2 B5 | = 6 i |A5 B5 | = H , wi˛ec
√ 2
√
√
√
2 3 + H 2 = 62 ⇒ H = 36 − 12 = 24 = 2 6.
W Sage-u możemy go rozwiazać
˛ nast˛epujaco:
˛
sage: var(’H’); assume(H>0);
sage: solve( (2*sqrt(3))^2 + H^2 == 6^2, H)
h
wynik:
√ i
H=2 6
Wi˛ecej wiadomości na temat rozwiazywania
˛
równań dowiecie si˛e w rozdziale 4. Chciałbym zwrócić tu uwag˛e na instrukcj˛e
assume(H > 0). Powoduje ona, że zmienna H może przyjmować tylko wartości dodatnie (jest to przecież długość
odcinka). Zapewne zauważyliście, że bez tej instrukcji program zwróciłby dwa rozwiazania.
˛
sage: var(’H’)
sage: solve( (2*sqrt(3))^2 + H^2 == 6^2, H)
h
√ i
√
wynik: H = −2 6, H = 2 6
Aby Sage zapomniał o wcześniejszych założeniach należy wydać polecenie forget().
Wróćmy jednak do naszego zadania. Skoro mamy już obliczone podstaw˛e a oraz wysokość H , możemy obliczyć pole i
obj˛etość.
sage: a = sqrt(3)
sage: H = 2*sqrt(6)
sage: P = 3*a^2*sqrt(3) + 6*a*H
sage: V = 3*a^2*sqrt(3)*H/2
sage: print ’P = ’, P.simplify_radical()
sage: print ’V = ’, V.simplify_radical()
√
√
√
wynik: P = 9 3 + 36 2, V = 27 2.
130
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
Instrukcja simplify_radical() powoduje, że wyniki sa˛ maksymalnie upraszczane.
√
Przykład 3. Pole powierzchni całkowitej ostrosłupa prawidłowego trójkatnego
˛
wynosi 36 3 i wszystkie jego
ściany maja˛ równe pola. Oblicz jego obj˛etość.
Ostrosłup prawidłowy trójkatny,
˛
którego wszystkie ściany maja˛ równe pola musi być czworościanem foremnym. Narysujmy
przykładowy ostrosłup trójkatny.
˛
sage: A = (0,0,0); B = (2,0,0); C = (1,sqrt(3),0);
sage: S = (1,sqrt(3)/3,0); W = (1,sqrt(3)/3,2);
sage: cz = polygon3d([A,B,C],color="blue",opacity=0.2)
sage: cz = cz \
+ line3d([A, B, C, A],color="blue",thickness=2)\
+ line3d([A,W],color="blue",thickness=2)\
+ line3d([B,W],color="blue",thickness=2)\
+ line3d([C,W],color="blue",thickness=2)\
+ line3d([S,W],color="red",thickness=3)\
+ line3d([S,C],color="green",thickness=2)
sage: cz.show(frame=False)
Instrukcje odpowiedzialne za wstawienie odpowiednich etykiet pominałem.
˛
Zostawi˛e to jako ćwiczenie dla czytelnika.
Skoro jest to czworościan foremny, to wszystkie jego kraw˛edzie sa˛ jednakowej długości. Oznaczmy t˛e długość literka˛ a.
131
ROZDZIAŁ 4. STEREOMETRIA
Wtedy pole całkowite obliczymy wzorem
√
√
a2 3
P =4·
= 36 3.
4
Po uproszczeniu otrzymujemy a = 6.
Wysokość czworościanu możemy obliczyć korzystajac
˛ z własności trójkata
˛ prostokatnego
˛
CSW, gdzie |CW | = a = 6
natomiast |SC| stanowi
2
3
wysokości trójkata
˛ równobocznego w podstawie, czyli
√
√
√
2 a 3
2 6 3
|SC| = ·
= ·
= 2 3.
3
2
3
2
Zatem z twierdzenia Pitagorasa otrzymujemy
H + |SC| = a
2
2
⇒ H=
2
q
√ 2 √
√
√
62 − 2 3 = 36 − 12 = 24 = 2 6.
Możemy już obliczyć obj˛etość ostrosłupa:
√
√
√
1
1 62 3 √
V = Ps H = ·
· 2 6 = 6 18 = 18 2.
3
3
4
Wyznaczmy w programie Sage wzór na obj˛etość czworościanu foremnego.
sage: var(’a,h,H,Pp’)
sage: Pp = a^2*sqrt(3)/4 #pole podstawy
sage: h = a*sqrt(3)/2
Pp =
#wysokość podstawy h =
sage: H = sqrt(a^2-((2/3)*h)^2) #wysokość
sage: V = (1/3) * Pp * H
sage: V = V.simplify_radical()
wynik: V =
√
a2 3
4
1 √ 3
2a .
12
Możemy teraz sprawdzić nasze obliczenia wydajac
˛ polecenie:
sage: V = V.subs(a = 6)
√
wynik: V = 18 2.
132
H=
√
a 3
2
q
a2 − ( 23 h)2
4.3. BRYŁY OBROTOWE
4.3
Bryły obrotowe
Poza wielościanami, na lekcjach stereometrii z pewnościa˛ zajmowaliście si˛e bryłami obrotowymi, czyli takimi, które
powstaja˛ w wyniku obrotu pewnych figur płaskich. Poznaliście zapewne trzy rodzaje: walec, stożek i kul˛e. Narysujmy je
w programie Sage.
Poleceniem sphere() narysujemy kul˛e widoczna˛ z lewej strony poniższego rysunku.
sage: sphere()
Natomiast kula z prawej strony została narysowana za pomoca˛ poleceń:
sage: kula = sphere(size=1, opacity=0.2)\
+ point3d((0,0,0), size=20, color=’red’)\
+ line3d([(0,0,0), (sqrt(3)/3,sqrt(3)/3,sqrt(3)/3)],\
color=’green’)
+ text3d(’R’, (sqrt(3)/6, sqrt(3)/6, sqrt(3)/6+0.1))
+ circle((0,0,0), 1, color=’red’)
+ implicit_plot3d(y^2+z^2-1,(x,0,0.003),(y,-1,1),\
(z,-1,1),color=’red’)
sage: kula.show(frame=False,aspect_ratio=1)
Domyślnie środek kuli jest w punkcie (0, 0, 0). Opcja size określa promień kuli. Polecenia line3d, point3d, text3d
już znacie. Dodatkowo dorysowałem dwa okr˛egi. Pierwszy poleceniem circle((0,0,0), 1, color=’red’) (o
środku (0, 0, 0) i promieniu 1).
Drugi okrag
˛ narysowałem funkcja˛
implicit_plot3d(y^2+z^2-1,(x,0,0.003),(y,-1,1),(z,-1,1),color=’red’). Służy ona do rysowania dowolnych krzywych w przestrzeni. Musimy tylko znać jej równanie.
133
ROZDZIAŁ 4. STEREOMETRIA
Ja chciałem narysować okrag
˛ o środku (0, 0, 0) i promieniu 1, który leży w płaszczyźnie Oyz . Równanie tego okr˛egu jest
postaci:
y2 + z2 = 1
gdzie y, z ∈ h−1, 1i oraz x ∈ h0, 0.03i. Dlatego dla zmiennej x dałem tak mały przedział, abyśmy zobaczyli okrag.
˛
Zobaczmy jak wygladałby
˛
ten sam rysunek dla x ∈ h−1, 1i.
Zwróćmy jeszcze uwag˛e na pewien szczegół dotyczacy
˛ funkcji show. Otóż, użyłem tym razem opcji aspect_ratio=1.
Powoduje ona, że kształt rysowanych figur nie ulegnie deformacji, podczas łaczenia
˛
kilku figur na jednym wykresie.
Spróbujcie wykonać ostatni rysunek bez tej opcji.
Do rysowania stożków również mamy zdefiniowana˛ gotowa˛ funkcj˛e o nazwie Cone. Przed skorzystaniem z niej musimy
dołaczyć
˛
bibliotek˛e
from sage.plot.plot3d.shapes import Cone.
Teraz wystarczy wydać polecenie Cone(r,h), gdzie r jest promieniem podstawy oraz h wysokościa,˛ np.
sage: Cone(1, 2)
134
4.3. BRYŁY OBROTOWE
Stożek na powyższym rysunku stojacy
˛ z prawej strony wykonałem instrukcjami:
sage: from sage.plot.plot3d.shapes import Cone
sage: stozek = Cone(1, 2, color=’blue’, opacity=0.2)\
+ circle((0,0,0), 1, color=’red’)
Etykiety dodałem za pomoca˛ poleceń:
sage: stozek = stozek
+ line3d([(0,0,0), (sqrt(2)/2,sqrt(2)/2,0)])\
+ line3d([(0,0,0), (0,0,2)],color=’green’,thickness=2)\
+ point3d((0,0,0), size=10)\
+ text3d(’R’, (sqrt(2)/4,sqrt(2)/4,0.1))\
+ text3d(’H’, (-0.1,0,1))\
+ text3d(’t’, (sqrt(2)/4+0.1,sqrt(2)/4,1.1))
Walec potraficie już narysować, gdyż użyłem odpowiedniego polecenia podczas kreślenia okr˛egu na kuli. Chodzi tu o
polecenie implicit_plot3d. Narysujmy teraz walec, wyznaczony przez okrag
˛ o równaniu
x2 + y 2 = 9,
czyli o środku w punkcie (0, 0) i promieniu 3.
sage: implicit_plot3d(x^2+y^2-9,\
(x,-4,4),(y,-4,4),(z,-2,0))
135
ROZDZIAŁ 4. STEREOMETRIA
Jako ćwiczenie pozostawiam czytelnikowi wykonanie takiego walca, jak na rysunku z prawej.
Przypomnijmy wzory na pola powierzchni oraz obj˛etości tych brył:
Pole całkowite
Obj˛etość
Walec
Pw = πR2 + 2πRH
Vw = πR2 H
Stożek
Ps = πR2 + 2πRt
Vs = 13 πR2 H
Kula
Pk = 4πR2
Vk = 43 πR3
Oznaczenia przyjałem
˛
takie, jak na powyższych rysunkach. Możemy zdefiniować sobie te wzory w programie Sage, co
ułatwi późniejsze rozwiazywanie
˛
zadań.
sage: var(’R,H,Pw,Ps,Pk,Vw,Vs,Vk’)
sage: Pole_walca = P == pi*R^2 + 2*pi*R*H
sage: Objetosc_walca = V == pi*R^2*H
sage: Pole_stozka = P == pi*R^2 + 2*pi*R*t
sage: Objetosc_stozka = V == pi*R^2*H/3
sage: Pole_kuli = P == 4*pi*R^2
sage: Objetosc_kuli = V == 4*pi*R^3/3
O tworzeniu i rozwiazywaniu
˛
równań dowiecie si˛e wi˛ecej w rozdziale czwartym tej ksia˛żki. Jednak chciałbym tu wyjaśnić kilka szczegółów. Otóż, powyższymi instrukcjami utworzyliśmy sobie sześć równań, które nazwaliśmy odpowiednio
Pole_walca, Objetosc_walca, Pole_stozka, itd. Jeszcze raz podkreślam, że sa˛ to tylko nazwy naszych równań.
Teraz możemy łatwo wyświetlić wzór na pole powierzchni stożka poleceniem
sage: Pole_stozka
wynik: P = πR2 + 2 πRt
albo obliczyć obj˛etość walca o promieniu podstawy 2 i wysokości 3.
sage: print ’Dla R=2, H=3,’, Objetosc_walca.subs(R=2,H=3)
wynik: Dla R = 2, H = 3, V = 12 π
Poza tym możemy z tych równań wyznaczać inne niewiadome. Przypuśćmy, że w zadaniu podane jest pole powierzchni
całkowitej p i promień r podstawy stożka, tzn.
P = p, R = r.
Wyznaczmy wzór na tworzac
˛ a˛ stożka.
sage: solve(Pole_stozka, t)
136
4.3. BRYŁY OBROTOWE
wynik:
πR2 − P
t=−
2 πR
Rozwia˛żmy teraz kilka przykładowych zadań dotyczacych
˛
brył obrotowych.
Przykład 4. Oblicz obj˛etość i długość tworzacej
˛ stożka o promieniu podstawy 3 i polu powierzchni całkowitej
33π .
Zanim przystapicie
˛
do jakichkolwiek obliczeń, warto do zadania ze stereometrii sporzadzić
˛
odpowiedni rysunek. Obliczmy
najpierw długość tworzacej
˛ tego stożka.
sage: solve(Pole_stozka.subs(P=33*pi,R=3), t)
wynik: [t = 4]
Aby obliczyć obj˛etość, musimy znać wysokość tego stożka. Majac
˛ promień podstawy r = 3 oraz długość tworzacej
˛ t=4z
twierdzenia Pitagorasa zastosowanego do trójkata
˛ o bokach R, H, t obliczymy H . Zatem
H 2 + R 2 = t2 ⇒ H =
sage: H = sqrt(4^2-3^2)
wynik:
√
7
Możemy wi˛ec obliczyć obj˛etość.
sage: Objetosc_stozka.subs(R=3, H=sqrt(7))
wynik: V = 3
√
7π
137
√
t2 − R 2 .
ROZDZIAŁ 4. STEREOMETRIA
Przykład 5. Kul˛e przeci˛eto dwiema równoległymi płaszczyznami. Promienie r1 , r2 kół uzyskanych w wyniku
tych przekrojów oraz odległość d mi˛edzy nimi sa˛ kolejnymi liczbami naturalnymi r1 , r2 , d, a ich suma wynosi
21. Oblicz obj˛etość kuli.
Wykonajmy na poczatku
˛ odpowiedni rysunek.
Przyjmijmy oznaczenia zgodnie z rysunkiem. Zatem d = d1 + d2 . Aby obliczyć obj˛etość kuli musimy znać jej promień R.
Z treści zadania wynika, że jeśli r1 = n, gdzie n jest pewna˛ liczba˛ naturalna,˛ to r2 = n + 1 oraz d = n + 2 (sa˛ to trzy
kolejne liczby naturalne). Skoro ich suma ma dać 21, wi˛ec
n + (n + 1) + (n + 2) = 21 ⇒ 3n + 3 = 21 ⇒ 3n = 18 ⇒ n = 6.
Stad
˛ otrzymujemy
r1 = 6, r2 = 7, d = 8.
Zauważmy teraz, że dwa trójkaty
˛ widoczne na rysunku sa˛ prostokatne.
˛
Zatem możemy do nich zastosować twierdzenie
Pitagorasa, tzn.
r12 + d21 = R2 oraz r22 + d22 = R2 .
Prawe strony tych równań sa˛ identyczne, czyli
r12 + d21 = r22 + d22 .
Zapiszmy to równanie w Sage-u.
sage: var(’r1,r2,d1,d2’)
sage: rownanie = r1^2+d1^2 == r2^2+d2^2
wynik: d21 + r12 = d22 + r22
Ponieważ d = 8, wi˛ec d2 = 8 − d1 . Wstawmy do powyższego równania za d2 wyrażenie 8 − d1 oraz za r1 i r2 obliczone
wcześniej wartości.
sage: rownanie.subs(d2 = 8-d1, r1 = 6, r2 = 7)
138
4.4. ZADANIA
2
wynik: d21 + 36 = (d1 − 8) + 49
Otrzymaliśmy tym samym równanie z jedna˛ niewiadoma˛ d1 . Rozwia˛żmy je:
sage: solve(rownanie.subs(d2=8-d1, r1=6, r2=7), d1)
77
wynik: d1 =
16
Rozwiazuj
˛ ac
˛ to równanie samodzielnie, musielibyśmy wykonać nast˛epujace
˛ czynności:
62 + d21 = 72 + (8 − d1 )2 ,
36 + d21 = 49 + 64 − 16d1 + d21 ,
16d1 = 77,
77
d1 = .
16
Teraz, korzystajac
˛ z równości R2 = r12 + d21 , możemy obliczyć promień kuli
sage: assume(R>0)
sage: promien = solve(R^2==6^2+(77/16)^2, R)
1 √
wynik: R =
15145
16
Na koniec obj˛etość kuli obliczymy poleceniem:
sage: Objetosc_kuli.subs(R=1/16*sqrt(15145))
wynik: V =
4.4
15145 √
15145π
3072
Zadania
Do każdego z poniższych zadań sporzadź
˛ odpowiednie rysunki w programie Sage.
1. Wykonaj rysunek sześciokata
˛ foremnego taki, jak w rozwiazaniu
˛
przykładu 2.
2. Oblicz obj˛etość graniastosłupa prawidłowego czworokatnego,
˛
którego przekatna
˛ ma długość 5 cm i tworzy z przekatn
˛ a˛
podstawy kat
˛ 300 .
3. W graniastosłupie prostym w podstawie znajduje si˛e trójkat
˛ prostokatny,
˛
którego boki tworza˛ proporcje 1 :
√
3 : 2.
0
Przeciwprostokatna
˛ podstawy tworzy z przekatn
˛ a˛ ściany bocznej kat
˛ 45 . Oblicz pole powierzchni i obj˛etość tego
graniastosłupa jeśli jego wysokość wynosi 6.
4. Pole powierzchni bocznej graniastosłupa prawidłowego trójkatnego
˛
jest dwa razy wi˛eksze od pola jednej podstawy.
Wysokość ostrosłupa ma długość 5. Oblicz pole powierzchni i obj˛etość tego graniastosłupa.
139
ROZDZIAŁ 4. STEREOMETRIA
√
5. Graniastosłup prawidłowy sześciokatny
˛ ma krótsza˛ przekatn
˛ a˛ długości 4 2, która jest dwa razy dłuższa od dłuższej
przekatnej
˛
podstawy. Oblicz pole powierzchni i obj˛etość tego graniastosłupa.
√
6. Oblicz obj˛etość graniastosłupa prostego, którego podstawa jest rombem o polu równym 12 13. Dłuższa przekatna
˛
tego rombu ma długość 12 i tworzy z przekatn
˛ a˛ graniastosłupa kat
˛ 300 . Oblicz pole powierzchni całkowitej tego
graniastosłupa.
7. Podstawa˛ ostrosłupa jest prostokat
˛ o wymiarach 4 × 3. Oblicz obj˛etość tego ostrosłupa wiedzac,
˛ że stosunek długości
kraw˛edzi bocznej do kraw˛edzi podstawy wynosi 3 : 2.
8. Środek wysokości ostrosłupa prawidłowego trójkatnego
˛
jest oddalony od ściany bocznej o 5 cm. Kraw˛edź boczna jest
nachylona do płaszczyzny podstawy pod katem
˛
300 . Oblicz obj˛etość i pole powierzchni całkowitej tego ostrosłupa.
9. Wysokość ostrosłupa prawidłowego sześciokatnego
˛
ma długość 8 i tworzy ze ściana˛ boczna˛ kat
˛ 300 . Oblicz obj˛etość
i pole powierzchni całkowitej tego ostrosłupa.
10. Ostrosłup ma w podstawie kwadrat o boku 7 cm i jedna z kraw˛edzi bocznych jest prostopadła do podstawy. Oblicz
obj˛etość i pole powierzchni całkowitej tego ostrosłupa wiedzac,
˛ że najdłuższa kraw˛edź boczna ma długość 14 cm.
11. Prostokat,
˛ którego długości boków spełniaja˛ proporcj˛e 2 : 3, jest przekrojem osiowym dwóch walców. Oblicz stosunek
obj˛etości i pól powierzchni tych walców.
√
12. Stożek o tworzacej
˛ długości 4 3 został przedzielony płaszczyzna˛ prostopadła˛ do wysokości stożka, która przedzieliła
√
go na dwie bryły. Jedna z tych brył jest stożkiem o promieniu podstawy 2 3 i powierzchni bocznej trzykrotnie
mniejszej od powierzchni wyjściowego stożka. Oblicz obj˛etość bryły, która powstała po podziale i która nie jest
stożkiem.
13. Powierzchnia boczna stożka po rozwini˛eciu jest wycinkiem koła o kacie
˛ środkowym 1200 . Oblicz pole powierzchni
całkowitej i obj˛etość tego stożka, jeśli jego tworzaca
˛ ma długość 6.
√
14. Kul˛e wpisano w stożek, którego wysokość jest równa 2 3, a promień podstawy wynosi 2. Oblicz obj˛etość o pole
powierzchni tej kuli.
ODPOWIEDZI
1. A = [0,0]; B = [2,0]; C = [3,sqrt(3)];
D=[2,2*sqrt(3)]; E=[0, 2*sqrt(3)]; F=[-1, sqrt(3)]
v = [A,B,C,D,E,F]
sz = polygon(v, fill=False)
sz = sz + line([A,D], color="red",thickness=1)
sz = sz + line([B,E], color="green",thickness=1)
sz = sz + line([A,B], color="green",thickness=1)
sz = sz + line([C,[1,sqrt(3)]], color="red",thickness=1)
sz = sz + line([[-.1,sqrt(3)],[1,sqrt(3)]], color="red",thickness=0.5)
sz = sz + line([[-1,sqrt(3)],[-.6,sqrt(3)]], color="red",thickness=0.5)
sz = sz + line([A,E], color="green",thickness=1)
140
4.4. ZADANIA
sz = sz + text(r"$a$",[1, -0.15], fontsize=14)
sz = sz + text(r"$a$",[1.6, 1.15], fontsize=14)
sz = sz + text(r"$a$",[0.8, sqrt(3)+0.9], fontsize=14)
sz = sz + text(r"$60^0$",[1.6, 0.2], fontsize=14)
sz = sz + text(r"$a\sqrt{3}$",[-.35, sqrt(3)], fontsize=14)
sz.show(figsize=4, axes=False)
2. Kraw˛edź podstawy: a =
3. Pp =
√
9 3
,
2
√
5 6
,
4
wysokość graniastosłupa: H = 2.5, obj˛etość: V =
√
√
Pc = 108 + 40.5 3, V = 27 3.
√
√
√
4. Pp = 75 3, Pc = 225 3, V = 375 3.
√
√
√
√
5. Pp = 3 3, Pc = 3 3 + 12 13, V = 3 78.
√
√
6. Pc = 24 13 + 96 3.
√
7. V = 4 14.
8. V =
√
1750 63
.
3
√
9. Pc = 256 + 32 3, V = 682 23 .
10. Pc = 49(1 +
11.
P1
P2
=
16 V1
,
21 V2
√
2+
√
3), V =
√
343 2
.
3
= 23 .
√
√
12. V = (2 2 − 1) 21π .
13. Pc = 16π , V =
14. Pc =
48π
,
9
V =
√
16 2
.
3
√
32 3π
.
27
141
375
.
16
ROZDZIAŁ 4. STEREOMETRIA
142
Rozdział 5
Dodatek A
Dodatek ten zawiera definicj˛e funkcji pozwalajac
˛ a˛ w prosty i szybki sposób rysować graniastosłupy. Na przykład, aby
narysować graniastosłup sześciokatny,
˛
wystarczy wydać polecenie
sage: g = graniastoslup(6)
sage: g.show()
Aby narysować graniastosłup n–katny
˛ dla n > 6 musimy podać list˛e wierzchołków jednej podstawy tego graniastosłupa.
Dla uproszczenia ma to być lista punktów na płaszczyźnie. Narysujmy graniastosłup siedmiokatny.
˛
sage: v = [[0,0],[2,0],[3,1.5],[2,3],\
[-0.5,4],[-3,2],[-2,1]]
sage: g7 = graniastoslup(7,v)
sage: g7.show()
Aby zobaczyć przekatne
˛ graniastosłupa należy użyć opcji przekatne_gr=True. Podobnie przekatne
˛ ścian bocznych
zobaczymy, gdy użyjemy opcji przekatne_sb=True. Domyślnie sa˛ one ukryte.
sage: g4 = graniastoslup(4,przekatne_gr=True,\
przekatne_sb=True)
sage: g4.show()
143
ROZDZIAŁ 5. DODATEK A
Zobaczmy jak wyglada
˛ definicja tej funkcji
#graniastosłup n - katny
˛
def graniastoslup(n=3, wierzcholki=[], przekatne_gr=False, przekatne_sb=False):
h = 2
#wysokość graniastosłupa
#definicja współrz˛
ednych wierzchołków dla n = 3, 4, 5 i 6
#dla graniastosłupów n-katnych,
˛
gdzie n > 6
#należy samemu zdefiniować list˛
e wierzchołków
v3 = [[0,0], [2,0], [1,2]]
v4 = [[0,0],[2,0],[2,2],[0,2]]
v5 = [[0,0],[2,0.5],[2.5,2],[0.5,3],[-1,2]]
v6 = [[0,0],[2,0],[3,1.5],[2,3],[0,3],[-1,1.5]]
dv = [v3, v4, v5, v6]
#jeśli podamy złe paramatery dla, których nie jesteśmy w stanie
#narysować graniastosłup,
# to wyświetlamy t˛
e informacj˛
e
gr0 = text3d(’Graniastosłup nie istnieje.’, [0,0,0], color=(0,0,0), size=14)
#sprawdzamy, jaka˛ liczb˛
e wierzchołków podał użytkownik, i na tej podstawie
#definiujemy ich list˛
e: v
if n < 3:
print ’Liczba wierzchołków musi być wi˛
eksza od 2’
return gr0
elif (not n) and (not wierzcholki):
n = 3
if not wierzcholki:
v = dv[0]
#domyślnie rysujemy gr. trójkatny
˛
elif n>2 and n < 7:
if not wierzcholki:
v = dv[n-3]
#v[0] - trójkatny,
˛
#v[1] - czworokatny,
˛
#v[2] - pi˛
eciokatny,
˛
#v[3] - sześciokatny
˛
else:
if len(wierzcholki) >= n:
v = wierzcholki
else:
print ’Liczba wierzchołków musi być równa ’ , n
return gr0
else:
if not wierzcholki:
144
print ’Jeśli n > 6, to trzeba podać list˛
e wierzchołków’
return gr0
else:
if len(wierzcholki) >= n:
v = wierzcholki
else:
print ’Liczba wierzchołków musi być wi˛
eksza lub \
równa ’ , n
return gr0
#v zawiera list˛
e wierzchołków na płaszczyźnie
#na jej podstawie definiujemy dwie podstawy w przestrzeni
#do jednej dodamy współrz˛
edna˛ 0 a do drugiej h - wysokość
vp1 = []
vp2 = []
import copy
vh = copy.deepcopy(v) #kopia listy wierzchołków
for A in v:
A.append(0)
vp1.append(A)
for B in vh:
B.append(h)
vp2.append(B)
#print ’vp2’, vp2
#print ’vp1’, vp1
#jeśli wierzchołków jest wi˛
ecej niż n, to bierzemy pierwszych n,
#a reszt˛
e wyrzucamy
#potrzebne dla funkcji polygon3d
while len(vp1) > n:
vp1.pop()
vp2.pop()
#rysujemy podstawy poleceniem polygon3d
gr = polygon3d(vp2, color="green", opacity=0.1)\
+ polygon3d(vp1, color="blue", opacity=0.1)
#dodajemy kraw˛
edzie boczne - line3d
for i in range(0,n):
145
ROZDZIAŁ 5. DODATEK A
gr = gr + line3d([vp1[i], vp2[i]], color="blue",thickness=3)
#dodatkowo obramujmy podstawy
for i in range(0,n):
gr = gr + line3d([vp1[i], vp1[(i+1) % n]], color="blue",thickness=3)
gr = gr + line3d([vp2[i], vp2[(i+1) % n]], color="blue",thickness=3)
#dodajmy jeszczedo wierzchołków etykiety
#obliczamy środek masy każdej z podstaw, aby odsunać
˛ etykiety od wierzchołków
Cx = 0
Cy = 0
for p in vp1:
Cx = Cx + p[0]
Cy = Cy + p[1]
Cx = Cx/n
Cy = Cy/n
C1 = [Cx, Cy, 0]
C2 = [Cx, Cy, h]
if n == 3:
d = 2
else:
d = 0.2*n + 0.5
for i in range(0,n):
gr = gr + text3d(’A%1i’%(i+1), \
[ vp1[i][0]+(vp1[i][0]-C1[0])/(d*n), vp1[i][1]+(vp1[i][1]-C1[1])/(d*n),\
vp1[i][2]+(vp1[i][2]-C1[2])/(d*n)+ .01 ],\
color=(0,0,0), size=14)
gr = gr + text3d(’B%1i’%(i+1), \
[ vp2[i][0]+(vp2[i][0]-C2[0])/(d*n), vp2[i][1]+(vp2[i][1]-C2[1])/(d*n),\
vp2[i][2]+(vp2[i][2]-C2[2])/(d*n)+ .01 ],\
color=(0,0,0), size=14)
#Opcja˛ przekatne_gr = True b˛
edzie można zobaczyć przekatne
˛
graniastosłupa
if przekatne_gr == True and n < 7 and not wierzcholki:
if n <= 3:
print ’Graniastosłup nie posiada przekatnych’
˛
elif n == 4:
gr = gr + line3d([vp1[0], vp2[2]], color="green",thickness=3)\
+ line3d([vp1[0], vp1[2]], color="green",thickness=2)
elif n == 5:
146
gr = gr + line3d([vp1[0], vp2[2]], color="green",thickness=3)\
+ line3d([vp1[0], vp1[2]], color="green",thickness=2)
gr = gr + line3d([vp1[0], vp2[3]], color="red",thickness=3)\
+ line3d([vp1[0], vp1[3]], color="red",thickness=2)
elif n == 6:
gr = gr + line3d([vp1[1], vp2[4]], color="green",thickness=3)\
+ line3d([vp1[1], vp1[4]], color="green",thickness=2)
gr = gr + line3d([vp1[1], vp2[3]], color="red",thickness=3)\
+ line3d([vp1[1], vp1[3]], color="red",thickness=2)
else:
print ’Nie zaimplementowano rysowania przekatnych
˛
dla n > 6\
badź
˛
dla listy własnych wierzchołków.’
#Opcja˛ przekatne_sb = True b˛
edzie można zobaczyć
przekatne
˛
ścian bocznych
if przekatne_sb == True and n < 7 and not wierzcholki:
if n == 3:
gr = gr + line3d([vp1[0], vp2[2]], color="green",thickness=2)\
+ line3d([vp1[1], vp2[2]], color="red",thickness=2)
elif n == 4:
gr = gr + line3d([vp1[0], vp2[3]], color="gray",thickness=2)\
+ line3d([vp1[2], vp2[3]], color="gray",thickness=2)
elif n == 5:
gr = gr + line3d([vp1[0], vp2[4]], color="gray",thickness=2)\
+ line3d([vp1[3], vp2[4]], color="gray",thickness=2)
elif n == 6:
gr = gr + line3d([vp1[1], vp2[0]], color="gray",thickness=2)\
+ line3d([vp1[5], vp2[0]], color="gray",thickness=2)
else:
print ’Nie zaimplementowano rysowania przekatnych
˛
dla n > 6 \
badź
˛
dla listy własnych wierzchołków.’
return gr
147
ROZDZIAŁ 5. DODATEK A
Podsumowanie
Tym sposobem dotarliśmy do końca ksia˛żki. Mam nadziej˛e, że informacje w niej zawarte okaża˛ si˛e użyteczne dla wszystkich
czytelników a zarazem stana˛ si˛e bodźcem do dalszego pogł˛ebiania wiedzy na temat programu Sage. Widzimy, że do każdego
działu matematyki omawianego w szkole ponadgimnazjalnej znajdziemy odpowiednie narz˛edzia, które z pewnościa˛ pomoga˛
w zrozumieniu wielu zagadnień czy przy rozwiazywaniu
˛
zadań. Oczywiście w ksia˛żce opisałem tylko niewielka˛ ich liczb˛e,
tych najbardziej przydatnych w szkole. Jednakże możliwości programu sa˛ naprawd˛e ogromne, możemy wykorzystywać go
do obliczeń dużo bardziej zaawansowanych. Mamy dost˛epnych bardzo dużo narz˛edzi wykorzystywanych we współczesnej
teorii liczb i kryptologii. Jeśli ktoś interesuje si˛e analiza˛ matematyczna,˛ algebra,˛ optymalizacja˛ czy matematyka˛ dyskretna˛
znajdzie również wiele przydatnych narz˛edzi. Nie b˛ed˛e teraz wymieniał ani opisywał ich wszystkich, jednakże chc˛e tylko
uświadomić czytelnika, że jeśli zajmuje si˛e jakimkolwiek działem matematyki, to z pewnościa˛ znajdzie w programie Sage
wiele przydatnych narz˛edzi dla siebie.
148

Podobne dokumenty