Programmare in Matlab
Funzioni
Cicli
Operatori relazionali
Esercizi vari
Le funzioni I
function [y1,…,yn] = nome_funzione(x1,…,xn) Script
parametri in ingresso non modificabili
le variabili usate sono messe nella memoria di lavoro di MATLAB
Funzioni
script al quale si possono passare parametri in ingresso ed ottenerne in uscita
- sintassi
y1,…,yn -> parametri in uscita
x1,…,xn –> parametri in entrata
le variabili usate all’interno sono locali
Una caratteristica degli script è quella di non avere parametri in ingresso modificabili. Se vogliamo modificare i valori di alcune variabili che compaiono nello script dobbiamo modificare lo script stesso.
Un’altra particolarità consiste nel fatto che tutte le variabili usate nello script vengono automaticamente messe nella memoria di lavoro di MATLAB.
Una funzione MATLAB risponde esattamente alle precedenti due necessità, ossia è uno script al quale è possibile passare parametri in ingresso ed ottenerne in uscita, inoltre le variabili utilizzate durante l’esecuzione della funzione vengono automaticamente cancellate dalla memoria di MATLAB al termine della stessa.
Le variabili definite all’interno della funzione sono var temporanee usate dall’m-file x eseguire la funzione: sono cancellate appena terminata l’esecuzione dello script nn interferiscono con le variabili definite dall’utente nello spazio di lavoro e che possono avere anche gli stessi nomi
Le funzioni II
L’m file va salvato col nome nome_funzione.m
il nome del file deve essere identico a quello della funzione
La funzione puo’ essere richiamata
dalla finestra di comando
all’interno di uno script
da altre funzioni
digitando [y1,…,yn]=nome_funzione(x1,…,xn)
Per poter richiamare la funzione ci dobbiamo mettere nella directory nella quale la salviamo
Per poter richiamare la funzione dobbiamo essere nella directory nella quale è salvata la funzione oppure “settare” nel path di Matlab la directory nella quale la funzione è salvata
Esempio
richiamiamo la funzione nella finestra di comando parametro in input creiamo un m-file traccia.m nel quale implementiamo la funzione che calcola la traccia di una matrice variabile temporanea
Ciclo for…end
for i = n1:passo:n2
blocco di istruzioni
end Ciclo incondizionato
Anche gli algoritmi piu’ semplici richiedono l’esecuzione ripetuta di istruzioni e l’esecuzione condizionata di alcune parti.
Esistono molti comandi per creare m-file complessi e versatili e strutture logiche simili a quelle usate nei linguaggi di programmazione.
La costruzione ripetuta di blocchi di codice in MATLAB viene eseguita tramite cicli.
Esistono due diversi modi per realizzare cicli, il ciclo incondizionato for...end ed il ciclo condizionato while...end.
Il ciclo for fa eseguire tutte le righe fino all’end facendo assumere ad i valori 1,2,…,n
I cicli for possono essere nidificati
Esercizio 1
function s = somma(v,n) Scrivere una funzione che sommi gli elementi di un vettore e moltiplichi il risultato per un intero n passato come parametro di input
Esercizio 2
function m = media_matrix(A) Scrivere una funzione che faccia la media degli elementi di una matrice A
[r c] = size(A)
usare la funzione somma
Operatori
Operatori relazionali:
< <= > >= == = =
si usano per confrontare tra di loro gli elementi di 2 matrici; il risultato dell’operazione sarà
0 se la relazione è falsa
1 se la relazione è vera
Operatori logici:
& |
si usano per combinare tra loro gli operatori relazionali
Gli operatori relazionali consentono di confrontare tra loro gli elementi di due matrici. Sono operazioni binarie come la somma e il prodotto e danno luogo ad un risultato. La differenza è che il risultato puo’ assumere solo 2 valori: 0(se la relazione è falsa) e 1 (se la relazione è vera).
Il risultato è una matrix di tipo logical.
L’operatore relazione è applicato ad ogni elemento delle matrix che si confrontano per cui le matrix devono avere lo stesso formato, oppure una delle due deve essere uno scalare.
Gli op relazionali sono usati nei test condizionali (if…end,while…end), ma le matrix di tipo logical possono essere usate per selezionare elementi di una matrix.
Esempio
Ciclo while…end
while condizione
blocco di istruzioni
end Ciclo condizionato
Nel ciclo for si ripete il blocco d’istruzioni tot volte.
In molte circostanze si ha la necessità di ripetere un certo numero di operazioni diverse volte a seconda che una certa condizione sia verificata oppure no. In questo caso si utilizza il costrutto while.
Condizione è un’espressione che MATLAB valuta numericamente e che viene interpretata come vera se diversa da zero.
If…else…end
if condizione1
blocco di istruzioni
elseif condizione2
blocco di istruzioni
else
blocco di istruzioni
end Test condizionale
opzionali
I comandi che seguono elseif sono eseguiti se condizione2 è vera
I comandi che seguono else sono eseguiti se le precedenti condizioni sono false
coinvolge un operatore relazionale.
Se condizione1 è vera si eseguono i comandi
Il primo blocco di istruzioni sarà eseguito solo se la Condizione1 è verificata, il secondo solo se la Condizione1 risulta essere falsa e la Condizione 2 vera e così via.
Il blocco di istruzioni che segue else sarà eseguito soltanto se nessuna delle precedenti condizioni risulti essere vera.
Il test condizionale è usato quando si vuole che un comando venga eseguito solo se è verificata una certa condizione
Esempio
per stampare
una stringa
Comandi “utili”
break -> per uscire in maniera forzata da un ciclo
MATLAB salta all’istruzione che termina il ciclo
return -> interrompe l’esecuzione della funzione
si ritorna al programma da cui la funzione è stata chiamata
Osservazione:
Privilegiare operazioni vettoriali ai cicli for…end e while…end
Il comando break consente di uscire in maniera forzata da un ciclo. Quando il comando break `e eseguito MATLAB salta automaticamente all’istruzione end che termina il ciclo.
Un comando che svolge una funzione analoga in MATLAB è return. La differenza è che return interrompe l’esecuzione della
funzione e ritorna al programma da cui tale funzione era stata chiamata.
Input\output
n = input(‘inserisci un intero’);
s = sprintf(‘n = %d’,n);
disp(s) disp(‘stringa di caratteri’) input
sprintf
disp
Un modo di costruire stringhe di caratteri per l’output di testo è fornito dalle funzioni fprintf e sprintf mutuate direttamente dal linguaggio C.
La funzione input è stata utilizzata per assegnare un valore al numero n. La sintassi della funzione è
Variabile=input(Stringa di caratteri)
ed attende un ingresso da tastiera di un’espressione MATLAB da assegnare a Variabile. Il valore assegnato potrà quindi essere di tipo scalare, vettore oppure matrice utilizzando la sintassi standard di MATLAB.
Esercizio 3
function x = risolvi_sistema_quadrato(A,b) Scrivere una funzione che ha
come output la soluzione del sistema Ax=b
verificare
A quadrata
A non singolare
nel caso di A singolare o quadrata ritornare una scritta di errore
Esercizio 4
function r = fattoriale(n) Scrivere una funzione che dato in input un intero positivo n restituisca il suo fattoriale
fare i test su n (n intero, positivo)
Comments