Tải bản đầy đủ (.ppt) (31 trang)

Bài giảng phương pháp tính chương 2 hệ phương trình tuyến tính ax =b TS nguyễn quốc lân

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.1 MB, 31 trang )

BỘ MƠN TỐN ỨNG DỤNG - ĐHBK
-------------------------------------------------------------------------------------

PHƯƠNG PHÁP TÍNH – BG SINH VIÊN
CHƯƠNG 2
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH
Ax = b
TS. NGUYỄN QUỐC LÂN (2/2006)


NỘI DUNG
---------------------------------------------------------------------------------------------------------------------------

A- CÁC PHƯƠNG PHÁP CHÍNH XÁC
1- PHƯƠNG PHÁP KHỬ GAUSS (PHẦN TỬ TRỤ)
2- PHÂN TÍCH NHÂN TỬ A = LU
3- PHÂN TÍCH CHOLESKY
B- CÁC PHƯƠNG PHÁP LẶP
1- LẶP JACOBI
2- LẶP GAUSS - SEIDEL
C- SỐ ĐIỀU KIỆN – HỆ ĐIỀU KIỆN XẤU


TỔNG QUAN
--------------------------------------------------------------------------------------------------------------------------------

Hệ n phương trình bậc 1 (tuyến tính), n ẩn → Dạng Ax = b:
a11 a12  a1n 
a
a22  a2 n 
,


A =  21
 


an1 an 2  ann 


Đơn giản: Hệ tam giác

b1 
b 
b =  2 ,
 
 
bn 

 x1 
x 
x =  2  = [ x1  xn ] T
 
 
 xn 

a11 a12  a1n 
0 a
 a2 n 
22
 ⇒ Giải lùi
A=
............................ 



0
0
 ann 


Hàng i: hi = [ai1 ai2 … ain]T. Biến đổi sơ cấp trên hàng hi → hi
+ khj: Nhân hj với k rồi cộng xuống hi (chỉ hi thay đổi)


PHƯƠNG PHÁP KHỬ GAUSS
-----------------------------------------------------------------------------------------------------------------------------------

Giải thuật: Biến đổi sơ cấp trên hàng → A: ∆ trên → Giải lùi
2 x1 − 2 x2 + 3 x3 = 1

VD: Giải hệ 6 x1 − 7 x2 + 14 x3 = 5 Xây dựng ma trận mở rộng
4 x − 8 x + 30 x = 14
 1
2
3
2 − 2 3 1  Khử cột 1 với hệ số khử m1j
a1 j
aij
5
A = [ A | b] = 6 − 7 14


m1 j =

Tổng quát : mij =
a11
aii
4 − 8 30 14 


6
m21 = = 3
2 − 2 3 1  h2 → h2 − 3h1 2 − 2 3 1 
2
0 −1 5
⇒ 6 − 7 14
5

2




4
h3 → h3 − 2h1  0 − 4 24
m31 = = 2
4 − 8 30 14 
12




2



GIẢI LÙI & PHẦN TỬ TRỤ
-------------------------------------------------------------------------------------------------------------------------------

−4
=4
−1
2 − 2 3 1  h → h − 4h 2 − 2 3 1 
2
0 − 1 5
 3→ 3
0 − 1 5 2 
2




0 4 4
0 − 4 24 12 
0





Khử cột 2 với hệ số khử: m32 =

Giải lùi với hệ tam giác trên thu được:
2 x1 − 2 x2 + 3 x3 = 1
 x3 = 4 4 = 1

2

− x2 + 5 x3 = 2 ⇒  x2 = ( 2 − 5 x3 ) ( − 1) = 3 ⇒ x = 3 


 

 x = (1 + 2 x − 3x ) 2 = 2
4 x3 = 4
1 

 
 1
2
3
Điều kiện: Khử cột 1: a11(1) ≠ 0 & Khử cột 2: a22(2) ≠ 0 &
Giải lùi: a33(3) ≠ 0 ⇒ Phần tử trụ (pivot) akk ≠ 0


KHỬ GAUSS VỚI LỆNH MAPLE
--------------------------------------------------------------------------------------------------------------------------------

> with(linalg); # Khởi động gói lệnh Đại số tuyến tính
> A := matrix(2,3,[2, 3, 4, 1, 2, 3]); # Nhập ma trận
> m21 := A[2,1]/A[1,1]; # Tính hệ số khử
> A := addrow(A,1,2,–m21) ; # Cộng hàng h2 → h2 – m21h1
> A := swaprow(A,1,2) ; # Nếu cần thiết, đổi hàng h2 ↔ h1
> x := backsup(A) ; # Hệ đã ở dạng tam giác trên: Giải lùi
> AA := gausselim(A); # Lệnh gộp khử Gauss toàn ma trận
VD: Giải hệ


 x1 − x2 + 2 x3 − x4 = −8
2 x − 2 x + 3 x − 3 x = −20
 1
2
3
4

= −2
 x1 + x2 + x3
 x1 − x2 + 4 x3 + 3 x4 = 4



KHỬ GAUSS VỚI MA TRẬN “LẺ”: PIVOT ĐƠN VỊ
-------------------------------------------------------------------------------------------------------------------------------------

VD: Giải hệ với phép khử 2.08 x1 − 1.3 x2
= 0.608
Gauss, làm tròn 3 chữ số lẻ) − 0.7 x1 + 2.08 x2 − 1.3 x3 = −0.152


− 0.7 x2 + 2.08 x3 − 1.3 x3 = −0.168
− 0.7 x3 + 2.08 x4
= 1.116

0
0 1.264 
 2.08 − 1.3
− 0.7 2.08 − 1.3

0 − 0.152

⇒ [ A b] = 
− 0.7 2.08 − 1.3 − 0.168
 0
 0
0 − 0.7 2.08 1.116 


1.006 
0.636

⇒y=
0.593
0.736




THỰC TẾ TÍNH TỐN: VẤN ĐỀ LÀM TRỊN SỐ
---------------------------------------------------------------------------------------------------------------------------------

VD: Giải hệ trên máy tính với phép làm trịn 4 chữ có nghĩa
0.003 x1 + 59.14 x2 = 59.17 (E1 )
Nghiệm chính xác: [10, 1]T

5.291x1 − 6.130 x2 = 46.78 (E 2 )
Quy tắc làm trịn trên máy tính: Làm trịn chữ số có nghĩa
12,34567 = 1,234567 ⋅101 ≈ 1,235 ⋅101 = 12,35
Trụ khử: a11 = 0.003 ≠ 0 ⇒


m21 =

a21
= 1763,67 ≈ 1764
a11

Biến đổi cột một: (E2) → (E2) – m21(E1)
0.003 x1 + 59.14 x2 = 59.17

− 104300 x2 = −104400


 x2 = 1.001
⇒ 
: Taïi sao ???
 x1 = −10


PHÂN TÍCH NHÂN TỬ (MATRIX FACTORIZATIONS)
---------------------------------------------------------------------------------------------------------------------------------

Ma trận vng A phân tích được thành dạng LU ⇔
1 0
* 1
A=
* *
* *
  



0
0
1
*


0 * *
0  0 *
⋅
0  0 0
1  0 0
     


L

*
*
*
0


*  Hệ Ax = b ⇔ (LU)x = b ⇔
*

Ux = y (1)
*
: 2 hệ tam giác



 Ly = b ( 2 )
*
 

U

Giải hệ đầu ⇔ Giải 2 hệ ∆: Ly = b (2) tìm y; Ux = y (1) tìm x
Nhân A
x

b
Nhân U

y

Nhân L


VÍ DỤ
---------------------------------------------------------------------------------------------------------------------------------

Giả sử ma trận A phân tích được thành dạng LU như sau:
2  1
0
 3 −7 −2
− 3
5
1
0  − 1

1

=
A=
0 − 5  2 − 5
 6 −4
− 9
5 − 5 12 − 3
8

 

0
0
1
3

0 3 − 7 − 2 1 
0  0 − 2 − 1
1
⋅

0  0
0 −1
1
1  0
0
0 − 1
 



Sử dụng phân tích LU trên giải hệ Ax = b = [–9 5 7 11]T
Giải Ly = b tìm y

Giải Ux = y tìm x


PHÂN TÍCH NHÂN TỬ A = LU
---------------------------------------------------------------------------------------------------------------------------------

Quan sát: Ma trận khử L và ma trận kết quả U. Xét tích L.U
1 0 0  2 − 2 3
3 1 0  ⋅ 0 − 1 5  =

 

2 4 1 0 0 4 

 

Kết quả: Nếu quá trình khử Gauss diễn ra bình thường
(khơng đổi hàng), ma trận A của hệ Ax = b phân tích được
thành tích LU: A = LU với
 L (lower): ma trận tam giác dưới, đường chéo chính bằng
1, chứa các hệ số khử ở vị trí khử
 U (upper): ma trận tam giác trên, cũng là ma trận kết quả

nhận được sau quá trình khử Gauss



GIẢI THUẬT TÌM LU (CROUT – DOOLITLE)
---------------------------------------------------------------------------------------------------------------------------------

