线性方程组迭代法matlab

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

第三章 大作业

考虑线性方程组

12345615310002213131002201310010013101130013122150001322x x x x x x ⎛⎫⎛⎫- ⎪ ⎪ ⎪ ⎪⎛⎫ ⎪ ⎪-- ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪-- ⎪ ⎪= ⎪ ⎪ ⎪-- ⎪ ⎪ ⎪ ⎪ ⎪ ⎪-- ⎪ ⎪ ⎪ ⎪⎝⎭ ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭

(1)分别用Jacobi 方法和G-S 方法求解上述方程组,并比较它们的收敛快慢;

(2)用SOR 方法求解,试分析松弛因子ω的选取对方法收敛的影响,并找到最佳松弛因子

J 法:

function [X]=jf(A,B,X)

m=rank(A);

X=reshape(X,length(X),1);

B=reshape(B,length(B),1);

k=1;

%

if m~=size(A,1) %求行数

disp('A 不可逆');

return

end

%

Bj=zeros(m,m);

%

while k

g=max_(A(k:m,k)')+k-1; %求列主元行数

R=A(g,:);A(g,:)=A(k,:);A(k,:)=R; %交换第k 行和主元行

M=B(g);B(g)=B(k);B(k)=M; %交换B 中元素

k=k+1;

end

%

k=1;

while k<=m

Bj(k,1:k-1)=-A(k,1:k-1)/A(k,k); Bj(k,1+k:m)=-A(k,k+1:m)/A(k,k); f(k)=B(k)/A(k,k);

k=k+1;

end

f=f';

%

k=0;

t=norm((X-f),inf);

while t>0.00000001 %回代求解

X1=Bj*X+f;

t=norm((X1-X),inf);

X=X1;

k=k+1;

end;

X=X';

disp('迭代次数')

k

GS法:

function [X]=gs1(A,B,X)

m=rank(A);

X=reshape(X,length(X),1);

B=reshape(B,length(B),1);

k=1;

%

if m~=size(A,1) %求行数

disp('A不可逆');

return

end

%

%

while k<=m

g=max_(A(k:m,k)')+k-1; %求列主元行数

R=A(g,:);A(g,:)=A(k,:);A(k,:)=R; %交换第k行和主元行M=B(g);B(g)=B(k);B(k)=M; %交换B中元素

k=k+1;

end

%

k=1;

while k<=m

G(k:m,k)=A(k:m,k); %G=D-L

U(k,k:m)=-A(k,k:m);

U(k,k)=0;

k=k+1;

end

Bgs=G\U;

fgs=G\B;

%

k=0;

t=norm((X-fgs),inf);

while t>0.00000001 %回代求解

X1=Bgs*X+fgs;

t=norm((X1-X),inf);

X=X1;

k=k+1;

end;

X=X';

disp('迭代次数')

k

SOR法

function [X]=sor1(A,B,X,w)

m=rank(A);

X=reshape(X,length(X),1);

B=reshape(B,length(B),1);

k=1;

%

if m~=size(A,1) %求行数

disp('A不可逆');

return

end

%

D=zeros(m,m);

%

while k<=m

g=max_(A(k:m,k)')+k-1; %求列主元行数

R=A(g,:);A(g,:)=A(k,:);A(k,:)=R; %交换第k行和主元行M=B(g);B(g)=B(k);B(k)=M; %交换B中元素

k=k+1;

end

%

k=1;

while k<=m

D(k,k)=A(k,k);

L(k:m,k)=-A(k:m,k);

U(k,k:m)=-A(k,k:m);

k=k+1;

end

L=L+D;

U=U+D;

Bw=(D-w*L)\((1-w)*D+w*U);

fw=w*((D-w*L)\B);

%

k=0;

t=norm((X-fw),inf);

while t>0.00000001 %回代求解X1=Bw*X+fw;

t=norm((X1-X),inf);

X=X1;

k=k+1;

end;

X=X';

disp('迭代次数')

k

相关文档
最新文档