Thuật toán từng bước (có độ dốc) tốt hơn cho việc giải hệ phương trình phi tuyến

TÓM TẮT

Trong bài báo này chúng tôi trình bày phương pháp có tên “từng bước tốt hơn”:

biến việc giải hệ phương trình phi tuyến thành bài toán tìm cực tiểu của một hàm có

dạng tổng bình phương. Phương pháp này dựa vào hướng gradient giảm dần giá trị của

hàm để dần xấp xỉ đến giá trị cực tiểu của hàm và giá trị đó cũng chính là nghiệm địa

phương của hệ phương trình ban đầu. Quá trình này đã được lập trình trên Matlab để

thử nghiệm, so sánh nghiệm và tốc độ hội tụ của phương pháp này với với phương pháp

Newton.

pdf 8 trang yennguyen 2640
Bạn đang xem tài liệu "Thuật toán từng bước (có độ dốc) tốt hơn cho việc giải hệ phương trình phi tuyến", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Thuật toán từng bước (có độ dốc) tốt hơn cho việc giải hệ phương trình phi tuyến

Thuật toán từng bước (có độ dốc) tốt hơn cho việc giải hệ phương trình phi tuyến
TAÏP CHÍ ÑAÏI HOÏC SAØI GOØN Soá 6 - Thaùng 6/2011 
 91 
THUẬT TOÁN TỪNG BƯỚC (CÓ ĐỘ DỐC) TỐT HƠN 
CHO VIỆC GIẢI HỆ PHƯƠNG TRÌNH PHI TUYẾN 
 NGUYỄN PHÚ VINH 
 (*)
TÓM TẮT 
Trong bài báo này chúng tôi trình bày phương pháp có tên “từng bước tốt hơn”: 
biến việc giải hệ phương trình phi tuyến thành bài toán tìm cực tiểu của một hàm có 
dạng tổng bình phương. Phương pháp này dựa vào hướng gradient giảm dần giá trị của 
hàm để dần xấp xỉ đến giá trị cực tiểu của hàm và giá trị đó cũng chính là nghiệm địa 
phương của hệ phương trình ban đầu. Quá trình này đã được lập trình trên Matlab để 
thử nghiệm, so sánh nghiệm và tốc độ hội tụ của phương pháp này với với phương pháp 
Newton. 
ABSTRACT 
In this article, we study the steepest - descent algorithmwhich is a transformation of 
the solving nonlinear equations system into finding the minimum of a multivariable 
function belonging to the form of sum of squares. This method is on the decent of 
gradient of the function. This function value is approached by the minimum of the 
function which is the local solution of the above nonlinear equations system. This 
process is programmed by Matlab in order to test the solution of this problem. It is used 
to compare the solution and the rate of convergence of this method and Newton method. 
1. ĐẶT VẤN ĐỀ (*) 
Việc giải xấp xỉ gần đúng một hệ 
phương trình phi tuyến là việc mà nhiều tác 
giả trong và ngoài nước đã từ lâu vẫn quan 
tâm. Nhưng chưa có một phương pháp nào 
tổng quát để giải mọi hệ phương trình. 
Hiện nay phương pháp Newton có thể xem 
là phương pháp tốt nhất, tốc độ hội tụ 
nhanh nhất để giải hệ phi tuyến, nhưng vẫn 
không phải là phương pháp vạn năng cho 
(*) TS, Khoa Cơ bản, Đại học Công nghiệp Tp. Hồ 
Chí Minh 
mọi hệ phương trình. Trong bài báo này 
chúng tôi trình bày phương pháp có tên 
“từng bước tốt hơn”: biến việc giải hệ 
phương trình phi tuyến thành bài toán tìm 
cực tiểu của một hàm có dạng tổng bình 
phương. Phương pháp này dựa vào hướng 
gradient giảm dần của hàm để dần xấp xỉ 
đến cực tiểu của hàm và đó chính là 
nghiệm địa phương của hệ phương trình 
ban đầu. 
2. PHƯƠNG PHÁP VÀ KẾT QUẢ NGHIÊN CỨU 
2.1. Phương pháp luận về thuật toán töøng böôùc toát hôn (steepest) 
Đặt bài toán: hãy giải hệ phi tuyến đa biến sau: 
 92 
