Tải bản đầy đủ (.doc) (29 trang)

Bài tiểu luận môn phương pháp tính nhóm 16

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 (333.96 KB, 29 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM TP.HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC SƯ PHẠM TP.HỒ CHÍ MINH










-
-
-
-
BÀI TIỂU LUẬN MÔN
BÀI TIỂU LUẬN MÔN


PHƯƠNG PHÁP TÍNH
PHƯƠNG PHÁP TÍNH
CHỦ ĐỀ 16
CHỦ ĐỀ 16
XẤP XỈ NGHIỆM CỦA HỆ PHƯƠNG TRÌNH
TUYẾN TÍNH
SVTH: Nguyễn Tuyến Duy
Lâm Thị Bích Thủy
Nguyễn Minh Vũ


Đình Thị Hải Yến
12
12
-
-
2
2
0
0
1
1
4
4
Mục lục
I.Đặt vấn đề Trang 1
II.Giải quyết vấn đề Trang 2
A. Kiến thức chuẩn bị Trang 2
1. Một số loại ma trận
1.1. Ma trận đường chéo trội
1.2. Ma trận xác định dương:
2. Số gần đúng Trang 3
B. Phương pháp giải gần đúng Trang 4
1. Phương pháp lặp đơn Trang 4
1.1 Cơ sở lí luận Trang 4
1.1.1 Nội dung phương pháp Trang 4
1.1.2 Các định lý cơ bản Trang 5
1.2 Thuật toán Trang 7
1.3 Ví dụ Trang 8
1.4 Đoạn chương trình Trang 11
2. Phương pháp Seidel Trang 16

2.1Nội dung phương pháp Trang 16
2.2 Định lý hội tụ Trang 16
2.3. Ví dụ áp dụng Trang 18
2.4. Đoạn chương trình Trang 22
III. Tài liệu tham khảo Trang 27
I. Đặt vấn đề
Trang 2
Nhiều vấn đề của khoa học kỹ thuật, kinh tế, môi trường quy về giải hệ phương trình tuyến
tính n phương trình n ẩn:

11 1 12 2 1 1
21 1 22 2 2 2
1 1 2 2


(1)


n n
n n
n n nn n n
a x a x a x b
a x a x a x b
a x a x a x b
+ + + =


+ + + =





+ + + =


Đặt
ij x
( )
n n
A a
=
là ma trận hệ số,
n
b∈¡
là vectơ cột hệ số tự do cho trước,
n
a ∈¡
là vectơ
cột cần phải tìm thì hệ số trên có thể viết dưới dạng:
Ax (2)b
=
.
Nếu
det 0A ≠
thì nghiệm của hệ (2) có thể tính theo công thức
1
x A b

=
. Ta có thể tìm nghiệm

của hệ phương trình bằng định lý Cramer như sau:
Định lý Cramer: Gọi
j
A
là ma trận nhận được từ ma trận A bằng cách thay cột thứ j bằng
cột b, khi đó hệ (2) có nghiệm duy nhất và
j
x
được tính bởi công thức:

detA
detA
j
j
x =

Tuy nhiên trong thực hành người ta không dùng công thức này để tính nghiệm vì số phép
tính quá lớn mà người ta dùng các phương pháp hữu hiệu khác. Trong số các phương pháp đó có
thể chia ra làm hai nhóm phương pháp lớn là phương pháp trực tiếp và nhóm phương pháp gián
tiếp.
Đặc điểm chung của nhóm phương pháp trực tiếp là sau một số hữu hạn phép tính sẽ có kết
quả, vì vậy nhóm phương pháp này thường được áp dụng với lớp các bài toán có kích thước nhỏ
và các số liệu ban đầu là đúng. Nếu như mọi tính toán của ta là chính xác thì các phương pháp
trên cho kết quả hoàn toàn chính xác.
Các phương pháp giải trực tiếp nói chung cần
3
cn
phép tính, trong đó c là hằng số, và người ta
ước lượng
2

3
c ≈
. Chẳng hạn như phương pháp Gauss mà ta xét ở trên là phương pháp giải đúng,
nghĩa là những phép tính sơ cấp được thực hiện đúng hoàn toàn thì cuối cùng ta được nghiệm
đúng của hệ. Tuy nhiên trên thực tế ta phải luôn luôn làm tròn khi thực hiện các phép tính. Vì
những lí do trên người ta đã tìm ra phải thường xuyên làm tròn các số, nghĩa là ta thường chỉ tính
toán trên các số gần đúng mà thôi, và như vậy sai số tổng hợp đôi khi có thể sẽ khá lớn. Liệu cách
làm tròn trong tính toán có làm ảnh hưởng nhiều đến kết quả cuối cùng không? Ví dụ sau đây cho
Trang 3
thấy rằng có những hệ phương trình đại số tuyến tính rất “ nhạy cảm” với sai số, nghĩa là sai số
nhỏ khi tính toán có thể ảnh hưởng nghiêm trọng đến kết quả cuối cùng. Nói một cách hình tượng
thì ta gặp tình huống “sai một li đi một dặm”. Những hệ thống phương trình kiểu này được gọi là
hệ phương trình không ổn định. Ví dụ ta xét hệ phương trình sau:

1 2
1 2
2x 2
2 1.01x 2.01
x
x
+ =


+ =


Hệ này có nghiệm
1 2
0.5 ; 1x x
= =


Tuy nhiên hệ phương trình sau đây với chút ít thay đổi hệ số trong hệ trên:

1 2
1 2
2x 2
2.01 1x 2.05
x
x
+ =


+ =

Hệ này lại có nghiệm
1 2
5 ; 8x x
= = −
, khác xa so với hệ trên đây.
Người ta tìm kiếm những phương pháp gần đúng để giải các bài toán, tức là ngay từ đầu
người ta chấp nhận kết quả xấp xỉ, hay sự xấp xỉ đã nằm ngay trong mô hình. Khi thực hiện tính
toán cụ thể chúng ta lại gặp sai số một lần nữa. Như vậy trong các phương pháp gần đúng thì sai
số sẽ là tổng hợp của sai số mô hình và sai số tính toán.
Trong tài liệu này, chúng em xin nhắc lại một số phương pháp tính đúng nghiệm của hệ
phương trình tuyến tính và giới thiệu một vài phương pháp để tính gần đúng.
II. Giải quyết vấn đề
A. Kiến thức chuẩn bị:
1. Một số loại ma trận:
1.1 Ma trận đường chéo trội:
Một ma trận

ij
( ) ( )
n
A a M
= ∈
¡
được gọi là ma trận đường chéo trội nếu một trong
hai điều kiện sau đây được thỏa mãn:
ij
. 1, :
ii
j i
i i n a a

∀ ∈ ≤


ij
. 1, :
jj
i j
ii j n a a

∀ ∈ ≤

Một ma trận được gọi là ma trận đường chéo trội chặt nếu một trong hai điều kiện
dưới đây được thỏa mãn:
ij
. 1, :
ii

j i
i i n a a

∀ ∈ <


ij
. 1, :
jj
i j
ii j n a a

∀ ∈ <

Ví dụ:
Ma trận sau được gọi là ma trận đường chéo trội chặt:
Trang 4
10 5 1
3 4 0
1 1 3
M
 
 
=
 
 

 

1.2 Ma trận xác định dương:

Ma trận đối xứng
(R)
n
A M

được gọi là xác định dương:
, 0
n
x R x
∀ ∈ ≠
ta đều có
, 0x xA
>

Ví dụ: Ma trận sau là ma trận xác định dương:

1 1 1
1 3 0
1 0 2
M

 
 
= −
 
 
 
Vì với mọi
3
( , , )t x y z R

= ∈
, ta có:
( ) ( )
2 2
2 2 2 2
1
, 3 2z 2x 2xz 2 2z 2
2
t tM x y y x y x y
 
= + + − + = − + + +
 
nên
3
, 0,t tM t R> ∀ ∈

Tuy nghiên đối với những ma trận có kích thước lớn, việc kiểm tra như trong ví dụ
trên là điều rất khó khăn. Do đó ta có hai định lý sau:
Định lý 1 (Định lý Sylvester)
Một ma trận A là xác định dương khi và chỉ khi mọi định thức con chính của A
đều dương, với định thức con chính cấp k
(1 )k n≤ ≤
của A là định thức con thu được
từ k hàng và k cột đầu tiên của A.
Định lý 2:
Với mọi ma trận A xác định dương,
1
A

tồn tại và cũng là ma trận xác định dương.

2. Số gần đúng:
Cho vectơ
( )
1 2
, , , ,
n
A A A A
=
vectơ
( )
1 2
, , ,
n
a a a a=
là biểu diễn thập phân gần
đúng củ
a vectơ A với sai số không quá
ε
nghĩa là:
p
A a
ε
− ≤

Trang 5
B. Phương pháp giải gần đúng
1. Phương pháp lặp đơn
1.1 Cơ sở lí luận
1.1.1 Nội dung phương pháp
Trong không gian

n
¡
, người ta xét 3 chuẩn quen thuộc sau:

1
1
1
1
2
2
2
1
max
i
i n
n
i
i
n
i
i
x x
x x
x x

≤ ≤
=
=
=
=

 
=
 ÷
 


Và chuẩn của ma trận
A
được xác định bởi:

0 1
sup sup
x x
Ax
A Ax
x
≠ ≤
= =
Khi đó với ma trận
( )
ij
n n
A a
×
=
sẽ có chuẩn tương ứng:

1
1
1

1
1
1
2
2
2
,
max
max
n
ij
i n
j
n
ij
j n
i
ij
i j
A a
A a
A a

≤ ≤
=
≤ ≤
=
=
=
 

=
 ÷
 



Để giải hệ
Ax b
=
với
( )
ij
n n
A a
×
=
;
1 1
2 2
;
n n
x b
x b
x b
x b
   
   
   
= =
   

   
   
L L
bằng phương pháp lặp đơn,ta biến
đổi về hệ tương đương dạng
x Bx g
= +
với:

11 12 1
21 22 2
1 2
n
n
n n nn
b b b
b b b
B
b b b
 
 
 
=
 
 
 
K
K
L L
K


1
2
n
c
c
g
c
 
 ÷
 ÷
=
 ÷
 ÷
 
L
Trang 6
Sau đó với một
( )
0
n
x

¡
(thường chọn
( )
0
x

g

) gọi là vectơ xấp xỉ đầu, ta thiết lập dãy
( )
{ }
k
k
x
bằng cách đặt:
( ) ( )
1
; 1
k k
x Bx g k

= + ≥

( )
3
Phương pháp lặp xác định theo hệ thức
( )
3
để giải hệ phương trình
( )
1
được gọi là phương
pháp lặp đơn. Ma trận B gọi là ma trận lặp, vectơ
( )
k
x
gọi là vectơ lặp thứ
k

.
Nếu dãy những vectơ lặp
( ) ( ) ( ) ( )
0 1 2
, , , , ,
k
x x x xK K
có giới hạn là
( )
lim
k
k
x x
→∞
=
thì giới hạn ấy
là nghiệm đúng của hệ phương trình. Thật vậy:
( ) ( )
( )
( )
1 1
lim lim lim
k k k
k k k
x x Bx g B x g Bx g
− −
→∞ →∞ →∞
= = + = + = +
Với một số điều kiện về ma trận B, dãy
( )

{ }
k
k
x
hội tụ đến nghiệm đúng
*x
của hệ
( )
1
. Sau đây ta xét một số điều kiện của ma trận B để dãy
( )
{ }
k
k
x
hội tụ đến nghiệm
đúng
*x
của hệ
( )
1
.
1.1.2 Các định lý cơ bản:
Định lý 1:
Nếu
1
1B
<
(hoặc
1B


<
) thì với mọi
( )
0
n
x

¡
, dãy
( )
{ }
0
k
k
x

xác định bởi
( )
3
hội
tụ tới nghiệm duy nhất
*x
của hệ phương trình
( )
1
, hơn nữa ta có:
( ) ( ) ( )
( ) ( ) ( )
1

1
1 1
1
1 0
1
1 1
1
*
1
*
1
k k k
k
B
x x x x
B
B
x x x x
B

− ≤ −

− ≤ −

Hoặc:
( ) ( ) ( )
( ) ( ) ( )
1
1 0
*

1
*
1
k k k
k
B
x x x x
B
B
x x x x
B


∞ ∞


∞ ∞

− ≤ −

− ≤ −

Chứng minh:
Đặt
1p
=
nếu
1
1;B p
< = ∞

nếu
1B

<
Trang 7

*x
là nghiệm của hệ
( )
2
nên
* *x Bx g
= +
.
Lấy (3) trừ đẳng thức này vế với vế ta được:
( ) ( )
( )
1
* *
k k
x x B x x

− = −
Do đó:
( ) ( )
( )
( )
1
* * *
k k k

p
p p
p
x x B x x B x x

− = − ≤ −
Vậy có
( ) ( )
( )
1
* *
k k
p
p
x x B x x

− = −
( )
*
Tương tự:
( ) ( )
( ) ( )
( ) ( )
1 2
2 1
1 0
* *

* *
* *

k k
p
p p
p
p p
p
p p
x x B x x
x x B x x
x x B x x
− −
− ≤ −
− ≤ −
− ≤ −
Nhân các đẳng thức này vế với vế và giản ước các thành phần giống nhau ở hai bên ta được:
( ) ( )
0
* *
k
k
p
p p
x x B x x
− ≤ −
Cho
k
→ ∞
thì vì
0 1
p

B
≤ <
theo giả thiết nên
0
k
p
B →
Do đó:
( )
* 0
k
p
x x
− →
khi
k
→ ∞
. Vậy phương pháp lặp (3) hội tụ.
Bây giờ xét các đánh giá sai số.Ta có:
( ) ( ) ( )
( )
( )
( )
1 1
* *
k k k k
x x x x x x
− −
− = − + −
Ta suy ra:

( ) ( ) ( ) ( )
1 1
* *
k k k k
p p p
x x x x x x
− −
− ≤ − + −
Do đó bất đẳng thức (*) cho :
( ) ( ) ( ) ( )
( )
1
* *
k k k k
p
p p p
x x B x x x x

− ≤ − + −
Vậy có:
( )
( ) ( ) ( )
1
1 *
k k k
p p
p p
B x x B x x

− − ≤ −


1
p
B
<
nên
1 0
p
B
− >
.
Ta suy ra
( ) ( ) ( )
1
*
1
k p k k
p p
p
B
x x x x
B

− ≤ −

. Đây là kết luận (i) của định lý.
Bây giờ từ (3) ta có:
( ) ( )
( ) ( )
1

1 2
k k
k k
x Bx g
x Bx g

− −
= +
= +
Trang 8
Trừ hai đẳng thức này vế với vế ta được:
( ) ( ) ( ) ( )
( )
1 1 2k k k k
x x B x x
− − −
− = −
Do đó:
( ) ( ) ( ) ( )
( )
( ) ( )
1 1 2 1 2k k k k k k
p
p p
p
x x B x x B x x
− − − − −
− = − ≤ −
Ta suy dần ra:
( ) ( ) ( ) ( )

1
1 1 0
k
k k
p
p p
x x B x x


− ≤ −
Thay vào vế trái của kết luận (i) ta được (ii):
( ) ( ) ( )
1 0
*
1
k
k p
p p
p
B
x x x x
B
− ≤ −

Nhận xét: Từ đánh giá sai số (ii), sự hội tụ của phương pháp lặp đơn càng nhanh nếu
p
B
càng
bé, nó còn cho ta biết sau khi biết
( )

1
x
ta có thể xác định số lần lặp cần tiến hành để nhận được
nghiệm gần đúng
( )
k
x
với sai số không quá
ε
.
1.2 Thuật toán
- Input:
( )
{
, , ,
n
B g m B M R

là ma trận của hệ phương trình dưới dạng
}
; , 0x Bx g m m
= + ∈ >
¢
- Output:
{
* *:x x
nghiệm gần đúng của hệ phương trình có biểu diễn thập phân có m chữ
số sau dấu phẩy, có sai số không quá
}
.10

m
p

- Giải thuật:
1.
1
1
max
n
ij
i n
j
B b

≤ ≤
=
=

2.
( )
0
:x g
=
3.
( )
0
*:x Bx g
= +
và làm tròn đến chữ số hàng thứ
( )

m−
4. Nếu
( )
0
* 9.10
1
m
B
x x
B



× − ≤

thì kết thúc thuật toán, chọn
p
và xuất
*x
.
5.
( )
0
: *x x
=
và quay lại 3.
1.3 Ví dụ
1/ Giải hệ phương trình trên bằng phương pháp lặp đơn với ba bước lặp:
Trang 9


1 2 3
1 2 3
1 2 3
1,02 0,05 0,1 0,795
0,1 1,03 0,05 0,849
0,11 0,12 1,04 1,398
x x x
x x x
x x x
− − =


− + − =


− − + =

Kết quả ghi ở dạng biểu diễn thập phân có 3 chữ số sau dấu phẩy, sai số không quá
{ }
3
.10 , 0,1,2, ,9p p


K
Giải:
Hệ này có dạng
Ax b
=
với
1,02 0,05 0,1 0,795

0,1 1,03 0,05 , 0,849
0,11 0,12 1,04 1,398
A b
− −
   
   
= − − =
   
   
− −
   
Ta phải đưa nó về dạng
x Bx g
= +
sao cho điều kiện hội tụ trong định lý 1 được thỏa mãn
1
1B
<
hoặc
1B

<
.
1 1 2 3
2 1 2 3
3 1 2 3
0,02 0,05 0,1 0,795
0,11 0,03 0,05 0,849
0,11 0,12 1,04 1,398
x x x x

x x x x
x x x x
= − − + +


= − − + +


= + − +

Vậy có
x Bx g
= +

1 1
2 2
3 3
0,02 0,05 0,1 0,795
0,11 0,03 0,05 0,849
0,11 0,12 0,04 1,398
x x
x x
x x

      
 ÷  ÷  ÷
 
⇔ = − +
 ÷  ÷  ÷
 

 ÷  ÷  ÷
 

      
Để kiểm tra điều kiện hội tụ ta tính:
3
1
1
3
2
1
3
3
1
0,02 0,05 0,1 0,17
0,11 0,03 0,05 0,19
0,11 0,12 0,04 0,27
j
j
j
j
j
j
b
b
b
=
=
=
= + + =

= + + =
= + + =



Do đó
{ }
max 0,17;0,19;0,27 0,27 1B

= = <
Do đó theo định lý 1 phương pháp lặp đơn
( ) ( )
1k k
x Bx g

= +
hội tụ với mọi
( )
0
x
chọn trước.
Ta chọn
( )
0
0,8
0,85
1,4
x g
 
 

=
 
 
 
. Ta tính
( ) ( )
1 2
, ,x x K
bằng công thức lặp:
Trang 10
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )
1 1 1
1 1 2 3
1 1 1
2 1 2 3
1 1 1
3 1 2 3
0,02 0,05 0,1 0,795
0,11 0,03 0,05 0,849
0,11 0,12 1,04 1,398
k k k k
k k k k
k k k k
x x x x
x x x x
x x x x
− − −
− − −

