generator slučajnih brojeva

Σχετικά έγγραφα
3.1 Granična vrednost funkcije u tački

Osnovne teoreme diferencijalnog računa

UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET SIGNALI I SISTEMI. Zbirka zadataka

Apsolutno neprekidne raspodele Raspodele apsolutno neprekidnih sluqajnih promenljivih nazivaju se apsolutno neprekidnim raspodelama.

5. Karakteristične funkcije

Verovatnoća i Statistika I deo Teorija verovatnoće (zadaci) Beleške dr Bobana Marinkovića

PRAVA. Prava je u prostoru određena jednom svojom tačkom i vektorom paralelnim sa tom pravom ( vektor paralelnosti).

IZVODI ZADACI (I deo)

SISTEMI NELINEARNIH JEDNAČINA

APROKSIMACIJA FUNKCIJA

Osnovni primer. (Z, +,,, 0, 1) je komutativan prsten sa jedinicom: množenje je distributivno prema sabiranju

numeričkih deskriptivnih mera.

Elementi spektralne teorije matrica

IZVODI ZADACI ( IV deo) Rešenje: Najpre ćemo logaritmovati ovu jednakost sa ln ( to beše prirodni logaritam za osnovu e) a zatim ćemo

4 Numeričko diferenciranje

PARCIJALNI IZVODI I DIFERENCIJALI. Sama definicija parcijalnog izvoda i diferencijala je malo teža, mi se njome ovde nećemo baviti a vi ćete je,

41. Jednačine koje se svode na kvadratne

Zavrxni ispit iz Matematiqke analize 1

Jednodimenzionalne slučajne promenljive

2log. se zove numerus (logaritmand), je osnova (baza) log. log. log =

Program testirati pomoću podataka iz sledeće tabele:

DISKRETNA MATEMATIKA - PREDAVANJE 7 - Jovanka Pantović

MATEMATIKA 2. Grupa 1 Rexea zadataka. Prvi pismeni kolokvijum, Dragan ori

Računarska grafika. Rasterizacija linije

KVADRATNA FUNKCIJA. Kvadratna funkcija je oblika: Kriva u ravni koja predstavlja grafik funkcije y = ax + bx + c. je parabola.

Iskazna logika 3. Matematička logika u računarstvu. novembar 2012

IspitivaƬe funkcija: 1. Oblast definisanosti funkcije (ili domen funkcije) D f

Mašinsko učenje. Regresija.

III VEŽBA: FURIJEOVI REDOVI

IZRAČUNAVANJE POKAZATELJA NAČINA RADA NAČINA RADA (ISKORIŠĆENOSTI KAPACITETA, STEPENA OTVORENOSTI RADNIH MESTA I NIVOA ORGANIZOVANOSTI)

Zadaci sa prethodnih prijemnih ispita iz matematike na Beogradskom univerzitetu

4.7. Zadaci Formalizam diferenciranja (teorija na stranama ) 343. Znajući izvod funkcije x arctg x, odrediti izvod funkcije x arcctg x.

Numerička matematika 2. kolokvij (1. srpnja 2009.)

Računarska grafika. Rasterizacija linije

IZVODI ZADACI (I deo)

Testiranje statistiqkih hipoteza

Algoritmi zadaci za kontrolni

INTEGRALNI RAČUN. Teorije, metodike i povijest infinitezimalnih računa. Lucija Mijić 17. veljače 2011.

Teorijske osnove informatike 1

18. listopada listopada / 13

VJEŽBE 3 BIPOLARNI TRANZISTORI. Slika 1. Postoje npn i pnp bipolarni tranziostori i njihovi simboli su dati na slici 2 i to npn lijevo i pnp desno.

Ispitivanje toka i skiciranje grafika funkcija

2 tg x ctg x 1 = =, cos 2x Zbog četvrtog kvadranta rješenje je: 2 ctg x

Uvod u neparametarske testove

5 Ispitivanje funkcija

M086 LA 1 M106 GRP. Tema: Baza vektorskog prostora. Koordinatni sustav. Norma. CSB nejednakost

1. zadatak , 3 Dakle, sva kompleksna re{ewa date jedna~ine su x 1 = x 2 = 1 (dvostruko re{ewe), x 3 = 1 + i

Kaskadna kompenzacija SAU

7 Algebarske jednadžbe

Postoji nekoliko statidtičkih testova koji koriste t raspodelu, koji se jednim imenom zovu t-testovi.

KVADRATNA FUNKCIJA. Kvadratna funkcija je oblika: Kriva u ravni koja predstavlja grafik funkcije y = ax + bx + c. je parabola.

Riješeni zadaci: Limes funkcije. Neprekidnost

a M a A. Može se pokazati da je supremum (ako postoji) jedinstven pa uvodimo oznaku sup A.

Elektrotehnički fakultet univerziteta u Beogradu 17.maj Odsek za Softversko inžinjerstvo

Obrada signala

NUMERIČKA INTEGRACIJA

Trigonometrija 2. Adicijske formule. Formule dvostrukog kuta Formule polovičnog kuta Pretvaranje sume(razlike u produkt i obrnuto

( ) ( ) 2 UNIVERZITET U ZENICI POLITEHNIČKI FAKULTET. Zadaci za pripremu polaganja kvalifikacionog ispita iz Matematike. 1. Riješiti jednačine: 4

ASIMPTOTE FUNKCIJA. Dakle: Asimptota je prava kojoj se funkcija približava u beskonačno dalekoj tački. Postoje tri vrste asimptota:

Neparametarski testovi za dva nezavisna uzorka. Boris Glišić 208/2010 Bojana Ružičić 21/2010

ELEKTROTEHNIČKI ODJEL

Prediktor-korektor metodi

Prvi pismeni zadatak iz Analize sa algebrom novembar Ispitati znak funkcije f(x) = tgx x x3. 2. Naći graničnu vrednost lim x a

Deljivost. 1. Ispitati kada izraz (n 2) 3 + n 3 + (n + 2) 3,n N nije deljiv sa 18.

Operacije s matricama

Trigonometrijske nejednačine

Pismeni ispit iz matematike Riješiti sistem jednačina i diskutovati rješenja sistema u zavisnosti od parametra: ( ) + 1.

RAČUNSKE VEŽBE IZ PREDMETA POLUPROVODNIČKE KOMPONENTE (IV semestar modul EKM) IV deo. Miloš Marjanović

Pismeni ispit iz matematike GRUPA A 1. Napisati u trigonometrijskom i eksponencijalnom obliku kompleksni broj, zatim naći 4 z.

nvt 1) ukoliko su poznate struje dioda. Struja diode D 1 je I 1 = I I 2 = 8mA. Sada je = 1,2mA.

Linearna algebra 2 prvi kolokvij,

SOPSTVENE VREDNOSTI I SOPSTVENI VEKTORI LINEARNOG OPERATORA I KVADRATNE MATRICE

NUMERIČKI METODI I PROGRAMIRANJE. I Aritmetičke operacije, izrazi i simbolička izračunavanja u Mathematici.

radni nerecenzirani materijal za predavanja

MATRICE I DETERMINANTE - formule i zadaci - (Matrice i determinante) 1 / 15

KOMUTATIVNI I ASOCIJATIVNI GRUPOIDI. NEUTRALNI ELEMENT GRUPOIDA.

(P.I.) PRETPOSTAVKA INDUKCIJE - pretpostavimo da tvrdnja vrijedi za n = k.

TRIGONOMETRIJSKE FUNKCIJE I I.1.

Univerzitet u Nišu Građevinsko-arhitektonski fakultet. Informatika2. 4. Ciklična algoritamska struktura 5. Jednodimenzionalno polje.

Veleučilište u Rijeci Stručni studij sigurnosti na radu Akad. god. 2011/2012. Matematika. Monotonost i ekstremi. Katica Jurasić. Rijeka, 2011.

Prvi kolokvijum. y 4 dy = 0. Drugi kolokvijum. Treći kolokvijum

ELEMENTARNE FUNKCIJE dr Jelena Manojlović Prirodno-matematički fakultet, Niš

(y) = f (x). (x) log ϕ(x) + ψ(x) Izvodi parametarski definisane funkcije y = ψ(t)

Univerzitet u Nišu, Prirodno-matematički fakultet Prijemni ispit za upis OAS Matematika

Fakultet tehničkih nauka, Softverske i informacione tehnologije, Matematika 2 KOLOKVIJUM 1. Prezime, ime, br. indeksa:

Kontrolni zadatak (Tačka, prava, ravan, diedar, poliedar, ortogonalna projekcija), grupa A

Autori: Dr Biljana Popović, redovni profesor Prirodno matematičkog fakulteta u Nišu Mr Borislava Blagojević, asistent Gradjevinskog fakulteta u Nišu

Generisanje slučajnih brojeva

Sume kvadrata. mn = (ax + by) 2 + (ay bx) 2.

PID: Domen P je glavnoidealski [PID] akko svaki ideal u P je glavni (generisan jednim elementom; oblika ap := {ab b P }, za neko a P ).

2. Ako je funkcija f(x) parna onda se Fourierov red funkcije f(x) reducira na Fourierov kosinusni red. f(x) cos

Funkcija gustoće neprekidne slučajne varijable ima dva bitna svojstva: 1. Nenegativnost: f(x) 0, x R, 2. Normiranost: f(x)dx = 1.

Konstruisati efikasan algoritam znači dati skup preciznih uputstava kako doći do rešenja zadatog problema Algoritmi se mogu opisivati:

METODA SEČICE I REGULA FALSI

VEROVATNO A I STATISTIKA A - TEST 1 9. NOVEMBAR 2013.

Skup svih mogućih ishoda datog opita, odnosno skup svih elementarnih događaja se najčešće obeležava sa E. = {,,,... }

9.1 Testovi hipoteza u statistici

Uvod u neparametarske testove

Glava 1. Realne funkcije realne promen ive. 1.1 Elementarne funkcije

1.4 Tangenta i normala

Transcript:

Domaći zadatak broj iz predmeta Performanse računarskih sistema student: Milanović Nikola broj indeksa: 0/95 ) Generisanje pseudoslučajnih brojeva Uvod pseudoslučajni brojevi funkcije raspodele i gustine verovatnoće matematičko očekivanje i varijansa diskretne slučajne promenljive problemi pri projektovanju primena Objasnimo najpre naslov prvog dela domaćeg zadatka. Naime, zašto generatori pseudoslučajnih, a ne slučajnih brojeva? Očigledan razlog je to što ćemo za njihovo generisanje koristiti razne algoritme. Ako smo algoritam definisali kao niz koraka koji nas dovodi do rešenja nekog problema, tada prateći korake algoritma možemo predvideti na koji način će se generisati slučajni brojevi, pa oni tada prestaju da budu slučajni. Manje očigledan razlog je konačni kapacitet memorije, tj. memorijskih reči i registara. Kao što ćemo kasnije videti, osnova za generisanje slučajnih brojeva je linearni kongruentni generator, koji radi na sledećem principu: u i+ =(a u i +c) mod n, i = 0,, gde je u i+ sledeća vrednost u nizu slučajnih brojeva, u i prethodno generisana vrednost, dok su a, c i n koeficijenti. Očigledno je da će se zbog konačne vrednosti koeficijenta n sekvenca slučajnih brojeva pre ili kasnije ponoviti. Iz tog razloga je korektnije ove brojeve zvati pseudoslučajni. U daljem tekstu će se, međutim, oni skoro uvek zvati slučajni kako bi se tekst lakše čitao, kao i iz razloga velike zastupljenosti ovog termina. Šta predstavlja cilj generisanja pseudoslučajnih brojeva? Posmatrajmo sliku: ulaz (početni uslovi) generator slučajnih brojeva F(x) sekvenca slučajnih brojeva Na ulazu u generator slučajnih brojeva se nalazi pobuda, koja u većini slučajeva predstavlja početnu vrednost ili skup koeficijenata koje generator koristi. Njih može zadati korisnik, a moguće je realizovati i generator koji sam određuje koeficijente, tj. početne uslove. Generator vrši transformaciju početnih uslova i na osnovu toga na izlazu generiše niz slučajnih brojeva r, r, r 3, r n. Problem generisanja slučajnih brojeva se tada svodi na dobijanje niza brojeva koji slede unapred zadatu funkciju

raspodele verovatnoće F(x). Funkcija raspodele verovatnoće slučajne promenljive r se definiše na sledeći način: F r (x) = P [r x ] Dakle, vrednost funkcije raspodele slučajne promenljive r u nekoj tački x predstavlja verovatnoću da će vrednost slučajne promenljive r biti manja ili jednaka vrednosti x. Definiše se i gustina raspodele verovatnoće kao: f r ( x) d dx F r Sada lako možemo naći verovatnoću da se slučajna promenljiva r nalazi između vrednosti a i b: P[ a r b ] = P[r b] P[r a] = F(b) F(a) Na isti način sledi i: P( a r b) a Srednja vrednost ili matematičko očekivanje slučajne promenljive r na intervalu (r min, r max ) se definiše kao: r max b ( x) f r ( x) dx E( r) xf( x) dx r min Varijansa slučajne promenljive r se definiše kao: σ r = Var( r ) = E[(r E(r)) ] = E(r ) E(r) σ r max r min x f( x) dx E( r) Standardna devijacija slučajne promenljive r je σ r. Posmatrajmo sada diskretnu slučajnu promenljivu r koja može da uzme samo vrednosti r (x, x, x 3, x n ). Svakoj vrednosti slučajne promenljive se dodeljuje verovatnoća pojavljivanja, kao u sledećoj tabeli: x x x x n P i 0.3 0. 0.05 Sada je f(x i ) = P [r = x i ], pa se srednje matematičko očekivanje definiše kao: n E( r) x i f x i i = Iz ovog primera je jasno zašto je matematičko očekivanje u stvari srednja vrednost slučajne promenljive. Na sličan način se definiše i varijansa:

σ n x i E( r) f x i i = Pri projektovanju generatora slučajnih brojeva moramo obratiti pažnju i na sledeće: period ponavljanja sekvence ne sme biti suviše mali generator mora da zadovolji testove generisanje mora da bude brzo Generatori slučajnih brojeva su našli primenu u velikom broju tehničkih disciplina. Koriste se u Monte Carlo simulacijama, u telekomunikacijama (prenos podataka i njihova zaštita, kodiranje, kriptografija), pri simulacijama procesa u nuklearnoj fizici itd. Neke važnije funkcije raspodele uniformna raspodela eksponencijalna raspodela normalna i standardna normalna raspodela centralna granična teorema Prvo ćemo posmatrati uniformnu raspodelu, koja u ovom razmatranju ima najveći značaj, pošto ćemo korišćenjem generatora slučajnih brojeva sa uniformnom raspodelom biti u stanju da realizujemo generator sa proizvoljnom raspodelom. Neka je slučajna promenljiva u definisana na intervalu [a,b]. Tada je njena gustina raspodele za x (a,b): Funkcija raspodele je za x (a,b): f u ( x) F( x) Za x b, F(x) =, a za x < a, F(x) = 0. Veći značaj ima standardna uniformna raspodela koja je prikazana na slici: F(x) b x b a a a x 3

U njoj je a=0 i b=. Na taj način vrednost slučajne promenljive u ograničavamo na interval (0,), a funkcija raspodele i gustina raspodele su u intervalu (a,b): f(x) =, F(x) = x Srednja vrednost i varijansa su: E( u) a b Varu() ba() Pored uniformne raspodele, često se upotrebljava i eksponencijalna raspodela. Neka je slučajna promenljiva u definisana na intervalu [0, ]. Njena gustina raspodele je: f u (x) = λexp(-λx) za x > 0 i f u (x) = 0 za x 0. vrednost λ > 0 se naziva parametar raspodele Funkcija raspodele se dobija integracijom: Matematičko očekivanje i varijansa su: F u (x) = exp(- λx), za x > 0 E( u) λ Var ( u) λ Normalna raspodela se definiše za slučajnu promenljivu u, - < u < +. Gustina raspodele slučajne promenljive u je: xµ exp dok je funkcija raspodele: F( x) f( x) x exp σ σπ tµ σ dt σπ Ako uvedemo smenu y = (t - µ)/σ, dobija se: gde je Φ(x) tabelirana funkcija, analitički zadata sa: F( x)φ xµ σ 4

Φ µ σ Φx ( ) x t exp dt π Matematičko očekivanje i varijansa su: E(u) = µ Var(u) = σ Standardna normalna raspodela se dobija za µ = 0 i σ =. Zašto je normalna raspodela toliko važna? Odgovor na to daje centralna granična teorema. Ona predstavlja vrlo važan deo teorije verovatnoće, a mi ćemo je kasnije iskoristiti za projektovanje generatora slučajnih brojeva sa normalnom raspodelom. ) Posmatrajmo n nezavisnih slučajnih promenljivih r, r, r n sa jednakom raspodelom. Neka su njihova matematička očekivanja µ, a standardne devijacije σ. Formirajmo slučajnu promenljivu S n = r + r + + r n. Tada za svako x i y važi: S n nµ lim P x yφy ( )Φx ( ) n σn Pošto je E(S n ) = nµ i Var(S n ) = nσ, očigledno je da se promenljiva S n ponaša kao promenljiva sa normalnom raspodelom. ) Posmatrajmo n nezavisnih slučajnih promenljivih r, r, r n sa različitom raspodelom i matematičkim očekivanjima i standardnim devijacijama µ k i σ k. Formirajmo ponovo slučajnu promenljivu S n = r + r + + r n. Tada za svako x i y važi: S n E S n lim P x yφy ( )Φx ( ) n var S n U ovom slučaju je: n E S n Var S n k = n k = µ k σ ( ) k 5

