实验三 非线性方程的牛顿法和线性方程组的迭代数值求解 信息与计算科学金融 崔振威 201002034031 一、 实验目的: 设计牛顿迭代算法和线性方程组的常用迭代算法 二、 实验内容:p69.3、p129.1 三、 实验要求: 1、 根据题目要求构造迭代格式 2、 对线性方程组的迭代求解要求构造三种迭代格式 3、 试比较牛顿迭代法和不动点迭代法的优劣(p69.3) 4、 试比较线性方程组三种迭代的优劣(收敛和收敛速度) 主程序: a、牛顿迭代法程序: function [x,k]=newton(f,p0,e) %求f(x)=0 在给定 p0 的根。 %f 为所求的函数f(x),p0 为迭代初始值,e 为迭代精度。k 为迭代次数 %diff(f)为对函数求导,subs 是赋值函数,用数值替代符号变量替换函数例 xa=p0; xb=xa-subs(f,xa)/subs(diff(f),xa); k=1; while abs(xa-xb)>e, k=k+1; xa=xb; xb=xa-subs(f,xa)/subs(diff(f),xa); end x=xb; b、雅克比迭代法程序 function [x,n]=Jacobi_Solve(A,b,x0,eps,varargin) %求解线性方程组的迭代法 %A 为方程组的细数矩阵 %b 方程组的右端项数字的向量组 %eps 为精度要求,默认值为 1e-5 %varargin 为最大迭代次数,值为 100 %x为方程组的解 %n 为迭代次数 if nargin==3 eps=1.0e-6; M =200; elseif nargin<3 error return elseif nargin==5 M =varargin{1}; end D=diag(diag(A));%求A 的对角矩阵 L=-tril(A,-1);%求A 的下三角矩阵 U=-triu(A,1);%求A 的上三角矩阵 B=D\(L+U); f=D\b; x=B*x0+f; n=1;%迭代次数 while norm(x-x0)>=eps x0=x; x=B*x0+f; n=n+1; if(n>=M) disp('迭代次数太多,可能不收敛。'); return; end end c、高斯_赛德尔迭代程序 function [x,n]=gaussseide(A,b,x0,eps,M) %求解线性方程组的迭代法 %A 为方程组的细数矩阵 %b 为方程组的右端项数字的向量组 %eps 为精度要求,默认值为 1e-5 %M 为最大迭代次数,值为 100 %x 为方程组的解 %n 为迭代次数 if nargin==3 eps=1.0e-6; M =200; elseif nargin==4 M=200; elseif nargin<3 error return; end D=diag(diag(A));%求A 的对角矩阵 L=-tril(A,-1);%求A 的下三角矩阵 U=-triu(A,1);%求A 的上三角矩阵 G=(D-L)\U; f=(D-L)\b; x=G*x0+f; n=1;%迭代次数 while norm(x-x0)>=eps x0=x; x=G*x0+f; n=n+1; if(n>=M) disp('迭代次数太多,可能不收敛。'); ...