Matlab là một phần mềm toán học của hãng Mathworks để tính toán trên các
số và có tính trực quan rất cao.
Matlab đã qua nhiều phiên bản, giáo trình này giới thiệu phiên bản 7.0
(release 14).
Matlab là viết tắt của Matrix Laboratory. Matlab làm việc chủ yếu với các ma
trận. Ma trận cỡ mxn là bảng số chữ nhật gồm mxn số được sắp xếp thành m hàng
và n cột. Trường hợp m=1 hoặc n=1 thì ma trận trở thành vectơ dòng hoặc cột;
trường hợp m=n=1 thì ma trận trở thành một đại lượng vô hướng. Nói chung,
Matlab có thể làm việc với nhiều kiểu dữ liệu khác nhau. Với xâu chữ (chuỗi ký
tự) Matlab cũng xem là một dãy các ký tự hay là dãy mã số của các ký tự.
Matlab dùng để giải quyết các bài toán về giải tích số, xử lý tín hiệu số, xử lý
đồ họa, mà không phải lập trình cổ điển
204 trang |
Chia sẻ: phuongt97 | Lượt xem: 388 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Giáo trình Matlab - Phan Thanh Tao, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Nãúu tãûp
âæåüc måí trong chãú âäü 'r' vaì khäng tçm tháúy tãûp
trong thæ muûc laìm viãûc thç FOPEN tçm xuäúng âæåìng
dáùn tçm kiãúm cuía MATLAB
[FID, MESSAGE] = FOPEN(' filename ',permission,
machineformat) måí tãûp chè âënh våïi chãú âäü chè âënh
vaì âoüc dæî liãûu bàòng caïch duìng FREAD hoàûc ghi
dæî liãûu bàòng caïch duìng FWRITE våïi FORMAT âaî cho
båíi machineformat. machineformat laì mäüt trong caïc
chuäùi sau:
'native' hoàûc 'n' - FORMAT maïy cuûc bäü- ngáöm
âënh
'ieee-le' hoàûc 'l' - chuáøn IEEE
'ieee-be' hoàûc 'b' - chuáøn IEEE
'vaxd' hoàûc 'd' - chuáøn VAX D
'vaxg' hoàûc 'g' - chuáøn VAX G
'cray'_ hoàûc 'c' - chuáøn Cray
'ieee-le.l64' hoàûc 'a' - chuáøn IEEE vaì âäü daìi
säú liãûu 64 bit
[FILENAME,PERMISSION,MACHINEFORMAT] = FOPEN(FID)
traí vãö tãn tãûp, chãú âäü måí, vaì daûng maïy våïi
daûnh hiãûu tãûp. Chãú âäü 'W' vaì 'A' âæåüc thiãút
kãú âãø duìng våïi caïc âéa tæì vaì khäng tæû âäüng
xoïa vuìng âãûm hiãûn thåìi sau caïc thao taïc xuáút.
Vê duû, måí 1/4" bàng tæì trãn traûm SPARC âãø ghi maì
khäng tæû âäüng xoïa vuìng âãûm: fid =
fopen('/dev/rst0','W')
FCLOSE
Âoïng tãûp
FCLOSE(FID) âoïng tãûp våïi danh hiãûu FID, laì mäüt
säú nguyãn nháûn âæåüc tæì FOPEN() træåïc âáy
FCLOSE('all') âoïng táút caí caï tãûp âang måí træì 0,
1 vaì 2
FCLOSE() traí vãö s 0 nãúu thaình cäng, -1 nãúu ngæåüc
laûi
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 214
Vaìo/Ra tãûp khäng daûng thæïc
FREAD
Âoüc tãûp nhë phán
[A, COUNT] = FREAD(FID,SIZE,PRECISION) âoüc dæî liãûu
nhë phán tæì tãûp chè âënh vaì ghi vaìo ma tráûn A.
Âäúi säú xuáút tuìy choün COUNT traí vãö säú pháön tæí
âoüc thaình cäng. FID laì danh hiãûu nguyãn cuía tãûp
âæåüc måí tæì FOPEN. Âäúi säú tuìy choün SIZE; nãúu
khäng coï thç âoüc toaìn bäü tãûp; nãúu coï thç caïc
âãö muûc håüp lyï laì:
N âoüc N pháön tæí vaìo mäüt vectå cäüt.
inf âoüc vaìo cuäúi tãûp.
[M,N] âoüc caïc pháön tæí âãø láúp âáöy ma tráûn
cåî MxN, theo thæï tæû cäüt
N coï thãø laì inf, nhæng khäng laì M
Âäúi säú PRECISION âiãöu khiãøn säú bit âoüc cho mäùi
giaï trë vaì thäng dëch caïc bit naìy nhæ caïc giaï trë
kyï tæû, säú nguyãn hoàûc säú thæûc. Caïc chuäùi sau
coï thãøø duìng, hoàûc caïc phiãn baín MATLAB, hoàûc C
hoàûc Fortran tæång âæång. Nãúu khäng chè âënh thç
âæåüc ngáöm âënh laì 'uchar'. Caïc pháön tæí cuía ma
tráûn kãút quaí luän læu trong daûng säú thæûc daìi
cuía MATLAB
MATLAB C hoàûc Fortran Mä taí
'char' 'char' kyï tæû ,
8 bit
'schar' 'signed char' kyï tæû coï
dáúu, 8 bit
'short' 'short' säú
nguyãn, 16 bit
'int' 'int' säú
nguyãn, 16 hoàûc 32 bit
'long' 'long' säú
nguyãn, 32 hoàûc 64 bit*
'float' 'float' säú thæûc
, 32 bit
'double' 'double' säú thæûc
daìi , 64 bit
'uchar' 'unsigned char' kyï tæû
khäng dáúu, 8 bit
'ushort' 'unsigned short' säú nguyãn
khäng dáúu, 16 bit
'uint' 'unsigned int' säú nguyãn
khäng dáúu, 16 hoàûc 32 bit
'ulong' 'unsigned long' säú nguyãn
khäng dáúu, 32 bit
'char' 'char*1' kyï tæû , 8
bit
'float32' 'real*4' säú thæûc
32 bit
'float64' 'real*8' säú
thæûc 64 bit
'int8' 'integer*1' säú nguyãn, 8
bit
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 215
'int16' 'integer*2' säú nguyãn,
16 bit
'int32' 'integer*4' säú nguyãn,
32 bit
'integer*8' säú nguyãn, 64
bits**
'intN' säú
nguyãn coï dáúu, N bit räüng
'uintN' säú
nguyãn khäng dáúu, N bit räüng
N biãøu hiãûn giaï trë báút kyì giæîa 1 vaì 32
* 64 bits trãn DEC alpha
** chè duìng trãn DEC alpha
Vê duû,
fid = fopen('FREAD.m','r');
F = FREAD(fid);
s = setstr(F')
måí tãûp chæïa âãö muûc HELP naìy, räöi âoüc vaì hiãøn
thë toaìn bäü tãûp, ngáöm âënh duìng size = inf vaì
precision = 'uchar'. Kãút quaí length(F) laì säú kyï
tæû trong tãûp
[A, COUNT] = FREAD(FID,SIZE,PRECISION,SKIP) âæa vaìo
âäúi säú tuìy choün SKIP âãø chè âënh säú byte boí qua
sau mäùi láön âoüc. Caïch naìy thæåìng duìng âãø trêch
dæî liãûu trong caïc træåìng khäng liãn tuûc tæì caïc
baín ghi coï âäü daìi cäú âënh
FWRITE
Ghi dæî liãûu vaìo mäüt tãûp nhë phán
COUNT = FWRITE(FID,A,PRECISION) ghi caïc pháön tæí cuía
ma tráûn A vaìo tãûp chè âënh, dëch caïc giaï trë
MATLAB sang âäü chênh xaïc chè âënh laì precision. Dæî
liãûu âæåüc ghi theo thæï tæû cäüt. COUNT laì säú pháön
tæí âæåüc ghi thaình cäng. FID laì danh hiãûu säú
nguyãn cuía tãûp nháûn tæì FOPEN, hoàûc 1 chi xuáút
chuáøn hoàûc 2 cho läùi chuáøn. PRECISION âiãöu khiãøn
daûng vaì kêch thæåïc cuía kãút quaí. Xem danh saïch
PRECISION cho pheïp trong FREAD
COUNT = FWRITE(FID,A,PRECISION,SKIP) âæa vaìo âäúi
säú tuìy choün SKIP âãø chè âënh säú byte boí qua
træåïc mäùi láön ghi. Caïch naìy thæåìng duìng âãø
cheìn dæî liãûu trong caïc træåìng khäng liãn tuûc tæì
caïc baín ghi coï âäü daìi cäú âënh
Vê duû
fid = fopen('magic5.bin','wb')
FWRITE(fid,magic(5),'integer *4')
Taûo måïi mäüt tãûp nhë phán 100-byte, chæïa 25 pháön
tæí cuía ma phæång báûc 5, læu nhæ caïc säú nguyãn 4-
byte
Nháûp/xuáút tãûp coï daûng thæïc
FSCANF
Âoüc dæî liãûu coï daûng thæïc trong mäüt tãûp
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 216
[A,COUNT] = FSCANF(FID,FORMAT,SIZE) âoüc dæî liãûu
tæì tãûp chè âënh båíi danh hiãûu tãûp FID, chuyãøn
sang chuäùi chè âënh FORMAT, vaì traí vãö ma tráûn A.
COUNT laì âäúi säú xuáút tuìy choün âãø traí vãö säú
pháön tæí âoüc thaình cäng
FID laì mäüt säú nguyãn danh hiãûu tãûp nháûn âæåüc
tæì FOPEN. SIZE laì tuìy choün; noï âàût mäüt giåïi
haûn vaìo säú pháön tæí coï thãø âæåüc âoüc tæì tãûp;
nãúu khäng chè âënh thç xem nhæ toaìn bäü tãûp; nãúu
coï chè âënh thç caïc âãö muûc håüp lyï laì:
N âoüc háöu hãút N pháön tæí vaìo
mäüt vectå cäüt
inf âoüc âãún hãút tãûp
[M,N] âoüc M * N pháön tæí láúp âáöy êt
nháút mäüt ma tráûn cåî MxN, theo thæï tæû cäüt. N coï
thãø laì inf, nhæng khäng laì M. Nãúu ma tráûn traí vãö
A tæì caïch chè duìng chuyãøn âäøi kyï tæû vaì SIZE
khäng thuäüc daûng [M,N] thç traí vãö mäüt vectå cäüt.
FORMAT laì mäüt chuäùi chæïa caïc chè âënh chuyãøn âäøi
cuía ngän ngæî C. Caïc chè âënh chuyãøn âäøi gäöm kyï
tæû %, læûa choün “*” boí qua viãûc gaïn vaì træåìng
âäü räüng, vaì caïc kyï tæû chuyãøn kiãøu d, i, o, u,
x, e, f, g, s, c, vaì [. . .]. Xem giaïo trçnh C vãö
caïc kyï tæû chuyãøn kiãøu. Nãúu mäüt kyï tæû chuyãøn
âäøi âæåüc duìng âãø âoüc mäüt pháön tæí thç coï thãø
laìm cho mäüt säú pháön tæí ma tráûn cuía MATLAB âæåüc
duìng, mäùi pháön tæí giæî mäüt kyï tæû . Viãûc träün
kyï tæû vaì caïc chè âënh chuyãøn kiãøu säú seî laìm
cho ma tráûn kãút quaí laì ma tráûn säú vaì caïc kyï
tæû âoüc vaìo nhæ giaï trë ASCII cuía chuïng, mäùi kyï
tæû trãn mäüt pháön tæí cuía ma tráûn
FSCANF khaïc våïi haìm truìng tãn cuía noï trong C,
âiãöu quan troüng tæång æïng laì noï âæåüc
“vectå hoïa" nhàòm traíí vãö mäüt âäúi säú ma tráûn.
Chuäùi FORMAT âæåüc duìng laûi qua tãûp cho âãún khi
hãút tãûp hoàûc täøng säú dæî liãûu chè âënh båíi SIZE
âæåüc âoüc vaìo. Vê duû:
S = fscanf(fid,'%s') âoüc (vaì traí vãö ) mäüt
chuäùi kyï tæû
A = fscanf(fid,'%5d') âoüc säú nguyãn tháûp phán
5-chæî säú
FPRINTF
FPRINTF Ghi dæî liãûu coï daûng thæïc vaìo tãûp
COUNT = FPRINTF(FID,FORMAT,A,...) âënh daûng dæî liãûu
trong ma tráûn A (vaì trong moüi ma tráûn âäiú säú thãm
vaìo), dæåïi âiãöu khiãøn cuía chuäùi chè âënh FORMAT,
vaì ghi noï vaìo tãûp coï daûnh hiãûu FID. COUNT laì
âäúi säú xuáút tuìy choün âãø traí vãö säú byte ghi
thaình cäng. FID laì mäüt säú nguyãn danh hiãûu tãûp
nháûn âæåüc FOPEN. Noï cuîng coï thãø laì 1 cho xuáút
chuáøn (maìn hçnh) hoàûc 2 cho läùi chuáøn. FORMAT laì
chuäùi chæïa caïc chè âënh chuyãøn kiãøu cuía C. Caïc
chè âënh chuyãøn âäøi gäöm kyï tæû %, , caïc cåì tuìy
choün, caïc træåìng âäü räüng vaì säú caïc säú tháûp
phán, chè âënh kiãøu con, vaì caïc kyï tæû chuyãøn
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 217
kiãøu d, i, o, u, x, X, f, e, E, g, G, c, vaì s. Xem
giaïo trçnh C âãø biãút thãm chi tiãút
FPRINTF nhæ ANSI C våïi caïc loaûi træì vaì caïc måí
räüng. Bao gäöm:
1. Nãúu säú thæûc keïp cuía MATLAB khäng chuyãøn
chênh xaïc sang kiãøu dæî liãûu chè âënh trong kyï tæû
chuyãøn kiãøu thç FORMAT “e ” âæåüc duìng. Phaíi
chuyãøn roî raìng caïc giaï trë khäng nguyãn cuía
MATLAB sang caïc giaï trë nguyãn nãúu coï yï âënh duìng
chè âënh chuyãøn kiãøu nguyãn nhæ “ d ” vaì láúy caïch
xæí lyï cuía ANSI C
2. Caïc chè âënh kiãøu con khäng chuáøn sau âæåüc
cung cáúp cho caïc kyï tæû chuyãøn kiãøu o, u, x, vaì X
t - Kiãøu dæî liãûu cå såí cuía C laì float
khaïc våïi säú nguyãn khäng dáúu
b - Kiãøu dæî liãûu cå såí cuía C laì double
khaïc våïi säú nguyãn khäng dáúu
Vê duû, âãø in ra mäüt giaï trë double cå säú hex thç
duìng FORMAT nhæ '%bx'
FPRINTF cuîng khaïc våïi haìm cuìng tãn cuía noï trong
C - quan troüng laì " vectå hoïa " khi A khäng phaíi
laì âaûi læåüng vä hæåïng. Chuäùi FORMAT âæåüc duìng
laûi qua caïc pháön tæí cuía A (tæìng cäüt) cho âãún
khi táút caí caïc pháön tæí âæåüc duìng hãút. Räöi noï
âæåüc duìng laûi theo cuìng caïch, khäng khåíi taûo
laûi, qua moüi âäúi säú ma tráûn thãm vaìo. Vê duû,
caïc lãûnh
x = 0:.1:1; y = [x; exp(x)];
fid = fopen('exp.txt','w');
fprintf(fid,'%6.2f %12.8f\n',y);
taûo måïi mäüt tãûp vàn baín chæïa baíng ngàõn caïc
giaï trë cuía haìm muî cå säú tæû nhiãn:
0.00 1.00000000
0.10 1.10517092
...
1.00 2.71828183
FGETL
Traí vãö doìng tiãúp theo cuía tãûp nhæ mäüt chuäùi
FGETL(FID) traí vãö doìng tiãúp theo cuía mäüt tãûp
våïi danh hiãûu tãûp FID nhæ mäüt chuäùi MATLAB. Traí
vãö maì khäng âæa vaìo kyï tæû sang doìng. Duìng
FGETS() âãø láúy doìng tiãúp theo coï âæa vaìo kyï tæû
sang doìng. Nãúu âuïng kãút thuïc tãûp thç traí vãö -1
QUAN TROÜNG: Haîy læu yï ràòng haìm naìy coï yï
chè duìng våïi tãûp vàn baín. Nãúu båíi nháöm láùn,
âoüc mäüt tãûp "nhë phán" maì khäng coï kyï tæû sang
doìng thç phuûc vuû naìy coï thãø täún nhiãöu thåìi
gian våïi tãûp låïn. Vê duû: (tæång âæång lãûnh 'type
fgetl.m')
fid=fopen('fgetl.m');
while 1
line = fgetl(fid);
if ~isstr(line), break, end
disp(line)
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 218
end
fclose(fid);
FGETS
Traí vãö doìng tiãúp theo cuía tãûp nhæ mäüt chuäùi
FGETS(FID) traí vãö doìng tiãúp theo cuía mäüt
tãûp våïi danh hiãûu tãûp fid laì mäüt chuäùi MATLAB.
Coï âæa vaìo kyï tæû sang doìng. Duìng FGETL() âãø láúy
doìng tiãúp theo maì khäng âæa vaìo kyï tæû sang doìng.
Nãúu âuïng kãút thuïc tãûp thç traí vãö -1
QUAN TROÜNG: Haîy læu yï ràòng haìm naìy coï yï chè
duìng våïi tãûp vàn baín. Nãúu båíi nháöm láùn, âoüc
mäüt tãûp "nhë phán" maì khäng coï kyï tæû sang doìng
thç phuûc vuû naìy coï thãø täún nhiãöu thåìi gian våïi
tãûp låïn
Vë trê tãûp
FERROR
Hoíi caïc läùi trong nháûp/xuáút tãûp
MESSAGE = FERROR(FID,'clear') traí vãö thäng baïo
läùi vaìo/ra gáön nháút våïi tãûp chè âënh. Chuäùi
'clear' laì tuìy choün. Nãúu coï, thç xoïa läùi biãøu
hiãûn cho tãûp chè âënh
[MESSAGE, ERRNUM] = FERROR(FID) cuîng traí vãö säú
läùi. FID laì mäüt säú nguyãn danh hiãûu tãûp nháûn
âæåüc tæìì FOPEN, hoàûc 0 cho nháûp chuáøn, 1 cho xuáút
chuáøn hoàûc 2 cho läùi chuáøn
FEOF
Kiãøm tra hãút tãûp
FEOF(FID) kiãøm tra biãøu hiãûn hãút tãûp cho tãûp
våïi danh hiãûu tãûp laì FID
FEOF(FID) traí vãö 1 nãúu biãøu hiãûn hãút tãûp âæåüc
âàût, hoàûc 0 nãúu khäng âàût
FSEEK
Âäøi biãøu hiãûn vë trê trong mäüt tãûp
STATUS = FSEEK(FID, offset, origin) âàût laûi vë trê
tãûp trong tãûp chè âënh vaìo säú byte offset tæång
æïng våïi origin chè âënh. FID laì mäüt säú nguyãn danh
hiãûu tãûp nháûn âæåüc tæìì FOPEN. Caïc giaï trë offset
âæåüc thäng dëch nhæ sau:
> 0 : Di chuyãøn vãö phêa cuäúi tãûp
= 0 : Khäng thay âäøi vë trê
< 0 : Di chuyãøn vãö phêa âáöu tãûp
Caïc giaï trë origin âæåüc thäng dëch nhæ sau:
'bof' hoàûc -1 : Âáöu tãûp
'cof' hoàûc 0 : Vë trê hiãûn thåìi trong tãûp
'eof' hoàûc 1 : Cuäúi tãûp
STATUS = 0 nãúu thaình cäng vaìì -1 nãúu bë läùi
Vê duû:
fseek(fid,0,-1) "tua laûi" tãûp (âàût vë trê
laûi åí âáöu tãûp)
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 219
FTELL
Tçm vë trê trong mäüt tãûp
POSITION = FTELL(FID) traí vãö vë trê cuía trong tãûp
chè âënh. Position biãøu hiãûn theo âån vë byte tênh
tæì âáöu tãûp. Nãúu -1 âæåüc traí vãö, thç biãøu hiãûn
khäng thaình cäng; duìng FERROR âãø xaïc âënh traûng
thaïi läùi. FID laì mäüt säú nguyãn danh hiãûu tãûp
nháûn âæåüc tæì FOPEN, hoàûc 0 cho nháûp chuáøn, 1 cho
xuáút chuáøn hoàûc 2 cho läùi chuáøn
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 220
FREWIND
FREWIND tua laûi mäüt tãûp âang måí
FREWIND(FID) âàût con troí tãûp vaìo âáöu tãûp våïi
danh hiãûu tãûp laì fid
Khuyãún caïo: Tua laûi mäüt danh hiãûu tãûp fid våïi
mäüt thiãút bë bàng tæì coï thãø khäng khäng laìm
viãûc, màûc duì khäng phaït sinh läùi!
Chuyãøn âäøi chuäùi
SPRINTF
SPRINTF Ghi dæî liãûu coï daûng thæïc vaìo mäüt chuäùi
[S,ERRMSG] = SPRINTF(FORMAT,A,...) âënh daûng dæî
liãûu trong ma tráûn A (vaì trong caïc âäúi säú ma
tráûn thãm vaìo), dæåïi âiãöu khiãøn cuía chuäùi chè
âënh FORMAT, vaì traí vãö noï trong biãún S våïi daûng
chuäùi MATLAB. ERRMSG laì âäúi säú xuáút tuìy choün âãø
traí vãö mäüt chuäùi thäng baïo läùi nãúu xaíy ra läùi
hoàûc mäüt ma tráûn räùng nãúu khäng läùi. SPRINTF
giäúng nhæ FPRINTF ngoaûi træì noï traí vãö dæî liãûu
trong mäüt biãún chuäùi MATLAB khaïc våïi ghi vaìo
tãûp. FORMAT laì mäüt chuäùi chæïa caïc chè âënh
chuyãøn kiãøu cuía C. Caïc chè âënh chuyãøn kiãøu gäöm
kyï tæû %, caïc cåì, caïc træåìng âäü räüng vaì säú
chæî säú tháûp phán, chè âënh kiãøu con, vaì kyï tæû
chuyãøn kiãøu d, i, o, u, x, X, f, e, E, g, G, c, vaì
s. Xem giaïo trçnh C âãø biãút thãm chi tiãút. SPRINTF
nhæ trong ANSI C våïi moüt säú ngoaûi lãû vaì måí
räüng. Bao gäöm:
1. Nãúu säú thæûc keïp cuía MATLAB khäng chuyãøn chênh
xaïc sang kiãøu dæî liãûu chè âënh trong kyï tæû
chuyãøn kiãøu thç FORMAT “e” âæåüc duìng. Baûn phaíi
chuyãøn roî raìng caïc giaï trë khäng nguyãn cuía
MATLAB sang caïc giaï trë nguyãn nãúu baûn coï yï âënh
duìng chè âënh chuyãøn kiãøu nguyãn nhæ “ d ” vaì láúy
caïch xæí lyï cuía ANSI C
2. Caïc chè âënh kiãøu con khäng chuáøn sau âæåüc
cung cáúp cho caïc kyï tæû chuyãøn kiãøu o, u, x, vaì X
t - Kiãøu dæî liãûu cå såí cuía C laì float
khaïc våïi säú nguyãn khäng dáúu
b - Kiãøu dæî liãûu cå såí cuía C laì double
khaïc våïi säú nguyãn khäng dáúu
Vê duû, âãø in ra mäüt giaï trë double cå säú hex thç
duìng FORMAT nhæ '%bx'
SPRINTF cuîng khaïc våïi haìm cuìng tãn cuía noï trong
C - quan troüng laì " vectå hoïa " khi A khäng phaíi
laì âaûi læåüng vä hæåïng. Chuäùi FORMAT âæåüc duìng
laûi qua caïc pháön tæí cuía A (tæìng cäüt) cho âãún
khi táút caí caïc pháön tæí âæåüc duìng hãút. Räöi noï
âæåüc duìng laûi theo cuìng caïch, khäng khåíi taûo
laûi, qua moüi âäúi säú ma tráûn thãm vaìo. Vê duû,
caïc lãûnh
S = sprintf('rho is %5.3f',(1+sqrt(5))/2) cho ra
chuäùi S = 'rho is 1.618'
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 221
SSCANF
Âoüc chuäùi dæåïi âiãöu khiãøn coï daûng thæïc
[A,COUNT,ERRMSG,NEXTINDEX] = SSCANF(S,FORMAT,SIZE)
âoüc dæî liãûu tæì biãún chuäùi MATLAB laì S, chuyãøn
sang chuäùi chè âënh FORMAT, vaì traí vãö trong ma
tráûn A. COUNT laì mäüt âäúi säú xuáút tuìy choün âãø
traí vãö säú pháön tæ âoüc thaình cäng
ERRMSG laì mäüt âäúi säú xuáút tuìy choün âãø traí vãö
mäüt chuäùi thäng baïo läùi nãúu coï läùi hoàûc mäüt ma
tráûn räùng nãúu khäng läùi. NEXTINDEX laì mäüt âäúi
säú xuáút tuìy choün chè âënh mäüt hay nhiãöu säú kyï
tæû âaî queït trong S. SSCANF giäúng FSCANF ngoaûi
træì noï âoüc dæî liãûu tæì mäüt biãún chuäùi MATLAB
khaïc våïi âoüc tæì mäüt tãûp. SIZE laì tuìy choün;
noï âàût mäüt giåïi haûn vaìo pháön tæ coï thãø queït
tæì chuäùi; nãúu khäng chè âënh, thç xem nhæ toaìn bäü
chuäùi; nãúu coï chè âënh, thç caïc âãö muûc håüp lyï
laì:
N âoüc N pháön tæí vaìo mäüt vectå cäüt
inf âoüc âãún cuäúi chuäùi
[M,N] âoüc M * N pháön tæí láúp âáöy êt nháút
mäüt ma tráûn cåî MxN, theo cäüt. N coï thãø laì inf,
nhæng khäng laì M. Nãúu ma tráûn kãút quaí A chè tæì
viãûc duìng kyï tæû chuyãøn kiãøu vaì SIZE khäng coï
daûng [M,N] thç mäüt vectå doìng âæåüc traí vãö. FORMAT
laì mäüt chuäùi chæïa caïc chè âënh chuyãøn âäøi cuía
ngän ngæî C. Caïc chè âënh chuyãøn âäøi gäöm kyï tæû
%, læûa choün “ * ” boí qua viãûc gaïn vaì træåìng âäü
räüng, vaì caïc kyï tæû chuyãøn kiãøu d, i, o, u, x, e,
f, g, s, c, vaì [. . .]. Xem giaïo trçnh C vãö caïc kyï
tæû chuyãøn kiãøu. Nãúu mäüt kyï tæû chuyãøn âäøi
âæåüc duìng âãø âoüc mäüt pháön tæí thç coï thãø laìm
cho mäüt säú pháön tæí ma tráûn cuía MATLAB âæåüc
duìng, mäùi pháön tæí giæî mäüt kyï tæû . Viãûc träün
kyï tæû vaì caïc chè âënh chuyãøn kiãøu säú seî laìm
cho ma tráûn kãút quaí laì ma tráûn säú vaì caïc kyï
tæû âoüc vaìo nhæ giaï trë ASCII cuía chuïng, mäùi kyï
tæû trãn mäüt pháön tæí cuía ma tráûn
Viãûc queït âãún cuäúi chuäùi xaíy ra khi NEXTINDEX
låïn hån kêch thæåïc cuía S
SSCANF khaïc våïi haìm truìng tãn cuía noï trong C,
âiãöu quan troüng tæång æïng laì noï âæåüc “vectå
hoïa" nhàòm traíí vãö mäüt âäúi säú ma tráûn. Chuäùi
FORMAT âæåüc duìng laûi qua tãûp cho âãún khi hãút tãûp
hoàûc täøng säú dæî liãûu chè âënh båíi SIZE âæåüc
chuyãøn sang. Vê duû, caïc lãûnh:
S = '2.7183 3.1416';
A = sscanf(S,'%f')
taûo måïi mäüt vectå hai pháön tæí chæïa giaï trë
xáúp xè cuía säú e vaì pi
Caïc ma tráûn thæa så cáúp
SPEYE
Ma tráûn thæa âån vë
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 222
SPEYE(M,N) taûo mäüt ma tráûn thæa cåî MxN våïi caïc
säú 1 trãn âæåìng cheïo chênh
SPEYE(N) laì caïch goün cuía SPEYE(N,N)
SPEYE(SIZE(A)) laì mäüt caïch giaím khäng gian cuía
SPARSE(EYE(SIZE(A)))
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 223
SPRANDN
Caïc ma tráûn thæa ngáùu nhiãn
R = SPRANDN(S) coï cuìng cáúu truïc thæa nhæ S, nhæng
caïc pháön tæí âæåüc phán bäú ngáùu nhiãn chuáøn
R = SPRANDN(m,n,density) laì ma tráûn thæa cåî mxn,
våïi caïc pháön tæí khaïc khäng âæåüc phán bäú chuáøn
khoaíng density*m*n
R = SPRANDN(m,n,density,rc) cuîng coï säú âiãöu kiãûn
tæång häù gáön bàòng rc. R âæåüc xáy dæûng tæì täøng
caïc ma tráûn haûng bàòng 1. Nãúu rc laì mäüt vectå âäü
daìi lr <= min(m,n), thç R coï lr giaï trë kyì dë cuía
noï laì rc, táút caí caïc pháön tæí khaïc bàòng 0.
Trong træåìng håüp naìy, R âæåüc phaït sinh bàòng caïch
quay phàóng ngáùu nhiãn aïp duûng cho mäüt ma tráûn
cheïo våïi caïc giaï trë kyì dë cho træåïc. Noï coï
caïch phán phäúi låïn cáúu truïc topo vaì âaûi säú
SPRANDSYM
SPRANDSYM Caïc ma tráûn thæa ngáùu nhiãn âäúi xæïng
R = SPRANDSYM(S) laì mäüt ma tráûn thæa ngáùu nhiãn
âäúi xæïng coï tam giaïc dæåïi vaì âæåìng cheïo cuìng
cáoï truïc nhæ S. Caïc pháön tæí âæåüc phán bäú
chuáøn, våïi trung bçnh 0 vaì phæång sai 1
R = SPRANDSYM(n,density) laì mäüt ma tráûn vuäng
thæa âäúi xæïng ngáùu nhiãn cáúp n våïi caïc pháön tæí
khaïc khäng khoaíng density*n*n; mäùi pháön tæí laì
täøng cuía mäüt hoàûc nhiãöu caïc máùu phán bäú ngáùu
nhiãn chuáøn
R = SPRANDSYM(n,density,rcond) cuîng coï säú âiãöu
kiãûn tæång häù bàòng rcond. Viãûc phán bäú caïc pháön
tæí laì khäng âäöng bäü; noï laì âäúi xæïng thä qua 0;
táút caí trong âoaûn [-1,1]. Nãúu rcond laì 1 vectå âäü
daìi n, thç R coï caïc giaï trë riãng laì rcond. Do
âoï, nãúu rcond laì mäüt vectå dæång (khäng ám) thç R
seî xaïc âënh dæång (khäng ám). Trong træåìng håüp
naìy, R âæåüc phaït sinh bàòng caïch quay Jacobi aïp
duûng voìa ma tráûn cheïo våïi caïc giaï trë riãng
hoàûc säú âiãöu kiãûn cho træåïc. Noï coï caïch phán
phäúi låïn cáúu truïc topo vaì âaûi säú
R = SPRANDSYM(n, density, rcond, kind) laì mäüt xaïc
âënh dæång. Nãúu kind = 1 thç R âæåüc phaït sinh bàòng
pheïp quay mäüt ma tráûn cheïo xaïc âënh dæång. R coï
âuïng säú âiãöu kiãûn mong muäún. Nãúu kind = 2 thç R
laì täøng dëch chuyãøn caïc têch ngoaûi lai. R chè coï
säú âiãöu kiãûn mong muäún nhæng cáúu truïc nhoí hån.
Nãúu R = SPRANDSYM(S, density, rcond, 3), thç R coï
cuìng cáúu truïc nhæ ma tráûn S vaì säú âiãöu kiãûn
xáúp xè 1/rcond, âäúi säú density âæåüc boí qua
SPDIAGS
SPDIAGS Trêch ra vaì taûo måïi caïc ma tráûn daîi bàng
vaì ma tráûn cheïo thæa
SPDIAGS, laì täøng quaït hoïa haìm gàõn liãön "diag",
xæí lyï 3 loaûi ma tráûn , caïc täø håüp khaïc nhau,
cuîng nhæ nháûp vaì xuáút. A laì ma tráûn cåî mxn,
thæåìng thæa (nhæng khäng cáön thiãút), våïi caïc pháön
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 224
tæí khaïc khäng, hoàûc chè âënh, caïc pháön tæí âàût
trãn p âæåìng cheïo
B laì ma tráûn min(m,n) haìng vaì p cäüt, thæång âáöy
âuí (nhæng khäng cáön thiãút), coï caïc cäüt laì caïc
âæåìng cheïo cuía A. d laì vectå âäü daìi p coï caïc
thaình pháön nguyãn chè âënh caïc âæåìng cheïo trong A
Mäüt caïch thä så, A, B vaì d quan hãû båíi
for k = 1:p
B(:,k) = diag(A,d(k))
end
Bäún thao taïc khaïc nhau, phán biãût theo säú âäúi
säú nháûp, coï thãø duìng våïi SPDIAGS laì:
Láúy ra táút caí caïc âæåìng cheïo khaïc khäng:
[B,d] = spdiags(A);
Láúy ra âæåìng cheïo chè âënh:
B = spdiags(A,d);
Thay caïc âæåìng cheïo chè âënh:
A = spdiags(B,d,A);
Taûo mäüt ma tráûn thæa tæì caïc âæåìng cheïo cuía
noï:
A = spdiags(B,d,m,n);
Quan hãû chênh xaïc trong A, B vaì d laì:
if m >= n
for k = 1:p
for j = max(1,1+d(k)):min(n,m+d(k))
B(j,k) = A(j-d(k),j);
end
end
if m < n
for k = 1:p
for i = max(1,1-d(k)):min(m,n-d(k))
B(i,k) = A(i,i+d(k));
end
end
end
Vaìi pháön tæí cuía B, æïng våïi caïc vë trê “ bãn
ngoaìi ” A, khäng xaïc âënh âæåüc bàòng caïc voìng làûp
naìy. Chuïng khäng âæåüc tham chiãúu khi B laì âäúi
säú nháûp vaì âæåüc dàût giaï trë 0 khi B laì âäúi säú
xuáút.
Vê duû, caïc lãûnh naìy phaït sinh mäüt biãøu hiãûn 3
âæåìng cheïo thæa cuía pheïp vi phán cáúp 2 cäø âiãøn
taûi n âiãøm
e = ones(n,1);
A = spdiags([e -2*e e], -1:1, n, n)
Lãûnh naìy âäøi ma tráûn A thaình ma tráûn kiãøm tra
Wilkinson (xem WILKINSON(n))
A = spdiags(abs(-(n-1)/2:(n-1)/2)',0,A)
Cuäúi cuìng, lãûnh naìy sæía laûi 3 âæåìng cheïo
B = spdiags(A)
Vê duû thæï hai khäng vuäng
A = [ 11 0 13 0
0 22 0 24
0 0 33 0
41 0 0 44
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 225
0 52 0 0
0 0 63 0
0 0 0 74]
coï m = 7, n = 4 vaì p = 3
Lãûnh [B,d] = spdiags(A) cho d = [-3 0 2]' vaì
B = [ 41 11 0
52 22 0
63 33 13
74 44 24 ]
Ngæåüc laûi, våïi B vaì d nhæ trãn thç biãøu thæïc
spdiags(B,d,7,4) cho laûi A vãö giaï trë gäúc
Chuyãøn ma tráûn âáöy âuí thaình ma tráûn thæa
SPARSE
Xáy dæûng ma tráûn thæa tæì caïc säú khaïc 0 vaì caïc
chè säú
S = SPARSE(...) laì haìm gàõn liãön phaït sinh caïc
ma tráûn thuäüc låïp læu træî thæa cuía MATLAB. Haìm
naìy coï thãø goüi våïi 1, 2, 3, 5 hoàûc 6 âäúi säú
S = SPARSE(X) chuyãøn ma tráûn thæa hoàûc âáöy âuí
sang daûng thæa bàòng caïch boí âi caïc pháön tæí 0
S = SPARSE(i,j,s,m,n,nzmax) duìng caïc doìng cuía
[i,j,s] âãø phaït sinh mäüt ma tráûn thæa cåî mxn våïi
khäng gian phán bäú cho nzmax pháön tæí khaïc 0. Hai
vectå chè säú nguyãn, i vaì j, vaì vectå thæûc hoàûc
phæïc, s, táút caí cuìng âäü daìi, nnz, laì säú pháön
tæí khaïc 0 trong ma tráûn thæa kãút quaí. Coï mäüt säú
caïch goüi âån giaín 6 âäúi säú naìy
S = SPARSE(i,j,s,m,n) duìng nzmax = length(s).
S = SPARSE(i,j,s) duìng m = max(i) vaì n = max(j).
S = SPARSE(m,n) caïch tàõt cuía
SPARSE([],[],[],m,n,0). Lãûnh naìy phaït sinh ma tráûn
thæa cå baín cåî mxn gäöm táút caí caïc säú 0. Âäúi
säú s vaì mäüt trong hai âäúi säú i vaì j coï thãø laì
âaûi læåüng vä hæåïng, trong træåìng håüp naìy chuïng
âæåüc bung ra âãø caí 3 âäúi säú âáöu coï cuìng âäü
daìi. Vê duû, trêch ra vaì sau âoï raïp laûi mäüt ma
tráûn thæa:
[i,j,s] = find(S);
[m,n] = size(S);
S = sparse(i,j,s,m,n);
Båíi váûy, nhæ caïc lãûnh naìy, nãúu doìng vaì cäüt
cuäúi cuìng coï caïc pháön tæí khaïc 0:
[i,j,s] = find(S);
S = sparse(i,j,s);
Táút caí caïc thao taïc gàõn liãön cuía MATLAB vãö
säú hoüc, logic vaì vãö chè säú âãöu coï thãø aïp duûng
cho caïc ma tráûn thæa, hoàûc cho caïc ma tráûn væìa
thæa væìa âáöy âuí. Caïc thao taïc trãn ma tráûn thæa
traí vãö ma tráûn thæa, âáöy âuí traí vãö âáöy âuí.
Trong háöu hãút caïc træåìng håüp thç caïc thao taïc
trãn caïc ma tráûn væìa thæa væìa âáöy âuí traí vãö
âáöy âuí. Ngoaûi træì træåìng håüp coï âæa vaìo, kãút
Phan Thanh Tao - 2004
Phụ lục-Lệnh và hàm 226
quaí cuía caïc thao taïc träün thæa våïi âáöy âuí coï
cáúu truïc thæa
Các file đính kèm theo tài liệu này:
- giao_trinh_matlab_phan_thanh_tao.pdf