这里并不能够说完全实现了复化辛普生公式,因为这里面涉及到具体的函数,而我们需要事先知道函数表达式,才能够求出来。
故而这里是以书上的一道例题来写
例题以及书上结果如下:
这里我也并没有按照流程图来写(不过大同小异),而是按照表达式来写
流程图和表达式如下
代码如下:
# coding=gbk;
#因为使用复化辛普生公式会涉及到函数的具体形式
# 所以这里我就暂且令 f(x)=sin(x)/x
import math;
def compute_fx(temp): #用来计算函数值
if temp==0:
return 1.0;
return math.sin(temp)/temp;
def fuhua_simpson(a1,b1,h1,n1): #复化辛普生
S=compute_fx(b1)-compute_fx(a1);
account=0;
x=a1;
while account<n:
S+=4*compute_fx(x+h1/2)+2*compute_fx(x);
x+=h;
account+=1;
return S;
list_temp=input("请分别输入积分得上下限以及想要将其几等分:").split(" ");
a=float(list_temp[0]);
b=float(list_temp[1]);
n=float(list_temp[2]);
h=(b-a)/n; #h是步长
result=fuhua_simpson(a, b, h, n);
result=result*h/6;
print(result);
运行结果:
遇事不决,可问春风