北京科技大学计算方法大作业(共22页).doc

上传人:飞****2 文档编号:16288203 上传时间:2022-05-16 格式:DOC 页数:22 大小:520.50KB
返回 下载 相关 举报
北京科技大学计算方法大作业(共22页).doc_第1页
第1页 / 共22页
北京科技大学计算方法大作业(共22页).doc_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《北京科技大学计算方法大作业(共22页).doc》由会员分享,可在线阅读,更多相关《北京科技大学计算方法大作业(共22页).doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上计算方法大作业机械电子工程系老师:廖福成注:本文本只有程序题,证明题全部在手写已交到理化楼204了。2. 证明方程 在上有一实根,并用二分法求这个根。要求。请给出程序和运行结果。证明:设f(x)=x3-x-1则f(1)= -1, f(2)= 5,f(1)*f(2)= -50因此,方程在1,2上必有一实根。二分法求解程序:%预先定义homework2.m文件如下:function lc=homework2(x)lc=x3-x-1;在MALAB窗口运行:cleara=1;b=2;tol=10(-3);N=10000;k=0; fa=homework2(a); % f 需事

2、先定义for k=1:Np=(a+b)/2; fp=homework2(p);if( fp=0 | (b-a)/2tol)breakendif fa*fp0 b=p; else a=p; endendk,p程序运行结果:k = 10p = 1.00003. 用Newton迭代法求方程 的一个正根,计算结果精确到7位有效数字. 要求给出程序和运行结果. 解:取迭代初值 ,并设,则牛顿迭代函数为牛顿迭格式为:Matlab程序如下:%定义zuoye3.m文件function x=zuoye3(fname,dfname,x0,e,N)if nargin5,N=500;endif nargine&kN,

