def obter_integral(a, b, funcao, nit = 4, n = 4, erro = 10**-16):
  integrais = trapezio.obter_integral(a, b, funcao, nit, n)
  rombergs = []  
  rombergs.append(integrais)
  
  for j in range(1, nit):
    rtmp = []
    for k in range(nit - j):
      rkj = (4**j * rombergs[j-1][k+1] - rombergs[j-1][k]) / (4**j - 1.0)
      rtmp.append(rkj)
      
    rombergs.append(rtmp)
    
  for i in range(nit -1):
    errotmp = math.fabs(rombergs[i+1][0] - rombergs[i][0]) 
    if(errotmp < erro):
      return rombergs[i+1][0]
 
  print 'Nao foi encontrado um resultado com a precisao desejada'   
  return integrais[0]
    
import funcoes
from integracao.newtonianos import trapezio
from integracao.newtonianos import simpson
from integracao.newtonianos import simpson_composto
from integracao.newtonianos import trapezio_melhorado

print 'Testando integrador usando metodo de newton com a funcao lnx no intervalo 1-2'
res = trapezio.obter_integral(1.0, 2.0, funcoes.lnx)
i = 1
for r in res:
  print 'Integral', i, ': ', r
  i += 1


print 'Testando integrador usando metodo de simpson com a funcao lnx no intervalo 1-2'
res = simpson.obter_integral(1.0, 2.0, funcoes.lnx)
i = 1
for r in res:
  print 'Integral', i, ': ', r
  i += 1



print 'Testando integrador usando metodo de newton com a funcao 1/ xlnx no intervalo 2-4'
res = trapezio.obter_integral(2.0, 4.0, funcoes.inverso_x_lnx)
i = 1
for r in res:
  print 'Integral', i, ': ', r
  i += 1