Laboratorio Algoritmi 2014 Secondo Semestre



Documenti analoghi
Introduzione al MATLAB c Parte 2

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Matlab: Strutture di Controllo. Informatica B

Richiesta pagina PHP (es: index.php)

Corso di Visione Artificiale. Matlab per Visione. Samuel Rota Bulò

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Alcune regole di base per scrivere un programma in linguaggio C

Laboratorio di Informatica

L utility Unix awk [Aho-Weinberger-Kernighan]

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Introduzione al Python

Arduino: Programmazione

Laboratorio di Matematica Computazionale A.A Lab. 1 - Introduzione a Matlab

Finestre grafiche. >> figure >> figure(n)

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Introduzione alla programmazione in C

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Descrizione di un algoritmo

Variabili e tipi di dato

3. La sintassi di Java

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Studente: SANTORO MC. Matricola : 528

Lezione 8. La macchina universale

Informatica. Rappresentazione dei numeri Numerazione binaria

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Esercitazione Informatica I AA Nicola Paoletti

CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica

Algebra Booleana ed Espressioni Booleane

Rapida Introduzione all uso del Matlab Ottobre 2002

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Funzioni in C. Violetta Lonati

Lab. 1 - Introduzione a Matlab

4 3 4 = 4 x x x 10 0 aaa

Laboratorio di Matlab

APPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL

Dati importati/esportati

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Codifica: dal diagramma a blocchi al linguaggio C++

Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini

Prof. Nicola Cappuccio

Compilatore risorse display grafico LCD serie IEC-line

Struttura logica di un programma

Calcolare il massimo di una lista

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Programmare in Java. Olga Scotti

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Esercizi di JavaScript

EXCEL FINESTRA DI EXCEL BARRE PRINCIPALI CARTELLA DI LAVORO BARRE DI SPOSTAMENTO

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

Il sistema operativo UNIX/Linux. Gli script di shell

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOFTWARE. È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software:

Node.js. REPL e oltre. by Stefano Burigat

Introduzione al Linguaggio C

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

La selezione binaria

Operazioni di input e output in Fortran 90

I file di dati. Unità didattica D1 1

Appunti sull uso di matlab - I

Esercizio 1. Esercizi 5. Esercizio 3. Esercizio 2 CICLI

Operatori logici e porte logiche

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Introduzione al Foglio Elettronico

Le variabili. Olga Scotti

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

Obiettivi dell Analisi Numerica. Avviso. Risoluzione numerica di un modello. Analisi Numerica e Calcolo Scientifico

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

+ / operatori di confronto (espressioni logiche/predicati) / = > < Pseudo codice. Pseudo codice

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

GESTIONE INFORMATICA DEI DATI AZIENDALI

I sistemi di numerazione

Utilizzo delle formule in Excel

SISTEMI DI NUMERAZIONE DECIMALE E BINARIO

Gestione Risorse Umane Web

Esercizi di programmazione in C

Fogli Elettronici: MS Excel

Javascript: il browser

22 Introduzione all uso di MatLab

Programmazione dinamica

LINGUAGGI DI PROGRAMMAZIONE

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI

1. Le macro in Access 2000/2003

Matlab: Gestione avanzata dei file

Aritmetica dei Calcolatori 2

Linguaggio C. Fondamenti. Struttura di un programma.

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

Transcript:

Laboratorio Algoritmi 2014 Secondo Semestre Lunedì 14:30 17:30 Aula 2. Ricevimento: inviare e-mail a frasca@di.unimi.it. 44 ore (9 CFU) Linguaggio di programmazione: MATLAB Esame : progetto e/o prova scritta di laboratorio Sito del corso http://frasca.di.unimi.it/algm14/algm.html

MATLAB(Matrix Laboratory) Ambiente per il calcolo numerico per applicazioni tecniche e scientifiche Integra computazione, visualizzazione, e programmazione (linguaggio interpretato) in un ambiente di sviluppo Può essere utilizzato a diversi livelli di complessità: dall utilizzo interattivo per la risoluzione di semplici problemi, fino alla programmazione di applicazioni complesse cui MATLAB fornisce il motore computazionale

