您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 01-《数值分析》实验指导书
I《数值分析》课程实验指导书计算机科学与技术专业06级本科网络工程专业06级本科胡明龙滩编写佛山科学技术学院计算机系2008年10月II摘要本实验指导书包含九个上机实验:1.误差分析;2.Lagrange插值;3.高斯消去法解方程组;4.非线性方程求根;5.龙贝格算法;6.解线性方程组的迭代法;7.矩阵特征值问题计算;8.常微分初值问题的数值解法;9.最小二乘法。前面三个实验为必开实验,实验学时4学时;后面的实验学生可以根据实验指导书在课外自己学习。通过这些实验,使学生掌握计算机算法设计与分析的实现;同时也是加深对前修课程《程序设计语言》、《数据结构》和《高等数学》的理解,帮助学生提升程序设计及调试的能力。III目目录录实实验验一一误误差差分分析析………………………………………………………………………………………………………………………………………………11实实验验二二Lagrange插值………………………………………………………………………………………………………………………………22实实验验三三高斯消去法解方程组…………………………………………………………………………………………………………33实实验验四四非线性方程求根………………………………………………………………………………………………………………44实实验验五五龙贝格算法……………………………………………………………………………………………………………………66实实验验六六解线性方程组的迭代法…………………………………………………………………………………………77实实验验七七矩阵特征值问题计算……………………………………………………………………………………………………99实实验验八八常微分初值问题的数值解法……………………………………………………………………………………1111实实验验九九最小二乘法…………………………………………………………………………………………………………………………1133参考文献[[11]]李李庆庆扬扬..数数值值分分析析..华华中中科科技技大大学学出出版版社社,,22000022[[22]]实验一误差分析一、实验目的及要求1.了解误差分析对数值计算的重要性。2.掌握避免或减小误差的基本方法。二、实验设备安装有C、C++或MATLAB的计算机。三、实验原理根据不同的算法,得到的结果的精度是不一样的。四、实验内容及步骤求方程ax2+bx+c=0的根,其中a=1,b=-(5×108+1),c=5×108采用如下两种计算方案,在计算机上编程计算,将计算结果记录下来,并分析产生误差的原因。方案一:aacbbx2421aacbbx2422方案二:aacbbbx24)sgn(2112axcx要求:编写程序实现该算法;调试程序,检查输出结果。五、实验报告内容1.二次方程求根二种计算方案的公式、源程序、计算结果、结果分析。2.思考题:为了防止误差危害现象的产生,以保证计算结果的可靠性,数值运算中应注意哪些原则?试举例说明。2实验二Lagrange插值一、实验目的及要求1.掌握利用Lagrange插值法及Newton插值法求函数值并编程实现。2.程序具有一定的通用性,程序运行时先输入节点的个数n,然后输入各节点的值(iiyx,),最后输入要求的自变量x的值,输出对应的函数值。二、实验设备和实验环境安装有C、C++或MATLAB的计算机。三、算法描述1.插值的基本原理(求解插值问题的基本思路)构造一个函数y=f(x)通过全部节点,即iiyxf)((i=0、1、…n)再用f(x)计算插值,即)(**xfy2.拉格朗日(Lagrange)多项式插值Lagrange插值多项式:niiinnnnnxlyaxaxaxaxL00111)()()())(()()())(()()(110110niiiiiiniiixxxxxxxxxxxxxxxxxl3.牛顿(Newton)插值公式)())(](,,,[))(](,,[)](,[)()(11010102100100nnnxxxxxxxxxfxxxxxxxfxxxxfxfxN五、实验内容1.给定224951.013sin,207912.012sin,190809.011sin,构造Lagrange插值函数计算'3011sin。2.已知4个点的函数值如下表,用Newton插值法求x=0.596时的函数值。i0123xi0.400.550.650.80yi0.410750.578150.696750.88811六、实验报告内容实验报告应包括以下几个部分:计算方案的公式、源程序、计算结果、结果分析。3实验三高斯消去法解方程组一、实验目的及要求1.掌握求解线性方程组的高斯消去法---列选主元在计算机上的算法实现。2.程序具有一定的通用性,程序运行时先输入一个数n表示方程含有的未知数个数,然后输入每个线性方程的系数和常数,求出线性方程组的解。二、实验设备和实验环境安装有C、C++或MATLAB的计算机。三、算法描述1.高斯消去法基本思路设有方程组Axb,设A是可逆矩阵。高斯消去法的基本思想就是将矩阵的初等行变换作用于方程组的增广矩阵BAb,将其中的A变换成一个上三角矩阵,然后求解这个三角形方程组。2.列主元高斯消去法计算步骤将方程组用增广矩阵(1)ijnnBAba表示。步骤1:消元过程,对1,2,,1kn(1)选主元,找,1,,kikkn使得,maxkikikkinaa(2)如果,0kika,则矩阵A奇异,程序结束;否则执行(3)。(3)如果kik,则交换第k行与第ki行对应元素位置,kkjijaa,,,1jkn。(4)消元,对,,ikn,计算/,ikikkklaa对1,,1jkn,计算.ijijikkjaala步骤2:回代过程:(1)若0,nna则矩阵奇异,程序结束;否则执行(2)。(2),1/;nnnnnxaa对1,,2,1in,计算,11/niinijjiijixaaxa四、实验内容利用列选主元高斯消去法求解线性方程组1231231230.1012.3043.5551.1831.3473.7124.6232.1372.8351.0725.6433.035xxxxxxxxx63424132321321321xxxxxxxxx2实验四非线性方程求根一、实验目的1.掌握二分法、牛顿迭代法等常用的非线性方程迭代算法;2.培养编程与上机调试能力。二、实验要求1.用C语言设计出二分法和牛顿法的程序,并且选择不同的初值,观察所需的迭代次数和迭代结果。2.分析二分法和牛顿法在非线性方程求根中的优缺点和收敛速度,二分法简单易行,但只有线性收敛,且仅限于求实根;牛顿法也是一种简单的迭代法,具有二阶收敛速度(在单根邻近处)的特点,但对初值的选择比较苛刻,否则可能不收敛。三、算法步骤1.二分法计算f(x)=0的二分法如下:①输入求根取间[a,b]和误差控制量ε,定义函数f(x)。如果0)()(bfaf,转②;否则退出选用其它求根方法②当|a-b|ε时,计算中点x=(a+b)/2以及f(x)的值;分情况处理|)(|xf:停止计算,xx*,转④0)()(xfaf:修正区间],[],[baxa0)()(bfxf:修正区间],[],[babx③2*bax④输出近似根*x2.牛顿迭代法给定初始值0x,ε为根的容许误差,η为|)(|xf的容许误差,N为迭代次数的容许值。①如果0)(0'xf或迭代次数大于N,则算法失败,结束;否则执行②3②计算)()(0'001xfxfxx③若||01xx或|)(|1xf,则输出1x,程序结束;否则执行④④令10xx,转向①四、实验内容1.用二分法求方程01)(3xxxf在区间[1.0,1.5]内的一个实根,要求精确到小数点后2位。2.用牛顿迭代法求方程033)(23xxxxf在1.5附近的一个实根。五、思考题1.何为二分法和迭代法?2.怎样比较迭代法收敛的快慢?何为收敛阶数?六、实验报告实验报告应包括以下几个部分:计算方案的算法、源程序、计算结果、思考题。4实验五龙贝格算法一、实验目的1.掌握龙贝格算法的基本思路和迭代步骤;2.培养编程与上机调试能力。二、算法描述1.龙贝格算法基本思路龙贝格算法利用外推法,提高了计算精度,加快了收敛速度。,11,1,,11,2,3,.41kjkjkjkjjRRRRk对每一个,kj从2做到k,一直做到,1,1kkkkRR小于给定的精度是停止计算。其中,1kkhRTf(复化梯度求积公式),12kkbah2.龙贝格算法计算步骤步骤1:输入区间端点,ab,精度控制值e,循环次数M,定义函数()fx,取1n,;hba1,1()()/2Rhfafb步骤2:for2ktoM22,11,1111,,1,11,1,1,1{21/22/41}kkkkkijkjkjkjkjkkkkRRhfaihforjtokRRRRifRRe退出循环步骤3:数据积分近似值,kkR。三、实验内容用龙贝格算法计算:10sinxIdxx5实验六解线性方程组的迭代法一、实验目的1.掌握解线性方程组的雅可比迭代和高斯-塞德尔迭代算法;2.培养编程与上机调试能力.二、算法步骤1.迭代法的基本思想根据方程组Axb设计出一个迭代公式,然后将任意选取的一初始向量(0)x代入迭代公式,求出(1)x,再以(1)x代入同一迭代公式,求出(2)x,如此反复进行,得到向量序列(){}kx.当(){}kx收敛时,其极限即为原方程组的解.2.雅可比(Jacobi)迭代法解方程组设方程组Axb的系数矩阵对角线元素0(1,2,...,)iiain,M为最大迭代次数,为容许误差.雅可比(Jacobi)迭代法解方程组算法步骤如下:①取初始向量(0)(0)(0)12(,,...,)Tnxxxx,令0k.②对1,2,...,in,计算(1)()11()nkkiiijjjiijixbaxa.③如果(1)()1nkkiiixx,则输出(1)kx,结束;否则执行④④如果kM,则不收敛,终止程序;否则1kk,转②3.高斯-塞德尔(Gauss-Seidel)迭代法在雅可比(Jacobi)迭代法中,如果当新的分量求出后,马上用它来代替旧的分量,则可能会更快地接近方程组的准确解.基于这种设想构造的迭代公式称为高斯-塞德尔(Gauss-Seidel)迭代法.算法可相应地从雅可比(Jacobi)迭代法改造得到.三、实验题目及参考结果应用雅可比迭代和高斯-塞德尔迭代算法解线性方程组12312312352828321361xxxxxxxxx6参考结果:雅可比迭代法迭代次数20次,结果如下:[0]1.000000[1]2.000000[2]1.000000xxx四、实验要求1.选择一种计算机语言设计出雅可比(Jacobi)迭代法的算法程序,并且选择不同的迭代次数,观察输出结果;2.利用Matlab求方程组的解步骤如下:调用格式:\Ab%得到线性方程组的解向量Matlab6.1环境下操作如下:[521;283;136]A;%输入系数矩阵[8;21;1;]b;%输入常数项\xAb%方程组求解五、思考:1.判别迭代法收敛的充分必要条件及充
本文标题:01-《数值分析》实验指导书
链接地址:https://www.777doc.com/doc-3116643 .html