− − −

= − + + +


= − + +


= + − +


( )
( )
( )
1
2
3
0,02.0,08 0,05.0,85 0,1.1,4 0,795 0,962
0,11.0,8 0,03.0,85 0,05.1,4 0,849 0,982
0,11.0,8 0,12.0,85 1,04.1,4 1,398 1,532
k
k
k
x
x
x

= − + + + =



= − + + =


= + − + =


Tương tự :
( )
( )
( )
1
2
3
0,978
1,002
1,56
k
k
k
x
x
x

=


=


=




( )
( )
( )
1
2
3
0,981
1,004
1,563
k
k
k
x
x
x

=


=


=


Và áp dụng công thức đánh giá sai số trong định lý 1:
( ) ( ) ( )

1
3 3
0,27
* 3.10 10
1 1 0,27
k k k
B
x x x x
B

− −

∞ ∞

− ≤ − = × =
− −
Sai số là
3
10

Vậy ta có:
* 3
1
* 3
2
* 3
3
0,981 10
1,004 10
1,563 10

x
x
x




= ±

= ±


= ±

2/Giải hệ phương trình
( )
1 2 3
1 2 3
1 2 3
10 7
10 8
10 9
x x x
x x x I
x x x
+ − =


+ − =



− + + =

Kết quả ghi ở dạng biểu diễn thập phân có 3 chữ số sau dấu phẩy, sai số không quá
{ }
3
.10 , 0,1,2, ,9p p


