12.07.2015 Views

Matlab e Foglio Elettronico - Esercizi e Dispense - Università degli ...

Matlab e Foglio Elettronico - Esercizi e Dispense - Università degli ...

Matlab e Foglio Elettronico - Esercizi e Dispense - Università degli ...

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Annamaria Mazzia<strong>Matlab</strong> e <strong>Foglio</strong> <strong>Elettronico</strong>:una breve introduzioneDipartimento di Ingegneria Civile Edile e AmbientaleUniversità <strong>degli</strong> Studi di PadovaCreative Commons Attribuzione-Non commerciale-Non opere derivate 3.0 Italy Licensea.a. 2011/2012


A P P E N D I C EIPRIMI PASSI IN MATLAB®L’universo non potrà essere lettofinché non avremo imparato illinguaggio ed avremo familiarizzatocon i caratteri con cui è scritto. Èscritto in linguaggio matematico, ele lettere sono triangoli, cerchi edaltre figure geometriche, senza lequali è umanamente impossibilecomprendere una singola parola.Galileo GalileiI.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1I.2 Avvio di MATLAB® . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2I.2.1 Matrici e vettori in MATLAB® . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2I.3 Comandi utili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5I.4 MATLAB® per scrivere ed eseguire programmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6I.4.1 Strutture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6I.5 Dati di input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9I.5.1 Programma sul metodo delle bisezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9I.6 Dati di output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10I.7 Grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11I.8 Sulle potenzialità di MATLAB® . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12I.9 Applicazioni di MATLAB® nel Calcolo Numerico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13I.9.1 Sull’instabilità numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13I.9.2 Sull’interpolazione e approssimazione di dati . . . . . . . . . . . . . . . . . . . . . . . . . . 14I.9.3 Confronto tra schemi per equazioni differenziali ordinarie . . . . . . . . . . . . . . . . . . 20I.1 IntroduzioneMATLAB® può essere considerato un linguaggio di programmazione ad alto livello e, allo stesso tempo,un ambiente interattivo per lo sviluppo di algoritmi, per la visualizzazione e l’analisi di dati, e per il calcolonumerico.1


I. PRIMI PASSI IN MATLAB®Per chi ha già imparato a programmare in linguaggio FORTRAN, il passaggio a MATLAB® è semplice (bastacapire come cambiano le strutture di programmazione e il modo di programmare). In più, MATLAB® hale sue functions, permette calcoli molto più sofisticati di quelli di una calcolatrice, ed è capace di fare graficie visualizzare i risultati in maniera diretta. Molto spesso la conoscenza di MATLAB® è un requisito richiestoper molte posizioni lavorative in ambito ingegneristico: a tal fine, è utile imparare qualcosa di MATLAB® .Ed è altrettanto importante prendere atto del fatto che non esiste un linguaggio di programmazione che vadabene per risolvere tutti i problemi (quindi non basta conoscere e saper usare un solo linguaggio di programmazione).Il FORTRAN si rivela la scelta migliore per risolvere algoritmi numerici complicati (un esempiotra tanti: risolvere problemi accoppiati di flusso e trasporto in mezzi porosi dove le incognite del problemasono dell’ordine delle migliaia e migliaia). MATLAB® è esso stesso un programma complesso (originariamentescritto in FORTRAN e successivamente riscritto in linguaggio C) che va bene per risolvere programmid’elaborazione numerica, per lavorare con matrici (MATLAB® infatti sta per MATrix LABoratory “laboratoriomatriciale”) e per la grafica.MATLAB® è un prodotto della The MathWorks : vedremo in particolare la versioneMATLAB® 7.10.0.499 (R2010a).Un prodotto simile a MATLAB® ma open source è GNU Octave (si vada sul sito http://www.octave.org).Nel seguito vedremo come si lavora in MATLAB® tenendo presente che quasi tutti i comandi che daremovalgono alla stessa maniera anche per Octave (eccezion fatta per l’interfaccia grafico).I.2 Avvio di MATLAB®Tralasciamo la parte relativa alla procedura di installazione di MATLAB® (che dipende dal computer e dalsistema operativo in uso) e diamo per scontato che il programma sia presente sul proprio computer.In ambiente Linux, per avviare MATLAB® basta digitare il comando matlab da una finestra di terminale.Una volta avviato MATLAB® comparirà il prompt dei comandi in una finestra come quella mostrata inFigura I.1. Per uscire dall’ambiente si digita exit dalla finestra dei comandi oppure dal menu File o ancoradall’icona di chiusura (x in alto a destra della finestra).Per imparare a usare MATLAB® , inizialmente si prende familiarità con la finestra dei comandi eseguendocalcoli come se fosse una calcolatrice. Vediamo che il risultato viene assegnato ad una variabile detta ans eche nella Workspace si trovano informazioni su di essa (si veda Figura I.2).I.2.1Matrici e vettori in MATLAB®I vettori si possono scrivere come vettori riga o vettori colonna.Per esempio:>>x=[1 2]>> x=[1 2]x =1 2>> y=[10 20]’y =1020Un vettore riga x viene scritto usando le parentesi quadre e scrivendo le componenti del vettore una dopol’altra. Un vettore colonna può essere creato facendo la trasposta di un vettore riga (mediante il simbolo ’ ),oppure mettendo un punto e virgola dopo ciascuna componente:2


I.2. Avvio di MATLAB®Figura I.1: L’ambiente MATLAB consiste di una serie di finestre, alcune delle quali vengono aperte di default:la Command Window (la finestra dei comandi), la Current Folder (la directory corrente in cui si sta lavorando),la Workspace (lo spazio di lavoro) e la Command History (la finestra con la storia dei comandidati).Figura I.2: Primi calcoli in MATLAB® : osservare cosa succede nella Command Window nella Workspace enella Command History.3


I. PRIMI PASSI IN MATLAB®in FORTRANdo while ( espressione logica ){ istruzione 1 }{ istruzione 2 }{ . . . }{ istruzione n }end doin MATLABwhile ( espressione logica ){ istruzione 1 }{ istruzione 2 }{ . . . }{ istruzione n }endNel ciclo while si elimina il do.in FORTRANdo ind= v a l i n i z , v a l f i n , incr{ i s t r u z i o n i }end doin MATLABfor ind= v a l i n i z : incr : v a l f i n{ i s t r u z i o n i }endIl ciclo do in FORTRAN diventa ciclo for in MATLAB® . L’ordine delle variabili relative al valore inizialedel ciclo, valore finale e incremento non è più come in FORTRAN e ci sono i due punti al posto della virgola:osservare bene le differenze.C’è un’altra struttura che si trova in MATLAB® e non in FORTRAN 77: è la costruzione switch-case.switch ( espressione ) % ( scalare o stringa )case { valore1 } % eseguita se l ’ espressione e ’ valutata al valore1 ){ i s t r u z i o n i }{ . . . }case { valore2 } % ( eseguita se l ’ espressione e ’ valutata al valore2 ){ i s t r u z i o n i }{ . . . }otherwise{ i s t r u z i o n i }{ . . . }endIl ciclo con switch confronta i valori dati nell’espressione di input (subito dopo switch) con ciascunvalore assegnato a case ed esegue le istruzioni relative al case in cui valore ed espressione coincidono.Nell’esempio che riportiamo, a seconda del valore assegnato alla variabile scelta cambiano i valori daassegnare alle variabili a e b:s c e l t a =’test1’ ;switch s c e l t acase {’test1’}x0= 0 . 1 ;x1= 0 . 2 ;case {’test2’}x0= 0 . 0 ;x1= 1 . 0 ;otherwisedisp (’nessun␣caso␣test␣scelto’)endOsserviamo che scelta è una variabile di stringa di caratteri, il nome del caso test scritto tra apici; pervisualizzare un messaggio sulla Command Window, abbiamo usato la function di MATLAB® chiamata disp.8


