You are on page 1of 153

Wykorzystanie pakietu Sage w nauczaniu matematyki

w szkołach ponadgimnazjalnych

Marcin Kowalewski
2
Spis treści

1 Funkcje 7
1.1 Podstawowe wiadomości o funkcjach . . . . . . . . . . . . . . . . . . . . . 7
1.2 Najcz˛eściej zadawane pytania dotyczace
˛ funkcji . . . . . . . . . . . . . . 14
1.3 Funkcje poznane w szkole . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.3.1 Funkcja liniowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.3.2 Funkcja kwadratowa . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.3.3 Funkcja wymierna . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.3.4 Funkcja wykładnicza i logarytmiczna . . . . . . . . . . . . . . . . . 39
1.4 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

2 Rachunek prawdopodobieństwa i statystyka matematyczna 49


2.1 Rachunek prawdopodobieństwa . . . . . . . . . . . . . . . . . . . . . . . 49
2.2 Statystyka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

3 Stereometria 81
3.1 Bryły platońskie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.2 Graniastosłupy i ostrosłupy . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.3 Bryły obrotowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.4 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.5 Dodatek A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

4 Podstawowe informacje o Sage 113


4.1 Instalacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
4.1.1 Instalacja w systemie Linux . . . . . . . . . . . . . . . . . . . . . . 116
4.1.2 Instalacja w systemie Windows . . . . . . . . . . . . . . . . . . . . 119

3
SPIS TREŚCI

4.2 Rozpoczynamy prace˛ z programem Sage . . . . . . . . . . . . . . . . . . 120


4.3 Obliczenia arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
4.3.1 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4.4 Wyrażenia algebraiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4.4.1 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
4.5 Równania i nierówności . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
4.5.1 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

4
Wstep
˛

Na wstepie
˛ 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 wie-
kami, a do której dobudowuje sie˛ coraz wyższe pietra.
˛ Aby zobaczyć postep
˛
budowy, trzeba iść na pietro
˛ najwyższe, a schody sa˛ strome i składaja˛ sie˛ z
licznych stopni. Rzecza˛ popularyzatora jest zabrać słuchacza do windy, w któ-
rej nie zobaczy ani pośrednich pieter,
˛ ani praca˛ wieków ozdobionych komnat,
ale przekona sie,
˛ że gmach jest wysoki i wciaż
˛ rośnie.

Ksiażk
˛ a˛ ta˛ chciałbym przede wszystkim zachecić
˛ 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 po-
moca˛ odpowiednich programów komputerowych. Z pewnościa˛ każdy z czytelników ko-
rzystał kiedyś z kalkulatora. Jest to najprostsze narz˛edzie potrafiace
˛ szybko wykonywać
obliczenia arytmetyczne. Bardziej rozbudowane posiadaja˛ dodatkowe funkcje liczace
˛ na
przykład potegi,
˛ logarytmy czy funkcje trygonometryczne. Jednakże dzisiejsze narz˛edzia
matematyczne posiadaja˛ dużo wieksze
˛ możliwości. Niestety wiekszość
˛ z tych narz˛edzi
jest płatna i sporo kosztuje.
W ksiażce
˛ ˛ e˛ korzystał z programu matematycznego o nazwie Sage2, który
tej bed
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
1
Jest to cyctat z artykułu pt. “Czem jest matematyka i na czem polega jej postep?”,
˛ który został wygło-
szony 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/

5
SPIS TREŚCI

(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). Dzieki
˛ 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, rysowania
figur geometrycznych na płaszczyźnie i w przestrzeni.
W rozdziale pierwszym pokazuje˛ jak z pomoca˛ programu łatwo jest badać własności
funkcji jednej zmiennej. Sage pozwala definiować takie funkcje w ten sam naturalny spo-
só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˛
˛ Na przykład zapis f(x) = x + 5 wystarczy aby narysować wykres tej funkcji,
zmienna.
znaleźć jej miejsca zerowe, obliczać wartości w dowolnym punkcie, itd.
W rozdziale drugim pokazuje,
˛ jak łatwo uczyć sie˛ stereometrii majac
˛ takie narz˛edzie
jak Sage. Stereometria jest działem geometrii, która w szczególny sposób wymaga
dobrej wyobraźni. Jak sie˛ 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.
Trzeci rozdział poświecony
˛ jest rachunkowi prawdopodobieństwa i statystyce mate-
matycznej. Jak wiemy, podczas rozwiazywania
˛ zadań z rachunku prawdopodobieństwa
cz˛esto musimy wykonywać wiele obliczeń kombinatorycznych. Program Sage posiada
cała˛ game˛ gotowych funkcji kombinatorycznych, miedzy
˛ innymi do zliczania kombinacji
czy wariacji. Poza tym mamy możliwość definiowania zbiorów. Na podstawie zdefiniowa-
nych 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 bar-
dzo ciekawy i prosty sposób zilustrować nawet dość skomplikowane zadanie kombinato-
ryczne.
W rozdziale czwartym opisuje˛ dokładnie jak zainstalować program i jak rozpoczać
˛
w nim prace.
˛ W kolejnych podrozdziałach pokazuje˛ jak wykonywać obliczenia arytme-
tyczne, algebraiczne, jak rozwiazywać
˛ równania, nierówności czy ich układy.
Do ksiażki
˛ dołaczony
˛ został również interaktywny arkusz programu Sage, w którym
zawarte sa˛ miedzy
˛ innymi gotowe do użycia i przetestowania przykłady z ksiażki.
˛

6
Rozdział 1

Funkcje

1.1 Podstawowe wiadomości o funkcjach

W rozdziale tym chciałbym omówić pewne zagadnienia zwiazane


˛ z pojeciem
˛ funkcji.
Funkcja jest jednym z ważniejszych pojeć
˛ 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 matema-
tycy dopiero w XVII wieku zacz˛eli stosować funkcje, tzn. dostrzegać zależności miedzy
˛
różnymi wielkościami i je badać. Przecież bez znajomości pojecia
˛ funkcji jesteśmy w sta-
nie stwierdzić, że pole koła zależy od długości jego promienia, że przebyta droga przez
dany obiekt zależy od czasu poruszania sie˛ tego obiektu, czy też wykonujac
˛ jakiekolwiek
obliczenia na liczbach wiemy, że wynik bedzie
˛ zależał od tych liczb. Do tych wszystkich
stwierdzeń nie potrzebujemy definicji funkcji. Jednakże kiedy badamy wielkości powia-
˛
zane ze soba˛ pewna˛ relacja,
˛ to ścisła definicja tej relacji w znaczny sposób ułatwia ba-
danie tego zwiazku.
˛ Definicja˛ tych zwiazków
˛ jest zwykle pewna funkcja.
Przyjrzyjmy sie˛ nastepuj
˛ acemu
˛ zadaniu.

Przykład 1. Wykaż, że różnica miedzy


˛ sześcianem dowolnej liczby naturalnej
i ta˛ liczba˛ jest podzielna przez 6.

Mowa jest tu o pewnym zwiazku


˛ miedzy
˛ liczbami, a dokładniej liczbami naturalnymi
i pewna˛ grupa˛ liczb naturalnych podzielnych przez 6. Jeśli wykażemy, że własność
te˛ posiada pieć,
˛ dziesieć
˛ czy może nawet tysiac
˛ poczatkowych
˛ liczb naturalnych, to
1
G. W. Leibniz, Methodus tangentium inversa, seu de functionibus, 1673.

7
ROZDZIAŁ 1. FUNKCJE

i tak nie bedzie


˛ 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 wiec
˛ jak wyglada
˛ dziesieć
˛
poczatkowych
˛ różnic. Pomoge˛ sobie programem Sage.

sage: var(’n’)

sage: liczby_naturalne = range(1,11)

sage: for n in liczby_naturalne:

sage: print n^3-n, "= 6 *", (n^3-n)/6

W wyniku tych poleceń zobaczymy liste˛ wartości wyrażenia n3 − n dla n ∈ h1, 11i oraz ich
rozkład na iloczyn liczby 6 i pewnej liczby całkowitej.

Poleceniem var(’n’) utworzyliśmy zmienna˛ o


nazwie n. Nastepnie
˛ zdefiniowaliśmy liste˛ liczb
naturalnych z zakresu od 1 do 10 włacznie
˛
poleceniem range(1,11). Widzimy wiec,
˛ że
druga z liczb powinna być o jeden wieksza
˛
od wymaganego zakresu. Na koniec instruk-
cja˛ 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. Wiecej
˛ na temat
definiowania wyrażeń arytmetycznych i geometrycz-
nych dowiecie sie˛ w rozdziale 4.

Aby wykazać, że własność te˛ posiadaja˛ wszystkie liczby naturalne, możemy posłużyć
sie˛ ogólnym wzorem tejże różnicy, tzn. n3 − n gdzie n oznacza pewna˛ liczbe˛ 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
˛ dowód na to, że liczba n3 − n jest podzielna przez 6.
przez 3. Jest to wystarczajacy

8
1.1. PODSTAWOWE WIADOMOŚCI O FUNKCJACH

Powyższe uzasadnienie jest wystarczajace,


˛ ponieważ zdefiniowaliśmy relacje˛ wia-
˛
˛ a˛ każda˛ liczbe˛ naturalna˛ n z dokładnie jedna˛ liczba˛ postaci n3 − n.
żac

Relacje zdefiniowane na elementach dwóch zbiorów nazywamy funkcjami. Precyzyj-


niej, jeśli mamy dwa zbiory X i Y, to relacje,
˛ która każdemu elementowi zbioru X przy-
porzadkowuje
˛ ˛ Zbiór X nazywamy
dokładnie jeden element zbioru Y nazywamy funkcja.
˛ a zbiór Y przeciwdziedzina.
zbiorem argumentów, lub dziedzina, ˛

Wygodnie jest funkcjom nadawać nazwy, np. f, g, h, itp. Zapis f : X → Y oznacza


funkcje˛ 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 nastepuj
˛ aco:
˛


Wf = f(x) : dla wszystkich x ∈ X .

Możemy powiedzieć, że jest to podzbiór przeciwdziedziny funkcji składajacy


˛ sie˛ tylko
z tych wartości, które zostały przypisane pewnym argumentom. Definicja funkcji nie
wymaga, aby każdemu elementowi przeciwdziedziny coś przyporzadkować.
˛

Funkcje˛ z naszego przykładu moglibyśmy zdefiniować nastepuj


˛ aco:
˛

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. 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 war-
toś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 bedzie
˛ odpowiadać pewien argument (w naszym
przypadku pewna liczba naturalna). Możemy go zdefiniować nastepuj
˛ aco:
˛

Wf = n3 − n : dla wszystkich n ∈ N = {0, 6, 24, 60, 120, 210, . . .}.




9
ROZDZIAŁ 1. FUNKCJE

Jak wiemy, funkcje liczbowe daja˛ sie˛ ilustrować za pomoca˛ wykresu. Z wykresu funkcji
możemy łatwo odczytać wiele interesujacych
˛ nas własności funkcji. Gdy mamy funkcje˛
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).
2
Na przykład funkcje˛ liniowa˛ f(x) = x + 1 możemy traktować jako równanie dwóch
3
2
zmiennych x i y postaci y = x + 1. Zbiorem rozwiaza
˛ ń tego równania sa˛ punkty leżace
˛
3
na nastepuj
˛ acej
˛ prostej:

x
-4 -2 2 4
-1

-2

Powyższy wykres uzyskałem przy pomocy Jak widzimy, program Sage pozwala w
poleceń: bardzo podobny sposób definiować funk-
cje jak to robimy w matematyce. Najpierw
sage: var(’x’) zdefiniowałem nazw˛e zmiennej polece-

sage: f(x) = (2/3)*x+1 niem var(’x’) (nazwa˛ może być do-


wolna litera), a nastepnie
˛ określiłem funk-
sage: plot(f, x, -5, 5)
cje˛ 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. potegowanie,
˛ logarytmy, itd. Na
koniec wydałem polecenie plot(f, x, -5, 5), dzieki
˛ któremu program narysował
wykres funkcji f dla x ∈ h−5, 5i.

10
1.1. PODSTAWOWE WIADOMOŚCI O FUNKCJACH

Zwróćmy uwage, ˛ a˛ dwie zmienne x i y


˛ że nie każde równanie, w którym wystepuj
opisuje pewna˛ funkcje.
˛ Przykładowo zbiór punktów spełniajacych
˛ równanie

x3 − y2 + xy = 0,

tworzy nastepuj
˛ ac ˛ 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 prze-
ciwnym 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))

˛ równanie x3 − y2 + xy = 0 jest postaci t2 − t, t3 − t2 .



Każdy punkt (x, y) spełniajacy
Oznacza to, że 
x = t2 − t

y = t3 − t2 ⇒ y = t · (t2 − t) = t · x.

11
ROZDZIAŁ 1. FUNKCJE

y
˛ t=
Wstawiajac do pierwszego równania otrzymujemy
x

y2 y
x= − ⇒ x3 = y2 − xy.
x2 x

Po przeniesieniu wszystkiego na lewa˛ strone˛ otrzymujemy wyjściowe równanie

x3 − y2 + xy = 0.

Wróćmy na chwile˛ 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 sie˛
z pewnych punktów na płaszczyźnie. Kilka poczatkowych
˛ punktów wykresu tej funkcji
wyglada
˛ nastepuj
˛ aco:
˛

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 liste˛ punktów. Listy w programie Sage defi-
niujemy zapisujac
˛ ich elementy w nawiasach kwadratowych, każdy oddzielajac
˛ przecin-
kiem, np. [1,2,3,4,5]. W naszym przykładzie została utworzona lista z nastepuj
˛ ac ˛ 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.

12
1.1. PODSTAWOWE WIADOMOŚCI O FUNKCJACH

Bardzo cz˛esto autorzy definicji funkcji podaja˛ tylko wzór postaci y = f(x). Wtedy
musimy sami określić dziedzine.
˛ Zwykle przyjmujemy najwiekszy
˛ 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 dziedzine˛ przyjelibyśmy


˛ cały zbiór liczb rze-
czywistych, tzn. Df = R. Możemy to zrobić, bowiem każda˛ liczbe˛ 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).

100

50

x
-4 -2 2 4

-50

-100

Rysujac
˛ wykresy funkcji w programie Sage mamy do dyspozycji wiele ciekawych opcji.
Możemy sterować wartościami najmniejszymi ymin oraz najwiekszymi
˛ ymax, opcja˛
gridlines=True pokażemy siatk˛e, czy też opcja axes_labels=[’x’,’y’] dopi-
sze 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)

13
ROZDZIAŁ 1. FUNKCJE

y
20
f(x) = x3 −x

10

x
-4 -2 2 4

-10

-20

1.2 Najcze˛ ściej zadawane pytania dotyczace


˛ funkcji

Rozpatrzmy funkcje˛ zdefiniowana˛ wzorem

−4x2 − 4x + 11
f(x) = .
x2 + 2x − 3

Jak widzimy, jest to funkcja wymierna, gdyż mamy ułamek oraz w liczniku i mianowniku
znajduje sie˛ pewien wielomian. Najwiekszy
˛ 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 sie˛
zeruje znajdziemy poleceniem

sage: solve(x^2+2*x-3, x)

wynik: [x = (−3) , x = 1]

14
1.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI

Jeśli szkicujemy wykres funkcji w przedziale zawierajacym


˛ punkty wykluczone z dzie-
dziny, to powinniśmy poinformować o tych punktach instrukcje˛ 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)

y
10

x
-6 -4 -2 2 4
-5

-10

-15

-20

Opcja˛ exclude=[-3,1] pomineliśmy


˛ argumenty, dla których mianownik sie˛ zeruje.
Możemy dodatkowo użyć opcji detect_poles="show", która dorysuje w pominietych
˛
punktach asymptoty pionowe czyli proste, do których wykres funkcji zbliża sie˛ dowolnie
blisko lecz nigdy ich nie przecina.

10

x
-6 -4 -2 2 4

-5

-10

15
ROZDZIAŁ 1. FUNKCJE

Z wykresu funkcji możemy odczytać wiekszość


˛ jej istotnych własności. Z powyższego
wykresu, gdybyśmy nawet nie znali wzoru funkcji, potrafilibyśmy odpowiedzieć na naste-
˛
pujace
˛ pytania:

1. Jaka jest dziedzina funkcji?


Powyższy rysunek przedstawia wykres danej funkcji na stosunkowo małym prze-
dziale (−7, 4). Możemy jednak przyjać,
˛ że Df = R \ {−3, 1}, gdyż szkicujac
˛ wykres
funkcji zawsze staramy sie˛ pokazać jej najważniejsze własności, a takimi z pew-
nościa˛ sa˛ punkty, w których funkcja nie jest określona. Możemy wiec
˛ przyjać,
˛ że
poza tym przedziałem funkcja zachowuje sie˛ już “stabilnie”, tzn. nie zmienia swoich
istotnych własności. Zakładamy wiec,
˛ że jest określona w każdym punkcie zbioru
(−∞, −7i ∪ h4, ∞).

2. Jaki jest zbiór wartości funkcji?


˛ że każdy z czytelników odpowie natychmiast, że Wf = R.
Tu myśle,

3. Zbadaj różnowartościowość funkcji.


Funkcja przedstawiona na wykresie nie może być różnowartościowa,2 ponieważ do-
wolna 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 uwage,
˛ że błedne
˛ byłoby stwierdzenie: funkcja jest malejaca
˛ na zbiorze

(−∞, −3) ∪ (−3, −1) ∪ (1, ∞) = R \ {−3, 1}.

˛ np. x1 = −4 < x2 = 2, to wtedy


Gdybyśmy wzieli

f(x1 ) = f(−4) = −7.4 < f(x2 ) = f(2) = −2.6.


2
Funkcja jest różnowartościowa, jeśli dla każdych dwóch różnych argumentów, przyjmuje dwie różne
wartości.

16
1.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI

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 wzra-
˛ 3
staja˛ wartości) posiadaja˛ tylko funkcje rosnace.

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 sie˛ specjalnymi algorytmami
do poszukiwania wzorów funkcji. Jeśli kogoś interesuje to zagadnienie, to zachecam
˛
do poczytania sobie aproksymacji badź
˛ interpolacji. Program Sage ma kilka takich
algorytmów zaimplementowanych. W dalszej cz˛eści tego rozdziału bedziecie
˛ mieli okazje˛
poznać jedna˛ z nich.

Dodajmy wiec
˛ do listy powyższych pytań jeszcze kilka, ale takich gdzie musimy
skorzystać ze wzoru naszej funkcji, tzn.

−4x2 − 4x + 11
f(x) = .
x2 + 2x − 3

5. Wyznacz miejsca zerowe funkcji.

Wiecie zapewne, że miejsca zerowe leża˛ w punktach przeciecia


˛ wykresu funkcji
z osia˛ Ox. Można byłoby próbować określić ich pozycje˛ z wykresu. Przygladaj
˛ ac˛ sie˛
jeszcze raz wykresowi tej funkcji moge˛ stwierdzić, że miejsca zerowe znajduja˛ sie˛ w
1 5
pobliżu punktów −2 oraz . Jeszcze raz podkreślam, że w pobliżu a nie dokładnie.
8 8
Aby mieć pewność jakie to sa˛ punkty musimy rozwiazać
˛ równanie f(x) = 0, tzn.

−4x2 − 4x + 11
= 0.
x2 + 2x − 3

W programie Sage możemy je rozwiazać


˛ poznanym już poleceniem solve.

sage: solve(f, x)

√ √
 
1 1
wynik: x = − 3 − ,x = 3 −
2 2

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

17
ROZDZIAŁ 1. FUNKCJE

