matlab Jacobi迭代法Gauss-seidel和SOR迭代
- 格式:doc
- 大小:19.00 KB
- 文档页数:7
1.Jacobi迭代法
例1 用jacobi迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4)
其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。
解:编写jacobi迭代法的函数文件,保存为jacobi.m
function [x,k]=jacobi(A,b,x0,eps,N)
% 求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数
% 输出x为近似解;k为迭代次数
n=length(A);
x=zeros(n,1);
for k=1:N
for i=1:n
―――――――
end
if norm(x-x0,inf) % if (max(abs(x-x0))) break; end x0=x; end 编写主程序如下 format long clear A=[8 -1 1;2 10 -1;1 1 -5]; b=[1 ;4; 3]; x0=[0.125; 0.4 ;-0.6 ]; % x0为初始列向量N为最大迭代次数err=1e-4; % err为误差容限 N=25; % N为最大迭代次数 [x,k]=jacobi(A,b,x0,err,N) 得到结果如下 x = 0.22492315625000 0.30561995000000 -0.49388680000000 k = 6 2.Gauss-seidel迭代法 例2 用Gauss-seidel迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4) 其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。 解:编写Gauss-seidel迭代法的函数文件,保存为gaus.m function [x,k]=gaus(A,b,x0,eps,N) % 求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数% 输出x为近似解;k为迭代次数 n=length(A); x=zeros(n,1); for k=1:N for i=1:n ―――――― end if norm(x-x0,inf) % if (max(abs(x-x0))) break; end x0=x; end 编写主程序如下 format long clear A=[8 -1 1;2 10 -1;1 1 -5]; b=[1 ;4; 3]; x0=[0.125; 0.4 ;-0.6 ]; % x0为初始列向量N为最大迭代次数err=1e-4; % err为误差容限 N=25; % N为最大迭代次数 [x,k]=gaus(A,b,x0,err,N) 输出结果为 x = 0.22493937890625 0.30562326171875 -0.49388747187500 k = 5 3.SOR迭代法 例3 用SOR迭代法求解代数线性代数方程组,松驰因子w=1.005, 其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。保留四位有效数字(err=1e-4) 解:编写SOR迭代法的函数文件,保存为sor.m function [x,k]=sor(A,b,x0,eps,N,w) % 求解Ax=b;x0为初始列向量;eps为误差容限; % N为最大迭代次数;w为松弛因子 % 输出x为近似解;k为迭代次数 n=length(A); x=zeros(n,1); for k=1:N for i=1:n ――――――――――― end if norm(x-x0,inf) % if (max(abs(x-x0))) break; end x0=x; end 编写主程序如下 format long clear A=[8 -1 1;2 10 -1;1 1 -5]; b=[1 ;4; 3]; x0=[0.125; 0.4 ;-0.6 ]; % x0为初始列向量N为最大迭代次数err=1e-4; % err为误差容限 N=25; % N为最大迭代次数 w=1.005; [x,k]=sor(A,b,x0,err,N,w) 输出结果为 x = 0.22493973151744 0.30562311707823 -0.49388742187146 k = 5 四.实验题目: 1.分别用Jacobi, Gauss-Seidel和SOR迭代法(松驰因子w=1.08,1.12,1.3)求解方程组要求精度,初始,最大迭代次数N=25,试比较这几种迭代法的迭代次数和收敛速度。 A=[4 -1 0 -1 0 0;-1 4 -1 0 -1 0; 0 -1 4 0 0 -1; -1 0 0 4 -1 0; 0 -1 0 -1 4 -1; 0 0 -1 0 -1 4]; b=[0 5 0 6 -2 6]'; n=length(A); x0=zeros(n,1); eps=1e-5;N=25;