Hiện nay đã có rất nhiều phần mềm được khai thác phục vụ cho mục đích giảng dạy, học tập và nghiên cứu về lĩnh vực toán học như Sketpad, Maple, Cabri3D, Excel, Mathcad, Scientific WordPlace,.. Tuy nhiên phần mềm Matlab (Matrix Laboratory) lại ít được nhắc đến. Matlab có thể giải quyết hiệu quả các bài toán về ma trận, định thức, hệ phương trình tuyến tính, các bài toán cực trị; ngoài ra có thể lập trình cho Matlab thay thế cho các ngôn ngôn ngữ lập trình truyền thống như C, C++…Dưới đây chỉ tập trung khai thác ứng dụng của Matlab giải các bài toán cực trị trong chương trình phổ thông và Đại học.
Trang 1ỨNG DỤNG PHẦN MỀM MATLAB GIẢI BÀI TOÁN CỰC TRỊ
Nguyễn Thị Nhật Hà : DT13STH01 Nguyễn Đức Minh Hoàng: DT13STH01
Tóm tắt: Bài báo giới thiệu về phần mềm Matlab và ứng dụng của phần mềm Matlab trong việc
giải các bài toán tối ưu, bao gồm các bài toán tối ưu tuyến tính hoặc phi tuyến, bài toán tối ưu có ràng buộc hoặc không ràng buộc
1 Mở đầu
Ở trường trung học phổ thông, học sinh đã được học các phương pháp để tìm cực trị của hàm số một biến và tìm giá trị lớn nhất, giá trị nhỏ nhất của một biểu thức mà thực chất là tìm cực trị của hàm nhiều biến Đến chương trình Đại học, sinh viên được học tập và nghiên cứu chi tiết về cực trị của hàm nhiều biến, các bài toán quy hoạch tuyến tính, các bài toán phi tuyến Đặc điểm chung của các bài toán cực trị là có lời giải hết sức cồng kềnh, dễ sai sót trong quá trình tính toán và thậm chí nhều học sinh, sinh viên không thể tìm được lời giải cho bài toán vì phải sử dụng những kỹ thuật, những kiến thức phức hợp, phức tạp
Với sự phát triển như vũ bão của khoa học kỹ thuật, sự bùng nổ của công nghệ thông tin và truyền thông thì quá trình học tập, nghiên cứu, …phải được thay đổi theo hướng ứng dụng: Nội dung liên quan đến lý thuyết hàn lâm phải được tinh giản đến mức tối đa, tăng cường những kiến thức gắn liền với thực tế cuộc sống, thực tế lao động sản xuất; tăng cường ứng dụng công nghệ thông tin và truyền thông, ứng dụng trực tiếp sản phẩm khoa học kỹ thuật nhằm tăng hiệu quả học tập, tăng năng suất lao động
Hiện nay đã có rất nhiều phần mềm được khai thác phục vụ cho mục đích giảng dạy, học tập và nghiên cứu về lĩnh vực toán học như Sketpad, Maple, Cabri3D, Excel, Mathcad, Scientific WordPlace, Tuy nhiên phần mềm Matlab (Matrix Laboratory) lại ít được nhắc đến Matlab có thể giải quyết hiệu quả các bài toán về ma trận, định thức, hệ phương trình tuyến tính, các bài toán cực trị; ngoài ra có thể lập trình cho Matlab thay thế cho các ngôn ngôn ngữ lập trình truyền thống như C, C++…Dưới đây chỉ tập trung khai thác ứng dụng của Matlab giải các bài toán cực trị trong chương trình phổ thông và Đại học
2 Nội dung
2.1 Giới thiệu phần mềm Matlab
Matlab được phát minh vào cuối thập niên 1970 bởi Cleve Moler – Chủ nhiệm khoa máy tính trường đại học New Mexico Đến năm 1984 phiên bản Matlab 1.0 đầu tiên ra đời Sau đó hai năm Matlab 2.0 cũng ra đời nhờ sự hỗ trợ của Unix và trong những năm sau đó cho tới bây giờ phần mềm Matlab không ngừng được cải tiến với những công dụng bổ ích Matlab là viết tắt của Matrix Laboratory, là một bộ phần mềm toán học của hãng Mathworks để lập trình, tính toán số
và có tính trực quan rất cao Có thể dùng Matlab để tính toán, thực hiện thuật toán, thu thập dữ liệu, mô hình và mô phỏng, phân tích dữ liệu, vẽ đồ thị, giao diện đồ họa, thực hiện thuật toán,… Matlab gồm 5 phần chính:
Trang 2 Development Environment: Là một bộ các công cụ giúp ta sử dụng các hàm và tập tin của Matlab, bao gồm: Matlab desktop, Command Window, a command history, an editor, debugger, browsers for viewing help, the workspace, files, the search path
Matlab Mathematical Function Library: Tập hợp các hàm toán học như sum, sine, số học,…
Matlab Language (scritp): Ngôn ngữ lập trình bậc cao
Graphics: Các công cụ giúp hiển thị dữ liệu dưới dạng đồ thị, ngoài ra nó còn cho phép xây dựng giao diện đồ họa
Matlab Application Program Interface (API): Bộ thư viện cho phép ta sử dụng các chức năng tính tóan của Matlab trong chương trình C hay fortran
Matlab cung cấp một lượng rất lớn các hàm toán học, đối với hàm số sơ cấp có: Sin, cos, tan, atan, ln, log, exp, sqrt, round, ceil, floor, sum, min, max, mean, abs hay đối với hàm toán chuyên dụng: besselj (bessel function of the first kind), bessely (bessel function of the second kind), beta (beta function), erf (error function), gamma (gamma function), primes (generate list of prime numbers), cart2sph (transform Cartesian to spherical coordinates),…
Hiện nay, Matlab có rất nhiều phiên bản, thao tác cài đặt các phiên bản đều tương đối dễ dàng Trong bài báo này chúng tôi sử dụng phiên bản Matlab 2013a, sau khi cài đặt, giao diện làm việc có dạng:
Thực tế bài toán có thể yêu cầu tìm giá trị lớn nhất hoặc giá trị nhỏ nhất của hàm số F trên miền D Tuy nhiên nếu bài toán yêu cầu tìm giá trị lớn nhất của F trên D, ta có thể đặt G = -F và chuyển thành bài toán tìm giá trị nhỏ nhất của hàm số G trên D, bởi vậy để đơn giản, dưới đây
Trang 3chủ yếu trình bày các ví dụ cho bài toán tìm giá trị nhỏ nhất của hàm số (có hoặc không có ràng buộc)
2.2 Ứng dụng phần mềm Matlab giải bài toán tối ưu phi tuyến
2.2.1 Ứng dụng phần mềm Matlab giải bài toán tối ưu phi tuyến không ràng buộc
a) Hàm fminsearch
Cấu trúc thuật toán: [x,fval] = fminsearch(f, x0)
Trong đó:
x: Giá trị hàm số đạt chuẩn;
fval : Giá trị đạt chuẩn;
f : Hàm số cần tìm chuẩn;
x0: Giá trị khởi đầu
Ví dụ 1 Tìm giá trị nhỏ nhất của biểu thức: 2 4
F x , x x 1 x
Nhận thấy giá trị nhỏ nhất của biểu thức bằng 0, đạt khi x1 1, x2 ; ví dụ đầu tiên đưa ra0 nhằm mục đích giúp cho người đọc dễ dàng có sự đối chiếu, so sánh
Thuật toán:
f=@(x)(x(1)-1)^2+x(2)^4;
[x,fval]=fminsearch(f,[0,0])
Kết quả chạy chương trình:
Trang 4Ghi chú:
Các phép toán quen thuộc được khai báo tương ứng là: Cộng (+), trừ (-), nhân (*), chia (/), lũy thừa (^), căn bậc hai (sqrt), trị tuyệt đối (abs), …
Nếu dòng lệnh kết thúc bằng dấu ; thì khi chạy chương trình kết quả sẽ không được hiển thị; ngược lại nếu không có dấu ; thì kết quả của dòng lệnh đó sẽ hiển thị trên màn hình
Ví dụ 2 (Đề thi tuyển sinh Đại học – Cao Đẳng khối B năm 2006) Cho x, y là các số thực
thay đổi Tìm giá trị nhỏ nhất của biểu thức: A x12 y2 x12 y2 y 2
Xem x là x và 1 x là y, ta có:2
Thuật toán:
f=@(x)sqrt((x(1)-1)^2+(x(2))^2)+ sqrt((x(1)+1)^2+(x(2))^2)+abs(x(2)-2);
[x,fval]=fminsearch(f,[0,0])
Kết quả chạy chương trình được giá trị nhỏ nhất của biểu thức A bằng 3,7321; đạt tại x = 0
và y = 0,5773 (phù hợp với đáp án của Bộ giáo dục và đào tạo là: Giá trị nhỏ nhất của A bằng
2 3 2,7321, đạt khi x = 0 và
1 0,5773 3
)
b) Hàm fminunc
Cấu trúc thuật toán: [x,fval]=fminunc(f, x0)
Ví dụ 3 Tìm cực tiểu của hàm số 22 2
1, 2 100 2 1 1 1
Thuật toán:
f=@(x)100*(x(2)-(x(1))^2)^2+(1-x(1))^2;
[x,fval]=fminunc(f,[0,0])
Kết quả chạy chương trình được giá trị cực tiểu của hàm số F bằng 0 khi x1 x2 (giá trị1 cực tiểu của hàm số hiển thị bằng 1,9474 10 11 ).0
2.2.2 Ứng dụng phần mềm Matlab giải bài toán tối ưu phi tuyến không ràng buộc
a) Hàm một biến
Cấu trúc thuật toán: [x,fval]=fminbnd(f, x1, x2)
Trong đó x1 là cận dưới, x2 là cận trên
Ví dụ 4 Tìm giá trị nhỏ nhất của hàm số f x x3 2x 5 với 3 x 7
Thuật toán:
f=@(x)x^3-2*x-5;
[x,fval]=fminbnd(f,3,7)
Kết quả chạy chương trình cho ta giá trị nhỏ nhất của hàm số f bằng 16, đạt khi x = 3 b) Hàm nhiều biến ràng buộc tuyến tính:
Trang 5Bài toán: Tìm giá trị nhỏ nhất của hàm số F(X), trong đó x = (x1, x2, …, xn) thỏa mãn hệ
điều kiện ràng buộc:
Ax b Aeqx beq
lb x ub
Cấu trúc thuật toán: [x,fval]=fmincon(f, x0, A, b, Aeq, beq, lb, ub)
Ví dụ 5 Tìm giá trị nhỏ nhất của hàm số F x x 1, 2 x1 22 x2 32 5
thỏa mãn:
1 2
4 0
x x
Thuật toán:
f=@(x)(x(1)-2)^2+(x(2)-3)^2+5;
A = [1 1];
b = [4] (có thể viết b = 4);
lb = [0; 0]; (có thể khai báo ma trận không 2x1 là lb = Zeros(2,1))
x0 = [0; 0];
[x,fval]=fmincon(f, x0, A, b, [ ], [ ], lb, [ ])
Kết quả chạy chương trình cho ta giá trị nhỏ nhất của hàm số F bằng 5,5 đạt khi
1 2
1,5 2,5
x x
Ghi chú: Ký hiệu [ ] sẽ được máy hiểu là không có điều kiện ràng buộc tương ứng.
Ví dụ 6 (Đề thi tuyển sinh Đại học năm 2015) Cho các số thực a, b, c thuộc đoạn [1; 3] và
thỏa mãn điều kiện a + b + c = 6 Tìm giá trị lớn nhất của biểu thức:
2 2 2 2 2 2 12 72 1
2
ab bc ca
Trước hết ta tìm giá trị nhỏ nhất của biểu thức:
2 2 2 2 2 2 12 72 1
2
ab bc ca
Thỏa mãn điều kiện a, b, c thuộc đoạn [1; 3] và thỏa mãn điều kiện a + b + c = 6
Xem a là x1, b là x2 và c là x3 ta có:
Thuật toán:
f=@(x)(-x(1)^2*x(2)^2-x(2)^2*x(3)^2-x(3)^2*x(1)^2-12*x(1)*x(2)*x(3)-72)/
(x(1)*x(2)+x(2)*x(3)+x(3)*x(1))+x(1)*x(2)*x(3)/2;
Aeq = [1 1 1];
beq = 6;
lb = [1; 1; 1];
ub = [3; 3; 3];
x0 = [1; 2; 3];
[x,fval]=fmincon(f, x0, [ ], [ ], Aeq, beq, lb, ub)
Kết quả chạy chương trình cho ta giá trị nhỏ nhất của hàm số Q bằng -14,5455 và dấu bằng
Trang 6có khi a = 1, b = 2, c = 3 Giá trị này phù hợp với đáp án đưa ra của Bộ giáo dục và đào tạo là giá trị lớn nhất bằng
160 14,5455
11 , đạt khi a = 1, b = 2, c = 3 (rất ít thí sinh làm được câu này).
Ghi chú: Matlab chỉ lập trình cho bài toán tìm Min Nếu yêu cầu bài toán là tìm Max của
hàm F thì trước hết ta tìm Min của hàm –F, giả sử đó là M, khi đó Max cần tìm chính là –M
2.3 Ứng dụng phần mềm Matlab giải các bài toán quy hoạch tuyến tính
Bài toán: Tìm Min (Max) của hàm số F(x) (tuyến tính) thỏa mãn điều kiện ràng buộc:
Ax b
Aeqx beq
lb x ub
(điều kiện ràng buộc gồm một hệ phương trình, bất phương trình tuyến tính) Cấu trúc thuật toán: [x,fval]=linprog(f, A, b, Aeq, beq, lb, ub, x0)
Ví dụ 7 Tìm giá trị nhỏ nhất của hàm số F x x x 1, ,2 3 2x1 3x23x3
thỏa mãn:
1 2
1 2 3
1 2 3
3
x x x
Thuật toán:
f = [2; -3; 3];
A = [3 -1 0; -1 -2 1];
b = [12; -1];
Aeq = [1 -1 -1];
beq = 3;
lb = zeros(3,1);
[x,fval] = linprog(f, A, b, Aeq, beq, lb, [ ],[0,0,0])
Kết quả: Hàm số đạt giá trị nhỏ nhất của F bằng 4,5; đạt khi x1 = 4,5; x2 = 1,5; x3 =0
Ghi chú: Trong hệ điều kiện của bài toán cụ thể phải đưa về nguyên dạng, chẳng hạn ở bài
toán này thì điều kiện x12x2 x3 phải được đưa về 1 x1 2x2 x3 1
Ví dụ 8 Tìm GTLN của hàm số Fx x x1, ,2 3 3x1 8x2 5x3 thỏa mãn hệ điều kiện:
1 2
Thuật toán:
f=[-3; -8; -5];
A = [1,3,0;1,0,2;1,3,3];
b = [4; 7; 12];
lb = zeros(3,1);
Trang 7x0 = [0; 0; 0];
[x,fval] = linprog(f, A, b, [ ], [ ], lb, [ ], x0)
Kết quả:
Hàm số Fx x x1, ,2 3 3x1 8x2 5x3
đạt giá trị nhỏ nhất tại x1 = 1,6667; x2 = 0,7778;
x3 = 2,6667 và giá trị nhỏ nhất đạt được là -24,5556 (đây là các giá trị gần đúng, còn giá trị đúng tương ứng là 1 2 3
và giá trị nhỏ nhất là
221 9
)
Vậy giá trị lớn nhất cần tìm là 24,5556 đạt tại x1 = 1,6667; x2 = 0,7778; x3 = 2,6667 (đó là giá trị gần đúng, còn giá trị đúng là
221
9 , đạt tại 1 2 3
)
3 Kết luận
Mỗi phần mềm ra đời đều có một ý nghĩa chuyên dụng, đem lại lợi ích nhất định đối với người sử dụng Mục đích chính của phần mềm Matlab là giải toán (chủ yếu là tính toán kỹ thuật), bởi vậy nếu khai thác hết được tính năng của phần mềm Matlab vào quá trình dạy và học toán sẽ mang lại ý nghĩa hết sức to lớn Trong bài viết chúng tôi chỉ mới nghiên cứu và trình bày một vài kết quả ban đâu, tuy nhiên có thể rút ra một số kết luận sau:
Matlab giải các bài toán cực trị, Min, Max cho kết quả chính xác trong thời gian rất ngắn (khoảng một giây);
Matlab có thể giải được bài toán quy hoạch tuyến tính gốc mà không cần phải mất thời gian chuyển về dạng chuẩn tắc;
Các thao tác của người dùng đối với phần mềm Matlab khá đơn giản: Chỉ cần dùng đúng tên lệnh và sử dụng đúng cấu trúc lệnh mà không cần phải lập trình (như các phần mềm khác: Pascal, C+, C++, …), nghĩa là bất cứ ai cũng có thể dễ dàng sử dụng nó;
Chỉ cần soạn thảo các bài toán trên Word hoặc PowerPoin rồi copy sang Matlab mà không cần trực tiếp soạn trên Matlab nên rất tiện dụng;
Sử dụng phần mềm Matlab có thể giúp những người không được đào tạo chuyên sâu về toán vẫn có thể giải được nhiều bài toán trong thực tế liên quan đến ngành nghề của họ như: Bài toán tối ưu trong sản xuất, trong xây dựng, bài toán vận tải, …
Các kiến thức toán chúng ta học được khi đang ngồi trên ghế nhà trường thường là kiến thức toán học chính xác còn trong thực tế cuộc sống thì tính toán gần đúng (tương đối) mang ý nghĩa quan trọng hơn Giải các bài toán với phần mềm Matlab giúp chúng ta gắn toán học với thực tiễn, phù hợp với xu hướng dạy học hiện đại: học tập gắn liền với cuộc sống lao động sản xuất
TÀI LIỆU THAM KHẢO
[1] Trần Ngọc Hội (2007), Bài giảng quy hoạch tuyến tính.
[2] Trần Ngọc Hội (2007), Tài liệu ôn thi môn Toán kinh tế phần quy hoạch tuyến tính.