Tải bản đầy đủ (.pdf) (40 trang)

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

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 (513.52 KB, 40 trang )


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



’(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].

175
Khi đó phương trình tiếp tuyến của đường cong y=f(x) tại x
0
là:
y = f(x
0
) + f’(x
0
) (x-x
0
) (7.9)
Do đó, nếu f ’(x
0
) ≠ 0 thì từ (7.9) suy ra:
0
0
0
( )

'( )
f x
x x
f x
 

(7.10)
là giao điểm của tiếp tuyến với trục hoành.
Để tìm nghiệm

của phương trình trong khoảng [a,b] với sai số tuyệt đối
không quá

, bạn có thể thực theo thủ tục lặp sau đây:
 Thủ tục tính toán
- Bước 0. Chọn x
0
=a hay x
0
=b thỏa mãn f(x
0
).f”(x
0
)

0;
- Bước lặp k=1,2,
+ Tính
1
1
1
( )

'( )
k
k k

k
f x
x x
f x



 
+ Nếu
k
f ( x )
m


thì dừng thủ tục và x
k
là nghiệm xấp xỉ cần tìm;
Ngược lại thì chuyển sang bước k+1.
Cũng như phương pháp Dây cung, trong nhiều trường hợp, việc đánh giá


[ , ]
min '( )
x a b
m f x

 rất khó. Mặt khác khi m quá nhỏ thì 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. Chú ý rằng khi x
k
đã khá gần


thì
đạo hàm của f(x) trong khoảng [x,

] thay đổi gần như không đáng kể. Vì vậy,
trong quá trình thực hiện phương pháp Newton, khi nhận thấy có bất đẳng thức:

k
k
f ( x )
f '( x )



thì có thể dừng lặp và khi đó x
k
là nghiệm xấp xỉ cần tìm.
Khi cài đặt hàm trong Matlab, tên hàm f(x) cần giải phương trình là tham số
của hàm giải nên nói chung không xác định được hàm f’(x) một cách tường minh
mà nên tính xấp xỉ theo công thức:

 
( ) ( )

f x f x
f x


 


Khi đó công thức tính lặp trong thủ tục là: x
k
= x
k-1
-
1
1
k
k
f ( x )
f '( x )




176
có thể được thay bởi công thức:
1
1
1 1
. ( )

( ) ( )
k
k k
k k
f x
x x
f x f x





 
 
 
.

y







x
0
x
1
x
2
x
3
x


Hình 7.5 Phương pháp Newton
Thực nghiệm tính toán cho thấy phương Newton thực hiện nhanh hơn
nhiều so với các phương pháp Chia đôi và phương pháp Dây cung. Tuy nhiên, để

bảo đảm phương pháp Newton chắc chắn hội tụ thì bạn cần phải xét thêm điều
kiện về các đạo hàm cấp 1 và 2 đồng thời phải chọn x
0
thích hợp.
7.1.6 Một số hàm sử dụng để giải phương trình của Matlab.
 Hàm FZERO
Cú pháp:
[ x f ] = fzero(FUN,Init) :
Giải thích. Hàm FZERO tìm không điểm của một hàm số xác định bởi
tham số FUN và sử dụng xấp xỉ đầu Init.
- Nếu Init là một số thì nó xác định xấp xỉ đầu của lời giải;
- Nếu Init là vector 2 chiều thì nó xác định khoảng chứa nghiệm cần tìm,
khi đó Matlab sẽ kiểm tra điều kiện hàm FUN phải đổi dấu tại 2 biên của
khoảng.
- Các tham số ra: x là lời giải xấp xỉ cần tìm và f là giá trị của hàm tại x.

177
Thí dụ 7. Soạn file Myfunct.m có nội dung như sau:
% Function for computing the zeros of a function
function z=myfunct(x)
z = tan(x) – x;
Sau đó lần lượt gọi hàm:
>> fzero('Myfunct',[-1 1])
Zero found in the interval: [-1, 1].
ans =
0
>> fzero('Myfunct',[-0.5 1])
Zero found in the interval: [-0.5, 1].
ans =
-1.1801e-008