K
Giải:
Hệ này có dạng
Ax b
=
với
10 1 1 7
1 10 1 , 8
1 1 10 9
A b

   
   
= =
   
   

   
Trang 11
Ta phải đưa nó về dạng
x Bx g

= +
sao cho điều kiện hội tụ trong định lý 1 được thỏa mãn
1
1B
<
hoặc
1B

<
.
1 2 3
2 1 3
3 1 2
0,1 0,1 0,7
( ) 0,1 0,1 0,8
0,1 0,1 0,9
x x x
I x x x
x x x
=− + +


⇔ =− − +


= − +

Vậy có
x Bx g
= +

với
0 0,1 0,1 0,7
0,1 0 0,1 ; 0,8
0,1 0,1 0 0,9
B g

   
   
= − − =
   
   

   
Để kiểm tra điều kiện hội tụ ta tính:
3
1
1
3
2
1
3
3
1
0 0,1 0,1 0,2
0,1 0 0,1 0,2
0,1 0,1 0 0,2
j
j
j
j

j
j
b
b
b
=
=
=
= + + =
= + + =
= + + =



Do đó
{ }
max 0,2;0,2;0,2 0,2 1B

= = <
Do đó theo định lý 1 phương pháp lặp đơn
( ) ( )
1k k
x Bx g

