您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 数值计算方法实验指导(Matlab版)
1《数值计算方法》实验指导(Matlab版)肇庆学院数学与统计学学院计算方法课程组2《数值计算方法》实验1报告班级:20xx级XXXXx班学号:20xx2409xxxx姓名:XXX成绩:1.实验名称实验1算法设计原则验证(之相近数相减、大数吃小数和简化计算步骤)2.实验题目(1)取1610z,计算zz1和)1/(1zz,验证两个相近的数相减会造成有效数字的损失.(2)按不同顺序求一个较大的数(123)与1000个较小的数(15310)的和,验证大数吃小数的现象.(3)分别用直接法和秦九韶算法计算多项式nnnnaxaxaxaxP1110)(在x=1.00037处的值.验证简化计算步骤能减少运算时间.对于第(3)题中的多项式P(x),直接逐项计算需要2112)1(nnn次乘法和n次加法,使用秦九韶算法nnaxaxaxaxaxP)))((()(1210则只需要n次乘法和n次加法.3.实验目的验证数值算法需遵循的若干规则.4.基础理论设计数值算法时,应避免两个相近的数相减、防止大数吃小数、简化计算步骤减少运算次数以减少运算时间并降低舍入误差的积累.两相近的数相减会损失有效数字的个数,用一个大数依次加小数,小数会被大数吃掉,乘法运算次数太多会增加运算时间.5.实验环境操作系统:Windowsxp;程序设计语言:Matlab6.实验过程(1)直接计算并比较;(2)法1:大数逐个加1000个小数,法2:先把1000个小数相加再与大数加;(3)将由高次项到低次项的系数保存到数组A[n]中,其中n为多项式次数.7.结果与分析(1)计算的zz1=,)1/(1zz.分析:(2)123逐次加1000个6310的和是,先将1000个6310相加,3再用这个和与123相加得.分析:(3)计算次的多项式:直接计算的结果是,用时;用秦九韶算法计算的结果是,用时.分析:8.附录:程序清单(1)两个相近的数相减.%*************************************************************%*程序名:ex1_1.m*%*程序功能:验证两个相近的数相减会损失有效数字个数*%*************************************************************z=1e16;x,y======================================================================(2)大数吃小数%*************************************************************%*程序名:ex1_2.m*%*程序功能:验证大数吃小数的现象.*%*************************************************************clc;%清屏clearall;%释放所有内存变量formatlong;%按双精度显示浮点数z=123;%大数t=3e-15;%小数x=z;%大数依次加小数%重复1000次给x中加上t%x=zz1;%y=)1/(1zz;4y=0;%先累加小数%重复1000次给y中加上ty=z+y;%再加到大数x,y======================================================================(3)秦九韶算法%*************************************************************%*程序名:ex1_3.m*%*程序功能:验证秦九韶算法可节省运行时间.*%*************************************************************clc;%清屏clearall;%释放所有内存变量formatlong;%按双精度显示浮点数A=[8,4,-1,-3,6,5,3,2,1,3,2,-1,4,3,1,-2,4,6,8,9,50,-80,12,35,7,-6,42,5,6,23,74,65,55,80,78,77,98,56];A(10001)=0;%扩展到10001项,后面的都是分量0%A为多项式系数,从高次项到低次项x=1.00037;n=9000;%n为多项式次数%直接计算begintime=clock;%开始执行的时间%求x的i次幂%累加多项式的i次项endtime=clock;%结束执行的时间time1=etime(endtime,begintime);%运行时间disp('直接计算');disp(['p(',num2str(x),')=',num2str(p)]);disp(['运行时间:',num2str(time1),'秒']);5%秦九韶算法计算begintime=clock;%开始执行的时间%累加秦九韶算法中的一项endtime=clock;%结束执行的时间time2=etime(endtime,begintime);%运行时间disp('');disp('秦九韶算法计算');disp(['p(',num2str(x),')=',num2str(p)]);disp(['运行时间:',num2str(time2),'秒']);6《数值计算方法》实验1报告班级:20xx级XXXXx班学号:20xx2409xxxx姓名:XXX成绩:1.实验名称实验1算法设计原则验证(之数值稳定性)2.实验题目计算定积分10110,1,0,dnxexIxnn,分别用教材例1-7推导出的算法A和B,其中:算法A:6321.0101InIInn算法B:0)1(1101IInInn验证算法不稳定时误差会扩大.3.实验目的验证数值算法需遵循的若干规则.4.基础理论设计数值算法时,应采用数值稳定性好的算法.数值稳定的算法,误差不会放大,甚至会缩小;而数值不稳定的算法会放大误差.5.实验环境操作系统:Windowsxp;程序设计语言:Matlab6.实验过程分别用数组IA[]和IB[]保存两种算法计算的结果.7.结果与分析运行结果:(或拷屏)n算法A算法B精确值012345678910分析:78.附录:程序清单%*************************************************************%*程序名:ex1_4.m*%*程序功能:验证数值稳定性算法可控制误差.*%*************************************************************clc;%清屏clearall;%释放所有内存变量formatlong;%按双精度显示浮点数I=[0.63212055882856,0.36787944117144,0.26424111765712,0.20727664702865,...0.17089341188538,0.14553294057308,0.12680235656154,0.11238350406938,...0.10093196744492,0.09161229300662,0.08387707010843];%保留14位小数的精确值,…是Matlab中的续行符%算法AIA(1)=0.6321;%Matlab下标从1开始,所以要用IA(n+1)表示原问题中的I(n)%算法Bdisp('n算法A算法B精确值');forn=1:11fprintf('%2d%14.6f%14.6f%14.6f\n',n-1,IA(n),IB(n),I(n));end%n显示为2位整数,其它显示为14位其中小数点后显示6位的小数8《数值计算方法》实验1报告班级:20xx级XXXXx班学号:20xx2409xxxx姓名:XXX成绩:1.实验名称实验1算法设计原则(除数绝对值不能太小)2.实验题目将线性方程组增广矩阵利用初等行变换可化为''0'0''02221112'12221121112222211121122121121babarrbabaarrbaabaaaaaa由此可解得'/',/'22221111abxabx.分别解增广矩阵为161011212和162121011的方程组,验证除数绝对值远小于被除数绝对值的除法会导致结果失真.3.实验目的验证数值算法需遵循的若干规则.4.基础理论设计数值算法时,应避免除数绝对值远小于被除数绝对值的除法,否则绝对误差会被放大,使结果失真.5.实验环境操作系统:Windowsxp;程序设计语言:Matlab6.实验过程用二维数组A和B存放方程组的增广矩阵,利用题目所给初等行变换求解方程组.7.结果与分析第1种顺序的方程组的解为x=,y=;第2种顺序的方程组的解为x=,y=.分析:8.附录:程序清单%*************************************************************%*程序名:ex1_5.m*%*程序功能:验证除数的绝对值太小可能会放大误差.*%*************************************************************9clc;A=[1e-16,1,1;2,1,2];B=[2,1,2;1e-16,1,1];%增广矩阵%方程组A%m=-a_{21}/a_{11}是第2行加第1行的倍数%消去a_{21}%m=-a_{12}/a_{22}是第1行加第2行的倍数%消去a_{12},系数矩阵成对角线%未知数x1的值%未知数x2的值disp(['方程组A的解:x1=',num2str(A(1,3)),',x2=',num2str(A(2,3))]);disp('');%方程组B%m=-b_{21}/b_{11}是第2行加第1行的倍数%消去b_{21}%m=-b_{12}/b_{22}是第1行加第2行的倍数%消去b_{12},系数矩阵成对角线%未知数x1的值%未知数x2的值disp(['方程组B的解:x1=',num2str(B(1,3)),',x2=',num2str(B(2,3))]);10《数值计算方法》实验2报告班级:20xx级XXXXx班学号:20xx2409xxxx姓名:XXX成绩:1.实验名称实验2非线性方程的迭代解法(之简单迭代法)2.实验题目用简单迭代法求方程010423xx在区间[1,2]内的一个实根,取绝对误差限为410.3.实验目的掌握非线性方程的简单迭代法.4.基础理论简单迭代法:将方程0)(xf改写成等价形式)(xx,从初值0x开始,使用迭代公式)(1kkxx可以得到一个数列,若该数列收敛,则其极限即为原方程的解.取数列中适当的项可作为近似解.5.实验环境操作系统:Windowsxp;程序设计语言:Matlab6.实验过程7.结果与分析8.附录:程序清单11《数值计算方法》实验2报告班级:20xx级XXXXx班学号:20xx2409xxxx姓名:XXX成绩:1.实验名称实验2非线性方程的迭代解法(之Newton迭代法)2.实验题目用Newton迭代法求方程010423xx在区间[1,2]内的一个实根,取绝对误差限为410.3.实验目的掌握求解非线性方程的Newton迭代法.4.基础理论Newton迭代法:解方程0)(xf的Newton迭代公式为)(')(1kkkkxfxfxx.5.实验环境操作系统:Windowsxp;程序设计语言:Matlab6.实验过程7.结果与分析8.附录:程序清单12《数值计算方法》实验2报告班级:20xx级XXXXx班学号:20xx2409xxxx姓名:XXX成绩:1.实验名称实验2非线性方程的迭代解法(之对分区间法)2.实验题目用对
本文标题:数值计算方法实验指导(Matlab版)
链接地址:https://www.777doc.com/doc-7168082 .html