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
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
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
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
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
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
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
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
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
Integrazione numerica Integrazione trapezoidale Matlab implementa l integrazione trapezoidale con la funzione trapz 10
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
Esercizio Calcolare l integrale con trapz di π 0 sen( x) dx Prima lo si divida in passi grossolani e poi sempre più fini. Il valore esatto vale è 2 12
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
Esercizio Calcolare l integrale con trapz di π / 2 0 tan( x) dx Prima lo si divida in passi grossolani e poi sempre più fini. 14
Esempio Calcolo dell integrale del coseno di Fresnel Si determini l integrale 2 π 0 cos x 2 dx 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
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
Esercizio Realizzare un programma che calcoli l integrale della seguente funzione: 100 0 sen( x) ( x) dx Calcolare l integrale all aumentare delle discretizzazioni ( da 1 a 1000) e rappresentare graficamente l errore percentuale commesso in funzione delle discretizzazioni realizzate 17
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