dlaczego warto nauczac z komputerem?´ -...
TRANSCRIPT
Dlaczego warto nauczac z komputerem?
Rewolucja technologiczna
Na naszych oczach obserwujemy rewolucje technologii informatycznych: tempo zmian jest tak niesły-
chanie szybkie jak nigdy w historii rozwoju cywilizacji. Od pojawienia sie komputerów osobistych,
nastepnie internetu i telefonii komórkowej, az do najnowszych osiagniec 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 sie na zmiany w metodach kształcenia przedmiotów
takich jak matematyka czy fizyka? Odpowiedz jest pesymistyczna: przedmioty te sa nauczane w wiek-
szosci szkół metodami tradycyjnymi "tablica-kreda". Ba, nawet jesli tablica jest interaktywna, to czesto
słuzy jedynie wyswietlaniu klasycznych tresci. Zastosowanie nowoczesnych technologii nierzadko kon-
czy sie na ich bardzo powierzchownych aspektach. Czesto komputer bywa po prostu lepsza maszyna do
pisania. Podobne obserwacje mozna odniesc do kształcenia w szkołach wyzszych.
Z naszej praktyki wynika, ze stosowanie metod numerycznych, w szczególnosci wspomaganych
wizualizacja niektórych zagadnien z matematyki i fizyki, pozwala studentom znacznie lepiej zrozumiec
analizowane problemy. Nalezy wyraznie podkreslic, ze nie negujemy tradycyjnych metod w odnie-
sieniu do nauczania fundamentalnych aspektów teorii matematycznych i fizycznych. Nalezy jednak
sobie odpowiedziec na pytanie, co moze komputer wniesc nowego dla poszerzenia mozliwosci po-
znania danego przedmiotu czy zagadnienia? W wielu przypadkach okazuje sie ze moze i to bardzo wiele.
Problemy z kadra?
Wykorzystywanie komputera do rozwiazywania problemów na lekcjach nalezy obecnie do rzadkosci z
oczywistych powodów nieprzygotowania kadry dydaktycznej do wyzwan i potrzeb obecnych czasów.
Mówiac wprost nie wiemy jak powinno sie korzystac z komputera by było to nie tylko z pozytkiem dla
uczniów, ale i adekwatnie do mozliwosci, które komputer daje. Popularnym skojarzeniem do słów: kom-
puter i edukacja jest magiczne słowo e-learning. Jednak e-learning jest usprawnieniem organizacyjnym
nauczania. My siegamy głebiej i ingerujemy w tresci i metody nauczania.
2
Inicjatywa iCSE w Uniwersytecie Slaskim
Zdarza sie, ze przeprowadzanie obliczen przy pomocy przysłowiowego “ołówka i kartki papieru” czy
“kredy i tablicy” oznacza ogromna strate czasu na zmudne i czasochłonne przeliczenia i skutkuje
brakiem czasu na dyskusje istoty problemu. Jest to jedna z przyczyn, która wymusiła na nas realizacje
nowatorskiego programu dydaktycznego w Instytucie Fizyki Uniwersytetu Slaskiego. 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ł sie czescia strategii
rozwoju szkolnictwa wyzszego. Innowacyjnosc iCSE polega na integracji metod komputerowych, w tym
wizualizacji, metod numerycznych, symulacji i analizy danych z kierunkowymi przedmiotami wybra-
nych nauk scisłych. Opracowalismy prawie 200 tematów, w których wykorzystujemy otwarto-zródłowy
(a co za tym idzie: bezpłatny i ogólnodostepny)program komputerowy o nazwie SAGE do analizy
i wizualizacji problemów z matematyki, fizyki, chemii i biofizyki. Podnosi to atrakcyjnosc zajec
dydaktycznych i wzrost umiejetnosci studentów. Uwazamy, ze podobny sposób nauczania moze byc
wdrazany wczesniej: w szkole sredniej. Ale to wymaga wysiłku zarówno kadry dydaktycznej jak i
uczniów. Cos za cos.
Lepsze kwalifikacje dla rynku pracy!
Bez solidnej edukacji komputerowej zintegrowanej z matematyka i przedmiotami scisłymi młodzi
ludzie juz obecnie staja sie mało atrakcyjni na rynku pracy. Tradycyjne metody nauczania oddalaja
uczniów i studentów od rzeczywistych problemów, z którymi przyjdzie im sie zetknac w pózniejszym
zyciu zawodowym. Współczesnie zarówno inzynier, projektant, analityk finansowy, aktuariusz jak i
pracownik naukowy korzystaja na co dzien z wyników obliczen numerycznych i symulacji komputero-
wych, przeprowadzanych w sposób mniej lub bardziej swiadomy, zaleznie od konkretnego przypadku i
rodzaju wykorzystywanego oprogramowania.
Nauka i technika XXI wieku, jakkolwiek zbudowana na misternej konstrukcji osiagniec poprzednich
pokolen, zawiera elementy jakosciowo odmienne. Oznacza to, ze mozna wskazac dziedziny nauki,
konieczne w strukturze współczesnych przedmiotów i studiów, których jednak niemozna skutecznie
nauczac bez uzycia komputera.
3
O ksiazce słów kilka:
Wdrazajac projekt iCSE w Instytucie Fizyki, powstał pomysł stworzenia materiałów dla nauczycieli i
uczniów szkół. Na stronie projektu:http://icse.us.edu.pl, mozna znalezc wiele materiałów, których czesc
jest skierowana bezposrednio do uczniów. W ramach projektu do konca kwietnia 2013 roku prowadzone
były warsztaty w wybranych szkołach. Duze zainteresowanie ze strony nauczycieli za-skutkowało pro-
jektem przygotowania skryptu, który mógłby byc punktem wyjscia do efektywnego uzycia komputera w
szkołach. Skrypt obejmuje wybrane tematy z matematyki, które sa koncepcyjnie najprostsze do zreali-
zowania. Róznorodne zagadnienia z fizyki mozna znalezc na stronach internetowych projektu. Autorzy
sa otwarci na wszelkie sugestie i uwagi krytyczne zarówno kadry dydaktycznej jaki i uczniów szkół
kazdego szczebla oraz moga słuzyc pomoca przy wdrazaniu proponowanych metod oraz materiałów do
nauczania matematyki i przedmiotów scisłych.
dr hab. Marcin Kostur, prof US
prof. dr hab. Jerzy Łuczka
4
Spis tresci
1 Podstawowe informacje o Sage 9
1.1 Instalacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1.1 Instalacja w systemie Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1.2 Instalacja w systemie Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2 Rozpoczynamy prace z programem Sage . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3 Obliczenia arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.1 Podstawowe operatory arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.2 Dokładnosc wykonywanych obliczen . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.3 Operatory porównania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.3.4 Stałe matematyczne i zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.3.5 Zero na poczatku liczby całkowitej . . . . . . . . . . . . . . . . . . . . . . . . 29
1.3.6 Upraszczanie wyrazen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.3.7 Liczby całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.3.8 Zapisywanie skomplikowanych wyrazen . . . . . . . . . . . . . . . . . . . . . 32
1.3.9 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.4 Wyrazenia algebraiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.4.1 Deklaracja zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.4.2 Podstawienia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.4.3 Wyrazenia wymierne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.4.4 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.5 Równania, nierównosci i ich układy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.5.1 Rozwiazywanie równan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.5.2 Rozwiazywanie nierównosci . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
1.5.3 Rozwiazywanie układów równan . . . . . . . . . . . . . . . . . . . . . . . . . 47
1.5.4 Rozwiazywanie układów nierównosci . . . . . . . . . . . . . . . . . . . . . . . 49
1.5.5 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5
SPIS TRESCI
2 Funkcje 55
2.1 Podstawowe wiadomosci o funkcjach . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.1.1 Definicja funkcji, dziedzina, przeciwdziedzina i zbiór wartosci . . . . . . . . . . 57
2.1.2 Wykres funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.1.3 Okreslanie dziedziny funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.2 Najczesciej zadawane pytania dotyczace funkcji . . . . . . . . . . . . . . . . . . . . . . 63
2.2.1 Zbiór wartosci funkcji kwadratowej . . . . . . . . . . . . . . . . . . . . . . . . 71
2.2.2 Porównywanie ze soba dwóch funkcji. . . . . . . . . . . . . . . . . . . . . . . . 73
2.3 Funkcje poznane w szkole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.3.1 Funkcja liniowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.3.2 Funkcja kwadratowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2.3.3 Funkcja wymierna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
2.3.4 Funkcja wykładnicza i logarytmiczna . . . . . . . . . . . . . . . . . . . . . . . 85
2.4 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3 Rachunek prawdopodobienstwa i statystyka 95
3.1 Rachunek prawdopodobienstwa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.2 Statystyka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.1 Srednia arytmetyczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.2 Odchylenie standardowe i wariancja . . . . . . . . . . . . . . . . . . . . . . . . 113
3.2.3 Srednia geometryczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
3.2.4 Mediana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.2.5 Dominanta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
3.2.6 Grupowanie i prezentacja danych statystycznych . . . . . . . . . . . . . . . . . 117
3.3 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4 Stereometria 129
4.1 Bryły platonskie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.2 Graniastosłupy i ostrosłupy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
4.3 Bryły obrotowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
4.4 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
5 Dodatek A 157
6
Wstep
Na wstepie chciałbym zacytowac słowa znanego polskiego matematyka, profesora Hugo Dyonizego
Steinhausa (1887-1972):
1 Matematyka podobna jest do wiezy, której fundamenty połozono przed wiekami, a do której
dobudowuje sie coraz wyzsze pietra. Aby zobaczyc postep budowy, trzeba isc na pietro
najwyzsze, a schody sa strome i składaja sie z licznych stopni. Rzecza popularyzatora jest
zabrac słuchacza do windy, w której nie zobaczy ani posrednich pieter, ani praca wieków
ozdobionych komnat, ale przekona sie, ze gmach jest wysoki i wciaz rosnie.
Ksiazka ta chciałbym przede wszystkim zachecic czytelnika do nauki matematyki ale tez pokazac, ze jej
nauka moze byc łatwa i przyjemna. Dzis w dobie komputerów jest to mozliwe, gdyz wiele zagadnien
matematycznych mozna bardzo łatwo zilustrowac z pomoca odpowiednich programów komputerowych.
Z pewnoscia kazdy z czytelników korzystał kiedys z kalkulatora. Jest to najprostsze narzedzie potra-
fiace szybko wykonywac obliczenia arytmetyczne. Bardziej rozbudowane posiadaja dodatkowe funkcje
liczace na przykład potegi, logarytmy czy funkcje trygonometryczne. Jednakze dzisiejsze narzedzia ma-
tematyczne posiadaja duzo wieksze mozliwosci. Niestety wiekszosc z tych narzedzi jest płatna i sporo
kosztuje.
W ksiazce tej bede korzystał z programu matematycznego o nazwie Sage2, który jest całkowicie dar-
mowy, a mozliwosciami dorównuje, jesli nie przewyzsza, komercyjnym rozwiazaniom. Jest to cały pa-
kiet przeróznych narzedzi do wykonywania wszelkiego rodzaju obliczen. Mozemy wykonywac oblicze-
nia numeryczne – takie jak na kalkulatorze (nazywamy je arytmetycznymi), ale mozemy tez wykonywac
obliczenia symboliczne (na wyrazeniach algebraicznych, tzn. takich, które oprócz liczb i operatorów
zawieraja tez zmienne czy tez parametry). Dzieki temu, mozemy definiowac funkcje, równania, układy
równan, czy dowolne wyrazenia algebraiczne i na nich wykonywac obliczenia. Mamy tez do dyspozycji
1Jest to cyctat z artykułu pt. „Czem jest matematyka i na czem polega jej postep?”, który został wygłoszony przez profesoraHugo Dyonizego Steinhausa w trakcie serii popularnych odczytów matematycznych, wygłoszonych zima 1926-1927 roku przezprofesorów Uniwersytetu i Politechniki we Lwowie.
2http://www.sagemath.org/
7
SPIS TRESCI
mnóstwo narzedzi graficznych do rysowania wykresów funkcji, figur geometrycznych na płaszczyznie
i w przestrzeni.
Podstawowe informacje na temat instalacji oraz sposobów korzystania z programu Sage zawarłem
w rozdziale pierwszym. Opisuje w nim równiez jak wykonywac obliczenia arytmetyczne, algebraiczne,
jak rozwiazywac równania, nierównosci czy ich układy.
W rozdziale drugim pokazuje jak z pomoca programu łatwo jest badac własnosci funkcji jednej zmien-
nej. Sage pozwala definiowac takie funkcje w ten sam naturalny sposób jak robicie to zwykle na lekcjach
matematyki, tzn. za pomoca wzoru f(x) = wyrazenie, gdzie wyrazenie moze byc dowolnym wyra-
zeniem algebraicznym zawierajacym pewna zmienna. Na przykład zapis f(x) = x + 5 wystarczy aby
narysowac wykres tej funkcji, znalezc jej miejsca zerowe, obliczac wartosci w dowolnym punkcie, itd.
Trzeci rozdział poswiecony jest rachunkowi prawdopodobienstwa i statystyce matematycznej. Jak
wiemy, podczas rozwiazywania zadan z rachunku prawdopodobienstwa czesto musimy wykonywac
wiele obliczen kombinatorycznych. Program Sage posiada cała game gotowych funkcji kombinatorycz-
nych, miedzy innymi do zliczania kombinacji czy wariacji. Poza tym mamy mozliwosc definiowania
zbiorów. Na podstawie zdefiniowanych zbiorów mozna definiowac rodziny ich podzbiorów. Podobnie
mozna tworzyc ciagi oraz zbiory podciagów o okreslonej długosci. To wszystko powoduje, ze mozna
w bardzo ciekawy i prosty sposób zilustrowac nawet dosc skomplikowane zadanie kombinatoryczne.
W rozdziale czwartym pokazuje, jak łatwo uczyc sie stereometrii majac takie narzedzie jak Sage. Ste-
reometria jest działem geometrii, która w szczególny sposób wymaga dobrej wyobrazni. Jak sie przeko-
nacie, mozna bardzo łatwo rysowac bryły w przestrzeni trójwymiarowej, w dodatku mamy mozliwosc
podgladania tych brył z róznych perspektyw, poprzez obracanie ich za pomoca myszy komputerowej.
Do ksiazki dołaczony został równiez interaktywny arkusz programu Sage, w którym zawarte sa miedzy
innymi gotowe do uzycia i przetestowania przykłady z ksiazki.
8
Rozdział 1
Podstawowe informacje o Sage
Sage1 jest oprogramowaniem matematycznym składajacym sie z bardzo duzej liczby narzedzi przydat-
nych w wielu dziedzinach matematyki. Mozemy z jego pomoca wykonywac zarówno obliczenia nu-
meryczne jak i symboliczne. Z łatwoscia rozwiazemy wszelkiego rodzaju równania, nierównosci czy
układy równan. Szybko wykona za nas wszelkie obliczenia na liczbach, obliczenia kombinatoryczne
czy statystyczne. Pomysłodawca i liderem projektu Sage jest William Stein, matematyk z Uniwersy-
tetu Waszyngtonskiego. Wczesniej projekt nazywał sie SAGE, System for Algebra and Geometry
Experimentation2. Pierwsza wersja programu została opublikowana w lutym 2005 roku. Był i jest do
dzis rozpowszechniany jako darmowe oprogramowanie oparte na licencji GNU General Public License3. Mamy wiec wolny dostep nie tylko do samego programu ale tez do jego zródeł.
Sage oparty jest na jezyku 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ózniczkowy
Symmetrica, Sage-Combinat Kombinatoryka
GSL, SciPy, NumPy, ATLAS Obliczenia numeryczne
PARI/GP, FLINT, NTL Teoria liczb
R, SciPy Obliczenia statystyczne
1http://www.sagemath.org2Stein, William. SAGE: A Computer System for Algebra and Geometry Experimentation. Retrieved 30 March 2012.3http://pl.wikipedia.org/wiki/GNU_General_Public_License4http://pl.wikipedia.org/wiki/Python
9
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Poza tym zawiera wiele bibliotek własnych, zawierajacych narzedzia, których nie mozna znalezc w do-
stepnych darmowych bibliotekach badz tez okazało sie, ze mozna utworzyc ich odpowiedniki lepsze
i szybsze. Dzieki temu wszystkiemu jest on bardzo bogata alternatywa dla takich narzedzi komercyjnych
jak Maple, Mathematica, czy MATLAB.
1.1 Instalacja
Jesli ktos nie chce badz nie moze zainstalowac programu Sage na swoim komputerze, to moze skorzystac
z udostepnionego on-line notatnika Sage. Znajduje sie on na stronie http://www.sagenb.org. Aby
móc tworzyc własne arkusze, edytowac je i zapisywac, musimy utworzyc konto uzytkownika. Autorzy
strony nie umiescili typowego formularza rejestracyjnego nowych uzytkowników, w zamian mozemy
skorzystac z juz istniejacego konta, które posiadamy u innego usługodawcy, np. Google, Yahoo, OpenId,
itd. Ich liste zobaczymy po wejsciu na strone po prawej stronie w postaci odpowiednich ikon.
Po kliknieciu na wybrana ikone – ja osobiscie skorzystałem z konta Google – zobaczymy okno logowa-
nia.
10
1.1. INSTALACJA
Po zalogowaniu mozemy juz w pełni korzystac 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 uzycia, tzw. prekompilowana, natomiast druga
wymaga samodzielnej kompilacji zródeł. Ja opisze tylko pierwsza wersje, gdyz jest prostsza. Jesli ktos
chciałby wypróbowac te 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 wejsciu na nia, wybieramy serwer, z którego bedziemy pobierac pliki (najlepiej jak najblizszy naszej
lokalizacji), np.
11
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
ftp://ftp.fu-berlin.de/unix/misc/sage/index.html
po czym musimy wybrac odpowiednia wersje, w zaleznosci od systemu, na którym pracujemy, np.
Windows, Linux, Mac OS X, itd. Po wybraniu rozpocznie sie pobieranie pliku.
1.1.1 Instalacja w systemie Linux
Jesli 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 rozpakowac do dowolnego katalogu, do którego mamy prawa zapisu. W tym celu otwie-
ramy terminal, wchodzimy do katalogu gdzie zapisalismy 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
/sciezka/do/katalogu/sage-5.12
Mozemy juz korzystac z programu wydajac polecenia:
cd /sciezka/do/katalogu/sage-5.12
./sage
Powinnismy zobaczyc interaktywny wiersz polecen Sage.
Własciwie to wystarczy, aby zaczac prace z programem. Jednak warto wykonac jeszcze pare kroków,
dzieki czemu bedzie mozna uruchamiac go z dowolnego miejsca na dysku. W tym celu nalezy skopiowac
plik / cieka /do/katalogu/sage-5.12/sage do katalogu, w którym zwykle instalowane sa
programy, np. /usr/local/bin/. Aby tego dokonac, wydajemy polecenie
cp /sciezka/do/katalogu/sage-5.12/sage /usr/local/bin/
Nastepnie otwieramy plik /usr/local/bin/sagew swoim ulubionym edytorze tekstu i zmieniamy
wartosc zmiennej SAGE_ROOT na sciezke do katalogu, gdzie rozpakowalismy program, tzn.
SAGE_ROOT=/sciezka/do/katalogu/sage-5.12
12
1.1. INSTALACJA
Dzieki tym zabiegom, z dowolnego miejsca na dysku, mozemy wydac polecenie sage (bez kropki i
slasha) i mamy uruchomiony program. Mozemy juz korzystac z wszelkich dobrodziejstw, które nam
dostarcza Sage.
Zaraz po uruchomieniu interaktywnego wiersza polecen na ekranie pojawi nam sie kilka informacji, m.
in. wersja programu oraz podpowiedz, ze poleceniem notebook() uruchomimy interfejs notatnika.
Polecenia wpisujemy po napisie sage:.
Aby zobaczyc wynik polecenia, wciskamy klawisz Enter. Jak widzimy, polecenie notebook() uru-
chamia tzw. notatnik programu Sage. Mozna go tez uruchomic wydajac bezposrednio w terminalu sys-
temowym polecenie sage -n.
Z notatnika mozemy korzystac za pomoca dowolnej przegladarki internetowej. Po jej uruchomieniu
wystarczy w polu adresu wpisac adres http://localhost:8080
13
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Domyslnie mamy do dyspozycji konto uzytkownika admin z hasłem sage. Jesli próba zalogowania
sie nie powiedzie (np. podamy zły login lub hasło), to pod przyciskiem Sign in pojawi sie link
Sign up for a new Sage Notebook account. Po kliknieciu na niego otworzy sie formularz, przy pomocy
którego bedzie mozna utworzyc konto nowego uzytkownika.
Po zalogowaniu zobaczymy notatnik, identyczny jaki widzielismy po wejsciu na strone
http://sagenb.org.
14
1.1. INSTALACJA
1.1.2 Instalacja w systemie Windows
Jesli pracujecie na systemie operacyjnym Microsoft Windows, przed instalacja programu Sage musicie
zainstalowac dodatkowy program, który stworzy odpowiednie srodowisko dla Sage-a. Twórcy programu
zalecaja VirtualBox, który mozemy pobrac ze strony . Wybieramy wersje dla Windows i instalujemy.
Nastepnie nalezy pobrac plik aplikacji. Jezeli nie bedziemy korzystac z opcji „multiuser server” powinna
wystarczyc nam wersja Small Sage Virtual Machine dostepna do pobrania bezposrednio na stronie
http://boxen.math.washington.edu/home/emil/doc/html/en/SAGE-DOWNLOAD.html
15
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Po zakonczeniu pobierania aplikacji uruchamiamy program VirtualBox, nastepnie wybieramy z menu
File opcje Import Appliance. Otwarte zostanie okno Appliance Import Wizard, na którym klikamy w przy-
cisk Choose i wskazujemy sciezke do pliku sage-lite-vm-a1.ova, który wczesniej pobralismy.
Akceptujemy wszystkie domyslne ustawienia i klikamy na Finish . Import odpowiednich danych moze
potrwac kilka minut.
Mozemy teraz uruchomic nasza wirtualna maszyne, zaznaczajac ja na liscie 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-
srednio 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 wiekszosc programów
słuzacych do wykonywania kopii płyt CD/DVD.
17
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.2 Rozpoczynamy prace z programem Sage
Z opisu instalacji dowiedzieliscie sie juz jak uruchomic interaktywny wiersz polecen oraz notatnik
programu Sage. Mysle, ze najchetniej wybierana forma pracy z programem bedzie notatnik, dlatego na
nim sie teraz skupimy. Po kliknieciu na link New Worksheet otworzy sie okienko, w które wpisujemy
nazwe tworzonego arkusza. Po wpisaniu nazwy klikamy na przycisk Rename .
Arkusz składa sie z komórek, w które wpisujemy polecenia. Polecenia w notatniku i w interaktyw-
nym wierszu polecen sa takie same. Dodatkowo w notatniku mozemy wprowadzac kilka polecen w jed-
nej komórce. Aby wykonac obliczenia z danej komórki naciskamy przycisk Evaluate lub wciskamy
Shift+Enter. Pamietajmy, ze wyswietlany jest zawsze wynik ostatniego polecenia w komórce.
Jesli chcielibysmy zobaczyc wynik wczesniejszej instrukcji, to mozemy uzyc polecenia print.
18
1.2. ROZPOCZYNAMY PRACE Z PROGRAMEM SAGE
Chciałbym jeszcze na samym poczatku powiedziec o kilku nawykach, które warto sobie wyrobic podczas
pracy z notatnikiem. Po pierwsze, mozemy wstawiac do komórek komentarze do naszych polecen.
Widzimy, ze komentarze poprzedzamy symbolem #. Warto je dodawac, gdyz okaza sie bardzo cenne,
kiedy bedziemy chcieli skorzystac z naszego arkusza po kilku miesiacach lub latach.
Mozemy tez dodawac do arkusza opisy miedzy komórkami. W tym celu przytrzymujemy klawisz Shift
i klikamy w miejsce na arkuszu, w które chcemy wstawic opis.
Otworzy sie okienko, troche przypominajace interfejs typowego programu do edycji tekstu. Jak widzimy,
mozna edytowac tekst w dowolny sposób, pogrubiac, zmieniac kolor czcionki, wstawiac listy, tabele, itd.
Po wprowadzeniu tekstu, dokonujemy zapisu przyciskiem Save changes .
Kolejna wazna rzecza, o której nalezy wiedziec, to uzyskiwanie pomocy na temat polecen. Czasami
zdarza sie, ze znamy nazwe polecenia, ale nie pamietamy jak dokładnie z niego skorzystac albo nie
pamietamy pewnych opcji, z których chcielibysmy skorzystac. Mysle, ze powodów moze byc wiele. Aby
uzyskac informacje na temat okreslonego polecenia, np. sqrt do wolnej komórki arkusza, wpisujemy
19
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Zatem wystarczy wpisac polecenie i po nim znak zapytania.
Jesli chcemy wstawic nowa komórke pomiedzy dwie juz istniejace, najezdzamy kursorem na puste pole
miedzy tymi komórkami az pojawi sie niebieski poziomy pasek i klikamy na niego.
Jesli chcemy zakonczyc prace z notatnikiem najlepiej jest kliknac na przycisk Save & quit dzieki czemu
dokument przed zamknieciem zostanie zapisany. Jesli ktos nie chce zapisywac zmian, to moze kliknac
w przycisk Discard & quit . Po ponownym uruchomieniu notatnika programu Sage i zalogowaniu sie na
stronie http://localhost:8080 zobaczymy liste wszystkich swoich arkuszy.
20
1.2. ROZPOCZYNAMY PRACE Z PROGRAMEM SAGE
Aby otworzyc którys z nich wystarczy kliknac na jego nazwe. Jak widzimy mozemy w tym miejscu usu-
nac arkusz, zatrzymac jesli został wczesniej uruchomiony, czy zapisac na dysku po kliknieciu przycisku
Download .
Opisze teraz jak wykonywac róznego rodzaju obliczenia zarówno numeryczne jak i symboliczne, jak
rozwiazywac równania i nierównosci oraz wiele innych zagadnien. Przykłady polecen Sage bede po-
przedzał słowem sage: . Wyniki natomiast słowem wynik: , np.
sage: 2^123
wynik: 10633823966279326983230456482242756608
Wszystkie opisywane polecenia mozna wykonywac zarówno w notatniku jak i w interaktywnym wierszu
polecen.
21
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.3 Obliczenia arytmetyczne
1.3.1 Podstawowe operatory arytmetyczne
Najprostsze wykorzystanie programu, to wykonywanie obliczen podobnych do tych, które znacie z kal-
kulatorów. Najczesciej wykonujemy na nich podstawowe operacje arytmetyczne +, -, ·, :. W Sage-u
wykonujemy je podobnie, pamietajac tylko, ze „*” oznacza znak mnozenia, a „/” znak dzielenia. Wy-
konajmy kilka obliczen.
sage: 7 + 5 - 4 * 2 / 5
wynik:52
5
Oprócz tych czterech operatorów, mamy do dyspozycji duza ilosc innych funkcji matematycznych
odpowiadajacych potegowaniu, pierwiastkowaniu, logarytmowaniu, funkcje trygonometryczne, itd.
sage: 3^4
wynik: 81
Widzimy, ze symbol „^” oznacza potege, tzn. 3^4 = 34. Sage potrafi pracowac na bardzo duzych
liczbach i do tego robi to bardzo szybko. Mówiac o bardzo duzych liczbach mam na mysli liczby
składajace sie z tysiecy a nawet milionów cyfr. Przyjrzyjmy sie uwaznie obrazkowi ponizej.
Widzimy tam, ze Sage wykonał potegowanie
1234567891234567
w całkowitym czasie 7.01 s, a wynik jest liczba składajaca sie z 9989518 cyfr, czyli prawie 10 mi-
lionów cyfr. Wynik ten uzyskałem na moim laptopie, który nie jest bardzo szybkim komputerem.
Aby obliczyc pierwiastek stopnia drugiego, mamy do dyspozycji funkcje sqrt.
sage: sqrt(121)
wynik: 11
Zatem sqrt(121) =√121 = 11.
22
1.3. OBLICZENIA ARYTMETYCZNE
Nie ma zaimplementowanych funkcji obliczajacych pierwiastki innych stopni. Jednakze nie sa nam
potrzebne, gdyz mamy operator potegowania „^”. Wiemy przeciez, ze pierwiastek stopnia m, to potega1m
, tzn.m√a = a
1m .
Obliczmy na przykład wartosc nastepujacego wyrazenia:
5
√72 + 3
√12,
wystarczy napisac
sage: (7^2 + 3 * sqrt(12))^(1/5)
wynik:(6√3 + 49
) 15
Obliczmy teraz kilka logarytmów. Mamy do dyspozycji funkcje 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. Jesli nie podamy drugiego parametru, to zostanie obliczony logarytm naturalny
danej liczby.
Poza wymienionymi wyzej działaniami, mamy do dyspozycji jeszcze wiele innych. Na jeden z nich
chciałbym zwrócic szczególna uwage. 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
23
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
sage: 12 == 3 * 4 + 0
wynik: True
Zatem a % b zwraca reszte z dzielenia a przez b, wg. wzoru
a% b = r oznacza, ze a = b · n+ r dla pewnej liczby całkowitej n
oraz 0 ≤ r < b.
Otrzymalismy tym samym operator, przy pomocy którego mozemy sprawdzic czy dana liczba całkowita
jest podzielna przez inna liczbe całkowita, np.
sage: (7237626 % 5543) == 0
wynik: False
Rozwiazmy nastepujace zadanie:
Przykład 1. Ile jest wszystkich liczb naturalnych trzycyfrowych podzielnych przez 73?
Utwórzmy liste 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]
Przygotowalismy na poczatku pusta liste. 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. Jesli tak, to wykonywana jest
instrukcja w kolejnym wierszu, tzn. lista = lista + [ n ], która dodaje liczbe n do naszej
listy.
24
1.3. OBLICZENIA ARYTMETYCZNE
Aby odpowiedziec na pytanie postawione w zadaniu, wystarczy policzyc elementy naszej listy albo
wydac polecenie:
sage: len(lista)
wynik: 12
1.3.2 Dokładnosc wykonywanych obliczen
Sage zwykle stara sie zwracac jak najdokładniejsza wartosc wyników obliczen. Spójrzmy na prosty
przykład.
sage: sqrt(53)
wynik:√53
Nie otrzymalismy wyniku w postaci ułamka dziesietnego, gdyz wiemy, ze kazdy taki ułamek bedzie
tylko zaokragleniem tej liczby do pewnej liczby miejsc po przecinku. Tak sie dzieje z kazda liczba
niewymierna. Jesli jednak zalezy nam na przyblizonym wyniku z dokładnoscia do okreslonej liczby
miejsc po przecinku, to mozemy skorzystac z metody N.
sage: N(sqrt(53))
wynik: 7.28010988928052
sage: N(sqrt(53), digits=3)
wynik: 7.28
sage: N(sqrt(53), digits=60)
wynik: 7.28010988928051827109730249152703279377766968257647743837818
Widzimy, ze mozemy z łatwoscia sterowac dokładnoscia zwracanych wyników za pomoca opcji
digits metody N. Ustala ona ilosc cyfr dla całej liczby, dlatego nalezy obchodzic sie ta opcja
ostroznie. Przyjrzyjmy sie przykładowi:
sage: N(sqrt(1323232323232), digits=5)
wynik: 1.1503× 106
sage: (1.1503 * 10^6)^2
25
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
wynik: 1.3232× 1012
sage: N(sqrt(1323232323232))
wynik: 1.15031835733939× 106
Wynik pierwszego pierwiastkowania jest, jak widzimy, obarczony duzym błedem.
1323232323232 >(1.1503× 106
)2= 1.3232× 1012 = 1323200000000.
W drugim przypadku mamy juz duzo lepiej
(1.15031835733939× 106
)2= 1.32323232323200× 1012 = 1323232323232.
Jesli liczba jest mniejsza od jednosci, to metoda N liczbe cyfr zlicza od przecinka, tzn.
sage: (2/3).N(digits=3)
wynik: 0.667
Powiedziałem wyzej „przecinka”, jednak widzimy, ze czesc ułamkowa liczby rzeczywistej oddzielamy
kropka.
1.3.3 Operatory porównania
Mozemy z łatwoscia porównywac ze soba liczby za pomoca operatorów
==, >, <, >=, <=.
sage: 12 > 16
wynik: False
sage: 0.6 == 3/5
wynik: True
sage: 2^8 <= 8^2
wynik: False
Jezeli chcemy porównac wartosci liczbowe wyrazen zawierajacych, oprócz standardowych operatorów
dodawania, mnozenia, itd. równiez funkcje, np. sqrt czy log, to mozemy wtedy uzyc instrukcji N.
26
1.3. OBLICZENIA ARYTMETYCZNE
sage: sqrt(3) == 3^(1/2)
wynik:√3 =
√3
sage: sqrt(3).N() == 3^(1/2).N()
wynik: True
Widzimy, ze w pierwszym przypadku wyswietlona została po prostu równosc, a dopiero po uzyciu
metody N, porównane zostały wartosci liczbowe wyrazen. Metoda N musi zostac dodana do obydwu
stron, gdyz w przeciwnym przypadku, gdybym dajmy na to uzył tylko do lewej strony
sage: sqrt(3).N() == 3^(1/2)
wynik: 1.73205080756888 =√3
wówczas widzimy, ze po lewej mamy wartosc liczbowa, która jest tylko pewnym przyblizeniem pier-
wiastka z trzech, a z prawej wartosc symboliczna, która jest dokładna.
1.3.4 Stałe matematyczne i zmienne
W obliczeniach mozemy wykorzystywac tez stałe matematyczne. Mamy na przykład zdefiniowana
liczbe π.
sage: pi
wynik: π
Otrzymalismy dokładny wynik. Jesli potrzebujemy wartosci numerycznej, to mozemy uzyc funkcji N.
sage: N(pi, digits=3)
wynik: 3.14
sage: N(pi, digits=60)
wynik: 3.14159265358979323846264338327950288419716939937510582097494
Obliczmy wartosc funkcji sinus, dla kata 600.
sage: sin(pi/3)
wynik:1
2
√3
27
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Mozemy definiowac własne zmienne i przypisywac im wartosci.
sage: x = 3/5
W powyzszym przykładzie zdefiniowałem zmienna x i przypisałem jej wartosc 35. Przypisania dokonu-
jemy operatorem „=”. Zauwazmy, ze w wyniku tego polecenia Sage nie wyswietlił zadnego wyniku. Aby
go zobaczyc nalezy wydac jeszcze jedno polecenie zawierajace tylko nazwe zmiennej lub uzyc funkcji
print, tzn.
sage: x
wynik:3
5
Funkcja print wyswietla zawsze wartosc zmiennej w postaci tzw. wierszowej, czyli takiej, jaka wpro-
wadzamy do komórki arkusza czy w wierszu polecen.
sage: print x
wynik: 3/5
sage: x.N(digits=2)
wynik: 0.60
Widzimy, ze instrukcja zawierajaca tylko nazwe zmiennej wyswietla wynik w postaci odpowiednio
sformatowanej (w tym przypadku w postaci ułamka zwykłego). Na zdefiniowanych zmiennych mozemy
wykonywac 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 mozna w jednym wierszu wydac wiele instrukcji, ale kazda musi byc oddzielona sredni-
kiem. Mozna tez nadpisywac wartosci zmiennych (wczesniej jak pamietamy x było równe 35) czy tez
przypisywac im wyniki innych obliczen.
28
1.3. OBLICZENIA ARYTMETYCZNE
1.3.5 Zero na poczatku liczby całkowitej
Wiemy, ze w systemie dziesietnym liczby 12 i 012 sa równe. Jednak Sage takie liczby traktuje zupełnie
inaczej.
sage: 12
wynik: 12
sage: 012
wynik: 10
Otóz, jesli na poczatku liczby całkowitej składajacej sie z cyfr ze zbioru 0, 1, 2, 3, 4, 5, 6, 7 stoi zero,
to Sage traktuje ja jako liczbe 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.
Jesli w zapisie liczby pojawi sie kropka, to Sage potraktuje te liczbe jako dziesietna.
sage: 01.23
wynik: 1.23000000000000
Jesli wpisalibysmy przez przypadek
sage: 029
to dostaniemy komunikat o błedzie,
gdyz liczby w systemie ósemkowym moga sie składac tylko z wymienionych wyzej cyfr od 0 do 7.
29
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.3.6 Upraszczanie wyrazen
Rozpatrzmy teraz nastepujacy przykład:
sage: x = (log(8,sqrt(2))+log(4,1/2))/log(sqrt(8),2)
sage: x
wynik:
(log(4)
log( 12)
+ log(8)
log(√2)
)log (2)
log(2√2)
Mozemy wyrazenie to uproscic za pomoca metody simplify.
sage: x.simplify()
wynik:4 log (8)
3 log (2)− 2 log (4)
3 log (2)
Pewnie zauwazyliscie teraz, ze to wyrazenie mozna jeszcze bardziej uproscic. Uzyjmy wiec innej metody
o nazwie simplify_radical.
sage: x.simplify_radical()
wynik:8
3
Tym razem widzimy, ze otrzymalismy satysfakcjonujacy wynik. Oczywiscie moglismy uzyc poznanej
juz metody N, aby uzyskac wartosc numeryczna tego wyrazenia, jednakze nie byłaby to wartosc do-
kładna.
sage: x.N()
wynik: 2.66666666666666
Do wyrazen zawierajacych funkcje trygonometryczne warto stosowac polecenie simplify_trig().
sage: w = (sin(pi/7))^2+(cos(pi/7))^2)
sage: w.simplify_trig()
wynik: 1
30
1.3. OBLICZENIA ARYTMETYCZNE
1.3.7 Liczby całkowite
Sage posiada tez wiele funkcji przydatnych w teorii liczb, czyli w dziale matematyki zajmujacym sie
badaniem liczb całkowitych. Wiecie zapewne, co to sa liczby pierwsze czy złozone. Mozemy na przykład
łatwo sprawdzic, czy liczba 12324241 jest pierwsza. Wystarczy wydac polecenie:
sage: is_prime(12324241)
wynik: False
Otrzymalismy w wyniku informacje False, czyli „Fałsz”, zatem jest to liczba złozona. Znajdzmy wiec
liczbe pierwsza wystepujaca zaraz po niej.
sage: next_prime(12324241)
wynik: 12324253
sage: 12324253 in Primes()
wynik: True
Wyswietlmy 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]
Wyswietlmy dwunasta oraz dwudziesta pierwsza liczbe pierwsza.
sage: nth_prime(12)
wynik: 37
sage: nth_prime(21)
wynik: 73
W wielu zadaniach dotyczacych liczb całkowitych musimy rozkładac dana liczbe na czynniki pierwsze,
np. podczas wyłaczania całosci przed pierwiastek. Do tego celu słuzy funkcja factor.
31
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
sage: factor(30030)
wynik: 2 · 3 · 5 · 7 · 11 · 13
Rozwiazmy nastepujace zadanie.
Przykład 2. Wyłacz czesc całkowita z pierwiastka:√343035.
Wiemy, ze do rozwiazania tego zadania dobrze jest znac 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 domyslnie wyłacza czesci całkowite spod pierwiastka, tzn.
sage: sqrt(343035)
wynik: 99√35
1.3.8 Zapisywanie skomplikowanych wyrazen
Wyrazenia składajace sie z niewielkiej ilosci działan zwykle zapisujemy jako jedna instrukcje. Aby
rozwiazac nastepujace proste zadanie:
Przykład 3. Zapisz wyrazenie arytmetyczne w jak najprostszej postaci.
12 +√18
33 − 7
wystarczy wydac polecenie:
sage: w1 = (12 + sqrt(18)) / (3^3 - 7); w1
wynik:3
20
√2 +
3
5
Mysle, ze otrzymana postac jest wystarczajaco prosta.
32
1.3. OBLICZENIA ARYTMETYCZNE
Wezmy teraz troche bardziej skomplikowane wyrazenie.
Przykład 4. Doprowadz wyrazenie do najprostszej postaci.
4 ·
12 +√18
33 − 7
2
3
100
(√2 + 4
)3Zauwazmy, iz w liczniku w nawiasie, znajduje sie wyrazenie z poprzedniego przykładu, które w progra-
mie Sage nazwalismy w1. Mozemy wiec wykorzystac go w definicji nowego wyrazenia co z pewnoscia
uprosci nam zapis.
sage: w2 = 4*w1^2 / (3/100 * (sqrt(2) + 4)^3); w2
wynik:3√2 + 4
Usunmy jeszcze niewymiernosc z mianownika.
sage: w2 = (w2 / (sqrt(2)-4)).simplify_radical(); w2
wynik: − 3
14
Pomnozyłem mianownik wyrazenia w2 przez√2− 4 i uprosciłem poleceniem simplify_radical.
sage: w2 = w2 * (sqrt(2)-4)
wynik: − 3
14
√2 +
6
7
Ostatecznie, całosc pomnozyłem przez√2− 4. Wykonalismy nastepujace operacje:
3√2 + 4
·√2− 4√2− 4
=3√2− 12
2− 16= − 3
14
√2 +
6
7.
Przykład 5. Oblicz wartosc wyrazenia:
sin2(π6
)+ cos
(π4
)sin2
(π3
)+ 1
33
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
sage: w3 = ((sin(pi/6))^2 + cos(pi/4)) / \
((sin(pi/3))^2 + 1)
wynik:2
7
√2 +
1
7
Tym razem widzimy, ze Sage zwrócił nam bardzo ładny wynik, którego z pewnoscia nie musimy
bardziej upraszczac. Zauwazmy, ze przy definiowaniu powyzszego wyrazenia, mianownik przeniosłem
do nowego wiersza. Jesli instrukcja jest bardzo długa, to mozemy ja podzielic znakiem „\” ustawionym
na koncu dzielonej linii. Ewentualnie, gdy wyrazenie jest bardzo skomplikowane, to mozemy podobnie
jak w poprzednim przykładzie, podzielic go na kilka wyrazen przypisanych do róznych zmiennych i
zapisac całosc za ich pomoca. Zbudujmy tym sposobem powyzsze wyrazenie.
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
wynik:2
7
√2 +
1
7
1.3.9 Zadania
1. Oblicz wartosci podanych wyrazen:
(a) 231 · 7878− 1212,
(b)54 + 732
3245− 123,
(c) 31 · 23212,
(d)√151293,
(e) 3
√687 + 211
39304,
(f) log12(288
√3),
(g)4√6561
log√53√25
,
(h)sin(π3
)+ cos
(2π3
)sin2
(π4
)+ cos2(π)
.
2. Wyłacz całosc przed znak pierwiastka.
(a)√20164824181593, (b) 3
√7535933164375, (c) 4
√35113033753497567.
3. Czy wsród siedemdziesieciu pieciu kolejnych liczbach naturalnych wiekszych od 100 jest 14 liczb
pierwszych?
4. Wykaz, ze liczba 327 + 329 jest podzielna przez 30.
34
1.3. OBLICZENIA ARYTMETYCZNE
ODPOWIEDZI
1. (a) 1818606 (b) 3931561
(c) 753732969663574511399999635456 (d) 1860867
(e) 117
· 3
√4494
(f) 52
(g) 274
(h) −√39(√3− 3).
2. (a) 271779√273 (b) 1037575
√7 (c) 2081667
√8103.
3. Tak.
35
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
1.4 Wyrazenia algebraiczne
W poprzednim podrozdziale dowiedzieliscie sie jak wykonywac obliczenia na liczbach. Sage do-
skonale sobie radzi równiez z obliczeniami symbolicznymi, tzn. potrafi wykonywac obliczenia
czy przekształcenia na wyrazeniach algebraicznych. Wiemy, ze wyrazenie algebraiczne podob-
nie jak arytmetyczne składa sie z działan oraz liczb ale wystepuja w nim dodatkowo zmienne.
Zmienne oznaczamy zwykle literami, np. a, b, x, y, itd., ale moga to byc tez wyrazy, np.
wynik, licznik, Pole_kwadratu. Nie mozemy uzywac nazw, które sa poleceniami Sage-a,
np. print, sqrt, simplify, itd.
1.4.1 Deklaracja zmiennych
Przed uzyciem zmiennych nalezy je wczesniej zadeklarowac poleceniem var.
sage: var(’x’, ’a’)
Przypominacie sobie zapewne, ze zmiennych uzywalismy juz wczesniej. Przypisywalismy im wartosci
liczbowe badz wartosci wyrazen arytmetycznych. Jezeli chcemy wykonywac obliczenia symboliczne na
zmiennych, to musimy wczesniej je zadeklarowac.
sage: (z^2+3*z)/z
Natomiast po zadeklarowaniu
sage: var(’z’)
sage: (z^2+3*z)/z
wynik:z2 + 3 z
z
Mozemy to wyrazenie przypisac do innej zmiennej czy tez uproscic, podobnie jak to robilismy z
wyrazeniami arytmetycznymi.
sage: wyr1 = ((z^2+3*z)/z)
sage: wyr1.simplify_radical()
wynik: z + 3
36
1.4. WYRAZENIA ALGEBRAICZNE
Zwrócmy uwage, ze zmiennej wyr1 nie deklarowałem i program nie protestował. Otóz w momencie,
gdy nowo utworzonej zmiennej przypiszemy wyrazenie algebraiczne, tzn. zawierajace inna zmienna juz
zadeklarowana, to ta zmienna staje sie równiez zadeklarowana. Sprawdzimy to za pomoca polecen:
sage: type(z)
wynik: <type ’sage.symbolic.expression.Expression’>
sage: type(wyr1)
wynik: <type ’sage.symbolic.expression.Expression’>
Widzimy, ze zarówno z jak i wyr1 sa wyrazeniami symbolicznymi.
1.4.2 Podstawienia
Do wyrazen algebraicznych mozemy dokonywac podstawien. Słuzy 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 otrzymalismy wartosc wyrazenia dla x = 4. Mozemy tez dokonywac podstawien innych
wyrazen algebraicznych.
sage: wyr3 = wyr2.subs(x = y^2-3)
wynik:(y2 − 3)
2+ 2 y2 − 7
y2 − 2
Czyli kazdy x wystepujacy w poprzednim wyrazeniu został zastapiony przez y2 − 3.
Zobaczmy jak wygladaja nasze wyrazenia po uproszczeniu. W powyzszym przykładzie uzyłem krótszej
nazwy subs polecenia substitute.
sage: wyr2.simplify_radical()
wynik:x2 + 2x− 1
x+ 1
37
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
sage: wyr3.simplify_radical()
wynik:y4 − 4 y2 + 2
y2 − 2
1.4.3 Wyrazenia wymierne
Wyrazenia z ostatnich przykładów okreslamy mianem wymiernych, tzn. sa ułamkami oraz w liczniku i
w mianowniku zawieraja pewne wielomiany. Sage posiada funkcje specjalnie przeznaczone do tego typu
wyrazen. Mozemy przykładowo wyrazenie wymierne rozłozyc na sume ułamków
sage: wyr3.expand_rational()
wynik:y4
y2 − 2− 4 y2
y2 − 2+
2
y2 − 2
albo jeszcze lepiej
sage: wyr3.partial_fraction()
wynik: y2 − 2
y2 − 2− 2
Mamy tez funkcje zwracajace licznik (numerator) albo mianownik (denominator) wyrazenia.
sage: licznik = wyr3.numerator()
wynik: y4 − 4 y2 + 2
sage: mianownik = wyr3.denominator()
wynik: y2 − 2
Rozwiazmy nastepujace zadanie.
Przykład 6. Wykaz, ze róznica kwadratów dwóch kolejnych liczb całkowitych jest liczba
nieparzysta.
Z pomoca Sage-a mozemy powyzsza teze wykazac bardzo szybko poleceniem:
sage: var(’n’)
sage: roznica = (n+1)^2 - n^2; w
wynik: (n+ 1)2 − n2
38
1.4. WYRAZENIA ALGEBRAICZNE
sage: roznica.simplify_radical()
wynik: 2n+ 1
Kazda liczba postaci 2n+1, gdzie n jest całkowita, jest oczywiscie liczba nieparzysta. Wyswietlmy kilka
takich róznic dla n z zakresu od -2 do 6 włacznie.
sage: for x in range(-2, 7):
print( roznica.subs(n=x) )
wynik: −3, −1, 1, 3, 5, 7, 9, 11, 13.
Jak widzimy, sa to liczby nieparzyste.
1.4.4 Zadania
1. Wykaz, ze dla dowolnej liczby naturalnej n, wyrazenie n5 − n jest podzielne przez 30.
2. Oblicz wartosci wyrazen
(a) 2x3 − 3x2 + 5, (b)x− 3x3 + 2
x2 + 1, (c) 5
√37x3 + 5x,
dla x ∈ 1, 2, . . . , 20.
3. Doprowadz podane wyrazenia do najprostszej postaci.
(a)x5 + x3 − 3
√x7
3√x2
, (b)log2 a
3 + log2 a5
4 log2 a− log4 a6, (c)
sin2 α+ tan2 α
1− cos2 α.
4. Dla których liczb naturalnych n ≤ 100 wyrazenien4 − 4n3 + 4n2 + 16n
384jest liczba całkowita?
39
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
ODPOWIEDZI
1. Wsk.: Uzyc 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.
40
1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY
1.5 Równania, nierównosci i ich układy
1.5.1 Rozwiazywanie równan
Rozwiazmy na poczatek bardzo proste równanie liniowe:
2x+ 6 = 0.
W szkole wszystkich uczono, ze wiadome przenosimy na jedna strone, niewiadome na druga albo
mówiono, ze nalezy odjac 6 od obydwu stron równania, czyli
2x = −6.
No i na koniec dzielimy obie strony przez liczbe stojaca przy niewiadomej. Otrzymujemy tym samym
wynik
x = −3.
Opisane kroki mozemy powtórzyc w Sage-u. Najpierw zdefiniujmy sobie równanie.
sage: rownanie = 2*x + 6 == 0
wynik: 2x+ 6 = 0
Odejmijmy 6 od obydwu stron równania.
sage: rownanie.subtract_from_both_sides(6)
wynik: 2x = (−6)
No i na koniec dzielimy obustronnie przez 2.
sage: rownanie.divide_both_sides(2)
wynik: x = (−3)
Jak sie zapewne domyslacie, nie jest to jedyna metoda rozwiazywania tego typu równan przy pomocy
Sage-a. Jednakze chciałem pokazac, ze mozna z pomoca programu wykonywac te same operacje, które
wykonujecie podczas rozwiazywania równan. Najczesciej jednak do rozwiazywania równan stosuje sie
polecenie solve, które poznaliscie juz w poprzednich rozdziałach.
sage: solve(rownanie, x)
41
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
wynik: [x = (−3)]
Aby sprawdzic czy otrzymane rozwiazanie jest poprawne, mozemy podstawic go do naszego równania.
sage: rownanie.substitute(x=-3)
wynik: (−3) = (−3)
czy sprawdzic wartosc logiczna całego wyrazenia:
sage: bool( rownanie.substitute(x=-3) )
wynik: True
Polecenie solve potrafi tez rozwiazywac równania zawierajace parametry. Na przykład zobaczmy jak
wyglada ogólny wzór rozwiazan równania liniowego
ax+ b = 0.
sage: var(’a,b’)
sage: r_lin = a*x + b == 0
sage: solve(r_lin, x)
wynik:
[x = − b
a
]Teraz mozemy rozwiazac dowolne równanie liniowe. Wystarczy podstawic w miejsce parametrów kon-
kretne liczby. Dla równania
3x+ 12 = 0
piszemy:
sage: solve(r_lin.subs(a=3, b=12), x)
wynik: [x = (−4)]
42
1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY
Rozwiazmy teraz troszeczke 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)
wynik:
[x = (−3) , x = 5, x =
(−4
3
), x = 2
]Zauwazmy, ze nie przyrównałem wyrazenia do zera. W takiej sytuacji polecenie solve domyslnie
przyjmuje zero. Zdajemy sobie sprawe, ze tym razem mielibysmy sporo wiecej pracy przy szukaniu
rozwiazan tego równania. Zapewne uczono was, ze najpierw powinnismy lewa strone takiego równania
(wielomian), w miare mozliwosci, rozłozyc na czynniki liniowe. Znamy rózne sposoby, aby tego doko-
nac, np. przez grupowanie wyrazów i wyłaczanie wspólnych czynników badz odgadywanie pierwiastka
i dzielenie przez odpowiedni dwumian, itd. W Sage-u mozemy to zrobic za pomoca polecenia factor.
sage: f = -3*x^5 + 14*x^4 + 33*x^3 - 144*x^2 - 28*x + 240
sage: f.factor()
wynik: −(3x+ 4)(x+ 3)(x− 2)2(x− 5)
Narysujmy teraz wykres tego wielomianu i zaznaczmy wszystkie jego pierwiastki punktami w kolorze
czerwonym.
-4 -2 2 4 6x
-300
-200
-100
100
200
300
400
y
43
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Rysunek ten uzyskamy za pomoca nastepujacych 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.
Mozemy operowac 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:√2x2 + x = 2x3 + sin (x)
sage: r_nie.left()
wynik:√2x2 + x
sage: r_nie.right()
wynik: 2x3 + sin (x)
sage: r_nie/r_nie.right()
wynik:
√2x2 + x
2x3 + sin (x)= 1
Równania mozna tworzyc ze zdefiniowanych wczesniej wyrazen algebraicznych. Jesli mamy np. trzy
wyrazenia
sage: wyr1 = sqrt(2*x+4)
sage: wyr2 = x^2-4; wyr3 = x^3-8
to mozemy utworzyc nastepujace równania:
sage: r_nie1 = wyr1 == wyr2
wynik:√2x+ 4 = x2 − 4
sage: r_nie2 = wyr1 / wyr2 == wyr3
44
1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY
wynik:
√2x+ 4
x2 − 4= x3 − 8
itd...
Mozemy tez wyodrebnic tylko jedna strone 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, ze równanie drugie jest wymierne i w liczniku posiada pierwiastek kwadratowy. Oznacza to,
ze powinnismy zbadac jego dziedzine. Przyrównajmy wiec jego mianownik do zera i rozwiazmy to
równanie.
sage: mianownik = r_nie2.left().denominator()
wynik: x2 − 4
sage: solve(mianownik == 0, x)
wynik: [x = (−2) , x = 2]
Dodatkowo wyrazenie pod pierwiastkiem kwadratowym nie moze byc ujemne. Zatem musimy rozwiazac
nierównosc
2x+ 4 ≥ 0.
Sposoby rozwiazywania nierównosci opisze w kolejnym podrozdziale.
1.5.2 Rozwiazywanie nierównosci
Do rozwiazywania nierównosci mozemy uzyc takze polecenia solve. Zatem aby rozwiazac nierównosc
z poprzedniego przykładu wystarczy wydac polecenie:
sage: solve(2*x+4 >= 0, x)
wynik: [[x ≥ (−2)]]
45
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Otrzymujemy wiec, ze dziedzina wyrazenia√2x+ 4
x2 − 4jest zbiór
〈−2,∞) ∩ R \ −2, 2 = (−2,∞) \ 2.
Rozwiazmy teraz nastepujaca nierównosc:
2x2 + 7x− 11 ≤ −x2 − 2x+ 19.
Piszemy wiec polecenia:
sage: nierownosc = 2*x^2 + 7*x - 11 <= -x^2 - 2*x + 19
sage: solve(nierownosc, x)
wynik: [[x ≥ (−5) , x ≤ 2]]
Otrzymalismy rozwiazanie: x ∈ 〈−5, 2〉. 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)
-7 -6 -5 -4 -3 -2 -1 1 2 3 4x
-10
10
20
y
Widzimy, ze na przedziale 〈−5, 2〉, czerwona krzywa odpowiadajaca lewej stronie nierównosci lezy
ponizej niebieskiej.
46
1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY
1.5.3 Rozwiazywanie układów równan
Funkcja solve mozemy tez rozwiazywac układy równan. Wezmy nastepujacy układ:
3x− 2y = 1,
2x− 5y = −3
Aby znalezc rozwiazanie wystarczy wydac 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 liste równan (objeta nawiasami kwadratowymi), tworzaca dany układ.
Zilustrujmy to rozwiazanie na wykresie. Moglibysmy z kazdego z równan tego układu wyznaczyc
zmienna y i narysowac wykresy powstałych funkcji przy pomocy uzytej wczesniej funkcji plot.
Jednakze nie musimy tego robic, poniewaz Sage posiada specjalna funkcje do ilustrowania równan.
Funkcja ta nazywa sie implicit_plot. Zobaczmy jak sie jej uzywa.
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)
-2 -1 0 1 2-2
-1
0
1
2
Jako pierwszy parametr przekazujemy funkcji implicit_plot równanie, które chcemy wykreslic,
nastepnie podajemy przedziały dla zmiennych x i y.
47
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
Dowiedzielismy sie wczesniej, ze rozwiazaniem układu jest para (1, 1), wiec wziałem takie przedziały
aby zawierały jedynke. Dodatkowo uzyłem funkcji points aby podkreslic, ze otrzymane rozwiazanie
istotnie lezy w punkcie przeciecia sie tych prostych.
Rozwiazmy inny przykład, troche bardziej złozony.
y −√3x = 2
√3,
x2 + y2 = 4.
sage: var(’x,y’)
sage: solve([y-sqrt(3)*x==2*sqrt(3), x^2+y^2==4], x,y)
wynik:[[x = (−1) , y =
√3], [x = (−2) , y = 0]
]Zwrócmy uwage, ze w tym przypadku nie udałoby sie zilustrowac drugiego równania funkcja plot,
poniewaz nie mozna w sposób jednoznaczny wyznaczyc z tego równania zmiennej y. Widzimy, ze
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)
-3 -2 -1 0 1 2 3-3
-2
-1
0
1
2
3
48
1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY
1.5.4 Rozwiazywanie układów nierównosci
Jak widzimy funkcja solve radzi sobie z równaniami, nierównosciami oraz układami równan. Okazuje
sie, ze mozemy tez przy jej pomocy rozwiazywac układy nierównosci. Rozwiazmy nastepujacy układ
równan.
y < x2,
y > x.
sage: solve([y<x^2, y>x],x,y)
wynik:[[x < y, x2 − y > 0
]]Widzimy, ze dostalismy praktycznie nasze nierównosci nieznacznie przekształcone. Dzieje sie tak,
poniewaz rozwiazaniami układów nierównosci sa zwykle pewne nieskonczone zbiory, które opisuje sie
własnie nierównosciami. Mysle, ze duzo wiecej 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)
-2 -1 1 2x
-2
-1
1
2
y
Jak widzimy, do narysowania zbioru rozwiazan układu nierównosci uzyłem funkcji region_plot.
Jako pierwszy parametr podajemy liste nierównosci, nastepnie przedziały w jakich maja byc wyszukane
rozwiazania. Dodatkowo opcjami bordercol oraz incol mozna sterowac kolorami obramowania
oraz wypełnienia otrzymanego obszaru.
49
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
W przypadku układu nierównosci z jedna niewiadoma, wynik funkcji solve jest zupełnie wystarcza-
jacy. Rozwiazmy np. taki układ: (x− 1)2 < x2 + 3,
3− 2x
5>= 6− 4x− 2
3.
sage: solve([(x-1)^2<x^2+3, (3-2*x)/5<6-(4*x-2)/3], x)
wynik:
[[(−1) < x, x <
(13
2
)]]Rozwiazmy teraz nastepujace zadanie:
Przykład 7. Podaj wszystkie liczby całkowite, które spełniaja układ nierównosci:2(5x− 2) < 3(4x− 3) + 14,
4(x+ 2) < 3x+ 21.
Znajdzmy 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)
wynik:
[[(−9
2
)< x, x < 13
]]Teraz mozemy wyswietlic wszystkie liczby całkowite spełniajace otrzymane nierównosci.
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
Uzyłem funkcji ceil do znalezienia liczby całkowitej nie wiekszej od −9
2= −4.5 czyli min_x = -4.
50
1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY
1.5.5 Zadania
1. Rozwiaz równania:
(a) x+ 2 = 3x− 5,
(b) x2 + 3x− 1 = 0,
(c) 3√2x2 − 4x− 4 = 0,
(d) log3(x+ 1) = 27,
(e) logx 125 = 5,
(f) 3x(x2 − 4) = 0,
(g)x+ 2
x− 1=
3
2x− 5,
(h) (2x− 1)(x+ 2) = (x− 1)2.
2. Rozwiaz nierównosci:
(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
x+ 1> 0,
(f)4x− 5
2x− 1≤ 3x+ 2
2x− 5.
3. Rozwiaz układy równan i zilustruj rozwiazanie na wykresie.
(a)
5x+ 2y = 4
x− 4y = −2,
(b)
x− 2y + 3z = 6
−2x− 4y − 3z = 0
x+ y − z = 3,
(c)
x2 + y = 5
√x+ 4y = 0,
(d)
x2 + 2x+ y2 − 4x = 20
2x− y = 0.
4. Rozwiaz układy nierównosci graficznie.
(a)
x+ 2y ≤ 2
x+ 3y ≥ −2,
(b)
3x2 − y < 6
−2x− y ≥ 0
(c)
2x2 − y ≥ 6
, 0.5x− y > −6,
(d)
√x− y > 0,
y > x2.
51
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
5. Rozwiaz analitycznie układy nierównosci.
(a)
x+ 2
3x− 1> 0
x+ 3 ≥ −2,
(b)
x2 − 4x ≥ 0
x− 1
2 + x< 3.
ODPOWIEDZI
1. (a)[x =
(72
)](b)[x = − 1
2
√13− 3
2, x = 1
2
√13− 3
2
](c)[x = −
√3 + 1, x =
√3 + 1
](d) [x = 7625597484986] (e)
[x = e(
15 log(125))
](f) [x = (−2) , x = 2]
(g)[x = − 3
2
√2 + 1, x = 3
2
√2 + 1
](h)[x = − 1
2
√37− 5
2, x = 1
2
√37− 5
2
]
2. (a)[[x ≤ − 1
6
√37 + 5
6
],[x ≥ 1
6
√37 + 5
6
]](b)[[x ≤ − 1
2
√5− 1
2
],[x ≥ 1
2
√5− 1
2
]](c)[[x > (−2) , x <
(− 7
8
)]](d) [[x > 2.26322664925]] (e) [[x > 4]]
(f)[[x >
(12
), x ≤ − 1
4
√745 + 31
4
],[x >
(52
), x ≤ 1
4
√745 + 31
4
]]
3. (a)[[x =
(611
), y =
(711
)]](b)[[x =
(9623
), y =
(− 39
23
), z =
(− 12
23
)]](c) [[x = 2.31964624131, y = (−0.380759651308)]]
(d)[[x = − 1
5
√101 + 1
5, y = −2
5
√101 + 2
5
],[x = 1
5
√101 + 1
5, y = 2
5
√101 + 2
5
]]
-2 -1 0 1 2-2
-1
0
1
2
(a)
52
1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY
-4 -3 -2 -1 0 1 2 3 4
-4
-2
0
2
4
6
(c)
-4 -2 0 2 4 6
-4
-2
0
2
4
6
(d)
4.
-2 2 4 6 8 10
-4
-3
-2
-1
1
2 (a)-2 -1 1 2
-6
-4
-2
2
(b)
-15 -10 -5 5 10
-5
5
10
(c)
0.2 0.4 0.6 0.8 1
0.2
0.4
0.6
0.8
1 (d)
5. (a)[[(−5) < x, x < (−2)] ,
[(13
)< x
], [x = (−5)]
](b)[[(−2) < x, x < 0] , [4 < x] ,
[x <
(− 7
2
)], [x = 0] , [x = 4]
].
53
ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE
54
Rozdział 2
Funkcje
2.1 Podstawowe wiadomosci o funkcjach
W rozdziale tym chciałbym omówic pewne zagadnienia zwiazane z pojeciem funkcji. Funkcja jest jed-
nym z wazniejszych pojec współczesnej matematyki. Po raz pierwszy tego terminu uzył G. W.Leibniz
(1646-1716) 1, jednak nie podał on dokładnej definicji. Zrobił to w 1718 roku J. Bernoulli (1667-1748).
Oczywiscie nie znaczy to, ze matematycy dopiero w XVII wieku zaczeli stosowac funkcje, tzn. do-
strzegac zaleznosci miedzy róznymi wielkosciami i je badac. Przeciez bez znajomosci pojecia funkcji
jestesmy w stanie stwierdzic, ze pole koła zalezy od długosci jego promienia, ze przebyta droga przez
dany obiekt zalezy od czasu poruszania sie tego obiektu czy tez wykonujac jakiekolwiek obliczenia na
liczbach wiemy, ze wynik bedzie zalezał od tych liczb. Do tych wszystkich stwierdzen nie potrzebujemy
definicji funkcji. Jednakze kiedy badamy wielkosci powiazane ze soba pewna relacja, to scisła definicja
tej relacji w znaczny sposób ułatwia badanie tego zwiazku. Definicja tych zwiazków jest zwykle pewna
funkcja.
Przyjrzyjmy sie nastepujacemu zadaniu.
Przykład 8. Wykaz, ze róznica miedzy szescianem dowolnej liczby naturalnej i ta liczba jest
podzielna przez 6.
Mowa jest tu o pewnym zwiazku miedzy liczbami, a dokładniej liczbami naturalnymi i pewna grupa liczb
naturalnych podzielnych przez 6. Jesli wykazemy, ze własnosc te posiada piec, dziesiec czy moze nawet
tysiac poczatkowych liczb naturalnych, to i tak nie bedzie to dowodem tezy postawionej w zadaniu.
Zwykle jednak rozwiazujac zadania zwiazane z liczbami naturalnymi czy całkowitymi przeprowadzamy
test dla kilku przykładowych liczb, co moze dac nam pewne wskazówki do rozwiazania badz upewnic,
1G. W. Leibniz, Methodus tangentium inversa, seu de functionibus, 1673.
55
ROZDZIAŁ 2. FUNKCJE
ze zadanie rzeczywiscie jest dobrze sformułowane. Zobaczmy wiec jak wyglada dziesiec poczatkowych
róznic. Pomoge sobie programem Sage.
sage: var(’n’)
sage: liczby_naturalne = range(1,11)
sage: for n in liczby_naturalne:
sage: print n^3-n, "= 6 *", (n^3-n)/6
W wyniku tych polecen zobaczymy liste wartosci wyrazenia n3−n dla n ∈ 〈1, 11〉∩N oraz ich rozkład
na iloczyn liczby 6 i pewnej liczby całkowitej.
Poleceniem var(’n’) utworzylismy zmienna o na-
zwie n. Nastepnie zdefiniowalismy liste liczb natu-
ralnych z zakresu od 1 do 10 włacznie poleceniem
range(1,11). Widzimy wiec, ze druga z liczb po-
winna byc o jeden wieksza od wymaganego zakresu. Na
koniec instrukcja for n in liczby_naturalne
przechodzimy zmienna n po wczesniej zdefiniowanej
liscie liczb i wyswietlamy dla kazdej z nich wyrazenie
n^3-n, "= 6 *", (n^3-n)/6. Wiecej na temat
definiowania wyrazen arytmetycznych i geometrycznych
dowiecie sie w rozdziale 4.
Aby wykazac, ze własnosc te posiadaja wszystkie liczby naturalne, mozemy posłuzyc sie ogólnym
wzorem tejze róznicy, tzn. n3 − n gdzie n oznacza pewna liczbe naturalna. Zauwazmy wtedy, ze mozna
ja przedstawic w postaci iloczynu trzech kolejnych liczb naturalnych,
n3 − n = n(n2 − 1) = n(n+ 1)(n− 1) = (n− 1)n(n+ 1).
Oznacza to, ze wsród tych liczb przynajmniej jedna jest parzysta oraz jedna podzielna przez 3. Jest to
wystarczajacy dowód na to, ze liczba n3 − n jest podzielna przez 6.
Powyzsze uzasadnienie jest wystarczajace, poniewaz zdefiniowalismy relacje wiazaca kazda liczbe na-
turalna n z dokładnie jedna liczba postaci n3 − n.
56
2.1. PODSTAWOWE WIADOMOSCI O FUNKCJACH
2.1.1 Definicja funkcji, dziedzina, przeciwdziedzina i zbiór wartosci
Relacje zdefiniowane na elementach dwóch zbiorów nazywamy funkcjami. Precyzyjniej, jesli mamy
dwa zbiory X i Y , to relacje, która kazdemu 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 nadawac nazwy, np. f, g, h, itp. Zapis f : X → Y oznacza funkcje o nazwie
f okreslona na zbiorze X o wartosciach w zbiorze Y . Upraszcza on wiele sformułowan, np. zamiast
mówic, ze funkcja f dla argumentu x przyjmuje wartosc y, mozemy zapisac krótko: f(x) = y.
Poza dziedzina i przeciwdziedzina jest jeszcze jeden zbiór scisle zwiazany z dana funkcja f , który
nazywamy zbiorem wartosci funkcji. Zbiór ten zwykle oznaczamy symbolem Wf i definiujemy go
nastepujaco:
Wf =f(x) : dla wszystkich x ∈ X
.
Mozemy powiedziec, ze jest to podzbiór przeciwdziedziny funkcji składajacy sie tylko z tych wartosci,
które zostały przypisane pewnym argumentom. Definicja funkcji nie wymaga, aby kazdemu elementowi
przeciwdziedziny cos przyporzadkowac.
Funkcje z naszego przykładu moglibysmy zdefiniowac nastepujaco:
f(n) = n3 − n,
gdzie n jest dowolna liczba naturalna. Z okreslenia tej funkcji wynika, ze jej dziedzina jest zbiór
liczb naturalnych, tj. Df = N, natomiast przeciwdziedzina mógłby byc zbiór liczb naturalnych lub
wymiernych czy tez zbiór liczb rzeczywistych. Wynika to z faktu, ze wartosci tej funkcji zawsze
sa liczbami naturalnymi czyli naleza do wszystkich wymienionych zbiorów. Aby wyznaczyc zbiór
wartosci funkcji musimy znalezc zbiór optymalny w takim sensie, ze kazdej liczbie z tego zbioru bedzie
odpowiadac pewien argument (w naszym przypadku pewna liczba naturalna). Mozemy go zdefiniowac
nastepujaco:
Wf =n3 − n : dla wszystkich n ∈ N
= 0, 6, 24, 60, 120, 210, . . ..
57
ROZDZIAŁ 2. FUNKCJE
2.1.2 Wykres funkcji
Jak wiemy, funkcje liczbowe daja sie ilustrowac za pomoca wykresu. Z wykresu mozemy łatwo odczytac
wiele interesujacych nas własnosci funkcji. Gdy mamy funkcje dana wzorem y = f(x), wtedy jej wykres
jest zbiorem punktów na płaszczyznie, postaci
(x, f(x)
).
Mozna tez powiedziec, ze wykres funkcji jest zbiorem punktów, które sa rozwiazaniami równania
y = f(x).
Na przykład funkcje liniowa f(x) = 23x + 1 mozemy traktowac jako równanie dwóch zmiennych x i y
postaci y = 23x+ 1. Zbiorem rozwiazan tego równania sa punkty lezace na nastepujacej prostej:
-4 -2 2 4x
-2
-1
1
2
3
4
y
Powyzszy wykres uzyskałem przy pomocy polecen:
sage: var(’x’)
sage: f(x) = (2/3)*x+1
sage: plot(f, x, -5, 5)
Jak widzimy, program Sage pozwala w bardzo
podobny sposób definiowac funkcje jak to robimy
w matematyce. Najpierw zdefiniowałem nazwe
zmiennej poleceniem var(’x’) (nazwa moze
byc dowolna litera), a nastepnie okresliłem funk-
cje wzorem: f(x)= (2/3)* x + 1.
We wzorze funkcji mozemy wykorzystywac wszystkie znane operatory arytmetyczne, np.
+, -, *, / gdzie symbol "*" oznacza mnozenie oraz "/" dzielenie. Mamy do dyspozycji tez
wiele innych znanych operatorów, np. potegowanie, logarytmy, itd. Na koniec wydałem polecenie
plot(f, x, -5, 5), dzieki któremu program narysował wykres funkcji f dla x ∈ 〈−5, 5〉.
58
2.1. PODSTAWOWE WIADOMOSCI O FUNKCJACH
Zwrócmy uwage, ze nie kazde równanie, w którym wystepuja dwie zmienne x i y opisuje pewna funkcje.
Przykładowo zbiór punktów spełniajacych równanie
x3 − y2 + xy = 0,
tworzy nastepujaca krzywa:
-0.2 -0.1 0.1 0.2
-0.1
0.1
0.2
Widzimy, ze ta krzywa nie jest wykresem zadnej funkcji jednej zmiennej, gdyz w przeciwnym przypadku
jednemu argumentowi przyporzadkowane byłyby dwie wartosci. Jesli byłby to wykres funkcji, to kazda
pionowa prosta mogłaby go przeciac w co najwyzej jednym punkcie.
Wykresy krzywych, które nie sa funkcjami mozemy uzyskac za pomoca funkcji parametric_plot.
Uzywamy jej podobnie jak funkcji plot, jednakze rysowana krzywa musi byc zdefiniowana parame-
trycznie.
sage: var(’x’)
sage: parametric_plot( (t^2-t, t^3-t^2), (t, 0, 1.2))
Kazdy punkt (x, y) spełniajacy równanie x3 − y2 + xy = 0 jest postaci(t2 − t, t3 − t2
). Oznacza to, zex = t2 − t
y = t3 − t2 ⇒ y = t · (t2 − t) = t · x.
Wstawiajac t = yx
do pierwszego równania otrzymujemy
x =y2
x2− y
x⇒ x3 = y2 − xy.
59
ROZDZIAŁ 2. FUNKCJE
Po przeniesieniu wszystkiego na lewa strone otrzymujemy wyjsciowe równanie
x3 − y2 + xy = 0.
Wrócmy na chwile do naszego poprzedniego przykładu. Powiedzielismy, ze dziedzina funkcji f(n) =
n3 − n jest zbiór liczb naturalnych. Zatem wykres tej funkcji składa sie z pewnych punktów na płasz-
czyznie. Kilka poczatkowych punktów wykresu tej funkcji wyglada nastepujaco:
2 4 6 8 100
200
400
600
800
1000
Powyzszy 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 liste punktów. Listy w programie Sage definiujemy zapisujac
ich elementy w nawiasach kwadratowych, kazdy oddzielajac przecinkiem, np. [1,2,3,4,5]. W
naszym przykładzie została utworzona lista z nastepujaca zawartoscia
[(1,0), (2,6),... , (10, 10^3-10)]
Utworzylismy 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.
60
2.1. PODSTAWOWE WIADOMOSCI O FUNKCJACH
2.1.3 Okreslanie dziedziny funkcji
Bardzo czesto autorzy definicji funkcji podaja tylko wzór postaci y = f(x). Wtedy musimy sami okreslic
dziedzine. Zwykle przyjmujemy najwiekszy zbiór na którym funkcja moze byc okreslona.
Gdyby powyzsza funkcja była zdefiniowana wzorem
f(x) = x3 − x
bez zadnych dodatkowych załozen, to za dziedzine przyjelibysmy cały zbiór liczb rzeczywistych, tzn.
Df = R. Mozemy to zrobic, bowiem kazda liczbe rzeczywista mozna podniesc do szescianu, czy tez
kazde dwie liczby rzeczywiste mozemy od siebie odjac. Spójrzmy jak wygladałby wykres naszej funkcji
w przedziale (−5, 5).
-4 -2 2 4x
-100
-50
50
100
y
Rysujac wykresy funkcji w programie Sage mamy do dyspozycji wiele ciekawych opcji. Mozemy
sterowac wartosciami najmniejszymi ymin oraz najwiekszymi ymax, opcja gridlines=True po-
kazemy siatke, czy tez opcja axes_labels=[’x’,’y’] dopisze do osi odpowiednie etykiety. Mo-
zemy zmienic kolor, np. color=’red’ lub grubosc linii thickness=2. Mamy jeszcze wiele in-
nych opcji do dyspozycji. Wydajac polecenie plot? zobaczycie opis ich wszystkich.
Zastosujmy kilka z wymienionych wyzej 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)
61
ROZDZIAŁ 2. FUNKCJE
-4 -2 2 4x
-20
-10
10
20
y
f(x) =x3 −x
Przy okreslaniu dziedziny funkcji zwykle musimy rozwiazac pewne równanie czy nierównosc. Okreslmy
dziedzine nastepujacej funkcji
f(x) =
√3x2 + x
x2 + 3x− 4.
Wiemy, ze pod pierwiastkiem kwadratowym nie moze byc liczb ujemnych, wiec:
sage: var(’x’)
sage: solve(3*x^2+x>=0, x)
wynik:
[[x ≤
(−1
3
)], [x ≥ 0]
]Dodatkowo mianownik musi byc rózny od zera, zatem:
sage: solve(x^2+3*x-4==0, x)
wynik: [x = 1, x = (−4)]
Otrzymujemy wiec, ze dziedzina funkcji jest zbiór
Df =
(−∞,
1
3
⟩∪ 〈0,∞) \ −4, 1.
62
2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI
2.2 Najczesciej zadawane pytania dotyczace funkcji
Rozpatrzmy funkcje zdefiniowana wzorem
f(x) =−4x2 − 4x+ 11
x2 + 2x− 3.
Jak widzimy, jest to funkcja wymierna, gdyz mamy ułamek oraz w liczniku i mianowniku znajduje sie
pewien wielomian. Najwiekszy zbiór na którym mozemy ja okreslic jest postaci
Df = R \ −3, 1.
Nie mozemy dołaczyc liczb −3 i 1, gdyz wtedy mianownik byłby równy zero, a wiemy przeciez, ze
dzielenie przez zero jest niewykonalne. Punkty, w których mianownik sie zeruje znajdziemy poleceniem
sage: solve(x^2+2*x-3, x)
wynik: [x = (−3) , x = 1]
Jesli szkicujemy wykres funkcji w przedziale zawierajacym punkty wykluczone z dziedziny, to powin-
nismy poinformowac o tych punktach instrukcje plot. Słuzy 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)
-6 -4 -2 2 4x
-10
-5
5
10
y
63
ROZDZIAŁ 2. FUNKCJE
Opcja exclude=[-3,1] pominelismy argumenty, dla których mianownik sie zeruje. Mozemy do-
datkowo uzyc opcji detect_poles="show", która dorysuje w pominietych punktach asymptoty
pionowe czyli proste, do których wykres funkcji zbliza sie dowolnie blisko lecz nigdy ich nie przecina.
-6 -4 -2 2 4x
-20
-15
-10
-5
5
10
15
y
Z wykresu funkcji mozemy odczytac wiekszosc jej istotnych własnosci. Z powyzszego wykresu, gdyby-
smy nawet nie znali wzoru funkcji, potrafilibysmy odpowiedziec na nastepujace pytania:
1. Jaka jest dziedzina funkcji?
Powyzszy rysunek przedstawia wykres danej funkcji na stosunkowo małym przedziale (−7, 4).
Mozemy jednak przyjac, ze Df = R \ −3, 1, gdyz szkicujac wykres funkcji zawsze staramy sie
pokazac jej najwazniejsze własnosci, a takimi z pewnoscia sa punkty, w których funkcja nie jest
okreslona. Mozemy wiec przyjac, ze poza tym przedziałem funkcja zachowuje sie juz „stabilnie”,
tzn. nie zmienia swoich istotnych własnosci. Zakładamy wiec, ze jest okreslona w kazdym punkcie
zbioru (−∞,−7〉 ∪ 〈4,∞).
2. Jaki jest zbiór wartosci funkcji?
Tu mysle, ze kazdy z czytelników odpowie natychmiast, ze Wf = R.
3. Zbadaj róznowartosciowosc funkcji.
Funkcja przedstawiona na wykresie nie moze byc róznowartosciowa,2 poniewaz dowolna linia
pozioma moze przeciac wykres funkcji róznowartosciowej w co najwyzej jednym punkcie.
2Funkcja jest róznowartosciowa, jesli dla kazdych dwóch róznych argumentów przyjmuje dwie rózne wartosci.
64
2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI
4. Zbadaj monotonicznosc funkcji.
Funkcja jest malejaca w przedziałach
(−∞,−3), (−3,−1) oraz , (1,∞).
Zwrócmy uwage, ze błedne byłoby stwierdzenie: funkcja jest malejaca na zbiorze
(−∞,−3) ∪ (−3,−1) ∪ (1,∞) = R \ −3, 1.
Gdybysmy wzieli 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 wartosci funkcji wzrastaja, tzn. spełniaja nierównosc
f(x1) < f(x2). Ale taka własnosc (wraz ze wzrostem argumentów wzrastaja wartosci) posiadaja
tylko funkcje rosnace.3
Aby odpowiadac na pytania bardziej szczegółowe, zwykle musimy znac wzór funkcji. Czasami na
podstawie wykresu jestesmy w stanie go znalezc. W przypadku gdy wiemy jakiego rodzaju jest ta
funkcja, np. liniowa, kwadratowa, wykładnicza, itd., zadanie jest dosc łatwe. W bardziej ogólnych
sytuacjach posługujemy sie specjalnymi algorytmami do poszukiwania wzorów funkcji. Jesli kogos
interesuje to zagadnienie, to zachecam do poczytania sobie aproksymacji badz interpolacji. Program
Sage ma kilka takich algorytmów zaimplementowanych. W dalszej czesci tego rozdziału bedziecie mieli
okazje poznac jedna z nich.
Dodajmy wiec do listy powyzszych pytan jeszcze kilka, ale takich gdzie musimy skorzystac ze wzoru
naszej funkcji, tzn.
f(x) =−4x2 − 4x+ 11
x2 + 2x− 3.
5. Wyznacz miejsca zerowe funkcji.
Wiecie zapewne, ze miejsca zerowe leza w punktach przeciecia wykresu funkcji z osia Ox. Mozna
byłoby próbowac okreslic ich pozycje z wykresu. Przygladajac sie jeszcze raz wykresowi tej
funkcji moge stwierdzic, ze miejsca zerowe znajduja sie w poblizu punktów −2 18
oraz 58. Jeszcze
raz podkreslam, ze w poblizu a nie dokładnie. Aby miec pewnosc jakie to sa punkty musimy
3Funkcja f jest rosnaca, jesli dla x1, x2 ∈ Df , takich ze x1 < x2 zachodzi nierównosc f(x1) < f(x2), natomiastfunkcja f jest malejaca, jesli dla x1, x2 ∈ Df , takich ze x1 < x2 zachodzi nierównosc f(x1) > f(x2).
65
ROZDZIAŁ 2. FUNKCJE
rozwiazac równanie f(x) = 0, tzn.
−4x2 − 4x+ 11
x2 + 2x− 3= 0.
W programie Sage mozemy je rozwiazac poznanym juz poleceniem solve.
sage: solve(f, x)
wynik:
[x = −
√3− 1
2, x =
√3− 1
2
]Widzimy wiec, ze nasza wczesniejsza próba odgadniecia miejsc zerowych była obarczona błedem.
Gdybysmy chcieli to równanie rozwiazac recznie, to przyrównalibysmy licznik do zera (wiadomo,
ze mianownik nigdy nie moze byc zerem). Czyli rozwiazalibysmy nastepujace równanie kwadra-
towe:
−4x2 − 4x+ 11 = 0.
Znajac wzory na wyróznik trójmianu kwadratowego (potocznie zwany ”delta”) oraz wzory na jego
pierwiastki obliczymy miejsca zerowe. Skorzystajmy ponownie z programu Sage i wykonajmy te
obliczenia. Mozemy nawet zdefiniowac 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 )
wynik:
[x = −b+
√b2 − 4 ac
2 a, x = −b−
√b2 − 4 ac
2 a
]Otrzymalismy 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)
wynik:
[x = −
√3− 1
2, x =
√3− 1
2
]Oczywiscie w obydwu przypadkach otrzymalismy to samo. Zachecam do samodzielnego spraw-
dzenia tych wyników.
Uzylismy funkcji subs aby podstawic w równaniu trojmian w miejsca odpowiednich parametrów
liczby.
66
2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI
6. Jaka wartosc posiada funkcja dla argumentu x = −2?
Obliczanie wartosci funkcji dla danego argumentu jest chyba najbardziej naturalna operacja wy-
konywana podczas pracy z funkcjami. Aby udzielic odpowiedzi na to pytanie, wystarczy obliczyc
f(−2) =−4 · (−2)2 − 4 · (−2) + 11
(−2 + 3)(−2− 1)= −1.
Program Sage poda nam ten wynik po wykonaniu polecenia
sage: f(-2)
wynik: −1
7. Dla jakich argumentów funkcja przyjmuje wartosc y = 5?
Bardzo łatwo jest obliczyc wartosc funkcji dla danego argumentu, jak to widzielismy w poprzed-
nim punkcie. W tym zadaniu odwracamy sytuacje, majac wartosc funkcji, pytamy dla jakich argu-
mentów funkcja ja przyjmuje. Musimy wiec rozwiazac równanie
−4x2 − 4x+ 11
x2 + 2x− 3= 5.
Mozemy takie równania rozwiazywac geometrycznie, pytajac w jakich punktach prosta o równa-
niu y = 5 przetnie wykres naszej funkcji. Przyjrzyjmy sie ich wykresom.
-6 -4 -2 2 4x
-10
-5
5
10
y
67
ROZDZIAŁ 2. FUNKCJE
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ółrzednych. Aby tego dokonac
wystarczy dodac do siebie dwa wykresy operatorem +.
Widzimy, ze istnieja dwa argumenty, w których funkcja przyjmuje wartosc 5, jednak trudno jest z
wykresu okreslic ich dokładne połozenie. Znajdzmy je rozwiazujac równanie w tradycyjny sposób.
W pierwszym kroku mozna pozbyc sie kreski ułamkowej mnozac obustronnie równanie przez cały
mianownik, otrzymujac
−4x2 − 4x+ 11 = 5(x+ 3)(x− 1).
Wymnazajac prawa strone i przenoszac wszystko na lewa otrzymamy do rozwiazania równanie
kwadratowe
9x2 + 14x− 26 = 0.
Obliczamy wiec delte ∆ = 1132,√∆ = 2
√283 oraz pierwiastki
x1 =−14− 2
√283
18=
−7−√283
9, x2 =
−7 +√283
9.
Chciałbym zwrócic uwage jeszcze na powyzszy pierwiastek z delty. Pamietamy jak uczono nas,
ze zawsze o ile to mozliwe wyłaczamy całosci przed znak pierwiastka. Aby to zrobic najlepiej
dobrze jest znac rozkład kanoniczny liczby spod pierwiastka.
Operacje te mozemy wykonac 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 mozemy uzyskac natychmiast poleceniem solve.
sage: solve(f(x)==5, x)
wynik:
[x = −1
9
√283− 7
9, x =
1
9
√283− 7
9
]
68
2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI
8. Dla jakich argumentów funkcja przyjmuje wartosci niedodatnie?
Pytanie to jest równowazne nastepujacemu: rozwiazac nierównosc f(x) ≤ 0, tzn.
−4x2 − 4x+ 11
(x+ 3)(x− 1)≤ 0.
Zapisałem mianownik w postaci iloczynowej4, gdyz znam jego miejsca zerowe −3, 1.
Rozwiazujac nierównosci wymierne zwykle zastepujemy kreske ułamkowa iloczynem, gdyz
licznik
mianownik≤ 0 tylko wtedy, gdy licznik ·mianownik ≤ 0.
Oczywiscie pamietamy o dziedzinie wyrazenia wymiernego, tzn. z rozwiazania nierównosci z pra-
wej strony nalezy wykluczyc te, dla których mianownik sie zeruje. A wiec mamy do rozwiazania
nierównosc
(−4x2 − 4x+ 11) · (x+ 3)(x− 1) ≤ 0,
gdzie x 6= −3 i x 6= 1. Poniewaz znamy juz miejsca zerowe funkcji, czyli miejsca zerowe licznika,
mozemy trójmian z lewego nawiasu równiez zapisac w postaci iloczynowej
−4(x+√3 + 0.5)(x−
√3 + 0.5) · (x+ 3)(x− 1) ≤ 0.
Nierównosci wielomianowe najprosciej rozwiazuje sie geometrycznie, metoda tzw. „wezyka”.
Polega ona na naszkicowaniu wezyka, który przechodzi od prawej strony osi liczbowej do lewej,
przecinajac ja w miejscach gdzie leza pierwiastki wielomianu o krotnosci nieparzystej, badz odbija
sie od niej dla pierwiastków o krotnosci parzystej. Start wezyka zalezy od znaku współczynnika
stojacego przy najwyzszej potedze 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.0x4 − 12.0x3 + 15.0x2 + 34.0x− 33.0
Skoro −4 < 0, wiec wezyk startuje od dołu (w przeciwnym przypadku startowałby z góry).
4Jesli ∆ > 0 i x1, x2 sa pierwiastkami trójmianu ax2+bx+c, to mozemy go zapisac w postaci iloczynowej a(x−x1)(x−x2).
69
ROZDZIAŁ 2. FUNKCJE
Wykonajmy szkic wezyka 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)
-3 -2 -1 1x
-40
-30
-20
-10
y
Widzimy, ze wezyk przecina os Ox w kazdym punkcie, gdyz wszystkie pierwiastki sa jednokrotne.
Aby podac rozwiazanie naszej nierównosci wystarczy wskazac przedziały, w których wykres
(wezyk) lezy pod osia Ox. Dla ułatwienia tego zadania, uzyłem opcji fill=0, która koloruje
pole miedzy wykresem funkcji a osia Ox. Wartosc 0 oznacza prosta o równaniu f(x) = 0 czyli os
Ox. Otrzymujemy odpowiedz
x ∈ (−∞,−3) ∪ 〈−√3− 0.5, 1) ∪ 〈
√3− 0.5,∞).
Zwrócmy uwage, ze prawy kraniec pierwszego i drugiego przedziału jest otwarty, gdyz −3 i 1 nie
naleza do dziedziny funkcji.
9. Okresl zbiór wartosci funkcji na przedziale 〈−1, 1).
Wiemy, ze nasza funkcja w przedziale 〈−1, 1) jest malejaca, zatem w lewym krancu tego prze-
działu musi byc wartosc najwieksza, natomiast w prawym wartosc najmniejsza. Poniewaz 1 6∈ Df ,
a wartosci funkcji w poblizu jedynki z lewej strony robia sie coraz mniejsze, wiec najmniejsza
wartosc funkcji nie istnieje i przyjmujemy wtedy, ze jest to −∞. Wartosc najwieksza natomiast,
to f(−1) = − 114
. Zatem na przedziale 〈−1, 1) funkcja f przyjmuje wartosci ze zbioru:
Wf =
(−∞,−11
4
⟩.
70
2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI
2.2.1 Zbiór wartosci funkcji kwadratowej
W arkuszach maturalnych bardzo czesto pojawia sie zadanie podobne do tego z punktu 9 ale dotyczy
ono zwykle funkcji kwadratowej. Ogólna postac takiego zadania wyglada nastepujaco:
Przykład 9. Okresl zbiór wartosci funkcji f(x) = ax2 + bx+ c na przedziale 〈x1, x2〉.
Okreslenie zbioru wartosci funkcji kwadratowej na danym przedziale powinnismy zaczac od obliczenia
wartosci funkcji na krancach danego przedziału oraz znalezieniu wierzchołka paraboli. Zwykle wierz-
chołek oznaczamy jako pare (p, q). Nastepnie mamy dwie mozliwosci:
. p nalezy do przedziału 〈x1, x2〉 – wówczas wartoscia najmniejsza funkcji jest najmniejsza z liczb
f(x1), f(x2) i q, natomiast wartosc najwieksza funkcji jest najwieksza z nich.
. p nie nalezy do przedziału 〈x1, x2〉 – wtedy wartoscia najmniejsza funkcji jest mniejsza z liczb
f(x1), f(x2), natomiast wartosc najwieksza jest liczba wieksza z tych dwóch.
Zilustrujmy te metode na konkretnym przykładzie.
Przykład 10. Okresl zbiór wartosci funkcji f(x) = −x2 + 4x+ 5 na przedziale 〈−2, 4〉.
Obliczamy
f(−2) = −(−2)2 + 4 · (−2) + 5 = −7; f(4) = −42 + 4 · 4 + 5 = 5,
oraz
p = − b
2a= − 4
2 · (−1)= 2.
Wtedy q = f(p) = −22 + 4 · 2 + 5 = 9. Mozna posłuzyc sie równiez wzorem q = − ∆4a
.
Poniewaz p = 2 ∈ 〈−2, 4〉, wiec wyznaczamy najwieksza i najmniejsza liczbe ze zbioru −7, 5, 9, co
daje odpowiedz: Wf = 〈−7, 9〉.
Rozwiazmy 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)
71
ROZDZIAŁ 2. FUNKCJE
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 okreslic zbiór wartosci dowolnej funkcji kwadratowej w danym przedziale, wystarczy zmienic
wartosci kranców przedziału lk, pk oraz podac odpowiednie współczynniki a, b, c.
Program obliczy wartosci współczynników p i q, po czym instrukcja if p > lk and p < pk:
sprawdzi czy p ∈ (lk, pk). Jesli tak, to wartosci 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 〈−2, 4〉 z zaznaczonym wierzchołkiem oraz
punktem (−2,−7).
-3 -2 -1 1 2 3 4
-7-6-5-4-3-2-1
123456789
72
2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI
2.2.2 Porównywanie ze soba dwóch funkcji.
Czesto sie zdarza, ze badamy kilka funkcji i interesuja nas relacje jakie miedzy nimi zachodza. Na przy-
kład, moze nas interesowac dla jakich argumentów jedna funkcja przyjmuje wartosci wieksze niz druga
albo czy ich wykresy maja wspólne punkty, itd. Dla przykładu rozwiazmy nastepujace zadanie:
Przykład 11. Dla jakich argumentów funkcja f(x) = −x3 − x2 + 2x przyjmuje wartosci
mniejsze niz funkcja g(x) = −2x− 4?
Mozemy to zadanie sformułowac bez uzycia terminu „funkcja”, np.
Przykład 12. Rozwiaz nierównosc −x3 − x2 + 2x < −2x− 4, gdzie x ∈ R.
Rozwiaze najpierw to zadanie jak zwykła nierównosc. Przenoszac wszystko na lewa strone otrzymujemy
−x3 − x2 + 4x+ 4 < 0.
Pogrupujmy parami wyrazy wielomianu po lewej stronie nierównosci 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 obliczac delte i pier-
wiastki warto zauwazyc, ze mozna tu skorzystac ze wzoru skróconego mnozenia na róznice kwadratów
dwóch liczb) dostajemy nierównosc
(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)
73
ROZDZIAŁ 2. FUNKCJE
-3 -2 -1 1 2 3x
-4
-2
2
4
6
y
Rozwiazaniem nierównosci jest wiec zbiór (−2,−1) ∪ (2,∞). Wynik ten mozemy uzyskac równiez
poleceniem:
sage: solve((2+x)*(2-x)*(x+1)<0, x)
wynik: [[x > (−2) , x < (−1)] , [x > 2]] Prawda, ze łatwo i szybko?
Nasze zadanie mozemy tez rozwiazac geometrycznie. Przyjrzyjmy sie wykresom
-3 -2 -1 1 2 3x
-10
-8
-6
-4
-2
2
4
y
f(x) =−x3 −x2 +2xg(x) =−2x−4
uzyskanym za pomoca polecen
sage: f(x) = -x^3-x^2+2*x
sage: g(x) = -2*x-4
74
2.3. FUNKCJE POZNANE W SZKOLE
sage: wykres_f = plot(f, x, -3, 3, color=’green’,\
legend_label=r’$f(x) = -x^3-x^2+2x$’)
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 lezy ponizej wykresu funkcji g. Z rysunku łatwo
odczytac, ze dla
x ∈ (−2,−1) ∪ (2,∞).
2.3 Funkcje poznane w szkole
Rozwiazmy teraz kilka zadan dotyczacych funkcji, które poznaliscie badz dopiero poznacie w szkole.
2.3.1 Funkcja liniowa
Prawdopodobnie funkcja liniowa była pierwsza funkcja, która poznaliscie w szkole.
Wiecie zatem, ze charakteryzuje ona wielkosci wprost proporcjonalne. Oznacza to, ze jesli x i y ozna-
czaja pewne wielkosci wprost proporcjonalne, to zachodzi miedzy nimi zwiazek
y = a · x
dla pewnej liczby rzeczywistej a 6= 0. Przykładowo jesli x zwiekszymy dwukrotnie, to y tez zwiekszy
sie 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,
ze poznamy dwa punkty jej wykresu i juz mozemy naszkicowac wykres. Majac równanie funkcji, zna-
75
ROZDZIAŁ 2. FUNKCJE
lezienie dwóch punktów jest banalnie proste, gdyz mozemy wybrac dowolne dwie liczby (bo dziedzina
funkcji liniowej jest cały zbiór liczb rzeczywistych) i obliczyc dla nich wartosci.
Troche trudniej jest w sytuacji odwrotnej, tzn. majac dane dwa punkty znalezc wzór funkcji liniowej.
Wezmy np. punkty A = (−3, 2) i B = (2,−1). Zadanie mozemy rozwiazac na kilka sposobów.
Przykładowo na lekcjach geometrii poznaliscie zapewne wzór na równanie prostej przechodzacej przez
dwa punkty A = (xA, yA), B = (xB, yB), które jest postaci:
y − yA =yB − yAxB − xA
(x− xA).
Innym sposobem jest wykorzystanie ogólnego wzoru funkcji liniowej. Podstawiajac współrzedne punk-
tów do równania
y = ax+ b,
otrzymamy układ równan, z którego bedziemy mogli obliczyc współczynniki a i b. Znajdzmy równanie
prostej tym własnie sposobem (pierwszy sposób pozostawiam jako cwiczenie dla czytelnika). Otrzymu-
jemy wiec układ równan a · (−3) + b = 2
a · 2 + b = −1
Łatwo go rozwiazemy metoda przeciwnych współczynników. Wystarczy pomnozyc pierwsze równanie
przez (−1) i dodac do drugiego.
5a = −3 czyli a = −3
5= −0.6.
Otrzymalismy proste równanie z jedna niewiadoma
b = −1− 2a = −1− 2 · (−0.6) = 0.2.
Polecenia solve mozna uzyc równiez do rozwiazywania układów równan, np.
sage: var(’a, b’)
sage: solve( [a*(-3)+b==2, a*2+b==-1], a, b )
wynik:
[[a =
(−3
5
), b =
(1
5
)]]
76
2.3. FUNKCJE POZNANE W SZKOLE
Otrzymujemy wiec równanie prostej
f(x) = −0.6x+ 0.2.
Program Sage wykona te prace za nas jeszcze szybciej. Otóz posiada specjalna metode find_fit,
która potrafi dobierac 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. Otrzymalismy te same współ-
czynniki jak z poprzednich obliczen. Dla bardziej złozonych funkcji to dopasowanie moze nie byc tak
dokładne. Na dokładnosc wpływa przede wszystkim liczba punktów przekazanych funkcji find_fit.
Przyjrzyjmy sie teraz wykresowi funkcji, której wzór otrzymalismy.
sage: f(x) = -0.6 * x + 0.2
sage: plot(f, -1.5, 1.5,\
legend_label=r’$f(x)=-\frac35x+\frac15$’)
-1.5 -1 -0.5 0.5 1 1.5
-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
1f(x) =−3
5x+1
5
77
ROZDZIAŁ 2. FUNKCJE
Widzimy, ze jest ona malejaca w całej swojej dziedzinie (Df = R). Jesli a < 0, to funkcja liniowa
maleje, natomiast dla a > 0 rosnie.
Łatwo jest wyznaczyc punkt przeciecia wykresu funkcji liniowej z osia Oy, gdyz jest to zawsze punkt o
współrzednych (0, b), czyli w tym przypadku (0, 210). Z tego powodu b nazywany jest współczynnikiem
przesuniecia, gdyz powoduje on przesuniecie wykresu funkcji f(x) = ax o b jednostek w pionie. Ry-
sujac wykres, mozemy najpierw narysowac prosta przechodzaca przez poczatek układu współrzednych,
czyli punkt (0, 0), a potem przesunac o odpowiednia liczbe jednostek w góre badz w dół.
-1.5 -1 -0.5 0.5 1 1.5
-0.8
-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
1f(x) =−3
5x+1
5
g(x) =−35x
Miejsce zerowe mozemy wyznaczyc wzorem x0 = − b
ao ile a 6= 0 lub instrukcja solve(a*x+b, x).
Sa one postaci
x0 = − 0.2
−0.6=
2
6=
1
3.
Zatem punkt(13, 0)
jest przecieciem wykresu tej funkcji z osia Ox.
2.3.2 Funkcja kwadratowa
Druga, dosc obszernie omawiana funkcja w szkole, jest z pewnoscia funkcja kwadratowa. Wiemy,
ze wykresem funkcji kwadratowej jest parabola. Znali ja juz starozytni Grecy. W III wieku p.n.e.
Appolonius z Perge, matematyk grecki opisał w swojej ksiedze „Stozkowe” miedzy innymi parabole.
Dlaczego ksiega nosiła taki tytuł? Otóz wiekszosc krzywych które poznaliscie w szkole, tj. prosta
(mozemy ja tez do nich zaliczyc), parabola, hiperbola, okrag, elipsa, mozna otrzymac z przekroju stozka
odpowiednia płaszczyzna.
Parabola powstaje przez przeciecie stozka płaszczyzna równoległa do jego tworzacej i nie zawierajaca
jego wierzchołka. Mozemy to zobaczyc na ponizszych rysunkach.
78
2.3. FUNKCJE POZNANE W SZKOLE
Otrzymałem je poleceniem, które widzicie ponizej. W interaktywnym arkuszu dołaczonym do tej ksiazki
znajdziecie te instrukcje. Bedziecie mogli dokładniej sie przyjrzec temu przekrojowi. Ja umiesciłem tylko
trzy zdjecia z róznych 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)
Juz Galileusz odkrył, ze jak wyrzucicie kamien wysoko przed siebie, to tor jego lotu podczas spadania
wyznaczy krzywa w kształcie paraboli.
Wiele własnosci funkcji kwadratowej mieliscie okazje sobie przypomniec podczas rozwiazywania za-
dan z poprzedniego podrozdziału. Pojawił sie tam wzór na wyróznik kwadratowy (delte), wzory na
pierwiastki i postac iloczynowa czy tez sposób wyznaczania zbioru wartosci tej funkcji na ustalonym
przedziale. Oprócz postaci ogólnej i liniowej funkcja kwadratowa moze przyjmowac jeszcze postac ka-
noniczna
f(x) = a(x− p)2 + q,
gdzie punkt (p, q) =(− b
2a,−∆
4a
)jest wierzchołkiem paraboli.
Kazda z tych postaci ma swoje szczególne zastosowanie. Z postaci iloczynowej łatwo jest wskazac
miejsca zerowe funkcji. Widac tez przedziały, w których funkcja przyjmuje wartosci dodatnie badz
ujemne, co wykorzystujemy przy rozwiazywaniu nierównosci kwadratowych. Z postaci kanonicznej
natomiast łatwo zbadac monotonicznosc czy podac zbiór wartosci funkcji.
79
ROZDZIAŁ 2. FUNKCJE
Rozwiazmy nastepujace zadanie:
Przykład 13. Wiedzac, ze liczby −1 i 2 sa miejscami zerowymi funkcji f(x) = ax2+bx−3
znajdz współczynniki a i b oraz zapisz ja w postaci kanonicznej.
Skoro liczby −1 i 2 sa miejscami zerowymi funkcji, wiec f(−1) = f(2) = 0, co daje nastepujacy układ
równan: a · (−1)2 + b · (−1)− 3 = 0
a · 22 + b · 2− 3 = 0
czyli a− b− 3 = 0
4a+ 2b− 3 = 0.
Mnozac pierwsze równanie przez 2 i dodajac do drugiego otrzymujemy 6a − 9 = 0, czyli a = 32.
Wstawiajac np. do pierwszego równania otrzymujemy b = a− 3 = 32− 3 = − 3
2. Mozemy zapisac wiec
postac ogólna funkcji
f(x) =3
2x2 − 3
2x− 3.
Obliczmy teraz współrzedne wierzchołka paraboli, gdyz przydadza nam sie do rozwiazania.
p = −− 3
2
2 · 32
=1
2
q = f(p) =3
2
(1
2
)2
− 3
2· 12− 3 = −27
8.
Otrzymujemy wiec
f(x) =3
2
(x− 1
2
)2
+−27
8.
W programie Sage współczynniki a, p i q znajdziemy posługujac sie uzyta juz wczesniej 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)]
80
2.3. FUNKCJE POZNANE W SZKOLE
Zwrócmy uwage, ze oprócz punktów wyznaczonych przez miejsca zerowe podałem jeszcze jeden punkt
o współrzednych (0,−3). Łatwo go wyznaczyc, gdyz jest on punktem przeciecia paraboli z osia Oy.
Skoro lezy na osi Oy, to pierwsza jego współrzedna musi byc 0. Jak podstawicie do postaci ogólnej w
miejsce x zero, to w wyniku otrzymacie oczywiscie c. Zatem jest to punkt (0, c). Gdybysmy nie podali
tego punktu, to program miałby problem ze znalezieniem współczynników, poniewaz parabol posia-
dajacych miejsca zerowe w punktach (−1, 0), (2, 0) jest nieskonczenie wiele. Na ponizszym rysunku
przedstawiłem kilka z nich. Kolorem niebieskim narysowana jest parabola z naszego zadania.
-2 -1 1 2 3
-5
5
10 a=1a=−1.5a=3a=−5
Rozwiazmy jeszcze jedno zadanie zwiazane z funkcja kwadratowa.
Przykład 14. Wiedzac, ze ponizszy wykres jest wykresem funkcji kwadratowej
f(x) = ax2 + bx+ c,
znajdz współczynniki a, b, c. Zapisz te funkcje w postaci kanonicznej i okresl przedziały
monotonicznosci tej funkcji.
-4 -3 -2 -1 1 2 3 4x
-1.5
-1
-0.5
0.5
1
1.5
2
2.5
3
y
Z wykresu funkcji mozemy odczytac jedno miejsce zerowe x1 = −4 oraz wierzchołek paraboli (1, 2.5).
81
ROZDZIAŁ 2. FUNKCJE
Te dane sa wystarczajace, aby zbadac monotonicznosc funkcji. Otóz funkcja jest rosnaca dla x ∈
(−∞, 1〉 oraz jest malejaca dla x ∈ 〈1,∞).
Pozostaje znalezc brakujace współczynniki. Nieuprzejmy autor tego zadania ukrył przed nami dosc
wazna czesc wykresu, która jak wiemy zawiera drugie miejsce zerowe. Gdybysmy je znali, to powta-
rzajac metode z poprzedniego zadania, dostalibysmy rozwiazanie.
Mozemy oczywiscie znalezc brakujace miejsce zerowe. Wystarczy zauwazyc, ze sa one połozone syme-
trycznie wzgledem prostej x = p czylix1 + x2
2= p.
Wstawiajac za x1 = −4 oraz p = 1, obliczamy x2 = 6. Reszte zadania pozostawiam czytelnikowi jako
cwiczenie.
Rozwiazmy to zadanie teraz inna metoda. Majac współrzedne wierzchołka paraboli i dowolny inny
punkt lezacy na niej mozemy znalezc trójmian kwadratowy wykorzystujac jego postac kanoniczna.
Podstawiajac do a(x− p)2 + q nasze dane, otrzymujemy
f(x) = a(x− 1)2 + 2.5.
Wiemy równiez, ze punkt (−4, 0) lezy na wykresie tej funkcji. Po podstawieniu do powyzszego 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.
2.3.3 Funkcja wymierna
Wspomniałem wczesniej o funkcji wymiernej, czyli takiej, w której definicji uzywamy kreski ułamkowej
(operacji dzielenia) oraz w liczniku oraz w mianowniku znajduje sie wielomian.
Jedna z prostszych jej odmian jest tak zwana funkcja homograficzna. Charakteryzuje ona wielkosci
odwrotnie proporcjonalne, tzn.
y =a
x,
przy czym musimy koniecznie załozyc, ze x 6= 0.
Jesli przykładowo trzykrotnie wzrosnie zmienna x, to wartosc y trzykrotnie zmaleje,
a
3 · x=
1
3· ax=
1
3· y.
82
2.3. FUNKCJE POZNANE W SZKOLE
Podobnie jak parabola, wykres funkcji homograficznej jest równiez krzywa stozkowa, która nazywamy
hiperbola. Powstaje przez przeciecie stozka płaszczyzna, która nie jest równoległa do tworzacej ani tez
prostopadła do jego osi obrotu.
Z pewnoscia rysowaliscie w szkole wykresy hiperbol w prostokatnym układzie współrzednych. Wiecie
wiec, ze obie osie układu sa asymptotami jej wykresu. Własnosc ta powoduje, ze funkcja homograficzna
dobrze ilustruje operacje przesuwania wykresu o dany wektor [p, q].
Przesunmy wykres funkcji f(x) = 5x
o wektor [−2, 1]. Wiemy, ze wzór otrzymanej funkcji bedzie wtedy
wygladał nastepujaco:
h(x) =5
x+ 2+ 1.
-10 -8 -6 -4 -2 2 4 6 8x
-8
-6
-4
-2
2
4
6
8
10
y
f(x) =5x
h(x) = 5x+2
+1
83
ROZDZIAŁ 2. FUNKCJE
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 zobaczyc asymptote pionowa, powstała po przesunieciu hiperboli, nalezy uzyc
opcji detect_poles="show". Natomiast pozioma asymptote narysowałem poleceniem
plot(1, x, -10, 8, linestyle=’--’, color=’gray’).
Rozwiazmy nastepujace zadanie.
Przykład 15. Przekształcmy wzór funkcji f(x) =1 + 3x
4− 6xdo postaci kanonicznej, tzn.
f(x) =e
x− p+ q.
Program Sage posiada funkcje partial_fraction przeznaczona specjalnie dla wyrazen wymier-
nych. Rozkłada on wyrazenie na sume ułamków, które w licznikach posiadaja tylko liczby. My potrze-
bujemy dokładnie takiej postaci. Zatem
sage: var(’x’)
sage: f = (1+3*x)/(4-6*x)
sage: f.partial_fraction()
wynik: − 3
2 (3x− 2)− 1
2
Otrzymujemy wiec e = − 32, p = 2
3oraz q = − 1
2. Czyli funkcja moze byc zapisana w postaci:
f(x) = − 3
2(3x− 2)− 1
2.
84
2.3. FUNKCJE POZNANE W SZKOLE
2.3.4 Funkcja wykładnicza i logarytmiczna
Sa jeszcze dwie klasy funkcji, które mogliscie poznac w szkole:
Funkcja wykładnicza Funkcja logarytmiczna
f(x) = ax f(x) = loga x
a > 0 ∧ a 6= 1
Napisałem definicje tych funkcji obok siebie, gdyz sa one ze soba zwiazane w sposób szczególny. Otóz sa
funkcje, które mozemy odwracac. Odwrócenie funkcji f polega na znalezieniu drugiej funkcji zwykle
oznaczanej symbolem f−1 takiej, ze dla kazdego argumentu x ∈ Df zachodzi zwiazek
f−1(f(x)
)= x.
Zachodzi tez zwiazek odwrotny, tzn. dla kazdego argumentu x ∈ Df−1 mamy
f(f−1(x)
)= x.
Jak sie zapewne domyslacie, funkcja wykładnicza i logarytmiczna sa funkcjami odwracalnymi i kazda z
nich jest odwrotnoscia drugiej. Zatem prawdziwe sa wzory
loga(ax)= x, oraz aloga x = x. (2.1)
Wynikaja one z definicji logarytmu, gdyz jak wiemy
loga b = c ⇔ ac = b
Dziedzina funkcji logarytmicznej jest zbiór (0,∞), a zbiorem wartosci jest R. Dla funkcji wykładniczej
mamy odwrotna sytuacje, tzn. dziedzina jest zbiór liczb rzeczywistych, a zbiorem wartosci jest przedział
(0,∞). I tak dzieje sie 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)
85
ROZDZIAŁ 2. FUNKCJE
-4 -2 2 4 6x
10
20
30
40
50
60
y
y=2x
10 20 30 40 50 60x
-4
-2
2
4
6
y
y=log2x
Widzimy, ze obie funkcje sa wówczas rosnace, przy czym wykładnicza rosnie wiele razy szybciej od
logarytmicznej.
Uzyłem opcji aspect_ratio aby odpowiednio wyskalowac osie tych układów. Dla funkcji wykład-
niczej ustawiłem aspect_ratio=0.1, co oznacza, ze długosc jednej jednostki poziomej stanowi
dziesiec jednostek pionowych. W przypadku funkcji logarytmicznej uzyłem aspect_ratio=6, co
oznacza, ze długosc jednej jednostki pionowej stanowi szesc jednostek poziomych. Spróbujcie naryso-
wac te wykresy bez tych opcji.
Dla a = 0.5 wykresy wygladaja nastepujaco:
-6 -4 -2 2 4x
10
20
30
40
50
60
y
y=(12)x
10 20 30 40 50 60x
-6
-4
-2
2
4
y
y=log0.5x
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.
86
2.3. FUNKCJE POZNANE W SZKOLE
Przykład 16. Napisz wzór funkcji wykładniczej f(x) = ax−p + q majac jej wykres.
-6 -4 -2 2x
-2
2
4
6
8
y
Podaj wzór funkcji do niej odwrotnej.
Z wykresu od razu widzimy, ze q = −2.
Łatwo odczytamy z wykresu współrzedne dwóch punktów: (−2, 0) oraz (0, 6). Podstawmy je do rów-
nania f(x) = ax−p − 2. Wtedya−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, gdyz wiemy, ze a > 0. Po podstawieniu do pierwszego z równan
otrzymujemy równosc
2−p = 8 ⇒ 2−p = 23.
Czyli p = −3 oraz f(x) = 2x+3 − 2.
Sprawdzmy w programie Sage, czy nie popełnilismy 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 sie zgadza.
87
ROZDZIAŁ 2. FUNKCJE
Aby znalezc funkcje odwrotna, musimy z równania y = 2x+3 − 2 wyznaczyc zmienna x.
sage: x,y = var(’x,y’)
sage: f = y == 2^(x+3) -2
sage: f.solve(x)
wynik:
[x = −3 log (2)− log (y + 2)
log (2)
]
Przekształcmy to równanie samodzielnie. Logarytmujac obustronnie ponizsze 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 nastepujacy:
f−1(x) = log2(x+ 2)− 3.
Widzimy, ze otrzymalismy go po zamianie zmiennej x ze zmienna y w poprzednim równaniu. Korzy-
stajac z własnosci logarytmu wynik, który dał nam program Sage mozemy przekształcic do takiej samej
postaci. Proponuje wykonac to zadanie jako cwiczenie.
Sage domyslnie definiuje logarytmy o podstawie e, gdzie e jest tzw. liczba Eulera. Nalezy o tym
pamietac, gdyz zwykle w ksiazkach matematycznych log(a) oznacza logarytm dziesietny liczby a.
Liczba e jest wazniejsza liczba w matematyce niz liczba π, która doskonale znacie. Odkrył ja w XVI
wieku szkocki matematyk John Napier (Neper), z tego powodu nazywana jest równiez liczba Nepera.
Neper ułozył tablice logarytmów, które były bardzo pomocne przy skomplikowanych obliczeniach
astronomicznych. Znacie zapewne nastepujaca ciekawa własnosc logarytmów:
loga (b · c) = loga b+ loga c.
Przez wiele lat wykorzystywano ja do obliczania iloczynów duzych liczb. Dzieki niej mnozenie liczb
zastepujemy sumowaniem. Znajdzmy tym sposobem na przykład iloczyn 128 · 512.
log2(128 · 512) = log2 128 + log2 512 = 7 + 8 = 15.
88
2.3. FUNKCJE POZNANE W SZKOLE
Majac teraz odpowiednie tablice, w których moge odczytac dla jakiej liczby logarytm przy podstawie 2
wynosi 15, dostane wynik. Oczywiscie wiemy, ze szukana liczba jest
215 = 32768.
Czyli 128 · 512 = 32768. Dzis, majac do dyspozycji komputery, nie musimy korzystac z tego typu
udogodnien. Sage potrafi wykonywac mnozenie na bardzo duzych 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 moze nam podac wartosc liczby Eulera z bardzo duza dokładnoscia, np. zobaczmy dla 30
miejsc po przecinku (mógłbym zamiast 30 uzyc 30000, lecz wtedy ksiazka zbyt mocno zwiekszyłaby
swoja objetosc).
sage: e = exp(1)
sage: e.N(digits=30)wynik: 2.71828182845904523536028747135
Wyrazenie exp(x) oznacza funkcje wykładnicza y = ex, zatem exp(1) = e1 = e.
Liczba e posiada wiele definicji. Jedna z nich jest granica ciagu
e = limn→∞
(1 +
1
n
)n
.
Oznacza to, ze jak bedziemy obliczac kolejne wyrazenia(1 + 1
n
)ndla coraz to wiekszych liczb natural-
nych, to bedziemy otrzymywac lepsze przyblizenie liczby e. Obliczmy je dla liczb naturalnych od 1 do
10, a potem od 10000 do 10010.
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 )
89
ROZDZIAŁ 2. FUNKCJE
Widzimy, ze gdy n jest wieksze niz 10000, wartosci nie róznia sie juz tak bardzo od siebie i mozemy
okreslic wartosc liczby e do trzech miejsc po przecinku, tzn. e ≈ 2.718.
Mozna tez wyznaczyc wartosc liczby e wzorem
e =
∞∑n=0
1
n!.
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, ze jest ona malejaca,
przecina os OY w punkcie (0,−1) oraz współczynnik a jest jednym z rozwiazan równania
x2 − 9 = 0.
2. Wykresem funkcji liniowej jest odcinek o koncach w punktach A = (−3, 1) i B = (2, 2). Podaj
dziedzine tej funkcji, zbiór wartosci oraz punkty przeciecia z osiami układu współrzednych.
3. Funkcja f okreslona jest wzorem
f(x) =
−2x+ 1, dla x ≤ 1,
3x− 4, dla x > 1.
Naszkicuj wykres, podaj miejsca zerowe oraz okresl zbiór wartosci tej funkcji.
4. Dla podanych funkcji kwadratowych podaj miejsca zerowe i postac iloczynowa (o ile istnieja) oraz
współrzedne wierzchołka paraboli i postac kanoniczna. Nastepnie naszkicuj ich wykresy.
90
2.4. ZADANIA
(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 〈−3, 2〉. Naszkicuj wykres tej
funkcji oraz podaj jej zbiór wartosci.
6. Wiedzac, ze ponizszy wykres jest wykresem funkcji kwadratowej f(x) = ax2 + bx + c, znajdz
współczynniki a, b, c, zapisz ja w postaci kanonicznej i okresl przedziały monotonicznosci tej
funkcji.
-2 -1 1 2 3 4x
-3
-2
-1
1
2
3
y
7. Funkcja f(x) = ax2 + 2x + 1 posiada tylko jedno miejsce zerowe. Znajdz współczynnik a oraz
okresl przedziały monotonicznosci tej funkcji.
8. Dla funkcji wymiernej f(x) =−4
x− 2− 5 podaj dziedzine funkcji, zbiór wartosci, okresl mono-
tonicznosc i naszkicuj jej wykres.
9. Niech bedzie okreslona funkcja wzorem f(x) =3x− 2
4− 2x. Podaj miejsce zerowe tej funkcji oraz
punkt przeciecia sie wykresu tej funkcji z osia OY. Czy do wykresu tej funkcji nalezy punkt o
współrzednych A =
(√3− 1,
√3
2− 1
)?
10. Naszkicuj wykres funkcji f(x) =2− 2x
x+ 3za pomoca pakietu Sage i na jego podstawie znajdz jej
wzór w postaci f(x) =e
x− p+ q.
11. Okresl dziedzine funkcji homograficznej f(x) =ax+ 5
3x− 2oraz wyznacz współczynnik a wiedzac,
ze wykres tej funkcji przechodzi przez punkt A = (2, 1). Dla jakich argumentów funkcja przyj-
muje wartosci wieksze niz 1?
91
ROZDZIAŁ 2. FUNKCJE
12. Oblicz
(a) log343 7, (b) log√8 32, (c) log 132712, (d) log 1√
5
3√25, (e) 3log3 123, (f) 64log6
6√362 .
13. Naszkicuj wykresy podanych funkcji, okresl ich dziedziny, zbiór wartosci oraz miejsca zerowe
(a) f(x) = log 12(x− 5), (b) f(x) = log3(x+ 1)− 4, (c) f(x) = log2 x
2.
14. Znajdz współczynniki a i p funkcji wykładniczej f(x) = ax−p majac jej wykres na ponizszym
rysunku. Dla jakich argumentów funkcja przyjmuje wartosci z przedziału 〈2, 128〉?
-3 -2 -1 0 1 2x
4
8
12
16
y
15. Znajdz współczynniki a, p funkcji logarytmicznej f(x) = loga(x + p) majac jej wykres na
ponizszym rysunku. Dla jakiego argumentu funkcja przyjmuje wartosc 0.5?
-4 -3 -2 -1 1 2 3 4x
-4
-2
2
4
y
92
2.4. ZADANIA
ODPOWIEDZI
1. f(x) = −3x− 1.
-2 -1.5 -1 -0.5 0.5 1x
-4
-2
2
4
y
Zad. 1.
-3 -2 -1 1 2 3
-2-1
1234567 Wf =
⟨−1,∞)
Zad.
3.
2. f(x) = 0.2x+1.6, Df = 〈−3, 2〉, Wf = 〈1, 2〉. Punkty przeciecia z osia Ox nie istnieja natomiast
z osia Oy: (0, 1.6).
3. Wf = 〈−1,∞). Wykres jest widoczny na rysunku powyzej.
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 jednoczesnie postac liniowa i kanoniczna.
(c) Skoro ∆ = −44 < 0, wiec postac iloczynowa nie istnieje. Postac kanoniczna: f(x) =
3(x+ 23)2 + 11
3.
(d) f(x) = −(x− 1)(x− 4), f(x) = −(x− 52)2 + 9
4.
-4 -2 2 4
10
20
30
40
50
60(a)
-4 -2 2 4
-200
-150
-100
-50
(b)
-4 -2 0 2 4
20
40
60
80
100
(c)
-4 -2 2 4
-50
-40
-30
-20
-10
(d)
Zad. 4.
5. Wf = 〈−∞, 254〉
93
ROZDZIAŁ 2. FUNKCJE
-2 2 4 6
-20
-15
-10
-5
5
10
Zad. 5.
-2 2 4 6
-20
-15
-10
-5
5
10
Zad. 8.
6. a = − 23, b = 1 1
3, c = 2. Funkcja rosnie dla x ∈ (−∞, 1〉, maleje dla x ∈ 〈1,∞). Postac
kanoniczna: f(x) = − 23(x− 1)2 + 8
3.
7. Poniewaz ∆ = 0, wiec a = 1. Skoro p = x0 = −1, wiec f dla x ∈ (−∞− 1〉 oraz f dla
x ∈ 〈−1,∞).
8. Df = R \ 2, Wf = R \ −5.
9. Miejsce zerowe: x0 =23. Punkt przeciecia z osia Ox: (0,− 1
2). Punkt (
√3− 1,
√32− 1) nie lezy na
wykresie tej funkcji.
10. Asymptote pozioma znajdziecie poleceniem: limit((2-2*x)/(x+3), x=infinity).
Natomiast poleceniem ((2-2*x)/(x+3)).partial_fraction() zobaczycie szukana
postac funkcji. Zatem e = 8, p = −3, q = −2, tzn. f(x) = 8x+3
− 2.
11. a = − 12, Df = R \ 2
3, f(x) > 1 dla x ∈ ( 2
3, 2).
12. (a) 13, (b) 10
3, (c) −36, (d) − 4
3, (e) 123, (f) 16.
13.
5 6 7 8 9 10
-2
-1
0
1
2
3
4
5(a)
50 100 150 200
-4
-3
-2
-1
(b)
1 2 3 4 5
-10
-5
(c)
Zad. 13.
14. f(x) = 2x+2. f(x) ∈ 〈2, 128〉 dla x ∈ 〈−1, 5〉.
15. a = 2, p = 4. f(x) = 0.5 dla x =√2− 4.
94
Rozdział 3
Rachunek prawdopodobienstwa
i statystyka matematyczna
Rachunek prawdopodobienstwa, to dział matematyki zajmujacy sie badaniem zdarzen zachodzacych
podczas wykonywania doswiadczen losowych. Teorie te zapoczatkowali Pierre de Fermat oraz Blaise
Pascal w XVII wieku badajac pewna gre losowa.
Natomiast bodzcem do powstania statystyki była analiza danych pochodzacych z tzw. spisów powszech-
nych dotyczacych narodzin oraz zgonów. Takie spisy były juz prowadzone w starozytnym Rzymie. Po-
czatkowo terminem statystyka okreslano dane zapisane tabelarycznie. Dzisiejsza statystyka obejmuje
cała game narzedzi słuzacych do analizy danych ale tez metody pozyskiwania i prezentacji tych danych.
3.1 Rachunek prawdopodobienstwa
Słowo „prawdopodobienstwo” pojawia sie nie tylko w literaturze matematycznej. Słyszymy przeciez
bardzo czesto stwierdzenie, ze cos prawdopodobnie sie wydarzy, np. istnieje prawdopodobienstwo, ze
jutro bedzie padac. Słowo to uzywane jest tez naprzemiennie ze słowem „szansa”.
Oznaczmy symbolem Ω zbiór wszystkich mozliwych wyników, które mozemy otrzymac podczas pew-
nego doswiadczenia. Czesto mówimy, ze jest to przestrzen wszystkich zdarzen elementarnych.
Z tego powodu elementy zbioru Ω nazywamy zdarzeniami elementarnymi, a jego podzbiory zdarze-
niami. Przypomnijmy teraz klasyczna definicje prawdopodobienstwa.
Prawdopodobienstwo zajscia pewnego zdarzenia A ⊂ Ω jest równe
P (A) =|A||Ω|
,
gdzie
95
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
|A| – oznacza ilosc zdarzen elementarnych sprzyjajacych zdarzeniu A, czyli jest to po prostu ilosc
elementów tego zbioru,
|Ω| – jest liczba wszystkich mozliwych zdarzen, czyli wszystkich elementów zbioru Ω.
Wzór jest prosty w zapisie, jednakze ukrywa w sobie pewna problematyke zwiazana ze zliczaniem
elementów zbiorów A i Ω.1 Oczywiscie my bedziemy zajmowac sie zbiorami, których elementy da
sie policzyc, gdyz beda to albo zbiory skonczone albo takie, których elementy mozemy ponumerowac.2
Zobaczmy to na kilku przykładach.
Przykład 1. Rzucamy dwa razy kostka do gry. Okresl przestrzen zdarzen elementarnych.
Łatwo zliczymy ilosc elementów przestrzeni Ω przy pomocy tak zwanej reguły mnozenia, która oparta
jest na pojeciu iloczynu kartezjanskiego. Jesli ktos nie pamieta badz jeszcze nie miał okazji sie
dowiedziec, co to takiego iloczyn kartezjanski zbiorów, to juz przypominam. Jesli wezmiemy sobie np.
dwa zbiory A = a1, a2, a3 i B = b1, b2, to iloczyn kartezjanski 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 mozliwych par, w których na pierwszym miejscu stoi element zbioru A, a na drugim
element zbioru B. Jak łatwo zauwazyc, liczba tych par jest równa iloczynowi liczby elementów pierw-
szego zbioru przez liczbe elementów zbioru drugiego, tzn.
|A×B| = |A| · |B|.
Warto podkreslic, ze kolejnosc elementów w kazdej takiej parze jest wazna, tzn. jesli a 6= b, to para
(a, b) jest rózna od pary (b, a).
Oczywiscie zbiorów moze byc wiecej niz dwa oraz liczba elementów tych zbiorów moze byc dowolna
(nie tylko skonczona). Z geometrii znacie iloczyn kartezjanski R × R, jest to płaszczyzna, której
uzywacie na geometrii analitycznej dwuwymiarowej. Jak wiecie, kazdy punkt na tej płaszczyznie jest
reprezentowany przez pewna pare (x, y), gdzie x, y ∈ R i takich par jest nieskonczenie wiele.
Wrócmy jednak do naszego zadania. Zauwazmy, ze przestrzen Ω składa sie z par (X,Y ) gdzie X i Y sa
liczbami ze zbioru 1, 2, 3, 4, 5, 6, czyli mozemy zapisac, ze
Ω = 1, 2, 3, 4, 5, 6 × 1, 2, 3, 4, 5, 6.
1Okazuje sie, ze nie jest to mozliwe dla dowolnych zbiorów. Dział matematyki zajmujacy sie tym problemem nazywa sieteoria miary.
2O takich zbiorach mówimy, ze sa przeliczalne.
96
3.1. RACHUNEK PRAWDOPODOBIENSTWA
Ile takich par mozemy utworzyc? Oczywiscie 6 · 6 = 36. Pierwszy element pary, X mozemy wybrac na
6 sposobów i dla kazdego wybranego juz elementu X mozemy wybrac Y równiez na 6 sposobów. Odp.
Ω = 36.
Program Sage posiada bardzo ciekawe dwie funkcje, Set oraz CartesianProduct. Pierwsza słuzy
do definiowania zbiorów, natomiast druga tworzy iloczyn kartezjanski zbiorów.
Zdefiniujmy sobie zbiór o nazwie Kostka składajacy sie z cyfr od 1 do 6, a nastepnie utwórzmy iloczyn
kartezjanski Kostka × Kostka = Omega.
sage: Kostka = Set([1,2,3,4,5,6])
sage: Omega = CartesianProduct(Kostka, Kostka).map(tuple)
sage: Omega.list()
Jak widzimy, Omega zawiera wszystkie mozliwe pary. Mozemy zobaczyc ich ilosc za pomoca polecenia
sage: Omega.cardinality()
wynik: 36
Wezmy teraz jako przykład typowa sytuacje w grze w karty. Zazwyczaj na poczatku rozgrywki uczest-
nicy otrzymuja w sposób losowy pewna ilosc kart, np.
Przykład 2. Z talii 52 kart otrzymujemy w sposób losowy 5 kart. Okresl ilosc mozliwych
rozdan.
Przede wszystkim nalezy zwrócic uwage, ze w tym przypadku nie ma znaczenia kolejnosc wystepo-
wania kart, w przeciwienstwie do poprzedniego zadania, gdzie kolejnosc wystepowania elementów w
parach była istotna. Kiedy dostaniemy piec kart, nie wazne w jakiej kolejnosci je ułozymy w dłoni, to
bedzie wciaz tych samych piec kart. Mamy wiec do czynienia z podzbiorami. Zatem pytanie mozemy
sformułowac nastepujaco: ile istnieje podzbiorów piecioelementowych zbioru składajacego sie z 52 kart.
Przyjmijmy oznaczenie, ze(n
k
)oznacza ilosc wszystkich k – elementowych podzbiorów zbioru n –
elementowego i mozemy go obliczyc za pomoca wzoru(n
k
)=
n!
(n− k)! k!.
Takie podzbiory nazywamy kombinacjami, scislej k – elementowymi kombinacjami zbioru n –
elementowego.
97
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Udzielmy wiec odpowiedzi do naszego zadania: |Ω| =(52
5
). Z powyzszego wzoru mozemy wyliczyc
dokładna wartosc Omegi, jednak nie zrobie tego, w zamian wykorzystam program Sage. Wystarczy
wydac polecenie
sage: Omega = binomial(52,5)
i zobaczymy wynik |Ω| = 2598960.
Mało tego, mozemy sobie w tym programie taka talie kart zdefiniowac.
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)
Zobaczmy ile istnieje kolorów kart.
sage: Kolory.cardinality()
wynik: 4
róznych wartosci
sage: Wartosci.cardinality()
wynik: 13
oraz wszystkich kart
sage: Karty..cardinality()
wynik: 52
Mozemy teraz zdefiniowac rodzine wszystkich rozdan 5 – kartowych w sposób nastepujacy:
sage: Rozdania = Subsets(Karty, 5)
Wiemy juz ile ich jest i dlatego, ze jest ich sporo, nie bedziemy ich tu wszystkich wyswietlac a tylko
jedno losowe rozdanie.
98
3.1. RACHUNEK PRAWDOPODOBIENSTWA
sage: Rozdania.random_element()
wynik: (3,Kier) , (7,Trefl) , (5,Karo) , (2,Kier) , (7,Kier)
Sprawdzmy dla pewnosci czy wszystkich rozdan jest rzeczywiscie tyle ile obliczylismy wzorem na
kombinacje.
sage: Rozdania.cardinality()
wynik: 2598960
Wszystko sie zgadza. Chciałbym zwrócic uwage jeszcze raz na oznaczenie(n
k
).
Jest ono znane w matematyce pod nazwa symbolu Newtona. Nazywany jest tez współczynnikiem
dwumianowym, a ta nazwa bierze sie stad, ze dowolna potege dwumianu x + y mozemy obliczyc wg.
wzoru
(x+ y)n =
n∑k=0
(n
k
)xkyn−k,
zwany dwumianem Newtona. Jak widzimy, współczynniki tego dwumianu sa odpowiednimi sym-
bolami Newtona. Juz na przełomie XI i XII w. Chinczycy odkryli, ze współczynniki te układaja sie
symetrycznie, tworzac tzw. trójkat Pascala. Mozemy go wygenerowac w Sage-u za pomoca polecen
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]
99
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
[1, 5, 10, 10, 5, 1]
Teraz mozemy łatwo zapisac wzór np. na szescian sumy dwóch liczb biorac współczynniki z czwartego
poziomu od góry:
(x+ y)3 = x3 + 3x2y + 3xy2 + y3.
Przestrzen zdarzen elementarnych moze posiadac nieskonczenie wiele elementów. Przyjrzyjmy sie pro-
stej grze.
Przykład 3. Dwóch graczy na przemian rzuca symetryczna moneta. Wygrywa ten, który
pierwszy wyrzuci orła. Okresl przestrzen zdarzen elementarnych.
Widzimy, ze liczba zdarzen jest nieskonczona. Moze sie przeciez zdarzyc, ze orzeł nigdy nie wypadnie.
Przestrzen zdarzen elementarnych składa sie z nastepujacych ciagów
Ω =(O), (R,O), (R,R,O), (R,R,R,O), . . .
.
Nieskonczona tez jest liczba zdarzen np. takiego doswiadczenia:
Przykład 4. Wezmy sobie kwadrat o boku 2 cm i sprawdzmy jaka mamy szanse, ze losowo
wybrany punkt tego kwadratu bedzie lezał na trójkacie, którego podstawa jest jeden z boków
kwadratu, a wierzchołek lezy na przeciwległym boku.
Mozemy te sytuacje zilustrowac rysunkiem, który wykonam w Sage-u. Najpierw zdefiniujmy sobie piec
punktów, które beda wierzchołkami kwadratu oraz trójkata.
sage: A = (0, 0); B = (2, 0);
sage: D = (0, 2); C = (2, 2);
sage: W = (1.7, 2)
Mozemy teraz narysowac 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))
100
3.1. RACHUNEK PRAWDOPODOBIENSTWA
Teraz poleceniem (kwadrat+trojkat).show() mozemy zobaczyc nasz rysunek.
0.5 1 1.5 2
0.5
1
1.5
2
Przestrzenia zdarzen elementarnych jest w tym przypadku zbiór wszystkich punktów lezacych na naszym
kwadracie. Czy mozemy te punkty zliczyc? Oczywiscie nie da sie tego zrobic tak, jak miało to miejsce w
poprzednich zadaniach, nie mozemy nawet tych punktów ponumerowac. Ale przeciez zbiór wszystkich
tych punktów daje nam pole tego kwadratu, zatem mozemy przyjac, ze
|Ω| = 2 · 2 = 4.
Liczba punktów lezacych na trójkacie, to oczywiscie pole tego trójkata. Zwrócmy uwage, ze wysokosc
tego trójkata nie zalezy od połozenia wierzchołka i jest zawsze równa 2, zatem
|A| = 2 · 22
= 2.
Otrzymujemy tym samym odpowiedz, ze
P (A) =2
4=
1
2.
Obliczenie prawdopodobienstwa pewnego zdarzenia jest, jak widzimy, scisle zwiazane ze zliczaniem
elementów pewnych zbiorów. Elementy te sa zwykle albo ciagami, albo podzbiorami.
101
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Dział matematyki zajmujacy sie tego typu zliczaniem nazywany jest kombinatoryka. Nazwa zwiazana
jest z pojeciem kombinacji, które poznaliscie juz w zadaniu z kartami, jednakze nie ogranicza sie tylko
do nich.
Rozwiazmy teraz kilka zadan z prawdopodobienstwem, w trakcie których poznacie badz przypomnicie
sobie inne pojecia kombinatoryki.
Przykład 5. Asia, Basia, Czarek, Darek i Eryk wsiadaja do tramwaju. Jakie jest prawdopo-
dobienstwo, ze chłopcy okaza sie dzentelmenami i wpuszcza dziewczeta pierwsze?
Musimy najpierw obliczyc na ile sposobów moze ta piatka osób wejsc do tramwaju, bedzie to nasz zbiór
Ω, czyli wszystkich mozliwych zdarzen. Widzimy, ze mozliwosci jest tyle, ile sposobów przestawienia
miedzy soba tej piatki. Takie zamiany miejsc nazywamy permutacjami. Ogólnie elementy zbioru n –
elementowego mozemy poprzestawiac na
n! = 1 · 2 · . . . · (n− 1) · n
sposobów. Mówimy, ze istnieje n! („n silnia”) permutacji tego zbioru. Zatem dostajemy
|Ω| = 5! = 1 · 2 · 3 · 4 · 5 = 120.
W Sage-u mozemy silnie obliczyc poleceniem factorial(5). Zobaczmy jak tworzy sie permutacje
w programie Sage:
sage: p = Permutations([’A’,’B’,’C’,’D’,’E’])
Teraz poleceniem p.list() zobaczymy wszystkie mozliwe układy tych pieciu liter odpowiadajacych
naszym osobom. Poniewaz jest ich
sage: Omega = p.cardinality()
wynik: 120
wiec nie bede ich tu wyswietlał.
Musimy teraz obliczyc na ile sposobów moze ta piatka wejsc do tramwaju. Pamietamy, ze kobiety maja
wejsc pierwsze. Asia i Basia oczywiscie moga wejsc na dwa sposoby. Natomiast chłopcy na 3! = 6
sposobów.
sage: p = Permutations([’C’,’D’,’E’])
sage: p.list()
102
3.1. RACHUNEK PRAWDOPODOBIENSTWA
Na kazdy układ dziewczat, chłopcy moga sie ustawic na 6 sposobów zatem
|A| = 2 · 6 = 12.
Obliczamy wiec prawdopodobienstwo, ze chłopcy okazali sie dzentelmenami:
P (A) =12
120=
1
10.
Przykład 6. W urnie mamy trzy kule białe i cztery czarne. Losujemy trzy kule bez zwraca-
nia. Jakie jest prawdopodobienstwo, ze kule beda tego samego koloru?
Utwórzmy sobie taka urne w programie Sage.
sage: KuleBiale = Set(["1b", "2b", "3b"])
sage: KuleCzarne = Set(["1c", "2c", "3c", "4c"])
sage: Urna = KuleBiale + KuleCzarne
Nasza urna zawiera nastepujace elementy:
sage: Urna.list()
wynik: [1c,1b,2b,2c,3c,3b,4c]
Zbiór Ω składa sie z wszystkich podzbiorów 3 – elementowych naszej urny.
sage: Omega = Subsets(Urna, 3); Omega
103
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Mozemy te podzbiory policzyc z rysunku, lecz wiemy, ze jest ich binomial(7, 3), czyli
|Ω| =(7
3
)= 35.
Policzmy teraz ile jest podzbiorów, które zawieraja kule tego samego koloru. Musimy wtedy losowac
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 wiec, ze jest ich łacznie 5, zatem |A| = 5. Mozna oczywiscie obliczyc wzorem
|A| =(3
3
)+
(4
3
)= 5.
Dostajemy wiec odpowiedz, ze prawdopodobienstwo wylosowania kul tego samego koloru wynosi
P (A) =5
35=
1
7.
Kiedy tworzymy rodziny podzbiorów danych zbiorów, musimy pamietac, ze ich liczba bardzo szybko
rosnie. Wezmy jako przykład bardzo mały zbiór 1, 2, 3. Wszystkie jego podzbiory mozemy zobaczyc
za pomoca polecen:
104
3.1. RACHUNEK PRAWDOPODOBIENSTWA
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]
Rodzina podzbiorów tego zbioru zawiera nastepujaca liczbe elementów:
sage: PPodzb = Subsets(Subsets(Zbior))
sage: PPodzb.cardinality()
wynik: 256
Natomiast rodzina podzbiorów uzyskanego zbioru zawiera az tyle elementów:
sage: PPPodzb = Subsets(Subsets(Subsets(Zbior)))
sage: PPPodzb.cardinality()
wynik: 115792089237316195423570985008687907853269984665640564039457584007913129639936
Ilosc cyfr tej liczby to:
sage: PPPodzb.cardinality().ndigits()
wynik: 78
Dzieje sie tak gdyz liczba podzbiorów zbioru trzyelementowego składa sie z 23 podzbiorów, rodzina jej
podzbiorów składa sie z 223= 256 podzbiorów, no i ta duza liczba to
2223
.
Przykład 7. Do windy 5–pietrowego budynku wsiadły cztery osoby. Jakie jest prawdopodo-
bienstwo, ze kazda osoba wysiadzie na innym pietrze?
Najpierw zdefiniujmy zbiór wszystkich mozliwych zdarzen Ω. Na ile wszystkich sposobów moga te
osoby wysiasc z windy? W takich zadaniach kluczem do rozwiazania jest dobry opis elementów, które
chcemy zliczac. Jak zapisac przykładowo sytuacje, ze wszyscy wysiedli na pierwszym pietrze? Mozemy
ja przedstawic za pomoca takiego oto ciagu
(1, 1, 1, 1).
105
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Pierwszy element ciagu odpowiada pierwszej osobie i informuje, ze wysiadła na 1 pietrze, drugi element
ciagu odpowiada drugiej osobie i informuje, ze wysiadła równiez na 1 pietrze, itd. Opiszmy w podobny
sposób sytuacje np., ze osoby pierwsza i trzecia wysiadły na drugim pietrze, druga na piatym i czwarta
na trzecim:
(2, 5, 2, 3).
Co tak naprawde otrzymujemy?
Widzimy, ze sa to ciagi czteroelementowe budowane z liczb odpowiadajacych numerom pieter, czyli
nalezacych do takiego zbioru
1, 2, 3, 4, 5.
W kombinatoryce takie ciagi nazywamy wariacjami. Zatem czteroelementowe ciagi składajace sie
z numerów pieter sa czteroelementowymi wariacjami. Dodatkowo zauwazmy, ze numery pieter moga
sie powtarzac, tzn. kilka osób moze wysiasc na jednym pietrze. Takie wariacje nazywamy wariacjami
z powtórzeniami. Liczba k – elementowych wariacji z powtórzeniami zbioru n – elementowego
wynosi:
W kn = nk.
Dla k = 4 i n = 5 mozemy obliczyc |Ω| = 54 = 625.
Zliczmy teraz wszystkie takie sytuacje, w których kazda osoba wysiada na innym pietrze. Oznaczmy
zbiór tych zdarzen litera A. Elementami tego zbioru sa, podobnie jak wczesniej, ciagi czterowyrazowe,
lecz teraz wymagamy aby numery pietr sie nie powtarzały. Sa to równiez wariacje, ale bez powtórzen.
Wszystkich k – elementowych wariacji bez powtórzen zbioru n – elementowego jest
V kn =
n!
(n− k)!.
Dzieki temu mozemy obliczyc
|A| = 5!
(5− 4)!=
5!
1!= 120.
W pakiecie Sage mamy polecenie factorial do liczenia silni, np.
sage: A = factorial(5)
wynik: 120
Ilosc elementów zdarzenia A, mozemy obliczyc jeszcze inaczej bez uzywania wariacji.
106
3.1. RACHUNEK PRAWDOPODOBIENSTWA
Zauwazmy, ze pierwsza osoba moze wysiasc na 5 sposobów, druga ma juz 4 pietra do wyboru, trzeciej
pozostaja 3 pietra no i czwarta ma juz tylko 2 do wyboru. Posługujac sie reguła mnozenia, otrzymujemy
|A| = 5 · 4 · 3 · 2 = 120.
Prawdopodobienstwo, ze na kazdym pietrze wysiadzie inna osoba wynosi
P (A) =|A||Ω|
=120
625=
24
125.
Zilustrujmy zbiór Ω w programie Sage. Utwórzmy najpierw zbiór pieter
sage: Pietra = Set([1, 2, 3, 4, 5])
a nastepnie zbiór ciagów jako poczwórny iloczyn kartezjanski pieter
sage: Omega = CartesianProduct(Pietra, Pietra,\
Pietra, Pietra)
Wiemy, ze Ω zawiera 625 elementów, dlatego nie bede ich wszystkich wyswietlał, zamiast tego zo-
baczmy losowo wybrany element.
sage: Omega.random_element()
wynik: [2, 5, 2, 3]
Sprawdzmy czy liczba wszystkich zdarzen zbioru Omega jest taka sama jak obliczona Ω.
sage: Omega.cardinality()
wynik: 625 Jak widzimy wszystko sie zgadza.
Przykład 8. Mamy rozdac 7 paczków czterem osobom. Jakie jest prawdopodobienstwo, ze
kazda osoba otrzyma co najmniej jednego paczka?
Najpierw odpowiedzmy na pytanie, na ile sposobów mozemy rozdac 7 paczków czterem osobom?
Zauwazmy, ze to pytanie mozna sformułowac inaczej:
Ile rozwiazan ma równanie
a+ b+ c+ d = 7
w zbiorze liczb całkowitych nieujemnych? Przykładowym rozwiazaniem jest nastepujaca czwórka liczb:
a = 2, b = 1, c = 4, d = 0.
107
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Rozwiazanie to interpretujemy tak: pierwsza osoba otrzymała dwa paczki, druga jeden, trzecia cztery, a
czwarta nie dostała w ogóle. Jak zliczyc wszystkie takie rozwiazania? Liczba ta jest równa(4 + 7− 1
3
)=
(10
3
)= 120.
Juz wyjasniam skad sie to wzieło. Niech symbol „•” oznacza paczek. Zauwazmy, ze wtedy powyzsze
przykładowe rozwiazanie mozna zilustrowac w ten sposób:
osoba 1 osoba 2 osoba 3 osoba 4
• • • • • • •
Przyjrzyjmy sie jeszcze kilku przykładowym rozdaniom
osoba 1 osoba 2 osoba 3 osoba 4
• • • • • • •
• • • • • • •
• • • • • • •
Widzimy, ze pytanie mozemy sformułowac nastepujaco: Na ile sposobów moge wybrac 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
)=
(10
3
)= 120.
Mozemy nawet napisac ogólny wzór na liczbe rozwiazan równania
x1 + x2 + . . .+ xn = k
w zbiorze liczb całkowitych nieujemnych.3 Jest ona równa
Knk =
(n+ k − 1
k
).
W programie Sage mozemy bardzo łatwo sobie takie rozmieszczenia zdefiniowac poleceniem
sage: Rozwiazania = Compositions(7, length=4, min_part=0)
Zbiór Rozwiazania zawiera wszystkie rozwiazania naszego równania.
3Rozwiazania tego równania czesto interpretujemy, jako liczbe rozmieszczen k – nierozróznialnych elementów w n –komórkach. Rozmieszczenia tego typu nazywamy kombinacjami z powtórzeniami.
108
3.1. RACHUNEK PRAWDOPODOBIENSTWA
Zobaczmy kilka poczatkowych:
sage: Rozwiazania.list()
Polecenie Compositions generuje wszystkie mozliwe rozkłady liczby 7 na sumy liczb naturalnych.
Dodajac opcje min_part=0 dopuszczamy do sytuacji, ze niektóre składniki moga byc zerami. Opcja
length=4 daje nam wszystkie czteroskładnikowe rozkłady.
Ich liczba wynosi:
sage: Rozwiazania.cardinality()
wynik: 120
czyli dokładnie tyle ile obliczylismy wyzej. Teraz musimy obliczyc, na ile sposobów mozemy rozdac
tych 7 paczków tak, aby kazda osoba otrzymała co najmniej jednego.
Rozwiazmy 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óras z liczb
była równa zero. Wyswietlmy te rozwiazania
sage: A.list()
109
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Ich liczba wynosi:
sage: A.cardinality()
wynik: 20
Bez pomocy programu mozna tez w miare łatwo zliczyc elementy zbioru A. Chcemy, aby kazda osoba
otrzymała paczka, zatem na poczatku dajmy kazdemu po jednym. Zostaja nam jeszcze trzy, które
rozdajemy juz zupełnie losowo. Ilosc mozliwych rozdan zliczymy podobnie, jak elementy zbioru |Ω|,
czyli ich liczba jest równa liczbie wszystkich całkowitych nieujemnych rozwiazan równania
a+ b+ c+ d = 3.
Zatem
|A| =(4 + 3− 1
3
)=
(6
3
)= 20.
Prawdopodobienstwo, ze kazda osoba otrzyma conajmniej jednego paczka wynosi
P (A) =20
120=
1
6.
Rozwiazmy teraz pewne zadanie tylko za pomoca programu Sage. Zachecam jednak czytelników do
samodzielnego rozwiazania bez pomocy programu.
Przykład 9. Bankomat moze wypłacac pieniadze w banknotach: 10zł, 20zł, 50zł i 100zł.
Jakie jest prawdopodobienstwo, ze wypłacajac kwote 230zł, bankomat uzyje kazdej z wymie-
nionych nominałów?
110
3.1. RACHUNEK PRAWDOPODOBIENSTWA
Zadanie jest troszeczke podobne do poprzedniego, gdyz mozemy go sformułowac nastepujaco: ile
rozwiazan nieujemnych całkowitych posiada równanie
10a+ 20b+ 50c+ 100d = 230?
Program Sage posiada metode WeightedIntegerVectors, która podaje wszystkie mozliwe roz-
wiazania tego równania. Wydajmy wiec nastepujace polecenie:
sage: kwota230=WeightedIntegerVectors(230,[10,20,50,100])
Utworzylismy tym samym liste wszystkich rozwiazan. Wyswietlmy jej zawartosc.
sage: kwota230.list()
Mamy tu wszystkie 52 rozwiazania, czyli |Ω| = 52. Wyswietlmy teraz tylko te rozwiazania, w których
kazdy nominał został uzyty.
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, ze sa tylko cztery takie rozwiazania, czyli |A| = 4 oraz
P (A) =4
52=
1
13.
111
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
3.2 Statystyka
3.2.1 Srednia arytmetyczna
Jak wspomniałem we wstepie, statystyka zajmuje sie analiza danych oraz metodami pozyskiwania
i prezentacji tych danych. Sadze, ze jedna miare statystyczna kazdy z czytelników zna, gdyz jest to
srednia arytmetyczna. Najprostsza miara, która daje nam pewne informacje o typowych wartosciach
badanej grupy danych. Wiemy, ze dla danych d1, d2, . . . , dn obliczamy ja wzorem
Sa =d1 + d2 + . . .+ dn
n.
Utwórzmy sobie w programie Sage troche przykładowych danych do obliczen.
[13, 5, 16, 12, 9, 17, 8, 23, 11, 24, 15, 21, 7, 8, 17, 23, 13, 16, 17, 20, 21, 14, 16, 22]
Srednia arytmetyczna tych liczb obliczymy poleceniem
sage: Sa = mean(Dane); Sa
wynik:46
3
Zatem
Sa =46
3.
Sprawdzmy, ile wynosi liczba naszych danych
sage: n = len(Dane); n
wynik: 24
Czyli liczba elementów naszego zbioru to n = 24. Czesto sie zdarza, ze zadna z danych nie przyjmuje
wartosci równej sredniej, jak w naszym przypadku. Widzimy, ze dane sa dosc mocno rozrzucone, tzn.
jest duza rozbieznosc miedzy najmniejsza wartoscia, a najwieksza.
sage: Dmin = min(Dane); print ’Dmin=’, Dmin
sage: Dmax = max(Dane); print ’Dmax=’, Dmax
wynik: Dmin = 5 wynik: Dmax = 24
Ogólnie srednia arytmetyczna nie mówi nam, ze wszystkie czy wiekszosc wartosci naszych danych sa
bliskie tej sredniej lecz, ze połozenie srodka tych danych lezy w jej poblizu.
112
3.2. STATYSTYKA
Pamietamy przeciez z geometrii jak wyznacza sie srodek S odcinka na osi liczbowej o koncach A = xA
oraz B = xB . Jest to punkt
xS =xA + xb
2,
czyli srednia arytmetyczna konców tego odcinka.
3.2.2 Odchylenie standardowe i wariancja
Dosc dobra miara, mówiaca nam jak bardzo dane sa oddalone od sredniej arytmetycznej, jest odchylenie
standardowe. Im mniejsza jest wartosc odchylenia standardowego, tym dane sa mniej rozrzucone.
Ogólny wzór dla danych d1, d2, . . . , dn jest nastepujacy
σ =
√(d1 − S)2 + (d2 − S)2 + . . .+ (dn − S)2
n=
√d21 + d22 + . . .+ d2n
n− S2.
Odchylenie standardowe jest scisle zwiazane z innym pojeciem statystycznym, wariancja. Wariancja
jest kwadratem odchylenia standardowego i oznaczamy ja symbolem σ2, czyli
σ2 =(d1 − S)2 + (d2 − S)2 + . . .+ (dn − S)2
n=
d21 + d22 + . . .+ d2nn
− S2.
Zobaczmy jak wygladaja te dwie wielkosci dla naszych danych.
sage: OdchStand = std(Dane); OdchStand
wynik:
√2098
69
Zapiszmy wynik w postaci numerycznej.
sage: N(OdchStand, digits=4)
wynik: 5.514
Mozemy wiec stwierdzic, ze dane sa srednio o 5.5 oddalone od sredniej arytmetycznej.
Aby obliczyc wariancje, wystarczy ostatni wynik podniesc do kwadratu. Sage posiada do tego celu
funkcje variance.
sage: Wariancja = variance(Dane); Wariancja
wynik:2098
69
113
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
3.2.3 Srednia geometryczna
Znacie zapewne ze szkoły jeszcze srednia 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 wysokosci trójkata prostokatnego
opuszczonej z wierzchołka kata prostego, tzn.
a
bh
Poniewaz cały trójkat jest podobny do
tych mniejszych trójkacików prostokat-
nych, które utworzyła nam wysokosc,
wiech
a=
b
h.
Po przekształceniu otrzymujemy
h =√a · b.
Inna interpretacja mówi, ze srednia geometryczna jest równa długosci odcinka łaczacego srodki ramion
trapezu o podstawach a i b, tzn.
a
√a · b
b
Ogólny wzór na srednia geometryczna dla danych d1, d2, . . . , dn wyglada nastepujaco:
Sg =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łasnie oblicza srednia geometryczna. Sprawdzmy, ile ona
wynosi dla naszych danych.
sage: import scipy.stats as stats
sage: Sg = stats.gmean(Dane); Sg
114
3.2. STATYSTYKA
wynik: 14.2211529148
3.2.4 Mediana
Kolejna miara wykorzystywana w statystyce jest mediana. Najprosciej mozna powiedziec, ze jest to
wartosc lezaca po srodku danych, które sa uporzadkowane niemalejaco. Gdy liczba danych jest nieparzy-
sta, to bierzemy poprostu srodkowy element. Jesli liczba danych jest parzysta, to oczywiscie srodkowego
elementu nie ma, zamiast niego bierzemy srednia arytmetyczna dwóch elementów srodkowych. Zatem
dla n nieparzystych: Me = dn+12
, a dla dla n parzystych: Me =dn
2+ dn
2 +1
2.
Przypomnijmy, ze liczba danych w naszym przykładzie wynosi
sage: n = len(Dane); n
wynik: 24
Jest to liczba parzysta, wiec mediana jest równa sredniej arytmetycznej wyrazów d12 i d13 danych
uporzadkowanych. Aby posortowac je w porzadku niemalejacym wystarczy wydac 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]
Sprawdzmy, 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ócmy uwage, ze zmniejszyłem indeksy o jeden. Zrobiłem to dlatego, iz Sage rozpoczyna numero-
wanie 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
2= 16
W Sage-u mamy gotowa funkcje liczaca mediane o nazwie median.
sage: Me = median(Dane); Me
wynik: 16
115
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
3.2.5 Dominanta
W statystyce wykorzystuje sie jeszcze wiele innych miar, jednakze nie bede o nich teraz pisał. W szkole
sredniej mogliscie poznac jeszcze jedna z nich, tzw. dominante, inaczej zwana mode. Dominanta, jak
nazwa wskazuje, jest to wartosc, która dominuje, czyli najczesciej wystepuje w rozwazanych danych.
Zatem, aby ja znalezc, nalezy zliczyc ilosc wystapien kazdej wartosci w danych, a nastepnie wybrac te
najczesciej sie pojawiajaca.
Wydajmy w Sage-u nastepujace polecenia:
sage: for d in Dane:
print ’liczba wystapien wartosci ’, d,\
’ w naszych danych, to: ’, Dane.count(d)
Zobaczymy nastepujace informacje:
Widzimy, ze najczesciej wystepujacymi wartosciami sa 16 i 17. Obie wystapiły trzykrotnie. Zatem
przyjmujemy, ze dominantami naszego zbioru danych sa liczby 16 i 17. Mamy do dyspozycji tez gotowe
polecenie: mode.
sage: mode(Dane)
wynik: [16, 17]
116
3.2. STATYSTYKA
3.2.6 Grupowanie i prezentacja danych statystycznych
Dane statystyczne czesto grupowane sa wzgledem powtarzajacych sie wartosci i zapisywane w tabelce.
Ułatwia to wiele obliczen, miedzy innymi dominante otrzymujemy natychmiast. Zapiszmy w ten sposób
nasze dane.
Wartosc 5 7 8 9 11 12 13 14 15 16 17 20 21 22 23 24
Liczba powtórzen 1 1 2 1 1 1 2 1 1 3 3 1 2 1 2 1
Srednia arytmetyczna liczymy wtedy wzorem na tzw. srednia wazona, czyli dzielimy sume iloczynów
wszystkich kolumn naszej tabeli przez sume drugiego wiersza.
Sa =5 · 1 + 7 · 1 + 8 · 2 + . . .+ 24 · 1
1 + 1 + 2 + . . .+ 1=
368
24=
46
3.
W takiej tabelce bardzo łatwo zlokalizujemy dominante lub dominanty. Widzimy, ze 16 i 17 powtarzaja
sie najczesciej, a dokładnie po trzy razy czyli sa to dominanty naszego zbioru danych. Dane statystyczne
grupujemy czesto w odpowiednie przedziały.
Wspomniałem wczesniej, ze statystyka zajmuje sie tez prezentowaniem danych. Najczesciej uzywanym
sposobem prezentacji jest histogram. Obrazuje on przy pomocy wykresu rozkład liczebnosci badanych
danych w ustalonych przedziałach.
Przykład 10. Nauczyciel wychowania fizycznego przeprowadził wsród chłopców pewnej
klasy konkurs skoków w dal. Wyniki skoków (w metrach) sa nastepujace:
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 dostepna funkcje hist, która słuzy do gene-
rowania histogramów. Aby skorzystac z tej funkcji nalezy dane pogrupowac w odpowiednie przedziały.
Mozemy to zrobic nastepujaco:
Długosc 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, ze wyniki zawieraja sie w przedziale od 2.7 do 5.03 metra. Podzieliłem długosc tego prze-
działu, tzn. 5.03 − 2.7 = 2.33 przez liczbe mozliwych ocen, czyli 1 − 6, dzieki czemu otrzymałem
długosc przedziału 2.33/6 ≈ 0.38.
117
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Mozemy juz wygenerowac 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()
Najwazniejszymi argumentami funkcji hist sa: lista danych v, liczba przedziałów bins=6 oraz zakres
danych range=(2.7, 5.03).
Widzimy, ze czworo uczniów oddało skok długosci z przedziału 〈3.09, 3.47〉 czyli otrzymali ocene
dostateczna. Najwieksza liczba uczniów (dziewiecioro) oddała skok z przedziału 〈3.48, 3.86〉 na ocene
dostateczna, itd.
118
3.2. STATYSTYKA
Prostsza forma prezentowania danych statystycznych jest zwykły wykres słupkowy. Uzywamy go
wówczas gdy nie chcemy grupowac danych. Wezmy nastepujacy przykład:
Przykład 11. Ponizsza 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
Sporzadz wykres słupkowy ilustrujacy rozkład ocen z tego sprawdzianu.
Do sporzadzania wykresów słupkowych mamy funkcje bar_chart Dla naszych danych wystarczy
wydac polecenie:
sage: bar_chart([1,5,7,8,4,3], width=1)
0 1 2 3 4 5 6
1
2
3
4
5
6
7
8
Jako pierwszy parametr przekazałem liste liczby uczniów, którzy otrzymali odpowiednie oceny. Ponie-
waz lista ta składa sie szesciu elementów, czyli tyle ile mozliwych ocen, wiec jako drugi parametr usta-
wiłem width=1, co powoduje, ze szerokosc słupka bedzie wynosiła dokładnie tyle ile skok do oceny
wyzszej. Z wykresu odczytujemy, ze ocene niedostateczna otrzymał jeden uczen, dopuszczajaca ocene
otrzymało piecioro uczniów, itd.
119
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Na koniec tego podrozdziału rozwiazmy jeszcze dwa przykłady.
Przykład 12. Ponizsza tabela zawiera informacje o ilosci przeczytanych ksiazek w ciagu jednegoroku szkolnego przez uczniów pewnej klasy.
Odpowiedz na pytania:
1. Jaka srednia ilosc przeczytanych ksiazek przypadała na jednego ucznia tej klasy?
2. Jak duze było odchylenie liczby przeczytanych ksiazek od tej sredniej?
3. Ilu uczniów przeczytało wiecej ksiazek niz srednia?
4. Jaka była mediana i dominanta przeczytanych ksiazek tego roku?
5. Naszkicuj histogram na podstawie tych danych.
W rozwiazaniu pomozemy sobie programem Sage. Najpierw musimy zdefiniowac dane. Mozna to zrobic
na kilka sposobów. Jeden najprostszy, to utworzyc recznie liste ksiazek 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]
Mozna tez najpierw stworzyc liste par (liczba_uczniw, liczba_ksiaek) na podstawie tabeli,
a nastepnie przekształcic ja do postaci jak wyzej. Mozemy to zrobic 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 bedzie 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 moze troche skomplikowany na pierwszy rzut oka. Zauwazmy jednak, ze gdyby
uczniów było duzo wiecej oraz liczba ksiazek przypadajaca na jednego ucznia byłaby wieksza, to z
pewnoscia wypisywanie wszystkich elementów tej listy byłoby uciazliwe.
120
3.2. STATYSTYKA
Wyobrazmy sobie, ze mamy analogiczne zadanie, lecz dane bierzemy z kilku lat oraz dla uczniów całej
szkoły. Wyobrazacie sobie zapewne jak wiele pracy mielibysmy wtedy z budowa takiej listy. Powyzsze
instrukcje wykonaja to zadanie tak szybko jak dla naszej niewielkiej ilosci danych. Skoro mamy juz dane
wprowadzone, mozemy zaczac rozwiazywac zadanie.
Ad. 1. Srednia liczba przeczytanych ksiazek przez jednego ucznia, to
sage: S = mean(dane)
sage: N(S, digits=4)
wynik: 6.955
S =153
22= 6.955.
Ad. 2. Odchylenie liczby przeczytanych ksiazek od tej sredniej wynosi:
sage: Std = std(dane)
sage: N(Std, digits=4)
wynik: 3.860
σ = 3
√255
154= 3.860.
Ad. 3. Liczba uczniów, którzy przeczytali wiecej ksiazek niz srednia klasy, to 11. Liczbe te mozemy
łatwo znalezc zliczajac po prostu liczby nie mniejsze od 6.955. A gdyby danych było duzo wiecej 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 ilosci danych mielibysmy, mimo wszystko,
sporo pracy.
121
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Mozna jednak wykorzystac 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
Otrzymalismy wiec
liczba_el = 11.
Przeszlismy przez liste danych (z naszego zadania) podstawiajac kolejne jej elementy do zmiennej x i
sprawdzamy czy ten element jest wiekszy lub równy od sredniej. Jesli tak to zwiekszamy przygotowana
wczesniej zmienna liczba_el o jeden. W tym przypadku zbadanie 20 elementów czy 2000 nie zrobi
programowi zapewne wielkiej róznicy.
Ad. 4. Dominante znajdziemy przygladajac sie tabelce podanej w tresci zadania. Widzimy, ze jest nia 9,
która wystapiła az osiem razy. Mamy 22 dane, wiec mediana jest równa
Me =d11 + d12
2=
15
2= 7.5.
Ad. 5. Sporzadzmy histogram za pomoca programu Sage.
2 4 6 8 10 12 14
1
2
3
4
5
6
7
8
122
3.2. STATYSTYKA
Otrzymałem go za pomoca polecen:
sage: d = finance.TimeSeries(dane)
sage: d.plot_histogram(bins=6,fill=False,normalize=False)
Przykład 13. Ponizszy diagram przedstawia dane dotyczace liczby godzin nieobecnosci
uczniów pewnej klasy w miesiacu listopadzie. Os pozioma reprezentuje liczbe godzin, na-
tomiast pionowa liczbe uczniów.
Utwórz analogiczna tabelke, jak w tresci poprzedniego przykładu, tj.
Dane z histogramu odczytujemy nastepujaco:
– liczbe opuszczonych godzin w przedziale 〈0, 5) miało 8 uczniów,
– liczbe opuszczonych godzin w przedziale 〈5, 10) miało 12 uczniów,
– liczbe opuszczonych godzin w przedziale 〈0, 5) miało 9 uczniów, itd.
Jak zwykle, podczas rozwiazywania, bede 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]
123
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Teraz mozemy utworzyc tabelke poleceniami:
sage: naglowek = [’Liczba godzin’,’Liczba uczni w’]
sage: html.table([(liczba_godzin[i], liczba_uczniow[i])\
for i in [0..7]], header = naglowek)
Gdybysmy chcieli wykonywac inne obliczenia statystyczne, warto byłoby utworzyc sobie liste godzin
wszystkich uczniów. Mozna ja przygotowac za pomoca nastepujacych polecen:
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
Ponizsze zadania prosze spróbowac rozwiazac z pomoca programu Sage.
1. Oblicz, ile przekatnych ma dwunastokat foremny.
2. Zapomnielismy PIN-u do naszego telefonu. Wiemy, ze składał sie z czterech cyfr. Przypominamy
sobie tylko, ze składał sie on z cyfr nastepujacego zbioru
0, 3, 4, 6, 8, 9.
124
3.3. ZADANIA
Ile maksymalnie prób nalezałoby wykonac, aby odgadnac PIN?
3. Na ile sposobów mozemy wybrac trójke klasowa, tak aby były w niej dwie dziewczeta i jeden
chłopiec? Wiemy, ze klasa liczy 32 uczniów, wsród których jest 14 dziewczat.
4. Przestawiamy w sposób losowy cyfry liczby 123452345. Jakie jest prawdopodobienstwo, ze takie
same cyfry beda stały obok siebie?
5. Rzucamy piec razy symetryczna moneta. Jakie jest prawdopodobienstwo, ze za pierwszym i za
piatym razem wypadnie orzeł?
6. Mama upiekła 6 zupełnie róznych babeczek. Na ile sposobów moze je rozdac swoim dzieciom
Alicji i Bolkowi, aby kazde z nich otrzymało tyle samo babeczek?
7. Rozwiaz równania w zbiorze liczb całkowitych nieujemnych
(a) a+ b+ c+ d+ e = 15, (b) 2a+ 3b+ 4c+ 5d = 17.
8. Piec kobiet i pieciu mezczyzn zasiada przy okragłym stole. Jakie jest prawdopodobienstwo, ze
mezczyzni nie usiada obok siebie?
9. Igor w dniu swoich imienin zabiera do przedszkola 30 cukierków, aby podzielic sie nimi z ko-
legami, kolezankami oraz pania. Jakie jest prawdopodobienstwo, ze kazdy otrzyma przynajmniej
dwa cukierki, jezeli grupa przedszkolna liczy 12 dzieci?
10. Jakie jest prawdopodobienstwo, ze z losowo wybranych trzech liczb danego zbioru
1, 2, 3, 4, 5, 6, 7
bedzie mozna utworzyc trójkat?
11. Kupilismy 8 ksiazek i chcemy je ułozyc na trzech półkach naszej biblioteczki. Na pierwszej półce
mamy juz 25 ksiazek, na drugiej 24, a na trzeciej 27. Jakie jest prawdopodobienstwo, ze układajac
te ksiazki losowo na tych trzech półkach, na kazdej z nich bedzie tyle samo ksiazek?
12. Ponizsza tabela zawiera informacje o ilosci przejechanych kilometrów przez pewnego rowerzyste
w miesiacu lipcu.
125
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
Odpowiedz na pytania:
(a) Ile srednio kilometrów przejechał w ciagu dnia ten rowerzysta?
(b) Jak duze było odchylenie liczby przejechanych kilometrów od sredniej?
(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]]
Oblicz dla tych danych:
(a) Srednia arytmetyczna i geometryczna.
(b) Mode i mediane.
(c) Odchylenie standardowe.
(d) Sporzadz histogram.
126
3.3. ZADANIA
ODPOWIEDZI
1. 54.
2. W 46 = 64 = 1296.
3. C214 · C1
18 =(142
)·(181
)= 1638
4. |Ω| = 9!, |A| = 5!, P (A) = 13024
.
5. |Ω| = 25 = 32, |A| = 23 = 8, P (A) = 14.
6. C36 = 20.
7. (a) K515 =
(15+5−1
5
)= 3876. (b) 18.
8. |Ω| = 10!10
, |A| = 2 · 5!5
, P (A) = 17560
.
9. |Ω| = 11058116888, |A| = 1820, P (A) = 530379442
.
10. |Ω| = 35, |A| = 13, P (A) = 1335
.
11. |Ω| = 45, |A| = 6, P (A) = 215
.
12.
13.
127
ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA
128
Rozdział 4
Stereometria
4.1 Bryły platonskie
Geometria jest jedna z najstarszych dziedzin matematyki. Wiekszosc odnalezionych starozytnych tek-
stów matematycznych siegajacych prawie 2000 lat p. n. e. zawiera miedzy innymi twierdzenie Pitago-
rasa. Pitagoras jest uznawany za jednego z najwiekszych matematyków starozytnosci. Wiemy, ze badał
figury płaskie, jak wiekszosc ówczesnych filozofów zajmujacych sie matematyka. Jednakze uznaje sie,
ze jako pierwszy zaczał badac zasady budowy wieloscianów foremnych, które sam nazywał figurami
kosmicznymi.
Istnieje tylko piec wieloscianów foremnych. Wynika to z faktu, ze dowolny róg wieloscianu foremnego
składa sie przynajmniej z trzech scian i suma katów płaskich tych scian przy tym wierzchołku jest
mniejsza niz 3600.
I tak za pomoca trójkata równobocznego mozemy otrzymac czworoscian (łacinska nazwa, to tetraedr).
Przy kazdym narozniku mamy 3 · 600 = 1800 < 3600. Narysujemy go w programie Sage poleceniem
tetrahedron.
sage: tetrahedron()
Skoro 4 · 600 = 2400 < 3600, wiec istnieje wieloscian, którego kazdy róg zbudowany jest z czterech
trójkatów. Jest nim osmioscian (łac. oktaedr).
sage: octahedron(frame=False, \
color=[’red’,’green’,’blue’,’yellow’])
129
ROZDZIAŁ 4. STEREOMETRIA
Rys. 4.1: Czworoscian - tetrahedron.
Rys. 4.2: Osmioscian - octahedron.
Aby ukryc obramowanie otaczajace bryłe, które odpowiada trójwymiarowemu układowi współrzed-
nych, uzywamy opcji frame=False. W notatniku programu Sage, po wygenerowaniu rysunku poka-
zuje sie nam dodatkowy przycisk Make interactive, po kliknieciu którego mozna bryłe obracac
za pomoca myszki. Jest to dobry sposób, aby przyjrzec sie dokładniej niektórym szczegółom danej
bryły. Na powyzszych rysunkach widzicie cały czas ten sam osmioscian, tylko z róznych perspektyw.
Ostatni z prawej rysunek, otrzymalismy za pomoca specjalnej metody stickers, która powoduje
rozsuniecie scian bryły. Stosujemy ja nastepujaco:
sage: octahedron(color=[’red’,’green’,’blue’,’yellow’],\
frame=False).stickers(0.2, 0.2)
130
4.1. BRYŁY PLATONSKIE
Za pomoca trójkatów równobocznych mozna zbudowac jeszcze jeden wieloscian foremny – dwu-
dziestoscian (łac. ikosaedr). W tym przypadku, naroznik zbudowany jest za pomoca pieciu trójkatów
5 · 600 = 3000 < 3600. Wiecej z pomoca trójkatów nie da sie zbudowac wieloscianów foremnych, gdyz
6 · 600 = 3600 ≥ 3600.
Rys. 4.3: Dwudziestoscian - icosahedron.
Powyzsze rysunki mozna otrzymac za pomoca polecen:
sage: icosahedron(frame=False)
sage: icosahedron(frame=False).stickers(0.07, 0.07)
Za pomoca kwadratu mozemy zbudowac jedynie szescian (łac. heksaedr), gdyz 3 · 900 = 2700 < 3600,
ale z czterech kwadratów jest to juz nie mozliwe, gdyz (4 · 900 = 3600 ≥ 3600). Do narysowania
czworoscianu słuzy polecenie cube.
sage: cube(color=[’red’,’blue’,’green’],frame=False)
Ostatnim odkrytym wieloscianem foremnym był dwunastoscian (łac. dodekaedr). Budujemy go za
pomoca pieciokata foremnego.
sage: dodecahedron(frame=False)
sage: dodecahedron(frame=False).stickers(0.5, 0.5)
Filozof grecki Platon traktował wielosciany foremne w szczególny sposób, tzn. porównywał je z zywio-
łami. Czworoscianowi przypisywał ogien, szescianowi Ziemie, osmioscianowi powietrze, a dwudziesto-
scianowi wode.
131
ROZDZIAŁ 4. STEREOMETRIA
Rys. 4.4: Szescian - cube.
Rys. 4.5: Dwunastoscian - dodecahedron.
Dwunastoscian traktował jako cos, co łaczy wszystko – utozsamiał go z Wszechswiatem. Z tego powodu
wielosciany foremne czesto okresla sie mianem brył platonskich. Jednak nie on był ich odkrywca, lecz
starozytny matematyk grecki Teajtetos.
4.2 Graniastosłupy i ostrosłupy
Dzis dział geometrii zajmujacy sie badaniem brył w przestrzeni nazywamy stereometria. W szkole
poznaliscie zapewne piec rodzajów brył: graniastosłupy, ostrosłupy, walce, stozki oraz kule.
Dowolny wieloscian mozemy narysowac w programie Sage za pomoca funkcji Polyhedron. Jednakze
funkcja ta wymaga od nas podania wierzchołków podstaw rysowanego graniastosłupa. Narysuje za
pomoca tej funkcji graniastosłup szesciokatny, 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),
132
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
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).
Rys. 4.6: Graniastosłup szesciokatny.
Minusem tej metody jest to, ze musimy sami definiowac listy punktów bedacych wierzchołkami wielo-
scianu. Przyjrzyjmy sie uwaznie powyzszym listom. Widzimy, ze kazdy punkt pierwszej podstawy ma
trzecia współrzedna równa zero. Oznacza to, ze lezy ona w płaszczyznie Oxy. Druga podstawa jest kopia
pierwszej, tylko trzecia współrzedna kazdego punktu wynosi 2. Otrzymalismy tym samym graniasto-
słup prosty, tzn. jego sciany boczne sa prostokatami. Aby zbudowac graniastosłup, mozemy najpierw
zdefiniowac liste wierzchołków wielokata na płaszczyznie (co jest zadaniem łatwym), a nastepnie doło-
zyc do kazdego punktu trzecia współrzedna raz 0, a raz liczbe niezerowa, np. 2. Zobaczmy jak wygladaja
punkty pierwszej podstawy powyzszego graniastosłupa na płaszczyznie.
133
ROZDZIAŁ 4. STEREOMETRIA
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’)
-1 1 2 3
1.5
3
Najpierw uzyłem funkcji point do zaznaczenia punktów w układzie współrzednych. Opcja
gridlines=True powoduje, ze widoczna jest siatka (przerywane cienkie linie), natomiast opcja
size regulujemy wielkosc kropek. Nastepnie połaczyłem wszystkie punkty linia poleceniem line.
Opcja thickness sterujemy gruboscia linii.
Mysle, ze bez problemu kazdy z czytelników potrafiłby zdefiniowac liste punktów podstaw dla grania-
stosłupa trójkatnego, czworokatnego czy pieciokatnego.
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’)
Najpierw zdefiniowałem wierzchołki podstawy oraz wierzchołek ostrosłupa. Pierwsze dwie współ-
rzedne wierzchołka wyznaczyłem jako srodek masy1 podstawy, czyli prostokata o wierzchołkach
(0, 0), (3, 0), (3, 2), (0, 2). Obracajac odpowiednio ten ostrosłup w notatniku Sage mozemy zobaczyc,
ze wierzchołek istotnie lezy nad srodkiem podstawy.
Dodatkowo w funkcji show uzyłem opcji opacity, która daje efekt przezroczystosci (im blizsza
wartosc zeru, tym wieksza przezroczystosc). Dzieki funkcji Polyhedron mozemy łatwo i szybko1Współrzedne srodka masy wielokata wypukłego na płaszczyznie wyznaczamy jako srednie arytmetyczne współrzednych
jego wierzchołków.
134
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
Rys. 4.7: Ostrosłup czworokatny.
rysowac bardzo wymyslne wielosciany, nawet w przestrzeni czterowymiarowej. Narysujmy przykładowo
szescian, do którego doklejono ostrosłup o podstawie takiej samej jak sciana szescianu.
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 zadan.
135
ROZDZIAŁ 4. STEREOMETRIA
Problem ten mozna rozwiazac rysujac wieloscian samodzielnie za pomoca funkcji line3d ewentualnie
polygon3d słuzacych do rysowania linii oraz wielokatów w przestrzeni trójwymiarowej. Narysujmy
np. graniastosłup pieciokatny.
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 – „wysokosc”, tzn. trzecia współrzedna wierzchołków jednej
z podstaw. Nastepnie definiujemy listy wierzchołków podstaw. Wystarczy teraz połaczyc 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)
Powinnismy zobaczyc graniastosłup taki jak na rysunku 4.8.
Juz wyjasniam powyzsze polecenia. Otóz gr5 = None powoduje utworzenie pewnego obiektu o na-
zwie gr5, ale na razie niczego mu nie przypisujemy. Pózniej bedzie tam zapisany nasz graniastosłup.
136
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
Rys. 4.8: Graniastosłup pieciokatny.
Nastepnie instrukcja for i in range(0,5): powoduje, ze zmienna i przyjmuje kolejno wartosci
0, 1, 2, 3, 4 i za kazdym 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 koncach [0, 0, 0], [0, 0, 2],
[vp1[1], vp2[1]] oznacza odcinek o koncach [2, 0.5, 0], [2, 0.5, 2], itd.
az do [vp1[4], vp2[4]] oznacza odcinek o koncach [−1, 2, 0], [−1, 2, 2].
Ostatecznie rysujemy obramowanie podstaw przechodzac po sasiednich wierzchołkach. Zauwazmy, ze
uzyłem operatora %, który w wyniku zwraca reszte z dzielenia liczby stojacej z lewej strony przez liczbe
stojaca z prawej, tzn. (i+1)% 5. Zobaczmy, jak wygladaja wartosci tego wyrazenia dla i przechodza-
cego 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.
Uzyłem tego operatora dlatego, aby połaczyc 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)
137
ROZDZIAŁ 4. STEREOMETRIA
Mozna tez poleceniem text3d opisac 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 wiec, ze mozemy łatwo tworzyc bryły i je modyfikowac. Poniewaz nie ma gotowej funkcji,
która potrafi rysowac dowolne graniastosłupy z mozliwoscia pokazywania przekatnych oraz opisywa-
niem wierzchołków, postanowiłem taka funkcje napisac.
138
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
Definicje tej funkcji mozecie zobaczyc w dodatku A. Jest ona równiez zdefiniowana w notatniku pro-
gramu Sage dołaczonym do tej ksiazki. 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 pieciokatny, taki jak we wczesniejszym przykładzie. Na kolejnych
rysunkach widac ten sam graniastosłup po uzyciu opcji pokazujacych odpowiednie przekatne. Nary-
sujmy tez 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 mozemy dodac sterowanie kolorami scian i podstaw czy tez oznaczac pewne przekroje tych
graniastosłupów. Zostawiam to zadanie jako cwiczenie dla czytelnika.
Rozwiazmy teraz kilka zadan z graniastosłupami.
139
ROZDZIAŁ 4. STEREOMETRIA
Przykład 1. Oblicz pole powierzchni całkowitej graniastosłupa prawidłowego czworokat-
nego, którego przekatna długosci 5 cm jest nachylona do podstawy pod katem 600.
Wiemy, ze kat miedzy przekatna graniastosłupa prawidłowego, a płaszczyzna podstawy to kat, jaki
tworzy ta przekatna z przekatna podstawy. Narysujmy graniastosłup czworokatny z widoczna przekatna
główna i przekatna podstawy.
sage: g = graniastoslup(4,przekatne_gr=True)
sage: g.show(frame=False)
Z danych wynika, ze ](A3, A1, B3) = 600 oraz |A1B3| = 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.
Kazdy, kto rozwiazywał zadania ze stereometrii czy planimetrii w szkole sredniej z pewnoscia dosyc
czesto miał z nim stycznosc. Warto znac jego podstawowe własnosci. Narysowałem go poleceniami:
sage: v= [[0,0], [2,0], [2,2*sqrt(3)] ]
sage: tr = polygon(v, fill=False)
140
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
oraz dodałem odpowiedni opis funkcja text.
sage: tr = tr \
+ text(r"$a\sqrt3$",[3.33, 2], fontsize=14)\
+ text(r"$60^0$",[0.33, 0.15], fontsize=14)\
+ 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 obliczyc pole powierzchni całkowitej potrzebujemy długosci krawedzi podstawy oraz wysokosc
tego graniastosłupa. Przyjmijmy oznaczenia,
b = |A1A2| = |A2A3| = |A3A4| = |A4A1|, H = |A1B1| = |A2B2| = |A3B3| = |A4B4|.
Wtedy
P = 2b2 + 4bH,
tzn. siatka tego graniastosłupa składa sie z dwóch kwadratów o boku b oraz czterech prostokatów
o wymiarach b×H .
W pierwszym rozdziale dowiedzieliscie sie jak definiujemy funkcje w programie Sage. Przygotujmy
wiec sobie funkcje , za pomoca której pózniej obliczymy szukane pole.
sage: var(’b,H’)
sage: P(b,H) = 2*b^2 + 4*b*H
Z własnosci trójkata A1, B3, A3 mozemy obliczyc wysokosc |A3B3| = H . Skoro
2a = |A1B3| = 5 cm
wiec a = 2.5 cm oraz
H = a√3 = 2.5
√3 cm.
Odcinek a = |A1A3| = 2.5 cm jest przekatna kwadratu o boku b, zatem b√2 = 2.5 (przekatna
141
ROZDZIAŁ 4. STEREOMETRIA
kwadratu o boku b ma długosc b√2). Stad
b =2.5√2=
5√2
4cm.
Mozemy juz obliczyc pole powierzchni całkowitej graniastosłupa
sage: b = 5*sqrt(2)/4
sage: H = 5*sqrt(3)/2
sage: P(b,H)
wynik:25
8
√2(4√3 +
√2)
Przykład 2. W graniastosłupie prawidłowym szesciokatnym długosc krótszej przekatnej
podstawy wynosi 3 i jest dwa razy krótsza od dłuzszej przekatnej tego graniastosłupa. Oblicz
objetosc 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, ze |A2A4| = 3 oraz
|A2B5| = 2|A2A4| = 6.
Oznaczmy sobie literka a długosc boku szesciokata foremnego podstawy, np. a = |A1A2| oraz litera
142
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
H wysokosc tego graniastosłupa, np. H = |A4B4|. Jak wiemy szesciokat foremny składa sie z szesciu
identycznych trójkatów równobocznych.
a
a
a
600
a√3
Zatem pole powierzchni całkowitej i objetosc graniastosłupa obliczymy za pomoca wzorów
P = 2 · Pp + Pb = 2 · 6 · a2√3
4+ 6 · a ·H = 3a2
√3 + 6aH,
oraz
V = Pp ·H = 6 · a2√3
4·H =
3a2√3
2H.
Skorzystalismy tu ze wzoru na pole trójkata równobocznego o boku a, tzn. a2√3
4. Widzimy na powyz-
szym rysunku, ze
|A2A4| = a√3 = 3.
Zatem a =√3. Musimy jeszcze obliczyc wysokosc graniastosłupa. Wystarczy zastosowac twierdzenie
Pitagorasa do trójkata A2, A5, B5:
|A2A5|2 + |A5B5|2 = |A2B5|2.
Poniewaz |A2A5| = 2a = 2√3, |A2B5| = 6 i |A5B5| = H , wiec
(2√3)2
+H2 = 62 ⇒ H =√36− 12 =
√24 = 2
√6.
W Sage-u mozemy go rozwiazac nastepujaco:
sage: var(’H’); assume(H>0);
sage: solve( (2*sqrt(3))^2 + H^2 == 6^2, H)
wynik:[H = 2
√6]
143
ROZDZIAŁ 4. STEREOMETRIA
Wiecej wiadomosci na temat rozwiazywania równan dowiecie sie w rozdziale 4. Chciałbym zwrócic tu
uwage na instrukcje assume(H > 0). Powoduje ona, ze zmienna H moze przyjmowac tylko wartosci
dodatnie (jest to przeciez długosc odcinka). Zapewne zauwazyliscie, ze bez tej instrukcji program
zwróciłby dwa rozwiazania.
sage: var(’H’)
sage: solve( (2*sqrt(3))^2 + H^2 == 6^2, H)
wynik:[H = −2
√6, H = 2
√6]
Aby Sage zapomniał o wczesniejszych załozeniach nalezy wydac polecenie forget().
Wrócmy jednak do naszego zadania. Skoro mamy juz obliczone podstawe a oraz wysokosc H , mozemy
obliczyc pole i objetosc.
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.
Instrukcja simplify_radical() powoduje, ze wyniki sa maksymalnie upraszczane.
Przykład 3. Pole powierzchni całkowitej ostrosłupa prawidłowego trójkatnego wynosi
36√3 i wszystkie jego sciany maja równe pola. Oblicz jego objetosc.
Ostrosłup prawidłowy trójkatny, którego wszystkie sciany maja równe pola musi byc czworoscianem
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)
144
4.2. GRANIASTOSŁUPY I OSTROSŁUPY
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. Zostawie to jako cwiczenie
dla czytelnika.
Skoro jest to czworoscian foremny, to wszystkie jego krawedzie sa jednakowej długosci. Oznaczmy te
długosc literka a. Wtedy pole całkowite obliczymy wzorem
P = 4 · a2√3
4= 36
√3.
Po uproszczeniu otrzymujemy a = 6.
145
ROZDZIAŁ 4. STEREOMETRIA
Wysokosc czworoscianu mozemy obliczyc korzystajac z własnosci trójkata prostokatnego CSW, gdzie
|CW | = a = 6 natomiast |SC| stanowi 23
wysokosci trójkata równobocznego w podstawie, czyli
|SC| = 2
3· a
√3
2=
2
3· 6
√3
2= 2
√3.
Zatem z twierdzenia Pitagorasa otrzymujemy
H2 + |SC|2 = a2 ⇒ H =
√62 −
(2√3)2
=√36− 12 =
√24 = 2
√6.
Mozemy juz obliczyc objetosc ostrosłupa:
V =1
3PsH =
1
3· 6
2√3
4· 2√6 = 6
√18 = 18
√2.
Wyznaczmy w programie Sage wzór na objetosc czworoscianu foremnego.
sage: var(’a,h,H,Pp’)
sage: Pp = a^2*sqrt(3)/4 #pole podstawy Pp = a2√3
4
sage: h = a*sqrt(3)/2 #wysokosc podstawy h = a√3
2
sage: H = sqrt(a^2-((2/3)*h)^2) #wysokosc H =√a2 − ( 23h)
2
sage: V = (1/3) * Pp * H
sage: V = V.simplify_radical()
wynik: V =1
12
√2a3.
Mozemy teraz sprawdzic nasze obliczenia wydajac polecenie:
sage: V = V.subs(a = 6)
wynik: V = 18√2.
146
4.3. BRYŁY OBROTOWE
4.3 Bryły obrotowe
Poza wieloscianami, na lekcjach stereometrii z pewnoscia zajmowaliscie sie bryłami obrotowymi,
czyli takimi, które powstaja w wyniku obrotu pewnych figur płaskich. Poznaliscie zapewne trzy rodzaje:
walec, stozek i kule. Narysujmy je w programie Sage.
Poleceniem sphere() narysujemy kule widoczna z lewej strony ponizszego rysunku.
sage: sphere()
Natomiast kula z prawej strony została narysowana za pomoca polecen:
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)
Domyslnie srodek kuli jest w punkcie (0, 0, 0). Opcja size okresla promien kuli. Polecenia
line3d, point3d, text3d juz znacie. Dodatkowo dorysowałem dwa okregi. Pierwszy polece-
niem circle((0,0,0), 1, color=’red’) (o srodku (0, 0, 0) i promieniu 1).
147
ROZDZIAŁ 4. STEREOMETRIA
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łuzy ona do rysowania dowolnych krzywych w przestrzeni. Musimy tylko znac jej równanie. Ja
chciałem narysowac okrag o srodku (0, 0, 0) i promieniu 1, który lezy w płaszczyznie Oyz. Równanie
tego okregu jest postaci:
y2 + z2 = 1
gdzie y, z ∈ 〈−1, 1〉 oraz x ∈ 〈0, 0.03〉. Dlatego dla zmiennej x dałem tak mały przedział, abysmy
zobaczyli okrag. Zobaczmy jak wygladałby ten sam rysunek dla x ∈ 〈−1, 1〉.
Zwrócmy jeszcze uwage na pewien szczegół dotyczacy funkcji show. Otóz, uzyłem tym razem opcji
aspect_ratio=1. Powoduje ona, ze kształt rysowanych figur nie ulegnie deformacji, podczas łacze-
nia kilku figur na jednym wykresie. Spróbujcie wykonac ostatni rysunek bez tej opcji.
Do rysowania stozków równiez mamy zdefiniowana gotowa funkcje o nazwie Cone. Przed skorzysta-
niem z niej musimy dołaczyc biblioteke
from sage.plot.plot3d.shapes import Cone.
Teraz wystarczy wydac polecenie Cone(r,h), gdzie r jest promieniem podstawy oraz h wysokoscia,
np.
sage: Cone(1, 2)
Stozek na ponizszym 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’)
148
4.3. BRYŁY OBROTOWE
Etykiety dodałem za pomoca polecen:
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 juz narysowac, gdyz uzyłem odpowiedniego polecenia podczas kreslenia okregu na
kuli. Chodzi tu o polecenie implicit_plot3d. Narysujmy teraz walec, wyznaczony przez okrag o
równaniu
x2 + y2 = 9,
czyli o srodku w punkcie (0, 0) i promieniu 3.
sage: implicit_plot3d(x^2+y^2-9,\
(x,-4,4),(y,-4,4),(z,-2,0))
Jako cwiczenie pozostawiam czytelnikowi wykonanie takiego walca, jak na rysunku z prawej.
149
ROZDZIAŁ 4. STEREOMETRIA
Przypomnijmy wzory na pola powierzchni oraz objetosci tych brył:
Pole całkowite Objetosc
Walec Pw = πR2 + 2πRH Vw = πR2H
Stozek Ps = πR2 + 2πRt Vs =13πR2H
Kula Pk = 4πR2 Vk = 43πR3
Oznaczenia przyjałem takie, jak na powyzszych rysunkach. Mozemy zdefiniowac sobie te wzory w
programie Sage, co ułatwi pózniejsze rozwiazywanie zadan.
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ównan dowiecie sie wiecej w rozdziale czwartym tej ksiazki. Jednak
chciałbym tu wyjasnic kilka szczegółów. Otóz, powyzszymi instrukcjami utworzylismy sobie szesc
równan, które nazwalismy odpowiednio Pole_walca, Objetosc_walca, Pole_stozka, itd.
Jeszcze raz podkreslam, ze sa to tylko nazwy naszych równan.
150
4.3. BRYŁY OBROTOWE
Teraz mozemy łatwo wyswietlic wzór na pole powierzchni stozka poleceniem
sage: Pole_stozka
wynik: P = πR2 + 2πRt
albo obliczyc objetosc walca o promieniu podstawy 2 i wysokosci 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 mozemy z tych równan wyznaczac inne niewiadome. Przypuscmy, ze w zadaniu podane jest
pole powierzchni całkowitej p i promien r podstawy stozka, tzn.
P = p, R = r.
Wyznaczmy wzór na tworzaca stozka.
sage: solve(Pole_stozka, t)
wynik:
[t = −πR2 − P
2πR
]
Rozwiazmy teraz kilka przykładowych zadan dotyczacych brył obrotowych.
Przykład 4. Oblicz objetosc i długosc tworzacej stozka o promieniu podstawy 3 i polu
powierzchni całkowitej 33π.
Zanim przystapicie do jakichkolwiek obliczen, warto do zadania ze stereometrii sporzadzic odpowiedni
rysunek. Obliczmy najpierw długosc tworzacej tego stozka.
sage: solve(Pole_stozka.subs(P=33*pi,R=3), t)
wynik: [t = 4]
Aby obliczyc objetosc, musimy znac wysokosc tego stozka. Majac promien podstawy r = 3 oraz długosc
tworzacej t = 4 z twierdzenia Pitagorasa zastosowanego do trójkata o bokach R,H, t obliczymy H .
Zatem
H2 +R2 = t2 ⇒ H =√t2 −R2.
sage: H = sqrt(4^2-3^2)
151
ROZDZIAŁ 4. STEREOMETRIA
wynik:√7
Mozemy wiec obliczyc objetosc.
sage: Objetosc_stozka.subs(R=3, H=sqrt(7))
wynik: V = 3√7π
Przykład 5. Kule przecieto dwiema równoległymi płaszczyznami. Promienie r1, r2 kół
uzyskanych w wyniku tych przekrojów oraz odległosc d miedzy nimi sa kolejnymi liczbami
naturalnymi r1, r2, d, a ich suma wynosi 21. Oblicz objetosc kuli.
Wykonajmy na poczatku odpowiedni rysunek.
Przyjmijmy oznaczenia zgodnie z rysunkiem. Zatem d = d1 + d2. Aby obliczyc objetosc kuli musimy
znac jej promien R.
152
4.3. BRYŁY OBROTOWE
Z tresci zadania wynika, ze jesli 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 dac 21, wiec
n+ (n+ 1) + (n+ 2) = 21 ⇒ 3n+ 3 = 21 ⇒ 3n = 18 ⇒ n = 6.
Stad otrzymujemy
r1 = 6, r2 = 7, d = 8.
Zauwazmy teraz, ze dwa trójkaty widoczne na rysunku sa prostokatne. Zatem mozemy do nich zastoso-
wac twierdzenie Pitagorasa, tzn.
r21 + d21 = R2 oraz r22 + d22 = R2.
Prawe strony tych równan sa identyczne, czyli
r21 + 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 + r21 = d22 + r22
Poniewaz d = 8, wiec d2 = 8− d1. Wstawmy do powyzszego równania za d2 wyrazenie 8− d1 oraz za
r1 i r2 obliczone wczesniej wartosci.
sage: rownanie.subs(d2 = 8-d1, r1 = 6, r2 = 7)
wynik: d21 + 36 = (d1 − 8)2+ 49
Otrzymalismy tym samym równanie z jedna niewiadoma d1. Rozwiazmy je:
sage: solve(rownanie.subs(d2=8-d1, r1=6, r2=7), d1)
wynik:
[d1 =
(77
16
)]
153
ROZDZIAŁ 4. STEREOMETRIA
Rozwiazujac to równanie samodzielnie, musielibysmy wykonac nastepujace czynnosci:
62 + d21 = 72 + (8− d1)2,
36 + d21 = 49 + 64− 16d1 + d21,
16d1 = 77,
d1 =77
16.
Teraz, korzystajac z równosci R2 = r21 + d21, mozemy obliczyc promien kuli
sage: assume(R>0)
sage: promien = solve(R^2==6^2+(77/16)^2, R)
wynik:
[R =
1
16
√15145
]
Na koniec objetosc kuli obliczymy poleceniem:
sage: Objetosc_kuli.subs(R=1/16*sqrt(15145))
wynik: V =15145
3072
√15145π
4.4 Zadania
Do kazdego z ponizszych zadan sporzadz odpowiednie rysunki w programie Sage.
1. Wykonaj rysunek szesciokata foremnego taki, jak w rozwiazaniu przykładu 2.
2. Oblicz objetosc graniastosłupa prawidłowego czworokatnego, którego przekatna ma długosc 5 cm
i tworzy z przekatna podstawy kat 300.
3. W graniastosłupie prostym w podstawie znajduje sie trójkat prostokatny, którego boki tworza
proporcje 1 :√3 : 2. Przeciwprostokatna podstawy tworzy z przekatna sciany bocznej kat 450.
Oblicz pole powierzchni i objetosc tego graniastosłupa jesli jego wysokosc wynosi 6.
4. Pole powierzchni bocznej graniastosłupa prawidłowego trójkatnego jest dwa razy wieksze od pola
jednej podstawy. Wysokosc ostrosłupa ma długosc 5. Oblicz pole powierzchni i objetosc tego
graniastosłupa.
5. Graniastosłup prawidłowy szesciokatny ma krótsza przekatna długosci 4√2, która jest dwa razy
dłuzsza od dłuzszej przekatnej podstawy. Oblicz pole powierzchni i objetosc tego graniastosłupa.
154
4.4. ZADANIA
6. Oblicz objetosc graniastosłupa prostego, którego podstawa jest rombem o polu równym 12√13.
Dłuzsza przekatna tego rombu ma długosc 12 i tworzy z przekatna graniastosłupa kat 300. Oblicz
pole powierzchni całkowitej tego graniastosłupa.
7. Podstawa ostrosłupa jest prostokat o wymiarach 4 × 3. Oblicz objetosc tego ostrosłupa wiedzac,
ze stosunek długosci krawedzi bocznej do krawedzi podstawy wynosi 3 : 2.
8. Srodek wysokosci ostrosłupa prawidłowego trójkatnego jest oddalony od sciany bocznej o 5 cm.
Krawedz boczna jest nachylona do płaszczyzny podstawy pod katem 300. Oblicz objetosc i pole
powierzchni całkowitej tego ostrosłupa.
9. Wysokosc ostrosłupa prawidłowego szesciokatnego ma długosc 8 i tworzy ze sciana boczna kat
300. Oblicz objetosc i pole powierzchni całkowitej tego ostrosłupa.
10. Ostrosłup ma w podstawie kwadrat o boku 7 cm i jedna z krawedzi bocznych jest prostopadła do
podstawy. Oblicz objetosc i pole powierzchni całkowitej tego ostrosłupa wiedzac, ze najdłuzsza
krawedz boczna ma długosc 14 cm.
11. Prostokat, którego długosci boków spełniaja proporcje 2 : 3, jest przekrojem osiowym dwóch
walców. Oblicz stosunek objetosci i pól powierzchni tych walców.
12. Stozek o tworzacej długosci 4√3 został przedzielony płaszczyzna prostopadła do wysokosci
stozka, która przedzieliła go na dwie bryły. Jedna z tych brył jest stozkiem o promieniu podstawy
2√3 i powierzchni bocznej trzykrotnie mniejszej od powierzchni wyjsciowego stozka. Oblicz
objetosc bryły, która powstała po podziale i która nie jest stozkiem.
13. Powierzchnia boczna stozka po rozwinieciu jest wycinkiem koła o kacie srodkowym 1200. Oblicz
pole powierzchni całkowitej i objetosc tego stozka, jesli jego tworzaca ma długosc 6.
14. Kule wpisano w stozek, którego wysokosc jest równa 2√3, a promien podstawy wynosi 2. Oblicz
objetosc o pole powierzchni tej kuli.
155
ROZDZIAŁ 4. STEREOMETRIA
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)
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\sqrt3$",[-.35, sqrt(3)], fontsize=14)
sz.show(figsize=4, axes=False)
2. Krawedz podstawy: a = 5√6
4, wysokosc graniastosłupa: H = 2.5, objetosc: V = 375
16.
3. Pp =9√3
2, 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 2
3.
10. Pc = 49(1 +√2 +
√3), V = 343
√2
3.
11. P1P2
= 1621
, V1V2
= 23.
12. V = (2√2− 1)
√21π.
13. Pc = 16π, V = 16√2
3.
14. Pc =48π9
, V = 32√3π
27.
156
Rozdział 5
Dodatek A
Dodatek ten zawiera definicje funkcji pozwalajaca w prosty i szybki sposób rysowac graniastosłupy. Na
przykład, aby narysowac graniastosłup szesciokatny, wystarczy wydac polecenie
sage: g = graniastoslup(6)
sage: g.show()
Aby narysowac graniastosłup n–katny dla n > 6 musimy podac liste wierzchołków jednej podstawy
tego graniastosłupa. Dla uproszczenia ma to byc lista punktów na płaszczyznie. 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 zobaczyc przekatne graniastosłupa nalezy uzyc opcji przekatne_gr=True. Podobnie przekatne
scian bocznych zobaczymy, gdy uzyjemy opcji przekatne_sb=True. Domyslnie sa one ukryte.
sage: g4 = graniastoslup(4,przekatne_gr=True,\
przekatne_sb=True)
sage: g4.show()
157
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 #wysokosc graniastosłupa
#definicja współrzednych wierzchołków dla n = 3, 4, 5 i 6
#dla graniastosłupów n-katnych, gdzie n > 6
#nalezy samemu zdefiniowac liste 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]
#jesli podamy złe paramatery dla, których nie jestesmy w stanie
#narysowac graniastosłup,
# to wyswietlamy te informacje
gr0 = text3d(’Graniastosłup nie istnieje.’, [0,0,0], color=(0,0,0), size=14)
#sprawdzamy, jaka liczbe wierzchołków podał uzytkownik, i na tej podstawie
#definiujemy ich liste: v
if n < 3:
print ’Liczba wierzchołków musi byc wieksza od 2’
return gr0
elif (not n) and (not wierzcholki):
n = 3
if not wierzcholki:
v = dv[0] #domyslnie 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] - pieciokatny,
#v[3] - szesciokatny
else:
if len(wierzcholki) >= n:
v = wierzcholki
158
else:
print ’Liczba wierzchołków musi byc równa ’ , n
return gr0
else:
if not wierzcholki:
print ’Jesli n > 6, to trzeba podac liste wierzchołków’
return gr0
else:
if len(wierzcholki) >= n:
v = wierzcholki
else:
print ’Liczba wierzchołków musi byc wieksza lub \
równa ’ , n
return gr0
#v zawiera liste wierzchołków na płaszczyznie
#na jej podstawie definiujemy dwie podstawy w przestrzeni
#do jednej dodamy współrzedna 0 a do drugiej h - wysokosc
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
#jesli wierzchołków jest wiecej niz n, to bierzemy pierwszych n,
#a reszte wyrzucamy
#potrzebne dla funkcji polygon3d
159
ROZDZIAŁ 5. DODATEK A
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 krawedzie boczne - line3d
for i in range(0,n):
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 srodek masy kazdej z podstaw, aby odsunac 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 ],\
160
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 bedzie mozna zobaczyc 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:
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\
badz dla listy własnych wierzchołków.’
#Opcja przekatne_sb = True bedzie mozna zobaczyc przekatne scian 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)
161
ROZDZIAŁ 5. DODATEK A
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 \
badz dla listy własnych wierzchołków.’
return gr
162
Podsumowanie
Tym sposobem dotarlismy do konca ksiazki. Mam nadzieje, ze informacje w niej zawarte okaza sie uzy-
teczne dla wszystkich czytelników a zarazem stana sie bodzcem do dalszego pogłebiania wiedzy na temat
programu Sage. Widzimy, ze do kazdego działu matematyki omawianego w szkole ponadgimnazjalnej
znajdziemy odpowiednie narzedzia, które z pewnoscia pomoga w zrozumieniu wielu zagadnien czy przy
rozwiazywaniu zadan. Oczywiscie w ksiazce opisałem tylko niewielka ich liczbe, tych najbardziej przy-
datnych w szkole. Jednakze mozliwosci programu sa naprawde ogromne, mozemy wykorzystywac go
do obliczen duzo bardziej zaawansowanych. Mamy dostepnych bardzo duzo narzedzi wykorzystywa-
nych we współczesnej teorii liczb i kryptologii. Jesli ktos interesuje sie analiza matematyczna, algebra,
optymalizacja czy matematyka dyskretna znajdzie równiez wiele przydatnych narzedzi. Nie bede teraz
wymieniał ani opisywał ich wszystkich, jednakze chce tylko uswiadomic czytelnika, ze jesli zajmuje
sie jakimkolwiek działem matematyki, to z pewnoscia znajdzie w programie Sage wiele przydatnych
narzedzi dla siebie.
163