Home > Doc > Manuale Matlab > Strutture di controllo del flusso

Manuale Matlab

Strutture di controllo del flusso

MATLAB ha cinque strutture di controllo di flusso:

 if statements

 switch statements

 for loops

 while loops

 break statements

Analizzamole singolarmente in modo dettagliato.

 if statement

La struttura if valuta un’espressione logica ed esegue un gruppo di asserzioni quando l’espressione è vera. L’else if opzionale e altre keywords provvedono per l’esecuzione di gruppi alternati di asserzioni. Una keyword END termina l’ultimo gruppo di asserzioni. I gruppi di asserzioni sono delineati da quattro keywords non sono previste parentesi. L’algoritmo di MATLAB per generare una magic square di ordine n coinvolge tre casi diversi: quando n è dispari, quando n è pari ma non divisibile per 4, o quando n è divisibile per 4. Questo è descritto dal costrutto seguente:

In questo esempio, i tre casi sono mutuamente esclusivi, ma se loro non lo fossero, la prima condizione vera sarebbe eseguita. Tutto ciò è importante per capire come gli operatori relazionali e le strutture if lavorano con le matrici. Quando si vuole controllare l’uguaglianza tra due variabile, usare:

if A == B, ....

Questo è legale in MATLAB, e fa quello che ci si aspetta quando A e B sono scalari. Ma quando A e B sono matrici, A == B non esamina se loro sono uguali, esamina solo dove loro sono uguali; il risultato è un altra matrice di 0 e di 1 che espone l’uguaglianza elemento per elemento. Infatti, se A e B non sono della stessa taglia, allora A == B è un errore. Il modo corretto per controllare l’uguaglianza tra due variabile è quello di usare la funzione isequal:

if isequal(A,B), ...

Qui c’è un altro esempio per enfatizzare questo punto. Se A e B sono scalari, il programma seguente mai arriverà alla situazione inaspettata. Ma per la maggior parte delle matrici, includendo le nostre magic square con colonne scambiate nessuna delle condizioni seguenti A> B, A< B o A == B è vero per tutti gli elementi e così l’altra clausola è eseguita.

if A > B

'greater'

elseif A < B

'less'

elseif A == B

'equal'

else

error('Unexpected situation')

end

Molte funzioni sono utili per ridurre i risultati di paragoni tra matrici e condizioni scalari attraverso l’uso dell’IF, includendo le seguenti:

isequal

isempty

all

any

 switch e case

L’asserzione switch esegue gruppi di asserzioni basati sul valore di un variabile o espressione. La keywords case e otherwise delinea i gruppi. Solamente il primo caso è eseguito. Ci deve essere sempre una fine per lo statement switch .

La logica dell’algoritmo delle magic square può essere descritta anche con:

Diversamente dal linguaggio C, lo switch di MATLAB non sbaglia. Se la prima asserzione del case è vera, il restante case statement non è eseguito. Così, break statement non sono richiesti.

 for statement

Il loop for ripete un gruppo di asserzioni un numero fisso di volte . Un END statement termina le asserzioni.

for n = 3:32

r(n) = rank(magic(n));

end

r

Il punto e virgola che termina l’asserzione sopprime la stampa ripetuta, e il termine r dopo il loop espone il risultato finale. E' una buona idea per ordinare i loop al fine di una discreta leggibilità, identare il testo ad esempio:

 while statement Il ciclo while ripete un gruppo di asserzioni un numero indefinito di volte attraverso il controllo di una condizione logica. Un END delinea le asserzioni. Di seguito è riportato un programma completo, illustrando while, if, else, e end, il quale programma utilizza il metodo della bisezione per trovare uno zero di un polinomio.

Il risultato è la radice del polinomio x3 - 2x - 5 vale a dire:

x = 2.09455148154233

 break statemant L’asserzione break lascia che si esca velocemente da un loop FOR o WHILE.In un ciclo innestato,break esce dal ciclo interno solamente .Qui c’è un miglioramento sull’esempio fornito nella sezione precedente.

G. Ciaburro

Successivo: Scripts e Funzioni

Sommario: Index