Introduzione a Matlab Gabriella Puppo. Che cosa è Matlab Matlab è §un linguaggio di programmazione §un ambiente di calcolo scientifico con routines altamente.

Slides:



Advertisements
Presentazioni simili
Equazioni non lineari Gabriella Puppo.
Advertisements

Dipartimento di Matematica
Metodi numerici in Matlab
Introduzione a Matlab Gabriella Puppo.
MATLAB Cristina Campi
MATLAB.
MATLAB.
Introduzione a MATLAB Stefano Vigogna Dipartimento di Matematica
MATLAB. Outline Grafica 2D Esercizi Grafica 3D Esercizi.
MATLAB.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
MATLAB Stefano Gagliardo
Algoritmi e Programmazione
Introduzione a Matlab. Che cosa è Matlab Matlab è §un linguaggio di programmazione §un ambiente di calcolo scientifico con routines altamente specializzate.
1 a lezione - laboratorio a.a Corso di Laurea Ingegneria MECCANICA.
2 a lezione - laboratorio a.a Corso di Laurea Ingegneria MECCANICA.
3 a lezione - laboratorio a.a Corso di Laurea Ingegneria MECCANICA.
Linguaggio MATLAB: costrutti tipici (IF,WHILE…)
Matlab Annalisa Massini Matlab.
Matlab Annalisa Massini Matlab.
MATLAB. Annalisa Pascarella
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB. Annalisa Pascarella
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Interpolazione polinomiale a tratti
Metodi iterativi G. Puppo.
Algebra lineare G. Puppo.
Esercizi di riepilogo Gabriella Puppo.
Soluzione FEM di problemi parabolici
Metodi FEM per problemi ellittici
Interpolazione polinomiale
Metodi iterativi semplici G. Puppo. Riassunto Problema del fill-in Memorizzazione di matrici sparse Metodo di Jacobi.
FEM -2 Gabriella Puppo.
Metodi FEM per problemi ellittici lineari a tratti Gabriella Puppo.
Metodi FEM in 2D G. Puppo.
Metodi numerici per equazioni lineari iperboliche Gabriella Puppo.
Metodi conservativi per equazioni iperboliche
Funzioni matematico – statistiche I comandi matematici di più comune utilizzo, applicabili a scalari e matrici, sono: Sqrt(x), che calcola la radice quadrata.
Uso dei cicli y t =c+ty t-1 +e Un uso dei cicli può essere quello di creare una serie storica per cui y t =c+ty t-1 +e dove poniamo c e t scalari ed e~N(0,1).
Trimr Gauss, tra le altre, fornisce una preziosissima funzione che risulta di estrema utilità nell’ambito matriciale. Questa funzione, chiamata trimr(x,t,b),
Creazione di matrici Delimititatore di riga Delimititatore di matrice
Marco Panella MATLAB Marco Panella
Algebra matriciale e linguaggio matriciale in MATLAB
3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a
1a-2a lezione di laboratorio
ORGANIZZAZIONE DELLA PRESENTAZIONE
Esercitazione 2 – Generazione di variabili Matlab.
INTRODUZIONE A MATLAB.
INTRODUZIONE A MATLAB LEZIONE 4 Sara Poltronieri slide3.4 matlabintro
Università degli Studi di Bari Laurea in Chimica Di spense di Informatica - Dott. F. Mavelli Programmare in Matlab Funzioni di Libreria Funzioni definite.
Lezione 3 Vettori e Matrici.
Diagrammi 2D e 3D Funzioni di ordine superiore
Università degli Studi di Bari Laurea in Chimica Di spense di Informatica - Dott. F. Mavelli Vettori e Matrici Parte III.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Script 1 Marco D. Santambrogio – Ver. aggiornata al 2 Dicembre 2013.
File e Funzioni Si possono distinguere tre tipi di file che vengono utilizzati in MATLAB: M-file: hanno estensione .m e in essi vengono memorizzati i.
Elementi di Matlab e di Mathematica
Esercitazione 1 - Introduzione Matlab. MATrix LABoratory Command window Current Directory Comandi recenti Variabili correnti Contenuto cartella corrente.
Esercitazione 1 - Introduzione Matlab. MATrix LABoratory Command window Current Directory Comandi recenti Variabili correnti Contenuto cartella corrente.
Analisi di Immagini e Dati Biologici Introduzione al linguaggio di MATLAB/OCTAVE Parte 2 16 L5.
Introduzione a Javascript
INTRODUZIONE A MATLAB LEZIONE 2 Sara Poltronieri.
INTRODUZIONE A MATLAB Sara Poltronieri. Avvio del programma Avvio di Matlab (Windows) Start  Programmi  Matlab (o icona) Avvio di Matlab (Linux) terminale.
Metodologia della ricerca e analisi dei dati in (psico)linguistica 25 Giugno 2015 Introduzione ad R
Introduzione a Matlab. Roadmap Saranno presentate le caratteristiche di base del sistema MATLAB TM (MATrix LABoratory) Operazioni elementari su scalari,
INTRODUZIONE A MATLAB Corso di Segnali e Sistemi a.a. 2010/2011.
Transcript della presentazione:

Introduzione a Matlab Gabriella Puppo

Che cosa è Matlab Matlab è §un linguaggio di programmazione §un ambiente di calcolo scientifico con routines altamente specializzate §un ambiente grafico

Argomenti trattati §Matlab come calcolatrice §Inserire comandi, vettori, matrici §Operazioni su vettori §Cicli §File.m e functions §Grafici

Matlab come calcolatrice Per usare Matlab come calcolatrice, inserisco i comandi dopo il >>. Per esempio: >> 2+1 ans = 3 Oppure: >> log(4) ans = Matlab normalmente stampa solo le prime 4 cifre decimali, ma in realtane memorizza molte di piu. Per vederle tutte: >> format long >> log(4) ans =

Help online Matlab ha un ricco help online. Per accedere alle informazioni, basta digitare help nella finestra dei comandi: >> help HELP topics: matlab\general - General purpose commands. matlab\ops - Operators and special characters. matlab\lang - Programming language constructs. matlab\elmat - Elementary matrices and matrix manipulation. matlab\elfun - Elementary math functions. matlab\specfun - Specialized math functions. matlab\matfun - Matrix functions - numerical linear algebra. … etc.

Per avere informazioni su una particolare function, per esempio, eye: >> help eye EYE Identity matrix. EYE(N) is the N-by-N identity matrix. EYE(M,N) or EYE([M,N]) is an M-by-N matrix with 1's on the diagonal and zeros elsewhere. EYE(SIZE(A)) is the same size as A. See also ONES, ZEROS, RAND, RANDN.

Per cercare informazioni su un particolare argomento, si usa il comando lookfor (look for = cerca) >> lookfor logarithm LOGSPACE Logarithmically spaced vector. LOG Natural logarithm. LOG10 Common (base 10) logarithm. LOG2 Base 2 logarithm and dissect floating point number. BETALN Logarithm of beta function. GAMMALN Logarithm of gamma function. LOGM Matrix logarithm. Loutput di lookfor contiene i nomi di tutte le functions che presentano la parola logarithmnel loro help.

Inserire comandi, vettori e matrici Per inserire comandi, basta digitare il comando al prompt per esempio: >> pi ans = Matlab crea una variabile ans a cui assegna il valore richiesto (in questo caso pi greco). Anche qui: >> format long >> pi ans =

Per inserire matrici, si usano parentesi quadre: il comando: >> a=[2, 3; 1, 2] produce in output: a = Notare che non cè nessun bisogno di dimensionare la matrice: Matlab infatti attribuisce automaticamente la memoria richiesta. Attenzione! Matlab automaticamente stampa loutput di ogni comando: per eliminare questa risposta è necessario terminare il comando con un ; Questo comando, per esempio, non produce nessun output: >> a=[2, 3; 1, 2];

E possibile costruire matrici automaticamente: >> a=zeros(2) a = 0 0 crea una matrice 2 per 2 di zeri, mentre: >> a=zeros(2,3) a = crea una matrice 2 per 3. N.B. Le functions di Matlab (come zeros) possono accettare un numero variabile di elementi in input. Analogamente funzionano le functions ones (che genera matrici di 1), rand (che genera matrici di numeri casuali), eye (che genera le matrici identità).

Column notation Il carattere : indica un ciclo implicito, che si usa per creare vettori: >> x=1:5 x = Si può introdurre anche un incremento non intero: >> x=1:.1:2 x = Columns 1 through Columns 9 through

Operazioni su vettori Matlab esegue automaticamente le operazioni algebriche sulle matrici: >> a=ones(2,3); >> b=ones(2,3); >> a+b ans = o anche: >> a=2*eye(2) a =

Naturalmente, le operazioni richieste devono essere ben definite: >> a*b ??? Error using ==> * Inner matrix dimensions must agree. Perché il prodotto fra matrici è definito solo quando il numero di colonne della prima matrice e il numero di righe della seconda coincidono. Posso invece moltiplicare a per la trasposta di b. Per calcolare la trasposta: >> b' ans = 1 1 ora il prodotto è ben definito: >> a*b' ans = 3 3

Si possono calcolare funzioni di matrici: >> a=zeros(1,2) a = 0 0 >> b=cos(a) b = 1 1 Con questo sistema è possibile calcolare in modo vettoriale i valori di una funzione: >> x=1:0.1:2; >> fx=cos(3*x)+2;

Per calcolare un prodotto, una potenza o un quoziente, Matlab distingue due operatori diversi. Nel caso del prodotto per esempio: * denota il prodotto fra due matrici.* denota il prodotto fra le singole componenti La stessa distinzione vale per / (quoziente) e ^ (potenza) Esempio >> x=1:0.1:2; >> fx=cos(3*x)*exp(x); ??? Error using ==> * Inner matrix dimensions must agree. Il comando corretto è: >> fx=cos(3*x).*exp(x);

Un altro esempio: >> x=ones(2,2); >> x^2 ans = 2 2 >> x.^2 ans = 1 1 Infatti X^2 indica il prodotto della matrice (matrici) X con sé stessa, che è definito solo per matrice quadrate, cioè X^2 = X*X, mentre A=X.^2 indica la matrice con elementi A i,j = ( X i,j ) 2.

Operatori relazionali Gli operatori relazionali più comuni sono: == uguale ~= diverso da < minore di <= minore o uguale etc. Esempi: >> x=2; >> x==0 ans = 0 >> x==2 ans = 1 (questa relazione efalsa:) => ans=0 (questa relazione è vera:) => ans=1

Gli operatori relazionali possono essere applicati anche alle matrici: >> a=[1 2; 0 -1]; >> a>0 (qui i primi due elementi sono veri) ans = >> a>=0 (qui i primi tre elementi sono veri) ans =

Operatori logici Gli operatori logici più comuni sono: & and logico | or logico ~ not logico Esempi: >> x=1; y= -1; >> x>0 & y>0 (questa relazione è falsa) ans = 0 >> x>0 | y>0 (questa relazione è vera) ans = 1

Ciclo if … elseif …end Il ciclo basato su if ha la struttura: if espressione istruzioni end Esempio: >> a=[1,4]; >> if a>0 sqrt(a) end ans = 1 2 Le istruzioni vengono eseguite solo se espressione è vera, cioè se espressione è diversa da zero. >> if cos(2) display('ciao') end Esempio:

Un esempio piu complicato: if x=='domenica' | x=='sabato ' display('Evviva!') elseif x=='venerdi ' display('Torno a casa') else display('Vado al Poli') end Se imposto: ans = Evviva! >> x='sabato ' ottengo: In questo esempio, x deve sempre essere impostato come variabile di 8 caratteri

Ciclo for … end Il ciclo for ha la struttura: for variabile = espressione istruzioni end Di solito espressione è un vettore: >> s=0; >> for i=1:10 s=s+i; end >> s s = 55 calcola la somma dei primi 10 numeri interi

I cicli for possono essere uno dentro laltro: >> n=4; >> for i=1:n for j=1:i a(i,j) = 1; end Crea una matrice triangolare inferiore: >> a a =

Non sempre i cicli hanno indici interi. Per esempio: >> for x=[pi, 51, -72.1] display(x) end in output produce questo risultato: x = x = 51 x = -72.1

Ciclo while … end Il ciclo while ha la seguente struttura while espressione istruzioni end Esempio >> i=1; >> while i<5 i=i+1; end >> i i = 5

Calcolare la precisione di macchina §Devo calcolare un numero x=2^(-p) tale che 1=x+1 §.§. %Calcola la precisione di macchina p = 0; epsilon=1; while 1~=1+epsilon epsilon = epsilon/2; p = p+1; end epsilon=epsilon*2, p=p-1, N.B. Il ciclo viene eseguito una volta di troppo, per questo nellultima riga i valori di epsilon e di p vengono corretti

Eseguendo il programma precedente, troviamo: epsilon = e-016 p = 53 Questo è lo stesso valore contenuto nella variabile intrinseca eps, che contiene appunto la precisione di macchina: >> eps ans = e-016

Calcolare il piu piccolo numero floating point §Devo trovare un numero della forma x=2^p tale che x sia considerato 0. % Calcola il piu' piccolo numero floating point della % forma xmin=2^p x=1; while x>0 xmin = x; x=x/2; end xmin

Risultati: Il piu piccolo numero floating point è >> xmin xmin = e-324 Notare che se dimezzo xmin, trovo: >> xmin/2 ans = 0

Il più grande numero floating point Il più grande numero floating point della forma 2^p è >> xmax xmax = e+307 Se raddoppio xmax, trovo >> xmax*2 ans = Inf

File.m e functions §Un file.m (M-file) è un programma riconoscibile da Matlab. La scrittura di files.m permette di: §Sperimentare con un algoritmo, senza dover reintrodurre una lunga lista di comandi §Ottenere una documentazione permanente per un lavoro §Ottenere programmi che possono essere riutilizzati, per esempio cambiando solo i dati §Scambiare programmi con altri utenti

Struttura di un file.m §Script M-files: sono files di comandi. Non hanno variabili in entrata e in uscita e operano sulle variabili del workspace §function M-files: sono files di comandi, che hanno argomenti in entrata e in uscita. Le variabili interne a questi programmi non influenzano le variabili del workspace I files.m sono di due tipi:

Commenti §Sia gli scripts che le functions devono contenere righe di commento. §I commenti sono segnalati da %: Matlab ignora tutti i caratteri di una riga dopo il % §Le prime righe di commento di uno script o di una function diventano parte dello help online

Esempio: file radice.m % Questo file calcola la radice degli elementi di % una matrice a, se a>0, altrimenti da' un messaggio di errore if a>=0 a=sqrt(a) else display('errore') end Attenzione: nel workspace deve essere stata definita una variabile a. Inoltre lesecuzione di questo script modifica il contenuto della variabile a

Function M-files Esempio function a=radfunz(x) % RADFUNZ(X) calcola la radice degli elementi di X % se X>=0, altrimenti stampa un messaggio di errore % if x>=0 a=sqrt(x) else display('errore') end Questo file deve essere salvato come radfunz.m

