一 、实验目的
掌握复合辛普森求积公式的运用,能够用复合辛普森公式对函数进行近似 求值
二 、实验要求
对于函数f(x)?普森公式计算积分
1sinx,给出n?8时的函数表,试用复合梯形公式及复合辛x I??sinxdx x0三、实验内容
1 复合梯形公式
b?a,k?0,1,???,n,在每个子区n 将区间[a,b]划分为n等份,分点xk?a?kh,h?b间[xk,xk?1]上采用梯形公式?f(x)dx?(k?0,1,???,n?1)ab?a(f(a)?f(b)),则得 2I??f(x)dx??abn?1xk?1k?0xk?hn?1f(x)dx??[f(xk)?f(xk?1)]?Rn(f)
2k?0记
n?1hn?1hTn??[f(xk)?f(xk?1)]?[f(a)?2?f(xk)?f(b)]
2k2k?12 辛普森公式
将区间[a,b]划分为n等份,在每个子区间[xk,xk?1]上采用辛普森公式,若记
xk?1/2?xk?b1h 2n?1xk?1I??f(x)dx??ak?0xk?hn?1f(x)dx??[f(xk)?4f(xk?1/2)?f(xk?1)]?Rn(f)
6k?0 记
hn?1Sn??[f(a)?4f(xk?1/2)?f(xk?1)]
6k?0n?1n?1h =[f(a)?4?f(xk?1/2)?2?f(xk)?f(b)]
6k?0k?1四、实验程序
#include
#include\double fun1(double x) {
double f; if(x==0) f=1; else
f=sin(x)/x; return f; }
fun(double a,double b,double h,double n) {
double x1;
double sum=0.0; int i;
sum+=(fun1(a)+fun1(b)); for(i=1;i<=n-1;i++) { x1=a+i*h; sum+=(2*fun1(x1)); }
sum*=(h/2);
printf(\用复合梯形公式求得的积分为:\\n\ printf(\}
void main() {
double a,b,n; double h; double t;
printf(\请输入积分上限与积分下限:\\n\ scanf(\
printf(\请输入把此区间n等分的n:\\n\ scanf(\ t=b-a; h=t/n;
fun(a,b,h,n);
}
复合辛普森公式程序 #include
double f; if(x==0) f=1; else
f=sin(x)/x; return f; }
fun(double a,double b,double h,double n) {
double x1,x2; double sum=0.0; int i;
sum+=(fun1(a)+fun1(b)); for(i=1;i<=n-1;i++) { x1=a+i*h; sum+=(2*fun1(x1)); }
for(i=0;i<=n-1;i++) { x2=a+i*h+0.5*h; sum+=(4*fun1(x2)); }
sum=sum*(h/6); printf(\}
void main() {
double a,b,n; double h; double t;
printf(\请输入积分上限与积分下限:\\n\ scanf(\
printf(\请输入把此区间n等分的n:\\n\ scanf(\ t=b-a; h=t/n;