Corso di Matematica per la Chimica

Corso di Matematica per la Chimica
Dott.ssa Maria Carmela De Bonis
Dipartimento di Matematica, Informatica e Economia
Università della Basilicata
a.a. 2014-15
Presentazione del Matlab
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Riferimenti bibliografici
P. Causin, S. Micheletti, R. Sacco
Introduzione all’uso di Matlab per il Calcolo Scientifico.
(2000) disponibile sul sito www1.mate.polimi.it/CN.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Per iniziare...
MATLAB (Matrix Laboratory) è un ambiente di calcolo sviluppato a
partire dagli anni 70.
La struttura di base è la matrice, per la quale sono già predefinite
numerosi tipi elementari (matrice identità, matrice nulla, matrice
unità...), funzioni algebriche e di manipolazione (somma, prodotto,
calcolo del determinante).
Per lanciare MATLAB da ambiente Windows basta cliccare con il
mouse sull’icona corrispondente.
Per entrare in confidenza con l’ambiente di lavoro è utile:
lanciare il comando demo che illustra le potenzialità del software
attraverso significativi esempi numerici e casi test;
fare costante riferimento all’uso dell’help,
ad esempio help sqrt (calcolo della radice quadrata di un
numero).
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Prime istruzioni in MATLAB
Il modo più immediato per interagire con MATLAB: è scrivere
l’istruzione dal prompt seguita da ←Esempio: assegnazione del valore 3 alla variabile a:
>> a= 3
a=
3
Possiamo usare MATLAB come una semplice calcolatrice:
>> b= a * 2
b=
6
o, come vedremo, come un vero e proprio ambiente di
programmazione.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Invece di digitare tutte i comandi al prompt, possiamo memorizzare
una serie di istruzioni successive (script) sotto formato di file di testo,
detto M-file e caratterizzato da estensione .m.
A questo scopo possiamo utilizzare l’Editor di testo integrato.
Per uscire da MATLAB: comandi quit o exit.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Alcuni trucchi per risparmiare tempo
1
Durante la sessione di lavoro è possibile richiamare i comandi
precedentemente digitati utilizzando i tasti ←, →, ↑, ↓ ;
2
immettendo i primi caratteri di un’istruzione già digitata e poi
premendo il tasto ↑ , viene completata la riga con l’ultima
istruzione che inizia con quegli stessi caratteri;
3
i tasti ← e → permettono di riposizionare sulla linea di comando
il cursore e di modificare il testo scritto;
4
con il tasto sinistro del mouse sulla finestra di calcolo si possono
selezionare parti di testo che è poi possibile copiare, tagliare ed
incollare sulla linea di comando.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Qualche informazione ulteriore sulle variabili in
MATLAB
In MATLAB tutte le variabili sono in doppia precisione, ovvero sono
rappresentate internamente con 64 bit, cui corrispondono 16 cifre
significative decimali.
Quando assegnamo un valore ad una variabile, MATLAB risponde
con un’eco:
>> s = 10
s =
10
Per sopprimere l’eco, usiamo la sintassi:
>> s=10;
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Quando non assegnamo il valore di un’operazione ad una variabile,
MATLAB assegna tale valore alla variabile ans (che viene cosı̀ ogni
volta sovrascritta):
>> 3∧2
ans =
9
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Un’osservazione sulla precisione di calcolo
Tutti i calcoli vengono effettuati in doppia precisione, mentre diversa
è la visualizzazione delle variabili che viene determinata con il
comando format:
format short: virgola fissa con 5 cifre (è il formato di
default):
>> pi
ans =
3.1416
format long: virgola fissa con 15 cifre:
>> pi
ans =
3.14159265358979
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
format short e: virgola mobile con 5 cifre:
>> pi
ans =
3.1416e+00
format long e: virgola mobile con 15 cifre:
>> pi
ans =
3.141592653589793e+00
Noi useremo sempre il formato format long e perché è quello
più vicino alla rappresentazione normalizzata del numero.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Definizione di vettori
Modalità più semplice: elencare le singole componenti del vettore fra
una coppia di parentesi quadre, si ottiene cosı̀ un vettore riga:
>> b = [1 2 3 4]
b =
1 2 3 4
Lo stesso risultato si ottiene separando le componenti con il carattere ,
Separando invece le componenti con il carattere ; si ottiene un vettore
colonna:
>> b = [1; 2; 3; 4]
b =
1
2
3
4
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
In alcuni casi possiamo essere più rapidi, usando la sintassi
inizio: incremento: fine
Il valore di default per incremento è 1.
>> b = [1:10]
b =
1
2
3
4
5
6
7
>> b = [1:2:10]
b =
1
3
5
7
9
>> b = [10:-3:0]
b =
10
7
4
1
>> b = [1:1.5:10]
b =
1.0000
2.5000
4.0000
8.5000
10.0000
8
9
5.5000
10
7.0000
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Definizione di matrici
La costruzione delle matrici segue una sintassi simile al caso dei
vettori:
>> M = [1 2; 3 4]
M =
1
2
3
4
definisce una matrice quadrata di ordine 2.
Osserviamo che:
1
una matrice non è altro che una collezione di vettori riga ovvero
colonna;
2
in tutte le righe, il numero di componenti deve essere lo stesso!
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Manipolazione di vettori e matrici
Definiamo:
>> b = [1:10]
1
2
3
4
5
Per accedere agli elementi di b:
>> a=b(5)
a =
5
>> c=b(1:3)
c =
1
2
3
>> b([1:2,6,9:10])
ans =
1
2
6
9
6
7
8
9
10
10
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Transposizione di un vettore:
>> bt = b’
bt=
1
2
3
4
5
6
7
8
9
10
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Definiamo la matrice:
>> M = [1:5; 6:10; 11:15; 16:20]
M =
1
2
3
4
5
6
7
8
9 10
11 12 13 14 15
16 17 18 19 20
Per accedere agli elementi di M:
>> M(2,3)
ans =
8
Estrazione di una riga della matrice:
>> M(1,:)
ans =
1
2
3
4
5
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Estrazione di una colonna della matrice:
>> M(:,3)
ans =
3
8
13
18
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Estrazione di più righe e colonne:
>> M(2:4,1:2:5)
ans =
6
8 10
11 13 15
16 18 20
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Operazioni fra vettori
In MATLAB sono definite le operazioni di somma + e sottrazione -.
tra vettori. Tali operazioni agiscono elemento per elemento:
>> b =[1:4];
>> c = [2:5];
>> b+c
ans =
3
5
7
>> c - b
ans =
1
1
1
9
1
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
>> b = [1:4];
>> c = [2:5];
>> b*c’
ans =
40
>> b’*c
ans =
2 3 4 5
4 6 8 10
6 9 12 15
8 12 16 20
I vettori devono avere dimensioni compatibili!
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Se le dimensioni non sono compatibili:
>> a = 1:3;
>> c= [1 2];
>> a+c
??? Error using ==> plus
Matrix dimensions must agree.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Uso della sintassi “.”
MATLAB estende le proprietà delle operazioni tipo somma e
sottrazione anche ad altre operazioni, fra cui moltiplicazione e
elevamento a potenza.
Il vincolo è che i due vettori operandi abbiano lo stesso numero di
componenti riga e colonna.
>> a = 1:3;
>> b = a;
>> a.*b
ans =
1
4
9
>> a.∧b
ans =
1
4
27
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Operazioni fra matrici
Somma e sottrazione di matrici:
>> A = [ 1 2 3; 4
>> B = [ 1 1 1; 2
>> A+B
ans =
2 3 4
6 7 8
10 11 12
>> A-B
ans =
0 1 2
2 3 4
4 5 6
5
2
6; 7
2; 3
8
3
9];
3];
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Prodotto tra matrici (prodotto righe per colonne):
>> A = [
>> B = [
>> A*B
ans =
14
32
50
1
1
2
1
3; 4
1; 2
5
2
6; 7
2; 3
8
3
9];
3];
14 14
32 32
50 50
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Funzioni intrinseche definite per vettori e matrici
Le principali functions built-in che permettono di manipolare o agire
su vettori e matrici sono:
eye(n) costruisce la matrice identità di ordine n, cioè la
matrice che ha elementi 1 sulla diagonale principale e 0 altrove;
ones(m,n) costruisce una matrice o un vettore di dimensione
m × n i cui elementi sono tutti 1.
zeros(m,n) costruisce una matrice o un vettore di dimensione
m × n i cui elementi sono tutti 0.
size(A) fornisce le dimensioni m e n della matrice A
tril(A) (triu(A)) costruisce la matrice triangolare inferiore
(superiore) estratta da A:
det(A) restituisce il determinante della matrice A
inv(A) restituisce l’inversa della matrice A.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Grafici in due dimensioni
Per tracciare nel piano cartesiano xy il grafico di una funzione f (x) in
un intervallo [a, b] il MATLAB mette a disposizione le functions
plot e fplot.
Esempio Disegnare il grafico della funzione
f (x) = cos(x)
nell’intervallo [0, 2π].
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Utilizzando il comando plot
>> x=[0:pi/100:2*pi];
>> y=cos(x);
>> plot(x,y)
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
0
1
2
3
4
5
6
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Utilizzando il comando plot
>> x=[0:pi/100:2*pi];
>> y=cos(x);
>> plot(x,y)
>> grid
Il comando grid traccia sul grafico una griglia di riferimento.
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
0
1
2
3
4
5
6
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Utilizzando il comando fplot
>> fplot(’cos(x)’, [0, 2*pi])
>> grid
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
0
1
2
3
4
5
6
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Per rappresentare la curva per punti discreti procediamo nel modo
seguente:
>> x=[0:0.1:2*pi];
>> y=cos(x);
>> plot(x,y,’*’)
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
0
1
2
3
4
5
6
7
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
È possibile rappresentare nello stesso grafico più di una curva che
possiamo contrassegnare con colori differenti:
>>
>>
>>
>>
>>
>>
x=[0:pi/100:2*pi];
y1=cos(x);
y2=cos(2*x);
y3=cos(3*x);
plot(x,y1,’b’,x,y2,’y’,x,y3,’r’)
grid
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
0
1
2
3
4
5
6
7
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Rappresentazione di superfici in tre dimensioni
Rappresentiamo il grafico della funzione di due variabili z = f (x, y)
con (x, y) ∈ [−2, 2] × [−2, 2].
A partire dai vettori
>> x=[-2:0.2:2];
>> y=[-2:0.2:2];
generiamo con la function meshgrid una griglia di base costituita
dalle matrici X e Y che individuano tutti i nodi di coordinate xi , yj
>> [X,Y]=meshgrid(x,y);
Usiamo la function surf per disegnare la funzione z = yx2 e−(x
utilizzando la griglia di base generata con le matrici X e Y:
2 +y2 )
>> Z = Y. ∗ X. ∧ 2. ∗ exp(−(X. ∧ 2 + Y. ∧ 2));
>> surf(X,Y,Z);
>> colormap(hsv);
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
0.2
0.1
0
−0.1
−0.2
2
1
2
1
0
0
−1
−1
−2
−2
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Funzioni simboliche
Talvolta è utile definire una funzione in modo simbolico, ovvero
definire semplicemente l’espressione matematica della funzione senza
che ad essa vengano associati dei valori numerici.
In questo caso si dice la funzione è definita come stringa e la sua
espressione deve essere racchiusa fra apici.
Si utilizza la function eval per valutare la funzione simbolica nelle
ascisse specificate da un vettore x.
Esempio
>> fun=’sin(x).*cos(x)’;
>> x=[-4:0.01:4];
>> y=eval(fun);
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Il ciclo for
L’istruzione for ripete per un determinato numero di volte un blocco
di istruzioni.
La forma generale dell’istruzione for è la seguente:
for indice=inizio:incremento:fine
blocco istruzioni
end
for indice=inizio:incremento:fine
blocco istruzioni
end
Il valore di default per incremento è 1.
for indice=inizio:incremento:fine
blocco istruzioni
end
Il valore di default per incremento è 1.
Le parole chiave for e end obbligatoriamente iniziano e terminano
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
È possibile annidare più cicli for.
Ad esempio per riprodurre il comportamento della built-in function
hilb(n) possiamo scrivere:
for i=1:n
for j=1:n
a(i,j)=1/(i+j-1);
end
end
È sempre utile indentare opportunamente le righe di codice per
rendere il listato più facilmente comprensibile.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Il ciclo while
L’istruzione while esegue un blocco di istruzioni un numero
indefinito di volte fino al persistere di una certa condizione.
Non è quindi noto a priori il numero di ripetizioni del blocco di
istruzioni.
La sintassi generale dell’istruzione while è:
while (condizione)
blocco istruzioni
end La sintassi generale è:
while (condizione)
blocco istruzioni
end
Le parole chiave while e end obbligatoriamente iniziano e
terminano il ciclo.
La sintassi generale è:
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
Istruzione if
L’istruzione if controlla l’esecuzione di un determinato blocco di
codice a seconda del valore (vero o falso) assunto da una certa
espressione logica.
La forma generale dell’istruzione if è la seguente:
if (condizione1)
blocco1
elseif (condizione2)
blocco2
else
blocco3
end
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
M-files
I files che contengono codice MATLAB sono detti M-files (estensione
.m).
Essi possono essere richiamati dal prompt digitandone semplicemente
il nome.
Gli M-files si dividono in due categorie:
M-files di tipo scripts: si tratta semplicemente di files che
raccolgono in successione istruzioni come date dalla linea di
comando;
M-files di tipo functions:
che accettano argomenti in ingresso e possono restituire
argomenti in uscita;
possiedono variabili interne che hanno visibilità locale.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15
L’intestazione di ciascuna function, che deve comparire nella prima
riga del file corrispondente, ha la struttura:
function [out1,out2,...,outn]=nomefunction(in1,
in2, ..., inn)
function [out1,out2,...,outn]=nomefunction(in1,
in2, ..., inn)
Le variabili out1,out2,...,outn sono i parametri in uscita.
function [out1,out2,...,outn]=nomefunction(in1,
in2, ..., inn)
Le variabili out1,out2,...,outn sono i parametri in uscita.
Le variabili in1, in2, ..., inn sono i parametri in ingresso.
function [out1,out2,...,outn]=nomefunction(in1,
in2, ..., inn)
Le variabili out1,out2,...,outn sono i parametri in uscita.
Le variabili in1, in2, ..., inn sono i parametri in ingresso.
Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica Corso
e Economia
di Matematica
Università
perdella
la Chimica
Basilicata a.a. 2014-15