MATLAB: vantaggi MATLAB è un software di calcolo scientifico che semplifica la scrittura di algoritmi Linguaggio interpretato: stesso codice eseguibile su architetture diverse grazie all'interprete MATLAB Non è necessario specificare il tipo delle variabili E possibile modificare agevolmente le strutture dei dati Implementa molte funzioni già pronte

MATLAB: svantaggi Naturalmente MATLAB presenta anche alcuni svantaggi Bisogna prestare attenzione al tipo delle variabili Una script MATLAB è in genere un po più lento di un programma compilato e occupa più memoria La gestione della memoria può essere piuttosto inefficiente E a pagamento

MATLAB: interprete Command line INPUT: Comandi MATLAB OUTPUT Interprete MATLAB: codifica per l'architettura sottostante Hard Disk CPU RAM Risorse di Sistema

Esecuzione Programmi Memoria centrale (RAM) Memoria centrale (RAM) Istruzione 1 Istruzione2 CPU Istruzione 1 Istruzione2 Secondo passo Istruzione3 Istruzione4 Istruzione3 Istruzione4 CPU...... Interprete Matlab Interprete Matlab Primo passo Programma pre-compilato Programma MATLAB

La Finestra dei Comandi (Command Window) La finestra dei comandi (Command Window) è uno degli strumenti principali in MATLAB per inserire dati, eseguire funzioni ed applicazioni, visualizzare risultati. Il prompt della Command Window, >>, è il punto in cui inserire i comandi. Il prompt indica che MATLAB è pronto ad accettare l input dall utente I comandi immessi nella Command Window vengono immediatamente interpretati ed eseguiti da MATLAB.

La Finestra dei Comandi (Command Window)

La Finestra dei Comandi (Command Window) Per eseguire un comando è sufficiente digitare il comando stesso e premere invio Esempi: >> 7/5 (INVIO) ans= 1.4000 >> log(1.0) (INVIO) ans= 0

Cronologia dei Comandi (Command History) Le istruzioni digitate nella Finestra dei Comandi vengono registrate e memorizzate nella Cronologia dei Comandi (Command History). Dalla Cronologia dei Comandi è possibile risalire ai comandi precedentemente eseguiti, selezionarne alcuni e rieseguirli.

Directory corrente e percorsi (paths) Tutte le operazioni su file in MATLAB fanno rifermento alla directory corrente e al search path. Qualunque file si voglia utilizzare in MATLAB, questo deve essere collocato o nella directory corrente o in una directory inclusa nel search path. La directory corrente può essere visualizzata o modificata attravero la toolbar del desktop MATLAB.

Workspace Il workspace ( spazio di lavoro ) di MATLAB consiste nell insieme di variabili definite durante una sessione di lavoro e memorizzate da MATLAB. Il workspace browser consente di visualizzare ed ottenere informazioni relative ad ogni variabile presente nel workspace. Il workspace non viene mantenuto dopo la fine di una sessione. Tuttavia può essere salvato e ricaricato per un altra sessione. Per salvare il workspace si seleziona File > Save Workspace As... Il workspace viene salvato in un MAT-file (file binario con estensione.mat)

Help Esistono un certo numero di tutorial e libri su MATLAB che coprono gli argomenti più disparati. In genere è comunque sufficiente l help in linea di MATLAB. >>help oppure >> help comando

Parole chiave MATLAB riserva alcune parole per usarle come parole chiave del linguaggio. La lista delle parole chiave si ottiene digitando iskeyword nella Finestra dei Comandi Break, case, catch, continue, else, elseif, end, for, function, global, if, otherwise, persistent, return, switch, try, while

Variabili Le variabili consentono di memorizzare un valore in un area di memoria. Hanno un tipo specifico. Il valore assegnato ad una variabile può essere modificato durante l esecuzione del programma. Le variabili sono identificate da un nome. Il nome di una variabile in MATLAB deve iniziare con una lettera che può essere seguita da una qualunque combinazione di lettere, numeri e caratteri underscore (_). Nota: MATLAB è case sensitive, ovvero distingue tra lettere maiuscole e minuscole.

Tipi di dati Esistono diversi tipi di dati fondamentali (built-in) in MATLAB. Gli utenti possono definire ulteriori tipi di dati attraverso le estensioni object-oriented del linguaggio. Tutti i tipi di dati sono implementati sotto forma di matrice o vettore.

