import math def f(x): return x - x**2 + x**3 - x**4 + math.sin(x*13.)/13. def fint(x): return x**2/2. - x**3/3. + x**4/4. - x**5/5. - math.cos(x*13.)/169. fint_exact = fint(1.2)-fint(0.) npoints = 21 weights = [[0.1460811336496904, +0.0000000000000000], [0.1445244039899700, -0.1455618541608951], [0.1445244039899700, +0.1455618541608951], [0.1398873947910731, -0.2880213168024011], [0.1398873947910731, +0.2880213168024011], [0.1322689386333375, -0.4243421202074388], [0.1322689386333375, +0.4243421202074388], [0.1218314160537285, -0.5516188358872198], [0.1218314160537285, +0.5516188358872198], [0.1087972991671484, -0.6671388041974123], [0.1087972991671484, +0.6671388041974123], [0.0934444234560339, -0.7684399634756779], [0.0934444234560339, +0.7684399634756779], [0.0761001136283793, -0.8533633645833173], [0.0761001136283793, +0.8533633645833173], [0.0571344254268572, -0.9200993341504008], [0.0571344254268572, +0.9200993341504008], [0.0369537897708525, -0.9672268385663063], [0.0369537897708525, +0.9672268385663063], [0.0160172282577743, -0.9937521706203895], [0.0160172282577743, +0.9937521706203895]] area, min, max = 0., 0., 1.2 for i in range(npoints): x = ((max-min)*weights[i][1] + (max+min))/2. area += f(x)*weights[i][0] area *= (max-min)/2. print('Exact: %.16f, Numerical: %.16f, diff: %.16f' \ % (fint_exact,area,abs(fint_exact-area)))