2.999999999999999 1.000000000000000 3.000000000000000 迭代结果:
2.000000000000000
X =
1 2 3
可见对此题Gauss_Seidel法的收敛速度还是很快的.
例 3.3 取??1.45,用Gauss-Seidel迭代法和SOR法计算下列方程组的解:
?4x1?2x2?x3?0???2x1?4x2?2x3??2 ??x?2x?3x?323?1解:
Gauss-Seidel迭代法可利用上题中的程序,把输入矩阵A换掉就可以了,以下
编制求解该程序的SOR.m
%SOR法求解例3.3 %w=1.45
%方程组系数矩阵 clc;
A=[4 -2 -1;-2 4 -2 ;-1 -2 3] %方程组右端系数 b=[0,-2,3]' w=1.45;
%最大迭代次数 Maxtime=100; %精度要求 Eps=1E-5;
%以15位小数显示 format long; n=length(A); k=0;
%初始迭代值 x=ones(n,1); y=x;
disp('迭代过程:'); disp('x='); while 1 y=x; disp(x'); %计算过程 for i=1:n
41
s=b(i); for j=1:n if j~=i
s=s-A(i,j)*x(j); end end
if abs(A(i,i))<1E-10 | k>=Maxtime
error('已达最大迭代次数或矩阵系数近似为0,无法进行迭代'); return; end
s=s/A(i,i);
x(i)=(1-w)*x(i)+w*s; end
if norm(y-x,inf) disp('最后迭代结果:'); %最后的结果 X=x' %设为默认显示格式 format short; 为了能有可比性, Gauss?Seidel程序中的误差控制改用无穷大范数来度量(即将其改为: norm(y-x,inf) 以下为两种方法运行结果: (1) Gauss?Seidel法运行结果如下: >>Gauss_Seidel A = 4 -2 -1 0 -2 4 -2 -2 -1 -2 3 3 x= 1 1 1 0.750000000000000 0.375000000000000 1.500000000000000 0.562500000000000 0.531250000000000 1.541666666666667 0.651041666666667 0.596354166666667 42 1.614583333333333 0.701822916666667 1.672743055555556 0.747287326388889 1.722439236111111 0.785617404513889 1.764558015046297 0.818153663917824 1.800288447627315 0.845750031647859 1.830596170307677 0.869158662395713 1.856304498366368 0.889014832767439 1.878111387967082 0.905857679775222 1.896608915839176 0.920144495895370 1.912299302543305 0.932263178569463 1.925608553227410 0.942542758585044 1.936898023465833 0.951262333819572 1.946474230368326 0.958658646913433 1.954597174731730 0.964932513003372 1.961487400246158 0.970254271995315 1.967331981412263 0.974768413413434 1.972289602746377 0.978597499393018 1.976494867177471 0.981845492329217 1.980061950611968 0.984600577529664 1.983087701890432 0.986937557508016 1.985654272302155 0.988919882925151 1.987831346050819 0.990601375319531 0.658203125000000 0.710015190972222 0.754028320312500 0.791355839482060 0.823019239637587 0.849877416351695 0.872659665566903 0.891984533871152 0.908376705867273 0.922281240556384 0.934075655906227 0.944080178642702 0.952566438640879 0.959764843867551 0.965870836120737 0.971050197412848 0.975443551069698 0.979170179753344 0.982331264070816 0.985012629699224 0.987287077613653 0.989216360685175 43 1.989678032229960 0.992027688400078 1.991244469676705 0.993237547576686 1.992573188276692 0.994263801382521 1.993700263680578 0.995134313334948 1.994656296783491 0.995872718449754 1.995467244561000 0.996499064948561 1.996155124819374 0.997030358582234 1.996738613994614 0.997481024349056 1.997233554230909 0.997863298143645 1.997653383506066 0.998187558970155 1.998009500482125 0.998462610739587 1.998311573987100 0.998695921302203 1.998567805530502 0.998893825204951 1.998785151980135 0.999061695678897 1.998969514445976 0.999204090526252 1.999125898499494 0.999324875867931 1.999258550078451 0.999427331111469 1.999371070767130 迭代结果: X = 0.999514237989263 1.999466515581885 (2)SOR法(??1.45)运行结果如下: >>SOR 0.990852860315019 0.992241008626696 0.993418494829607 0.994417288507763 0.995264507616623 0.995983154754781 0.996592741700804 0.997109819171835 0.997548426187277 0.997920471238110 0.998236055610856 0.998503747644651 0.998730815367726 0.998923423829516 0.999086802486114 0.999225387183712 0.999342940594960 0.999442654378196 44 A = 4 -2 -1 -2 4 -2 -1 -2 3 b = 0 -2 3 迭代过程: x= 1 1 1 0.637500000000000 1.319906250000000 0.200426953125000 1.312280505533854 0.655033522367350 1.692284842064199 0.705846820490625 1.777193200964156 0.887273028620657 1.909222168471645 0.915403031995823 1.938503269030869 0.969682405159416 1.976329684037877 0.977544672598031 1.983982498874047 0.992436751874260 1.994143211257757 0.994223554996409 1.995924740976736 0.998182969701529 1.998589611975717 0.998531880520141 1.998972439993064 0.999573680611473 1.999666110080183 0.999628130465040 1.999741500669115 0.999901875643608 1.999922019942949 0.999905729701926 1.999934903350382 45 0.012187500000000 0.371757197265625 0.534011931458842 0.773340086195768 0.858734977660893 0.936422530391512 0.962044475111776 0.983638894760734 0.990266454150192 0.995946001166684 0.997552389716733 0.999014506686967 0.999389409429154 0.999763090152167 0.999848057258249 0.999943492726323