Generisanje slučajnih brojeva sa uniformnom raspodelom linearni kongruentni generator multiplikativni generator mešoviti generator izbor koeficijenata Knuth-ovi uslovi M generator Posle matematičkog uvoda, u stanju smo da počnemo razmatranje o konkretnim realizacijama generatora slučajnih brojeva. Prvo ćemo razmotriti generisanje slučajnih brojeva sa uniformnom raspodelom, jer ćemo u sledećem poglavlju pokazati da uz pomoć takvog generatora možemo realizovati generator sa proizvoljnom raspodelom. Linearni kongruentni generator (u daljem tekstu LKG) na izlazu generiše sekvencu slučajnih brojeva u 0, u, u,, u n-. Dužina sekvence je n. Generisanje sekvence se vrši multiplikativnim generatorom, koji radi na sledeći način: u i+ = (au i ) mod n, i = 0,, Dakle, sledeća vrednost u sekvenci u i+ se generiše na osnovu prethodne vrednosti u i i vrednosti koeficijenata a i n. Međutim, češće se koristi mešoviti generator: u i+ = (au i + c) mod n, i = 0,, Kao što vidimo, realizacija mešovitog generatora je veoma jednostavna, pod uslovom da znamo vrednosti u 0, a, c i n. Pošto početna vrednost u 0 nije kritična, glavni problem u projektovanju LKG se svodi na izbor koeficijenata. Pokazuje se da oni moraju da zadovolje sledeće zahteve: ) n mora biti oblika b p, za binarne generatore b=, a za decimalne b=0 ) c mora biti prost broj u odnosu na n 3) a mora biti multipl svakog prostog činioca n 4) a mora biti multipl od 4, ako je n multipl od 4 Na ovaj način možemo generisati maksimalno n brojeva. Pri izboru vrednosti koeficijenata se mora voditi računa da prilikom množenja ne dođe do prekoračenja. Moguć izbor je n = 3764, a = n+, c = 3. Problemom izbora koeficijenata za LKG bavio se i čuveni matematičar Donald Knuth. On je formulisao uslove koje moraju da zadovolje koeficijenti n, a i c kako bi se dobio LKG maksimalne dužine. To su Knuth-ovi uslovi: ) n treba da bude veliki broj oblika p ili 0 p ) a treba da ima nepravilnu strukturu i da zadovoljava: n a<n n< ili 00 Zatim se za a predlažu sledeće vrednosti: a = 8k + 5 (decimalni generator) a = 00k + (binarni generator) n a<n n< 6

3) c = k + (binarni generator) c = k + i nije deljiv sa 5 (decimalni generator) Knuth predlaže vrednost: 3 c 0.5 n 0.35 n 6 Uzimajući u obzir prirodu koeficijenata, najlakše je njihovo generisanje (po bilo kom kriterijumu) prepustiti samom generatoru. Zato je u nastavku priložen program koji računa vrednosti koeficijenata n, a i c po Knuth-ovim uslovima i zatim, koristeći dobijene vrednosti, generiše slučajne brojeve uz pomoć mešovitog generatora. #include <math.h> #include <stdio.h> void main (void) { int i,b, p; double n, a, a, ad, ag; long a, c, u0; printf ("\nbinarni () ili decimalni (0) generator? "); scanf ("%d", &b); if (b!= ) b = 0; printf ("Broj %s cifara? ", b==? "binarnih" : "decimalnih"); scanf ("%d", &p); n = pow (b, p); a = n / 00; a = sqrt (n); ad = a>a? a : a; ag = n - a; printf ("Predlog za faktor \'a\'? "); scanf ("%ld", &a); if (a<ad a>ag) a = (long) sqrt (ad * ag); } while (b== && a%8!=5 b==0 && a%00!=) a--; for (c=0.5*(-/sqrt(3))*n; c%==0 b==0 && c%5==0; c++); printf ("n = %d ^ %d = %.0f\n", b, p, n); printf ("%.0f < a < %.0f\n", ad, ag); printf ("Koeficijenti su: a= %ld, c= %ld, n= %f\n",a,c,n); printf ("u = (%ld * u + %ld) %% %.0f\n", a, c, n); printf("unesite pocetnu vrednost u0: "); scanf("%ld", &u0); printf("%ld\n",u0); for (i=0;i<n;i++) { printf("%ld\t",u0); u0=(u0*a+c) % (long)n; } Ukratko ćemo objasniti način rada. Moguće je računanje koeficijenata za binarni ili decimalni generator, pa se korisniku zato na početku nudi mogućnost da izabere željeni generator. Zatim se bira broj cifara. U zavisnosti od izbora se određuje vrednost koeficijenta n ( broj cifara ili 0 broj cifara ). Kada znamo vrednost koeficijenta n, određujemo granice u kojima se može kretati koeficijent a (ad donja granica i ag gornja granica). Zatim pitamo korisnika da predloži vrednost za a. Ako se uneta vrednost nalazi van opsega, početna vrednost za a će biti geometrijska sredina gornje i donje granice. Zatim smanjujemo vrednost a sve dok ne stignemo do prve vrednosti 7

