Dlaczego warto nauczac z...

149

Transcript of Dlaczego warto nauczac z...

Dlaczego warto nauczac z komputerem?

Rewolucja technologiczna

Na naszych oczach obserwujemy rewolucje technologii informatycznych: tempo zmian jest tak niesłychanie 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 mate-

matyka czy fizyka? Odpowiedz jest pesymistyczna: przedmioty te sa nauczane w wiekszosci szkół metodami tradycyjnymi

"tablica-kreda". Ba, nawet jesli tablica jest interaktywna, to czesto słuzy jedynie wyswietlaniu klasycznych tresci. Zastoso-

wanie nowoczesnych technologii nierzadko konczy 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 odniesieniu do nauczania fundamentalnych aspektów teorii matema-

tycznych i fizycznych. Nalezy jednak sobie odpowiedziec na pytanie, co moze komputer wniesc nowego dla poszerzenia

mozliwosci poznania 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: komputer 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.

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 stra-

tegii rozwoju szkolnictwa wyzszego. Innowacyjnosc iCSE polega na integracji metod komputerowych, w tym wizualizacji,

metod numerycznych, symulacji i analizy danych z kierunkowymi przedmiotami wybranych 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

2

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, projek-

tant, analityk finansowy, aktuariusz jak i pracownik naukowy korzystaja na co dzien z wyników obliczen numerycznych i

symulacji komputerowych, 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.

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 projektem 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 zrealizowania. 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

3

4

Spis tresci

1 Podstawowe informacje o Sage 9

1.1 Instalacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.1.1 Instalacja w systemie Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

1.3.3 Operatory porównania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

1.3.4 Stałe matematyczne i zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

1.3.5 Zero na poczatku liczby całkowitej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

1.3.6 Upraszczanie wyrazen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

1.3.7 Liczby całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.3.8 Zapisywanie skomplikowanych wyrazen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

1.3.9 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

1.4 Wyrazenia algebraiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

1.4.1 Deklaracja zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

1.4.2 Podstawienia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

1.4.3 Wyrazenia wymierne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

1.4.4 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

1.5 Równania, nierównosci i ich układy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

1.5.1 Rozwiazywanie równan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

1.5.2 Rozwiazywanie nierównosci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

1.5.3 Rozwiazywanie układów równan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

1.5.4 Rozwiazywanie układów nierównosci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

1.5.5 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

2 Funkcje 51

2.1 Podstawowe wiadomosci o funkcjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2.1.1 Definicja funkcji, dziedzina, przeciwdziedzina i zbiór wartosci . . . . . . . . . . . . . . . . . . . . 52

2.1.2 Wykres funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5

SPIS TRESCI

2.1.3 Okreslanie dziedziny funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

2.2 Najczesciej zadawane pytania dotyczace funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

2.2.1 Zbiór wartosci funkcji kwadratowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

2.2.2 Porównywanie ze soba dwóch funkcji. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

2.3 Funkcje poznane w szkole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

2.3.1 Funkcja liniowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

2.3.2 Funkcja kwadratowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

2.3.3 Funkcja wymierna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

2.3.4 Funkcja wykładnicza i logarytmiczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

2.4 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

3 Rachunek prawdopodobienstwa i statystyka 873.1 Rachunek prawdopodobienstwa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

3.2 Statystyka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

3.2.1 Srednia arytmetyczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

3.2.2 Odchylenie standardowe i wariancja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

3.2.3 Srednia geometryczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

3.2.4 Mediana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

3.2.5 Dominanta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

3.2.6 Grupowanie i prezentacja danych statystycznych . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

3.3 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

4 Stereometria 1174.1 Bryły platonskie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

4.2 Graniastosłupy i ostrosłupy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

4.3 Bryły obrotowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

4.4 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

5 Dodatek A 143

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 potrafiace szybko wykonywac obliczenia arytmetyczne. Bardziej rozbudowane

posiadaja dodatkowe funkcje liczace na przykład potegi, logarytmy czy funkcje trygonometryczne. Jednakze dzisiejsze

narzedzia matematyczne 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 darmowy, a mozliwosciami

dorównuje, jesli nie przewyzsza, komercyjnym rozwiazaniom. Jest to cały pakiet przeróznych narzedzi do wykonywania

wszelkiego rodzaju obliczen. Mozemy wykonywac obliczenia 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 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 zmiennej. 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 wyrazeniem 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.

1Jest to cyctat z artykułu pt. „Czem jest matematyka i na czem polega jej postep?”, który został wygłoszony przez profesora Hugo DyonizegoSteinhausa w trakcie serii popularnych odczytów matematycznych, wygłoszonych zima 1926-1927 roku przez profesorów Uniwersytetu i Politechnikiwe Lwowie.

2http://www.sagemath.org/

7

SPIS TRESCI

Trzeci rozdział poswiecony jest rachunkowi prawdopodobienstwa i statystyce matematycznej. Jak wiemy, podczas rozwia-

zywania zadan z rachunku prawdopodobienstwa czesto musimy wykonywac wiele obliczen kombinatorycznych. Program

Sage posiada cała game gotowych funkcji kombinatorycznych, miedzy innymi do zliczania kombinacji czy wariacji. Poza

tym mamy mozliwosc definiowania zbiorów. Na podstawie zdefiniowanych zbiorów mozna definiowac rodziny ich pod-

zbioró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. Stereometria jest działem

geometrii, która w szczególny sposób wymaga dobrej wyobrazni. Jak sie przekonacie, 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 przydatnych w wielu dzie-

dzinach matematyki. Mozemy z jego pomoca wykonywac zarówno obliczenia numeryczne 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, ma-

tematyk z Uniwersytetu Waszyngtonskiego. Wczesniej projekt nazywał sie SAGE, System for Algebra and GeometryExperimentation2. Pierwsza wersja programu została opublikowana w lutym 2005 roku. Był i jest do dzis rozpowszech-

niany jako darmowe oprogramowanie oparte na licencji GNU General Public License 3. 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

Poza tym zawiera wiele bibliotek własnych, zawierajacych narzedzia, których nie mozna znalezc w dostepnych 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.

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

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, edyto-

wac 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 logowania.

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.

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 otwieramy 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

11

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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/sage w 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

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:.

12

1.1. INSTALACJA

Aby zobaczyc wynik polecenia, wciskamy klawisz Enter. Jak widzimy, polecenie notebook() uruchamia tzw. notatnik

programu Sage. Mozna go tez uruchomic wydajac bezposrednio w terminalu systemowym polecenie sage -n.

Z notatnika mozemy korzystac za pomoca dowolnej przegladarki internetowej. Po jej uruchomieniu wystarczy w polu adresu

wpisac adres http://localhost:8080

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.

13

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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 dodat-

kowy 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

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 przycisk 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.

15

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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 bezposrednio 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 interaktywnym wierszu polecen

sa takie same. Dodatkowo w notatniku mozemy wprowadzac kilka polecen w jednej 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.

Chciałbym jeszcze na samym poczatku powiedziec o kilku nawykach, które warto sobie wyrobic podczas pracy z notatni-

kiem.

18

1.2. ROZPOCZYNAMY PRACE Z PROGRAMEM SAGE

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, dokonu-

jemy 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.

19

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

Aby uzyskac informacje na temat okreslonego polecenia, np. sqrt do wolnej komórki arkusza, wpisujemy

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 .

20

1.2. ROZPOCZYNAMY PRACE Z PROGRAMEM SAGE

Po ponownym uruchomieniu notatnika programu Sage i zalogowaniu sie na stronie http://localhost:8080 zoba-

czymy liste wszystkich swoich arkuszy.

Aby otworzyc którys z nich wystarczy kliknac na jego nazwe. Jak widzimy mozemy w tym miejscu usunac 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 poprzedzał 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 kalkulatorów. Najcze-

sciej wykonujemy na nich podstawowe operacje arytmetyczne +, -, ·, :. W Sage-u wykonujemy je podobnie, pamietajac

tylko, ze „*” oznacza znak mnozenia, a „/” znak dzielenia. Wykonajmy 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 pote-

gowaniu, 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 milionó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.

Nie ma zaimplementowanych funkcji obliczajacych pierwiastki innych stopni. Jednakze nie sa nam potrzebne, gdyz mamy

operator potegowania „^”. Wiemy przeciez, ze pierwiastek stopnia m, to potega 1m

, tzn.

m√a = a

1m .

22

1.3. OBLICZENIA ARYTMETYCZNE

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

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.

23

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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.

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))

24

1.3. OBLICZENIA ARYTMETYCZNE

wynik: 7.28010988928052

sage: N(sqrt(53), digits=3)

wynik: 7.28

sage: N(sqrt(53), digits=60)

wynik: 7.28010988928051827109730249152703279377766968257647743837818

Widzimy, 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

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

25

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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, mnoze-

nia, itd. równiez funkcje, np. sqrt czy log, to mozemy wtedy uzyc instrukcji N.

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 Nmusi 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 pierwiastka 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

26

1.3. OBLICZENIA ARYTMETYCZNE

Obliczmy wartosc funkcji sinus, dla kata 600.

sage: sin(pi/3)

wynik:1

2

√3

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 dokonujemy 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 printwyswietla zawsze wartosc zmiennej w postaci tzw. wierszowej, czyli takiej, jaka wprowadzamy 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 srednikiem. Mozna tez

nadpisywac wartosci zmiennych (wczesniej jak pamietamy x było równe 35) czy tez przypisywac im wyniki innych obliczen.

27

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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.

28

1.3. OBLICZENIA ARYTMETYCZNE

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 dokł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

29

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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.

sage: factor(30030)

wynik: 2 · 3 · 5 · 7 · 11 · 13

30

1.3. OBLICZENIA ARYTMETYCZNE

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. 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 programie Sage nazwali-

smy w1. Mozemy wiec wykorzystac go w definicji nowego wyrazenia co z pewnoscia uprosci nam zapis.

31

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

sage: w2 = 4*w1^2 / (3/100 * (sqrt(2) + 4)^3); w2

