logo
  • userLoginStatus

Welcome

Our website is made possible by displaying online advertisements to our visitors.
Please disable your ad blocker to continue.

Current View

Mathematical Engineering - Matematica Numerica

Introduction to matlab - slides

Other

IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Matlab in 45' Introduzione a Matlab Andrea Manzoni MOX - Dipartimento di Matematica Matematica Numerica CdL in Ingegneria Matematica26 febbraio 2019 IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Introduzione Matlab r e un software per il calcolo scienti co, particolarmente adatto a trattare numerosi problemi di interesse in applicazioni ingegneristiche. Ulteriori pacchetti mettono a disposizione dell'utente metodi per l'analisi statistica, il machine learning, tecniche per l'imaging e molto altro ancora. Matlab e un linguaggio interpretato, ovvero ogni linea di un programma Matlab viene letta, interpretata ed eseguita sul momento.Per accedere a Matlab in ambiente unix digitate matlabin un terminale. Matlab ha un'interfaccia gra ca interattiva e una linea di comando (prompt >>) sulla quale si possono inserire dei comandi. Ad esempio, per uscire da Matlab, scrivere: >> quit IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Introduzione IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Aiuto in linea Matlab r o re un help in linea molto completo. Comporre >> help command per avere una spiegazione sul modo di utilizzo del comando Matlabr command. >> lookfor argomento per avere una lista di comandi Matlabr inerenti un certoargomento >> helpwin per aprire un help interattivo dei comandi matlab disponibili, classi cati per argomenti. IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Dichiarazione delle variabili e formato La dichiarazione di variabili in Matlab r segue le seguenti regole:tutte le variabili sono matrici;non si dichiara il tipodi variabile.>> a=5 variabile scalare(11) >> b=[4 6]vettore riga(12) >> c=[-5; 2]vettore colonna(21) >> d=[2 3; -1 7]matrice quadrata(22)In particolare, gli scalari sono considerati matrici 1 1, i vettori riga sono matrici 1n, i vettori colonna sono matricin1, dovene la lunghezza del vettore. In questi esempi abbiamo usato i seguenti operatori:separatore di righe: punto e virgola o invio separatore di colonna: virgola o spazio bianco IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Dichiarazione delle variabili e formato I numeri reali sono visualizzati con solo quattro cifre decimali; tuttavia, la rappresentazione interna contiene sempre 16 cifre signi cative. Il comandoformatpermette di modi care il formato di visualizzazione dei risultati ma NON la precisione con cui i calcoli vengono condotti: >> format tipo >> 1/7 produce i risultati elencati nella seguente tabella, in base altipousatotipo rat1 =7short0 :1429short e1 :4286e01short g0 :142856long0 :142857142857143long e1 :428571428571428e01long g0 :142857142857143 IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Variabili prede nite Alcune variabili, proprie di Matlab, non necessitano di alcuna de nizione: >> pi: il numerop= 3:141592653589793: : :; >> i, j: l'unita immaginariap 1 (entrambe le varabili prede nite la contengono); >> exp(1): il numero di Neperoe= 2:718281828459046: : : Attenzione!le variabili prede nite possono essere ride nite, ovvero: >> a = 5 + 2 * ia =5.0000 + 2.0000i >> i = 2i =2 >> a = 5 + 2 * ia =9 IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Workspace Matlab permette di conoscere numerose informazioni sulle variabili dichiarate. comandoazione whoElenca le variabili in memoria whosElenca le variabili, il tipo e la dimensione di memoria occupata size (a)Fornisce le dimensioni di aclearCancella tutte le variabili clear varCancella la variabile varclcCancella tutte le istruzioni a schermo Per queste informazioni e possibile usare anche l'interfaccia gra ca di Matlab. IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Operazioni fondamentali Operazioni matriciali Le operazioni matriciali piu comuni sono de nite da+, -, *, /, ^>> C = A + B somma tra matrici,C ij= A ij+ B ij >> C = A * Bprodotto tra matrici,C ij= å kA ikB kj >> C = A / Bdivisione matriciale,C=AB 1 >> C = A^3elevamento a potenza di una matrice (C = A*A*A)Tali operazioni sono ben de nite a patto che le matrici abbiano delle dimensioni coerenti:Per l'addizione, A+B,AeBdevono avere le stesse dimensioni;per il prodotto A*B, il numero delle colonne diAe il numero delle righe di Bdevono essere uguali;le operazioni A/BeB^3richiedono una matriceBquadrata. IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Operazioni matriciali Ad esempio: A = [1 2 3; 4 5 6]; B = [7 8 9; 10 11 12]; C = [13 14; 15 16; 17 18]; A + B ans =8 10 12 14 16 18 A + C ??? Error using ==> + Matrix dimensions must agree. A * C ans =94 100 229 244 A * B ??? Error using ==> * Inner matrix dimensions must agree. IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Operazioni elemento per elemento (o puntate) Per eseguire delle operazioni matriciali elemento per elemento, occorre far precedere l'operatore da un punto. Gli operatori elemento per elemento sono quindi.* ./ .^>> C = A .* B prodotto elemento per elemento,C ij= A ijB ij >> C = A ./ Bdivisione elemento per elemento,C ij=A ijB ij >> C = A.^3elevamento a potenza,C ij= A3 ij IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Ad esempio: dati >> a = [ 1 3 5 6 ]; >> b = [ 4 6 4 8 ];operazioneazione b + 3Somma lo scalare 3 a tutti gli elementi di ba - 3Sottrae lo scalare 3 a tutti gli elementi di aa .* bMoltiplica gli elementi di aebdi posto corrispondentea ./ bDivide ogni elemento di aper il corrispondente elemento diba . bnEleva alla potenza ntutti gli elementi diaTutte le operazioni elemento per elemento sono contraddistite dal \." che precede il simbolo dell'operazione, ad eccezione di somma e sottrazione. IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Funzioni matematiche elementari Le funzioni matematiche elementari restituiscono matrici o vettori della stessa dimensione della variabile cui e applicata la funzione. Data una matriceA:funzioneazione abs(A)Valore assoluto degli elementi di Asqrt(A)Radice quadrata degli elementi di Aexp(A)Funzione esponenziale di ogni elemento di Alog(A)Logaritmo naturale di ogni elemento di Alog10(A)Logaritmo in base 10 di ogni elemento di Alog2(A)Logaritmo in base 2 di ogni elemento di Asin(A)Seno di ogni elemento di A(conAin radianti)cos(A)Coseno di ogni elemento di A(conAin radianti)tan(A)Tangente di ogni elemento di A(conAin radianti) vasin(A)Arco seno di ogni elemento di A(in radianti)acos(A)Arco coseno di ogni elemento di A(in radianti)atan(A)Arco tangente di ogni elemento di A(in radianti)sinh(A)Seno iperbolico di ogni elemento di Acosh(A)Coseno iperbolico di ogni elemento di Atanh(A)Tangente iperbolica di ogni elemento di A IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Operazioni sulle matrici: estrazione di sotto-matrici Una volta de nita la matrice A(ad esempio, la matrice quadrataAdi dimensionen), Matlab permette di operare come segue susotto-matricidiA.funzioneAzione: estrae... A(1,1)l'elemento di posto (1,1) di AA(:,1)la prima colonna di AA(1,:)la prima riga di AA(1:3,:)le prime tre righe di AA([1,3],:)la prima e la terza riga di AA(1:3,1:3)la sottomatrice costituita dalle prime 3 righe e 3 colonne di AA(2:4,[1,3])la sottomatrice costituita dalle righe 2, 3, 4 e dalle colonne 1, 3 di A IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Operazioni sulle matrici: costruzione di matrici particolari Matlab permette di de nire matrici particolari: una volta de niti gli interi n,m e il vettorev, A = eye(n)matrice identitann A = diag(v)matrice diagonale aventevcome diagonale A = zeros(n,m)matrice di 0 connrighe emcolonne A = ones(n,m)matrice di 1 connrighe emcolonne A = rand(n,m)matrice aleatoria (a ij2 (0;1)) connrighe emcolonne x = [inizio:step:fine ]vettore riga di punti equidistribuiti con passosteptrainizioefine x = linspace(inizio,fine,N)N punti equidistribuiti trainizioefine IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot funzioneAzione diag(A)Estrae la diagonale principale di Adiag(A,1)Estrae la sopradiagonale di ordine 1 di Adiag(A,-1)Estrae la sottodiagonale di ordine 1 di Adiag(A,k)Estrae la sopra/sottodiagonale di ordine kdiA;se la dimensione di Aen,kpuo variare da-n+1an-1diag(b)Costruisce una matrice quadrata diagonale con gli elementi di bsulla diagonale principale diag(b,k)Costruisce una matrice quadrata con gli elementi di bsullasopra/sottodiagonale di ordine k. IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Operazioni fondamentali su matrici Sia Auna matrice; Matlabr permette di e ettuare numerose operazioni su una matrice, tra le quali ricordiamo le piu ricorrenti: >> C = A'trasposta diA,C ij= A ji >> C = inv(A)inversa1 diA(matrici quadrate),C=A 1 . >> d = det(A)determinante diA(matrici quadrate) >> r = rank(A)rango diA >> nrm = norm(A)norma 2 diA >> cnd = cond(A)numero di condizionamento (in norma 2) diA >> v = eig(A)autovalori (e autovettori) diA(matrici quadrate)1 Warning: L'utilizzo del comandoinvcomporta il calcolo esplicito della matrice inversa. Questo algoritmo e particolarmente oneroso e sostanzialmente da evitare. IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot La funzione normInput: un vettore ve un numero interopoppureinf. Se viene passato solo il vettore, calcola la norma 2 (norma euclidea) div, jjvjj 2=v u u tlength (v) å i=1v 2 i: Se viene passato un numero interop, calcola la normapdivde nita come jjvjj p= length(v) å i=1j v ijp! 1p : Se viene passato come secondo argomentoinf, calcola la norma in nito div, jjvjj ¥= max 1ilength(v)j v ij :operazioneazione norm(v)Calcola la norma euclidea (norma 2) di vnorm(v,1)Calcola la norma 1 di vnorm(v,2)Calcola la norma euclidea (norma 2) di vnorm(v,inf)Calcola la norma in nito di v IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Istruzioni di controllo Ciclo for Se si vuole eseguire delle istruzioni in sequenza per ciascun valore i=m;m+ 1; : : : ;n di una variabileitra i limitimen, si puo utilizzare l'istruzionefor. Ad esempio, per calcolare il prodotto scalarepstra due vettorixeydi dimensione nsi puo utilizzare: >> ps = 0; >> for i = 1:n; >> ps = ps + x(i)*y(i); >> end; Questo ciclo e equivalente al prodotto matricialexT y(anche se computazionalmente molto meno eciente); supponendo che i vettori siano stati de niti come vettori colonna: >> ps = x'*y; IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Istruzioni di controllo Ciclo while Se si vuole eseguire un'istruzione ntantoche una certa espressione logica e vera, si utilizza l'istruzionewhile. Ad esempio, lo stesso calcolo eseguito precedentemente con un cicloforpuo essere eseguito in modo analogo con: >> ps = 0; >> i = 0; >> while (i < n); >> i = i + 1; >> ps = ps + x(i)*y(i); >> end; IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Istruzioni di controllo Se si vuole eseguire un'istruzione soltanto se una certa espressione logica e vera, si utilizzaif. Ad esempio, se si vuole calcolare la radice quadrata di una variabile scalarersoltanto se essa e non negativa : >> if (r >= 0) >> radice = sqrt(r); >> end; Se si vuole che una diversa istruzione venga eseguita se l'espressione logica e falsa, si utilizza il costruttoif-else. Ad esempio: >> if (r >= 0) >> radice = sqrt(r); >> else >> disp('r ha valore negativo'); >> end; IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Operatori logici OperatoreAzione logica &and |or ~notOperatoreAzione logica ==uguale a ~=diverso da >=maggiore o uguale > t = [4 5]; >> cubica(t) ans = 63 124 IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot >> cubicaR2 = @(x,y) x.^3+y.^3 cubicaR2 =@(x,y) x.^3+y.^3 >> cubicaR2(2,4) ans =72 Le funzioni anonime permettono di trattare funzioni in maniera molto naturale, senza bisogno di utilizzare un comando dedicato alla valutazione comeevalo feval. In generale la sintassi e f = @(lista argomenti) espressione; e per valutare lafbasta scrivere f(argomento)Le funzioni anonime permettono di de nire funzioni a partire da comandi Matlabqualsiasi. Ad esempio, la funzione rho = @(A) max(abs(eig(A))); calcola il raggio spettrale di una matriceA. IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot M- le Una funzioneMatlab puo anche essere implementata in unoscriptal quale e possibile passare parametri in ingresso ed ottenerne in uscita.Le variabili utilizzate durante l'esecuzione della funzione vengono automatica- mente cancellate dalla memoria al termine della stessa.Il le .mdovra essere salvato con il nome della funzione e dovra essere visibile a Matlabr nell'area di lavoro (ovvero posizionato nella cartella corrente)A di erenza di uno script standard, la sintassi di una funzione richiede che la prima riga del le abbia la struttura function [Output1,Output2,...] = nomefunzione(Input1,Input2,...) dove le parentesi quadre possono essere omesse se l'output e uno solo. E buona norma inserire alcune righe di commento (precedute dal carattere%) dopo la de nizione, che possono essere visualizzate tramite il comando >> help nomefunzione IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Successivamente saranno inserite le istruzioni del corpo della funzione.Esempio(function det2.m) function [det]=det2(A) %DET2 calcola il determinante di una matrice quadrata di ordine 2 [n,m]=size(A); if n==m if n==2det=A(1,1)*A(2,2)-A(2,1)*A(1,2); elseerror('Solo matrici 2x2'); end elseerror('Solo matrici quadrate'); end return IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Disegnare gra ci di funzione Il comando plot Si usa per disegnare il gra co dif:R!R, e riceve in ingresso:due vettori xey(delle stesse dimensioni) contenenti ascisse ed ordinate dei punti del gra co (il gra co e disegnato unendo tali punti con segmenti).i comandi opzionali con cui speci care le caratteristiche del gra co >> x=[0:0.01:3]; >> plot(x,cubica(x)) 0 0.5 1 1.5 2 2.5 3 −5 0 5 10 15 20 25 30 IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Per tracciare piu gra ci sulla stessa gura, si usa il comandohold on. Si torna allo stato precedente conhold off. Per aprire una nuova nestra gra ca si usa il comandofigure. >> figure; >> plot(x,cubica(x)); >> hold on; >> plot(x,parabola(x),'r')Digitando help plotsi ottiene una panoramica sulla possibile formattazione. 0 0.5 1 1.5 2 2.5 3 −10 −5 0 5 10 15 20 25 30    cubica parabola IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot >> x=[0:0.01:6]; >> f=@(x) 2+(x-3).*sin(5*(x-3)); >> r1=@(x) -x+5; >> r2=@(x) x-1; >> plot(x,f(x),'k'); >> hold on >> plot(x,r1(x),'--k') >> plot(x,r2(x),'--k') 0 1 2 3 4 5 6 −1 0 1 2 3 4 5 IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Gra ci in scala logaritmica I comandisemilogy,semilogxeloglogsono l'equivalente diplotma tracciano un gra co rispettivamente con l'asse delle ordinate in scala logaritmica, con l'asse delle ascisse logaritmico ed entrambi in scala logaritmica. >> x=[0:0.1:10]; >> semilogy(x,exp(x)) >> hold on; >> semilogy(x,exp(2*x),'-*g') 0 1 2 3 4 5 6 7 8 9 10 100 102 104 106 108 1010 IntroductionAiuto in lineaVariabiliWorkspaceOperazioniMatriciCicliScripts e functionsPlot Possiamo aggiungere molti dettagli al gra co:la griglia: >> grid onil titolo del gra co: >> title('Grafico di exp(x) e di exp(2x)')i titoli degli assi: >> xlabel('Scala lineare'); ylabel('Scala logaritmica')la legenda: legend('exp(x)','exp(2*x)','Location','NorthWest') 0 1 2 3 4 5 6 7 8 9 10 100 102 104 106 108 1010 Scala lineare Scala logaritmica Grafico di exp(x) e di exp(2x) exp(x) exp(2*x)