Phân tích LU với đường chéo chính L bằng 1 ⇒ Khử Gauss
(khơng đổi hàng). Các hệ số khử tạo L, ma trận kết quả: U
2 − 2 3 m21 = 3
VD: A = 6 − 7 14  : m31 = 2


4 − 8 30 m32 = 4



1 0 0 
⇒ L = 3 1 0 


2 4 1



L (hoặc U) có đchéo chính = 1 ⇒ G/thuật Doolitle (Crout)
For j = 1 to n: i = 1 → j

i −1

uij = aij − ∑ lik ukj

1
i = j +1 → n lij =

u jj

k =1

j −1



aij − ∑ lik ukj 

k =1



Tự xem
SGK/ 35


MINH HOẠ GIẢI THUẬT DOOLITLE (ĐCHÉO L = 1)
-------------------------------------------------------------------------------------------------------------------------------

2 − 2 3
VD: A = 6 − 7 14 


4 − 8 30


j = 1:


j = 2:

i = 1 u11 = a11
a
21 = 21
i=2
u11
i=1

u12 = a12

1 0 0

⇒ L =  1 0 ,U =  0



1

0




i = 3 31 =

0

a31
u11


i = 2 u 22 = a22 − 21u12

a32 − 31u12
i = 3 32 =
u22
j = 3:

i = 1 u13 = a13

i = 2 u23 = a23 − 21u13
i=3

i=3

u33 = a33 − 31u13 − 32u 23








PHÂN TÍCH CHOLESKY
----------------------------------------------------------------------------------------------------------------------------

Tương tự phân tích LU nhưng gọn hơn “phân nửa”!
Ma trận vuông A (n hàng, n cột) : A = [ aij ] xác định dương
n


n

∀ x = [ x1 , , xn ] ∈ R n , x ≠ 0 : xT Ax = ∑∑ aij xi x j > 0
T

i =1 j =1

1
0
1
5 − 2  : ma trận (đối xứng) xác định dương vì
VD: A = 1


2
0 − 2


2
2
∀ x = [ x1 , x2 , x3 ] ∈ R 3 ⇒ xT Ax = x12 + 5 x2 + 2 x3 + 2 x1 x2 − 4 x2 x3 > 0
T

A: XĐD⇔ n định thức con (hvng) trên đ/chéo chính đều > 0


GIẢI THUẬT CHOLESKY
-------------------------------------------------------------------------------------------------------------------------------


Định lý: Ma trận A đối xứng xác định dương ⇔ Tồn tại ma trận tam giác dưới B thoả mãn : A = BBT

A đối xứng: For i = 1 to n do

i −1

2
bii = aii − ∑ bik

1
For j = i+1 to n do b ji =
bii

k =1

i −1


a ji − ∑ b jk bik 



k =1

Ax = b ⇔ (BBT)x = b ⇔ BTx = y & By = b: 2 hệ ∆ (như LU)
A k0 xác định dương (chỉ đối xứng): A = BBT có thể chứa số
phức ⇒ 2 hệ BTx = y & By = b: phức. Nhưng nghiệm x: thực!


MINH HOẠ GIẢI THUẬT CHOLESKY

-------------------------------------------------------------------------------------------------------------------------------

1
0
1

5 −2
VD: A = 1

2
0 − 2


i=1

a21
b21 =
b11

2
b22 = a22 − b21

j=3
i=3

0

0
0





b11 = a11
j=2

i=2


⇒B=




a32 − b31b21
b32 =
b22

2
2
b33 = a33 − b31 − b32

j=3

a31
b31 =
b11


TỔNG QUAN PHƯƠNG PHÁP LẶP

---------------------------------------------------------------------------------------------------------------------------

Chương 1: Phương pháp lặp đơn với phương trình f(x) = 0
 x = ϕ ( x)
f ( x) = 0 ⇔ 
⇒ xn +1 = ϕ ( xn )
 ϕ ( x) − ϕ ( y ) ≤ q x − y : ϕ ' ( x ) ≤ q < 1
Hệ Ax = b ⇔ x = Tx + c = ϕ(x), T: ma trận, c: vectơ. Đkiện:
ϕ(x) – ϕ(y)≤ qx – y ⇒ Dãy lặp: x(n+1) = Tx(n) + c
Chuẩn vectơ, ma trận: x = [x1, x2 … xn]T ∈ Rn, A = [aij ]
n

x ∞ = max{ xi } ⇒ A ∞ = max  ∑ aij 
1≤i ≤ n
1≤i ≤ n  j =1

n
n

x 1 = ∑ xi ⇒ A 1 = max ∑ aij 
1≤ j ≤ n i =1

i =1


