Matlab Esercitazione 1 - Introduzione Matlab MATrix LABoratory Contenuto cartella corrente Current Directory Variabili correnti editor Command window Comandi recenti Matrici MATLAB tratta tutte le variabili come matrici I vettori sono forme speciali di matrici con una sola riga o colonna Gli scalari sono trattati come vettori con una sola riga e una sola colonna v_riga = [1 2 3]; v_colonna = [1; 2; 3]; matrice = [1 2 3; 4 5 6; 7 8 9]; 123 1 2 3 1 2 3 4 5 6 7 8 9 Istruzioni frequenti clear all ; close all F9 CTRL invio clc % commento %% per un codice più ordinato... help Help Contents getting started Matrices and arrays Expressions Working with matrices • Generating matrices More about • Linear algebra •Arrays Graphics (per approfondire sui grafici) • Using basic plotting functions Printable documentation Operatori Trasposizione (‘) Potenze (^ o .^) Moltiplicazione (* o .*) Divisione (/ o ./) 1 2 3 A = 1 0 1 2 4 3 Addizione (+) Sottrazione (-) Assegnamento (=) a^b o a.^b a*b o a.*b a/b o a./b 1 2 2 B = 2 3 1 0 1 2 A*B = 5 11 10 1 3 4 8 17 15 A .* B = 1 4 6 2 0 1 0 3 8 a+b a-b a=b a’ Estrazione di sotto-matrici 1 2 3 A = 1 0 1 2 4 3 A (:,:) = 1 2 3 1 0 1 2 4 3 A(1) A(1,1) A(4) A(1,2) A(7) A(1,3) A(2) A(2,1) A(5) A(2,2) A(8) A(2,3) A(3) A(3,1) A(6) A(3,2) A(9) A(3,3) A(1) A(1,1) A(2) A(1,2) A(3) A(1,3) A (: ,1) = 1 1 2 A (3,2) = 4 A(4) A(1,4) A (1 ,3) A (1 ,:) = 1 2 3 A (6) = 4 A (3) Operazioni su scalari x = 25 y = - 2.6 r = sqrt(x); sign(y) round(y) r=5 -1 abs(y) 2.6 -3 floor(y) -3 ceil(y) -2 floor(abs(y)) 2 Esempio1 : troncare un numero decimale a dec cifre dopo la virgola: x = 10,9845739; dec=2; n=((1/10^dec)*sign(x))*floor(abs(x*(10^dec)) Operazioni su vettori e matrici v= 1 3 2 size (v) [1 3] mean(v) 2 std(v) min (v) 1 max (v) 3 sum (v) 6 sort (v) 1 2 3 A = 1 0 1 2 4 3 size (A) length (A) min (A) [1 2 3] length (v) 3 1 3x3 9 101 max (A(:)) 4 max (A) 243 sum (A) [4 6 7] mean(A(:)), std(A(:)), var(A(:)), … sum (A(:)) 17 sum(A(:)), abs(A(:)) Matrici “notevoli” 0 0 0 0 0 0 0 0 0 zeros (3) ones (1,3) linspace(a, b, n) n a rand (1,3) randn(1,3) 0.8147 0.9134 [1 1 1] 0.2785 distribuzione uniforme [0 1] distribuzione gaussiana a media nulla Esempio 2a: costruire una matrice con diverse distribuzioni sulle righe: X=zeros(3,100) %inizializzazione X(1, :) = rand(1,100); X(2, :) = rand(1, 100); X(3, :) = randn(1, 100) n=100; X=zeros(3,n) %inizializzazione X(1, :) = rand(1, n); X(2, :) = rand(1, n); X(3, :) = randn(1, n) b Distribuzione uniforme m rand 0 1 ab m 2 ba 12 a b rand (b a) a Esempio 3: rand 12 m 3 m=1; sigma=10; M=10000 X=rand(1,M)*(sigma*sqrt(12))+m-sigma*sqrt(3) Esempio 2b Costruire una matrice con distribuzioni uniformi con diverse medie e varianze: • riga 1: media = 1, varianza = 10; • riga 2: media = 0, varianza = 10; • riga 3: media = 2, varianza = 1; m=[1 0 2]; sigma=[10 10 1]; M=100000 X(1,:)=rand(1,M)*(sigma(1)*sqrt(12))+m(1)-sigma(1)*sqrt(3) X(2,:)=rand(1,M)*(sigma(2)*sqrt(12))+m(2)-sigma(2)*sqrt(3) X(3,:)=rand(1,M)*(sigma(3)*sqrt(12))+m(3)-sigma(3)*sqrt(3) Istruzione for 1 for x = 1: p : M % comandi end 1 2 4 x=[1 1]; for i = 3:10 x(i)= sum(x); end 8 16 32 64 Esempio 2c Ottimizzare il codice dell’Esercizio 2b utilizzando un ciclo for: m=[100 0 2]; sigma=[10 10 1]; M=100000; X(1,:)=rand(1,M)*(sigma(1)*sqrt(12))+m(1)-sigma(1)*sqrt(3); X(2,:)=rand(1,M)*(sigma(2)*sqrt(12))+m(2)-sigma(2)*sqrt(3); X(3,:)=rand(1,M)*(sigma(3)*sqrt(12))+m(3)-sigma(3)*sqrt(3); m=[100 0 2]; sigma=[10 10 1]; M=100000; for i = 1 : length(m) X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3); end Distribuzione gaussiana 0 m Esempio: m=40; sigma=10; M=10000; X=randn(1,M)*sigma+m; randn m Plot close all x=1:0.1:20; y=sin(x); plot(x,y); figure(); x=rand(1,100) plot(x, ’.’); y=sort(x); figure(); plot(y); figure(); plot(y, ’.’); figure(); plot(y); hold on plot(y, ’.’) subplot(1,3,1);plot(y);subplot(1,3,2);plot(y, ’.’);subplot(1,3,3); stairs(y) subplot 1 2 3 4 5 6 1 2 subplot(2,3,1);plot(a) subplot(2,3,2);plot(b) ... subplot(2,3,6);plot(f) subplot(1, 2, 1); plot(a); subplot(1, 2, 2); plot(b); hist a=rand(1,100000); hist(a,100) b=rand(1,10000); hist(a) hist(b,100) hist(a,100) a=randn(1,100000); hist(b) hist(a) Esempio 2d Visualizzare gli istogrammi delle righe della matrice dell’esempio 2c: m=[100 0 2]; sigma=[10 10 1]; M=100000; for i = 1 : length(m) X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3); end figure(); hist(X(1,:)); figure(); hist(X(2,:)); figure(); hist(X(3,:)); figure(); subplot(1,3,1); hist(X(1,:)); subplot(1,3,2); hist(X(2,:)); subplot(1,3,3);hist(X(3,:)); Esempio 2e Ottimizzare il codice dell’Esercizio 2d utilizzando un ciclo for: m=[100 0 2]; sigma=[10 10 1]; M=100000; for i = 1 : length(m) X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3); end figure(); subplot(1,3,1); hist(X(1,:)); subplot(1,3,2); hist(X(2,:)); subplot(1,3,3);hist(X(3,:)); m=[100 0 2]; sigma=[10 10 1]; M=100000; figure(); for i = 1 : length(m) X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3); subplot(1,3,i); hist(X(i,:)); end