复合梯形公式和辛普森公式 下载本文

一 、实验目的

掌握复合辛普森求积公式的运用,能够用复合辛普森公式对函数进行近似 求值

二 、实验要求

对于函数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 #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,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;