Bài giảng điện tử Tin học ứng dụng trong Kỹ thuật địa chất & dầu khí: Matlab - Trường Đại Học Bách Khoa TP.HCM
Bài giảng điện tử Tin học ứng dụng trong Kỹ thuật địa chất & dầu khí "Matlab" trình bày về các nội dung: Tổng quan về matlab; các phép toán, biểu thức và hàm cơ bản; lập trình trong Matlab, đồ họa cơ bản, cấu trúc chương trình, bài tập vận dụng. Mời các bạn cùng tham khảo nội dung chi tiết của bài giảng.
imnie1
Share
/
192
BÀI GIẢNG ĐIỆN TỬ
TIN HỌC ỨNG DỤNG
TRONG KỸ THUẬT ĐỊA CHẤT & DẦU KHÍ
MATLAB
Tác giả : ThS. Đỗ Quang Khánh
ThS. Bùi Tử An
Bộ môn : Khoan & Khai thác dầu khí
Copyright 2007
Tổng quan về MATLAB
Các phép toán, biểu thức và hàm cơ bản
Lập trình trong MATLAB
Đồ họa cơ bản
Cấu trúc chƣơng trình
BÀI TẬP
Copyright 2007
MATLAB CĂN BẢN
2
MATLAB
Symbolic trong MATLAB
Ma trận và đại số tuyến tính
Hàm số và phƣơng trình
Đồ họa nâng cao
Vấn đề tạo giao diện
BÀI TẬP
Copyright 2007
CÁC VẤN ĐỀ NÂNG CAO TRONG MATLAB
3
MATLAB
MATLAB (Matrix Laboratory) là một ngôn ngữ thông dịch,
cho phép thực hiện nhanh chóng các giải thuật, hiển thị dữ
liệu (dƣới dạng đồ thị 2D, 3D, hình ảnh và thậm chí chuỗi
hình ảnh) và thực hiện các giao tiếp đồ họa dễ dàng.
Ƣu điểm:
Cung cấp một công cụ tính toán và lập trình bậc cao dễ
sử dụng, hiệu quả và thân thiện. SIMULINK giúp ngƣời
sử dụng thực hiện các bài toán mô hình hóa, mô phỏng
trên máy tính.
Có tính mở, các hàm và các toolbox không ngừng đƣợc
bổ sung theo sự phát triển của khoa học bởi chính The
Mathworks Ins và cả ngƣời sử dụng trên toàn thế giới
Có công cụ trợ giúp phong phú trực tuyến, trên mạng
hay các tài liệu dạng pdf.
Copyright 2007
TỔNG QUAN VỀ MATLAB
4
MATLAB
Môi trƣờng phát triển: gồm các công cụ và tiện
nghi giúp viết chƣơng trình, sử dụng các hàm
Matlab và các file
Thƣ viện các hàm toán học của Matlab: Các
Sức mạnh của MATLAB
Ngôn ngữ Matlab: Các lệnh cao cấp xử lý ma
hàm sơ cấp: tổng, sin, tính số phức… các
hàm phức tạp: Bessel, nghịch đảo ma trận,
tính trị riêng, biến đổi Fourier nhanh, wavelet…
Xử lý đồ họa: Hiển thị dữ liệu dạng đồ họa
trận, lệnh rẻ nhánh, vòng lặp, xuất nhập, cấu
trúc dữ liệu, lập trình hƣớng đối tƣợng…
Copyright 2007
2D, 3D, hoạt hình, xử lý ảnh và cả GUI
5
MATLAB
Thƣ viện API của Matlab: Cho phép liên kết các
Sức mạnh của MATLAB (tt)
Các hộp công cụ (Toolbox): Tập hợp các hàm
Matlab đƣợc viết sẵn để giải quyết các vấn đề
thuộc các chuyên ngành khác nhau. Các toolbox
khiến cho Matlab có thể ứng dụng vào nhiều lĩnh
vực kỹ thuật khác nhau: Điện tử, Điều khiển tự
động, Kỹ thuật điện, Viễn thông, Cơ khí, Động
chƣơng trình C và Fortran… Các ngôn ngữ khác
có thể gọi các hàm dll đƣợc tạo bởi Matlab.
Copyright 2007
lực, Dầu khí, Địa chất, hóa học,…
6
MATLAB
Các khái niệm cơ bản
Cửa sổ lệnh
Khi chạy chƣơng trình
MATLAB, thì cửa sổ
này sẽ xuất hiện
Cửa sổ không
gian làm việc
Cửa sổ lịch sử
lệnh
Copyright 2007
7
MATLAB
Hoạt động trong MATLAB
Command window (cửa sổ lệnh)
− Dấu “>>” dùng để chạy lệnh, viết chƣơng trình, Chạy
chƣơng trình.
Command history window (cửa sổ lịch sử lệnh)
− Liệt kê tất cả các lệnh đã sử dụng trƣớc đó kèm theo
thời gian làm việc.
Current Directory (cửa sổ thƣ mục hiện tại)
− Cho biết thƣ mục hiện tại làm việc. Mặc định khi cài
MATLAB701\work (Version 7.01)
Workspace (cửa sổ không gian làm việc)
− Cho biết các biến đƣợc sử dụng trong chƣơng trình.
Copyright 2007
Các khái niệm cơ bản (tt)
8
MATLAB
Một số lệnh hệ thống
Các khái niệm cơ bản
Lệnh
Ý nghĩa
clc
xóa cửa sổ lệnh
clf
xóa cửa sổ đồ họa
help
xem phần trợ giúp một số lệnh
quit, exit
Thoát Matlab
Ctrl+c
Dừng chƣơng trình
pause
Ngừng tạm thời chƣơng trình
edit
Gọi chƣơng trình soạn thảo type đọc
nội dung file.m
input
Nhập dữ liệu từ bàn phím
demo
Gọi chƣơng trình demo
echo on/off
Tắt mở hiển thị các lệnh trong M-files
Copyright 2007
9
MATLAB
CÁC TOÁN TỬ VÀ KÍ TỰ ĐẶC BIỆT
• plus (+)
cộng
• uplus (+)
Cộng unary
• minus ( - )
Trừ
• uminus (-)
Trừ unary
• mtimes(. *)
Nhân ma trận
•
times (*)
Nhân mảng
• mpower (^)
lũy thừa ma trận
• power (. ^ )
lũy thừa mảng
• mldivide (\ )
Chia trái ma trận
• Mrdivide( /)
Chia phải ma trận
•
ldivide (.\ )
Chia trái mảng
• mdivide (./ )
Chia phải ma trận
•
kron
Sản phẩm cơ năng
Copyright 2007
Các khái niệm cơ bản (tt)
10
MATLAB
Toán tử quan hệ
• eq (== )
Các khái niệm cơ bản (tt)
• ne ( ~= )
Bằng
•
Không bằng
• gt (>)
lt (< ) Nhỏ hơn
•
Lớn hơn
• ge (>= )
le (<= ) Nhỏ hơn hoặc bằng
Copyright 2007
Lớn hơn hoặc bằng
11
MATLAB
Toán tử logic
• and (&)
Các khái niệm cơ bản (tt)
• or ( | )
Logic và
• not ( ~ )
Logic hoặc
• xor
Logic phủ định
• any
Logic hoặc phủ định
True nếu mọi phần tử của vector
• all
True nếu tất cả các phần tử khác
không
Copyright 2007
khác không.
12
MATLAB
Các khái niệm cơ bản (tt)
Các kí tự đặc biệt
: Dấu hai chấm
()
Dấu ngoặc đơn
[ ]
Dấu ngoặc vuông
{ } Dấu ngoặc nhọn
. Dấu thập phân
.
Truy nhập cấu cấu trúc trƣờng
..
Thƣ mục mẹ
... Dấu tiếp tục
, Dấu phẩy
;
Dấu chấm phẩy
Copyright 2007
% Dấu chú thích
13
MATLAB
Các khái niệm cơ bản (tt)
%
Dấu chú thích
!
Liên quan câu lệnh của hệ điều
hành
= Gán
transpose(.‟)
Chuyển vị
ctranspose(„ )
Chuyển vị số phức liên hợp
„ Nhảy
horzcat [, ] Ghép chuỗi theo chiều ngang
subsasgn
Gán subscripted
bsref
Tham chiếu subscripted
vertcat[; ] Ghép chuỗi theo chiều đứng
Copyright 2007
subsindex Chỉ số subscripted
14
MATLAB
BIẾN
Quy định về tên biến:
− Giống các ngôn ngữ khác, Matlab có những quy định về tên
biến phải là một từ, không chứa dấu cách, và phải tuân thủ
theo các quy tắc sau:
Có thể chứa nhiều nhất 31 kí tự, còn các kí tự sau kí tự
31 sẽ bị lờ đi.
Ví du: Thoi_gian_dong_cua_vuaximang100, …
Tên biến bắt đầu phải là chữ cái, tiếp theo có thể là chữ
số, dấu gạch dƣới.
Thí dụ: Do_bien_thien, Heso, heso, Donhot,
donhot…
Kí tự chấm “.” không đƣợc dùng vì nó có ý nghĩa đặc
biệt
Copyright 2007
Các khái niệm cơ bản (tt)
15
MATLAB
Một số biến đƣợc đĩnh nghĩa trƣớc:
− 1/0
Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this
warning.)
ans = Inf
− 0/0
Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this
warning.)
ans = NaN
− Eps
ans = 2.2204e-016
Copyright 2007
BIẾN (tt)
16
MATLAB
Một số biến đƣợc định nghĩa trƣớc (tt)
Ý
Copyright 2007
17
MATLAB
Độ lớn của biến
− Xác định độ lớn hay chiều dài của biến vector cũng
nhƣ ma trận thông qua một số hàm sau đây:
Size(A)
Trả về 1 vector chứa kích thƣớc A,
gồm số hàng và số cột của A.
Length(A) Trả về chiều dài của A, giá trị lớn nhất
của hàng và cột.
Ngoài ra còn có các hàm: Size(A,p); [m,n] =
size(A)
Copyright 2007
18
MATLAB
Thí dụ:
>> A = [1 2 3; 4 5 6]
A = 1 2 3
4 5 6
>> [m,n] = size(A)
m = 2
n = 3
>> length(A)
ans = 3
>>size(A,1)
ans = 2
Copyright 2007
BIẾN (tt)
19
MATLAB
BIẾN MÔI TRƢỜNG (Environmental Variable)
Thí dụ:
BIẾN (tt)
>> a = 1
a =
1
>> b = „MATLAB‟
b =
Matlab
Ta nói, a, b là các biến môi trường.
Copyright 2007
20
MATLAB
Khi làm việc trong MATLAB ở trong cửa sổ lệnh cũng
nhƣ các giá trị đã đƣợc tạo ra. Những lệnh và biến
này đƣợc thƣờng trú trong môi trƣờng làm việc của
MATLAB (Workspace) và có thể đƣợc nạp trở lại khi
muốn.
Đời sống của những biến chấm dứt khi ta thoát khỏi
chƣơng trình MATLAB.
Nhƣ Thí dụ trên, a đƣợc hiểu la một biến số, b là một
chuỗi.
Khi định nghĩa biến môi trƣờng, nếu gán giá trị cho nó
thì kiểu biến sẽ phụ thuộc vào kiểu giá trị đã gán cho
nó.
Copyright 2007
BIẾN (tt)
21
MATLAB
BIẾN CỤC BỘ (Local Variable)
Biến này chỉ tồn tại trong một hàm MATLAB và
BIẾN (tt)
không hiện hữu trong cửa sổ lệnh.
Thí dụ:
n = length(x);
mean = sum(x)/n;
stdev = sqrt(mean);
Trong trƣờng hợp này n là biến cục bộ và chỉ
function[mean,stdev] = stat(x);
Copyright 2007
đƣợc truy xuất trong một hàm.
22
MATLAB
BIẾN TOÀN CỤC (Global Variable)
BIẾN (tt)
Đƣợc định nghĩa bằng từ khóa global. Việc
xóa biến toàn cục dùng lệnh clear global
Isglobal(ten_bien): trả về 1 (ten_bien là biến
toàn cục), 0 (ten_bien không phải là biến toàn
cục)
Thí dụ:
Global x y z
Copyright 2007
x, y, z là các biến toàn cục.
23
MATLAB
BIẾN (tt)
Thƣờng mỗi hàm trong MATLAB đƣợc viết dƣới
dạng M File, có riêng những biến cục bộ cho
từng hàm và đƣợc lƣu trữ trong một vùng biến
truy xuất biến này.
Nên dùng KÍ TỰ HOA để đặt tên biến toàn cục
để tránh trùng tên với các biến trong Workspace.
Copyright 2007
đặc biệt, việc gọi hàm trong một hàm đều có thể
24
MATLAB
BIẾN SYMBOLIC
Symbolic processing là thuật ngữ dùng mô tả cách thức
máy tính thực hiện tính các biểu thức toán học (Thí dụ,
rút gọn một đa thức, đặt thừa số chung, tính giá trị một
biểu thức đại số, giải phƣơng trình đại số, giải phƣơng
trình vi phân, …)
Khởi tạo biến symbolic:
x = sym(„x‟): Tạo biến symbolic có tên là x.
x = sym(„x‟,‟real‟): Tạo biến symbolic có tên x và là biến
không bị ràng buộc phải là biến thực.
k = sym(„p‟,‟positive‟): Tạo biến symbolic k là biến thực,
dƣơng.
Khởi tạo hằng symbolic: Nhằm tránh mắc sai lầm khi làm
tròn.
Copyright 2007
BIẾN (tt)
25
MATLAB
Khởi tạo hằng symbolic
Thí dụ:
>> hai_phan_ba = sym(„2/3‟);
>> pi = sym(„pi‟);
>> hai_phan_ba =
hai_phan_ba =
2/3 % Không hiển thị giá trị xấp xỉ
>> Pi
Pi =
pi % không hiển thị giá trị xấp xỉ.
- Liệt kê các biên symbolic hiện hành, sử dụng hàm
Copyright 2007
BIẾN (tt)
26
MATLAB
13
BIẾN (tt) - Symbolic
Liệt kê các biến Symbolic
>> syms x y;
>> p = 2*x + 3*y;
% Tạo biến symbolic p thông qua biểu thức symbolic
>> u = sqrt(x^2 + y^2);
% Tạo biến symbolic u thông qua biêu thức symbolic
>> d = subs(u, {x,y},{2,3})
% Tính giá trị biểu thức u khi x = 2, y = 3.
d =
>> v = subs(u,{x,y},{3,4})
% Tính giá trị biểu thức khi x = 3; y = 4;
v =
5
>> syms
„r‟
„s‟
„x‟
„y‟
Copyright 2007
27
MATLAB
Khởi tạo ma trận symbolic bằng biến symbolic.
Thí dụ:
>> n = 3;
>> syms x;
>> A = x.^ [[0:n]‟.* [0:n]];
BIẾN (tt) - Symbolic
% Dùng phép biến đổi lũy thừa mảng
A = [1,
1,
1]
1,
[1,
x^2,
x^3]
x,
[1,
x^2,
x^4,
x^6]
[1,
x^3,
x^6,
x^9]
Copyright 2007
28
MATLAB
Tìm biến symbolic trong một hàm
Thí dụ:
>> syms b x y z;
>> findsym(5*b + 2*z)
% Hàm này tìm biến symbolic trong một hàm
ans =
b, z
Copyright 2007
BIẾN (tt) - Symbolic
29
MATLAB
LƢU và NẠP Biến
BIẾN (tt)
− Dùng lệnh: clear all
− Thoát chƣơng trình MATLAB
Biến sẽ bị xóa sạch khi:
− Để sử dụng lại cho phiên làm việc sau; dùng
tất cả các biến do
lệnh (lƣu
Workspace đang quản lý(tên, kích thƣớc, giá
trị) vào một tập tin nhị phân (binary file) có
tên matlab.mat
Copyright 2007
Lưu biến:
30
MATLAB
Nạp biến:
− Dùng lệnh Nạp tất cả các biến đã lƣu vào
Workspace để dùng lại
Nếu không muốn dùng
tập
tin mặc định
matlab.mat, ta sử dụng lệnh để
lƣu tất cả biến vào tập tin có tên filename.mat và
muốn nạp lại biến khi dùng lệnh
Lƣu một vài biến trong cửa sổ workspace
− Lệnh
Nói chung cách đơn giản nhất là: Từ cửa sổ Menu
File ở cửa sổ lệnh chọn
Đặt tên tập tin (có đuôi mở rộng là *.mat)
Copyright 2007
BIẾN (tt)
31
MATLAB
Tất cả các văn bản đằng sau kí hiệu phần trăm
Câu chú thích
(%) đều là câu giải thích.
Thí dụ:
> heso_a = 10 % Hệ số a ptb2
10
>> heso_b = 20 % Hệ số b ptb2
heso_b =
20
Copyright 2007
heso_a =
32
MATLAB
Một trong những điểm mạnh nhất của MATLAB là làm việc
1 hoặc vecto hàng đơn vị nếu bất kỳ phần tử nào
của vecto hoặc ma trận x khác 0.
là 1 hoặc vecto hàng đơn vị nếu tất cả các phần tử
nào của vecto hoặc ma trận x khác 0.
Là một tại những vị trí NaN (Not a Number, Thí dụ
0/0) trong x
Là 1 tại những vị trí Inf (Infinitive, 1/0) trong x.
Là 1 tại những vị trí có giá trị hữu hạn trong x.
Là 1 nếu x là một string (chuỗi)
Là 1 nếu x là một biến sym
Trị truyệt đối hoặc biên độ số phức
Hàm cosin ngƣợc
Hyperbolic cosin ngược
Làm tròn về phía trên
Hàm số tang ngược
Hàm số sin ngƣợc
Hyperbol cosin
Hàm mũ ex
Xấp xỉ không
Làm tròn về phía zero
Hàm logarit tự nhiên
Hàm logarit thập phân
Làm tròn về số nguyên gần nhất
Hàm dấu, Thí dụ: sign(1.2) = 1,sign(-23.4) = -1, sign(0)
= 0
Hàm sin
Hàm Hyperbol sin
Căn khai căn bậc hai
sqrt(x)
gdc(x,y)
lcm(x,y)
x^y
Bội số chung lớn nhất của hai số nguyên x và y.
Bội số chung nhỏ nhất của hai số nguyên x và y.
Hàm mũ
Copyright 2007
36
MATLAB
Một số hàm toán cơ bản
Tên hàm
Mô tả, kết quả trả về
rem(x,y)
Số dư phép chia x/y
sum(v)
Tổng các phần tử vector
prod(v)
Tích các phần tử vector
min(v)
Phần tử vector bé nhất
max(v)
Phần tử vector lớn nhất
mean(v)
Giá trị trung bình cộng
sign(x)
Hàm dấu (= 1 nếu x>0;
= -1 nếu x<0;
= 0 nếu x=0)
Copyright 2007
37
MATLAB
Thí dụ:
>> v=[1 2 3];
>> x=4;
>> min_v=min(x)
>> sqrt(x)
min_v = 1
ans = 2
>> mean(x)
>> exp(x)
ans = 2
ans = 54.5982
>> sum(x)
>> sign(x)
ans = 6
ans = 1
>> rem(x,3)
ans = 1
Copyright 2007
Một số hàm cơ bản (tt)
38
MATLAB
Đa thức đƣợc biểu diễn bằng vecto bậc một có bậc giảm
dần.
Cho hai đa thức f, g lần lƣợt đƣợc biểu diễn bởi a và b. Ta
sẽ có các hàm sau:
Conv(a,b) Nhân hai đa thức
Deconv(a,b) Chia hai đa thức
a + b
Tổng hai đa thức
a – b
Hiệu hai đa thức
roots(a)
nghiệm của đa thức f đƣợc biểu diễn
bởi vecto a.
poly(r)
Trả về các hệ số của đa thức có
nghiệm là vecto r.
Lưu ý: Khi cộng và trừ các đa thức phải có cùng kích thước.
Giải: Ta biểu diễn đa thức x4 + 10x3 + 0x - 1 bằng một vectơ
hàng với các phần tử là các hệ số của đa thức sắp xếp theo
thứ tự bậc giảm dần.
>> a = [1 10 -2 0 -1];
Nghiệm của đa thức có thể đƣợc tính bằng hàm: roots(a)
>> R = roots(a)
R =
-10.1971
0.5291
-0.1660 + 0.3972i
-0.1660-0.3972i
Copyright 2007
Hàm ĐA THỨC (tt)
40
MATLAB
Từ các nghiệm của đa thức có thể xây dựng lại đa
Hàm ĐA THỨC (tt)
thức bằng hàm: poly(a);
Thí dụ:
>>a = poly(R)
>>a = [1 2 3 4]; % x3+2x2+3x+4
>>b = [5 6 7 8]; % 5x3+6x2+7x+8
>>Tich = conv(a,b)
a = 1.0000 10.0000 -2.0000 0.0000 -1.0000
Tich = 5 16 34 60 61 52 32
Copyright 2007
41
MATLAB
Hàm ĐA THỨC (tt)
>>Thuong = deconv(a,b)
Thuong = 0.2000
>>Tong = a + b
Tong = 6 8 10 12
>>Hieu = a – b
Hieu = -4 -4 -4 -4
Copyright 2007
42
MATLAB
Vòng lặp FOR:
CÁC LỆNH ĐIỀU KIỆN VÀ LẶP
Cấu trúc:
for i = n:m %n = phần tử đầu, m = phần tử cuối
end
Copyright 2007
Thí dụ vòng lặp FOR: Tính giai thừa của 100?
43
MATLAB
Vòng lặp WHILE: lặp vòng khi biểu thức logic là true.
Cấu trúc:
while
CÁC LỆNH ĐIỀU KIỆN VÀ LẶP
end
Thí dụ 1:
n=1;
while prod(1:n) < 1e100
% prod tính tích các phần
n = n+1;% tử cột của vectơ hay
End % ma trận
Copyright 2007
44
MATLAB
Lệnh if else elseif
if
Cấu trúc:
if
elseif
CÁC LỆNH ĐIỀU KIỆN VÀ LẶP
if
else
…
end
end
Nếu là true thì đƣợc
end
thi hành, nếu không thì thực hiện các lệnh sau
Copyright 2007
end.
45
MATLAB
Thí dụ 1:
CÁC LỆNH ĐIỀU KIỆN VÀ LẶP
if rem(a,2)==0
disp('la mot so chan')
b=a/2;
End
if n<0
disp('la so duong')
elseif n==0
disp('la so 0')
else
disp('la so am')
end
Copyright 2007
46
MATLAB
Thí dụ 2: Hàm ngay_trong_thang.m
CÁC LỆNH ĐIỀU KIỆN VÀ LẶP
function y = ngay_trong_thang(th,nam)
if (th==4)|(th==6)|(th==9)|(th==11)
y = 30
elseif (th==2)
if (rem(nam,4)~=0)
y=28
else
y=29
end
else
y=31
end
Copyright 2007
47
MATLAB
Lệnh switch case: chọn nhiều trƣờng hợp
Cấu trúc:
CÁC LỆNH ĐIỀU KIỆN VÀ LẶP
switch
case
case
…
otherwise
hợp mọi trƣờng hợp>
end
Copyright 2007
48
MATLAB
Thí dụ:
CÁC LỆNH ĐIỀU KIỆN VÀ LẶP
switch input_num
case -1
disp(„negative one‟);
case 0
disp(„zero‟);
case 1
disp(„positive one‟);
otherwise
disp(„other value‟);
end
Copyright 2007
49
MATLAB
Tổng quát về đồ họa trong MATLAB
ĐỒ HỌA CĂN BẢN
MATLAB cho phép ngƣời lập trình sử dụng “bộ
nhớ ảo”, khi đó có thể ghi các biến làm việc
thành tập tin *.mat trên đĩa và có thể nạp bộ
nhớ khi cần thiết. Nhờ vậy, MATLAB có thể giải
đƣợc các bài toán lớn và phức tạp.
MATLAB có các hàm đồ họa để vẽ các đặc
tuyến bất kỳ trên mặt phẳng 2D, 3D, cho phép
tạo ra đối tƣợng đồ họa điều khiển đƣợc.
Copyright 2007
Ngoài ra, MATLAB còn phép quản lý tập tin dữ
liệu trong chính môi trƣờng MATLAB mà không
cần đến môi trƣờng windows.
50
MATLAB
Màu sắc và kiểu đƣờng vẽ
ĐỒ HỌA CĂN BẢN (tt)
Ký hiệu
Màu
Ký hiệu
Kiểu nét
y
Yellow
.
Point
m
Magenta
o
Circle
c
Cyan
x
X-mark
r
Red
+
Plus
g
Green
*
Star
b
Blue
-
Solid line
w
White
:
Dotted line
-.
Dash-dot line
k
Black
--
Dased line
Copyright 2007
51
MATLAB
ĐỒ HỌA CĂN BẢN (tt)
Các kiểu data marker
Ký hiệu trong plot
Dấu chấm (dot .)
.
Dấu sao (asterisk *)
*
Dấu gạch chéo (cross x)
x
Vòng tròn (circle o)
o (chữ o thường)
Dấu cộng (plus sign + )
+
Hình vuông (square )
s
Diamond ( )
d
Ngôi sao ()
p
Copyright 2007
52
MATLAB
Đồ họa không gian 2 chiều trong MATLAB
Lệnh plot: Đồ thị tuyến tính X-Y, vẽ trong mặt
ĐỒ HỌA CĂN BẢN (tt)
Lệnh fplot: đƣợc dùng để vẽ hàm số một cách
“thông minh”, nó tự động phân tích hàm phải vẽ
và chọn số điểm thích hợp cần phải thể hiện để
phản ánh các đặc điểm của hàm.
>>legend(„y = sin(x)‟,‟z=cos(x)‟) % chú thích trên
Copyright 2007
đồ thị
56
MATLAB
>>legend(„y = sin(x)‟,‟z=cos(x)‟)
Copyright 2007
ĐỒ HỌA CĂN BẢN – Plot() (tt)
57
MATLAB
Để vẽ nhiều hàm trên cùng một đồ thị ta có thể
ĐỒ HỌA CĂN BẢN (tt)
dùng lệnh “hold on” và “hold off”
>> t=0:pi/20:2*pi;
>> plot(t,sin(t),'-r*')
>> hold on
>> plot(sin(t-pi/2),'mo')
>> plot(sin(t-pi),':bs')
>> hold off
Copyright 2007
58
MATLAB
Lệnh plot vẽ trong SỐ PHỨC
ĐỒ HỌA CĂN BẢN (tt)
Copyright 2007
Nếu chỉ cố một đối số, hàm plot(y) sẽ vẽ các
giá trị của vector y theo chỉ số 1,2,3, … Nếu y là
số thực, hàm plot(y) trong trƣờng hợp này sẽ
vẽ phần ảo theo phần thực tƣơng ứng, nghĩa là
tƣơng đƣơng với plot(real(y),imag(y))
59
MATLAB
Thí dụ:
>> x = .1+.9i;
>> u = [0:0.01:10];
>> plot(x.^u),xlabel('So thuc'),ylabel('Phan ao')
>> title('Do thi voi doi so phuc tap trong ham SO PHUC')
Copyright 2007
ĐỒ HỌA CĂN BẢN (tt)
60
MATLAB
Thí dụ lệnh fplot trong số phức:
>> f='cos(tan(x))-tan(sin(x))';
>> fplot(f,[1 2])
Copyright 2007
ĐỒ HỌA CĂN BẢN (tt)
61
MATLAB
Các lệnh vẽ trong các tọa độ đặc biệt
ĐỒ HỌA CĂN BẢN (tt)
Polar(t,r): vẽ đồ thị trong tọa độ cực
Semilogx(x,y): Vẽ hàm y theo x với trục y vẽ theo thang log
Semilogy(x,y): Vẽ hàm y theo x với trục x vẽ theo thang log
Loglog(x,y) Vẽ hàm y theo x với thang log cho cả 2 trục tọa
độ
Plotyy(x,y,’function’): Vẽ đồ thị với 2 trục y theo kiểu vẽ
được chọn trong function. Trong đó function nhận các giá
trị plot, semilogy, semilogx…
Plot3(x,y,z): vẽ đường trong không gian 3 chiều.
Subplot(m,n,p): Chia cửa sổ figure ra nhiều ô, m ô theo
chiều đứng, n ô theo chiều ngang, vẽ đồ thị trong ô thứ p.
Copyright 2007
62
MATLAB
Thí dụ:
Lệnh polar(t,r): Vẽ đồ thị góc t (radian) trong tọa độ cực theo
bán kính r.
Lệnh polar(t,r,‟linestype‟): Vẽ góc t với đƣờng vẽ và nét xác
định „linestype‟.
ĐỒ HỌA CĂN BẢN (tt)
>>t = 0:.1:2*pi;
>>polar(t,sin(2*t))
>>polar(t,sin(2*t),'m-')
Copyright 2007
63
MATLAB
Thí dụ, vẽ đường xoắn ốc Archimeder r = 2Ѳ với Ѳ thuộc [0,
ĐỒ HỌA CĂN BẢN (tt)
4pi]
>> r = 2*t;
>> polar(t,r),title('Duong xoan oc Archimede r = 2\t');
Copyright 2007
64
MATLAB
Thí dụ lệnh loglog(x,y)
>> x = logspace(-1,2);
>> loglog(x,exp(x))
Copyright 2007
ĐỒ HỌA CĂN BẢN (tt)
65
MATLAB
Thí dụ lệnh semilogx(x,y)
>> x = logspace(-2,3);
>> y = x.^12 + 10;
>> semilogx(x,y) %tương tự cho lệnh semilogy()
Copyright 2007
ĐỒ HỌA CĂN BẢN (tt)
66
MATLAB
ĐỒ HỌA CĂN BẢN (tt)
Thí dụ :
>> t=0:pi/20:6*pi;
>> x=sin(t);
>> y=sin(t-pi/2);
>> z=t;
>> subplot(121)
>> plotyy(t,x,t,y,'plot')
>> grid on
>> subplot(122)
>> plot3(x,y,z)
>> grid on
Copyright 2007
67
MATLAB
Các lệnh vẽ liên quan đến SỐ PHỨC
ĐỒ HỌA CĂN BẢN (tt)
quiver(x,y): vẽ các vector xuất phát từ các vị trí khác
nhau.
fearther(x,y): Vẽ các vector xuất phát từ trục x.
compass(x,y): Vẽ các vector từ một điểm gốc trong
hệ tọa độ cực.
rose(x)
Copyright 2007
68
MATLAB
Giả sử ta có một trƣờng vector nhƣ sau trong không gian R2:
P(x,y) =
, Q(x,y) =
, thử vẽ hình ảnh của trƣờng
trong phạm vi x thuộc [1,5] và y thuộc [1,5].
Trƣớc hết ta viết một sript file (lƣu file này với tên Quiver.m)
nhƣ sau:
Copyright 2007
Thí dụ-Lệnh quiver
69
MATLAB
Sau đó, ta chạy file sript này(Gõ tên file này trong cửa sổ
lệnh->Enter), ta đƣợc hình ảnh sau:
Copyright 2007
Thí dụ-Lệnh quiver (tt)
70
MATLAB
Các lệnh thao tác và điều khiển
ĐỒ HỌA CĂN BẢN (tt)
Hiển thị cửa sổ đồ họa hiện hành figure(gef)
figure
Tạo ra cửa sổ đồ họa
figure(„propertyname‟,‟propertyvalue‟,…)
hold
Chuyển từ trạng thái hold là on sang off và ngược
lại
hold on
Giữ lại tất cả màn hình đã vẽ
hold off
Xóa các màn hình đã vẽ chỉ thể hiện màn hình hiện
hành mới (Chế độ mặc định)
axis
Cân chỉnh trục tọa độ và hình dạng của nó
grid
Grid On/ grid off/ grid: Tạo/ tắt lưới cho đồ thị
shg
Hiển thị đồ thị trên màn hình
clg
Xóa đồ thị trên màn hình
zoom
Co vào hoặc dãn ra của đồ thị
Copyright 2007
71
MATLAB
CÁC LỆNH VĂN BẢN TRÊN MÀN HÌNH ĐỒ HỌA
title(„text‟,‟property 1‟,‟property 2‟,…): Tiêu đề cho đồ thị
xlabel(„text‟,‟property 1‟,‟property 2‟,…): Nhãn trục hoành độ
ylabel(„text‟,‟property 1‟,‟property 2‟,…): Nhãn trục tung độ
text(x,y,z,„chuỗi „): Văn bản ở bất kỳ vị trí nào trên đồ thị. X, Y là
tọa độ tâm bên trái của đồ thị.
legend(x,y): Chú thích của đƣờng trên đồ thị
gtext(„C‟): Văn bản ở vị trí con trỏ.
Copyright 2007
ĐỒ HỌA CĂN BẢN (tt)
72
MATLAB
ĐỌC DỮ LIỆU TỪ MÀN HÌNH ĐỒ HỌA
Lấy tọa độ diểm trên đồ thị, khi một đồ thị đƣợc vẽ
xong, nếu muốn lấy tọa độ của một số điểm trên
đƣờng này, ta sẽ dùng lệnh [x,y] = ginput(n); n là
số điểm cần lấy tọa độ.
Khi đồ thị hiện ra, ta nhấn phím trái chuột vào các
vị trí mong muốn lấy tọa độ trên đồ thị, các hoành
độ sẽ đƣợc chứa trong vector và tung độ trong
vector y.
Nếu quan hệ giữa hai đại lƣợng x, y cần đƣợc vẽ
bằng các điểm rời rạc, thay vì là đƣờng nối các
điểm (x,y) nhƣ vẽ hàm, hàm plot sẽ dùng các điểm
đƣợc đánh dấu (data makers)
Copyright 2007
ĐỒ HỌA CĂN BẢN (tt)
73
MATLAB
Thí dụ, vẽ đồ thị từ số liệu rời rạc bằng cách sử dụng điểm đánh
dấu.
>> x=[5:18];
>> y=[1,2,3,5,4,5,5,7,8,6,9,11,14,20];
>> plot(x,y,'r s')
ĐỒ HỌA CĂN BẢN (tt)
R: màu đỏ, s: hình vuông
Copyright 2007
74
MATLAB
Thí dụ:
Nếu muốn nối liền các điểm đƣợc đánh dấu này bằng các
đoạn thẳng, chúng ta có thể vẽ 2 lần.
>>plot(x,y,'r o',x,y)
Copyright 2007
ĐỒ HỌA CĂN BẢN (tt)
75
MATLAB
Ngoài ra trong lệnh plot ta có thể đƣa các thông số „lineWidth‟
để định độ rộng của đƣờng vẽ, thông số „MarkerSize‟ để định
độ lớn (chiều cao) của các điểm đƣợc đánh dấu và thông số
“Color” để định màu của đồ thị.
Thí dụ: >>plot(x,y,‟o-
‟,‟LineWidth‟,3,‟MarkerSize‟,8,‟Color‟,‟red‟)
Copyright 2007
ĐỒ HỌA CĂN BẢN (tt)
76
MATLAB
- Điền tiêu đề cho đồ thị, ta sử dụng lệnh: title(„text‟).
- Tạo lƣới cho đồ thị: grid on
Thí dụ: <
Copyright 2007
ĐỒ HỌA CĂN BẢN (tt)
77
MATLAB
Kiến tạo hệ trục tọa độ
ĐỒ HỌA CĂN BẢN (tt)
Mô tả
Lệnh
Axis([xmin xmax ymin ymax])
Thiết lập các giá trị min, max của hệ trục
dùng các giá trị được đưa ra trong vecto
hàng.
V= axis
V là vector cột có chứa thang chia cho đồ thị
hiện tại: [xmin xmax ymin ymax]
Axis auto
trả lại giá trị mặc định thang chia
Axis(„auto‟)
Xmin=min(x), xmax = max(x)…
Axismanual
Giới hạn thang chia nh thang chia hiện tại
Axis xy
Sử dụng (mặc định) hệ tọa độ decac trong đó
gốc tọa độ ở góc thấp nhất bên trái, trục
ngang tăng từ trái qua phải, trục đứng tăng
từ dưới lên.
Copyright 2007
78
MATLAB
ĐỒ HỌA CĂN BẢN (tt)
Lệnh
Mô tả
Axis ij
Sử dụng hệ tọa độ ma trận, trong đó góc tọa độ ở
đỉnh góc trái, trục đứng tăng từ đỉnh xuống, trục
ngang từ trái qua phải.
Axissquare
Thiết lập đồ thị hiện tại là hình vuông, so với mặc
định là hình chữ nhật.
Axisequal
Thiết lập thang chia giống nhau cho cả hai hệ trục
Axis tightequal
Tương tự như axisequal nhưng hộp đồ thị vừa đủ
đối với dữ liệu
Axis normal
Tắt đi chế độ axis, equal, tight và vis3d
Axis off
Tắt bỏ chế độ nền trục, nhãn, lưới, và hộp, dấu.
Thoát khỏi chế độ lệnh title và bất cứ lệnh label nào
và thay đổi bởi lệnh text và gtext.
[X,Y,Z] = CYLINDER(R,N) forms the unit cylinder based on the
generator curve in the vector R. Vector R contains the radius at
equally spaced points along the unit height of the cylinder. The
cylinder has N points around the circumference. SURF(X,Y,Z)
displays the cylinder.
[X,Y,Z] = CYLINDER(R), and [X,Y,Z] = CYLINDER default to N
= 20 and R = [1 1].
Sphere(n)
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
SPHERE Generate sphere.
[X,Y,Z] = SPHERE(N) generates three (N+1)-by-(N+1) matrices
so that SURF(X,Y,Z) produces a unit sphere.
[X,Y,Z] = SPHERE uses N = 20.
Copyright 2007
84
MATLAB
Tạo một lƣới các điểm trong mặt phẳng xy
Cú pháp:
[X,Y] = meshgrid(x,y)
Trong đó:
x = [xmin,x,xmax]
y = [ymin,y,ymax]
Chức năng:
− Hàm meshgrid sẽ phát sinh các tọa độ của một lƣới chữ
nhật có m.n điểm với một góc (xmin,ymin) còn góc kia là
(xmax,ymax).
− Ma trận X có kích thƣớc m.n gồm n cột giống nhau là vector
x‟ và ma trận Y cũng có kích thƣớc m.n hàng giống nhau là
vector y.
− Mỗi ô lƣới sẽ có kích thƣớc x, và y.
Copyright 2007
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
85
MATLAB
Các lệnh vẽ tƣơng tự
meshc(X,Y,Z)
meshz(X,Y,Z)
MESHZ(...) or MESHC(…) is the same as MESH(...) except
that a "curtain" or reference plane is drawn beneath.
surf(X,Y,Z)
SURF('v6',...) creates a surface object instead of a surface
plot object for compatibility with MATLAB and earlier.
surfc(X,Y,Z) vẽ mặt giống nhƣ thực hiện mesh hay meshc
nhƣng mặt đƣợc tô bóng (shaded surface).
surfnorm
[Nx,Ny,Nz] = SURFNORM(Z) returns the surface normal
components for the surface Z.
Copyright 2007
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
86
MATLAB
CÁC LỆNH VẼ MẶT LƢỚI TRONG 3D
Mesh
− MESH returns a handle to a surface plot object.
Meshz: Vẽ bề mặt với các đƣờng thẳng đứng viền quanh
đồ thị.
Waterfall: Vẽ bề mặt với các đƣờng lƣới theo một hƣớng
nhƣ thác đổ.
WATERFALL(...) is the same as MESH(...) except that
the column lines of the mesh are not drawn - thus
producing a "waterfall" plot. For column-oriented data
analysis, use WATERFALL(Z') or WATERFALL(X',Y',Z').
Copyright 2007
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
87
MATLAB
Thí dụ: Vẽ mặt
Thực hiện:
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
>> x = [-2:.1:2];
>> y = [-2:.1:2];
>> [X,Y] = meshgrid(x,y); % Tạo lƣới các điểm trong mặt
: Là góc phƣơng vị tính bằng độ ngƣợc chiều kim đồng hồ
từ phía trên của trục ngang (mặc định = -37.5o)
: Góc nhìn tính bằng độ xuống mặt phẳng xy (mặc định =
30o)
Thí dụ: view([0,90]) : Vẽ 2D là một trƣờng hợp đặc biệt của
phép vẽ 3D.
- Hiển thị đồ thị 3D đã tạo ra dƣới dạng 2D theo góc
phƣơng vị và góc nhìn.
Copyright 2007
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
97
MATLAB
>> view([0,90]) và >> view([30,30])
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
% Hiển thị hình đã vẽ trong lệnh surfc(X,Y,Z)
Copyright 2007
98
MATLAB
Lệnh rot90
ROT90 Rotate matrix 90 degrees.
ROT90(A) is the 90 degree counterclockwise rotation of
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
matrix A..
ROT90(A,K) is the K*90 degree rotation of A, K = +-1,+-
2,...
Example:
A = [1 2 3 B = rot90(A) = [ 3 6
4 5 6 ]
2 5
1 4 ]
Copyright 2007
99
MATLAB
>>[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-:.16:2);
v = x .* exp(-x.^2 - y.^2 - z.^2);
slice(x,y,z,v,[-1.2 .8 2],2,[-2 -.2])
Copyright 2007
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
100
MATLAB
Thí dụ về lệnh Colormap và colorbar
>> [x,y] = meshgrid(-2:.2:2);
>> z = x.^(-x.^2-y.^2);
>> [C,h] = contour(x,y,z);
>> Clabel(C,h); %Nhãn biểu đồ contour
>> Surf(peaks(30))
>> Colormap cool; %Chọn biểu đồ màu
>> Colorbar % Hiển thị thanh biểu đồ màu
Copyright 2007
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
101
MATLAB
Copyright 2007
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
102
MATLAB
Các lệnh đồ họa khác trong đồ họa 3D
1. fill3: Tô đa giác 3 mặt trong không gian 3D.
Cú pháp:
fill3(x,y,z,c): Tô đa giác 3D đƣợc định nghĩa bởi 3 vector x, y, z với
màu tô đƣợc xác định bởi c.
fill3(x1,y1,z1,c1,x2,y2,z2,c2,…): Tô đa giác 3D xác định nhiều vùng
tô.
2. comet3(z)
3. comet3(x,y,z)
4. comet3(x,y,z,p)
5. comet3
Các lệnh vẽ đƣờn viền 3 chiều trong 3D
6. contour3(z): Vẽ đƣờng viền 3D cho tới mức z
7. contour3(z,n): Vẽ đƣờng n viền 3D
8. contour3(x,y,z): Tƣơng tự nhƣ trên, nhƣng ma trận x,y để giới hạn
trục x,y.
Copyright 2007
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
103
MATLAB
Lƣu ý:
ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
MATLAB cho phép chuyển đồ thị qua word…
− Từ cửa sổ
Sau đó trở lại cửa sổ mà ta muốn chèn và
nó vào một nơi ta mong muốn.
Copyright 2007
Cách làm:
104
MATLAB
Việc nhập lệnh từ dấu nhắc (>>) thì nhanh và hiệu quả, nhƣng
khi thực hiện một lúc nhiều lệnh hoặc muốn thay đổi giá trị của
một hoặc nhiều biến và lặp lại một số lệnh thì việc nhập lệnh ở
dấu nhắc sẽ kém hiệu quả.
M-FILE tiện dụng cho việc giải bài toán lớn, MATLAB cung cấp
thủ tục để tạo hàm riêng cho ngƣời sử dụng với hình thức một
text file.
Giải pháp:
− Tập hợp các lệnh vào một file với phần mở rộng là (*.m)
Cụ thể:
− Để soạn thảo một M-File thì
− Để hiển thị những lệnh trong M-File khi chúng đƣợc thực
thi thì sử dụng lệnh echo on.
− Hiệu chỉnh M-FILE:
Copyright 2007
M-FILE, or SCRIPT
105
MATLAB
MỘT SỐ LÊNH QUẢN LÝ TẬP TIN
M-FILE, or SCRIPT (tt)
thƣ mục …
− d: Chuyển đổi thƣ mục
− Chdir/cd
− dir: liệt kê tất cả thƣ mục hiện hành (tƣơng
tự lệnh IS)
− delete:
Cho phép liệt kê, xem, xóa, sửa, chuyển đổi
− type: Hiển thị tập tin M-FILE trong cửa sổ
lệnh.
− what: Hiển thị tất cả M-FILE trong thƣ mục
hiện hành.
− which: Hiển thị thƣ mục …
Copyright 2007
Xóa tập tin M-FILE
106
MATLAB
CẤU TRÚC MỘT CHƢƠNG TRÌNH
M-FILE, or SCRIPT (tt)
1. function[các biến đầu ra] = filename(các đối số)
function filename(các đối số)
function[các biến đầu ra] = filename
2. % là lời chú thích của chƣơng trình
3. global ten_bien1 ten_bien2 …
Copyright 2007
4. Chƣơng trình (các câu lệnh)
107
MATLAB
CẤU TRÚC MỘT CHƢƠNG TRÌNH
M-FILE, or SCRIPT (tt)
Thí dụ:
Giải phƣơng trình bậc hai: ax2 + by + c = 0
a. Khi biết các hệ số
Copyright 2007
b. Nhập 3 hệ số ở cửa sổ lệnh
108
MATLAB
a. Chƣơng trình có tên ptb2_a.m
function x = ptb2(a,b,c)
% Giải phƣơng trình bậc hai khi biết hệ số
p = [a b c];
roots(p);
x0 = -b/(2*a);
x = (x0 -10):.1:(x0+10);
y = a*x.2 + b*x + 10;
plot(x,y), title(„Do thi bac hai‟);
Trong cửa sổ lệnh:
>> x = ptb2(1,2,1)
x =
0 -1 -1
Copyright 2007
M-FILE, or SCRIPT (tt)
109
MATLAB
b. Chƣơng trình có tên ptb2_b.m
% chú thích
a = input(„Nhập a = „);
b = input(„Nhập b = „);
c = input(„Nhập c = „);
p = [a b c ]; % Khởi tạo vecto hệ số
x = roots(p);
disp(„Nghiệm của phƣơng trình bậc 2:‟)
disp(x)
x = (x0 -10):.1:(x0+10);
y = a*x.^2 + b*x + 10;
plot(x,y)
title(„Do thi bac hai‟);
Copyright 2007
M-FILE, or SCRIPT (tt)
110
MATLAB
Giải PTB2 bằng M-FILE
Copyright 2007
M-FILE, or SCRIPT (tt)
111
MATLAB
M-FILE, or SCRIPT (tt)
>> ptb2
Nhap a = 1
Nhap b = -2
Nhap c = 1
Nghiem cua phuong trinh bac 2:
1
Copyright 2007
1
112
MATLAB
SỬ DỤNG FILE SCRIPT
M-FILE, or SCRIPT (tt)
Chúng ta có thể soạn một script file theo cấu
trúc đề nghị nhƣ sau:
các dòng chú thích cho chƣơng trình.
Dòng 1: Tên của chƣơng trình và các từ
khóa mô tả chƣơng trình (dòng này đƣợc
MATLAB gọi là dòng H1 và lệnh lookfor
của MATLAB sẽ tìm thông tin ở dòng H1
này khi có yêu cầu)
Copyright 2007
a. Phần chú thích (comments section): Viết
113
MATLAB
Dòng 2: Tên ngƣời viết chƣơng trình, ngày viết.
Định nghĩa các tên biến đầu vào và đầu ra. Có
thể thêm vào định nghĩa tên các biến trung
gian. Lƣu ý là phải xác định rõ đơn vị đo lường.
Cho tất cả các biến đầu vào và đầu ra.
Tên của từng hàm tự tạo đƣợc sử dụng trong
M-FILE, or SCRIPT (tt)
chƣơng trình.
c. Phần tính toán (calculation section)
d. Phần trình bày kết quả: Dùng một số hàm của
b. Phần đƣa vào các giá trị đầu vào (input section)
Copyright 2007
MATLAB để trình bày kết quả.
114
MATLAB
Thí dụ:
M-FILE, or SCRIPT (tt)
Soạn Script file tính diện tích hình tam giác
ABC, khi biết tọa độ ba điểm trong không gian
R3. Diện tích tam giác đƣợc tính bằng công
thức:
Trong đó, ký hiệu (^) chỉ tích có hƣớng của hai
Copyright 2007
vectơ AB và AC.
115
MATLAB
Trong cửa sổ Editor/Debugger, ta soạn các dòng lệnh nhƣ sau:
Copyright 2007
M-FILE, or SCRIPT (tt)
116
MATLAB
Trong chƣơng trình trên hàm cross(u,v) sẽ trả về một vectơ
là vectơ tích có hƣớng của 2 vectơ u và v.
Lƣu ý: vectơ u (hoặc v) đƣợc xác định bởi các thành phần
số của nó.
Thí dụ:
u = [1,-2,4], v = [-4,2,0]
Hàm norm(p) sẽ tính module của vectơ p. Lệnh clear xuất
hiện trong đầu chƣơng trình sẽ xóa toàn bộ các biến mà
WORKSPACE đang quản lý và dành vùng nhớ để quản lý
các biến của chƣơng trình.
Dòng lệnh disp(S) sẽ hiện thị giá trị biến S ra cửa sổ lệnh-
command windows(so sánh với lệnh disp(„text‟), hiển thị
chuỗi ký tự).
Copyright 2007
M-FILE, or SCRIPT (tt)
117
MATLAB
THỰC HIỆN
% File dt_tamgiac.m: Chương trình tính diện tích hình tam giác,
% Tên người lập trình
% Dữ liệu đầu vào: Tọa ba điểm A,B,C
% Dữ liệu đầu ra: Diện tích S của ABC
% Biến trung gian p chỉ vectơ tích có hướng của hai vectơ AB x AC
clear
disp(„CHUONG TRINH TINH DIEN TICH HINH TAM GIAC‟)
disp(„KHI BIET TOA DO BA DIEM‟)
disp(„=========================================‟)
a = input(„Tọa điểm A = „);
b = input(„Tọa điểm B = „);
c = input(„Tọa điểm C = „);
p = cross(b-a,c-a); % Tích có hƣớng của hai vectơ AB x AC
S = 0.5*norm(p); % Diện tích ABC
disp(„Dien tich tam giac ABC:‟)
disp(S)
Copyright 2007
M-FILE, or SCRIPT (tt)
118
MATLAB
Khi chạy chƣơng trình cho kết quả:
>> DT_Tamgiac
CT TINH DIEN TICH HINH TAM GIAC
KHI BIET TOA DO BA DIEM
==================================
Toa do diem A = [2,0,0]
Toa do diem B = [4,0,0]
Toa do diem C = [3,2,0]
Dien tich tam giac ABC:
2
Copyright 2007
M-FILE, or SCRIPT (tt)
119
MATLAB
MATLAB dùng các biểu thức ở dạng biểu tƣợng (symbolic)
nhƣ các chuỗi kí tự để phân biệt với các biến hay phép
toán dạng số học (numberic)
Xem Thí dụ dƣới đây:
>> x = sym('x'); %Tao bien symbolic x
>> eq = 'x^2+2*x+a=0'; %Dinh nghia PT voi bien symbolic x
>> solve(eq) %Ham dung de giai PT tren
ans =
-1+(1-a)^(1/2)
-1-(1-a)^(1/2)
Copyright 2007
Toolbox Symbolic
120
MATLAB
Định nghĩa biểu thức symbolic
Biểu thức
Trong MATLAB
„1/(2*x^n)‟
M = sym(„[a,b;c,d]‟)
f = int(„x^3/sqrt(1-x)‟,‟a‟,‟b‟)
Copyright 2007
Toolbox Symbolic
121
MATLAB
Toolbox Symbolic
Hàm symbolic cho phép tính toán với các biểu
thức, Thí dụ:
>>diff(„cos(x)‟) % Tính đạo hàm của cos(x)
ans =
>>M=sym(„[a,b;c,d]‟)
ans =
[a
b]
[c
d]
Copyright 2007
-sin(x)
122
MATLAB
Toolbox Symbolic
Ở đây, „cos(x)‟ là một chuỗi, diff(„cos(x)‟) là một
biểu thức symbolic chứ không phải là một hàm số
học. Ở Thí dụ 2, M=sym(„[a,b;c,d]‟) là một biểu
thức symbolic.
Sử dụng symbolic để xây dựng các hàm toán học
dạng symbolic.
− sym(x)
− sym x
− syms x
Copyright 2007
Khai báo biến (nhƣ đã trình bày các slide trƣớc)
123
MATLAB
Toolbox Symbolic
Các lệnh toán học sử dụng symbolic
f và g là hai hàm symbolic
− f+g
symadd(f,g)
− f-g
symsub(f,g)
− f*g
symmul(f,g)
− f/g
symdiv(f,g)
− f^g
sympow(f,g)
Copyright 2007
124
MATLAB
diff(f)
Đạo hàm bậc nhất theo biến x
diff(f,‟a‟)
Đạo hàm bậc nhất theo biến a
diff(f,‟a‟,n) Đạo hàm bậc n theo biến n
int(f)
Tính tích phân theo biến x
int(f,‟a‟)
Tính tích phân theo biến a
int(f,1,2)
Tính tích phân theo biến x từ 1 đến 2.
int(f,‟a‟,1,2) Tính tích phân theo biến a từ 1 đến 2.
int(f,‟n‟,‟m‟) Tính tích phân theo biến x từ n đến m
solve(f)
Giải phƣơng trình f = 0
dsolve(f)
Giải phƣơng trình vi phân
dsolve(f,‟a‟) Giải PT vi phân với ĐK ban đầu
ezplot(f)
Vẽ đồ thị hàm mà không cần giá trị của biến.
Copyright 2007
Toolbox Symbolic
125
MATLAB
F=fourier(f)
Toolbox Symbolic
Biến đổi Fourier f(x)->F(w)
f=ifourier(F)
Biến đổi Fourier ngược F(w)->f(x)
F=fourier(f,v)
Biến đổi Fourier f(x)->F(v)
F=fourier(f,t,v)
Biến đổi Fourier ngược f(t)->F(v)
F=ztrans(f)
Biến đổi z f(n)->F(z)
f=ztrans(F)
Biến đổi z ngược F(z)->f(n)
F=ztrans(f,w)
Biến đổi z f(n)->F(w)
F=ztrans(F,k,w)
Biến đổi z ngược f(k)->F(w)
F=laplace(f)
Biến đổi Laplace f(t)->F(s)
f=laplace(F)
Biến đổi Laplace F(s)->f(t)
Copyright 2007
126
MATLAB
Simulink 5.0 (Simulation and Link - R13) đƣợc MatWorks
giới thiệu vào tháng 6 năm 2003. Nó cho phép phân tích,
mô hình hóa và mô phỏng các hệ thống động tuyến tính và
phi tuyến, liên tục và rời rạc một cách trực quan trong môi
trƣờng giao tiếp đồ họa, bằng các thao tác chuột đơn giản.
Có thể nói, không tận dụng đƣợc Simulink là một thiệt thòi
lớn cho ngƣời làm công tác mô phỏng!
Khởi động Simulink bằng một trong các cách sau:
nhập:
>>simulink
hoặc nhấp chuột vào trên menubar của Matlab
Copyright 2007
SIMULINK
127
MATLAB
Thƣ viện simulink hiện ra nhƣ hình sau:
Trƣớc tiên, sinh viên hãy nhấp chuột vào các thanh
cuộn của thƣ viện để có cái nhìn thân thiện về simulink.
Từ đây, để có thể tạo mô hình bằng simulink, hãy:
Nhấp chuột vào biểu tƣợng
của thƣ viện simulink
Chọn: File – New – Model trong
Menu của thƣ viện Simulink
Chọn: File – New – Model trong
cửa sổ lệnh của Matlab
Copyright 2007
SIMULINK
128
MATLAB
Môi trƣờng soạn thảo của Simulink
Cửa sổ này cho phép ta „nhấp - kéo - thả‟ vào
từng khối chức năng trong thƣ viện simulink. Thí
dụ, đặt vào đây khối „Sine Wave‟ trong thƣ viện
simulink nhƣ hình sau:
Copyright 2007
SIMULINK
129
MATLAB
SIMULINK
Lấy một khối từ thư viện
Copyright 2007
130
MATLAB
Mảng một chiều
MẢNG và MA TRẬN
Mảng một chiều (vecto) là tập hợp các số đƣợc
length(u): Tính số phần tử trong mảng một
sắp xếp có thứ tự.
chiều u.
ten_mang(n);
Muốn truy xuất phần tử thứ n trong mảng thì:
Các phần tử của mảng đựơc phân cách nhau
bởi dấu phẩy và đƣợc đặt trong đôi móc vuông
[ ] (kiểu dòng).
Các phần tử trong mảng phân cách nhau dấu
Copyright 2007
chấm phẩy thì gọi là mảng kiểu cột.
131
MATLAB
Cách tạo mảng:
* Ten_mang = [m1, m2, m3, …] % Mảng kiểu dòng
* Ten_mang = [m1; m2; m3, …] % Mảng kiểu cột
* Ten_mang = [m1 m2 m3 …] % Vectơ dòng
* Ten_mang = [m1
m2
m3
…]
* Ten_mang = [a::b] % Mảng kiểu cách đều.
Thí dụ:
>> x = [0:2:9]
x =
0 2 4 6 8
Copyright 2007
MẢNG và MA TRẬN
132
MATLAB
• x = linspace(x1,x2,n)
MẢNG và MA TRẬN
% Tạo một vectơ dòng có các phẩn tử cách
đều, với x1 là cận dưới, x2 là cận trên, và n là
số điểm của dãy (kể cả 2 điểm x1, x2). Nếu n bị
bỏ qua, giá trị mặc định của nó là 100.
Thí dụ:
>> z = linspace(2,8,7)
Copyright 2007
z = 2 3 4 5 6 7 8
133
MATLAB
x = logspace(a,b,n)
MẢNG và MA TRẬN
% Sẽ tạo ra 1 vectơ dòng có n phần tử cách
Thí dụ:
khoảng theo thang logarit, phần tử đầu là 10a và
phần tử cuối là 10b, các phần tử giữa có dạng
10x, trong đó x là 1 điểm cách đều giữa a và b.
Có (n-2) điểm nhƣ vậy. Nếu n bỏ đi trong câu lệnh
thì mặc định của nó là 50.
>> u = logspace(-1,1,4)
u =
Copyright 2007
0.1000 0.4642 2.1544 10.0000
134
MATLAB
Các hàm liên quan đến mảng một chiều
MẢNG và MA TRẬN
a. roots(Ten_mang)
Nghiệm của một đa thức Ten_mang là một đa
thức đƣợc mô tả là một mảng có các phần tử là
các hệ số đa thức, bắt đầu ở bậc cao nhất.
Mảng kiểu cột.
b. poly(r)
Copyright 2007
Trả về một mảng kiểu đòng với các phần tử là
các hệ số của đa thức có nghiệm trƣớc là các
phần tử của mảng r (bài toán ngƣợc)
135
MATLAB
MẢNG và MA TRẬN
c. polyval(a,x)
chứa trong mảng a tại các điểm thuộc mảng x.
Kết quả là một mảng có kích thƣớc bằng với mảng
Dùng để tính giá trị của một đa thức có các hệ số
x.
d. find(x)
khác 0 trong mảng.
Trả một mảng chứa các chỉ số của các phần tử
e. find(x
Copyright 2007
Trả về một mảng chứa các chỉ số của các phần tử
trong mảng x (hay y) thỏa điều kiện x < y. x có kích
thƣớc bằng y.
136
MATLAB
MẢNG và MA TRẬN
f. Chuyển vectơ hàng sang vectơ cột:
Thí dụ:
>> v = [3 5 9 7]‟
v =
3
Chuyển vị (transpose), dùng kí hiệu dấu nháy đơn
„ bên phải vectơ (mảng một chiều) và ngƣợc lại.
5
9
Copyright 2007
7
137
MATLAB
MẢNG và MA TRẬN
Chúng ta có thể tạo vectơ mới bằng cách kết nối
g. Kết nối các vectơ:
các vectơ thành phần đã biết.
Thí dụ:
>> x = [2,5,6];
>> z = [x,y]
z = 2 5 6 7 8 1
Copyright 2007
>> y = [7,8,1];
138
MATLAB
MẢNG và MA TRẬN
i. Truy xuất một phần tử từ một vectơ:
Chúng ta có thể truy xuất một phần tử vectơ hay trích ra một nhóm
các phần tử của vectơ theo một điều kiện nào đó (phát sinh ra
vectơ mới).
Thí dụ:
>> u = [0,2,4,6,8,10];
>> u(3) % truy xuất phần tử thứ 3 của vectơ u
ans =
4
>> u(2:5) %Truy xuất phần tử thứ 2 đến thứ 5 của vectơ u
ans =
2 4 6 8
>> u([1 3 5]) %Truy xuất phần tử thứ 1, thứ 3, thứ 5 của
vectơ u.
>> n = length(u) % Trả về số phần tử của vectơ u thuộc N.
n =
6
Copyright 2007
139
MATLAB
MẢNG 2 CHIỀU (MA TRẬN)
Một mảng trong MATLAB còn có thể có nhiều dòng,
nhiều cột; một mảng 2 chiều nhƣ vậy đƣợc gọi là MA
TRẬN (matrix).
Nếu một ma trận A có m dòng và n cột, ta nói kích thƣớc
A là m.n. Đôi khi ma trận A còn đƣợc viết dƣới dạng [aij],
trong đó i, j lần lƣợt là các chỉ số DÒNG và chỉ số CỘT
của phần tử aij.
Hai ma trận A và B đƣợc gọi là BẰNG NHAU nếu chúng
có cùng kích thƣớc và tất cả các phần tử tƣơng ứng đều
bằng nhau (aij = bij, với mọi i, j)
Các vectơ đƣợc MATLAB xem là các mảng 2 chiều đặc
biệt: Chúng có kích thƣớc 1xn (vectơ dòng) hoặc mx1
(vectơ cột). MATLAB xếp vectơ và mà trận vào lớp
double array trong WORKSPACE.
Copyright 2007
MẢNG và MA TRẬN
140
MATLAB
MẢNG và MA TRẬN
a. Cách tạo một ma trận trong MATLAB
Thí dụ:
Các phần tử thuộc cùng một dòng đƣợc phân
cách nhau bởi dấu phẩy(,), còn các dòng thì
phân cách nhau bằng dấu chấm phẩy (;)
>> A = [2,4,6;3,5,7]
A =
2 4 6
Copyright 2007
3 5 7
141
MATLAB
MẢNG và MA TRẬN
b. Kết nối một vectơ vào 1 ma trận:
Nếu r = [-1, 0, 1] là một vectơ dòng có
cùng số cột với ma trận A thì lệnh B = [A:r]
sẽ nối vectơ dòng r vào ma trận A, để tạo
ra ma trận B có 3 dòng, 3 cột nhƣ sau:
B =
2
4
6
3
5
7
-1
0
1
Copyright 2007
142
MATLAB
MẢNG và MA TRẬN
c. Ma trận chuyển vị (chuyển trí):
Nếu A là một ma trận có kích thƣớc m.n thì ma trận chuyển vị
(transpose) của A là một ma trận có kích thƣớc n.m. Các cột
thứ 1, thứ 2, thứ 3… Trong AT chính là dòng thứ 1, 2, 3 trong
ma trận A.
MATLAB dùng dấu nháy đơn đặt bên phải ma trận để tạo ma
trận chuyển vị.
Thí dụ:
>> A = [1 0;-4 2]
A =
-1
0
-4
2
>> AT=A‟
AT =
1
-4
0
2
Copyright 2007
143
MATLAB
MẢNG và MA TRẬN
d. Truy xuất một phần tử của ma trận (trích vectơ
dòng, cột, ma trận con)
Với một ma trận cho trƣớc, chúng ta có thể truy
xuất từng phần tử của ma trận, trích ra một
vectơ dòng hoặc một vectơ cột nào đó, hoặc
trích ra một ma trận con gồm nhiều dòng, nhiều
cột của ma trận A.
Copyright 2007
Khi tạo xong một ma trận A nào đó, phát hiện
phần tử dòng 2, cột 3 bị gõ sai và chúng ta
muốn sửa lại phần tử này là 6, ta chỉ cần gõ
lệnh A(2,3) = 6. Trong MATLAB A(2,3) là ký
hiệu chỉ phần tử dòng 2, cột 3 của ma trận.
144
MATLAB
>> A = [1,2,3,4;6,7,8,9;0,5,10,15;-3,-4,-5,-6]
MẢNG và MA TRẬN
Thí dụ:
A =
1 2 3 4
6 7 8 9
0 5 10 15
-3 -4 -5 -6
>> A(2,3) % truy xuất phần tử dòng 2, cột 3.
ans =
8
>> A(:,2) %Trích vectơ cột thứ 2
ans =
2
7
5
-4
>> A(4,:) % Trích vectơ dòng thứ 4
ans =
-3 -4 -5 -6
Copyright 2007
145
MATLAB
>> A(:,2:4) % Tạo một ma trận con gồm các cột 2,3,4 của A
ans =
2 3 4
7 8 9
5 10 15
-4 -5 -6
>> A(1:2,:) %Tạo 1 ma trận con gồm các dòng 1,2 của A
ans =
1 2 3 4
6 7 8 9
>> A([1 3], [2 4]) % Tạo một ma trận con gồm các phần
tử thuộc dòng 1,3 và cột 2,4.
Copyright 2007
MẢNG và MA TRẬN
146
MATLAB
Tóm tắt:
MẢNG và MA TRẬN
A(k,:) : Véctơ dòng thứ k.
A (:,l): Vectơ cột thứ l.
A(k:m,:): Ma trận con có dòng thứ k, cột thứ m
nào, cột nào cần trích ra.
Copyright 2007
A([array1], [array2]): Vectơ dòng để ghi số dòng
147
MATLAB
Mảng trống hoặc mảng không (empty or null
MẢNG và MA TRẬN
array)
là mảng không có phần tử nào cả. Các hàng
hoặc các cột của một ma trận có thể đƣợc bỏ
MATLAB dùng kí hiệu [ ] để chỉ 1 mảng trống
đi, bằng cách gán chúng bằng với mảng trống.
Thí dụ: A(2,:) = [ ], sẽ bỏ dòng thứ 2 của ma
của ma trận A ban đầu.
Copyright 2007
trận A và nhƣ vậy sẽ làm thay đổi kích thƣớc
148
MATLAB
MẢNG và MA TRẬN
Thí dụ:
>> A
A =
1 2 3 4
5 6 7 8
0 5 10 15
-3 -4 -5 -6
>> A(2,:) = [ ]; % Bỏ dòng thứ 2 của ma trận A
>> A
A =
1 2 3 4
0 5 10 15
-3 -4 -5 -6
Copyright 2007
149
MATLAB
MẢNG và MA TRẬN
Thí dụ:
>> A
A =
1 2 3 4
0 5 10 15
-3 -4 -5 -6
>> A(:,4) = [ ]; % Bỏ tiếp cột thứ 4
>> A
A =
1 2 3
0 5 10
-3 -4 -5
Copyright 2007
150
MATLAB
Các ma trận đặc biệt
MẢNG và MA TRẬN
M = eye(n): tạo ra ma trận đơn vị cấp n
M = ones(m,n): Tạo ra ma trận có size = m.n,
có các phần tử đều bằng 1.
có các phần tử đều bằng 0.
M = zeros(n); M = ones(n): Tạo ra ma trận
vuông M cấp n có tất cả các phần tử đều bằng
o hoặc bằng 1.
Copyright 2007
M = zeros(m,n): Tạo ra ma trận có size = m.n,
151
MATLAB
Phép cộng trừ
CÁC PHÉP TOÁN MA TRẬN
A+B
A-B
1 trong hai là đại lƣợng vô hƣớng.
Phép nhân
A*B %Tích hai ma trận. Số cột của A bằng số
% A và B là 2 ma trận có cùng kích thƣớc, hoặc
hàng của B.
Copyright 2007
A.*B % Nhân từng phần tử của A với từng phần
tử của B tƣơng ứng. A và B có cùng kích
thƣớc.
152
MATLAB
Phép chia:
CÁC PHÉP TOÁN MA TRẬN
A\B % Chia trái ma trận.
A.\B % Chia trái mảng
A/B % Chia phải ma trận
Phép lũy thừa:
A./B %Chia phải mảng
phát sinh nếu cả A và k đều là ma trận.
A.^B % Lũy thừa mảng. Là một ma trận mà các
A^k % Lũy thừa ma trận A bậc k. Lƣu ý: Lỗi sẽ
Copyright 2007
số hạng là A(i,j)^B(i,j)
153
MATLAB
Ma trận chuyển vị:
A‟
Ma trận nghịch đảo
inv(a) % Tƣơng đƣơng kí hiệu A-1
Định thức ma trận
det(A) % A phải là ma trận vuông
Phép quay ma trận
Rot90(A,n) % Các phần tử của ma trận đƣợc quay đi một
góc 90o theo ngƣợc chiều kim đồng hồ. A là ma trận
vuông, n số lần quay.
Phép đảo ma trận
Fliplr(A) %đảo các phần tử của A từ trái sang phải.
Flipud(A) %đảo các phần tử của A từ trên xuống dƣới
Copyright 2007
CÁC PHÉP TOÁN MA TRẬN
154
MATLAB
Phƣơng pháp nghịch đảo ma trận
Inv(A)
Invhilb(n):
pinv(A): Tính giả nghịch đảo ma trận nxm với m ≠ n.
Phƣơng pháp khử Gauss
rref([A f])
Phƣơng pháp khử Gauss-Jordan
Phƣơng pháp phân rã ma trận LU
lu(A)
Cú pháp: [L, U, P]=lu(A)
− trả về ma trận tam giác dƣới L, tam giác trên U và ma
trận hoán đổi P (ma trận đơn vị mà các cột bị hoán
chuyển). Ta có, L*U = P*A => X = U\(L\b)
Copyright 2007
HỆ PHƢƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
155
MATLAB
HỆ PHƢƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
− lu(A)
− Cú pháp: [L, U, P]=lu(A)
Trả về ma trận tam giác dƣới L, tam giác
trên U và ma trận hoán đổi P (ma trận
đơn vị mà các cột bị hoán chuyển). Ta có,
L*U = P*A => X = U\(L\b)
Trả về ma trận tam giác trên U, còn ma
trận LP‟=L*P. Ta có, LP*U = A => X = U \
(LP\b)
Copyright 2007
Phƣơng pháp phân rã ma trận LU
156
MATLAB
Bài thí nghiệm này trang bị cho sinh viên một số
kiến thức cơ bản để xây dựng giao diện ngƣời
dùng trong môi trƣờng Matlab, nhằm hoàn thiện
một chƣơng trình ứng dụng nhất định.
Cũng nhƣ các ngôn ngữ cấp cao khác, Matlab
hổ trợ nhiều công cụ chức năng cho phép lập
trình tạo giao diện sử dụng đẹp và nhanh chóng.
Thí dụ, các dạng nút ấn, cửa sổ soạn thảo, các
dạng menu, …
Copyright 2007
TẠO GIAO DIỆN
157
MATLAB
TẠO GIAO DIỆN
Các công cụ hổ trợ giao diện
Copyright 2007
158
MATLAB
Để tạo GIAO DIỆN dùng công cụ GUIDE của MATLAB
>> guide
TẠO GIAO DIỆN
Hoặc File/Show GUI layout tool. Cửa sổ Guide Control Panel xuất
hiện. Từ cửa sổ này có thể truy xuất đến các cửa sổ khác.
Có thể chọn các mẫu giao
diện có sẵn hay bấm OK để
chọn GUI trống.
Copyright 2007
159
MATLAB
Cửa sổ biên soạn GUI hiện ra
Vùng bên trái chứa danh sách các thành
phần đối tƣợng, vùng có ô lƣới là vùng
hiển thị, nơi đặt các component, bạn bấm
chuột trái vào các component muốn tạo,
sau đó đƣa con chuột ra vùng layout nơi
muốn đặt component, bấm chuột trái dùng
kích thƣớc component. Muốn thay đổi
kích chuột phải vào vùng layout, vào
menu chọn thuộc tính bấm chuột trái, cửa
sổ sau xuất hiện, vào BackGroundColor
chọn màu nền thích hợp.
TẠO GIAO DIỆN (tt)
Cửa sổ thuộc tính
Copyright 2007
160
MATLAB
Nếu muốn mở file.fig có sẵn, ta có thể chọn ngay từ cửa sổ
lệnh
TẠO GIAO DIỆN (tt)
>> guide ten_file.fig
Hay vào menu File rồi chọn Open. Hay Ctrl + O
Copyright 2007
161
MATLAB
Align Objects (căn lề các đối tƣợng)
Tools/Align Objects…/
Copyright 2007
TẠO GIAO DIỆN (tt)
162
MATLAB
Bấm kép chuột component trong
vùng layout để soạn tính chất của
component, Thí dụ bấm kép vào
Push Buton sẽ hiện ra cửa sổ
Property Inspector hoặc cũng có
thể bấm chuột phải để hiện ra
Context Menu (hình bên), sau đó
Inspector. Mỗi
bấm Property
component là mỗi Object đƣợc điều
khiển bởi uicontrol (User Interface
Control)
Copyright 2007
TẠO GIAO DIỆN (tt)
163
MATLAB
Các component mà GUI cho phép là:
Axes: vẽ hệ trục
Check box: là hộp kiểm tra cho phép đƣa vào các chọn lựa khi
bấm chuột vào đó.
Edit text: Là hộp văn bản đƣa chuỗi kí tự vào đó.
Frame: Khung bao một cửa sổ hình.
List box: Gồm một bảng các mục để chọn lựa
Pop-up menu: Menu sổ xuống trình bày một bảng các chọn
lựa khi bấm chuột vào.
Push button: Tƣơng tự Checkbox nhƣng chỉ chọn đƣợc một,
Radio button: (nút bật) giống push button nhƣng có hiển thị
trạng thái thay đổi mỗi khi nhấn.
Popup Menu: Tạo menu.
Copyright 2007
TẠO GIAO DIỆN (tt)
164
MATLAB
Một số component sẽ gây ra hành động khi tác
TẠO GIAO DIỆN (tt)
dùng phải soạn thảo. Sau khi đã biên tập các
thuộc tính và gọi hàm, có thể cất figure và file áp
động vào nó bằng cách goi một hàm M mà ngƣời
dụng M đi kèm bằng cách vào menu File-Save
Muốn chạy chƣơng trình gọi ten_file.m (hoặc
dùng các lệnh openfig, open, hgfile.fig), file này
sẽ khởi động file ten_file.fig và xuất hiện cửa sổ
hay File-Save as và đánh tên file.
component đã soạn thảo.
Copyright 2007
hình ảnh ten_file.fig mà ta sẽ thao tác trên các
165
MATLAB
Tool – GUI Options để chọn các option cho giao diện
Các chọn lựa cho GUI
Copyright 2007
TẠO GIAO DIỆN (tt)
166
MATLAB
Resize behavior có 3 lựa chọn:
Non-resizable: không thay đổi kích thƣớc cửa FIG (mặc định).
Proportional: Ngƣời dùng có thể điều chỉnh kích thƣớc cửa sổ
và các component trong đó sẽ tự điều chỉnh phù hợp
Other: Dùng hàm ResizeFcn để điều chỉnh.
Ô Command-Line accessibility có các lựa chọn:
Off: Các lệnh đánh sau dâu >> không tác động đến cửa sổ FIG.
On: Các dòng lệnh tác động đến cửa sổ FIG, GUI là current
figure
Callback: GUI là current fugure đối với các lệnh callback
Other: Phụ thuộc cửa sổ Property Inspector (thuộc tính
HandleVisibility và IntegerHandle)
Copyright 2007
TẠO GIAO DIỆN (tt)
167
MATLAB
XÂY DỰNG GIAO DIỆN
TẠO GIAO DIỆN (tt)
Start
Xác định công việc
Draw GUI
TEST DESIGN
Viết code
Test code
Stop
Copyright 2007
168
MATLAB
Sau khi xác định đƣợc hình dáng của giao diện,
dùng chuột kéo các đối tƣợng cần sử dụng sang
figure, sắp xếp theo đúng ý tƣởng thiết kế.
Thay đổi các thuộc tính của đối tƣợng.
Viết chƣơng trình callback.
Chuyển sang chế độ active để thử chƣơng trình.
Thí dụ 1: Tạo giao diện để giải và vẽ đồ thị
TẠO GIAO DIỆN (tt)
Copyright 2007
phƣơng trình bậc 2. Giao diện gồm có 5 text, 5
edit, 2 push, 1check, 1 axes.
169
MATLAB
Bài tập:
XÂY DỰNG GIAO DIỆN
Tag
EditA
EditB
EditC
EditX1
EditX2
TẠO GIAO DIỆN (tt)
a. Control
b. Active
Giao diện ở chế độ thiết kế và thực thi
Copyright 2007
170
MATLAB
Thí dụ 2: xây dựng một giao diện đơn giản sau
Copyright 2007
TẠO GIAO DIỆN (tt)
171
MATLAB
Tạo cửa sổ chính figure – „Welcome to User Interface‟s
Giude‟ theo cách sau:
Mở Matlab Editor
Nhập nội dung sau:
% User Interface's Guide
% Matlab Experiments 2003
% TcAD, CIT, Cantho University
% ----------------------------------------------------------------------------------
% Initialize whole figure...
namefig = 'Welcome to User Interface''s Guide';
figpos = get(0,'DefaultFigurePosition'); % lay vi tri mac nhien
figpos(1)= figpos(1)-10; figpos(2)= figpos(2)-10;
figpos(3)= figpos(3)+10; figpos(4)= figpos(4)+10;
% Tao figure
fig=figure( ...
'Name', namefig, ...
'NumberTitle','off', ...
'Position',figpos);
Copyright 2007
TẠO GIAO DIỆN (tt)
172
MATLAB
Lƣu thành file giaodien.m
>>giaodien % thi hanh
Quan sát kết quả trên hình
sau (Lƣu ý các thuộc tính:
Name, Position)
TẠO GIAO DIỆN (tt)
>>set(fig) % xem thuộc
tính của figure trong cửa
sổ lệnh
Copyright 2007
173
MATLAB
Thêm vào figure một axes cho phép hiển thị đồ họa:
Sinh viên lƣu ý cách biểu diễn nhiều lệnh ở dạng
chuỗi cho „CallBack‟. Trong trƣờng hợp có quá
nhiều lệnh phục vụ chức năng này, ta nên đƣa
chúng vào một script file hoặc một hàm khác.
Ngoài ra, nếu ta tạo giao diện dƣới dạng một hàm
(function) thì thuộc tính „CallBack‟ cho phép gọi
một hàm con đƣợc viết ngay trong file này.
Copyright 2007
TẠO GIAO DIỆN (tt)
185
MATLAB
Sinh viên hãy tạo thêm nút „About‟ sao cho khi ngƣời sử
dụng ấn nút sẽ mở cửa sổ mới nằm ngay giữa màn hình
Copyright 2007
TẠO GIAO DIỆN (tt)
186
MATLAB
Cho hai ma trận:
1
2
1
0
A =
; B =
3
4
0
1
Dùng MATLAB để tính các biểu thức sau:
C = A + B; D = A – B; E = A*B; F = B*A; G = A.*B;
H = B.*A; I = A\B; J = A.\B; K = A/B; L = A./B;
M = A.^B; N = A^2,0; O = 2,0.^A
Copyright 2007
BÀI TẬP 1
187
MATLAB
Cho vectơ hàng A = [4 5 6] và B = [1 2 3]
Dùng MATLAB để tính các biểu thức sau:
C = A+B; D = A – B; E = A*B; F = B*A;
Cho ma trận A = [4 5 6;2 0 5;1 3 4 ]
và B = [1 0 0]
Dùng MATLAB tính các biểu thức sau:
C =3*A; D = A*3; E = A.*3; F = 3.^A;
G = A/5; H = A./5; I = A\5; J = A.\5
Copyright 2007
BÀI TẬP 2
188
MATLAB
3. Viết chƣơng trình giải phƣơng trình bậc n và vẽ đồ thị của
hàm theo 2 phƣơng pháp nhập biến: nhập khi gọi hàm và
nhập bằng câu lệnh input. So sanh ƣu nhƣợc điểm khi
dùng hai phƣơng pháp này.
4. Viết chƣơng trình cho phép chọn kiểu vẽ 2D (plot), 3D
(mesh) để vẽ đồ thị của hàm một biến và hai biến bất kỳ.
Ngƣời sử dụng sẽ phải cung cấp kiểu vẽ, hàm số và
khoảng giá trị của biến cần vẽ. Nếu kiểu vẽ là 2D và hàm
hai biến, yêu cầu nhập lai cho đúng.
5. Viết chƣơng trình giải phƣơng trình hoặc hệ phƣơng trình
bằng biến symbolic. Ngƣời sử dụng sẽ chọn lựa giải
phƣơng trình hoặc giải hệ phƣơng trình. Nếu giải hệ phải
cung cấp số phƣơng trình.
Copyright 2007
BÀI TẬP
189
MATLAB
6. Viết chƣơng trình tìm đạo hàm và tích phân của
BÀI TẬP
7. Viết chƣơng trình giải phƣơng trình vi phân.
8. Làm lại bài 2 với biến symbolic
Copyright 2007
một hàm và vẽ đồ thị của hàm, vi phân, tích phân
của hàm trên cùng một đồ thị. Ngƣời sử dụng có
thể chọn biến của hàm. Ngƣời sử dụng có thể
nhập khoảng giá trị biến cần vẽ hoặc không.
190
MATLAB
9. Tạo giao diện nhƣ hình vẽ. Nhập các thông số a, b, c , d.
Nhấn „Vẽ‟, vẽ đồ thị. Nhấn „Giải nghiệm‟, thì xuất nghiệm
ở x1, x2, x3. Khi chọn „PTB2‟ thì các ô d và x3 ở chế độ
enable off.
Copyright 2007
BÀI TẬP (tt)
191
MATLAB
10. Tạo giao diện nhƣ ở hình dƣới. Ngƣời sử dụng nhập hàm
cần vẽ vào ô edit, sau đó chọn lực kiểu vẽ, colormap.
Tài liệu này là bài giảng điện tử về Tin học ứng dụng, tập trung vào việc sử dụng phần mềm MATLAB trong lĩnh vực Kỹ thuật Địa chất và Dầu khí, được biên soạn bởi ThS. Đỗ Quang Khánh và ThS. Bùi Tử An thuộc Trường Đại học Bách khoa TP. HCM.
Đối tượng sử dụng
Tài liệu này dành cho sinh viên và các nhà nghiên cứu trong lĩnh vực Kỹ thuật Địa chất và Dầu khí, những người muốn học và ứng dụng MATLAB để giải quyết các bài toán kỹ thuật, mô hình hóa, mô phỏng và phát triển giao diện người dùng.
Bài giảng điện tử này cung cấp kiến thức toàn diện về MATLAB, một ngôn ngữ lập trình và môi trường tính toán mạnh mẽ, đặc biệt ứng dụng trong Kỹ thuật Địa chất và Dầu khí. Nội dung bao gồm tổng quan về MATLAB, các khái niệm cơ bản như biến, toán tử, và các hàm toán học thông thường. Tài liệu đi sâu vào các phép toán ma trận và đại số tuyến tính, lập trình với các cấu trúc điều kiện và vòng lặp, cũng như khả năng xử lý số phức. Một phần quan trọng được dành cho đồ họa, từ đồ thị 2D cơ bản đến đồ họa 3D phức tạp, bao gồm cả các lệnh tạo lưới và quan sát. Ngoài ra, bài giảng còn giới thiệu về Symbolic Toolbox để giải quyết các bài toán biểu tượng, Simulink để mô hình hóa và mô phỏng hệ thống động, và hướng dẫn chi tiết cách tạo giao diện người dùng (GUI) trong MATLAB. Các ví dụ minh họa và bài tập thực hành được cung cấp xuyên suốt để củng cố kiến thức và kỹ năng ứng dụng.