I.5. Dati di inputI.5 Dati di inputQuando si lavora nella finestra dei comandi, per assegnare il valore alle variabili basta scrivere il nomedella variabile seguito dal simbolo di uguale e dal valore (o dai valori) da assegnare (a seconda che si tratti diuna variabile scalare, matrice, vettore...):>> a=10.5;>> A=[1 2 3; 4 5 6; 7 8 9];Nell’eseguire uno script, alla stessa maniera, si può assegnare il valore alle variabili direttamente all’internodello script. Tuttavia, se si vuole dare maggiore generalità al programma e si vogliono dare in input i valoridelle variabili, conviene usare la function input. Vediamo con un esempio:a=input(’␣scrivi␣il␣valore␣della␣variabile␣a␣’)Il messaggio contenuto tra apici viene visualizzato sulla finestra dei comandi e il prompt aspetterà che l’utentescriva il valore da assegnare ad a. La function input si può dunque paragonare alle istruzioni di writee read in FORTRAN per assegnare il valore alle variabili.Questa procedura può essere utilizzata sia per assegnare il valore a variabili scalari, sia per matrici e vettori.Tuttavia, se i dati di input sono molto “pesanti” (ad esempio matrici di dimensioni molto elevate), convieneusare in maniera opportuna la funzione di input unitamente al comando load - scrivendo una volta per tuttela matrice di input in un file da caricare ogni volta che si vuole eseguire il programma con quella matrice.Per esempio, abbiamo scritto nel file A.dat i valori della matrice e vogliamo dare in input questa matrice alnostro programma. Invece di scrivereA= input(’␣matrice␣A␣’);nello script scriveremoA= input(’␣file␣di␣input␣con␣la␣matrice␣A␣’, ’s’);A= load(A);Osserviamo che abbiamo usato input inserendo, oltre alla stringa tra apici ’file di input con lamatrice A’, anche ’s’: questa opzione serve perchè noi scriveremo il nome del file su cui si trova memorizzatala matrice e questo file viene letto come una stringa di caratteri per cui inizialmente alla variabile Aviene associato il file con la matrice (in questo caso A.dat). Con il comando successivo, viene caricato il filee memorizzato di nuovo sulla variabile A, che quindi diventa la nostra matrice.Si osservi la differenza che c’è nel lasciare o meno spazi bianchi prima dell’apice che chiude la frase cheviene visualizzata sulla Command Window tramite input.È utile sapere anche che, se un’istruzione è troppo lunga e si vuole andare a capo, si utilizzano tre puntini... sulla riga che si vuole interrompere e si prosegue a scrivere sulla riga successiva.I.5.1Programma sul metodo delle bisezioniConsideriamo l’algoritmo del metodo delle bisezioni, per calcolare gli zeri di un’opportuna funzione f .Ad esempio vogliamo risolvere il problema f (x) = 0 con f (x) = ( x 2 )2 − sin(x) nell’intervallo [1,3].Dobbiamo scrivere il programma principale, in un file che chiamiamo bisez.m, e la function legata allafunzione f (x), in un file che chiamiamo fun.m.Scriviamo il programma principale:% programma per i l calcolo <strong>degli</strong> z e r i di una funzione mediante% i l metodo di bisezionea=input (’primo␣estremo␣dell’’intervallo␣a␣’ ) ;b=input (’secondo␣estremo␣dell’’intervallo␣b␣’ ) ;aux=fun ( a ) * fun (b ) ;i f aux>=0disp (’estremi␣dello␣stesso␣segno’)breakenditmax =100;t o l l =1.e−10;9


