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