>> 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 =
-1.5708 %% Kết quả sai
f =
1.2093e+015

Hãy chú ý trong thí dụ cuối cùng: -1.5708

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 -
2

. Nếu không chú ý đến điều
đó, người sử dụng có thể phải “trả giá” vì kết quả sai.


178
 Hàm ROOTS
Cú pháp:
x = roots(p)
Giải thích. Hàm ROOTS tìm tất cả các nghiệm của đa thức có hệ số là
vector p trả 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:



 
 
1 1 2 3
2 1 2 3
1 2 3
0
0
0
n
n
n n
f x ,x ,x , x
f x ,x ,x , x

f x ,x ,x , x











hay f(x) =0, (7.11)
trong đó kí hiệu:
x =
1
2

n
x
x
x
 
 
 
 
 
 
và f(x) =
1
2
( )

( )

( )
n
f x
f x
f x
 
 
 
 
 
 
.

179
Đây là một bài toán khó. Sau đây chúng ta sẽ nghiên cứu một số phương
pháp giải hệ (7.11). Tính liên tục và khả vi của các hàm số được khảo sát luôn
luôn được gải thiết trong các phương pháp này.
7.2.1 Phương pháp Lặp đơn
Đầu tiên đưa hệ phương trình (7.11) về dạng tương đương:


 
 
1 1 1 2 3
2 2 1 2 3
1 2 3
n
n

n n n
x x ,x ,x , x
x x ,x ,x , x

x x ,x ,x , x













hay x=

(x), (7.12)
trong đó 
i
(x),
ni ,1
là các hàm liên tục của n biến. Sau đó giải hệ (7.12)
theo thủ tục lặp sau đây.
 Thủ tục tính
- Bước 0. Chọn xấp xỉ đầu x
(0)

= (x
1
(0)
,x
2
(0)
, ,x
n
(0)
)
- Bước lặp k =1,2,3
Tính x
i

(k+1)
=

i
(x
1
(k)
,x
2
(k)
, ,x
n
(k)
) với
1,
i n


.
Đặt:

 
1 1 1
1 2
2 2 2
1 2
1 2
( ) ( ) ( )

( ) ( ) ( )


( ) ( ) ( )

n
n
n n n
n
x x x
x x x
x x x
x x x
x
x x x
x x x
  
  

  
  
 
 
  
 
 
  
 
  
 
 
 
 
  
 
 
  
 
: là ma trận Jacoby của

(x).
Định lý 7.4 Nếu các hàm

i
(x),
1,
i n

xác định, liên tục và khả vi trong

một miền



R
n
, đồng thời thoả mãn
( ) 1
x q
  
với mọi x 
và q là một hằng số, thì dãy lặp x
(k)
sẽ hội tụ đến nghiệm α của hệ
phương trình (7.11) với mọi xấp xỉ đầu x
(0)
.
Hạn chế ứng dụng của phương pháp Lặp đơn là không chỉ rõ phương pháp
nào có thể đưa phương trình (7.11) về dạng (7.12) để thoả mãn điều kiện hội tụ:
( ) 1
x q
  
.

180
7.2.2 Phương pháp Newton
Giả sử trong miền

R
n

chứa 1 nghiệm x=α của hệ phương trình (7.11).
Đầu tiên ta tính ma trận Jacoby của hàm f(x):
1 1 1
1 2
2 2 2
1 2
1 2
( ) ( ) ( )

( ) ( ) ( )

( )

( ) ( ) ( )

n
n
n n n
n
f x f x f x
x x x
f x f x f x
x x x
F x
f x f x f x
x x x
  
 
 
  

 
 
  
 
  

 
 
 
  
 
 
  
 