I. PRIMI PASSI IN MATLAB®i t e r =0;c =(a+b ) * 0 . 5 ;scarto=abs (b−a ) * 0 . 5 ;while i t e r t o l li t e r = i t e r +1;aux=fun ( a ) * fun ( c ) ;i f aux>0a=c ;elseb=c ;endc =(a+b ) * 0 . 5 ;scarto=abs (b−a ) * 0 . 5 ;endi f fun ( c)==0 | | scarto < t o l ls p r i n t f (’%s␣%15.8e’ , ’soluzione␣approssimata␣c=␣’ , c )elses p r i n t f (’%s’ , ’raggiunto␣numero␣max␣di␣iterazioni␣’)endPer poter essere eseguito, dobbiamo scrivere in un file chiamato fun.m la function fun. Si ha:function y=fun ( x )% funzione per lo schema d e l l e bisezioni% input x% output y =(x /2)^2 −sin ( x )y=( x/2).^2 − sin ( x ) ;Nel programma principale abbiamo semplicemente tradotto l’algoritmo del metodo delle bisezioni. Abbiamoconsiderato dei comandi che non abbiamo ancora visto in MATLAB® , per la stampa dei risultati (mediantesprintf) e abbiamo usato il comando break per interrompere l’esecuzione del programma se unacondizione non è verificata.Le righe di commento scritte dopo l’istruzione function y=fun(x) vengono visualizzate sullaCommand Window se, una volta salvata la function, digitiamo l’istruzione help funI.6 Dati di outputL’ambiente MATLAB® permette di visualizzare tutte le variabili presenti al termine dell’esecuzione di unprogramma o di una funzione. Tuttavia, alcune volte vogliamo visualizzare subito dei risultati sulla CommandWindow o su un file separato rispetto all’ambiente di lavoro. Abbiamo già visto, nell’esempio precedenteil comando sprintf: esso serve per stampare un messaggio sulla Command Window utilizzando uncerto tipo di formato.Nell’esempio avevamo usatosprintf(’%s␣%15.8e’, ’soluzione␣approssimata␣c=␣’, c)All’interno delle parentesi tonde si possono riconoscere due parti: nella prima parte si scrive, tra apici e uno diseguito all’altro, il formato da utilizzare per la stampa delle variabili che sono scritte subito dopo. Nel nostrocaso, le variabili da stampare sono la stringa di caratteri soluzione approssimata c= e il valore dellavariabile c. Per la stringa di caratteri si usa il formato delle stringhe che è dato da %s mentre per la variabile c,volendo scriverla mediante un formato esponenziale con 8 cifre nella mantissa, usiamo il formato %15.8e.Rispetto al FORTRAN, il formato per una variabile è preceduto dal simbolo % ma per il resto non ci sonogrosse differenze. Per la variabili intere o reali possiamo decidere quante cifre utilizzare per rappresentare lavariabile (%15.8e nell’esempio). Riassumiamo nella tabella seguente i principali tipi di formato e i simboliche servono per andare a capo o creare nuove linee: Se si vogliono scrivere i risultati su un file, occorre aprireil file e associarlo ad una variabile mediante la function fopen. Ad esempiofid= fopen(’risultati.txt’,’w’)Con questa istruzione aprimamo il file di risultati dal nome risultati.txt (’w’ indica che il file è di10


I.7. GraficiformatoSignificato%s stringhe di caratteri%d formato intero%f formato fisso%e formato esponenziale (del tipo 3.5e + 00)%E formato esponenziale (del tipo 3.5E + 00)\ n nuova linea\ r per andare a capoTabella I.2: Il formatoFigura I.3: Finestra con il graficoscrittura) associandolo alla variabile fid. Per scrivere sul file, al posto della function sprintf si userà lafunction fprintf che differisce dalla prima per il fatto che bisogna indicare la variabile associata al file discrittura dati. Il comando sprintf di prima diventa ora:fprintf(fid , ’%s␣%15.8e’, ’soluzione␣approssimata␣c=␣’, c)Per chiudere il file si usa l’istruzione fclose(fid). Quindi fopen e fclose sono equivalenti alleistruzioni open e close che abbiamo visto in FORTRAN.I.7 GraficiSupponiamo di voler fare il grafico di una serie di dati (x i , y i ), i = 1,...,n. Sulla Command Window (oall’interno di uno script) basta digitare il comandoplot(x,y)Si aprirà una nuova finestra con il grafico (vedi Figura I.3).Potremo poi modificare il colore, il tipo di linea, inserire titolo, legenda,...operando direttamente sul menudella finestra del grafico, o inserendo i comandi opportuni tramite la Command Window 1 .Si possono sovrascrivere grafici l’uno sull’altro utilizzando il comando hold on. Oppure si possonoaffiancare grafici mediante il comando subplot. Lasciamo gli approfondimenti all’help on line.Per fare il grafico di una funzione, si possono seguire diverse strade.1 Ci sarebbe tanto da dire a riguardo ma lasciamo che il lettore curioso approfondisca l’argomento utilizzando l’help on line diMATLAB® . In Octave, invece, le modifiche ai grafici non possono essere fatte usando la finestra del grafico.11


I. PRIMI PASSI IN MATLAB®Se si ha a disposizione la function (propria di MATLAB® o scritta su un file .m), si può costruire il vettorecon il valore della funzione in un numero determinato di punti equidistanti sull’intervallo in cui si desideravisualizzarla. A tal proposito è utile la function linspace che permette di discretizzare un intervallo chiuso[a,b] in un prefissato numero di punti. Useremo allora le seguenti istruzioni:x=linspace ( 0 , 2 ) ;% discretizziamo l ’ i n t e r v a l l o [ 0 , 2 ] in 100 parti% uguali% x=linspace (50 ,0 ,2) d i s c r e t i z z a l ’ i n t e r v allo in%50 parti ugualiy=myfun( x ) ; % valuto la function myfun nel vettore xplot ( x , y )Questo approccio è comodo quando la funzione da visualizzare ha una espressione complicata o quandostiamo lavorando all’interno di uno script. La function myfun deve essere scritta in modo che sia possibilevalutarla direttamente su un vettore (che è quello che facciamo tramite l’istruzione y=myfun(x)). Le operazionidi moltiplicazione, divisione ed elevamento a potenza devono essere vettorizzate, facendo precendere ilsimbolo di moltiplicazione, divisione e elevamento a potenza dal simbolo del punto ( .*, ./, .ˆ ) permettendo,in tal modo, che le operazioni vengano fatte componente per componente del vettore. Le operazionidi somma e differenza sono vettorizzate per definizione.Ad esempio: la function myfun definita tramite le istruzionifunction [ y ]= f ( x )y=log ( x ) * xnon è vettorizzata. Se invece scriviamofunction [ y ]= f ( x )y=log ( x ) . * xallora la function è vettorizzata.Un’altra via è di scrivere la function come una funzione inline nella Command Window e di utilizzare lafunction ezplot per farne il grafico.Supponiamo di voler fare il grafico della funzione f (x) = e x −10sin(x)−1. Per avere questa funzione nellaCommand Window durante la sessione di lavoro (quindi non come una function scritta su file), scriviamo ilcomandofun = inline(’exp(x)-10*sin(x)-1’)Sulla Command Window compaiono le seguenti righe:>> fun=inline(’exp(x)-10*sin(x)-1’)fun =Inline function:fun(x) = exp(x)-10*sin(x)-1Se vogliamo farne il grafico nell’intervallo [0,2] scriveremoezplot(fun, 0, 2)e viene direttamente creato il grafico della funzione fun. La function ezplot può essere utilizzata anchecon funzioni intrinseche di MATLAB® o definite dall’utente in forma vettorizzata (per esempioezplot(’sin’,0,2)crea il grafico della funzione sin(x) nell’intervallo [0,2]).I.8 Sulle potenzialità di MATLAB®MATLAB® ha un grande numero di functions predefinite che permettono di eseguire applicazioni in diversisettori propriamente matematici, per approssimare zeri di funzioni, per lavorare su matrici sparse, risolvereequazioni differenziali, lavorare su dati statistici, fare grafici in due e tre dimensioni... Basta vedere ilDemo di MATLAB® per trovare la function di cui si ha bisogno.12


