数值分析与实验课程设计班级:姓名:学号:08级应用数学《数值分析与实验(实践)》任务书一、设计目的通过《数值分析与实验(实践)》实践环节,掌握本门课程的众多数值解法和原理,并通过编写C语言或matlab程序,掌握各种基本算法在计算机中的具体表达方法,并逐一了解它们的优劣、稳定性以及收敛性。
在熟练掌握C语言或matlab语言编程的基础上,编写算法和稳定性均佳、通用性强、可读性好,输入输出方便的程序,以解决实际中的一些科学计算问题。
二、设计教学内容1、数值方法的稳定性;2、利用牛顿法和割线法程序求出非线性方程的解,并比较它们之间的优劣;3、高斯消去法和列主元高斯消去法求解线性方程组;雅克比法和高斯-赛德尔迭代法解方程组;4、利用Lagrange插值多项式求未知点的近似值;5、利用所给数据进行数据的多项式和可转化成多项式形式的函数拟合;6、编写复化辛卜生公式和龙贝格算法,通过实际计算体会各种方法的精确度;7、利用改进Euler方法和四阶Runge-Kutta方法求解初值问题的微分方程组;8、利用幂法求矩阵按模最大的特征值及对应特征向量;( 8个中选取1个)三、设计时间2011—2012学年第1学期:第16周共计一周教师签名:2011年12月12日前言数值计算方法是一种利用计算机解决数学问题的数值近似解方法,特别是无法用人工过计算器计算的数学问题。
数值计算方法常用于矩阵高次代数方程矩阵特征值与特征向量的数值解法,插值法,线性方程组迭代法,函数逼近,数值积分与微分,常微分方程初值问题数值解等。
作为数学与计算机之间的一条通道,数值计算的应用范围已十分广泛,作为用计算机解决实际问题的纽带,数值算法在求解线性方程组,曲线拟合、数值积分、数值微分,迭代方法、插值法、拟合法、最小二乘法等应用广泛。
数值计算方法是和计算机紧密相连的,现代计算机的出现为大规模的数值计算创造了条件,集中而系统的研究适用于计算机的数值方法是十分必要的。
数值计算方法是在数值计算实践和理论分析的基础上发展起来的。
通过数值计算方法与实验将有助于我们理解和掌握数值计算方法基本理论和相关软件的掌握,熟练求解一些数学模和运算,并提高我们的编程能力来解决实际问题。
摘要随着计算机的迅速发展和广泛应用,在众多的领域内,人们越来越认识到科学计算是科学研究的新方法,当今理学学生更应具备这方面的知识与能力,计算方法作为科学计算的一门主干课程又是我们的必修课,我们要认真学习,数值计算方法不只注重理论分析还要求实验和实践,这样才能使我们更灵活地掌握数值计算方法,所以我们也要认真做好数值分析与实验实践环节。
复化辛卜生公式可以算是公路线行坐标计算的万能公式,不仅对直线、圆曲线都能用一套公式进行计算,而且它的精度可以人为判断。
对于不易直接用积分公式计算的原函数,通常用复合梯形求积公式或复合抛物线求积公式等方法,但这些方法精度不高,收敛的速度缓慢。
为了提高收敛速度,减少计算量,人们寻求其他方法。
[关键字]:计算方法;复化辛卜生公式;龙贝格算法目录前言 (3)摘要 (4)实验设计内容 (6)一.复化辛普森求积公式求解定积分 (6)1实验目的 (6)2实验内容 (6)3.算法 (6)3.Matlab程序 (6)4运行结果 (7)二、用龙贝格求积公式求解定积分 (7)1实验目的 (7)2 实验内容 (7)3.1算法 (7)3.2Matlab程序 (8)3.4运行结果 (8)三、结果分析 (9)四、参考文献 (9)实验设计内容一、 复化辛普森求积公式求解定积分1.实验目的:通过实际计算体会各种方法的精确度;会编写用复化辛卜生求定积分的程序;2.实验内容:用复化辛普森求积公式计算积分⎰-8.002dx e x 的近似值,自己设置不同精度要求,对结果进行比较分析。
3.算法:将区间[],a b 二等分,用3个插值节点构造抛物线,并以此抛物线为顶的曲边梯形面积近似以曲线()y f x =为顶的曲边梯形面积。
经推导得到()()4()()62ba b a a b f x dx f a f f b -+⎡⎤≈++⎢⎥⎣⎦⎰ (2.1) 或001122()()()()ba f x dx A f x A f x A f x ≈++⎰ (2.2)其中026b a A A -==,142()()63A b a b a =-=- 称式(2.1)或(2.2)为求积公式。
可以证明:若函数()f x 在[],a b 上有连续的4阶导数,Simpson 公式的截断误差为2()()()4()()62ba b a a b R f f x dx f a f f b -+⎡⎤=-++⎢⎥⎣⎦⎰ y=f(x)abOyxy=L 2(x)2b a +5(4)()()2880b a f η-=- a b η≤≤ (2.3) 记a = 0,b = 1,f(x) = x e -,则'()x x e f-=-''()x x e f-='''()x x e f-=-(4)()x x e f-=因此,利用Simpson 公式计算得0.51()()4()()6210(4)0.63236b a a b S f f a f f b e e e ----+⎡⎤=++=⎢⎥⎣⎦-++=由4(4)4()11()()()()()18021802b a b a I f S f f e ηη----=-=- (0,1)η∈ 得截断误差估计为:4111()()()0.000347218022880I f S f -≤-==4.Matlab 程序如下:function fsimpson(a,b,n) /*调用matlab 的函数*/ h = (b-a)/n; /*定义自变量*/ t = h*(f(a)+f(b))/6; for i = 0:(n-1)t = t+h*(4*f(a+(i+1/2)*h)+2*f(a+i*h))/6; /*定义函数*/ end /*结束函数*/ I = t在Matlab 中输入命令:fsimpson(0,1,1000)则输出结果为: 759262.0=I二、 用龙贝格求积公式求解定积分1.实验目的:通过实际计算体会各种方法的精确度;会编写用复化龙贝格求定积分的程序;2 实验内容:用龙贝格求积公式计算积分⎰-8.002dx e x 的近似值,自己设置不同精度要求,对结果进行比较分析。
3.算法:(1)置1N =,精度要求ε,1h b a =- (2)计算(0)1T=[]1()()2h f a f b +(3)置2N h =12Nh ,并计算(0)(0)22211((21))2NNN N N k TT h f a k h ==++-∑(4)置M N =,2N N = ,1k = (5)计算(1)(1)()2441k k k k M M Mk T T T---=-(6) 若1M =,转(7);否则,置2MM =,1k k =+,转(5)(7) 若()(1)11k k T T ε-- ,则停止计算(输出()1k T ),否则转(3)如此加工数据的过程叫龙贝格算法,如下图所示:4.Matlab程序如下:function z=romberg(a,b,e) /*调用matlab的函数*/ h=(b-a); /*定义自变量*/f=exp(-x.^2);TT(1,1)=h.*(f(b)+f(a))/2; /*定义函数*/k=2;TT(1,2)=TT(1,1)./2+h/2.*f(a+h/2);TT(2,1)=TT(1,2).*4/3-TT(1,1)./3;z=TT(2,1);while abs((TT(k,1)-TT(k-1,1))./TT(k,1))>=ek=k+1;h=h./2;for j2=1:2.^(k-2)ff(1,j2)=f(a+h*(j2-1/2));endfff=sum(ff).*h/2;TT(1,k)=TT(1,k-1)./2+ffffor j1=2:kTT(j1,k-j1+1)=4^(j1-1).*TT(j1-1,k-j1+2)./(4^(j1-1)-1)-TT(j1-1,k-j1+1)/( 4^(j1-1)-1);z=TT(j1,k-j1+1);endend /*结束函数*/ function r=f()r=exp(-x.^2)运算结果>> z=romberg(0,1,10e-2)z =0.7472>> vpa(z,7)ans =.7471804>> z=romberg(0,1,10e-5)TT =0.6839 0.7314 0.74300.7472 0 0TT =0.6839 0.7314 0.7430 0.74590.7472 0.7469 0 00.7468 0 0 0z = 0.7468>> vpa(z,7)ans =.7468240>> z=romberg(0,1,10e-10)TT =0.6839 0.7314 0.74300.7472 0 0TT =0.6839 0.7314 0.7430 0.74590.7472 0.7469 0 00.7468 0 0 0TT =0.6839 0.7314 0.7430 0.7459 0.74660.7472 0.7469 0.7468 0 00.7468 0.7468 0 0 00.7468 0 0 0 0TT =0.6839 0.7314 0.7430 0.7459 0.7466 0.74680.7472 0.7469 0.7468 0.7468 0 00.7468 0.7468 0.7468 0 0 00.7468 0.7468 0 0 0 00.7468 0 0 0 0 0z = 0.7468>> vpa(z,7)ans =.7468241三、结果分析龙贝格算法其实是在复化辛卜生公式递推的基础之上生成的一种精度高,而且收敛速度也较快的一种算法。
对于复化辛卜生算法来说,程序比较容易编写,而龙贝格算法,程序中需要注意用龙贝格算法加速收敛的时候如何处理判断以后生成的返回值才能使程序正常运行,龙贝格算法可以达到预期目的,求得所需要的结果。
四、参考文献[1].孙志终吴宏伟闻震初.计算方法与实验.南京:东南大学出版社2005[2].孙志忠. 数值分析全真试题试题解析. 南京:东南大学出版社2004[3]. Sorer K,Bulirsch R. 数值分析引论孙文渝南京:南京大学出版社1995[4] 王能超.数值分析简明教程.北京:高等教育出版社,1984[5] 袁慰平,孙志忠,吴宏伟.计算方法与实习.南京:东南大学出版社,2005。