Trần Thị Ngọc Huyền Đề tài: Phương pháp Newton để giải bài toán tối ưu phi tuyến... Phương pháp Newton thuần túy giải bài toán tối ưu không ràng buộc II.. Giới thiệu Xét bài toán tố
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐHQG TP HCM
KHOA KHOA HỌC VÀ ỨNG DỤNG
-🙧🕮🙥 🙧🕮🙥
🙧🕮🙥 -BÁO CÁO BÀI TẬP LỚN PHƯƠNG PHÁP TÍNH
Lớp: L10 Nhóm: 16
GVHD: Ths Trần Thị Ngọc Huyền
Đề tài:
Phương pháp Newton để giải bài toán
tối ưu phi tuyến
Trang 2
TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐHQG TP HCM
KHOA KHOA HỌC VÀ ỨNG DỤNG
-🙧🕮🙥 🙧🕮🙥
🙧🕮🙥 -BÁO CÁO BÀI TẬP LỚN PHƯƠNG PHÁP TÍNH
GVHD: Ths Trần Thị Ngọc Huyền
Danh sách sinh viên thực hiện
Trang 3Mục lục:
I Cơ sở lý thuyết
1 Giới thiệu
2 Phương pháp Newton thuần túy giải bài toán tối ưu không ràng buộc
II Thuật toán
III Bài toán
IV Chương trình giải bài toán
Trang 4I Cơ sở lý thuyết
1 Giới thiệu
Xét bài toán tối ưu không ràng buộc
min
𝑥𝜖𝑅 𝑛𝑓(𝑥) (1) Trong đó, 𝑓(𝑥) là phiếm hàm lồi có đạo hàm bậc hai trên 𝑅𝑛 Bài toán tối ưu (1) cũng là bài toán được dẫn về từ nhiều bài toán thuộc các lĩnh vực khác nhau trong kinh tế, kỹ thuật
Để giả bài toán trên có nhiều phương pháp giải khác nhau tuỳ thuộc vào hàm mục tiêu i Một trong những phương pháp phổ biến là phương pháp Newton thuần túy với ưu điểm là
có tốc độ hội tụ nhanh Hiện nay, phương pháp này được phát triển để tìm lời giải tối ưu cho hàm nhiều biến trên cơ sở khai triển Taylor, nghiệm của bài toán tối ưu được thực hiện theo dãy lặp
𝑥𝑘+1= 𝑥𝑘−[∇2𝑓(𝑥𝑘)]−1 ∇𝑓(𝑥𝑘)
2 Phương pháp Newton thuần túy giải bài toán tối ưu không ràng buộc
a)Phương pháp Newton thuần túy
Phương pháp Newton thuần túy là ứng dụng phương pháp Newton cổ điển để giả ệ n ẩi h n
n phương trình
∇𝑓(𝑥) = (𝜕𝑥𝜕𝑓
1(𝑥), 𝜕𝑓𝜕𝑥
2(𝑥), … , 𝜕𝑓𝜕𝑥
𝑛(𝑥))
𝑇
= 0
Trang 5Để tìm đi m dể ừng của hàm 𝑓 trên 𝑅𝑛 Dễ ấy, ma trận Jacobi của ánh xạ th ∇𝑓(𝑥) chính là
ma trận Hesse ∇2𝑓(𝑥) của hàm 𝑓,
𝐷∇𝑓(𝑥)= ∇2𝑓(𝑥)
Tại đi m ể 𝑥𝑘, nếu ma trận Hesse ∇2𝑓(𝑥𝑘) không suy biến thì ta có điểm tiếp theo
𝑥𝑘+1∶= 𝑥𝑘−[∇2𝑓(𝑥𝑘)]−1 ∇𝑓(𝑥𝑘)
Thông thường, ta viết
[∇2𝑓(𝑥𝑘)] 𝑝 = −∇𝑓(𝑥) (2)
và việc giải hệ phương trình tuyến tính (2) là đơn giản hơn việc tính ma trận nghịch đảo của ma trận Hesse Hệ phương trình (2) được gọi là hệ phương trình Newton và véc tơ
𝑝𝑘= −[∇2𝑓(𝑥𝑘)]−1 ∇𝑓(𝑥𝑘) được g i là hưọ ớng Newton của hàm f tại 𝑥𝑘
b)Định lý hội tụ
Giả sử:
i) Hàm f khả vi 2 lần trên 𝑅𝑛;
ii) Hàm 𝛻2𝑓(𝑥) là liên tục và Lipschitz trong lân cận của điểm dừng x* của hàm f, tức tồn tại lân cận B và số L > 0 sao cho
𝛻2𝑓(𝑥) − 𝛻2𝑓(𝑦) = 𝐿 𝑥 − 𝑦‖ ‖ ∀𝑥, 𝑦 ∈ 𝐵(𝑥 ∗, 𝜀 ;) iii) Ma trận 𝛻2𝑓(𝑥) xác định dương tại m i ọ 𝑥 ∈ 𝑅 𝑛
Khi đó, nếu xuất phát từ một điểm đủ gần x* thì dãy {𝑥𝑘} sinh ra bởi thuật toán Newton thuần túy hộ ụ tới x* theo tối t c độ là cấp hai
Chứng minh
Từ định nghĩa của bư c Newton và điớ ều kiện tối ưu ∇𝑓 = 0, ta có
𝑥 + 𝑝𝑘 𝑘𝑁− 𝑥∗= 𝑥𝑘− 𝑥∗−[∇2𝑓(𝑥𝑘)]−1 ∇𝑓(𝑥 ) 𝑘
= ∇ 𝑓2 −1[∇2𝑓𝑘(𝑥𝑘− 𝑥∗) − (𝛻𝑓𝑘− ∇𝑓∗)] (3)
Mà theo định lý Taylor
∇𝑓𝑘− ∇𝑓∗= ∫ ∇01 2𝑓(𝑥𝑘+ 𝑡(𝑥∗− 𝑥𝑘))(𝑥𝑘− 𝑥∗) 𝑑𝑡,
Trang 6Suy ra
‖𝛻2𝑓(𝑥𝑘)(𝑥 − 𝑥𝑘 ∗) − (𝛻𝑓𝑘− 𝛻𝑓(𝑥∗))‖
= ∫ [∇ 𝑓(1 2
0 𝑥𝑘) − ∇2 𝑓(𝑥𝑘+ 𝑡(𝑥∗− 𝑥𝑘))]( 𝑥𝑘− 𝑥∗) 𝑑𝑡
≤ ‖∇2𝑓(𝑥𝑘)− ∇2 𝑓(𝑥 + 𝑡𝑘 (𝑥∗− 𝑥𝑘))‖ ‖𝑥𝑘− 𝑥∗‖
≤ ‖𝑥 − 𝑥𝑘 ∗‖2∫01𝐿𝑑𝑡 = 12𝐿‖𝑥𝑘− 𝑥∗‖2, (4) Với L là hằng số Lipschitz của 𝛻2𝑓(𝑥) khi x tiến đến x* Vì 𝛻2𝑓(𝑥∗) không suy biến, nên tòn tại một bán kính r>0 sao cho ‖∇2𝑓𝑘−1− ∇2𝑓−1(𝑥∗)‖ ≤ 2 ∇‖ 𝑓2 −1(𝑥∗)‖ cho mọi 𝑥𝑘 với
‖𝑥𝑘− 𝑥∗‖ ≤ 𝑟 Thay (3) và (4) vào, ta được
‖𝑥𝑘+ 𝑝𝑘𝑛− 𝑥∗‖ ≤ 𝐿‖∇2𝑓−1(𝑥∗)‖−1‖𝑥𝑘− 𝑥∗‖2= 𝐿 ‖𝑥𝑘− 𝑥∗‖2 , (5) Với 𝐿 = 𝐿‖∇2𝑓(𝑥∗)−1‖ Chọn 𝑥0 sao cho ‖𝑥0− 𝑥∗‖ ≤ min (𝑟,1
2𝐿), ta có thể dùng bất đẳng thức này theo phương pháp qui nạp để suy ra chuỗi hội tụ về , và với tốc độ hội tụ 𝑥∗
là cấp hai
Bằng cách sử dụng mối quan hệ giữa 𝑥𝑘+1− 𝑥 = 𝑝𝑘 𝑘𝑛 và ∇𝑓𝑘+ ∇2𝑓𝑘𝑝𝑘𝑛= 0, ta có
‖∇𝑓(𝑥𝑘+1)‖ = ‖∇𝑓(𝑥𝑘+1) − ∇𝑓𝑘− ∇2𝑓(𝑥𝑘)𝑝𝑘𝑛‖
=‖∫ ∇1 2𝑓(𝑥𝑘+ 𝑡𝑝𝑘𝑛)(𝑥𝑘+1− 𝑥𝑘) 𝑑𝑡
0 − ∇2𝑓(𝑥𝑘)𝑝𝑘𝑛‖
≤ ∫ ‖∇1 2𝑓(𝑥 + 𝑡𝑝𝑘 𝑘𝑛) − ∇2𝑓(𝑥𝑘)‖
0 ‖𝑝𝑘𝑛‖ 𝑑𝑡 ≤ 12 𝐿‖𝑝𝑘𝑛‖2
≤12 𝐿‖∇2𝑓(𝑥𝑘)−1‖2‖∇𝑓𝑘‖2
≤ 2𝐿‖∇2𝑓(𝑥𝑘)−1‖2‖∇𝑓𝑘‖2 , Suy ra các chuẩn gradient hộ ụ về 0 với tốc độ i t là cấp hai
II Thuật toán
Phương pháp Newton cổ ển giải hệ phương trình phi tuyến đi
• Trường hợp n=1 Xét phương trình có một biến số
f(x) = 0
Trang 7Giả sử nghiệm củ phương trình này là xa ∈ R Thuật toán newton tìm nghiệm x
sẽ xuất phát từ một đi m xể 0 đủ gần x và sinh ra một dãy nghiệm xấp xỉ x ,x , x , * 0 1 2
… hộ ụ đến xi t *
Xét xk là một đi m thuể ộc dãy này Với p ∈ R và đủ bé, xấp xỉ Taylor bậ|𝑝| c nhất của hàm f(x) tại xk là:
+p) f(xk ≈ 𝑓(xk) +p𝑓′(𝑥𝑘)
Dễ ấy: th
y = f (xk) +p𝑓′(𝑥𝑘)
là phương trình tiếp tuyến tại đi m ( xể k, f( x ) ) vớ ồ ị của hàm y= f(x) Giả sử k i đ th
𝑓′(𝑥𝑘) ≠ 0 Khi đó giải phương trình
𝑓(xk) +p𝑓′(𝑥𝑘)= 0
Ta được:
𝑃 = −𝑓𝑓(𝑥′(𝑥𝑘𝑘)).
Đặt
xk+1 = x k−𝑓𝑓(𝑥′ (𝑥𝑘𝑘))
Rõ ràng x k+1chính là giao điểm của tiếp tuyến này và trục hoành Ox Gán k:= k+1
và lặp lại quá trình tính toán đối với đi m xể k mới … Hình 6.4 cho ta minh họa hình
học c a thuất toán trên ủ
Định lý 6.6 ( Sự hội tụ của thuật toán Newton) Giả sử rằng:
i) Hàm f(x) khả vi liên tục cấp hai;
Trang 8ii) x là nghi m cệ ủa phương trình f(x) = 0, tức f(x) = 0
iii) 𝑓′(𝑥∗) ≠ 0
Khi đó , nếu |𝑥0− 𝑥∗| đủ nhỏ thì dãy { x } xác định bởk i:
𝑥𝑘+1= 𝑥𝑘−𝑓(𝑥𝑓′ (𝑥𝑘𝑘))
Hội tụ đến x vớ* i tốc độ bậc hai và hệ số 𝛾 = |𝑓𝑓′′′(𝑥(𝑥𝑘∗))|
Chứng minh: Giả sử ta dừng thuật toán và lấy nghiệm xấp xỉ x Như vậy, sai số k là ek=
xk – x Khai triển Taylor của hàm f tạ* i xklà:
0 = 𝑓(𝑥∗)= 𝑓(𝑥𝑘− ⅇ = 𝑓𝑘) (𝑥𝑘)− ⅇ𝑘𝑓′(𝑥𝑘) + 12(ⅇ𝑘)2𝑓′′( )𝜀
Trong đó 𝜀 là điểm giữa x – e Nếu k k 𝑓′(𝑥𝑘) ≠ 0 thì
ⅇ𝑘−(𝑓(𝑓𝑥′𝑥𝑘𝑘))=12(ⅇ𝑘)2 𝑓 ( ) 𝜀′′
𝑓 ′ (𝑥 ) 𝑘 (6.6) Thay ek = x – x vào phương trình ( 6.6) ta đượk * c:
𝑥𝑘−𝑓𝑓(𝑥′(𝑥𝑘𝑘)) =12(ⅇ𝑘)2𝑓′′(𝜀)
𝑓′(𝑥𝑘) Nếu dãy { x } hộ ụ thì k i t 𝜀 → 𝑥∗ Do đó khi x đủ gần x k *ta có:
𝑥𝑘+1− 𝑥∗≈12𝑓𝑓′′′(𝑥(𝑥∗∗) (𝑥) 𝑘− 𝑥∗)2
Tức dãy { x } hộ ụ cấp hai đến x với hệ số k i t * 𝛾 = |2𝑓𝑓′′′(𝑥(𝑥∗∗))|
Chú ý 6.2
i) Theo công thức (6.5), nếu 𝑓′(𝑥𝑘) = 0 thì điểm xk+1 không được xác định Về
mặt hình h c, sự kiện ọ 𝑓′(𝑥𝑘) = 0 có nghĩa là tiếp tuyến tại điểm (xk,f(xk) ) v i ớ
đồ ị hàm y= f(x) song song vớth i trục hoành Ox
ii) Nếu 𝑓′(𝑥𝑘) ≠ 0 ∀𝑘 = 0, 1, 2, 𝑓 và ′′(𝑥∗) ≠ 0 nhưng 𝑓′(𝑥∗) = 0 thì hệ số
𝛾 trong công thức đánh giá hộ ụ tiến đến i t ∞ và thuật toán không có tốc độ hội
tụ bậc hai
iii) Trong chứng minh sự hộ ụ của thuật toán newton đòi hỏi t i điểm xuất phát
Trang 9Ví dụ sau cho ta thấy giả thiết “ điểm xuất phát ban đầu x ph ải đủ gần nghiệ m
x * ” quan trọ ng đ ến mức nào
Ví dụ 6.8 Giải phương trình sau bằng thuật toán newton
𝒇(𝒙) =ⅇⅇ𝒙𝒙− ⅇ+ ⅇ−𝒙−𝒙= 𝟎
Giải
Trước hết ta thấy f( x) là hàm tang hyperbolic, f( x) = thx, nên nghiệm của phương trình này là 𝑥∗= 0 Vì :
𝑓′(𝑥) = 4 (ⅇ𝑥+ ⅇ−𝑥 2) Nên công thức c a thuậủ t toán Newton là :
𝑥𝑘+1= 𝑥𝑘−𝑓(𝑥𝑓′(𝑥𝑘𝑘)) = 𝑥𝑘−ⅇ2𝑥
𝑘
− ⅇ−2𝑥 𝑘
4
Xuất phát từ x =1, ta tính năm điể0 m tiếp theo
x0 =1 x2 =0.409402313 x4 =7.0602×10-5
x1 =-0.813430203 x3 =-0.047304915 x5 =1.95×10-12
Do đó dãy x0,…,x5 hội tụ đến nghiệm Tuy nhiên nếu xuất phát từ x0=1.1 thì
Trang 10x =1.1 x =1.234131133 x =5.715360097
x1 =-1.128552585 x3 =-1.69516598 x5 =-23021.35634 các hàm hyperpolic
shx=𝑒𝑥−𝑒−𝑥
2 , chx=𝑒
𝑥+𝑒−𝑥
2 ,thx=
𝑠ℎ𝑥 𝑐ℎ𝑥=𝑒
𝑥−𝑒−𝑥
𝑒𝑥+𝑒−𝑥,cothx=𝑐ℎ𝑥
𝑠ℎ𝑥𝑒
𝑥+𝑒−𝑥
𝑒𝑥−𝑒−𝑥,
Và càng tính tiếp, các điểm lặp tiếp theo càng xa nghiệm Do đó, thuật tóan newton không hội tụ Hình 6.5 minh họa đ thồ ị của hàm f(x) và các điểm x0, x , x , x 1 2 3trong trường hợp “xấu” này
III Bài toán
Tối thiểu hóa f(x1,x2 ) = x1 - x2 + 2 x12 +2 x x + x1 2 2 2 tại điểm ban đầu X1 ={0
0}
Giải
Để tìm X ta có2
[ J ] = 1 𝑑2𝑓
𝑑𝑥12 𝑑𝑥 𝑑𝑥𝑑1 22𝑓 𝑑𝑓𝑑𝑥1 = 1 + 4x + 2x 1 2 𝑑 2 𝑓
𝑑𝑥1 2 = 4 𝑑𝑥 𝑑𝑥𝑑1 22𝑓 = 2 𝑑𝑥2𝑥1𝑑2𝑓 𝑑𝑑𝑥22𝑓2 𝑑𝑓
𝑑𝑥2 = -1 + 2x + 2x1 2 𝑑 2 𝑓
𝑑𝑥2 2 = 2 𝑑𝑥 𝑑𝑥𝑑2 12𝑓 = 2 [ J ] = 4 21
2 2
[ J1]-1 = 4.2−2.21 x 2 -2 = 14 x 2 -2 = 1 2⁄ −1 2⁄
-2 4 -2 4 −1 2⁄ 1
g1 = 𝑑𝑓 𝑑𝑥1⁄ = 1 + 4x1 +2x2 = 1
𝑑𝑓 𝑑𝑥2⁄ X1 -1 +2x1 +2x2 0 -1
0
Trang 11X2 = X – [ J1 1 ] g1 = -1
3 2⁄
g2 = 𝑑𝑓 𝑑𝑥1 ⁄ = 0
𝑑𝑓 𝑑𝑥2⁄ X2 0
X3 = X – [ J2 1 ] -1 g2
Vì g = 0 nên X = X Vậy X là điể2 3 2 2 m tối ưu
IV Chương trình giải bài toán
% Nhập hàm từ bàn phím
f_expression = input('Nhập hàm số f(x): ', 's');
f_expression = str2sym(f_expression);
% Điều kiện dừng
tolerance = 1e-6;
max_iterations = 5;
% Khởi tạo giá trị ban đầu
x0 = input('Nhập giá trị ởi tạo x0: ');kh
% Phương pháp Newton cổ điển
x = x0;
for iter = 1:max_iterations
df = diff(sym(f_expression)); % Tính đạo hàm của hàm số
Trang 12dx = -subs(sym(f_expression), x) / subs(df, x);
x = x + dx;
if abs(subs(sym(f_expression), x)) < tolerance break;
end
end
% In kết quả
fprintf('Nghiệm của bài toán tối ưu là: %.6f\n', x);