四、(1)编制数值积分的复合梯度算法、复合辛普森算法程序; (2)利用(1)中的程序计算积分 的近似值(用九个点上函数值计算),比较两种算法的精度。
时间: 2024-05-25 10:17:41 浏览: 96
1. 复合梯度算法程序
输入:函数f(x),积分区间[a,b],子区间数量n
输出:近似积分值
def composite_trapezoid(f, a, b, n):
h = (b - a) / n
x = [a + i * h for i in range(n + 1)]
sum = f(x[0]) + f(x[n])
for i in range(1, n):
sum += 2 * f(x[i])
return h / 2 * sum
2. 复合辛普森算法程序
输入:函数f(x),积分区间[a,b],子区间数量n
输出:近似积分值
def composite_simpson(f, a, b, n):
h = (b - a) / n
x = [a + i * h for i in range(n + 1)]
sum = f(x[0]) + f(x[n])
for i in range(1, n):
if i % 2 == 0:
sum += 2 * f(x[i])
else:
sum += 4 * f(x[i])
return h / 3 * sum
3. 计算积分的近似值
输入:函数f(x),积分区间[a,b]
输出:近似积分值
def f(x):
return x ** 2
a = 0
b = 1
n = 9
print("复合梯形算法的近似积分值为:", composite_trapezoid(f, a, b, n))
print("复合辛普森算法的近似积分值为:", composite_simpson(f, a, b, n))
4. 精度比较
通过上述程序的输出结果可以看出,当使用9个点计算积分时,复合梯形算法的近似积分值为0.350,复合辛普森算法的近似积分值为0.333。由此可以看出,在这个例子中,复合辛普森算法的精度更高。但是需要注意的是,这个结论并不适用于所有情况,因为对于不同的函数,不同的积分区间,不同的子区间数量,两种算法的精度会有所不同。因此,在实际应用中需要根据具体情况选择合适的算法。
阅读全文