= +
hội tụ với mọi
( )
0
x
chọn

trước. Ta chọn
( )
0
0,7
0,8
0,9
x g
 
 
=
 
 
 
. Ta tính
( ) ( )
1 2
, ,x x K
bằng công thức lặp:
1 2 3
2 2 3
3 1 2
0,1 0,1 0,7
0,1 0,1 0,8
0,1 0,1 0,9
x x x
x x x
x x x

= − + +


= − − +


= − +

Và áp dụng công thức đánh giá sai số trong định lý 1:
( ) ( ) ( )
1
*
1
k k k
B
x x x x
B


∞ ∞

− ≤ −

Ta có kết quả tính ghi ở bảng sau:
m
0 1 2
Trang 12
( )
1
m
x
0,7 0,71 0,725
( )

2
m
x
0,8 0,64 0,640
( )
3
m
x
0,9 0,89 0,907
( ) ( )
1m m
x x



0,16 0,017
( )
*
m
x x


2
4.10

3
5.10

Sai số là
( )

3
5.10 5p

=
Vậy ta có:

* 3
1
* 3
2
* 3
3
0,725 5.10
0,640 5.10
0,907 5.10
x
x
x




= ±

= ±


= ±

1.4 Đoạn chương trình

const Nmax=10;
fi='Lapdon.inp';
fo='Lapdon.out';
type Mang1C =array[1 Nmax] of real;
Mang2C=array[1 Nmax,1 Nmax] of real;
Var A,B: Mang2C;
g: Mang1C;
N: byte; cB,z:real;
f: text;
Procedure Vao;
var i,j: byte;
Begin
assign(f,fi);
reset(f);
readln(f,N);
for i:=1 to N do
Trang 13
Begin
for j:=1 to N do
read(f,B[i,j]);
readln(f);
End;
for i:=1 to N do
read(f,g[i]);
Close(f);
End;
Procedure Ra(x: mang1c);
var i,dem: byte;t,tt:real;
Begin
assign(f, fo);

