数值分析上机习题目4_第1页
数值分析上机习题目4_第2页
数值分析上机习题目4_第3页
数值分析上机习题目4_第4页
数值分析上机习题目4_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一实验项目:共轭梯度法求解对称正定的线性方程组实验内容:用共轭梯度法求解下面方程组(1) 迭代20次或满足时停止计算。编制程序:储存m文件function x,k=CGmethod(A,b)n=length(A);x=2*ones(n,1);r=b-A*x;rho=r'*r;k=0;while rho>10(-11) & k<1000 k=k+1; if k=1 p=r; else beta=rho/rho1; p=r+beta*p; end w=A*p; alpha=rho/(p'*w); x=x+alpha*p; r=r-alpha*w; rho1=

2、rho; rho=r'*r;end运行程序:clear,clcA=2 -1 0 0;-1 3 -1 0;0 -1 4 -1;0 0 -1 5;b=3 -2 1 5'x,k=CGmethod(A,b)运行结果:x = 1.2941176 0.03 0.5294 1.77(2) ,A是1000阶的Hilbert矩阵或如下的三对角矩阵,Ai,i=4,Ai,i-1=Ai-1,i=-1,i=2,3,.,nb1=3, bn=3, bi=2,i=2,3,n-1迭代10000次或满足时停止计算。编制程序:储存m文件function x,k=CGmethod_1(A,b)n=length(A);

3、x(1:n,1)=0;r=b-A*x;r1=r;k=0;while norm(r1,1)>10(-7)&k<104 k=k+1; if k=1 p=r; else beta=(r1'*r1)/(r'*r);p=r1+beta*p; end r=r1; w=A*p; alpha=(r'*r)/(p'*w); x=x+alpha*p; r1=r-alpha*w;end运行程序:clear,clcn=1000;A=hilb(n);b=sum(A')'x,k=CGmethod(A,b)实验二1、 实验目的:用复化Simpson方法、自

4、适应复化梯形方法和Romberg方法求数值积分。实验内容:计算下列定积分(1) (2) (3) 实验要求:(1)分别用复化Simpson公式、自适应复化梯形公式计算要求绝对误差限为,输出每种方法所需的节点数和积分近似值,对于自适应方法,显示实际计算节点上离散函数值的分布图;(2)分析比较计算结果。程序:syms xf=x6/10-x2+x %定义函数f(x)n=input('输入所求导数阶数:') f2=diff(f,x,n) %求f(x)的n阶导数(1)复化梯形clcclearsyms x %定义自变量xf=inline('x6/10-x2+x','x

5、') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('3*x4 - 2','x') %定义f(x)的二阶导数,输入程序1里求出的f2即可。f3='-(3*x4 - 2)' %因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,以便求最大值e=0.5*10(-7) %精度要求值 a=0 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的二阶导数的最小值点,也就是求二阶导数的最大值点对应的x值for n=2:1000000 %求等分数n Rn=-(b-a

6、)/12*(b-a)/n)2*f2(x1) %计算余项 if abs(Rn)<e %用余项进行判断 break % 符合要求时结束 endendh=(b-a)/n %求hTn1=0 for k=1:n-1 %求连加和 xk=a+k*h Tn1=Tn1+f(xk)endTn=h/2*(f(a)+2*Tn1+f(b)z=exp(2)R=Tn-z %求已知值与计算值的差stem(xk,Tn1);fprintf('用复化梯形算法计算的结果 Tn=')disp(Tn)fprintf('等分数 n=')disp(n) %输出等分数fprintf('已知值与计算

7、值的误差 R=')disp(R)(2)复化Simpsonclcclearsyms x %定义自变量xf=inline('x6/10-x2+x','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('36*x2','x') %定义f(x)的四阶导数,输入程序1里求出的f2即可f3='-(36*x2)' %因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,一边求最大值e=5*10(-8) %精度要求值 a=0 %积分下限b=2 %积分上限x

8、1=fminbnd(f3,1,2) %求负的四阶导数的最小值点,也就是求四阶导数的最大值点对应的x值for n=2:1000000 %求等分数n Rn=-(b-a)/180*(b-a)/(2*n)4*f2(x1) %计算余项 if abs(Rn)<e %用余项进行判断 break % 符合要求时结束 endendh=(b-a)/n %求hSn1=0 Sn2=0for k=0:n-1 %求两组连加和 xk=a+k*h xk1=xk+h/2 Sn1=Sn1+f(xk1) Sn2=Sn2+f(xk)end Sn=h/6*(f(a)+4*Sn1+2*(Sn2-f(a)+f(b) %因Sn2多加了

9、k=0时的值,故减去f(a)z=exp(2)R=Sn-z %求已知值与计算值的差fprintf('用Simpson公式计算的结果 Sn=')disp(Sn)fprintf('等分数 n=')disp(n) fprintf('已知值与计算值的误差 R=')disp(R)结果:用复化梯形算法计算的结果 Tn= 1.74等分数 n= 24764已知值与计算值的误差 R= -6.227用Simpson公式计算的结果 Sn= 1.34等分数 n= 76已知值与计算值的误差 R= -6.227用复化梯形算法计算的结果 Tn= 0.9218985等分数 n=

10、1119已知值与计算值的误差 R= -6.9711665用Simpson公式计算的结果 Sn= 0.4000等分数 n= 8已知值与计算值的误差 R= -6.5461245用复化梯形算法计算的结果 Tn= 23.83等分数 n= 1000000已知值与计算值的误差 R= 16.3671704用Simpson公式计算的结果 Sn= 23.87等分数 n= 10647已知值与计算值的误差 R= 16.3531969分析:在处理问题时,复化Simpson要比复化梯度计算速度要快很多。2、实验目的:高斯数值积分方法用于积分方程求解。实验内容:线性的积分方程的数值求解,可以被转化为线性代数方程组的求解问

11、题。而线性代数方程组所含未知数的个数,与用来离散积分的数值方法的节点个数相同。在节点数相同的前提下,高斯数值积分方法有较高的代数精度,用它通常会得到较好的结果。对第二类Fredholm积分方程首先将积分区间a,b等分成n份,在每个子区间上离散方程中的积分就得到线性代数方程组。实验要求:分别使用如下方法,离散积分方程中的积分1.复化梯形方法;2.复化辛甫森方法;3.复化高斯方法。求解如下的积分方程,方程的准确解为,并比较各算法的优劣。程序结果:当迭代次数n=1时精确解1.0000 1.2840 1.6487 2.1170 2.7183 复化梯形方法0.8591 1.1032 1.4165 1.8

12、1882.3354复化辛甫森方法0.9993 1.2832 1.6476 2.1156 2.7165复化高斯方法1.0004 1.2846 1.6495 2.1180 2.7195复化梯形方法的平均误差err=0.247复化辛甫森方法的平均误差err=0.00116复化高斯方法的平均误差err=0.0008当迭代次数n=5时,精确解1.0000 1.2840 1.6487 2.1170 2.7183 复化梯形方法0.9934 1.2755 1.6378 2.1030 2.7003 复化辛甫森方法1.0000 1.2840 1.6487 2.1170 2.7183复化高斯方法1.0000 1.2

13、840 1.6487 2.1170 2.7183复化梯形方法的平均误差err=0.00116复化辛甫森方法和复化高斯方法的平均误差err=0可以看出,复化高斯方法得到的结果精度最高,复化辛普森方法比复化梯形方法的精度要高,程序:clear,clca=0;b=1;n=5;figurefun1(a,b,n);hold ona=0;b=1;n=5;figurefun2(a,b,n);hold onfigurefun3(a,b,n);编制m函数:function y=Kfun(t,s)y=2/(exp(1)-1)*exp(t);function y=ffun(t)y=-exp(t);function

14、y=Fexc(t)%精确解y=exp(t);function x,w=fhgauss(a,b,n)h=(b-a)/n;x1=a:h:b;x=zeros(1,2*n);w=x;for i=1:nx(2*i-1:2*i),w(2*i-1:2*i)=GaussLegendre(x1(i),x1(i+1),2);endfunction x,w=fhsimpson(a,b,n)h=(b-a)/n;x=a:h/2:b;w=x;w(1)=h/6;w(2*n+1)=h/6;for i=1:nw(2*i)=2/3*h;if i<n w(2*i+1)=h/3;endendfunction x,w=fhtra

15、pz(a,b,n)h=(b-a)/n;x=a:h:b;for i=1:n+1 if i=1|i=n+1 w(i)=h/2; else w(i)=h; endendfunction x,w=GaussLegendre(a,b,n)i=1:n-1;c=i./sqrt(4*i.2-1);CM=diag(c,1) + diag(c,-1);V L=eig(CM);x ind=sort(diag(L);V=V(:,ind)'w=2*V(:,1).2;x=x*(b-a)/2+(b+a)/2;w=w*(b-a)/2;function fun1(a,b,n)x1,w1=fhtrapz(a,b,n);n

16、1=4;n=n+1;h=(b-a)/n1;x=a:h:b;y0=Fexc(x);A=zeros(n,n);B=zeros(n,1);for i=1:nB(i)=ffun(x1(i);endfor i=1:nfor j=1:n A(i,j)=w1(j)*Kfun(x1(i),x1(j); endendA=eye(n)-A;y1=(AB)'yN=x;for i=1:n1+1yN(i)=ffun(x(i);for j=1:nyN(i)=yN(i)+w1(j)*Kfun(x(i),x1(j)*y1(j);endendfprintf('数值解:n')yNfprintf('

17、精确解:n')y0plot(x,yN,'x',x,y0,'.');h=legend('复化值','真实值');function fun2(a,b,n)x1,w1=fhsimpson(a,b,n);n=2*n+1;n1=50;h=(b-a)/n1;x=a:h:b;y0=Fexc(x);A=zeros(n,n);B=zeros(n,1);for i=1:nB(i)=ffun(x1(i);endfor i=1:nfor j=1:n A(i,j)=w1(j)*Kfun(x1(i),x1(j); endendA=eye(n)-A;y

18、1=(AB)'yN=x;for i=1:n1+1yN(i)=ffun(x(i);for j=1:nyN(i)=yN(i)+w1(j)*Kfun(x(i),x1(j)*y1(j);endendfprintf('数值解:n')yNfprintf('精确解:n')y0plot(x,yN,'x',x,y0,'.');h=legend('复化值','真实值');function fun3(a,b,n)x1,w1=fhgauss(a,b,n);n=2*n;n1=4;h=(b-a)/n1;x=a:h:b;

19、y0=Fexc(x);A=zeros(n,n);B=zeros(n,1);for i=1:nB(i)=ffun(x1(i);endfor i=1:nfor j=1:n A(i,j)=w1(j)*Kfun(x1(i),x1(j); endendA=eye(n)-A;y1=(AB)'yN=x;for i=1:n1+1yN(i)=ffun(x(i);for j=1:nyN(i)=yN(i)+w1(j)*Kfun(x(i),x1(j)*y1(j);endendfprintf('数值解:n')yNfprintf('精确解:n')y0plot(x,yN,'x

20、',x,y0,'.');h=legend('复化值','真实值');图一图二图三实验三1、对常微分方程初值问题 分别使用Euler显示方法、改进的Euler方法和经典RK法和四阶Adams预测-校正算法,求解常微分方程数值解,并与其精确解进行作图比较。其中多步法需要的初值由经典RK法提供。程序:子程序function E=Euler(fun,x0,y0,h,N)x=zeros(1,N+1);y=zeros(1,N+1);x(1)=x0;y(1)=y0;for n=1:Nx(n+1)=x(n)+h;y(n+1)=y(n)+h*feval(f

21、un,x(n),y(n);endx1=xy1=yplot(x1,y1,'k')hold onfunction E=Euler_modify(fun,x0,y0,h,N)x=zeros(1,N+1);y=zeros(1,N+1);x(1)=x0;y(1)=y0;for n=1:Nx(n+1)=x(n)+h;z0=y(n)+h*feval(fun,x(n),y(n);y(n+1)=y(n)+h/2*(feval(fun,x(n),y(n)+feval(fun,x(n+1),z0);endx2=xy2=yplot(x2,y2,'g')function x,y=Rk_N

22、4(f,x0,y0,h,N) x=zeros(1,N+1);y=zeros(1,N+1); x(1)=x0;y(1)=y0; for n=1:N x(n+1)=x(n)+h; k1=h*feval(f,x(n),y(n); k2=h*feval(f,x(n)+1/2*h,y(n)+1/2*k1); k3=h*feval(f,x(n)+1/2*h,y(n)+1/2*k2); k4=h*feval(f,x(n)+h,y(n)+k3); y(n+1)=y(n)+1/6*(k1+2*k2+2*k3+k4); end 运行以下程序clcclearEuler('fun',0,1,0.1,1

23、00)Euler_modify('fun',0,1,0.1,100)x,y=Rk_N4('fun',0,1,0.1,100)plot(x,y,'-*r')hold onx1=0:0.1:pi;y1=cos(x1)+sin(x1)plot(x1,y1,'-.b')title('误差分析');xlabel('x轴');ylabel('y轴');legend('Euler','Euler改进法','R_K法','精确');ax

24、is(0 pi -1.5 1.5);grid on画出图形进行比较:2、实验目的:Lorenz问题与混沌实验内容:考虑著名的Lorenz方程 其中s, r, b为变化区域有一定限制的实参数。该方程形式简单,表面上看并无惊人之处,但由该方程揭示出的许多现象,促使“混沌”成为数学研究的崭新领域,在实际应用中也产生了巨大的影响。实验方法:先取定初值Y0=(x, y, z)=(0, 0, 0),参数s=10, r=28, b=8/3,用MATLAB编程数值求解,并与MATLAB函数ods45的计算结果进行对比。实验要求:(1)对目前取定的参数值s, r和b,选取不同的初值Y0进行运算,观察计算的结果有什么特点解的曲线是否有界解的曲线

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论