wynik:3√2 + 4

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

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

32

1.3. OBLICZENIA ARYTMETYCZNE

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.

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.

33

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

1.4 Wyrazenia algebraiczne

W poprzednim podrozdziale dowiedzieliscie sie jak wykonywac obliczenia na liczbach. Sage doskonale sobie radzi

równiez z obliczeniami symbolicznymi, tzn. potrafi wykonywac obliczenia czy przekształcenia na wyrazeniach alge-

braicznych. Wiemy, ze wyrazenie algebraiczne podobnie jak arytmetyczne składa sie z działan oraz liczb ale wyste-

puja 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 arytmetycz-

nymi.

sage: wyr1 = ((z^2+3*z)/z)

sage: wyr1.simplify_radical()

wynik: z + 3

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.

34

1.4. WYRAZENIA ALGEBRAICZNE

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 algebra-

icznych.

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

sage: wyr3.simplify_radical()

wynik:y4 − 4 y2 + 2

y2 − 2

35

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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

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) )

36

1.4. WYRAZENIA ALGEBRAICZNE

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?

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.

37

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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)

wynik: [x = (−3)]

Aby sprawdzic czy otrzymane rozwiazanie jest poprawne, mozemy podstawic go do naszego równania.

sage: rownanie.substitute(x=-3)

38

1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY

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 konkretne liczby. Dla

równania

3x+ 12 = 0

piszemy:

sage: solve(r_lin.subs(a=3, b=12), x)

wynik: [x = (−4)]

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.

39

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

Znamy rózne sposoby, aby tego dokonac, np. przez grupowanie wyrazów i wyłaczanie wspólnych czynników badz odgady-

wanie 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

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

40

1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY

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

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)

41

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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)]]

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)

42

1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY

-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.

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 rozwia-

zanie 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)

43

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

-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.

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)

44

1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY

-3 -2 -1 0 1 2 3-3

-2

-1

0

1

2

3

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)

45

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

-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 pa-

rametr 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.

W przypadku układu nierównosci z jedna niewiadoma, wynik funkcji solve jest zupełnie wystarczajacy. 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

]]

46

1.5. RÓWNANIA, NIERÓWNOSCI I ICH UKŁADY

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.

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.

47

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

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.

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)

48

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]

].

49

ROZDZIAŁ 1. PODSTAWOWE INFORMACJE O SAGE

50

Rozdział 2

Funkcje

2.1 Podstawowe wiadomosci o funkcjach

W rozdziale tym chciałbym omówic pewne zagadnienia zwiazane z pojeciem funkcji. Funkcja jest jednym 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. dostrzegac 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, 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

1G. W. Leibniz, Methodus tangentium inversa, seu de functionibus, 1673.

51

ROZDZIAŁ 2. FUNKCJE

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 nazwie n. Nastepnie

zdefiniowalismy liste liczb naturalnych z zakresu od 1 do 10 włacz-

nie 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 wcze-

sniej zdefiniowanej liscie liczb i wyswietlamy dla kazdej z nich wyraze-

nie 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 naturalna n z dokładnie

jedna liczba postaci n3 − n.

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 zbioremwartosci 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 przy-

pisane pewnym argumentom. Definicja funkcji nie wymaga, aby kazdemu elementowi przeciwdziedziny cos przyporzadko-

wac.

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.

52

2.1. PODSTAWOWE WIADOMOSCI O FUNKCJACH

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, . . ..

2.1.2 Wykres funkcji

Jak wiemy, funkcje liczbowe daja sie ilustrowac za pomoca wykresu. Z wykresu mozemy łatwo odczytac wiele intere-

sujacych 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 = 2

3x+ 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 matema-

tyce. Najpierw zdefiniowałem nazwe zmiennej poleceniem

var(’x’) (nazwa moze byc dowolna litera), a nastepnie

okresliłem funkcje 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〉.

53

ROZDZIAŁ 2. FUNKCJE

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 argumen-

towi 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 parametrycznie.

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, ze

x = 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.

Po przeniesieniu wszystkiego na lewa strone otrzymujemy wyjsciowe równanie

x3 − y2 + xy = 0.

54

2.1. PODSTAWOWE WIADOMOSCI O FUNKCJACH

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łaszczyznie. 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.

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).

55

ROZDZIAŁ 2. FUNKCJE

-4 -2 2 4x

-100

-50

50

100

y

Rysujac wykresy funkcji w programie Sage mamy do dyspozycji wiele ciekawych opcji. Mozemy sterowac warto-

sciami najmniejszymi ymin oraz najwiekszymi ymax, opcja gridlines=True pokazemy siatke, czy tez opcja

axes_labels=[’x’,’y’] dopisze do osi odpowiednie etykiety. Mozemy zmienic kolor, np. color=’red’ lub

grubosc linii thickness=2. Mamy jeszcze wiele innych 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)

-4 -2 2 4x

-20

-10

10

20

y

f(x) =x3 −x

56

2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI

Przy okreslaniu dziedziny funkcji zwykle musimy rozwiazac pewne równanie czy nierównosc. Okreslmy dziedzine naste-

pujacej 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.

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 powinnismy 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)

57

ROZDZIAŁ 2. FUNKCJE

-6 -4 -2 2 4x

-10

-5

5

10

y

Opcja exclude=[-3,1] pominelismy argumenty, dla których mianownik sie zeruje. Mozemy dodatkowo 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, gdybysmy 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,∞).

58

2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI

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.

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 jeste-

smy 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 rozwiazac równanie f(x) = 0, tzn.

−4x2 − 4x+ 11

x2 + 2x− 3= 0.

2Funkcja jest róznowartosciowa, jesli dla kazdych dwóch róznych argumentów przyjmuje dwie rózne wartosci.3Funkcja f jest rosnaca, jesli dla x1, x2 ∈ Df , takich ze x1 < x2 zachodzi nierównosc f(x1) < f(x2), natomiast funkcja f jest malejaca, jesli

dla x1, x2 ∈ Df , takich ze x1 < x2 zachodzi nierównosc f(x1) > f(x2).

59

ROZDZIAŁ 2. FUNKCJE

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 kwadratowe:

−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 sprawdzenia tych wyników.

Uzylismy funkcji subs aby podstawic w równaniu trojmian w miejsca odpowiednich parametrów liczby.

6. Jaka wartosc posiada funkcja dla argumentu x = −2?Obliczanie wartosci funkcji dla danego argumentu jest chyba najbardziej naturalna operacja wykonywana 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.

60

2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI

Program Sage poda nam ten wynik po wykonaniu polecenia

sage: f(-2)

wynik: −1

7. Dla jakich argumentów funkcja przyjmuje wartosc y = 5?Bardzo łatwo jest obliczyc wartosc funkcji dla danego argumentu, jak to widzielismy w poprzednim punkcie. W tym

zadaniu odwracamy sytuacje, majac wartosc funkcji, pytamy dla jakich argumentó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ównaniu y = 5 przetnie

wykres naszej funkcji. Przyjrzyjmy sie ich wykresom.

-6 -4 -2 2 4x

-10

-5

5

10

y

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).

61

ROZDZIAŁ 2. FUNKCJE

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

]

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 prawej 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,

4Jesli ∆ > 0 i x1, x2 sa pierwiastkami trójmianu ax2 + bx+ c, to mozemy go zapisac w postaci iloczynowej a(x− x1)(x− x2).

62

2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI

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 naszki-

cowaniu 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).

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,∞).

63

ROZDZIAŁ 2. FUNKCJE

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 przedział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

⟩.

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 wierzchoł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〉.

64

2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI

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)

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).

65

ROZDZIAŁ 2. FUNKCJE

-3 -2 -1 1 2 3 4

-7-6-5-4-3-2-1

123456789

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 przykł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 pierwiastki warto zauwa-

zyc, 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)

66

2.2. NAJCZESCIEJ ZADAWANE PYTANIA DOTYCZACE FUNKCJI

-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

sage: wykres_f = plot(f, x, -3, 3, color=’green’,\

legend_label=r’$f(x) = -x^3-x^2+2x$’)

67

ROZDZIAŁ 2. FUNKCJE

sage: wykres_g = plot(g, x, -3, 3,\

legend_label=r’$g(x) = -2x-4$’,\

fill=f, fillcolor=(0.9,0.9,0.9) )

sage: wykres_f + wykres_g

Pytamy w jakich przedziałach wykres funkcji f 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 oznaczaja 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, znalezienie 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).

68

2.3. FUNKCJE POZNANE W SZKOLE

Innym sposobem jest wykorzystanie ogólnego wzoru funkcji liniowej. Podstawiajac współrzedne punktó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). Otrzymujemy wiec układ równana · (−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

)]]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 poprzed-

nich 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.

69

ROZDZIAŁ 2. FUNKCJE

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

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. Rysujac 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

70

2.3. FUNKCJE POZNANE W SZKOLE

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.

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.

71

ROZDZIAŁ 2. FUNKCJE

Wiele własnosci funkcji kwadratowej mieliscie okazje sobie przypomniec podczas rozwiazywania zadan z poprzedniego

podrozdziału. Pojawił sie tam wzór na wyróznik kwadratowy (delte), wzory na pierwiastki i postac iloczynowa czy tez spo-

sób wyznaczania zbioru wartosci tej funkcji na ustalonym przedziale. Oprócz postaci ogólnej i liniowej funkcja kwadratowa

moze przyjmowac jeszcze postac kanoniczna

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.

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.

72

2.3. FUNKCJE POZNANE W SZKOLE

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)]

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 posiadajacych 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

73

ROZDZIAŁ 2. FUNKCJE

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). 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 powtarzajac metode z poprzedniego zadania,

dostalibysmy rozwiazanie.

Mozemy oczywiscie znalezc brakujace miejsce zerowe. Wystarczy zauwazyc, ze sa one połozone symetrycznie 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.

74

2.3. FUNKCJE POZNANE W SZKOLE

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 proporcjo-