I.9. Applicazioni di MATLAB® nel Calcolo NumericoFigura I.5: Algoritmo stabile: schermata del confronto tra l’uso o meno della function singleha il polinomio di approssimazione. L’algoritmo si basa sul processo di minimizzazione nel senso dei minimiquadrati.Esempio:>> x=[7 8 9 10];>> y=[3 1 1 9];>> p=polyfit(x,y,3)p =1.0000 -23.0000 174.0000 -431.0000Significa che il polinomio di interpolazione è:p(x) = x 3 − 23x 2 + 174x − 431Una volta ricavati i coefficienti, si può fare un grafico del polinomio utilizzando la function polyval.>> xx=linspace(x(1), x(4));>> yy=polyval(p,xx);>> plot(x,y,’o’, xx,yy)Con polyval si valuta il polinomio, i cui coefficienti sono dati dal vettore p, nei punti di xx. Abbiamo usatola function plot per rappresentare sullo stesso grafico due curve, quella dei dati x,y (grafico che facciamoper punti utilizzando dei “cerchietti”) e quella del polinomio.15


I.9. Applicazioni di MATLAB® nel Calcolo Numerico% valutandolo in xval% xval puo ’ e s s e r e uno scalare o un vettore% x − vettore d e l l e a s c i s s e da interpolarexval=xval ( : ) ;n=length ( x ) ;yval =ones ( length ( xval ) , 1 ) ; % s i crea un vettore di t u t t i 1for j =1:ni f j ~= iyval=yval . * ( xval−x ( j ) ) / ( x ( i ) −x ( j ) ) ;endendfunction yval=interplagrange ( xval , x , y )% function yval=interplagrange ( xval , x , y )% dati i v e t t o r i x e y da interpolare% la function implementa l ’ interpolazione di Lagrange valutandola% in xval% xval puo ’ e s s e r e uno scalare o un vettore% questa function chiama la function lagrange ( xval , x , i )i f length ( x)~= length ( y )error (’MATLAB:interplagrange’ , . . .’i␣vettori␣x␣e␣y␣non␣hanno␣la␣stessa␣lunghezza’)elsexval=xval ( : ) ;yval=zeros ( length ( xval ) , 1 ) ; % s i crea un vettore di t u t t i zeron=length ( x ) −1; % n grado del polinomiofor i =1:n+1yval = yval + lagrange ( xval , x , i ) * y ( i ) ;endendEseguiamo l’esempio di prima per vedere cosa si ottiene:>> yy=interplagrange(xx,x,y);>> plot(x,y,’o’, xx,yy)Ora la function interplagrange sostituisce l’uso delle due function polyfit, polyval ointerpmonom, polyval.Calcoliamo ora il polinomio di interpolazione mediate le differenze divise di Newton. Scriviamo duefunctions, la prima che scrive la tabella delle differenze divise, la seconda che valuta il polinomio di interpolazioneimplementando l’algoritmo di Horner 2 in modo da minimizzare il numero delle operazioni daeseguire.function table= d i v d i f ( x , y )% function table=divdif ( x , y )% x − a s c i s s e dei dati da interpolare% y − ordinate dei dati da interpolare% table − tabella d e l l e differenze divisex=x ( : ) ;y=y ( : ) ;n=length ( x ) ;m=length ( x ) ;i f n~=merror (’MATLAB:differenze_divise’ ,’errore␣sui␣dati’)else2 William Horner (1786-1837) fu un matematico inglese, ricordato essenzialmente per il suo metodo sulle equazioni algebriche.Spieghiamo l’algoritmo solo per rendere comprensibile la function che scriviamo.17


I. PRIMI PASSI IN MATLAB®table=zeros (n , n ) ; % iniziamo la tabella come una matrice di z e r itable ( : , 1 ) = y ;for j =2:nfor k =2: jtable ( j , k)= ( table ( j , k−1) − table ( j −1,k−1) ) / . . .( x ( j ) − x ( j−k+1) ) ;endendendLa diagonale principale della matrice table ha i coefficienti a 0 , a 1 , ... a n del polinomio di interpolazione.Il polinomio è dunque:p(x) = a 0 + a 1 (x − x 0 ) + a 2 (x − x 0 )(x − x 1 ) + ... + a n (x − x 0 )(x − x 1 )···(x − x n−1 )Per valutarlo in un punto x eseguiamo i seguenti passaggi, applicando, in tal modo, l’algoritmo di Horner:p = a np = p(x − x n−1 ) + a n−1= a n (x − x n−1 ) + a n−1p = p(x − x n−2 ) + a n−2.= a n (x − x n−1 )(x − x n−2 ) + a n−1 (x − x n−2 ) + a n−2p = p(x − x 0 ) + a 0= a n (x − x n−1 )(x − x n−2 )...(x − x 1 )(x − x 0 ) + ... + a 1 (x − x 1 )(x − x 0 ) + a 0= a 0 + a 1 (x − x 0 )(x − x 1 ) + ... + a n (x − x 0 )(x − x 1 )...(x − x n−2 )(x − x n−1 )La function da scrivere è dunque:function yval= i n t e r p d i v d i f ( xval , x , table )% function yval=interpdivdif ( xval , x , table )% x − a s c i s s e dei dati da interpolare% table − tabella d e l l e differenze divise ,% ottenuta dalla function divdif ;% servono i valori della diagonale principale% xval − scalare o vettore in cui calcolare i l polinomio% interpolatore% yval − valore ( o valori ) del polinomio interpolatore% valutato in xval% nel calcolo del polinomio interpolatore s i applica% l ’ algoritmo di Hornerxval=xval ( : ) ;x=x ( : ) ;n=length ( x ) −1;yval=table (n+1 ,n+1)* ones ( length ( xval ) , 1 ) ;for j =n: −1:1yval=yval . * ( xval−x ( j ) ) + table ( j , j ) ;endLe functions appena descritte possono essere usate in maniera del tutto equivalenti per risolvere il problemadell’interpolazione. Ci sono però dei casi in cui i risultati ottenuti dalla polyfit e dalla interpmonomnon sono corretti in quanto la matrice di Vandermonde ad esse legate è malcondizionata.Abbiamo già descritto gli effetti del malcondizionamento nell’interpolazione. Quando applichiamo lafunction polyfit ai dati di quel problema, si ha il seguente messaggio di avvertimento (un warning):18


I.9. Applicazioni di MATLAB® nel Calcolo Numerico>> poli=polyfit(x,y,5)Warning: Polynomial is badly conditioned. Add points with distinct Xvalues, reduce the degree of the polynomial, or trycenteringand scaling as described in HELP POLYFIT.Questo ci dice che i risultati che avremo non saranno buoni e, effettivamente, se facciamo il grafico dei datidel problema e del polinomio di interpolazione ottenuto con la polyfit, si nota subito che il polinomio ècompletamente errato (vedi Figura I.8) Anche nell’applicare la function interpmonom si ha il messaggio diFigura I.6: Uso della function polyfit per l’esempio malcondizionato.avvertimento>> pmon=interpmonom(x,y)Warning: Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = 5.537667e-31.Se aggiungiamo al grafico precendente la curva corrispondente al polinomio ottenuto con la interpmonomosserviamo come le due curve siano tra loro distinte e non interpolano i dati.Figura I.7: Uso della function interpmonom per l’esempio malcondizionato.Proviamo invece ad applicare l’algoritmo di Lagrange o delle differenze divise di Newton e aggiungiamole nuove curve sul precedente grafico:>> ylagr=interplagrange(xx,x,y);>> table=divdif(x,y);19


I. PRIMI PASSI IN MATLAB®>> ynewt=interpdivdif(xx,x,table);>> plot(xx,ylagr,xx,ynewt)Figura I.8: Uso delle functions corrispondenti agli algoritmi di Lagrange e delle differenze divise di Newtonnell’esempio malcondizionato. Osserviamo che la Figura ?? relativa allo stesso problema è stata ottenutaeseguendo le stesse functions (per semplicità abbiamo omesso i risultati ottenuti dalla interpmonom) inambiente Octave.Si nota subito che le due curve sono tra loro coincidenti e interpolatorie!I.9.3Confronto tra schemi per equazioni differenziali ordinarieQuando abbiamo introdotto alcuni metodi per la risoluzione di equazioni differenziali ordinarie, inparticolare i metodi di Eulero esplicito, di Eulero implicito e di Crank-Nicolson.Li abbiamo anche confrontati per capire meglio il concetto di stabilità, considerando l’equazione testy ′ = −y con y(0) = 1 (si veda a proposito la Figura ??).Scriviamo ora un programma MATLAB® che, per questa equazione test,G ci permetta di poter confrontare i tre metodi tra loro e con la soluzione esattaG crei dei grafici simili a quelli di Figura ??G salvi i valori numerici dei diversi metodi e della soluzione esatta in un file.clear% h = passo di discretizzazione temporale% Tfin = tempo finale di osservazione% n = numero di volte in cui verra ’ applicato ciascuno dei metodi% proposti% f i d = variabile associata al f i l e di r i s u l t a t i% t = vettore dei tempi% ye = vettore dei valori a s s o c i a t i al metodo di Eulero e s p l i c i t o% ( di lunghezza n+1 perche ’ la prima componente corrisponde% al valore della soluzione al tempo zero )% yi = vettore dei valori a s s o c i a t i al metodo di Eulero implicito% ycn = vettore dei valori a s s o c i a t i al metodo di Crank−Nicolson% yex = vettore dei valori a s s o c i a t i alla soluzione esattah=input (’passo␣h␣’ ) ;Tfin=input (’tempo␣finale␣di␣osservazione␣’ ) ;n=Tfin /h ;f i d =fopen (’ode_a_confronto.txt’ ,’w’ ) ;t ( 1 ) = 0 ;y ( 1 ) = 1 ;ye (1)= y ( 1 ) ;20


I.9. Applicazioni di MATLAB® nel Calcolo Numericoy i (1)= y ( 1 ) ;ycn (1)= y ( 1 ) ;yex (1)= y ( 1 ) ;for i =1:nye ( i +1)= ye ( i ) − h* ye ( i ) ;y i ( i +1)= y i ( i )/(1+h) ;ycn ( i +1)= (2−h)/(2+h) * ycn ( i ) ;t ( i +1)= t ( i )+h ;yex ( i +1)=exp(− t ( i + 1 ) ) ;endplot ( t , yex , ’k’ , ’linewidth’ ,2 )hold on %comando per sovrascrivere i g r a f i c i l ’ uno sull ’ altroplot ( t , ye ,’b’ , ’linewidth’ , 2 )plot ( t , yi ,’r’ ,’linewidth’ , 2 )plot ( t , ycn , ’g’ ,’linewidth’ , 2 )legend (’soluzione␣esatta’ , ’Eulero␣esplicito’ , ’Eulero␣implicito’ , ’Crank-Nicolson’ , )% la legenda , lo spessore d e l l e linee , o i l colore possono e s s e r e% messi sia direttamente dalla f i n e s t r a della figura% sia dal programma stesso , come in questo caso ( solo in Octave s i% deve operare direttamente dal programma per poter cambiare% l e proprieta ’ della figura ) .hold o f ffor i =1:n+1f p r i n t f ( fid , ’\n%5.2f␣%12.6e␣%12.6e␣%12.6e␣%12.6e’ , t ( i ) , yex ( i ) , . . .ye ( i ) , y i ( i ) , ycn ( i ) ) ;endf c l o s e ( f i d ) ;Questo programma è specifico per l’equazione test assegnata. La sua esecuzioneci permette ci comprenderemeglio il concetto di stabilità dei metodi studiati per la soluzione di equazioni differenziali ordinarie.21


A P P E N D I C EIITABELLE E GRAFICI CON IL FOGLIO ELETTRONICOIo dico di aver capito un’equazionequando sono in grado di predire leproprietà delle sue soluzioni senzaeffettivamente risolverla.Paul Adrien Maurice DiracII.1 Il foglio elettronico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23II.2 Inserire funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23II.3 Formule ricorsive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28II.4 Fare grafici nel foglio elettronico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31II.4.1 Grafici multicolonna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36II.5 Inserire dati da files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38II.1Il foglio elettronicoIl foglio elettronico può essere usato nell’ambito del Calcolo Numerico per implementare ed eseguiresemplici algoritmi ricorsivi. Inoltre può essere utilizzato per importare dati e per fare grafici. Nel seguito,daremo alcune indicazioni su come usare il foglio elettronico, in particolare la versione in lingua inglese diOpenOffice 2.4. Osserviamo subito che nella versione inglese i numeri decimali vanno scritti facendo uso delpunto . – ad esempio 2.1023 – a differenza della versione in lingua italiana dove i numeri decimali, di default,vanno scritti facendo uso della virgola – ad esempio 2,1023. 1 Tenendo conto di questa differenza saremo ingrado di usare correttamente il foglio elettronico.II.2Inserire funzioniUn foglio elettronico si presenta come una tabella di cellette, ognuna delle quale viene individuata dalnumero che contraddistingue la corrispondente riga e dalla lettera che indica la corrispondente colonna. Adesempio, la cella C7 si trova sulla colonna C e sulla riga 7.1 Se vogliamo usare la versione italiana di OpenOffice, si può scegliere di scrivere i numeri decimali usando il punto . anzichè lavirgola , andando, mediante il Menu, su Strumenti −− > Opzioni −− > Impostazioni della Lingua −− > Lingue e scegliere come LinguaLocale (nella seconda riga a partire dall’alto) quella Italiana (Svizzera) o un’altra lingua che permette di ottenere come separatore dellecifre decimali il punto.23


