Programmare in
Programmare in
Scilab: Matrici
Scilab: Matrici
Booleane – Strutture di
Booleane – Strutture di
Controllo
Controllo
Corso di Informatica
Corso di Informatica
CdL:
CdL:
Chimica
Chimica
Claudia d'Amato
Claudia d'Amato
cl audi a.damat o@di .uni ba.i t
Programmazione in Scilab
Programmazione in Scilab
Scilab dispone di un linguaggio di
programmazione semplice e completo
Differenza principale dagli altri
linguaggi
le variabili non necessitano di
dichiarazione
l'inizializzazione comprende la
Operatori di confronto e logici
Operatori di confronto e logici
Operatori di confronto
Operatori di confronto
==== uguale auguale a << minoreminore > > maggioremaggiore
<= <= minore ugualeminore uguale >=>= maggiore ugualemaggiore uguale <> o ~=<> o ~= diversodiverso
Operatori logici
& and | or ~ not
Esempi
Esempi
Eseguire i seguenti esempi
Eseguire i seguenti esempi
3 <> 2 <return>3 <> 2 <return> 3 == 3 <return>3 == 3 <return>
(2 > 1) & (3 > 5) <return>(2 > 1) & (3 > 5) <return> (2<1) & (3>5) <return>(2<1) & (3>5) <return> (2>1) | (3<4) <return>(2>1) | (3<4) <return> (2<1) | (3>5) <return>(2<1) | (3>5) <return> (2<1) | (3<5) <return>(2<1) | (3<5) <return> ~(2<1) <return>~(2<1) <return> ~(2>1) <return>~(2>1) <return> ~(2>1) | (3>5) <return>~(2>1) | (3>5) <return>
Espressioni di Confronto tra
Espressioni di Confronto tra
Matrici
Matrici
--> A = [1 2; 3 4];--> A = [1 2; 3 4]; --> B = [3 4; 0 2];--> B = [3 4; 0 2]; --> A < B--> A < B ans = ans = T T TT F F FF --> A < 3--> A < 3 ans = ans = T T TT F F FFEspressioni Logiche e Matrici
Espressioni Logiche e Matrici
Booleane
Booleane
--> a = [%t %f %t];--> a = [%t %f %t]; --> b = [%f %f %t];--> b = [%f %f %t]; --> a & b--> a & b ans = ans = F F TF F T --> a | b--> a | b ans = ans = T F TT F T --> ~a--> ~a ans = ans = F T FF T FFunzioni Booleane applicate a
Funzioni Booleane applicate a
Matrici...
Matrici...
La funzione bool2s
La funzione bool2s
Applicata a matrici booleane restituisce una Applicata a matrici booleane restituisce una
matrice dove %t → 1 e %f--> 0 matrice dove %t → 1 e %f--> 0
--> bool2s([%t %f %t])--> bool2s([%t %f %t])
ans = 1 0 1 ans = 1 0 1
Applicata a matrici “standard” restituisce una Applicata a matrici “standard” restituisce una
matrice dove tutti i valori non nulli sono matrice dove tutti i valori non nulli sono
rimpiazzati con 1 rimpiazzati con 1
...Funzioni Booleane applicate a
...Funzioni Booleane applicate a
Matrici
Matrici
La funzione find(x) dove x matrice
La funzione find(x) dove x matrice
(booleana)
(booleana)
Restituisce il vettore degli indici per cui x(i) è Restituisce il vettore degli indici per cui x(i) è
"vera". La matrice vuota è restituita se nessun "vera". La matrice vuota è restituita se nessun
valore vero è ritrovato valore vero è ritrovato
--> x = [1 3 4 2 0 1];--> x = [1 3 4 2 0 1]; --> find(x<2)--> find(x<2) ans = ans = 1 5 6 1 5 6
I cicli
I cicli
Scilab prevede il
Scilab prevede il
ciclo while
ciclo while
e il
e il
ciclo for
ciclo for
Ciclo for
Ciclo for
for indice = valore_iniziale : incremento : valore_finale,
... istruzioni ...,
end
for indice = valore_iniziale : valore_finale,
... istruzioni ...,
end
Se l'incremento non è esplicitato è pari a 1
Se l'incremento non è esplicitato è pari a 1
Quando si scrivono degli script
Quando si scrivono degli script
le istruzioni
le istruzioni
possono essere scritte una per linea
possono essere scritte una per linea
Esempi
Esempi
1)
1)
for k = 1:0.5:4, r=r+k, end <return>
for k = 1:0.5:4, r=r+k, end <return>
//err.
//err.
2)
2)
r = 1; for k = 1:0.5:4, r=r+k, end <return>
r = 1; for k = 1:0.5:4, r=r+k, end <return>
3)
3)
r = 1; for k = 1:0.5:4, r=r+k;, end <return>
r = 1; for k = 1:0.5:4, r=r+k;, end <return>
4)
4)
xs=-1.0; dx=0.25; n=10; for j=1:n,
xs=-1.0; dx=0.25; n=10; for j=1:n,
x=xs+(j-1)*dx, end <return>
x=xs+(j-1)*dx, end <return>
5)
5)
for m=1:10, a(m) = m^2, end <return>
for m=1:10, a(m) = m^2, end <return>
6)
6)
a <return>
a <return>
Perchè al punto 1) si ha errore mentre al
Perchè al punto 1) si ha errore mentre al
punto 5) non si ha errore???
Ciclo For e Vettori...
Ciclo For e Vettori...
Se il ciclo for viene usato per ciclare sulle
Se il ciclo for viene usato per ciclare sulle
componenti di un vettore la variabile
componenti di un vettore la variabile
vettore può essere usata per
vettore può essere usata per
l'inizializzazione dell'indice
l'inizializzazione dell'indice
Il ciclo for itera sulle componenti di un
Il ciclo for itera sulle componenti di un
vettore riga
vettore riga
il numero di iterazioni è governato dal
il numero di iterazioni è governato dal
numero di componenti del vettore riga
numero di componenti del vettore riga
for variabile=vettore, istruzioni, endfor variabile=vettore, istruzioni, end...Ciclo For e Vettori...
...Ciclo For e Vettori...
Esempio:
Esempio:
--> v = [1 -1 1 -1]--> v = [1 -1 1 -1]
-> y=0; for k=v, y=y+k, end-> y=0; for k=v, y=y+k, end
Il numero di iterazioni è governato dal
Il numero di iterazioni è governato dal
numero di componenti del vettore riga
numero di componenti del vettore riga
alla i-esima iterazione il valore di k è uguale
alla i-esima iterazione il valore di k è uguale
a v(i)
a v(i)
Esercizio:
Esercizio:
Realizzare un ciclo for con un
Realizzare un ciclo for con un
vettore colonna
...Ciclo For e Vettori
...Ciclo For e Vettori
Le istruzioni per il seguente for
Le istruzioni per il seguente for
--> v = [1 -1 1 -1]--> v = [1 -1 1 -1]
-> y=0; for k=v, y=y+k, end-> y=0; for k=v, y=y+k, end
potrebbero essere scritte in modo più
potrebbero essere scritte in modo più
naturale e leggibile come
naturale e leggibile come
y=0; for i=1:4, y=y+v(i), endy=0; for i=1:4, y=y+v(i), end
O meglio ancora come
O meglio ancora come
Ciclo For e Matrici
Ciclo For e Matrici
Il ciclo for può essere usato anche per
Il ciclo for può essere usato anche per
ciclare su elementi di matrici
ciclare su elementi di matrici
for variabile=matrice, istruzioni, endfor variabile=matrice, istruzioni, end
Il ciclo for itera sulle componenti della
Il ciclo for itera sulle componenti della
matrice colonna per colonna
matrice colonna per colonna
--> z = [1 -1 1 4; -1 5 6 2; 5 7 8 1]--> z = [1 -1 1 4; -1 5 6 2; 5 7 8 1] -> y=0; for k=z, y=y+z, end-> y=0; for k=z, y=y+z, end
il numero di iterazioni è governato dal
il numero di iterazioni è governato dal
numero di colonne della matrice
numero di colonne della matrice
alla i-esima iterazione il valore di k è uguale a alla i-esima iterazione il valore di k è uguale a
z(i) z(i)
Esempio: Media degli elementi
Esempio: Media degli elementi
di un vettore
di un vettore
program1.txt
program1.txt
clear //pulisce tutte le varibili x = [10. -1. 3. 5. -7. 4. 2.];
suma = 0;
[n,m] = size(x); //alternativa m = length(x) for j=1:m
suma=suma+x(j); end
mean = suma/m; mean
Media Colonne di Matrice
Media Colonne di Matrice
n = 10;
n = 10;
m = 7;
m = 7;
M = rand(n,m);
M = rand(n,m);
T = zeros(1,m);
T = zeros(1,m);
for j=1:m
for j=1:m
somma=0;
somma=0;
for i=1:n
for i=1:n
somma = somma + M(i,j);
somma = somma + M(i,j);
end
end
T(j) = somma / n;
T(j) = somma / n;
end
end
Il costrutto while
Il costrutto while
Costrutto while
Costrutto while
while condizione, ... instruzioni ..., end
Esempio
Esempio
s=100; while s>50, disp(s^2), s=s-5, end s=100; while s>50, disp(s^2), s=s-5, end
<enter>
<enter>
La funzione disp visualizza il contenuto della La funzione disp visualizza il contenuto della
variabile passata come argomento variabile passata come argomento
In uno script (o funzione) è possibile scrivere: In uno script (o funzione) è possibile scrivere:
s = 100 s = 100 while s>50 while s>50 disp(s^2) disp(s^2) s = s-5 s = s-5
Il ciclo while
Il ciclo while
La sintassi del while
La sintassi del while
while condizione, istruzione1, ..., istruzionen, while condizione, istruzione1, ..., istruzionen,
end end
In uno script è possibile scrivere
In uno script è possibile scrivere
while condizionewhile condizione
istruzione1 istruzione1 ... ... istruzionen istruzionen end end
Somma degli elementi di un
Somma degli elementi di un
vettore
vettore
media.scemedia.sce clear clear x = [10. -1. 3. 5. -7. 4. 2.]; x = [10. -1. 3. 5. -7. 4. 2.]; somma = 0; somma = 0;[n,m] = size(x); //alternativa m = length(x)
[n,m] = size(x); //alternativa m = length(x)
for j=1:m for j=1:m somma=somma+x(j); somma=somma+x(j); end end disp(somma) disp(somma)
Esercizio:Esercizio: realizzare lo stesso programma con il realizzare lo stesso programma con il
cotrutto
Il costrutto condizionale: if...
Il costrutto condizionale: if...
then... else...
then... else...
● if condizione then istruzioni, end
● if condizione then istruzioni, else istruzione,
end
● if condizioneA then istruzioni, elseif
condizioneB then istruzioni, elseif
condizioneC then istruzioni, ...., else istruzioni, end
N.B.: In uno script le istruzioni possono essere
if... then... else...: Esempi
if... then... else...: Esempi
Esempi
Esempi
1) x=10; y=5; if x>5 then disp(y), end <enter>
2)x=3; y=5; if x>5 then disp(y), else disp(x), end <enter>
3)x=3; y=5; z=4; if x>5 then disp(y), elseif x>6 then disp(x), else disp(z), end <enter>
Il costrutto condizionale:
Il costrutto condizionale:
select-case
case
Forma generale:
Forma generale:
select varibile, case n1, istuzioni, case n2,
istruzioni,...., [else istruzioni,] end
Dove n1,n2... sono i valori di “variabile”
Esempi:
Esempi:
1)
1)
x=-1; select x, case 1, y=x+5, case -1, y=sqrt(x), end <return>2)r=7; select r, case 1, disp(r), case 2, disp(r^2), case 7, disp(r^3), end <return>
N.B.: In uno script le istruzioni possono essere