variabili in matlab
Transcript
variabili in matlab
Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Lezione 2 Variabili in Matlab Scalari e Stringhe Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 2 Tipi di variabili in Matlab In matlab è possibile creare delle variabili i cui valori possono essere da utilizzare e aggiornati durante i calcoli sia in modalità console che modalità interprete Nell’ambiente Matlab esistono solo due tipi di variabili: Variabili numeriche: possono essere scalari, vettori, o matrici di numeri interi, reali, o complessi. Variabili stringa: sono sequenze di caratteri alfa numerici (es. ‘Hello world’) Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 3 Creazione di Variabili Un variabile, sia numerica che stringa viene creata automaticamente attraverso un’istruzione di assegnazione, ossia una linea di comando in cui a sinistra del segno uguale sia riportato il nome di una variabile e sulla destra il suo valore: Nome_variabile = valore Istruzione di assegnazione Il nome di una variabile può essere una qualsiasi sequenza alfanumerica (di lettere o numeri) Il valore di una variabile può essere esplicito o il risultato del un calcolo di un espressione matematica Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 4 Creazione di Variabili Creare una variabile significa concretamente richiedere all’ambiente Matlab di allocare una certa quantità di memoria nella RAM del computer in cui scrivere il suo valore. Il nome della variabile non è altro che un alias, ossia un nome alternativo, semplice da ricordare, dell’indirizzo di memoria, ossia dell’esatta posizione in memoria in cui è stato scritto il valore della variabile. Il modo più semplice per definire una variabile in Matlab è attraverso un’istruzione di assegnazione: nome variabile uguale assegnazione s_x = ‘Ciao’ valore variabile Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli s_x = ‘Ciao’ Indirizzi di memoria Indirizzo corrispondente al nome della variabile s_x Spazio allocato da Matlab per il valore di s_x 5 creazione della variabile stringa s_x il cui nome è l’alias per l’indirizzo esadecimale 003228D0 Ram del computer Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 6 Regole Nome Variabile Il nome di una variabile può essere una qualsiasi sequenza alfanumerica (di lettere o numeri) che rispetti le seguenti regole: • la lunghezza massima è di 19 caratteri; • il primo carattere non deve essere un numero; • non deve contenere spazi; • non deve contenere segni di interpunzione (; , . ! ?) o operatori aritmetici (* + : / - ) • può contenere il segno “_” Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Utilizzo Variabili Una volta creata ad una variabile può essere assegnato un nuovo valore ed utilizzata per creare o calcolare il valore di altre variabili ! 7 >> x = 3 x = 3 >> y = 4 y = 4 >> x = 5*y x = 20 >> La variabile y è stata utilizzata per ricalcolare il valore della variabile x Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 8 Utilizzo Variabili Una variabile non può essere utilizzata se prima non è stata creata, ossia non può trovarsi sulla destra di un’istruzione di assegnazione prima della sua creazione ! >> x = 3 x = 3 >> y = 4 y = 4 >> x = 5*z ??? Undefined variable 'z'. function La variabile z è stata utilizzata senza essere stata prima creata or Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Variabili Stringa in Matlab Creazione Operazioni Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 10 Stringhe Una variabile stringa è una sequenza alfanumerica di caratteri che vengono manipolati da Matlab come un testo e non come una variabile numerica. Stringa Valore Numerico '12.134' 12.134 In Matlab una variabile stringa è una qualsiasi sequenza di caratteri alfanumerici racchiusa fra apici ('…..') Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 11 Creazione di Stringhe Per creare una variabile stringa in MatLab è necessario semplicemente definirla, ossia porla sulla sinistra di un’equazione di assegnazione: S_x = . . . dove a destra dovrà comparire un’espressione che possa essere valutata come appunto una stringa. Esistono vari modi per definire l’espressione di destra: 1. Per valori 2. Usando la funzione di libreria sprintf NOTA BENE: Utilizzeremo la convenzione di far precedere i nomi delle variabili stringa dal prefisso “s_”. Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 12 Stringhe create per valori Per creare una stringa per valori basta porre sulla destra di un’istruzione di assegnazione la sequenza di caratteri alfanumerici delimitata da due apici: >> S_x = ‘Hello World‘ >> S_x = ‘1234‘ S_x = S_x = Hello world 1234 Per visualizzare il valore di una variabile stringa senza il nome ad essa associato si può usare il comando disp: >> S_x = ‘Hello World‘; disp (s_x) Hello world Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 13 Funzione disp La funzione disp è una funzione Matlab che prende come unico argomento una stringa di testo e ne fa la stampa a video nella finestra console aggiungendo un ritorno carrello, (ritorno a capo) Argomento di input disp(‘Hello World’) output Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 14 Esempio Script clc, disp disp disp disp disp disp disp clc clear (‘ ‘) (‘-------------------------‘) (‘Esercizio n. 2 gruppo AXX’) (‘Maria Rossi’) (‘Carlo Bianchi’) (‘-------------------------’) (‘ ‘) comando che pulisce la finestra console clear comando che pulisce la memoria ossia cancella tutte le variabili precedentemente create Realizzate il seguente Script Matlab che dovrà essere sempre utilizzato all’inizio di ogni nuovo esercizio Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 15 Funzione sprintf La funzione sprintf serve a trasformare un valore numerico in una variabile stringa secondo il formato voluto. Stringa di Variabile Stringa formato S_x = sprintf(s_Formato, val1, val2,…) Valori da trasformare La funzione sprintf quindi prende come argomenti di input una stringa di formato seguita da uno o più valori numerici e restituisce una stringa di testo: Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Funzione sprintf La stringa di formato può contenere un testo generico più il carattere specifico “%” seguito da un indicazione di formato: %f fixed point %e floating point %d interi %s una variabile stringa che indica dove il valore della variabile deve essere inserito e come deve essere rappresentato. 16 Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 17 Funzione sprintf Fra il carattere specifico “%” e l’etichetta di formato (f,e,s,d) possono essere inseriti dei valori interi costanti che servono a definire il numero di cifre con cui rappresentare il valore numerico: %N.Mf %N.Me N = numero totale cifre M = numero di cifre decimali clc, clear disp(sprintf('...>%10.5f<...', 100/3)) disp('...>..........<...') disp(' 10----5---1') disp('...>..........<...') disp(sprintf('...>%10.2e<...', 100/3)) Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Variabili Numeriche in Matlab Scalari Vettori Matrici Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 19 Variabili Numeriche in Matlab In Matlab tutte le variabili numeriche vengono trattate come matrici, e possono essere reali o complesse. Per semplicità in questa esposizione verranno considerati separatamente: •Le variabili scalari (ad un solo valore) •I vettori (riga o colonna) •Le matrici Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Scalari in Matlab Creazione di scalari Operazione fra Scalari Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 21 Creazione di Scalari Sono variabili numeriche ad un sol valore. Possono essere create attraverso una semplice istruzione di assegnazione: >> x = 5; È stata creata la variabile x a cui è stato assegnato il valore 5 >> y = 1.2e-2; È stata creata la variabile y a cui è stato assegnato il valore: 1.2·10-2 >> z = sin(0.1); È stata creata la variabile z a cui è assegnato il risultato: sin(0.1)=0.0998 Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 22 Utilizzo di Variabili Scalari Una volta che una variabile scalare sia stata creata, assegnandole un valore per la prima volta, può essere utilizzata sulla destra di un’istruzione di assegnazione all’interno di una qualsiasi espressione matematica o come argomento di funzione: >> x = pi/3; >> y = x*cos(x) y = 0.5236 È stata creata la variabile x a cui è stato assegnato il valore p/3 È stata creata la variabile y a cui è stato assegnato il valore: p*cos(p/3)/3 Quando Matlab trova il nome di una variabile sulla destra di un’assegnazione prima di eseguire il calcolo va in memoria e legge il valore attuale della variabile e lo sostituisce al nome prima del calcolo. Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli >> x = 5*7/(2*10); >> y = 5*7/2*10; >> x = 5*8; >> x = x/2; 23 Sono state create le variabili x ed y a cui è stato assegnato come valore il risultato del calcolo sulla destra del segno di uguaglianza. E’ stata creata prima la variabile x (uguale a 40) ed poi è stato utilizzato il suo valore per ridefinire un nuovo valore della x che adesso risulta 20. Si noti ancora una volta come in questo ultimo caso l’uso delle parentesi porti a due risultati differenti: x = 1.75 y = 175 Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 24 Operazioni fra Variabili Scalari Con le variabili scalari sono possibili tutte le normali operazioni aritmetiche: >> >> >> >> >> >> >> x = 7; y = 2; z1 = x + y; z2 = x – y; z3 = x * y; z4 = x / y; z5 = y^x; operatori + somma - sottrazione * prodotto / divisione ^ elevamento a potenza risultati z1 z2 z3 z4 z5 = = = = = 9 5 14 3.5 49 N.B.: Nelle espressioni fra variabili valgono le stesse regole di priorità che sono state introdotte per le costanti numeriche Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 25 Esempio di operazioni fra Variabili Uso di variabili ausiliarie sopra = 1.5e-2 + 0.1; sotto = 3.5 * (0.1+3/5); tot = 2 * (sopra/sotto + 2e-3)-1e-2 1.5 102 0.1 3 2 2.0 10 102 3.5 0.1 3 5 Ridefinizione di un’unica variabile tot = 1.5e-2 + 0.1; tot = tot / (3.5 * (0.1+3/5)); tot = 2 * (tot + 2e-3) - 1e-2 Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Esempio 2A 26 Il seguente script esegue il calcolo del peso Molecolare dell’acqua e della percentuale in peso degli atomi di H e O nella molecola clc, clear disp (‘ ‘) disp (‘-------------------------‘) disp (‘Esercizio n. 2 gruppo AXX’) disp (‘Maria Rossi’) disp (‘Carlo Bianchi’) disp (‘-------------------------’) disp (‘ ‘) %pesi Atomici paO = 15.998; paH = 1.008; %Indici Atomi nO = 1; nH = 2; pm = paO*nO + paH*nH; disp(sprintf(‘PM acqua = %6.3f’, pm)); disp(sprintf('Peso O = %5.2f %%', nO*paO/pm*1e2)); disp(sprintf('Peso H = %5.2f %%', nH*paH/pm*1e2)); Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 27 Esempio 2B Calcolare la conversione percentuale a PCl5 e la pressione parziale del PCl5 alla pressione totale di P=1. 0 atm e a 400 K per la reazione: K eq PCl3 ( g ) Cl2 (g) PCl5 ( g ) sapendo che la miscela reagente di partenza conteneva una mole di PCl3 e 2 moli di Cl2. Per questa reazione risulta: G400 855 cal / mole Si assuma che la miscela gassosa si comporti idealmente. Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 28 Svolgimento 1/3 Si ricavi da prima il valore della costante di equilibrio a 400 K: Keq T e GT RT dove se R= 8.314 Joule/(mol K) bisogna esprimere il G in Joule/mole moltiplicando per il fattore di conversione: 4.184 Joule/cal. Sapendo che la miscela reagente di partenza conteneva una mole di PCl3 e 2 moli di Cl2 all’equilibrio risulterà K eq PCl3 ( g ) Cl2 (g) PCl5 ( g ) 1.0 x 2.0 x x numero di moli all’equilibrio Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 29 Svolgimento 2/3 per cui le moli totali risultano: N = x + (2. 0-x) + (1. 0-x) = 3. 0 - x Le pressioni parziali dei gas all’equilibrio possono quindi essere definite in funzione della pressione totale P=1. 0 atm e delle frazioni molari all’equilibrio: pPCl3 PCl3 P 1.0 x 1.0, 3.0 x pCl2 Cl2 P 2.0 x 1.0, 3.0 x pPCl5 PCl5 P x 1.0 3.0 x per cui utilizzando l’espressione della costante di equilibrio: K eq pPCl5 pPCl3 pCl2 x P 3.0 x 1.0 x 2.0 x P P 3.0 x 3.0 x che può essere semplificata per dare: Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli 30 x 3.0 x Svolgimento K 3/3 eq 1.0 x 2.0 x P da cui si ottiene una equazione di secondo grado nella sola incognita x: 2.0 3.0x x PK x 3.0 1 PK x 2.0PK 0 1.0 x 2.0 x PKeq x 3.0 x 1 PK 2 eq 3.0 x x 2 2 eq eq eq che può essere risolta con la nota formula: x1/ 2 a 1 PK eq b b 2 4ac b 3.0 1 PK eq 2a c 2.0 PK eq Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Script Matlab 31 1/3 clc, clear disp(' ') disp('******************************') disp('* Esercizio n.2 - Gruppo XXX *') disp('******************************') disp('* Mario Rossi *') disp('* Carlo Bianchi *') disp('******************************') disp('* *') DG = -855*4.184; T = 400; R = 8.314; P = 1.0; % % % % joule/mole temp. in Kelvin joule/(mol K) P totale in atm Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Script Matlab 32 2/3 % Calcola costante di equilibrio Keq = exp(-DG/(R*T)); % c a b c Calcola coefficienti eq. II grado = P*Keq; = 1+c; = -3.0*a; = 2.0*c; % Risolvi eq. II grado D = (b^2-4*a*c)^0.5; x1 = (-b+D)/(2*a); x2 = (-b-D)/(2*a); Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli Script Matlab % % % x 33 3/3 x1 viene scartata perché darebbe un valore negativo del numero di moli di PCl3 e Cl2 all'equilibrio = x2; % Calcola numero di moli totale NTot = 3.0 - x; % Calcola la pressione parziale di PCl5 pPCl5 = x/NTot*P; % Mostra risultati disp(sprintf('1) Press. PCl5 = %6.3f atm', pPCl5)); disp(sprintf('2) %%Tras. PCl3 = %5.2f%%', x*100)); disp('******************************') Università degli Studi di Bari Laurea in Biotecnologie Laboratorio Informatico - Dott. F. Mavelli OUTPUT 34