求函数在给定区间上的定积分,在微积分学中已给出了许多计算方法,但是,在实际问题计算中,往往仅给出函数在一些离散点的值,它的解析表达式没有明显的给出,或者,虽然给出解析表达式,但却很难求得其原函数。这时我们可以通过数值方法求出函数积分的近似值.
在用近似值代替真实值时,遇到的问题就是近似值的代数精度是否足够。当代数精度不足够时,很显然提高插值函数的次数是一种方法,但是考虑到数值计算的稳定性,当次数过高时,会出现龙格现象,用增大n的方法来提高数值积代数精度是不可取的。因此,提出类似于分段插值,为了减少数值积分的误差,可以把积分区间分成若干个小区间,在每个小区间上采用低阶数值积分公式,然后把这些小区间上的数值积分结果加起来作为函数在整个区间上的近似值,这个就是复化数值积分的思想.
本实验针对在每个小区间上利用梯型积分公式,即阶数为1,进行实验。
关键词:龙格现象 复化数值积分 代数精度
1、实验目的
1) 2) 3) 4)
通过本次实验体会并学习复化梯形积分公式的优点。 寻找复化梯形积分公式的不足,尝试着对其进行改进。
通过对复化梯形积分公式进行编程实现,提高自己的编程能力。 用实验报告的形式展现,提高自己在写论文方面的能力。
2、算法流程
根据数学知识,我们知道积分区间可划分,且不改变积分值,即如下所示:
针对上式,在每一个小区间上利用梯型积分公式有
根据以上两式可以得到
并称其为复化梯形积分公式。一般记
称作n+1点复化梯形积分公式
3、算法实例
用复化梯形积分公式计算积分
1
解:复化梯形积分公式就是将区间
n等分, h=1/n,具体计算时给n
取值并带如公式就可以得到结果。具体程序如下:
#include \"stdafx。h” #include 〈math。h> #include 〈iostream> using namespace std; const int num(1000); void main() {
double a=0; double b=0; double h=0; int n=0; int i=0;
double Sn=0;
double x[num]={0}; double y[num]={0};
cout〈<”请输入积分上下限和等分数”〈〈endl; cout〈<”请输入积分下限a=”; cin>>a;
cout〈<\"请输入积分上限b=”; cin〉>b;
cout〈<”请输入等分数n=”; cin>>n;
h=(b—a)/n;
for(i=0;i y[i]=4/(1+x[i]*x[i]); } for(i=1;i〈n;i++) { 2 Sn=Sn+2*y[i]; } Sn=h/2*(Sn+y[0]+y[n]); cout<<”积分结果为:Sn=\"<〈Sn〈〈endl; } 运行结果: 4、对结果进行分析 通过用编程实现对上例的求解,可以看出结果较为准确,但是由于复化梯形积分公式原理是用一次曲线去逼近真实值,所以本身存在误差,而且当等分数较小时,误差较大。再有就是由于在计算机上计算,会存在计算误差。因此要提高逼近效果只能提高等分数。 5、参考文献 [1] 秦新强.数值逼近。西安:西安理工大学出版社,2010 3 因篇幅问题不能全部显示,请点此查看更多更全内容