VÍ DỤ
---------------------------------------------------------------------------------------------------------------------------

 Tính các chuẩn vectơ và ma trận


 1
− 1 3 2 
x∞= 3
− 3  ⇒ 
− 2 4 3 ⇒  A ∞ = 12
x=
A=
  x = 6

  A = 13
− 2  1
− 5 6 − 1  1
 


 Vectơ nào trong số hai vectơ sau xấp xỉ tốt nhất theo chuẩn
∞, chuẩn một nghiệm hệ phương trình
x ( 1)

− 0.1
0.3 
= − 7.4 , x ( 2 ) = − 6.8




 5.2 
4.7 






 x1 + 2 x2 + 3x3 = 1

2 x1 + 3x2 + 4 x3 = −1
3 x + 4 x + 6 x = 2
 1
2
3

 ( 2) . ∞
x ≈ x
→
.1
 x ( 1) ≈ x


Tch. chuẩn vectơ, chuẩn ma trận: Chuẩn tích ≤ tích chuẩn
Ax ≤ A ⋅ x



ϕ ( x) − ϕ ( y ) = T ( x − y) ≤ T ⋅ x − y : T < 1


LẶP JACOBI
----------------------------------------------------------------------------------------------------------------------------------Với vectơ x(0) = [0, 0, 0]T, tìm vectơ nghiệm xấp xỉ x(k) của phép lặp
Jacobi với hệ sau. Dừng: x(k) “giống” x(k-1) (khoảng 0.3)


10 x1 + 3 x2 + x3 = 7.5

− 3 x1 + 10 x2 − x3 = 9
− x + 2 x + 8 x = −2.5
 1
2
3

. So với nghiệm α = [0.5, 1, -0.5]T
1/ Rút x trên đường chéo chính ⇒ Đưa về dạng x = Tx + c
 x = − 3 x − 1 x + 7.5 = −0.3x − 0.1x + 0.75
2
3
2
3
 1
10
10
10

3
1
9

⇔ x = Tx + c
 x2 = x1 + x3 + = 0.3x1 + 0.1x3 + 0.9
10
10
10


1
2
2.5

x3 = x1 − x2 −
= 0.125 x1 − 0.25 x2 − 0.3125

8
8
8



CÔNG THỨC LẶP JACOBI
---------------------------------------------------------------------------------------------------------------------------

0
−3
−1 
10
10
 0.75 

3
1  , T = max  4 , 3 = 4 < 1, c =  0.9 
T=
0




10
10 



10 8  10
− 0.3125
1


−2
0 
 8

8
(
(
 x1(1) = −0.3 x20 ) − 0.1x30 ) + 0.75 = 0.75
 (1)
(
(0)
(1)
x2 = 0.3 x1( 0 ) + 0.1x30 ) + 0.9 = 0.9
2/ Từ x tính x : 
 x (1) = 0.125 x ( 0 ) − 0.25 x ( 0 ) − 0.3125 = − 0.3125
1
2
 3
(
(

(
 x1 k +1) = −0.3 x2k ) − 0.1x3k ) + 0.75
 ( k +1)

(
(
(k)
(k+1)
= 0.3 x1 k ) + 0.1x3k ) + 0.9
Tổng quát: x ⇒ x :  x2
 ( k +1)
(
(
= 0.125 x1 k ) − 0.25 x2k ) − 0.3125
 x3

(k)
Sai số: Như lặp đơn với q = ||T||∞ : x − x * ∞ ≤

q
x ( 1) − x ( 0 )
1− q




LẶP JACOBI KHÔNG BIẾN ĐỔI MA TRẬN A
---------------------------------------------------------------------------------------------------------------------------

− 3 x2 − x3 + 7.5

10 x1 + 3 x2 + x3 = 7.5 Đ / chéo 10 x1 =


⇔ 10 x2 = 3x1
+ x3 + 9
Hệ Ax = b: − 3 x1 + 10 x2 − x3 = 9
chính
 8x = x − 2x
− x + 2 x + 8 x = −2.5
− 2.5
 3
 1
1
2
2
3
(
(
10 x1( k +1) =
− 3 x2k ) − x3k ) + 7.5 : Giữ đ/chéo chính ở vế trái
 ( k +1)
(
10 x2 = 3 x1( k )
+ x3k ) + 9 (→ x(k+1)) ; Chuyển số hạng

 8 x ( k +1) = x ( k ) − 2 x ( k )
− 2.5 còn lại sang vế phải (→ x(k))
3
1
2



(
(
 10 x1( k +1) + 3 x2k ) + x3k ) = 7.5 : Thay x(k) vào các số hạng

(k )
(
(
+ 10 x2k +1) − x3k ) = 9
ngồi đường chéo chính.
− 3 x1