II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICOFigura II.1: Si vuole lavorare sulla cella C7. La lettera C e il numero 7 che individuano la colonna C e la riga7 sono evidenziate rispetto alle altre colonne e righe. La cella C7 ha il bordo più scuro rispetto alle altrecelle. Sono state cerchiate in rosso le due righe chiamate Name Box (Casella del Nome) e Input Line (Riga didigitazione).Quando, con il mouse, ci spostiamo su una cella e clicchiamo il tasto sinistro del mouse, allora il contornodella cella diventa di colore nero grassetto: vuol dire che possiamo ”lavorare” su quella cella (si veda laFiguraII.1). Inoltre, sopra la tabella delle celle, sulla sinistra, viene visualizzato nella Name Box (nella Caselladel Nome) il nome della cella su cui vogliamo lavorare.Se in una cella scriviamo un numero o applichiamo una formula numerica che avrà come risultato unnumero, la cella può essere considerata come una variabile e sarà chiamata con la coppia lettera-numero chela individua (per esempio la cella C7).Per scrivere un numero o applicare una formula numerica, una strada da seguire è la seguente:G Una volta che siamo sulla cella (per esempio la cella C7 evidenziata rispetto alle altre) scriviamo =e poi il numero che vogliamo scrivere, ad esempio 0.1 (oppure 0,1 se la versione di Office è quellaitaliana). Vediamo che quello che scriviamo sulla cella compare anche nella riga di Input Line (o rigaper immettere i comandi, Riga di digitazione) che si trova sopra la tabella delle celle. Nel momento incui scriviamo =, accanto a quella riga compare un simbolo a forma di x dal colore rosso (al posto delsimbolo di sommatoria che c’era prima) e il simbolo di accettazione in verde (vedasi le immagini inFigura II.2 e II.3 e le si confronti con la FiguraII.1).G Se invece di un numero vogliamo applicare una formula numerica, possiamo o scrivere direttamente ilvalore della funzione (per esempio cos(0.1) + 0.3 ) oppure possiamo avvalerci dell’aiuto delle funzionipredefinite che possiamo utilizzare nel foglio elettronico. Dal menu del foglio elettronico, cliccandosu Insert (Inserisci) troviamo le due voci Function. . . (Funzione) e Function list (Lista di funzioni). Diqui possiamo vedere quali sono le funzioni che possiamo utilizzare. Ricordiamo che nella versioneitaliana, la funzione valore assoluto si chiama ASS (ABS in quella inglese), la funzione seno si chiamaSEN (SIN in quella inglese). Nel momento in cui iniziamo a digitare il nome di una funzione, moltoprobabilmente ci verrà già data indicazione sulla funzione che inizia in quel modo, se l’abbiamo giàutilizzata precedentemente. Inoltre, nel Name Box, dove prima era individuata la cella su cui stavamolavorando, vengono visualizzate le funzioni più recenti che abbiamo utilizzato (si vedano le Figure II.4e II.5).24


II.2. Inserire funzioniFigura II.2: Scriviamo = nella cella C7 per inserire un numero o per valutare una funzione in un numero.Figura II.3: Inseriamo il valore 0.1 nella cella C7.25


II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICOFigura II.4:(Funzione).Inseriamo il valore cos(0.1) nella cella C7 partendo dal menu Insert (Inserisci) e Function26


II.2. Inserire funzioniFigura II.5: Inseriamo il valore cos(0.1) nella cella C7. Nella figura in alto si vede l’ultimo passaggio di cosaaccade dopo aver inserito la funzione da menu. Nella figura in basso si vede cosa succede quando si scrivedirettamente la formula.27


II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICOFigura II.6: Inseriamo in C2 il valore cos(B2).II.3Formule ricorsiveSupponiamo ora di voler implementare l’algoritmo dello schema di punto fisso, applicato alla funzioneg (x) = cos(x).Nella colonna A scriveremo le iterazioni k che facciamo nell’implementare lo schema. Per implementarela formula x k = g (x k−1 ) useremo le colonne B e C: in B metteremo i valori delle approssimazioni x k , in Cscriveremo il valore g (x k ).Nella riga 1 delle colonne A, B e C, per ricordare ciò che stiamo facendo, scriviamo semplicemente k, xk eg(xk), rispettivamente.Al primo passo, nella cella A2 diamo il valore 0 per indicare l’iterazione k = 0, a B2 assegniamo il valore inizialeper x 0 , per esempio 0.0 e in C2 assegniamo il valore g (x 0 ), cioè cos(B2), che ci servirà al passo successivo.Osserviamo che abbiamo usato la cella B2 come una variabile avendo dato a C2 il valore cos(B2). Possiamoscrivere a mano cos(B2) oppure, inserendo la funzione cos() e cliccando con il mouse sulla variabile-cellain cui valutare la funzione (i cui contorni diventeranno di colore rosso), automaticamente viene inserito ilnome della cella all’interno delle parentesi (in questo caso la cella B2). Dopo aver schiacciato il tasto di inviocomparirà il valore numerico della funzione calcolata (si veda la Figura II.6).Al passo successivo, il passo k deve essere uguale a 1: applichiamo alla cella A3 la formula A2+1 in mododa ottenere 1 (vedremo perchè conviene applicare questa semplice formula). La cella B3 ha come significatox 1 = g (x 0 )= cos(B2)=C2, il valore che si trova nella cella C2. Nella cella C3 andremo a valutare cos(B3), inmodo da utilizzarlo nella cella B4 al passo successivo.Siamo ora in grado di scrivere queste formule in maniera ricorsiva effettuando una sola operazione dicopia-incolla o di trascinamento. . .Difatti, ora sulla riga 4 noi dobbiamo:G in A4, incrementare il valore dell’iterazione che viene effettuata (la cella A4 deve essere uguale ad A3+1);G in B4, aggiornare la variabile x k mettendo nella cella B4 il valore che si trova nella cella C3;G in C4, aggiornare la variabile g (x k ) calcolando cos(B4).28


II.3. Formule ricorsiveFigura II.7: Operazione di copia-incolla per applicare le formule ricorsive dalla riga 3 alla riga 4. Nella figurain alto, abbiamo ”annerito” le tre cellette della riga 3. Nella figura in basso, dopo aver fatto Copy delle trecellette della riga 3, ”anneriamo” le tre cellette della riga 4 su cui incolleremo le formule ricorsive.29


II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICOFigura II.8: Risultato dell’operazione di copia e incolla dalle cellette della riga 3 alle cellette della riga 4.Questa operazione andrà ripetuta fino a quando non ci accorgiamo di essere arrivati a convergenza - vedremopoi come.Per aggiornare la riga 4 basta semplicemente ”annerire” con il mouse le cellette A3-B3-C3 (dove ci sonodelle formule che si riferiscono alla riga precedente), spostandoci con il mouse e cliccando contemporaneamentecon il tasto sinistro del mouse stesso. Clicchiamo quindi con il tasto destro del mouse e si aprirà unafinestra di comandi: in particolare, clicchiamo alla voce Copy (Copia) e poi con il mouse ”anneriamo” (con lastessa tecnica descritta prima) le tre cellette successive.Clicchiamo di nuovo il tasto destro del mouse e facciamo Paste (Incolla). Vedremo che le cellette ora sonoaggiornate e con le stesse formule che avremmo scritto a mano celletta per celletta (in A4 troviamo la formulaA3+1, in B4 troviamo C3, in C4 troviamo cos(B4) ). Si vedano le Figure II.7 e II.8. Se anzichè ”annerire” solole cellette della riga successiva, ”annerrissimo” le cellette di molte più righe, l’algoritmo verrà applicato insuccessione (talmente rapida che ci sembra istantanea) per molti più passi (tanti quante sono le righe su cuiabbiamo applicato la formula ricorsiva mediante l’operazione di copia e incolla). Si veda la Figura II.9.L’operazione di copia e incolla si può fare anche in un’altra maniera mediante l’operazione di trascinamentodel mouse. Una volta che abbiamo ”annerito” le cellette in cui si trovano le formule ricorsive da applicaresulle righe successive, osserviamo che l’angolo in basso a destra della cornice nera che si è venuta acreare ha un bordino più spesso. Ci avviciniamo con il tasto sinistro del mouse su quel bordino e poi trasciniamoil mouse verso il basso. Vediamo che, via via che andiamo verso il basso, i bordi delle cellette sucui vogliamo applicare le formule ricorsive diventano di colore rosso. Una volta che lasciamo il tasto sinistrodel mouse, le formule vengono applicate e troviamo i valori numerici nelle cellette. Notiamo che nellaversione 2.3 di OpenOffice, una volta che lasciamo il tasto sinistro del mouse, per completare l’operazione ditrascinamento dobbiamo cliccare su Formule nella finestra che automaticamente viene aperta. Dopo avercompletato questa operazione, si conclude correttamente l’operazione di trascinamento. Osserviamo che cisono al più due cifre decimali nella rappresentazione dei numeri. Per visualizzare meglio i numeri, convienecambiare formato: ”anneriamo” le cellette delle colonne B e C, clicchiamo il tasto destro del mouse e, sullafinestra che si apre, andiamo su Format Cells (Formatta Celle). Si apre una nuova finestra da cui clicchiamosu Numbers (Numeri) e scegliamo la categoria del formato scientifico. Qui possiamo definire manualmente30


II.4. Fare grafici nel foglio elettronicoFigura II.9: Risultato dell’operazione di trascinamento (o di copia e incolla) su più righe.il numero di zeri che vogliamo nella mantissa (vedasi Figura II.10). 2 Se vogliamo ora aggiungere delle iterazioniall’algoritmo, mediante un’operazione di copia e incolla o di trascinamento, oltre alle formule anche ilformato viene incollato/trascinato nelle celle successive. Per capire quando arrestare l’algoritmo, utilizziamoil test di arresto sugli scarti. Sulla colonna D andremo a scrivere il valore assoluto della differenza tra dueapprossimazioni successive e applicheremo tale formula in maniera ricorsiva. Faremo quindi ABS(B3-B2)e trascineremo questa formula nelle celle successive con il formato che ci sembrerà più opportuno (si vedala Figura II.11). In base alla tolleranza prefissata, quando lo scarto diverrà minore della tolleranza, alloraarresteremo l’algoritmo (e quindi ci fermeremo nell’operazione di copia e incolla o di trascinamento delleformule da una cella alla successiva).II.4Fare grafici nel foglio elettronicoUna volta terminata l’implementazione del metodo di punto fisso, possiamo pensare di fare un graficosemilogaritmico <strong>degli</strong> scarti in funzione delle iterazioni.Dobbiamo quindi vedere come fare nel foglio elettronico un grafico in cui sull’asse delle ascisse mettiamoi valori delle iterazioni e sull’asse delle ordinate inseriamo i valori assoluti <strong>degli</strong> scarti. Inoltre, dobbiamorendere il grafico semilogaritmico per studiare il profilo di convergenza del metodo.Incominciamo ”annerendo” solo la colonna che contiene le iterazioni dal valore 1 fino alla fine delleiterazioni che abbiamo effettuato: questa operazione viene fatta tenendo premuto il tasto sinistro del mouse.2 Osserviamo che il formato scelto può andare “stretto” nella cella/celle selezionate: in tal caso, al posto del numero saranno visualizzatii simboli ###. Per avere una corretta visualizzazione dei numeri, si dovrà allargare la colonna corrispondente in cui si trovano lecelle per le quali non si vede il formato corretto. Cliccando con il tasto sinistro del mouse sulla cella che porta la lettera della colonna chedesideriamo allargare, vedremo che tutte le celle della colonna selezionata si ”anneriscono”. Ci si sposta poi, con il mouse, verso il bordodestro della cella (per esempio ci troviamo sulla cella della colonna C al contorno con la cella della colonna D) e vedremo comparire unadoppia freccia, grazie alla quale si potrà allargare tutta l’ampiezza della colonna verso destra. Allargheremo la colonna fino a quandotutte le celle saranno visualizzate correttamente nel loro formato.31


II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICOFigura II.10: Finestra per modificare il formato numerico dei risultati. Viene scelto un formato scientificodefinito dall’utente.Figura II.11: Schema del punto fisso, in cui è stata aggiunta, nella colonna D, il valore assoluto dello scartotra due approssimazioni successive. Si noti che abbiamo scelto un formato numerico diverso per gli scartirispetto a quello usato per xk e cos(xk).32


