Giáo trình Matlab - Phan Thanh Tao

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

pdf204 trang | Chia sẻ: phuongt97 | Lượt xem: 300 | Lượt tải: 0download
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:

  • pdfgiao_trinh_matlab_phan_thanh_tao.pdf