nalne, 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.

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.

75

ROZDZIAŁ 2. FUNKCJE

-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

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 wymiernych. Rozkłada on

wyrazenie na sume ułamków, które w licznikach posiadaja tylko liczby. My potrzebujemy dokładnie takiej postaci. Zatem

sage: var(’x’)

sage: f = (1+3*x)/(4-6*x)

sage: f.partial_fraction()

wynik: − 3

2 (3x− 2)− 1

2

76

2.3. FUNKCJE POZNANE W SZKOLE

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.

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 odwrot-

noscia 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)

77

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ładniczej 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 narysowac 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.

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.

78

2.3. FUNKCJE POZNANE W SZKOLE

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ównania f(x) = ax−p−2.

Wtedy a−p − 2 = 6 ⇒ a−p = 8

a−2−p − 2 = 0 ⇒ a−p · a−2 = 2.

Podstawiajac teraz pierwsze równanie do drugiego, otrzymamy

8 · a−2 = 2 ⇒ a−2 = 4−1 ⇒ a2 = 4 ⇒ a = 2.

Wybieramy tylko rozwiazanie dodatnie, 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.

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.

79

ROZDZIAŁ 2. FUNKCJE

Widzimy, ze otrzymalismy go po zamianie zmiennej x ze zmienna y w poprzednim równaniu. Korzystajac 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 sumowa-

niem. Znajdzmy tym sposobem na przykład iloczyn 128 · 512.

log2(128 · 512) = log2 128 + log2 512 = 7 + 8 = 15.

Majac teraz odpowiednie tablice, w których 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 potrafiwykonywac 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 naturalnych, to bedziemy

otrzymywac lepsze przyblizenie liczby e. Obliczmy je dla liczb naturalnych od 1 do 10, a potem od 10000 do 10010.

80

2.4. ZADANIA

sage: var(’n’)

sage: for n in range(1,11):

print N( (1 + 1/n)^n )

sage: for n in range(10000,10010):

print N( (1 + 1/n)^n )

Widzimy, 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.

81

ROZDZIAŁ 2. FUNKCJE

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.

(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 monotonicznosc 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 przyjmuje wartosci wieksze niz 1?

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 .

82

2.4. ZADANIA

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

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.

83

ROZDZIAŁ 2. FUNKCJE

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〉

-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.

84

2.4. ZADANIA

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

-8

-6

-4

-2

2

4(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.

85

ROZDZIAŁ 2. FUNKCJE

86

Rozdział 3

Rachunek prawdopodobienstwa i statystykamatematyczna

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 powszechnych dotyczacych

narodzin oraz zgonów. Takie spisy były juz prowadzone w starozytnym Rzymie. Poczatkowo 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 stwier-

dzenie, 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 pewnego doswiadczenia.

Czesto mówimy, ze jest to przestrzen wszystkich zdarzen elementarnych.

Z tego powodu elementy zbioru Ω nazywamy zdarzeniami elementarnymi, a jego podzbiory zdarzeniami. Przypomnijmy

teraz klasyczna definicje prawdopodobienstwa.

Prawdopodobienstwo zajscia pewnego zdarzenia A ⊂ Ω jest równe

P (A) =|A||Ω|

,

gdzie

|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 Ω.

87

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

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 pierwszego 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 skon-

czona). 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 ∈ Ri 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.

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)

1Okazuje sie, ze nie jest to mozliwe dla dowolnych zbiorów. Dział matematyki zajmujacy sie tym problemem nazywa sie teoria miary.2O takich zbiorach mówimy, ze sa przeliczalne.

88

3.1. RACHUNEK PRAWDOPODOBIENSTWA

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 uczestnicy 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 wystepowania kart, w przeci-

wienstwie 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 czynie-

nia 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.

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)

89

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

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.

sage: Rozdania.random_element()

wynik: (As,Karo) , (9,Pik) , (9,Kier) , (7,Kier) , (5,Karo)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 symbolami Newtona. Juz na

przełomie XI i XII w. Chinczycy odkryli, ze współczynniki te układaja sie symetrycznie, tworzac tzw. trójkat Pascala.

90

3.1. RACHUNEK PRAWDOPODOBIENSTWA

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]

[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 prostej 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.

91

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

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))

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.

92

3.1. RACHUNEK PRAWDOPODOBIENSTWA

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.

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 prawdopodobienstwo, 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()

93

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

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 zwracania. 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

94

3.1. RACHUNEK PRAWDOPODOBIENSTWA

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:

sage: Zbior = Set([1,2,3])

sage: Podzb = Subsets(Zbior)

sage: Podzb.list()

wynik: [ , 1 , 2 , 3 , 1, 2 , 1, 3 , 2, 3 , 1, 2, 3]

95

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

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 prawdopodobienstwo, 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).

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.

96

3.1. RACHUNEK PRAWDOPODOBIENSTWA

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 – elementowegowynosi:

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órzenzbioru 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.

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 zobaczmy losowo wybrany

element.

97

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

sage: Omega.random_element()

wynik: [2, 1, 1, 5]

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.

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 rozwia-

