/* distGammaI.js Esta unidade implementa a função gamma incompleta. Deve ser usada junto com a a unidade "distGlobais.js" */ /* ********** FUNCTION GSER(a,x) ***************** Esta função calcula a função gamma incompleta usando uma série de Potências. A convergência é melhor quando x < a+1. Ela retorna um objeto da classe "Resultado". Caso a propriedade "erro" seja true, a mensagem de erro estará na propriedade "valor". Caso não haja erro o objeto retornado terá as propriedades: "valor" contendo o resultado da função, e "gammln" contendo o resultado da função gammln(a) Pré-requisitos: * a classe Resultado * função gammln(x) * variáveis globais: ITMAX=100 e EPS=3.0e-7 */ function gser(a,x){ var R = new Resultado() R.gammln = gammln(a) if(x<=0.0){ if(x<0.0) return R.msg('x menor que 0 na rotina gser') return R.val(0.0) } else { var ap=a var del = 1.0/a var sum = del for(var n=1;n<=ITMAX;n++){ ++ap del *= x/ap sum += del if (Math.abs(del) a+1. Ela retorna um objeto da classe "Resultado". Caso a propriedade "erro" seja true, a mensagem de erro estará na propriedade "valor". Caso não haja erro o objeto retornado terá as propriedades: "valor" contendo o resultado da função, e "gammln" contendo o resultado da função gammln(a) Pré-requisitos: * a classe Resultado * função gammln(x) * variáveis globais: ITMAX=100, EPS=3.0e-7 e FPMIN=1.0e-30 */ function gcf(a,x){ var del, an, b, c, d, h, i var R = new Resultado() R.gammln = gammln(a) b = x+1.0-a c = 1.0/FPMIN d = 1.0/b h = d for(i=1; i<=ITMAX; i++){ an = -i*(i-a) b += 2.0 d = an*d+b if (Math.abs(d) < FPMIN) d = FPMIN c = b + an/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 muito grande ou ITMAX muito pequeno em gcf') return R.val(Math.exp(-x+a*Math.log(x)-R.gammln)*h) }// function gcf /* ************ FUNCTION GAMMP(a,x) **************************** Esta função calcula a função gamma incompleta usando o melhor algoritmo em cada situação (gser ou gcf). Ela retorna um objeto da classe "Resultado". Caso a propriedade "erro" seja true, a mensagem de erro estará na propriedade "valor". Caso não haja erro o objeto retornado terá a propriedades "valor" contendo o resultado da função. Pré-requisitos: * a classe Resultado * a função gser(a,x) * a função gcf(a,x) */ function gammp(a,x){ var R = new Resultado() var gamma if(x<0.0 || a <=0.0) return R.msg('Argumentos inválidos na function gammp') if(x < (a+1.0)){ gamma = gser(a,x) if(gamma.erro) return R.msg(gamma.valor) return R.val(gamma.valor) } else { gamma = gcf(a,x) if(gamma.erro) return R.msg(gamma.valor) return R.val(1.0-gamma.valor) }// if }// function gammp