积分问题 数值分析上机实验报告Word格式.docx
《积分问题 数值分析上机实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《积分问题 数值分析上机实验报告Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
y<
1}进行数值计算,比较分析两种算法的结果,理解数值积分法的意义,明确数值积分精度和步长之间的关系等。
二、目的和意义
1、深刻理解数值积分的意义:
在微积分中,积分值是通过原函数的解析式求得的,然而原函数的寻找往往比较困难,许多积分函数甚至找不到用初等函数表示的原函数;
另外,当是由测量或者数值计算给出的一张数据表时,牛顿—莱布尼茨公式也不能直接运用,为此研究数值积分问题是非常必要的。
2、明确数值积分的精度与步长的关系:
复化的求积方法对提高精度是行之有效的,但是在使用求积之前必须给出合适的步长,并且高斯求积公式具有比复化求积公式更高的精度,步长取得太大精度难以保证,步长太小则会导致计算量的增加。
3、根据定积分的计算方法,可以考虑二重积分的计算问题:
在微积分中,二重积分的计算是用化为累次积分的方法进行的。
计算二重数值积分也同样采用累次积分的计算过程。
利用二重积分的复化梯形公式设计如下:
a,b,c,d为常数,f在D上连续。
将它变为化累次积分
做等距节点,x轴,y轴分别有:
先计算,将x作为常数,有
再将y作为常数,在x方向,计算上式的每一项的积分
系数,在积分区域的四个角点为1/4,4个边界为1/2,内部节点为1。
三、计算公式
关于复化辛普森(Simpson)公式及高斯求积公式在以下给出。
1)复化辛普森(Simpson)公式
为了便于编程可写成
2)高斯求积公式
四、结构程序设计
/复化Simpson算法
#include<
stdio.h>
math.h>
doubleSIMP1(double,double,int);
doubleFUTX(double,double,int);
doubleFunc(double);
voidmain()
{
doublea1,b1,x;
intn1;
a1=0.0;
b1=1.0;
n1=20;
//可设定具体的分段数n=10或者20
printf("
%.10f\n"
SIMP1(a1,b1,n1));
FUTX(a1,b1,n1));
//printf("
\ntime=%f\n"
Atime/60);
}
doubleFunc(doublex)
return(log(1+x)/(1+x*x));
doubleSIMP1(doublea1,doubleb1,intn1)
inti;
doubleh,s;
h=(b1-a1)/(2*n1);
s=0.5*(Func(a1)-Func(b1));
for(i=1;
i<
=n1;
i++)
s+=2*Func(a1+(2*i-1)*h)+Func(a1+2*i*h);
return((b1-a1)*s/(3*n1));
doubleFUTX(doublea1,doubleb1,intn1)
doublet,h;
h=(b1-a1)/n1;
t=Func(a1)+Func(b1);
for(i=1;
t+=2*Func(a1+i*h);
return((t*h/2));
//高斯求积公式
malloc.h>
doubleROMBG(double,double,double,double,double,double);
doublea,b,eps,al,ma,mi;
//intn1;
a=0.0;
b=1.0;
eps=1e-5;
al=10;
ma=10;
mi=3;
ROMBG(a,b,eps,al,ma,mi));
doubleROMBG(doublea,doubleb,doubleeps,doubleal,doublema,doublemi)
intj,q;
doublel,h,r,s,k,l0,m,n;
double*t;
t=(double*)calloc(11,sizeof(double));
if(t==NULL)
exit
(1);
l=b-a;
h=l;
t[0]=(Func(a)+Func(b))*l*0.5;
for(q=0;
q<
=ma-1;
q++)
{
r=h;
h*=0.5;
k=h;
s=Func(a+k);
do
{
k+=r;
if(fabs(k)<
fabs
(1))
s+=Func(a+k);
}while(fabs(k)<
fabs
(1));
t[q+1]=t[q]*0.5+h*s;
l0=1;
for(j=q;
j>
=0;
j--)
l0*=0.25;
m=(t[j+1]-t[j])/(1-l0);
t[j]+=m;
}
n=t[0];
if(fabs(n)>
=al)
m/=n;
if(fabs(m)<
eps&
&
q>
mi)
r=t[0];
free(t);
return(r);
}
r=t[0];
free(t);
return(r);
五、结果讨论和分析
结果分析可得到以下结论:
1、两者虽然都需要调用相同的次数,工作量基本相同,但是精度却差别很大,复化Simpson相对较高,故复化Simpson公式是一种精度较高的求积公式;
2、从n的不同设定值,我们可以看出细分求积分区间可以提高该两类算法的计算精度,由于Simpson算法在n=10时就有较高的精度,故对其影响并不是很大。
3、高斯求积公式算法的计算精度明显高于上述算法,它的基本方法就是运用在变步长求积的过程中运用加速公式,将梯形法则的积分值逐步加工成为精度较高的结果,是利用外推法构造出一种计算积分的方法,适用于求积分而很难求出其精确表达式的那些复杂函数。
综上所述,上述三种方法都是数值积分问题行之有效的办法。
复化梯形和复化Simpson必须给出合适的步长;
步长过大精度难保,步长过小计算量增加。
要想事先给出一个合适的步长却是非常困难的。
在实际计算中通常采用变步长的求积方案,即在步长逐次折半(步长二分)的过程中,反复利用复化求积公式进行计算,直到二分前后的两次积分精度近似值相当符合为止。
Simpson在梯形面积近似积分值的基础上,增加中点构造出三点公式,又不断二分思想构造出复化Simpson和变步长Simpson的数值积分。
高斯求积公式算法运用在变步长求积的过程中运用加速公式,采取事后估计法,将梯形法则的积分值逐步加工成为精度较高的结果。
曲线拟合的最小二乘法
一、目的和意义
在科学实验的统计方法研究中,往往要从一组实验数据中,寻找自变量x与因变量y之间的函数关系。
由于观测数据往往不准确,因此不要求经过所有点,而只要求在给定点上误差而只要求所在所有给定点上的误差按某种标准最小。
若记,就是要求向量的范数最小。
如果用最大范数,计算上困难较大,通常采用欧式范数作为误差度量的标准。
的函数类型往往与实验的物理背景以及数据的实际分布有关,它一般含有某些待定参数。
如果是所有待定参数的线性函数,那么相应的问题称为线性最小二乘问题,否则称为非线性最小二乘问题。
最小二乘法还是实验数据参数估计的重要工具。
这是因为这种方法比其他方法更容易理解,即使在其他方法失效的情况下,用最小二乘法还能提供解答,而且从统计学的观点分析,用该方法求得各项估计具有最优统计特征,因此这一方法也是系统识别的重要基础。
线性最小二乘问题可以借助多元微分学知识通过求解法方程组得到解答。
用最小二乘法求拟合曲线时,首先要确定的形式。
这不单纯是数学问题,还与所研究问题的运动规律以及所得观测数据有关;
通常要从问题的运动规律以及给定数据描图,确定的形式,并通过实际计算选出较好的结果。
为了使问题的提法更有一般性,通常把最小二乘法中的都考虑为加权平方和
这里是上的加权函数,它表示不同点处的数据比重不同。
二、计算方法
分)
0510152025303540455055
01.272.162.863.443.874.154.374.514.584.024.64
在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量与时间的拟合曲线。
本题要求我们用对曲线进行拟合,这里故
,
由于,可以利用此式算出拟合曲线的,即
所以求得,,,,误差为
,而均方误差为
下图可见实际测出值与拟合值的差别,下表可见拟合出的每一点的误差以及均方误差。
t
y
拟合值
误差
误差平方
5
1.27
1.20215
-0.06785
0.004603623
10
2.16
2.1662
0.0062
3.844E-05
15
2.86
2.91855
0.05855
0.003428103
20
3.44
3.4856
0.0456
0.00207936
25
3.87
3.89375
0.02375
0.000564063
30
4.15
4.1694
0.0194
0.00037636
35
4.37
4.33895
-0.03105
0.000964102
40
4.51
4.4288
-0.0812
0.00659344
45
4.58
4.46535
-0.11465
0.013144622
50
4.02
4.475
0.455
0.207025
55
4.64
4.48415
-0.15585
0.024289222
均方误差
0.51293892
三、结果讨论与分析
最小二乘法如果想将曲线拟合的比较完美,必须应用适当的模拟曲线,如果模拟曲线选择不够适当,那么用最小二乘法计算完后,会发现拟合曲线误差比较大,均方误差也比较大,而如果拟合曲线选择