东北大学数值分析实验报告

进一步改进Gauss-Seidel,并且比Jacobi,Gauss-Seidel方法收敛速度快,改变松弛因子的取值范围来可以得到Jacobi,Gauss-Seidel方法.

课题四 数值积分

一、问题提出

选用复合梯形公式,复合Simpson公式,Romberg算法,计算

14(1) I =

1?0? 4?sin2xdx ?I?1.5343916?f(0)?1, I?0.9460831?

(2) I =

sinxdx?x01ex(3) I = ?dx 204?x(4) I =

二、要求

1、 编制数值积分算法的程序;

2、 分别用两种算法计算同一个积分,并比较其结果;

3、 分别取不同步长h?? b?a ?/n,试比较计算结果(如n = 10, 20等); 4、 给定精度要求?,试用变步长算法,确定最佳步长。 三、目的和意义

1、 深刻认识数值积分法的意义; 2、 明确数值积分精度与步长的关系;

根据定积分的计算方法,可以考虑二重积分的计算问题。 四.程序及流程图: 计算函数

ln?1?x?dx 2?01?x1sinx x

1,复化simpson:

#include #include void main() {

double a=0,b=1;

int n=10; //或 20 double h=(b-a)/n; double f0,f1,f2; f0=1;

f0+=sin(b)/b; f1=0;f2=0;

for(int j=1;j<=n-1;j++) {

double x=a+j*h; if(j/2==(j+1)/2) f2=f2+sin(x)/x; else f1=f1+sin(x)/x; }

double s=h*(f0+2*f2+4*f1)/3; printf(\}

2,Romberg法:

#include #include

double rombf(double x) {

double y; if(x==0) y=1;

else y=(sin(x)/x); return(y); }

double romb(double a,double b,double eps,double(*f)(double)) {

int m,n,i,k;

double y[10],h,ep,p,x,s, q; h=b-a;

y[0]=h*(f(a)+f(b))/2.0; m=1; n=1;

ep=eps+1.0;

while ((ep>=eps)&&(m<=9)) {

p=0.0;

for (i=0;i<=n-1;i++) {

x=a+(i+0.5)*h;

p=p+f(x); }

p=(y[0]+h*p)/2.0; s=1.0;

for (k=1;k<=m;k++) {

s=4.0*s;

q=(s*p-y[k-1])/(s-1.0); y[k-1]=p; p=q; }

ep=fabs(q-y[m-1]); m=m+1; y[m-1]=q; n=n+n; h=h/2.0; }

return(q); }

void main() {

double a=0.0,b=1.0,esp=0.000001,t,rombf(double); t=romb(a,b,esp,rombf);

printf(\计算法:\\n\ printf(\ printf(\}

五。运行结果:

Simpson n=10

n=20

Romberg

四、程序运行结果讨论和分析

复化求积公式能提高精度,但需要选取合适的步长,步长取得太大难以保证精度,步长小有容易导致计算量大大增加。本题对于Simpson公式法步长为20时较10时精度高,能够满足精度要求。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4