rewrite(f); t:=z;dem:=0;
for i:=1 to N do
write(f,x[i]:5:3,' ');
writeln(f);
while t<1 do
begin
t:=t*10;
dem:=dem+1;
end;
t:=(t+1) ; tt:=trunc(t);
for i:=1 to dem do
tt:=tt*0.1;
write(f,'Voi sai so| ',tt:1);
close(f);
End;
Function Chuan( a: Mang2C; N : byte):real;
var i,j: byte;
tt,max: real;
Trang 14
Begin
max:=0;
for i:=1 to N do
Begin
tt:=0;
for j:=1 to N do
tt:=tt+abs(a[i,j]);
if max<tt then max:=tt;
End;
chuan:=max;
End;

Function ChuanX_Y(a,b: Mang1C; N: byte): real;
var i: byte;
tt,max: real;
Begin
tt:=0;max:=0;
for i:=1 to N do
begin
tt:=abs(a[i]-b[i]);
if max<tt then
max:=tt;
end;
ChuanX_Y:=max;
End;
Function LamTron(var x: Mang1C; m,N: byte):Mang1C;
Var i: byte;
t: real;
y: Mang1C;
Begin
t:=1;
for i:=1 to m do t:=t*10;
Trang 15
for i:=1 to N do
y[i]:=round(x[i]*t)/t;
LamTron:=y;
End;
Function Nhan(B: Mang2C; x: Mang1C; N: byte): Mang1C;
Var y: Mang1C;
i,j: byte;
e: real;
Begin

