DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 8 – Info B
Marco D. Santambrogio – [email protected]
Riccardo Cattaneo – [email protected]
Ver. aggiornata al 30 Dicembre 2013
Lab 8: Agenda
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (30’)
• Qualche cosa un po’ più divertente (60’)
• Altri exe… (90’)
2
Lab 8: Ora..
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (30’)
 modulo
• Qualche cosa un po’ più divertente (60’)
• Altri exe… (90’)
3
modulo: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Dato un numero inserito dall’utente,
scrivere a video il suo modulo
 Si usi una funzione di ordine superiore
modulo scritta da voi
• Esempio
Inserire il numero:
>>> -3
>>> 3
4
modulof1 in Octave
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
%script modulo1
x=input("Inserisci uno scalare: ");
[email protected](x)((-1)*x);
if x<0
r=modulof1(x)
else
r=x
end
5
modulof2 in Octave
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
%script modulo2
x=input("Inserisci uno scalare: ");
minZero = @(x)(~(x>0));
modulof2 = @(x)((-1)*x);
if minZero(x)
r = modulof2(x)
else
r=x
end
6
Lab 8: Ora..
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (30’)
• Qualche cosa un po’ più divertente (60’)
 tmp
 presente
• Altri exe… (90’)
7
tmp: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Facendo uso della funzione di ordine superiore accumulatore
• Codificare la funzione tmp(v)
 Prende come argomento un vettore di numeri v=[v1,…, vn]
 Calcola e restituisce come risultato il valore
• Codice della funzione accumulatore
function [x]=accumulatore(f, a, u)
x = u;
for i=1:length(a)
x = f(x, a(i));
end
8
tmp: soluzione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function ris = tmp(v)
prod = @(x, y) x*y;
sum = @(x, y) x+y;
ris = accumulatore (prod, v, 1) *
accumulatore (sum, v, 0);
9
presente: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
•
•
•
Facendo uso delle funzioni di ordine superiore map e acc
presentate a lezione, scrivere una funzione presente(x, v) dove x è
un valore e v un vettore.
La funzione deve restituire un valore logico true se x è contenuto
in v, e deve eseguire il controllo verificando la seguente condizione:
x==v(1) OR x==v(2) OR …. x==v(length(v))
Procedere in questo modo:
 Calcolare tramite map un vettore logico che contiene 1 in
corrispondenza dei valori del vettore che sono uguali a x
 Calcolare poi tramite accumulatore l’OR degli elementi del vettore
Codice della funzione map:
function [vout]=map(f, vin)
for i=1:length(vin)
vout(i)=f(vin(i));
end
10
presente in Octave
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function [p]=presente(x,v)
%Definiamo una variabile funzione che verifichi l'uguaglianza
eqx = @(a)a==x;
% Tramite map, costruiamo un vettore logico che contiene 1 nelle posizioni
% in cui il vettore in ingresso contiene valori uguali a x
vp = map(eqx,v);
% Definiamo una variabile funzione che calcoli l'OR tra due valori logici
OR = @(h,k)h||k;
% Tramite acc, calcoliamo l'OR tra tutti gli elementi del vettore logico
% ottenuto con map
p = accumulatore(OR,vp,0);
11
Lab 8: Ora…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (30’)
• Qualche cosa un po’ più divertente (60’)
• Altri exe… (90’)
 garaTuffi
 combinaImmagini
12
garaTuffi: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Facendo uso della funzione di ordine superiore accumulatore
• Codificare la funzione garaTuffi(v)
 Prende come argomento un vettore di voti v=[v1,…, vn]
 Calcola e restituisce come risultato il valore medio dei voti
• Codice della funzione accumulatore
function [x]=accumulatore(f, a, u)
x = u;
for i=1:length(a)
x = f(x, a(i));
end
13
garaTuffi: soluzione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function ris = garaTuffi(v)
sum = @(x, y) x+y;
ris = accumulatore (sum, v, 0)/length(v);
14
combinaImmagini: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
•
•
Si conviene di rappresentare un’immagine mediante una matrice
rettangolare di numeri, corrispondenti al colore dei suoi pixel (punti
luminosi che compongono la figura)
Si vuole progettare una funzione Octave di nome combinaImmagini
che, ricevendo come parametri due matrici f1 ed f2 rappresentanti due
immagini e due valori numerici C ed S, con C<S, rappresentanti due
diversi colori, produce come risultato una terza figura f3, ottenuta da f1
ed f2 secondo la seguante regola.


•
Nelle posizioni (r,c) in cui f1(r,c)<C ed f2(r,c)>C si ha f3(r,c)=f2(r,c)-f1(r,c)
Nelle posizioni (r,c) in cui f1(r,c)>S ed f2(r,c)<S si ha f3(r,c)=f1(r,c)-f2(r,c) nelle
posizioni rimanenti si ha f3(r,c)=f1(r,c)
Domande


Codificare la funzione combinaImmagini
Scrivere uno script che acquisisce le due matrici di partenza rispettivamente dai
file file1.mat e file2.mat (si supponga che le due variabili contenenti le matrici al
momento del salvataggio si chiamino matr1 e matr2), richiama la funzione
combinaImmagini e salva sul file file3.mat la matrice risultante.
15
combinaImmagini: soluzione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function [f3]=combinaImmagini(f1, f2, C, S)
f3=f1;
f3(f1<C & f2>C)=f2(f1<C & f2>C)-f1(f1<C & f2>C);
f3(f1>S & f2<S)=f1(f1>S & f2<S)-f2(f1>S & f2<S);
%script che esegue combinaImmagini
load file1.mat matr1;
load file2.mat matr2;
C= input('inserisci il valore per C: ');
S= input('inserisci il valore per S: ');
matr3 = combinaImmagini(matr1, matr2, C, S);
save file3.mat matr3;
16
Fonti per lo studio + Credits
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Fonti per lo studio
 Introduzione alla programmazione in
MATLAB, A.Campi, E.Di Nitto, D.Loiacono,
A.Morzenti, P.Spoletini, Ed.Esculapio
• Capitolo 2, 4, 5
• Credits:
 Emanuele Panigati
https://sites.google.com/site/engpanigati/
17
Scarica

Document