def obter_alpha(intervalo, grau, coeficientes, limite=20, erro_passado=10 ** -16): a = intervalo[0] b = intervalo[1] erro = erro_passado * 10.0 contador = 0 xm = 0.0 fa = horner.obter_resto(grau, coeficientes, a) fb = horner.obter_resto(grau, coeficientes, b) aux = fa if (fa * fb) < 0: while contador < limite: contador += 1 tmp = fa * (b - a) aux = fb - fa xm = (a) - (tmp / aux) fm = horner.obter_resto(grau, coeficientes, xm) if fm == 0: return xm, 0.0 if (fm * fa) < 0.0: b = xm fb = fm if fm * aux > 0: fa = fa / 2.0 else: a = xm fa = fm if fm * aux > 0: fb = fb / 2.0 aux = fm erro = math.fabs(b - a) if erro < erro_passado: return xm, erro print "Iteracao ", contador, " alpha = ", xm return xm, erro else: if intervalo[0] > 0: intervalo[0] -= 0.5 else: intervalo[0] += 0.5 return obter_alpha(intervalo, grau, coeficientes, limite, erro_passado)
import horner import divisao import multiplicidade import localizacao_raizes import newton_polinomial import newton_kinkeid_pol grau = 4 coeficientes = [2.0, 0.0, 0.0, 3.0, -2.0] coeficientes_multi = [1.0, -1.0, -5.0, 1.0, 8.0, 0.0] coeficientes_loc = [2.0, 0.0, 0.0, 0.0, -8.0, 3.0] coeficientes_newton = [2.0, 0.0, 0.0, 3.0, -5.0] x = 2.0 print 'Testando solver uma polinomial simples usando horner' print horner.obter_resto(grau, coeficientes, x); print '' print 'Testando solver uma polinomial simples e obter derivadas usando divisao' print divisao.obter_resto(grau, coeficientes, x); print '' print 'Testando obter multiplicidade de uma raiz' print multiplicidade.verifica_multiplicidade(5, coeficientes_multi, -1.0); print '' print 'Testando obter localizacao das raizes' print localizacao_raizes.obter_localizacao_raizes(5, coeficientes_loc); print '' print 'Testando obter localizacao refinada das raizes bom Beta = 0' print localizacao_raizes.obter_localizacao_ref_raizes(5, coeficientes_loc); print '' print 'Testando obter pn(x) = 0 com newton geral polinomial' print newton_polinomial.obter_alpha(4, coeficientes_newton)