数值分析第三次实习报告.docx

上传人:b****6 文档编号:4690311 上传时间:2022-12-07 格式:DOCX 页数:13 大小:161.47KB
下载 相关 举报
数值分析第三次实习报告.docx_第1页
第1页 / 共13页
数值分析第三次实习报告.docx_第2页
第2页 / 共13页
数值分析第三次实习报告.docx_第3页
第3页 / 共13页
数值分析第三次实习报告.docx_第4页
第4页 / 共13页
数值分析第三次实习报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数值分析第三次实习报告.docx

《数值分析第三次实习报告.docx》由会员分享,可在线阅读,更多相关《数值分析第三次实习报告.docx(13页珍藏版)》请在冰豆网上搜索。

数值分析第三次实习报告.docx

数值分析第三次实习报告

 

学生学号

实验课成绩

 

武汉理工大学

学生实验报告书

 

实验课程名称:

数值分析(第三次实习)

开课名称:

计算机科学与技术学院

指导老师姓名:

熊盛武

学生姓名:

学生专业班级:

软件工程0803班

 

2009——2010学年第一学期

一、实习目的:

(1)通过编程计算实践,体会和理解复化梯形公式和复化Simpson公式。

(2)通过编程计算实践,搞清变步长梯形公式的计算流程。

(3)通过编程计算实践,掌握和提高Romberg算法流程的控制技术。

(4)通过各种方法对同一题目的求解,体会各种方法的精度差异。

二、实习步骤:

(1)分别画出复化梯形公式,复化Simpson公式,变步长梯形公式和Romberg公式的算法流程图。

(2)分别用复化梯形公式和复化Simpson公式通过编程计算积分,并分析和比较算法的效率差异和精度差异。

(3)用变步长梯形公式通过编程计算积分,并分析算法精度与二分法次数之间的关系。

(4)用Romberg公式通过编程计算积分,并分析算法精度与二分法次数之间的关系。

三、算法流程图:

(一)复化梯形求算法积流程图

(三)变步长梯形求积算法流程图

(二)复化Simpson求积算法流程图

(四)Romberg公式求积流程图

四、编程计算积分

(一)复化梯形:

(1)复化梯形算法描述

(1)输入求积区间a,b和区间等分数n

(2)计算步长hh=(b-a)/n

(3)对于i=0到i=n-1计算节点函数值f(a+i*h)

(4)计算积分值T=T+2*temp;

Tn=(f(a)+f(b)+T)*h/2;

(5)输出积分值

(2)复化梯形求积程序源代码

#include

#include

doublef(doublet)

{

return1/(1+t*t);

}

usingnamespacestd;

intmain()

