计算方法大作业.pdf
实验一实验一牛顿下山法牛顿下山法一、一、实验目的:实验目的:1、2、掌握牛顿下山法求解方程根的推导原理。理解牛顿下山法的具体算法与相应程序的编写。二、二、实验内容:实验内容:采用牛顿下山法求方程 2x3-5x-17=0 在 2 附近的一个根。三、三、实验实现:实验实现:1、算法:xk 1 xkf(xk)f(xk)下山因子从1开始,逐次 将减半进行试 算,直 到能使下降条 件f(xk1)f(xk)成立为止。再将得到的xk1循环求得方程根近似值。2、程序代码如下:function p,k=NewtonDownHill(f,df,p0)N=2000;Tol=10(-5);e=10(-8);for k=1:N lamda=1;p1=p0-lamda*f(p0)/df(p0);while(abs(f(p1)=abs(f(p0)&lamdae)lamda=lamda/2;p1=p0-lamda*f(p0)/df(p0);endif abs(p1-p0)Tol breakend p0=p1;endans=p13、运行结果:四、四、实验体会:实验体会:牛顿下山法可以较快求的方程结果,对于该题,只需要 5 步。运用计算机的数值迭代法可以很快求得满足精度要求的结果。实验二实验二矩阵的列主元三角分解矩阵的列主元三角分解一、一、实验目的:实验目的:学会矩阵的三角分解,并且能够用 MATLAB 编写相关程序,实现矩阵的三角分解,解方程组。二、二、实验内容:实验内容:1234567111111x17 x81111112211111x310321111x413432111x617543211x72265432128用列主元消去法求解方程组(实现 PA=LU)要求输出:(1)计算解 X;(2)L,U;(3)正整型数组 IP(i),(i=1,n)(记录主行信息)。三、三、实验实现:实验实现:1、算法:列主元三角分解和普通 Dooliitle 分解不同,第 k 步分解时为了避免用绝对值很小的数uii作除数,k1引进量若Si aiklimumkm1i k,k 1,nStmaxSikin,则将矩阵的第 t 行与第 k 行元素互换,再进行正常的Doolittle 分解。2、程序代码如下:clear all;clc;A=1 1 1 1 1 1 1;2 1 1 1 1 1 1;3 2 1 1 1 1 1;4 3 2 1 1 1 1;5 4 3 2 1 1 1;6 5 4 3 2 1 1;7 6 5 4 3 2 1;b=7;8;10;13;17;22;28;n=length(A);IP=eye(n);U=zeros(n);L=eye(n);m,p=max(A(:,1);C1=b(1);b(1)=b(p);b(p)=C1;C2(1:n)=IP(1,:);IP(1,:)=IP(p,:);IP(p,:)=C2(1:n);C2(1:n)=A(1,:);A(1,:)=A(p,:);A(p,:)=C2(1:n);U(1,:)=A(1,:);for k=2:n L(k:n,k-1)=A(k:n,k-1)/U(k-1,k-1);j=1;for i=k:n S(j)=A(i,k)-L(i,1:k-1)*U(1:k-1,k);j=j+1;end m,p=max(abs(S(:);C2(1:n)=A(k,1:n);A(k,1:n)=A(k+p-1,1:n);A(k+p-1,1:7)=C2(1:n);C2(1:n)=IP(k,1:n);IP(k,1:n)=IP(k+p-1,1:n);IP(k+p-1,1:n)=C2(1:n);U(k,k:n)=A(k,k:n)-L(k,1:k-1)*U(1:k-1,k:n);if kn A(k+1:n,k)=A(k+1:n,k)-L(k+1:n,1:k-1)*U(1:k-1,k);endenddisp(L=);disp(L);disp(U=);disp(U);disp(IP=);disp(IP);y=Lb;x=Uy;disp(y=);disp(y);disp(x=);disp(x);4、运行结果:四、四、实验体会:实验体会:列主元三角分解原理很简单,用 MATLAB 实现起来却不容易。对 MATLAB 还需要深入学习。实验三实验三SORSOR 迭代法迭代法一、一、实验内容:实验内容:10 x1 x2 9x110 x22x3 72x 10 x 623x(k1)x(k)采用 SOR 方法求解方程采用 0 向量为初始向量,迭代以106结束,但迭代次数不操作 1000 次,松弛因子使用0.1*i其中5i 18,给出使用的各松弛因子及对应迭代次数。二、二、实验实现:实验实现:1、程序代码如下:A=10-1 0;-1 10-2;0-2 10;b=9;7;6;x0=0;0;0;e=10(-6);n=1000;x=x0;j=18;w=0.1*j;for k=1:nfor i=1:length(b)x(i)=w*(b(i)-A(i,:)*x)/A(i,i)+x(i);if norm(x-x0)eps)J=J+1;h=h/2;x=a+h:2*h:b-h;R(J+1,1)=R(J,1)/2+h*sum(f(x);for K=1:min(3,J)R(J+1,K+1)=R(J+1,K)+(R(J+1,K)-R(J,K)/(4K-1);endif(J3)err=abs(R(J+1,4)-R(J,4);endend S=R(J,4)运行结果为:实验七实验七数值积分数值积分实验内容实验内容利用改进 Euler 法,经典四级四阶 Rung-Kutta 方法求其数值解,:4x xyy yy(0)10 x 2分别取 h=0.2,0.1,0.05 时数值解。xy 43e(注:初值问题的精确解)21、改进 Euler 法(1)程序代码如下:x0=0;y0=1;xn=2;f=inline(4*x./y-x.*y);H=0.2 0.1 0.05;for j=1:3 h=H(j);n=(xn-x0)/h;x=x0;y=y0;for i=1:n y1=y+h*f(x,y);y2=y+h*f(x+h,y1);y=(y1+y2)/2;x=x+h;Y(j,i)=y;end h Y(j,1:n)disp(_);(2)运行结果如下:2、经典 R-K 方法(1)程序代码如下:x0=0;y0=1;xn=2;f=inline(4*x./y-x.*y);H=0.2 0.1 0.05;for j=1:3 h=H(j);n=(xn-x0)/h;x=x0;y=y0;for i=1:n K1=h*f(x,y);K2=h*f(x+h/2,y+K1/2);K3=h*f(x+h/2,y+K2/2);K4=h*f(x+h,y+K3);y=y+(K1+2*K2+2*K3+K4)/6;x=x+h;Y(j,i)=y;end h Y(j,1:n)disp(_);end(2)运行结果如下: