Wednesday, June 12, 2013

Non Homogeneous Poisson Process

Try jsfiddle



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


function nonHomogeneousPoissonProcess(lambdaTArray,T)
{
    var lambda=0.0;
    for (var i = 0; i < lambdaTArray.length; i++) {
     
        if (lambdaTArray[i]>lambda)
            lambda=lambdaTArray[i]+1;
    }
 
    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;
        var s=Math.random();
        if (s<=lambdaTArray[parseInt(t, 10)]/lambda)
        {
            S[k]=t;
            k=k+1;
        }
    }
    return S;
}
var str='<svg xmlns="http://www.w3.org/2000/svg" version="1.1">';
var lambdaTArray=new Array();
var T=50
for (var i = 0; i < T; i++)
    lambdaTArray[i]=Math.random();
var Liste=nonHomogeneousPoissonProcess(lambdaTArray,T);
var previousvalue=0.0;
for (var i = 0; i < Liste.length; i++) {
 
    str+='<line x1="'+i*10+'" y1="'+previousvalue+'" x2="'+(i+1)*10+'" y2="'+Liste[i]*10+'" style="stroke:rgb(255,0,0);stroke-width:2" />';
    previousvalue=Liste[i]*10;
 
}
$("#graph").append(str+'</svg>' );

No comments: