昆明理工大学数值分析上机报告4

发布时间 : 星期四 文章昆明理工大学数值分析上机报告4更新完毕开始阅读

数值分析实验报告

姓 名:学 号:专 业:材料学学 院:云南省新材料制备与加工重点实验室授课教师:

2006231006

昆明理工大学研究生院

2006.12.18

《数值分析》实验报告

——数值积分问题

问题的提出

在微积分中,积分值是通过原函数的解析式求得的,然而原函数的寻找往往比较困难,许多积分函数甚至找不到用初等函数表示的原函数。为此研究数值积分问题是非常必要的。数值积分的至今普遍应用主要有三种:梯形公式、Simpson公式及其复化形式、Romberg算法。本实验只要选用复合梯形公式、复合Simpson公式及Romberg算法对特定某个积分,例如:

ln(1?x)?01?x2进行数值计算,比较分析两种算法的结果,理解数值积分法的意义,明

1确数值积分精度和步长之间的关系等。

一、 目的和意义

1、 深刻理解数值积分的意义:

在微积分中,积分值是通过原函数的解析式求得的,然而原函数的寻找往往比较困难,许多积分函数甚至找不到用初等函数表示的原函数;另外,当f(x)是由测量或者数值计算给出的一张数据表时,牛—莱公式也不能直接运用,为此研究数值积分问题是非常必要的。 2、 明确数值积分的精度与步长的关系:

复化的求积方法对提高精度是行之有效的,但是在使用求积之前必须给出合适的步长,步长取得太大精度难以保证,步长太小则会导致计算量的增加。

3、 根据定积分的计算方法,可以考虑二重积分的计算问题:

在微积分中,二重积分的计算是用化为累次积分的方法进行的。

计算二重数值积分也同样采用累次积分的计算过程。利用二重积分的复化梯形公式设计如下:

????abdbdacf(x,y)dydxa,b,c,d为常数,f在D上连续。将它变为化累次积分

bddb???f(x,y)dydx???f(x,y)dydx?f(x,y)dx????dy?c??aa??c??c 1

h?b?ad?c,k?做等距节点,x轴,y轴分别有:mn

先计算

?dcf(x,y)dy,将x作为常数,有

?dnf(x,y)dy?k??1?11??f(x,y)?f(x,y?

c?20?j)?f(x,yn)j?12??再将y作为常数,在x方向,计算上式的每一项的积分

1bm?2?af(x,yn)dx?h?112??2f(x0,yn)??f(xi,yn)?1f(x?m,yn)?i?12?1bm?2?af(x,yh?111?0)dx?2??2f(x0,y0)??f(xi,y0)?f(xm,y0)?i?12??bn?1n?1ba?f(x,yj)dx?j?1?1?af(x,yj)dxj??n?1 ?h??1m?1f(x?1f(x?0,yj)??f(xi,yj)m,yj)j?1?2i?12??n?1 ?h???1f(x,y1?n?1m?10j)?f(xm,yj)??h??f(xi,yjj?1?22?)j?1i?1?b?d1acf(x,y)dydx?hk{4?f(x0,y0)?f(x0,yn)?f(xm,y0)?f(xm,y0)?m?1n?1n?1 ?1?2?m?f(x(x????1i,y0)?0,yj)?i?1?f(xi,yn)?i?1?fj?1?f(xm,yj)?j?1??n?1m?1n?1m?1 ???f(xi,yj)}?hkj?1i?1??ci,jf(xi,yj)j?1i?1系数,在积分区域的四个角点为1/4,4个边界为1/2,内部节点为1。

二、计算公式

关于复化梯形、复化Simpson公式及Romberg公式在以下给出。 1、 公式 1) 复化梯形公式

nTh[f(x(xhn?1n??k?1)?fk)]?[f(a)?2k?122?f(xk)?f(b)]

k?12) 复化Simpson公式

2

n?1n?1hhSn??[f(xk?1)?4f(x1)?f(xk)]?[f(a)?4?f(x1)?2?f(xk)?f(b)]

k?k?6k?16k?1k?122n为了便于编程可写成

b?af(a)?f(b)nSn?{??[2f(x1)?f(xk)]}

k?3n2k?123)Romberg公式

Romberg积分法是通过用余项公式对梯形法则的误差与步长、Simpson公式误差与步长等进行比较,逐步研究推导而得出。本程序用Romberg数值积分公式计算定积分使相邻两次的近似值的绝对值或者相对误差小于给定的误差限?,I??f(x)dx的近似值,

abRomberg公式:

Rn?(64/63)C2n?(1/63)Cn

三、结构程序设计

//复化梯形和复化Simpson算法 #include #include

double SIMP1(double,double,int); double FUTX(double,double,int); double Func(double); void main() { // }

3

double a1,b1,x; int n1; a1=0.0; b1=1.0;

n1=20;//可设定具体的分段数n=10或者20 printf(\printf(\printf(\

联系合同范文客服:xxxxx#qq.com(#替换为@)