INDIETRO
 Laboratorio 7
AVANTI

leggere e scrivere i dati in octave e matlab

Per salvare i dati in un file si puo' usare in octave il comando save e per leggerli load

x=[-1:0.1:1];
y=x.^3;
plot(x,y);
size(x);
save prova x y


Questo crea un file prova che contiene non solo x e y ma anche dei metadati che specificano che x e y sono vettori.

Attenzione ad usare solo spazi bianche come separatori e a non mettere spazi o caratteri strani nel nome file...

Matlab non riesce a leggere questo file.

Per recuperare i dati in octave:

load prova
size(x)
size(y)
plot(x,y)


Proviamo ora a cancellare i metadati dal file; ora octave non conosce i nomi delle due variabili ma legge ugualmente il file:

load prova
size(prova)
plot(prova(1,:),prova(2,:))


Questa volta il file viene letto anche da Matlab, con gli stessi comandi.

Cosa succede se usiamo il comando save in Matlab ?
Matlab crea un file binario prova.mat comprensivo dei metadati.
Sia Matlab che octave possono leggerlo ricostruendo i due vettori x e y.

In Matlab si possono dare comunque le opzioni -ASCII e -DOUBLE:

x=[-1:0.1:1];
y=x.^3;
plot(x,y);
size(x);
save prova x y -ASCII -DOUBLE


Notare che questa volta il file viene salvato col nome prova.

Infine octave può usare le forme funzionali dei due comandi, cioè del tipo:
save("prova","x","y")

Funzioni più complete sono fread e fwrite che hanno sintassi simile al C, ma che richiedono maggiori accortezze sopratutto per quel che riguarda le strutture e le precisioni dei dati da manipolare.

Per esempio per scrivere e poi leggere un vettore x di 21 numeri in doppia precisione, usando il Matlab (o octave), posso dare questi comandi:


ff=fopen('prova','w')
x=[-1:0.1:1];
size(x)
fwrite(ff,x,'double')
fclose(ff)



ff=fopen('prova','r')
[x,n]=fread(ff,inf,'double',0,'l');
x


Si noti che Matlab usa l'apice singolo e non doppio comune su octave, e che si è dovuto specificare che i numeri sono in doppia precisione; in certi casi occorre specificare perfino l'architettura (little endian o big endian); inf è va sostituito con le esatte dimensioni oppure viene letto un unico vettore di numeri.
Se si trascura di specificare la doppia precisione i numeri vengono letti errati (provare). Come pure succede se non si specificano le dimensioni di una matrice, tipo [2 7].

Per esempio nel file prova abbiamo salvato una matrice di float in doppia precisione di dimensione 5x6.
Provare a leggerla: la prima riga dovrebbe essere:
0.334531 0.916313 0.697982 0.058510 0.624011 0.958059
 


INDIETRO
Laboratorio Didattico di Matematica Computazionale - Sergio Steffè - AA 2017/2018 - PISA
AVANTI