?? sor.m
字號:
%function [x,k,flag]=SOR(A,b,ep,w,max1)
%SOR迭代法
%A為方程組的系數矩陣
%b為方程組的右端項
%delta為精度要求,缺省值為1e-5
%max1為最大迭代次數,缺省值為100
%x為方程組的解
%k為迭代次數
%w為超松弛因子,缺省值為1
%flag為指標變量 flag='OK'表示迭代收斂到指標要求
% flag='fail'表示迭代失敗
clc;
clear;
for i=1:14
A(1+i,i)=-1;
A(i,1+i)=-1;
A(i,i)=4;
end
A(15,15)=4;
b=[3,2,2,2,2,2,2,2,2,2,2,2,2,2,3]';
delta=10^(-6);
X=zeros(15,1);
max1=40;
w=1.1;
%function X=cscdd (A,b,X,w,delta,max1)
D=diag(diag(A));
U=-triu(A,1);
L=-tril(A,-1);
jX=A\b;
[n m]=size(A);
iD=inv(D-w*L);
B2=iD*(w*U+(1-w)*D);
H=eig(B2);
mH=norm(H,inf);
for k=1:max1
iD=inv(D-w*L);
B2=iD*(w*U+(1-w)*D);
f2= w*iD*b;
X1= B2*X+f2;
X=X1;
djwcX=norm(X1-jX,inf);
xdwcX=djwcX/(norm(X,inf)+eps);
if (djwcX<delta)|(xdwcX<delta)
% disp('譜半徑mH,A的分解矩陣D,U,L和方程組的精確解jX,迭代次數i如下: ')
% mH,D,U,L,jX=jX', i=k-1,
k
break;
% if i> max1
% disp('迭代次數已經超過最大迭代次數max1,譜半徑mH,方程組的精確解jX,迭代次數i如下: ')
% mH,D,U,L,jX=jX', i=k-1,
% end
end
end
if mH>=1
disp('請注意:因為譜半徑不小于1,所以超松弛迭代序列發散')
% disp('譜半徑mH,A的分解矩陣D,U,L和方程組的精確解jX,迭代次數i和迭代序列X如下:')
% i=k-1,mH,D,U,L,jX,
else
disp('因為譜半徑小于1,所以超松弛迭代序列收斂 ')
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -