您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 数值分析作业(完整版)
第一章1、计算积分110,9nxnIxedxn(要求计算结果具有6位有效数字)。Code:clcclearclosealln=9;%--梯形积分法x=0:0.01:1;y=(x.^n).*exp(x-1);In=trapz(x,y);In2=vpa(In,6)%6位有效数字%--高精度积分法F=@(x1)(x1.^n).*exp(x1-1);s=quad(F,0,1);s1=vpa(s,6)运行结果截图:2、第14页,第4题分别将区间10,10分为100,200,400等份,利用mesh或surf命令画出二元函数221cos1xzexyxy的三维图形。Code:clcclearcloseallmax=10;min=-max;N1=100;N2=200;N3=400;n1=(max-min)/100;n2=(max-min)/200;n3=(max-min)/400;%--[-10,10]区间分为100份x1=min:n1:max;y1=x1;[x1,y1]=meshgrid(x1,y1);z1=exp(-abs(x1))+cos(x1+y1)+1./(x1.^2+y1.^2+1);%--[-10,10]区间分为200份x2=min:n2:max;y2=x2;[x2,y2]=meshgrid(x2,y2);z2=exp(-abs(x2))+cos(x2+y2)+1./(x2.^2+y2.^2+1);%--[-10,10]区间分为400份x3=min:n3:max;y3=x3;[x3,y3]=meshgrid(x3,y3);z3=exp(-abs(x3))+cos(x3+y3)+1./(x3.^2+y3.^2+1);%--绘图subplot(1,3,1);mesh(x1,y1,z1);title('[-10,10]区间分为100份')subplot(1,3,2);mesh(x2,y2,z2);title('[-10,10]区间分为200份')subplot(1,3,3);mesh(x3,y3,z3);title('[-10,10]区间分为400份')仿真结果与分析:从仿真结果来看,当区间划分越密时,结果越准确。第二章第61页第1题适用MATLAB软件编程实现矩阵的列主元素三角分解,并求Pascal矩阵111111234513610151410203515153570A的逆阵1A,用左除命令\AE检验你的结果。clcclearcloseallA=[11111;12345;1361015;14102035;15153570];fprintf('对上述矩阵进行列主元素分解:\n')fori=1:1:r-1[mx,ro]=max(abs(A(i:r,i)));%寻找a阵第i列的最大值[A(i,:),A(ro+i-1,:)]=exchange(A(i,:),A(ro+i-1,:));%进行行与行交换forj=i+1:1:rA(j,:)=A(j,:)-A(j,i)/A(i,i)*A(i,:);endA%输出每次交换后的AEnd%--矩阵A的逆阵A1=inv(A)%A阵的逆矩阵%--左除验证E=eye(5);%5x5单位阵A2=A\E仿真结果:对矩阵A进行列主元素分解过程A阵的逆矩阵A1=1A:用左除命令\AE检验结果A2:第三章第89页第1题试分别用(1)Jacobi迭代法;(2)Gauss-Seidel迭代法解线性方程组1234510123412191232721735143231211743511512xxxxx迭代初始向量取00,0,0,0,0Tx。Code:clcclearcloseall%--基本参数设置A=[101234;19-12-3;2-173-5;32312-1;4-3-5-115];b=[12-2714-1712]';x0=[00000]';I=eye(5);A1=triu(A);%A阵的上三角矩阵A2=tril(A);%A阵的下三角矩阵e=10^-5;%迭代精度要求%%fprintf('-----------------准确解--------------------\n');xx=A\b;fprintf('x1=%.0f,x2=%.0f,x3=%.0f,x4=%.0f,x5=%.0f\n',xx(1),xx(2),xx(3),xx(4),xx(5));fprintf('\nJacobi迭代法和Gauss-Seidel迭代法精度要求max|x(k+1)-x(k)|0.00001\n');%%fprintf('\n--------------------Jacobi迭代法----------------------\n');D=A1+A2-A;%A阵的主对角线元素构成的矩阵D_1=inv(D);%D的转置M=I-D_1*A;b1=D_1*b;x(:,1)=M*x0+b1;fori=2:1:100x(:,i)=M*x(:,i-1)+b1;er(:,i-1)=x(:,i)-x(:,i-1);ifabs(er(:,i-1))=efprintf('在迭代%d次之后,满足精度要求,x向量的值如下:\n',i);fprintf('x1=%.5f,x2=%.5f,x3=%.5f,x4=%.5f,x5=%.5f\n',x(1,i),x(2,i),x(3,i),x(4,i),x(5,i));breakendend%--绘图figure(1)plot(1:1:i,x(1,:),'b',1:1:i,x(2,:),'k',1:1:i,x(3,:),'g',1:1:i,x(4,:),'r',1:1:i,x(5,:),'c')legend('x1','x2','x3','x4','x5')gridontitle('Jacobi迭代法——x值随迭代次数变化曲线')figure(2)plot(1:1:i-1,er(1,:),'b',1:1:i-1,er(2,:),'k',1:1:i-1,er(3,:),'g',1:1:i-1,er(4,:),'r',1:1:i-1,er(5,:),'c')legend('△x1','△x2','△x3','△x4','△x5')gridontitle('Jacobi迭代法——△x值随迭代次数变化曲线')%%fprintf('\n-------------Gauss-Seidel迭代法---------------------\n');U=-(A1-D);L=-(A2-D);DL_1=inv(D-L);M1=DL_1*U;b2=DL_1*b;x1(:,1)=M1*x0+b2;forj=2:1:100x1(:,j)=M1*x1(:,j-1)+b2;er1(:,j-1)=x1(:,j)-x1(:,j-1);ifabs(er1(:,j-1))=efprintf('在迭代%d次之后,满足精度要求,x向量的值如下:\n',j);fprintf('x1=%.5f,x2=%.5f,x3=%.5f,x4=%.5f,x5=%.5f\n',x1(1,j),x1(2,j),x1(3,j),x1(4,j),x1(5,j));breakendend%--绘图figure(3)plot(1:1:j,x1(1,:),'b',1:1:j,x1(2,:),'k',1:1:j,x1(3,:),'g',1:1:j,x1(4,:),'r',1:1:j,x1(5,:),'c')legend('x1','x2','x3','x4','x5')gridontitle('Gauss-Seidel迭代法——x值随迭代次数变化曲线')figure(4)plot(1:1:j-1,er1(1,:),'b',1:1:j-1,er1(2,:),'k',1:1:j-1,er1(3,:),'g',1:1:j-1,er1(4,:),'r',1:1:j-1,er1(5,:),'c')legend('△x1','△x2','△x3','△x4','△x5')gridontitle('Gauss-Seidel迭代法——△x值随迭代次数变化曲线')%%%--收敛速度对比ifijfprintf('\nJacobi迭代法收敛速度更快。\n');elseifijfprintf('\nGauss-Seidel迭代法收敛速度更快。\n');elsefprintf('\nJacobi迭代法和Gauss-Seidel迭代法收敛速度基本相同。\n');end仿真结果及曲线:第四章第121页第2题设126661626216A,取01,1,1Tx,先用幂法迭代3次,得到A的按模最大特征值的近似值,取*为其整数部分,再用反幂法计算A的按模最大特征值的更精确的近似值,要求误差小于1010。Code:clcclearcloseallA=[126-6;6162;-6216];x0=[111]';fprintf('------------矩阵A的特征值精确值----------------\n');aa=eig(A);fprintf('λ1=%f,λ2=%f,λ3=%f\n',aa(1),aa(2),aa(3));%%%--幂法迭代求取A的按模最大特征值n=3;%迭代次数x(:,1)=A*x0;fori=1:1:na(i)=max(x(:,i));int_a(i)=floor(a(i));%对a进行取整操作y(:,i)=x(:,i)/a(i);x(:,i+1)=A*y(:,i);endfprintf('\n-----幂法迭代%d次,得到A的按模最大特征值依次为------\n',n);forj=1:1:nfprintf('第%d次,a%d=%d\n',j,j,int_a(j));end%%%--反幂法迭代求取A的按模最小特征值e=10^-10;%迭代精度要求A_1=inv(A);x1(:,1)=A_1*x0;fork=1:1:100a1(k)=max(abs(x1(:,k)));a11(k)=1/a1(k);ifk=2ifabs(a11(k)-a11(k-1))ebreakendendy1(:,k)=x1(:,k)/a1(k);x1(:,k+1)=A_1*y1(:,k);endfprintf('\n-----反幂法迭代%d次,得到A的按模最小特征值依次为------\n',k);forj=1:1:kfprintf('第%d次,a%d=%.11f\n',j,j,a11(j));end仿真结果:第五章第175页第1题试编写MATLAB函数实现Newton插值,要求能输出插值多项式。对函数2114fxx在区间5,5上实现10次多项式插值。要求:(1)输出插值多项式。(2)在区间5,5内均匀插入99个节点,计算这些节点上函数fx的近似值,并在同一张图上画出原函数和插值多项式的图形。(3)观察龙格现象,计算插值函数在各节点处的误差,并画出误差图。解:n阶Newton插值多项式0102010121...nnnNxbbxxbxxxxbxxxxxxxx001012012011,,,,,...,,nnnbfxbfxxbfxxxbfxxxxCode:clcclearcloseallx=-5:1:5;y=1./(1+4*(x.^2));n=length(x);d=zeros(n,n);d(:,1)=y';forj=2:nfork=j:nd(k,j)=(d(k,j-1)-d(k-1,j-1))/(x(k)-x(k-j+1));endendc=d(n,n);fork=(n-1):-1:1c=conv(c,poly(x(k)));m=length(c);c(m)=c(m)+d(k,
本文标题:数值分析作业(完整版)
链接地址:https://www.777doc.com/doc-7209504 .html