Giáo trình tính toán khoa học - Chương 7 ppt

40 616 0
Giáo trình tính toán khoa học - Chương 7 ppt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

165 Chương 7 GIẢI PHƯƠNG TRÌNH VÀ TỐI ƯU HÓA 7.1 GIẢI PHƯƠNG TRÌNH 7.1.1 Giải phương trình một biến số Xét phương trình một biến có dạng: f(x) = 0 (7.1) Nếu hàm f(x) liên tục trong khoảng [a,b] và đổi dấu tại hai đầu mút của khoảng, tức là f(a)fb)<0, thì trong [a,b] chứa ít nhất 1 nghiệm của phương trình (7.1). Khi đó [a,b] được là một khoảng chứa nghiệm của phương trình. Nếu trong khoảng [a,b] có đúng một nghiệm thì nó được gọi là khoảng phân ly nghiệm của phương trình. Khi giải phương trình (7.1) theo các phương pháp số, một điều rất quan trọng là phải tìm được các khoảng phân ly nghiệm. Có 2 phương pháp thường được sử dụng để tìm các khoảng phân ly nghiệm:  Phương pháp khảo sát hàm số: dựa vào các tính chất sau: Định lý 7.1 Nếu trong khoảng [a,b] hàm f(x) liên tục, đơn điệu và hàm số đổi dấu tại hai đầu mút của khoảng thì [a,b] là một khoảng phân ly nghiệm của phương trình f(x)=0. Như vậy khi xét bảng biến thiên hàm số, khoảng phân li nghiệm là khoảng mà trong đó đạo hàm không đổi dấu và hàm số đổi dấu tại 2 đầu mút.  Phương pháp đồ thị: y y=h(x) y=g(x)  1  2 x Hình 7.1 Tìm khoảng phân ly nghiệm của phương trình 166 Bằng cách nào đó đưa phương trình f(x)=0 về dạng h(x)-g(x) =0, trong đó các hàm h(x) và g(x) dễ vẽ (phác thảo) đồ thị. Dựa vào dạng đồ thị và một số điểm đặc biệt ta xác định các khoảng phân li nghiệm. Thí dụ 1. Tìm các khoảng phân ly nghiệm của phương trình: x 3 - x – 1 = 0 (7.2) Giải. Đặt y= f(x) = x 3 - x – 1. Tính y’ = 3x 2 và giải phương trình y’ = 0 được x = 1 3  . Bảng biến thiên của hàm số: x -  1 3  1 3 +  y’ + 0 - 0 + y M +  -  m Với 1 1 1 ( ) 1 0 3 3 3 3 M f        , do đó 1 ( ) 0 3 m f   .Ta tính thêm giá trị hàm tại một vài điểm đặc biệt: f(1) = 1 3 – 1 – 1 = -1 < 0, f(2) = 2 3 – 2 – 1 = 5 > 0. Vậy [1,2] là khoảng phân ly nghiệm của phương trình (7.2) và phương trình chỉ có một nghiệm duy nhất. Nhược điểm của phương pháp khảo sát là cần phải tính đạo hàm cùng với nghiệm của nó. Điều này sẽ rất khó khăn khi giải phương trình siêu việt. Thí dụ 2. Tìm các khoảng phân ly nghiệm của phương trình: 2 1 0 lg x x   . (7.3) Giải. Khoảng xác định của hàm số y=f(x) là (0,+  ). Đặt h(x)=lgx và 2 1 ( ) g x x  . Khi đó dạng đồ thị của chúng là: 167 y g = 2 1 x h=lgx 1  x Hình 7.2 Dáng điệu đồ thị của các hàm h(x) = lgx và 2 1 ( ) g x x  Từ đồ thị trong hình 7.2 ta tính giá trị hàm tại một số điểm đặc biệt: x = 1 y = 0 - 1 < 0; x =10 y =1 1 100  > 0. Vậy phương trình đã cho chỉ có một nghiệm duy nhất nằm trong khoảng phân ly nghiệm [1,10]. Qui tắc chung để giải phương trình một biến dạng f(x)=0 như sau: + Tìm các khoảng phân ly nghiệm của phương trình; + Giải phương trình trong từng khoảng phân ly nghiệm bằng một trong các phương pháp số. 7.1.2 Phương pháp Chia đôi (Binary) Giả sử [a,b] là một khoảng phân ly nghiệm của phương trình f(x)=0. Ta cần phải tìm nghiệm  của phương trình trong khoảng này với sai số tuyệt đối không quá  . Có thể thực hiện theo thủ tục lặp sau đây:  Thủ tục Binary - Bước lặp k=1,2, + Tính x = 2 ba  ; + Nếu f(x) và f(a) cùng dấu thì gán a =x , ngược lại thì gán b =x; + Nếu  b- a   thì dừng thủ tục và x là nghiệm xấp xỉ cần tìm; Ngược lại chuyển sang bước k+1. Quá trình lặp của thủ tục sẽ ngừng khi b- a   . Do đó khi kết thúc thủ tục ta được x là nghiệm xấp xỉ cần tìm. 168 y a x  b x Hình 7.3 Phương pháp Chia đôi Định lý 7.2 Nếu f(x) liên tục trong khoảng phân ly nghiệm [a,b] thì phương pháp Chia đôi kết thúc sau một số hữu hạn bước lặp và tìm được nghiệm xấp xỉ của phương trình (7.1) trong khoảng đó. Do sau mỗi bước lặp độ dài khoảng phân ly nghiệm là b a  sẽ giảm đi đúng một nửa nên có thể dễ dàng thấy thủ tục trên sẽ dừng lại ở bước k thỏa mãn: k  log 2 b a   (7.4) Ưu điểm của phương pháp Chia đôi là đơn giản và dễ tính toán hay cài đặt chương trình. Tuy nhiên tốc độ hội tụ khá chậm. Nếu bài toán yêu cầu tìm lời giải với độ chính xác cao mà khoảng phân ly nghiệm tìm được quá rộng thì phương pháp Chia đôi phải thực hiện rất nhiều bước lặp.  Cài đặt thủ tục tính toán trong Matlab. Bây giờ hãy cài đặt hàm Matlab tên là Binary.m để giải phương trình f(x)=0 trong khoảng phân ly nghiệm [a,b] bằng phương pháp Chia đôi. Để lệnh gọi hàm có dạng:   Binary , , , , x FUN a b Tol  trong đó: - x là nghiệm cần tìm trong khoảng phân ly nghiệm [a,b]; - FUN là xâu tên hàm của phương trình; - Tol là sai số tuyệt đối có thể cho trước hoặc mặc định là 10 - 6 . Nội dung hàm Binary.m: 169 % BINARY : Giai phuong trinh bang phuong phap Chia doi. % Cu phap x =Binary (FUN,a,b,Tol). % FUN – Ten ham cua phuong trinh; % a, b : 2 so xac dinh khoang phan ly nghiem [a,b]; % Tol - Sai so tuyet doi , mac dinh Tol =1.e-6; % function x = Binary(FUN,a,b,Tol) if nargin==3 Tol=1e-6; end Sig = sign (feval(FUN,a)); x = (a+b)/2; while abs(b-a)>Tol if Sig*feval(FUN,x)>0 a = x; else b=x; end; x=(a+b)/2; end Thí dụ 3. Giải phương trình : 2 1 0 lg x x   trong khoảng phân nghiệm [1,10] với sai số 10 -10 . Giải: >> F = inline('log10(x)-1/x^2'); >> format long g >> x = Binary(F,1,10,1e-10) x = 1.8966510020291 170 7.1.3 Phương pháp Lặp đơn Giả sử [a, b] là một khoảng phân ly nghiệm của phương trình f(x) =0. Chúng ta cần phải tìm nghiệm  của phương trình trong khoảng này với sai số tuyệt đối không quá  . Đầu tiên, bằng một cách nào đó ta đưa được phương trình về dạng tương đương: x =  (x), (7.5) với  (x) là một hàm của x. Sau đó tính toán theo thủ tục lặp sau đây:  Thủ tục tính toán Bước 0. Chọn xấp xỉ đầu x 0  [a, b]. Bước k=1,2,3,… Tính x k =  (x k-1 ). (7.6) Công thức lặp (7.6) được gọi là hội tụ nếu lim k k x    . Tất nhiên chúng ta chỉ quan tâm đến các công thức lặp hội tụ. Định lý sau đây cho ta tiêu chuẩn nhận biết một công thức lặp đơn là hội tụ. Định lý 7.3 Xét công thức lặp (7.6). Giả sử: 1) [a, b] là một khoảng phân ly nghiệm của phương trình f(x) =0; 2) Mọi x k tính theo (7.6) đều thuộc [a, b]; 3) Tồn tại hằng số q sao cho hàm  (x) có đạo hàm  ’(x) thỏa mãn: |  ’(x) | ≤ q < 1 với mọi x  [a, b]. Khi đó lim k k x    với mọi xấp xỉ đầu x 0 [a, b]; Giả sử ta tìm được một phương pháp lặp hội tụ. Thực hiện thủ tục Lặp đơn và dừng lại tại bước k nào đó. Khi đó sai số của lời giải được tính theo các công thức sau: 1 0 | | 1 k k q x a x x q     hay 1 | | 1 k k k q x a x x q      . (7.7) Thí dụ 4. Phương trình x 3 - x – 1 = 0 171 có một khoảng phân ly nghiệm là [1,2] (xem mục 7.1.1). Nếu ta chọn công thức lặp x = x 3 +1 thì  (x)= x 3 +1 và  ’(x)=3x 2 . Khi đó |  ’(x) |>1 với mọi x  [1,2], do đó công thức lặp sẽ không hội tụ. Nếu ta chọn công thức lặp x= 3 1 x  thì  (x)= 3 1 x  và  ’(x)   2 3 1 3 1 x  . Khi đó |  ’(x) | < 3 1 1 3 4 q   với mọi x  [1,2]. Do đó công thức lặp sẽ hội tụ với mọi x 0 [1,2]. Bây giờ bạn hãy chọn x 0 =1 và tính theo công thức 3 1 1 k k x x    qua 5 bước lăp: >> Phi=inline('(x+1)^(1/3)'); >> x=1; >> for k=1:5 x=Phi(x) end; Kết quả của các bước lần lượt là: x = 1.259921049894873 1.312293836683289 1.322353819138825 1.324268744551578 1.324632625250920 Nếu lấy x = 1.324632625250920 thì nó có sai số là 4 1,324632625250920 1,324268744551578 0,9672 .10 1 q q       . Trong trường hợp vừa xét, phương pháp Lặp đơn hội tụ nhanh hơn so với phương pháp Chia đôi. Để đạt được cùng độ chính xác này phương pháp Chia đôi cần phải sử dụng tới 11 bước lặp. Tuy nhiên, hạn chế của phương pháp Lặp đơn là không chỉ rõ ràng được phương pháp đưa phương trình (7.1) về dạng (7.5) như thế nào để có thể đạt được bất đẳng thức: |  ’(x) | ≤ q < 1. 172 7.1.3 Phương pháp Dây cung (Cát tuyến) Giả sử [a, b] là một khoảng phân ly nghiệm của phương trình f(x) =0. Ta cần phải tìm nghiệm  của phương trình trong khoảng này với sai số tuyệt đối không quá  . Trước hết ta có nhận xét: phương trình cát tuyến của đường cong y=f(x) đi qua 2 điểm (a,f(a)) và (b,f(b)) là: ( ) ( ) ( ) y f a x a f b f a b a      . Cho y =0, ta xác định được cát tuyến cắt trục hoành tại điểm có hoành độ: . ( ) . ( ) ( ) ( ) a f b b f a x f b f a    . (7.8) Vì vậy để giải phương trình có thể thực hiện theo thủ tục lặp sau đây:  Thủ tục tính toán - Bước lặp k=1,2, + Tính . ( ) . ( ) ( ) ( ) a f b b f a x f b f a    ; + Nếu f(x) và f(a) cùng dấu thì gán lại a=x, ngược lại thì gán b =x; + Nếu ( )f x m   f ( x ) m   , với   [ , ] min '( ) x a b m f x   , thì dừng thủ tục và x là nghiệm xấp xỉ cần tìm; Ngược lại thì chuyển sang bước k+1. y a x k  b x Hình 7.4 Phương pháp dây cung 173 Có thể chứng minh rằng: nếu hàm số f(x) liên tục và khả vi trong khoảng phân ly nghiệm [a,b], đồng thời   [ , ] min '( ) x a b m f x   >0 thì thuật toán trên sẽ kết thúc sau một số hữu hạn bước lặp. Tuy nhiên trong nhiều trường hợp việc đánh giá m rất khó. Mặt khác nếu m quá nhỏ thì ta cần phải thực hiện nhiều bước lặp mới thỏa mãn điều kiện dừng lặp. Vì vậy khi thực hiện phương pháp Dây cung, nếu thấy hai lời giải xấp xỉ liên tiếp có x k-1 và x k đã khá gần nhau thì chỉ cần kiểm tra điều kiện: f(x k -  )  f(x k +  )  0. Nếu điều kiện trên thỏa mãn thì dừng lặp và x k là nghiệm xấp xỉ cần tìm  Cài đặt thủ tục tính toán trong Matlab Bây giở hãy cài đặt hàm Arc.m để giải phương trình f(x)=0 trong khoảng phân ly nghiệm [a,b] bằng phương pháp Dây cung đế lệnh gọi hàm có dạng: x = Arc(FUN,a,b,Tol) trong đó: - x là nghiệm cần tìm trong khoảng [a,b]; - FUN là xâu chứa tên hàm của phương trình; - Tol là sai số tuyệt đối có thể cho trước của x hoặc mặc định là 10 - 6 . Nội dung file Arc.m: % ARC : Giai phuong trinh bang phuong phap day cung; % Cu phap x = Arc(FUN,a,b,Tol) % FUN – Ten ham; % a, b : 2 so xac dinh khoang phan ly nghiem [a,b]; % Tol - Sai so tuyet doi , mac dinh Tol =1.e-6 function x = Arc(FUN,a,b,Tol) if nargin==3 Tol=1e-6; end x=(a+b)/2; fa=feval(FUN,a); fb=feval(FUN,b); 174 while feval(FUN, x -Tol)*feval(FUN, x+Tol)>0 x=(a*fb - b*fa) / (fb - fa); if fa*feval(FUN,x)>0 a = x; fa=feval(FUN,a); else b= x; fb=feval(FUN,b); end; end Thí dụ 5. Giải phương trình: 2 1 lg 0 x x   trong khoảng phân nghiệm [1,10] với sai số 10 -10 . Giải. >> F = inline('log10(x)-1/x^2'); >> format long g >> x=Arc(F,1,10,1e-10) x = 1.89665100209995 Thí dụ 6. >> F = inline('x^3-x-1'); >> x=Arc(F,1,2,1e-10) x = 1.32471795715858 7.1.4 Phương pháp Newton (Tiếp tuyến) Giả sử [a, b] là một khoảng phân ly nghiệm của phương trình f(x)=0 và hàm f(x) thỏa mãn các điều kiện sau đây: có đạo hàm liên tục đến cấp 2, đồng thời f’(x) và f”(x) không đổi dấu trong [a, b]. Ta khai triển Taylor bậc 2 hàm f(x) tại x 0 [a,b]: f(x) = f(x 0 + f’(x 0 ) (x-x 0 ) + f ”(c)   2 0 2 x x , với c[a,b]. [...]... 0 -5 -8 -1 4 3 0 2 -2 k M A3 -4 2 -3 -5 1 0 -1 A4 -2 3 2 2 0 1 1 A8 M 1 1 1 0 0 1 7 20 0 0 -1 1 1 0 0 1 5/2 k M A3 -4 7 2 0 1 0 4 A4 -2 1 0 0 0 1 -1 A2 -4 1 1 1 0 0 1 -1 3 0 0 0 -2 1 k Vậy bài toán gốc có lời giải tối ưu: x*=(0,1 ,7, 1,0) và F*= -4 x 7- 2x 1- 4x1 = -3 4 Các bạn cũng có thể dùng hàm Xoay để giải từng bước bài toán này: >> H = [ 1 -1 2 2 1 -3 -1 4 4 -2 1 0 2 4 3 2 1 3 2 6 1 8 1 3 2 14 -3 ... H=Xoay(H,2,4) H= -3 -5 2 2 -5 -9 -5 0 -8 -1 4 >> H=Xoay(H,1,3) H= -3 -5 2 2 1 1 7 20 1 1 1 0 2 4 3 0 1 0 0 0 -1 2 1 3 -1 5 -5 -6 -2 -1 8 1 0 0 0 0 0 -1 2 1 1 3 0 1 1 0 -1 -1 4 0 1 -2 4 >> H=Xoay(H,3,2) H= 2 0 1 0 4 7 0 0 0 1 -1 1 1 1 0 0 1 1 -1 3 0 0 0 -2 1 -3 4 0 0 0 0 0 -2 5 Từ bảng H cuối cùng ta kết luận bài toán gốc có lời giải tối ưu: x*=(0,1 ,7, 1,0) và F*= -3 4 7. 4.5 Hàm giải qui hoạch tuyến tính trong Matlab... x6, x7, x8 vì chúng không ảnh hưởng đến quá trình phân tích và giải bài toán bằng phương pháp đơn hình Để tiện tính toán ta tách k thành 2 hàng: một hàng chứa các hệ số tự do và hàng khác chứa các hệ số của M 194 B CJ xJ 1 -4 -4 -2 3 A1 A2 A3 A4 A5 A6 M 8 1 -1 1 2 1 A7 M 3 2 2 0 1 1 A8 M 14 1 -3 2 3 2 -1 4 4 2 -2 3 6 4 3 14/3 -3 4 hJ 4 k M A6 M 2 -3 -5 1 0 -1 A4 -2 3 2 2 0 1 1 A8 M 5 -5 -9 2 0 -1 -5 ... x2 xn   (7. 13) Sau đó tính toán theo thủ tục:  Thủ tục tính - Bước 0 Chọn xấp xỉ đầu x(0)  - Bước lặp k= 1,2, Tính x(k)=x(k-1 )- F-1(x(k-1)).f(x(k-1)) (7. 14) Chú ý: - Ưu điểm của phương pháp Newton hội tụ rất nhanh nếu x(0) được chọn khá gần nghiệm α của hệ (7. 11) Mặt khác phương pháp Newton không đòi hỏi phải thay đổi mô hình bài toán như phương pháp Lặp đơn - Từ công thức (7. 14) ta thấy tại... phải tính một ma trận nghịch đảo F-1(x(k-1), cho nên thuật toán đòi hỏi khối lượng tính toán rất lớn Để khắc phục điều này và làm tăng tốc độ tính toán, nếu tại bước t nào đó x = x(t) đã khá gần nghiệm α của hệ phương trình thì nên cố định F—1( x ) và sử dụng công thức sau đây ở các bước lặp tiếp theo: x(k) = x(k-1 )- F—1( x ).f(x(k-1)) 7. 3 BÀI TOÁN TỐI ƯU HÓA 7. 3.1 Bài toán tối ưu hoá tổng quát Bài toán. .. fzero('Myfunct' ,-0 .5 ) Zero found in the interval: [0.14, -0 .95255] ans = 1.6226e-008 >>[ x f]=fzero('Myfunct' ,-1 ) Zero found in the interval: [-0 .36, -1 .64] x= %% Kết quả sai -1 . 570 8 f= 1.2093e+015 Hãy chú ý trong thí dụ cuối cùng: -1 . 570 8 không phải là nghiệm của  phương trình do hàm Myfunct không liên tục tại - Nếu không chú ý đến điều 2 đó, người sử dụng có thể phải “trả giá” vì kết quả sai 177  Hàm... 3 -1 9 1 1 0 1 1 7 0 1 1 2 4 6 -1 -3 -2 3 -6 0]; - Biến đổi H theo cơ sở sở xuất phát B=(A1,A2,A3) : >> H=xoay(H,1,1); >> H=Xoay(H,2,2); >> H=Xoay(H,3,3) % % Được dữ liệu của bảng đơn hình xuất phát H= 1 0 0 1 -2 5 0 1 0 0 3 2 0 0 1 2 1 4 0 0 0 8 3 19 192 - Do 4 =8 >0 nên chọn cột xoay q =4 và hàng xoay p=3 và đổi bảng: >> H=Xoay(H,3,4) H= 1 0 -1 /2 0 -5 /2 3 0 1 0 0 3 2 0 0 1/2 1 1/2 2 0 0 -4 0 -1 ... mức cho phép -2 : Không tìm thấy phương án chấp nhận được -3 : Hàm mục tiêu không bị chặn -4 : Gặp giá trị NaN khi thực hiện thuật toán -5 : Cả bài toán gốc và bài toán đối ngẫu đều không có phương án -7 : Biên độ theo hướng tìm kiếm quá bé, không cải thiện được lời giải Bài toán có thể là không chỉnh hoặc có số điều kiện xấu 7. 5 QUI HOẠCH TOÀN PHƯƠNG Bài toán qui hoạch toàn phương là bài toán tối ưu... về kết quả là vector nghiệm x, bao gồm tất cả nghiệm thực và nghiệm phức Thí dụ 8 >> roots([3 4 1]) ans = -1 .0000 -0 .3333 >> x= roots([1 2 3 2 1]) x= -0 .5000 + 0.8660i -0 .5000 - 0.8660i -0 .5000 + 0.8660i -0 .5000 - 0.8660i 7. 2 GIẢI HỆ PHƯƠNG TRÌNH PHI TUYẾN Hệ phương trình phi tuyến là hệ n phương trình n ẩn có dạng như sau:  f1  x1 ,x2 ,x3 , xn   0   f 2  x1 ,x2 ,x3 , xn   0    f n  x1... giải ngay bài toán M mà không cần phải các tính toán B-1, xJ và H 193 Kết thúc việc giải bài toán M có thể xảy ra 1 trong 2 trường hợp: + Bài toán M không có phương án tốt ưu; + Bài toán M có phương án tối ưu X* =(x*,y*) Để kết luận về bài toán gốc ta căn cứ vào địmh lý sau: Định lý 7. 9 i) Nếu bài toán M không có phương án tối ưu thì bài toán gốc cũng không có phương án tối ưu ii) Nếu bài toán M có phương .  . (7. 13) Sau đó tính toán theo thủ tục:  Thủ tục tính - Bước 0. Chọn xấp xỉ đầu x (0)  - Bước lặp k= 1,2, Tính x (k) =x (k-1) - F -1 (x (k-1) ).f(x (k-1) ). (7. 14) Chú ý: - Ưu. = -1 .0000 -0 .3333 >> x= roots([1 2 3 2 1]) x = -0 .5000 + 0.8660i -0 .5000 - 0.8660i -0 .5000 + 0.8660i -0 .5000 - 0.8660i 7. 2 GIẢI HỆ PHƯƠNG TRÌNH PHI TUYẾN Hệ phương trình. 165 Chương 7 GIẢI PHƯƠNG TRÌNH VÀ TỐI ƯU HÓA 7. 1 GIẢI PHƯƠNG TRÌNH 7. 1.1 Giải phương trình một biến số Xét phương trình một biến có dạng: f(x) = 0 (7. 1) Nếu hàm f(x) liên

Ngày đăng: 11/07/2014, 09:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan