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