您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数值分析上机题目详解
第一章一、题目设NNjS2j211,其精确值为)11123(21NN。1)编制按从大到小的顺序11131121222NSN,计算SN的通用程序。2)编制按从小到大的顺序1211)1(111222NNSN,计算SN的通用程序。3)按两种顺序分别计算64210,10,10SSS,并指出有效位数。(编制程序时用单精度)4)通过本次上机题,你明白了什么?二、通用程序N=input('PleaseInputanN(N1):');AccurateValue=single((0-1/(N+1)-1/N+3/2)/2);Sn1=single(0);fora=2:N;Sn1=Sn1+1/(a^2-1);endSn2=single(0);fora=2:N;Sn2=Sn2+1/((N-a+2)^2-1);endfprintf('ThevalueofSn(N=%d)\n',N);fprintf('AccurateCalculation%f\n',AccurateValue);fprintf('Caculatefromlargetosmall%f\n',Sn1);fprintf('Caculatefromsmalltolarge%f\n',Sn2);disp('____________________________________________________')三、结果从结果可以看出有效位数是6位。感想:可以得出,算法对误差的传播有一定的影响,在计算时选一种好的算法可以使结果更为精确。从以上的结果可以看到从大到小的顺序导致大数吃小数的现象,容易产生较大的误差,求和运算从小数到大数所得到的结果才比较准确。第二章一、题目(1)给定初值0x及容许误差,编制Newton法解方程f(x)=0的通用程序。(2)给定方程03)(3xxxf,易知其有三个根3,0,3321xxxa)由Newton方法的局部收敛性可知存在,0当),(0x时,Newton迭代序列收敛于根x2*。试确定尽可能大的。b)试取若干初始值,观察当),1(),1,(),,(),,1(),1,(0x时Newton序列的收敛性以及收敛于哪一个根。(3)通过本上机题,你明白了什么?二、通用程序1、定义函数和导函数%%定义函数f(x)functionFx=fx(x)Fx=x^3/3-x;----------------------------------%%定义导函数df(x)functionFx=dfx(x)Fx=x^2-1;2、寻找最大的clearflag=1;k=1;x0=0;whileflag==1delta=k*10^-6;x0=delta;k=k+1;m=0;flag1=1;whileflag1==1&&m=10^3x1=x0-fx(x0)/dfx(x0);ifabs(x1-x0)10^-6flag1=0;endm=m+1;x0=x1;endifflag1==1||abs(x0)=10^-6flag=0;endendfprintf('Themaximundeltais%f\n',delta);3、Newton法求方程的根clearef=10^-6;%%给定容许误差10^-6k=0;x0=input('PleaseinputinitialvalueXo:');disp('kXk');fprintf('0%f\n',x0);flag=1;whileflag==1&&k=10^3x1=x0-fx(x0)/dfx(x0);ifabs(x1-x0)efflag=0;endk=k+1;x0=x1;fprintf('%d%f\n',k,x0);end三、结果寻找最大的δ值:在题目给出的不同区间内进行牛顿迭代:综上所述:首先得到最大的δ值为0.774597。在各区间任意取初值进行迭代得到(-∞,-1)区间收敛于-1.73205,(-1,-δ)区间局部收敛于0,(-δ,δ)区间收敛于0,(δ,1)区间类似于(-1,δ)区间,收敛于0,(1,∞)收敛于1.73205。感想:通过本上机题,了解到用Newton法求多根方程的根时,迭代序列收敛于某一个根有一定的区间限制。如果不清楚这个限制随意取值的话,会出现在一个区间上局部收敛于不同的根的情况。如下面的迭代:第三章一、题目列主元Gauss消去法对于某电路的分析,归结为求解线性方程组RIV。其中3113000100001335901100000931100000000107930000900030577050000074730000000030410000005002720009000229R15,27,23,0,20,12,7,7,10TTV(1)编制解n阶线性方程组Axb的列主元高斯消去法的通用程序;(2)用所编程序线性方程组RIV,并打印出解向量,保留5位有效数;二、通用程序%%列主元Gauss消去法求解线性方程组%%%%参数输入n=input('PleaseinputtheorderofmatrixA:n=');%输入线性方程组阶数nb=zeros(1,n);A=input('InputmatrixA(suchasa2ordermatrix:[12;3,4]):');b(1,:)=input('Inputthecolumnvectorb:');%输入行向量bb=b';C=[A,b];%得到增广矩阵%%列主元消去得上三角矩阵fori=1:n-1[maximum,index]=max(abs(C(i:n,i)));index=index+i-1;T=C(index,:);C(index,:)=C(i,:);C(i,:)=T;fork=i+1:n%%列主元消去ifC(k,i)~=0C(k,:)=C(k,:)-C(k,i)/C(i,i)*C(i,:);endendend%%回代求解%%x=zeros(n,1);x(n)=C(n,n+1)/C(n,n);fori=n-1:-1:1x(i)=(C(i,n+1)-C(i,i+1:n)*x(i+1:n,1))/C(i,i);endA=C(1:n,1:n);%消元后得到的上三角矩阵disp('Theupperteianguularmatrixis:')fork=1:nfprintf('%f',A(k,:));fprintf('\n');enddisp('Solutionoftheequations:');fprintf('%.5g\n',x);%以5位有效数字输出结果三、求解结果执行程序,输入矩阵A(即题中的矩阵R)和列向量b(即题中的V):由上述结果得:感想:本题用Gauss列主元的方法求出了线性方程组的解,并且精确到5位有效数字。可以看到结果是很精确而且正确的,对于解决立体电路问题的方程求解是一种非常方便快速且精确的方法。总的来说,Guass列主元消去法是一种大大减少了计算步骤和时间的方法。
本文标题:数值分析上机题目详解
链接地址:https://www.777doc.com/doc-2387461 .html