- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
积分问题-数值分析上机实验报告
数值分析上机报告
姓 名:
学 号:
专 业:
学 院:
授课教师:胡 杰
昆明理工大学
2012.01.01
《数值分析》实验报告
——数值积分问题
一、问题的提出
在微积分中,积分值是通过原函数的解析式求得的,即依据人们所熟知的微积分基本定理,对于积分:,只要找到被积函数f(x)的原函数F (x),便有下列牛顿——莱布尼茨(Newton-Leibniz)公式:。然而有的原函数寻找往往比较困难,许多积分函数甚至找不到用初等函数表示的原函数。为此研究数值积分问题是非常必要的。数值积分的至今普遍应用主要有五种:梯形公式、Simpson公式及其两种算法的复化公式、高斯求积公式。本实验只要选用复合Simpson公式及高斯求积公式对特定某个积分,例如:,D={0x1,0y1}进行数值计算,比较分析两种算法的结果,理解数值积分法的意义,明确数值积分精度和步长之间的关系等。
二、目的和意义
深刻理解数值积分的意义:
在微积分中,积分值是通过原函数的解析式求得的,然而原函数的寻找往往比较困难,许多积分函数甚至找不到用初等函数表示的原函数;另外,当是由测量或者数值计算给出的一张数据表时,牛顿—莱布尼茨公式也不能直接运用,为此研究数值积分问题是非常必要的。
明确数值积分的精度与步长的关系:
复化的求积方法对提高精度是行之有效的,但是在使用求积之前必须给出合适的步长,并且高斯求积公式具有比复化求积公式更高的精度,步长取得太大精度难以保证,步长太小则会导致计算量的增加。
根据定积分的计算方法,可以考虑二重积分的计算问题:
在微积分中,二重积分的计算是用化为累次积分的方法进行的。
计算二重数值积分也同样采用累次积分的计算过程。利用二重积分的复化梯形公式设计如下:
a,b,c,d为常数,f在D上连续。将它变为化累次积分
做等距节点,x轴,y轴分别有:
先计算,将x作为常数,有
再将y作为常数,在x方向,计算上式的每一项的积分
系数,在积分区域的四个角点为1/4,4个边界为1/2,内部节点为1。
三、计算公式
关于复化辛普森(Simpson)公式及高斯求积公式在以下给出。
复化辛普森(Simpson)公式
为了便于编程可写成
2)高斯求积公式
四、结构程序设计
/复化Simpson算法
#include stdio.h
#include math.h
double SIMP1(double,double,int);
double FUTX(double,double,int);
double Func(double);
void main()
{
double a1,b1,x;
int n1;
a1=0.0;
b1=1.0;
n1=20;//可设定具体的分段数n=10或者20
printf(%.10f\n,SIMP1(a1,b1,n1));
printf(%.10f\n,FUTX(a1,b1,n1));
// printf(\ntime=%f\n,Atime/60);
}
double Func(double x)
{
return(log(1+x)/(1+x*x));
}
double SIMP1(double a1,double b1,int n1)
{
int i;
double h,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));
}
double FUTX(double a1,double b1,int n1)
{
int i;
double t,h;
h=(b1-a1)/n1;
t=Func(a1)+Func(b1);
for (i=1;i=n1;i++)
t+=2*Func(a1+i*h);
return((t*h/2));
}
//高斯求积公式
#include stdio.h
#include malloc.h
#include math.h
double ROMBG(double,double,double,double,double,double);
double Func(double);
void main()
{
double a,b,eps,al,ma,mi;
// int n1;
a=0.0;
b=1.0;
eps=1e-5;
al=10;
ma=10;
mi=3;
文档评论(0)