温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
数值
分析
实验
课题
作业
75
吴昊
昆明理工大学工科研究生
《数值分析》上机实验课题
科目: 数值分析
老师: 胡杰
专业: 材料物理与化学
学号: 20182130015
姓名: 王杰
实验内容:
1.题目:
一、问题提出
选用复合梯形公式,复合Simpson公式,Romberg算法,计算
(1) I =
(2) I =
(3) I =
(4) I =
二、要求
1、编制数值积分算法的程序;
2、分别用两种算法计算同一个积分,并比较其结果;
3、分别取不同步长,试比较计算结果(如n = 10, 20等);
4、﹡给定精度要求ε,试用变步长算法,确定最佳步长﹡。
三、目的和意义
1、深刻认识数值积分法的意义;
2、明确数值积分精度与步长的关系;
3、根据定积分的计算方法,可以考虑二重积分的计算问题。
2.作业环境(包括选用的程序语言、运行环境)
Windows XP 、Microsoft Visual C++ 6.0
3.数学(理论背景)描述
1、数值积分的必要性。
实际问题的计算中常常会遇到积分问题。有些数值方法,如微分方程和积分方程的求解,也都和积分计算相关。依据人们所熟知的微积分基本定理,对与积分只要找到被积函数的原函数,便有牛顿-莱布尼兹公式:。但实际上使用这种求积往往是有困难的,因为大量的被积函数,诸如: 等,找不到用初等函数表示的原函数。
2、数值积分的基本思想。
积分中值定理告诉我们,积分区间内存在一点,成立,就是说,底为而高为的巨形面积恰等于所求曲边梯形的面积。问题在于点的具体位置一般是不知道的,因而难以准确计算出的值。我们将称为区间上的平均高度。这样,只要对平均高度提供一种算法,相应地便获得一种数值求积方法。如果我们用两端点的“高度” 和的算术平均作为平均高度的近似值,这样导出的求积公式,这便是我们熟悉的梯形公式。
更一般地,我们可以在区间上适当的选取某些节点,然后用加权平均得到平均高度的近似值,这样构造出来的求积公式具有下列形式:。这类数值求积方法通常称为机械求积,其特点是将积分求值问题归结为函数值的计算。
4.数值计算公式
复化梯形公式:
复化Simpson公式:
5.程序结构(程序中的函数调用关系图
6.算法程序流程图
函数fun_1中的for循环的流程图如下所示:
7.实验数据和实验结果(打印或用屏幕图形拷屏表示,可加为附页)
源程序:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
//求解第一个方程
void fun_1(double n,double h,double inc_a[],double inc_b[])
{
int i=0;
double d=0, com_tra, com_Sim, mid_sum=0, edge_sum=0;
for(i=0;i<n;i++)
{
d=sin(inc_b[i]);
mid_sum+=sqrt(4-d*d);
if(i!=0)
edge_sum+=sqrt(4-sin(inc_a[i])*sin(inc_a[i]));
}
d=sin(0.25);
com_tra=(h/2)*(2+2*edge_sum+sqrt(4-d*d));
com_Sim=(h/6)*(2+4*mid_sum+2*edge_sum+sqrt(4-d*d));
cout<<setiosflags(ios::fixed)<<setprecision(7)
<<"\n方程式1的复化梯形解为:"<<com_tra<<endl;
cout<<"方程式1的复化Simpson解为:"<<com_Sim<<endl;
}
//求解第二个方程
void fun_2(double n,double h,double inc_c[],double inc_d[])
{
int i=0;
double com_tra, com_Sim, mid_sum=0, edge_sum=0;
for(i=0;i<n;i++)
{
mid_sum+=sin(inc_d[i])/inc_d[i];
if(i!=0)
edge_sum+=sin(inc_c[i])/inc_c[i];
}
com_tra=(h/2)*(1+2*edge_sum+sin(1));
com_Sim=(h/6)*(1+4*mid_sum+2*edge_sum+sin(1));
cout<<"\n方程式2的复化梯形解为:"<<com_tra<<endl;
cout<<"方程式2的复化Simpson解为:"<<com_Sim<<endl;
}
//求解第三个方程
void fun_3(double n,double h,double inc_c[],double inc_d[])
{
int i=0;
double com_tra, com_Sim, mid_sum=0, edge_sum=0;
for(i=0;i<n;i++)
{
mid_sum+=exp(inc_d[i])/(4+inc_d[i]*inc_d[i]);
if(i!=0)
edge_sum+=exp(inc_c[i])/(4+inc_c[i]*inc_c[i]);
}
com_tra=(h/2)*(0.25+2*edge_sum+exp(1.0)/5);
com_Sim=(h/6)*(0.25+4*mid_sum+2*edge_sum+exp(1.0)/5);
cout<<"\n方程式3的复化梯形解为:"<<com_tra<<endl;
cout<<"方程式3的复化Simpson解为:"<<com_Sim<<endl;
}
//求解第四个方程
void fun_4(double n,double h,double inc_c[],double inc_d[])
{
int i=0;
double d=0, com_tra, com_Sim, mid_sum=0, edge_sum=0;
for(i=0;i<n;i++)
{
d=log(1+inc_c[i]);
mid_sum+=d/(1+inc_c[i]*inc_c[i]);
if(i!=0)
edge_sum+=log(1+inc_d[i])/(1+inc_d[i]*inc_d[i]);
}
com_tra=(h/2)*(2*edge_sum+log(2)/2);
com_Sim=(h/6)*(4*mid_sum+2*edge_sum+log(2)/2);
cout<<"\n方程式4的复化梯形解为:"<<com_tra<<endl;
cout<<"方程式4的复化Simpson解为:"<<com_Sim<<endl;
}
void main()
{
int i;
double n,h1,h2;
double inc_1[51]={0.0}, inc_2[50]={0.0},inc_3[51]={0.0},inc_4[50]={0.0};
cout<<"输入n的值( n<=50 ,当 n<0 时退出!):n= ";
cin>>n;
while(n>0)
{
h1=0.25/n; h2=1/n;
for(i=1;i<=n;i++)
{
inc_1[i]=i*h1;
inc_2[i-1]=(0.5)*(inc_1[i-1]+inc_1[i]);
}
for(i=1;i<=n;i++)
{
inc_3[i]=i*h2;
inc_4[i-1]=(0.5)*(inc_3[i-1]+inc_3[i]);
}
fun_1(n,h1,inc_1,inc_2);
fun_2(n,h2,inc_3,inc_4);
fun_3(n,h2,inc_3,inc_4);
fun_4(n,h2,inc_3,inc_4);
cout<<"\n\n输入n的值( n<=50 ,当 n<0 时退出!):n= ";
cin>>n;
}
cout<<"n<0 ! END!!!"<<endl;}
运行结果:
n=10:
n=20:
n=30:
n=40:
n=50:
n=-1(负数):
8.讨论(包括题目要求的讨论和方法的适用性讨论)
1、数值积分的工程现实意义。
在工程实践中,使用到的函数,往往都是难以找出原函数,或者根本是经验函数,所以积分过程显的十分困难,现在利用计算机程序语言可以轻松的获得足够代数精度要求的工程数据,对降低工程设计难度和保证工程运行和安全具有重要的意义。
2、数值积分计算的实现和结果描述。
通过对比4组的计算结果,我们发现,在计算定积分(1)的时候复化梯形公式计算的数值是逐渐增大的,而复化Simpson公式计算结果的数值没有发生变化,而且,n=40时梯形公式计算的结果接近复化Simpson公式的计算结果,我们认为Simpson公式的计算结果更为精确,而且n的数值越大,梯形公式的精度越高。定积分(2)的运算结果变化规律同(1)。定积分(3)的梯形公式计算结果于(1)(2)相同,但是复化Simpson公式计算结果当n=10是的数值与n=20,30,40时的结果不同,于是我们能够看出,复化Simpson公式计算结果也是随着n值的增加更为精确了。定积分(4)的复化梯形公式计算结果同上,但是复化Simpson公式计算结果是越来越小的,说明了复化Simpson公式计算结果也是随着n值的增加更为精确,但是由于并没有得到几次相同的数值,我们认为对于定积分(4)复化Simpson公式计算结果是不稳定的。
3、公式适用性。
复化Simpson公式对于定积分1、2、3是适用的,计算的收敛速度都是比较快的,而且精度高与复化梯形公式,但对于定积分4复化Simpson公式也是不适用的。对于复化梯形公式和复化Simpson公式计算结果的差异,我们做了如下的解释:复化梯形公式仅对一次多项式精确成立,收敛速度是;而复化Simpson公式对所有次数不超过3的多项式精确成立,收敛速度是。所以一般来说Simpson公式要比梯形公式好。