Định nghĩaTrong đại số tuyến tính , phương pháp hồi quy liên tiếp SOR là phương pháp khái quát hơn của phương pháp Gauss–Seidel để giải một hệ phương trình tuyến tính, dẫn đến sự hội tụ
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC ỨNG DỤNG 2022 - 2023
-o0o -BÁO CÁO BÀI TẬP LỚN
MÔN HỌC: ĐẠI SỐ TUYẾN TÍNH
PHƯƠNG PHÁP SUCCESSIVE OVER-RELAXATION
Nhóm: 4 – ANO1 GVHD: ĐẶNG VĂN VINH
Tp.HCM, tháng 12 năm 2022
Trang 2DANH SÁCH NHÓM 4
Mục lục 1.CƠ SỞ LÝ THUYẾT 2.ĐIỀU KIỆN HỘI TỤ
3 CHƯƠNG TRÌNH SỬ DỤNG THUẬT TOÁN
Trang 3CƠ SỞ LÝ THUYẾT
I Định nghĩa
Trong đại số tuyến tính , phương pháp hồi quy liên tiếp (SOR) là phương pháp khái quát hơn của phương pháp Gauss–Seidel để giải một hệ phương trình tuyến tính, dẫn đến sự hội tụ nhanh hơn Là một phương pháp tương tự
có thể được sử dụng cho bất kỳ quá trình lặp lại hội tụ chậm nào
SOR được phát triển bằng cách sửa đổi mô hình lặp Gauss-Seidel Mô hình Gauss-Seidel dựa trên các bước sau
II Cơ sở lý thuyết
SOR là một phương pháp giải hệ phương trình tuyến tính thu được bằng cách ngoại suy phương pháp Gauss-Seidel Phép ngoại suy này có dạng trung bình có trọng số giữa lần lặp trước và lần lặp Gauss-Seidel được tính toán liên tiếp cho mỗi thành phần
trong đó biểu thị một phép lặp Gauss-Seidel và là hệ số ngoại suy Ý tưởng là chọn một giá trị cho điều đó sẽ đẩy nhanh tốc độ hội tụ của các lần lặp lại cho giải pháp
Theo thuật ngữ ma trận, thuật toán SOR có thể được viết là
trong đó các ma trận D, -L, và -U tương ứng biểu thị các phần đường chéo, tam giác dưới và tam giác trên của A
Nếu =1, phương pháp SOR đơn giản hóa thành phương pháp Gauss-Seidel Một lý do do Kahan (1958) chỉ ra rằng SOR không hội tụ nếu nằm ngoài khoảng (0,2)
Nói chung, không thể tính toán trước giá trị sẽ tối đa hóa tốc độ hội tụ của SOR Thông thường, một số ước tính heuristic được sử dụng, chẳng hạn như
=2-O(h) tại h là khoảng cách lưới của sự rời rạc của miền vật lý cơ bản
Trang 4ĐIỀU KIỆN HỘI TỤ
Điều kiện cần để phương pháp SOR hội tụ là Vì vậy thì sẽ dẫn đến
Tỷ lệ hội tụ :
Tốc độ hội tụ cho phương pháp SOR có thể được phân tích Người ta cần giả định như sau
tham số thư giãn là phù hợp:
Sau đó, tốc độ hội tụ có thể được biểu thị bằng
trong đó tham số thư giãn tối ưu được đưa ra bởi
Giả thiết cuối cùng được thỏa mãn đối với ma trận tam giác
các mục
Trang 5CHƯƠNG TRÌNH SỬ DỤNG THUẬT
TOÁN
Sau đó, A có thể được phân tách thành một thành phần đường chéo D và các thành phần tam giác trên và dưới L và U :
Phương pháp giản quá mức liên tiếp là một kỹ thuật lặp giải quyết phía bên trái của biểu thức này cho x , sử dụng giá trị trước đó cho x ở phía bên tay phải Về mặt phân tích, điều này có thể được viết là:
ở đâu là xấp xỉ hoặc lần lặp thứ k của là lần lặp tiếp theo hoặc + 1 của X Tuy nhiên, bằng cách tận dụng dạng k tam giác của ( + ), các phần tử của D ωL x ( k +1) có thể được tính tuần tự bằng cách ể :
Trang 62.THUẬT TOÁN
Vì các phần tử có thể bị ghi đè khi chúng được tính toán trong thuật toán này nên chỉ cần một vectơ lưu trữ và việc lập chỉ mục vectơ được bỏ qua Thuật toán diễn ra như sau:
Inputs: , , A b ω
Output: φ
Choose an initial guess to the solutionφ
repeat until convergence
for ifrom until 1 ndo
set to 0σ
for jfrom until 1 ndo
≠ ifj ithen
set to σ σ + a ij φ j
end if
end ( -loop)j
set to φ i (1 − ω)φ i + ω(b i − ) / σ a ii
end ( -loop)i
check if convergence is reached
end (repeat)
Ghi chú
cũng có thể được viết ,
do đó tiết kiệm được một phép nhân trong mỗi lần lặp của vòng lặp - bên ngoài for
1.Chương trình 1
function [ x, err, iter, flag ] = sor(A, x, b, w, max_it, tol)
%
% [ x, err, iter, flag ] = sor(A, x, b, w, max_it, tol)
%
% SOR Successive Over-Relaxation Method
% This function solves linear equation systems such as Ax=b using SOR
Trang 7% method (Successive Over-Relaxation).
% When the relaxation scalar w=1, the method used is Gauss-Seidel
%
% Input:
% A - input matrix
% x - inicial vector
% b - vector b
% w - relaxation scalar
% max_it - maximum number of iterations
% tol - tolerance
%
% Output:
% x - solution vector
% err - norm err estimate
% iter - nu,ber of performed iterations
% flag - 0 = a solution was found / 1 = no convergence for max_it
%
% Example:
% [ x, err, iter, flag ] = sor( [.5 125; 125 25], zeros(2,1),
% ones(2,1), 5, 1e4, 1e-4 )
%
% Author: Tashi Ravach
% Date: 08/06/2006
%
if nargin == 3
w = 5;
max_it = 1e4;
tol = 1e-4;
elseif nargin == 4
max_it = 1e4;
tol = 1e-4;
elseif nargin == 5
tol = 1e-4;
elseif nargin ~= 6
error('sor: invalid input parameters'); end
flag = 0;
Trang 8iter = 0;
norma2_b = norm(b);
if (norma2_b == 0.0)
norma2_b = 1.0;
end
r = b - A * x;
err = norm(r) / norma2_b;
if (err < tol)
return
end
% separate A into several matrix for SOR/Gauss-Seidel
[ M, N, b ] = matsep(A, b, w, 2);
for iter = 1 : max_it
x_1 = x;
x = M \ (N * x + b); % adjust the aproximation %err = norm(x - x_1) / norm(x); % compute error
err = norm(x_1 - x, 1); % compute error
if (err <= tol) % check for convergence break
end
end
b = b / w; % vector b
if (err > tol) % no convergence
flag = 1;
end
end
function [ M, N, b ] = matsep(A, b, w, flag)
%
% [ M, N, b ] = matsep(A, b, w, flag)
%
% MATSEP Matrix Separation
% Input matrix is splitted into several others in diferent ways depending
% on the method to be used: Jacobi and SOR (Gauss-Seidel when w = 1)
%
% Input:
% A - input matrix
% x - inicial vector
Trang 9% b - vector b
% flag - 1 = Jacobi / 2 = SOR
%
% Output:
% M - matrix M
% N - matrix N
% b - vector b (modified for SOR)
%
% Author: Tashi Ravach
% Date: 08/06/2006
%
if nargin ~= 4
error('matsep: invalid input parameters'); end
[ m, n ] = size(A);
if m ~= n
error('matsep: input matrix A must have dimension nXn');
end
[ l, o ] = size(b);
if l ~= n && o ~= 1
error('matsep: input matrix b must have dimension nX1');
end
if (flag == 1) % separation for Jacobi
M = diag(diag(A));
N = diag(diag(A)) - A;
elseif (flag == 2) % separation for SOR/Gauss-Seidel
b = w * b;
M = w * tril(A, -1) + diag(diag(A));
N = -w * triu(A, 1) + (1.0 - w) * diag(diag(A)); end
end
2.Chương trình 2
format short
clear all
clc
% slove the problem
% 2x1 -x2 = 7
Trang 10% x p x ban đ u là (0,0,0)
A = [2 -1 0; -1 2 -1; 0 1 -2];
b = [7;1;1];
x = [0;0;0];
maxiter = 150;
err = 1e-5;
maxerr = input('enter the error allowed: ');
w = input('enter the relaxtion parmeter: ');
if size(A,1) ~= size(A,2)
disp('ERROR: MATRIX A SHOULD BE A SQUARE ') return
end
if size(b,1) ~= size(A,1) || size(b,2) ~= 1
disp('ERROR:input error please re-input data ') return
end
if size(x,1) ~= size(A,1) || size(x,2) ~= 1
disp('ERROR: please check input ')
return
end
D = diag(diag(A));
L = tril(A) - D;
U = triu(A) - D;
H = inv(D+w*L)*((1-w)*D-w*U);
C = w*inv(D+w*L)*b;
e = max(eig(H));
iter = 1;
y(1,:) = x;
if e<1
while sum(abs(err) <= maxerr) ~= size(A,1) xnew = H*x+C;
err = xnew-x;
x = xnew;
iter = iter+1;
y(iter,:) = x
if iter==maxiter
break
end
end
else
disp('NOT CONVERGED');
end
fprintf(' solution obtain after iteration is \n',iter) disp(x)
Được trích dẫn từ :
https://sites.google.com/site/harishg58iitr/?pli=1 (Dr Harish Garg)
https://en.wikipedia.org/wiki/Successive_over-relaxation
https://www.wolframalpha.com/input?
i=successive+overrelaxation+method&assumption=%22ClashPrefs
%22+-%3E+%7B%22MathWorld%22%2C+
%22SuccessiveOverrelaxationMethod%22%7D
Trang 11Barrett, R.; Berry, M.; Chan, T F.; Demmel, J.; Donato, J.; Dongarra, J.; Eijkhout, V.; Pozo, R.; Romine, C.; and van der Vorst, H Templates for the Solution of Linear Systems:
Building Blocks for Iterative Methods, 2nd ed Philadelphia, PA: SIAM,
Young, D Applied Iterative Methods New York: Academic Press, 1981.Kahan, W Gauss-Seidel Methods of Solving Large Systems of Linear Equations Ph.D thesis Toronto,
Canada, University of Toronto, 1958.Press, W H.; Flannery, B P.; Teukolsky, S A.; and Vetterling, W T "Successive Overrelaxation (SOR)." Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed Cambridge, England: Cambridge University Press,
pp 866-869, 1992.Varga, R Matrix Iterative Analysis Englewood Cliffs, NJ: Prentice-Hall, 1962.Young, D Iterative Solutions of Large Linear Systems New York: Academic Press, 1971.