jacobig-s,超松弛迭代法matlab程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档