1 1 2 n
2 1 2 n
n 1 2 n
f x , x ,..., x = 0
f x , x ,..., x = 0
F = 0
- - - - - - - - - - -
f x , x ,..., x = 0
, trong đó 
1 1 2 n
2 1 2 n
n 1 2 n
f x , x ,..., x
f x , x ,..., x
F =
.......................
f x , x ,..., x
ta biến bài toán thành bài toán tìm cực tiểu hàm có dạng tổng bình phương sau: 
 1
2 2 2 2
n i 1 1 2 1 2 n n 1 2 n2
n
g x , x ,.., x = f = f x , x ,.., x + f x , x ,.., x +..+ f x , x , .., xn 2
i=1
 
vậy bài toán đưa về là bài toán tìm p địa phương: 
nx R
g p = min g x
=0. 
Để làm giảm từng bước hàm g(x) và dần đến 0 là cực tiểu của hàm, tiến hành với thuật 
toán như sau: bắt đầu với (0)x , sau đó tìm điểm dần tốt hơn (1)x sao cho: 
 (1) (0) (0)x = x -α g x với >0, (chú ý g là hướng có khả năng làm giảm hàm g(x)), 
ta sẽ điều chỉnh như thế nào đó để: (1) (0)g x g x . 
Để xác định , cần tìm cực tiểu của hàm một biến (0) (0)h g x g x  . 
Nhưng việc khảo sát và lấy đạo hàm trực tiếp của h một cách bài bản thì thật là 
khó, thay vào đó làm theo phương pháp steepest như sau: 
Chọn ba số 1 2 3 và hi vọng chúng sẽ gần vị trí cực tiểu của hàm h , bằng 
cách ta xây dựng một tam thức bậc hai P(x) chính là đa thức nội suy Newton tiến của 
 h tại ba điểm mốc nội suy 1 2, và 3 . Sau đó ta tìm  1 3, để P là 
cực tiểu trong đoạn  1 3, và dùng P để xấp xỉ cực tiểu của h . Rồi dùng 
 làm giá trị xấp xỉ mới cho hàm g, tức là: (1) (0) (0)x x g x  . Tổng quát ta có 
công thức truy hồi để tìm nghiệm xấp xỉ: 
 ( 1) ( ) ( )i i ix x g x  
Tính công thức gradient hàm g: 
 93 
   
n n
i i i i,1 i,2 i,3 i,n
i=1 i=1
g x = 2f f = 2f f ,f ,f ,..,f = 1 1,1 1,2 1,n2f f , f ,.., f +
 2 2,1 2,2 2,n2f f , f ,.., f + 3 3,1 3,2 3,n n n,1 n,2 n,n2f f , f ,.., f +...+ 2f f , f ,.., f = 
=
T
1,1 2,1 n,1 1,1 1,2 1,n1 1
1,2 2,2 n,2 2,1 2,2 2,n2 2
n n1,n 2,n n,n n,1 n,2 n,n
f f M f f f M ff f
f f M f f f M ff f
2 = 2
M MM M M M M M M M
f ff f M f f f M f
= T 1 2 n2J F x , x ,..., x 
Trong đó J là Jacobi của hàm 1 2, , ..., nF x x x . Sau đây là thuật toán steepest. 
2.2. Thuật toán từng bước tốt hơn (steepest) 
Nhập giá trị ban đầu: 1 2, , ...,
T
nx x x x , số bước N cần tính, sai số chịu đựng tính 
toán TOL (tolerant) 
while k N do 
 1. Set 1 1 2, , ..., ng g x x x 
 1 2 1 2, , ..., 2 , , ...,
T
n nz g x x x J F x x x  
 0 2
z z 
 2. If 0z 0 then OUTPUT(“Zero gradient, may have a minimum”) , STOP 
 3. 
0
z
z
z
 , 1 0 , 3 1 , 3 3g g x z 
 4. While 3 1g g do steps 5 and 6 
 5. 3 3 / 2 , 3 3g g x z 
 6. If 3 / 2TOL then OUTPUT(“Improvement, may have a 
 minimum”) , STOP 
 7. 2 3 / 2 , 2 2g g x z 
 8. 2 11
2 1
g g
h
, 3 22
3 2
g g
h
, 2 13
3 1
h h
h
 9. 10 2
3
0.5
h
h
, 0 0g g x z 
 10. Tìm từ 0 3, để 0 3min ,g g x z g g 
 11. x x z 
 12. If 1g g TOL then OUTPUT(“successful”) , STOP 
 94 
 13. k=k+1 