Widzimy wiec,
˛ że nasza wcześniejsza próba odgadniecia
˛ miejsc zerowych była
obarczona błedem.
˛

Gdybyśmy chcieli to równanie rozwiazać


˛ recznie,
˛ to przyrównalibyśmy licznik do
zera (wiadomo, że mianownik nigdy nie może być zerem). Czyli rozwiazalibyśmy
˛
nastepuj
˛ ace˛ 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 dostaliśmy to samo. Zachecam
˛ do samodziel-
nego sprawdzenia tych wyników.
Użyliśmy funkcji subs aby podstawić w równaniu trojmian w miejsca odpowiednich
parametrów liczby.

18
1.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI

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ć

−4 · (−2)2 − 4 · (−2) + 11
f(−2) = = −1.
(−2 + 3)(−2 − 1)

Program Sage poda nam ten wynik po wykonaniu polecenia

sage: f(2)

13
wynik: −
5
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 sytuacje,
˛ majac
˛ wartość funkcji,
pytamy dla jakich argumentów funkcja ja˛ przyjmuje. Musimy wiec
˛ rozwiazać
˛ równa-
nie
−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 sie˛ ich wy-
kresom.

10

x
-6 -4 -2 2 4

-5

-10

19
ROZDZIAŁ 1. FUNKCJE

sage: plot(f, x, -7, 4, exclude=[-3,1],\

detect_poles="show", ymin=-10, ymax=10)\

+ plot(5, x, -7, 4, color=’red’)

Narysowałem tym razem wykresy dwóch funkcji w jednym układzie współrzednych.


˛ Aby
tego dokonać wystarczy dodać do siebie dwa wykresy operatorem +.

Widzimy, że istnieja˛ dwa argumenty, w których funkcja przyjmuje wartość 5, jed-
nak 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ć sie˛ kreski ułam-
kowej mnożac
˛ obustronnie równanie przez cały mianownik, otrzymujac
˛

−4x2 − 4x + 11 = 5(x + 3)(x − 1).

Wymnażajac
˛ prawa˛ strone˛ i przenoszac
˛ wszystko na lewa˛ otrzymamy do rozwiaza-
˛
nia równanie kwadratowe
9x2 + 14x − 26 = 0.
√ √
˛ delte˛ ∆ = 1132,
Obliczamy wiec ∆ = 2 283 oraz pierwiastki
√ √ √
−14 − 2 283 −7 − 283 −7 + 283
x1 = = , x2 = .
18 9 9

Chciałbym zwrócić uwage˛ jeszcze na powyższy pierwiastek z delty. Pamietamy


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

Operacje˛ te˛ 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)

20
1.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI

1√ 1√
 
7 7
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 nastepuj


˛ acemu:
˛ 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 zastepujemy
˛ kresk˛e ułamkowa˛
iloczynem, gdyż

licznik
≤0 tylko wtedy, gdy licznik · mianownik ≤ 0.
mianownik

Oczywiście pamietamy
˛ o dziedzinie wyrażenia wymiernego, tzn. z rozwiazania
˛
nierówności z prawej strony należy wykluczyć te, dla których mianownik sie˛ zeruje.

A wiec
˛ mamy do rozwiazania
˛ nierówność

(−4x2 − 4x + 11) · (x + 3)(x − 1) ≤ 0,

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


˛ sie˛ geometrycznie, metoda˛ tzw.
“weżyka”.
˛ Polega ona na naszkicowaniu weż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 sie˛ od niej dla pierwiastków o krotności pa-
rzystej. Start weżyka
˛ zależy od znaku współczynnika stojacego
˛ przy najwyższej
potedze
˛ zmiennej x.

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

21
ROZDZIAŁ 1. FUNKCJE

W naszym przypadku, gdybyśmy wymnażali wszystkie nawiasy, to najwyższa˛ po-


˛ a˛ zmiennej x byłaby −4 · x4 . Skoro −4 < 0, wiec
teg ˛ weżyk
˛ startuje od dołu (w
przeciwnym przypadku startowałby z góry).

Majac
˛ do dyspozycji program Sage możemy taki szkic wykonać poleceniem

sage: plot(-4*(x+sqrt(3)+0.5)*(x-sqrt(3)+0.5) \

* (x+3)*(x-1), x, -4, 2, fill = 0)

x
-3 -2 -1 1

-10

-20

-30

-40

Widzimy, że weż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 (weżyk)
˛ leży pod osia˛ Ox. Dla ułatwienia tego zadania,
dodałem opcje˛ fill=0, która koloruje pole miedzy
˛ 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, ∞).

Zwróćmy uwage,
˛ ż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ść najwieksza,
˛ natomiast w prawym wartość naj-

22
1.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI

mniejsza. Ponieważ 1 6∈ Df , a wartości funkcji w pobliżu jedynki z lewej strony ro-


bia˛ sie˛ coraz mniejsze, wiec
˛ najmniejsza wartość funkcji nie istnieje i przyjmujemy
11
wtedy, że jest to −∞. Wartość najwieksza
˛ natomiast, to f(−1) = − . Zatem na
4
przedziale h−1, 1) funkcja f przyjmuje wartości ze zbioru:
 
11
Wf = −∞, − .
4

Rozwiażmy
˛ jeszcze podobne zadanie do ostatniego punktu dla funkcji kwadratowej.

Przykład 2. 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 pare˛ (p, q). Nastepnie
˛ mamy
dwie możliwości:

⊲ p należy do przedziału hx1 , x2 i – wówczas wartościa˛ najmniejsza˛ funkcji jest naj-


mniejsza z liczb f(x1 ), f(x2 ) i q , natomiast wartość najwieksza
˛ funkcji jest najwieksz
˛ a˛
z nich.

⊲ p nie należy do przedziału hx1 , x2 i – wtedy wartościa˛ najmniejsza˛ funkcji jest mniej-
sza z liczb f(x1 ), f(x2 ), natomiast wartość najwieksza
˛ jest liczba˛ wieksz
˛ a˛ z tych
dwóch.

Zilustrujmy te˛ metode˛ na konkretnym przykładzie.

Przykład 3. 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
b 4
p=− =− = 2.
2a 2 · (−1)

23
ROZDZIAŁ 1. FUNKCJE

Wtedy q = f(p) = −22 + 4 · 2 + 5 = 9.



Można posłużyć sie˛ również wzorem q = − .
4a
Ponieważ p = 2 ∈ h−2, 4i, wiec
˛ wyznaczamy najwieksz
˛ a˛ i najmniejsza˛ liczbe˛ ze
zbioru {−7, 5, 9}, co daje odpowiedź: Wf = h−7, 9i.
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 # współczynniki funkcji

sage: b = 4

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


Aby określić zbiór wartości dowolnej funkcji kwadratowej w danym przedziale, wystar-
czy zmienić wartości krańców przedziału lk, pk oraz podać odpowiednie współczyn-
niki 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).

24
1.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI

9
8
7
6
5
4
3
2
1

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

Rozwiażmy
˛ teraz nastepuj
˛ ace˛ zadanie:

Przykład 4. Dla jakich argumentów funkcja f(x) = −x3 − x2 + 2x przyjmuje


wartości mniejsze niż funkcja g(x) = −2x − 4?

Możemy je sformułować inaczej:

˛ nierówność −x3 − x2 + 2x < −2x − 4, gdzie x ∈ R.


Przykład 5. Rozwiaż

Rozwiaż
˛ e˛ najpierw to zadanie, jak zwykła˛ nierówność. Przenoszac
˛ wszystko na lewa˛
strone˛ 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 obli-
czać delte˛ i pierwiastki warto zauważyć, że można tu skorzystać ze wzoru skróconego
mnożenia na różnice˛ kwadratów dwóch liczb) dostajemy nierówność

(2 + x)(2 − x)(x + 1) < 0.

25
ROZDZIAŁ 1. FUNKCJE

Narysujmy teraz wykres wielomianu stojacego


˛ z lewej strony.

sage: plot((2+x)*(2-x)*(x+1), x, -3, 3, fill=0)

x
-3 -2 -1 1 2 3

-2

-4

Rozwiazaniem
˛ ˛ zbiór (−2, −1) ∪ (2, ∞). Wynik ten możemy uzyskać
nierówności jest wiec
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 sie˛ wykresom

4 f(x) =−x3 −x2 +2x


2 g(x) =−2x−4
x
-3 -2 -1 1 2 3
-2
-4
-6
-8
-10

26
1.2. NAJCZE˛ŚCIEJ ZADAWANE PYTANIA DOTYCZACE
˛ FUNKCJI

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

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

Potraficie wiec
˛ już badać funkcje i to nie tylko te “szkolne”, tzn. liniowe, kwadratowe,
homograficzne, wykładnicze czy logarytmiczne, ale też te bardziej złożone. Z pomoca˛
Sage-a potrafilibyście z pewnościa˛ odpowiedzieć na wszystkie zadawane wcześniej py-
tania dla dużo bardziej złożonych funkcji.

Zwykle sporym problemem jest naszkicowanie w miare˛ dokładnego wykresu badanej


funkcji. Jeśli nie mamy odpowiedniego programu komputerowego, to do sporzadzenia
˛ wy-
kresu potrzebna jest znacznie szersza wiedza na temat funkcji od tej, która˛ zdobywacie
w szkole średniej. Jednakże rysowanie wykresów w programie Sage, jak już zdażyliście
˛
zaobserwować, jest łatwe. Narysujmy wykres takiej funkcji:

x3 + 2x2 + 2
f(x) = x
2 − (x − 3)3

sage: f(x) = sqrt(x^3+2*x^2+2)/(2^x-(x-3)^3)

sage: plot(f, x, -2, 10)

27
ROZDZIAŁ 1. FUNKCJE

0.8

0.6

0.4

0.2

-2 2 4 6 8 10

Kolejny problem, który możemy spotkać, to rozwiazywanie


˛ równań i nierówności.
W przypadku wielomianów czy funkcji wymiernych potraficie sobie poradzić. Rozwiażmy
˛
np. takie równanie: √
3
2x3 − 4x2 + 2
= 0.
x − 2x

Rozwiazaniem
˛ jest:

sage: solve((2*x^3-4*x^2+2)^3/(x-2^x),x)

1√ 1√
 
1 1
wynik: x = − 5 + ,x = 5 + ,x = 1
2 2 2 2

Wiecej
˛ na temat rozwiazywania
˛ równań, nierówności, układów równań i nierówności
dowiecie sie˛ w rozdziale czwartym.

1.3 Funkcje poznane w szkole

Rozwiażmy
˛ teraz kilka zadań dotyczacych
˛ funkcji, które poznaliście badź
˛ poznajecie
dopiero w szkole.

1.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 miedzy
˛ nimi

28
1.3. FUNKCJE POZNANE W SZKOLE

zwiazek
˛
y=a·x

dla pewnej liczby rzeczywistej a 6= 0. Przykładowo jeśli x zwiekszymy


˛ dwukrotnie, to y też
zwiekszy
˛ sie˛ dwukrotnie
a(2x) = 2(ax) = 2y.

Ogólny wzór funkcji liniowej zawiera jeszcze jeden współczynnik b ∈ R, tzn.

f(x) = ax + b.

Jest to funkcja bardzo łatwa w analizie, bo jak wiemy jej wykresem jest linia prosta.
Zatem wystarczy, że poznamy dwa punkty jej wykresu i już możemy naszkicować jej
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.

Troche˛ 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:
yB − yA
y − yA = (x − xA ).
xB − xA

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 bedziemy


˛ 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 wiec
˛ układ równań

a · (−3) + b = 2

a · 2 + b = −1

Łatwo go rozwiażemy
˛ metoda˛ przeciwnych współczynników. Wystarczy pomnożyć pierw-

29
ROZDZIAŁ 1. FUNKCJE

sze równanie przez (−1) i dodać do drugiego.

3
5a = −3 czyli a = − = −0.6.
5

Otrzymaliśmy proste równanie z jedna˛ niewiadoma˛

b = −1 − 2a = −1 − 2 · (−0.6) = 0.2.

Polecenia solve można użyć również do rozwiazywania


˛ układów równań, np.

sage: var(’a, b’)

sage: solve( [a*(-3)+b==2, a*2+b==-1], a, b )


    
3 1
wynik: a= − ,b =
5 5

Otrzymujemy wiec
˛ równanie prostej

f(x) = −0.6x + 0.2.

Program Sage wykona te˛ prace˛ za nas jeszcze szybciej. Otóż posiada specjalna˛ metode˛
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 przy-
padku 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 widzicie, 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 do-
pasowanie może nie być tak dokładne. Na dokładność wpływa przede wszystkim liczba
punktów przekazanych funkcji find_fit.

30
1.3. FUNKCJE POZNANE W SZKOLE

Zobaczmy teraz wykres funkcji, która˛ 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
f(x) =−53 x + 15
0.8

0.6

0.4

0.2

-1.5 -1 -0.5 0.5 1 1.5

-0.2

-0.4

-0.6

˛ w całej swojej dziedzinie (Df = R). Jeśli a < 0, to funkcja


Widzimy, że jest ona malejaca
liniowa maleje, natomiast dla a > 0 rośnie.

Łatwo jest wyznaczyć punkt przeciecia


˛ wykresu funkcji liniowej z osia˛ Oy, gdyż jest
2
to zawsze punkt o współrz˛ednych (0, b), czyli w tym przypadku (0, ). Z tego powodu
10
b nazywany jest współczynnikiem przesuniecia,
˛ gdyż powoduje on przesuniecie
˛ 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˛ liczbe˛ jednostek w góre˛ badź
˛ w dół.

31
ROZDZIAŁ 1. FUNKCJE

1
( ) =−53 x + 51
f x
g(x) =−53 x
0.8

0.6

0.4

0.2

-1.5 -1 -0.5 0.5 1 1.5


-0.2

-0.4

-0.6

-0.8

b
Miejsce zerowe możemy wyznaczyć wzorem x0 = − o ile a 6= 0 lub instrukcja˛
a
solve(a*x+b, x). Sa˛ one postaci

0.2 2 1
x0 = − = = .
−0.6 6 3
 
1
Zatem punkt ,0 jest przecieciem
˛ wykresu tej funkcji z osia˛ Ox.
3

1.3.2 Funkcja kwadratowa

Druga,
˛ dość obszernie omawiana˛ funkcja˛ w szkole, jest z pewnościa˛ funkcja kwadra-
towa. Wiecie, że wykresem funkcji kwadratowej jest parabola. Znali ja˛ już starożytni
Grecy. Już w III wieku p.n.e. Appolonius z Perge, matematyk grecki opisał w swojej ksie-
˛
dze “Stożkowe” miedzy
˛ innymi parabole.
˛ Dlaczego ksiega
˛ nosiła taki tytuł? Otóż wiek-
˛
szość krzywych które poznaliście w szkole, tj. prosta (możemy ja˛ też do nich zaliczyć), pa-
rabola, hiperbola, okrag,
˛ elipsa, można otrzymać z przekroju stożka odpowiednia˛ płasz-
czyzna.
˛

Parabola powstaje przez przeciecie


˛ stożka płaszczyzna˛ równoległa˛ do jego tworzacej
˛
i nie zawierajac
˛ a˛ jego wierzchołka. Możecie to zobaczyć na poniższych rysunkach.

32
1.3. FUNKCJE POZNANE W SZKOLE

Otrzymałem je poleceniem, które widzicie poniżej. W interaktywnym arkuszu dołaczonym


˛
do tej ksiażki
˛ znajdziecie te˛ instrukcje.
˛ Bedziecie
˛ mogli dokładniej sie˛ przyjrzeć temu
przekrojowi. Ja umieściłem tylko trzy zdjecia
˛ 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.
Wiele własności funkcji kwadratowej mieliście okazje˛ sobie przypomnieć podczas
rozwiazywania
˛ zadań z poprzedniego podrozdziału. Pojawił sie˛ tam wzór na wyróżnik
kwadratowy (delte),
˛ 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 ∆
gdzie punkt (p, q) = − , − jest wierzchołkiem paraboli.
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

33
ROZDZIAŁ 1. FUNKCJE

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
˛ nastepuj
˛ ace˛ zadanie:

Przykład 6. ˛ że liczby −1 i 2 sa˛ miejscami zerowymi funkcji f(x) =


Wiedzac,
ax2 + bx − 3 znajdź współczynniki a i b oraz zapisz ja˛ w postaci kanonicznej.

Skoro liczby −1 i 2 sa˛ miejscami zerowymi funkcji, wiec


˛ f(−1) = f(2) = 0, co daje
nastepuj
˛ acy˛ 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.

˛ pierwsze równanie przez 2 i dodajac


Mnożac ˛ do drugiego otrzymujemy 6a − 9 = 0, czyli
3 3 3
a = . Wstawiajac ˛ np. do pierwszego równania otrzymujemy b = a − 3 = − 3 = − .
2 2 2
Możemy zapisać wiec
˛ postać ogólna˛ funkcji

3 3
f(x) = x2 − x − 3.
2 2

Obliczmy teraz współrz˛edne wierzchołka paraboli, gdyż przydadza˛ nam sie˛ do rozwiaza-
˛
nia.
− 32 1
p=− 3 =
2· 2 2
 2
3 1 3 1 27
q = f(p) = − · −3=− .
2 2 2 2 8

Otrzymujemy wiec
˛
 2
3 1 27
f(x) = x− +− .
2 2 8

34
1.3. FUNKCJE POZNANE W SZKOLE

W programie Sage współczynniki a, p i q znajdziemy posługujac


˛ sie˛ 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 uwage,
˛ ż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 punk-
tem przeciecia
˛ 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
˛ miej-
sca 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 za-
dania.

a =1
a =−1.5
10

a =3
a =−5
5

-2 -1 1 2 3

-5

35
ROZDZIAŁ 1. FUNKCJE

Rozwiażmy
˛ jeszcze jedno zadanie zwiazane
˛ z funkcja˛ kwadratowa.
˛

Przykład 7. Wiedzac,
˛ że poniższy wykres jest wykresem funkcji kwadratowej

f(x) = ax2 + bx + c,

znajdź współczynniki a, b, c. Zapisz te˛ funkcje˛ w postaci kanonicznej i określ


przedziały monotoniczności tej funkcji.
y
3
2.5
2
1.5
1
0.5
x
-4 -3 -2 -1 1 2 3 4
-0.5
-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óż
˛ dla x ∈ (−∞, 1i oraz jest malejaca
funkcja jest rosnaca ˛ 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
˛ metode˛ z poprzedniego zadania, dostalibyśmy rozwia-
˛
zanie.

Możemy oczywiście znaleźć brakujace


˛ miejsce zerowe. Wystarczy zauważyć, że sa˛
one położone symetrycznie wzgledem
˛ prostej x = p czyli

x1 + x2
= p.
2

˛ za x1 = −4 oraz p = 1, obliczamy x2 = 6. Reszte˛ zadania pozostawiam


Wstawiajac
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
˛

36
1.3. FUNKCJE POZNANE W SZKOLE

jego postać kanoniczna. ˛ do a(x − p)2 + q nasze dane, otrzymujemy


˛ Podstawiajac

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


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

1.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 sie˛
wielomian.

Jedna˛ z prostszych jej odmian jest tak zwana funkcja homograficzna. Charaktery-
zuje ona wielkości odwrotnie proporcjonalne, tzn.

a
y= ,
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 przeciecie
˛ stożka płaszczyzna,
˛ która nie jest
równoległa do tworzacej
˛ ani też prostopadła do jego osi obrotu.

37
ROZDZIAŁ 1. FUNKCJE

Z pewnościa˛ rysowaliście w szkole wykresy hiperbol w prostokatnym


˛ układzie współ-
rz˛ednych. Wiecie wiec,
˛ że obie osie układu sa˛ asymptotami jej wykresu. Własność ta
powoduje, że funkcja homograficzna dobrze ilustruje operacje˛ przesuwania wykresu o
dany wektor [p, q].
5
Przesuńmy wykres funkcji f(x) = o wektor [−2, 1]. Wiemy, że wzór otrzymanej
x
funkcji bedzie
˛ wtedy wygladał
˛ nastepuj
˛ aco:
˛

5
h(x) = + 1.
x+2

y
10
f(x) = x5 8
h(x) = x +2
5 +1
6
4
2
x
-10 -8 -6 -4 -2 2 4 6 8
-2
-4
-6
-8

38
1.3. FUNKCJE POZNANE W SZKOLE

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 zobaczyć asymptote˛ pionowa,


˛ powstała˛ po przesunieciu
˛ hiperboli, należy użyć
opcji detect_poles="show". Natomiast pozioma˛ asymptote˛ narysowałem polece-
niem plot(1, x, -10, 8, linestyle=’--’, color=’gray’).

1.3.4 Funkcja wykładnicza i logarytmiczna

Sa˛ jeszcze dwie klasy funkcji, które mogliście poznać w szkole:

Funkcja wykładnicza Funkcja logarytmiczna


f(x) = ax f(x) = loga x
a > 0 ∧ a 6= 1

Napisałem definicje tych funkcji obok siebie, 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 sie˛ zapewne domyślacie, funkcja wykładnicza i logarytmiczna sa˛ funkcjami odwra-
calnymi i każda z nich jest odwrotnościa˛ drugiej. Zatem prawdziwe sa˛ wzory

loga ax = x, aloga x = x.

oraz (1.1)

39
ROZDZIAŁ 1. FUNKCJE

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 funk-
cji wykładniczej mamy odwrotna˛ sytuacje,
˛ tzn. dziedzina˛ jest zbiór liczb rzeczywistych, a
zbiorem wartości jest przedział (0, ∞). I tak dzieje sie˛ zawsze w przypadku funkcji wza-
jemnie 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)

y
y
6
y =2x 60
4
50

40 2
30
x
20 10 20 30 40 50 60

10 -2
y =log2 x
x
-4 -2 2 4 6 -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 dziesieć
˛ jednostek pionowych. W przypadku funkcji logaryt-
micznej 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.

40
1.3. FUNKCJE POZNANE W SZKOLE

Dla a = 0.5 wykresy wygladaj


˛ a˛ nastepuj
˛ aco:
˛

y
y
4
60 y =log0.5x
y =(12 ) x
2
50

40 x
10 20 30 40 50 60
30
-2
20

10 -4
x
-6 -4 -2 2 4 -6

Tym razem obie funkcje sa˛ malejace.


˛ Ogólnie gdy a ∈ (0, 1), to funkcja wykładnicza
˛ natomiast dla a > 1 obie rosna.
i logarytmiczna maleja, ˛

Przykład 8. Napisz wzór funkcji wykładniczej f(x) = ax−p + q majac


˛ jej wykres
y
8

2
x
-6 -4 -2 2
-2

Podaj wzór funkcji do niej odwrotnej.

Z wykresu od razu widzimy, że q = −2.


Łatwo odczytamy z wykresu współrz˛edne dwóch punktów: (−2, 0) oraz (0, 6). Pod-
stawmy 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.

41
ROZDZIAŁ 1. FUNKCJE

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 sie˛ zgadza.

˛ musimy z równania y = 2x+3 −2 wyznaczyć zmienna˛ x.


Aby znaleźć funkcje˛ odwrotna,

sage: x,y = var(’x,y’)

sage: f = y == 2^(x+3) -2

sage: f.solve(x)

 
3 log (2) − log (y + 2)
wynik: x = −
log (2)

Przekształćmy to równanie samodzielnie. Logarytmujac


˛ obustronnie poniższe równanie
logarytmem o podstawie 2, na podstawie wzorów (1.1) y + 2 = 2x+3 otrzymujemy
log2 (y + 2) = x + 3. Zatem
x = log2 (y + 2) − 3.

Wzór funkcji odwrotnej jest nastepuj


˛ acy:
˛

f −1 (x) = log2 (x + 2) − 3.

Widzimy, że otrzymaliśmy go po zamianie zmiennej x ze zmienna˛ y w poprzednim rów-


naniu. Korzystajac
˛ z własności logarytmu wynik, który dał nam program Sage możemy
przekształcić do takiej samej postaci. Proponuje˛ wykonać to zadanie jako ćwiczenie.

42
1.3. FUNKCJE POZNANE W SZKOLE

Sage domyślnie definiuje logarytmy o podstawie e, gdzie e jest tzw. liczba˛ Eulera.
Należy o tym pamietać,
˛ gdyż zwykle w ksiażkach
˛ matematycznych log(a) oznacza loga-
rytm dziesietny
˛ 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 nastepuj
˛ ac ˛ a˛ ciekawa˛ własność logaryt-
mów:
loga (b · c) = loga b + loga c.

Przez wiele lat wykorzystywano ja˛ do obliczania iloczynów dużych liczb. Dzieki
˛ niej
mnożenie liczb zastepujemy
˛ 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 moge˛ odczytać, dla jakiej liczby logarytm przy
podstawie 2 wynosi 15 dostane˛ 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
˛ by zbyt mocno zwiekszyła
˛ swoja˛ objetość).
˛

sage: e = exp(1)
wynik: 2.71828182845904523536028747135
sage: e.N(digits=30)

43
ROZDZIAŁ 1. FUNKCJE

Wyrażenie exp(x) oznacza funkcje˛ wykładnicza˛ y = ex , zatem exp(1) = e1 = e.

Liczba e posiada wiele definicji. Jedna˛ z nich jest granica ciagu


˛
 n
1
e = lim 1 + .
n→∞ n
 n
1
Oznacza to, że jak bedziemy
˛ obliczać kolejne wyrażenia 1 + dla coraz to wiek-
˛
n
szych liczb naturalnych, to bedziemy
˛ otrzymywać lepsze przybliżenie liczby e. Obliczmy
je dla liczb naturalnych od 1 do 10, a potem od 10000 do 10010.

sage: var(’n’)

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

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

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

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

Widzimy, że gdy n jest wieksze


˛ niż 10000, wartości nie różnia˛ sie˛ 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


X 1
e= .
n=0
n!

sage: e = sum([1/factorial(n) for n in range(0,200)])

sage: e.N()

wynik: 2.71828182845905

44
1.4. ZADANIA

1.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
˛ ń równania x2 − 9 = 0.
rozwiaza

2. Wykresem funkcji liniowej jest odcinek o końcach w punktach A = (−3, 1) i B =


(2, 2). Podaj dziedzine˛ tej funkcji, zbiór wartości oraz punkty przeciecia
˛ 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.

4. Dla podanych funkcji kwadratowych podaj miejsca zerowe i postać iloczynowa˛ (o ile
istnieja)
˛ oraz współrz˛edne wierzchołka paraboli i postać kanoniczna.
˛ Nastepnie
˛
naszkicuj ich wykresy.

(a) f(x) = 2x2 − 3x − 2, (b) f(x) = −5x2 + 20x − 20,

(c) f(x) = 3x2 + 4x + 5, (d) f(x) = −x2 + 5x − 4,

5. Funkcja f(x) = −x2 + x + 6 została zdefiniowana na przedziale h−3, 2i. Naszkicuj


wykres tej funkcji oraz podaj jej zbiór wartości.

˛ że poniższy wykres jest wykresem funkcji kwadratowej f(x) = ax2 +bx+c,
6. Wiedzac,
znajdź współczynniki a, b, c, zapisz ja˛ w postaci kanonicznej i określ przedziały
monotoniczności tej funkcji.

45
ROZDZIAŁ 1. FUNKCJE

y
3

1
x
-2 -1 1 2 3 4
-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.

−4
8. Dla funkcji wymiernej f(x) = − 5 podaj dziedzine˛ funkcji, zbiór wartości,
x−2
określ monotoniczność i naszkicuj jej wykres.

3x − 2
9. Niech bedzie
˛ określona funkcja wzorem f(x) = . Podaj miejsce zerowe tej
4 − 2x
funkcji oraz punkt przeciecia
˛ sie˛ wykresu tej funkcji z osia˛ OY.
! Czy do wykresu tej

√ 3
funkcji należy punkt o współrz˛ednych A = 3 − 1, −1 ?
2

2 − 2x
10. Naszkicuj wykres funkcji f(x) = za pomoca˛ pakietu Sage i na jego podstawie
x+3
e
znajdź jej wzór w postaci f(x) = + q.
x−p
ax + 5
11. Określ dziedzine˛ funkcji homograficznej f(x) = oraz wyznacz współczynnik
3x − 2
a wiedzac,
˛ że wykres tej funkcji przechodzi przez punkt A = (2, 1).

e
12. Napisz wzór funkcji homograficznej w postaci f(x) = + q majac
˛ jej wykres
x−p

x
-6 -4 -2 2 4 6
-3

-6

46
1.4. ZADANIA

13. Dwóch traktorzystów orze to samo pole. Gdyby orali je do końca razem, wykonaliby
te˛ prace˛ w czasie 6 godzin. Gdyby natomiast każdy z nich orał to pole samodzielnie,
to pierwszy z nich skończyłby o 4 godziny wcześniej, niż drugi. Ile czasu zajełoby
˛
każdemu z traktorzystów zaoranie tego pola?

14. Oblicz

3

6 2
(a) log343 7, (b) log√8 32, (c) log 13 2712 , (d) log √1 25, (e) 3log3 123 , (f) 64log6 36 .
5

15. Naszkicuj wykresy podanych funkcji, określ ich dziedziny, zbiór wartości oraz miej-
sca zerowe

(a) f(x) = log5 x, (b) f(x) = log 12 (x−5), (c) f(x) = log3 (x+1)−4, (d) f(x) = log2 x2 .

16. Napisz wzór funkcji logarytmicznej f(x) = loga (x−p) majac


˛ jej wykres na poniższym
rysunku. Dla jakieo argumentu funkcja przyjumje wartość 0.5?

y
4

x
-4 -3 -2 -1 1 2 3 4

-2

-4

47
ROZDZIAŁ 1. FUNKCJE

48
Rozdział 2

Rachunek prawdopodobieństwa
i statystyka matematyczna

Rachunek prawdopodobieństwa, to dział matematyki zajmujacy


˛ sie˛ badaniem zdarzeń
zachodzacych
˛ podczas wykonywania doświadczeń losowych. Teorie˛ te˛ zapoczatkowali
˛
Pierre de Fermat oraz Blaise Pascal w XVII wieku badajac
˛ pewna˛ gre˛ 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˛ game˛ narz˛edzi służacych
˛
do analizy danych ale też metody pozyskiwania i prezentacji tych danych.
dlatego wyniki statystyczne sa˛

2.1 Rachunek prawdopodobieństwa

Słowo “prawdopodobieństwo” pojawia sie˛ nie tylko w literaturze matematycznej. Sły-


szymy przecież bardzo cz˛esto stwierdzenie, że coś prawdopodobnie sie˛ wydarzy, np.
istnieje prawdopodobieństwo, że jutro bedzie
˛ padać. Słowo to używane jest też naprze-
miennie ze słowem “szansa”. a˛ moneta,
˛ odpowiemy, że jeden do dwóch lub że mamy
Oznaczmy symbolem Ω zbiór wszystkich możliwych wyników, które możemy otrzy-
mać podczas pewnego doświadczenia. Cz˛esto mówimy, że jest to przestrzeń wszystkich
zdarzeń elementarnych. Z tego powodu elementy zbioru Ω nazywamy zdarzeniami ele-

49
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

mentarnymi, a jego podzbiory zdarzeniami. Przypomnijmy teraz klasyczna˛ definicje˛


prawdopodobieństwa.
Prawdopodobieństwo zajścia pewnego zdarzenia A ⊂ Ω jest równe

|A|
P(A) = ,
|Ω|

gdzie
|A| – oznacza ilość zdarzeń elementarnych sprzyjajacych
˛ zdarzeniu zdarzenia A,
czyli po prostu ilość elementów tego zbioru, natomiast
|Ω| – jest liczba˛ wszystkich możliwych zdarzeń, czyli wszystkich elementów zbioru Ω.
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 bedziemy
˛ zajmować sie˛ zbio-
rami, których elementy da sie˛ policzyć, gdyż bed
˛ a˛ 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ń ele-
mentarnych.

Łatwo zliczymy ilość elementów przestrzeni Ω przy pomocy tak zwanej reguły mnożenia,
która oparta jest na pojeciu
˛ iloczynu kartezjańskiego. Jeśli ktoś nie pamieta
˛ badź
˛
jeszcze nie miał okazji sie˛ 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 liczbe˛ elementów zbioru drugiego, tzn.

|A × B| = |A| · |B|.
1
Okazuje sie,
˛ że nie jest to możliwe dla dowolnych zbiorów. Dział matematyki zajmujacy
˛ sie˛ tym proble-
mem nazywa sie˛ teoria˛ miary.
2
O takich zbiorach mówimy, że sa˛ przeliczalne.

50
2.1. RACHUNEK PRAWDOPODOBIEŃSTWA

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ć wiecej


˛ 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˛ pare˛ (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 sie˛ 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.

˛ sie˛ z cyfr od 1 do 6, a nastepnie


Zdefiniujmy sobie zbiór o nazwie Kostka składajacy ˛
utwórzmy iloczyn kartezjański Kostka × Kostka = Omega.

sage: Kostka = Set([1,2,3,4,5,6])

sage: Omega = CartesianProduct(Kostka, Kostka).map(tuple)

sage: Omega.list()

Jak widzimy, Omega zawiera wszystkie możliwe pary. Możemy zobaczyć ich ilość za
pomoca˛ polecenia

sage: Omega.cardinality()

wynik: 36

51
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Weźmy teraz jako przykład typowa˛ sytuacje˛ w grze w karty. Zazwyczaj na poczatku
˛
gry gracze 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ć uwage,


˛ że w tym przypadku nie ma znaczenia kolej-
ność wystepowania
˛ kart, w przeciwieństwie do poprzedniego zadania, gdzie kolejność
wystepowania
˛ elementów w parach była istotna. Kiedy dostaniemy pieć
˛ kart, nie ważne
w jakiej kolejności je ułożymy w dłoni, to bedzie
˛ wciaż
˛ tych samych pieć
˛ kart. Mamy
wiec
˛ do czynienia z podzbiorami. Zatem pytanie możemy sformułować nastepuj
˛ a˛ co: ile
istnieje podzbiorów piecioelementowych
˛   zbioru składajacego
˛ sie˛ z 52 kart.
n
Przyjmijmy oznaczenie, że oznacza ilość wszystkich k – elementowych podzbio-
k
rów zbioru n – elementowego i możemy go obliczyć za pomoca˛ wzoru
 
n n!
= .
k (n − k)! k!

Takie podzbiory nazywamy kombinacjami, ściślej k – elementowymi kombinacjami


zbioru n – elementowego.  
52
˛ odpowiedzi do naszego zadania: |Ω| =
Udzielmy wiec . Z powyższego wzoru
5
możemy wyliczyć dokładna˛ wartość Omegi, jednak nie zrobie˛ tego, w zamian wykorzy-
stam program Sage. Wystarczy wydać polecenie

sage: Omega = binomial(52,5)

i zobaczymy wynik |Ω| = 2598960.


Mało tego, możemy sobie w tym programie taka˛ talie˛ 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)

Zobaczmy ile istnieje kolorów kart

52
2.1. RACHUNEK PRAWDOPODOBIEŃSTWA

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ć rodzine˛ wszystkich rozdań 5 – kartowych, nastepuj
˛ aco˛

sage: Rozdania = Subsets(Karty, 5)

Wiemy już ile ich jest i jest ich całkiem sporo, dlatego nie bedziemy
˛ ich tu wszystkich
wyświetlać a tylko jedno losowe rozdanie:

sage: Rozdania.random_element()

wynik: {(Krol, Trefl) , (8, Pik) , (Dama, Kier) , (9, Kier) , (3, Pik)}
Sprawdźmy dla pewności czy wszystkich rozdań jest rzeczywiście tyle ile obliczyliśmy
wzorem na kombinacje.

sage: Rozdania.cardinality()

wynik: 2598960
Wszystko sie˛ zgadza. Chciałbym zwrócić uwage˛ 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 sie˛ stad,
˛ że dowolna˛ poteg
˛ e˛
dwumianu x + y możemy obliczyć wg. wzoru

n  
X n k n−k
(x + y)n = x y ,
k=0
k

53
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

zwany dwumianem Newtona. Jak widzimy, współczynniki tego dwumianu sa˛ odpowied-
nimi symbolami Newtona. Już na przełomie XI i XII w. Chińczycy odkryli, że współczynniki
˛ tzw. trójkat
te układaja˛ sie˛ symetrycznie, tworzac ˛ Pascala. 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ółczyn-
niki z czwartego poziomu od góry:

(x + y)3 = x3 + 3x2 y + 3xy2 + y3 .

Przestrzeń zdarzeń elementarnych może posiadać nieskończenie wiele elementów.


Przyjrzyjmy sie˛ prostej grze.

Przykład 3. Dwóch graczy na przemian rzuca symetryczna˛ moneta.


˛ Wygrywa
ten, kto pierwszy wyrzuci orła. Określ przestrzeń zdarzeń elementarnych.

Widzimy, że liczba zdarzeń jest nieskończona. Może sie˛ przecież zdarzyć, że orzeł nigdy
nie wypadnie. Przestrzeń zdarzeń elementarnych składa sie˛ z nastepuj
˛ acych
˛ ciagów
˛


Ω = (O), (R, O), (R, R, O), (R, R, R, O), . . . .

54
2.1. RACHUNEK PRAWDOPODOBIEŃSTWA

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


szanse,
˛ że losowo wybrany punkt tego kwadratu bedzie
˛ leżał na trójkacie,
˛ któ-
rego podstawa˛ jest jeden z boków kwadratu, a wierzchołek leży na przeciwle-
głym boku.

Możemy te˛ sytuacje˛ zilustrować rysunkiem, który wykonam w Sage-u. Najpierw zdefi-
niujmy sobie pieć
˛ punktów, które bed
˛ a˛ wierzchołkami kwadratu oraz trójkata.
˛

sage: A = (0, 0); B = (2, 0);

sage: D = (0, 2); C = (2, 2);

sage: W = (1.7, 2)

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

1.5

0.5

0.5 1 1.5 2

55
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

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 sie˛
tego zrobić tak, jak to miało 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 uwage,
˛
˛ nie zależy od położenia wierzchołka i jest zawsze równa 2,
że wysokość tego trójkata
zatem
2·2
|A| = = 2.
2

Otrzymujemy tym samym odpowiedź, że

2 1
P(A) = = .
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 pod-
zbiorami. Widzieliśmy w zadaniu z kwadratem, że nie zawsze, jednak zadania spotykane
w szkole średniej zwykle sa˛ ograniczone do takich właśnie sytuacji. Dział matematyki zaj-
mujacy
˛ sie˛ tego typu zliczaniem nazywany jest kombinatoryka.
˛ Nazwa zwiazana
˛ jest z
pojeciem
˛ kombinacji, które poznaliście już w zadaniu z kartami, jednakże nie ogranicza
sie˛ tylko do nich.
Rozwiażmy
˛ teraz kilka zadań z prawdopodobieństwem, w trakcie których poznacie
badź
˛ przypomnicie sobie inne pojecia
˛ kombinatoryki.