zanie 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.

98

3.1. RACHUNEK PRAWDOPODOBIENSTWA

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. 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.

3Rozwiazania tego równania czesto interpretujemy, jako liczbe rozmieszczen k – nierozróznialnych elementów w n – komórkach. Rozmieszczeniatego typu nazywamy kombinacjami z powtórzeniami.

99

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

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()

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 rozwia-

zania bez pomocy programu.

100

3.1. RACHUNEK PRAWDOPODOBIENSTWA

Przykład 9. Bankomat moze wypłacac pieniadze w banknotach: 10zł, 20zł, 50zł i 100zł. Jakie jest prawdopo-

dobienstwo, ze wypłacajac kwote 230zł, bankomat uzyje kazdej z wymienionych nominałów?

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 rozwiazania tego równa-

nia. 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.

101

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.

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.

102

3.2. STATYSTYKA

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

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.

103

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

a

bh

Poniewaz cały trójkat jest podobny do tych mniej-

szych trójkacików prostokatnych, które utwo-

rzyła nam wysokosc, wiec

h

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 podsta-

wach 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 polece-

nie 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

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 nieparzysta, to bierzemy poprostu srod-

kowy 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

104

3.2. STATYSTYKA

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 numerowanie list od zera, a

nie od jeden. U nas pierwszy element to Dane[0], a ostatni Dane[23]. Wobec tego mediana wynosi:

Me =16 + 16

2= 16

W Sage-u mamy gotowa funkcje liczaca mediane o nazwie median.

sage: Me = median(Dane); Me

wynik: 16

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)

105

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

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]

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 prezen-

tacji jest histogram. Obrazuje on przy pomocy wykresu rozkład liczebnosci badanych danych w ustalonych przedziałach.

106

3.2. STATYSTYKA

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 generowania 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 przedział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.

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()

107

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

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.

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. Poniewaz lista ta składa sie

szesciu elementów, czyli tyle ile mozliwych ocen, wiec jako drugi parametr ustawił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.

108

3.2. STATYSTYKA

Na koniec tego podrozdziału rozwiazmy jeszcze dwa przykłady.

Przykład 12. Ponizsza tabela zawiera informacje o ilosci przeczytanych ksiazek w ciagu jednego roku szkolnego przezucznió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 prze-

kształ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.

109

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I 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.

110

3.2. 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

Otrzymałem go za pomoca polecen:

sage: d = finance.TimeSeries(dane)

sage: d.plot_histogram(bins=6,fill=False,normalize=False)

111

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

Przykład 13. Ponizszy diagram przedstawia dane dotyczace liczby godzin nieobecnosci uczniów pewnej klasy

w miesiacu listopadzie. Os pozioma reprezentuje liczbe godzin, natomiast 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]

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)

112

3.3. ZADANIA

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.

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 wypad-

nie 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?

113

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

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 kolegami, 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.

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]]

114

3.3. ZADANIA

Oblicz dla tych danych:

(a) Srednia arytmetyczna i geometryczna.

(b) Mode i mediane.

(c) Odchylenie standardowe.

(d) Sporzadz histogram.

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.

115

ROZDZIAŁ 3. RACHUNEK PRAWDOPODOBIENSTWA I STATYSTYKA

116

Rozdział 4

Stereometria

4.1 Bryły platonskie

Geometria jest jedna z najstarszych dziedzin matematyki. Wiekszosc odnalezionych starozytnych tekstów matematycznych

siegajacych prawie 2000 lat p. n. e. zawiera miedzy innymi twierdzenie Pitagorasa. Pitagoras jest uznawany za jednego z

najwiekszych matematyków starozytnosci. Wiemy, ze badał figury płaskie, jak wiekszosc ówczesnych filozofów zajmuja-

cych 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 przynaj-

mniej 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()

Rys. 4.1: Czworoscian - tetrahedron.

117

ROZDZIAŁ 4. STEREOMETRIA

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’])

Rys. 4.2: Osmioscian - octahedron.

Aby ukryc obramowanie otaczajace bryłe, które odpowiada trójwymiarowemu układowi współrzednych, uzywamy

opcji frame=False. W notatniku programu Sage, po wygenerowaniu rysunku pokazuje sie nam dodatkowy przycisk

Make interactive, po kliknieciu którego mozna bryłe obracac za pomoca myszki. Jest to dobry sposób, aby przyj-

rzec 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)

Za pomoca trójkatów równobocznych mozna zbudowac jeszcze jeden wieloscian foremny – dwudziestoscian (łac. ikosa-

edr). 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.

118

4.1. BRYŁY PLATONSKIE

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)

Rys. 4.4: Szescian - cube.

Ostatnim odkrytym wieloscianem foremnym był dwunastoscian (łac. dodekaedr). Budujemy go za pomoca pieciokata

foremnego.

Rys. 4.5: Dwunastoscian - dodecahedron.

119

ROZDZIAŁ 4. STEREOMETRIA

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. Czworoscia-

nowi przypisywał ogien, szescianowi Ziemie, osmioscianowi powietrze, a dwudziestoscianowi wode.

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 szescio-

