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