Dipartimento di Matematica Introduzione a MATLAB Stefano Vigogna Dipartimento di Matematica vigogna@dima.unige.it http://www.dima.unige.it/~vigogna/
Lezione 3 Programmazione Esercizi script function cicli operatori logici test condizionali input /output Esercizi
M-files Gli M-files sono files di testo contenenti codice MATLAB. L’estensione degli M-files è “.m”. Una volta creati, gli M-files possono essere richiamati dalla Command Window digitando il nome del file, senza estensione. NB: occorre selezionare come Current Directory la cartella dove sono salvati. Esistono 2 tipi di M-files: script e function.
Script Gli script sono semplici sequenze di comandi MATLAB. Non accettano dati in input né producono dati in output. Possono lavorare sui dati salvati nel Workspace e creare nuovi dati, che verranno regolarmente salvati nel Workspace. Tipicamente, vengono usati per creare programmi o procedure.
Function MATLAB ha le proprie function. Possiamo crearne di nuove attraverso la compilazione di un M-file. Un M-file di tipo function accetta variabili in input e può fornire variabili in output. Tutte le variabili usate all’interno della function sono locali. Le function possono essere richiamate nella Command Window, in uno script o in un’altra function.
Sintassi di una function function [y1 … ym] = func(x1 … xn) <corpo della function: sequenza di comandi che definisce il valore di y1 … ym in funzione di x1 … xn , eventualmente mediante la definizione di altre variabili locali> >> func(x1 … xn) per richiamare la function dalla Command Window. NB: il nome del file deve essere func.m .
Esempio Testo di una function traccia.m : function t = traccia(A) D = diag(A); t = sum(D);
Ciclo for … end Ciclo incondizionato. Sintassi: for j = i:p:f <blocco di istruzioni> end dove i = <valore iniziale>, p = <passo>, f = <valore finale>.
Esempio function m = media(v) n = length(v); s = 0; for j = 1 : n s = s + v(j); end m = s/n;
Esercizio 1 Scrivere una funzione che faccia la media degli elementi di una matrice (senza usare la funzione sum).
Operatori logici (1) Se ⊰ è uno fra i simboli < , <= , > , >= , ==, ~= , allora >> x ⊰ y dà 1 se la relazione è vera, 0 se la relazione è falsa, entrata per entrata. La relazione x ~= y significa “x diverso da y” e si scrive anche in variante binaria ne(x,y).
Operatori logici (2) È possibile connettere più relazioni mediante i connettivi logici & : end | : or ~ : not e raggrupparle mediante parentesi (…).
Esempio >> x = [30 12 19 7 5]; >> x > 15 ans = 1 0 1 0 0 >> x(x>15) 30 19
Esercizio 2 Creare una function che estragga da un vettore in input le entrate di modulo minore o uguale di uno scalare in input.
Ciclo while … end Ciclo condizionato. Sintassi: while <condizione> <blocco di istruzioni> end
Esempio function m = media(v) n = length(v); s = 0; i = 1; while i <= n s = s + v(j); i = i + 1; end m = s/n;
NOTA BENE La più grande potenzialità di MATLAB è quella di gestire i dati in senso matriciale. Pertanto, è sempre preferibile ricorrere ad operazioni matriciali ed evitare i cicli.
Test condizionali if <condizione> <blocco di istruzioni> (eseguito se cond1 è vera) elseif <condizione> (opzionale) (eseguito se cond2 è vera) else (opzionale) (eseguito se le precedenti cond sono false) end
Controllo dati in input I test condizionali possono essere usati per controllare i dati in input di una function. >> error(‘<…>’) per stampare un messaggio di errore. >> warning(‘<…>’) per stampare un messaggio di allerta.
Esempio function c = somma(a,b) [ra,ca] = size(a); [rb,cb] = size(b); if (ra~=rb) | (ca~=cb) error(‘Le matrici devono avere la stessa dimensione!’) else c = a + b; end
Interruzioni >> break per interrompere un ciclo (si salta all’istruzione seguente il ciclo); >> return per interrompere una function (si torna al programma da cui è stata chiamata).
input / output >> x = input(‘Inserisci il valore di x: ‘); Inserisci il valore di x: … per salvare un dato in input (x = valore assegnato) >> disp(‘<stringa>’) per stampare su schermo una stringa >> s = sprintf(‘Il valore di x è %d’,x); per creare stringhe contenenti valori >> disp(s) per stampare la stringa s
Esercizio 3 Scrivere una function che risolva il sistema lineare Ax=b, A matrice quadrata non singolare; la funzione deve controllare i dati in input e stampare un opportuno messaggio d’errore se qualche condizione non è verificata.
Esercizio 4 Scrivere una function che calcoli il fattoriale di un numero intero positivo, controllando il dato in input.
Esercizio 5 Scrivere un programma che, preso in input un intero n>=3 (controllare il dato), stampi la matrice A composta come segue, calcoli il suo determinante e stampi il risultato.