200 likes | 560 Views
Matematikai algoritmusok. Kocsis Imre Illyés Gyula Gimnázium Dombóvár. Sir Isaac Newton 1642 - 1727. Alexandriai Euklidész k.e . 300 körül. Eratoszthenész k.e . 276 – k.e . 194. „A geometriához nem vezet királyi út.” ( Euklidész ). „ Ha valaha is messzebb láthattam az azért lehetett,
E N D
Matematikai algoritmusok Kocsis Imre Illyés Gyula Gimnázium Dombóvár Sir Isaac Newton1642 - 1727 Alexandriai Euklidészk.e. 300 körül Eratoszthenészk.e. 276 – k.e. 194 „A geometriához nem vezet királyi út.”(Euklidész) „Ha valaha is messzebb láthattam az azért lehetett, mert óriások vállán álltam.” (Newton) „Aki azt mondja, nem szereti a matematikát, az tulajdonképpen azt mondja, nem szeret gondolkozni.”(Rényi Alfréd) „A semmiből egy új, más világot teremtettem.”(Bolyai János)
Válaszd ki valamelyik algoritmust! Az eratoszthenészi szita Az euklideszi algoritmus Newton gyökvonó algoritmusa A vetítés vége
A prímszámok előállításának ma is használt módszere Eratoszthenész görög matemati-kustól származik. Az elnevezés utal az eljárás lényegére, mivel az 1-től n-ig felírt egész számok közül „kiszitáljuk” az összetett számokat. Amely számok fennmaradnak a „szitán” (az 1 kivételével) azok a prímek. Az eratoszthenészi szita Az eljárás: Írjuk fel a számokat 1-től n-ig, (itt például 100-ig) egyesével. Keressük meg az első olyan 1-nél nagyobb számot, amelyik még nincs sem kihúzva, sem bekarikázva. Elsőként ez a 2. Ezután húzzuk ki ennek többszöröseit, őt pedig karikázzuk be. Ismételjük meg a második lépéstől újra az eljárást. Természetesen egy összetett szám többször is kihúzásra kerülhet. Az algoritmus akkor álljon le, ha a második lépésnél talált szám négyzete már nagyobb, mint n. Nyilván elegendő csupán az 1 és közötti p prímekkel elvégezni a szitálást, mivel ha valamely a szám n-nél kisebb és összetett, akkor van -nél kisebb prím osztója. A 6. pont bizonyítása: Tehát beláttuk, hogy egy szám osztópárjai közül a nem nagyobb, legfeljebb akkora, mint a szám négyzetgyöke!
Kattints a 3-ra Kattints az 5-re Kattints a 7-re Az algoritmus bemutatása Kattints a 2-re Készen vagyunk: megtaláltuk 100-ig a prímszámokat!
Az algoritmus gyakorlása Gyakorlás módban a „szitálásra” alkalmas szám kiválasztása után a többszörösein kattints!(n és k maximuma 10)
C++ nyelvű program voidprim(int n) { int* termszamok; termszamok=new int[n]; for (int i=0; i!=n; i++) //az n elemű tömb feltöltése a természetes számokkal { termszamok[i]=i; } termszamok[1]=0; // Az 1 nem prím float r=n; //elegendő az n gyökéig vizsgálni floatgyok=sqrt(r); for (int i=2; i<gyok; i++) { j=i; if (j<n && termszamok[j]!=0) { while (j+i<n) // i többszöröseit sorban kinullázzuk { j=j+i; termszamok[j]=0; // A tömb nem 0 elemei éppen a prímek } } delete[] termszamok; } Az algoritmus kódolása Pszeudokód ciklus i=0-tól n-ig termszamok[i]=i termszamok[1]=0, mert az 1 nem prím ciklus i=2-től az n szám gyökéig) { j=i; Ha j<n ÉS termszamok[i] nem 0 { ciklus amíg j+i<n { j=i+i termszamok[j]=0 } }} Feladatok: Mutassuk meg, hogy n szám prímtényezős felbontásában legfeljebb log2n tényező szerepel! Bizonyítsuk be, hogy tetszőleges pozitív egész k szám esetén létezik k darab egymás után következő összetett szám! Vissza a menühöz!
Az egyik legismertebb ókori algoritmus. Euklidész írta le a módszert két természetes szám legnagyobb közös osztójának meghatározására. Ezt a módszert nevezzük Euklideszi algoritmusnak. Euklideszi algoritmus A maradékok szigorúan monoton csökkenő sorozata A maradék véges sok lépés után nulla lesz, hiszen amíg nem nulla, addig minden lépésben legalább eggyel csökkenni fog, tehát az utolsó lépésnél: A keresett legnagyobb közös osztó rn azaz az utolsó nem 0 maradék.
Az algoritmus helyességének bizonyítása Az a és b bármely közös osztója osztja az r1-et is hiszen és két szám közös osztója a különbségüket is osztja Hasonlóan b és r1 bármely közös osztója osztja a-t is és két szám közös osztója az összegüket is osztja hiszen Ezekből következik, hogy a és b közös osztói megegyeznek b és r1 közös osztóival, és így a legnagyobb közös osztójuk is azonos: (a, b) = (b, r1) Ez a gondolatmenet minden lépésre ugyanígy megismételhető, azaz mivel: Az előzőek alapján tehát:
Az Euklideszi algoritmus működése 1. lépés: a nagyobbat osztjuk a kisebbel maradékosan További lépések: az osztót osztjuk tovább a maradékkal a = 174 osztandó b = 96 osztó hányados maradék 174: 96 174 96 96 1 78 78 1 18 18 78 96: 78 4 6 6 18 78: 18 A végét jelzi 18: 6 3 0 A két szám legnagyobb közös osztója az utolsó nem 0 maradék: 6
Az algoritmus gyakorlása Gyakorold, és ellenőrizd a munkádat!
Folyamatábra Pszeudokód Pascal nyelvű program Az algoritmus kódolása program euklidesz;usescrt;var a, b, m : integer;beginclrscr;write('Kérem az a számot: ');readln(a);write('Kérem a b számot: ');readln(b);while (b<>0) dobegin m:=a mod b; a:=b; b:=m; end;writeln('LNKO(a,b) = ',a);readln;end. ELJÁRÁS euklidesz BE: a, b CIKLUS AMÍG b<>0 m:=a mod b a:=b b:=m CIKLUS VÉGE KI: aELJÁRÁS VÉGE Ki: a Be: a, b hamis b <> 0 m:= a mod b a:= b b:=m igaz Feladatok: Mutassuk meg, hogy az euklideszi algoritmus akár két lépésben befejeződhet még olyankor is, amikor az L.N.K.O. 1! Bizonyítsuk be, hogy az euklideszi algoritmus két egymás utáni lépésében a két szám szorzata legalább felére csökken! Bizonyítsuk be, hogy az a és b számok L.N.K.O.-ját az algoritmus legfeljebb log2a+log2b lépés után megadja! Vissza a menühöz!
A Newton módszer egy approximációs (közelítés; ismeretlen mennyiségnek közelítő pontossággal történő meghatározására szolgáló eljárás) eljárás, amelynek alapvető ötlete, hogy a függvény egyik x*gyökéhez „közeli” x0 pontot ismerve próbálja meghatározni az f(x) függvény egy x* gyökét. Newton-féle gyökvonó algoritmus A kezdő becslésünk legyen x0, majd a P0(x0; f(x0)) pontban húzzunk érintőt a görbéhez. Ez az x tengelyt az x1 pontban metszi. Ez az x1 már jobb közelítésnek látszik, mint az x0 volt. Ezután húzzunk újabb érintőt a P1(x1; f(x1)) pontban. Ez az x tengelyt az x2 pontban metszi. És így tovább. A kapott x0, x1, x2,… pontok egyre jobb közelítései lesznek az x* gyöknek. Hogyan közelítsük meg az x* gyököt egyre jobban?
Az x1x0P0 háromszögben: Ez a görbe P0 ponthoz tartozó érintőjének az iránytangense. Ez pedig az f függvény differenciálhányadosának az értéke az x0 helyen: Newton nevezetes képlete A két egyenletből: Átrendezve: Ezt a további lépésekre is alkalmazva: A végén Newton nevezetes formulája általánosan:
A négyzetgyök „a” meghatározása Az előző eredményünket alkalmazzuk a meghatározására Tehát az alkalmazandó Newton-képletben a jobboldal: A szükséges indexeket is kitéve a teljes egyenlet: Átalakítva: Legyen a=2, ekkor x0=2, és: Négyzetük sorban: Egyre közelebb van a 2-höz!
Az algoritmus kódolása Folyamatábra Pszeudokód Pascal nyelvű program program newton;usescrt;var a, x, p : real;beginclrscr;write(‘Kérem az a-t: ');readln(x);write('Mi legyen a pontosság: ');readln(p); x:=1;while (abs(x-(a/x))>p) dobegin x:=(x+a/x)/2; end;writeln(‘az „a” gyöke = ',x);readln;end. ELJÁRÁS newton_gyökvonás BE: a, pontosság x:=1 CIKLUS AMÍG abszolútérték(x-a/x) > pontosság x:=(x+a/x)/2 CIKLUS VÉGE KI: xELJÁRÁS VÉGE Ki: x Be:a, p |x-a/x|>p hamis X:=(x+a/2)/2 igaz X:=1 Feladatok: Hasonló módon határozzuk meg a négyzetgyök 5 közelítő értékét! Határozzuk meg a köbgyök 2 közelítő értékét! Vissza a menühöz!