for i:=1 to N do
Begin
e:=0;
for j:=1 to N do
e:=e+B[i,j]*x[j];
y[i]:=e;
End;
Nhan:=y;
End;
Function Cong(a,b: Mang1C; N: byte): Mang1C;
var i: byte;
y: Mang1C;
Begin
for i:=1 to N do
y[i]:=a[i]+b[i];
Cong:=y;
End;
Procedure GiaiLapDon(B: Mang2C; g: Mang1C; m,N: byte);
Var ss: real;
x0,x1: Mang1C;
i: byte;
Trang 16
Begin
cB:=Chuan(B,N);
x0:=g;
x1:=Cong(Nhan(B,x0,N),g,N);
x1:=LamTron(x1,3,N);
ss:=9;
for i:=1 to m do
ss:=ss*0.1;

While cB*ChuanX_Y(x1,x0,N)/(1-cB)>ss Do
Begin
x0:=x1;
x1:=Cong(Nhan(B,x0,N),g,N);
x1:=LamTron(x1,3,N);
z:=(cB/(1-cB))*ChuanX_Y(x0,x1,N);
End;
Ra(x1);
End;
BEGIN
Vao;
cB:=Chuan(B,N);
GiaiLapDon(B,g,3,N)
END.
Trang 17
2. Phương pháp Seidel
2.1 Nội dung phương pháp
Ta cần giải đúng hệ phương trình:
(1)Ax b
=

Giả sử hệ (1) được đưa về dạng :
(2)x Bx g
= +

Giả sử rằng đã có các xấp xỉ
(0) (1) ( )
, , ,
k
x x x

thì lúc đó
( 1) ( 1) ( 1) ( 1)
1 2
( , , , )
k k k k
n
x x x x
+ + + +
=
được xác định bởi:
( 1) ( )
1 1 1
1
1
( 1) ( 1) ( )
1 1
(3)
; 2, ,
n
k k
j j
j
i n
k k k
i ij j ij j i
j j
x b x g
x b x b x g i n
+
=


+ +
= =

= +




= + + =



∑ ∑

Dãy xây dựng theo hệ thức (3) để giải hệ phương trình (1) được gọi là dãy xấp xỉ xây
dựng theo thuật toán Seidel hoặc theo phương pháp Seidel, Ta sẽ xem xét điều kiện của
ma trân B để dãy trên hội tụ về nghiệm duy nhất của hệ phương trình (1)
2.2 Định lý hội tụ
Đinh lý 2:

Nếu
1
1
max 1
n
ij
i n
j
B b


≤ ≤
=
 
= <
 ÷
 

thì dãy
{ }
( )k
x
xây dựng bởi hệ thức (3) hội tụ đến nghiệm duy
nhất
*
x
của hệ phương trình (1)
Chứng minh:

Từ nguyên lý điểm bất động thì hệ phương trình (1) có nghiệm
*
x
duy nhất , nghĩa là:
* *
1
; 1, ,
n
i ij j i
j
x b x g i n

=
= + =

(4)
Lấy (3) trừ đi (4) từng phương trình thu được :
( ) ( )
( ) ( )
1 1
( 1) * ( 1) * ( ) *
1
1 1
( 1) * ( 1) * ( ) *
1
(5)
i i
k k k
i i ij j j ij j j
j j i
i i
k k k
i i ij j j ij j j
j j i
x x b x x b x x
x x b x x b x x
− −
+ +
= =
− −
+ +
= =

− = − + −
⇒ − ≤ − + −
∑ ∑
∑ ∑

Đặt
1
1
,
i n
ij i ij i
j j i
b b
β γ

= =
= =
∑ ∑
, chú ý đến
1
max
i
i n
x x

≤ ≤
=
thì ta có:
Trang 18
( ) ( )

( 1) * ( 1) * ( ) *
(6)
k k k
i i i i j j
x x x x x x
β γ
+ +

− ≤ − + −
Gọi
0
i
là chỉ số mà
0 0
( 1) * ( 1) * ( 1) *
1
max
k k k
i i i i
i n
x x x x x x
+ + +

≤ ≤
− = − = −
Áp dụng (6) cho
0
i i
=
ta được:

( 1) * ( 1) * ( ) *
o o
k k k
i i
x x x x x x
β γ
+ +
∞ ∞ ∞
− ≤ − + −
Suy ra :
0
( 1) * ( ) * ( ) *
1
max (7)
1 1
o
i
k k k
i
i n
i i
x x x x x x
γ
γ
β β
+
∞ ∞ ∞
≤ ≤
− ≤ − ≤ −
− −



1
1 1
max 1
n n
i i ij ij
i n
j j
b b B
β γ

≤ ≤
= =
+ = ≤ = <
∑ ∑

Nên
( )
1
0
1 1
i i i
i
i i
i i
β β γ
γ
β γ
β β

− −
+ − = ≥
− −

Do đó
( )
1 1
max max 1
1
i
i i
i n i n
i
B
γ
β γ
β

≤ ≤ ≤ ≤
≤ + = <


Từ (7) suy ra
( )
( ) *
0
k
x x k

− → → ∞

nghĩa là
{ }
( )k
x
dãy xây dựng theo phương pháp seidel
hội tụ đến nghiệm duy nhất
*
x

Nhận xét

1) Nói chung phương pháp Seidel tốt hơn phương pháp lặp đơn vì tốc độ hội tụ của
phương pháp Seidel đối với hệ phương trình (1) là:
( 1) * ( ) *k k
x x v x x
+
∞ ∞
− ≤ −
với
1
max 1
1
i
i n
i
v B
γ
β

