24小时热门版块排行榜    

CyRhmU.jpeg
查看: 674  |  回复: 0

1312758691

新虫 (小有名气)

[求助] SOR迭代

方法一:建立了SOR.m的脚本文件,实现的是SOR迭代,程序语言如下:
%SOR迭代
clear;
clc;
format long;
i=1;
n=6;
H=hilb(n);
X=ones(n,1);
b=H*X;
x0=zeros(n,1);
w=1;
D=diag(diag(H));
U=-triu(H,1);
L=-tril(H,-1);
B=(D-w*L)\((1-w)*D+w*U);
f=(D-w*L)\b;
x=B*x0+f
Epsilon=norm(x-x0,inf);
while(Epsilon>0.0001)
i=i+1
x=B*x0+f
Epsilon=norm(x-x0,inf);
x0=x;
end


方法二:
建立函数文件f_sor.m,程序如下:
function [x,i]=f_sor(A,b,x0,e,w)
%SOR迭代求解线性方程组H_n x=b,其中系数矩阵H_n为希尔伯特矩阵
%A系数矩阵
%b常数列向量
%x0初值列向量
%e收敛精度
%w松弛因子
format long;
i=1;
D=diag(diag(A));
U=-triu(A,1);
L=-tril(A,-1);
B=(D-w*L)\((1-w)*D+w*U);
f=(D-w*L)\b;
x=B*x0+f;
Epsilon=norm(x-x0,inf);
while(Epsilon>e)
i=i+1;
x=B*x0+f;
Epsilon=norm(x-x0,inf);
x0=x;
end
然后建立脚本文件study1.m调用函数f_sor迭代求解,脚本文件程序如下:
clear;
clc;
n=6;
a=hilb(n);
t=0.5*ones(n,1);
e=0.0001;
X=ones(n,1);
b=a*X;
w=1;
[x,i]=f_sor(a,b,t,e,w)

问题:为什么两种方法迭代得到的解有出入?而且迭代的次数相差较大?

谢谢!
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 1312758691 的主题更新
信息提示
请填处理意见