1 / 18

Lab 8 – Info B

Lab 8 – Info B. Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it 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.

Download Presentation

Lab 8 – Info B

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it Ver. aggiornata al 6 Gennaio 2014

  2. Calendario dei Labs • 21 Gennaio 2014, 10am-12.45pm, @ LM1 • MATLAB: funzioniricorsive, funzioni di ordinesuperiore, grafici 2D e 3D

  3. Lab 8: Agenda • Warm Up (30’) • Qualche cosa un po’ più divertente (60’) • Altri exe… (90’)

  4. Lab 8: Ora.. • Warm Up (30’) • modulo • Qualche cosa un po’ più divertente (60’) • Altri exe… (90’)

  5. modulo: problema • 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

  6. modulof1 in Octave %script modulo1 x=input("Inserisci uno scalare: "); modulof1=@(x)((-1)*x); if x<0 r=modulof1(x) else r=x end

  7. modulof2 in Octave %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

  8. Lab 8: Ora.. • Warm Up (30’) • Qualche cosa un po’ più divertente (60’) • tmp • presente • Altri exe… (90’)

  9. tmp: 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

  10. tmp: soluzione function ris = tmp(v) prod = @(x, y) x*y; sum = @(x, y) x+y; ris = accumulatore (prod, v, 1) * accumulatore (sum, v, 0);

  11. presente: 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

  12. presente in Octave 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);

  13. Lab 8: Ora… • Warm Up (30’) • Qualche cosa un po’ più divertente (60’) • Altri exe… (90’) • garaTuffi • combinaImmagini

  14. garaTuffi: 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

  15. garaTuffi: soluzione function ris = garaTuffi(v) sum = @(x, y) x+y; ris = accumulatore (sum, v, 0)/length(v);

  16. combinaImmagini: problema • 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.

  17. combinaImmagini: soluzione 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;

  18. Fonti per lo studio + Credits • Fonti per lo studio • Introduzioneallaprogrammazione in MATLAB, A.Campi, E.Di Nitto, D.Loiacono, A.Morzenti, P.Spoletini, Ed.Esculapio • Capitolo 2, 4, 5 • Credits: • EmanuelePanigati https://sites.google.com/site/engpanigati/

More Related