数值分析sor精确值matlab,数值分析实验报告Sor法分析.doc

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

数值分析实验报告

实验目的

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

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

改变的值观察实验结果

会分析实验结果

二、实验题目

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

实验原理

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

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

用seidel迭代算出的再用参数乘之再加上,由seidel迭代的公式可以得到Sor法的迭代格式为

式中称为松弛因子。

实验内容

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

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

if nargin==4

eps= 1.0e-4;

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 =

0.0687

0.1645

0.2352

-0.1667

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=1.5;

eps=1e-4;

M=100;

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

x =

0.0687

0.1645

0.2352

-0.1667

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=2.5;

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中的线性方程组作为例子比较得

当=1.5时,x =0.0687 0.1645 0.2352 -0.1667 迭代次数为n=21

当=1时,x =0.0687 0.1645 0.2352 -0.1667 迭代次数为n=5

当=2.5时,出现error

五、实验分析

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值