start on 5/8/2001 If you keep anything long enough, you can throw it away.
Matlab
part I
Basis and languge
Phần 1. Nhập môn về ngôn ngữ Matlab
Chương 1. Các khái niệm cơ bản.
1.1 Khởi động matlab (trong windows 9x).
1.2 Các phím chuyên dụng và các lệnh thông dụng hệ thống.
1.3 Biến và thao tác biến
1.4 Số phức
1.5 Làm việc ở chế độ hội thoại (command window).
1.6 Làm việc ở chế độ soạn chương trình (edit window).
1.7 Sơ lược về đồ hoạ.
1.8 Các hàm âm thanh.
Chương 2. Ma trận và các phép toán ma trận
2.1 Vô hướng, vector và ma trận.
2.2 Các ma trận đặc biệt.
2.3 Các phép toán vô hướng
2.4 Các phép toán ma trận
Chương 3. Lập trình trong Matlab
3.1 Các phần tử cơ bản
3.2 Hàm và tạo hàm
3.3 Câu lệnh Cấu trúc
Chương 4. Đồ hoạ 2 chiều
4.1 Các phép biến đổi đồ hoạ.
4.2 Phép biến đổi Affine trong mặt phẳng
4.3. Các hàm chuẩn đồ hoạ 2 chiều
Chương 5. Đồ hoạ không gian 3D
5.1. Hàm đồng mức (contour).
5.2. Chia lưới.
5.3. Đồ hoạ 3D.
5.4. Mặt lưới đồ hoạ 3D.
5.5. Đồ hoạ bề mặt.
5.6. Điểm nhìn và phép phối cảnh.
5.7. Mặt cắt (slice).
5.8. Mầu sắc và các hệ màu
part II
matlab symbolic
part III
numerical method
Page 1 of 61
Basic concepts
ma trận (matrix):
véc tơ (vector):
vô hướng (scalar):
kiểu khối(cell):
Page 2 of 61
Phần I
Nhập môn về ngôn ngữ Matlab
Giới thiệu
-Matlab là phần mềm của công ty Math Works cộng hoà Séc.
-Công dụng : Matlab là chương trình phần mềm trợ giúp cho việc tính toán và hiển thị
các bài toán kỹ thuật. Matlab được điều khiển bởi tập hợp các lệnh, tác động qua bàn
phím trên cửa sổ điều khiển (Command Window). Nó cũng cho phép một khả năng
lập trình với thông dịch tập hợp lệnh-lập trình scrip file.
-Matlab là viết tắt của từ Matrix Laboratory.
-Đặc điểm của ngôn ngữ Matlab:
+Xử lý các ma trận thực, phức, các xâu kí tự.
+Kết hợp phép tính logic với số học
+Các hàm đồ hoạ mạnh và dễ dàng kết hợp với quá trình tính toán.
+Hỗ trợ các công cụ mạnh cho các ứng dụng cụ thể
-Chế độ làm việc:
+Hội thoại người-máy (user-machine at command window): Cho phép nhập
lệnh từ bàn phím và thu được các kết quả sử lýlệnh từ máy tính.
+Chế độ lập trình: Các lệnh được chuẩn bị trên một file chương trình và cho
phép chạy chương trình từ các file lệnh này.
-Có nhiều phiên bản khác nhau (versions), cho phép chạy trên các máy tính có hệ
điều hành khác nhau như DOS, UNIX, APPLE, WINDOWS, LINUX
-Với Matlab, các vấn đề cần giải quyết của bạn sẽ được phân tích và xử lý theo 5
bước như sau
[1]
:
Bước 1: Đặt vấn đề.
Bài toán đặt ra cần được phân tích, biểu diễn một cách rõ ràng và cụ
thể. Đây là bước mở đầu rất quan trọng, nó quyết định toàn bộ hướng
giải quyết tiếp theo của bài toán đặt ra.
Bước 2: Mô tả các giá trị dữ liệu vào/ra.
Việc mô tả các thông tin cần giải đáp có liên quan trực tiếp đến các
tham số được sử dụng trong quá trình tính toán, bởi vậy bước này cần
được tiến hành cẩn trọng. Trong nhiều trường hợp, sơ đồ khối được sử
dụng để xác định vị trí luồng vào/ra, tuy nhiên đôi khi chúng chỉ là hộp
đen vì không thể xác định được luồng ra tại một điểm nào đó trong
các bước. Mặc dầu vậy, ta vẫn chỉ ra được những thông tin để tính toán
luồng ra.
Bước 3: Các tính toán bằng tay với các tập dữ liệu đầu vào đơn giản
Đây là bước để nhằm tìm kiếm những giải pháp cụ thể, bạn không nên
bỏ qua kể cả đối với các bài toán đơn giản. Nếu trong bước này bạn
chưa lấy được dữ liệu hay chưa tính được đầu ra thì có thể chuyển sang
bước kế tiếp.
Bước 4: Chuyển bài toán sang giải pháp bằng Matlab.
ở bước này bạn sẽ sử dụng các hàm toán, cũng là các lệnh để mô tả bài
Page 3 of 61
toán theo Matlab
Bước 5: Kiểm tra.
Đây là bước cuối cùng trong tiến trình giải bài toán. Bài toán được
kiểm tra bằng các dữ liệu đầu vào. Matlab thực hiện bài toán và cho
bạn kết quả ở đầu ra.
Trong trường hợp không có kết quả hoặc kết quả sai thì điều đó có nghĩa là
Matlab chưa thực hiện được bài toán, bạn cần kiểm tra lại cả tính toán bằng
tay và thao tác bằng Matlab.
Page 4 of 61
Chương 1
Các khái niệm cơ bản
1.1Khởi động matlab (trong windows 9x).
-Khới động matlab: Kích chuột vào nút Start chọn Program chọn Matlab
chọn Matlab 5.3 hoặc kích chuột vào biểu tượng của Matlab trên Desktop.
-Giao diện của Matlab gồm :
+Một cửa sổ lệnh
(command window)
+Một cửa sổ soạn thảo
(edit window)
+Nhiều cửa số đồ hoạ
(figures)
-Việc ngắt chương trình đang thực hiện không đúng theo yêu cầu thông qua phím
nóng Ctrl+C .
-Để thoát ra khỏi môi trường làm việc Matlab, chúng ta có thể sử dụng các lệnh của
Matlab là : ằ quit hoặc ằ exit
1.2Các phím chuyên dụng và các lệnh thông dụng hệ thống.
Các phím lệnh thông dụng:
↑ hoặc Ctrl-p
Gọi lại lệnh vừa thực hiện trước đó.
↓ hoặc Ctrl-n
Gọi lại lệnh đã đánh vào trước đó.
→ hoặc Ctrl-f
Chuyển con trỏ sang phải 1 kí tự.
← hoặc Ctrl-b
Chuyển con trỏ sang trái 1 kí tự.
Ctrl-l hoặc Ctrl-←
Chuyển con trỏ sang trái 1 từ.
Ctrl-r hoặc Ctrl-→
Chuyển con trỏ sang phải 1 từ.
Ctr-a hoặc Home
Chuyển con trỏ về đầu dòng.
Ctrl-k
Xoá từ con trỏ đến cuối dòng.
Back Space
Xoá kí tự trước con trỏ.
Del
Xoá kí tự tại vị trí con trỏ.
Các lệnh hệ thống:
clc
Xoá toàn bộ cửa sổ dòng lệnh.
clf
Xoá cửa sổ đồ hoạ
computer
Lệnh in dòng kí tự cho biết loại máy tính.
ctrl-c
Dừng chương trình khi rơi vào tình trạng lặp vô hạn.
demo
Lệnh cho xem các chương trình mẫu.
exit,quit
Thoát khỏi môi trường Matlab.
help
Lệnh xem trợ giúp về ngôn ngữ, hàm,…
input
Nhập dữ liệu từ bàn phím
load
Tải các biến lưu trong 1 file đưa vào vùng làm việc.
pause
Lệnh tạm thời dừng chương trình đến phím bất kì được nhấn.
save
Lưu giữ các biến vào file Matlab.mat
version
Cho biết phiên bản hiện tại của Matlab.
ver
Cho biết phiên bản hiện tại của các toolbox đã có.
what
Cho biết danh sách Matlab-file thư mục hiện tại.
which
Cho biết đường dẫn của 'file_name'.
Page 5 of 61
1.3Biến và thao tác biến.
1.3.1 Biến trong Matlab.
Tên biến trong Matlab (từ 5.3 trở đi) có thể dài tới 31 kí tự bao gồm các chữ cái
A-Z hay a-z cùng các chữ số và dấu gạch dưới '_', tên phải được bắt đầu bằng chữ cái,
tên biến không được đặt trùng với tên các từ khoá. Tên các hàm đã được đặt cũng có
thể được sử dụng làm tên của biến, và hàm này sẽ mất tác dụng cho đến khi biến đó
được xoá.
Các hàm tác động lên biến:
clear all
Xoá tất cả các biến hiện có trong vùng nhớ.
clear name2,name2,
Chỉ xoá các biến có tên chỉ định.
exist('name')
Trả về định nghĩa của 'name':
0 nếu 'name' không tồn tại.
1 nếu 'name' là biến.
2 nếu 'name' là tên m-file.
3 nếu 'name' là MEX-file.
4 nếu 'name' là MDL-file.
5 nếu 'name' hàm built-in.
6 nếu 'name' là P-file.
7 nếu 'name' là tên thư mục.
pack
Lệnh thực hiện sắp xếp lại vùng nhớ cho các
biến. Khi bộ nhớ máy tính đầy, lệnh pack
cho phép tạo ra thêm vùng nhớ cho biến mà
không phải xoá các biến đã tồn tại.
who
Hiển thị tên các biến.
whos
Hiển thị tên và kiểu các biến.
who global
Hiển thị các biến cục bộ.
who -file 'filename'
Hiển thị các biến trong têp filename.mat.
1.3.2 Kích thước của biến.
Độ lớn, hay chiều dài của biến vector cũng như ma trận được xác qua các hàm
có sẵn của Matlab.
size(A) Trả về vector 2 phần tử, phần tử đầu cho biết số hàng của
ma trận, phần tử đầu cho biết số cột của ma trận
[m,n]=size(A) Trả giá trị độ lớn của ma trận, m-số hàng, n-số cột.
size(A,p)
Trả về số hàng nếu p=1 và số cột nếu p≥2.
length(x) Trả về giá trị số lượng phần tử của x.
length(A) Trả giá về trị max(m,n) với [m,n]=size(A).
1.3.3 Một số biến được định nghĩa trước.
ans Biến có sẵn được dùng lưu kết quả phép tính cuối cùng.
eps Trả về độ chính xác tương đối tính toán của máy xác định khoảng từ
1.0 đến số phảy động lớn nhất tiếp theo. EPS được sử dụng là sai số
cho phép mặc định của pinv, rank và các hàm khác.
pi Trả về trị 3.1415926535897…
Page 6 of 61
realmax Cho biết giá trị lớn nh
ất máy tính có thể tính toán được, các số lớn hơn giá trị này sẽ gây
tràn trên.
realmin Cho biết giá trị nhỏ nhất máy tính có thể tính toán được, các số lớn
bé giá trị này sẽ gây tràn dưới.
inf
biểu diễn số vô cùng ∝
NaN
biểu diễn kết quả 0/0, ∝-∝
1.4Số phức.
1.4.1 Các phép toán đối với số phức.
Cho các số phức z
1
=a
1
+i*b
1
, z
2
=a
2
+i*b
2
, với a
1
,a
2
,b
1
,b
2
là các số thực.
Phép toán Kết quả
z
1
±z
2
(a
1
+a
2
)±i(b
1
+b
2
)
z
1
*z
2
(a
1
*a
2
-b
1
*b
2
)+i(a
1
*b
2
+a
2
*b
1
)
2
1
z
z
2
2
2
2
21122121
)*()**(
ba
babaibbaa
+
−++
|z
1
|
2
1
2
1
ba +
Độ lớn (magnitude)hay modul của số phức.
z
1
* a
1
-ib
1
Số phức liên hợp.
1.4.2 Một số hàm đặc biệt của số phức.
real(a+i*b) Hàm cho giá trị phần thực a của số phức.
imag(a+i*b) Hàm cho giá trị phần ảo b của số phức.
conj(a+i*b) Hàm trả về số phức liên hợp a-i*b.
abs(a
1
+i*b
1
)
Trả về modul
2
1
2
1
ba +
của số phức
angle(a+i*b)
Tính góc có giá trị là atan2(b,a), giá trị góc ∈[−π,π]
1.4.3 Toạ độ biểu diễn số phức.
Ta có thể biểu diễn số phức a+i*b trên hệ trục toạ độ. Đối với hệ trục toạ độ
đềcác phần thực được biểu diễn trên trục x: x=a, phần ảo được biểu diễn trên trục y:
y=b. Đối với hệ toạ độ cực, số phức được biểu diễn bởi ρ,θ.
Trong đó:
.tan
,
1
22
a
b
ba
−
=
+=
θ
ρ
ngược lại:
).sin(
),cos(
θρ
θρ
=
=
b
a
Trong hệ toạ độ cực: độ lớn (magnitude) và pha (phase) của số phức sẽ được
tính toán như sau:
>>r=abs(z);
>>theta=angle(z);
Page 7 of 61
(a,b)
y
a
x
b
θ
ρ
Hình Biểu diễn số phức
Biểu diễn số phức theo độ lớn và phase như sau:
>>z=r*axp(i*theta);
Trong hệ toạ độ đềcác, phần thực (real) và phần ảo (imaginary) se được tính
toán như sau:
>>a=real(z);
>>b=imag(z);
Biểu diễn số phức:
>>z=a+i*b;
1.5Làm việc ở chế độ hội thoại (command window).
-Tại dấu mời ằ gõ dòng lệnh, dòng lệnh sẽ được thực hiện ngay lập tức sau khi nhấn
phím Enter ↵ . Kết quả sẽ được đưa ra cửa sổ lệnh hoặc cửa sổ đồ hoạ. Nếu có lỗi,
lỗi sẽ được ghi ngay tại cửa sổ lệnh.
-Qui tắc viết dòng lệnh:
+Trên 1 dòng có thể viết nhiều lệnh, các lệnh được phân cách bởi dấu ',' hoặc ';'.
Nếu kết quả lệnh trả về giá trị số và kết thúc bởi dấu ',' kết quả sẽ được in trên cửa sổ
lệnh, còn nếu kết thúc bởi dấu ';' kết quả sẽ không được in ra. Với các lệnh không trả
về biến nào, dấu phân cách lệnh ',' và ';' là như nhau.
+Khi lệnh quá dài, hoặc muốn viết trên nhiều dòng lệnh dùng dấu để matlab
nhận dòng tiềp theo.
-Chỉ nên sử dụng chế độ hội thoại khi giải bài toán có cấu trúc đơn giản. Còn với bài
toán có cấu trúc phức tạp nên sử dụng chế độ lập trình.
Ví dụ : Giải phương trình 3x
2
-2x-1=0; và ax
2
+bx+c=0;
ằ eq=[3 -2 -1];
ằ n0=roots(eq)
n0 =
1.0000
-0.3333
ằ syms a b c x;
ằ eq=a*x^2+b*x+c;
ằ n0=solve(eq,x)
n0 =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
1.6Làm vệc ở chế độ viết chương trình.
-Tại cửa sổ lệnh (Command Window) chọn File menu New m-file để vào chế
độ soạn thảo viết chương trình. Hoặc mở m-file có sẵn để sửa, chọn File menu
Open chọn m-file cần sửa,
hoặc viết tại cửa sổ lệnh dòng lệnh ằ edit filename.
-Chạy file chương trình đã soạn thảo: Có 3 cách.
+Chạy ngay tại cửa sổ soạn thảo: Tool menu Run , chỉ dùng được khi file
được lưu (Save) vào thư mục hiện tại (current path).
+Chạy trong cửa sổ lệnh: >>edit tên_m_file ↵ .
+Chạy trong cửa sổ lệnh: File menu Run Script viết tên file, hoặc chọn
Browse để tìm m-file cần chạy.
Page 8 of 61
1.7Sơ lược về đồ họa.
1.7.1 Các lệnh đồ hoạ thông dụng.
Khả năng đồ hoạ trong Matlab rất phong phú cho phép vẽ hầu hết các dạng đồ
thị và các dạng biểu đồ cho các thông tin trong mặt phẳng (2D) và trong không gian
(3D).
các lệnh đồ hoạ đơn giản:
plot(x1,y1,s1,x2,y2,s2,.
.)
Vẽ các đồ thị trong mặt phẳng toạ độ đềcác
với kiểu đường chỉ định trong s1,s2
plot(y)
Nếu y là dãy số thực≡plot(i=1:length(y),y).
nếu y là số phức≡plot(real(y),imag(y)).
plot3(x1,y1,z1,s1, ) Vẽ các đồ thị trong không gian toạ độ đềcác
với kiểu đường chỉ định trong s1,
title('tiêu đề đồ thị') Đưa tiêu đề đồ thị.
xlabel, ylabel, zlabel Đưa vào các nhãn cho các trục x, y, z.
legend Lệnh đưa vào chú thích đường vẽ.
grid Lệnh vẽ các đường dóng trên đồ thị.
Ví dụ:
ằ t=linspace(0,2*pi,40);
ằ plot3(sin(t),t.*cos(t),t);
ằ title('Vi du ve ham 3D');
ằ xlabel('x'),ylabel('axis y'),
ằ zlabel('t'), grid on;
1.7.2 In ấn trên cửa sổ đồ hoạ.
Việc in các ảnh đồ hoạ có thể thực
hiện thông qua các menu lệnh trên cửa sổ đồ hoạ hoặc các lệnh của Matlab.
>>print; %In cửa sổ đồ hoạ hiện thời ra máy in.
>>print filename % In cửa sổ đồ hoạ hiện thời ra tệp filename.fig.
1.7.3 Một vài ví dụ minh hoạ.
Vẽ đồ thị các hàm y=sin(x), y=x*cos(x), y=ln(x
2
+1) trong khoảng -2≤x≤2.
ằ x=linspace(-2,2);
ằ y1=sin(x);y2=x.*cos(x);y3=log(x.^2+1);
ằ plot(x,y1,x,y2,x,y3);
ằ legend('sin(x)','xcos(x)','ln(x^2+1)');
Page 9 of 61
-1
-0.5
0
0.5
1
-5
0
5
10
0
2
4
6
8
x
Vi du ve ham 3D
axis y
t
Hình Đồ thị không gian 3D
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
-1
-0.5
0
0.5
1
1.5
2
sin(x)
xcos(x)
ln(x
2
+1)
Vẽ đường cong tham số cho bởi phương trình:
++=
+−=
;13
;13
3
3
tty
ttx
ằ t=linspace(-2.5,2.5);x=t.^3-3*t+1;y=t.^3+3*t-1;
ằ plot(x,y);grid on;axis tight;
ằ xlabel('x'); ylabel('y');title('Do thi duong cong tham so');
Vẽ phổ màu của mặt
,)3(),(
)(22
22
yx
eyxyxfz
+−
−==
trong không gian 2D.
ằ [x,y]=meshgrid(linspace(-2,2));
ằ z=(x.^2-3*y.^2).*exp(-(x.^2+y.^2));pcolor(x,y,z);
ằ shading interp; colorbar;
Page 10 of 61
-6 -4 -2 0 2 4 6 8
-20
-15
-10
-5
0
5
10
15
20
x
y
Do thi duong cong tham so
Hình
Hình
1.8Các hàm âm thanh.
Matlab cho phép tạo âm thanh thông qua các vector bởi hàm sound().
sound(v)
Tạo tín hiệu từ vector v ra âm thanh, vector v phải
được chuẩn hoá -1≤y≤1, các giá trị ngoài khoảng sẽ
bị cắt, tốc độ mẫu mặc định là 8192Hz. Muốn có
âm thanh stereo v là vector 2 cột.
sound(v,fs)
Thực hiện như hàm sound(v) với f là dải tần Hz.
sound(y,fs,bits)
Tạo âm thanh với tốc độ mẫu bits/mẫu nếu có khả
năng. Hầu hết các thiết bị cho phép bits=8 hay 16.
soundsc(v,slim)
Tương tự sound() nhưng sẽ tạo âm thamh với giá trị
số bất kì của v, v sẽ được chuẩn hoá theo
slim=[slow s high], mặc định slim=[min(v) max(v)]
Page 11 of 61
chương 2
Ma trận và các phép toán ma trận
2.1Vô hướng, vector và ma trận.
Ma trận (matrix) là 1 bảng số mà các phần tử của nó được sắp xếp theo hàng và
cột. Ma trận chỉ có một hàng hoặc một cột được gọi là véc tơ (vector). Ma trận chỉ có
một hàng và một cột được gọi là đại lượng vô hướng (scalar).
Kí hiệu toán học ma trận và vector:
Ma trận (mxn)
Vector cột v
c
, vector hàng v
r
=
mnmm
n
n
mn
aaa
aaa
aaa
A
21
22221
11211
=
q
c
v
v
v
v
2
1
( )
pr
vvvv
21
=
Với a
ij
(i=1 n; j=1 m), v
k
(k=1 q; k=1.p) là các trị vô hướng.
Kích thước của ma trận thể hiện bằng kí hiệu (mxn), nghĩa là có m hàng
và n cột.
kích thước của vector v
r
là (1xp), của v
c
là (qx1), của vô hướng là (1x1).
Độ lớn hay chiều dài của vector v
r
là p, của v
c
là q.
Để cho tiện từ đây về sau gọi ma trận đại diện cho vector hay vô hướng.
2.1.1Nhập giá trị cho ma trận.
Có 4 cách vào dữ liệu cho các biến ma trận.
+Liệt kê trực tiếp các phần tử của ma trận.
+Đọc dữ liệu từ một file dữ liệu.
+Sử dụng toán tử (:).
+Vào dữ liệu trực tiếp từ bàn phím.
Qui tắc định nghĩa ma trận trong Matlab:
Tên_matrận=[a
11
,a
12
,a
13
; a
21
a
22
,a
23
; a
31
a
32
a
33
];
+Tên_matrận đặt theo qui cách tên biến.
+Nội dung trong ngoặc vuông [ ] để định nghĩa các phần tử.
+Dấu chấm phẩy (;) dùng để phân cách các hàng. Các giá trị trong hàng
được phân cách bởi dấu phẩy (,), hoặc dấu cách (space bar).
Ma trận rỗng được kí hiệu là [ ].
a. Liệt kê trực tiếp.
Là cách định nghĩa đơn giản nhất. Các phần tử được liệt kê trong dấu ngoặc
vuông.
>>c=5.8978; %vô hướng
>>b=[1.2 -2 3.01 4+i*3.234]; %vector hàng
>>e=[-2;3;i]; %vector cột
>>A=[1 0 0; 0 1 0; 0 0 1]; %ma trận 3x3
Có thể xuống dòng để phân biệt từng hàng của ma trận.
>>e=[-2
3
i];
>>A=[1 0 0
Page 12 of 61
0 1 0
0 0 1];
Có thể định nghĩa ma trận từ các phần tử khác.
>>a=[1 2.4 -4.7];
>>b=[1.3 -34.67 a];
>>A=[a;a];
Ma trận b có giá trị là [1.3 -34.67 1 2.4 -4.7];
Ma trận A có giá trị là[1 2.4 -4.7;1 2.4 -4.7];
Truy cập các phần tử của ma trận bằng cách sử dụng chỉ số của nó:
>>s=a(3); %s có giá trị là -4.7
>>a(1)=3.14; %phần tử thứ nhất của a thay đổi từ 1 thành 3.14
Cũng có thể mở rộng ma trận bằng cách thêm cho nó phẩn tử mới. Cho câu lệnh
sau: >>a(4)=-1.98;
ma trận a lúc này sẽ có 4 phần tử a=[1 2.4 -4.7 -1.98];
còn với câu lệnh:
>>a(7)=2.07;
thì ma trận a sẽ có 7 phần tử, các phần tử a(5), a(6) sẽ tự động nhận giá trị là 0.
b. Đọc dữ liệu từ 1 file dữ liệu.
Sử dụng hàm load để tải dữ liệu từ các biến đã được tạo trước đó.
c. Sử dụng toán tử (:). xem '2.4.4 Các thao tác ma trận'
d. Vào số liệu trực tiếp từ bàn phím.
Sử dụng cú pháp nhập dữ liệu từ bàn phím như sau:
>>A=input('Nhập dữ liệu cho A: ');
Khi thực hiện lệnh này máy sẽ hiển thị xâu kí tự 'Nhập dữ liệu của A: ' và đợi
người sử dụng nhập số liệu vào. Nội dung nhập liệu tương tự câu lệnh thông thường
cho ma trận, và cell.
2.1.2 Hiển thị ma trận.
Matlab cho phép hiển thị ma trận số theo nhiều dạng khác nhau và cung cấp
nhiều hàm để xử lý việc hiển thị ma trận số.
Các dạng thức (format) biểu diễn số:
format short Số dấu phẩy cố định, với 5 chữ số có nghĩa sau dấu phảy
format long Số dấu phẩy cố định, với 15 chữ số có nghĩa sau dấu
phảy
format short e Số dấu phẩy động, với 5 chữ số có nghĩa sau dấu phảy
format long e Số dấu phẩy động, với 15 chữ số có nghĩa sau dấu phảy
format short g Lựa chọn tốt nhất phẩy cố định hay động với 5 chữ số có
nghĩa sau dấu phảy
format long g Lựa chọn tốt nhất phẩy cố định hay động với 15 chữ số
có nghĩa sau dấu phảy
format rat Biểu thị số thực về số hữu tỉ gần nhất.
disp Hiển thị nội dung của biến.
fprintf Hàm cho phép hiển thị theo các khuôn dạng chỉ định.
sprintf Hàm trả về xâu kí tự in theo các khuôn dạng chỉ định.
Page 13 of 61
2.2 Các ma trận đặc biệt.
Matlab cung cấp nhiều hàm lưu các hằng cho phép sinh ma trận có dạng đặc
biệt.
Ma trận mxn
Giải thích
Ma trận vuông nxn
rezos(m,n)
ma trận không
rezos(n)
ones(m,n)
ma trận đơn vị
ones(n)
eye(m,n)
ma trân đơn vị đường chéo mở rộng
eye(n)
rand(m,n)
ma trận ngẫu nhiên phân bố đều ∈ (0,1)
rand(n)
randn(m,n) ma trận ngẫu nhiên phân bố chuẩn
thuộc (-1,1) .
randn(n)
linspace(a,b,n)
tạo vectơ n phần tử cách đều từ a đến b, măc định n=100;
logspace(a,b,n)
vectơ n phần tử hàm mũ thập phân từ 10
a
đến 10
b
, mặc định n=50;
magic(n) sinh ma trận ma phương cấp n
pascal(n) sinh ma trận Pascal
compan(p) sinh ma trận có đa thức đặc trưng p
[out1,out2, ] = gallery(matname, param1, param2, )% Xem help gallery.
hadamard, hankel,hilb, invhilb, kron, roserr, toeplitz,vander, wilkinson.
2.3 Các phép toán vô hướng
2.3.1Biểu thức số học cho vô hướng.
Phép toán Biểu thức số học Matlab
Cộng a+b a+b
Trừ a-b a-b
Nhân a.b a*b
Chia a/b a/b
Chia trái b:a a\b
Luỹ thừa a
b
a^b
2.3.2 Thứ tự ưu tiên các toán tử.
Khi một số toán tử kết hợp trong biểu thức, điều quan trọng nhất là phải biết thứ
tự ưu tiên các toán tử trong biểu thức.
Thứ tự ưu tiên Toán tử
1 Ngoặc đơn ().
2 Gọi hàm.
3 Luỹ thừa.
4 Nhân, chia từ trái qua phải.
5 Cộng, trừ từ trái qua phải.
2.3.3 Các phép toán vector.
Phép toán Công thức Matlab
Cộng a+b a+b
Trừ a-b a-b
Nhân mảng a.b a.*b
Chia phải mảng a/b a./b
Chia trái mảng a\b a.\b
Page 14 of 61
Luỹ thừa mảng a
b
a.^b
Các phép toán trên áp dụng cho các ma trận cùng kích thước, hoặc ma trận với
vô hướng.
Ví dụ:
A=[1 2 3;7 -6 5;3 0 -1];
B=[1.1 2.4 5.6;-1 -3.6 8;-3 2 -1];
a=[1 2 7 -2];
b=[1 0 2 2];
c=2;
A.*B
ans =
1.1000 4.8000 16.8000
-7.0000 21.6000 40.0000
-9.0000 0 1.0000
a.*b
ans =
1 0 14 -4
a./b
Warning: Divide by zero.
ans =
1.0000 Inf 3.5000 -1.0000
b.\a
ans =
1.0000 0 0.2857 -1.0000
a.^b
ans =
1 1 49 4
A.^B
ans =
1.0e+005 *
0.0000 0.0001 0.0047
0.0000 0.0000 + 0.0000i 3.9063
0.0000 0 -0.0000
A.^c
ans =
1 4 9
49 36 25
9 0 1
A+B
ans =
2.1000 4.4000 8.6000
6.0000 -9.6000 13.0000
0 2.0000 -2.0000
B+c
ans =
3.1000 4.4000 7.6000
1.0000 -1.6000 10.0000
-1.0000 4.0000 1.0000
a+b
ans =
2 2 9 0
b.^c
ans =
1 0 4 4
c.^a
ans =
2.0000 4.0000 128.0000 0.2500
a+c
ans =
3 4 9 0
c./a
ans =
2.0000 1.0000 0.2857 -1.0000
2.4 Các phép toán ma trận
2.4.1 Các phép toán ma trận.
Phép toán Công thức Matlab
Chuyển vị B
nm
=A
T
mn
với
B={b
ịj
=a
ji
}
nm
A.'
Chuyển vị và lấy liên hợp
phức
B
nm
=A
T
mn
với
B={b
ịj
=a*
ji
}
nm
A'
Cộng, trừ
{a
ij
±b
ij
}
mn
=A
mn
±B
mn
A±B
Nhân
{
∑
=
=
n
k
kjikij
bac
1
}
mp
=A
mn
*B
np
A*B
Chia phải C
np
=A
mn
/B
pm
A/B
Chia trái C
qn
=A
pq
\B
pn
A\B
Page 15 of 61
Luỹ thừa ma trận
A
p
nn
, (p-nguyên)
A^p
Ma trận nghịch đảo
A
-1
nn
inv(A), A^(-1)
Ma trận tựa nghịc đảo
T
nm
=A
-1
mn
pinv(A)
Tích vô hướng của hai ma
trận
n
m
j
ijijimnmn
bacBA
1
1
==
∑
=
sum(A.*B)
tích vô hướng của
các cột
Kí hiệu vế phải là kết quả của phép toán, chỉ số mxn là cho ma trận bất kì, chỉ số
nxn là chỉ cho ma trận vuông; trong các công thức có cùng chỉ số là bắt buộc phải
thoả mãn mới áp dụng được phép toán.
Ví dụ:
A=[1 2 3; 4 -5 6];
D=[i 2 -6;5 4 2-i];
E=[1;i;-3];
B=[1 -1;-1 2];
C=[1 -1;2 -1;-1 3];
A+D
ans =
1.0000 + 1.0000i 4.0000 -3.0000
9.0000 -1.0000 8.0000 - 1.0000i
D.'
ans =
0 + 1.0000i 5.0000
2.0000 4.0000
-6.0000 2.0000 - 1.0000i
A*E
ans =
-8.0000 + 2.0000i
-14.0000 - 5.0000i
B*A
ans =
-3 7 -3
7 -12 9
D'
ans =
0 - 1.0000i 5.0000
2.0000 4.0000
-6.0000 2.0000 - 1.0000i
inv(B)
ans =
2 1
1 1
B^3
ans =
5 -8
-8 13
pinv(A)
ans =
0.0310 0.0471
0.2291 -0.1006
0.1702 0.0514
B*inv(B)
ans =
1 0
0 1
A*pinv(A)
ans =
1.0000 -0.0000
0.0000 1.0000
pinv(E)
ans =
0.0909 0 - 0.0909i -0.2727
A\D
ans =
0 0 0
-0.5556 + 0.2222i 0.0000 -1.5556 +
0.1111i
0.3704 + 0.1852i 0.6667 -0.9630 - 0.0741i
A/D
ans =
-0.3023 - 0.0284i 0.3874 +
0.0562i
-1.1033 - 0.0920i 0.1669 + 0.0984i
2.4.2 Các thao tác ma trận.
Matlab cung cấp nhiều hàm cho phép thao tác trên ma trận:
Hàm Thao tác
Rot90(A,n) Các phần tử của ma trận A được quay một góc 90
o
ngược chiều
kim đồng hồ. Nếu có thêm tham số n sẽ quay n lần.
fliplr(A) Đảo các phần tử của ma trận A từ trái sang phải.
flipud(A) Đảo các phần tử của ma trận A từ trên xuống dưới.
Page 16 of 61
B
pq
=Reshape(A
mn
) Định dạng lại ma trận, yêu cầu pxq=mxn.
sort(A)
Trả về ma trận với các cột được sắp xếp từ nhỏ đến lớn. Số phức được
xét bằng modul của nó.
Chích các phần tử của ma trận.
diag(A)
Lấy các phần tử của ma trận trên đường chéo chính, trả về vector cột
diag(A,k)
Lấy các phần tử của ma trận trên đường chéo tuỳ chọn k:
k=0 chọn đường chéo chính.
k>0 chọn đường chéo thứ k ở phía trên đường chéo chính.
k<0 chọn đường chéo thứ k ở phía dưới đường chéo chính.
triu(A)
Là ma trận cùng cỡ với A. Lấy các phần tử trên đường chéo chính thứ và
phía trên đường chéo chính. các vị trí khác bằng không.
triu(A,k)
Lấy các phần tử ở phía trên đường chéo thứ k và phía trên.
tril(A)
Là ma trận cùng cỡ với A. Lấy các phần tử trên đường chéo chính và nằm
dưới đường chéo chính. các vị trí khác bằng không.
tril(A,k)
Lấy các phần tử ở phía dưới đường chéo chính thứ k và phía dưới.
Thao tác các phần tử của ma trận.
A(i,j)
i=1,m;
j=1,n
Thao tác phần tử a
ij
của ma trận A.
[m,n]=size(A).
: Toán tử
x=a:d:b
y=a:b
Tạo vector hàng x=a:d:b, tạo cấp số p phần tử (p=[(b-a)/d], p là
phần nguyên) x(i)=a+i*d với i=1,2, ,p.
b>a nếu d>0.
b<a nếu d<0.
nếu d=1 viết y=a:b;
A(:,k) Thao tác cột thứ k của ma trận.
A(l,:) Thao tác hàng thứ l của ma trận.
A(:) Nối các cột của ma trận A thành vector cột.
end Toán tử
A(end) Thao tác phần tử cuối cùng của ma trận.
A(end,k) Thao tác phần tử cuối cùng của cột thứ k.
A(l,end) Thao tác phần tử cuối cùng của hàng thứ l.
A(p:q,k) Thao tác phần tử từ vị trí p đến vị trí q của cột thứ k.
A(l,p:q) Thao tác phần tử từ vị trí p đến vị trí q của hàng thứ l.
A(p:q,l:k) Thao tác ma trận con .
x(v) Thao tác các phần tử được cho trong vector chỉ số v.
A(:,v) Thao tác các cột chỉ định trong vector chỉ số v.
A(v,:) Thao tác các hàng chỉ định trong vector chỉ số v.
Các hàm lọc ma trận:
find(exprA)
find(A)
Trả về chỉ số các phần tử của A thoả mãn biểu thức
logic exprA của A.
Trả về vị trí các phần tử của A khác không.
y=A(exprA)
y=A(A>0)
y=A(fimag(A)==0)
y=A(a<=A&A<b)
Trả về các phần tử của A thoả mãn biểu thức.
Trả về các phần tử của A lớn hơn không.
Trả về các phần tử của A là số thực.
Trả về các phần tử của A thuộc đoạn [a,b).
Ví dụ 1:
Page 17 of 61
A=[1 3 5 7; 2 4 6 8;9 8 7 6];
B=rot90(A);
C=rot90(A,2);
E=fliplr(A);
D=flipud(A);
F=reshape(A,6,2);
a=A(:);
b=A(:,2);
c=A(3,:);
d=A(1:3,2);
e=A(end);
f=A(1:2,2:3);
v=[1 3 5 7];
g=A(v);
A =
1 3 5 7
2 4 6 8
9 8 7 6
B =
7 8 6
5 6 7
3 4 8
1 2 9
C =
6 7 8 9
8 6 4 2
7 5 3 1
E =
7 5 3 1
8 6 4 2
6 7 8 9
D =
9 8 7 6
2 4 6 8
1 3 5 7
F =
1 5
2 6
9 7
3 7
4 8
8 6
a =
1
2
9
3
4
8
5
6
7
7
8
6
b =
3
4
8
c =
9 8 7 6
d =
3
4
8
e =
6
f =
3 5
4 6
v =
1 3 5 7
g =
1 9 4 5
Ví dụ 2:
A=[1+i 1-3*i 12; 1 2.3 -4;2 -1-2.1*i -1; 1 2 4];
rA=A(find(imag(A)==0));
pA=A(find(A>0));
nA=A(find(A<0));
aAb=A(find(1<A&A<4));
sA=sort(A);
rA =
1.0000
2.0000
1.0000
2.3000
2.0000
12.0000
-4.0000
-1.0000
4.0000
pA =
1.0000 + 1.0000i
1.0000
2.0000
1.0000
1.0000 - 3.0000i
2.3000
2.0000
12.0000
4.0000
nA =
-1.0000 - 2.1000i
Page 18 of 61
-4.0000
-1.0000
aAb =
2.0000
2.3000
2.0000
sA =
1.0000 2.0000 -1.0000
1.0000 2.3000 4.0000
1.0000 + 1.0000i -1.0000 - 2.1000i -4.0000
2.0000 1.0000 - 3.0000i 12.0000
Ví dụ 3:
A=[1+i 1-3*i 12; 1 2.3 -4;2 -1-2.1*i -1; 1 2 4];
tuA=triu(A)
tuA1=triu(A,2)
tuA1=triu(A,-1)
tlA=tril(A)
tlA1=tril(A,2)
tlA1=tril(A,-1)
tuA =
1.0000 + 1.0000i 1.0000 - 3.0000i 12.0000
0 2.3000 -4.0000
0 0 -1.0000
0 0 0
tuA1 =
0 0 12
0 0 0
0 0 0
0 0 0
tuA1 =
1.0000 + 1.0000i 1.0000 - 3.0000i 12.0000
1.0000 2.3000 -4.0000
0 -1.0000 - 2.1000i -1.0000
0 0 4.0000
tlA =
1.0000 + 1.0000i 0 0
1.0000 2.3000 0
2.0000 -1.0000 - 2.1000i -1.0000
1.0000 2.0000 4.0000
tlA1 =
1.0000 + 1.0000i 1.0000 - 3.0000i 12.0000
1.0000 2.3000 -4.0000
2.0000 -1.0000 - 2.1000i -1.0000
1.0000 2.0000 4.0000
tlA1 =
0 0 0
1.0000 0 0
2.0000 -1.0000 - 2.1000i 0
1.0000 2.0000 4.0000
Page 19 of 61
Chương3
Lập trình trong matlab
3.1. Các phần tử cơ bản
3.1.1 Giới hạn giá trị số.
Các giá trị số trong Matlab cho phép trong khoảng từ realmin đến realmax. Các
giá trị số lớn hơn giá trị realmax sẽ gây lỗi tràn trên (exponent overflow). Giá trị của
kết quả lớn hơn giá trị cho phép của biến nhớ máy tính. Trong Matlab, kết quả này
được biểu diễn là Inf.
Ví dụ:
ằ a=realmax*1e2
a =
Inf
Các giá trị số nhỏ hơn giá trị realmin sẽ gây lỗi tràn dưới (exponent underflow). Giá
trị của kết quả vượt miền giá trị cho phép của biến nhớ máy tính. Trong Matlab, kết
quả này được biểu diễn là 0.
ằ b=realmin*1e-16
b =
0
3.1.2 Các kí tự đặc biệt.
: Cách ghi ma trận tổng quát.
() Ngoặc đơn.
[] Định nghĩa ma trận.
{} Định nghĩa biến cell.
. Dấu thập phân.
. Toán tử mảng. Tác động tương ứng phần tử-phần tử trong các toán tử
.* , .^ , ./ , .\ hay .', ví dụ C = A ./ B là ma trận thành phần của nó c(i,j) =
a(i,j)/b(i,j).
. Thao tác phần tử (field) của biến cấu trúc. A.field và A(i).field, khi A là
biến cấu trúc, thao tác nội dung của trường "field". Nếu A không phải là
cấu trúc vô hướng, sẽ phát sinh thao tác danh sách. Có thể lồng các cấu
trúc như X(2).field(3).name. Có thể kết hợp cấu trúc, mảng khối, ngoặc
chỉ số để thao tác trên các biên cấu trúc.
Dấu đại diện thư mục cha. Ví dụ cd
Chỉ dấu dòng tiếp theo liên kết với dòng trên.
, Dấu phân cách chỉ số, phân cách câu lệnh có hiển thị nội dung biến.
; Dấu phân cách câu lệnh không hiển thị nội dung biến.
% Chỉ dấu bắt đầu dòng ghi chú, tất cả các lệnh sau "%" sẽ bị bỏ qua hoặc
được in bởi lệnh .
! Thi hành lệnh hệ điều hành.
= Toán tử gán.
' Toán tử string. 'HELLO' là vector tổ hợp các thành phần kí tự mã ASCII.
Để ghi kí tự này trong xâu kí tự viết 2 lần kí tự này. Ví dụ: 'Let''s Go.'
.' Toán tử chuyển vị.
Page 20 of 61
' Toán tử chuyển vị và lấy liên hợp phức.
[,] Ghép các phần tử theo hàng ngang.
[;] Ghép các phần tử theo hàng dọc.
() Thao tác phần tử.
Ngoặc đơn được sử dụng ưu tiên trong các biểu thức số học và chứa
đựng các tham số của hàm. Chúng được sử dụng để đánh chỉ số cho
vector, ma trận. Nếu X và V là các vector, thì X(V) là [X(V(1)),
X(V(2)), , X(V(N))]. Các phần tử của V phải là các số nguyên làm chỉ
số. Sẽ xuất hiện lỗi nếu các chỉ số <1 hoặc lớn hơn kích thước của X.
Ngoặc đơn có thể bao hàm các chỉ số logic (hay 0-1). Nếu V là biến
logic, các phần tử khác không của V xác định mặt nạ lên mảng X . Mảng
logic được phát sinh do các toán tử quan hệ và toán tử locgic hay câu
lênhl logic. Ngoặc đơn được được hỗ trợ của tất cả các kiểu dữ liệu trong
Matlab như là mảng số thập phân, cấu trúc, cell, và mảng kí tự.
Ví dụ:
X(3) là phần tử thứ 3 của X.
X([1 2 3]) là ba phần tử đầu tiên của X.
Nếu X có N thành phần, X(N:-1:1) đảo lại dãy.
X(X>0.5) trả về các phần tử > 0.5 của X.
thao tác chỉ số tương tự cho ma trận và mảng.
Nếu V có M thành phần và W có N thành phần, thì A(V,W) là ma trận
MxN hình thành từ các phần tử của A, với các chỉ số là phần tử của V và
W. Ví dụ, A([1,5],:) = A([5,1],:) hoán vị 2 hàng 1 và 5 của A.
{} Được sử dụng để tạo mảng cell. Nó tương tự ngoặc vuông [ ] ngoại trừ
cho phép chứa các loại dữ liệu khác nhau.
{magic(3) 6.9 'hello'} là mảng khối có 3 phần tử.
{magic(3),6.9,'hello'} là mảng giống như trên.
{'This' 'is' 'a';'two' 'row' 'cell'} là mảng khối 2x3. Dấu ";" kết thúc
hàng.
{1 {2 3} 4} là mảng khối 3 phần tử, với phần tử thứ 2 là mảng khối.
Braces cũng dùng để đánh địa chỉ nội dung mảng khối. Thao tác như
parentheses và trả về nội dung tại địa chỉ đó.
Ví dụ:
X{3} là nội dung phần tử thứ 3 của X.
X{3}(4,5) là thành phần (4,5) cảu phần tử thứ 3.
X{[1 2 3])} là danh sách 3 phần tử cho trong vector chỉ số. Nó
tương tự như X{1},X{2},X{3} and makes sense inside [] ,{}, or in
function input or output lists (see LISTS).
Có thể lặp định địa chỉ cho các mảng khối lồng nhau X{1}{2} là nội
dung của phần tử thứ 2 của mảng khối trong X. Nó hoạt động giống như
các cấu trúc lồng nhau, như X(2).field(3).name hoặc tổ hợp các mảng khối
và cấu trúc, như Z{2}.type(3).
[] Để sinh các vector và ma trận.
[6.9 9.64 SQRT(-1)] là vector 3 thành phần phân cách nhau bằng dấu
cách. [6.9, 9.64, sqrt(-1)] tương tự như trên.
[1+I 2-I 3] và [1 +I 2 -I 3] không giống nhau. Vector đầucó 3 phần
tử, vector thứ 2 có 2 phần tử.
[11 12 13; 21 22 23] là ma trận 2x3. Dờu ";" kết thúc hàng đầu tiên.
Các vector và ma trận có thể nối với nhau bởi ngoặc vuông [].
[A B; C] là hợp lệ nếu số hàng của A bằng số hàng của B và bằng số
Page 21 of 61
cột của C.
A = [] sinh ma trận rỗng A.
Sử dụng [ và ] ở vế trái của phép gán = ở các câu lệnh gán nhiều biến,
xemcác hàmLU, EIG, SVD và các hàm khác.
3.1.2 Biến.
a. Các biến giá trị đặc biệt.
pi
Giá trị của số π.
i,j Biến giá trị ảo i
2
=j
2
=-1.
Inf
Biến đại diện cho giá trị ∞ hay > realmax, thể hiện kết quả chia cho 0.
NaN
Giá trị không xác định: 0 chia 0, hoặc ∞-∞.
clock Hàm trả về vector cho biết giá trị thời gian hiện tại.
date Trả về xâu kí tự tháng-ngày-năm hiện tại.
eps Hàm xác định độ chính xác của số thực trong quá trình tính toán.
ans Biến lưu giá trị kết quả tính toán gần nhất
b. Biến string.
Biến string trong matlab được lưu trong vector vứi mỗi phần tử là 1 kí tự. Các kí
tự được lưu trong vector ở dạng mã ASCII, khi hiển thị biến string dòng kí tự sẽ được
hiển thị chứ không phải mã của chúng.
Việc xác định vị trí của mỗi phần tử của biến string thông qua chỉ số của nó
trong vector. Ma trận của các kí tự hay string cũng có thể được sử dụng nhưng mỗi
phần tử (hàng của ma trận) phải bằng nhau.
Ví dụ:
ằ test='Wellcome to ITIMS''2000'
test =
Wellcome to ITIMS'2000
-Đảo ngược xâu kí tự.
ằ daotu=test(end:-1:1)
daotu =
0002'SMITI ot emoclleW
-Trích 1 phần của xâu kí tự.
ằ test(1:8)
ans =
Wellcome
-Kết hợp các xâu kí tự:
ằ hodem='Nguyen Hoang';ten='Viet';
ằ hoten=[hodem ' ' ten]
hoten =
Nguyen Hoang Viet
hoặc sử dụng hàm strcat(s1,s2, ) để nối các xâu.
-Các hàm với biến string (xem help strfun).
Page 22 of 61
abs(str)
double(str) Trả lại giá trị là 1 vector với các phần tử là các mã của các kí tự
trong chuỗi str.
char(x) Chuyển vector x với các phần tử là các số nguyên 0->65535 thành chuỗi str
theo mã của chúng.
str2mat(s1,s2, ) Chuyển dãy xâu s1, s2, thành ma trận, với các hàng là các xâu đã cho,
các xâu ngắn hơn được gán thêm các kí tự trống vào bên phải. Kích thước của hàng
là độ dài của xâu kí tự dài nhất.
strvcat(s1,s2, ) Tương tự str2mat, nhưng xâu kí tự rỗng bị bỏ qua.
num2str(s,h) Chuyển đại lượng vô hướng s thành xâu kí tự dấu phẩy động, h số
lượng chữ số sau dấu phẩy, giá trị mặc định là 4.
int2str(n)Chuyển đổi số nguyên n thành xâu kí tự số.
rats(x,len) Chuyển đổi số có dấu phẩy động x thành xâu kí tự phân thức xấp
xỉ, len là chiều dài của chuỗi trả về, mặc định len=13. Khi chiều dài xâu
không đủ cho xâu kí tự trả về, nó sẽ trả về xâu có chứa kí tự '*'.
bin2dec(sb) Chuyển đổi xâu kí tự biểu diễn số nhị phân về số thập phân.
dec2bin(d,n) Chuyển đổi số thực dương < 2
52
về xâu kí tự biểu diễn hệ nhị
phân, và đưa về với số bít nhỏ nhất cho bởi n
hex2dec(sb) Chuyển đổi xâu kí tự biểu diễn số thập lục về số thập phân.
dec2hex(d,n) Chuyển đổi số thực dương < 2
52
về xâu kí tự hệ thập lục, và đưa về
với số chữ số nhỏ nhất cho bởi n
base2dec(d,b) Chuyển đổi xâu kí tự biểu diễn số cơ số b (2≤b≤36) về số thập
phân.
dec2base(d,b) Chuyển đổi số thực dương < 2
52
về xâu kí tự cơ số b (2≤b≤36), và
đưa về với số chữ số nhỏ nhất cho bởi n
eval(str) Thực hiện lệnh trong biểu thức của xâu str
vectorize(bt) vectơ hoá biểu thức xâu kí tự bt.
sprintf Trả về xâu kí tự dữ liệu theo định dạng.
fprintf In dữ liệu theo định dạng thành xâu kí tự
sscanf Đọc dữ liệu trong xâu kí tự theo theo định dạng.
fscanf Đọc dữ liệu từ file theo theo định dạng.
lower Hàm chuyển xâu về xâu kí tự thường.
upper Hàm chuyển xâu về xâu kí tự hoa.
findstr Tìm xâu kí tự con trong xâu kí tự nào đó.
eval Thưc hiện câu lệnh trong biểu thức Matlab. eval(s), với s là xâu kí tự, thi
hành các biểu thức và các câu lệnh ghi trong xâu s.
eval(s1,s2) đưa ra tính năng bắt lỗi. Nó thi hành xâu s1, nếu không có lỗi nó trở về hệ
điều hành. Nếu hệ điều hành phát sinh lỗi, xâu kí tự s2 được thi hành trước khi trở về
hệ điều hành. Sử dụng như eval('try','catch'). Xâu kí tự lỗi phát sinh bởi 'try' có thể
nhận từ biến LASTERR.
[X,Y,Z, ] = eval(s) trả về các đối theo thứ tự biểu thức có trong s. Xâu kí tự vào cho
eval thường eval được tạo bởi kết hợp các xâu con trong ngoặc vuông.
Ví dụ:
Phát sinh lần lượt các biến ma trận có tên M1 đến M12:
for n = 1:12
eval(['M' num2str(n) ' = magic(n)'])
Page 23 of 61
end
Chạy script file lựa chọn từ tập hợp các m-file script. Xâu kí tự được tạo theo các
hàng của ma trận D phải có độ dài bằng nhau.
D = ['odedemo '
'quaddemo'
'fitdemo '];
n = input('Select a demo number: ');
eval(D(n,:))
vectorize vector hoá biểu thức đưa về các phép toán mảng. vectorize(S), khi S là
biểu thức xâu kí tự, trả về xâu có chèn thêm kí tự '.' tước các toán tử '^', '*' hay '/'
trong S. vectorize(FCN), khi FCN là hàm INLINE, vector hoá công thức của FCN.
Kết quả trả về là hàm inline INLINE được vector hoá.
count = fprintf(fid,format,A, ) định dạng dữ liệu theo các phần thực của ma trận
A (và theo bất kì đối số vào nào) theo xâu kí tự điều khiển dạng thức in dữ liệu và ghi
file chỉ đại diện bởi fid. count là số byte đã ghi lên fid. fid là số nguyên nhận dạng do
FOPEN trả về. fid =1: Xuất ra thiết bị chuẩn (màn hình), fid =2: Báo lỗi chuẩn. Khi
bỏ đối số fid, xuất ra thiết bị chuẩn.
format là xâu kí tự chỉ định định dạng theo ngôn ngữ C. Chỉ định bắt đầu biến đổi
bằng kí tự %, các cờ lựa chọn, chiều rộng lựa chọn và kiểu trường, chỉ định kiểu con
lựa chọn và các kí tự định dạng d, i, o, u, x, X, f, e, E, g, G, c, and s.
Các định dạng đặc biệt \n,\r,\t,\b,\f phát sinh ngắt dòng, xuống dòng, tab, lùi về trước
1 kí tự, về đầu dòng. Sử dụng \\ để lấy kí tự "\" và %% để lấy kí tự"%".
fprintf hoạt động giống ANSI C theo chỉ định và mở rộng như sau:
1. Chỉ phần thực của tham số được xử lý.
2. Các chỉ định kiểu con không chuẩn cung cấp cho chuyển đổi kiểu là o, u, x, and
X.
t - Trong C định nhĩa kiểu thực đơn, trong Matlab là kiểu nguyên không dấu.
b - Trong C định nhĩa kiểu thực kép, trong Matlab là kiểu nguyên không dấu.
Ví dụ, để in ra số thập lục giá trị thực kép sử dụng định dạng như sau '%bx'.
3. fprintf sẽ "vectorized" khi A không phải là vô hướng. Xâu kí tự định dạng được
lặp lại cho các tất cả các phần tử của A (theo cột) . Tương tự cho các tham số
ma trận khác.
Ví dụ, các câu lệnh
x = 0:.1:1; y = [x; exp(x)];
fid = fopen('exp.txt','w');
fprintf(fid,'%6.2f %12.8f\n',y);
fclose(fid);
sinh ra file text có chứa bảng giá trị của hàm mũ:
0.00 1.00000000
0.10 1.10517092
1.00 2.71828183
Page 24 of 61
[S,ERRMSG] = SPRINTF(FORMAT,A, ) định dạng dữ liệu theo các phần
thực của ma trận A (và theo bất kì đối số vào nào) theo xâu kí tự điều khiển dạng
thức, trả về xâu kí tự đã được định dạng vào biến S. ERRMSG là đối số lựa chọn trả
về xâu kí tự thông báo lỗi nếu có ma trận rỗng hoặc thiếu đối số yêu cầu trong
FORMAT. SPRINTF hoat động tương tự FPRINTF ngoại trừ nó trả về xâu kí tự thay
vì ghi lên file.
Ví dụ:
sprintf('%0.5g',(1+sqrt(5))/2) 1.618
sprintf('%0.5g',1/eps) 4.5036e+15
sprintf('%15.5f',1/eps) 4503599627370496.00000
sprintf('%d',round(pi)) 3
sprintf('%s','hello') hello
sprintf('The array is %dx%d.',2,3) The array is 2x3.
sprintf('\n') is the line termination character on all platforms.
FSCANF Đọc dữ liệu từ file.
[A,COUNT] = FSCANF(FID,FORMAT,SIZE) đọc dữ liệu từ file chỉ định bởi FID,
định dạng dữ liệu được đọc chỉ định bởi xâu FORMAT, và trả về dữ liệu lưu trong
ma trận A. COUNT là đối só ra tuỳ chọn cho biết số phần tử đọc được không có lỗi.
FID là số nguyên chỉ định thiết bị đọc từ FOPEN.
SIZE là tuỳ chọn; nó đặt giới hạn số phần tử tối đa đọc từ file; nếu không chỉ định,
toàn bộ file được đọc; nếu chỉ định, giá trị hợp lệ là:
N đọc tối đa N phần tử vào vector cột.
inf đọc hết cho đến cuối file.
[M,N] đọc tối đa M * N phần tử và điền vào ma trận MxN, theo thứ tự cột. N có
thể là inf, M phải là số xác định.
Nếu chỉ có định dạng kí tự và SIZE không phải dạng [M,N] thì A có dạng vector
hàng.
FORMAT là xâu kí tự chỉ định như ngôn ngữ C. Chỉ định chuyển đổi được bắt đầu
bằng kí tự %, lựa chọn kiểu trường dữ liệu, và kí tự chuyển đổi d, i, o, u, x, e, f, g, s,
c, và [. . .] (scanset).
Khi kí tự chỉ định %s được sử dụng, phần tử đọc vào sẽ cho mỗi phần tử của ma trận
là 1 kí tự. Xâu kí tự được trả về không chứa kí tự trống.
Hỗn hợp chỉ định kí tự và số sẽ dẫn tới ma trận kết quả là ma trận số và các kí tự đọc
được là giá trị mã của nó.
Quét tới vị trí cuối cùng của xâu S khi NEXTINDEX lớn hơn is độ lớn xâu S.
FSCANF khác so với ngôn ngữ C ở khía cạnh sau- nó được "vectorized" theo thứ tự
đối số ma trận. Xâu kí tự định dạng được lặp lại đến hết xâu S hoặc tổng số lượng lần
đọc vượt quá SIZE.
Ví dụ:
S = fscanf(fid,'%s') đọc (và trả về) xâu kí tự.
A = fscanf(fid,'%5d') đọc vào số thực với 5chữ số thạp phân.
[A,COUNT,ERRMSG,NEXTINDEX] = SSCANF(S,FORMAT,SIZE) đọc dữ
liêu từ xâu kí tự S, tạo dữ liệu theo xâu định dạng chỉ định FORMAT và trả về ma
trận A. COUNT là đối số ra lựa chọn trả về số phần tử đọc thành công. ERRMSG là
Page 25 of 61