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 (297.56 KB, 6 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
<b>Nguyễn Quỳnh Hoa*<sub>, Phạm Thị Linh, Trần Thị Mai </sub></b>
<i> Trường Đại học Kinh tế & Quản trị kinh doanh – ĐH Thái Nguyên </i>
TÓM TẮT
Trong thực tế hiện nay hầu hết các bài toán trong sản xuất, kinh doanh hàng hóa là các bài tốn tối
ưu. Đã có rất nhiều phương pháp để giải các bài tốn tối ưu này nhưng việc ứng dụng các phần
mềm để giải các bài toán tối ưu hứa hẹn nhiều triển vọng. Bài báo này trình bày ứng dụng của
phần mềm Matlab để giải quyết một số bài toán tối ưu trong kinh tế.
<i><b>Từ khóa: tối ưu trong kinh tế, ứng dụng Matlab, bài toán tối ưu,...</b></i>
ĐẶT VẤN ĐỀ*
MatLab là một phần mềm nổi tiếng của công
ty MathWorks, là một cơng cụ có tính ứng
dụng cao trong tính tốn. được cộng đồng hàn
lâm trên thế giới chấp nhận rộng rãi như một
công cụ phục vụ cho giảng dạy, nghiên cứu
toán học và phát triển các ứng dụng kỹ thuật.
Hiện nay đã có rất nhiều đầu sách về Matlab
dành cho giáo viên, sinh viên và các nhà
chuyên môn. Ở Việt nam, Matlab cũng đã
được đưa vào giảng dạy cho sinh viên, học
viên cao học hoặc giới thiệu tại một số khoa,
trường đại học. Các ứng dụng tiêu biểu của
Matlab bao gồm: hỗ trợ toán học và tính tốn;
Ngày nay trong q trình phân tích kinh tế,
chúng ta phải sử dụng rất nhiều kiến thức về
tốn học như: phân tích số liệu và thống kê,
tìm cực trị của hàm một biến hoặc nhiều biến,
giải bài toán tối ưu một hay nhiều mục tiêu,
tìm nghiệm của phương trình, tính gần đúng
tích phân, giải phương trình vi phân… Với ưu
thế về tính tốn số trị Matlab rất thích hợp
cho việc ứng dụng để giải một số mô hình
tốn trong kinh tế. Việc sử dụng Matlab để
lập trình các thuật tốn có cái lợi là đơn giản
và dễ dàng vẽ các đồ thị để hiển thị kết quả.
Đặc biệt, trong Matlab đã được cài đặt sẵn rất
nhiều các hàm tính tốn tốn học.
TỔNG QUAN VỀ PHẦN MỀM MATLAB
Tên của phần mềm MATLAB là viết tắt của
thuật ngữ “MATrix LABoratory”, được Cleve
Moler phát minh vào cuối thập niên 1970, và
sau đó là chủ nhiệm khoa máy tính tại Đại
học New Mexico. Năm 2004 MATLAB 7
phát hành, có khả năng chính xác đơn và kiểu
- Các hàm trong MATLAB cơ bản (không kể
các thư viện chuyên dụng được gọi là các
ToolBox) được chia làm 2 loại: hàm trong và
hàm ngoài. Các hàm trong là các hàm được
cài đặt sẵn (built-ins) tức là tồn tại dưới dạng
mã nhị phân nên ta không thể xem được mã
nguồn của chúng, thí dụ các hàm sin, sqrt,
log, clear, clc,.... Đây là các hàm hay được sử
dụng hoặc các hàm đòi hỏi nhiều thời gian xử
lý. Các hàm ngoài là các hàm tồn tại dưới
dạng mã nguồn mà người dùng có thể tham
khảo hoặc chỉnh sửa, bổ sung khi cần thiết,
thí dụ log10, ode23, fzero,...
bằng một lệnh gán, chẳng hạn A(20,30)=0.
<i><b>Các khả năng chính của MATLAB cơ bản: </b></i>
- Thực hiện các tính tốn tốn học bao gồm:
ma trận và đại số tuyến tính, đa thức và nội
suy, phân tích số liệu và thống kê, tìm cực
trị của hàm một biến hoặc nhiều biến, tìm
nghiệm của phương trình, tính gần đúng tích
phân, giải phương trình vi phân…
- Đồ họa 2 chiều và 3 chiều.
Xây dựng giao diện người dùng.
<i><b>Chương trình </b></i>
<b>Directory của MATLAB. Khi mới khởi </b>
động, thư mục này mặc định là Work trong
chỗ cài đặt Matlab (thường là
<b>C:\MATLAB7\work). </b>
<i><b>Dòng lệnh </b></i>
- Các dòng lệnh trong MATLAB được thực
hiện tiếp nối nhau. Mỗi dịng lệnh thơng
<b>thường có thể có dấu “;” ở cuối hoặc khơng. </b>
<b>Nếu dịng lệnh khơng có dấu “;” ở cuối thì </b>
kết quả sẽ được xuất ra. Trong trường hợp
khơng muốn nhìn các kết quả trung gian mà
chỉ muốn xem kết quả cuối cùng, ta sử dụng
<b>dấu “;” cho các dòng lệnh mà ta không muốn </b>
- Nếu muốn loại bỏ một dòng lệnh khi chạy
<b>chương trình, ta có thể để dấu % ở đầu dòng </b>
<b>lệnh. Thông thường dấu % được sử dụng </b>
để ghi các chú thích (chỉ dùng cho người
đọc, máy không thực thi).
<i><b>Hàm số </b></i>
<b>- Hàm số xyz được viết trên file xyz.m, có cú </b>
pháp kiểu như:
<b>function a=xyz(b,c) % day la ham xyz </b>
<b>Trong đó b, c là các dữ liệu nhập vào, a là giá </b>
trị trả về (trong chương trình sẽ có ít nhất
<b>một lệnh gán, chẳng hạn a = b + c;). </b>
<b>- Để xem công dụng của một hàm số xyz (là </b>
hàm có sẵn trong thư viện hoặc do ta tự định
<b>nghĩa), ta vào cửa sổ làm việc và gõ help </b>
<b>xyz rồi Enter. Ta sẽ được xem các chú thích </b>
<b>trong file xyz.m. </b>
<i><b>Biến số </b></i>
- Các biến được ký hiệu bằng một ký tự hoặc
- Các biến thông thường được định nghĩa
trong 1 file được gọi là biến địa phương
<b>(local variable). MATLAB cũng cho phép sử </b>
<b>dụng một số biến toàn cục (global variable). </b>
<b>Biến toàn cục xx phải được khai báo là </b>
<b>global xx, trong tất cả các file mà xx xuất </b>
<b>hiện, có một file định nghĩa xx, chẳng hạn </b>
<b>gán xx=3. </b>
<b>- Biến i và j được mặc định là số ảo đơn vị </b>
<b>(i^2=-1). Tuy nhiên, nếu ta dùng lệnh gán i=3 </b>
<b>thì biến i sẽ mang giá trị 3. </b>
<i>MỘT SỐ MƠ HÌNH TỐN TRONG KINH TẾ </i>
<b>Mơ hình tối ưu một biến khơng ràng buộc </b>
Xét hàm số một biến y = f(x) với
- Điểm
- Điểm
Tương tự, có thể định nghĩa khái niệm cực
tiểu địa phương và cực tiểu toàn cục. Các
điểm cực tiểu hay cực đại được gọi chung là
điểm cực trị.
<b>Mơ hình tối ưu nhiều biến khơng ràng buộc </b>
Xét hàm số n biến <i>f</i> : D<i>Rn</i><i>R</i>. D được
gọi là miền xác định của hàm số.
- Điểm
- Điểm
ln có <i>f</i>
Tương tự, có thể định nghĩa khái niệm cực
tiểu địa phương và cực tiểu toàn cục. Các
Dễ thấy, mọi điểm cực đại (cực tiểu) toàn cục
cũng là điểm cực đại (cực tiểu) địa phương,
trong khi đó điều ngược lại không nhất thiết
luôn xảy ra.
<b>Mơ hình tối ưu n biến và một phương </b>
<b>trình ràng buộc </b>
Phương pháp nhân tử Lagrange
Xét bài toán <i>z</i> <i>f x</i>
Ta có hàm Lagrange <i>L</i> <i>f</i>
(
1
' ' '
... 0
<i>n</i>
<i>x</i> <i>x</i>
<i>L</i><sub></sub> <i>L</i> <i>L</i> (*)
Giả sử 0
1,..., <i>n</i>, 0
<i>x</i> <i>x</i> <i>x</i>
được gọi là điểm dừng của hàm
Lagrange.
<i><b>Điều kiện đủ </b></i>
Giả sử x0
được gọi là điểm dừng của hàm
Lagrange.
Ta tính các đạo hàm riêng cấp 2 của hàm
Lagrange tại điểm x0
Đặt
1,...,
<i>i</i> <i>n</i> <i>ij</i>
<i>i</i> <i>i</i> <i>j</i>
<i>g</i> <i>L</i>
<i>g</i> <i>x</i> <i>x</i> <i>L</i> <i>x</i>
<i>x</i> <i>x x</i>
Ta có ma trận H
1
1 11 1
1
0 ...
...
...
...
<i>n</i>
<i>n</i>
<i>n</i> <i>n</i> <i>nn</i>
<i>g</i> <i>g</i>
<i>g</i> <i>L</i> <i>L</i>
<i>H</i>
<i>g</i> <i>L</i> <i>L</i>
Gọi Hk là định thức con chính cấp k+1 của ma
trận H.
Khi đó:
+) Nếu
<i>z</i> <i>f x</i> <i>x</i> với ràng buộc <i>g x</i>
đạt giá trị cực đại tại điểm
<i>x</i> <i>x</i> .
+) Nếu <i>H<sub>k</sub></i> 0
<i>z</i><i>f x</i> <i>x</i> với ràng buộc<i>g x</i>
đạt giá trị cực tiểu tại điểm
<i>x</i> <i>x</i> .
<b>Mơ hình tối ưu n biến và m phương trình </b>
<b>ràng buộc </b>
Phương pháp nhân tử Lagrange
Xét bài toán <i>z</i> <i>f x</i>
1 1 1
2 1 2
1
,...,
<i>m</i> <i>n</i> <i>m</i>
<i>g</i> <i>x</i> <i>x</i> <i>b</i>
<i>g</i> <i>x</i> <i>x</i> <i>b</i>
<i>g</i> <i>x</i> <i>x</i> <i>b</i>
<sub></sub>
Ta có hàm Lagrange
1 1 1 ... <i>m</i> <i>m</i> <i>m</i>
<i>L</i> <i>f</i> <i>b</i> <i>g</i> <i>b</i> <i>g</i>
Trong đó,
<i><b>Điều kiện cần </b></i>
Hệ phương trình sau có nghiệm
Giả sử 0
<i>x</i> <i>x</i> <i>x</i> là nghiệm của (*).
Khi đó x0
được gọi là điểm dừng của hàm
Lagrange.
<i><b>Điều kiện đủ </b></i>
Giả sử x0 được gọi là điểm dừng của hàm
Lagrange.
Ta tính các đạo hàm riêng các đạo hàm riêng
0 0 0
1,...,
<i>k</i>
<i>ki</i> <i>n</i> <i>ij</i>
<i>i</i> <i>i</i> <i>j</i>
<i>g</i> <i>L</i>
<i>g</i> <i>x</i> <i>x</i> <i>L</i> <i>x</i>
<i>x</i> <i>x x</i>
Ta có ma trận H
11 1
1
11 1 11 1
1
0...0 ...
...
0...0 ...
... ...
...
.
<i>n</i>
<i>m</i> <i>mn</i>
<i>m</i> <i>n</i>
<i>n</i>
<i>g</i> <i>g</i>
<i>g</i> <i>g</i>
<i>g</i> <i>g</i> <i>L</i> <i>L</i>
<i>g</i>
1
...<i>g<sub>mn</sub></i> <i>L<sub>n</sub></i> ...<i>L<sub>nn</sub></i>
Gọi Hk là định thức con chính cấp k+1 của ma
trận H.
Khi đó:
+)Nếu
1 1 1
2 1 2
1
<i>n</i>
<i>n</i>
<i>m</i> <i>n</i> <i>m</i>
đạt giá trị cực đại tại điểm
<i>x</i> <i>x</i> .
+) Nếu
1 1 1
2 1 2
1
,...,
,...,
...
,...,
<i>n</i>
<i>n</i>
<i>m</i> <i>n</i> <i>m</i>
<i>g</i> <i>x</i> <i>x</i> <i>b</i>
<i>g</i> <i>x</i> <i>x</i> <i>b</i>
<i>g</i> <i>x</i> <i>x</i> <i>b</i>
<sub></sub>
đạt giá trị cực tiểu tại điểm
<b>Mơ hình tối ưu có điều kiện với ràng buộc </b>
<b>là bất phương trình </b>
Xét bài tốn: Chọn (x, y) để hàm số
<i>z</i> <i>f x y</i> đạt cực đại (cực tiểu) với ràng
buộc <i>g x y</i>
Để giải bài toán này, trước hết ta thay ràng
buộc đã cho bởi ràng buộc
<i>x</i> <i>y</i>
Khi đó:
<i><b>Đối với bài tốn cực đại hóa hàm </b></i>
<i>z</i> <i>f x y</i> <i><b> với ràng buộc </b>g x y</i>
+) Nếu 0
,
<i>x y</i> .
+) Nếu 0
0
<i><b>Đối với bài tốn cực đại hóa hàm </b></i>
<i>z</i> <i>f x y</i> <i><b> với ràng buộc </b></i>
ràng buộc và phương án chọn tối ưu là
,
<i>x y</i> .
+) Nếu
<i><b>Đối với bài tốn cực tiểu hóa hàm </b></i>
<i>z</i> <i>f x y</i> <i><b> với ràng buộc </b>g x y</i>
+) Nếu <sub></sub>0<sub></sub><sub>0</sub><sub> thì điều kiện áp đặt thực sự là </sub>
ràng buộc và phương án chọn tối ưu là
,
<i>x</i> <i>y</i> .
+) Nếu
phải là ràng buộc thực. Trong trường hợp này
ta bỏ ràng buộc và quay trở về giải bài toán
cực trị tự do.
<i><b>Đối với bài toán cực tiểu hóa hàm </b></i>
<i>z</i> <i>f x y</i> <i><b> với ràng buộc </b></i>
ràng buộc và phương án chọn tối ưu là
+) Nếu
ỨNG DỤNG PHẦN MỀM MATLAB ĐỂ
GIẢI MỘT SỐ MƠ HÌNH TOÁN TRONG
KINH TẾ
Trong giới hạn bài báo này, chúng tơi sẽ xét mơ
hình bài tốn sản xuất, kinh doanh hàng hóa.
<i><b>Bài tốn: Xét mơ hình cân bằng thị trường </b></i>
độc quyền với hai mặt hàng cho bởi các
phương trình sau: Q1= 40 – 2P1 + P2; Q2= 15
+ P1 – P2. Trong đó, Q1và Q2 là các mức cầu
Cho biết hàm chi phí là C = Q1
2
+ Q1Q2+ Q2
2
và hàm doanh thu là
R = 55Q1 + 70Q2 – 2Q1Q2 – Q1
2 <sub>– 2Q</sub>
2
2
.
Hãy tìm các mức cân bằng về cầu và về giá cả
Q1, Q2, P1, P2 để lợi nhuận đạt giá trị lớn
nhất. Biết hàm lợi nhuận là
2 2
1 2 1 2 1 2
55 70 3 2 3
<i>R</i> <i>C</i> <i>Q</i> <i>Q</i> <i>Q Q</i> <i>Q</i> <i>Q</i>
<b>Chương trình viết trên Matlab giải bài </b>
<b>toán tối ưu trên </b>
function g=ham2bien(x1,x2)
g=55*x1+70*x2-3*x1*x2-2*x1*x1-3*x2*x2;
popsize=50;
generation=1000;
bits=20;
vlb=0;
vub=8;
Pc=1;
Pm=0.01;
newgen=genbin(bits,popsize);
fittol=0;
for i=1:popsize fit(i)=0;end
for n=1:generation
for i=1:popsize
x1=decode(newgen(i,1:bits/2),vlb,vub,bits/2);
x2=decode(newgen(i,bits/2+1:bits),vlb,vub,bi
ts/2);
fit(i)=ham2bien(x1,x2);
fittol=fittol+fit(i);
end
norm_fit = fit/sum(fit);
selected = rand(size(fit));
sum_fit = 0;
for i=1:length(fit),
sum_fit = sum_fit + norm_fit(i);
index = find(selected<sum_fit);
selected(index) = i*ones(size(index));
end
newgen = newgen(selected,:);
[junk,mating] = sort(rand(size(newgen,1),1));
newgen = newgen(mating,:);
lchrom = size(newgen,2);
sites =
ceil(rand(size(newgen,1)/2,1)*(lchrom-1));
sites = sites.*(rand(size(sites))<Pc);
for i = 1:length(sites);
newgen([2*i-1 2*i],:) = [newgen([2*i-1
2*i],1:sites(i)) ...
newgen([2*i 2*i-1],sites(i)+1:lchrom)];
end
[pop bitlength]=size(newgen);
for i=1:popsize
for j=1:bits
if rand<=Pm
if newgen(i,j)==1
newgen(i,j)=0;
else
newgen(i,j)=1;
end
end
end
end
end
max=0;
%tim gen co do thich nghi nhat
a=newgen;
for i=1:popsize
x1=decode(newgen(i,1:bits/2),vlb,vub,bits/2);
x2=decode(newgen(i,bits/2+1:bits),vlb,vub,bi
ts/2);
fit(i)=ham2bien(x1,x2);
if fit(i)>max max=fit(i);chiso=i;end
end
giatrilon=max;
b=chiso;
x1=decode(a(chiso,1:bits/2),vlb,vub,bits/2);
fprintf('Gia tri lon nhat dat tai x1= %d\n', x1);
x2=decode(a(chiso,bits/2+1:bits),vlb,vub,bits/
2);
fprintf('Gia tri lon nhat dat tai x2= %d\n', x2);
r=ham2bien(x1,x2);
fprintf('Gia tri lon nhat dat tai %d\n', r);
<b>Kết quả chạy chương trình trên Matlab </b>
Gia tri lon nhat dat tai x1= 8
Gia tri lon nhat dat tai x2= 7.593353e+000
Gia tri lon nhat dat tai 4.883172e+002
KẾT LUẬN
rất nhiều vấn đề để nghiên cứu, ví dụ như ứng
dụng Matlab để giải quyết những mơ hình
tốn trong kinh tế liên quan đến kiến thức về
TÀI LIỆU THAM KHẢO
<i><b>1. Michael W. Klein, Mathematical methods for </b></i>
<i>economics, Addison– Wesley Higher Education </i>
Group, 2002.
<i><b>2. Hồng Đình Tuấn, Lí thuyết mơ hình tốn kinh </b></i>
<i>tế (dành cho sinh viên ngành tốn kinh tế và tốn </i>
<i>tài chính), Nxb. Khoa học và Kĩ thuật, 2003. </i>
<i><b>3. Nguyễn Hải Thanh, Toán ứng dụng, Nxb. Đại </b></i>
học Sư phạm Hà Nội, 2005.
<i><b>4. Nguyễn Phùng Quang, Matlab & Simulink dành </b></i>
<i><b>cho kỹ sư điều khiển tự động, Nxb. Khoa học và </b></i>
Kĩ thuật, 2006.
<i><b>5. Tô Cẩm Tú, Một số phương pháp tối ưu hóa </b></i>
<i>trong kinh tế, Nxb. Khoa học và Kĩ thuật, 1997. </i>
SUMMARY
<b>MATLAB SORFWARE APPLICATIONS TO DEAL </b>
<b>WITH SOME MATHERMATICAL MODELS IN ECONOMICS </b>
<b> </b>
<b> Nguyen Quynh Hoa*, Pham Thi Linh, Tran Thi Mai </b>
In current situation, most of the calculations in manufacturing and trading goods and services are
optimal calculations. There have been many waysfor dealing these kinds of optimal calculations
but the applications of algorithm calculating development can be considered the promise for
further prospects. This article presents a new way for dealing with multi-purpose optimal
calculations that is using GA-Genetic Algorithm
<i><b>Key words: maximizes, Genetic Algorithm, encoded real number... </b></i>