INTRODUZIONE A MATLAB
Sara Poltronieri
Archivi
I dati che dovranno essere introdotti in un
programma nonché quelli che sono prodotti da un
programma possono essere salvati su degli
ARCHIVI.
Le due operazioni fondamentali sono la scrittura e
la lettura.
Operazioni su files
Vediamo come scrivere dei dati su un archivio di testo. Si
voglia salvare la tabulazione della funzione sin(x) entro
l’intervallo (1, 2) con passo 0.1.
Si costruisce dapprima il vettore x
x = 1 : 0.1 : 2;
e quindi si valuta una matrice M
M = [ x; sin(x) ];
Apertura di un archivio
Decidiamo che il nome esterno dell’archivio su cui si vuole
salvare la matrice M sia funzione_sin.txt : esso dovrà essere
posto entro apici perché è una stringa.
Apriamo l’archivio in scrittura con ’w’ assegnandogli il nome
interno archivio_sin.
L’ istruzione è:
archivio_sin = fopen (‘funzione_sin.txt’ , ‘w’);
fopen
fid = fopen(filename,permission)
apre
il
file
filename
nella
modalità
specificata
dai
permessi(permission). Fid è uno scalare intero chiamato file identifier
e lo si usa nel passaggio dei files ad altre routines/functions. Se
fopen non riesce ad aprire il file, ritorna il valore –1.
I permessi possono essere:
‘r’
‘ w’
‘ a’
‘ r+’
‘ w+’
‘ a+’
Open file for reading (default).
Open file, or create new file, for writing;
discard existing contents, if any.
Open file, or create new file, for writing;
append data to the end of the file.
Open file for reading and writing.
Open file, or create a new file, for reading and writing;
discard existing contents, if any.
Open file, or create new file, for reading and writing;
append data to the end of the file.
Scrittura di un archivio
Si deposita nell’archivio archivio_sin la matrice M
scrivendo le due colonne di numeri decimali:
•la prima colonna con 6 cifre di cui 2 decimali
•la seconda colonna 8 cifre di cui 4 decimali.
Si osservi che fprintf è un acronimo di file print formatted
fprintf (archivio_sin ,’%6.2f %8.4f\n’,M);
Si noti che per primo si mette il nome interno, per secondo si
mette il formato per terzo si mette l’output da scrivere.
Quindi si chiude l’archivio
fclose (archivio_sin)
fprintf
fprintf(fid,format,objsToBeWritten)
count = fprintf(fid,format,objsToBeWritten)
fprintf formatta i dati contenuti in objsToBeWritten
nel formato specificato da format, e li scrive nel file
associato con l’identificatore fid ottenuto da fopen.
Count in particolare ritorna il numero di bytes scritti nel file.
Formato
flags
conversion character
%-12.5e
start of conversion
specification
precision
field width
flags
Character
Description
Example
A minus sign (-)
Left-justifies the
converted
argument in its field.
%-5.2d
A plus sign (+)
Always prints a sign
character (+ or -).
%+5.2d
Zero (0)
Pad with zeros rather
than spaces.
%05.2d
Field Width and Precision Specifications
Field width
A digit string specifying the minimum number of digits to be printed.
Precision
A digit string including a period (.) specifying the number of
digits to be printed to the right of the decimal point.
Conversion Characters
Specifier
%c
%d
%e
%E
%f
%g
%G
%i
%o
%s
%u
%x
%X
Description
Single character
Decimal notation (signed)
Exponential notation (using a lowercase e as in 3.1415e+00)
Exponential notation (using an uppercase E as in 3.1415E+00)
Fixed-point notation
The more compact of %e or %f. Insignificant zeros do not print.
Same as %g, but using an uppercase E
Decimal notation (signed)
Octal notation (unsigned)
String of characters
Decimal notation (unsigned)
Hexadecimal notation (using lowercase letters a-f)
Hexadecimal notation (using uppercase letters A-F)
Escape Characters
fprintf (archivio_sin ,’%6.2g %8.4g\n’,M);
Character
Description
\b
Backspace
Escape Character
\f
Form feed
\n
New line
\r
Carriage return
\t
Horizontal tab
\\
Backslash
\'' or ''
(two single quotes) Single quotation mark
%%
Percent character
Riassumendo...
% scrive archivio
x = 1 : 0.1 : 2;
M = [x; sin(x)];
fid = fopen (’filename.txt’ , ’w’);
fprintf (fid,’formato’,M);
fclose (fid)
Se si vuole vedere l’archivio così creato lo si può fare
con un editor di testo oppure digitando
edit filename.txt
Lettura di un archivio
Sia dato un archivio il cui nome esterno sia del tipo ”archivio.txt” (creato prima). Si
apre l’archivio assegnandogli un nome interno:
myArchive = fopen ( ‘archivio.txt’ , ‘r’);
Il nome del file deve essere posto entro apici perché è una stringa. Si preleva
dall’archivio myarchive la matrice M leggendo le due colonne di numeri in formato
”%g”
M = fscanf ( myArchive , ‘%f %f’ , [2 inf] );
M = M’;
Si noti che per primo si mette il nome interno myarchive, per secondo si mette il
formato (’%g %g’), per terzo si mette il numero di elementi per riga (2) e, non
sapendo quante righe sono, si mette inf.
il tutto entro parentesi quadre per indicare la matrice da prelevare. Quindi si chiude
l’archivio
fclose (myarchive);
fscanf
fscanf(fid,format,size)
fscanf legge i dati del file identificato dal fid tanti quanti
ne vengono specificati da size nel formato format.
Le opzioni valide per size sono:
n
Read n elements into a column vector.
inf
Read to the end of the file, resulting in a column vector
containing the same number of elements as are in the
file.
[m,n] Read enough elements to fill an m-by-n matrix, filling
the matrix in column order. n can be Inf, but not m.
fwrite & fread
Il comando fwrite scrive i dati in un file binario.
Il comando fread legge i dati contenuti nel file binario.
Sintassi (esempio):
M=magic(5);
fid = fopen('magic5.bin','w');
fwrite(fid,M,'uint32');
fclose(fid)
fid = fopen('magic5.bin','r');
fread(fid,[5,5],'uint32');
fclose(fid)
‘uint32’ = intero, senza segno
a 32 bit
Save & Load
Il comando save salva le variabili del WorkSpace su disco.
In particolare:
save
save filename
salva tutte le variabili del WS in un file matlab.mat
salva le variabili nel file filename.mat
save filename var1 var2
salva le variabili specificate nel
file filename.mat
Per caricare le variabili di un WS o un intero WS salvato
si usa il comando load con la stessa sintassi.