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