Các phương pháp này gồm có: • Phương pháp lặp Jacobi: Phương pháp này tính giá trị của một biến dựa trên giá trị của các biến khác.. • Phương pháp lặp Gauss ‐ Seidel: Nó tương tự như phư
Trang 1CHƯƠNG 3: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
n
bbb
1 2
n
xxx
Trang 2Trong đó một ma trận là ma trận không gian hàng của ma trận [A] và được viết dưới dạng tổ hợp của:
Trang 3Chú ý là ma trận [A] có số hàng lớn hơn số cột cho nên không nghịch đảo được. Nghiệm sai số bình phương bé nhất tìm được nhớ dùng lệnh pinv hay phép chia trái (ctover.m):
Trang 4(k 1) (k) (k 1) ik (k 1)
ij ij (k 1) kj
kk (k 1) (k) (k 1) ik (k 1)
Trang 5(2) 3
1 (0) 1 1j j
j 2 11
m (i 1) (i 1)
i (i 1) i ij j
j i 1 ii
Trang 7và khi đó nghiệm của hệ chính là [B*]. Trong phương pháp Gauss ‐ Jordan mỗi bước tính phải tính nhiều hơn phương pháp Gauss nhưng lại không phải tính nghiệm. Để đưa ma trận [A] về dạng ma trận [E] tại bước thứ i ta phải có
aii = 1 và aij = 0. Như vậy tại lần khử thứ i ta biến đổi:
1. aij = aij/aii (j = i + 1, i + 2, , n)
Trang 92. Phân tích Doolittle: Ta xét hệ phương trình [A][X] = [B]. Nếu ta phân tích
ma trận [A] thành tích hai ma trận [L] và [R] sao cho:
trong đó [L] là ma trận tam giác trái và [R] là ma trận tam giác phải. Vởi ma trận bậc 3 [L] và [R] có dạng:
Trang 101 2 3
Trang 12Trong đó [Q] là ma trận trực giao, nghĩa là [Q]T[Q] = [E], và [R] là ma trận tam giác phải. Như vậy phương trình trở thành:
Trang 13
Sau đó ta tìm nghiệm của phương trình [L][R][X] = [B] bằng cách giải phương trình [L][Y] = [B] và sau đó là phương trình [R][X] = [Y]. Phương trình [L][Y] = [B] có dạng:
Trang 15
và ta lưu ma trận [A] dưới dạng vec tơ:
Trang 18
Ta xét hệ phương trình đại số tuyến tính [A][X] = [B]. Ta đưa về dạng lặp:
Sau mỗi lần tính ta có số dư:
Khi lặp từ phương trình này, các ma trận [C] và [D] không đổi. Vì vậy nên các phương pháp xuất phát từ đây gọi là các phương pháp lặp tĩnh. Các phương pháp này dễ hiểu, dễ lập trình nhưng không hiệu quả.
Các phương pháp này gồm có:
• Phương pháp lặp Jacobi: Phương pháp này tính giá trị của một biến dựa trên giá trị của các biến khác. Nó hội tụ chậm và rất có thể không hội tụ trong một số trường hợp.
• Phương pháp lặp Gauss ‐ Seidel: Nó tương tự như phương pháp lặp Jacobi nhưng khi tính giá trị của biến thứ k ta dùng các giá trị các biến vừa được cập nhật. Phương pháp này hội tụ nhanh hơn phương pháp lặp Jacobi nhưng không nhanh bằng các phương pháp lặp không ổn định.
• Phương pháp lặp có tăng SOR: Phương pháp này đưa ra từ phương pháp Gauss ‐ Seidel bằng cách đưa thêm hệ số ngoại suy ω. Với ω được chọn tối ưu, phương pháp này hội tụ nhanh hơn phương pháp Gaus ‐ Seidel. Khi ω = 1 phương pháp SOR trở thành phương pháp Gauss ‐ Seidel. Tốc độ hội tụ của phương pháp SOR phụ thuộc vào ω
• Phương pháp lặp có tăng đối xứng SSOR: Phương pháp này không có
ưu điểm nào trội hơn SOR.
Các phương pháp lặp không ổn định mới được xây dựng, khó hiểu, nhưng hiệu quả cao. Trong quá trình lặp, việc tính toán bao hàm các thông tin thay đổi sau mỗi bước tính.
Các phương pháp này bao gồm:
• Phương pháp gradient liên hợp CG(Conjugate Gradient): Phương pháp này tạo ra một dãy các vec tơ liên hợp (hay trực giao) là số dư của phép lặp. Chúng cũng là gradient của một hàm bậc 2 mà việc tìm cực tiểu tương đương với việc giải hệ phương trình đại số tuyến tính. Phương pháp CG rất hiệu quả khi ma trận [A] đối xứng, xác định dương ví chỉ đòi hỏi lưu trữ một số ít phần tử. Tốc độ hội tụ của
phương pháp này phụ thuộc số điều kiện của ma trận (số điều kiện của
ma trận đo độ nhạy của nghiệm của hệ phương trình đại số tuyến tính
Trang 19với sai số trong số liệu. Nó cho biết độ chính xác của kết quả từ phép nghịch đảo ma trận và nghiệm của hệ phương trình đại số tuyến tính).
• Phương pháp số dư cực tiểu MINRES(Minimum Residual) và phương pháp LQ đối xứng SYMMLQ(Symmetric LQ)
• Phương pháp gradient liên hợp dùng cho hệ thường CGNE(Conjugate Gradient on Normal Equations) và CGNR(Conjugate Gradient on Normal Equations minimizing the Residual): Các phương pháp này dựa trên việc áp dụng phương pháp CG vào một trong hai dạng hệ phương trình đại số tuyến tính.
ma trận hệ số không đối xứng.
• Phương pháp gradient liên hợp kép BiCG(Biconjugate Gradient): Phương pháp này tạo ta hai dãy vec tơ giống như CG, một dựa trên hệ với ma trận [A] và một dựa trên [A]T. Thay vì trực giao hoá mỗi dãy, chúng trực giao tương hỗ hai “trực giao kép”. Nó rất hữu ít khi ma trận
có ma trận hệ số không đối xứng, không suy biến.
• Phương pháp gần như số dư cực tiểu QMR(Quasi ‐ Minimal Residual): Phương pháp QMR dùng bình phương tối thiểu để giải và cập nhật số dư BiCG. Phương pháp này dùng cho hệ phương trình có
ma trận hệ số không đối xứng.
• Phương pháp gradient liên hợp bậc 2 CGS(Conjugate Gradient Squared): Phương pháp CGS là một biến thể của BiCG, dùng cập nhất dãy [A] và [A]T. Phương pháp này có ưu điểm là không cần nhân với
ma trận hệ số chuyển vị và được dùng cho hệ phương trình đại số tuyến tính có ma trận hệ số không đối xứng.
• Phương pháp gradient liên hợp kép ổn định BiCGSTAB(Biconjugate Gradient Stabilized): Phương pháp BiCGSTAB cũng là một biến thể của
Trang 20• Phương pháp Chebyshev: Phương pháp này tính lặp các đa thức với các hệ số được chọn để cực tiểu hoá chuẩn của số dư theo nghĩa min ‐ max. Ma trận hệ số phải xác định dương. Nó được dùng cho hệ phương trình có ma trận hệ số không đối xứng.
Ta biết rằng tốc độ hội tụ của phép lặp phụ thuộc rất nhiều vào phổ của ma trận(các giá trị riêng của ma trận). Do vậy phép lặp thường đưa thêm một ma trận thứ hai để biến đổi ma trận hệ số thành ma trận có phổ thích hợp. Ma trận biến đổi như vậy gọi là ma trận điều kiện trước(preconditioner). Một preconditioner tốt sẽ cải thiện sự hội tụ của phương pháp lặp. Nhiều trường hợp, nếu không có preconditioner, phép lặp sẽ không hội tụ. Preconditioner đơn giản nhất chính là ma trận đường chéo mà Mi,j = Ai,j nếu i = j và các phần
Trang 21∑
=
1 j ij i
2 max b
2 / 1 n
1 i
n 1 j
2 ij
Trang 221 j ij i
i =β +∑α =
=
Lấy xấp xỉ ban đầu tuỳ ý x1(o) , x2(o) , , xn(o) và tất nhiên ta cố gắng lấy chúng tương ứng với x1, x2 , , xn (càng gần càng tốt). Tiếp theo ta giả sử rằng đã biết xấp xỉ thứ k xi(k) của nghiệm. Theo Seidel ta sẽ tìm xấp xỉ thứ (k+1) của nghiệm theo các công thức sau :
n 1
j ij1
n 2
j ij
) 1 k ( 1 21 1 )
n i j ij
1 i 1 j
) 1 k ( j ij i
Trang 23(jk 1) nn (nk)
1 n 1 j ij n
pháp Jacobi nhưng tính toán phức tạp hơn. Dể dễ hiểu phương pháp này chúng ta xét một ví dụ cụ thể:
+
=++
=++
14x
10x2x
2
13x
x10x
2
12x
xx
10
3 2
1
3 2 1
3 2 1
3
3 1
2
3 2
1
x2.0x2.04.1x
x1.0x2.03.1x
x1.0x1.02.1x
Trang 24x(k 1)+ =x(k) + αP r−1 (k)
Trang 252 i
Trang 27( )
j i j i ii
Trang 28tmp = b(m, :) ‐ a(m, 1:m‐1)*x(1: m ‐ 1, :) ‐ a(m, m + 1:n)*x(m + 1:n,:); x(m, :) = (1 ‐ omega)*x(m,:) + tmp*omega/a(m, m);
end
x(n, :) = (1 ‐ omega)*x(n,:) + omega*(b(n,:) ‐ a(n,1:n ‐ 1)*x(1:n ‐ 1,:))/a(n, n); err = sqrt((x ‐ x0)ʹ*(x ‐ x0));
+
=++
=++
14x
10x2x
2
13x
x10x
2
12x
xx
10
3 2
1
3 2 1
3 2 1
Trang 33Ta biết rằng gradient là hướng hàm tăng nhanh nhất. Như thế muốn đi đến cực tiểu ta cho [X], tính gradient và tìm theo hướng ngược lại cho đến khi hàm không giảm nữa. Phương pháp độ dốc lớn nhất (steepest descent) thực hiện thuật toán lặp, bắt đầu từ [X0]. Tại lần lặp thứ k, nghiệm được hiệu chỉnh bằng:
Trang 341952. Nó thích hợp để giải các hệ phương trình có ma trận [A] đối xứng, xác định dương. Nó là trường hợp đặc biệt của phương pháp Lanczos khi ma trận
Trang 40k T
r rˆ
Trang 46hệ phương trình tuyến tính không đối xứng. Thuật toán gồm có các bước sau: ‐ cho vec tơ nghiệm ban đầu tính [X0] ta tính [R0] = [B] ‐ [A][X0]
Trang 50x(k+1) = x(k) + αkp(k)
Trang 51‐ Cho [X0], tính:
• [R] = [B] ‐ [A][X0], γ0 = R , v = 0; v0 new = [R0]/γ0, βnew = 0
• c = 0, s = 0, cnew = 1, snew = 0
• p = 0, pnew = 0 ‐ Lặp với k = 1, 2,…
Trang 53‐ Cho x0, tính R0 = B ‐ Ax0
‐ v%(1) =R0, giải hệ M y v1 = % 1
Trang 54* d(i) = ηip(i) + θ γ( i 1 i− ) d2 (i 1)−
* s(i) = η + θ γip (% i 1 i− ) s2 (i 1)−
Trang 55• r(i) = r(i‐1) ‐ s(i)
Trang 57(i) (i)
for k = 1, ,i
Trang 58(i) (i) ( (i) (k)) (k)
Trang 60i i 1
a =+ bằng cách đặt u1 = a1, v1 = u1/ u Nói chung 1
Trang 61‐ xm = x0 + Vmym
Ta xây dựng hàm fom() để thực hiện thuật toán trên:
Trang 63xấu. Trước hết ta cần chú ý là bài toán bình phương bé nhất [A][X] = [B] tương đương với hệ phương trình tuyến tính dạng:
[ ] [ ]
[ ] [ ]
[ ] [ ]T
2
B1
B1
2
B1
Trang 66β1[v1] = {B], β =1 [ ]B 2. Tại lần lặp thứ k của phương pháp CG ta có được xk sao cho [rk] = [B] ‐ [A][Xk] trực giao. Do [Vk] là cơ sở trực giao nên ta có thể đặt [Xk] = [Vk][yk] và có:
[rk] = [B] ‐ [A][Vk][yk] = β1[v1] ‐ [Vk][Tk][yk] ‐ [ ]T[ ] [ ]
Trang 67với [ ]L là ma trận tam giác và k [ ]Q là ma trận trực giao. Thuật toán k
SYMMLQ gồm các bước sau:
‐ Tính x = xo, r = b ‐ Ax, ρ = r , v r= ρ
‐ β = 0, β =% 0, c = ‐1, s = 0, k = ρ
‐ vold = 0, w = v, g = 0, g 0% =
‐ Lặp khi k < tol:
• v Av% = − βvold
• α =v * v% , v v% = − α% v
• β = %v , vold =v, v v /= % β
• l1 = α − βs c% , l2 = βs
• α = − β − α% s% c , β = β% c
• l0 = α + β%2 2
• c= α% l ,s0 = β l0
• g g l g, g% = −ˆ 1 ˆ = −l g, g g l2 = % 0
• x x (gc)w +(gs)v= +
• w = sw ‐ cv
• k= g%2 +gˆ2
Ta xây dựng hàm symmlq() để thực hiện thuật toán này:
function x = symmlq(A, b, x, maxiter, tol)
%Ham thuc hien thua toan SYMMLQ voi A la ma tran doi xung
[m,n] = size(A);
n2b = norm(b);
xmin = x;
imin = 0;
tolb = tol * n2b;
r = b ‐ A * x;
normr = norm(r);
normrmin = normr;
v = r;
vold = r;
u = vold;
v = u;
Trang 71Để giải hệ phương trình bằng thuật toán SYMMLQ ta dùng chương trình
dụ nếu ma trận [M] xấp xỉ ma trận hệ số [A] theo một cách nào đó, hệ được biến đổi
[M]‐1[A][X] = [M]‐1[B]
sẽ có nghiệm như hệ phương trình [A][X] = [B] nhưng tính chất phổ của hệ số của ma trận [M]‐1[A] có thể thuận lợi hơn.