Tải bản đầy đủ (.pdf) (7 trang)

Giáo trình mathlab toàn tập - Chương 9

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (76.41 KB, 7 trang )

55

any(x).
all(x)

và cùng bằng không (False) hoặc cùng khác không (True)
Trả lại 1 nếu bất cứ phần tử nào trong vector x khác không. Trả lại 1 cho mỗi cột
trong ma trận x mà có các phần tử khác không.
Trả lại 1 nếu tất cả các phần tử của vector x khác không. Trả lại 1 cho mỗi cột
trong ma trận x mà tất cả các phần tử khác không.

MATLAB còn cung cấp rất nhiều các hàm kiểm tra cho sự tồn tại của các giá trị đặc biệt hoặc
điều kiện và trả lại những kết quả là giá trị logic.
Các hµm kiĨm tra
isa(X, ‘name’)
iscell(X)
iscellstr(X)
ischar(S)
isempty(X)
isequal(A, B)
isfield(S, ‘name’)
isfinite(X)
isglobal(X)
ishandle(h)
ishold
isiee
isinf(X)
isletter(S)
islogical(X)
ismember(A, B)
isnan(X)


isnumeric(X)
isppc
isprime(X)
isreal(X)
isspace(S)
issparse(A)
isstruct(S)
isstudent
isunix
isvms

True nÕu X cã lớp đối tợng là name
True nếu đối số là mảng phần tử.
True nếu đối số là mảng phần tử của các xâu.
True nếu đối số là xâu kí tự.
True nếu đối số là rỗng.
True nếu A và B giống nhau.
True nếu namelà một trờng của cấu trúc S.
True khi các phần tử có hạn.
True khi đối số là biến toàn cục.
True khi đối số là sự điều khiển đối tợng hợp lý
True nếu đồ thị hiện tại giữ trạng thái ON.
True nÕu m¸y tÝnh thùc hiƯn phÐp sè häc IEEE
True tại những phần tử vô cùng
True khi các phần tử thuộc bảng chữ cái.
True khi đối số là mảng logic
True tại những vị trí mà phần tử của A và B trùng nhau
True khi các phần tử là không xác định (NaN)
True khi đối số là mảng số
True cho Macintosh với bộ xử lý PowerPC

True khi các phần tử là số nguyên tố
True khi đối số không có phần ảo
True khi các phần tử là kí tự trắng
True nếu đối số là ma trận Sparse
True nếu đối số là một cÊu tróc
True nÕu Student Edition cđa MATLAB
True nÕu m¸y tÝnh là UNIX
True nếu máy tính là VMS
----------------------oOo--------------------

chơng 9
VĂN Bản
Sự tiện ích của MATLAB là xử lý với các con số. Tuy nhiên chúng ta đà nhiều lần đề cập đến thao tác
với văn bản (text), nh khi đa nhÃn và tiêu đề vào trong đồ thị. Trong MATLAB biến text đợc dùng
đến nh là xâu kí tự, hoặc đơn giản là các xâu.
9.1 Xâu kí tự
Xâu kí tự trong MATLAB là mảng của các giá trị ASCII mà quy ớc của nó là các kí tự.


56
VÝ dô:
>> t = 'How about this character
t=
How about this character string?
>> size(t)
ans=
1
32
>> whos
Name

Size
t
1x32
Grand total is 32 elements using

string?'

Bytes
64 char
64 bytes

Class
array

Một xâu kí tự, đơn giản là dạng văn bản, đợc đặt giữa hai dấu nháy đơn. Mỗi kí tự trong xâu là
một phần tử của mảng, với mỗi phần tư chiÕm hai bytes.
Mn xem c¸c m· ASCII cđa mét xâu kí tự, bạn phải dùng các phép toán số học đối với xâu, hoặc
chuyển nó sang dạng số, dùng hµm double . VÝ dơ:
>> double(t)
ans=
Columns 1 through 12
72 111 119
32
97
98 111
117 116
32 116
104
Columns 12 through 24
105 115

32
99 104
97 114
97
99 116 101
114
Columns 25 through 32
32 115 116 114 105 110 103
63
>> abs(t)
ans=
Columns 1 through 12
72 111 119 32
97 98 111 117 116
32
116 104
Columns 13 through 24
105 115
32 99 104 97 114
97
99 116
101 114
Columns 25 through 32
32 115 116
114
105 110
103 63
Hµm char chuyển lại thành xâu:
>> char(t)
ans=

How about this character string?
Với mảng xâu là một mảng số với thuộc tính đặc biệt, chúng ta có thể thao tác bằng tất cả các
công cụ thao tác với mảng sẵn có trong MATLAB. Ví dụ:
>> u = t(16:24)
u=
character
Địa chỉ của xâu cũng giống nh mảng. ở đây phần tử từ 16 đến 24 chøa tõ character
>> u = t(24:-1:16)
retcarahc