≤ ≤

= ≤ <

còn tốt độ hội tụ của phương pháp lặp đơn xác định bởi hệ
thức:
( 1) * ( ) *k k
x x B x x
+

∞ ∞
− ≤ −

2) Phương pháp Seidel tiết kiệm bộ nhớ hơn phương pháp lặp đơn vì:
+ Phương pháp lặp đơn sử dụng 2n ô nhớ cho
1k
x
+

k
x

+ Phương pháp Saidel chỉ cần n ô nhớ của
1k k
X X
+

vì sau khi tính
1
1
k
x

+
thì không
cần sử dụng
1
x
k
, lúc đó bỏ số
1
1
x
k+
vào ô nhớ của
1
x
k
để tính
1
2
x
k+

Nếu phân tích
B
thành tổng hai ma trận tram giác
1 2
B B B= +
trong đó
Trang 19
11 12 1
21 22 2

1 2
1 2
0 0 0
0 0 0
,

0 0 0
n
n
n n nn
b b b
b b b
B B
b b b
   
   
   
= =
   
   
   

Thì hệ phương trình (1) viết lại dưới dạng
1 2
x B x B x g= + +
, hệ (3) có thể được viết
dưới dạng:
( )
( 1) ( 1) ( )
1 2

( 1) ( )
2
( 1) 1 ( )
2
( ) ( )
k k k
k k
i
k k
i
x B x B x g
I B x B x g
x I B B x g
+ +
+
+ −
= + +
⇔ − = +
⇔ = − +

Hệ thức
( 1) 1 ( ) 1
2 1
( ) ( ) ; 0 (4)
k k
i
x I B B x I B g k
+ − −
= − + − ≥
chứng tỏ phương pháp

Seidel cũng là phương pháp lặp đơn được áp dụng cho hệ phương trình khác. Từ đó ta
có kết quả sau
Hệ quả:

Với mọi
(0) n
x

R
, dãy
{ }
( )k
x
xác định bởi (4) hội tụ đến nghiệm của hệ (1) và
1
( 1) * ( 1) ( )
; 0
1
k k k
B
x x x x k
B
+ +

∞ ∞

− ≤ − ∀ ≥


2.3 Ví dụ áp dụng :

Ví dụ 1 : Dùng phương pháp Seidel tìm nghiệm gần đúng của hệ phương trình :
1 2 3
1 2 3
1 2 3
4x 0,24x 0,08x 8
0,09x 3x 0,15x 9
0,04x 0,08x 4x 20
+ − =


+ − =


− + =


Kết quả ghi ở dạng biểu diển thập phân, có k chữ số sau dấu phẩy với sai số không quá
5
.10 ,{0,1,2, ,9}p


Giải:
Ta đưa về dạng
1
2 3
2 1 3
1 2
3
0,06x 0,02x 2
0,03x 0,05x 3

0,01x 0,02x 5
x
x
x
=
− + +


=− + +


− + +
=


Vậy ta có
xx B g
= +
với
0 0,06 0,02 2
0,03 0 0,05 ,g = 3
0,01 0,02 0 5
B

   
   
= −
   
   


   

Ta có:
Trang 20

3
1
1
3
2
1
3
3
3
0 0.06 0,02 0.08
0,03 0 0.05 0.08
0,01 0.02 0 0.03
j
j
j
j
j
j
b
b
b
=
=
=
= + + =

= + + =
= + + =



Do đó :
{ }
max 0,08;0,08;0,03 0,08 1B

= = <

Vậy quá trình lặp Seidel hội tụ.
Phân tích B thành tổng hai ma trận
1 2
B B B= +
với
1 2
0 0 0 0 0.06 0.02
0,03 0 0 , B 0 0 0.05
0,01 0,02 0 0 0 0
B

   
   
= − =
   
   

   
Chọn

(0)
2
3
5
x g
 
 
= =
 
 
 
tính
(1) (2)
, , x x
bằng công thức Seidel có dạng:
( 1)
( ) ( )
1
2 3
( 1) ( 1) ( )
2 1 3
( 1) ( 1)
( 1)
1 2
3
0,06 0,02 2
0,03 0,05 3 (k 0)
0,01 0,02 5
k
k k

k k k
k k
k
x
x x
x x x
x x
x
+
+ +
+ +
+

=
− + +

=− + + ≥


− + +
=


1 1
0 0 0
0,03 0 0 , 0,03
0,01 0,02 0
B B

 

 
⇒ = − =
 
 

 

Áp dụng công thức đánh giá sai số trong hệ quả
1
( 1) * ( 1) ( )
; 0
1
k k k
B
x x x x k
B
+ +

∞ ∞

− ≤ − ∀ ≥


Ta nhận được kết quả tính ở bảng sau:
m 0 1 2 3
( )
1
m
x
2 1,92 1,90935 1,90920

( )
2
m
x
3 3,1924 3,19495 3,19496
( )
3
m
x
5 5,04465 5,04481 5,04481
( ) ( 1)
)
m m
x x



0,1924 0,01065 1,5
×
10
-4
( ) *
)
m
x x


