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