Post Reply 
NORMALD_ICDF (LEFT/CENTER/RIGHT)
03-01-2020, 08:08 AM
Post: #8
RE: NORMALD_ICDF (LEFT/CENTER/RIGHT)
Would that fit:
Code:

0>> normald_icdf(0.8)
0.841621233573
// Time 0
1>> normald_icdf(0.8,left)
0.841621233573
// Time 0
2>> normald_icdf(0.8,right)
-0.841621233573
// Time 0
3>> normald_icdf(0.8,center)
[-1.28155156554,1.28155156554]
// Time 0
4>> normald_icdf(0.8,tail)
[-0.253347103136,0.253347103136]
// Time 0

0>> normald_icdf(1,2,.8,left)
2.68324246715
// Time 0
1>> normald_icdf(1,2,.8,right)
-0.683242467146
// Time 0
2>> normald_icdf(1,2,.8,center)
[-1.56310313109,3.56310313109]
// Time 0
3>> normald_icdf(1,2,.8,tail)
[0.493305793728,1.50669420627]
// Time 0
source code:
Code:

  gen _normal_icdf(const gen & g,GIAC_CONTEXT){
    if ( g.type==_STRNG && g.subtype==-1) return  g;
    if (g.type!=_VECT)
      return normal_icdf(g,contextptr);
    vecteur v=*g._VECTptr;
    int s=v.size();
    if (s==2 && (v.back()==at_left || v.back()==at_right || v.back()==at_centre|| v.back()==at_tail)){
      v=makevecteur(0,1,v[0],v[1]);
      s=4;
    }    
    if (s<3)
      return gensizeerr(contextptr);
    if (s==4 && v.back()==at_centre)
      v[2]=(1-v[2])/2;
    if (s==4 && v.back()==at_tail)
      v[2]=v[2]/2;
    gen g2(normal_icdf(v[2],contextptr));
    gen g1=v[0]-v[1]*g2;
    g2=v[0]+v[1]*g2;
    if (s==4 && (v.back()==at_centre || v.back()==at_tail))
      return makevecteur(g2,g1);
    if (s==4 && v.back()==at_right)
      return g1;
    return g2;
  }
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: NORMALD_ICDF (LEFT/CENTER/RIGHT) - parisse - 03-01-2020 08:08 AM



User(s) browsing this thread: 1 Guest(s)