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 102  0.1

3
2
 2.0 10   102
 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