Pogledajte određenu poruku
Staro 26. 04. 2007.   #3
filmil
хардвераш
Qualified
 
Datum učlanjenja: 04.01.2007
Lokacija: Маунтин Вју, САД
Poruke: 117
Hvala: 4
25 "Hvala" u 10 poruka
filmil is on a distinguished road
Default

Само да допуним горњу причицу једним примером, да не буде да лупам у празну шерпу.

Пробаћу да набодем шта ти је потребно, мада то није тако добро дефинисано.

Претпостављам да је густина расподеле g(x) на интервалу (f,t) (from->to) таква да је
g(t) = n * g(f), што је отприлике оно што си рекао горе. Једино је фактор мало другачији јер је инверз мултипликативан а не адитиван као у твом случају. Тојест, обрнути случај од n = 3 добио би се са n' = 1/3, а не са n = -3. Али то ваљда није неки проблем.

Претпоставићу да је интерполација између крајњих тачака линеарна. Овај део ниси навео у поставци, тако да провери да ли ти одговара. Тада је:

g(x) = { 0, x < f; ax + b, x E [f, t]; 0, x > t

Треба нам да одредимо a и b у функцији од n да бисмо добили g(x). Онда ћемо да инвертујемо g(x) и то је оно што нам треба.

Линеарном интерполацијом се добија да је:

a = (n-1) / (t-f) * q
b = (t - nf) / (t-f) * q

што су вредности које добијете ако протурите праву ax+b кроз тачке: (f, q) и (t, nq). Овде нам је n параметар кога задаје корисник, а q мора да се одреди из интегралног услова за расподелу.

Пошто g(x) мора да задовољи интегрални услов за расподелу да је \int_{-\infty}^{+\infty} = 1, интеграљењем функције g(x) по целом домену добије се:

q = 2/[(n+1)(t-f)]

(паде ми напамет мало касније па да допуним: вредност за q добио сам формално интеграљењем, али може да се добије и на бржи начин тако што се уочи да је средња вредност функције тачно на средини интервала. Штос је сличан ономе ког је Гаус искористио да срачуна брзо збир свих бројева од 1 до 100)

Сада треба да пређемо на функцију расподеле G(x). По дефиницији,

G(x) = \int_{\infty}^x g(x) dx

а интеграљењем део по део у овом случају добија се:

G(x) = { 0, x< f; a/2(x^2-f^2) + b(x-f), x \in [f, t]; 1, x > t

Налажењем инверза G^{-1}(x) добија се, за интервал [0,1] ово:

G^{-1}(y) = H(y) = 1/a * ( -b + \sqrt{ b^2 + 2a(a/2 f^2 + bf)})

где су нам све величине или познате од пре, или зависе од параметра n.

H(y) је у ствари функција и од параметра n, па ћу да забележим: H(y; n).

И сад је лако.

Ако имаш функцију rand() која генерише реални број од 0 до 1 са униформном расподелом, радиш следеће:

u = rand();
y = H(u; n)

И број y је извучен тачно из расподеле коју си хтео.

ф
__________________
Рад је створио човека. Рад ће га и уништити.

Poslednja izmena od filmil : 26. 04. 2007. u 02:43.
filmil je offline   Odgovorite uz citat