Peppepè Io voglio capire i seguenti punti.
1) Uno-- Perchè la funzione è stata "rifirmata", nel senso che da "(v)=analizza(A)" è stata chiamata "[matricola_più,matricola_meno]=analizza1(A)"? Che...bisogno c'era?
Ecco è proprio questo il punto: non ha alcuna importanza che la funzione sia stata rifirmata o meno, quello che importa è che ti restituisce quello che ti deve restituire!
2) Due
l'algoritimo le deve per forza restituire.
Quando si lancia una funzione, l'ans può essere considerata o no il vero output? Se sì, esso è unico. Se per
peppepeppo ha scritto:
l'algoritimo le deve per forza restituire.
intendi matricola max matricola min, allora si dovrebbero togliere i punti e virgola, anche perchè l'ans è una ed una sola e dà per giunta la matricola che guadagna più ndindi.
Quindi?
Il tuo output esiste a prescindere dal fatto che lo vedi o meno nella command e dal fatto che che sia o non sia messo in
ans. Il concetto è semplice: quando crei una funzione , la salvi e poi la lanci, matlab fa semplicemente quello che tu gli hai detto di fare . Ma tale funzione deve avere necessariamente uno scopo e quello scopo è il risultato. Una volta che matlab ti ha calcolato il risultato, o meglio, una volta che la funzione ha raggiunto il suo scopo, sono problemi tuoi dove vuoi che vada a finire il risultato della tua funzione.Una volta lanciata una funzione Matlab ti dice : ok io ho svolto i calcoli della tua funzione , ora se tu mi richiami dalla command in questo modo:
Caso I:
[matricola_piu,matricola_meno]=analizza1(A)
io i risultati che calcolo, nell'ordine in cui li trovo nella funzione, te li metto nello stesso ordine nelle variabili
matricola_piu,
matricola_meno.
Caso II:Allo stesso modo se mi richiami in questo modo:
[tizio,caio]=analizza1(A)
io ti salvo il primo risultato che trovo nella variabile
tizio e il secondo nella variabile
caio.
Caso III:Se , invece, mi richiami semplicemente così:
analizza1(A)
io (cioè sempre matlab) non so dove mettere il contenuto delle due variabili che tu hai messo nella tua firma di funzione (
[matricola_piu,matricola_meno]=analizza1(A)). Per cui di default ti metto il primo risultato utile che trovo e te lo salvo in
ans.Il secondo visto che non hai specificato dove vuoi che vada a finire, io te lo calcolo ma non te lo salvo perchè se non hai specificato dove vuoi che io lo salvi, allora io capisco che per questa volta non ti serve.
Caso IV:Se ancora mi richiami inserendo una sola variabile nell'output della firma, cioè facendo in questo modo:
[sempronio]=analizza1(A)
Io so dove mettere il primo risultato calcolato (e cioè
matricola_piu) ma non so dove mettere il secondo (e cioè
matricola_meno). Visto che di default (e per lo stesso ragionamento seguito per
ans al Caso III ) io uso la variabile
sempronio per restituirti a video e per salvarti il primo valore calcolato dalla funzione. Quindi poichè non mi hai suggerito dove salvare il secondo risultato della funzione, come invece mi avevi suggerito di fare nella firma (
[matricola_piu,matricola_meno]=analizza1(A)), io il secondo risultato te lo calcolo ma non te lo salvo e non te lo mostro!
Spero che il
monologo di MatLab ti chiarisca le idee!