数值计算方法实验报告(共35页).doc
《数值计算方法实验报告(共35页).doc》由会员分享,可在线阅读,更多相关《数值计算方法实验报告(共35页).doc(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上重 庆 交 通 大 学学 生 实 验 报 告实验课程名称 数值计算方法I 开课实验室 数学实验室 学 院 理学院 年级11专业班 信息与计算科学 学 生 姓 名 李伟凯 学 号 3 开 课 时 间 2013 至 2014 学年第 1 学期评分细则评分报告表述的清晰程度和完整性(20分)程序设计的正确性(40分)实验结果的分析(30分)实验方法的创新性(10分)总成绩教师签名邹昌文实验五 解线性方程组的直接方法实验5.1 (主元的选取与算法的稳定性)问题提出:Gauss消去法是我们在线性代数中已经熟悉的。但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确
2、保Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。实验内容:考虑线性方程组 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss消去过程。实验要求:(1)取矩阵,则方程有解。取n=10计算矩阵的条件数。让程序自动选取主元,结果如何?(2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。(3)取矩阵阶数n=20或者更大,重复上述实验过程
3、,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。实验5.2(线性代数方程组的性态与条件数的估计)问题提出:理论上,线性代数方程组的摄动满足 矩阵的条件数确实是对矩阵病态性的刻画,但在实际应用中直接计算它显然不现实,因为计算通常要比求解方程还困难。实验内容:MATLAB中提供有函数“condest”可以用来估计矩阵的条件数,它给出的是按1-范数的条件数。首先构造非奇异矩阵A和右端,使得方程是可以精确求解的。再人为地引进系数矩阵和右端的摄动,使
4、得充分小。实验要求:(1)假设方程Ax=b的解为x,求解方程,以1-范数,给出的计算结果。(2)选择一系列维数递增的矩阵(可以是随机生成的),比较函数“condest”所需机器时间的差别.考虑若干逆是已知的矩阵,借助函数“eig”很容易给出cond2(A)的数值。将它与函数“cond(A,2)”所得到的结果进行比较。(3)利用“condest”给出矩阵A条件数的估计,针对(1)中的结果给出的理论估计,并将它与(1)给出的计算结果进行比较,分析所得结果。注意,如果给出了cond(A)和的估计,马上就可以给出的估计。(4)估计著名的Hilbert矩阵的条件数。思考题一:(Vadermonde矩阵)
5、设 ,其中,(1)对n=2,5,8,计算A的条件数;随n增大,矩阵性态如何变化?(2)对n=5,解方程组Ax=b;设A的最后一个元素有扰动10-4,再求解Ax=b(3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。(4)你能由此解释为什么不用插值函数存在定理直接求插值函数而要用拉格朗日或牛顿插值法的原因吗?相关MATLAB函数提示:zeros(m,n) 生成m行,n列的零矩阵ones(m,n) 生成m行,n列的元素全为1的矩阵eye(n) 生成n阶单位矩阵rand(m,n) 生成m行,n列(0,1)上均匀分布的随机矩阵diag(x) 返回由向量x的元素构成的对角矩阵tril(A
6、) 提取矩阵A的下三角部分生成下三角矩阵triu(A) 提取矩阵A的上三角部分生成上三角矩阵rank(A) 返回矩阵A的秩det(A) 返回方阵A的行列式inv(A) 返回可逆方阵A的逆矩阵V,D=eig(A) 返回方阵A的特征值和特征向量norm(A,p) 矩阵或向量的p范数cond(A,p) 矩阵的条件数L,U,P=lu(A) 选列主元LU分解R=chol(X) 平方根分解Hi=hilb(n) 生成n阶Hilbert矩阵实验程序:M文件程序为:function x=gauss(n,r)n=input('请输入矩阵A的阶数:n=')A=diag(6*ones(1,n)+dia
7、g(ones(1,n-1),1)+diag(8*ones(1,n-1),-1)b=A*ones(n,1)p=input('条件数对应的范数是p-范数:p=')pp=cond(A,p)pausem,n=size(A);nb=n+1;Ab=A br=input('请输入是否为手动,手动输入1,自动输入0:r=')for i=1:n-1 if r=0 pivot,p=max(abs(Ab(i:n,i); ip=p+i-1; if ip=i Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end end if r=1 i=i ip=input
8、('输入i列所选元素所处的行数:ip='); Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end pivot=Ab(i,i); for k=i+1:n Ab(k,i:nb)=Ab(k,i:nb)-(Ab(k,i)/pivot)*Ab(i,i:nb); end disp(Ab); pauseendx=zeros(n,1);x(n)=Ab(n,nb)/Ab(n,n);for i=n-1:-1:1 x(i)=(Ab(i,nb)-Ab(i,i+1:n)*x(i+1:n)/Ab(i,i);end(1)取矩阵A的阶数:n=10,自动选取主元:>>
9、 format long>> gauss请输入矩阵A的阶数:n=10n = 10条件数对应的范数是p-范数:p=1p = 1pp = 2.0000e+003请输入是否为手动,手动输入1,自动输入0:r=0r = 0取矩阵A的阶数:n=10,手动选取主元:选取绝对值最大的元素为主元:>> gauss请输入矩阵A的阶数:n=10n = 10条件数对应的范数是p-范数:p=2p = 2pp= 1.3903e+003请输入是否为手动,手动输入1,自动输入0:r=1r = 1ans= 1 1 1 1 1 1 1 1 1 1选取绝对值最小的元素为主元:>> gauss请
10、输入矩阵A的阶数:n=10n = 10条件数对应的范数是p-范数:p=2p = 2pp = 1.3903e+003请输入是否为手动,手动输入1,自动输入0:r=1r = 1ans = 1.000 1.000 1.000 1.000 1.000 1.000 0.999 1.001 0.998 1.003(2)取矩阵A的阶数:n=10,手动选取主元:选取绝对值最大的元素为主元:>> gauss请输入矩阵A的阶数:n=10n = 10条件数对应的范数是p-范数:p=2p = 2pp= 1.3903e+003请输入是否为手动,手动输入1,自动输入0:r=1r = 1ans= 1 1 1 1
11、 1 1 1 1 1 1选取绝对值最小的元素为主元:>> gauss请输入矩阵A的阶数:n=10n = 10条件数对应的范数是p-范数:p=2p = 2pp = 1.3903e+003请输入是否为手动,手动输入1,自动输入0:r=1r = 1ans = 1.000 1.000 1.000 1.000 1.000 1.000 0.999 1.001 0.998 1.003(3)取矩阵A的阶数:n=20,手动选取主元: 选取绝对值最大的元素为主元:>> gauss请输入矩阵A的阶数:n=20条件数对应的范数是p-范数:p=1p = 1pp = 2.0000e+006ans
12、= 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 选取绝对值最小的元素为主元:>> gauss请输入矩阵A的阶数:n=20.n = 20条件数对应的范数是p-范数:p=2p = 2pp = 1.1683e+006请输入是否为手动,手动输入1,自动输入0:r=1r = 1ans = 1.000 1.000 1.000 1.000 1.000 1.000 1.001 0.997 1.006 0.989 1.023 0.955 1.090 0.821 1.352 0.318 1.273 0.817 1.910(4)该题目的M程序如下所示function
13、x=gauss(n,r)n=input('请输入矩阵A的阶数:n=')A= hilb(n)b=A*ones(n,1)p=input('条件数对应的范数是p-范数:p=')pp=cond(A,p)pausem,n=size(A);nb=n+1;Ab=A br=input('请输入是否为手动,手动输入1,自动输入0:r=')for i=1:n-1 if r=0 pivot,p=max(abs(Ab(i:n,i); ip=p+i-1; if ip=i Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end end if r=
14、1 i=i ip=input('输入i列所选元素所处的行数:ip='); Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end pivot=Ab(i,i); for k=i+1:n Ab(k,i:nb)=Ab(k,i:nb)-(Ab(k,i)/pivot)*Ab(i,i:nb); end disp(Ab); pauseendx=zeros(n,1);x(n)=Ab(n,nb)/Ab(n,n);for i=n-1:-1:1 x(i)=(Ab(i,nb)-Ab(i,i+1:n)*x(i+1:n)/Ab(i,i);end >>gauss请输入
15、矩阵A的阶数:n=7n = 7A = 6 1 0 0 0 0 0 8 6 1 0 0 0 0 0 8 6 1 0 0 0 0 0 8 6 1 0 0 0 0 0 8 6 1 0 0 0 0 0 8 6 1 0 0 0 0 0 8 6b = 7 15 15 15 15 15 14pp = 3.9999e+002Ab = 6 1 0 0 0 0 0 7 8 6 1 0 0 0 0 15 0 8 6 1 0 0 0 15 0 0 8 6 1 0 0 15 0 0 0 8 6 1 0 15 0 0 0 0 8 6 1 15 0 0 0 0 0 8 6 14请输入是否为手动,手动输入1,自动输入0:r=
16、1r = 1条件数对应的范数是p-范数:p=1p = 1i = 1ans = 0.869 1.337 0.299 1.143 0.038 1.825 0.491显然的是,该问题在主元选取与算出结果有着很大的关系,取绝对值大的元素作为主元比取绝对值小的元素作为主元时产生的结果比较准确,即选取绝对值小的主元时结果产生了较大的误差,条件数越大产生的误差就越大实验体会:运用高斯消去法求解线性方程组问题的时候,主元的选取和相应的消去法的选取决定了该算法的稳定性,选取绝对值大的元素比选取绝对值比较小的元素作为主元时对结果产生的误差影响比较小。并且增加条件数反而对结果的误差产生更大的影响。并且在运算中要尽量
17、避免出现运用小数作为除数,使数量级加大,令大数吃掉小数的情况发生。实验5.2(线性代数方程组的性态与条件数的估计)问题提出:理论上,线性代数方程组的摄动满足 矩阵的条件数确实是对矩阵病态性的刻画,但在实际应用中直接计算它显然不现实,因为计算通常要比求解方程还困难。实验内容:MATLAB中提供有函数“condest”可以用来估计矩阵的条件数,它给出的是按1-范数的条件数。首先构造非奇异矩阵A和右端,使得方程是可以精确求解的。再人为地引进系数矩阵和右端的摄动,使得充分小。实验要求:(1)假设方程Ax=b的解为x,求解方程,以1-范数,给出的计算结果。(2)选择一系列维数递增的矩阵(可以是随机生成的
18、),比较函数“condest”所需机器时间的差别.考虑若干逆是已知的矩阵,借助函数“eig”很容易给出cond2(A)的数值。将它与函数“cond(A,2)”所得到的结果进行比较。(3)利用“condest”给出矩阵A条件数的估计,针对(1)中的结果给出的理论估计,并将它与(1)给出的计算结果进行比较,分析所得结果。注意,如果给出了cond(A)和的估计,马上就可以给出的估计。(4)估计著名的Hilbert矩阵的条件数。程序代码:1保存M文件名为:fanshu.mn=input('please input n:n=') a=fix(100*rand(n)+1 x=ones(n,
19、1) b=a*x data=rand(n)*0.00001 datb=rand(n,1)*0.00001 A=a+dataB=b+datbxx=geshow(A,B) x0=norm(xx-x,1)/norm(x,1) 保存M文件名为:geshow.m function x=geshow(A,B) m,n=size(A);nb=n+1;AB=A B;for i=1:n-1 pivot=AB(i,i); for k=i+1:n AB(k,i:nb)=AB(k,i:nb)-(AB(k,i)/pivot)*AB(i,i:nb); endendx=zeros(n,1);x(n)=AB(n,nb)/AB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算方法 实验 报告 35
限制150内