clc;format short
%已知参数输入:复制x1,a,tol,w
w=1.5;
x0=[0 0 0]
x1=[0.50000 -1.12500 -0.42189 ]; %第一次迭代得到的值
a=[3 -1 0; 1 6 -2;0 -3 12 ]; %系数矩阵
tol=1e-3;
tb=0.01; %第三部分的值为计算结果的误差为初始误差的多少
%程序代码
disp('2、估算迭代次数');
fprintf('由迭代矩阵 Tw=(I-wL)^(-1)[(1-w)I+wU],其中');
I=eye(3);
B=tril(a,-1);
C=triu(a,1);
L1=-B(1,:)/a(1,1);L2=-B(2,:)/a(2,2);L3=-B(3,:)/a(3,3);
L=[L1;L2;L3]
%vpa(L,vd)
U1=-C(1,:)/a(1,1);U2=-C(2,:)/a(2,2);U3=-C(3,:)/a(3,3);
U=[U1;U2;U3]
wL=w*L
wU=w*U
S=I-wL;
fprintf('I-wL=\n')
disp(S);
N=inv(S); %求逆矩阵
fprintf('I-wL的逆矩阵为:\n')
disp(N);
H=(1-w)*I+wU;
fprintf('(1-w)I+wU=\n')
disp(H)
Tw=N*H;
fprintf('Tw=(I-wL)^(-1)[(1-w)I+wU]=\n')
disp(Tw);
G=norm(Tw,inf);
fprintf('得 ||Tw||∞=%6.4f\n',G)
t=norm((x1-x0),inf);
fprintf('经上述计算得 ||x1-x0||∞=%6.4f\n',t)
fprintf('由迭代次数计算公式 ||xk-x*||≤(||Tw||∞)^k/(1-||Tw||∞)×||x1-x0||∞\n')
fprintf('要满足精度%1d,只要(计算过程省略)\n',tol)
k=(log10(tol)-log10(t/(1-G)))/log10(G);
fprintf('k≥%1.4f\n',k)
y=ceil(k); %向上取整
fprintf('则迭代需要k=%1d次\n',y)
disp('★★★★★★★★★★★★★★★★★★');
disp('★★★★★★★★★★★★★★★★★★');
disp('3、求收敛速度:-lnρ(Tw)');
TZ=eig(Tw); %V 特征向量 D特征值
fprintf('特征值为:%1.5f %1.5f %1.5f\n',TZ)
P=max(abs(TZ));
LN=-1*log(P);
fprintf('所以ρ(Tw)=%1.5f\n',P);
fprintf('-lnρ(Tw)=%1.5f\n',LN);
disp('★★★★★★★★★★★★★★★★★★');
disp('★★★★★★★★★★★★★★★★★★');
fprintf('4、要使计算结果的误差为初始误差的%1d,既有\n',tb);
k3=-1*log(tb)/LN;
fprintf('k≥%1.4f\n',k3);
y3=ceil(k3); %向上取整
fprintf('则迭代需要k=%1d次\n',y3);
SOR.zip_SOR_SOR 编程_sor过程
版权申诉
51 浏览量
2022-07-15
10:23:19
上传
评论
收藏 4KB ZIP 举报
weixin_42651887
- 粉丝: 80
- 资源: 1万+
评论0