Przykład 5. Asia, Basia, Czarek, Darek i Eryk wsiadaja˛ do tramwaju. Jakie


jest prawdopodobieństwo, że chłopcy okaża˛ sie˛ dżentelmenami i wpuszcza˛
dziewcz˛eta pierwsze?

Musimy najpierw obliczyć na ile sposobów może ta piatka


˛ osób wejść do tramwaju,
bedzie
˛ to nasz zbiór Ω, czyli wszystkich możliwych zdarzeń. Widzimy, że możliwości jest
tyle, ile sposobów przestawienia miedzy
˛ soba˛ tej piatki.
˛ Takie przestawienia, zamiany
miejsc, nazywamy permutacjami. Ogólnie, elementy zbioru n – elementowego, możemy

56
2.1. RACHUNEK PRAWDOPODOBIEŃSTWA

poprzestawiać na
n! = 1 · 2 · . . . · (n − 1) · n

możliwości, mówimy ładniej, że istnieje n! (“n silnia”) permutacji tego zbioru. Zatem
dostajemy
|Ω| = 5! = 1 · 2 · 3 · 4 · 5 = 120.

W Sage-u możemy te˛ silnie˛ obliczyć poleceniem factorial(5). Zobaczmy, jak two-
rzymy permutacje w programie Sage:

sage: p = Permutations([’A’,’B’,’C’,’D’,’E’])

Teraz poleceniem p.list() zobaczymy wszystkie możliwe układy tych pieciu


˛ liter
odpowiadajacych
˛ naszym osobom. Wiemy już, że jest ich

sage: Omega = p.cardinality()

wynik: 120
Musimy teraz obliczyć, na ile sposobów może ta piatka
˛ wejść do tramwaju, ale 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()

˛ chłopcy moga˛ sie˛ ustawić na 6 sposobów zatem


Na każdy układ dziewczat,

|A| = 2 · 6 = 12.

Obliczamy wiec
˛ prawdopodobieństwo, że chłopcy okazali sie˛ dżentelmenami:

12 1
P(A) = = .
120 10

57
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Przykład 6. W urnie mamy trzy kule białe i cztery czarne. Losujemy trzy
kule bez zwracania. Jakie jest prawdopodobieństwo, że kule bed
˛ a˛ tego samego
koloru?

Utwórzmy sobie taka˛ urne˛ w programie Sage:

sage: KuleBiale = Set(["1b", "2b", "3b"])

sage: KuleCzarne = Set(["1c", "2c", "3c", "4c"])

sage: Urna = KuleBiale + KuleCzarne

Nasza urna zawiera nastepuj


˛ ace˛ elementy:

sage: Urna.list()

wynik: [1c, 1b, 2b, 2c, 3c, 3b, 4c]


Zbiór Ω składa sie˛ z wszystkich podzbiorów 3 – elementowych naszej urny

sage: Omega = Subsets(Urna, 3)

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.

58
2.1. RACHUNEK PRAWDOPODOBIEŃSTWA

sage: Subsets(KuleBiale, 3).list()

wynik: [{3b, 1b, 2b}]

sage: Subsets(KuleCzarne, 3).list()

wynik: [{3c, 1c, 4c} , {3c, 1c, 2c} , {3c, 4c, 2c} , {1c, 4c, 2c}]
Widzimy wiec,
˛ że jest ich łacznie
˛ 5, zatem |A| = 5. Można oczywiście obliczyć wzorem
   
3 4
|A| = + = 5.
3 3

Dostajemy wiec
˛ odpowiedź, że prawdopodobieństwo wylosowania kul tego samego ko-
loru wynosi
5 1
P(A) = = .
35 7

Kiedy tworzymy rodziny podzbiorów danych zbiorów, musimy pamietać,


˛ że ich liczba
bardzo szybko rośnie. Weźmy na przykład bardzo mały zbiór 3 – elementowy {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}]
Rodzina podzbiorów tego zbioru zawiera już

sage: PPodzb = Subsets(Subsets(Zbior))

sage: PPodzb.cardinality()

wynik: 256
elementów, a rodzina podzbiorów uzyskanego zbioru zawiera aż tyle

sage: PPPodzb = Subsets(Subsets(Subsets(Zbior)))

sage: PPPodzb.cardinality()

wynik: 11579208923731619542357098500868790785326998466564056403945758400791312963993
elementów. Liczba ta składa sie˛ z nastepuj
˛ acej
˛ liczby cyfr:

59
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

sage: PPPodzb.cardinality().ndigits()

wynik: 78
Dzieje sie˛ tak gdyż liczba podzbiorów zbioru trzy elementowego składa sie˛ z 23
3
podzbiorów, rodzina jej podzbiorów składa sie˛ z 22 = 256 podzbiorów, no i ta duża
liczba to
23
22

Przykład 7. Do windy 5–pietrowego


˛ budynku wsiadły cztery osoby. Jakie jest
prawdopodobieństwo, że każda osoba wysiadzie
˛ na innym pietrze?
˛

Najpierw zdefiniujmy zbiór wszystkich możliwych zdarzeń Ω. Na ile wszystkich spo-


sobó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 sytuacje,
˛ że
wszyscy wysiedli na pierwszym pietrze?
˛ 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 pietrze,
˛
drugi element ciagu
˛ odpowiada drugiej osobie i informuje, że wysiadła również na 1
pietrze,
˛ itd. Opiszmy w podobny sposób sytuacje˛ np., że osoby pierwsza i trzecia wysiadły
na drugim pietrze,
˛ druga na piatym
˛ i czwarta na trzecim:

(2, 5, 2, 3).

Co tak naprawde˛ otrzymujemy?


Widzimy, że sa˛ to ciagi
˛ czteroelementowe budowane z liczb odpowiadajacych
˛ numerom
pieter,
˛ czyli należacych
˛ do takiego zbioru

{1, 2, 3, 4, 5}.

W kombinatoryce, takie ciagi


˛ nazywa sie˛ wariacjami. Dodatkowo widzimy, że numery
pieter
˛ moga˛ sie˛ powtarzać, tzn. kilka osób może wysiaść
˛ na jednym pietrze,
˛ czyli mamy
do czynienia z k – elementowym i wariacjami z powtórzeniami zbioru n – elemento-

60
2.1. RACHUNEK PRAWDOPODOBIEŃSTWA

wego, gdzie k = 4 i n = 5, które obliczamy wzorem

Wnk = nk .

Zatem możemy obliczyć |Ω| = 54 = 625.

Teraz musimy zliczyć wszystkie sytuacje, w których każda osoba wysiada na innym
pietrze.
˛ Oznaczmy zbiór tych zdarzeń litera˛ A. Jak łatwo sie˛ domyślacie, możemy je sobie
zilustrować również za pomoca˛ powyższych ciagów,
˛ tylko teraz wymagamy, aby numer
pietra
˛ sie˛ nie powtórzył, np. ciag
˛
(2, 3, 1, 5)

oznacza, że pierwsza osoba wysiadła na drugim pietrze,


˛ druga na 3, trzecia na 1 i czwarta
na 5. Mamy wiec
˛ do czynienia również z wariacjami, ale bez powtórzeń. Przypomnijmy,
że wszystkich k – elementowych wariacji bez powtórzeń zbioru n – elementowego
jest
n!
Vnk = .
(n − k)!

Dzieki
˛ temu, możemy obliczyć

5! 5!
|A| = = = 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 waria-
˛ na 5 sposobów, druga ma już 4 pietra
cji. Zauważmy, że pierwsza osoba może wysiaść ˛
do wyboru, trzeciej pozostaja˛ 3 pietra
˛ no i czwarta ma już tylko 2 do wyboru. Posługujac
˛
sie˛ reguła˛ mnożenia, otrzymujemy

|A| = 5 · 4 · 3 · 2 = 120.

61
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Prawdopodobieństwo, że na każdym pietrze


˛ wysiadzie
˛ inna osoba wynosi

|A| 120 24
P(A) = = = .
|Ω| 625 125

Zilustrujmy zbiór Ω w programie Sage. Utwórzmy najpierw zbiór pieter


˛

sage: Pietra = Set([1, 2, 3, 4, 5])

a nastepnie
˛ zbiór ciagów
˛ jako poczwórny iloczyn kartezjański pieter
˛

sage: Omega = CartesianProduct(Pietra, Pietra,\

Pietra, Pietra)

Nie bed
˛ e˛ wyświetlał wszystkich elementów zbioru Omega gdyż jest ich zbyt dużo,
wiemy z poprzednich obliczeń ile? Zobaczmy tylko przykładowy element wylosowany
przez komputer

sage: Omega.random_element()

wynik: [4, 1, 1, 3]
Sprawdźmy, czy liczba wszystkich zdarzeń zbioru Omega jest taka sama jak obli-
czona Ω.

sage: Omega.cardinality()

wynik: 625
Jak widzimy wszystko sie˛ zgadza.

Przykład 8. Mamy rozdać 7 paczków


˛ czterem osobom. Jakie jest prawdopo-
dobieństwo, że każda osoba otrzyma co najmniej jeden paczek?
˛

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. Na przykład rozwiazanie


˛

a = 2, b = 1, c = 4, d = 0

62
2.1. RACHUNEK PRAWDOPODOBIEŃSTWA

oznacza, że 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 10
= = 120.
3 3

Już wyjaśniam skad ˛ Niech symbol “•” oznacza paczek.


˛ sie˛ to wzieło. ˛ Zauważmy, że wtedy
powyższe przykładowe rozwiazanie
˛ można zilustrować w ten sposób

osoba 1 osoba 2 osoba 3 osoba 4


•• • • • ••

Przyjrzyjmy sie˛ jeszcze kilku przykładowym rozdaniom

osoba 1 osoba 2 osoba 3 osoba 4


•• • • • ••
• •• • • • •
•• • • • • •

Widzimy, że pytanie możemy sformułować nastepuj


˛ aco:
˛ Na ile sposobów moge˛ wybrać
˛ osoby) ze zbioru 10 – elementowego (3 przegródki +
trzy przegródki (kreski oddzielajace
7 paczków),
˛ czyli na tyle ile jest kombinacji 3 – elementowych zbioru 10 – elementowego,
tzn.    
4+7−1 10
= = 120.
3 3

Możemy nawet napisać ogólny wzór na liczbe˛ rozwiaza


˛ ń równania

x1 + x2 + . . . + xn = k

w zbiorze liczb całkowitych nieujemnych.3 Jest ona równa


 
n+k−1
Knk = .
k

W programie Sage możemy bardzo łatwo sobie takie rozmieszczenia zdefiniować pole-
ceniem

sage: Rozwiazania = Compositions(7, length=4, min_part=0)

3
Rozwiazania
˛ tego równania cz˛esto interpretujemy, jako liczbe˛ rozmieszczeń k – nierozróżnialnych ele-
mentów w n – komórkach. Rozmieszczenia tego typu nazywamy kombinacjami z powtórzeniami.

63
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Zbiór Rozwiazania zawiera wszystkie rozwiazania


˛ naszego równania. Zobaczmy
kilka poczatkowych
˛ rozwiaza
˛ ń:

sage: Rozwiazania.list()

Polecenie Compositions generuje wszystkie możliwe rozkłady liczby 7 na sumy liczb


naturalnych. Dodajac
˛ opcje˛ min_part=0, dopuszczamy do sytuacji, że niektóre składniki
moga˛ być zerami. Opcja length=4 daje nam wszystkie cztero–skł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,
˛ aby każda osoba otrzymała co najmniej
jeden.

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
˛ rozwiazanie:
˛

sage: A.list()

64
2.1. RACHUNEK PRAWDOPODOBIEŃSTWA

Ich liczba wynosi:

sage: A.cardinality()

wynik: 20
Bez pomocy programu można też w miare˛ łatwo zliczyć elementy zbioru A. Chcemy,
aby każda osoba otrzymała paczek,
˛ zatem na poczatku
˛ dajmy każdemu po jednym. Zo-
staja˛ nam jeszcze trzy paczki,
˛ które rozdajemy już zupełnie losowo. Możemy je wiec
˛
zliczyć tak, jak zliczyliśmy wszystkie elementy zbioru |Ω|, czyli wszystkie całkowite nie-
ujemne rozwiazania
˛ równania
a + b + c + d = 3.

Obliczymy je wzorem    
4+3−1 6
|A| = = = 20.
3 3

Odpowiedź zatem brzmi:


20 1
P(A) = = .
120 6

Rozwiażmy
˛ teraz pewne zadanie tylko za pomoca˛ programu Sage. Zachecam
˛ jednak
do samodzielnego rozwiazania
˛ tego zadania.

Przykład 9. Bankomat może wypłacać pieniadze


˛ w banknotach: 10zł, 20zł,
50zł i 100zł. Jakie jest prawdopodobieństwo, że wypłacajac
˛ kwote˛ 230zł, banko-
mat użyje każdej z wymienionych kwot?

65
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Zadanie jest troszeczk˛e podobne do poprzedniego, gdyż również możemy pytać ile
rozwiaza
˛ ń nieujemnych całkowitych posiada równanie

10a + 20b + 50c + 100d = 230.

Program Sage posiada metode˛ WeightedIntegerVectors, która potrafi podać


wszystkie możliwe rozwiazania
˛ tego równania. Wydajmy wiec
˛ nastepuj
˛ ace˛ polecenie

sage: kwota230=WeightedIntegerVectors(230, [10,20,50,100])

Utworzyliśmy tym samym liste˛ wszystkich rozwiaza


˛ ń, która˛ zobaczymy po wydaniu pole-
cenia

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

4 1
P(A) = = .
52 13

66
2.2. STATYSTYKA

2.2 Statystyka

Jak wspomniałem we wstepie


˛ statystyka zajmuje sie˛ analiza˛ danych oraz metodami
pozyskiwania i prezentacji tych danych. Z jedna˛ miara˛ statystyczna˛ myśle,
˛ że prawie
każdy z czytelników sie˛ już spotkał, 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

d1 + d2 + . . . + dn
S=
n

Utwórzmy sobie w programie Sage troche˛ 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: S = mean(Dane); S

46
wynik:
3
Zatem
46
S=
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 sie˛ zdarza, że żadna z danych
nie przyjmuje wartości równej średniej jak w naszym przypadku. Jak widzimy dane sa˛
dość mocno rozrzucone, tzn. jest duża rozbieżność miedzy
˛ najmniejsza˛ wartościa,
˛ a
najwieksz
˛ a.
˛

sage: Dmin = min(Dane); print ’Dmin=’, Dmin

sage: Dmax = max(Dane); print ’Dmax=’, Dmax

wynik: Dmin = 5 wynik: Dmax = 24

67
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Ogólnie średnia arytmetyczna nie mówi nam, że wszystkie czy wiekszość
˛ wartości
naszych danych sa˛ bliskie tej średniej, lecz, że położenie środka tych danych leży w jej
pobliżu.

Pamietamy
˛ przecież z geometrii jak wyznacza sie˛ środek S odcinka na osi liczbowej
o końcach A = xA oraz B = xB . Jest to punkt

xA + xb
xS = ,
2

czyli średnia arytmetyczna końców tego odcinka. Dość dobra˛ miara˛ mówiac
˛ a˛ nam jak
mocno dane sa˛ oddalone od średniej arytmetyczne j jest odchylenie standardowe. Im
mniejsza jest wartość odchylenia standardowego, tym dane sa˛ mniej rozrzucone. Ogólny
wzór dla danych d1 , d2 , . . . , dn jest nastepuj
˛ acy˛
r r
(d1 − S)2 + (d2 − S)2 + . . . + (dn − S)2 d21 + d22 + . . . + d2n
σ= = − S2 .
n n

Odchylenie standardowe jest ściśle zwiazane


˛ z innym pojeciem
˛ statystycznym, wa-
riancja.
˛ Wariancja, jest kwadratem odchylenia standardowego i oznaczamy ja˛ symbolem
sigma2 . Czyli

(d1 − S)2 + (d2 − S)2 + . . . + (dn − S)2 d2 + d22 + . . . + d2n


σ2 = = 1 − S2 .
n n

Zobaczmy jak wygladaj


˛ a˛ te dwie wielkości dla naszych danych wygenerowanych wyżej
w programie Sage.

sage: OdchStand = std(Dane)

r
2098
wynik:
69
Zapiszmy wynik w postaci numerycznej.

sage: wOdch = N(OdchStand, digits=4)

wynik: 5.514

Czyli możemy stwierdzić, że średnio o 5.5 nasze dane odbiegaja˛ od średniej arytmetycz-
nej.

68
2.2. STATYSTYKA

Wiemy, że aby obliczyć wariancje˛ wystarczy ostatni wynik podnieść do kwadratu,
jednakże Sage posiada osobna˛ do tego celu funkcje˛

sage: Wariancja = variance(Dane)

2098
wynik:
69
Zapiszmy wynik w postaci numerycznej.

sage: N(Wariancja, digits=4)

wynik: 30.41
˛ Dla dwóch liczb a i b jest
Znamy zapewne ze szkoły jeszcze średnia˛ geometryczna.
ona pierwiastkiem kwadratowym z iloczynu tych liczb, tzn.


Sg = a · b.

Ma ona wiele ciekawych interpretacji geometrycznych, np. jest równa wysokości trójkata
˛
prostokatnego
˛ opuszczonej z wierzchołka kata
˛ prostego, tzn.

Ponieważ cały trójkat


˛ jest podobny
do tych mniejszych trójkacików
˛ pro-
stokatnych,
˛ które utworzyła nam
wysokość, wiec
˛

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.

69
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Ogólny wzór na średnia˛ geometryczna˛ dla danych d1 , d2 , . . . , dn wyglada


˛ nastepuj
˛ aco˛

p
n
Sg = d1 · d2 · . . . · dn .

W programie Sage jest on zdefiniowany w pakiecie scipy.stats. Po jego zaimporto-


waniu mamy do dyspozycji polecenie stats.gmean, które właśnie oblicza średnia˛ geo-
metryczna.
˛ Sprawdźmy ile ona wynosi dla naszych danych.

sage: import scipy.stats as stats

sage: Sg = stats.gmean(Dane)

wynik: 14.2211529148

Inna˛ miara˛ wykorzystywana˛ w statystyce jest mediana. Najprościej można powie-


dzieć, że jest to wartość leżaca
˛ po środku danych, które sa˛ uporzadkowane
˛ niemalejaco.
˛
Gdy liczba danych jest nieparzysta, to bierzemy po prostu środkowy element. Jeśli liczba
danych jest parzysta, to oczywiście środkowego elementu wtedy nie ma, zamiast niego
bierzemy średnia˛ arytmetyczna˛ dwóch elementów środkowych. Możemy wyrazić ja˛ na-
stepuj
˛ aco˛
m = d n+1 dla n nieparzystych
2

oraz
d n2 + d n2 +1
m= dla n parzystych.
2

Liczba naszych danych wygenerowanych przez program Sage wynosi

sage: n = len(Dane); n

wynik: 24
n = 24

Widzimy, że w naszym przypadku liczba danych jest parzysta, wiec


˛ mediana jest
równa średniej arytmetycznej wyrazów d12 i d13 naszych danych uporzadkowanych.
˛ Aby
posortować dane w porzadku
˛ niemalejacym
˛ wystarczy wydać polecenie

sage: Dane.sort()

70
2.2. STATYSTYKA

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

A wiec
˛
d12 = 16, d13 = 16

Zwróćmy uwage,
˛ że zmniejszyłem indeksy o jeden, ponieważ Sage rozpoczyna indeksy
od zera a nie od jeden, czyli u nas pierwszy element to Dane[0], a ostatni, to Dane[23].
Obliczmy wiec
˛ mediane˛
16 + 16
m= = 16
2

˛ a˛ mediane˛ o nazwie median, zatem


W Sage-u mamy gotowa˛ funkcje˛ liczac

sage: m = median(Dane); m

wynik: 16

W statystyce wykorzystuje sie˛ jeszcze wiele innych miar, jednakże nie bed
˛ e˛ o nich
teraz mówił. W szkole średniej mogliście jeszcze poznać jedna˛ z nich, tzw. dominante˛
inaczej zwana˛ mode.
˛ Dominanta jak nazwa wskazuje, jest to wartość, która dominuje,
czyli najcz˛eściej wystepuje
˛ w rozważanych danych. Zatem aby ja˛ obliczyć, należy obli-
czyć ilość wystapie
˛ ń każdej wartości w danych, a nastepnie
˛ wybrać te˛ najcz˛eściej sie˛
pojawiajac
˛ a.
˛ Wydajmy w Sage-u nastepuj
˛ ace˛ polecenia

sage: for d in Dane:

print ’liczba wystapien wartosci ’, d,\

’ w naszych danych, to: ’, Dane.count(d)

Zobaczymy nastepuj
˛ ace˛ informacje

71
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Widzimy, że najcz˛eściej wystepuj


˛ acymi
˛ wartościami sa˛ 16 i 17. Obie wystapiły
˛ trzykrotnie
w naszych danych. Zatem przyjmujemy, że m = 16 Możemy ja˛ obliczyć za pomoca˛
polecenia mode.

sage: mode(Dane)

wynik: [16, 17]


Czyli
m0 = [16, 17].

Dane statystyczne cz˛esto grupuje sie˛ wzgledem


˛ powtarzajacych
˛ sie˛ wartości i zapisuje
w tabelce. Ułatwia to wiele obliczeń, miedzy
˛ innymi mode˛ otrzymujemy natychmiast.
Przedstawmy 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
sume˛ iloczynów wszystkich kolumn naszej tabeli przez sume˛ drugiego wiersza.

5 · 1 + 7 · 1 + 8 · 2 + . . . + 24 · 1 368 46
S= = = .
1 + 1 + 2 + ... + 1 24 3

Wspomniałem wcześniej, że statystyka zajmuje sie˛ też prezentowaniem danych. Naj-
cz˛eściej używanym sposobem prezentacji jest histogram, który obrazuje za pomoca˛
wykresu rozkład liczebności badanych danych w ustalonych przedziałach.

72
2.2. STATYSTYKA

Przykład 10. Zilustrujmy za pomoca˛ histogramu rozkład ocen ze sprawdzianu


z matematyki pewnej klasy liceum.
Ocena 123456
Liczba uczniów 249742

Najpierw utwórzmy liste˛ ocen za pomoca˛ polecenia finance.TimeSeries gdyż dla


takiego typu listy danych można wywołać metode˛ plot_histogram służac
˛ a˛ właśnie do
rysowania histogramów.

sage: oceny = finance.TimeSeries( \

[1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,\

4,4,4,4,4,4,4,5,5,5,5,6,6])

hist = oceny.plot_histogram(bins=6, fill=False, \

normalize=False)

0
1 2 3 4 5 6

Widzimy, że najwiecej


˛ ocen było dostatecznych, że niedostatecznych i celujacych
˛ było
tyle samo, itd.

73
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Rozwiażmy
˛ teraz kilka zadań.

Przykład 11. 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 wiecej
˛ 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 sobie zdefiniować
dane. Można to zrobić na kilka sposobów. Jeden najprostszy, to utworzyć recznie
˛ liste˛
ksiażek
˛ przeczytanych przez wszystkich uczniów, tzn.

sage: dane = [0,0,2,2,2,2,6,6,6,6,6,9,\

9,9,9,9,9,9,9,11,11,14]

Można też najpierw stworzyć sobie liste˛ par (liczba_uczniw, liczba_ksiaek)


na podstawie tabeli, a nastepnie
˛ przerobić te˛ liste˛ na postać poprzednia.
˛ Możemy to
zrobić w ten sposób:

sage: lista_par = [(0,2),(2,4),(6,5),(9,8),(11,2),(14,1)]

dane = []

for para in lista_par:

for i in [1..para[1]]:

dane = dane + [para[0]]

Efekt bedzie
˛ ten sam
wynik: [0, 0, 2, 2, 2, 2, 6, 6, 6, 6, 6, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 14]

74
2.2. STATYSTYKA

Drugi sposób jest może troche˛ skomplikowany na pierwszy rzut oka. Zauważmy jednak,
że gdyby uczniów było sporo wiecej
˛ oraz liczba ksiażek
˛ przypadajaca
˛ na jednego ucznia
była by wieksza,
˛ to z pewnościa˛ poprzednia metoda byłaby uciażliwa.
˛ Wyobraźmy sobie,
że mamy analogiczne dane jak w zadaniu ale z kilku lat i dla uczniów całej szkoły i
mielibyśmy np. wpisać dwadzieścia pieć
˛ razy liczbe˛ 7, 32 razy liczbe˛ 12, itp.

Skoro dane już mamy 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.636

73
S= = 6.636.
11

Ad. 2. Odchylenie liczby przeczytanych ksiażek


˛ od tej średniej, to

sage: Std = std(dane)

sage: N(Std, digits=4)

wynik: 3.861

r
41
σ=2 = 3.861.
11

Ad. 3. Liczba uczniów, którzy przeczytali wiecej


˛ ksiażek
˛ niż średnia klasy, to 11. Liczbe˛ te˛
˛ po prostu liczby nie mniejsze od 6.636. A gdyby danych
możemy łatwo znaleźć zliczajac
było dużo wiecej
˛ i do tego nie byłyby posortowane, np. takie?

[2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4,
8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2,
4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1,
2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8,
1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4,
8, 1, 2, 4, 8, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5,
4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9,
5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3,
9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1,
3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4,
1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4, 1, 3, 9, 5, 4]

75
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

Sortowanie widzimy znacznie ułatwia zadanie, jednak przy takiej ilości danych mimo
wszystko mieli byśmy troszk˛e pracy. 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 wiec
˛
liczba_el = 11.

Przeszliśmy przez liste˛ danych (z naszego zadania) podstawiajac


˛ kolejne jej elementy
do zmiennej x i sprawdzamy czy ten element jest wiekszy
˛ lub równy od średniej.
Jeśli tak to zwiekszamy
˛ 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. Dominante˛ najlepiej widać w tabelce podanej w treści zadania. Widzimy, że jest
nia˛ 9, która wystapiła
˛ aż osiem razy. Mamy 22 dane, wiec
˛ mediana jest równa

d11 + d12 15
m= = = 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

76
2.2. STATYSTYKA

Otrzymałem go za pomoca˛ poleceń:

sage: d = finance.TimeSeries(dane)

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

Przykład 12. Poniższy histogram przedstawia dane dotyczace


˛ liczby godzin
nieobecności uczniów pewnej klasy w miesiacu
˛ listopadzie. Oś pozioma repre-
zentuje liczbe˛ godzin, natomiast pionowa liczbe˛ uczniów.

Utwórz analogiczna˛ tabelk˛e, jak w treści poprzedniego przykładu, tj.

Dane z histogramu odczytujemy nastepuj


˛ aco:
˛
– liczbe˛ opuszczonych godzin w przedziale h0, 5) miało 8 uczniów,
– liczbe˛ opuszczonych godzin w przedziale h5, 10) miało 12 uczniów,
– liczbe˛ opuszczonych godzin w przedziale h0, 5) miało 9 uczniów, itd.
Jak zwykle posłuże˛ sie˛ programem Sage aby dokończyć to zadanie. 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]

