Salvare e importare dati

Transcript

Salvare e importare dati
BOZZA
BOZZA
BOZA
Salvare e importare dati
Per salvare i nomi e i valori della variabili create durante una sessione
di Matlab si può utilizzare il comando save.
Save filename variabili
In questo caso le variabili vengono salvate in un file .mat e cioè in un
formato binario leggibile solo da Matlab.
Save filename variabili-ascii
In questo caso i valori delle variabili vengono salvate in un file ascii e
cioè in un formato American Standard Code for Information Interchange
riconosciuto da tutti i word processor.
Per importare le variabili memorizzate in file si utilizza il comando load.
E’ possibile compiere la medesima operazione dalla tendina “File”
1
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Esercizio
Creare due programmi:
uno che chieda la temperatura media di una stanza , ora per ora, e le
salvi tutte e 24 in un opportuno file;
l’altro che ci dica che temperatura faceva una certa ora recuperando il
dato dal file precedentemente salvato.
( si usi un file .mat per immagazzinare il dato)
2
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Soluzione I
disp('introduci la temperatura media in gradi centigradi della stanza ora
per ora')
for i=1:24
disp(['ora ‘,num2str(i)]);
x(i)=input('introduci temperatura media = ');
end
save temperature x;
load temperature
n=input('di che ora vuoi sapere la temperatura media? ');
disp ( ['si aveva una temperatura media di gradi ‘,num2str(x(n))]);
3
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Esercizio bis
Creare due programmi:
uno che chieda la temperatura media di una stanza , ora per ora, e le
salvi tutte e 24 in un opportuno file;
l’altro che ci dica che temperatura faceva una certa ora recuperando il
dato dal file precedentemente salvato.
(si provi usando un file ascii)
4
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Soluzione II
disp('introduci la temperatura media in gradi centigradi della stanza ora
per ora')
for i=1:12
disp(['ora ' num2str(i)]);
x(i)=input('introduci temperatura media = ');
end
save temperaturetesto x -ascii;
load temperaturetesto;
n=input('di che ora vuoi sapere la temperatura media? ');
disp ( ['si aveva una T di gradi ' num2str(temperaturetesto(n))]);
5
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Quando si salva in formato ASCII:
¾Ogni variabile che si vuole salvare deve essere o un array
bidimensionale double o char. Se si salvano numeri complessi si
perde la parte immaginaria (matlab non interpreta la i) .
¾ Per leggere un file ascii in Matlab con la funzione load, tutte le
varabili devono avere lo stesso numero di colonne.
¾I char, quando si salvano, sono convertiti in forma numerica (codice
ASCII) e non rimane traccia del fatto che, in origine, fossero
¾I valori di tutte le variabili salvate sono uniti in un’unica variabile che
prende il nome del file ASCII. E’ quindi consigliabile salvare una
variabile per volta.
6
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Salvare e importare dati da Excel
Per salvare, in un file excel, i valori della variabili create durante una
sessione di Matlab si può utilizzare il comando xlswrite.
xlswrite(‘filename’, M)
Scrive la matrice M nel file Excel. La matrice in ingresso M deve
essere numerica o di caratteri. Viene salvata nel primo foglio dalla
cella A1.
Per leggere da un file Excel:
num = xlsread(‘filename’)
Carica, in forma numerica, i valori presenti sul primo foglio excel
e li attribuirà alla variabile num
7
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Esercizio ter
Creare due programmi:
uno che chieda la temperatura media di una stanza , ora per ora, e le
salvi tutte e 24 in un opportuno file;
l’altro che ci dica che temperatura faceva una certa ora recuperando il
dato dal file precedentemente salvato.
(si provi usando un file excel)
8
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Soluzione III
disp('introduci la temperatura media in gradi centigradi della stanza ora
per ora')
for i=1:12
disp(['ora ' num2str(i)]);
x(i)=input('introduci temperatura media = ');
End
xlswrite(‘tempexcel’, x)
k= xlsread(‘tempexcel’)
n=input('di che ora vuoi sapere la temperatura media? ');
disp ( ['si aveva una T di gradi ' num2str(k(n))]);
9
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Integrazione numerica
Integrazione trapezoidale
Matlab implementa l’integrazione trapezoidale con la funzione trapz
10
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Integrazione numerica
Matlab implementa l’integrazione trapezoidale con la funzione trapz
Sintassi trapz(x,y) dove l’array y contiene i valori della funzione nei punti
contenuti nell’array x. Opera quindi su una funzione definita in modo
discreto (per punti)
Quando l’integrando è una funzione lineare l’integrazione trapezoidale
fornisce la soluzione esatta.
Se invece la funzione non è lineare si può rappresentare la funzione
mediante funzioni quadratiche (regola di Simpson) o polinomi di grado
superiore.
Tali algoritmi sono implementati nelle funzioni quad e quadl.
Sintassi quad(‘funzione’,a,b). Ma, in questo caso, la funzione è definita
in modo analitico col comando inline.
Se la funzione presenta delle discontinuità le funzioni quad e quadl
possono generare errori.
11
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Esercizio
Calcolare l’integrale con trapz di
π
sen
(
x
)
dx
∫
0
Prima lo si divida in passi grossolani e poi sempre più fini.
Il valore esatto vale è 2
12
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Esercizio
X = 0:pi/10:pi;
Y = sin(X);
Z = trapz(X,Y)
-------------------------------------X = 0:pi/1000:pi;
Y = sin(X);
Z = trapz(X,Y)
13
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Esercizio
Calcolare l’integrale con trapz di
π /2
tan(
x
)
dx
∫
0
Prima lo si divida in passi grossolani e poi sempre più fini.
14
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Esempio
Calcolo dell’integrale del coseno di Fresnel
Si determini l’integrale
2⋅π
2
cos
x
dx
∫
0
prima con trapz poi con quadl.
Lo si faccia infine creano un programma che discretizzi il dominio
e risolva l’integrale come somma di aree.
15
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Soluzione
trapz
x=[0:pi/10000:sqrt(2*pi)];
y=cos(x.^2);
I=trapz(x,y)
Quadl
F=inline(‘cos(x.^2) ‘)
quadl(F,0,sqrt(2*pi))
16
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Esercizio
Realizzare un programma che calcoli l’integrale della seguente
funzione:
100
∫ sen( x) ⋅ (
x )dx
0
Calcolare l’integrale all’aumentare delle discretizzazioni ( da 1 a
1000) e rappresentare graficamente l’errore percentuale commesso
in funzione delle discretizzazioni realizzate
17
di Fabio Bozzoli
BOZZA
BOZZA
BOZA
Soluzione
F=inline('sin(y).*sqrt(y)')
teor=quadl(F,0,100)
for k=1:1000
x=[0:100/k:100];
y=sin(x).*(x.^0.5);
I(k)=trapz(x,y);
end
error=abs(100*(I-teor)./teor);
plot(error);
xlabel('suddivisioni')
ylabel('error %');
18
di Fabio Bozzoli