变步长梯形求积法计算定积分
1.原理:
变步长求积法的主要思想是利用若干小梯形的面积代替原方程的积分,当精度达不到要求时,可以通过增加点数对已有的区间再次划分,达到所需精度时即可;其中由于新的式子中有原来n点中的部分项,故可以省略一些计算,符合了计算机计算存储的思想。
主要公式:T2n=T n/2+(h/2)*Σf(x k+;
2.C++语言实现方式:
通过每次的T n值和新增的函数值点计算T2n,再通过判断|T n-T2n|的大小来判断是否达到精度要求。
3.源程序如下:
#include""
#include""
double f(double x)//预先输入的待积分函数
{
double s;
s=log(x*x);
return(s);
}
double ffts(double a,double b,double eps)
{
int n,k;
double fa,fb,h,t1,p,s,x,t;
fa=f(a);
fb=f(b);
n=1;
h=b-a;
t1=h*(fa+fb)/2;
p=eps+1;
while(p>=eps)
{
s=0;
for(k=0;k<=n-1;k++)
{
x=a+(k+*h;
s=s+f(x);
}
t=t1/2+h*s/2;
p=fabs(t1-t);
cout<<"步长n为:"<<n<<"时的"<<"Tn="<<t1<<'\t'<<"T2n="<<t<<'\t'<<"误差变化:"<<p<<endl;
t1=t;
n=n*2;
h=h/2;
}
return(t);
}
void main()
{
double result,a,b,eps;
cout<<"需要求解的积分式为f(x)=log(x^2)"<<endl;
cout<<"输入边界值a="<<'\t';
cin>>a;
cout<<"输入边界值b="<<'\t';
cin>>b;
cout<<"输入误差限"<<'\t';
cin>>eps;
result=ffts(a,b,eps);
cout<<"经过变步长梯形求积法得方程结果为:"<<result<<endl;
}
4.程序运行结果:
根据程序提示依次输入积分上限和积分下限,然后输入误差限;本程序需要预先在程序中输入需要积分方程的表达式。
程序运行的结果如下图所示:
5.实验小结:
通过本次实验,我学会了变步长梯形求积法的实现方式。
其本质在于通过增加函数值点来获得精度的提高。
而定积分的实质就是面积的计算,这样就可以利用若干小梯形来代替原来的函数。
但缺点是函数必须是符号单一的,否则无法获得准确的积分值。
同样,本次实验用到的积分式必须预先给定。