77
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

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)

Gdybyśmy chcieli wykonywać inne obliczenia statystyczne, warto byłoby utworzyć sobie
liste˛ godzin wszystkich uczniów. Można ja˛ przygotować za pomoca˛ nastepuj
˛ acych
˛ pole-
ceń:

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

78
2.2. STATYSTYKA

ZADANIA

Wszystkie 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, o którym wiemy, że składał sie˛ z czte-
rech cyfr. Przypominamy sobie tylko, że składał sie˛ on z cyfr nastepuj
˛ acego
˛ zbioru

{0, 3, 4, 6, 8, 9}.

Ile maksymalnie prób należałoby wykonać, aby odgadnać


˛ PIN? liczba zgadza sie˛ z
obliczona˛ wcześniej wartościa.
˛

3. Na ile sposobów możemy wybrać trójk˛e klasowa,


˛ tak aby były w niej dwie dziew-
czyny i jeden chłopak, jeśli 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 bed
˛ a˛ stały obok siebie?

5. Rzucamy pieć
˛ 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.

7. Rozwiaż
˛ równania w zbiorze liczb całkowitych nieujemnych

(a) a + b + c + d + e = 15, (b) 2a + 3b + 4c + 5d = 17.

8. Pieć
˛ kobiet i pieciu
˛ meżczyzn
˛ zasiadaja˛ przy okragłym
˛ stole. Jakie jest prawdopo-
dobieństwo, że meżczyzna
˛ nie usiadzie
˛ obok meżczyzny?
˛

9. Igor w dniu swoich imienin zabiera do przedszkola paczk˛e cukierków aby podzielić
sie˛ nimi z kolegami, koleżankami oraz pania.
˛ Jakie jest prawdopodobieństwo, że
każdy otrzyma przynajmniej dwa cukierki, jeżeli paczka zawiera 30 cukierków a
grupa przedszkolna liczy 12 dzieci.

79
ROZDZIAŁ 2. RACHUNEK PRAWDOPODOBIEŃSTWA I STATYSTYKA
MATEMATYCZNA

10. Jakie jest prawdopodobieństwo, że z losowo wybranych trzech liczb danego zbioru

{1, 2, 3, 4, 5, 6, 7}

bedzie
˛ 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 bedzie
˛ tyle samo ksiażek.
˛

12. Poniższa tabela zawiera informacje z miesiaca


˛ lipca o ilości przejechanych rowerem
kilometrów pewnego rowerzysty.

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 Oblicz dla tych danych

(a) Średnie arytmetyczna˛ i geometryczna.


˛

(b) Mode˛ i mediane.


˛

(c) Odchylenie standardowe.

(d) Sporzadź
˛ histogram.

80
Rozdział 3

Stereometria

3.1 Bryły platońskie

Geometria jest jedna˛ z najstarszych dziedzin matematyki. Wiekszość


˛ odnalezionych sta-
rożytnych tekstów matematycznych siegaj
˛ acych
˛ prawie 2000 lat p. n. e. zawiera miedzy
˛
innymi twierdzenie Pitagorasa. Pitagoras jest uznawany za jednego z najwiekszych
˛ ma-
tematyków starożytności. Wiemy, że badał figury płaskie, jak wiekszość
˛ ówczesnych filo-
zofów zajmujacych
˛ sie˛ matematyka.
˛ Jednakże uznaje sie,
˛ że jako pierwszy zaczał˛ badać
zasady budowy wielościanów foremnych, które sam nazywał figurami kosmicznymi.
Dowolny róg wielościanu foremnego musi sie˛ składać z przynajmniej trzech ścian i suma
katów
˛ płaskich tych ścian przy tym wierzchołku musi być mniejsza niż 3600 . Stad
˛ wynika,
że wszystkich możliwości utworzenia narożnika wielościanu foremnego jest pieć,
˛ co za
tym idzie istnieje dokładnie pieć
˛ wielościanów foremnych.
˛ równobocznego możemy otrzymać czworościan (łacińska
I tak za pomoca˛ trójkata
nazwa, to tetraedr). Przy każdym narożniku mamy 3 · 600 = 1800 < 3600 . Możemy go
narysować w Sage-u za pomoca˛ polecenia tetrahedron.

sage: tetrahedron()

Skoro 4 · 600 = 2400 < 3600 , wiec


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

81
ROZDZIAŁ 3. STEREOMETRIA

Rys. 3.1: Czworościan - tetrahedron.

Rys. 3.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 wygene-
rowaniu rysunku pokazuje sie˛ nam dodatkowy przycisk Make interactive , po kliknieciu
˛
którego można bryłe˛ obracać za pomoca˛ myszki. Jest to dobry sposób, aby przyjrzeć sie˛
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 otrzyma-
liśmy za pomoca˛ specjalnej metody stickers, która powoduje rozsuniecie
˛ ścian bryły.
Stosujemy ja˛ nastepuj
˛ aco:
˛

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

82
3.1. BRYŁY PLATOŃSKIE

za pomoca˛ pieciu
˛ trójkatów
˛ 5 · 600 = 3000 < 3600 . Wiecej
˛ z pomoca˛ trójkatów
˛ nie da sie˛
zbudować wielościanów foremnych, gdyż 6 · 600 = 3600 ≥ 3600 .
Zobaczmy jak wyglada
˛ dwudziestościan foremny.

Rys. 3.3: Dwudziestościan - icosahedron.

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)

Ostatnim odkrytym wielościanem foremnym był dwunastościan (łac. dodekaedr). Bu-


dujemy go za pomoca˛ pieciok
˛ ata
˛ foremnego.

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ów-
nywał je z żywiołami. Czworościanowi przypisywał ogień, sześcianowi Ziemie,
˛ ośmiościa-
nowi powietrze, a dwudziestościanowi wode.
˛ Dwunastościan traktował jako coś co łaczy
˛
wszystko – utożsamiał do z Wszechświatem. Z tego powodu wielościany foremne cz˛esto

83
ROZDZIAŁ 3. STEREOMETRIA

Rys. 3.4: Sześcian - cube.

Rys. 3.5: Dwunastościan - dodecahedron.

określa sie˛ mianem brył platońskich. Jednak nie on był ich odkrywca,
˛ lecz starożytny
matematyk grecki Teajtetos.

3.2 Graniastosłupy i ostrosłupy

˛ sie˛ badaniem brył w przestrzeni nazywamy stereometria.


Dziś dział geometrii zajmujacy ˛
W szkole poznaliście zapewne pieć
˛ 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. Narysuje˛ za pomoca˛ tej funkcji graniastosłup sześciokatny,
˛

84
3.2. GRANIASTOSŁUPY I OSTROSŁUPY

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. Rysunek z prawej otrzymamy po


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

Rys. 3.6: Graniastosłup sześciokatny.


˛

Minusem tej metody jest to, że musimy sami definiować liste˛ punktów. Jednakże nie jest
to takie trudne, gdyż przyjrzyjcie sie˛ uważnie punktom, które wyżej zdefiniowałem. Wi-
dzimy, że każdy punkt pierwszej podstawy ma trzecia˛ współrz˛edna˛ równa˛ zero, co ozna-

85
ROZDZIAŁ 3. STEREOMETRIA

cza, że leży ona w płaszczyźnie Oxy, natomiast druga jest kopia˛ pierwszej, tylko trzecia
współrz˛edna każdego punktu wynosi 2. Otrzymaliśmy tym samym graniastosłup pro-
sty, tzn. jego ściany boczne sa˛ prostokatami.
˛ Zatem aby tworzyć takie listy wierzchołków
możemy sobie najpierw zdefiniować liste˛ wierzchołków wielokata
˛ na płaszczyźnie, na-
stepnie
˛ dołożyć do każdego punktu jako trzecia˛ współrz˛edna˛ raz 0 i raz liczbe˛ niezerowa,
˛
np. 2. Zobaczmy jak wygladaj
˛ a˛ punkty pierwszej podstawy 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’)

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 li-
nie), natomiast opcja˛ size regulujemy wielkość kropek. Nastepnie
˛ połaczyłem
˛ wszystkie
punkty linia˛ poleceniem line. Opcja˛ thickness sterujemy grubościa˛ linii.
Myśle,
˛ że bez problemu, każdy z czytelników potrafiłby zdefiniować liste˛ punktów podstaw
dla graniastosłupa trójkatnego,
˛ czworokatnego,
˛ czy pieciok
˛ atnego.
˛ Zwykle do rozwiazy-
˛
wania typowych zadań szkolnych wystarcza rysunek pogladowy,
˛ zatem nie musimy sie˛
martwić, że te wielokaty
˛ nie sa˛ foremne czy też maja˛ nierówne boki.

Narysujmy teraz za pomoca˛ funkcji Polyhedron ostrosłup czworokatny.


˛

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)

86
3.2. GRANIASTOSŁUPY I OSTROSŁUPY

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

Rys. 3.7: Ostrosłup czworokatny.


˛

Najpierw zdefiniowałem wierzchołki podstawy oraz wierzchołek ostrosłupa. Pierwsze


dwie współrz˛edne wierzchołka wyznaczyłem jako środek masy1 podstawy, czyli pro-
˛ o wierzchołkach (0, 0), (3, 0), (3, 2), (0, 2). Obracajac
stokata ˛ odpowiednio 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

Rys. 3.8: Ostrosłup czworokatny


˛ – widok z góry.

bliższa wartość zeru tym wieksza


˛ przezroczystość). Dzieki
˛ funkcji Polyhedron możemy
łatwo i szybko rysować bardzo wymyślne wielościany, nawet w przestrzeni czterowymia-

1
Współrz˛edne środka masy wielokata
˛ wypukłego na płaszczyźnie wyznaczamy jako średnie arytme-
tyczne współrz˛ednych jego wierzchołków.

87
ROZDZIAŁ 3. STEREOMETRIA

rowej. Jednakże brakuje jej opcji zaznaczania dowolnych odcinków czy numerowania
wierzchołków, co jak wiecie jest bardzo pomocne przy rozwiazywaniu
˛ zadań.

Problem ten można rozwiazać


˛ rysujac
˛ wielościan samodzielnie za pomoca˛ funkcji
line3d ewentualnie polygon3d służacej
˛ do rysowania wielokatów
˛ w przestrzeni trój-
wymiarowej. Narysujmy np. graniastosłup pieciok
˛ atny.
˛

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 dwóch zmiennych: h – “wysokość”, tzn. trzecia współrz˛edna
wierzchołków jednej z podstaw. Nastepnie
˛ definiujemy listy wierzchołków podstaw. Wy-
starczy 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ć nastepuj


˛ acy˛ graniastosłup.

Już wyjaśniam powyższe polecenia. Otóż gr5 = None powoduje utworzenie pew-

88
3.2. GRANIASTOSŁUPY I OSTROSŁUPY

Rys. 3.9: Graniastosłup pieciok


˛ atny.
˛

nego obiektu o nazwie gr5 ale na razie niczego mu nie przypisujemy. Później bedzie
˛ tam
zapisany nasz graniastosłup. Nastepnie
˛ 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].
Na końcu rysujemy obramowanie podstaw przechodzac
˛ po sasiednich
˛ wierzchołkach.
Zauważmy, że użyłem operatora %, który zwraca w wyniku reszte˛ z dzielenia liczby
stojacej
˛ z lewej strony przez liczbe˛ 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.
Dlatego użyłem tego operatora, aby połaczyć
˛ ostatni wierzchołek vp1[4] z poczatko-
˛
wym, czyli vp1[0]. Podobnie dla drugiej podstawy.
Majac
˛ zdefiniowane wierzchołki podstaw, możemy łatwo pokolorować podstawy.

# kolorowe podstawy

89
ROZDZIAŁ 3. STEREOMETRIA

sage: gr5 = gr5\

+ polygon3d(vp1,color=’blue’,opacity=0.1) \

+ polygon3d(vp2,color=’blue’,opacity=0.1)

sage: gr5.show(frame=False)

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 wiec,
˛ że możemy łatwo tworzyć dowolne 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˛ funkcje˛
napisać. Definicje˛ tej funkcji możecie zobaczyć w dodatku A tej ksiażki,
˛ oraz skorzystać
z niej w notatniku dołaczonym
˛ również 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)

90
3.2. GRANIASTOSŁUPY I OSTROSŁUPY

sage: g = graniastoslup(5,przekatne_sb=True)

sage: g.show(frame=False)

Narysowaliśmy graniastosłup pieciok


˛ atny
˛ taki jak we wcześniejszym przykładzie, ale
mamy dodatkowo opcje pokazujace
˛ przekatne
˛ graniastosłupa, podstawy oraz ścian bocz-
nych.
Narysujmy też kilka innych graniastosłupów.

sage: g = graniastoslup(3,przekatne_sb=True)

sage: g.show(frame=False)

sage: g = graniastoslup(4,przekatne_gr=True,\

przekatne_sb=True)

91
ROZDZIAŁ 3. STEREOMETRIA

sage: g.show(frame=False)

sage: g = graniastoslup(6,przekatne_gr=True)

sage: g.show(frame=False)

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 .

Wiemy, że kat


˛ miedzy
˛ przekatn
˛ a˛ graniastosłupa prawidłowego a płaszczyzna˛ podstawy,
to kat
˛ jaki tworzy ta przekatna
˛ z przekatn
˛ a˛ podstawy. Narysujmy zatem graniastosłup
czworokatny
˛ z widocznymi jego przekatnymi.
˛

sage: g = graniastoslup(4,przekatne_gr=True)

sage: g.show(frame=False)

Z danych zadania wynika, że ∡(A3 , A1 , B3 ) = 600 oraz |A1 B3 | = 5cm. Zatem trójkat
˛

92
3.2. GRANIASTOSŁUPY I OSTROSŁUPY

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ść, dlatego
warto znać jego podstawowe własności. Narysowałem go poleceniami:

sage: A = [0,0]; B = [2,0]; C = [2,2*sqrt(3)]

sage: v = [A,B,C]

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

+ 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 krawedzi


˛ 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 sie˛ z dwóch kwadratów o boku b oraz czterech
prostokatów
˛ o wymiarach b × H.

W pierwszym rozdziale dowiedzieliście sie˛ jak definiuje sie˛ funkcje w programie Sage.
Przygotujmy wiec
˛ sobie funkcje˛ , za pomoca˛ której później obliczymy szukane pole.

sage: var(’b,H’)

sage: P(b,H) = 2*b^2 + 4*b*H

93
ROZDZIAŁ 3. STEREOMETRIA

˛ A1 , B3 , A3 , możemy wiec
Z własności trójkata ˛ obliczyć wysokość |A3 B3 | = H. Skoro

2a = |A1 B3 | = 5 cm,

˛ a = 2.5 cm oraz
wiec
√ √
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˛

2.5 5 2
b= √ = cm.
2 4

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)

25 √  √ √ 
wynik: 2 4 3+ 2
8

94
3.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 objetość
˛ i pole powierzchni tego graniastosłupa.

Wykonajmy najpierw odpowiedni rysunek.

sage: graniastoslup(6,przekatne_gr=True).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 wiecie sześciokat
˛
foremny składa sie˛ z sześciu identycznych trójkatów
˛ równobocznych.

Zatem pole powierzchni całkowitej i objetość


˛ graniastosłupa obliczymy za pomoca˛
wzorów √
a2 3 √
P = 2 · Pp + Pb = 2 · 6 · + 6 · a · H = 3a2 3 + 6aH,
4

95
ROZDZIAŁ 3. STEREOMETRIA

oraz √ √
a2 3 3a2 3
V = Pp · H = 6 · ·H= H.
4 2

a2 3
˛ równobocznego o boku a wynosi
Wiemy, że pole trójkata .
4
Widzimy z powyższego rysunku, że


|A2 A4 | = a 3 = 3.


Zatem a = 3. Musimy jeszcze obliczyć wysokość graniastosłupa. Jak zapewne zauwa-
˛ A2 , A5, B5 :
żyliście, wystarczy zastosować twierdzenie Pitagorasa do trójkata

|A2 A5 |2 + |A5 B5 |2 = |A2 B5 |2 .


Ponieważ |A2 A5 | = 2a = 2 3, |A2 B5 | = 6 i |A5 B5 | = H, wiec
˛

√ 2 √ √ √
2 3 + H2 = 62 ⇒ H = 36 − 12 = 24 = 2 6.

W Sage-u możemy go rozwiazać


˛ nastepuj
˛ aco:
˛

sage: var(’H’)

sage: assume(H>0)

sage: solve( (2*sqrt(3))^2 + H^2 == 6^2, H)


h √ i
wynik: H = 2 6

Wiecej
˛ wiadomości na temat rozwiazywania
˛ równań w programie Sage dowiecie sie˛
w rozdziale 4. Chciałbym zwrócić tu uwage˛ na instrukcje˛ assume. 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 program Sage zapomniał o wcześniejszych założeniach należy wydać polecenie


forget().

96
3.2. GRANIASTOSŁUPY I OSTROSŁUPY

Wróćmy jednak do naszego zadania. Skoro mamy już obliczone podstawe˛ a oraz
wysokość H możemy obliczyć pole i objetość.
˛

sage: a = sqrt(3)

sage: H = 2*sqrt(6)

sage: P = 3*a^2*sqrt(3) + 6*a*H

sage: V = 3*a^2*sqrt(3)*H/2

sage: print ’P = ’, P.simplify_radical()

sage: print ’V = ’, V.simplify_radical()


√ √ √
wynik: P = 9 3 + 36 2, V = 27 2.

Instrukcja simplify_radical() powoduje, ż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 objetość.
˛

Ostrosłup prawidłowy trójkatny,


˛ którego wszystkie ściany maja˛ równe pola musi być
czworościanem foremnym.

Powyższy ostrosłup narysowałem poleceniami:

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)

97
ROZDZIAŁ 3. STEREOMETRIA

sage: cz = cz \

+ line3d([A, B, C, A],color="blue",thickness=2)\

+ line3d([A,W],color="blue",thickness=2)\

+ line3d([B,W],color="blue",thickness=2)\

+ line3d([C,W],color="blue",thickness=2)\

+ line3d([S,W],color="red",thickness=3)\

+ line3d([S,C],color="green",thickness=2)

sage: cz.show(frame=False)

Instrukcje odpowiedzialne za wstawienie odpowiednich etykiet pominałem.


˛ Zostawie˛ to
jako ćwiczenie dla czytelnika.

Skoro jest to czworościan foremny, wiec


˛ wszystkie jego krawedzie
˛ sa˛ jednakowej
długości. Oznaczmy te˛ długość literka˛ a. Wtedy pole każdej jego ściany wyraża sie˛
˛ równobocznego o boku a, czyli
wzorem na pole trójkata

a2 3
Ps = .
4

Na pole całkowite składaja˛ sie˛ cztery takie trójkaty,


˛ wiec
˛

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
˛ prostokat-
˛
2
nego CSW, gdzie |CW| = a = 6 natomiast |SC| stanowi wysokości trójkata ˛ równobocz-
3
nego w podstawie, czyli
√ √
2 a 3 2 6 3 √
|SC| = · = · = 2 3.
3 2 3 2

Zatem z twierdzenia Pitagorasa otrzymujemy

q √ 2 √ √ √
H2 + |SC|2 = a2 ⇒ H = 62 − 2 3 = 36 − 12 = 24 = 2 6.

98
3.3. BRYŁY OBROTOWE

Możemy wiec
˛ obliczyć objetość
˛ 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 objetość


˛ czworościanu foremnego.

sage: var(’a,h,H,Pp’)

a2 3
sage: Pp = a^2*sqrt(3)/4 #pole podstawy Pp =
4 √
a 3
sage: h = a*sqrt(3)/2 #wysokość podstawy h =
r2
2
sage: H = sqrt(a^2-((2/3)*h)^2) #wysokość H = a2 − ( h)2
3
sage: V = (1/3) * Pp * H

sage: V = V.simplify_radical()
1 √ 3
wynik: V = 2a .
12

Możemy teraz sprawdzić nasze obliczenia wydajac


˛ polecenie:

sage: V = V.subs(a = 6)

wynik: V = 18 2.

3.3 Bryły obrotowe

Poza wielościanami, na lekcjach stereometrii z pewnościa˛ zajmowaliście sie˛ bryłami


obrotowymi, czyli takimi, które powstaja˛ w wyniku obrotu pewnych figur płaskich. Po-
znaliście zapewne trzy rodzaje: walec, stożek i kule.
˛ Narysujmy je w programie Sage.
Zaczne˛ od kuli, gdyż jak wiemy wystarczy tylko jedna wielkość aby podać jej własno-
ści, tzn. jej promień. Aby narysować kule˛ wystarczy wydać polecenie sphere().

sage: sphere()

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

99
ROZDZIAŁ 3. STEREOMETRIA

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. Pole-
cenia line3d, point3d, text3d już znacie. Dodatkowo dorysowałem dwa okregi
˛
jeden poleceniem circle o środku (0, 0, 0) i promieniu 1, natomiast drugi poleceniem
implicit_plot3d. To polecenie potrafi rysować dowolne krzywe w przestrzeni, trzeba
˛ o środku (0, 0, 0) i promie-
tylko znać równanie tej krzywej. Ja chciałem narysować okrag
niu 1, który leży w płaszczyźnie Oyz. Zatem zdefiniowałem równanie tego okregu
˛

y 2 + z2 = 1

i narysowałem go dla y, z ∈ h−1, 1i oraz x ∈ h0, 0.03i. Dlatego dałem dla zmiennej
x tak mały przedział, aby otrzymać okrag.
˛ Gdybyśmy zdefiniowali wiekszy
˛ przedział,
to zobaczylibyśmy walec zamiast okregu.
˛ Na przykład tak wygladałby
˛ nasz rysunek,
gdybyśmy x zdefiniowali na przedziale h−1, 1i.
Zwróćmy jeszcze uwage˛ na pewien szczegół dotyczacy
˛ funkcji show. Otóż użyłem
tym razem opcji aspect_ratio=1, która powoduje, ż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˛ funkcje˛ o na-

100
3.3. BRYŁY OBROTOWE

zwie Cone. Aby z niej skorzystać wcześniej należy dołaczyć


˛ bibliotek˛e
from sage.plot.plot3d.shapes import Cone. Teraz wystarczy wydać po-
lecenie Cone(r,h), gdzie r jest promieniem podstawy oraz h wysokościa,
˛ np.

sage: Cone(1, 2)

Stożek z prawej strony wykonałem

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

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

101
ROZDZIAŁ 3. STEREOMETRIA

ślenia okregu
˛ na kuli. Chodzi tu o polecenie implicit_plot3d. Narysujmy walec, wy-
znaczony przez okrag
˛ o równaniu
x2 + y2 = 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))

Jako ćwiczenie pozostawiam czytelnikom wykonanie takiego walca jak na rysunku z


prawej.
Przypomnijmy wzory na pola powierzchni oraz objetości
˛ tych brył:

⊲ walec
Pw = πR2 + 2πRH, Vw = πR2 H.

⊲ stożek
1
Ps = πR2 + 2πRt, Vs = πR2 H.
3

⊲ kula
4
Pk = 4πR2 , Vk = πR3 .
3

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

102
3.3. BRYŁY OBROTOWE

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 sie˛ wiecej
˛ w rozdziale czwartym
tej ksiażki.
˛ Jednak chciałbym tu wyjaśnić kilka szczegółów. Otóż powyższymi in-
strukcjami utworzyliśmy sobie sześć równań, które nazwaliśmy sobie odpowiednio
Polew alca, Objetoscw alca, Poles tozka, 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ć objetość


˛ 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 sobie 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)
πR2 − P
 
wynik: t = −
2 πR

Rozwiażmy
˛ teraz kilka przykładowych zadań dotyczacych
˛ brył obrotowych.

Przykład 4. Oblicz objetość


˛ i długość tworzacej
˛ stożka o promieniu podstawy
3 i polu powierzchni całkowitej 33π .

103
ROZDZIAŁ 3. STEREOMETRIA

Korzystajac
˛ ze zdefiniowanych wcześniej wzorów zadanie to możemy łatwo rozwiazać.
˛
Zanim jednak przystapicie
˛ do obliczeń, warto do każdego zadania ze stereometrii spo-
rzadzić
˛ odpowiedni rysunek.

Obliczmy najpierw długość tworzacej


˛ tego stożka.

sage: solve(Pole_stozka.subs(P=33*pi,R=3), t)

wynik: [t = 4]

Przed obliczeniem objetości


˛ musimy znaleźć jego wysokość. Majac
˛ promień podstawy
r = 3 oraz długość tworzacej
˛ t = 4, możemy z twierdzenia Pitagorasa zastosowanego do
˛ o bokach R, H, t obliczyć H. Zatem
trójkata


H2 + R2 = t2 ⇒ H = t2 − R2 .

sage: H = sqrt(4^2-3^2)

wynik: 7

Możemy wiec
˛ obliczyć objetość.
˛

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



wynik: V = 3 7π

Przykład 5. Kule˛ przecieto


˛ dwiema równoległymi płaszczyznami. Promienie
r1 , r2 kół uzyskanych w wyniku tych przekrojów oraz odległość d miedzy
˛ nimi sa˛
kolejnymi liczbami naturalnymi odpowiednio r1 , r2 , d, oraz ich suma wynosi 21.
Oblicz objetość
˛ kuli.

Wykonajmy na poczatku
˛ odpowiedni rysunek.

104
3.3. BRYŁY OBROTOWE

Rozwiazanie:.
˛ Przyjmijmy oznaczenia zgodnie z rysunkiem, zatem d = d1 + d2 . Aby
obliczyć objetość
˛ 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). Ich suma ma dać 21
zatem

n + (n + 1) + (n + 2) = 21 ⇒ 3n + 3 = 21 ⇒ 3n = 18 ⇒ n = 6.

Otrzymujemy wiec
˛
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.

r21 + d21 = R2 oraz r22 + d22 = R2 .

Prawe strony tych równań sa˛ identyczne, zatem

r21 + d21 = r22 + d22 .

Zapiszmy to równanie w Sage-u.

sage: var(’r1,r2,d1,d2’)

sage: rownanie = r1^2+d1^2 == r2^2+d2^2

wynik: d21 + r21 = d22 + r22

105
ROZDZIAŁ 3. STEREOMETRIA

Ponieważ d = 8, wiec
˛ d2 = 8 − d1 . Wstawmy wiec
˛ 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)


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

Recznie
˛ musielibyśmy wykonać nastepuj
˛ ace˛ czynności:

62 + d21 = 72 + (8 − d1 )2 ,

36 + d21 = 49 + 64 − 16d1 + d21 ,

16d1 = 77,
77
d1 = .
16

˛ z równania R2 = r21 + d21 możemy obliczyć promień kuli


Teraz korzystajac

sage: assume(R>0)

sage: promien = solve(R^2==6^2+(77/16)^2, R)


1 √
 
wynik: R = 15145
16

Na koniec objetość
˛ kuli obliczymy poleceniem:

sage: Objetosc_kuli.subs(R=1/16*sqrt(15145))
15145 √
wynik: V = 15145π
3072

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

106
3.4. ZADANIA

2. Oblicz objetość
˛ graniastosłupa prawidłowego czworokatnego,
˛ którego przekatna
˛
ma długość 5 cm i tworzy z przekatn ˛ 300 .
˛ a˛ podstawy kat

3. W graniastosłupie prostym w podstawie znajduje sie˛ trójkat˛ prostokatny,


˛ którego

boki tworza˛ proporcje 1 : 3 : 2. Przeciwprostokatna
˛ podstawy tworzy z przekatn
˛ a˛
˛ 450 . Oblicz pole powierzchni i objetość
ściany bocznej kat ˛ tego graniastosłupa.

4. Pole powierzchni bocznej graniastosłupa prawidłowego trójkatnego


˛ jest dwa razy
wieksze
˛ od pola jednej podstawy. Przekatna
˛ ściany bocznej jest nachylona do
podstawy pod katem
˛ 600 . Oblicz pole powierzchni i objetość
˛ tego graniastosłupa.

5. Graniastosłup prawidłowy sześciokatny
˛ ˛ a˛ długości 4 2, która
ma krótsza˛ przekatn
jest dwa razy dłuższa od dłuższej przekatnej
˛ podstawy. Oblicz pole powierzchni i
objetość
˛ tego graniastosłupa.

6. Oblicz objetość
˛ graniastosłupa prostego, którego podstawa jest rombem o polu rów-
nym 30 cm2 . Dłuższa przekatna
˛ tego rombu ma długość 12 cm i tworzy z przekatn
˛ a˛
˛ 300 . Oblicz pole powierzchni całkowitej tego graniastosłupa.
graniastosłupa kat

˛ o wymiarach 4 × 3. Oblicz objetość


7. Podstawa˛ ostrosłupa jest prostokat ˛ tego ostro-
słupa wiedzac,
˛ że stosunek długości krawedzi
˛ bocznej do krawedzi
˛ podstawy wy-
nosi 3 : 2.

8. Środek wysokości ostrosłupa prawidłowego trójkatnego


˛ jest oddalony od ściany
bocznej o 5 cm. Krawedź
˛ boczna jest nachylona do płaszczyzny podstawy pod
katem
˛ 300 . Oblicz objetość
˛ i pole powierzchni całkowitej tego ostrosłupa.

9. Wysokość ostrosłupa prawidłowego sześciokatnego


˛ ma długość 8 i tworzy ze
˛ 300 . Oblicz objetość
ściana˛ boczna˛ kat ˛ i pole powierzchni całkowitej tego ostro-
słupa.

10. Ostrosłup ma w podstawie kwadrat o boku 7 cm i jedna z krawedzi


˛ bocznych
jest prostopadła do podstawy. Oblicz objetość
˛ i pole powierzchni całkowitej tego
ostrosłupa wiedzac, ˛ boczna ma długość 14 cm.
˛ że najdłuższa krawedź

˛ którego długości boków spełniaja˛ proporcje˛ odpowiednio 2 : 3, jest


11. Prostokat,
przekrojem osiowym dwóch walców. Oblicz stosunek objetości
˛ i pól powierzchni
tych walców.

107
ROZDZIAŁ 3. STEREOMETRIA


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 po-
wierzchni wyjściowego stożka. Oblicz objetość
˛ bryły, która powstała po podziale i
która nie jest stożkiem.

13. Powierzchnia boczna stożka po rozwinieciu


˛ jest wycinkiem koła o kacie
˛ środkowym
1200 . Oblicz pole powierzchni całkowitej i objetość
˛ tego stożka, jeśli jego tworzaca
˛
ma długość 6.

3.5 Dodatek A

Poniżej znajduje sie˛ definicja funkcji pozwalajaca


˛ w prosty i szybki sposób rysować
graniastosłupy. 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ć liste˛ wierzchołków jednej
podstawy tego graniastosłupa. Dla uproszczenia ma to być lista punktów na płaszczyźnie.
Na przykład aby narysować graniastosłup siedmiokatny,
˛ wystarczy wydać instrukcje:

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. Po-
dobnie 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()

108
3.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
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]
gr0 = text3d(’Graniastosłup nie istnieje.’,\
[0,0,0], color=(0,0,0), size=14)
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]
else:
if len(wierzcholki) >= n:
v = wierzcholki
else:
print ’Liczba wierzchołków musi być równa ’ , n
return gr0
else:
if not wierzcholki:
print ’Jeśli n > 6, to trzeba podać list˛
e wierzchołków’
return gr0
else:
if len(wierzcholki) >= n:
v = wierzcholki
else:

109
ROZDZIAŁ 3. STEREOMETRIA

print ’Liczba wierzchołków musi być wi˛


