数值分析实验报告5篇

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
讨论:
利用这种方法进行这类实验,可以很精确的扰动敏感性的一般规律。即 当对扰动项的系数越来越小时,对其多项式扰动的结果也就越来越小, 即扰动敏感性与扰动项的系数成正比,扰动项的系数越大,对其根的扰 动敏感性就越明显,当扰动的系数一定时,扰动敏感性与扰动的项的幂 数成正比,扰动的项的幂数越高,对其根的扰动敏感性就越明显。
数值实验结果及分析: 对于第一个函数f(x)=1/(1+25x2) 对于第二个函数h(x)=x/(1+x4) 对于第三个函数g(x)=arctan(x)
讨论: 通过对三个函数得出的largrang插值多项式并在数学软件中的运行,得 出函数图象,说明了对函数的支点不是越多越好,而是在函数的两端而 言支点越多,而largrang插值多项式不是更加靠近被逼近的函数,反而
误差分析
实验1.1(问题)
实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对 数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属 于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值 问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究 和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机 器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现 考虑该多项式的一个扰动 其中是一个非常小的数。这相当于是对(1.1)中的系数作一个小的扰 动。我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的 解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个Matlab函 数:“roots”和“poly”。 其中若变量a存储n+1维的向量,则该函数的输出u为一个n维的向量。设 a的元素依次为,则输出u的各分量是多项式方程 的全部根;而函数 的输出b是一个n+1维变量,它是以n维变量v的各分量为根的多项式的系 数。可见“roots”和“poly”是两个互逆的运算函数。 上述简单的Matlab程序便得到(1.2)的全部根,程序中的“ess”即是 (1.2)中的。
更加远离函数,在函数两端的跳动性更加明显,argrang插值多项式对函 数不收敛。
实验总结:
利用MATLAB来进行函数的largrang插值多项式问题的实验,虽然其得 出的结果是有误差的,但是增加支点的个数进行多次实验,可以找出函 数的largrang插值多项式的一般规律,当支点增加时,largrang插值多项 式对函数两端不收敛,不是更加逼近,而是更加远离,跳动性更强。所 以对于函数的largrang插值多项式问题可以借助于MATLAB来进行问题 的分析,得到比较准确的实验结规律。
素的选取在消去过程中的作用。 (4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重 复上述实验,观察记录并分析实验结果。
实验过程: 程序:
建立M文件: function x=gauss(n,r) n=input('请输入矩阵A的阶数:n=') A=diag(6*ones(1,n))+diag(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) pause [m,n]=size(A); nb=n+1;Ab=[A b] r=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('输入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); pause end x=zeros(n,1);x(n)=Ab(n,nb)/Ab(n,n); for i=n-1:-1:1
解线性方程组的直接方法
实验 (主元的选取与算法的稳定性) 问题提出:Gauss消去法是我们在线性代数中已经熟悉的。但由于计算 机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保 Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值 算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它 却是数值分析中十分典型的问题。 实验内容:考虑线性方程组 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的 Gauss消去过程。 实验要求: (1)取矩阵,则方程有解。取n=10计算矩阵的条件数。让程序自动选 取主元,结果如何? (2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最 小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去 过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。 (3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析 不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元
什么现象,哪些根关于的变化更敏感?
思考题一:(上述实验的改进) 在上述实验中我们会发现用roots函数求解多项式方程的精度不高,为此你可以考虑用符号 函数solve来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具 体使用方法可参考Matlab的帮助。
实验过程:
程序: a=poly(1:20); rr=roots(a); for n=2:21 n for m=1:9 ess=10^(-6-m); ve=zeros(1,21); ve(n)=ess; r=roots(a+ve); -6-m s=max(abs(r-rr)) end end 利用符号函数:(思考题一) a=poly(1:20); y=poly2sym(a); rr=solve(y) for n=2:21 n for m=1:8 ess=10^(-6-m); ve=zeros(1,21); ve(n)=ess; a=poly(1:20)+ve; y=poly2sym(a); r=solve(y); -6-m s=max(abs(r-rr)) end
y0=atan(x0); end x=sym('x');n=length(x0); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(x-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y=s; if mm==1 ezplot('1/(1+25*x^2)') elseif mm==2 ezplot('x/(1+x^4)') elseif mm==3 ezplot('atan(x)') end hold on ezplot(y,[-d,d]) hold off 保存为:largrang.m
1)π/(2(n+1))),k=1,2,^,n+1 以x1,x2^x(n+1)为插值节点构造上述各函数的拉格朗日插值 多项式,比较其结果。
实验过程:
程序: 多项式插值的震荡现象(实验2.1) for m=1:6 subplot(2,3,m) %把窗口分割成2*3大小的窗口 largrang(6*m) %对largrang函数进行运行 if m==1 title('longn=6') elseif m==2 title('longn=12') elseif m==3 title('longn=18') elseif m==4 title('longn=24') elseif m==5 title('longn=30') elseif m==6 title('longn=36') end %对每个窗口分别写上标题为插值点的个数 end 保存为:chazhi.m function largrang(longn) mm=input('please input mm(运行第几个函数就输入mm为几):mm=') if mm==1 %d表示定义域的边界值 d=1; elseif mm==2||mm==3 d=5; end x0=linspace(-d,d,longn); %x的节点 if mm==1 y0=1./(1.+25.*x0.^2); elseif mm==2 y0=x0./(1.+x0.^4); elseif mm==3
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13 -14
1.69376699767424 0.92310666706964 0.08471614569741 0.40804026409411
0.03877676439380 0.16256584868280 0.13322664013598 0.02164258317546
0 0 0 0 0 0 0 0 0 0 0
0
0 0 0 0
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
实验总结:
利用MATLAB来进行病态问题的实验,虽然其得出的结果是有误差 的,但是可以很容易的得出对一个多次的代数多项式的其中某一项进行 很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问 题可以借助于MATLAB来进行问题的分析。
插值法
实验2.1(多项式插值的振荡现象) 问题提出:考虑一个固定的区间上用插值逼近一个函数。显然拉格朗日 插值中使用的节点越多,插值多项式的次数就越高。 我们自然关心插 值多项式的次数增加时,L(x)是否也更加靠近被逼近的函数。龙格给出 了一个极著名例子。设区间[-1,1]上函数 f(x)=1/(1+25x^2) 实验内容:考虑区间[-1,1]的一个等距划分,分点为: x(i)=-1+2i/n,i=0,1,2…,n 泽拉格朗日插值多项式为: L(x)=∑l(i)(x)/(1+25x(j)^2 ) i=0,1,…n 其中l(i)(x), i=0,1,…n,n是n次拉格朗日插值基函数。 实验要求: ⑴ 选择不断增大的分点数目n=2,3…,画出f(x)及插值多项式函 数L(x)在[-1,1]上的图象,比较分析实验结果。 (2)选择其它的函数,例如定义在区间[-5,5]上的函数 h(x)=x/(1+x^4) , g(x)=arctanx 重复上述的实验看其结果如何。 (3)区间[a,b]上切比雪夫点的定义为: xk=(b+a)/2+((b-a)/2)cos((2k-
实验要求:
(1) 选择充分小的ess,反复进行上述实验,记录结果的变化 并分析它们。如果扰动项的系数很小,我们自然感觉 (1.1)和(1.2)的解应当相差很小。计算中你有什么出 乎意料的发现?表明有些解关于如此的扰动敏感性如 何? (2) 将方程(1.2)中的扰动项改成或其它形式,实验中又有 怎样的现象出现? (3) (选作部分)请从理论上分析产生这一问题的根源。注 意我们可以将方程(1.2)写成展开的形式, 同时将方程的解x看成是系数的函数,考察方程的某个解关于的扰 动是否敏感,与研究它关于的导数的大小有何关系?为什么?你发现了
Байду номын сангаас
end
数值实验结果及分析:
format long
-6m n 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 -6m n 2 3 4 5 6 -7 -8 -9
2.79722687478331 1.86753632009158 1.06052762380748 0.25273144219047 0.85401393415536 0.19941022020061 0.03972935295834 0.11031100538871 0.04296532362844
相关文档
最新文档