jacobig-s,超松弛迭代法matlab程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function iteration
A=[10,1,2,3,4;
1,9,-1,2,-3;
2,-1,7,3,-5;
3,2,3,12,-1;
4,-3,-5,-1,15];
b=[12,-27,14,-17,12]';
x0=[0,0,0,0,0]';
tol=1e-12;
disp('jacobi迭代法的结果和次数如下:')
[x,k]=Fjacobi(A,b,x0,tol)
disp('G-S迭代法的结果和次数如下:':')
[x,k]=Fgseid(A,b,x0,tol)
disp('超松弛的结果和次数如下:':')
[x,k]=Fsor(A,b,x0,,tol)
disp('共轭梯度法的结果和次数如下:':')
[x,k]=Fcg(A,b,x0,tol)
%jacobi迭代法
function [x,k]=Fjacobi(A,b,x0,tol)
max=300;
D=diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
B=D\(L+U);
f=D\b;
x=B*x0+f;
k=1;
while norm(x-x0)>=tol
x0=x;
x=B*x0+f;
k=k+1;
if(k>=max)
disp('μü′ú3?1y300′?£?·?3ì×é?é?ü2?ê?á2');
return;
end
end
%G-S迭代法
function [x,k]=Fgseid(A,b,x0,tol)
max=300;
D=diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
G=(D-L)\U;
f=(D-L)\b;
x=G*x0+f;
k=1;
while norm(x-x0)>=tol
x0=x;
x=G*x0+f;
k=k+1;
if(k>=max)
disp('μü′ú3?1y300′?£?·?3ì×é?é?ü2?ê?á2');
return;
end
end
%超松弛迭代法
function [x,k]=Fsor(A,b,x0,w,tol)
max=300;
if(w<=0||w>=2)
error;
return;
end
D=diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
B=inv(D-L*w)*((1-w)*D+w*U);
f=w*inv((D-L*w))*b;
x=B*x0+f;
k=1;
while norm(x-x0)>=tol
x0=x;
x=B*x0+f;
k=k+1;
if(k>=max)
disp('μü′ú3?1y300′?£?·?3ì×é?é?ü2?ê?á2');
return;
end
end
%共轭梯度法
function [x,k]=Fcg(A,b,x0,tol)
n=size(A,1);
x=x0;
r=b-A*x;
d=r;
alpha=(r'*r)/(d'*A*d);
x=x0+alpha*d;
k=1;
while norm(x-x0)>=tol
x0=x;
x=x+alpha*d;
r2=b-A*x;
k=k+1;
beta=norm(r2)^2/norm(r)^2;
d=r2+beta*d;
r=r2;
end