1、运行结果如下:x = 8.1478 4.0737 2.0365 1.0175 0.5073 0.2506 0.1194 0.0477第三章14.试分别用(1)Jacobi迭代法;(2)Gauss-Seidel迭代法解线性方程组迭代初始向量。(1)雅可比迭代法程序如下:function jacobi() %Jacobi迭代法请输入系数矩阵a=请输入右端向量b=x0=input(请输入初始向量x0=请输入系数矩阵阶数n=er=input(请输入允许误差er=N=input(请输入最大迭代次数N=for i=1: for j=1: if i=j d(i,j)=a(i,j); else d(i,j)=
2、0; endm=eye(5)-da; %迭代矩阵g=db;x=m*x0+g;k=1;while ker x=m*x+g; k=k+1; x return continue程序执行如下:jacobi请输入系数矩阵a=10 1 2 3 4;1 9 -1 2 -3;2 -1 7 3 -5;3 2 3 12 -1;4 -3 -5 -1 15请输入右端向量b=12 -27 14 -17 12请输入初始向量x0=0 0 0 0 0请输入系数矩阵阶数n=5请输入允许误差er=1.0e-6请输入最大容许迭代次数N=60x = 1.0000 -2.0000 3.0000(2)高斯赛德尔迭代法程序如下:funct
3、ion gs_sdl() %gauss-seiddel迭代法 if i3*er Fx=0; T0=T;2(m-1) %计算新增加节点处的函数值之和 fx3=cos(a+(2*k-1)*h)2/2); Fx=Fx+fx3; T=T0/2+h*Fx; m=m+1; h=h/2; x(i)=T; i=i+1;j=1; %y向量分量的下标 n=1; fy1=sin(a2/2); fy2=sin(b2/2); T=h*(fy1+fy2); Fy=0;2(n-1) fy3=sin(a+(2*k-1)*h)2/2); Fy=Fy+fy3; T=T0/2+h*Fy; n=n+1; y(j)=T; j=j+1;
4、k*,x,y,kif er=1.0e-3er=1.0e-3elseer=1.0e-7 huixuan1.0e-31.0e-7第八章20.求方程在附近的根,精确到(1) 取,用简单迭代法计算;(2) 用加快收敛的迭代格式,计算。程序及计算过程如下:建一M文件f.m存储函数,function f=f(x)f=exp(-x);取,用简单迭代法计算,Matlab程序如下:function x,i=diedai1(x0)x=f(x0);y(i)=x;while abs(x-x0)10-8 x0=x; x=f(x); y(i)=x;取初始值x0=0.5,输入x,i=diedai1(0.5)得结果 x =
5、0.567143287611168i =30可以看出用简单收敛法经过30次迭代达到精度要求。用加速收敛法的迭代格式计算,程序如下:function x,i=diedai2(x0)w=0.625;x=w*f(x0)+(1-w)*x0; x=w*f(x)+(1-w)*x;同样取x0=0.5,得x = 0.567143290310401 i = 结果比较简单迭代法和加速迭代格式的比较简单迭代法0.56714328761116加速的迭代格式0.567143290310401可见,加速迭代格式收敛比简单迭代格式快。第九章设有常微分方程初值问题其精确解为选取步长使四阶Adams预测-校正算法和经典RK法均
6、稳定,分别用这两种方法求解微分方程,将数值解与精确解进行比较,输出结果。其中多步法需要的初值由经典RK法提供。(1)用经典四阶RK法求解,程序代码如下:function classic_rk4()请输入插值节点数n=y(1)=1;f0(1)=1; %f0=cosx+sinx为精确值h=pi/n; %步长x=0:h:pi;k=2;eps=1.0e-3;for k=1: f0(k+1)=cos(x(k)+sin(x(k); k1=-y(k)+2*cos(x(k); k2=-(y(k)+h*k1/2)+2*cos(x(k)+h/2); k3=-(y(k)+h*k2/2)+2*cos(x(k)+h/2
7、); k4=-(y(k)+h*k3)+2*cos(x(k)+h); y(k+1)=y(k)+h/6*(k1+2*k2+2*k3+k4);subplot(3,1,1);plot(x,f0,y=cosx+sinxsubplot(3,1,2);经典四阶RK法subplot(3,1,3);T=y-f0; %计算经典四阶RK法的误差plot(x,T,经典四阶RK法的误差 classic_rk4请输入插值节点数n=3000(2)用四阶Adams预测-校正算法求解,程序代码如下:function adams4()h=(pi-0)/n; f0(k)=cos(x(k)+sin(x(k);for k=2:4 %用四阶RK法获得起步值
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1