{

inti,n;

doubleh,a,b,T,temp,Tn;

cout<<"请输入求积区间:

"<

cin>>a>>b;

cout<<"请输入区间等分数:

"<

cin>>n;

h=(b-a)/n;

temp=0;

T=0;

for(i=1;i

{

temp=f(a+i*h);

T=T+2*temp;

}

Tn=(f(a)+f(b)+T)*h/2;

cout<<"经过复化梯形求积所得积分值T"<

"<

return0;

}

(3)调试过程,实验结果及分析:

1/(x*x)在区间[0,1]上8等分后,程序运行结果如下:

对区间等分后求每个子区间上的积分值,然后将每个子区间的积分值相加,就得到整个积分区间上的积分值,梯形公式具有一次代数精度。

(二)复化Simpson:

(1)复化Simpson算法描述

(1)输入求积区间a,b和区间等分数n

(2)计算步长hh=(b-a)/n

(3)对于i=0到n-1计算节点函数值temp1=f(a+i*h);

temp2=f(a+(i+0.5)*h);S1=S1+2*temp1;S2=S2+4*temp2;

(4)计算积分值Sn=(f(b)-f(a)+S1+S2)*h/6;

(5)输出积分值.

(2)复化Simpson算法程序源代码

#include

#include

doublef(doublet)

{

return1/(1+t*t);

}

usingnamespacestd;

intmain()

{

inti,n;

doubleh,a,b,S1,S2,temp1,temp2,Sn;

cout<<"请输入求积区间:

"<

cin>>a>>b;

cout<<"请输入区间等分数:

"<

cin>>n;

h=(b-a)/n;

temp1=0;

temp2=0;

S1=0;

S2=0;

for(i=0;i

{

temp1=f(a+i*h);

temp2=f(a+(i+0.5)*h);

S1=S1+2*temp1;

S2=S2+4*temp2;

}

Sn=(f(b)-f(a)+S1+S2)*h/6;

cout<<"经过复化Simpson求积所得积分值S"<

"<

return0;

}

(3)调试过程,实验结果及分析:

1/(x*x)在区间[0,1]上8等分后,程序运行结果如下:

复化Simpson求积公式具有三次代数精度,因此在区间和区间等分数相同时,所取得的积分值结果比梯形公式更加精确。

和梯形公式一样都是利用线性组合来计算积分的近似值。

(三)变步长梯形求积:

(1)变步长梯形求积算法描述

(1)输入求积区间a,b和区间等分数n

(2)计算步长hh=(b-a)/n

(3)积分运算Fori=1ton-1;

temp1=f(a+i*h);T0=T0+2*temp1;

(4)输出经过N-1次变步长所得积分值Tn

(5)判断是否等分每个子区间后再求出积分值,是输入1,否输入0

Ifdir=0goto步骤9.

(6)等分后积分N++;n=2*n;h=(b-a)/n;temp=0;Fori=1ton/2

temp2=f(a+(2*i-1)*h);

temp=temp+temp2;

T[n-1]=T[n/2-1]/2+temp*h;Tn=T[n-1

(7)输出经过N-1次变步长所得积分值Tn

(8)判断是否等分每个子区间后再求出积分值,是输入1,否输入0

Ifdir=1goto步骤6.

(9)输出经过N-1次变步长所得积分值Tn

(10)结束。

(2)变步长梯形求积程序源代码

#include

#include

doublef(doublet)

{

return1/(1+t*t);

}

usingnamespacestd;

intmain()

{

inti,n,N,dir;

doubleh,a,b,T0,temp,temp1,temp2,temp3,T[180];

cout<<"请输入求积区间:

"<

cin>>a>>b;

cout<<"请输入区间等分数:

"<

cin>>n;

h=(b-a)/n;

temp=0;

temp1=0;

temp2=0;

temp3=0;

T0=0;

N=1;

for(i=1;i

{

temp1=f(a+i*h);

T0=T0+2*temp1;

}

T[n-1]=(f(a)+f(b)+T0)*h/2;

cout<<"经过"<

"<

loop:

if(N>1)

{temp=0;

for(i=1;i<(n/2+1);i++)

{

temp2=f(a+(2*i-1)*h);

temp=temp+temp2;

}

T[n-1]=T[n/2-1]/2+temp*h;

cout<<"经过"<

"<

}

cout<<"是否需要继续二等分每个子区间,如果是,请输入:

1如果否,请输入:

0"<

cin>>dir;

while(dir>0)

{

N++;

n=2*n;

h=(b-a)/n;

gotoloop;

}

if(dir<1)

cout<<"经过"<

"<

return0;

}

(3)调试过程,实验结果及分析:

1/(x*x)在区间[0,1]上2等分后,程序运行结果如下

变步长梯形求积中对于n等分后Tn不满足精度要求可以等分每个子区间来求T2n的值此时只需计算新增节点的函数值,因而计算量变小了,程序运行速度也提高了。

(四)Romberg:

(1)Romberg公式求积算法描述

(1)输入求积区间a,b和区间等分数n

(2)计算步长hh=(b-a)/n

(3)计算Tn

(4)利用Tn分别求出T2n,T4n,T8n

(5)利用Tn,T2n,T4n,T8n分别求出Sn,S2n,S4n.

(6)利用Sn,S2n,S4n分别求出Cn,C2n..

(7)利用Cn,C2n求出Rn.

(2)Romberg公式求积程序源代码

#include

#include

doublef(doublet)

{

return1/(1+t*t);

}

usingnamespacestd;

intmain()

{

inti,j,n;

doubleh,a,b,T0,temp,temp1,temp2,temp3,T[180],S[180],C[180],R[180];

cout<<"请输入求积区间:

"<

cin>>a>>b;

cout<<"请输入区间等分数:

"<

cin>>n;

h=(b-a)/n;

temp=0;

temp1=0;

temp2=0;

temp3=0;

T0=0;

for(i=1;i

{

temp1=f(a+i*h);

T0=T0+2*temp1;

}

T[n-1]=(f(a)+f(b)+T0)*h/2;

for(j=0;j<3;j++)

{

temp=0;

n=2*n;

h=(b-a)/n;

for(i=1;i<(n/2+1);i++)

{

temp2=f(a+(2*i-1)*h);

temp=temp+temp2;

}

T[n-1]=T[n/2-1]/2+temp*h;

}

S[n/8-1]=(4*T[n/4-1]-T[n/8-1])/3;

S[n/4-1]=(4*T[n/2-1]-T[n/4-1])/3;

S[n/2-1]=(4*T[n-1]-T[n/2-1])/3;

C[n/4-1]=(16*S[n/2-1]-S[n/4-1])/15;

C[n/8-1]=(16*S[n/4-1]-S[n/8-1])/15;

R[n/8-1]=(64*C[n/4-1]-C[n/8-1])/63;

cout<<"经过Romberg公式所得积分值R"<

return0;

}

(3)调试过程,实验结果及分析:

1/(x*x)在区间[0,1]上2等分后,程序运行结果如下:

Romberg积分公式在积分结果中加入了事后误差估计值进行补偿,因而积分计算的收敛加速,并且仅采用梯形求积法不断折半步长,就可以逐步加工出Sn,S2n,S4n,Cn,C2n,Rn等精度较高的积分结果。

第三次试验小结

1、通过试验进一步学习了积分和微分的数值计算方法,其基本原理主要是逼近论,即设法构造某个简单函数近似表示,然后对求积或求导得到的积分或导数的近似值。

基于差值原理,推导出数值积分和数值微分的基本公式。

2、插值型求积公式有公式和公式两类。

前者取等距节点,算法简单而且容易编制程序。

但是,由于其收敛性和稳定性都没有保证,所以,常用的低阶复化公式。

3、公式不但具有最高代数精度,而且收敛性和稳定性都有保证,因此是高精度的求积公式。

公式还可以通过选择恰当的权函数,用于计算奇异积分和广义积分,也可以是一些复杂的积分计算简化。

公式的主要缺点是节点与系数无规律。

所以高阶公式不便于上机使用。

实际应用中可以把低阶公式进行复化。

4、算法是在积分区间逐次二分的过程中,通过对梯形值进行外推加速处理,从而获得高精度的积分近似值。

它具有自动选取步长的特点,便于在计算机上使用。

外推的思想在数值微分,微分方程数值解等方法中也可以得到应用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1