收藏 分销(赏)

东南大学-数值分析上机题作业-MATLAB版.docx

上传人:精*** 文档编号:4508340 上传时间:2024-09-26 格式:DOCX 页数:38 大小:76.39KB 下载积分:12 金币
下载 相关 举报
东南大学-数值分析上机题作业-MATLAB版.docx_第1页
第1页 / 共38页
东南大学-数值分析上机题作业-MATLAB版.docx_第2页
第2页 / 共38页


点击查看更多>>
资源描述
东南大学-数值分析上机题作业-MATLAB版 2015.1.9 上机作业题报告 USER 1.Chapter 1 1.1题目 设SN=j=2N1j2-1,其精确值为。 (1)编制按从大到小的顺序,计算SN的通用程序。 (2)编制按从小到大的顺序,计算SN的通用程序。 (3)按两种顺序分别计算,并指出有效位数。(编制程序时用单精度) (4)通过本次上机题,你明白了什么? clear; N=input('请输入N值:'); Ac=single((3/2-1/N-1/(N+1))/2); Snl2s=single(0); Sns2l=single(0); for i=2:N Snl2s=Snl2s+1/(i*i-1); end for i=N:-1:2 Sns2l=Sns2l+1/(i*i-1); end fprintf('精确值为: %f\n',Ac); fprintf('从大到小的顺序累加得SN=%f\n',Snl2s); fprintf('从小到大的顺序累加得SN=%f\n',Sns2l); disp('========================================================'); 1.2程序 >> P20T17 请输入N值:10^2 精确值为: 0.740049 从大到小的顺序累加得SN=0.740049 从小到大的顺序累加得SN=0.740050 ============================================================ >> P20T17 请输入N值:10^4 精确值为: 0.749900 从大到小的顺序累加得SN=0.749852 1.3运行结果 从小到大的顺序累加得SN=0.749900 ============================================================ >> P20T17 请输入N值:10^6 精确值为: 0.749999 从大到小的顺序累加得SN=0.749852 从小到大的顺序累加得SN=0.749999 ============================================================ 1.4结果分析 按从大到小的顺序,有效位数分别为:6,4,3。 按从小到大的顺序,有效位数分别为:5,6,6。 可以看出,不同的算法造成的误差限是不同的,好的算法可以让结果更加精确。当采用从大到小的顺序累加的算法时,误差限随着N的增大而增大,可见在累加的过程中,误差在放大,造成结果的误差较大。因此,采取从小到大的顺序累加得到的结果更加精确。 2.Chapter 2 2.1题目 (1)给定初值及容许误差,编制牛顿法解方程f(x)=0的通用程序。 (2)给定方程,易知其有三个根 由牛顿方法的局部收敛性可知存在当时,Newton迭代序列收敛于根x2*。试确定尽可能大的δ。 试取若干初始值,观察当时Newton序列的收敛性以及收敛于哪一个根。 (3)通过本上机题,你明白了什么? 2.2程序 f(x)函数m文件:fu.m function Fu=fu(x) Fu=x^3/3-x; end f'(x)函数m文件:dfu.m function Fu=dfu(x) Fu=x^2-1; end 用Newton法求根的通用程序Newton.m clear; x0=input('请输入初值x0:'); ep=input('请输入容许误差:'); flag=1; while flag==1 x1=x0-fu(x0)/dfu(x0); if abs(x1-x0)<ep flag=0; end x0=x1; end fprintf('方程的一个近似解为:%f\n',x0); 寻找最大δ值的程序:Find.m clear eps=input('请输入搜索精度:'); ep=input('请输入容许误差:'); flag=1; k=0; x0=0; while flag==1 sigma=k*eps; x0=sigma; k=k+1; m=0; flag1=1; while flag1==1 && m<=10^3 x1=x0-fu(x0)/dfu(x0); if abs(x1-x0)<ep flag1=0; end m=m+1; x0=x1; end if flag1==1||abs(x0)>=ep flag=0; end end fprintf('最大的sigma值为:%f\n',sigma); 2.3运行结果 (1)寻找最大的δ值。 算法为:将初值x0在从0开始不断累加搜索精度eps,带入Newton迭代公式,直到求得的根不再收敛于0为止,此时的x0值即为最大的sigma值。运行Find.m,得到在不同的搜索精度下的最大sigma值。 >> Find 请输入搜索精度:10^-6 请输入容许误差:10^-6 最大的sigma值为:0.774597 >> Find 请输入搜索精度:10^-4 请输入容许误差:10^-6 最大的sigma值为:0.774600 >> Find 请输入搜索精度:10^-2 请输入容许误差:10^-6 最大的sigma值为:0.780000 (2)运行Newton.m 在(-∞,-1)内取初值,运行结果如下: X0 Xk -1000 -1.732051 -500 -1.732051 -100 -1.732051 -10 -1.732051 -5 -1.732051 -2.5 -1.732051 -1.5 -1.732051 可见,在(-∞,-1)区间内取初值,Newton序列收敛,且收敛于根-3。 在(-1,-δ)内取初值,运行结果如下: X0 Xk -0.95 1.732051 -0.85 1.732051 -0.8 1.732051 -0.774598 1.732051 可见,在(-1,-δ)内取初值,Newton序列收敛,且收敛于根3。 在(-δ,δ)内内取初值,运行结果如下: X0 Xk -0.774596 0.000000 -0.55 0.000000 -0.35 0.000000 -0.15 0.000000 0.05 0.000000 0.25 0.000000 0.45 0.000000 0.65 0.000000 0.774596 0.000000 可见,在(-δ,δ)内取初值,Newton序列收敛,且收敛于根0。 在(δ,1)内取初值,运行结果如下: X0 Xk 0.774598 -1.732051 0.8 -1.732051 0.85 -1.732051 0.95 -1.732051 可见,在(δ,1)内取初值,Newton序列收敛,且收敛于根-3 在(1,+∞)内取初值,运行结果如下: X0 Xk 1.5 1.732051 2.5 1.732051 5 1.732051 10 1.732051 100 1.732051 500 1.732051 1000 1.732051 可见,在(1,+∞)内取初值,Newton序列收敛,且收敛于根3 3.Chapter 3 3.1题目 对于某电路的分析,归结为求解线性方程组RI=V,其中 (1)编制解n阶线性方程组Ax=b的列主元高斯消去法的通用程序; (2)用所编程序线性方程组RI=V,并打印出解向量,保留5位有效数字; (3)本题编程之中,你提高了哪些编程能力? 3.2程序 n=input('请输入线性方程组阶数: n='); b=zeros(1,n); A=input('请输入系数矩阵:A=\n'); b(1,:)=input('请输入线性方程组右端向量:b=\n'); b=b'; C=[A,b]; for i=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; for k=i+1:n if C(k,i)~=0 C(k,:)=C(k,:)-C(k,i)/C(i,i)*C(i,:); end end end %%回代求解 x=zeros(n,1); x(n)=C(n,n+1)/C(n,n); for i=n-1:-1:1 x(i)=(C(i,n+1)-C(i,i+1:n)*x(i+1:n,1))/C(i,i); end disp('方程组的解为:'); fprintf('%.5g\n',x); 3.3运行结果 运行程序,输入系数矩阵和方程组右端列向量。运行过程与结果如下图所示: >> P126T39 请输入线性方程组阶数: n=4 请输入系数矩阵:A= [136.01 90.86 0 0;90.86 98.81 -67.59 0;0 -67.59 132.01 46.26 ;0 0 46.26 177.17] 请输入线性方程组右端向量:b= [-33.254 49.79 28.067 -7.324] 方程组的解为: -2957.4 4426.6 2495 -651.49 >> P126T39 请输入线性方程组阶数: n=9 请输入系数矩阵:A= [31 -13 0 0 0 -10 0 0 0;-13 35 -9 0 -11 0 0 0 0;0 -9 31 -10 0 0 0 0 0;0 0 -10 79 -30 0 0 0 -9;0 0 0 -30 57 -7 0 -5 0;0 0 0 0 -7 47 -30 0 0;0 0 0 0 0 -30 41 0 0;0 0 0 0 -5 0 0 27 -2;0 0 0 -9 0 0 0 -2 29] 请输入线性方程组右端向量:b= [-15 27 -23 0 -20 12 -7 7 10] 方程组的解为: -0.28923 0.34544 -0.71281 -0.22061 -0.4304 0.15431 -0.057823 0.20105 0.29023 可看出,算得的该线性方程组的解向量为: [-0.28923 0.34544 -0.71281 -0.22061 -0.4304 0.15431 -0.057823 0.20105 0.29023] 4.Chapter 4 4.1题目 (1)编制求第一型3次样条插值函数的通用程序; (2)已知汽车门曲线型值点的数据如下: i 0 1 2 3 4 5 6 7 8 9 10 Xi 0 1 2 3 4 5 6 7 8 9 10 Yi 2.51 3.30 4.04 4.70 5.22 5.54 5.78 5.40 5.57 5.70 5.80 端点条件为y0'=0.8, y10'=0.2,用所编程序求车门的3次样条插值函数S(x),并打印出S(i+0.5),i=0,1,…,9。 4.2程序 clear digits(6); n=input('请输入节点数:n='); xn=zeros(1,n); yn=zeros(1,n); xn(1,:)=input('请输入节点坐标:'); yn(1,:)=input('请输入节点处函数值:'); dy0=input('请输入左边界条件:y’(x0)='); dyn=input('请输入右边界条件:y’(xn)='); %====================求d====================% d=zeros(n,1); h=zeros(1,n-1); f1=zeros(1,n-1); f2=zeros(1,n-2); for i=1:n-1 h(i)=xn(i+1)-xn(i); f1(i)=(yn(i+1)-yn(i))/h(i); end for i=2:n-1 f2(i)=(f1(i)-f1(i-1))/(xn(i+1)-xn(i-1)); d(i)=6*f2(i); end d(i)=6*(f1(1)-dy0)/h(1); d(n)=6*(dyn-f1(n-1))/h(n-1); %====================求Mi====================% A=zeros(n); miu=zeros(1,n-2); lamda=zeros(1,n-2); for i=1:n-2 miu(i)=h(i)/(h(i)+h(i+1)); lamda(i)=1-miu(i); end A(1,2)=1; A(n,n-1)=1; for i=1:n A(i,i)=2; end for i=2:n-1 A(i,i-1)=miu(i-1); A(i,i+1)=lamda(i-1); end M=A\d; %====================回代求插值函数====================% syms x; for i=1:n-1; Sx(i)=collect(yn(i)+(f1(i)-(M(i)/3+M(i+1)/6)*h(i))*(x-xn(i))+M(i)/2*(x-xn(i))^2+(M(i+1)-M(i))/(6*h(i))*(x-xn(i))^3); Sx(i)=vpa(Sx(i),6); end S=zeros(1,n-1); for i=1:n-1 x=xn(i)+0.5; S(i)=yn(i)+(f1(i)-(M(i)/3+M(i+1)/6)*h(i))*(x-xn(i))+M(i)/2*(x-xn(i))^2+(M(i+1)-M(i))/(6*h(i))*(x-xn(i))^3; end %====================打印结果====================% disp('S(x)='); for i=1:n-1 format short; fprintf(' %s (%d<x<%d)\n',char(Sx(i)),xn(i),xn(i+1)); disp('======================================================================'); end disp('S(i+0.5)') disp(' i x(i+0.5) S(i+0.5)'); for i=1:n-1 fprintf(' %d %.5f %.5f\n',i,xn(i)+0.5,S(i)); end 4.3运行结果 >> P195T37 请输入节点数:n=11 请输入节点坐标:[0 1 2 3 4 5 6 7 8 9 10] 请输入节点处函数值:[2.51 3.30 4.04 4.70 5.22 5.54 5.78 5.40 5.57 5.70 5.80] 请输入左边界条件:y’(x0)=0.8 请输入右边界条件:y’(xn)=0.2 S(x)= 0.79*x + 0.0158344*x^2 - 0.0158344*x^3 + 2.51 (0<x<1) ====================================================================== 0.830013*x - 0.0241785*x^2 - 0.00249676*x^3 + 2.49666 (1<x<2) ====================================================================== 0.809832*x - 0.0140879*x^2 - 0.00417854*x^3 + 2.51012 (2<x<3) ====================================================================== 0.315407*x^2 - 0.178653*x - 0.0407891*x^3 + 3.4986 (3<x<4) ====================================================================== 6.9313*x - 1.46208*x^2 + 0.107335*x^3 - 5.98133 (4<x<5) ====================================================================== 4.1762*x^2 - 21.2601*x - 0.26855*x^3 + 41.0043 (5<x<6) ====================================================================== 53.8449*x - 8.3413*x^2 + 0.426866*x^3 - 109.206 (6<x<7) ====================================================================== 6.27011*x^2 - 48.435*x - 0.268915*x^3 + 129.447 (7<x<8) ====================================================================== 14.4854*x - 1.59494*x^2 + 0.0587951*x^3 - 38.3403 (8<x<9) ====================================================================== 13.2458*x - 1.45831*x^2 + 0.053735*x^3 - 34.5615 (9<x<10) ====================================================================== S(i+0.5) i x(i+0.5) S(i+0.5) 1 0.50000 2.90698 2 1.50000 3.67885 3 2.50000 4.38136 4 3.50000 4.98822 5 4.50000 5.38326 6 5.50000 5.72372 7 6.50000 5.59435 8 7.50000 5.43012 9 8.50000 5.65892 10 9.50000 5.73172 5.Chapter 5 5.1题目 用Romberg求积法计算积分 -1111+100x2dx 的近似值,要求误差不超过0.5×10-7。 5.2程序 %被积函数m文件:fx.m function Fx=fx(x) Fx=1/(1+100*x*x); end %Romberg求积法计算积分的通用程序 function Romberg() clear; a=input('请输入积分下限:a='); b=input('请输入积分上限:b='); eps=input('请输入允许精度:eps='); %========计算Tn========% function Tn=T(n) Tn=0; h=(b-a)/n; x=zeros(1,n+1); for k=1:n+1 x(k)=a+(k-1)*h; end for j=1:n Tn=Tn+h*(fx(x(j))+fx(x(j+1)))/2; end end %========计算Sn========% function Sn=S(n) Sn=4/3*T(2*n)-1/3*T(n); end %========计算Cn========% function Cn=C(n) Cn=16/15*S(2*n)-1/15*S(n); end %========计算Rn========% function Rn=R(n) Rn=64/63*C(2*n)-1/63*C(n); end %========计算满足允许精度的Rn,并打印输出========% i=1; flag=1; while flag==1 if abs(R(2^i)-R(2^(i-1)))/255<eps flag=0; end i=i+1; end fprintf('该积分的值为:%f\n', R(2^(i-1))); end 5.3运行结果 >> Romberg 请输入积分下限:a=-1 请输入积分上限:b=1 请输入允许精度:eps=0.5*10^-7 该积分的值为:0.2942255 5.4结果分析 手动化简该定积分并最终求得的值为:0.294225534860747,误差限为:3.486×10-8,可见,程序完成了计算要求。 6.Chapter 6 6.1题目 常微分方程初值问题数值解 (1)编制RK4方法的通用程序; (2)编制AB4方法的通用程序(由RK4提供初值); (3)编制AB4-AM4预测校正方法通用程序(由RK4提供初值); (4)编制带改进的AB4-AM4预测校正方法通用程序(由RK4提供初值); (5)对于初值问题 y'=-x2y2y0=3 取步长h=0.1,应用(1)-(4)中的四种方法进行计算,并将计算结果和精确解yx=3/(1+x3)作比较; (6)通过本上机题,你能得到哪些结论? 6.2程序 %f(x,y)函数m文件:fxy.m function FXY=fxy(x,y) FXY=-x*x*y*y; end %精确解y(x)函数m文件:fx.m function FX=fx(x) FX=3/(1+x*x*x); end %RK4法通用程序 function RK4() clear; x(1)=input('请输入初始x值:x0='); y(1)=input('请输入初值条件:y(x0)='); N=input('请输入计算步长:N='); h=input('请输入步长:h='); for i=1:N-1 x(i+1)=x(i)+h; k1=fxy(x(i),y(i)); k2=fxy(x(i)+0.5*h,y(i)+0.5*h*k1); k3=fxy(x(i)+0.5*h,y(i)+0.5*h*k2); k4=fxy(x(i)+h,y(i)+h*k3); y(i+1)=y(i)+h/6*(k1+2*k2+2*k3+k4); end disp('i xi yi y(xi) y(xi)-yi'); disp('-------------------------------------------------------------'); for i=1:N fprintf('%d %f %f %f %f\n',i,x(i),y(i),fx(x(i)),fx(x(i))-y(i)); disp('-------------------------------------------------------------'); end end %AB4法通用程序 function AB4() clear; x(1)=input('请输入初始x值:x0='); y(1)=input('请输入初值条件:y(x0)='); N=input('请输入计算步长:N='); h=input('请输入步长:h='); for i=1:N-1 x(i+1)=x(i)+h; k1=fxy(x(i),y(i)); k2=fxy(x(i)+0.5*h,y(i)+0.5*h*k1); k3=fxy(x(i)+0.5*h,y(i)+0.5*h*k2); k4=fxy(x(i)+h,y(i)+h*k3); y(i+1)=y(i)+h/6*(k1+2*k2+2*k3+k4); end for i=4:N-1 y(i+1)=y(i)+h/24*(55*fxy(x(i),y(i))-59*fxy(x(i-1),y(i-1))+37*fxy(x(i-2),y(i-2))-9*fxy(x(i-3),y(i-3))); end disp('i xi yi y(xi) y(xi)-yi'); disp('-------------------------------------------------------------'); for i=1:N fprintf('%d %f %f %f %f\n',i,x(i),y(i),fx(x(i)),fx(x(i))-y(i)); disp('-------------------------------------------------------------'); end end %AB4-AM4预测校正法通用程序 function AB4AM4() clear; x(1)=input('请输入初始x值:x0='); y(1)=input('请输入初值条件:y(x0)='); N=input('请输入计算步长:N='); h=input('请输入步长:h='); for i=1:N-1 x(i+1)=x(i)+h; k1=fxy(x(i),y(i)); k2=fxy(x(i)+0.5*h,y(i)+0.5*h*k1); k3=fxy(x(i)+0.5*h,y(i)+0.5*h*k2); k4=fxy(x(i)+h,y(i)+h*k3); y(i+1)=y(i)+h/6*(k1+2*k2+2*k3+k4); end for i=4:N-1 yp(i+1)=y(i)+h/24*(55*fxy(x(i),y(i))-59*fxy(x(i-1),y(i-1))+37*fxy(x(i-2),y(i-2))-9*fxy(x(i-3),y(i-3))); y(i+1)=y(i)+h/24*(9*fxy(x(i+1),yp(i+1))+19*fxy(x(i),y(i))-5*fxy(x(i-1),y(i-1))+fxy(x(i-2),y(i-2))); end disp('i xi yi y(xi) y(xi)-yi'); disp('-------------------------------------------------------------'); for i=1:N fprintf('%d %f %f %f %f\n',i,x(i),y(i),fx(x(i)),fx(x(i))-y(i)); disp('-------------------------------------------------------------'); end end %带改进的AB4-AM4预测校正方法 function AB4AM4plus() clear; x(1)=input('请输入初始x值:x0='); y(1)=input('请输入初值条件:y(x0)='); N=input('请输入计算步长:N='); h=input('请输入步长:h='); for i=1:N-1 x(i+1)=x(i)+h; k1=fxy(x(i),y(i)); k2=fxy(x(i)+0.5*h,y(i)+0.5*h*k1); k3=fxy(x(i)+0.5*h,y(i)+0.5*h*k2); k4=fxy(x(i)+h,y(i)+h*k3); y(i+1)=y(i)+h/6*(k1+2*k2+2*k3+k4); end for i=4:N-1 yp(i+1)=y(i)+h/24*(55*fxy(x(i),y(i))-59*fxy(x(i-1),y(i-1))+37*fxy(x(i-2),y(i-2))-9*fxy(x(i-3),y(i-3))); yc(i+1)=y(i)+h/24*(9*fxy(x(i+1),yp(i+1))+19*fxy(x(i),y(i))-5*fxy(x(i-1),y(i-1))+fxy(x(i-2),y(i-2))); y(i+1)=251/270*yc(i+1)+19/270*yp(i+1); end disp('i xi yi y(xi) y(xi)-yi'); disp('-------------------------------------------------------------'); for i=1:N fprintf('%d %f %f %f %f\n',i,x(i),y(i),fx(x(i)),fx(x(i))-y(i)); disp('-------------------------------------------------------------'); end end 6.3运行结果 (1)RK4法 >> RK4 请输入初始x值:x0=0 请输入初值条件:y(x0)=3 请输入计算步数:N=15 请输入步长:h=0.1 i xi yi y(xi) y(xi)-yi ------------------------------------------------------------- 1 0.000000 3.000000 3.000000 0.000000 ------------------------------------------------------------- 2 0.100000 2.997003 2.997003 0.000000 ------------------------------------------------------------- 3 0.200000 2.976190 2.976190 0.000000 ------------------------------------------------------------- 4 0.300000 2.921129 2.921130 0.000001 ------------------------------------------------------------- 5 0.400000 2.819547 2.819549 0.000002 ------------------------------------------------------------- 6 0.500000 2.666663 2.666667 0.000003 ------------------------------------------------------------- 7 0.600000 2.467100 2.467105 0.000005 ------------------------------------------------------------- 8 0.700000 2.233799 2.233805 0.000006 ------------------------------------------------------------- 9 0.800000 1.984123 1.984127 0.000004 ------------------------------------------------------------- 10 0.900000 1.735107 1.735107 -0.000000 ------------------------------------------------------------- 11
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服