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 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.
Trang 1BÀI GIẢNG ĐIỆN TỬ
TIN HỌC ỨNG DỤNG TRONG KỸ THUẬT ĐỊA CHẤT & DẦU KHÍ
Tác giả : ThS Đỗ Quang Khánh
MATLAB
Trang 3CÁC VẤN ĐỀ NÂNG CAO TRONG 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
Trang 4TỔNG QUAN VỀ 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
Trang 5Sức mạnh của 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
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…
Ngôn ngữ Matlab: Các lệnh cao cấp xử lý ma
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…
Xử lý đồ họa: Hiển thị dữ liệu dạng đồ họa
Trang 7Các khái niệm cơ bản
Khi chạy chương trình MATLAB, thì cửa sổ này sẽ xuất hiện
Cửa sổ lệnh
Cửa sổ không gian làm việc Cửa sổ lịch sử
lệnh
Trang 8Các khái niệm cơ bản (tt)
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
Trang 9Các khái niệm cơ bản
Một số lệnh hệ thống
help xem phần trợ giúp một số lệnh
quit, exit Thoát Matlab
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
Trang 10Các khái niệm cơ bản (tt)
• 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
Trang 11Các khái niệm cơ bản (tt)
Trang 12Các khái niệm cơ bản (tt)
Toán tử logic
• and ( & ) Logic và
• or ( | ) Logic hoặc
• not ( ~ ) Logic phủ định
• xor Logic hoặc phủ định
• any True nếu mọi phần tử của vector
khác không.
• all True nếu tất cả các phần tử khác
không
Trang 13Các khái niệm cơ bản (tt)
[ ] Dấu ngoặc vuông
Trang 14Các khái niệm cơ bản (tt)
ctranspose(‘ ) Chuyển vị số phức liên hợp
horzcat [, ] Ghép chuỗi theo chiều ngang
vertcat[; ] Ghép chuỗi theo chiều đứng subsasgn Gán subscripted
subsindex Chỉ số subscripted
Trang 15Các khái niệm cơ bản (tt)
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ự
Trang 16BIẾN (tt)
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
Trang 17Một số biến được định nghĩa trước (tt)
Ý
Trang 19>>size(A,1) ans = 2
Trang 20>> b = ‘MATLAB’
b = Matlab
Ta nói, a, b là các biến môi trường.
Trang 21BIẾN (tt)
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
Trang 22BIẾN (tt)
BIẾN CỤC BỘ (Local Variable)
Biến này chỉ tồn tại trong một hàm MATLAB và không hiện hữu trong cửa sổ lệnh.
Trang 23BIẾN (tt)
BIẾN TOÀN CỤC (Global Variable)
Đượ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
x, y, z là các biến toàn cục.
Trang 24BIẾ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 đặc biệt, việc gọi hàm trong một hàm đều có thể 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.
Trang 25BIẾN (tt)
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
Trang 262/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
<syms>
Trang 27>> v = subs(u,{x,y},{3,4})
% Tính giá trị biểu thức khi x = 3; y = 4;
v = 5
Trang 30− Để sử dụng lại cho phiên làm việc sau; dùng
lệnh <save> (lưu tất cả các biến do
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
Trang 31BIẾN (tt)
Nạp biến:
− Dùng lệnh <load> 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 <Save filename> để
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 <load filename>
Lưu một vài biến trong cửa sổ workspace
− Lệnh <Save filename var1 var2 …>
Nói chung cách đơn giản nhất là: Từ cửa sổ
Trang 33 imag(x) Phần ảo của X
conj(x) Liên hợp phức của X
abs(x) Độ lớn, trị tuyệt đối của X
angle(x) Góc pha của số phức
complex(x) Tạo số phức từ phần thực và ảo
Trang 34>> abs(a) ans = 3.1623 % độ lớn của a
>> real(b) % phần thực của số phức b ans = 2
>> imag(b) %phần ảo của số phức b ans = -4
>> complex(2,2) ans = 2.0000 + 2.0000i
Trang 35Một số hàm toán học thông thường
Any(x) 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.
All(x) 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.
Isnan(x) Là một tại những vị trí NaN (Not a Number, Thí dụ
0/0 ) trong x
Isinf(x) Là 1 tại những vị trí Inf ( Infinitive, 1/0 ) trong x.
Finite(x) Là 1 tại những vị trí có giá trị hữu hạn trong x.
Isstr(x) Là 1 nếu x là một string (chuỗi)
Issym(x) Là 1 nếu x là một biến sym
Abs(x) Trị truyệt đối hoặc biên độ số phức
Acos(x) Hàm cosin ngược
Acosh(x) Hyperbolic cosin ngược
Ceil(x) Làm tròn về phía trên
Trang 36Một số hàm toán học thông thường
cos(x) Hàm cosin
cosh(x) Hyperbol cosin
exp(x) Hàm mũ e x
fix(x) Xấp xỉ không
floor(x) Làm tròn về phía zero
log(x) Hàm logarit tự nhiên
log10(x) Hàm logarit thập phân
round(x) Làm tròn về số nguyên gần nhất
sign(x) Hàm dấu, Thí dụ: sign(1.2) = 1,sign(-23.4) = -1, sign(0)
= 0
sinh(x) Hàm Hyperbol sin
sqrt(x) Căn khai căn bậc hai
gdc(x,y) Bội số chung lớn nhất của hai số nguyên x và y.
lcm(x,y) Bội số chung nhỏ nhất của hai số nguyên x và y.
Trang 37Mộ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)
Trang 38Một số hàm cơ bản (tt)
Thí dụ:
>> x=4;
>> sqrt(x)ans = 2
>> exp(x)ans = 54.5982
>> sign(x)ans = 1
>> rem(x,3)ans = 1
>> v=[1 2 3];
>> min_v=min(x)min_v = 1
>> mean(x)ans = 2
>> sum(x)ans = 6
Trang 39Các Hàm liên quan đến ĐA THỨC
Đ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ứcDeconv(a,b) Chia hai đa thức
a + b Tổng 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
Trang 40Hàm ĐA THỨC (tt)
Thí dụ: Giải phương trình: x4 + 10x3 + 0x - 1 = 0
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.19710.5291-0.1660 + 0.3972i-0.1660-0.3972i
Trang 42Hà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
Trang 45CÁC LỆNH ĐIỀU KIỆN VÀ LẶP
Lệnh if else elseif
Nếu <BT logic> là true thì <Các lệnh> được
thi hành, nếu không thì thực hiện các lệnh sau
… end
if <BT logic>
<Các lệnh>
end
Trang 47if (rem(nam,4)~=0)
y=28else
y=29end
else
Trang 50 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.
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.
Trang 51ĐỒ HỌA CĂN BẢN (tt)
Màu sắc và kiểu đường vẽ
w White : Dotted line
Trang 52ĐỒ HỌA CĂN BẢN (tt)
Trang 53ĐỒ HỌA CĂN BẢN (tt)
Đồ họa không gian 2 chiều trong MATLAB
Lệnh plot: Đồ thị tuyến tính X-Y, vẽ trong mặt
phẳng hai chiều.
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.
− Cú pháp: fplot (‘ string ’, [ xmin,xmax])
Trang 54ĐỒ HỌA CĂN BẢN – Plot() (tt)
>> title(‘y = sin(x)’) % đặt tên đồ thị
>> grid on % Tạo lưới cho đồ thị
Trang 55ĐỒ HỌA CĂN BẢN – Plot() (tt)
Trang 56ĐỒ HỌA CĂN BẢN – Plot() (tt)
Để vẽ hai đồ thị trên cùng một trục tọa độ
Trang 57ĐỒ HỌA CĂN BẢN – Plot() (tt)
>>legend(‘y = sin(x)’,’z=cos(x)’)
Trang 58ĐỒ HỌA CĂN BẢN (tt)
Để vẽ nhiều hàm trên cùng một đồ thị ta có thể dùng lệnh “hold on” và “hold off”
Trang 59ĐỒ HỌA CĂN BẢN (tt)
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) )
Trang 60ĐỒ HỌA CĂN BẢN (tt)
Thí dụ:
>> x = 1+.9i;
Trang 61ĐỒ HỌA CĂN BẢN (tt)
Thí dụ lệnh fplot trong số phức:
>> f='cos(tan(x))-tan(sin(x))';
>> fplot (f,[1 2])
Trang 62ĐỒ HỌA CĂN BẢN (tt)
Các lệnh vẽ trong các tọa độ đặc biệt
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.
Trang 65ĐỒ HỌA CĂN BẢN (tt)
Thí dụ lệnh loglog(x,y)
>> x = logspace(-1,2);
>> loglog(x,exp(x))
Trang 67ĐỒ HỌA CĂN BẢN (tt)Thí dụ :
Trang 68ĐỒ HỌA CĂN BẢN (tt)
Các lệnh vẽ liên quan đến SỐ PHỨC
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)
Trang 69Thí dụ-Lệnh quiver
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:
Trang 70Thí dụ-Lệnh quiver (tt)
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:
Trang 71hold 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)
grid Grid On/ grid off/ grid: Tạo/ tắt lưới cho đồ thị
Trang 72ĐỒ HỌA CĂN BẢN (tt)
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ỏ
Trang 73ĐỒ HỌA CĂN BẢN (tt)
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
Trang 76ĐỒ HỌA CĂN BẢN (tt)
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’)
Trang 77ĐỒ HỌA CĂN BẢN (tt)
- Điền tiêu đề cho đồ thị, ta sử dụng lệnh: title(‘text’)
- Tạo lưới cho đồ thị: grid on
Thí dụ: <<title(‘do thi roi rac dung data marker o’)
Trang 78ĐỒ HỌA CĂN BẢN (tt)
Kiến tạo hệ trục tọa độ
Axis([x min x max y min y max ])
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: [x
min x max y min y max ]
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
Trang 79Axissquare 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