SOR法求解方程组Ax=b
原理
矩阵形式的迭代公式:
x(k+1) = (D - ωL)-1[(1 - ω)D + ωU] x(k)+ ω(D - ωL)-1b
MATLAB实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| function [x,cnt,errory] = sor(A,b,w,x0)
sizeA = size(A); if sizeA(1) ~= sizeA(2) error('A不是方阵'); end
e = 1e-4; D = diag(diag(A)); L = D - tril(A); U = D - triu(A); M = (D - w * L) \ ((1 - w) * D + w * U); f = w * ((D - w * L) \ b);
cnt = 1; x1 = x0; x2 = M * x1 + f; errory(cnt) = norm(x2 - x1,1); while errory(cnt) > e x1 = x2; x2 = M * x1 + f; cnt = cnt + 1; errory(cnt) = norm(x2 - x1,1); end x = x2; errory(cnt + 1) = norm(x2 - x1,1);
errorx = 0:1:cnt; errory = exp(errory); figure semilogy(errorx,errory); end
|