题目:
设计复化辛浦生求积算法
代码:
# 要积的函数,字符串形式
fx_str = str(input("请输入要积的函数,格式为 x*x+1 (即变量用x表示,乘号用*表示):"))
# 求积的区间[a, b]
a, b = list(map(float, input("请输入求积区间[a, b],格式为 a b :").split()))
# 区间划分的份数
n = int(input("请输入需要划分的份数:"))
# 步长
h = (b - a) / n
# 分点,一共n+1个
x = [a+k*h for k in range(n+1)]
# 要积的函数
def fx(xk):
return eval(fx_str.replace("x", str(xk)))
# 辛甫生公式 x2 > x1
def simpson(x1, x2):
return (fx(x1) + fx(x2) + 4 * fx((x1 + x2) / 2)) / 6 * (x2 - x1)
# 复化辛甫生公式
sn = 0
for i in range(n):
sn += simpson(x[i], x[i+1])
print(sn)