Wednesday, June 12, 2013

Levy Jump

try jsfiddle




function ln(val){
    return Math.log(val) / Math.log(Math.E);
}

function pollarMethod()
{
do{
U1=Math.random();
U2=Math.random();
V1=2*U1-1.0;
V2=2*U2-1.0;
S=V1*V1+V2*V2;
}
while(S>=1);

X=V1*Math.sqrt((-2*ln(S))/S);
return X;
}

function poissonProcess(lambda,T)
{
    var t=0;
    var k=0;
    var S=new Array();
    while(t<=T)
    {
        var r=Math.random();
        t=t-ln(r)/lambda
        if (t>T) return S;
        S[k]=t;
        k=k+1;
    }
    return S;
}

function levyJump(t,b,c,lambda)
{
    var L=b*t;
    L=L+Math.sqrt(c)*pollarMethod();
    var nbLoop=poissonProcess(lambda,t);
    for (var i=0;i<nbLoop;i++)
    {
        L+=Math.random();
    }
    return L;
}
var str='<svg xmlns="http://www.w3.org/2000/svg" version="1.1">';
var previousvalue=0;

for (var i = 0; i < 50; i++) {
    val=levyJump(i,0.9,20.0,1.0);
    str+='<line x1="'+i*10+'" y1="'+previousvalue+'" x2="'+(i+1)*10+'" y2="'+val*10+'" style="stroke:rgb(255,0,0);stroke-width:2" />';
    previousvalue=val*10;
   
}
$("#graph").append(str+'</svg>' );

No comments: