x1, x2 = 3, 6 def fx(x): return x/(4+x**2) # n等分,x1到x2的区间,type=1表示梯形法,type=2表示辛普森法 def CompositeNewtonCotes(n, type): if type == 1: h = (x2 - x1) / n result = 0 for i in range(n): result += (fx(x1 + i * h) + fx(x1 + (i + 1) * h)) result *= (h / 2) return result elif type == 2: h = (x2 - x1) / n result = -fx(x1) + fx(x2) for i in range(n): result += (4 * fx(x1 + (i + 0.5) * h) + 2 * fx(x1 + i * h)) result *= (h / 6) return result if __name__ == "__main__": print("Composite Trapezoidal Rule: ", CompositeNewtonCotes(8, 1)) print("Composite Simpson's Rule: ", CompositeNewtonCotes(4, 2))