Upload
kyle-freeman
View
41
Download
0
Embed Size (px)
DESCRIPTION
Lab 8 – Info B. Marco D. Santambrogio – [email protected] Riccardo Cattaneo – [email protected] Ver. aggiornata al 6 Gennaio 2014. Calendario dei Labs. 21 Gennaio 2014, 10am-12.45pm, @ LM1 MATLAB: funzioni ricorsive , funzioni di ordine superiore , grafici 2D e 3D. - PowerPoint PPT Presentation
Citation preview
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 8 – Info B Lab 8 – Info B
Marco D. Santambrogio – [email protected] Cattaneo – [email protected]
Ver. aggiornata al 6 Gennaio 2014
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Calendario dei LabsCalendario dei Labs
• 21 Gennaio 2014, 10am-12.45pm, @ LM1 MATLAB: funzioni ricorsive, funzioni di
ordine superiore, grafici 2D e 3D
2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 8: AgendaLab 8: Agenda
• Warm Up (30’)
• Qualche cosa un po’ più divertente (60’)
• Altri exe… (90’)
3
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 8: Ora..Lab 8: Ora..
• Warm Up (30’) modulo
• Qualche cosa un po’ più divertente (60’)
• Altri exe… (90’)
4
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
modulo: problemamodulo: problema
• Dato un numero inserito dall’utente, scrivere a video il suo modulo Si usi una funzione di ordine superiore
modulo scritta da voi
• EsempioInserire il numero:
>>> -3
>>> 3
5
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
modulof1 in Octavemodulof1 in Octave
%script modulo1x=input("Inserisci uno scalare: ");modulof1=@(x)((-1)*x);
if x<0r=modulof1(x)
elser=x
end
6
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
modulof2 in Octavemodulof2 in Octave
%script modulo2x=input("Inserisci uno scalare: ");minZero = @(x)(~(x>0));modulof2 = @(x)((-1)*x);
if minZero(x)r = modulof2(x)
else r=xend
7
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 8: OLab 8: Ora..ra..
• Warm Up (30’)
• Qualche cosa un po’ più divertente (60’) tmp presente
• Altri exe… (90’)
8
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
tmp: problematmp: problema
• 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
9
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
tmp: soluzionetmp: soluzione
function ris = tmp(v) prod = @(x, y) x*y; sum = @(x, y) x+y; ris = accumulatore (prod, v, 1) *
accumulatore (sum, v, 0);
10
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
presente: problemapresente: problema
• 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
11
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
presente in Octavepresente in Octave
function [p]=presente(x,v) %Definiamo una variabile funzione che verifichi l'uguaglianzaeqx = @(a)a==x;
% Tramite map, costruiamo un vettore logico che contiene 1 nelle posizioni% in cui il vettore in ingresso contiene valori uguali a xvp = map(eqx,v);
% Definiamo una variabile funzione che calcoli l'OR tra due valori logiciOR = @(h,k)h||k;
% Tramite acc, calcoliamo l'OR tra tutti gli elementi del vettore logico% ottenuto con mapp = accumulatore(OR,vp,0);
12
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 8: OLab 8: Orara……
• Warm Up (30’)• Qualche cosa un po’ più divertente
(60’)
• Altri exe… (90’) garaTuffi combinaImmagini
13
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
garaTuffi: problemagaraTuffi: problema
• 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
14
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
garaTuffi: soluzionegaraTuffi: soluzione
function ris = garaTuffi(v) sum = @(x, y) x+y; ris = accumulatore (sum, v,
0)/length(v);
15
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
combinaImmagini: combinaImmagini: problemaproblema• 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.
16
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
combinaImmagini: combinaImmagini: soluzionesoluzionefunction [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 combinaImmaginiload 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;
17
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Fonti per lo studio + Fonti per lo studio + CreditsCredits• 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/
18