文档库 最新最全的文档下载
当前位置:文档库 › 数值分析实验报告-Sor法分析

数值分析实验报告-Sor法分析

数值分析实验报告-Sor法分析
数值分析实验报告-Sor法分析

数值分析实验报告

一、 实验目的

1、会使用Sor 法求解一个线性方程组

2、熟悉matlab 语言并结合原理编程求方程组

3、改变ω的值观察实验结果

4、会分析实验结果 二、实验题目

编制Sor 迭代格式程序进行求解一个线性方程组的迭代计算情况,运行中要选用不同的松弛因子ω进行尝试

三、 实验原理

Jacobi 迭代和seidel 迭代对具体的线性方程组来说,逼近*x 的速度是固定不变的,遇到收敛很慢的情况时就显得很不实用。

Sor 法是一seidel 迭代为基础,并在迭代中引入参数ω以增加迭代选择的灵活性,具体为:

!

用seidel 迭代算出的,)()1()()1(k k J k k J

x x x x x -=?++相减得到差向量与再用参数ω乘之再加上

)1()()()1()1()()()1(++++-=?+=k J

k k k k k k x x x x x x x x ωωω,即的下一步迭代作为,由seidel 迭代的公式可以得到Sor 法的迭代格式为

n i x a x a b a x x k j n i j ij k j i j ij i ii k i k i ,2,1),()1()(1)1(11)()1( =--+-=∑∑+=+-=+ω

ω

式中ω称为松弛因子。

四、 实验内容

用matlab 编程得到Sor 法求线性方程组的算法为:

function [x,n]=SOR(A,b,x0,w,eps,M)

if nargin==4

eps= ;

M = 200;

elseif nargin<4

error

return

elseif nargin ==5

M = 200;

end

if(w<=0 || w>=2)

error;

return;

end

D=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵(

U=-triu(A,1); %求A的上三角阵B=inv(D-L*w)*((1-w)*D+w*U);

f=w*inv((D-L*w))*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('Warning: 迭代次数太多,可能不收敛!'); return;

end

end

输入数据:

>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];

b=[1;2;10;-1];

x0=[0;0;0;0];

w=1;

eps=1e-4;

M=100;

>> [x,n]=SOR(A,b,x0,w,eps,M)

x =

n =

;

5

error;

>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];

b=[1;2;10;-1];

x0=[0;0;0;0];

w=;

eps=1e-4;

M=100;

[x,n]=SOR(A,b,x0,w,eps,M)

/

x =

n =

@

21

>>A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5]; b=[1;2;10;-1];

x0=[0;0;0;0];

w=;

eps=1e-4;

M=100;

[x,n]=SOR(A,b,x0,w,eps,M)

Error using ==> error

Not enough input arguments.

Error in ==> SOR at 13

用实验3中的线性方程组作为例子比较得

当ω=时,x = 迭代次数为n=21

当ω=1时,x = 迭代次数为n=5

当ω=时,出现error

五、实验分析

由定理,Sor法收敛的必要条件是0<ω<2,因此,当ω=和1时,算法收敛,能够求出根,并且迭代次数根据ω的不同而不同,在求方程组的根时,只要选择恰当的ω,收敛是很快的。而当ω>2 时,算法不收敛,因此程序出现错误,不能求出根。

当ω=1时,根据Sor法的构造方法知,此时的Sor法就是seidel法

相关文档