/* distBetaI.js Implementa a função beta incompleta. Pré-requisitos: distGlobais.js */ /* ****************** BETACF(a,b,x) ************************* Calcula a parte da fração contínua da função beta incompleta. Retorna um objeto da classe "Resultado". Pré-requisitos: * Classe Resultado * Variáveis globais ITMAX=100, EPS=3.0e-7 e FPMIN=1.0e-30 */ function betacf(a,b,x){ var R = new Resultado() var m,m2,aa,c,d,del,h,qab,qam,qap qab=a+b qap=a+1.0 qam=a-1.0 c=1.0 d=1.0-qab*x/qap if (Math.abs(d) < FPMIN) d=FPMIN d=1.0/d h=d for(m=1; m<=ITMAX; m++){ m2=2*m aa=m*(b-m)*x/((qam+m2)*(a+m2)) d=1.0+aa*d if(Math.abs(d) < FPMIN) d=FPMIN c=1.0+aa/c if(Math.abs(c) < FPMIN) c=FPMIN d=1.0/d h *= d*c aa = -(a+m)*(qab+m)*x/((a+m2)*(qap+m2)) d=1.0+aa*d if(Math.abs(d) < FPMIN) d=FPMIN c=1.0+aa/c if(Math.abs(c) < FPMIN) c=FPMIN d=1.0/d del=d*c h *= del if(Math.abs(del-1.0)ITMAX) return R.msg('a ou b muito grande, ou ITMAX muito pequena em betacf') return R.val(h) }// function betacf /* **************** FUNCTION BETAI(a,b,x) ********************* Retorna a função beta incompleta. O valor retornado pela função é um objeto da classe "Resultado". O valor da função beta incompleta está na propriedade "valor" Pré-requisitos: * classe Resultado() * função betacf(a,b,x) * função gammln(x) */ function betai(a,b,x){ var R = new Resultado() var bt if(x < 0.0 || x > 1.0) return R.msg('Valor de x fora da faixa em betai') if(x == 0.0 || x == 1.0) bt = 0.0 else bt = Math.exp(gammln(a+b)-gammln(a)-gammln(b)+a*Math.log(x)+b*Math.log(1.0-x)) if(x < (a+1.0)/(a+b+2.0)){ G = betacf(a,b,x) if(G.erro) return R.msg(G.valor) R.valor=bt*G.valor/a } else { G = betacf(b,a,1.0-x) if(G.erro) return R.msg(G.errorMsg) R.valor=1.0-bt*G.valor/b } return R }// function betai