Numeri interi Esistono in MATLAB 4 tipi di interi con segno e 4 tipi di interi senza segno. Esempio: x = int16(325);

Numeri reali I numeri reali sono memorizzati in formato floating-point a precisione doppia (double 64 bit) o singola (single 32 bit). Per default MATLAB impiega il formato a precisione doppia. I numeri a precisione singola si ottengono convertendo un numero a precisione doppia attraverso l istruzione single. Esempio: x = single(25.783); Whos clear

Conversioni e arrotondamenti Per default MATLAB memorizza i numeri in formato floating-point a precisione doppia (double). Per memorizzare un dato come numero intero deve essere operata una conversione esplicita. Nelle conversioni da double a intero per default MATLAB opera l arrotondamento all intero più vicino Esempio:x = 325.499; int16(x) ans = 325 x = x +.001; int16(x) ans = 326 Se occorre un altro tipo di arrotondamento, MATLAB fornisce 4 funzioni: round (per eccesso/difetto), fix (parte intera), ceil (intero superiore) e floor (intero inferiore)

Il tipo Logical Il tipo logical è usato per rappresentare variabili booleane che possono assumere il valore true (vero = 1) o false (falso = 0). Gli operatori relazionali ed alcune funzioni MATLAB ritornano output di tipo logical. Possono essere definite singole variabili di tipo logical o matrici di elementi di tipo logical. Esempio: x = [true, true, false, true, false]; y = rand(3) > 0.5;

Caratteri e stringhe Si possono specificare caratteri e stringhe racchiudendoli tra Singoli apici Esempio: >> character = a ; >> string = MATLAB ; Per confrontare due stringhe si può usare: strcmp: ritorna 1 se le stringhe sono identiche, 0 altrimenti. ATTENZIONE: è diverso dal C. strncmp determina se i primi n caratteri di due stringhe sono identici.

Caratteri: codice ASCII char converte un numero intero positivo nel carattere Equivalente. >> char(126) ans = ~ Esistono 95 caratteri ASCII stampabili, numerati da 32 a 126

Conversioni tra numeri e stringhe int2str converte un numero intero in un carattere. str2num converte una stringa in un tipo numerico Esempi: >>char([72 105]) ans = Hi >>str2num( 72 105 ) ans = 72 105

Operazioni aritmetiche e... Per le variabili numeriche sono disponibili le usuali operazioni (+, -, *, /), e molte altre (sqrt(), exp(),...). Bisogna prestare attenzione al fatto che le operazioni posso dare risultati diversi a seconda del tipo di dato. La sequenza di comandi a = int8(2) b = int8(3) c = a/b assegna a c il valore 1. La sequenza di comandi assegna a c il valore 0.6667 a = 2 b = 3 c = a/b

Valori speciali In MATLAB esistono alcuni valori numerici speciali, in particolare NaN (Not a Number) e Inf (Infinity). NaN indica una operazione per la quale il valore è indefinito, mentre Inf indica un valore infinito. Esempi: >>1/0 Inf >>0/0 NaN Per una spiegazione più precisa del funzionamento di questi valori vi rimando all help in linea.

Operatori relazionali

Operatori logici Sono disponibili gli usuali operatori logici Operatore Sintassi AND & OR NOT ~ >> 1 & 5 ans = 1 >> 1 0 ans = 1

Matrici, vettori e scalari La matrice è il tipo di dato fondamentale in MATLAB Le matrici sono rappresentate come array bidimensionali di numeri. Assumono un significato particolare le matrici 1 x 1, usate per rappresentare gli scalari e le matrici con una sola riga o una sola colonna, usate per rappresentare i vettori. Mentre altri linguaggi di programmazione operano generalmente su scalari, il linguaggio di programmazione MATLAB opera soltanto su matrici.

Creare matrici Si può creare una matrice in MATLAB: Inserendo esplicitamente i dati nella matrice Caricando una matrice da un file di dati esterno Generando una matrice per mezzo di una delle funzioni predefinite disponibili in MATLAB Generando una matrice in funzioni predisposte dall utente e salvate in un M-file