6,3
×
10

-3
3,8
×
10
-4
0,5
×
10
-5
Sai số : 10
-5
(p=1)
Trang 21
Vậy có:
* 5
1
* 5
2
* 5
3
1,90920 10
3,19496 10
5,04481 10
x
x
x



= ±

= ±
= ±

Ví dụ 2: Giải hệ phương trình tuyến tính sau:
1 2 3
1 2 3
1 2 3
0,1 0,1 1,2
0,1 0,1 1,2
0,1 0,1 1,2
x x x
x x x
x x x
+ + =


+ + =


+ + =


Kết quả ghi ở dạng biểu diển thập phân, có
k
chữ số sau dấy phẩy với sai số không quá
{ }
5
.10 , 0,1,2, ,8,9p



Giải:

Ta đưa về dạng:
1 2 3
2 1 3
3 1 2
0,1 0,1 1,2
0,1 0,1 1,2
0,1 0,1 1, 2
x x x
x x x
x x x
= − − +


= − − +


= − − +

Vậy có
x Bx g
= +
với
0 0,1 0,1 1,2
0,1 0 0,1 , 1, 2
0,1 0,1 0 1,2
B g
− −
   

   
= − − =
   
   
− −
   

Ta có:
3
1
1
3
2
1
3
3
3
0 0.1 0,1 0.2
0,1 0 0.1 0.2
0,1 0.1 0 0.2
j
j
j
j
j
j
b
b
b
=

=
=
= + + =
= + + =
= + + =



Do đó:
max{0,2;0,2;0,2} 0,2 1B

= = <

Vậy quá trình lặp Seidel hội tụ.
Chọn
(0)
1,2
1,2
1,2
x g
 
 
= =
 
 
 
, tính
(1) (2)
, , x x
bằng công thức Seidel có dạng:

( 1)
( ) ( )
1
2 3
( 1) ( 1) ( )
2 1 3
( 1) ( 1)
( 1)
1 2
3
0,1 0,1 1,2
0,1 0,1 1,2 (k 0)
0,1 0,2 1,2
k
k k
k k k
k k
k
x
x x
x x x
x x
x
+
+ +
+ +
+

=
− − +


=− + + ≥


− − +
=

Trang 22
1 1
0 0 0
0,1 0 0 , 0,2
0,1 0,1 0
B B

 
 
⇒ = − =
 
 
− −
 
Áp dụng công thứ đánh giá sai số trong hệ quả ;

1
( 1) * ( 1) ( )
; 0
1
k k k
B
x x x x k

B
+ +

∞ ∞

− ≤ − ∀ ≥

Ta nhận được kết quả tính ở bảng sau:
m 0 1 2 3 4
( )
1
m
x
1,2 0,96 1,00104 1,00007 1,00000
( )
2
m
x
1,2 0,984 0,99934 1,00000 1,00000
( )
3
m
x
1,2 1,0056 0,99996 1,00000 1,00000
( ) ( 1)
)
m m
x x




0,24 0,04104
9,7
×
10
-
4
7
×
10
-5
( ) *
)
m
x x


0,06 0,01026
2,5
×
10
-
4
2
×
10
-5
Sai số: 2.10
-5
(p=2)

Vậy có:
* 5
1
* 5
2
* 5
3
1,00000 2.10
1,00000 2.10
1,00000 2.10
x
x
x



= ±
= ±
= ±
2.4 Đoạn chương trình
const Nmax=10;
fi='SeiDel.inp';
fo='SeiDel.out';
type Mang1C= array[1 Nmax] of real;
Mang2C= array[1 Nmax,1 Nmax] of real;
Var A :Mang2C;
b: Mang1C;
ok: integer;
N: byte;
function LaMatranTC(A: Mang2C; N: byte):boolean;

var i,j: byte; t:real;
Trang 23
Begin
LaMatranTC:=True;
for i:=1 to N do
Begin
t:=0;
for j:= 1 to N do
if i<>j then
t:=t+abs(a[i,j]);
if t>=a[i,i] then
begin
LaMatranTC:=false;
exit;
end;
End;
for j:=1 to N do
Begin
t:=0;
for i:= 1 to N do
if i<>j then
t:=t+abs(a[i,j]);
if t>=a[j,j] then
begin
LaMatranTC:=false;
exit;
end;
End;
End;
Procedure XuatNghiem(x: Mang1C; m,N: byte; Tenfile: string);

Var i: byte; f: text;
Begin
Assign(f, Tenfile);
Trang 24
rewrite(f);
if ok=1 then
Begin
for i:=1 to N do
write(f, x[i]:10:m);
End
ELse
Write(f,-1);
Close(f);
End;
Procedure DocFile(Tenfile: string);
Var i,j: byte; f: text;
Begin
Assign(f, Tenfile);
reset(f);
Readln(f,N);
for i:=1 to N do
Begin
for j:= 1 to N do
read(f,A[i,j]);
Readln(f);
End;
for i:=1 to N do
Read(f,b[i]);
Close(f);
End;

Procedure ChuyenDangHPT(A: Mang2C; b1: mang1c;var B: Mang2C; var g: mang1C; N:
byte);
var i,j: byte;
Begin
for i:=1 to N do
Trang 25

×