. (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 mỗi bước lặp cần 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 tối ưu hoá tổng quát (Optimization Problem hay Mathematical
Programming) là bài toán có dạng:

181
Tìm min (hoặc max) của hàm số y = f(x) (7.15)
thỏa mãn các điều kiện
i i
n
g (x) , , b i=1,m
x X R

  

 

. (7.16)
Trong đó:
- Hàm y = f(x) : gọi là hàm mục tiêu của bài toán.

- Các hàm g
i
(x),
i 1,m

: gọi là các hàm ràng buộc. Mỗi bất đẳng thức gọi là
một ràng buộc.
- Tập
i
{ | ( ) ( , )b , 1, }
i
D x X g x i m
     
: gọi là miền ràng buộc hay tập các
phương án chấp nhận được. Mỗi phần tử xD gọi là một phương án hay lời giải
chấp nhận được.
- Phương án x*

D làm cực tiểu (cực đại) hàm mục tiêu gọi là phương án
tối ưu hay lời giải tối ưu. Cụ thể là: f(x*)

f(x) với

x

D đối với bài toán max
hoặc f(x*)

f(x) với


x

D đối với bài toán min. Khi đó f* = f(x*) gọi là giá
trị tối ưu của bài toán.
7.3.2 Phân loại bài toán
Không thể có được một thuật toán đủ hiệu quả giải các bài toán Tối ưu hóa.
Vì vậy ta cần phải phân loại các bài toán và tìm các phương pháp giải thích hợp
cho từng loại:
- Qui hoạch tuyến tính: gồm các bài toán có hàm mục tiêu và các hàm ràng
buộc đều là các hàm tuyến tính, trong đó có một trường hợp riêng quan trọng là
bài toán vận tải.
- Qui hoạch tham số: gồm các bài toán có các hệ số trong hàm mục tiêu
hay các hàm ràng buộc phụ thuộc vào tham số. Việc đưa tham số vào bài toán
làm cho ứng dụng của nó mở rộng hơn nhiều.
- Qui hoạch động: đối tượng được xét là các quá trình có nhiều giai đoạn
hay quá trình phát triển theo thời gian, hàm mục tiêu thường có dạng tách biến.
- Qui hoạch phi tuyến: gồm các bài toán có hàm mục tiêu hoặc các hàm
ràng buộc là hàm phi tuyến.
- Qui hoạch rời rạc: gồm các bài toán có tập ràng buộc D là một tập rời rạc;
Trong đó có một số trường hợp riêng: các biến x
i
chỉ nhận giá trị nguyên (Qui

182
hoạch nguyên) hay các biến x
i
chỉ nhận các giá trị 0 hoặc 1 (Qui hoạch biến
Boole).
- Qui hoạch đa mục tiêu: gồm các bài toán mà trên tập một ràng buộc D
xét nhiều hàm mục tiêu khác nhau.



7.4 QUI HOẠCH TUYẾN TÍNH
7.4.1 Bài toán qui hoạch tuyến tính (QHTT)
Bài toán qui hoạch tuyến tính tổng quát có dạng như sau:
Tìm min (hoặc max) của hàm
n
j j
j 1
F(x) c x




thỏa mãn các điều kiện:

n
ij j i
j 1
a x , , b ,i 1,m

   

.
Đặt D là tập các phương án của bài toán qui hoạch tuyến tính:
D= {xR
n
:
n
ij j i

j 1
a x , , b ,i 1,m

   

}
Khi đó D là một tập lồi đa diện trong không gian R
n
. Nếu tập đa diện D có
đỉnh thì số đỉnh của nó là hữu hạn.
Định lý 7.4 Nếu hàm F(x) đạt cực tiểu (cực đại) tại một điểm duy nhất x
*

thì x
*
phải là một đỉnh của D.
Định lý 7.5 Nếu hàm F(x) đạt cực tiểu (cực đại) tại một vector x
*
là điểm
trong của đoạn thẳng [a,b] trong D thì F(x) đạt cực tiểu (cực đại) tại
mọi điểm trên đoạn thẳng đó.
Từ hai định lý cơ bản trên dẫn đến hệ quả là: Nếu bài toán qui hoạch tuyến
tính có phương án tối ưu và tập đa diện D có đỉnh thì F(x) đạt giá trị tối ưu tại ít
nhất một đỉnh của D. Để thuận tiện cho việc nghiên cứu các thuật toán giải qui
hoạch tuyến tính người ta thường đưa bài toán qui hoạch tuyến tính về một trong
hai dạng: dạng chính tắc và dạng chuẩn tắc.
 Bài toán qui hoạch tuyến tính dạng chính tắc
Bài toán qui hoạch tuyến tính dạng chính tắc là bài toán tối ưu có dạng:

183

1
( )
n
j j
j
F x c x





min
Thỏa mãn các điều kiện:

1
, 1,
0, 1,
n
ij j i
j
j
a x b i m
x j n


 





 




hay viết dưới dạng ma trận:
F(x) = <c,x>

min
Ax = b , x

0
Các ràng buộc trong bài toán trên, không kể các ràng buộc về dấu của biến,
đều là các ràng buộc chặt (ràng buộc dạng đẳng thức). Do đó không làm mất tính
tổng quát ta có thể thêm các giả thiết: b

0 và rank(A) = m <n. Khi đó tập các
phương án chấp nhận được D ={x

R
n
|Ax=b, x

0} là đa diện có thứ nguyên là
n-m.
 Bài toán qui hoạch tuyến tính dạng chuẩn tắc
Bài toán qui hoạch tuyến tính dạng chuẩn tắc là bài toán tối ưu có dạng:
1
( )
n

j j
j
F x c x





min
thỏa mãn các điều kiện:

1
, 1,
0, 1,
n
ij j i
j
j
a x b i m
x j n


 




 




.
Hay viết bài toán dưới dạng ma trận:
F(x) = <c,x>

min
Ax ≤ b , x

0
Trong bài toán dạng chuẩn tắc các ràng buộc, kể cả các ràng buộc về dấu
của biến, đều là các ràng buộc bất đẳng thức. Cho nên không có các giả thiết:
b 0 và m<n như trong bài toán dạng chính tắc. Khi đó, tập các phương án chấp
nhận được D ={ x

R
n
| Ax≤b, x

0} là tập đa diện có thể có n thứ nguyên.

184
Các bạn cần chú ý là một bài toán qui hoạch tuyến tính dạng bất kỳ đều có
thể dễ dàng đưa về dạng chuẩn tắc hay dạng chính tắc.
7.4.2 Thuật toán đơn hình giải qui hoạch tuyến tính dạng chính tắc
Thuật toán đơn hình do Dantzig dưa ra năm 1944. Đây là thuật toán cơ bản
đầu tiên trong lý thuyết tối ưu hóa, nó được sử dụng làm cơ sở cho nhiều thuật
toán giải các bài toán tối ưu khác.
Xét bài toán qui hoạch tuyến tính dạng chính tắc:
F(x)= <c,x>


min
D={ x

R
n
| A x = b , x

0 }
Với các giả thiết : b

0 , rank(A)= m < n thì tập các phương án chấp nhận
được D là đa diện có thứ nguyên n-m.
 Đường lối chung của thuật toán đơn hình (Simplex)
Thuật toán đơn hình bao gồm các bước cơ bản như sau:
Bước 1. Tìm phương án cực biên xuất phát
Kết quả của bước này là một trong hai khả năng:
- Nếu phát hiện bài toán không có phương án thì kết thúc thuật toán.
- Nếu tìm được phương án cực biên x
0

D thì chuyển sang bước 2.
Bước 2. Kiểm tra tiêu chuẩn tối ưu đối với phương án tìm được.
Có hai khả năng có thể xảy ra:
- Nếu x
0
thỏa mãn tiêu chuẩn tối ưu thì đặt x
*
= x
0
, tính F

*
=F(x
*
) và kết
thúc thuật toán.
- Nếu x
0
không thỏa mãn tiêu chuẩn tối ưu thì chuyển sang bước 3.
Bước 3. Cải tiến phương án
Tìm phương án cực biên x
1
tốt hơn phương án x
0
, tức là F(x
1
) < F(x
0
). Có
hai khả năng có thể xảy ra:
- Phát hiện bài toán không có phương án tối ưu: Kết thúc thuật toán.
- Tìm được phương án x
1
: Thay x
0
bởi x
1
và lặp lại bước 2.
Do tập ràng buộc của bài toán là tập lồi đa diện nên nó chỉ có một số hữu
hạn đỉnh. Vì vậy thuật toán đơn hình sẽ kết thúc sau một số bước lặp, kết quả là
tìm được phương án tối ưu x

*
hay phát hiện bài toán không có phương án tối ưu.

185
 Chi tiết hóa các bước của thuật toán
Bước 1. Tìm phương án cực biên xuất phát x
0
D
Giả sử D có một phương án cực biên là


0 0 0 0
1 2
n
x x ,x , ,x

. Vì là phương
án cực biên nên x
0
phải thỏa mãn chặt n ràng buộc độc lập tuyến tính. Do x
0

một phương án nên x
0
đã phải thỏa mãn m phương trình ràng buộc dạng Ax=b,
nên nó còn phải thỏa mãn chặt thêm n-m ràng buộc dạng x
j
=0 nữa. Không làm
mất tính tổng quát, giả sử:
0 0 0

1 2
0
m m n
x x x .
 
   

Khi đó hệ phương trình để xác định m thành phần còn lại của x
0
là:
11 1 12 2 1 1
21 1 22 2 2 2
1 1 2 2




m m
m m
m m mm m m
a x a x a x b
a x a x a x b
a x a x a x b
  


  


 



  

(7.17)
Để thuận tiện cho việc nghiên cứu, người ta đưa thêm vào các ký hiệu:



1,2,3,
J m
  : gọi là tập chỉ số cơ sở của x
0
;

1
2
, j=1,n

j
j
j
mj
a
a
A
a
 
 
 

 

 
 
 
 
 
: là cột thứ j của ma trận A hay vector cơ sở;





1 2
, , ,
m j
j J
B A A A A

   : ma trận cơ sở và


.
J j
j J
x x


Các biến x
j

với j

J gọi là các biến cơ sở ; Còn các biến x
j
với j

J gọi là
các biến phi cơ sở. Các thành phần của một phương án cực biên tương ứng với
các biến phi cơ sở đều bằng 0.
Khi đó hệ phương trình (7.17) có thể viết thành Bx
J
=b. Do giả thiết
rank(B)= rank(A) = m nên
0
J
x
là nghiệm của hệ (7.17):

0
J
x
=B
-1
b  0 và
0 0 0 0 0
1 2 3
( , , , , ,0,0.0, ,0).
m
x x x x x
Nếu

0
J
x
>0 với
j J
 
thì x
0
gọi là phương án cực biên không suy biến (hay
không thoái hóa); Ngược lại nếu

j

J sao cho
0
j
x
=0 thì x
0
gọi là phương án cực
biên suy biến.

186
Phân tích quá trình trên trên có thể nhận xét như sau: giả sử ta tìm được tập
chỉ số cơ sở


1,2,3,
J n
 

sao cho ||J|| = m và B=(A
j
)
j

J
là ma trận không suy
biến. Khi đó các vector của B tạo thành một cơ sở của R
m
. Khi đó:
- Nếu B
-1
b

0 thì B gọi là một cơ sở chấp nhận được của bài toán QHTT,
đồng thời nó xác định một phương án cực biên x
0
nào đó của bài toán.
- Nếu điều kiện B
-1
b

0 không thỏa mãn thì B không phải là cơ sở chấp
nhận được của bài toán. Khi đó ta phải chọn lại m cột độc lập tuyến tính khác của
ma trận A…Cứ như vậy cho đến khi tìm được cơ sở chấp nhận được.
Cách làm như trên mang tính may rủi, tốn công sức. Vì vậy, khi chưa biết
cơ sở xuất phát của bài toán QHTT, để giải bài toán ta thường áp dụng một trong
hai phương pháp: phương pháp đơn hình hai pha và phương pháp hàm phạt.
Thực chất của cả hai phương pháp này là đưa thêm vào bài toán QHTT gốc
một số biến giả để bài toán mở rộng là bài toán QHTT dạng chính tắc có sẵn một

cơ sở xuất phát với dạng ma trận đơn vị. Do đó có thể lập bảng đơn hình và tính
toán ngay. Từ kết quả giải được của bài toán mở rộng có thể suy ra kết quả của
bài toán gốc. Để hiểu rõ hơn về các phương pháp này các bạn nên đọc thêm các
giáo trình về Qui hoạch tuyến tính.
Bước 2. Kiểm tra tiêu chuẩn tối ưu
Giả sử ta tìm được phương án cực biên x
0
tương ứng với cơ sở B=(A
j
)
j

J
.
Khi đó
0 0
0 và 0
j k
x j J x k J
   
. Do (A
j
)
j

J
là một họ m vector độc lập tuyến
tính trong không gian R
m
, nên nó tạo thành một cơ sở trong không gian R

m
. Ta có
thể phân tích các vector A
k
với
k J

theo cơ sở này:
A
k
=
jk j
j J
v A



k J

(7.18)
Đặt
k jk j k
j J
v c c

  

với k=1,2, : gọi là các số kiểm tra. (7.19)
Định lý 7.6 (Công thức số gia của hàm mục tiêu) Nếu x
0

là phương án cực
biên tương ứng với cơ sở B=(A
j
)
j

J
thì

x

D ta có :
0

j j jk k
k J
x x v x

 

với jJ (7.20)

 
0
( )
k k
k J
F x F x x

  


F(x).

(7.21)

187
Bây giờ nếu đặt:
0
j j j jk k
k J
x x x v x

    

là số gia của biến x
j



F x


=
 
0
( )
k k
k J
F x F x x


   

là số gia của hàm mục tiêu, thì từ định lý trên dễ
dàng nhận thấy rằng số gia của các biến cơ sở và số gia của hàm mục tiêu là các
hàm tuyến tính của các biến phi cơ sở.
Định lý 7.7 (Tiêu chuẩn tối ưu). Nếu x
0
là phương án cực biên tương ứng
với cơ sở B=(A
j
)
j

J
, thì điều kiện để x
0
là phương án tối ưu là:


k


0 với 
k J

. (7.22)
Nếu x
0
thỏa mãn tiêu chuẩn (7.22) thì x
0

là phương án tối ưu của bài toán
QHTT; Ngược lại nếu nó không thỏa mãn tiêu chuẩn (7.22) thì khi đó 
k J


sao cho 
k
>0 nên ta cần cải tiến phương án. Khi đó có thể tồn tại phương án cực
biên tốt hơn x
0
và cũng có thể bài toán không có phương án tối ưu . Định lý sau
đây giúp ta nhận biết bài toán không có phương án tối ưu.
Định lý 7.8 (Tiêu chuẩn nhận biết bài toán không có phương án tối ưu). Giả
sử x
0
là phương án cực biên tương ứng với cơ sở B=(A
j
)
j

J
. Nếu

k J

sao cho

k
>0 và v
jk


0 với
j J
 
thì bài toán không có
phương án tối ưu.
Bước 3. Cải tiến phương án
Giả sử x
0
là phương án cực biên tương ứng với cơ sở B=(A
j
)
j

J
. Nếu

k J

để

k
>0 thì x
0
không phải là phương án tối ưu. Ta cần tìm phương án
cực biên x
1
tốt hơn x
0
, nghĩa là F(x

1
) < F(x
0
). Gọi B
1
là cơ sở chấp nhận được
tương ứng với x
1
. Do x
0
chưa phải phương án tối ưu nên có ít nhất một cạnh kề
với x
0
mà khi đi trên cạnh đó từ x
0
hàm mục tiêu giảm. Để đơn giản cho việc tính
toán, ta tìm x
1
là một đỉnh kề của x
0
nghĩa là hai cơ sở tương ứng chỉ khác nhau
đúng 1 vector, nghĩa là:
B
1
= B\ {A
p
}

{A
q

} với p

J và q

J . (7.23)
Vấn đề còn lại là cần chọn A
p
và A
q
như thế nào.
a. Chọn vector A
q
đưa vào cơ sở mới B
1
Do tiêu chuẩn tối ưu là

k


0 với

k J

nên có thể chọn vector A
q
bất kỳ
tương ứng với

q
>0. Tuy nhiên để tăng tốc độ giảm giá trị hàm mục tiêu người ta

thường chọn:

188

ax
q k
k J
m

  
. (7.24)
Khi đó này A
q
tương ứng với phương của cạnh có tốc độ giảm nhanh nhất
của hàm mục tiêu vì:





1 0 0 1
( ) F x
k k q q
k J
F x F x x x

    

.
Có hai trường hợp có thể xảy ra:

- Nếu v
jq


0 với

j

J, thì theo định lý 7.8 bài toán không có phương án
tối ưu;
- Nếu

j

J v
jq
>0 thì chuyển sang việc chọn A
p
.
b. Chọn vector A
p
đưa ra khỏi B
Chọn A
p
tương ứng với:
0 0
0
min
jq
p j

v
pq jq
x x
v v


. (7.25)
Tính hợp lý của (7.25) được giải thích như sau: việc phải chọn A
p
đưa ra
khỏi cơ sở phải bảo đảm phương án mới x
1

0. Theo công thức (7.20) ta có:
1 0 1 0 1
0
j j jk k j jq q
k J
x x v x x v x

    

với j

J
1
= J\{p}

{q}. (7.26)
- Nếu v

jq


0 thì đương nhiên
1
j
x

0;
- Nếu v
jq
>0 từ (7.26) suy ra
0
1
j
q
jq
x
x
v


hay
0
1
0
min
jq
j
q

v
jq
x
x
v


, vì vậy ta cần
phải chọn A
p
tương ứng với:
0 0
1
0
min
jq
p j
q
v
pq jq
x x
x
v v

 
.
7.4.3 Thuật toán đơn hình dạng bảng
 Bảng đơn hình xuất phát :
Xét bài toán QHTT dạng chính tắc:



,
F x c x min
  


{ | , 0 }
n
x D x R A x b x     ,
với giả thiết: b

0, rank(A)=m < n.

189
Giả sử đã biết được một cơ sở xuất phát B=(A
j
)
j

J
với


1,2,3, ,
J n
  và
||J||= m. Lần lượt tính:




 
0 1 1 1 1 1
1 2 1 2
, , , , , , ,
J n n
x B b H B A B A B A B A V V V
    
     
.
Sau đó đưa các kết quả tính toán vào bảng đơn hình. Trong bảng đơn hình
các số kiểm tra được tính theo công thức:
k jk j k
j J
v c c

  

nếu k

J và

k
=0 nếu k

J.
Nếu


1,2, ,
J m

 
thì bảng đơn hình xuất phát có dạng:
Bảng 7.1 Bảng đơn hình
B c
J
x
J
c
1
c
2
… c
m
c
m+1
… c
k
… c
q
… c
n
h
j

v
jq
>0
A
1
A

2
… A
m
A
m+1
… A
k
… A
q
… A
n
A
1
c
1
x
1 1 0 0
v
1,m+1
v
1,k
v
1,q
v
1,n


A
2
c

2
x
2

0 1 0
v
2,m+1
v
2,k
v
2,q
v
2,n


… … …
A
j
c
j
x
j

0 0 0
v
j,m+1
v
j,k
v
j,q

v
j,n

/
j jq
x v

… … …
A
p
c
p
x
p

0 0 0
v
p,m+1
v
p,k
v
p,q
v
p,n

/
p pq
x v

… … …

A
m
c
m
x
m

0 0 1
v
m,m+1

v
m,k
v
m,q
v
m,n



k

0

0

… 0


m+1



k


q



n

 Sử dụng bảng đơn hình
Từ bảng đơn hình ta phân tích:
- Nếu

k

J

k

0 thì dừng thuật toán: x
0
là phương án tối ưu;
Ngược lại cần chọn A
q
đưa vào B
1
theo qui tắc:
max

q k
k J
  
.
- Nếu trên cột A
q
ta thấy v
jq
 0

j

J thì dừng: bài toán không có phương
án tối ưu;
Ngược lại tính
0
j
j
jq
x
h
v

với
0
jq
v

và chọn A
p

đưa ra khỏi B theo qui tắc:

×