II.4. Fare grafici nel foglio elettronicoFigura II.12: Selezione delle colonne per fare il grafico.Dobbiamo poi passare alla colonna <strong>degli</strong> scarti, dal valore ottenuto all’iterazione 1 fino al valore ottenutoall’ultima iterazione. Per non perdere ”traccia” della colonna delle iterazioni, prima di iniziare a premere conil tasto sinistro del mouse sulla colonna <strong>degli</strong> scarti, dobbiamo schiacciare anche il tasto Ctrl della tastiera delcomputer. Solo dopo andiamo ad annerire la colonna <strong>degli</strong> scarti. In questo modo lasciamo ”nera” anche lacolonna delle iterazioni (si veda la Figura II.12).A questo punto, andiamo sul Menu principale del foglio elettronico alla voce Insert (Inserisci) e di qui suChart (Diagramma).Si apre una finestra che ci permette la scelta del grafico. Noi sceglieremo il grafico XY (Scatter) (nellaversione italiana XY (Dispersione) ) con solo linee - Lines Only (vedasi Figura II.13). Procedendo (con Next -Avanti), si vede che l’intervallo dei punti su cui fare il grafico è stato già scelto e compare nella riga relativaal Data Range (Area dati). Per la serie dei dati, Data Series, si vede quali sono i valori delle ascisse (X-values)e quali le ordinate (Y-values). Si vede anche la scritta Column D che indica il fatto che abbiamo preso per leordinate i valori presi dalla colonna D (vedremo che poi uscirà il nome Column D nella legenda della figura evedremo come dare un nome più significativo) (si veda la Figura II.14). Andando ancora avanti, nella ChartElements (Elementi del diagramma), si può decidere cosa scrivere come titolo, sottotitolo, etichette sugli assix e y. Nella Figura II.15 abbiamo dato titolo, sottotitolo. . . A questo punto si clicca su Finish (Fine) e sul foglioelettronico compare il nostro grafico (che non è ancora semilogaritmico), mostrato nella Figura II.16.Per fare modifiche al grafico, bisogna cliccare una volta con il tasto sinistro del mouse posizionato sulgrafico, in modo da vedere in alto a sinistra un’icona con il simbolo dell’àncora. Ci si posiziona con il mouseall’interno del grafico e si clicca una volta con il tasto destro. Compare una finestra e qui si clicca la voce Edit(Edita). Ora è possibile cambiare il tipo di assi o le linee del grafico, i colori, la legenda. . . .Ad esempio, andando con il mouse sull’asse delle Y e cliccando due volte con il tasto sinistro del mouse,si apre una finestra da cui poter cambiare le linee, i colori, i caratteri, ma soprattutto la scala del grafico.Da Scale (Scala) è infatti possibile scegliere la scala logaritmica come si vede nella Figura II.17. Una voltacliccato su OK, si torna al grafico che non è più quello di prima ma è in scala semilogaritmica (si veda la Fi-33


II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICOFigura II.13: Finestra per la scelta del graficoFigura II.14: Finestra del Data SeriesFigura II.15: Titolo, sottotitolo, etichette.34


II.4. Fare grafici nel foglio elettronicoFigura II.16: GraficoFigura II.17: Scelta della scalagura II.18). Possiamo fare altre modifiche (per esempio cliccando sulla curva del grafico (Data Series ColumnD), possiamo cambiare lo spessore della curva). Inoltre, possiamo cambiare i caratteri usati per il titolo, icolori dello sfondo. E così via.Quello che ci interessa ora è come cambiare la legenda.Clicchiamo due volte con il tasto sinistro del mouse sul grafico. Poi clicchiamo con il tasto destro: si apreuna finestra con varie opzioni di scelta tra cui Data Ranges. Clicchiamo su Data Ranges e si aprirà una finestra,quella che vediamo nella Figura II.19. Per cambiare la scritta Column D, dobbiamo inserire nella casellaRange for Name (Area per Nome) il nome di una cella del foglio elettronico in cui abbiamo scritto un nome dilegenda che riteniamo più appropriato (per esempio, nella cella E1 abbiamo scritto punto fisso). Cliccandosull’icona che si trova a destra della finestra del Range for Name, possiamo poi direttamente cliccare sullacella E1 in modo da inserire automaticamente il nome della cella sulla casella Range for Name (il risultato diquesta operazione è mostrata nella Figura II.20. Vediamo che non compare più il nome Column D ma puntofisso sia su questa finestra sia, dopo aver dato l’OK, sul grafico (vedasi la Figura II.21).35


II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICOFigura II.18: Grafico semilogaritmicoFigura II.19: Finestra del Data RangesII.4.1Grafici multicolonnaOsserviamo che la procedura eseguita per fare il grafico semilogaritmico appena descritto può essere ripetutain maniera analoga per fare grafici multicolonna (per esempio, sull’asse delle x riportiamo le iterate,mentre sull’asse delle ordinate riportiamo i valori assoluti <strong>degli</strong> scarti relativi ai metodi di Newton-Raphson,Regula Falsi, tangente fissa, secante fissa. . . ): una volta che abbiamo inserito i dati relativi alle ascisse e alleordinate della prima serie di dati (per esempio quelli del metodo di Newton-Raphson), e mentre stiamo ancoralavorando sulla finestra che ci permette di costruire il grafico, dopo la scelta del tipo di grafico (Chart Type)e Data Range, al passo del Data Series possiamo aggiungere (Add) altre serie di dati (per esempio iterazioni escarti del metodo della Regula Falsi) per fare un grafico multicolonna. Si vedano le Figure II.22 e II.23.36


II.4. Fare grafici nel foglio elettronicoFigura II.20: Finestra del Data Ranges dopo aver operato la modificaFigura II.21: Grafico finale semilogaritmico37


II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICOFigura II.22: Dopo aver schiacciato sul tasto Add (Aggiungi), per aggiungere altri dati nel grafico, bisognaselezionare i nuovi dati.Figura II.23: Dopo aver selezionato le cellette opportune dei valori delle ascisse da aggiungere al grafico, ivalori vengono visualizzati sulla finestra. Analogamente si procede per l’asse y.II.5Inserire dati da filesSpesso il foglio elettronico viene utilizzato per fare grafici importando dati numerici da files esterni –per esempio files di tipo testo generati dall’esecuzione di programmi scritti in FORTRAN o altri linguaggi diprogrammazione.Per inserire correttamente i dati su più colonne, si può seguire questo percorso: dal Menu principale delfoglio elettronico si va su Insert (Inserisci) −− > Sheet from file (<strong>Foglio</strong> da file). A questo punto si apre unafinestra da cui è possibile selezionare il percorso in cui si trova il file da aprire. Una volta che importiamoil file, si apre un’altra finestra (la finestra di Text import (importa testo)) in cui dobbiamo selezionare alcuniparametri che ci permetteranno di importare i dati inserendoli su più colonne (se i dati sono scritti su piùcolonne, che è la cosa che ci importa per poter fare i successivi grafici).Le opzioni che dobbiamo selezionare sono, oltre a Tab, che già troviamo indicato, anche Merge delimiterse Space (si veda la Figura II.24). Una volta dato l’OK, si apre un’altra finestra (Insert Test) in cui digitiamo dinuovo OK. Troviamo i dati del file messi in colonna come erano nel file di partenza. Il formato numerico non èmolto carino (solo due cifre decimali, anche se andando a vedere celletta per celletta possiamo osservare chei valori sono memorizzati così come erano nel file originario), ma selezionando le celle possiamo cambiare38


II.5. Inserire dati da filesFigura II.24: Importare dati da un file esterno.il formato in modo da visualizzarlo correttamente. A questo punto, abbiamo i nostri dati in tabella sul foglioelettronico e possiamo fare i grafici o altre operazioni tramite il foglio elettronico.39

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!