Creare matrici inserendo manualmente i dati I dati si inseriscono nella Finestra dei Comandi seguendo queste regole: Gli elementi all interno di una riga sono separati da virgola (,) o spazio Le righe sono separate dal punto e virgola (;) L intera lista di elementi deve essere racchiusa tra parentesi quadre ([ ]) >> A = [1 2 3; 4 5 6; 7 8 9]; >> A(2,1) = 4

Generare matrici usando le funzioni predefinite MATLAB fornisce le seguenti funzioni per generare matrici: zeros: genera una matrice in cui tutti gli elementi hanno valore zero ones: genera una matrice in cui tutti gli elementi hanno valore uno rand e randn: generano una matrice in cui tutti gli elementi assumono un valore casuale secondo una distribuzione rispettivamente uniforme e normale eye: genera una matrice in cui tutti gli elementi sulla diagonale principale valgono uno e gli altri elementi valgono zero >> ones(3,6) ; eye(7,8)

Matrici La matrici possono avere un numero arbitrario di dimensioni Tuttavia tutti gli elementi della matrice hanno lo stesso tipo Per accedere agli elementi di una matrice uso le parentesi tonde. Posso accedere a gruppi di elementi specificandoli >>A([1 2], 2) mi ritornerà i valori A(1,2) e A(2,2)

Matrici Per accedere a valori consecutivi posso usare l operatore : La sintassi generale dell operatore è >> a:b:c dove a, b e c sono valori numerici. In particolare questo comando mi ritornerà un vettore con le componenti a a+b a+2b a+3b... in maniera tale che nessuna componente superi il valore c

Matrici Una versione semplificata dell operatore : non ha l incremento In questo caso, si assume che l incremento sia 1. Che valori ottengo usando il comando seguente? >>1.5:4.6 Naturalmente l uso più più ovvio di : è per selezionare delle sottomatrici. >>A(1:2, 1:2) mi ritorna la sottomatrice composta dalle prime 2 righe e 2 colonne. Se invece volessi tutte le righe ma solo le prime 2 colonne dovrei scrivere >>A(:, 1:2)

Eliminazione di righe e colonne È possibile eliminare righe e colonne da una matrice utilizzando le parentesi quadre [], attribuite alla riga/colonna che si vuole eliminare. Ad esempio, eliminiamo la seconda colonna della matrice A: >> A(:, 2) = []

Dimensioni di una matrice Il comando size permette di ottenere informazioni sulle dimensioni di una matrice: size(m, 1) restituisce il numero di righe della matrice m size(m, 2) restituisce il numero di colonne di m size(m) restituisce un vettore riga contenente il numero di righe e il numero di colonne della matrice m

Somma e sottrazione di matrici I comandi di somma e sottrazione operano sulle matrici elemento per elemento. Definiamo ad esempio i vettori riga M = [1 2] e N = [3 4], e calcoliamo la somma M + N, o la differenza M - N Le operazioni di somma e sottrazione richiedono che le matrici che si sommano o si sottraggono abbiano tutte le stesse dimensioni.

Moltiplicazione di matrici La moltiplicazione di matrici è definita nel senso di moltiplicazione righe per colonne. Per poter effettuare la moltiplicazione il numero di colonne del primo fattore deve essere uguale al numero di righe del secondo fattore Il risultato sarà una matrice avente un numero di righe pari a quello del primo fattore e un numero di colonne pari a quello del secondo fattore Se R è una matrice m x n e S è una matrice n x p, Q = R * S sarà una matrice m x p.

Moltiplicazione di matrici Esempio: definiamo due matrici R e S e ne calcoliamo il prodotto Q = R * S L operatore.* consente di operare il prodotto elemento per elemento. Riconsideriamo ad esempio i vettori riga M = [1 2] e N = [3 4], e calcoliamo il prodotto elemento per elemento M.* N.

Esempi x = int16(365) x = int8(365) g = uint64(45) a = int32(1000) whos e = 3.5 r = single(3.5) whos floor(e) fix(e) floor(-e) fix(-e) ceil(e) round(e) ceil(-e) round(-e)

Esempi aa = 3.6 ll= aa>5 whos [1 4 0] &[3 0 1] ones(3,6) A=eye(7,8) 8:2:20 8:20 A(:,2:5)

Esempi str1 = 'ciao' c = 'c' str2 = 'ciaom' whos strcmp(str1,str2) strncmp(str1,str2,4) strncmp(str1,str2,5)

Controllo del flusso Istruzioni: if, else, elseif L istruzione if valuta un espressione logica ed esegue una sequenza di istruzioni se l espressione è vera. Nella sua forma più semplice, la sintassi è la seguente: if logical_expression statements end La sequenza di istruzioni da eseguire è delimitata dalle parole chiave if e end. Nota: non occorrono parentesi come in C

Controllo del flusso L istruzione else precede una sequenza di istruzioni che vengono eseguite se l espressione calcolata dall istruzione if a cui è associata risulta falsa. All istruzione else non è associata alcuna espressione da valutare. L istruzione elseif valuta l espressione logica a lei associata solo se l espressione logica associata all istruzione if che la precede e quelle associate ad eventuali altre istruzioni elseif precedenti sono tutte false.

Controllo del flusso if expression1 statement1 elseif expression2 statement2 else statement3 end if a~=0 tmp = 1/a; elseif b~=0 tmp = 1/b; else disp('a==0 e b==0') end

Controllo del flusso Comandi utili per confronti numerici isequal: ritorna vero se tutte le matrici passate come parametro sono uguali isempty: ritorna vero se la matrice passata come parametro è vuota all: ritorna vero se nessuno degli elementi del vettore passato come parametro vale 0. Sulle matrici opera colonna per colonna. any: ritorna vero se almeno uno degli elementi del vettore passato come parametro è diverso da 0. Sulle matrici opera colonna per colonna.

Controllo del flusso Un secondo comando per il controllo del flusso è lo switch: switch expression case value1 statement1 case value2 statement2... otherwise statement_o end L istruzione switch esegue una diversa sequenza di istruzioni in base al valore di una variabile o di un espressione. Le parole chiave case e otherwise delimitano le diverse sequenze da eseguire.

Controllo del flusso L istruzione switch può essere seguita da un qualunque numero di blocchi case. Il blocco otherwise è opzionale e si trova sempre dopo tutti i blocchi case e prima di end. Se l espressione da valutare è una stringa, la comparazione con i valori gestiti dai vari blocchi case è operata con la funzione strcmp. Diversamente dal C, dopo l esecuzione di un blocco case, MATLAB passa oltre il termine dell istruzione switch. Le istruzioni break NON sono quindi necessarie. Un singolo case può gestire più valori contemporaneamente.

Controllo del flusso switch n Case {1, 2} disp( Positivo ) case 0 disp( Zero ) case {-1,-2} disp( Negativo ) otherwise disp( un altro valore ) end

Istruzioni di loop L istruzione for esegue un istruzione o una sequenza di istruzioni un dato numero di volte. La sintassi è la seguente: for index = start:increment:end statements end L incremento predefinito è 1. E tuttavia possibile specificare un incremento diverso, anche negativo. Per indici positivi, l esecuzione termina quando il valore dell indice supera il valore finale Per incrementi negativi, il ciclo si conclude quando il valore dell indice scende al di sotto del valore finale.

Istruzioni di loop Per esempio posso usare il for per calcolare il fattoriale di n: fact = 1; for i = 1:n fact = fact*i; end Posso anche usare un for per calcolare la somma dei numeri contenti nel vettore A A = [3 4 5 6]; j =0; for i = A j = j+i; End Comando sum, vedi help

Istruzioni di loop L istruzione while esegue un istruzione o una sequenza di istruzioni ripetutamente finché l espressione a lei associata risulta vera La sintassi è la seguente: while expression statements end Posso usare il while per trovare il numero di fattori 2 di un numero n = 24; i = 0; while mod(n,2) == 0 i = i + 1; n = n/2; end

Istruzione break Si può uscire da un ciclo for o while in qualunque momento usando l istruzione break. i = 2 while true i = i*2 if i>100 break end end

Istruzione continue L istruzione continue provoca l esecuzione della successiva iterazione di un ciclo for o while saltando l esecuzione della restante parte del ciclo k = 0 for i = 1:10 if mod(i, 2) == 0 continue end k = k+i end