12 Function Handles e Ricorsione in MATLAB
|
|
|
- Daniela Piazza
- 7 anni fa
- Просмотров:
Транскрипт
1 1 Function Handles e Ricorsione in MATLAB Un function handle è una variabile il cui valore è una funzione. Data una funzione esistente, il suo function handle è dichiarato come handle dove nome è il nome di tale funzione, a patto che essa sia già definita in MATLAB. Una volta dichiarato l handle, è possibile invocarlo come fosse una funzione: 1 handle_sum 3 handle_sum([3 ]); Un function handle può essere dichiarato anche al volo, ossia su una funzione non esistente. Ad esempio: handle è un handle di una funzione anonima che accetta in ingresso un parametro formale x e svolge su di esso una moltiplicazione. Si noti che x 3 è a tutti gli effetti il corpo della funzione anonima. 1 handle 3 handle(10) Essendo variabili, gli handle possono essere passati ad altre funzioni creando le cosiddette funzioni di ordine superiore, in quanto ricevono in ingresso altre funzioni (come argomenti). 1 handle_es func)(func(vett)); 3 handle_es([3 4 handle_es([3 ], handle_sum) 1
2 1 Function Handles e Ricorsione in MATLAB 1.1 Esercizi Esercizio 1.1 Si definisca una funzione che riceve in ingresso un function handle e due variabili x e y contenenti numeri. Tale funzione, chiamata controlla_funzione, dovrà controllare se applicando ad x la funzione passata tramite function handle si ottiene y, e restituire 1 o 0 a seconda che tale controllo vada a buon fine o meno. Estendere l esempio ai vettori, ovvero costruire controlla_funzione_vettori affinchè riceva in ingresso un vettore X e un vettore Y, e controlli che la condizione di cui sopra valga per tutti gli elementi corrispondenti di X e Y. Si scriva poi una funzione operazione che applichi un operazione matematica a scelta (ad esempio, la moltiplicazione per ) a un valore di input, e la si usi per testare il funzionamento di controlla_funzione e controlla_funzione_vettori. Esercizio 1. Scrivere una funzione filtra che riceva come parametri una funzione cond e due vettori x e y delle stesse dimensioni. La funzione cond riceve in ingresso due parametri, a e b, e restituisce 1 (true) se a è maggiore di b, altrimenti restituisce 0 (false). La funzione di ordine superiore filtra dovrà utilizzare la funzione cond al fine di filtrare il primo vettore ricevuto in ingresso, costruendo un nuovo vettore che contenga solo quegli elementi di x che sono maggiori dei corrispondenti elementi di y. Sperimentare con altre funzioni al posto di cond. Ad esempio minore di, oppure uguale a, oppure uno il doppio dell altro, etc. Esercizio 1.3 Implementare la funzione di ordine superiore vrand che riceve in ingresso un function handle e un numero reale tra 0 e 1. Non si sa nulla sul function handle, se non che va chiamato senza alcun argomento (ad esempio handle()). La funzione vrand dovrà chiamare la funzione passata come handle. Se il numero restituito dalla chiamata ad handle() è maggiore del numero reale ricevuto come parametro, questo viene restituito immediatamente, se invece è inferiore, si dovrà continuare a chiamare la funzione handle() finchè questa non restituirà un numero maggiore del reale passato. Utilizzare vrand per realizzare un dado a sei facce truccato. Chiamare 100 volte la vrand e salvare i valori così ottenuti in un vettore V. Realizzare poi altre 100 estrazioni usando la rand al posto della vrand e salvare tali valori in un vettore R. A.A Informatica B (081369) - Politecnico di Milano Pag.
3 1 Function Handles e Ricorsione in MATLAB Infine, utilizzare plot() per visualizzare le estrazioni di R e V: su due grafici diversi; sullo stesso grafico con colori diversi. Esercizio 1.4 Implementare una funzione iterativa (e poi una sua versione ricorsiva) per tradurre i caratteri di una stringa da minuscoli a maiuscoli. Assumere che la funzione riceva in ingresso una stringa di caratteri minuscoli. Suggerimento: la traduzione viene effettuata semplicemente sottraendo 3 al carattere da tradurre, e applicando char(). Ad esempio: 1 trad = char('a' - 3) stampa a video il carattere A. Esercizio 1.5 Si implementi in MATLAB uno script che, preso un vettore v, lo ordini ricorsivamente utilizzando l algoritmo Mergesort, definito come segue: Se la sequenza da ordinare ha lunghezza 1, è già ordinata; Se la sequenze è lunga o più, la sequenza viene divisa in due metà; Ognuna di queste sotto-sequenze viene ordinata, applicando ricorsivamente l algoritmo; Le due sotto-sequenze ordinate vengono fuse. Per fare questo, si estrae ripetutamente il minimo delle due sotto-sequenze e lo si pone nella sequenza in uscita, che risulterà ordinata. Esercizio 1.6 (TdE 5 febbraio 015) Data una matrice quadrata di dimensione N, definiamo somma del quadrato concentrico di ordine k la somma degli elementi che si trovano sul k-simo quadrato concentrico della matrice (k ceil(n/)). Per esempio nella matrice: A.A Informatica B (081369) - Politecnico di Milano Pag. 3
4 1 Function Handles e Ricorsione in MATLAB il quadrato concentrico di ordine k = è definito dagli elementi 3 7 x (dove x sottolinea il fatto che l elemento non è da considerare parte del quadrato concentrico) e la somma del quadrato concentrico è pari a 37, mentre il quadrato concentrico di ordine 3 è definito dall elemento [ ] (e la somma del quadrato concentrico è pari a ). Si sviluppi in MATLAB una funzione ricorsiva quadraticoncentrici che, data una matrice quadrata, restituisca il vettore contenente le somma dei quadrati concentrici che la compongono. Per esempio, per la matrice di esempio avremo il vettore deve contenere: [51 37 ]. Per sviluppare questa funzione si scriva prima la funzione sommadicorniceesterna che, data una matrice quadrata di ordine N, restituisce la somma del quadrato concentrico di ordine 1, cioè la somma degli elementi sulla riga 1, riga N, colonna 1, colonna N (senza contare due volte gli elementi ai vertici della matrice). Nel caso in cui la matrice non sia quadrata, la funzione restituisce 0. La funzione applicata all esempio restituirebbe 51. Infine, si mostri in uno script un esempio di chiamata della funzione quadraticoncentrici sulla matrice di esempio. (TdE 8 gennaio 013) Esercizio 1.7 Scrivere la funzione ricorsiva cifra che riceve come parametri due numeri interi num e k (si supponga che entrambi i numeri siano sempre strettamente positivi). La funzione cifra restituisce la k-esima cifra del numero num a partire da destra. Per esempio: cifra(1456, 1) deve restituire 6; cifra(5136, 4) deve restituire 5; cifra(51, ) deve restituire 1. Suggerimento: un numero intero positivo di n cifre, c n,..., c 1 può essere rappresentato in termini di potenze di 10 come segue: c n 10 n 1 + c n 1 10 n c 10 + c 1. Per esempio 1456 = A.A Informatica B (081369) - Politecnico di Milano Pag. 4
5 1 Function Handles e Ricorsione in MATLAB Scrivere la funzione ricorsiva cifraconcontrollo che, in modo analogo alla funzione precedente, riceve come parametri due numeri interi num e k (si supponga che entrambi i numeri siano sempre strettamente positivi). La funzione cifraconcontrollo restituisce la k-esima cifra del numero num a partire da destra. Nel caso in cui k sia maggiore del numero effettivo di cifre che compongono num, la funzione restituisce 1. Per esempio: cifraconcontrollo(51, ) deve restituire 1; cifraconcontrollo (13, 5) deve restituire 1 (perché in questo caso num è composto da sole 3 cifre). Nota: Non è consentito l uso della funzione numstr. Esercizio 1.8 (TdE 0 febbraio 01) Si assuma di avere una matrice di righe ed un numero arbitrario di colonne, ad esempio: [ ] (1.1) Ogni colonna della matrice rappresenta una frazione, ae esempio la matrice precedente rappresenta: [ ] Si scriva una funzione ricorsiva frac che, ricevuta una qualsiasi matrice in ingresso, restituisca i parametri n e d che rappresentano rispettivamente il numeratore ed il denominatore della frazione risultante dalla somma delle frazioni contenute nella matrice. Ad esempio: 1 [n d] = frac([1 3 1; 4 3]) restituisce n = 19 e d = 1. La frazione deve essere minimizzata, ovvero non vi devono essere divisori comuni tra n e d. Nel progettare frac, si può utilizzare la funzione gcd(a,b) che restituisce il massimo comun divisore tra a e b per minimizzare una frazione in quanto: a b = a gcd(a,b) b gcd(a,b) A.A Informatica B (081369) - Politecnico di Milano Pag. 5
12 Function Handles e Ricorsione in MATLAB
1 Function Handles e Ricorsione in MATLAB Un function handle è una variabile il cui valore è una funzione. Data una funzione esistente, il suo function handle è dichiarato come handle = @nome dove nome
Laboratorio di Architettura degli Elaboratori A.A. 2014/15 Programmazione Assembly
Laboratorio di Architettura degli Elaboratori A.A. 2014/15 Programmazione Assembly Scrivere il codice ARM che implementi le specifiche richieste e quindi verificarne il comportamento usando il simulatore
13 Esercizi di Riepilogo
13.1 Esercizi Esercizio 13.1 Si consideri una versione semplificata della battaglia navale in cui le navi possono essere posizionate solo in orizzontale e ogni riga può contenere al massimo una nave. Il
Esercizi
Esercizi Si implementi una funzione che riceve in input una matrice NxM di float. Definito picco un numero circondato in tutte le posizioni intorno solo da numeri strettamente inferiori alla sua metà,
15 Riepilogo di esercizi in MATLAB
15.1 Esercizi Esercizio 15.1 (TdE 2014) Si consideri l array definito in MATLAB e chiamato dati. Tale array contiene le informazioni riguardanti le precipitazioni atmosferiche registrate da una stazione
LABORATORIO DI INFORMATICA ESERCITAZIONE VIII
LABORATORIO DI INFORMATICA ESERCITAZIONE VIII Cercate di eseguire gli esercizi da soli. Se non ci riuscite, cercate di capire i messaggi di errore. Se non ci riuscite, provateci di nuovo. Poi chiamate
n deve essere maggiore di 0, altrimenti il metodo restituisce null.
Esercizio 1 di classe Intersezione che presi in input due Array di int A e B, restituisce in output un array contenente gli elementi presenti sia in A che in B. Esercizio 2 di classe identità che prende
1. Si scriva una function Matlab che implementa il seguente metodo di punto fisso
Domanda 1 1. Si scriva una function Matlab che implementa il seguente metodo di punto fisso x n+1 = x n f(x n), n = 0, 1, 2,... K dove x 0 è il punto iniziale, f(x) = x 3 cos(x) e K è una costante assegnata.
10 Funzioni MATLAB. dove: output1, output2,.. sono gli output (opzionali), che, se dichiarati, devono essere inizializzati dalla funzione
Le funzioni in un programma sono utilizzate per strutturare il codice in sottoparti e per evitare di replicare inutilmente il codice. In MATLAB le funzioni vengono identificate con la parola chiave function
Parte 1: tipi primitivi e istruzioni C
Parte 1: tipi primitivi e istruzioni C Esercizio 1 Scrivere un programma che stampa la somma di una sequenza di N numeri inseriti dall utente. Esercizio 2 Scrivere un programma che stampa la somma di una
Fondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array e funzioni 2. Array e funzioni ricorsive 3. Array e confronto di array 2 Esercizio 1 Creare un programma che legga da
Informatica B
2013-2014 Matlab Laboratorio del 14/01/2014 Responsabili di laboratorio: Gianluca Durelli: [email protected] Luigi Malago : [email protected] Materiale di laboratorio reperibile all indirizzo: www.gianlucadurelli.com
Vettori e Matrici. Corso di Calcolo Numerico. 24 Aprile 2018
Vettori e Matrici 24 Aprile 2018 Richiami In MATLAB, ogni variabile ha una struttura di tipo vettoriale o array. Un array è un insieme di valori ordinati, cioè memorizza più dati all interno di una struttura
ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
14 Function Handles in MATLAB
Un "function handle" e una variabile il cui valore e una funzione. Data una funzione esistente, il suo function handle è dichiarato come handle = @nome dove nome è il nome di tale funzione esistente. Una
Esercizi per il corso di Algoritmi, anno accademico 2011/12
Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, nè in C++, etc. ). Di tutti gli
10 Funzioni MATLAB. dove. output1, output2,.. sono gli output (opzionali), che, se dichiarati, devono essere inizializzati dalla funzione
Le funzioni in un programma sono utilizzate per strutturare il codice in sottoparti e per evitare di replicare inutilmente il codice. In MATLAB le funzioni vengono identificate con la parola chiave function
Matrici. Prof. Walter Pugliese
Matrici Prof. Walter Pugliese Le matrici Una matrice è un insieme di numeri reali organizzati in righe e colonne. Se n è il numero delle righe e m e il numero delle colonne si dice che la matrice è di
1 Esercizi di Matlab. L operatore : permette di estrarre sottomatrici da una matrice assegnata. Vediamo alcuni esempi.
Esercizi di Matlab L operatore : permette di estrarre sottomatrici da una matrice assegnata. Vediamo alcuni esempi. Esempio Consideriamo la matrice A formata da n = righe e m = colonne M = 5 6 7 8. 9 0
Esercitazione 1 Conversione di base
Esercitazione 1 Conversione di base A.A. 2017-18 Esercizio 1 (M) Scrivere un programma che esegua la conversione di un numero reale qualunque da base 10 a base β {2,..., 16}, utilizzando gli M-function
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Matlab: esempi ed esercizi Sommario e obiettivi Sommario Esempi di implementazioni Matlab di semplici algoritmi Analisi di codici Matlab Obiettivi
Laboratorio di Programmazione Laurea in Bioinformatica
Laboratorio di Programmazione Laurea in Bioinformatica 15 dicembre 2008 1 Programmazione strutturata 1.1 Esercizio 1 Si scriva lo pseudocodice di un programma che calcola la media di due numeri reali.
Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)
Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo) Selezione di prove di esame al calcolatore Esercizio 1 (esame del 13/01/2006) La classe Matrice definisce oggetti che rappresentano matrici
PROVETTE D ESAME. Algoritmi e Strutture Dati
PROVETTE D ESAME Algoritmi e Strutture Dati ESERCIZIO 1 Si ottengano limiti superiori e inferiori per la seguente ricorrenza ESERCIZIO 1 ESERCIZIO 2 Dato un albero binario T, il grado di sbilanciamento
CORSO DI LAUREA IN INGEGNERIA ELETTRICA
CORSO DI LAUREA IN INGEGNERIA ELETTRICA Informatica B anno accademico 2013-2014 Prof. Danilo ARDAGNA Esercitazione 05.06.2014 Esercizio 1. (Agenzia di viaggi - accesso ai file) Un'agenzia di viaggi possiede
ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.
3 ITI - a.s. 2007-2008 Compiti di Informatica ESTATE 2008 ARRAY E STRINGHE Scrivere una funzione che carica da tastiera un array di n elementi e lo stampa invertendo il primo elemento con l'ultimo, il
Esercizi su strutture dati
Esercizi su strutture dati Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 21 dicembre 2016 Liste collegate
Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:
Prova di Laboratorio del 12.1.2005 [durata 90 min.] Corso A-B di Programmazione (A.A. 2004/05) 1. Leggere da tastiera un insieme di numeri interi ed inserirli in un vettore A 2. Calcolare tramite una funzione
ossia può anche essere localizzato univocamente sul piano complesso con la sua forma polare.
ALGEBRA COMPLESSA Nel corso dei secoli gli insiemi dei numeri sono andati man mano allargandosi per rispondere all esigenza di dare soluzione a equazioni e problemi sempre nuovi I numeri complessi sono
Quicksort e qsort() Alessio Orlandi. 28 marzo 2010
Quicksort e qsort() Alessio Orlandi 28 marzo 2010 Intro Quicksort è l algoritmo di ordinamento più implementato, insieme con Mergesort. Tutte le librerie standard UNIX ne prevedono una implementazione.
Esercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A
Esercizi di MatLab Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, AA 2017 2018 Gli esercizi sono divisi in due gruppi: fondamentali ed avanzati I primi sono
Fondamenti di Informatica
Fondamenti di Informatica Strutture Selettive, Iterative, Gestione File e Grafici in MATLAB: Esercizi (Carte) rof. Arcangelo Castiglione A.A. 2016/17 unteggio 5 3 2 4 7 3 3 2 1 9 NOTA: Negli esercizi possono
1 L estrazione di radice
1 L estrazione di radice Consideriamo la potenza 3 2 = 9 di cui conosciamo: Esponente 3 2 = 9 Valore della potenza Base L operazione di radice quadrata consiste nel chiedersi qual è quel numero x che elevato
Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che:
Esercizi su Python 14 maggio 2012 1. Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che: 1. conti quanti elementi pari sono presenti nella lista; 2. conti quanti quadrati
Esercizi 2. Marco Anisetti
Esercizi 2 Marco Anisetti Verifica del funzionamento con RAPTOR Implementare in RAPTOR i seguenti programmi visti a lezione Moltiplicazione per somme (la versione più efficiente) Divisione per sottrazione
Programmare con MATLAB c Parte 5 Cicli: for e while
Programmare con MATLAB c Parte 5 Cicli: for e while Lucia Gastaldi DICATAM - Sezione di Matematica, http://lucia-gastaldi.unibs.it Indice 1 La notazione due punti 2 Ciclo: for 3 Ciclo con controllo: while
Laboratorio di Python
Algoritmo, sulle liste Università di Bologna 3 e 5 aprile 2013 Sommario Correzione esercizi 1 Correzione esercizi 2 3 4 Correzione Correzione esercizi scrivere e documentare un programma con un menu dove:
