Gymnázium Žamberk
Zajímavé matematické výpočty Seminární práce Informatika
Autor: Tomáš Sourada Třída: 5. A Vedoucí práce: Mgr. Petr Vanický Žamberk
2016
Prohlášení: Prohlašuji, že jsem seminární práci vypracoval samostatně pod vedením Mgr. Petra Vanického a že jsem v seznamu použité literatury uvedl všechny prameny, ze kterých jsem vycházel. V Žamberku dne 15. 5. 2016
Jméno a příjmení: Tomáš Sourada
Poděkování Rád bych poděkoval panu učiteli Mgr. Petrovi Vanickému za vstřícný přístup, pomoc a podporu při psaní seminární práce.
Anotace SOURADA, T. Zajímavé matematické výpočty. Žamberk 2016. Seminární práce na Gymnázium Žamberk. Vedoucí seminární práce Mgr. Petr Vanický. 19 stran. Tato seminární práce se zabývá zajímavými matematickými výpočty za použití programování a počítačové techniky. Zmiňuje matematické výpočty bez použití počítače a jejich nevýhody. Porovnává počítání s pomocí výpočetní techniky a bez ní. Klíčová slova matematika, Small Basic, programování, iracionální číslo, Eulerovo číslo, e, faktoriál, počítač, odmocnina
Obsah Úvod ........................................................................................................................................................... 6 1
2
Teoretická část ............................................................................................................................. 7 1.1
Druhá odmocnina ............................................................................................................... 7
1.2
Eulerovo číslo ....................................................................................................................... 7
Praktická část ................................................................................................................................ 9 2.1
Small Basic ............................................................................................................................. 9
2.2
Druhá odmocnina ............................................................................................................ 10
2.2.1 2.3
Metoda půlení intervalu ....................................................................................... 10
Faktoriál .............................................................................................................................. 15
Závěr ....................................................................................................................................................... 17 Seznam použitých materiálů ......................................................................................................... 18 Seznam použité literatury ......................................................................................................... 18 Seznam použitých obrázků ....................................................................................................... 18 Seznam použitých tabulek ........................................................................................................ 19
Úvod Téma seminární práce „Zajímavé matematické výpočty” jsem si zvolil z toho důvodu, že mě velice baví matematika jako taková, že už mnoho let řeším matematickou olympiádu, a hlavně proto, že když jsme se v prvním ročníku v informatice učili programovat, zaujalo mě, jak snadno lze napsat program, který spočítá něco, co by „ručně” trvalo hodně dlouho nebo by bylo nemožné spočítat. Původním tématem seminární práce byl „Výpočet konkrétního iracionálního čísla”. Rozhodl jsem se pro pěkné iracionální číslo odmocninu z 2015. Ale pak jsem při hodinách matematiky a hlavně při řešení matematické olympiády a na kroužku matematiky vídal různé vzorce a řady, například na výpočet čísla e či na odhad faktoriálu u velkých čísel. Jelikož právě tyto řady nejdou snadno spočítat s tužkou a papírem, rozhodl jsem se, že si je naprogramuji. A když jsem se tímto tématem zabýval dál, rozhodl jsem se, že z něj učiním téma celé své seminární práce. Proto se v této seminární práci zabývám kromě programu pro výpočet druhé odmocniny i několika způsoby, jak vypočítat Eulerovo číslo, a také odhadem faktoriálu. Seminární práce je rozdělena na teoretickou a praktickou část a každá z těchto částí je rozdělena na tři podkapitoly, zabývající se jednotlivými tématy, plus praktická část obsahuje podkapitolu navíc obsahující základní informace o programovacím jazyku, ve kterém píši. V teoretické části si povíme základní informace a daných tématech, zazní něco o historii Eulerova čísla a o jeho vlastnostech a také se dozvíme, co vlastně znamená pojem faktoriál, v jakých oblastech matematiky se nejčastěji používá a proč je tak důležitý. V praktické části se zaměříme na samotné programy, které jsem napsal v jednoduchém programovacím jazyku Small Basic, se kterým jsem se naučil pracovat ve škole. Ukážeme si funkce, které Small Basic má, a také narazíme na problém s nemožností využití funkcí, které Small Basic bohužel neobsahuje. Řekneme si něco o samotném programovacím jazyku. Vysvětlíme si rozdíly v jednotlivých programech, které napíši, a metodách počítání. Uvidíme, zda při vysokých číselných hodnotách nedělá program početní chyby, které by se mohly výrazně projevit na výsledku, a zamyslíme se nad způsoby, jak těmto možným chybám předejít. 6
1 Teoretická část 1.1 Druhá odmocnina Druhá odmocnina je speciálním typem obecné odmocniny. Často je označována pouze jako odmocnina. Odmocnina z čísla a se značí √a a je definována jako objekt b, pro který platí b2 = a . Geometrický význam druhé odmocniny je takový, že √a je délka strany čtverce, jehož obsah je a. [1]
Obrázek 1: Graf funkce druhá odmocnina f(x) = √x tvoří polovina paraboly souměrné podle osy x
1.2 Eulerovo číslo Eulerovo číslo, e, základ přirozených logaritmů, Napierova konstanta. Pod všemi těmito názvy je známá jedna z nejzákladnějších matematických konstant. Ačkoliv je pojmenována po úspěšném švýcarském matematikovi, který publikoval i
řadu
matematických
knih,
Leonhardu
Eulerovi,
resp.
po
skotském
matematikoviamatérovi Johnovi Napierovi, který objevil logaritmus, první člověk, který na něj narazil při svých výpočtech, byl Jacob Bernoulli, významný švýcarský matematik a fyzik, který se snažil vypořádat s problémem složeného úrokování1), při kterém právě došel k limitě nlim→∞(1 +
1n)n
. Značení oné konstanty písmenkem
e poprvé použil Leonhard Euler roku 1728 (nebo 1736, 1727, historici se v určení roku rozcházejí). Označil jím právě limitu lim (1 +
1n)n
. Euler také označil e jako
součet n→∞
O složeném úrokování si můžete více přečíst zde: https://cs.wikipedia.org/wiki/Slo%C5%BEen%C3%A9_%C3%BAro%C4%8Den%C3%AD 1 )
7
posloupnosti e
. n=0
O vlastnostech Eulerova čísla píše Wikipedie: „Eulerovo číslo je iracionální, tzn. jeho desetinný rozvoj je nekonečný a neperiodický. Dokonce je transcendentní, tzn. nelze ho vyjádřit jako kořen konečného mnohočlenu s celočíselnými koeficienty.” [2][3][4]
8
2 Praktická část 2.1 Small Basic Internetová Encyklopedie Wikipedie o Small Basicu píše: „Microsoft Small Basic je zjednodušená verze programovacího jazyka BASIC vytvořená firmou Microsoft v Říjnu 2008. Obsahuje minimum pojmů a je jednoduchý pro pochopení. Obsahuje pouze 15 klíčových slov a prostředí je přívětivé pro začátečníky. Microsoft Small Basic byl navržen skupinou Microsoft DevLabs a byl představen na Technology Preview v říjnu 2008. Jazyk je vhodný pro všechny, kteří začínají s programováním – od dětí po dospělé.” [6]
Obrázek 2: Ukázka přívětivého a jednoduchého prostředí Small Basicu
9
2.2 Druhá odmocnina 2.2.1 Metoda půlení intervalu Pro výpočet druhé odmocniny z libovolného přirozeného čísla n využiji metodu půlení intervalu. Ta spočívá v tom, že nejprve vymezím dvě po sobě jdoucí přirozená čísla, mezi kterými se odmocnina z n vyskytuje (budu srovnávat, zda je druhá mocnina čísla větší či menší než n). Pak tento interval rozdělím na poloviny a opět srovnáváním funkce druhá mocnina s n zjistím, ve které polovině se odmocnina z n nachází. Tím dostanu interval, který opět rozpůlím, a stejným způsobem budu pokračovat tak dlouho, jak bude zapotřebí pro zadanou přesnost. 1) Programátorský způsob, jak vymezím ona dvě po sobě jdoucí čísla, mezi jimiž se
odmocnina
nachází:
Zavedu
si
dvě
proměnné
(VyssiOdhad,
MocninaVyssihoOdhadu), za které nejprve dosadím nulu. Zavedu cyklus While s podmínkou, že proměnná MocninaVyssihoOdhadu je menší než číslo n, jehož druhou odmocninu zjišťujeme. V cyklu zvětším proměnnou VyssiOdhad o jedna a vypočítám novou MocninuVyssihoOdhadu. Následuje konec cyklu While. Jakmile MocninaVyssihoOdhadu nabude hodnoty větší než číslo n, víme, že máme větší z těch dvou po sobě jdoucích čísel (VyssiOdhad). To druhé je logicky o jedno menší. 2) Nyní mám proměnné Vyssi a Nizsi, což jsou po sobě jdoucí čísla. Vezmu jejich aritmetický průměr (proměnná Prumer), vypočítám jeho druhou mocninu a nastane jedna ze tří možností: a) Mocnina průměru je menší než n pak se odmocnina z n nachází v intervalu Prumer až Vyssi. Proto Vyssi odhad necháme stejný, za Nizsi odhad dosadíme hodnotu Prumeru. b) Mocnina průměru je větší než n pak se odmocnina z n nachází v intervalu Nizsi odhad až Prumer. Proto Nizsi odhad necháme stejný, za Vyssi dosadíme hodnotu Prumeru. c) Mocnina průměru se rovná n pak se odmocnina z n rovná hodnotě Prumeru. Je vyřešeno, nemusíme počítat dál, odmocnina je hotová.
10
Toto celé dáme do cyklu For, který budeme opakovat tak dlouho, jak budeme potřebovat pro zadanou přesnost. Ale to je jak dlouho? 3) Zjistíme, jak dlouho (kolikrát) pro jakou zadanou přesnost musíme cyklus (2) opakovat: Po jednom opakování se interval zmenší na ½, po druhém na ¼ z původního, neboli na
a po x opakováních tedy na 21x . Pro přesnost na
1 desetinné místo potřebujeme z původního intervalu míst
110y .
, pro y desetinných
Takže počet opakování proměnná Presnost je rovna takovému
x (co nejmenšímu), pro které je 2xvětší než 10y. Proměnná y je rovna počtu míst za desetinnou čárkou. 4) Jakmile máme cyklus zopakovaný tolikrát, kolikrát potřebujeme, stačí výsledný průměr zaokrouhlit na zadaný počet desetinných míst a vypsat ho uživateli. 5) Aby byl můj program přívětivý pro uživatele, zabalil jsem ho celý do cyklu While. Na konci se uživatele zeptá, zda chce pokračovat dál, a pokud uživatel chce, program běží od začátku. Ale dost povídání, zde je můj program:
Pokracovani="ano" Text.ConvertToLowerCase(Pokracovani) While (pokracovani<>"ne") TextWindow.Write("Zadejte číslo, které chcete odmocnit:") Zaklad=TextWindow.ReadNumber() TextWindow.Write("Na kolik míst za desetinnou čárkou chcete výsledek zaokrouhlit (ne víc než 20):") PocetMist=TextWindow.ReadNumber() If PocetMist>20 Then PocetMist=20 EndIf Doreseno="ne" 11
ZlomekPresnosti10=Math.Power(10,PocetMist) Presnost=0 ZlomekPresnosti2=1 While (ZlomekPresnosti2
VyssiOdhad=0 MocninaVyssihoOdhadu=0 While (MocninaVyssihoOdhadu
If (Doreseno="ne") Then For i=1 To (Presnost) If (Doreseno="ne") Then Prumer=(Nizsi+Vyssi)/2 12
MocninaPrumeru=Math.Power(Prumer,2) If (MocninaPrumeru
Zaklad) Then Vyssi=Prumer ElseIf (MocninaPrumeru=Zaklad) Then Doreseno="ano" EndIf EndIf EndFor TextWindow.WriteLine("Odmocnina z čísla "+Zaklad+" s přesností na "+PocetMist+" desetinných míst je "+Odmocnina+".") TextWindow.WriteLine("Chcete pokračovat dál?") Pokracovani=TextWindow.Read() EndWhile Tabulka 1: Druhá odmocnina odmocnina z 2015
Počet rozpůlení intervalu Vypočítaná odmocnina z 2015 1
44.500000000000000
2
44.750000000000000
3
44.875000000000000
4
44.937500000000000
5
44.906250000000000
6
44.890625000000000
7
44.882812500000000
8
44.886718750000000 13
Tabulka 2: Druhá odmocnina kalkulačky
Typ kalkulačky
Odmocnina z 2015
http://www.kalkulackaonline.com/
nemá funkci odmocnina
http://www.kalkula.cz/
44.889
Casio pro vysoké školy
44.88875137
http://www.calculator.net/
44.888751375
Google kalkulačka
44.8887513749
http://www.onlinecalculator.com/
44.888751374926
14
2.3 Faktoriál Pro odhad faktoriálu velkých čísel lze využít tzv. Stirlingův vzorec: n! ~ √2πn(ne)n . Tento vzorec se pro velká čísla n přibližuje funkci n faktoriál. Ale je důležité si uvědomit, že se k sobě sice tyto dvě funkce blíží, ale jelikož jde o neuvěřitelně obrovská čísla, liší se stále hodně. Neboli relativní odchylka Stirlingova vzorce od funkce faktoriálu je pro velká n velmi malá, ale absolutní odchylka je neuvěřitelně obrovská. Stirlingův vzorec využívá nejdůležitější matematické konstanty, pí a e. Jejich hodnoty do programu dosadíme. Programovací jazyk Small Basic, ve kterém programuji, bohužel není dokonalý a nedokáže počítat s nekonečným počtem cifer. A jelikož je faktoriál velice rychle rostoucí funkce, neporadí si s ním pro velká čísla ani jiný jazyk. Small Basic se například zasekne na faktoriálu čísla 27 a dále už nepočítá. Pro zajímavost, faktoriál čísla 27 je „pouze” 10,888,869,450,418,352,160,768,000,000, což je v dlouhé soustavě desítkové soustavy2 zhruba 11 kvadriliard nebo pro lepší představu 11 milionů triliard. Proto nelze napsat program, který by vypočítal pro velká čísla n faktoriál čísla n a odhad faktoriálu čísla n pomocí Strilingova vzorce a pak spočetl jejich rozdíl či poměr. Toto je program, který vypíše skutečné faktoriály a odhady faktoriálu pomocí Stirlingova vzorce čísel od 1 do zadaného n:
TextWindow.Write("Zadejte číslo n:") (program vypíše faktoriály čísel 1 až n, zde zjistí n) n=Textwindow.ReadNumber() e=2.7182818284 (hodnoty Eulerova a Ludolfova čísla musím programu určit) pi=3.1415926535 For i=1 To n (cyklus FOR pro faktoriál a odhad u jednotlivých čísel, končí až na úplném konci programu) faktorial=1 For j=1 To i
O dlouhé soustavě desítkové soustavy si můžete přečíst na: https://cs.wikipedia.org/wiki/Des%C3%ADtkov%C3%A1_soustava 2
15
faktorial=faktorial*j (cyklus FOR pro výpočet faktoriálu) EndFor ILomenoE=i/e ILomenoENaItou=Math.Power(ILomenoE,i) (výpočet části Stirlingova vzorce (ne)n ) zaklad=2*pi*i OdmocninaZakladu=Math.SquareRoot(zaklad) (výpočet druhé části √2πn) odhad=OdmocninaZakladu*ILomenoENaItou (vynásobení jednotlivých částí) TextWindow.WriteLine("x="+i+"; x!="+faktorial+"; odhad="+odhad+"; poměr="+odhad/faktoriál) (vypíšeme skutečný faktoriál, odhad faktoriálu a poměr faokdthoaridál ) EndFor
16
Závěr Před započetím psaní této seminární práce jsem si vytyčil určité cíle, které jsem chtěl v rámci seminární práce splnit. Ale postupem času jsem zjišťoval hloubku oněch problémů a s ní hlavně nemožnost zpracovat je v tak krátké seminární práci (která sama o sobě svým rozsahem překračuje zadané limity). Nakonec jsem musel velkou část problematiky odložit na později. Ale pokusil jsem se čtenářům této práce alespoň přiblížit výhody programování a jeho a využití v matematice a alespoň zlehka jsem se dotkl jednotlivých témat. V kapitole Zajímavé odkazy vidíme, že číslo e je tématem na Bakalářskou či Diplomovou práci a ani tyto ho nemůžou zcela obsáhnout. Já ve své práci tedy uvádím číslo e jen jako malou podkapitolu. Doufám, že jsem případnému čtenáři této práce umožnil snazší pohled do zajímavostí matematiky a že jsem ho neodradil od dalšího studia. Já sám jsem při psaní práce objevil spoustu nových zajímavých věcí, kterými bych se chtěl zabývat, početl jsem si v pracích jiných lidí, dozvěděl jsem se mnoho o historii matematiky a rozšířil si obzory v programování. Objevil jsem razantní rozdíly a naopak i podobnosti v různých programovacích jazycích a viděl, že to, co jsem se z programování naučil ve škole, je opravdu jen základ, ale že i tak obyčejný základ v programování může stačit na relativně složité matematické výpočty. Zjistil jsem, že s použitím selského rozumu není těžké vymyslet, jak si naprogramovat matematický výpočet, který by při ručním počítání trval hodiny. Vypracovávání seminární práce mi dalo hodně nového. Přál bych si, aby stejně tak dalo čtení této seminární práce hodně nového jejímu čtenáři.
17
Seznam použitých materiálů Seznam použité literatury [1]
Druhá odmocnina. In: Wikipedia: the free encyclopedia [online]. San
Francisco (CA): Wikimedia Foundation, 2001 [cit. 20160514]. Dostupné z: https://cs.wikipedia.org/wiki/Druh%C3%A1_odmocnina [2]
Eulerovo číslo. In: Wikipedia: the free encyclopedia [online]. San Francisco
(CA): Wikimedia Foundation, 2001 [cit. 20160514]. Dostupné z: https://cs.wikipedia.org/wiki/Eulerovo_%C4%8D%C3%ADslo [3]
Krása Eulerova čísla 1. In: Věda a technika [online]. 2008 [cit. 20160514].
Dostupné z: http://vedatechnika.blogspot.cz/2008/10/krasaeulerovykonstanty1.html [4] Bakalářská práce: Historie čísla e. In: Univerzita Palackého v Olomouci: Přírodovědecká fakulta Katedra matematické analýzy a aplikací matematiky [online]. Olomouc, 2014 [cit. 20160514]. Dostupné z: http://theses.cz/id/9qlvst/Jezkova.pdf [5]
Faktoriál. In: Wikipedia: the free encyclopedia [online]. San Francisco (CA):
Wikimedia Foundation, 2001 [cit. 20160514]. Dostupné z: https://cs.wikipedia.org/wiki/Faktori%C3%A1l [6]
Microsoft Small Basic. In: Wikipedia: the free encyclopedia [online]. San
Francisco (CA): Wikimedia Foundation, 2001 [cit. 20160514]. Dostupné z: https://cs.wikipedia.org/wiki/Microsoft_Small_Basic
Seznam použitých obrázků Obrázek 1: Graf funkce druhá odmocnina f(x) = √x tvoří polovina paraboly souměrné podle osy x ......................................................................................................................... 7 ZDROJ: https://upload.wikimedia.org/wikipedia/commons/7/72/Square_root.png Obrázek 2: Ukázka přívětivého a jednoduchého prostředí Small Basicu ....................... 9 ZDROJ: https://upload.wikimedia.org/math/a/7/9/a7909c72e1574fc5efc99062b9a6f dbb.png 18
Seznam použitých tabulek Tabulka 1: Druhá odmocnina odmocnina z 2015 ............................................................. 13 Tabulka 2: Druhá odmocnina kalkulačky .............................................................................. 14
19