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)编写主程序如下 format long clearA=[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)编写主程序如下 format long clearA=[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.224939370625 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)编写主程序如下 format long clearA=[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;