MATLABMATLAB
……oggi…oggi…
Programmare in MatlabProgrammare in Matlab FunzioniFunzioni CicliCicli Operatori relazionaliOperatori relazionali
Indipendenza lineare, basi, sottospaziIndipendenza lineare, basi, sottospazi Esercizi variEsercizi vari
Le funzioni -1Le funzioni -1 ScriptScript
parametri in ingresso nn modificabiliparametri in ingresso nn modificabili le variabili usate sono messe nella memoria le variabili usate sono messe nella memoria
di lavoro di MATLABdi lavoro di MATLAB FunzioniFunzioni
script al quale si possono passare parametri script al quale si possono passare parametri in ingresso ed ottenerne in uscitain ingresso ed ottenerne in uscita
• sintassisintassi
• y1,…,yn -> parametri in uscitay1,…,yn -> parametri in uscita• x1,…,xn –> parametri in entratax1,…,xn –> parametri in entrata
le variabili usate all’interno sono le variabili usate all’interno sono localilocali
function [y1,…,yn] = nome_funzione(x1,…,xn)function [y1,…,yn] = nome_funzione(x1,…,xn)
Le funzioni -2Le funzioni -2 L’m file va salvato col nome nome_funzione.mL’m file va salvato col nome nome_funzione.m
il nome del file deve essere identico a quello della il nome del file deve essere identico a quello della funzionefunzione
La funzione puo’ essere richiamataLa funzione puo’ essere richiamata dalla finestra di comandodalla finestra di comando all’interno di uno scriptall’interno di uno script da altre funzionida altre funzioni
digitando [y1,…,yn]=nome_funzione(x1,…,xn)digitando [y1,…,yn]=nome_funzione(x1,…,xn) Per poter richiamare la funzione ci dobbiamo Per poter richiamare la funzione ci dobbiamo
mettere nella directory nella quale la salviamomettere nella directory nella quale la salviamo C:\UsersC:\Users
richiamiamo la funzione nella finestra di comando
EsempioEsempiocreiamo un m-file traccia.m nel quale implementiamo la funzione che calcola la traccia di una matrice
parametro in input
variabile temporanea
Ciclo for…endCiclo for…end
Ciclo incondizionatoCiclo incondizionato
for i = n1:passo:n2
blocco di istruzioni
end
EsercizioEsercizio
Scrivere una funzione che sommi gli Scrivere una funzione che sommi gli elementi di un vettore e moltiplichi il elementi di un vettore e moltiplichi il risultato per un intero n passato come risultato per un intero n passato come parametro di inputparametro di input
Scrivere una funzione che faccia la Scrivere una funzione che faccia la media degli elementi di una matrice Amedia degli elementi di una matrice A la funzione ha come input la matrix Ala funzione ha come input la matrix A la funzione ha come output la mediala funzione ha come output la media [r c] = size(A) restituisce il numero di righe [r c] = size(A) restituisce il numero di righe
e colonne della matricee colonne della matrice
Operatori 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
EsempioEsempio
Ciclo while…endCiclo while…end
Ciclo condizionatoCiclo condizionato
while condizione
blocco di istruzioni
end
If…else…endIf…else…end
if condizione1
blocco di istruzioni
elseif condizione2
blocco di istruzioni
else
blocco di istruzioni
end
Test condizionaleTest 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
EsempioEsempio
per stampare
una stringa
Comandi “utili”Comandi “utili”
break -> per uscire in maniera forzata da break -> per uscire in maniera forzata da un cicloun ciclo MATLAB salta all’istruzione che termina il MATLAB salta all’istruzione che termina il
ciclociclo return -> interrompe l’esecuzione della return -> interrompe l’esecuzione della
funzionefunzione si ritorna al programma da cui la funzione è si ritorna al programma da cui la funzione è
stata chiamatastata chiamata disp -> per stampare a video una stringadisp -> per stampare a video una stringa
disp(‘stringa di caratteri’)
Input\outputInput\output
inputinput sprintfsprintf
n = input(‘inserisci un intero’);
s = sprintf(‘n = %d’,n);
disp(s)
EserciziEsercizi Scrivere una funzione che ha Scrivere una funzione che ha
come input una matrice come input una matrice quadrataquadrata A e un vettore A e un vettore colonna bcolonna b
come output la soluzione x del sistema Ax=b come output la soluzione x del sistema Ax=b (dopo aver verificato che A è nn singolare)(dopo aver verificato che A è nn singolare)
• nel caso di A singolare ritornare una scritta di nel caso di A singolare ritornare una scritta di erroreerrore
Scrivere una funzione che dato in input un Scrivere una funzione che dato in input un intero positivo n restituisca il suo fattorialeintero positivo n restituisca il suo fattoriale fare i test su nfare i test su n
sono linearmenti indipendenti
Vettori l.i.Vettori l.i.n
mvvv R,,, 21
mikvkvkvk imm ,,1002211
)(0
)'(
)'(
1
1
111
1111
mnmArangoAk
aav
aa
aa
A
aav
nmmm
nmn
m
n
banale soluzione ha
Esempio - 1Esempio - 1
l.i. sono se vedere per
vvv
con)v,v,span(v V Sia
321
321
)021()112()201(
3
R
v1 = [1 0 2]’;
v2 = [2 1 1]’;
v3 = [1 2 0]’;
A = [v1 v2 v3]
rank(A)
il rango è 3 => i vettori sono l.i. e quindi formano una base per R3
Esempio - 2Esempio - 2
)2020()0101()1122()1021(
4
4321
4321
vvvv
con),vv,v,span(v V Sia R
v1 = [1 2 0 1]’;
v2 = [2 2 1 1]’;
v3 = [1 0 1 0]’;
v4 = [0 2 0 2]’;
A = [v1 v2 v3 v4]
rank(A)
il rango è 3 => i vettori sono l.d.
Esempio - 3 Esempio - 3 Per trovare una c.l. nulla a coefficienti nn Per trovare una c.l. nulla a coefficienti nn
tutti nulli t.c. tutti nulli t.c.
troviamo una soluzione nn nulla del troviamo una soluzione nn nulla del sistema omogeneo Ak = 0sistema omogeneo Ak = 0
044332211 vkvkvkvk
rref(A)
)0,1,1,1(),,,(
0000
1000
0110
0101
4321
kkkk
A
BasiBasi Dopo aver verificato che i vettori vDopo aver verificato che i vettori v11, v, v2, 2, vv3 3
sono una base di sono una base di RR33 esprimere v come c.l. esprimere v come c.l. dei vdei vii )111()101()110()011( vvvv 321
v1 = [1 1 0’]’;
v2 = [0 1 1]’;
v3 = [1 0 1]’;
v = [1 1 1]’;
A = [v1 v2 v3]
rank(A)
il rango è 3 => i vettori sono l.i.
i coefficienti lineari della combinazione si
trovano:k=A\v
)5.0,5.0,5.0(),,( 321 kkk
Esercizi - 1Esercizi - 1
i
321
321
321
321
w dei c.l. come
w esprimere di base una formano
www
vettori i che dimostrato aver Dopo
nulli nn ticoefficien a nulla c.l. una scrivere e l.d. sono
www
vettori i che Dimostrare
dimW la trovare
www
con)w,w,span(w W Dato
)333(
)411()422()521(
)121()110()011(
)1111()0213()4011(
3
4
R
R
Esercizi - 2Esercizi - 2
)1312()1312(
)1201()1110()1021(
4
21
321
321
vv
W in stanno vettori
seguenti i tra quali dire e dimW la trovare
www
con)w,w,span(w W Sia R
Scrivere una funzione che implementi la Scrivere una funzione che implementi la
backward substitution di un sistema backward substitution di un sistema Ax=b Ax=b
con A triangolare superiorecon A triangolare superiore
OsservazioniOsservazioni
Privilegiare operazioni vettoriali ai cicli Privilegiare operazioni vettoriali ai cicli for…end e while…endfor…end e while…end