当前位置:文档之家› 数值计算方法实验指导(Matlab版)

数值计算方法实验指导(Matlab版)

《数值计算方法》实验指导(Matlab 版)肇庆学院数学与统计学学院计算方法课程组1. 实验名称实验1 算法设计原则验证(之相近数相减、大数吃小数和简化计算步骤) 2.实验题目有效数字的损失.123 )与1000个较小的数(3 1015)的和,验证大数吃小数的现象.(3)分别用直接法和秦九韶算法计算多项式P(x) a 0x n a 1x n 1在x =1.00037 处的值•验证简化计算步骤能减少运算时间.n 1 对于第(3)题中的多项式P (x ),直接逐项计算需要n (n 1) 2 1次乘法和n 次加法,使用秦九韶算法P(x) (((a °x ajx a 2)xa .则只需要n 次乘法和n 次加法.3.实验目的验证数值算法需遵循的若干规则. 4.基础理论设计数值算法时,应避免两个相近的数相减、防止大数吃小数、简化计算步骤减少运算 次数以减少运算时间并降低舍入误差的积累.两相近的数相减会损失有效数字的个数,用一《数值计算方法》实验 1报告班级: 20xx 级 XXXXx 班学号: 20xx2409xxxx姓名: XXX 成绩:⑴取 z 1016,计算z 1 Z 和 1/(、z 1Z),验证两个相近的数相减会造成(2)按不同顺序求一个较大的数(an 1X a n个大数依次加小数,小数会被大数吃掉,乘法运算次数太多会增加运算时间.5.实验环境操作系统:Win dows xp ;程序设计语言:Matlab6.实验过程(1)直接计算并比较;(2)法1 :大数逐个加1000个小数,法2 :先把1000个小数相加再与大数加;(3)将由高次项到低次项的系数保存到数组A[n]中,其中n为多项式次数.7.结果与分析(1)计算的~1V Z = _______________________________ ,1/( ~1 < z) ____________________ . 分析:(2)123逐次加1000个3 10 6的和是_________________________ ,先将1000个3 10 6相加,再用这个和与123相加得_______________________ .分析:(3)计算__________ 次的多项式:直接计算的结果是___________________ ,用时___________________ ;用秦九韶算法计算的结果是____________________ ,用时 ___________________分析:8.附录:程序清单(1)两个相近的数相减.°%*************************************************************%* 程序名:ex1_1.m°%*程序功能:验证两个相近的数相减会损失有效数字个数Q%************************************************************* z=1e16;x,y(2)大数吃小数Q%*************************************************************%程序名:ex1_2.m%*程序功能:验证大数吃小数的现象• °%************************************************************* 0clc; %清屏clear all; %释放所有内存变量format Io ng; %按双精度显示浮点数z=123; %大数t=3e-15; %小数大数依次加小数x=z; %% 重复1000次给x中加上ty=0; %先累加小数% 重复1000次给y中加上t y=z + y; %再加到大数x,y(3)秦九韶算法 °%*************************************************************%* 程序名:ex1_3.m°%* 程序功能:验证秦九韶算法可节省运行时间•Q%*************************************************************clc;%清屏clear all;%释放所有内存变量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 为多项式次数%直接计算begi ntime=clock;format Io ng;%按双精度显示浮点数%开始执行的时间%累加多项式的i 次项 en dtime=clock; time 仁etime(e ndtime,begi ntime); disp('直接计算'); disp(['p(', nu m2str(x),')=' ,n um2str(p)]); disp([' 运行时间:’,num2str(time1),' 秒']); %结束执行的时间%运行时间%秦九韶算法计算 begi ntime=clock; %开始执行的时间累加秦九韶算法中的一项en dtime=clock; time2=etime(e ndtime,begi ntime); disp(''); disp('秦九韶算法计算'); disp(['p(', nu m2str(x),')=' ,n um2str(p)]);%结束执行的时间%运行时间运行时间:',num2str(time2),'秒']); disp(['1.实验名称实验1 算法设计原则验证(之数值稳定性)2. 实验题目计算定积分I n;x n e x1dx,n 0,1, 10 ,分别用教材例1-7推导出的算法 A 和B ,其中:I n 1 nl n 1I _ 算法A :nn 1算法B : ln 1I o 0.6321l110验证算法不稳定时误差会扩大.3.实验目的验证数值算法需遵循的若干规则. 4.基础理论设计数值算法时,应采用数值稳定性好的算法•数值稳定的算法, 误差不会放大,甚至会缩小;而数值不稳定的算法会放大误差.5.实验环境操作系统:Win dows xp ; 程序设计语言:Matlab6.实验过程分别用数组IA[]和IB[]保存两种算法计算的结果.《数值计算方法》实验 1报告班级: 20xx 级 XXXXx 班学号: 20xx2409xxxx姓名: XXX 成绩:1-(1 I n ) n 07.结果与分析运行结果:(或拷屏)分析:8.附录:程序清单°%************************************************************* %*程序名:ex1_4.m °%*程序功能:验证数值稳定性算法可控制误差°%*************************************************************%清屏%释放所有内存变量%按双精度显示浮点数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)表示原问题中的l(n )for n — 1 : 10lA(n -1) - 1 - n*IA(n.);%算法Bclc;clear all;format Io ng;disp('n 算法A 算法B 精确值');for n=1:11fprintf('%2d %14.6f %14.6f %14.6f\n',n-1,IA(n),IB(n),l(n));end% n显示为2位整数,其它显示为14位其中小数点后显示6位的小数《数值计算方法》实验 1报告班级: 20xx 级 XXXXx 班学号: 20xx2409xxxx姓名:XXX成绩:1.实验名称实验i 算法设计原则(除数绝对值不能太小) 2.实验题目将线性方程组增广矩阵利用初等行变换可化为1 2 i 2 和2 和 i0 i6i i的方程组,验证除数绝对值远小于被除数绝对值的除法会导致结果失真. 3.实验目的验证数值算法需遵循的若干规则. 4.基础理论设计数值算法时,应避免除数绝对值远小于被除数绝对值的除法, 大,使结果失真. 5.实验环境操作系Win dows xp ; 程序设计语言:Matlab6.实验过程a iia2ia 2ipi aii0 3i2b i a 22' b 2'r i9i2 07 r2aii0 b ;a 22'b 2'由此可解得X ib i / an, X 2分别解增广矩阵为i0i6 i否则绝对误差会被放用二维数组A和B存放方程组的增广矩阵,利用题目所给初等行变换求解方程组.7.结果与分析第1种顺序的方程组的解为x= ____________________________ ,y= ___________________________ 第2种顺序的方程组的解为x= ____________________________ ,y= ___________________________ 分析:8.附录:程序清单°%************************************************************* %*程序名:ex1_5.m%* 程序功能:验证除数的绝对值太小可能会放大误差Q%*************************************************************clc;A=[1e-16, 1, 1; 2, 1,2];B=[2, 1,2; 1e-16, 1, 1]; %增广矩阵%方程组A%消去a_{12},系数矩阵成对角线%未知数x1的值%未知数x2的值disp(['方程组 A 的解:x 仁',num2str(A(1,3)),',x2=',num2str(A(2,3))]);disp('');%方程组Bdisp(['方程组 B 的解:x 仁',num2str(B(1,3)),',% m = - a_{21}/a_{11}是第2行加第1行的倍数丄2)/A(Z 蹑A(l :1Q = A(l J ;) + m *A(2>:); A(1:3)=A^13) A(L1); 沁 3) 'AC1 2);% 消去 a_{21}% m = - a_{12}/a_{22}是第1行加第2行的倍数% m = - b_{21}/b_{11}是第2行加第1行的倍数2) B(2 2):BC1,% 消去 b_{21}BCL 3)-B(l 33) 8(1,1);B(2I 3) = B(Z 3) B(2,2X% m = - b_{12}/b_{22}是第1行加第2行的倍数%消去b_{12},系数矩阵成对角线%未知数x1的值%未知数x2的值x2=', nu m2str(B(2,3))]);《数值计算方法》实验2报告班级:20xx 级XXXXx 班学号:20xx2409xxxx成绩:1.实验名称姓名:XXX实验2 非线性方程的迭代解法(之简单迭代法)2.实验题目用简单迭代法求方程X3 4x2 10 0在区间[1,2]内的一个实根,取绝对误差限为10 4.3.实验目的掌握非线性方程的简单迭代法.4.基础理论简单迭代法:将方程f (x) 0改写成等价形式X (x),从初值X o开始,使用迭代公式X k 1 (X k )可以得到一个数列,若该数列收敛,则其极限即为原方程的解. 取数列中适当的项可作为近似解.5.实验环境操作系统:Win dows xp ; 程序设计语言:Matlab6.实验过程7.结果与分析8.附录:程序清单1.实验名称实验2 非线性方程的迭代解法(之Newton 迭代法)2. 实验题目用Newton 迭代法求方程x 34x 210 0在区间[1,2]内的一个实根,取绝对误差限为 10 4.3.实验目的掌握求解非线性方程的 Newto n 迭代法.4.基础理论Newt on 迭代法:解方程 f(x) 0的Newton 迭代公式为x k 1 x k5.实验环境操作系Win dows xp ; 程序设计语言:Matlab6.实验过程7.结果与分析8.附录:程序清单《数值计算方法》实验 2报告班级: 20xx 级 XXXXx 班学号: 20xx2409xxxx姓名: XXX 成绩:f (X k )f'(X k )《数值计算方法》实验2报告班级:20xx 级XXXXx 班学号:20xx2409xxxx姓名:XXX 成绩:1.实验名称实验2 非线性方程的迭代解法(之对分区间法)2.实验题目用对分区间法求方程X3 x 1 0在区间[1, 1.5]内的一个实根,取绝对误差限为10 4.3.实验目的掌握求解非线性方程的对分区间法.4.基础理论对分区间法:取[a, b]的中点p,若f(p) ~ 0或b - a < 则p为方程f (x) 0的近似解;若f(a) f(p) < 0,则说明根在区间取[a, p]中;否则,根在区间取[p, b]中•将新的有根区间记为[a1, b1],对该区间不断重复上述步骤,即可得到方程的近似根.5.实验环境操作系统:Win dows xp ; 程序设计语言:Matlab6.实验过程用宏定义函数f(x);为了循环方便,得到的新的有根区间始终用[a, b]表示;由于新的有根区间可能仍以a为左端点,这样会反复使用函数值f(a),为减少运算次数,将这个函数值保存在一个变量fa中;同样在判断新的有根区间时用到函数值f(p),若新的有根区间以p为左端点,则下一次用到的f(a)实际上就是现在的f(p),为减少运算次数,将这个函数值保存在一个变量fp 中.算法的伪代码描述:In put :区间端点a, b ;精度要求(即误差限)「函数 f (x);最大对分次数NOutput :近似解或失败信息7.结果与分析8.附录:程序清单说明:源程序中带有数字的空行,对应着算法描述中的行号°%**********************************************************%*程序名:Bisection.m%* 程序功能:使用二分法求解非线性方程.°%**********************************************************f=inline(W3-x-1'); %定义函数f(x)a=i nput('有根区间左端点:a='); b=in put ('右端点:b=');epsilon=input(' 误差限:epsilona=');N=i nput(' 最大对分次数:N=');1 %对分次数计数器n置12 %左端点的函数值给变量fafprin tf('\nk p f(p) a(k) f(a(k))');fprintf(' b(k) b-a\n');%显示表头fprin tf('%2d%36.6f%12.6f%12.6f%12.6f\n',O,a,fa,b,b-a);%占2位其中0位小数显示步数0,共12位其中小数6位显示各值3 % while n < N4 %取区间中点p5 %求p点函数值给变量fpfprin tf('%2d%12.6f%12.6f, n,p,fp);%输出迭代过程中的中点信息p和f(p)6 % 如果f(p)=0 或b-a的一半小于误差fprintf('\n\n 近似解为:%f\n',p); %则输出近似根p (7)return; %并结束程序(7)89 %计数器加115fprin tf('%12.6f%12.6f%12.6f%12.6f\n',a,fa,b,b-a);%显示新区间端点及左端函数值、区间长度16fprintf('\n\n经过%d 次迭代后未达到精度要求.\n',N); %输出错误信息(行17)1011取作p12 1314% 若f(a)与f(p)同号%则取右半区间为新的求根区间,即a%保存新区间左端点的函数值 %否则%左半区间为新的求根区间,即b 取作p1.实验名称 实验2非线性方程的迭代解法(之Aitken-Steffensen加速法)2. 实验题目32用Aitken-Steffensen 加速法求方程 x 4x 10 0在区间[1,2]内的一个实根,取绝对误差限为10 4•3.实验目的熟悉求解非线性方程的 Aitke n-Steffe nsen加速法.4.基础理论将方程f (x) 0改写成等价形式 x (x),得到从初值 X 。

相关主题