End 
2.3. Các ví dụ và so sánh kết quả 
Ví dụ 1: giải hệ: 
1 2
1 1 2 3
2
2 2 1 3
3 3
6 2cos 1 0
9 sin 1.06 0.9 0
60 3 10 3 0
x x
f x x x
f x x x
f x e 
, 
lấy nghiệm ban đầu (0) 1,1,1 Tx . Với hàm 2 2 2 21 2 3
1
n
i
i
g f f f f
  , 
Tính Jacobi: 
 J=
1 2 1 2
2 3 3 2 3 2
3
1
2 2
1 3 1 3
2 1
6 2sin 2sin
2cos
9
sin 1.06 sin 1.06
3 3 60
x x x x
x x x x x x
xx
x x x x
x e x e
, 
 và 
1
2
3
f
F f
f
 k=1, 
Thế (0)x để tính (0)1g g x 8163.7523; z= 2 TJ F =
 -136.9376876467
 24.4584536238
 10759.2205558461
, 
tính chuẩn 0 2
z z =10760.1197537; và 
 (0)
0
 -0.01272640925754
 0.00227306518733
 0.99991643234926
g x
z
z
 
. 
Vậy 
Với (0) (0)1 1 10 g g x z g x 8163.7523 
Với 3 1 F (0) 3x z =
 3.07635846249709
 11.32373711890548
 29.51313389084277
 95 
==> (0)3 3g g x z 1008.71607578 
Vì g3 < g1 nên ta chấp nhận 3 1 và gán 2 0.5 , rồi tính 
F (0) 2x z =
 3.28250948349129
 11.48734095680031
 59.51632652171600
==> 
 (0)2 2g g x z 3684.9269934065 
Bây giờ dựa vào bảng mốc nội suy: 
1 2 3
1 2 3g g g
, để nội suy ra hàm bậc hai theo : 
 1 1 1 3 1 2 1 1 3 2P g h h g h h 
bằng phương pháp Newton tiến nhờ bảng dữ liệu sau: 
1 1
2 2
3 3
0 8163.7523
0.5 3684.9269
1 1008.7160
g
g
g
; 
ta có: 2 11
2 1
g g
h
=-8957.6507317, 3 22
3 2
g g
h
= -5352.42183523, 
 2 13
3 1
h h
h
=3605.228896495 
Thế 1 3,h h vào P , sau đó ta lấy đạo hàm P để tìm cực tiểu của nó, tức giải 
 / 0P để tìm được nghiệm: 10 2
3
0.5
h
h
=1.4923137322, 
==> F (0) 0x z =
 3.34977423120232
 11.14453481099873
 -0.02878932588947
 ==> (0)0 0g g x z =135.4224723 
ta thấy 0g nhỏ hơn 1g và 3g . 
Vậy ta lấy (1) (0) 0
 1.01899179529672
 0.99660787360675
 -0.49218902305463
x x z 
và tính (1)g x 135.4224723 
 k=2, tính lại z= 2 TJ F =
 58.072382205939
 203.772128736778
 -2.042514338131
............. 
 (2) (1) 0 0.695645, -0.137993, -0.480816
T
x x z và (2)g x 10.107836...... 
 96 
Và thuật toán cứ thế lặp lại với công thức truy hồi: ( 1) ( ) ( )i i ix x g x  cho đến 
khi đạt được nghiệm khá gần với nghiệm chính xác là: 
(0.498145, -0.199606, -0.528826)
T 
ở đây ta lấy tiêu chuẩn dừng của thuật toán là: 
( ) ( 1) 5
10
k k
x x
 , khoảng 28 
bước (xem bảng sau) mới đạt được điều đó. 
k ( )
1
k
x 
( )
2
k
x 
( )
3
k
x g(x) 
1 1.018992 0.996608 -0.492189 135.422472 
2 0.695645 -0.137993 -0.480816 10.107836 
3 0.693185 -0.137886 -0.528789 1.814149 
4 0.583604 -0.226612 -0.523367 0.494123 
5 0.582668 -0.225863 -0.530753 0.295721 
6 0.555173 -0.209607 -0.525621 0.182806 
7 0.554550 -0.209322 -0.529834 0.118411 
8 0.535784 -0.204358 -0.526724 0.077100 
9 0.535372 -0.204218 -0.529429 0.050569 
1
0 
0.522932 -0.202299 -0.527436 0.033205 
1
1 
0.522660 -0.202218 -0.529208 0.021829 
1
2 
0.514463 -0.201270 -0.527910 0.014356 
1
3 
0.514284 -0.201220 -0.529074 0.009448 
1
4 
0.508890 -0.200672 -0.528222 0.006219 
1
5 
0.508772 -0.200640 -0.528988 0.004094 
1
6 
0.505221 -0.200300 -0.528428 0.002696 
1
7 
0.505144 -0.200279 -0.528932 0.001775 
1
8 
0.502806 -0.200060 -0.528564 0.001169 
1
9 
0.502755 -0.200046 -0.528896 0.000770 
2
0 
0.501215 -0.199904 -0.528653 0.000507 
 97 
2
1 
0.501181 -0.199895 -0.528872 0.000334 
2
2 
0.500167 -0.199802 -0.528712 0.000220 
2
3 
0.500145 -0.199796 -0.528856 0.000145 
2
4 
0.499477 -0.199735 -0.528751 0.000096 
2
5 
0.499463 -0.199731 -0.528846 0.000063 
2
6 
0.499023 -0.199691 -0.528777 0.000041 
2
7 
0.499013 -0.199688 -0.528839 0.000027 
2
8 
0.498723 -0.199662 -0.528793 0.000018 
Vậy sau 28 bước ta có nghiệm xấp xỉ là: (498145, -0.199606, -0.528826)T 
So với phương pháp Newton chính thống với ví dụ trên như bảng sau: 
( )
1
k
x 
( )
2
k
x 
( )
3
k
x 
1.127638 -0.270927 -0.513022 
0.498513 -0.192263 -0.523877 
0.498150 -0.199606 -0.528826 
0.498145 -0.199606 -0.528826 
Ta thấy phương pháp Newton chính thống có tốc độ hội tụ nhanh hơn nhiều so với 
phương pháp steepest. Ta xét thêm ví dụ sau: 
Ví dụ 2: Giải hệ 
 1 1 1 2 3
24
2 1 2 3 3
2 2
3 1 2 2 3
cos 1 0
1 0.05 0.15 1 0
0.1 0.01 1 0
f x x x x
f x x x x
f x x x x
, lấy (0) 0,0,0 Tx ; 
Kết quả được chương trình in ra như bảng sau: chỉ cần năm bước là hội tụ 
k ( )
1
k
x 
( )
2
k
x 
( )
3
k
x g(x) 
1 0.000000 0.009944 0.994385 0.008090 
2 -0.020018 0.090056 0.995265 0.000449 
3 -0.000128 0.094959 1.000282 0.000025 
 98 
4 -0.001133 0.099438 0.999764 0.000001 
5 -0.000003 0.099718 0.999995 0.000000 
Nghiệm đúng của hệ này là: x1=0, x2=0.1, x3=1. 
3. KẾT LUẬN 
Phương pháp steepest có tốc độ hội tụ 
chậm hơn nhiều so với phương pháp chính 
thống Newton, nhưng phương pháp 
steepest luôn chọn được hướng (gradient 
tốt dần) hội tụ của bài toán, thậm chí có 
những bài toán mà phương pháp Newton 
không cho ta kết quả, trong khi đó phương 
pháp steepest lại cho ta kết quả, tất nhiên 
tốc độ hội tụ của phương pháp này rất 
chậm. Trên đây cũng chỉ là một trong 
nhiều phương pháp mà thế giới đã nghiên 
cứu. Ở đây chúng tôi dựa vào phương pháp 
tối ưu để tìm cực trị của hàm phi tuyến đa 
biến cho trường hợp riêng khi hàm phi 
tuyến đa biến lại là dạng tổng bình phương 
của các hàm phi tuyến đa biến. Các kết quả 
này chỉ là bước đầu của việc tìm nghiệm 
địa phương, chưa đề cập đến việc đánh giá 
sai số giữa nghiệm xấp xỉ và nghiệm chính 
xác, cũng như chưa xác định vùng cận để 
chọn giá trị ban đầu (0)x sao cho bài toán 
hội tụ đến nghiệm địa phương cần tìm, 
chúng tôi sẽ hẹn những bài báo sau. 

File đính kèm:

  • pdfthuat_toan_tung_buoc_co_do_doc_tot_hon_cho_viec_giai_he_phuo.pdf