Ajatellaan, että tietokoneohjelmalla, esim. kätevällä ohjelmistopaketti Matlabilla tulee satunnaislukugeneraattorilla generoida n-ulotteinen pallo, jossa n-pallon pinnalla olevat pisteet ovat tilastollisesti tasan jakautuneita n-pallon pinnalle. Laittakaa alkuun edes esim. 3-ulotteinen pallo. Miten tämä onnistuu? Tämä pitäisi saada HY:n tietojenkäsittelyn Graduun.
Löytyykö tähän yksinkertaista Matlab-koodia?
Löytyykö tähän yksinkertaista Matlab-koodia?
Vastaukset 7
Vanhimmat
Hmm. Mitä tarkoittaa "pisteet ovat tilastollisesti tasan jakautuneita n-pallon pinnalle"? Minusta pisteistä tulisi muodostaa joku numeerinen suure, ja näiden kokoelmasta voisi puhua tasajakautuneisuudesta tai ei.
Minusta gradut tulisi tehdä itse eikä keskustelupalstojen avulla. Jos on ongelmia, pikku-g:n ohjaaja varmaankin auttaa eteenpäin.
Käytetään hyväksi sitä, että n-ulotteinen normaalijakaantuma on pallosymmetrinen. Sen tiheysfunktiohan on muotoa k * exp(-(1/2) * (x1^2 x2^2 ... xn^2)).
Kun on muodostettava satunnaisia tasan jakaantuneita pisteitä R^3:n yksikköpallon pinnalle, määrätään kutakin pistettä kohti N(0,1)-normaalijakaantuneet toisistaan riippumattomat luvut X1, X2 ja X3. Normitetaan vektorin (X1, X2, X3) pituudeksi 1, jolloin saadaan yksikköpallon pinnan piste.
Matlabilla tämä menee esimerkiksi 10-ulotteiselle pallolle, kun näytevektoreita on N=1000 kpl:
n=10; N=1000; x=randn(n,N); for k=1:N, xnormalized(:,k)=x(:,k)/norm(x(:,k)); end
Seuraavasta nähdään, että kaikkien generoitujen normeerattujen vektoreiden normi=1 eli ne ovat pallon pinnalla
for k=1:N, norm(xnormalized(:,k)), end
Mutta ei kai tuo takaa tasajakaumaa? Eiko tuo vain laita pallolle 1000 pistettä?
Kyllä takaa tilastollisessa mielessä, kunhan Matlabin randn-funktio generoi normaalijakautunutta dataa kyllin luotettavasti. Siis yksi (3-ulotteinen) vektori lankeaa tilastollisesti yhtä luotettavasti niin New Yorkin, Pariisin kuin Helsinginkin kohdalle. Millä perusteella sinulla voi olla tähän epäilys?
Ajattelin, että jos pisteitä on vain muutama, niin pisteet eivät ole välttämättä tasan jakautuneita. En tiedä, haluaako alkuperäinen kysyjä kehittää sellaisen algoritmin, joka levittää myös pienen määrän pisteitä tasaisesti pallolle vai riittääkö, että tilastollisesti iso määrä pisteitä jakautuu suht tasaisesti. Jostain luin, että ainakin 1990-luvulla oli avoin ongelma, miten n pistettä jaetaan yksikköpallon pinnalle siten, että eri pisteiden välinen lyhin etäisyys olisi mahdollisimman suuri. En tiedä, tekeekö J.Vaelimaeki tästä aiheesta gradua.
Itse lähden olettamuksesta, että aloittaja haluaa tehdä jonkun tietokonesimulaation, jossa tilastollisesti iso määrä pisteitä jakautuu suhteellisen tasaisesti. Oletan, että tämä liittyy johonkin tieteellisen tyyppiseen tutkimukseen. BTW: Matlab on tosi hyvä ohjelmistopaketti tehdä tutkimus- ja tuotekehitystyötä. Esimerkiksi Nokia Research Centerissä on käytetty paljon Matlabia, vaikka se ei pärjää käytännön reaaliaikateknologiassa mitenkään C :lle, Javalle jne.