57
Đây là từ character đọc ngợc lại
>> u = t(16:24)
u=
c
h
a
r
a
c
t
e
r
Dùng toán tử chuyển vị để chuyển từ character sang dạng ma trËn cét
>> v = 'I cant't find the manual!'
v=
I can't find the manual!
Dấu nháy đơn với xâu kí tự là biểu tợng trong hai dấu nháy đơn.
Chúng ta có thể nối hai xâu nh đối với hai mảng:

>> w = [u,v]
w=
character I can’ t find the manual!
Hµm disp cho phép bạn hiển thị xâu kí tự mà không có tên biến
>> disp(v)
I can't find the manual
Chú ý là trạng thái v= bị bỏ đi, điều này rất có ích cho chúng ta hiển thị những lời trợ giúp trong
script file.
Cũng giống nh đối với ma trận, xâu kí tự có thể có nhiều hàng, nhng mỗi một hàng phải cã
sè cét b»ng nhau, ®Ĩ cho sè cét cđa chóng b»ng nhau chóng ta cã thĨ dïng kÝ tù trèng.
>> v = ['However, this'
'does work!
']
v=
However, this
does work!
>> w = ['this'; ' does not']
??? All rows in the bracketed expression must have the same
number of columns.
>> size(v)
ans=
2
13


58
Ta cũng có thể dùng hàm char để tạo một mảng xâu từ các xâu, và nó tự thêm các kí tự trống để
tạo ra một mảng đầy đủ.
>> w = char('this', 'does not')
w=

this
does not
>> size(w)
ans=
2
8
9.2 Chuyển đổi xâu
Để bổ xung thêm về sự chuyển đổi giữa xâu và mà ASCII của nó nh đà trình bày ở trên,
MATLAB đa ra một số các hàm chuyển đổi hữu ích khác, chúng bao gồm dới đây:
Các hàm chuyển đổi xâu
base2dec
bin2dec
char
dec2base
dec2bin
dec2hex
double
fprintf
hex2dec
hex2num
int2str
mat2str
num2str
sprintf
sscanf
str2num

Dựa trên xâu x chuyển sang hệ mời.
Từ xâu nhị phân sang hƯ mêi
Tõ x©u sang ASCII

Tõ hƯ mêi sang x©u x
Tõ số hệ mời sang xâu nhị phân
Từ số hệ mời sang xâu của các số hệ mời sáu.
Chuyển từ mà ASCII sang xâu
Viết dạng văn bản ra file hoặc ra màn hình
Chuyển từ xâu gồm các số hệ 16 sang các số hệ mời
Chuyển từ xâu các số hệ 16 sang số dấu phẩy động IEEE
Chuyển từ số nguyên sang xâu
Chuyển từ ma trận số sang xâu gồm các số
Chuyển tõ sè sang x©u
Chun tõ m· ASCII sang x©u
Chun tõ số sang xâu có điều chỉnh kích thớc
Chuyển từ xâu sang số không có điều chỉnh kích thớc

Trong trờng hợp chúng ta tạo một thông báo có chứa các số không phải là xâu, những hàm chuyển
đổi sẽ giúp chúng ta làm việc đó.
>> rad = 2.5; area = pi*rad^2;
>> t = ['A circle of radius ' num2str(rad)...
'has an area of ' num2str(area) '.'];
>> disp(t)
A circle of radius 2.5 has an area of 19.63.
ở đây hàm num2str đợc dùng để chun tõ sè sang x©u. Gièng nh− vËy int2str chun từ số nguyên
sang xâu, cả hai hàm này gọi hàm sprintf, nó giống nh cú pháp trong C dùng để chuyển số sang xâu.
9.3 Các hàm về xâu
MATLAB đa ra một số các hàm của xâu, bao gồm các hàm trong danh sách dới đây:


59
Các hàm xâu
blanks(n)

deblank(s)
eval(xâu)
eval(try, catch)
feval(f, x, y, ...)
findstr(s1, s2)
ischar(s)
isletter(s)
isspace(s)
lasterr
lower(s)
strcat(s1, s2, ...)
strcmp(s1, s2)
strmatch(s1, s2)
strncmp(s1, s2, n)
strrep(s1, s2)
strtok(s)
strvcat(s1, s2, ...)
upper(s)

Trả lại một xâu gồm các kí tự trống hay dấu cách
Trả lại các vệt trống từ một xâu
Ước lợng xâu nh là một lệnh của MATLAB
Ước lợng xâu và bắt lỗi
Hàm evaluate đa ra bằng xâu
Tìm kiếm một xâu trong một xâu khác
True nếu đa vào là một xâu
True tại những vị trí kí tự Alphabet tồn tại
True tại những vị trí là kí tự trống
Xâu của lỗi cuối cùng MATLAB đa ra
Xâu với những chữ cái thờng

Nối các xâu thành hàng
True nếu các xâu giống nhau
Tìm kiếm khả năng giống nhau của xâu
True nếu n kí tự đầu giống nhau
Thay thế một xâu bằng một xâu khác
Tìm kiếm dấu hiệu cho xâu
Nối các xâu thành cột
Chuyển thành chữ in

Một số các hàm trên cung cấp khả năng xử lý các xâu cơ bản. Ví dụ nh, findstr trả lại chỉ số bắt
đầu của một xâu trong một xâu khác:
>> b = 'Peter Piper picked a peck of pickled peppers';
>> findstr(b, ' ')
% Tìm kiếm khoảng trống
6
12
19
21
26
29
37
>> findstr(b, 'p')
9
13
22
30
38
40
41
>> find(b=='p')

9
13
22
30
38
40
41
>> findstr(b, 'cow')
% Tìm kiếm từ cow
ans=
[ ]
>> findstr(b,'pick')
ans=
13
30
Hàm này trả lại ma trận rỗng khi không có những phần cần tìm.
>> strrep(b,'Peter','Pamela')
ans=
Pamela Piper picked a peck of pickled peppers
Nh trình bày ở trên, strrep đơn giản chỉ là sự thay thế một xâu. strrep không làm việc với ma trận
xâu, vì vậy trớc tiên bạn cần phải chuyển từ ma trận thành vector.
9.4 Ma trận tế bào của xâu


60
Ma trận tế bào là một kiểu dữ liệu cho phép bạn gọi tên và thao tác với một nhóm dữ liệu có nhiều
kích cỡ và nhiều kiểu.
>> C = {'How';'about';'this for a';'cell array of strings?'}
C=
'How'

'about'
'this for a'
'cell array of strings?'
>> size(C)
4
1
Ma trận trên có 4 hàng và một cột nhng mỗi cột lại có độ dài khác nhau. Tất cả các phần tử
đợc đặt trong dấu ngoặc nhọn, mỗi phần tử đợc đặt trong dấu nháy đơn, giữa hai hàng là dấu chấm
phẩy. Mảng tế bào đợc đánh địa chỉ cũng giống nh mảng thông thờng:
>> C(2:)
ans=
'about'
'this for a'
>> C([4 3 2 1])
ans=
'cell array of strings?'
'this for a'
'about'
'How'
>> C(1)
ans=
How
Đây vẫn là mảng tế bào. Để thay đổi dấu nháy của tế bào, ta sử dụng ngoặc nhọn:
>> s = c{4}
ans=
cell array of strings?
>> size(s)
ans=
1
22

Để truy nhập vào nhiều hơn mét tÕ bµo, ta dïng hµm deal:
>> [a, b, c, d] = deal(C{:})
a=
How
b=
about
c=
this for a
d=
cell array of trings?
ở đây C{:} để chỉ truy nhập đến tất cả các tế bào, nã gièng nh−:


61
>> [a, b, c, d] = deal(C{1}, C{2}, C{3}, C{4})
a=
How
b=
about
c=
this for a
d=
cell array of strings?
Hàm char có thể dùng để chuyển từ mảng tế bào sang mảng xâu:
>> s = char(C)
How
about
this for a
cell array of strings?
>> size(s)

% Kết quả là các xâu với các khoảng trống.
ans=
4
22
>> ss = char(C(1:2))
ss=
How
about
>> size(ss)
ans=
2
5
Để chuyển ngợc lại mảng tế bào, ta dùng hàm cellstr:
>> cellstr(s)
ans=
'How'
'about'
'this for a'
'cell array of strings?'
Hầu hết các hàm xâu trong MATLAB làm việc với cả mảng xâu hoặc mảng tế bào.
Về mảng tế bào sẽ đợc trình bày rõ hơn ở Chơng 19.

chơng 10
thời gian
MATLAB đa ra một số hàm thao tác về thời gian từ đó bạn có thể tính toán với ngày, giờ, in lịch
và tìm kiến những ngày cụ thể. MATLAB chứa ngày và thời gian nh một số có độ chính xác hai số
sau dấu phẩy tợng trng cho số ngày, bắt đầu bằng năm không. Ví dụ, mồng 1 tháng 1 năm 1997 tại
lúc nửa đêm, nó đợc tợng trng bởi số 729391, và cïng mét ngµy nh−ng lóc bi ch−a lµ 729391.5.
CÊu tróc này có thể dễ dàng cho máy tính xử lí, nh−ng nã rÊt khã diƠn gi¶i. Do vËy MATLAB cung
cÊp các hàm trợ giúp chuyển đổi giữa số và xâu kí tự và để thao tác với ngày và thời gian.




×