Sei sulla pagina 1di 41

Annamaria Mazzia

Matlab e Foglio Elettronico:


una breve introduzione
Dipartimento di Ingegneria Civile Edile e Ambientale
Universit degli Studi di Padova
Creative Commons Attribuzione-Non commerciale-Non opere derivate 3.0 Italy License
a.a. 2011/2012
INDICE
Indice ii
I Primi passi in MATLAB 1
I.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
I.2 Avvio di MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
I.2.1 Matrici e vettori in MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
I.3 Comandi utili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
I.4 MATLABper scrivere ed eseguire programmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
I.4.1 Strutture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
I.5 Dati di input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
I.5.1 Programma sul metodo delle bisezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
I.6 Dati di output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
I.7 Graci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
I.8 Sulle potenzialit di MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
I.9 Applicazioni di MATLABnel Calcolo Numerico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
I.9.1 Sullinstabilit numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
I.9.2 Sullinterpolazione e approssimazione di dati . . . . . . . . . . . . . . . . . . . . . . . . . 14
I.9.3 Confronto tra schemi per equazioni differenziali ordinarie . . . . . . . . . . . . . . . . . 20
II Tabelle e graci con il foglio elettronico 23
II.1 Il foglio elettronico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
II.2 Inserire funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
II.3 Formule ricorsive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
II.4 Fare graci nel foglio elettronico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
II.4.1 Graci multicolonna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
II.5 Inserire dati da les . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
ii
A
P
P
E
N
D
I
C
E
I
PRIMI PASSI IN MATLAB
Luniverso non potr essere letto
nch non avremo imparato il
linguaggio ed avremo familiarizzato
con i caratteri con cui scritto.
scritto in linguaggio matematico, e
le lettere sono triangoli, cerchi ed
altre gure geometriche, senza le
quali umanamente impossibile
comprendere una singola parola.
Galileo Galilei
I.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
I.2 Avvio di MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
I.2.1 Matrici e vettori in MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
I.3 Comandi utili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
I.4 MATLABper scrivere ed eseguire programmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
I.4.1 Strutture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
I.5 Dati di input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
I.5.1 Programma sul metodo delle bisezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
I.6 Dati di output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
I.7 Graci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
I.8 Sulle potenzialit di MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
I.9 Applicazioni di MATLABnel Calcolo Numerico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
I.9.1 Sullinstabilit numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
I.9.2 Sullinterpolazione e approssimazione di dati . . . . . . . . . . . . . . . . . . . . . . . . . . 14
I.9.3 Confronto tra schemi per equazioni differenziali ordinarie . . . . . . . . . . . . . . . . . . 20
I.1 Introduzione
MATLABpu 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 lanalisi di dati, e per il calcolo
numerico.
1
I. PRIMI PASSI IN MATLAB
Per chi ha gi imparato a programmare in linguaggio FORTRAN, il passaggio a MATLAB semplice (ba-
sta capire come cambiano le strutture di programmazione e il modo di programmare). In pi, MATLABha
le sue functions, permette calcoli molto pi sosticati di quelli di una calcolatrice, ed capace di fare graci
e visualizzare i risultati in maniera diretta. Molto spesso la conoscenza di MATLAB un requisito richiesto
per molte posizioni lavorative in ambito ingegneristico: a tal ne, utile imparare qualcosa di MATLAB.
Ed altrettanto importante prendere atto del fatto che non esiste un linguaggio di programmazione che vada
bene per risolvere tutti i problemi (quindi non basta conoscere e saper usare un solo linguaggio di program-
mazione). Il FORTRAN si rivela la scelta migliore per risolvere algoritmi numerici complicati (un esempio
tra tanti: risolvere problemi accoppiati di usso e trasporto in mezzi porosi dove le incognite del problema
sono dellordine delle migliaia e migliaia). MATLAB esso stesso un programma complesso (originaria-
mente scritto in FORTRAN e successivamente riscritto in linguaggio C) che va bene per risolvere programmi
delaborazione numerica, per lavorare con matrici (MATLABinfatti sta per MATrix LABoratory laboratorio
matriciale) e per la graca.
MATLAB un prodotto della The MathWorks: vedremo in particolare la versione
MATLAB7.10.0.499 (R2010a).
Un prodotto simile a MATLABma open source GNU Octave (si vada sul sito http://www.octave.
org).
Nel seguito vedremo come si lavora in MATLABtenendo presente che quasi tutti i comandi che daremo
valgono alla stessa maniera anche per Octave (eccezion fatta per linterfaccia graco).
I.2 Avvio di MATLAB
Tralasciamo la parte relativa alla procedura di installazione di MATLAB(che dipende dal computer e dal
sistema operativo in uso) e diamo per scontato che il programma sia presente sul proprio computer.
In ambiente Linux, per avviare MATLABbasta digitare il comando matlab da una nestra di termina-
le. Una volta avviato MATLABcomparir il prompt dei comandi in una nestra come quella mostrata in
Figura I.1. Per uscire dallambiente si digita exit dalla nestra dei comandi oppure dal menu File o ancora
dallicona di chiusura (x in alto a destra della nestra).
Per imparare a usare MATLAB, inizialmente si prende familiarit con la nestra dei comandi eseguendo
calcoli come se fosse una calcolatrice. Vediamo che il risultato viene assegnato ad una variabile detta ans e
che nella Workspace si trovano informazioni su di essa (si veda Figura I.2).
I.2.1 Matrici 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 =
10
20
Un vettore riga x viene scritto usando le parentesi quadre e scrivendo le componenti del vettore una dopo
laltra. 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: Lambiente MATLAB consiste di una serie di nestre, alcune delle quali vengono aperte di default:
la Command Window (la nestra dei comandi), la Current Folder (la directory corrente in cui si sta la-
vorando), la Workspace (lo spazio di lavoro) e la Command History (la nestra con la storia dei comandi
dati).
Figura I.2: Primi calcoli in MATLAB: osservare cosa succede nella Command Window nella Workspace e
nella Command History.
3
I. PRIMI PASSI IN MATLAB
>> y=[10;20]
y =
10
20
In MATLABi vettori altro non sono che un caso particolare di matrice a n righe e 1 colonna (vettore
colonna) o a 1 riga e n colonne (vettore riga). Quindi per scrivere una matrice si scrivono i valori della matrice
riga per riga andando a capo con il punto e virgola:
>> A=[1 2 3 4;
5 6 7 8;
9 10 11 12;
13 14 15 16]
A =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Per matrici (e quindi per i vettori) si possono fare le operazioni di somma e prodotto in maniera molto
semplice. Date due matrici A e B si ha
C=A+B: matrice somma
C=A-B: matrice differenza
C=A*B: matrice prodotto (deve essere la matrice A di dimensione n m e la matrice B di dimensione
mr altrimenti si ha un messaggio di errore).
C=A: matrice trasposta
C=A.*B : matrice i cui elementi sono C(i , j ) = A(i , j ) B(i , j )
Osserviamo che, per indicare un valore della matrice A basta specicare lindice di riga e di colonna: per
esempio
>> A(2,2)
ans =
6
Per indicare gli elementi di tutta la colonna i si usa A(:,i), mentre A(i,:) indica gli elementi della riga i.
>> A(:,2)
ans =
2
6
10
14
>> A(2,:)
ans =
5 6 7 8
Loperatore due punti pu dunque essere usato per estrarre unintera riga o colonna da una matrice o
unintera sottomatrice. Se vogliamo estrarre le ultime due righe e colonne della matrice A, si digita il comando
4
I.3. Comandi utili
>> M=A(3:4,3:4)
M =
11 12
15 16
Inquesto modo abbiamo creato la matrice M che ha come elementi quelli della sottomatrice di Aconle ultime
due righe e colonne.
Per scrivere una matrice vuota A, invece, si usa listruzione A=[ ].
Se si vuole risolvere un sistema lineare Ax = b in MATLABsi pu semplicemente usare una function
propria di MATLABnascosta nelloperatore \ (backslash): basta digitare il comando x= A \b, con b
vettore colonna, per avere in x il vettore incognito. Ad esempio (si confronti con lesercizio ??):
>> A=[0.2 1 0.2; 1 6.5 1.75; 0 2 2.25]
A =
0.2000 1.0000 0.2000
1.0000 6.5000 1.7500
0 2.0000 2.2500
>> b=[2.8 ; 19.25; 10.75]
b =
2.8000
19.2500
10.7500
>> x=A\b
x =
1
2
3
I.3 Comandi utili
Per lavorare meglio sia nella nestra dei comandi sia, successivamente, per scrivere ed eseguire dei veri e
propri programmi, risultano utili le seguenti funzioni:
who fornisce lelenco di tutte le variabili presenti nella nestra dei comandi (lo si pu vedere anche
nella Workspace;
whos fornisce lelenco di tutte le variabili insieme allo spazio in memoria da esse occupato;
help pu essere usato da solo o insieme al nome di una function di MATLABo creata dallutente, e
mostra tutte le informazioni utili per capire come usare MATLABo quella function;
clear se usata da sola cancella tutte le variabili presenti nella nestra dei comandi, se invece
seguita da un elenco di variabili (messe una di seguito allaltra senza virgole) cancella tutte le variabili
dellelenco;
il punto e virgola ; messo dopo unistruzione non fa vedere il risultato dellistruzione nella nestra
dei comandi;
il simbolo % il simbolo per scrivere commenti: ci che viene scritto dopo % rappresenta un
commento;
diary permette di salvare, su un le che viene chiamato diary, il contenuto di ci che viene scritto
nella nestra dei comandi. Il le diary si trova nella directory corrente in cui si sta lavorando;
5
I. PRIMI PASSI IN MATLAB
diary off chiude il le aperto mediante listruzione diary;
diary filediary comando analogo a diary, ma il le non si chiamer diary bens filediary,
dove filediary rappresenta il nome del le denito dallutente;
save filesave salva tutte le variabili presenti nel Workspace, nel le filesave.mat con
filesave nome scelto dallutente;
load filesave ripristina lo stato del Workspace, per esempio dopo aver chiuso la sessione di
MATLAB, caricando tutte le variabili che erano state salvate in filesave.mat.
Ce una notevole differenza di signicato tra i les generati dallistruzione diary e quelli generati me-
diante save. Ci che salviamo con il comando diary paragonabile a ci che pu essere scritto alla lavagna
e di cui prendiamo appunti: scriviamo un le di testo che possiamo elaborare o da cui possiamo trarre dei
risultati per i nostri problemi. Al contrario, quello che viene salvato mediante il comando save costituito
da una o pi variabili, che possono essere riutilizzate nuovamente in MATLABnella nestra dei comandi, in
sessioni successive a quella in cui sono state create, senza dover rieseguire tutti i comandi che hanno portato
alla creazione delle variabili stesse.
Il comando save utile anche per salvare singole matrici o una lista di matrici nella directory corrente. Ci
soffermiamo sulla possibilit di salvare i dati in formato ASCII, in modo da poter utilizzare i dati che salviamo
non solo in MATLABma anche in programmi scritti con altri linguaggi di programmazione. Supponiamo
di avere una matrice A e di volerla salvare nel le matriceA.dat. Scriveremo il comando
save matriceA.dat A -ascii
Quando vogliamo caricare in MATLABla matrice dal le useremo il comando
load(matriceA.dat)
e in questo modo avremo la matrice nella variabile matriceA (il nome del le senza lestensione dopo il
punto).
I.4 MATLABper scrivere ed eseguire programmi
A differenza del FORTRAN, MATLABnon ha subroutines e functions ma solo functions che possono
avere uno o pi variabili di ingresso e una o pi variabili in uscita.
I les in cui vengono scritti i programmi si chiamano M-les dal fatto che hanno lestensione .m:
prova.m, fun.m, . . . I les vanno scritti con leditor di testo di MATLABo con un altro editor di testo in
formato ASCII (quello che facciamo per il FORTRAN).
Quello che in FORTRAN corrisponde al programma principale, in MATLABprende il nome di script,
per il fatto che presenta una lista di comandi da eseguire in ambiente MATLAB, tra cui la chiamata alle
functions proprie di MATLABo denite dallutente (sempre tramite M-les). Inoltre non bisogna dare nes-
suna istruzione di inizio e ne programma (cio non esiste lequivalente delle istruzioni program e stop,
end con cui apriamo e chiudiamo un programma principale in FORTRAN). importante vedere subito una
importante differenza tra FORTRAN e MATLAB: mentre in FORTRAN, siamo abituati a scrivere un pro-
gramma in un unico le, includendo in esso anche le subroutines e le functions che ci servono, poich poi
dobbiamo compilare per avere il programma eseguibile, in MATLABle functions e gli scripts vengono
sempre scritti su les distinti.
Per eseguire uno script salvato in nomefile.m non c bisogno di dover compilare il programma (co-
me invece si deve fare per il FORTRAN): basta lanciare il programma nella nestra dei comandi mediante il
nome del le (senza lestensione .m) o mediante il comando run(nomefile.m) o run(nomefile).
Una function invece pu essere eseguita tramite uno script oppure direttamente nella nestra dei
comandi, specicando le variabili di ingresso e di uscita, come vedremo con qualche esempio tra breve.
Per quanto riguarda il nome da dare alle variabili, MATLAB sensibile alle lettere minuscole e
maiuscole: una variabile chiamata A diversa da a, una variabile XOLD diversa da xold.
importante osservare, inoltre, che nello scrivere M-les le variabili utilizzate non vanno dichiarate,
come invece va fatto in FORTRAN.
I.4.1 Strutture
Per capire le differenze di programmazione tra FORTRAN e MATLAB, partiamo dagli operatori logici.
6
I.4. MATLABper scrivere ed eseguire programmi
Operatore MATLAB Operatore FORTRAN Signicato
< .LT minore
> .GT. maggiore
<= .LE. minore o uguale
>= .GE. maggiore o uguale
== .EQ. uguale
= .NE. non uguale
&& .AND. congiunzione
|| .OR. disgiunzione
.NOT. negazione
Tabella I.1: Operatori relazionali e logici
Vediamo poi come si scrivono i vari cicli in FORTRAN e in MATLAB:
in FORTRAN
i f ( espr . l ogi ca ) then
{ i st ruzi one 1a }
{ i st ruzi one 2a }
{ . . . . }
el se
{ i st ruzi one 1b }
{ i st ruzi one 2b }
{ . . . . }
end i f
in MATLAB
i f ( espr . l ogi ca )
{ i st ruzi one 1a }
{ i st ruzi one 2a }
{ . . . . }
el se
{ i st ruzi one 1b }
{ i st ruzi one 2b }
{ . . . . }
end
in FORTRAN
i f ( espr . l ogi ca1 ) then
{ i st ruzi one 1a }
{ i st ruzi one 2a }
{ . . . . }
el se i f ( espr . l ogi ca2 ) then
{ i st ruzi one 1b }
{ i st ruzi one 2b }
{ . . . . }
. . . .
el se
{ i st ruzi one 1z }
{ i st ruzi one 2z }
{ . . . . }
end i f
in MATLAB
i f ( espr . l ogi ca1 )
{ i st ruzi one 1a }
{ i st ruzi one 2a }
{ . . . . }
el s ei f ( espr . l ogi ca2 )
{ i st ruzi one 1b }
{ i st ruzi one 2b }
{ . . . . }
. . . .
el se
{ i st ruzi one 1z }
{ i st ruzi one 2z }
{ . . . . }
end
Osserviamo che in MATLABnon ci sono i then e che elseif va scritto tutto attaccato.
7
I. PRIMI PASSI IN MATLAB
in FORTRAN
do while ( espressione l ogi ca )
{ i st ruzi one 1 }
{ i st ruzi one 2 }
{ . . . }
{ i st ruzi one n }
end do
in MATLAB
while ( espressione l ogi ca )
{ i st ruzi one 1 }
{ i st ruzi one 2 }
{ . . . }
{ i st ruzi one n }
end
Nel ciclo while si elimina il do.
in FORTRAN
do ind= val i ni z , val f i n , i ncr
{ i st r uzi oni }
end do
in MATLAB
for ind= val i ni z : i ncr : val f i n
{ i st r uzi oni }
end
Il ciclo do in FORTRAN diventa ciclo for in MATLAB. Lordine delle variabili relative al valore iniziale
del ciclo, valore nale e incremento non pi come in FORTRAN e ci sono i due punti al posto della virgola:
osservare bene le differenze.
C unaltra struttura che si trova in MATLABe non in FORTRAN 77: la costruzione switch-case.
switch ( espressione ) % ( scal are o st ri nga )
case { val ore1 } % esegui t a se l espressi one e valutata al valore1 )
{ i st r uzi oni }
{ . . . }
case { val ore2 } % ( esegui t a se l espressi one e valutata al valore2 )
{ i st r uzi oni }
{ . . . }
otherwise
{ i st r uzi oni }
{ . . . }
end
Il ciclo con switch confronta i valori dati nellespressione di input (subito dopo switch) con ciascun
valore assegnato a case ed esegue le istruzioni relative al case in cui valore ed espressione coincidono.
Nellesempio che riportiamo, a seconda del valore assegnato alla variabile scelta cambiano i valori da
assegnare alle variabili a e b:
scel t a=test1;
switch scel t a
case {test1}
x0= 0. 1;
x1= 0. 2;
case {test2}
x0= 0. 0;
x1= 1. 0;
otherwise
disp(nessuncasotestscelto)
end
Osserviamo che scelta una variabile di stringa di caratteri, il nome del caso test scritto tra apici; per
visualizzare un messaggio sulla Command Window, abbiamo usato la function di MATLABchiamata disp.
8
I.5. Dati di input
I.5 Dati di input
Quando si lavora nella nestra dei comandi, per assegnare il valore alle variabili basta scrivere il nome
della variabile seguito dal simbolo di uguale e dal valore (o dai valori) da assegnare (a seconda che si tratti di
una variabile scalare, matrice, vettore...):
>> a=10.5;
>> A=[1 2 3; 4 5 6; 7 8 9];
Nelleseguire uno script, alla stessa maniera, si pu assegnare il valore alle variabili direttamente allinterno
dello script. Tuttavia, se si vuole dare maggiore generalit al programma e si vogliono dare in input i valori
delle variabili, conviene usare la function input. Vediamo con un esempio:
a=input(scriviilvaloredellavariabilea)
Il messaggio contenuto tra apici viene visualizzato sulla nestra dei comandi e il prompt aspetter che lu-
tente scriva il valore da assegnare ad a. La function input si pu dunque paragonare alle istruzioni di write
e 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 vetto-
ri. Tuttavia, se i dati di input sono moltopesanti (adesempio matrici di dimensioni molto elevate), conviene
usare in maniera opportuna la funzione di input unitamente al comando load - scrivendo una volta per tut-
te la matrice di input in un le da caricare ogni volta che si vuole eseguire il programma con quella matrice.
Per esempio, abbiamo scritto nel le A.dat i valori della matrice e vogliamo dare in input questa matrice al
nostro programma. Invece di scrivere
A= input(matriceA);
nello script scriveremo
A= input(filediinputconlamatriceA, s);
A= load(A);
Osserviamo che abbiamo usato input inserendo, oltre alla stringa tra apici file di input con la
matrice A, anche s: questa opzione serve perch noi scriveremo il nome del le su cui si trova memo-
rizzata la matrice e questo le viene letto come una stringa di caratteri per cui inizialmente alla variabile A
viene associato il le con la matrice (in questo caso A.dat). Con il comando successivo, viene caricato il le
e 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 dellapice che chiude la frase che
viene visualizzata sulla Command Window tramite input.
utile sapere anche che, se unistruzione 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.1 Programma sul metodo delle bisezioni
Consideriamo lalgoritmo del metodo delle bisezioni, per calcolare gli zeri di unopportuna funzione f .
Ad esempio vogliamo risolvere il problema f (x) =0 con f (x) =(
x
2
)
2
sin(x) nellintervallo [1, 3].
Dobbiamo scrivere il programma principale, in un le che chiamiamo bisez.m, e la function legata alla
funzione f (x), in un le che chiamiamo fun.m.
Scriviamo il programma principale:
% programma per i l cal col o degl i zer i di una funzione mediante
% i l metodo di bi sezi one
a=input (primoestremodellintervalloa) ;
b=input (secondoestremodellintervallob) ;
aux=fun( a)
*
fun(b) ;
i f aux>=0
disp(estremidellostessosegno)
break
end
itmax=100;
t ol l =1. e10;
9
I. PRIMI PASSI IN MATLAB
i t er =0;
c=(a+b)
*
0. 5;
scarto=abs (ba )
*
0. 5;
while i t er <=itmax && fun( c)~=0 && scarto>t ol l
i t er =i t er +1;
aux=fun( a)
*
fun( c ) ;
i f aux>0
a=c ;
el se
b=c ;
end
c=(a+b)
*
0. 5;
scarto=abs (ba )
*
0. 5;
end
i f fun( c)==0 | | scarto<t ol l
spri ntf (%s%15.8e , soluzioneapprossimatac= , c )
el se
spri ntf (%s , raggiuntonumeromaxdiiterazioni)
end
Per poter essere eseguito, dobbiamo scrivere in un le chiamato fun.m la function fun. Si ha:
function y=fun( x )
% funzione per l o schema del l e bi s ezi oni
% input x
% output y=(x/ 2)^2 si n ( x)
y=( x/2).^2sin ( x ) ;
Nel programma principale abbiamo semplicemente tradotto lalgoritmo del metodo delle bisezioni. Ab-
biamo considerato dei comandi che non abbiamo ancora visto in MATLAB, per la stampa dei risultati (me-
diante sprintf) e abbiamo usato il comando break per interrompere lesecuzione del programma se una
condizione non vericata.
Le righe di commento scritte dopo listruzione function y=fun(x) vengono visualizzate sulla
Command Window se, una volta salvata la function, digitiamo listruzione help fun
I.6 Dati di output
Lambiente MATLABpermette di visualizzare tutte le variabili presenti al termine dellesecuzione di un
programma o di una funzione. Tuttavia, alcune volte vogliamo visualizzare subito dei risultati sulla Com-
mand Window o su un le separato rispetto allambiente di lavoro. Abbiamo gi visto, nellesempio prece-
dente il comando sprintf: esso serve per stampare un messaggio sulla Command Window utilizzando un
certo tipo di formato.
Nellesempio avevamo usato
sprintf(%s%15.8e, soluzioneapprossimatac=, c)
Allinterno delle parentesi tonde si possono riconoscere due parti: nella prima parte si scrive, tra apici e uno di
seguito allaltro, il formato da utilizzare per la stampa delle variabili che sono scritte subito dopo. Nel nostro
caso, le variabili da stampare sono la stringa di caratteri soluzione approssimata c= e il valore della
variabile 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 sono
grosse differenze. Per la variabili intere o reali possiamo decidere quante cifre utilizzare per rappresentare la
variabile (%15.8e nellesempio). Riassumiamo nella tabella seguente i principali tipi di formato e i simboli
che servono per andare a capo o creare nuove linee: Se si vogliono scrivere i risultati su un le, occorre aprire
il le e associarlo ad una variabile mediante la function fopen. Ad esempio
d= fopen(risultati.txt,w)
Con questa istruzione aprimamo il le di risultati dal nome risultati.txt (w indica che il le di
10
I.7. Graci
formato Signicato
%s stringhe di caratteri
%d formato intero
%f formato sso
%e formato esponenziale (del tipo 3.5e +00)
%E formato esponenziale (del tipo 3.5E +00)
\ n nuova linea
\ r per andare a capo
Tabella I.2: Il formato
Figura I.3: Finestra con il graco
scrittura) associandolo alla variabile fid. Per scrivere sul le, al posto della function sprintf si user la
function fprintf che differisce dalla prima per il fatto che bisogna indicare la variabile associata al le di
scrittura dati. Il comando sprintf di prima diventa ora:
fprintf(d, %s%15.8e, soluzioneapprossimatac=, c)
Per chiudere il le si usa listruzione fclose(fid). Quindi fopen e fclose sono equivalenti alle
istruzioni open e close che abbiamo visto in FORTRAN.
I.7 Graci
Supponiamo di voler fare il graco di una serie di dati (x
i
, y
i
), i = 1, . . . , n. Sulla Command Window (o
allinterno di uno script) basta digitare il comando
plot(x,y)
Si aprir una nuova nestra con il graco (vedi Figura I.3).
Potremopoi modicare il colore, il tipodi linea, inserire titolo, legenda,...operandodirettamente sul menu
della nestra del graco, o inserendo i comandi opportuni tramite la Command Window
1
.
Si possono sovrascrivere graci luno sullaltro utilizzando il comando hold on. Oppure si possono
afancare graci mediante il comando subplot. Lasciamo gli approfondimenti allhelp on line.
Per fare il graco di una funzione, si possono seguire diverse strade.
1
Ci sarebbe tanto da dire a riguardo ma lasciamo che il lettore curioso approfondisca largomento utilizzando lhelp on line di
MATLAB. In Octave, invece, le modiche ai graci non possono essere fatte usando la nestra del graco.
11
I. PRIMI PASSI IN MATLAB
Se si ha a disposizione la function (propria di MATLABo scritta su un le .m), si pu costruire il vettore
con il valore della funzione in un numero determinato di punti equidistanti sullintervallo in cui si desidera
visualizzarla. A tal proposito utile la function linspace che permette di discretizzare un intervallo chiuso
[a, b] in un pressato numero di punti. Useremo allora le seguenti istruzioni:
x=linspace ( 0 , 2) ;% di screti zzi amo l i nt er val l o [ 0 , 2] in 100 part i
% uguali
% x=l i nspace ( 50 , 0 , 2) di s cr et i zza l i nt er val l o in
%50 part i uguali
y=myfun( x ) ; % valuto l a function myfun nel vet t or e x
plot ( x , y)
Questo approccio comodo quando la funzione da visualizzare ha una espressione complicata o quando
stiamo lavorando allinterno di uno script. La function myfun deve essere scritta in modo che sia possibile
valutarla direttamente su un vettore (che quello che facciamo tramite listruzione y=myfun(x)). Le opera-
zioni di moltiplicazione, divisione ed elevamento a potenza devono essere vettorizzate, facendo precendere il
simbolo di moltiplicazione, divisione e elevamento a potenza dal simbolo del punto ( .*, ./, . ) permet-
tendo, in tal modo, che le operazioni vengano fatte componente per componente del vettore. Le operazioni
di somma e differenza sono vettorizzate per denizione.
Ad esempio: la function myfun denita tramite le istruzioni
function [ y]= f ( x )
y=log ( x )
*
x
non vettorizzata. Se invece scriviamo
function [ y]= f ( x )
y=log ( x ) .
*
x
allora la function vettorizzata.
Unaltra via di scrivere la function come una funzione inline nella Command Window e di utilizzare la
function ezplot per farne il graco.
Supponiamo di voler fare il graco della funzione f (x) =e
x
10sin(x)1. Per avere questa funzione nella
Command Window durante la sessione di lavoro (quindi non come una function scritta su le), scriviamo il
comando
fun = 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)-1
Se vogliamo farne il graco nellintervallo [0, 2] scriveremo
ezplot(fun, 0, 2)
e viene direttamente creato il graco della funzione fun. La function ezplot pu essere utilizzata anche
con funzioni intrinseche di MATLABo denite dallutente in forma vettorizzata (per esempio
ezplot(sin,0,2)
crea il graco della funzione sin(x) nellintervallo [0, 2]).
I.8 Sulle potenzialit di MATLAB
MATLABha un grande numero di functions predenite che permettono di eseguire applicazioni in di-
versi settori propriamente matematici, per approssimare zeri di funzioni, per lavorare su matrici sparse, ri-
solvere equazioni differenziali, lavorare su dati statistici, fare graci in due e tre dimensioni... Basta vedere il
Demo di MATLABper trovare la function di cui si ha bisogno.
12
I.9. Applicazioni di MATLABnel Calcolo Numerico
possibile inoltre installare pacchetti specichi per speciche aree di applicazioni, quali sistemi di
controllo, biologia computazionale, nanza computazionale, meccatronica...
In questa breve presentazione di MATLAB, tuttavia, cercheremo di vedere come utilizzarlo per capire
meglio alcuni dei problemi trattati inCalcolo Numerico, rielaborando o ripresentando alcuni esempi gi visti.
I.9 Applicazioni di MATLABnel Calcolo Numerico
I.9.1 Sullinstabilit numerica
Riprendiamo lesempio sullinstabilit numerica visto nel Capitolo sulla rappresentazione dei numeri al
calcolatore, per cui vogliamo approssimare il valore degli integrali espressi mediante la formula
y
n
=
Z
1
0
x
n
x +10
dx
per valori di n =1, 2, . . . , 30.
Avevamo visto due formule ricorsive che ci permettevano di approssimare y
n
, una era instabile e laltra
era stabile.
Proviamo a rivedere gli algoritmi e scriviamo un programma MATLABda eseguire per vericare quanto
avevamo detto.
% Es er ci zi o sul l i ns t abi l i t a numerica
% cal col o del l i nt egr al e y_n= int_0^1 x^n/ ( x+10) dx
%
% yi ns t : vet t or e con i val ori del l algoritmo i ns t abi l e
% ys t : vet t or e con i val ori del l algoritmo s t abi l e
%
% algoritmo i ns t abi l e
%
yi nst (1)= log ( 11) log ( 10) ; %corrisponde al val ore i ni zi al e
for i =1:30
yi nst ( i +1)= 1/ i 10
*
yi nst ( i ) ;
end
%
% algoritmo s t abi l e
% s i ri chi ede che i l val ore del l i nt egr al e y_n1 si a approssimato
% con una accuratezza data dal val ore di input t ol
n1= input (indicen1 ) ;
t ol =input (tolleranzatol) ;
k= log10( t ol ) + n1;
k= f i x ( k+1) ; % f i x e una function che ef f et t ua l arrotondamento
% del numero in modo da avere un val ore i nt ero
yst ( k) =0;
for j =k1: 1:1
yst ( j ) =1/10
*
(1/ j yst ( j +1) ) ;
end
Uno volta eseuito lo script, nella Command Windowsi hanno i due vettori che possono essere confrontati tra
loro. Osserviamo che lequivalente programma FORTRAN sarebbe meglio scriverlo non utilizzando i vettori
e facendosi stampare i risultati intermedi su un le. In questo caso, potendo avere i risultati sulla Command
Window, ci conviene usare dei vettori. Il valore iniziale y
0
si avr nella prima componente dei vettori che
vengono creati. Perci si faccia attenzione agli indici utilizzati (per yst si usa j e j+1: perch?).
Volendo, si pu modicare lo script facendo uso della function di MATLABsingle che converte il
risultato in singola precisione in modo da confrontare i due algoritmi con i calcoli in singola precisione.
% yi ns t s i ng : vet t or e del l algoritmo i ns t abi l e lavorando
% in si ngol a preci si one
13
I. PRIMI PASSI IN MATLAB
Figura I.4: Algoritmo instabile: schermata del confronto tra luso o meno della function single
% ys t s i ng : vet t or e del l algoritmo s t abi l e lavorando
% in si ngol a preci si one
yi nst si ng (1)= si ngl e ( log ( 11) ) si ngl e ( log ( 10) ) ;
for i =1:30
yi nst si ng ( i +1)= si ngl e (1/ i ) si ngl e (10
*
yi nst si ng ( i ) ) ;
end
n1= input (indicen1 ) ;
t ol =input (tolleranzatol) ;
k= log10( t ol ) + n1;
k= f i x ( k+1) ;
yst si ng ( k) =0;
for j =k1: 1:1
yst si ng ( j ) =si ngl e ( 1/10)
*
si ngl e (1/ j yst si ng ( j +1) ) ;
end
Come si pu osservare dalle Figure I.4 e I.5, i risultati ottenuti dallalgoritmo instabile cambiano a seconda
che si usi o meno la function single mentre abbiamo gli stessi risultati (consideriamo le cifre corrette in
singola precisione, usando il formato format short e) per lalgoritmo stabile.
I.9.2 Sullinterpolazione e approssimazione di dati
In MATLABesistono gi delle function che permettono di interpolare e approssimare delle serie di dati.
C la function polyfit che, dati i vettori contenenti le ascisse e le ordinate da interpolare o approssima-
re, di dimensione n, e il grado m del polinomio che si vuole creare, fornisce in output il vettore contenente i
coefcienti del polinomio interpolante (o approssimante) in ordine decrescente [a
m
a
m1
. . . a
0
] da cui il po-
linomio p(x) =a
m
x
m
+a
m1
x
m1
+. . . a
0
: per m=n1 si ha il polinomio di interpolazione, per m<n1 si
14
I.9. Applicazioni di MATLABnel Calcolo Numerico
Figura I.5: Algoritmo stabile: schermata del confronto tra luso o meno della function single
ha il polinomio di approssimazione. Lalgoritmo si basa sul processo di minimizzazione nel senso dei minimi
quadrati.
Esempio:
>> x=[7 8 9 10];
>> y=[3 1 1 9];
>> p=polyfit(x,y,3)
p =
1.0000 -23.0000 174.0000 -431.0000
Signica che il polinomio di interpolazione :
p(x) =x
3
23x
2
+174x 431
Una volta ricavati i coefcienti, si pu fare un graco 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 coefcienti sono dati dal vettore p, nei punti di xx. Abbiamo usato
la function plot per rappresentare sullo stesso graco due curve, quella dei dati x,y (graco che facciamo
per punti utilizzando dei cerchietti) e quella del polinomio.
15
I. PRIMI PASSI IN MATLAB
Scriviamo ora delle function che ci permettano di ottenere il polinomio di interpolazione sia usando
lapproccio delle funzioni base monomiali che porta alla costruzione della matrice di Vandermonde, sia
costruendo i polinomi di Lagrange o utilizzando le differenze divise di Newton.
Usando le funzioni base monomiali, scriviamo la seguente function, interpmonom:
function p=interpmonom( x , y)
% function p=interpmonom( x , y )
% i nterpol azi one monomiale
% dati i val ori x e y da i nt erpol are s i cos t r ui s ce i l vet t or e p
% dei c oe f f i c i e nt i del polinomio di i nterpol azi one
% applicando i l metodo dei c oe f f i c i e nt i indeterminati
%
% se x e y non sono gia ve t t or i colonna l i rendiamo t al i
% mediante l e due i s t r uzi oni s ucces s i ve
x=x ( : ) ;
y=y ( : ) ;
i f length( x)~=length( y)
% length e una function che misura l a lunghezza del vet t or e
% ( s i conf ront i l a di f f erenza t ra length e s i ze )
error (MATLAB:interpmonom , . . .
ivettorixeynonhannolastessalunghezza)
el se
n=length( x) 1;
% V matrice di Vandermonde cos t r ui t a in maniera r i cor s i va
V( : , 1) = ones (n+1, 1) ;
for i =2:n+1
V( : , i )= x .
*
V( : , i 1);
end
p=V\y ;
% i l vet t or e p contiene i c oe f f i c i e nt i del polinomio i nt erpol at ore
% in ordine cres cent e p0 p1 p2 . . .
% se vogliamo usare l a function del MATLAB pol yval per val utare
% t al e polinomio in piu punti , dobbiamo s c r i v e r l i in ordine decrescent e
for i =1:n+1
aux( i )=p(n+2i ) ;
end
p=aux ;
end
Osserviamo che abbiamo usato listruzione error per mostrare un messaggio di errore e far interrompere
lesecuzione della function, nel caso in cui i dati di input x e y non abbiano la stessa lunghezza. La stringa
MATLAB:interpmonom una stringa di identicazione dellerrore (pu essere anche omessa), mentre la
stringa i vettori x e y non hanno la stessa lunghezza quella che viene visualizzata durante lesecuzione del
codice.
La matrice V stata costruita in maniera ricorsiva. Una volta calcolato il vettore p possiamo valutare il
polinomio di interpolazione mediante la polyval.
Riprendendo lesempio di prima, con x,y,xx,yy gi dati:
>> p=interpmonom(x,y);
>> plot(x,y,o, xx,yy)
Per quanto riguarda linterpolazione di Lagrange, si considerino le due functions che chiamamo
lagrange e interplagrange rispettivamente. La prima valuta li -simo polinomio di Lagrange e laltra
valuta il polinomio di interpolazione di Lagrange in un assegnato punto (o nelle componenti di un vettore).
function yval =lagrange ( xval , x , i )
% function yval =lagrange ( xval , x , i )
% function che cal col a i l polinomio i simo di Lagrange
16
I.9. Applicazioni di MATLABnel Calcolo Numerico
% valutandolo in xval
% xval puo es s er e uno scal are o un vet t or e
% x vet t or e del l e as c i s s e da i nt erpol are
xval =xval ( : ) ;
n=length( x ) ;
yval =ones ( length( xval ) , 1 ) ; % s i crea un vet t or e di t ut t i 1
for j =1:n
i f j ~=i
yval =yval .
*
( xval x ( j ) ) / ( x ( i ) x ( j ) ) ;
end
end
function yval =i nterpl agrange ( xval , x , y)
% function yval =interpl agrange ( xval , x , y )
% dati i ve t t or i x e y da i nt erpol are
% l a function implementa l i nterpol azi one di Lagrange valutandola
% in xval
% xval puo es s er e uno scal are o un vet t or e
% questa function chiama l a function lagrange ( xval , x , i )
i f length( x)~=length( y)
error (MATLAB:interplagrange , . . .
ivettorixeynonhannolastessalunghezza)
el se
xval =xval ( : ) ;
yval =zeros ( length( xval ) , 1 ) ; % s i crea un vet t or e di t ut t i zero
n=length( x) 1; % n grado del polinomio
for i =1:n+1
yval = yval + lagrange ( xval , x , i )
*
y( i ) ;
end
end
Eseguiamo lesempio di prima per vedere cosa si ottiene:
>> yy=interplagrange(xx,x,y);
>> plot(x,y,o, xx,yy)
Ora la function interplagrange sostituisce luso delle due function polyfit, polyval o
interpmonom, polyval.
Calcoliamo ora il polinomio di interpolazione mediate le differenze divise di Newton. Scriviamo due
functions, la prima che scrive la tabella delle differenze divise, la seconda che valuta il polinomio di in-
terpolazione implementando lalgoritmo di Horner
2
in modo da minimizzare il numero delle operazioni da
eseguire.
function tabl e=di vdi f ( x , y)
% function t abl e=di vdi f ( x , y )
% x as c i s s e dei dati da i nt erpol are
% y ordinate dei dati da i nt erpol are
% t abl e t abel l a del l e di f f er enze di vi s e
x=x ( : ) ;
y=y ( : ) ;
n=length( x ) ;
m=length( x ) ;
i f n~=m
error (MATLAB:differenze_divise ,erroresuidati)
el se
2
William Horner (1786-1837) fu un matematico inglese, ricordato essenzialmente per il suo metodo sulle equazioni algebriche.
Spieghiamo lalgoritmo solo per rendere comprensibile la function che scriviamo.
17
I. PRIMI PASSI IN MATLAB
tabl e=zeros (n, n) ; % iniziamo l a t abel l a come una matrice di zer i
tabl e ( : , 1) = y ;
for j =2:n
for k=2: j
tabl e ( j , k)= ( tabl e ( j , k1) tabl e ( j 1,k1) ) / . . .
( x ( j ) x ( j k+1) ) ;
end
end
end
La diagonale principale della matrice table ha i coefcienti 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
n1
)
Per valutarlo in un punto x eseguiamo i seguenti passaggi, applicando, in tal modo, lalgoritmo di Horner:
p =a
n
p =p(x x
n1
) +a
n1
=a
n
(x x
n1
) +a
n1
p =p(x x
n2
) +a
n2
=a
n
(x x
n1
)(x x
n2
) +a
n1
(x x
n2
) +a
n2
.
.
.
p =p(x x
0
) +a
0
=a
n
(x x
n1
)(x x
n2
) . . . (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
n2
)(x x
n1
)
La function da scrivere dunque:
function yval =i nt er pdi vdi f ( xval , x , tabl e )
% function yval =i nt erpdi vdi f ( xval , x , t abl e )
% x as c i s s e dei dati da i nt erpol are
% t abl e t abel l a del l e di f f er enze di vi se ,
% ottenuta dal l a function di vdi f ;
% servono i val ori del l a diagonale pri nci pal e
% xval scal are o vet t or e in cui cal col are i l polinomio
% i nt erpol at ore
% yval val ore ( o val ori ) del polinomio i nt erpol at ore
% valutato in xval
% nel cal col o del polinomio i nt erpol at ore s i applica
% l algoritmo di Horner
xval =xval ( : ) ;
x=x ( : ) ;
n=length( x) 1;
yval =tabl e (n+1,n+1)
*
ones ( length( xval ) , 1 ) ;
for j =n: 1: 1
yval =yval .
*
( xval x ( j ) ) + tabl e ( j , j ) ;
end
Le functions appena descritte possono essere usate inmaniera del tutto equivalenti per risolvere il proble-
ma dellinterpolazione. Ci sono per dei casi in cui i risultati ottenuti dalla polyfit e dalla interpmonom
non sono corretti in quanto la matrice di Vandermonde ad esse legate malcondizionata.
Abbiamo gi descritto gli effetti del malcondizionamento nellinterpolazione. Quando applichiamo la
function polyfit ai dati di quel problema, si ha il seguente messaggio di avvertimento (un warning):
18
I.9. Applicazioni di MATLABnel Calcolo Numerico
>> poli=polyfit(x,y,5)
Warning: Polynomial is badly conditioned. Add points with distinct X
values, reduce the degree of the polynomial, or try
centering
and scaling as described in HELP POLYFIT.
Questo ci dice che i risultati che avremo non saranno buoni e, effettivamente, se facciamo il graco dei dati
del problema e del polinomio di interpolazione ottenuto con la polyfit, si nota subito che il polinomio
completamente errato (vedi Figura I.8) Anche nellapplicare la function interpmonom si ha il messaggio di
Figura I.6: Uso della function polyfit per lesempio 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 graco precendente la curva corrispondente al polinomio ottenuto con la interpmonom
osserviamo come le due curve siano tra loro distinte e non interpolano i dati.
Figura I.7: Uso della function interpmonom per lesempio malcondizionato.
Proviamo invece ad applicare lalgoritmo di Lagrange o delle differenze divise di Newton e aggiungiamo
le nuove curve sul precedente graco:
>> 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 Newton
nellesempio malcondizionato. Osserviamo che la Figura ?? relativa allo stesso problema stata ottenuta
eseguendo le stesse functions (per semplicit abbiamo omesso i risultati ottenuti dalla interpmonom) in
ambiente Octave.
Si nota subito che le due curve sono tra loro coincidenti e interpolatorie!
I.9.3 Confronto tra schemi per equazioni differenziali ordinarie
Quando abbiamo introdotto alcuni metodi per la risoluzione di equazioni differenziali ordinarie, in
particolare i metodi di Eulero esplicito, di Eulero implicito e di Crank-Nicolson.
Li abbiamo anche confrontati per capire meglio il concetto di stabilit, considerando lequazione test
y
0
=y con y(0) =1 (si veda a proposito la Figura ??).
Scriviamo ora un programma MATLABche, per questa equazione test,
ci permetta di poter confrontare i tre metodi tra loro e con la soluzione esatta
crei dei graci simili a quelli di Figura ??
salvi i valori numerici dei diversi metodi e della soluzione esatta in un le.
cl ear
% h = passo di di s cret i zzazi one temporale
% Tfin = tempo f i nal e di osservazi one
% n = numero di vol t e in cui verra appl icato ciascuno dei metodi
% proposti
% f i d = vari abi l e associ at a al f i l e di r i s ul t at i
% t = vet t or e dei tempi
% ye = vet t or e dei val ori as s oci at i al metodo di Eulero e s pl i c i t o
% ( di lunghezza n+1 perche l a prima componente corrisponde
% al val ore del l a sol uzione al tempo zero )
% yi = vet t or e dei val ori as s oci at i al metodo di Eulero i mpl i ci t o
% ycn = vet t or e dei val ori as s oci at i al metodo di CrankNicolson
% yex = vet t or e dei val ori as s oci at i al l a sol uzione esat t a
h=input (passoh) ;
Tfi n=input (tempofinalediosservazione) ;
n=Tfi n/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 MATLABnel Calcolo Numerico
yi (1)=y ( 1 ) ;
ycn(1)=y ( 1 ) ;
yex (1)=y ( 1 ) ;
for i =1:n
ye( i +1)= ye ( i ) h
*
ye( i ) ;
yi ( i +1)= yi ( i )/(1+h) ;
ycn( i +1)= (2h)/(2+h)
*
ycn( i ) ;
t ( i +1)=t ( i )+h;
yex ( i +1)=exp(t ( i +1) ) ;
end
plot ( t , yex , k , linewidth, 2 )
hold on %comando per s ovr as cr i ver e i gr af i c i l uno sul l al t ro
plot ( t , ye , b , linewidth , 2)
plot ( t , yi , r ,linewidth , 2)
plot ( t , ycn , g ,linewidth , 2)
legend(soluzioneesatta , Euleroesplicito , Euleroimplicito , Crank-Nicolson , )
% l a legenda , l o spessore del l e l i nee , o i l col ore possono es s er e
% messi si a direttamente dal la f i nes t r a del l a f i gura
% si a dal programma s t es s o , come in questo caso ( sol o in Octave s i
% deve operare direttamente dal programma per poter cambiare
% l e proprieta del l a f i gura ) .
hold of f
for i =1:n+1
f pri nt f ( f i d , \n%5.2f%12.6e%12.6e%12.6e%12.6e , t ( i ) , yex ( i ) , . . .
ye( i ) , yi ( i ) , ycn( i ) ) ;
end
f cl ose ( f i d ) ;
Questo programma specico per lequazione test assegnata. La sua esecuzioneci permette ci comprendere
meglio il concetto di stabilit dei metodi studiati per la soluzione di equazioni differenziali ordinarie.
21
A
P
P
E
N
D
I
C
E
II
TABELLE E GRAFICI CON IL FOGLIO ELETTRONICO
Io dico di aver capito unequazione
quando sono in grado di predire le
propriet delle sue soluzioni senza
effettivamente risolverla.
Paul Adrien Maurice Dirac
II.1 Il foglio elettronico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
II.2 Inserire funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
II.3 Formule ricorsive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
II.4 Fare graci nel foglio elettronico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
II.4.1 Graci multicolonna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
II.5 Inserire dati da les . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
II.1 Il foglio elettronico
Il foglio elettronico pu essere usato nellambito del Calcolo Numerico per implementare ed eseguire
semplici algoritmi ricorsivi. Inoltre pu essere utilizzato per importare dati e per fare graci. Nel seguito,
daremo alcune indicazioni su come usare il foglio elettronico, in particolare la versione in lingua inglese di
OpenOfce 2.4. Osserviamo subito che nella versione inglese i numeri decimali vanno scritti facendo uso del
punto . 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 in
grado di usare correttamente il foglio elettronico.
II.2 Inserire funzioni
Un foglio elettronico si presenta come una tabella di cellette, ognuna delle quale viene individuata dal
numero che contraddistingue la corrispondente riga e dalla lettera che indica la corrispondente colonna. Ad
esempio, la cella C7 si trova sulla colonna C e sulla riga 7.
1
Se vogliamo usare la versione italiana di OpenOfce, si pu scegliere di scrivere i numeri decimali usando il punto . anzich la
virgola , andando, mediante il Menu, su Strumenti > Opzioni > Impostazioni della Lingua > Lingue e scegliere come Lingua
Locale (nella seconda riga a partire dallalto) quella Italiana (Svizzera) o unaltra lingua che permette di ottenere come separatore delle
cifre decimali il punto.
23
II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICO
Figura II.1: Si vuole lavorare sulla cella C7. La lettera C e il numero 7 che individuano la colonna C e la riga
7 sono evidenziate rispetto alle altre colonne e righe. La cella C7 ha il bordo pi scuro rispetto alle altre
celle. Sono state cerchiate in rosso le due righe chiamate Name Box (Casella del Nome) e Input Line (Riga di
digitazione).
Quando, con il mouse, ci spostiamo su una cella e clicchiamo il tasto sinistro del mouse, allora il contor-
no della cella diventa di colore nero grassetto: vuol dire che possiamo lavorare su quella cella (si veda la
FiguraII.1). Inoltre, sopra la tabella delle celle, sulla sinistra, viene visualizzato nella Name Box (nella Casella
del 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 un
numero, la cella pu essere considerata come una variabile e sar chiamata con la coppia lettera-numero che
la individua (per esempio la cella C7).
Per scrivere un numero o applicare una formula numerica, una strada da seguire la seguente:
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 Ofce quella
italiana). Vediamo che quello che scriviamo sulla cella compare anche nella riga di Input Line (o riga
per immettere i comandi, Riga di digitazione) che si trova sopra la tabella delle celle. Nel momento in
cui scriviamo =, accanto a quella riga compare un simbolo a forma di x dal colore rosso (al posto del
simbolo di sommatoria che cera prima) e il simbolo di accettazione in verde (vedasi le immagini in
Figura II.2 e II.3 e le si confronti con la FiguraII.1).
Se invece di un numero vogliamo applicare una formula numerica, possiamo o scrivere direttamente il
valore della funzione (per esempio cos(0.1) + 0.3 ) oppure possiamo avvalerci dellaiuto delle funzioni
predenite che possiamo utilizzare nel foglio elettronico. Dal menu del foglio elettronico, cliccando
su Insert (Inserisci) troviamo le due voci Function. . . (Funzione) e Function list (Lista di funzioni). Di
qui possiamo vedere quali sono le funzioni che possiamo utilizzare. Ricordiamo che nella versione
italiana, la funzione valore assoluto si chiama ASS (ABS in quella inglese), la funzione seno si chiama
SEN (SIN in quella inglese). Nel momento in cui iniziamo a digitare il nome di una funzione, molto
probabilmente ci verr gi data indicazione sulla funzione che inizia in quel modo, se labbiamo gi
utilizzata precedentemente. Inoltre, nel Name Box, dove prima era individuata la cella su cui stavamo
lavorando, vengono visualizzate le funzioni pi recenti che abbiamo utilizzato (si vedano le Figure II.4
e II.5).
24
II.2. Inserire funzioni
Figura 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 ELETTRONICO
Figura II.4: Inseriamo il valore cos(0.1) nella cella C7 partendo dal menu Insert (Inserisci) e Function
(Funzione).
26
II.2. Inserire funzioni
Figura II.5: Inseriamo il valore cos(0.1) nella cella C7. Nella gura in alto si vede lultimo passaggio di cosa
accade dopo aver inserito la funzione da menu. Nella gura in basso si vede cosa succede quando si scrive
direttamente la formula.
27
II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICO
Figura II.6: Inseriamo in C2 il valore cos(B2).
II.3 Formule ricorsive
Supponiamo ora di voler implementare lalgoritmo dello schema di punto sso, applicato alla funzione
g(x) =cos(x).
Nella colonna A scriveremo le iterazioni k che facciamo nellimplementare lo schema. Per implementare
la formula x
k
= g(x
k1
) useremo le colonne B e C: in B metteremo i valori delle approssimazioni x
k
, in C
scriveremo il valore g(x
k
).
Nella riga 1 delle colonne A, B e C, per ricordare ci che stiamo facendo, scriviamo semplicemente k, xk e
g(xk), rispettivamente.
Al primo passo, nella cella A2 diamo il valore 0 per indicare literazione k =0, a B2 assegniamo il valore ini-
ziale per x
0
, per esempio 0.0 e inC2 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). Possiamo
scrivere a mano cos(B2) oppure, inserendo la funzione cos() e cliccando con il mouse sulla variabile-cella
in cui valutare la funzione (i cui contorni diventeranno di colore rosso), automaticamente viene inserito il
nome della cella allinterno delle parentesi (in questo caso la cella B2). Dopo aver schiacciato il tasto di invio
comparir 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 modo
da ottenere 1 (vedremo perch conviene applicare questa semplice formula). La cella B3 ha come signicato
x
1
= g(x
0
)= cos(B2)=C2, il valore che si trova nella cella C2. Nella cella C3 andremo a valutare cos(B3), in
modo da utilizzarlo nella cella B4 al passo successivo.
Siamo ora in grado di scrivere queste formule in maniera ricorsiva effettuando una sola operazione di
copia-incolla o di trascinamento. . .
Difatti, ora sulla riga 4 noi dobbiamo:
in A4, incrementare il valore delliterazione che viene effettuata (la cella A4 deve essere uguale ad A3
+1);
in B4, aggiornare la variabile x
k
mettendo nella cella B4 il valore che si trova nella cella C3;
in C4, aggiornare la variabile g(x
k
) calcolando cos(B4).
28
II.3. Formule ricorsive
Figura II.7: Operazione di copia-incolla per applicare le formule ricorsive dalla riga 3 alla riga 4. Nella gura
in alto, abbiamo annerito le tre cellette della riga 3. Nella gura in basso, dopo aver fatto Copy delle tre
cellette della riga 3, anneriamo le tre cellette della riga 4 su cui incolleremo le formule ricorsive.
29
II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICO
Figura II.8: Risultato delloperazione di copia e incolla dalle cellette della riga 3 alle cellette della riga 4.
Questa operazione andr ripetuta no a quando nonci accorgiamo di essere arrivati a convergenza - vedremo
poi come.
Per aggiornare la riga 4 basta semplicemente annerire con il mouse le cellette A3-B3-C3 (dove ci sono
delle formule che si riferiscono alla riga precedente), spostandoci con il mouse e cliccando contemporanea-
mente con il tasto sinistro del mouse stesso. Clicchiamo quindi con il tasto destro del mouse e si aprir una
nestra di comandi: in particolare, clicchiamo alla voce Copy (Copia) e poi con il mouse anneriamo (con la
stessa tecnica descritta prima) le tre cellette successive.
Clicchiamo di nuovo il tasto destro del mouse e facciamo Paste (Incolla). Vedremo che le cellette ora sono
aggiornate e con le stesse formule che avremmo scritto a mano celletta per celletta (in A4 troviamo la formula
A3+1, in B4 troviamo C3, in C4 troviamo cos(B4) ). Si vedano le Figure II.7 e II.8. Se anzich annerire solo
le cellette della riga successiva, annerrissimo le cellette di molte pi righe, lalgoritmo verr applicato in
successione (talmente rapida che ci sembra istantanea) per molti pi passi (tanti quante sono le righe su cui
abbiamo applicato la formula ricorsiva mediante loperazione di copia e incolla). Si veda la Figura II.9.
Loperazione di copia e incolla si pu fare anche in unaltra maniera mediante loperazione di trascina-
mento del mouse. Una volta che abbiamo annerito le cellette in cui si trovano le formule ricorsive da ap-
plicare sulle righe successive, osserviamo che langolo in basso a destra della cornice nera che si venuta a
creare ha un bordino pi spesso. Ci avviciniamo con il tasto sinistro del mouse su quel bordino e poi tra-
sciniamo il mouse verso il basso. Vediamo che, via via che andiamo verso il basso, i bordi delle cellette su
cui vogliamo applicare le formule ricorsive diventano di colore rosso. Una volta che lasciamo il tasto sini-
stro del mouse, le formule vengono applicate e troviamo i valori numerici nelle cellette. Notiamo che nella
versione 2.3 di OpenOfce, una volta che lasciamo il tasto sinistro del mouse, per completare loperazione di
trascinamento dobbiamo cliccare su Formule nella nestra che automaticamente viene aperta. Dopo aver
completato questa operazione, si conclude correttamente loperazione di trascinamento. Osserviamo che ci
sono al pi due cifre decimali nella rappresentazione dei numeri. Per visualizzare meglio i numeri, conviene
cambiare formato: anneriamo le cellette delle colonne B e C, clicchiamo il tasto destro del mouse e, sulla
nestra che si apre, andiamo su Format Cells (Formatta Celle). Si apre una nuova nestra da cui clicchiamo
su Numbers (Numeri) e scegliamo la categoria del formato scientico. Qui possiamo denire manualmente
30
II.4. Fare graci nel foglio elettronico
Figura II.9: Risultato delloperazione 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 itera-
zioni allalgoritmo, mediante unoperazione di copia e incolla o di trascinamento, oltre alle formule anche il
formato viene incollato/trascinato nelle celle successive. Per capire quando arrestare lalgoritmo, utilizziamo
il test di arresto sugli scarti. Sulla colonna D andremo a scrivere il valore assoluto della differenza tra due
approssimazioni 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 ve-
da la Figura II.11). In base alla tolleranza pressata, quando lo scarto diverr minore della tolleranza, allora
arresteremo lalgoritmo (e quindi ci fermeremo nelloperazione di copia e incolla o di trascinamento delle
formule da una cella alla successiva).
II.4 Fare graci nel foglio elettronico
Una volta terminata limplementazione del metodo di punto sso, possiamo pensare di fare un graco
semilogaritmico degli scarti in funzione delle iterazioni.
Dobbiamo quindi vedere come fare nel foglio elettronico un graco in cui sullasse delle ascisse mettiamo
i valori delle iterazioni e sullasse delle ordinate inseriamo i valori assoluti degli scarti. Inoltre, dobbiamo
rendere il graco semilogaritmico per studiare il prolo di convergenza del metodo.
Incominciamo annerendo solo la colonna che contiene le iterazioni dal valore 1 no alla ne delle
iterazioni 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 visua-
lizzati i simboli ###. Per avere una corretta visualizzazione dei numeri, si dovr allargare la colonna corrispondente in cui si trovano le
celle per le quali non si vede il formato corretto. Cliccando con il tasto sinistro del mouse sulla cella che porta la lettera della colonna che
desideriamo allargare, vedremo che tutte le celle della colonna selezionata si anneriscono. Ci si sposta poi, con il mouse, verso il bordo
destro della cella (per esempio ci troviamo sulla cella della colonna C al contorno con la cella della colonna D) e vedremo comparire una
doppia freccia, grazie alla quale si potr allargare tutta lampiezza della colonna verso destra. Allargheremo la colonna no a quando
tutte le celle saranno visualizzate correttamente nel loro formato.
31
II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICO
Figura II.10: Finestra per modicare il formato numerico dei risultati. Viene scelto un formato scientico
denito dallutente.
Figura II.11: Schema del punto sso, in cui stata aggiunta, nella colonna D, il valore assoluto dello scarto
tra due approssimazioni successive. Si noti che abbiamo scelto un formato numerico diverso per gli scarti
rispetto a quello usato per xk e cos(xk).
32
II.4. Fare graci nel foglio elettronico
Figura II.12: Selezione delle colonne per fare il graco.
Dobbiamo poi passare alla colonna degli scarti, dal valore ottenuto alliterazione 1 no al valore ottenuto
allultima iterazione. Per non perdere traccia della colonna delle iterazioni, prima di iniziare a premere con
il tasto sinistro del mouse sulla colonna degli scarti, dobbiamo schiacciare anche il tasto Ctrl della tastiera del
computer. Solo dopo andiamo ad annerire la colonna degli scarti. In questo modo lasciamo nera anche la
colonna 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 su
Chart (Diagramma).
Si apre una nestra che ci permette la scelta del graco. Noi sceglieremo il graco XY (Scatter) (nella
versione italiana XY (Dispersione) ) con solo linee - Lines Only (vedasi Figura II.13). Procedendo (con Next -
Avanti), si vede che lintervallo dei punti su cui fare il graco stato gi scelto e compare nella riga relativa
al 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 le
ordinate i valori presi dalla colonna D (vedremo che poi uscir il nome Column D nella legenda della gura e
vedremo come dare un nome pi signicativo) (si veda la Figura II.14). Andando ancora avanti, nella Chart
Elements (Elementi del diagramma), si pu decidere cosa scrivere come titolo, sottotitolo, etichette sugli assi
x e y. Nella Figura II.15 abbiamo dato titolo, sottotitolo. . . A questo punto si clicca su Finish (Fine) e sul foglio
elettronico compare il nostro graco (che non ancora semilogaritmico), mostrato nella Figura II.16.
Per fare modiche al graco, bisogna cliccare una volta con il tasto sinistro del mouse posizionato sul
graco, in modo da vedere in alto a sinistra unicona con il simbolo dellncora. Ci si posiziona con il mouse
allinterno del graco e si clicca una volta con il tasto destro. Compare una nestra e qui si clicca la voce Edit
(Edita). Ora possibile cambiare il tipo di assi o le linee del graco, i colori, la legenda. . . .
Ad esempio, andando con il mouse sullasse delle Y e cliccando due volte con il tasto sinistro del mouse,
si apre una nestra da cui poter cambiare le linee, i colori, i caratteri, ma soprattutto la scala del graco.
Da Scale (Scala) infatti possibile scegliere la scala logaritmica come si vede nella Figura II.17. Una volta
cliccato su OK, si torna al graco che non pi quello di prima ma in scala semilogaritmica (si veda la Fi-
33
II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICO
Figura II.13: Finestra per la scelta del graco
Figura II.14: Finestra del Data Series
Figura II.15: Titolo, sottotitolo, etichette.
34
II.4. Fare graci nel foglio elettronico
Figura II.16: Graco
Figura II.17: Scelta della scala
gura II.18). Possiamo fare altre modiche (per esempio cliccando sulla curva del graco (Data Series Column
D), possiamo cambiare lo spessore della curva). Inoltre, possiamo cambiare i caratteri usati per il titolo, i
colori dello sfondo. E cos via.
Quello che ci interessa ora come cambiare la legenda.
Clicchiamo due volte con il tasto sinistro del mouse sul graco. Poi clicchiamo con il tasto destro: si apre
una nestra convarie opzioni di scelta tra cui Data Ranges. Clicchiamo suData Ranges e si aprir una nestra,
quella che vediamo nella Figura II.19. Per cambiare la scritta Column D, dobbiamo inserire nella casella
Range for Name (Area per Nome) il nome di una cella del foglio elettronico in cui abbiamo scritto un nome di
legenda che riteniamo pi appropriato (per esempio, nella cella E1 abbiamo scritto punto sso). Cliccando
sullicona che si trova a destra della nestra del Range for Name, possiamo poi direttamente cliccare sulla
cella E1 in modo da inserire automaticamente il nome della cella sulla casella Range for Name (il risultato di
questa operazione mostrata nella Figura II.20. Vediamo che non compare pi il nome Column D ma punto
sso sia su questa nestra sia, dopo aver dato lOK, sul graco (vedasi la Figura II.21).
35
II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICO
Figura II.18: Graco semilogaritmico
Figura II.19: Finestra del Data Ranges
II.4.1 Graci multicolonna
Osserviamo che la procedura eseguita per fare il graco semilogaritmico appena descritto pu essere ri-
petuta in maniera analoga per fare graci multicolonna (per esempio, sullasse delle x riportiamo le iterate,
mentre sullasse delle ordinate riportiamo i valori assoluti degli scarti relativi ai metodi di Newton-Raphson,
Regula Falsi, tangente ssa, secante ssa. . . ): una volta che abbiamo inserito i dati relativi alle ascisse e alle
ordinate della prima serie di dati (per esempio quelli del metodo di Newton-Raphson), e mentre stiamo anco-
ra lavorando sulla nestra che ci permette di costruire il graco, dopo la scelta del tipo di graco (Chart Type)
e Data Range, al passo del Data Series possiamo aggiungere (Add) altre serie di dati (per esempio iterazioni e
scarti del metodo della Regula Falsi) per fare un graco multicolonna. Si vedano le Figure II.22 e II.23.
36
II.4. Fare graci nel foglio elettronico
Figura II.20: Finestra del Data Ranges dopo aver operato la modica
Figura II.21: Graco nale semilogaritmico
37
II. TABELLE E GRAFICI CON IL FOGLIO ELETTRONICO
Figura II.22: Dopo aver schiacciato sul tasto Add (Aggiungi), per aggiungere altri dati nel graco, bisogna
selezionare i nuovi dati.
Figura II.23: Dopo aver selezionato le cellette opportune dei valori delle ascisse da aggiungere al graco, i
valori vengono visualizzati sulla nestra. Analogamente si procede per lasse y.
II.5 Inserire dati da les
Spesso il foglio elettronico viene utilizzato per fare graci importando dati numerici da les esterni
per esempio les di tipo testo generati dallesecuzione di programmi scritti in FORTRAN o altri linguaggi di
programmazione.
Per inserire correttamente i dati su pi colonne, si pu seguire questo percorso: dal Menu principale del
foglio elettronico si va su Insert (Inserisci) > Sheet from le (Foglio da le). A questo punto si apre una
nestra da cui possibile selezionare il percorso in cui si trova il le da aprire. Una volta che importiamo
il le, si apre unaltra nestra (la nestra di Text import (importa testo)) in cui dobbiamo selezionare alcuni
parametri 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 graci).
Le opzioni che dobbiamo selezionare sono, oltre a Tab, che gi troviamo indicato, anche Merge delimiters
e Space (si veda la Figura II.24). Una volta dato lOK, si apre unaltra nestra (Insert Test) in cui digitiamo di
nuovo OK. Troviamo i dati del le messi incolonna come erano nel le di partenza. Il formato numerico non
molto carino (solo due cifre decimali, anche se andando a vedere celletta per celletta possiamo osservare che
i valori sono memorizzati cos come erano nel le originario), ma selezionando le celle possiamo cambiare
38
II.5. Inserire dati da les
Figura II.24: Importare dati da un le esterno.
il formato in modo da visualizzarlo correttamente. A questo punto, abbiamo i nostri dati in tabella sul foglio
elettronico e possiamo fare i graci o altre operazioni tramite il foglio elettronico.
39