katny, którego jedna z podstaw ma wierzchołki w punktach

(0, 0, 0), (2, 0, 0), (3, 1.5, 0), (2, 3, 0), (0, 3, 0), (−1, 1.5, 0),

natomiast druga

(0, 0, 2), (2, 0, 2), (3, 1.5, 2), (2, 3, 2), (0, 3, 2), (−1, 1.5, 2).

sage: podst1 = [[0,0,0],[2,0,0],[3,1.5,0],\

[2,3,0],[0,3,0],[-1,1.5,0]]

sage: podst2 = [[0,0,2],[2,0,2],[3,1.5,2],\

[2,3,2],[0,3,2],[-1,1.5,2]]

sage: gr = Polyhedron(vertices = podst1 + podst2)

sage: gr.show()

Po czym zobaczymy na ekranie nasz graniastosłup. Graniastosłup widoczny na rysunku 4.6 z prawej otrzymamy po dodaniu

opcji frame=False funkcji show, tzn. gr.show(frame=False).

Minusem tej metody jest to, ze musimy sami definiowac listy punktów bedacych wierzchołkami wieloscianu. 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 graniastosł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łozyc

120

4.2. GRANIASTOSŁUPY I OSTROSŁUPY

Rys. 4.6: Graniastosłup szesciokatny.

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.

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 powo-

duje, 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 graniastosłupa trójkatnego,

czworokatnego czy pieciokatnego.

121

ROZDZIAŁ 4. STEREOMETRIA

Narysujmy teraz za pomoca funkcji Polyhedron ostrosłup czworokatny taki jak na rysunku 4.7.

sage: podst = [[0,0,0],[3,0,0],[3,2,0],[0,2,0]]

sage: wierzch = [[(0+3+3+0)/4, (0+0+2+2)/4, 2]]

sage: os = Polyhedron(vertices = podst + wierzch)

sage: os.show(frame=False,opacity=0.3,color=’blue’)

Rys. 4.7: Ostrosłup czworokatny.

Najpierw zdefiniowałem wierzchołki podstawy oraz wierzchołek ostrosłupa. Pierwsze dwie współrzedne wierzchołka wy-

znaczyłem jako srodek masy1 podstawy, czyli prostokata o wierzchołkach (0, 0), (3, 0), (3, 2), (0, 2). Obracajac odpowied-

nio 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 szybko 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.

1Współrzedne srodka masy wielokata wypukłego na płaszczyznie wyznaczamy jako srednie arytmetyczne współrzednych jego wierzchołków.

122

4.2. GRANIASTOSŁUPY I OSTROSŁUPY

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.

123

ROZDZIAŁ 4. STEREOMETRIA

Rys. 4.8: Graniastosłup pieciokatny.

Juz wyjasniam powyzsze polecenia. Otóz gr5 = None powoduje utworzenie pewnego obiektu o nazwie gr5,

ale na razie niczego mu nie przypisujemy. Pózniej bedzie tam zapisany nasz graniastosłup. 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 przechodzacego przez zbiór 0, 1, 2, 3, 4.

(1+1)% 5 = 2 % 5 = 2, (1+2)% 5 = 3 % 5 = 3,

(1+3)% 5 = 4 % 5 = 4, (1+4)% 5 = 5 % 5 = 0.

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)

124

4.2. GRANIASTOSŁUPY I OSTROSŁUPY

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 opisywaniem wierzchołków, postanowiłem taka

funkcje napisac.

125

ROZDZIAŁ 4. STEREOMETRIA

Definicje tej funkcji mozecie zobaczyc w dodatku A. Jest ona równiez zdefiniowana w notatniku programu 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. Narysujmy 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.

Przykład 1. Oblicz pole powierzchni całkowitej graniastosłupa prawidłowego czworokatnego, którego prze-

katna długosci 5 cm jest nachylona do podstawy pod katem 600.

126

4.2. GRANIASTOSŁUPY I OSTROSŁUPY

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)

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)\

127

ROZDZIAŁ 4. STEREOMETRIA

+ text(r"$30^0$",[2.81, 3.42], fontsize=14)\

+ text(r"$a$",[1.5, -0.13], fontsize=14)\

+ text(r"$2a$",[1.23, 2], fontsize=14)

sage: tr.show(axes=False)

Aby 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 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)

128

4.2. GRANIASTOSŁUPY I OSTROSŁUPY

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 H wysokosc tego gra-

niastosł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.

129

ROZDZIAŁ 4. STEREOMETRIA

Skorzystalismy tu ze wzoru na pole trójkata równobocznego o boku a, tzn. a2√3

4. Widzimy na powyzszym 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]

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.

130

4.2. GRANIASTOSŁUPY I OSTROSŁUPY

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)

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.

131

ROZDZIAŁ 4. STEREOMETRIA

Wtedy pole całkowite obliczymy wzorem

P = 4 · a2√3

4= 36

√3.

Po uproszczeniu otrzymujemy a = 6.

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.