(
(
− x1( k ) + 2 x2k ) + 8 x3k +1) = − 2.5 Xem x(k+1) là ẩn. Giải→x(k+1)



TÍNH TỐN & KẾT QUẢ LẶP JACOBI
-----------------------------------------------------------------------------------------------------------------------------------(
(
10 x1( k +1) = −3 x2k ) − x3k ) + 7.5
10 x1 + 3 x2 + x3 = 7.5

 ( k +1)

(
Heä : − 3 x1 + 10 x2 − x3 = 9 ⇔ Laëp Jacobi : 10 x2 = 3x1( k ) + x3k ) + 9
− x + 2 x + 8 x = −2.5

 ( k +1)
(
8 x3 = x1( k ) − 2 x2k ) − 2.5
 1
2
3

(
(
 ( k +1) − 3 x2k ) − x3k ) + 7.5
k
0
1
2
=
 x1
10
x1(k)
0.0
0.75

(k )
(k )
 ( k +1) 3 x1 + x3 + 9
x2(k)
0.0
0.9
 x2 =
10


x3(k)
0.0
–0.3125
(k )
(k )
 ( k +1) x1 − 2 x2 − 2.5
 x3 =
||x(k)-x(k-1)||∞
0.9
8


Ưu điểm Lặp Jacobi: Giải các hệ “thưa” (chứa rất nhiều số 0)
ĐK đủ : T



< 1 ⇔ M/trận đ/c trội nghiêm ngặt: aii >

n



j =1, j ≠ i

aij ∀ i


LẶP GAUSS – SEIDEL
---------------------------------------------------------------------------------------------------------------------------


Tương tự lặp Jacobi nhưng với thông tin cập nhật hoá
(
(
 ( k +1) − 3 x2k ) − x3k ) + 7.5
=
Dùng x(k)
 x1
10
10 x1 + 3 x2 + x3 = 7.5


(
Lặp
để tính
 ( k +1) 3 x1( k ) + x3k ) + 9

Heä : − 3 x1 + 10 x2 − x3 = 9 ⇔  x2 =
Jacobi
10
giá
trị

− x + 2 x + 8 x = −2.5
(
 1
2
3
 ( k +1) x1( k ) − 2 x2k ) − 2.5 của x(k+1)
 x3 =

8

(
(
 ( k +1) − 3 x2k ) − x3k ) + 7.5
=
 x1
10
 x1 (mới): dùng x2 (cũ), x3 (cũ)

(
Gauss
 ( k +1) 3 x1( k +1) + x3k ) + 9
⇒  x2 =
 x2 (mới): dùng x1 (mới), x3 (cũ)
Seidel
10

(
 ( k +1) x1( k +1) − 2 x2k +1) − 2.5  x3 (mới): dùng x1 (mới), x2 (mới)
 x3 =
8



LẶP GAUSS – SEIDEL: SƠ ĐỒ TÁCH MA TRẬN
--------------------------------------------------------------------------------------------------------------------------

Trình bày dạng khác: Xem x(k+1) là ẩn và chuyển sang vế trái
(

(
 10 x1( k +1)
= −3 x2k ) − x3k ) + 7.5
10 x1 + 3 x2 + x3 = 7.5


( k +1)
( k +1)
(
=
x3k ) + 9
− 3 x1 + 10 x2 − x3 = 9 ⇔ − 3 x1 + 10 x2
− x + 2 x + 8 x = −2.5 
(
(
 1
− x1( k +1) + 2 x2k +1) + 8 x3k +1) =
− 2.5
2
3


x( 0)
k = 0 → b( k )
k = k +1
Giải hệ → x ( k +1)
Gauss - Seidel: Biết x(k) → Tính vế phải b(k) → Giải hệ ra x(k+1)


LẶP GAUSS – SEIDEL: VÍ DỤ TÁCH MA TRẬN

---------------------------------------------------------------------------------------------------------------------------

Xét ví dụ lặp Gauss – Seidel, x(0) = [0, 0, 0]T. Công thức lặp:
(
(
 10 x1( k +1)
= −3 x2k ) − x3k ) + 7.5

(
(
− 3 x1( k +1) + 10 x2k +1)
=
x3k ) + 9


(
(
− x1( k +1) + 2 x2k +1) + 8 x3k +1) =
− 2.5


k

0
x

x1(k)

b


x

2
b

x

0.0

x3(k)

1

0.0

x2(k)



→ b( k )




0.0

||x(k)-x(k-1)||∞

Phép lặp ⇔ Thay hệ Ax = b bằng giải liên tiếp nhiều hệ ∆


b


×