eksza lub równa ’ , n
return gr0
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)
#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()
#podstawy
gr = polygon3d(vp2, color="green", opacity=0.1)\
+ polygon3d(vp1, color="blue", opacity=0.1)
#kraw˛
edzie boczne
for i in range(0,n):
gr = gr + line3d([vp1[i], vp2[i]], color="blue",thickness=3)
#obramowanie podstaw
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)
#etykiety
#obliczamy środek masy każdej z podstaw
Cx = 0
Cy = 0
for p in vp1:
Cx = Cx + p[0]

110
3.5. DODATEK A

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)
#przekatne
˛ graniastosłupa
if przekatne_gr == True and n < 7 and not wierzcholki:
if n <= 3:
print ’Graniastosłup nie posiada przekatnych’
˛
elif n == 4:
gr = gr + line3d([vp1[0], vp2[2]], color="green",thickness=3)\
+ line3d([vp1[0], vp1[2]], color="green",thickness=2)
elif n == 5:
gr = gr + line3d([vp1[0], vp2[2]], color="green",thickness=3)\
+ line3d([vp1[0], vp1[2]], color="green",thickness=2)
gr = gr + line3d([vp1[0], vp2[3]], color="red",thickness=3)\
+ line3d([vp1[0], vp1[3]], color="red",thickness=2)
elif n == 6:
gr = gr + line3d([vp1[1], vp2[4]], color="green",thickness=3)\
+ line3d([vp1[1], vp1[4]], color="green",thickness=2)
gr = gr + line3d([vp1[1], vp2[3]], color="red",thickness=3)\

111
ROZDZIAŁ 3. STEREOMETRIA

+ 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.’
#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

112
Rozdział 4

Podstawowe informacje o Sage

Sage1 jest oprogramowaniem matematycznym składajacym


˛ sie˛ z bardzo dużej liczby
narz˛edzi przydatnych w wielu dziedzinach matematyki. Możemy z jego pomoca˛ wy-
konywać 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ło-
dawca˛ i liderem projektu Sage jest William Stein, matematyk z Uniwersytetu Waszyng-
tońskiego. Wcześniej projekt nazywał sie˛ 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 wiec
˛ wolny dostep
˛ nie tylko do samego programu
ale też do jego źródeł.

Sage oparty jest na jezyku


˛ programowania Python4 , przy pomocy którego integruje
ze soba˛ wiele znanych darmowych bibliotek matematycznych

1
http://www.sagemath.org
2
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

113
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

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

i wiele innych. Poza tym zawiera wiele bibliotek własnych, zawierajacych


˛ narz˛edzia,
których nie można znaleźć w dostepnych
˛ darmowych bibliotekach, badź
˛ też okazało sie,
˛
że można utworzyć ich odpowiedniki lepsze i szybsze. Dzieki
˛ temu wszystkiemu jest on
bardzo bogata˛ alternatywa˛ dla takich narz˛edzi komercyjnych jak Maple, Mathematica,
czy MATLAB.

4.1 Instalacja

Jeśli ktoś nie chce badź


˛ nie może zainstalować programu Sage na swoim komputerze,
to może skorzystać z udostepnionego
˛ on-line notatnika Sage. Znajduje sie˛ on na stro-
nie http://www.sagenb.org. Aby móc tworzyć własne arkusze, edytować je i zapisy-
wać, musimy utworzyć konto użytkownika. Autorzy strony nie umieścili typowego formu-
larza rejestracyjnego nowych użytkowników, w zamian możemy skorzystać z już istnieja-
˛
cego konta, które posiadamy u innego usługodawcy, np. Google, Yahoo, OpenId, itd. Ich
liste˛ zobaczymy po wejściu na strone˛ po prawej stronie w postaci odpowiednich ikon.

114
4.1. INSTALACJA

Po kliknieciu
˛ na wybrana˛ ikone˛ – ja osobiście skorzystałem z konta Google – zobaczymy
okno logowania.

Po zalogowaniu możemy już w pełni korzystać z notatnika Sage.

115
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

Inna metoda korzystania z programu Sage, to instalacja na własnym kompu–


terze. Mamy dwie wersje instalacyjne do wyboru, jedna jest wersja˛ gotowa˛ do uży-
cia, tzw. pre–kompilowana, natomiast druga wymaga samodzielnej kompilacji źródeł.
Ja opisz˛e tylko pierwsza˛ wersje,
˛ gdyż jest prostsza i szybsza. Jeśli ktoś chciałby
wypróbować te˛ druga,
˛ to pomocne informacje znajdzie na przykład pod adresem
http://www.sagemath.org/doc/installation/source.html.
Wszystkie potrzebne pliki pobierzemy ze strony Po wejściu na nia,
˛ wybieramy ser-
wer, z którego bedziemy
˛ pobierać pliki (najlepiej jak najbliższy naszej lokalizacji, np.
ftp://ftp.fu-berlin.de/unix/misc/sage/index.html po czym musimy wy-
brać odpowiednia˛ wersje,
˛ w zależności od systemu, na którym pracujemy, np. Windows,
Linux, Mac OS X, itd. Po wybraniu rozpocznie sie˛ pobieranie pliku.

4.1.1 Instalacja w systemie Linux

Jeśli pracujemy na 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 wyda-
jemy 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

116
4.1. INSTALACJA

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ć


˛ prace˛ z programem, jednak warto wykonać jeszcze
pare˛ kroków, dzieki
˛ czemu bedzie
˛ można uruchamiać go z dowolnego miejsca na dysku.
W tym celu należy skopiować plik /ścieżka/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/

Nastepnie
˛ 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

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

Zaraz po uruchomieniu interaktywnego wiersza poleceń na ekranie pojawi nam sie˛ kilka
informacji, m. in. wersja programu oraz podpowiedź, że poleceniem notebook() uru-
chomimy interfejs notatnika programu Sage. Polecenia wpisujemy po napisie sage:.

117
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

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, pod
adresem http://localhost:8080.

118
4.1. INSTALACJA

Domyślnie mamy do dyspozycji konto użytkownika admin z hasłem sage. Jeśli próba
zalogowania sie˛ nie uda (np. podamy zły login lub hasło), to pod przyciskiem Sign in

pojawi sie˛ link Sign up for a new Sage Notebook account. Po kliknieciu
˛ na niego otworzy sie˛
formularz, przy pomocy którego bedzie
˛ można utworzyć konto nowego użytkownika.

Po zalogowaniu zobaczymy notatnik, identyczny jaki widzieliśmy po wejściu na strone˛


http://sagenb.org.

4.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 wersje˛ dla Windows i instalujemy.

119
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

Po zainstalowaniu uruchamiamy program VirtualBox, nastepnie


˛ wybie-
ramy z menu File opcje˛ Import Appliance. Otwarte zostanie okno
Appliance Import Wizard, na którym klikamy w przycisk Choose i wskazu-
jemy ścieżk˛e do pliku sage-5.12.ova, który wcześniej pobraliśmy. Akceptujemy
wszystkie domyślne ustawienia i klikamy na Finish. Import odpowiednich danych może
potrwać kilka minut.

Możemy teraz uruchomić nasza˛ wirtualna˛ maszyne˛ Sage, zaznaczajac


˛ ja˛ na liście w
lewym oknie i klikajac
˛ na przycisk Start.

4.2 Rozpoczynamy prace˛ z programem Sage

Z opisu instalacji dowiedzieliście sie˛ już jak uruchomić interaktywny wiersz pole-
ceń oraz notatnik programu Sage. Myśle,
˛ że najchetniej
˛ wybierana˛ forma˛ pracy
z programem bedzie
˛ notatnik, dlatego na nim sie˛ teraz skupimy. Po kliknieciu
˛ na link
New Worksheet otworzy sie˛ okienko, w które wpisujemy nazwe˛ tworzonego arkusza. Po

wpisaniu nazwy klikamy na przycisk Rename .

Arkusz składa sie˛ z komórek, w które wpisujemy polecenia. Polecenia w notatniku i w inte-
raktywnym 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 przy-
cisk Evaluate lub wciskamy Shift+Enter. Pamietajmy,
˛ że wyświetlany jest zawsze wynik
ostatniego polecenia w komórce.

120
4.2. ROZPOCZYNAMY PRACE˛ Z PROGRAMEM SAGE

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 so-
bie wyrobić podczas pracy z notatnikiem. Po pierwsze możemy wstawiać do komórek
komentarze do naszych poleceń.

Widzimy, że komentarze poprzedzamy symbolem #. Warto je dodawać, gdyż okaża˛ sie˛
bardzo cenne gdy bedziemy
˛ chcieli skorzystać z naszego arkusza za kilka miesiecy
˛ czy
może lat.

121
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

Możemy też dodawać do arkusza opisy miedzy


˛ komórkami. Aby je dodać, przytrzy-
mujemy klawisz Shift i myszka˛ klikamy w miejsce na arkuszu, w które chcemy wstawić
opis.

Otworzy nam sie˛ okienko, troche˛ 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, zapisujemy przyciskiem
Save changes .

Kolejna˛ ważna˛ rzecza,


˛ o której należy wiedzieć, to uzyskiwanie pomocy na temat po-
leceń. Czasami sie˛ zdarza, że znamy nazwe˛ polecenia ale nie pamietamy
˛ jak dokładnie
z niego skorzystać, albo nie pamietamy
˛ pewnych opcji, z których chcielibyśmy skorzy-
stać. Myśle,
˛ że powodów może być wiele. Aby uzyskać informacje na temat określonego
polecenia, np. sqrt, do wolnej komórki arkusza wpisujemy

122
4.3. OBLICZENIA ARYTMETYCZNE

Zatem wystarczy wpisać polecenie i po nim znak zapytania.


Opisz˛e teraz jak wykonywać różnego rodzaju obliczenia zarówno numeryczne jak
i symboliczne, jak rozwiazywać
˛ równania i nierówności i wiele innych zagadnień. W opi-
˛ e˛ poprzedzał słowem sage: . Można je wy-
sywanych przykładach polecenia Sage bed
konywać zarówno w notatniku jak i w interaktywnym wierszu poleceń. Wyniki natomiast
bed
˛ a˛ poprzedzone słowem wynik:

4.3 Obliczenia arytmetyczne

Najprostsze wykorzystanie programu, to wykonywanie obliczeń podobnych do tych, które


znacie z kalkulatorów. Najcz˛eściej wykonujemy na nich podstawowe operacje arytme-
tyczne +, −, ·, :. W Sage-u wykonujemy je podobnie, pamietaj
˛ ac ˛ tylko, że “∗” oznacza
znak mnożenia, a “/” znak dzielenia. Wykonajmy kilka obliczeń

sage: 7 + 5 - 4 * 2 / 5
52
wynik:
5
Oprócz tych czterech operatorów, mamy do dyspozycji duża˛ ilość innych funkcji mate-
matycznych odpowiadajacych
˛ potegowaniu,
˛ pierwiastkowaniu, logarytmowaniu, funkcje
trygonometryczne, itd. Zobaczmy to na przykładach.

123
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

sage: 3^4

wynik: 81

Widzimy, że symbol “^” oznacza poteg ˛ tzn. 3^4 = 34 . Sage potrafi pracować na bardzo
˛ e,
dużych liczbach i do tego robi to bardzo szybko. Mówiac
˛ o bardzo dużych liczbach mam
na myśli liczby składajace
˛ sie˛ z tysiecy
˛ a nawet milionów cyfr. Przyjrzyjmy sie˛ uważnie
obrazkowi poniżej.

Widzimy tam, że Sage wykonał potegowanie


˛

1234567891234567

w całkowitym czasie 7.01 s, a wynik jest liczba˛ składajac


˛ a˛ sie˛ z 9989518 cyfr, czyli
prawie 10 milionów cyfr. Wynik ten uzyskałem na moim laptopie, który nie jest bardzo
szybkim komputerem.
Aby obliczyć pierwiastek stopnia drugiego, mamy do dyspozycji funkcje˛ sqrt (z ang.
square root).

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 potego-
˛
1
wania “^”. Wiemy przecież, że pierwiastek stopnia m, to potega
˛ , tzn.
m

m 1
a = am .

Jeśli chcemy przykładowo obliczyć wartość takiego wyrażenia


q
5
72 + 3 12

124
4.3. OBLICZENIA ARYTMETYCZNE

piszemy

sage: (7^2 + 3 * sqrt(12))^(1/5)


 √  51
wynik: 6 3 + 49

Obliczmy teraz kilka logarytmów. Mamy do dyspozycji funkcje˛ log.

sage: log(16,2)

wynik: 4

sage: log(100)

wynik: 4.605

Zatem log(16,2) = log2 16 = 4. Pierwszy parametr funkcji log, to liczba logarytmo-


wana, a drugi to podstawa logarytmu. Jeśli nie podamy drugiego parametru, to zostanie
obliczony logarytm naturalny danej liczby.

Sage zwykle stara sie˛ 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 dziesietnego,


˛ gdyż wiemy, że każdy taki
ułamek bedzie
˛ tylko zaokragleniem
˛ tej liczby do pewnej liczby miejsc po przecinku. Tak
sie˛ 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))

wynik: 7.28010988928052

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

wynik: 7.28

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

wynik: 7.28010988928051827109730249152703279377766968257647743837818

125
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

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ć
sie˛ ta˛ opcja˛ ostrożnie. Przyjrzyjmy sie˛ przykładowi:

sage: N(sqrt(1323232323232), digits=5)

wynik: 1.1503 × 106

sage: (1.1503 * 10^6)^2

wynik: 1.3232 × 1012

sage: N(sqrt(1323232323232))

wynik: 1.15031835733939 × 106

Wynik pierwszego pierwiastkowania jest jak widzimy obarczony dużym błedem.


˛

2
1323232323232 > 1.1503 × 106 = 1.3232 × 1012 = 1323200000000.

W drugim przypadku mamy już dużo lepiej

2
1.15031835733939 × 106 = 1.32323232323200 × 1012 = 1323232323232.

Jeśli liczba jest mniejsza od jedności, to metoda N liczbe˛ 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.
˛

Możemy z łatwościa˛ porównywać ze soba˛ liczby za pomoca˛ operatorów

==, >, <, >=, <=.

sage: 12 > 16

wynik: False

sage: 0.6 == 3/5

wynik: True

126
4.3. OBLICZENIA ARYTMETYCZNE

sage: 2^8 <= 8^2

wynik: False

Jeżeli chcemy porównać wartości liczbowe wyrażeń zawierajacych


˛ poza standardowymi
operatorami dodawania, mnożenia, itd. funkcje, np. sqrt czy log, to możemy wtedy
użyć funkcji N, tzn.

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 nierówność, a do-


piero po użyciu metody N porównane zostały wartości liczbowe wyrażeń po obydwu stro-
nach nierówności. 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.

Poza wymienionymi wyżej działaniami mamy do dyspozycji jeszcze wiele innych, ale je
chciałbym zwrócić szczególna˛ uwage˛ na jeszcze jeden, który zdefiniowany jest za po-
moca˛ symbolu procenta %. Zobaczmy jak on działa.

sage: 7 % 5

wynik: 2

sage: 7 == 5 * 1 + 2

wynik: True

sage: 12 % 3

wynik: 0

sage: 12 == 3 * 4 + 0

127
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

wynik: True

Zatem a % b zwraca reszte˛ 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, z pomoca˛ którego możemy sprawdzić, czy dana
liczba całkowita jest podzielna przez inna˛ liczbe˛ całkowita,
˛ np.

sage: (7237626 % 5543) == 0

wynik: False

Rozwiażmy
˛ nastepuj
˛ ace˛ zadanie:

Przykład 1. Ile jest wszystkich liczb naturalnych trzycyfrowych podzielnych


przez 73?

Utwórzmy sobie liste˛ wszystkich takich liczb.

sage: lista = []

sage: for n in range(100, 1000):

if n % 73 == 0:

lista = lista + [ n ]

sage: lista

wynik: [146, 219, 292, 365, 438, 511, 584, 657, 730, 803, 876, 949]

Przygotowaliśmy sobie na poczatku


˛ pusta˛ liste.
˛ Sage elementy listy obejmuje zawsze
nawiasami kwadratowymi,
[a1 , a2 , . . . , ak ].

Poleceniem for n in range(100, 1000): przechodzimy za pomoca˛ zmiennej n po


wszystkich liczbach z zakresu od 100 do 999 włacznie
˛ i wykonujemy instrukcje zapi-
sane w kolejnych wierszach. Instrukcja if n % 73 == 0: sprawdza, czy liczba n jest

128
4.3. OBLICZENIA ARYTMETYCZNE

podzielna przez 73. Jeśli tak, to wykonywana jest instrukcja w kolejnym wierszu, tzn.
lista = lista + [ n ], która dodaje liczbe˛ n do naszej listy.
Aby odpowiedzieć na pytanie postawione w zadaniu, wystarczy policzyć elementy naszej
listy, albo wydać polecenie:

sage: len(lista)

wynik: 12

W obliczeniach możemy wykorzystywać też stałe matematyczne. Mamy na przykład


zdefiniowana˛ liczbe˛ π .

sage: pi

wynik: π

sage: N(pi, digits=3)

wynik: 3.14

sage: N(pi, digits=60)

wynik: 3.14159265358979323846264338327950288419716939937510582097494

sage: sin(pi/3)
1√
wynik: 3
2

Możemy definiować własne zmienne i przypisywać im wartości.

sage: x = 3/5

3
W powyższym przykładzie zdefiniowałem zmienna˛ x i przypisałem jej wartość. Przy-
5
pisania dokonujemy operatorem “=”. Zauważmy, że w wyniku tego polecenia Sage nie
wyświetlił żadnego wyniku. Aby go zobaczyć należy wydać jeszcze jedno polecenie za-
wierajace
˛ tylko nazwe˛ zmiennej lub użyć funkcji print, tzn.

sage: x
3
wynik:
5
sage: print(x)

wynik: 3/5

129
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

sage: x.N(digits=2)

wynik: 0.60

Widzimy, że instrukcja zawierajaca


˛ tylko nazwe˛ zmiennej wyświetla wynik w postaci
odpowiednio sformatowanej (w tym przypadku, w postaci ułamka). Natomiast funkcja
print wyświetla zawsze wartość zmiennej w postaci tzw. wierszowej, czyli takiej, jaka˛
wprowadzamy do komórki arkusza czy w wierszu poleceń. 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ć oddzie-
lona średnikiem. Można też nadpisywać wartości zmiennych (wcześniej jak pamietamy
˛ x
3
było równe ) czy też przypisywać im wyniki innych obliczeń. Dodatkowo Sage sam wy-
5
krywa, jaki rodzaj liczb przypisujemy zmiennym i nadaje im odpowiedni typ. Zobaczymy
to przy pomocy polecenia type.

sage: type(x)

wynik: <type ’sage.rings.integer.Integer’>

sage: type(y)

wynik: <type ’sage.rings.rational.Rational’>

sage: type(z)

wynik: <type ’sage.symbolic.expression.Expression’>

sage: type(1.73)

wynik: <type ’sage.rings.real_mpfr.RealLiteral’>

130
4.3. OBLICZENIA ARYTMETYCZNE

Wiemy, że w systemie dziesietnym


˛ liczby 12, 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 ˛ sie˛ z cyfr ze zbioru {0, 1, 2, 3, 4, 5, 6, 7}


˛ liczby całkowitej składajacej
stoi zero, to Sage traktuje ja˛ jako liczbe˛ zapisana˛ w systemie ósemkowym, tzn. systemie
pozycyjnym o podstawie 8. Zatem liczba 012 to 2 · 80 + 1 · 81 = 10.

sage: 0123

wynik: 83

3 · 80 + 2 · 81 + 1 · 82 = 3 + 16 + 64 = 83.

Jeśli w zapisie liczby pojawi sie˛ kropka, to Sage potraktuje te˛ liczbe˛ jako dziesietn
˛ a.˛

sage: 01.23

wynik: 1.23000000000000

sage: type(01.23)

wynik: <type ’sage.rings.real_mpfr.RealLiteral’>

Jeśli wpisalibyśmy przez przypadek

sage: 029

to dostaniemy komunikat o błedzie,


˛

gdyż liczby w systemie ósemkowym moga˛ sie˛ składać tylko z wymienionych wyżej cyfr
od 0 do 7.

131
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

Weźmy teraz nastepuj


˛ acy˛ przykład:

sage: x = (log(8,sqrt(2))+log(4,1/2))/log(sqrt(8),2)

sage: x
 
log(4) log(8)
log( 2
+ √ log (2)
1
) log( 2)
wynik: √ 
log 2 2

Możemy wyrażenie to uprościć, za pomoca˛ metody simplify.

sage: x.simplify()
4 log (8) 2 log (4)
wynik: −
3 log (2) 3 log (2)

Pewnie zauważyliście teraz, że to wyrażenie można jeszcze bardziej uprościć. Użyjmy
wiec
˛ innej metody o nazwie simplify_radical.

sage: x.simplify_radical()
8
wynik:
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

Sage posiada też wiele funkcji przydatnych w teorii liczb, czyli w dziale matematyki
zajmujacym
˛ sie˛ badaniem liczb całkowitych. Wiecie zapewne, co to sa˛ liczby pierwsze
czy zł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 informacje˛ False czyli “Fałsz”, zatem jest to liczba złożona.
Znajdźmy zatem liczbe˛ pierwsza˛ wystepuj
˛ ac ˛ a˛ zaraz po niej.

132
4.3. OBLICZENIA ARYTMETYCZNE

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˛ liczbe˛ pierwsza.


˛

sage: nth_prime(12)

wynik: 37

sage: nth_prime(21)

wynik: 73

W wielu zadaniach dotyczacych


˛ liczb całkowitych musimy rozkładać dana˛ liczbe˛ 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

Rozwiażmy
˛ nastepuj
˛ ace˛ 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.
˛

133
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

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

Przykład 3. Zapisz wyrażenie arytmetyczne



12 + 18
33 − 7

w jak najprostszej postaci.

sage: w1 = (12 + sqrt(18)) / (3^3 - 7); w1


3 √ 3
wynik: 2+
20 5
Myśle,
˛ że jest to wystarczajaco
˛ prosta postać.

Przykład 4. Doprowadź wyrażenie

 √ 2
12 +
18
4· 3 
3 −7

3 √ 3
2+4
100
do najprostszej postaci.

Zauważmy, że w tym wyrażeniu w liczniku w nawiasie znajduje sie˛ wyrażenie z poprzed-
niego przykładu, które w programie Sage nazwaliśmy sobie w1. Możemy wiec
˛ wykorzy-
stać go w definicji nowego wyrażenia co z pewnościa˛ uprości nam zapis.

134
4.3. OBLICZENIA ARYTMETYCZNE

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


3
wynik: √
2+4
Usuńmy jeszcze niewymierność z mianownika.

sage: w2 = (w2 / (sqrt(2)-4)).simplify_radical(); w2


3
wynik: −
14
sage: w2 = w2 * (sqrt(2)-4)
3 √ 6
wynik: − 2+
14 7

Najpierw pomnożyłem mianownik wyrażenia w2 przez 2 − 4, uprościłem to wyrażenie

poleceniem simplify_radical, a nastepnie
˛ całość pomnożyłem przez 2 − 4, tzn.
√ √
3 2−4 3 2 − 12 3√ 6
√ ·√ = =− 2+ .
2+4 2−4 2 − 16 14 7

Przykład 5. Oblicz wartość wyrażenia:


π π 
sin2 + cos
6  4
2 π
sin +1
3

sage: w3 = ((sin(pi/6))^2 + cos(pi/4)) / \

((sin(pi/3))^2 + 1)
2√ 1
wynik: 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 go podzielić na kilka wyrażeń przypi-
sanych do różnych zmiennych i na koniec zapisanie wyrażenia za ich pomoca.
˛ Zobaczmy
jak możemy powyższe wyrażenie w ten sposób zbudować.

sage: w3_licznik = (sin(pi/6))^2 + cos(pi/4)

135
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

sage: w3_mianownik = (sin(pi/3))^2 + 1

sage: w3 = w3_licznik / w3_mianownik

sage: w3
2√ 1
wynik: 2+
7 7

4.3.1 Zadania

1. Oblicz wartości podanych wyrażeń:


r
3 687 + 211
(e) ,
(a) 231 · 7878 − 1212, 39304
√ 
54 + 732 (f) log12 288 3 ,
(b) ,
3245 − 123 √4
6561
(g) √ ,
(c) 31 · 23212 , log 5 3 50

sin π3 + cos 2π
p  
(d) 151293 , (h) 3
.
sin2 π4 + cos2 (π)


2. Wyłacz
˛ całość przed pierwiastek

(a) 20164824181593,
√3
(b) 7535933164375,
√4
(c) 35113033753497567.

4.4 Wyrażenia algebraiczne

W poprzednim podrozdziale dowiedzieliście sie˛ jak wykonywać obliczenia na liczbach.


Sage doskonale sobie radzi również z obliczeniami symbolicznymi, tzn. potrafi wykony-
wać obliczenia, czy przekształcenia na wyrażeniach algebraicznych. Wiemy, że wyraże-
nie algebraiczne podobnie jak arytmetyczne składa sie˛ z działań oraz liczb ale wystepuj
˛ a˛
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. Przed
użyciem zmienne należy deklarować poleceniem var, np.

sage: var(’x’, ’a’)

136
4.4. WYRAŻENIA ALGEBRAICZNE

Przypominacie sobie zapewne, że zmiennych używaliśmy już w poprzednim rozdziale.


Używaliśmy ich po to, aby przypisywać im pewne wartości liczbowe badź
˛ wartości wy-
rażeń arytmetycznych. Jeżeli chcemy wykonywać obliczenia symboliczne na zmiennych,
to musimy wcześniej je zadeklarować funkcja˛ var.

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

Natomiast po zadeklarowaniu

sage: var(’z’)

sage: (z^2+3*z)/z
z2 + 3 z
wynik:
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 uwage,
˛ ż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 sie˛ również zadeklaro-
wana. Sprawdźmy 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. Natomiast gdy zmien-
nej przypiszemy liczbe,
˛ to jak wiemy z poprzedniego rozdziału przyjmie ona typ tej liczby,
np.

137
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

sage: var(’d’)

sage: type(d)

wynik: <type ’sage.symbolic.expression.Expression’>

sage: d = 5

sage: type(d)

wynik: <type ’sage.rings.integer.Integer’>

138
4.4. WYRAŻENIA ALGEBRAICZNE

Do wyrażeń algebraicznych możemy dokonywać podstawień, np.

sage: var(’x’)

sage: wyr2 = (x^2+2*x-1)/(x+1)

sage: wyr2
x2 + 2 x − 1
wynik:
x+1
sage: wyr2.substitute(x = 4)
23
wynik:
5
Czyli w wyniku otrzymaliśmy wartość wyrażenia dla x = 4. Możemy też dokonywać
podstawień innych wyrażeń algebraicznych.

sage: var(’y’)

sage: wyr3 = wyr2.substitute(x = y^2-3)


2
(y2 − 3) + 2 y2 − 7
wynik:
y2 − 2

Czyli każdy x wystepuj


˛ acy˛ w poprzednim wyrażeniu został zastapiony
˛ przez y2 − 3.
Zobaczmy jak wygladaj
˛ a˛ nasze wyrażenia po uproszczeniu.

sage: wyr2.simplify_radical()
x2 + 2 x − 1
wynik:
x+1
sage: wyr3.simplify_radical()
y4 − 4 y2 + 2
wynik:
y2 − 2

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 sume˛ ułamków

sage: wyr3.expand_rational()
y4 4 y2 2
wynik: 2 − 2 + 2
y −2 y −2 y −2

albo jeszcze lepiej

sage: wyr3.partial_fraction()

139
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

2
wynik: y2 − −2
y2 − 2

Mamy też funkcje zwracajace


˛ licznik (numerator) albo mianownik (denominator)
wyrażenia.

sage: licznik = wyr3.numerator()

wynik: y4 − 4 y2 + 2

sage: mianownik = wyr3.denominator()

wynik: y2 − 2

Rozwiażmy
˛ nastepuj
˛ ace˛ 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) )

wynik: −3, −1, 1, 3, 5, 7, 9, 11, 13.

Jak widzimy, sa˛ to liczby nieparzyste.

140
4.5. RÓWNANIA I NIERÓWNOŚCI

4.4.1 Zadania

1. Wykaż, że wyrażenia


(a) n3 + 5n, (b) n3 + 11n,

gdzie n jest liczba˛ naturalna,


˛ sa˛ podzielne przez 6.

2. Oblicz wartości wyrażeń

x − 3x3 + 2 √
5
(a) 2x3 − 3x2 + 5, (b) 2
, (c) 37x3 + 5x,
x +1

dla x ∈ {1, 2, . . . , 20}.

3. Doprowadź podane wyrażenia do najprostszej postaci.



sin2 α + tan2 α
3 7
x5 + x3 − x log2 a3 + log2 a5
(a) √ , (b) , (c) .
3 2
x 4 log2 a − log4 a6 1 − cos2 α

4.5 Równania i nierówności

Rozwiażmy
˛ na poczatek
˛ równanie, które zapewne każdy z czytelników potrafi rozwiazać,
˛
otóż
2x + 6 = 0.

W szkole wszystkich uczono, że wiadome przenosimy na jedna˛ strone,


˛ niewiadome na
druga, ˛ 6 od obydwu stron równania, czyli
˛ albo mówiono, że należy odjać

2x = −6.

No i na koniec dzielimy obie strony przez liczbe˛ 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

141
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

Odejmijmy 6 od obydwu stron równania.

142
4.5. RÓWNANIA I NIERÓWNOŚCI

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 sie˛ 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 wyko-
nywać te same operacje, które wykonujecie podczas rozwiazywania
˛ równań. Najcz˛eściej
jednak do rozwiazywania
˛ równań stosuje sie˛ polecenie solve, które poznaliście już w
rozdziale o funkcjach.

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)

wynik: (−3) = (−3)

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)

143
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

 
b
wynik: x = −
a

Teraz możemy rozwiazać


˛ dowolne równanie liniowe podstawiajac
˛ po prostu w miejsce
parametrów konkretne liczby, np.
3x + 12 = 0

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

wynik: [x = (−4)]

Rozwiazuj
˛ ac˛ równanie
ax2 + bx + c = 0

przypomnicie sobie wzory na pierwiastki równania kwadratowego.

sage: var(’a,b,c’)

sage: r_kw = a*x^2 + b*x + c == 0

sage: solve(r_kw, x)
 √ √ 
b + b2 − 4 ac b − b2 − 4 ac
wynik: x = − ,x = −
2a 2a

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 sprawe,
˛ że tym razem mielibyśmy sporo wiecej
˛
pracy aby rozwiazać
˛ to równanie. Zapewne uczono was, że najpierw powinniśmy lewa˛
strone˛ takiego równania (wielomian), w miare˛ możliwości rozłożyć na czynniki liniowe.
Znamy różne sposoby aby tego dokonać, np. przez grupowanie wyrazów i wyłaczanie
˛

144
4.5. RÓWNANIA I NIERÓWNOŚCI

wspólnych czynników, badź


˛ odgadywanie pierwiastka i dzielenie przez odpowiedni dwu-
mian, itd.

145
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

W Sage-u możemy to zrobić za pomoca˛ polecenia factor, którego wcześniej uży-


waliśmy dla liczb całkowitych.

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 punk-
tami w kolorze czerwonym.

sage: pkt = [(-3,0), (-4/3,0), (2,0), (5,0)]

sage: plot(f, x, -4, 6) + \

points( pkt,size=15,color=’red’)

400

300

200

100

x
-4 -2 2 4 6
-100

-200

-300

Obie funkcje plot oraz points poznaliście już w rozdziale o funkcjach.

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

sage: wyr3 = x^3-8

146
4.5. RÓWNANIA I NIERÓWNOŚCI

to możemy utworzyć nastepuj


˛ ace˛ równania:

sage: r_nie1 = wyr1 == wyr2



wynik: 2 x + 4 = x2 − 4

sage: r_nie2 = wyr1 / wyr2 == wyr3



2x+ 4
wynik: = x3 − 8
x2 − 4
sage: r_nie3 = wyr1 * wyr3 == wyr2

wynik: x3 − 8 2 x + 4 = x2 − 4
√

itd...

Możemy też wyodrebnić


˛ tylko jedna˛ strone˛ równania. Zobaczmy jak wyglada
˛ prawa
strona równania r_nie1 oraz lewa strona równania r_nie2.

sage: r_nie1.right()

wynik: x2 − 4

sage: r_nie2.left()

2x+ 4
wynik:
x2 − 4

Widzimy, że równanie drugie jest wymierne. Oznacza to, że powinniśmy zbadać jego
dziedzine.
˛ Przyrównajmy wiec
˛ jego mianownik do zera i rozwiażmy
˛ to równanie.

sage: mianownik = r_nie2.left().denominator()

wynik: x2 − 4

sage: solve(mianownik == 0, x)

wynik: [x = (−2) , x = 2]

2x + 4
Otrzymujemy wiec,
˛ że dziedzina˛ wyrażenia 2 jest zbiór R \ {−2, 2}.
x −4

Polecenie solve oprócz równań potrafi rozwiazywać


˛ nierówności. Aby przykładowo roz-
wiazać
˛ nierówność
2x2 + 7x − 11 ≤ −x2 − 2x + 19,

wystarczy wydać polecenia:

sage: nierownosc = 2*x^2 + 7*x - 11 <= -x^2 - 2*x + 19

147
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

wynik: 2 x2 + 7 x − 11 ≤ −x2 − 2 x + 19

sage: solve(nierownosc, x)

wynik: [[x ≥ (−5) , x ≤ 2]]

Otrzymaliśmy wiec
˛ rozwiazanie:
˛ x ∈ h−5, 2i. Zilustrujmy to rozwiazanie
˛ 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)

20

10

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

Widzimy, że na przedziale h−5, 2i czerwona krzywa odpowiadajaca


˛ lewej stronie
nierówności leży poniżej niebieskiej.

Funkcja˛ solve możemy też rozwiazywać


˛ układy równań. Weźmy nastepuj
˛ acy˛ układ:


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

Zilustrujmy to rozwiazanie
˛ na wykresie. Moglibyśmy wyznaczyć z każdego z równań
tego układu y i narysować wykresy powstałych funkcji liniowych przy pomocy znanej już

148
4.5. RÓWNANIA I NIERÓWNOŚCI

funkcji plot. Jednakże nie musimy tego robić, ponieważ Sage ma specjalna˛ funkcje˛ do
ilustrowania równań o nazwie implicit_plot. Zobaczmy jak sie˛ 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)

-1

-2
-2 -1 0 1 2

Myśle,
˛ że moge˛ pozostawić te polecenia bez komentarza. Rozwiażmy
˛ inny przykład,
troche˛ bardziej złożony.

√ √

y − 3x = 2 3,

x2 + y2 = 4.

sage: var(’x,y’)

sage: solve([y-sqrt(3)*x==2*sqrt(3), x^2+y^2==4], x,y)


hh √ i i
wynik: x = (−1) , y = 3 , [x = (−2) , y = 0]

Zwróćmy uwage,
˛ że w tym przypadku nie udałoby sie˛ 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 .

149
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

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)

-1

-2

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

Z pomoca˛ funkcji solve możemy też rozwiazywać


˛ układy nierówności. Ponieważ jednak
rozwiazaniami
˛ układów nierówności sa˛ zwykle pewne nieskończone zbiory, które zwykle
opisuje sie˛ nierównościami, dlatego lepiej jest je obrazować na wykresie.
Rozwiażmy
˛ nastepuj
˛ acy˛ układ równań.


y < x2 ,

y > x.

Zobaczmy co zwróci nam funkcja solve dla tego układu.

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


śle,
˛ że dużo wiecej
˛ zobaczymy, gdy ten układ nierówności przedstawimy graficznie.

150
4.5. RÓWNANIA I NIERÓWNOŚCI

sage: f1 = plot(x^2, x,-2,2,color=’red’,linestyle=’--’)

sage: f2 = plot(x, x,-2,2,color=’gray’,linestyle=’--’)

sage: rp = region_plot([y<x^2, y>x], (x,-2,2), (y,-2,2), \

bordercol=’blue’, incol=’lightgray’)

sage: show(f1 + f2 + rp)

x
-2 -1 1 2

-1

-2

Jak widzimy, do narysowania zbioru rozwiaza


˛ ń układu nierówności użyłem funkcji
region_plot. Jako pierwszy parametr podajemy liste˛ nierówności, nastepnie
˛ prze-
dział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 zu-
peł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
wynik: (−1) < x, x <
2

151
ROZDZIAŁ 4. PODSTAWOWE INFORMACJE O SAGE

Rozwiażmy
˛ teraz nastepuj
˛ ace˛ 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
Teraz możemy wyświetlić wszystkie liczby całkowite spełniajace
˛ otrzymane nierów-
noś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


9
Użyłem funkcji ceil do znalezienia liczby całkowitej nie wiekszej
˛ od − = −4.5 czyli
2
min_x = -4.

4.5.1 Zadania

1. Rozwiaż
˛ równania:
(a) logx 125 = 5,
(a) x + 2 = 3x − 5,

(b) 3x (x2 − 4) = 0,
(b) x2 + 3x − 1 = 0,
√ x+2 3
3 (c) = ,
(c) 2x2 − 4x − 4 = 0, x−1 2x − 5
r
2x − 1
(d) log3 (x + 1) = 7, (d) = 3x − 1.
x+2

152
4.5. RÓWNANIA I NIERÓWNOŚCI

2. Rozwiaż
˛ nierówności i zilustruj rozwiazanie
˛ na wykresie.

(a) 3x2 − 5x − 1 ≥ 0, (a) log2 (x − 4) < 16,

x2 − 3x − 4
(b) x − 2 ≤ (x + 3)(x − 1), (b) > 0,
x+1
√ 4x − 5 3x + 2
(c) 3
4x + 6 < 2x + 8, (c) ≤ .
2x − 1 2x − 5

3. Rozwiaż
˛ układy równań i zilustruj rozwiazanie
˛ na wykresie.

5x + 2y = 4
 
(a) x2 + y = 5

x − 4y = −2,
 (a)
√x − 4y = 0,


x − 2y + 3z = 6

 



 x2 + 2x + y2 − 4x = 20

(b) −2x − 4y − 3z = 0 (b)


 2x − y = 0.


x + y − z = 3,

4. Rozwiaż
˛ układy nierówności graficznie.

x + 2y ≤ 2
 
(a) 2x2 − y ≥ 6

x + 3y ≥ −2,
 (a)
0.5x − y < −6,


x + 2y < 6


 


  x − 2y > 3,

(b) −2x − y ≥ 0 (b)


 x − 2y ≤ −3.


5x + 2y > 3,

5. Rozwiaż
˛ analitycznie układy nierówności.

x − 3x2 ≤ 5
 
(a) x2 − 4x ≥ 0

x + 3√x ≥ −2,
 (a)
0.5x + log x < 0,

 2

x2 + 2x < 6


 

 x+2
  x − 2x = 3
 ,


(b) −3x − x ≥ 0 (b) x−1


 x2 − 2 = x − √x + 2.


5x > 3,

153

You might also like