3、 k=k+1; x0=x;x=x0-feval(fname,x0)/feval(dfname,x0); disp(x)endif k=N,warning(已达上限次数);end在Matlab窗口中执行:zuoye3(inline(x3+2*x2+10*x-20),inline(3*x2+4*x+10),1,1e-7)结果如下:1.2351.8241.7531.137ans = 1.1374. 用牛顿迭代法求方程在附近的根. 要求给出程序和运行结果. 解:令:,则牛顿迭代函数为牛顿迭格式为:Matalb程序如下:%定义zuoye4.m文件function x=zuoye4(fname,dfnam

4、e,x0,e,N)if nargin5,N=500;endif nargine&ks s=abs(A(i,j);p=i;q=j; end end end if pk t=D(k,:); D(k,:)=D(p,:); D(p,:)=t; end if qk t1=D(:,k); D(:,k)=D(:,q); D(:,q)=t1; end h=D(k+1:n,k)/D(k,k); D(k+1:n,k+1:m)=D(k+1:n,k+1:m)-h*D(k,k+1:m); D(k+1:n,k)=zeros(n-k,1);endfor k=n:-1:1 D(k,k:m)=D(k,k:m)/D(k,k);

5、for r=1:k-1 D(r,:)=D(r,:)-D(r,k)*D(k,:); endendP=D(n+1:2*n,1:n);Q=D(1:n,n+1:m);x=P*Q在Matlab窗口中执行:A=0.02 -1 4 -3 1;-1 1 2 1 3;4 2 3 3 -1;-3 1 3 2 4;1 3 -1 4 4;b=11 14 4 16 18;zuoye6(A,b)运行结果如下:x = 2.824 -3.472 1.000 0.824 5.8247. 用追赶法解线性方程组 要求给出程序和运行结果. 解:于是有求解Ax=b即为求解,式中b=(1 0 0 0 0)T据 y=据= x=Matlab

6、程序如下:%定义zuoye7.m文件function x=zuoye7(a,b,c,d)a1=0;a;n=length(b);q=zeros(n,1);p=zeros(n,1);%LU分解q(1)=b(1);for k=2:n,p(k)=a1(k)/q(k-1); q(k)=b(k)-p(k)*c(k-1); end%解Ly=dy=zeros(n,1);y(1)=d(1);for k=2:n, y(k)=d(k)-p(k)*y(k-1);end%解Ux=yx=zeros(n,1); x(n)=y(n)/q(n);for k=n-1:-1:1,x(k)=(y(k)-c(k)*x(k+1)/q(k

7、);endx在Matlab窗口中执行: a=-1 -1 -1 -1; b=2 2 2 2 2; c=-1 -1 -1 -1; d=1 0 0 0 0; x=zuoye7(a,b,c,d)运行结果如下:x = 0.333 0.667 0.000 0.333 0.6679. 分别用Jacobi迭代法和Gauss-Seidel迭代法求解程组(编写程序)取初值,精确到小数后面四位。解:(1) Jacobi迭代法的Matlab程序:% x0为初始向量,ep为精度,N为最大次数,x是近似解向量A=10 3 1;2 -10 3;1 3 10;b=14 -5 14;n=length(b);N=500;ep=1

8、e-6;x0=zero(n,1);n=length(b);x0=zeros(n,1);x=zeros(n,1);k=0while KNfor i=1:nx(i)=(b(i)-A(I,1:i-1,i+1:n)*x0(1:i-1,i+1:n)/A(i,i);endif norm(x-x0,inf)ep,break;end;x0=x;k=k+1;endif k=N,Warning(已达到迭代次数上限);enddisp(k=,num2str(k),x运行结果如下:k=15x= 1.6423 0.6905 1.6432(2)Gauss-Seidel迭代法的Matlab程序:% x0为初始向量,ep为精度

9、,N为最大次数,x是近似解向量Format long;clear;A=10 3 1;2 -10 3;1 3 10;b=14 -5 14;n=length(b);N=500;ep=1e-6;x0=zero(n,1);P=inf;%以下是Guass-Seidal迭代法程序D=diag(diag(A);U=-triu(A,1);L=-tril(A,-1);dD=det(D);if dD=0disp(请注意:因为对角矩阵D奇异,所以此方程组无解。)elsedisp(请注意:因为对角矩阵D非奇异,所以此方程组无解。)iD=inv(D-L);B_GS=ID*U;d_GS=iD*b;endk=0;while

10、 kNx=B_GS*x0+d_GS;if norm(x-x0,P)ep,break;endx0=x;k=k+1;endif k=N,warning(已达到迭代次数上限);enddisp(k=,num2str(k),x,%D,U,L,B_GS,d_GS,%jx=Ab,运行结果如下:请注意:因为对角矩阵D非奇异,所以此方程组有解。k=9x=1.1052 1.4555 0.752810编写幂法程序求矩阵 按模最大的特征值和对应的特征向量。解:幂法程序如下:% A 为n 阶方阵,u0 为初始向量,%epsilon 为上限,max1 为循环次数。lambda 返回按模最大的特征值,u 返回对应的特征向量

11、。clear;format long;clc;max1=1000; epsilon=1e-6;A=1 1 0.5;1 1 0.25;0.5 0.25 2; u0=1;1;1; u=u0;v0=u0;lambda=0;k=0;err=1;R=;while (kepsilon)v=A*u; m,j=max(abs(v); m=v(j); u=v/m;err=abs(lambda-m);lambda=m; k=k+1;Temp=k;m;v;u;R=R Temp;endk, lambda, u, disp(R), xlswrite(d:1.xls, R,sheet1, b1) ;%D,Lmd=eig(

12、A) %D 之列为A 的特征向量,Lmd 之对角线上为A 的特征值运行结果如下:k = 23lambda = 2.8736u = 0.9906 0.5908 1.000011. 编写用原点位移加速反幂法程序求矩阵最接近于的特征值和相应的特征向量。 解:反幂法程序如下:% A 为n 阶方阵,v0,u0 为初始向量,%epsilon 为上限,max1 为循环次数,q 为近似特征值。lambda 为提高精度的特征值,v 给出对应的特征向量。clear;format long;max1=100; epsilon=1e-10;A=7 3 -2;3 4 -1;-2 -1 3; u0=1;1;1; u=u0

13、;v=u0;q=1.9;lambda=0;k=0;err=1;mu=0.5;n=length(u0); z=zeros(n,1);A=A-q*eye(n);%LU 分解n=length(u0);UU=zeros(n,n);L=eye(n,n);UU(1,:)=A(1,:); L(2:n,1)=A(2:n,1)/UU(1,1);for s=2:nUU(s,s:n)=A(s,s:n)-L(s,1:s-1)*UU(1:s-1,s:n);L(s+1:n,s)=(A(s+1:n,s)-L(s+1:n,1:s-1)*UU(1:s-1,s)/UU(s,s);endwhile (kepsilon)m,j=ma

14、x(abs(v); m=v(j); u=v/m;%解下三角方程组Lz=uz(1)=u(1);for j=2:n, z(j)=u(j)-L(j,1:j-1)*z(1:j-1); end%解上三角方程组Uv=zv(n)=z(n)/UU(n,n);for j=n-1:-1:1, v(j)=(z(j)-UU(j,j+1:n)*v(j+1:n)/UU(j,j); enderr=abs(1/m-1/mu); k=k+1; mu=m;enddisp(迭代次数k= ,num2str(k)disp(要求的矩阵A 的特征值lambda=), lambda= q+1/mdisp(要求的矩阵A 的特征向量u), u运

15、行结果如下:迭代次数k= 17要求的矩阵A 的特征值lambda=lambda = 2.9091要求的矩阵A 的特征向量uu = 0.3922 -0.6935 1.000012. 已知插值点(-2.00,17.00), (0.00,1.00), (1.00,2.00), (2.00,17.00),求三次插值多项式,并计算. 解:其Matlab程序如下:function yy=zuoye10(x,y,xx) m=length(x);n=length(y); if m=n, error(向量x与y的长度必须一致);end s=0; for i=1:n t=ones(1,length(xx); fo

16、r j=1:n if j=i t=t.*(xx-x(j)/(x(i)-x(j); end end s=s+t*y(i); end yy=s;在Matlab窗口中执行:x=-2.00 0.00 1.00 2.00;y=17.00 1.00 2.00 17.00;xx=0.6;zuoye10(x,y,xx)结果如下:ans = 0.00013编制Newton插值法的通用Matlab程序,并求的近似值. 已知的数值如下表所示解:Newton插值法的通用Matlab程序:x=0 0.2 0.4 0.6 0.8;y=0.1995 0.3965 0.5881 0.7721 0.9461;xx=0.5;m=

17、length(x);n=length(y);if m=n, error(向量x与y的长度必须一致);endfor j=2:n,for i=j:nnewton_chazhi(i,j)=(newton_chazhi(i-1,j-1)-newton_chazhi(i,j-1)/(x(1+i-j)-x(i);endendyy= newton_chazhi(1,1);t=1;for i=2:n,t=t*(xx-x(i-1);yy=yy+ newton_chazhi(i,i)*t;end%计算误差近似值err=newton_chazhi(n,n);for i=1:n,err=err*(xx-x(i);en

18、d,erryy运行结果为:err =-2.6213e-06yy=0.000020编写解常微分方程的四阶龙格库塔法通用程序. 解:四阶龙格库塔法通用程序:function x,y=zuoye20(dyfun,xspan,y0,h)x=xspan(1):h:xspan(2);y(1)=y0;for n=1:length(x)-1 k1=feval(dyfun,x(n),y(n); k2=feval(dyfun,x(n)+h/2,y(n)+h/2*k1); k3=feval(dyfun,x(n)+h/2,y(n)+h/2*k2); k4=feval(dyfun,x(n+1),y(n)+h*k3);

19、y(n+1)=y(n)+h*(k1+2*k2+2*k3+k4)/6;endx=x;y=y;21. 利用上题的程序求解初值问题:的数值解,并将结果与准确解进行比较. 取.解:Matlab程序:function x,y=zuoye21(dyfun,xspan,y0,h)x=xspan(1):h:xspan(2);y(1)=y0;for n=1:length(x)-1 k1=feval(dyfun,x(n),y(n); k2=feval(dyfun,x(n)+h/2,y(n)+h/2*k1); k3=feval(dyfun,x(n)+h/2,y(n)+h/2*k2); k4=feval(dyfun,

20、x(n+1),y(n)+h*k3); y(n+1)=y(n)+h*(k1+2*k2+2*k3+k4)/6;endx=xy=y在Matlab窗口中执行:dyfun=inline(2*x*y(-2)/3);xspan=0,1.2;y0=1;h=0.4;nark18(dyfun,xspan,y0,h)结果如下:x = 0 0.000 0.000 1.000y =1.000 1.354 1.031 1.313计算值与准确值比较如下: 22. 编写四阶龙格库塔法程序,并求解洛伦兹型系统(不许调用现成的龙格库塔法程序软件包):解:为了便于求解,这里首先为各个参数赋予初值,实际中根据需要修改程序中的参数即可

21、。取,.取初始点为.程序如下:%预定义homework22.m文件function f=homework22(t,y)sgm=0.25;tao=0.06;xgm=0.5;r=120;q=1.3;s=1.5;b=0.4;u=-20;f=-sgm*y(1)+tao*y(2)+xgm*y(2)*y(3);r*y(1)-q*y(2)+s*y(1)*y(3);-b*y(3)+u*y(1)*y(2);主程序为:y0=0.0050 0.4596 -0.1146;h=0.005;x=0:h:1000;y=zeros(length(y0),length(x);y(:,1)=y0;%四阶龙格库塔程序for n=1

22、:(length(x)-1) k1=homework22(x(n),y(:,n); k2=homework22 (x(n)+h/2,y(:,n)+h/2*k1); k3=homework22 (x(n)+h/2,y(:,n)+h/2*k2); k4=homework22(x(n+1),y(:,n)+h*k3); y(:,n+1)=y(:,n)+h*(k1+2*k2+2*k3+k4)/6; endx=x;y=y;%绘制图像figure(1);plot(y(:,1),y(:,2);xlabel(x);ylabel(y);figure(2);plot(y(:,2),y(:,3);xlabel(y);ylabel(z);figure(3);plot(y(:,1),y(:,3);xlabel(x);ylabel(z);figure(4);plot3(y(:,1),y(:,2),y(:,3);xlabel(x);ylabel(y);zlabel(z);程序运行结果为绘制的其函数x-y-x的三维图像如下图所示:其在各个坐标平面上的投影,即x-y、y-z、x-z的关系图像分别如下所示:专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