koja zadovoljava Knuth-ove uslove. Za početnu vrednost c uzimamo 0.35n, a zatim povećavamo c sve dok ne dođemo do broja koji zadovoljava Knuth-ove uslove. Na kraju program ispisuje vrednosti koeficijenata. Radi kompletnosti, na kraju je dodata i for petlja u kojoj se na osnovu unete početne vrednosti u 0, korišćenjem dobijenih koeficijenata računaju vrednosti nekoliko slučajnih brojeva. U nastavku se nalaze vrednosti dobijene korišćenjem decimalnog generatora sa koeficijentima a=, c= i n = 000 (trocifreni generator). Početna vrednost je bila 345. Koeficijenti su: a=, c=, m= 000.000000 u = ( * u + ) % 000 Unesite pocetnu vrednost u0: 345 345 456 787 738 709 00 3 74 793 864 355 666 97 348 59 0 5 5 403 674 365 876 607 958 39 0 73 56 3 484 375 86 7 568 39 30 94 97 63 94 385 96 47 78 949 40 5 38 33 04 395 506 837 788 759 50 36 79 843 94 405 76 47 398 569 60 57 0 453 74 45 96 657 8 379 70 78 6 63 534 45 36 67 68 89 80 99 673 344 435 346 477 8 999 90 0 43 83 54 445 556 887 838 809 00 4 84 893 964 455 766 97 448 69 0 6 5 503 774 465 976 707 58 49 0 83 66 3 584 475 86 7 668 39 30 4 7 73 394 485 396 57 78 49 40 5 48 333 04 495 606 937 888 859 50 46 89 943 4 505 86 347 498 669 60 67 30 553 84 55 6 757 08 479 70 88 7 63 634 55 36 67 78 89 80 9 773 444 535 446 577 38 99 90 30 53 383 54 545 656 987 938 909 300 5 94 993 64 555 866 397 548 79 30 7 35 603 874 565 76 807 58 59 30 93 76 3 684 575 86 7 768 339 330 4 7 83 494 585 496 67 378 49 340 35 58 433 304 595 706 37 988 959 350 56 99 43 4 605 96 447 598 769 360 77 40 653 94 65 6 857 08 579 370 98 8 63 734 65 336 67 88 389 380 9 873 544 635 546 677 48 99 390 40 63 483 354 645 756 87 38 9 400 6 4 93 64 655 966 497 648 89 40 8 45 703 974 665 76 907 58 69 40 3 86 33 784 675 386 37 868 439 430 4 7 93 594 685 596 77 478 49 440 45 68 533 404 695 806 37 88 59 450 66 9 43 4 705 6 547 698 869 460 87 50 753 4 75 6 957 308 679 470 8 9 363 834 75 436 367 98 489 480 9 3 973 644 735 646 777 58 99 490 50 73 583 454 745 856 87 38 09 500 7 4 93 64 755 66 597 748 99 50 9 55 803 74 765 76 7 358 79 50 3 96 43 884 775 486 47 968 539 530 34 37 3 694 785 696 87 578 349 540 55 78 633 504 795 906 37 88 59 550 76 9 43 34 805 6 647 798 969 560 97 60 853 4 85 36 57 408 779 570 8 463 934 85 536 467 8 589 580 39 4 73 744 835 746 877 68 399 590 60 83 683 554 845 956 87 38 09 600 8 4 93 364 855 66 697 848 9 60 65 8

903 74 865 376 07 458 89 60 3 6 53 984 875 586 57 68 639 630 44 47 3 794 885 796 97 678 449 640 65 88 733 604 895 6 337 88 59 650 86 9 343 44 905 6 747 898 69 660 7 70 953 4 95 46 57 508 879 670 8 563 34 95 636 567 8 689 680 49 5 73 844 935 846 977 78 499 690 70 93 783 654 945 56 387 338 309 700 9 34 393 464 955 66 797 948 9 70 75 3 74 965 476 07 558 99 70 33 6 63 84 975 686 67 68 739 730 54 57 3 894 985 896 7 778 549 740 75 98 833 704 995 06 437 388 359 750 96 39 443 54 5 36 847 998 69 760 7 80 53 34 5 56 57 608 979 770 38 663 34 5 736 667 8 789 780 59 6 73 944 35 946 77 88 599 790 80 3 883 754 45 56 487 438 409 800 44 493 564 55 366 897 48 9 80 85 03 374 65 576 307 658 9 80 43 6 73 84 75 786 77 68 839 830 64 67 33 994 85 996 7 878 649 840 85 8 933 804 95 06 537 488 459 850 6 49 543 64 05 46 947 98 69 860 7 90 53 44 5 66 357 708 79 870 48 3 763 34 5 836 767 38 889 880 69 7 373 44 35 46 77 98 699 890 90 3 983 854 45 56 587 538 509 900 54 593 664 55 466 997 48 39 90 3 95 03 474 65 676 407 758 9 90 53 36 83 84 75 886 87 368 939 930 74 77 43 94 85 96 7 978 749 940 95 8 33 904 95 306 637 588 559 950 6 59 643 74 05 56 47 98 369 960 37 53 54 5 76 457 808 79 970 58 4 863 334 5 936 867 48 989 980 79 8 473 44 35 46 77 8 799 990 3 83 954 45 356 687 638 609 0 64 693 764 55 566 97 48 49 0 4 5 303 574 65 776 507 858 9 0 63 46 93 384 75 986 97 468 39 30 84 87 53 94 85 96 37 78 849 40 5 8 33 4 95 406 737 688 659 50 6 69 743 84 305 66 47 98 469 60 47 0 353 64 35 86 557 908 79 70 68 5 963 434 35 36 967 58 89 80 89 9 573 44 335 46 377 8 899 90 0 33 83 54 Ako želimo da postignemo bolju izlaznu sekvencu, tj. sekvencu sa boljom slučajnošću (testove generatora ćemo posebno obraditi) možemo koristiti dva LKG, čime dobijamo M generator. Ideja je sledeća: koristimo jedan LKG kako bismo generisali sekvencu slučajnih brojeva dužine n. Zatim, korišćenjem drugog LKG generišemo jedan slučajan broj k koji se nalazi između i n. U izlazni niz stavljamo k-ti broj u prvoj sekvenci, zatim ponovo generišemo broj između i n i tako dalje. Algoritam se može prikazati u pseudokodu:. generisati niz V i pomoću LKG, i =,,,n. generisati slučajan broj k između i n pomoću LKG 3. u nizu V pronaći k-ti element, V k 4. u izlazni bafer staviti V k 5. generisati novu vrednost za V k 6. ponavljati korake -5 dok se ne dobije sekvenca željene dužine 9

Postupak se može prikazati sledećom šemom: LKG k LKG 3 V izlaz 5 V k 4 V n Očigledan nedostatak M-generatora je spor rad. Naime, on je približno dva puta sporiji od multiplikativnog i mešovitog. Međutim, njegovom primenom se dobija znatno bolja izlazna sekvenca. Generisanje slučajnih brojeva sa proizvoljnom raspodelom korišćenje uniformne raspodele proizvoljna raspodela (primer) eksponencijalna raspodela normalna raspodela U prethodnom delu smo obratili posebnu pažnju na generatore slučajnih brojeva sa uniformnom raspodelom. Rekli smo da se pomoću njih može generisati sekvenca sa proizvoljnom raspodelom. Tu tvrdnju ćemo ovde i dokazati. Neke je u slučajna promenljiva sa standardnom uniformnom raspodelom, tj. neka je definisana na intervalu [0,] i neka su gustina raspodele i funkcija raspodele na tom intervalu: f u (x) = i F u (x) = x Postavlja se sledeći problem: formirati slučajnu promenljivu r = g(u), tako da ona ima unapred zadatu funkciju raspodele F r (x). Dakle, za poznatu funkciju F r (x) treba odrediti g(u). Pođimo od definicije funkcije raspodele: 0

F r (x) = P[r x] = P[g(u) x] = P[g - (g(u)) g - (x)] = P[u g - (x)] Pošto smo pretpostavili da slučajna promenljiva u ima standardnu uniformnu raspodelu (F(x)=x), sledi: Iz ove jednačine se dobija: F r (x) = g - (x) g(x) = F r - (x) Ako zamenimo x u, zbog r = g(u) se konačno dobija: r = F r - (u) Upotrebom izvedenog rezultata i nekog generatora sa uniformnom raspodelom, možemo napraviti generator sa proizvoljnom raspodelom. Na primer, neka je potrebno generisati pseudoslučajne brojeve čija je gustina raspodele verovatnoće: f(x)=asinx (0 < x < π) Funkcija gustine raspodele je prilično egzotična, ali se korišćenjem prethodnog rezultata problem vrlo brzo rešava. Data gustina raspodele izgleda: a f(x) π x Za primenu izvedene jednačine nam je potrebna raspodela F(x). Dobijamo je integracijom: x f( x) f( x) dx a( cosx ) Konstantu a nalazimo iz uslova F(π)=, pa sledi a=/. Dakle, funkcija raspodele je: cosx F( x) Iz gornjeg razmatranja smo videli da važi: u = F(r) i r = F - (u), gde je u slučajna promenljiva sa standardnom uniformnom raspodelom. Dalje je: u cosr

cosr= u r = arccos( u) što predstavlja i rešenje problema. Ako na raspolaganju imamo generator slučajnih brojeva sa uniformnom raspodelom urng(), tada se željeni generator realizuje u par linija koda: #include <math.h> double urng(void); double sinrng(void) { double x=-*urng(); return atan(sqrt(-x*x)/x) + 3.45/; } Jedina modifikacija je bila trigonometrijska transformacija funkcije arccos u arctg kako bi kompajler mogao korektno da prevede izraz. Pogledaćemo i na koji način se mogu realizovati generatori slučajnih brojeva sa eksponencijalnom i normalnom raspodelom. Neka je potrebno generisati slučajnu promenljivu s koja ima eksponencijalnu raspodelu, tj. za koju važi: 0 s f(x) = λexp(-λx), x >0 F(x) = - exp(-λx), x > 0 Neka je -u slučajna promenljiva sa standardnom uniformnom raspodelom. Tada je: s = F - (-u) F(s) = F ( F - (-u)) = -u -u = - exp(-λx) u = exp(-λs) ln(u) = -λs s ln( u) λ Dakle, dobili smo vezu između tražene slučajne promenljive s i slučajne promenljive u sa standardnom uniformnom raspodelom. Na sličan način možemo realizovati i generator slučajnih brojeva sa normalnom raspodelom. Neka je data slučajna promenljiva u sa uniformnom raspodelom: f( x) F( x) x

E( u)µ ( σvar Formirajmo slučajnu promenljivu Y kao zbir n slučajnih promenljivih sa uniformnom raspodelom. Prema centralnoj graničnoj teoremi, Y mora imati normalnu raspodelu: Y n u i S n nµ i = σn n n U praksi se najčešće uzima n =, pa se slučajna promenljiva Y formira kao: Y i = u i 6 Možemo zaključiti da je za generisanje slučajne promenljive sa normalnom raspodelom dovoljno imati generator slučajnih brojeva sa uniformnom raspodelom. Proces se odvija tako što generišemo željeni broj uniformno raspodeljenih slučajnih brojeva, saberemo ih i dobili smo normalno raspoređenu slučajnu promenljivu. Hardversko generisanje slučajnih brojeva generisanje slučajnih brojeva upotrebom pomeračkih registara Za generisanje slučajnih brojeva se može iskoristiti i posebna klasa kružnih brojača. Posmatrajmo pomerački registar od n bita. Može se pokazati da uvek postoji bar jedna funkcija povratne sprege za koju će registar zauzeti n različitih stanja pre nego što se ciklus ponovi. Zabranjeno stanje je sve nule. U tabeli koja sledi su prikazane funkcije povratne sprege za registre dužine od do 3 bita: n (broj bita) jednačina povratne sprege SIN = Q Q 0 3 SIN 3 = Q Q 4 SIN 4 = Q 3 Q 5 SIN 5 = Q 4 Q 6 SIN 6 = Q 5 Q 4 7 SIN 7 = Q 6 Q 3 8 SIN 8 = Q 7 Q 5 Q 4 Q 3 SIN = Q Q 0 Q 7 Q 5 6 SIN 6 = Q 5 Q Q Q 0 0 SIN 0 = Q 9 Q 6 4 SIN 4 = Q 3 Q Q Q 6 8 SIN 8 = Q 7 Q 4 3

3 SIN 3 = Q 3 Q 30 Q 9 Q 9 Iz tabele se vidi da je serijski ulaz SIN i funkcija povratne sprege koja se dovodi na D ulaz flipflopa Q 0. Ovde je pretpostavljeno da je Q 0 bit najmanje težine. Na slici je prikazan primer realizacije četvorobitnog generatora slučajnih brojeva: Ako je početno stanje, generator će dati sledeću sekvencu slučajnih brojeva:,, 4, 9, 3, 6, 3, 0, 5,, 7, 5, 4,, 8. Međutim, u ovoj realizaciji problem predstavlja stanje sve nule. Naime, ako bi se brojač po uključenju ili zbog smetnji našao u stanju nula, SIN bi bilo jednako nuli i generator bi stao. Očigledno se mora uvesti dodatna logika koja će obezbediti da se izađe iz zabranjenog stanja. Modifikovani generator je prikazan na slici: Ovaj generator dekoduje stanje nula i na sledeći taktni impuls prelazi u dozvoljeno stanje. 4

Testiranje generatora slučajnih brojeva hi-kvadrat test test Kolmogrova-Smirnova test k-torki poker test test permutacija test maksimuma (minimuma) test podsekvenci test pomoću Monte Carlo simulacije problema čije je rešenje poznato Floyd-ov algoritam Kada govorimo o testiranju generatora slučajnih brojeva, mislimo na sledeće: ) testiranje kvaliteta slučajnosti ) testiranje verodostojnosti (da li slučajna sekvenca zadovoljava pretpostavljenu raspodelu) 3) otkrivanje petlji (cikličkog ponavljanja) u sekvenci Za testiranje generatora slučajnih brojeva se koriste statistički testovi. Smisao statističkih testova je postavljanje hipoteze o nekoj osobini slučajne promenljive, utvrđivanje potrebnog i dovoljnog faktora poverenja i provera hipoteze. U zavisnosti od rezultata dobijenih primenom testa i zahtevanog faktora poverenja, hipoteza se prihvata ili odbacuje. Najpoznatiji statistički test koji se u primenjuje u ovu svrhu je hi-kvadrat test (χ test). Cilj hi-kvadrat testa je da proveri u kojoj se meri raspodela slučajnih brojeva u dobijenoj sekvenci slaže sa nekom unapred pretpostavljenom (zadatom), tj. očekivanom raspodelom. Test se vrši na sledeći način:. generiše se sekvenca slučajnih brojeva X 0, X, X,, X n-. opseg vrednosti slučajnih promenljivih [X min, X max ] se podeli na m jednakih intervala (intervali ne moraju biti jednaki, ali najčešće jesu) 3. za svaki interval se odredi broj vrednosti X i koje se u njemu nalaze na taj način se dobija frekvencija f i, i=,,,m za svaki interval 4. odredi se teorijska raspodela slučajnih brojeva (tj. očekivana, jer mi proveravamo da li se dobijena sekvenca slaže sa zahtevanom raspodelom) 5. koristeći dobijene podatke o željenoj raspodeli, odredi se teorijska frekvencija F i za svaki interval 6. ako je u nekom intervalu f i <5 ili F i <5, vršimo spajanje intervala kako bi u svakom bilo barem 5 dobijenih i teoretski predviđenih vrednosti, a zatim za nove intervale ponovo računamo f i i F i 7. formiramo vrednost χ prema sledećoj jednačini: m χ f i F i F i = i 8. određujemo broj stepeni slobode (DF degrees of freedom) kao DF=m-p-, gde je p broj parametara karakterističan za očekivanu raspodelu (za normalnu p= (µ, σ), za eksponencijalnu p= (λ) i za uniformnu p=0) 5