132

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 poleceniem circle((0,0,0), 1, color=’red’) (o

srodku (0, 0, 0) i promieniu 1).

Drugi okrag narysowałem funkcja

implicit_plot3d(y^2+z^2-1,(x,0,0.003),(y,-1,1),(z,-1,1),color=’red’). Słuzy ona do ryso-

wania dowolnych krzywych w przestrzeni. Musimy tylko znac jej równanie.

133

ROZDZIAŁ 4. STEREOMETRIA

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 łaczenia 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 skorzystaniem 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)

134

4.3. BRYŁY OBROTOWE

Stozek na powyzszym rysunku stojacy z prawej strony wykonałem instrukcjami:

sage: from sage.plot.plot3d.shapes import Cone

sage: stozek = Cone(1, 2, color=’blue’, opacity=0.2)\

+ circle((0,0,0), 1, color=’red’)

Etykiety dodałem za pomoca 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))

135

ROZDZIAŁ 4. STEREOMETRIA

Jako cwiczenie pozostawiam czytelnikowi wykonanie takiego walca, jak na rysunku z prawej.

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 wyja-

snic 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ów-

nan.

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)

136

4.3. BRYŁY OBROTOWE

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)

wynik:√7

Mozemy wiec obliczyc objetosc.

sage: Objetosc_stozka.subs(R=3, H=sqrt(7))

wynik: V = 3√7π

137

ROZDZIAŁ 4. STEREOMETRIA

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.

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 zastosowac 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)

138

4.4. ZADANIA

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

)]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.

139

ROZDZIAŁ 4. STEREOMETRIA

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.

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.

ODPOWIEDZI

1. A = [0,0]; B = [2,0]; C = [3,sqrt(3)];

D=[2,2*sqrt(3)]; E=[0, 2*sqrt(3)]; F=[-1, sqrt(3)]

v = [A,B,C,D,E,F]

sz = polygon(v, fill=False)

sz = sz + line([A,D], color="red",thickness=1)

sz = sz + line([B,E], color="green",thickness=1)

sz = sz + line([A,B], color="green",thickness=1)

sz = sz + line([C,[1,sqrt(3)]], color="red",thickness=1)

sz = sz + line([[-.1,sqrt(3)],[1,sqrt(3)]], color="red",thickness=0.5)

sz = sz + line([[-1,sqrt(3)],[-.6,sqrt(3)]], color="red",thickness=0.5)

sz = sz + line([A,E], color="green",thickness=1)

140

4.4. ZADANIA

sz = sz + text(r"$a$",[1, -0.15], fontsize=14)

sz = sz + text(r"$a$",[1.6, 1.15], fontsize=14)

sz = sz + text(r"$a$",[0.8, sqrt(3)+0.9], fontsize=14)

sz = sz + text(r"$60^0$",[1.6, 0.2], fontsize=14)

sz = sz + text(r"$a\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.

141

ROZDZIAŁ 4. STEREOMETRIA

142

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()

143

ROZDZIAŁ 5. DODATEK A

Zobaczmy jak wyglada definicja tej funkcji

#graniastosłup n - katny

def graniastoslup(n=3, wierzcholki=[], przekatne_gr=False, przekatne_sb=False):

h = 2 #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

else:

print ’Liczba wierzchołków musi byc równa ’ , n

return gr0

else:

if not wierzcholki:

144

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

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):

145

ROZDZIAŁ 5. DODATEK A

gr = gr + line3d([vp1[i], vp2[i]], color="blue",thickness=3)

#dodatkowo obramujmy podstawy

for i in range(0,n):

gr = gr + line3d([vp1[i], vp1[(i+1) % n]], color="blue",thickness=3)

gr = gr + line3d([vp2[i], vp2[(i+1) % n]], color="blue",thickness=3)

#dodajmy jeszczedo wierzchołków etykiety

#obliczamy 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 ],\

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:

146

gr = gr + line3d([vp1[0], vp2[2]], color="green",thickness=3)\

+ line3d([vp1[0], vp1[2]], color="green",thickness=2)

gr = gr + line3d([vp1[0], vp2[3]], color="red",thickness=3)\

+ line3d([vp1[0], vp1[3]], color="red",thickness=2)

elif n == 6:

gr = gr + line3d([vp1[1], vp2[4]], color="green",thickness=3)\

+ line3d([vp1[1], vp1[4]], color="green",thickness=2)

gr = gr + line3d([vp1[1], vp2[3]], color="red",thickness=3)\

+ line3d([vp1[1], vp1[3]], color="red",thickness=2)

else:

print ’Nie zaimplementowano rysowania przekatnych dla n > 6\

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)

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

147

ROZDZIAŁ 5. DODATEK A

Podsumowanie

Tym sposobem dotarlismy do konca ksiazki. Mam nadzieje, ze informacje w niej zawarte okaza sie uzyteczne 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 przydatnych w szkole. Jednakze mozliwosci programu sa naprawde ogromne, mozemy wykorzystywac go

do obliczen duzo bardziej zaawansowanych. Mamy dostepnych bardzo duzo narzedzi wykorzystywanych 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.

148