数值分析实验报告-Sor法分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验报告
一、 实验目的
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法