9. usvajamo vrednost faktora α koji određuje rizik prihvatanja hipoteze da generisana sekvenca ima pretpostavljenu raspodelu (faktor - α predstavlja nivo poverenja za postavljenu hipotezu) 0. zatim određujemo vrednost funkcije χ α (DF, α) koja se računa ili čita iz tabela kao što je sledeća: DF α 0.99 0.95 0.05 0.0 0.00054 0.004 3.84 6.63 0.0 0. 5.99 9. 3 0.5 0.35 7.8.34 30 4.95 8.49 43.77 50.89. ako je χ > χ α hipoteza se odbacuje, a ako je χ < χ α hipoteza se prihvata; naravno, ako je χ < χ α ne znači da je hipoteza apsolutno tačna, jer se uvek može pooštriti nivo poverenja ili izvršiti dopunsko testiranje. Da bismo videli kako se ovaj test primenjuje, posmatrajmo sledeći primer. Neka je u toku 40 dana beležen broj kvarova u jednom elektroenergetskom sistemu i neka su dobijeni sledeći podaci: broj kvarova 0 3 4 5 6 broj slučajeva 87 4 06 57 5 Zadatak je da sa nivoom značajnosti od 0.05 proverimo hipotezu da broj kvarova ima Poisson-ovu raspodelu. Prvo treba izračunati teorijsku raspodelu. Poisson-ova raspodela opisuje diskretne slučajne promenljive funkcijom raspodele: expλ ( )λ ḳ P x k k! Iz navedenih vrednosti se može proceniti parametar λ raspodele kao λ = µ =.538. Na osnovu toga možemo naći verovatnoće i frekvencije: 0 3 4 5 6 F i 90.3 38.6 06.68 54.5 6.3.68 f i Ne moramo ni računati vrednost f i jer u poslednjem intervalu imamo F 6 < 5 pa moramo spojiti intervale 5 i 6. Sada se dobija nova tabela: 0 3 4 {5,6} F i 90.3 38.6 06.68 54.6 7.98 f i 87 4 06 57 7 Koršćenjem ovih vrednosti se računa χ = 0.434. Iz tabele se dobija (za p=) χ α =9.488. Pošto je χ < χ α prihvatamo hipotezu da promenljiva ima Poisson-ovu raspodelu. 6

Pored hi-kvadrat testa, veoma popularan je i test Kolmogrova-Smirnova. Test se vrši na sledeći način: posmatrajmo uzorak slučajnih brojeva x i, i=,, n. Formira se empirijska zbirna funkcija raspodele verovatnoće S(x) (na osnovu više merenja). Zatim se računa teorijska raspodela verovatnoće F(x) i formiraju se razlike F(x i ) S(x i ). Sledeći korak je nalaženje maksimalne razlike: D= max ( F(x i ) S(x i ) ), za i N, gde je N broj merenja Iz tabela se za željeni nivo poverenja α nalazi vrednost D α (α, N). Ako je D D α, hipoteza da x ima raspodelu F(x) se prihvata, a inače se odbacuje. Na primer, neka smo u 5 merenja dobili sledeće rezultate: x S(x) F(x) F(x) S(x) 0.04 0.006 0.098 5 0.40 0.6 0.4 8 0.408 0.456 0.048 0.744 0.803 0.059 4 0.87 0.959 0.087 7 0.960 0.995 0.035 0.000.000 0.000 Neka je faktor poverenja α=0.05. Iz tabele se vidi da je D=0.4, a pošto je D 0,05 =0., sledi da se hipoteza odbacuje. Testovi iz naredne grupe su empirijski testovi. U većini slučajeva se svode na primenu hi-kvadrat ili testa Kolmogrova-Smirnova na neku jednostavnu funkciju kojom transformišemo slučajnu sekvencu. test k-torki Može se upotrebljavati za k=,3, Ako uzmemo k= dobija se test parova. Od vrednosti iz slučajne sekvence se formiraju parovi (Y j, Y j+ ), gde je 0 j < n. Parovi se tretiraju kao koordinate tačaka u kvadratu dimenzija d x d. Zatim se vrši hi-kvadrat test kako bi se pokazalo da su parovi uniformno raspoređeni u kvadratu. U testu parova mora biti n > 5d, za k = 3,4, mora biti n > 5d 3, n > 5d 4 poker test (particijski test) Od slučajne sekvence formiramo grupe od pet uzastopnih vrednosti: Y 5j, Y 5j+, Y 5j+, Y 5j+3, Y 5j+4, gde je 0 j < n. Mogući su sledeći oblici petorki:. sve različito (++++). par (+++) 3. dva para (++) 4. tri ista (3++) 5. ful (3+) 6. poker (4+) 7. pet istih (5) Sada na ovako formirane grupe primenjujemo hi-kvadrat test, ali za slučajnu promenljivu koja označava pojavljivanje neke od mogućih kombinacija. test permutacija Slučajna sekvenca se podeli na grupe od t elemenata. U svakoj grupi se najmanji element označi sa, sledeći sa, i najveći sa t. Pošto su svih t! permutacija 7

jednako verovatne, primenjuje se hi-kvadrat test na slučajnu promenljivu koja označava pojavljivanje mogućih permutacija. test maksimuma (minimuma) Sekvenca slučajnih brojeva se podeli na grupe od t elemenata: U jt, U jt+,, U (j+)t-. Formirajmo slučajnu promenljivu W j = [max(u jt, U jt+,, U (j+)t- )] t Može se pokazati da ove slučajne promenljive imaju uniformnu raspodelu na intervalu (0,). Primenom hi-kvadrat testa ili testa Kolmogrov-Smirnova na hipotezu da sekvenca W j ima uniformnu raspodelu može se proveriti kvalitet generatora slučajnih brojeva. test podsekvenci Od sekvence slučajnih brojeva se formira k podsekvenci na sledeći način: U 0, U k, U k, U, U k+, U k+,. U k-, U k-, U 3k-, Zatim se svaka sekvenca testira na željenu raspodelu. test pomoću Monte Carlo simulacije čije je rešenje poznato Ovde ćemo prikazati kako se slučajni brojevi koriste u Monte Carlo simulacijama, i kako se na sličan način može proceniti kvalitet generatora. Osnovni princip Monte Carlo simulacija je sledeći: neka je na segmentu [a,b] data funkcija x f(x). Pomoću nekog generatora slučajnih brojeva sa uniformnom raspodelom treba generisati n argumenata x, x, x 3,, x n za koje izračunavamo vrednosti funkcije f(x ), f(x ), f(x 3 ),, f(x n ). Srednja vrednost funkcije na segmentu [a,b] je približno: bn xfx()ḋ. ba a N k k= 0 odakle je: b N b a f( x) dx. f x a N k k = 0 Na taj način dobijamo vrednost određenog integrala. Sada je jasno i na koji način možemo proveriti kvalitet generatora slučajnih brojeva. Jednostavno treba primeniti sekvencu slučajnih brojeva na rešavanje određenog integrala čije je rešenje poznato i na osnovu odstupanja rešenja od tačnog se može zaključiti koliko je sekvenca bila kvalitetna. Na kraju ćemo prikazati i Floyd-ov algoritam koji služi za izbegavanje ciklusa u sekvenci slučajnih brojeva. Još na početku smo napomenuli da se zbog konačne dužine memorijskih reči, pre ili kasnije sekvenca slučajnih brojeva mora ponoviti. Posmatrajmo generator tipa X i+ = F (X i ), i =,, m. Ciklus se tada javlja na sledeći način: X 0, X, X,, X µ, X µ+λ-, X µ+λ, 8

Sm()m0 Praktično se dešava da su vrednosti X k+λ i X k jednake, pri čemu je λ dužina ciklusa. Da bi se izbeglo javljanje ciklusa osnovni generator se mora modifikovati na sledeći način:. X = X 0 ; Y=Y 0 (zadavanje početnih vrednosti). R = X (izlaz) 3. X = f (X) 4. Y =f ( f (Y) ) 5. ako je X različito od Y prelazi se na korak. 6. kraj Upotrebom ovog algoritma se garantuje generisanje bar λ različitih elemenata pre obustavljanja rada. Problem je što se vreme generisanje sekvence utrostručuje. ) Helermanova formula Helermanova formula pokazuje kako se menja efektivna širina opsega memorije ukoliko je memorija podeljena na m blokova kojima se može nezavisno pristupati. Neka je W dužina podatka, tj. broj bita koji se zahvati pri jednom pristupu memoriji i neka je Tc srednje vreme potrebno za dva uzastopna pristupa (čitanje ili pisanje) istoj adresi. Tada se širina opsega memorije definiše kao: W B mem Ovo razmatranje, međutim, ne važi ako se istovremeno (paralelno) može pristupati (čitati ili upisivati) na više adresa. Neka je memorija podeljena na m blokova i neka se svakom bloku može nezavisno pristupati. Idealno bi bilo kada bismo uspeli da u svakom ciklusu generišemo pristup različitim blokovima. Pošto je to nemoguće, širina opsega memorije se u tom slučaju definiše kao: B mem S( m) W T ċ T c gde je S(m) faktor simultanosti, koji služi da kvantitativno opiše verovatnoću da ćemo u jednom ciklusu pristupa memoriji uspeti da generišemo adrese iz bar k različitih blokova, k m. Iz tog razloga je očigledno da mora biti S(m) m. Može se pokazati da je: m64 m k Sm()m()!. k. mk()! k= Pošto je ovaj izraz teško računati, Helerman je red aproksimirao na sledeći način: S(m) m 0.56 Istim problemom se bavio i Donald Knuth i pokazao da su bolje aproksimacije: i poboljšana varijanta: 9

Sm() πm. π m 4 3 35m Naš zadatak je ispitamo grešku Helermanove aproksimacije, pronađemo treću decimalu u njegovoj formuli i da pokušamo da aproksimiramo red S(m) nekim polinomom što veće tačnosti. Prvo ispitujemo grešku. U paketu MathCad Professional 7.0 je napisan program koji izračunava vrednosti reda S(m) za 0 vrednosti argumenta m, nalazi vrednost m 0.56 i daje apsolutnu grešku aproksimacije, tj. S(m) m 0.56. Rezultati su dati u tabeli i na grafikonu. m S(m) m 0.56 S(m) - m 0.56.5.47469790 0.0573078708899 4.875.7346975056 0.0458074947884 6.774693580469.77499697677 0.04797884844 8 3.450800537094 3.047950358489 0.0407384950606 0 3.660568 3.6307805477004 0.09435398986 4.03607367509895 4.0068743467478 0.050049363473 4 4.3809443835 4.3836078903889 -.57846600470890E-3 6 4.704584707678 4.7397064578-0.097398645444 8 5.00706309899893 5.0460638770-0.0389993977909 0 5.935845860009 5.35747996493-0.0596340403 5.56698786044 5.646057668549-0.08000753899005 4 5.86755039588 5.9837869055-0.0385365894 6 6.076793668604 6.99905570034-0.3860737 8 6.3793595343384 6.466873473749-0.453457830365 30 6.5494608303305 6.779474843-0.6773334308889 3 6.774045476669739 6.964404506368995-0.903590969955 48 8.3643535808078 8.7396776799-0.375375959999 64 9.705785078600 0.67407805034-0.5665997734 96.95694307090473.88468844358-0.97685353068 0. greška 0-0. -0.4-0.6 4 6 8 0 4 6 8 0 4 6 8 30 3 48 64 96-0.8 - m greška aproksimacije m 0.56 0

Iz tabele i sa grafikona se mogu zaključiti dve stvari: ) za male vrednosti argumenta m (do ), greška je pozitivna, a za veće vrednosti je negativna ) apsolutna vrednost greške raste sa porastom argumenta m, što se može videti sa sledećeg grafika: greška 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0. 0. 0 4 6 8 0 4 6 8 0 4 6 8 30 3 48 64 96 apsolutna vrednost greške aproksimacije m 0.56 m Sledeći problem je bio nalaženje treće decimale u eksponentu Helermanove aproksimacije. Problem je verovatno rešiv i analitički, ali ja nisam uspeo da pronađem matematički aparat kojim bih mogao da aproksimiram takav red polinomom čiji stepen nije ceo broj. Sve aproksimacije koje su mi poznate iz numeričke matematike se svode na nalaženje polinoma oblika: a n- x n- + a n- x n- + + a x + a 0 gde se koeficijenti računaju na razne načine (interpolacioni polinomi, metod najmanjih kvadrata, linearna regresija). Dodatni problem je bio to što se samo metod linearne regresije definiše za diskretne funkcije. Iz tog razloga sam problem počeo da rešavam primenom grube sile. Ideja je bila da se pronađu vrednosti funkcije za nekoliko vrednosti argumenta m za sve moguće vrednosti treće decimale u eksponentu (znači za m 0.56, m 0.56,, m 0.569 ) i da se računanjem odstupanja od tačne vrednosti S(m) pronađe za koju treću decimalu se dobija najmanja greška. Rešenje je dobijeno pisanjem programa u paketu MathCad 7.0 koji je odmah računao vrednosti grešaka za devet vrednosti argumenta m. Dobijeni rezultati su prikazani u sledećim tabelama (navedene su apsolutne vrednosti grešaka):

m 0.56 m greška 0.0470854976 4 0.0465665839 6 0.0430034759339 8 0.0340684505078 0 0.0065387798 6 0.03880034853 4 0.05575357607 3 0.453769066386 64 0.604457930945 m 0.56 m greška 0.036855943767 4 0.03945775573344 6 0.037400485949 8 0.07384560343 0 0.067607439 6 0.045980470964 4 0.398550569 3 0.388009385854 64 0.64738398507689 m 0.563 m greška 0.06693647439 4 0.036458903 6 0.034984673 8 0.006866793994 0 4.6776386875384E-3 6 0.059695038794 4 0.5875488547 3 0.634730709744 64 0.690534885756 m 0.564 m greška 0.06375687658 4 0.033945798095 6 0.075734708906 8 0.039748949366 0 4.6006647833336E-3 6 0.07394505679 4 0.7766765 3 0.87578493655499 64 0.73385833075656

m 0.565 m greška 0.0064907563 4 0.03065974785 6 0.06468308680 8 7.4939846086E-3 0 0.060734980846 6 0.08565657403036 4 0.9633748088586 3 0.30946764944 64 0.77736598008090 m 0.566 m greška 0.095867099995 4 0.0764670469 6 0.077408009 8 5.093830693696E-4 0 0.00740564534 6 0.0989554686855 4 0.5509634009064 3 0.33669597668 64 0.805494944606 m 0.567 m greška 0.08560097968 4 0.0408648454 6 0.076735037079 8 6.44405668544E-3 0 0.0956030570503 6 0.076735037079 4 0.34748493496 3 0.36386786900 64 0.864959944806 m 0.568 m greška 0.07539909765 4 0.0045648464 6 7.83995064656965E-3 8 0.03046909767 0 0.03806678066 6 0.56648873306 4 0.540375690667 3 0.38655090754039 64 0.908979873999 3

m 0.569 m greška 0.0650506658878 4 0.0799786776 6.859730567E-3 8 0.097947935 0 0.046595378576 6 0.3907408879537 4 0.73393033374704 3 0.40350640734 64 0.95373499507 Prvobitna zamisao je bila da se zatim vrednosti grešaka prikažu na jednom grafiku i da se jednostavno izabere decimala sa najmanjom greškom, tj. grafikon koji ide ispod svih ostalih. Umanjena verzija tog grafikona je prikazana na sledećoj slici:. 0.8 0.6 0.4 0. 0 Međutim, pokazalo se da se greška ponaša neočekivano: grafikoni se seku. Na primer, na grafikonu ispod je prikazano ponašanje za samo dve decimale. Vidi se da je za manje vrednosti argumenta m svetlija kriva ispod tamnije, ali da je za velike vrednosti m obrnuto: svetlija kriva je iznad tamnije. Dakle, na ovaj način se ne može zaključiti za koju decimalu se dobija minimalna greška. 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0. 0. 0 4

Sledeća ideja je bila pronalaženje relativne vrednosti greške. Pošto smo videli da se apsolutna vrednost greške uvećava sa porastom parametra m, srednja vrednost se nije mogla naći prostim sabiranjem svih grešaka, jer bi na taj način skoro potpuno potisnuli uticaj grešaka pri malim vrednostima m. Zato je relativna vrednost nađena upotrebom sledeće formule: δ m δ m... δ 9 m 9 Na taj način su dobijeni sledeći rezultati: δ i 9 eksponent relativna vrednost greške 0.56 0.0066666 0.56 0.00653659 0.563 0.00645738 0.564 0.0064709 0.565 0.0065800 0.566 0.00669039 0.567 0.00708307 0.568 0.0077460 0.569 0.007575687 Minimalna greška se dobija za eksponent 0.563, što se vidi i sa sledećeg grafika: 0.0078 greška 0.0076 0.0074 0.007 0.007 0.0068 0.0066 0.0064 3 4 5 6 7 8 9 0.006 0.006 0.0058 treca decimala Dakle, Helermanova aproksimacija sa tri decimale u eksponentu izgleda: S(m) m 0,563 Preostao je još problem aproksimacije reda S(m) polinomom. Upotrebićemo postupak linearne regresije. Ideja je da red S(m) prikažemo kao: S(m) = C 0 + C m Koeficijenti C 0 i C se nalaze iz sistema jednačina: 5

N NC 0 Sm k im = k N 0 C k Sm = k Jedino pitanje koje se ovde postavlja je izbor m k i N, tj. kako ćemo tabelirati diskretnu funkciju. Ako uzmemo svih 9 vrednosti koje smo tabelirali dobićemo polinom: S(m) 0.0837m +.73 Ovde pravimo veliku grešku za male vrednosti argumenta m. Međutim, kako m raste, tako se i tačnost popravlja. Razlog je način na koji smo tabelirali funkciju. Naime, nismo uzeli ekvidistantni raspored vrednosti m k. Ako na primer izbacimo tri najveće vrednosti m, dobijamo drugačiji polinom: S(m) 0.663m +.79 Sada za male vrednosti m dobijamo bolju tačnost. Generalno gledano, ovo nije najsrećniji problem za linearnu regresiju. Međutim, mogli bismo postići veću tačnost ako bismo izvršili aproksimaciju polinomom višeg stepena (metod najmanjih kvadrata) ili ako bismo pažljivije izvršili analizu greške kod linearne regresije. Tada bismo mogli (metodom probanja) da nađemo kako treba tabelirati red S(m) kako bi greška aproksimacije bila minimalna. Takođe, pošto greška raste sa porastom vrednosti argumenta m, mogli bismo skup vrednosti S(m) podeliti u više podintervala i svaki aproksimirati posebnim polinomom, na isti način na koji smo to već uradili za ceo skup vrednosti. Smanjivanjem koraka i povećanjem broja intervala bismo mogli postići proizvoljnu tačnost. Literatura. Donald E. Knuth, The Art of Computer Programming, Volume : Seminumerical Algorithms. Dobrilo Đ. Tošić, Uvod u numeričku analizu 3. Milan Merkle, Verovatnoća i statistika 4. Dejan B Živković, Miodrag V. Popović, Impulsna i digitalna elektronika 5. Vladan Devedžić, folije sa predavanja iz predmeta Progamski jezici i metode programiranja 6. Laslo Kraus, beleške sa vežbi iz predmeta Programski jezici i metode programiranja 6