一.实验题目
数值积分
二.实验目的
学会使用数值积分的方法
三.实验软件
VC++6.0
四.流程图
开 始 float p,q float H[1] int m 输入并储存积分上限及积分下限 输入n节点 q=(log(n-1))/(log(2)) m=int(q+0.5) 调用longbig函数 调用trapezia函数 输出积分结果 结 束
五.源程序[NextPage]
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
float x[100];
float f[100];
float a,b;
int n;
void trapezia(float y,float *S)
{ int i,t;
t=(b-a)/y;
for(i=0;i<=t;i++)
x[i]=a+y*i;
for(i=0;i<=t;i++)
{
f[i]=sin(x[i])/x[i];
if(x[i]==0)
f[i]=1;
}
(*S)=y*(f[0]+f[t])/2;
for(i=1;i<t;i++)
(*S)+=(f[i]*y);
}
void longbig(int l,float *U)
{ float h;
float *S;
float T[20],R[20];
S=R;
int i,j;
h=b-a;
for(i=0;i<=l;i++)
{
trapezia(h/pow(2,i),S);
T[i]=*S;
}
for(j=l;j>0;j--)
for(i=0;i<j;i++)
T[i]=T[i+1]+((T[i+1]-T[i])/(pow(4,(l-j+1))-1));
(*U)=T[0];
}
void main()
{ float p,q;
float H[1];
int m;
printf("请输入积分上限\n");
scanf("%f",&b);
printf("请输入积分下限\n");
scanf("%f",&a);
printf("采用多少节点定步长复化梯形公式?\n");
scanf("%d",&n);
q=(log(n-1))/(log(2));
m=int(q+0.5);
longbig(m,H);
p=H[0];
printf("积分结果为\n");
printf("%f\n",p);
}
结果分析:输入积分上限10,下限1,节点5后得出积分结果0.701155,结果与预期相符。