Struttura di una function §La function inizia con una riga che ne specifica il nome (nellesempio radfunz), le variabili di input e le variabili di output. §La function deve essere salvata in un file con lo stesso nome (nellesempio radfunz.m) §I commenti dopo la prima riga faranno parte dello help on-line §Seguono le istruzioni con eventuali altri commenti

Un altro esempio: function [xmin,xmax]=minmax(a) %MINMAX(A) calcola l'elemento minimo, XMIN, e lelemento % massimo, XMAX della matrice A. xmin=Inf; xmax=-Inf; % ricava le dimensioni della matrice A: [m,n] = size(a); for i=1:m for j=1:n if a(i,j) > xmax xmax = a(i,j); end if a(i,j) < xmin xmin = a(i,j); end

function [out1,out2,…]=funz(in1,in2,….) §Gli argomenti in output vanno a sinistra dell =, fra [ ] §Gli argomenti in input vanno a destra dell =, fra ( ) §Posso usare un numero di argomenti minore di quello indicato nella definizione della function, sia in entrata che in uscita. §Per esempio: a=funz(b), assegna a in1 il valore b, e ad a il valore out1 La function precedente ha la seguente struttura

Grafici §Preparare un vettore di ascisse §Preparare un vettore di ordinate §Fare il grafico §Esempio: grafico di cos(4x)*exp(x), su [0,2] Per ottenere il grafico di una funzione, devo: >> x=0:0.01:2; >> f=cos(4*x).*exp(x); >> plot(x,f)

Esempio. Grafico di una circonferenza >> t=0:0.01:2*pi; >> x=cos(t); >> y=sin(t); >> plot(x,y,'g+') >> axis equal

Calcolo della norma 2 di una matrice 2 X 2 function c=norma(a) %NORMA(A) fornisce una stima della norma 2 di una matrice 2 per 2 %costruisce il cerchio unitario e ne stampa il grafico: t=0:0.05:2*pi; x=cos(t); y=sin(t); plot(x,y) axis equal hold on

%calcola a*[x;y] e stampa il grafico di ogni punto c=0; for i=1:length(t) b=a*[x(i); y(i)]; plot(b(1),b(2),'g+') nb = sqrt( b(1)^2 +b(2)^2 ); if nb>c c=nb; end …il listato continua...

Esempio di cancellazione numerica Calcolare (1-x)^6 con le due formule: y1 = (1-x)^6 y2 = 1-6x +15x^2 -20x^3 +15x^4 -6x^5 +x^6 e confrontare y1 e y2 in un intorno di uno

Esempio di cancellazione numerica %Calcola (1-x)^6 con le due formule: %y1 = (1-x)^6 %y2 = 1-6x +15x^2 -20x^3 +15x^4 -6x^5 +x^6 %e confronta y1 e y2 in un intorno di uno % k = 0 for delta = [0.1, 0.01, 0.005, ] h = delta/100; x = 1-delta:h:1+delta; y1 = (1-x).^6; y2 = 1 -6*x +15*x.^2 -20*x.^3 +15*x.^4 -6*x.^5 + x.^6; k = k+1; subplot(2,2,k) plot(x,y1) hold plot(x,y2,'g') axis([1-delta 1+delta -max(abs(y2)) max(abs(y2)) ]) end

Loutput dello script precedente è:

Istruzione subplot Listruzione subplot(M,N,K) crea una figura contenente M*N grafici, distribuiti su M righe ed N colonne. Lindice K indica che le istruzioni seguenti si riferiscono al K-esimo grafico, con K che varia fra 1 e M*N

Esercizi 1) Scrivere una function cha calcoli il valor medio di una sequenza di numeri assegnati. 2) Scrivere una function che produca una matrice quadrata di zeri, con degli 1 sulla diagonale che scende da destra verso sinistra. 3) Scrivere una function che disegni un rettangolo, centrato sullorigine, con i lati assegnati in input. 4) Scrivere una function che disegni leffetto di una matrice 2 X 2 assegnata, sul segmento S: