MATLAB là một ngôn ngữlập trình bậc cao với môi trường tương tác cho phép tính toán, xửlý đồthị/hình
ảnh, mô phỏng đơn giản với nhiều công cụhỗtrợsẵn có từthưviện Toolsvà Functions. Trong nhiều
trường hợp, do cho phép làm việc bằng các phép toán xây dựng cho mảng và ma trận nên MATLAB tỏra ưu
thếhơn các ngôn ngữtruyền thống khác nhưC/C++ hay Java™. Bên cạnh đó, ngôn ngữvà các cú pháp lệnh
của MATLAB được nhiều người đánh giá là dễhiểu và thân thiện với người dùng. Hiện nay MATLAB là
một trong những ngôn ngữlập trình được ứng dụng rộng rãi nhất trong nhiều lĩnh vực như: signal
processing and communications, image and video processing, control systems, test and measurement,
computational finance, and computational biology.
22 trang |
Chia sẻ: lylyngoc | Lượt xem: 1754 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Bắt đầu với MATLAB, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Bắt đầu với MATLAB
Soạn dịch từ
sonnc@vnu.edu.vn
Mục lục
Giới thiệu về MATLAB ..................................................................................................................................... 1
Ngôn ngữ của công nghệ tính toán ............................................................................................................ 1
Các tính năng cơ bản .................................................................................................................................. 1
Các thành phần của cửa sổ chương trình ........................................................................................................... 2
Ma trận và Mảng ................................................................................................................................................ 4
Tạo mảng ................................................................................................................................................... 4
Các phép toán với ma trận và mảng ........................................................................................................... 4
Ghép nối ma trận ........................................................................................................................................ 6
Số phức ...................................................................................................................................................... 7
Chỉ số của mảng ................................................................................................................................................. 8
Các biến và Workspace .................................................................................................................................... 10
Chuỗi kí tự ....................................................................................................................................................... 11
Function ........................................................................................................................................................... 12
Vẽ hình 2-D và 3-D.......................................................................................................................................... 13
Vẽ hình 2-D.............................................................................................................................................. 13
Vẽ hình 3-D.............................................................................................................................................. 15
Vẽ đồ thị con ............................................................................................................................................ 16
Script ................................................................................................................................................................ 17
Ví dụ về Script ......................................................................................................................................... 17
Vòng lặp và các câu lệnh có điều kiện ..................................................................................................... 18
Địa chỉ của Script ..................................................................................................................................... 19
Help .................................................................................................................................................................. 21
1
Giới thiệu về MATLAB
Ngôn ngữ của công nghệ tính toán
MATLAB là một ngôn ngữ lập trình bậc cao với môi trường tương tác cho phép tính toán, xử lý đồ thị/hình
ảnh, mô phỏng đơn giản với nhiều công cụ hỗ trợ sẵn có từ thư viện Tools và Functions. Trong nhiều
trường hợp, do cho phép làm việc bằng các phép toán xây dựng cho mảng và ma trận nên MATLAB tỏ ra ưu
thế hơn các ngôn ngữ truyền thống khác như C/C++ hay Java™. Bên cạnh đó, ngôn ngữ và các cú pháp lệnh
của MATLAB được nhiều người đánh giá là dễ hiểu và thân thiện với người dùng. Hiện nay MATLAB là
một trong những ngôn ngữ lập trình được ứng dụng rộng rãi nhất trong nhiều lĩnh vực như: signal
processing and communications, image and video processing, control systems, test and measurement,
computational finance, and computational biology.
Các tính năng cơ bản
• Ngôn ngữ lập trình bậc cao cho tính toán sô và các xử lý đồ thị/hình ảnh và xây dựng ứng dụng.
• Môi trường tương tác cho công việc phân tích, thiết kế và giải quyết vấn đề.
• Các hàm toán học xây dựng sẵn cho các lĩnh vực: đại số, thống kê, lọc nhiễu, tối ưu, tích phân số, giải
phương trình vi phân đạo hàm riêng…
• Các công cụ vẽ đồ thị và xử lí hình ảnh xây dựng sẵn.
• Các công cụ cải thiện hiệu năng tính toán và tiết kiệm thời gian tính toán.
• Các hàm liên kết với các thuật toán của các ngôn ngữ khác như C, Java, .NET, and Microsoft® Excel®
2
Các thành phần của cửa sổ chương trình
Khi khởi động chương trình, màn hình mặc định của MATLAB sẽ như hình dưới.
Màn hình chính bao gồm các thành phần sau
• Current Folder — Thư mục làm việc hiện tại. MATLAB chỉ thực thi các .M file đặt trong Folder này.
• Command Window — Cho phép nhập và thực hiện các dòng lệnh, đồng thời hiển thị kết quả.
• Workspace — Không gian dữ liệu chứa các biến được tạo ra hay import từ các file.
• Command History — Lịch sử lệnh, cho phép xem lại hoặc thực hiện lại các lệnh đã thực hiện trong
Command Window.
Quá trình làm việc với MATLAB là quá trình tạo các biến và gọi các hàm. Ví dụ, tạo biến a bằng cách nhập:
a = 1
MATLAB sẽ tạo ra biến a trong Workspace và hiển thị kết quả câu lệnh trong Command Window.
a = 1
Tạo thêm các biến khác.
b = 2
b = 2
3
c = a + b
c = 3
d = cos(a)
d = 0.5403
Khi không có biến đầu ra nào được chỉ định, MATLAB sẽ sử dụng biến ans, dạng ngắn gọn của ‘answer’,
để lưu trữ kết quả tính toán.
sin(a)
ans = 0.8415
Nếu một câu lệnh được kết thúc bằng dấu chấm phẩy (;), MATLAB sẽ vẫn thực hiện câu lệnh nhưng không
hiển thị kết quả tính toán ra Command Window.
e = a*b;
Có thể gọi lại các câu lệnh đã thực hiện bằng các phím mũi tên lên xuống ↑ và ↓. Nhấn các phím lên xuống
tại các dòng lệnh mới hoặc sau khi nhập một số kí tự đầu tiên của câu lệnh. Ví dụ, để gọi lại câu lệnh b=2,
nhập b, sau đó nhấn phím ↓.
4
Ma trận và Mảng
MATLAB là viết tắt ngắn gọn của ‘matrix laboratory”. Trong khi các ngôn ngữ lập trình khác đa số làm
việc với các con số tại một thời điểm, thì MATLAB được thiết kế để làm việc chủ yếu với các ma trận và
mảng. Đây có thể coi là một ưu điểm của MATLAB so với các ngôn ngữ khác
Tất cả các biến của MATLAB thuộc mọi kiểu dữ liệu đều là có thể là các mảng nhiều chiều. Ma trận là một
mảng một chiều, thường sử dụng trong các tính toán đại số.
Tạo mảng
Để tạo mảng là một vecto hàng chứa 4 phần tử, ngăn cách các phần tử bởi dấu phẩy (,) hoặc phím cách.
a = [1 2 3 4]
trả lại
a = 1 2 3 4
Để tạo ma trận chứ nhiều hàng, ngăn cách các hàng bởi dấu chấm phẩy (;)
a = [1 2 3; 4 5 6; 7 8 10]
a =
1 2 3
4 5 6
7 8 10
Một cách khác để tạo các ma trận là sử dụng các hàm lệnh sẵn có trong thư viện của MATLAB, như ones,
zeros, rand…Ví dụ, tạo một ma trận 1 x 5 gồm các phần tử 0
z = zeros(1,5)
z = 0 0 0 0 0
Các phép toán với ma trận và mảng
MATLAB cho phép tính toán với tất cả các phần tử của ma trận chỉ bằng một phép toán hoặc hàm lệnh.
a + 10
ans =
11 12 13
5
14 15 16
17 18 20
sin(a)
ans =
0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
0.6570 0.9894 -0.5440
Để tính ma trận chuyển vị, dùng kí hiệu (‘):
a'
ans =
1 4 7
2 5 8
3 6 10
Phép nhân ma trận được thực hiện bằng toán tử *. Ví dụ, để kiểm tra tích của một ma trận với ma trận
nghịch đảo của nó bằng ma trận đơn vị:
p = a*inv(a)
p =
1.0000 0 -0.0000
0 1.0000 0
0 0 1.0000
Với các giá trị số dạng số thực, MATLAB cho phép lựa chọn các dạng format khác nhau để hiển thị các giá
trị sau dấu thập phân. Ví dụ, dạng format long:
format long
p = a*inv(a)
p =
1.000000000000000 0 -0.000000000000000
6
0 1.000000000000000 0
0 0 0.999999999999998
Trở lại thiết lập hiển thị rút gọn bằng câu lệnh
format short
Chú ý rằng lệnh format chỉ ảnh hưởng đến việc hiển thị và làm tròn kết quả, chứ không tác động đến giá trị
kết quả được lưu
Các phép toán nhân, chia, lũy thừa từng phần tử được thực hiện bằng các toán tử (.*), (./), (.^). Ví dụ:
p = a.*a
p =
1 4 9
16 25 36
49 64 100
a.^3
ans =
1 8 27
64 125 216
343 512 1000
Ghép nối ma trận
Ghép nối là quá trình nối các mảng để thu được mảng có kích thước lớn hơn. Thực tế, trong các phần trước
ta đã tạo ra các mảng bằng cách ghép nối các phần tử của mảng đó. Cặp ngoặc vuông [] chính là toán tử
ghép nối.
A = [a,a]
A =
1 2 3 1 2 3
4 5 6 4 5 6
7 8 10 7 8 10
7
Ghép các mảng sử dụng dấu phẩy (,) là nối ngang, các màng được nối ngang phải có cùng số dòng. Tương
tự, ghép các mảng sử dụng dấu (;) là nối dọc, các mảng được nối dọc phải có cùng số cột.
A = [a; a]
A =
1 2 3
4 5 6
7 8 10
1 2 3
4 5 6
7 8 10
Số phức
Số phức là số có hai phần thực và ảo. Phần ảo đơn vị là căn bậc 2 của -1
sqrt(-1)
ans = 0 + 1.0000i
Để biểu diễn phần ảo của các số phức, sử dụng hai kí tự i hoặc j
c = [3+4i, 4+3j, -i, 10j]
c = 3.0000 + 4.0000i 4.0000 + 3.0000i 0 - 1.0000i 0 +10.0000i
8
Chỉ số của mảng
Mỗi biến của MATLAB là một mảng có thể chứa nhiều phần tử. Khi muốn truy cập đến một số phẩn tử nào
đó của mảng, ta sử dụng các hàm lệnh chỉ số.
Ví dụ, xét A là ma trận magic vuông cấp 4:
A = magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Có hai cách để truy cập đến một phần tử của ma trận. Cách thông dụng là chỉ ra 2 chỉ số vị trí của phần tử đó
theo hàng và cột
A(4,2)
ans = 14
Cách ít thông dụng hơn, nhưng lại hữu dụng hơn trong vài trường hợp, là chỉ ra 1 chỉ số vị trí của phần tử đó
cộng dồn lần lượt theo các cột:
A(8)
ans =
14
Cách sử dụng 1 chỉ số vị trí được gọi là ‘linear indexing’.
Nếu ta truy cập đến một phần tử có chỉ số vị trí vượt quá kích thước của mảng trong phần bên phải của một
câu lệnh gán, MATLAB sẽ báo lỗi:
test = A(4,5)
Attempted to access A(4,5); index out of bounds because size(A)=[4,4].
Tuy nhiên, bên trái một câu lệnh gán, ta hoàn toàn có thể gán các giá trị cho các phần tử nằm bên ngoài
mảng đã có. Khi đó thì các kích thước của mảng sẽ được tự động thay đổi để chưa được phần tử mới.
9
A(4,5) = 17
A =
16 2 3 13 0
5 11 10 8 0
9 7 6 12 0
4 14 15 1 17
Để truy cập đến nhiều phần tử của một mảng, sử dụng dấu hai chấm (:) theo cấu trúc start:end. Dấu hai
chấm cho phép chỉ ra một khoảng giá trị truy cập. Ví dụ, để truy cập đến các phần tử của cột thứ 2 nằm trên
3 hàng đầu của ma trận A:
A(1:3,2)
ans =
2
11
7
Nếu dấu (:) đứng riêng lẻ, MATLAB sẽ truy cập đến tất cả các phần tử của kích thước đó. Ví dụ, truy cập
đến tất cả các cột của hàng thứ 3 của ma trận A:
A(3,:)
ans = 9 7 6 12 0
Dấu (:) cũng có thể được sử dụng để tạo các vecto gồm các phần tử cách đều, theo cấu trúc start:step:end, ví
dụ:
B = 0:10:100
B = 0 10 20 30 40 50 60 70 80 90 100
Nếu step không được xác định thì MATLAB sẽ gán cho step giá trị mặc định bằng 1
10
Các biến và Workspace
Workspace là không gian chứa các biến được tạo ra trong MATLAB hay import vào MATLAB từ các file
dữ liệu hay các chương trình khác. Ví dụ, các dòng lệnh sau sẽ tạo ra hai biến A và B trong Workspace:
A = magic(4);
B = rand(3,5,2);
Danh mục các biến của Workspace có thể được xem bằng lệnh whos.
whos
Name Size Bytes Class Attributes
A 4x4 128 double
B 3x5x2 192 double
Các biến cũng sẽ được liệt kê trong khung Workspace của cửa sổ chương trình:
Các biến của Workspace sẽ không được tự động lưu lại sau khi thoát khỏi chương trình. Để lưu lại dữ liệu
cho các lần sử dụng tiếp theo, sử dụng lệnh save
save myfile.mat
Câu lệnh trên sẽ lưu toàn bộ Workspace hiện tại thành một .MAT file.
Để xóa toàn bộ các biến trong Workspace, sử dụng lệnh clear.
Để gọi lại các biến đã lưu trong .MAT file, sử dụng lệnh load.
load myfile.mat
11
Chuỗi kí tự
Chuỗi kí tự là một dãy gồm các kí tự bất kì nằm trong dấu ngoặc đơn (‘’). Có thể gán một chuỗi kí tự cho giá
trị của một biến.
myText = 'Hello, world';
Sử dụng dấu ngoặc kép để thể hiện dấu ngoặc đơn trong chuỗi kí tự.
otherText = 'You''re right'
otherText = You're right
myText và otherText là các mảng, giống như mọi biến khác của MATLAB. Loại dữ liệu của chuỗi kí tự là
char, dạng viết gọn cho ‘character’.
whos myText
Name Size Bytes Class Attributes
myText 1x12 24 char
Có thể nối ghép các chuỗi kí tự bằng toán tử [] tương tự như với mảng thông thường.
longText = [myText,' - ',otherText]
longText = Hello, world - You're right
Để chuyển đổi các giá trị số thành chuỗi kí tự, sử dụng các hàm có sẵn trong MATLAB, ví dụ num2str,
int2str
f = 71;
c = (f-32)/1.8;
tempText = ['Temperature is ',num2str(c),'C']
tempText =Temperature is 21.6667C
12
Function
MATLAB cung cấp một lượng lớn các Function (hàm lệnh) có sẵn để thực hiện các tính toán hoặc nhu cầu
phổ biến của người dùng. Danh sách và mô tả của các Function của MATLAB có thể xem tại địa chỉ.
Khi đã biết tên gọi của một Funnction, có thể truy cập phần Help mô tả Function đó từ Command
Window bằng câu lệnh Help functionname
Ví dụ, giả sử ta có hai ma trận A và B
A = [1 3 5];
B = [10 6 4];
Khi gọi một Function, các biến input sẽ được đặt trong dấu ngoặc tròn ():
max(A);
Nếu có nhiều input thì chúng sẽ được ngăn cách bởi dấu phẩy (,)
max(A,B);
Giá trị output của một Function có thể được gán cho một biến khác:
maxA = max(A);
Khi có nhiều giá trị output, chúng sẽ được ngăn cách bởi dấu phẩy (,) và đặt trong ngoặc vuông []:
[maxA,location] = max(A);
Các biến input dạng chuỗi kí tự được đặt trong dấu ngoặc đơn (‘’)
disp('hello world');
Để gọi một Function không có biến input và không trả lại các giá trị output, chỉ cần nhập tên của Function
clc
Function clc sẽ xóa và trả lại Command Window trống.
13
Vẽ hình 2-D và 3-D
Vẽ hình 2-D
Để vẽ các đường 2-D, sử dụng lệnh plot. Ví dụ, để vẽ đồ thị hàm sin trong khoảng [0, 2π]:
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
Có thể dán nhãn cho các trục tọa độ và đặt tên cho đồ thị
xlabel('x')
ylabel('sin(x)')
title('Plot of the Sine Function')
14
Có thể thay đổi các thiết lập cho đồ thị bằng cách nhập thêm các giá trị định dạng cho đồ thị. Ví dụ câu lệnh
sau sẽ cho đồ thị là đường màu đỏ gạch rời.
plot(x,y,'r--')
Chuỗi 'r--' là chuỗi định dạng của đồ thị. Mỗi chuỗi định dạng có thể bao gồm các giá trị về màu sắc, loại
đường, và loại điểm đánh dấu. Điểm đánh dấu là những điểm sẽ được đánh dấu trên các đồ thị bằng các kí
hiệu như +, o hay *. Ví dụ ‘g:*’ sẽ là định dạng của một đường màu xanh nét chấm với các điểm đánh dấu
dạng *
Chú ý rằng tên đồ thị và nhãn của các trục tọa độ được đặt cho đồ thị thứ nhất sẽ không xuất hiện trong đồ
thị tiếp theo. Một cách mặc định, MATLAB sẽ xóa các đồ thị cũ khi một lệnh plot mới được gọi, đồng thời
khởi tạo lại các trục tọa độ cũng như các yếu tố khác cho đồ thị mới.
Để vẽ thêm các đường mới vào đồ thị đã có, sử dụng lệnh hold
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
hold on
y2 = cos(x);
plot(x,y2,'r:')
legend('sin','cos')
15
Cho đến khi có lệnh hold off, tất cả các đường được vẽ sẽ cùng hiển thị trong đồ thị hiện thời.
Vẽ hình 3-D
Một đồ thị 3-D cơ bản là một mặt biều thị cho một hàm 2 biến z = f (x,y).
Để tính z, đầu tiên ta tạo một tập các điểm tọa độ (x,y) bằng lệnh meshgrid
[X,Y] = meshgrid(-2:.2:2);
Z = X .* exp(-X.^2 - Y.^2);
Sau đó vẽ mặt bằng lệnh surf
surf(X,Y,Z)
Hai lệnh vẽ hình 3-D cơ bản là surf và mesh. Trong khi surf tô màu cả các đường và các ô của mặt thì mesh
chỉ tô màu các đường và cho kết quả hình vẽ dạng khung.
16
Vẽ đồ thị con
Có thể vẽ được nhiều đồ thị trong các miền con của một hình vẽ bằng cách sử dụng lệnh subplot.
Ví dụ, đoạn lệnh sau sẽ vẽ 4 đồ thị trong một khung hình được chia làm 4 miền con:
t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(4*cos(t));
subplot(2,2,1); mesh(X); title('X');
subplot(2,2,2); mesh(Y); title('Y');
subplot(2,2,3); mesh(Z); title('Z');
subplot(2,2,4); mesh(X,Y,Z); title('X,Y,Z');
Hai giá trị đầu trong các input của subplot chỉ kích thước theo hai chiều ngang dọc của khung hình. Giá trị
thứ ba chỉ ra miền con sẽ được sử dụng để vẽ đồ thị.
17
Script
Một chương trình MATLAB đơn giản nhất được gọi là một tập lệnh (Script). Script là một .M file với nội
dung là một chuỗi các dòng lệnh gán biến và gọi hàm của MATLAB. Thực thi một Script bằng cách nhập
tên của nó vào dòng lệnh.
Ví dụ về Script
Để tạo một Script mới, dùng lệnh edit
edit plotrand
Câu lệnh trên sẽ tạo ra một file trống có tên plotrand.m. Nhập một số dòng lệnh đơn giản vẽ một vecto
nhận các giá trị ngẫu nhiên
n = 50;
r = rand(n,1);
plot(r)
Sau đó, thêm các dòng lệnh vẽ đường nằm ngang đi qua giá trị trung bình:
m = mean(r);
hold on
plot([0,n],[m,m])
hold off
title('Mean of Random Uniform Data')
Một điều nên làm trong khi viết code là thêm các dòng chú thích để mô tả các phần chương trình được viết.
Các dòng chú thích được bắt đầu bằng dấu %.
% Generate random data from a uniform distribution
% and calculate the mean. Plot the data and the mean.
n = 50; % 50 data points
r = rand(n,1);
plot(r)
% Draw a line from (0,m) to (n,m)
m = mean(r);
hold on
plot([0,n],[m,m])
hold off
title('Mean of Random Uniform
Lưu Script trong Folder hiện thời. Đ
plotrand
Cách khác để chạy một Script là click nút
Vòng lặp và các câu lệnh có điều kiệ
Trong một Script có thể có các vòng l
Ví dụ, tạo một Script có tên calcmaen.m
giá trị trung bình của các lần tính toán.
nsamples = 5;
npoints = 50;
for k = 1:nsamples
currentData = rand(npoints,1);
sampleMean(k) = mean(currentData);
end
overallMean = mean(sampleMean)
Bây giờ, thay đổi các câu lệnh bằng cách bỏ đ ấ ố ệ
trung bình sau mỗi lần tính toán trong vòng l
tự của lần tính toán.
for k = 1:nsamples
iterationString = ['Iteration #'
disp(iterationString)
currentData = rand(npoints,1);
sampleMean(k) = mean(currentData)
18
Data')
ể gọi một Script, chỉ cần nhập tên của nó vào dòng l
Run trong cửa sổ Editor.
n
ặp và khối lệnh có điều kiện như for, if, và s
để tính giá trị trung bình của 5 giá trị ngẫ
i d u (;) cu i câu l nh tính sampleMean
ặp, đồng thời hiển thị trong cửa sổ Command
,int2str(k)];
ệnh.
witch.
u nhiên, rồi sau đó tính
để hiển thị các giá trị
Window số thứ
19
end
overallMean = mean(sampleMean)
Với thay đổi này, khi gọi Script calcmean, kết quả sẽ hiển thi như bên dưới.
calcmean
Iteration #1
sampleMean = 0.3988
Iteration #2
sampleMean = 0.3988 0.4950
Iteration #3
sampleMean = 0.3988 0.4950 0.5365
Iteration #4
sampleMean = 0.3988 0.4950 0.5365 0.4870
Iteration #5
sampleMean = 0.3988 0.4950 0.5365 0.4870 0.5501
overallMean = 0.4935
Sửa đổi thêm Script: Trong cửa sổ Editor, thêm vào đoạn lệnh có điều kiện ở cuối caclmean.m để hiển thị
thông báo về sự sai khác của giá trị overallMean:
if overallMean < .49
disp('Mean is less than expected')
elseif overallMean > .51
disp('Mean is greater than expected')
else
disp('Mean is within the expected range')
end
Gọi caclmean để xem kết quả của đoạn lệnh vừa bổ sung:
overallMean = 0.5178
Mean is greater than expected
Địa chỉ của Script
20
MATLAB sẽ chỉ truy cập được các Script hay các dữ liệu khác ở một khu vực được chỉ định của ổ cứng. Để
gọi một Script thì.M file của Script đó phải nằm trong Folder hiện hành (được hiển thị tro