Anno Accademico 2007-2008 Corso di Analisi 1 per Ingegneria Informatica Laboratorio 1 Introduzione a Matlab MATLAB, abbreviazione di MATrix LABoratory, è un ambiente per il calcolo numerico ed un linguaggio di programmazione (interpretato). Consente la manipolazione di matrici, la visualizzazione di dati e funzioni, e l implementazione di algoritmi; inoltre sono disponibili toolbox per l elaborazione di segnali, immagini, il progetto di sistemi di controllo... 1 Calcolo di espressioni con Matlab Possiamo usare Matlab semplicemente come una calcolatrice eseguendo operazioni dalla Command Window, ad esempio: >>2.5+1.3 ans= 3.8000 La moltiplicazione si esegue con *; con il simbolo / dividiamo il primo termine per il secondo, con il simbolo \ viceversa. L elevamento a potenza si indica con ˆ. Per estrarre la radice quadrata di un numero possiamo utilizzare quindi due comandi: >>sqrt(4) oppure >>4ˆ0.5 Con il comando exp(2) calcoliamo l espressione e 2, con il comando log(5) calcoliamo il logaritmo naturale di 5. log10(...) calcola il logaritmo in base 10, log2(...) il logaritmo in base 2. Sono definite anche funzioni trigonometriche fra cui seno (sin), coseno (cos), tangente (tan) e arcotangente (atan,atan2). Tutti i calcoli in Matlab vengono eseguiti in doppia precisione, ma è possibile scegliere diversi formati di visualizzazione. Il formato standard è short, virgola fissa con 5 cifre. Digitando >>format long passiamo al formato virgola fissa, 15 cifre; con i comandi format short e, format long e abbiamo invece la visualizzazione in virgola mobile, rispettivamente con 5 e 15 cifre. 1
2 Definizione di variabili In Matlab per assegnare un valore ad una variabile non è necessario dichiararla; è sufficiente digitare ad esempio >>a=0.55 a= 0.5500 I nomi delle variabili possono essere composti da numeri e lettere, devono iniziare con una lettera ed esiste la distinzione fra maiuscole e minuscole. Il comando who mostra un elenco delle variabili esistenti; con il comando whos otteniamo anche informazioni sul tipo di variabile (intero, double, char), sulla dimensione di eventuali array e sulla memoria occupata. Il comando clear seguito dal nome di una variabile la elimina; clear all elimina tutte le variabili definite. 3 Vettori e matrici Per inserire un vettore digitiamo: >>v=[1,2,3,4] con questo comando (la virgola o uno spazio vuoto fra gli elementi sono equivalenti) otteniamo un vettore riga; per ottenere un vettore colonna si può scrivere >>v=[1;2;3;4] >>v oppure inserire un vettore riga e farne il trasposto utilizzando l apice ( ): Osservazione: se il comando è seguito da ; il risultato non viene stampato sullo schermo. Per inserire una matrice digitiamo: >>A=[1,2,3;4,5,6;7,8,9] usiamo la virgola o uno spazio per separare gli elementi di una riga, e il punto e virgola per cambiare riga. Si può anche passare alla riga successiva semplicemente premendo invio. Supponiamo, definita la matrice A, di voler modificare l elemento in posizione(2,3): >>A(2,3)=-6 A= 1 2 3 4 5 6 7 8 9 In Matlab se utilizziamo il simbolo * con matrici e vettori eseguiamo il prodotto righe per colonne, se le dimensioni delle matrici sono compatibili. Per esempio, definiamo un vettore riga ed un vettore colonna: >>a=[1 2 3]; >>b=[-1;0;-1]; 2
Con il comando >>a*b eseguiamo il prodotto scalare, con il comando >>b*a otteniamo una matrice (prodotto tensore). Se vogliamo eseguire il prodotto, o una qualsiasi altra operazione componente per componente, aggiungiamo un punto prima dell operatore; per esempio, digitando: >>a.ˆ 2 otteniamo un vettore che contiene i quadrati delle componenti di a. Cosa succede se cerchiamo di eseguire lo stesso comando senza punto? 4 Grafici di funzioni Supponiamo di voler disegnare il grafico della funzione x 2 per x [ 2,2]. Definiamo un vettore di punti equispaziati compresi fra 2 e 2 con il seguente comando: >>x=[-2:0.2:2]; dove il passo scelto è 0.2. Quindi calcoliamo punto per punto il valore di y: >>y=x.ˆ2; e disegnamo il grafico con il comando >>plot(x,y). Se vogliamo sovrapporre sullo stesso grafico un altra funzione, ad esempio x. 3, digitiamo: >>y2=x.ˆ3; >>hold on >>plot(x,y2, r ) L istruzione hold on serve per aggiungere alla figura corrente un altro elemento. La stringa r contenuta nella seconda istruzione plot indica il colore desiderato (per un elenco dei colori disponibili, digitare help plot). 5 M-file e function Possiamo salvare in un file di estensione.m una sequenza di istruzioni che vengono eseguite ogni volta che digitiamo nella Command Window il nome del file. Il file deve essere salvato in una cartella che aggiungiamo al path di Matlab, con il seguente comando: >>addpath d:\nomecartella oppure utilizzando il menu: File Set Path Add Folder. Possiamo anche scrivere una funzione che riceve argomenti in ingresso e restituisce uno o più argomenti in uscita, con questa sintassi: function [out1,out2]=nomefun(in1,in2...) 3
6 Numeri complessi In Matlab l unità immaginaria è indicata da i oppure j. Possiamo definire un numero complesso con i seguenti comandi, equivalenti: a=1-i a=sqrt(2)*exp(-i*pi/4) dove pi è π (predefinito in Matlab). In Matlab esistono funzioni predefinite che operano sui numeri complessi. Sia z = x + iy: >>real(z) restituisce x >>imag(z) restituisce y >>abs(z) restituisce il modulo >>angle(z) restituisce l argomento (arctan y x ) >>conj(z) restituisce x iy, il coniugato Il comando compass ci permette di rappresentare i numeri complessi sul piano complesso con una freccia. Scriviamo una funzione che prenda in ingresso un numero complesso, restituisca il numero ruotato di π/2 nel piano complesso, e disegni sullo stesso grafico i due numeri. Sappiamo che, dati z 1 = ρ 1 (cos(θ 1 ) + isin(θ 1 )) e z 2 = ρ 2 (cos(θ 2 ) + isin(θ 2 )) il prodotto ha la seguente espressione: z 1 z 2 = ρ 1 ρ 2 (cos(θ 1 + θ 2 ) + isin(θ 1 + θ 2 )) (1) quindi per ottenere una rotazione di 90 dobbiamo moltiplicare il numero per i, che ha modulo unitario e argomento π/2. % questa funzione ruota un numero complesso di 90 function [z2]=ruota nc(z1); rot=i; z2=z1*rot; compass(z1, b ) hold on compass(z2, r ) 6.1 Radice n-sima di un numero complesso Un numero complesso z = ρ(cos θ+isin θ) ha n radici n-sime, soluzioni dell equazione w n = z. Il modulo e argomento di ogni radice w i sono dati dalle seguenti espressioni: ρ i = ρ (1/n) θ i = θ n + k2π n, k Z (2) Matlab calcola la radice principale di z, che corrisponde alla scelta k = 0 nella formula 2. Vogliamo scrivere una funzione che calcoli tutte le radici n-sime di un numero complesso partendo da quella principale. 4
Sfruttiamo il fatto che, come visto nell esercizio precedente, moltiplicare per un numero complesso di modulo unitario e argomento θ equivale a fare una rotazione di un angolo θ. % Questa funzione calcola le radici n-sime di un numero complesso. % Dati in ingresso: un numero complesso z, un intero n. % Dati in uscita: un vettore nx1 con le radici. function [w]=comp roots(z,n); w=zeros(n,1); % inizializzazione del vettore soluzione w(1)=zˆ(1/n); % trovo la radice principale for k=2:n end w(k)=w(k-1)*exp(i*2*pi/n) % ruoto rispetto alla radice precedente compass(w) Utilizziamo comp roots per calcolare le radici cubiche di z = 1 i: >>z=1-i >>[w]=comp roots(z) >>w ans 1.0842 + 0.2905i -0.2905-1.0842i -0.7937 + 0.7937i Esercizi 1 Calcolo di espressioni con Matlab Calcolare le seguenti espressioni con Matlab: 3 3 1 a) 4 π b) (sin(30 )) 2 c) arctan( 3 3 ) 2 Definizione di variabili 2.1 Assegnare le variabili x = e 3, y = π/6. Calcolare le seguenti espressioni: a) log(x 2 ) 5
b) 2.2 1 sin(y) c) log(x 1/3 )sin y Definire la variabile >>pi=1. Osservare che le variabili predefinite in Matlab possono essere ridefinite dall utente. Quanto vale ora l espressione >>sin(pi/2)? Quale istruzione si può utilizzare per eliminare la nostra definizione di pi? 3 3.1 Inserire i vettori v = [1,1,0] e t = [0; 1;0] (rispettivamente riga e colonna). Eseguire il prodotto scalare con *, quindi verificare che si ottiene lo stesso risultato con il comando dot (sintassi: >>dot(vettore1,vettore2)). 3.2 Creare la matrice 4X4 A con il comando >>A=pascal(4). Creare il vettore 4X1 x = [1;1;1;1] (suggerimento: potete usare il comando ones). Creare il vettore b, assegnandogli il prodotto Ax, dopo avere verificato che è possibile eseguirlo. Verificare che >>A\b dà in uscita il vettore x, e osservare che otteniamo lo stesso risultato moltiplicando l inversa di A per b (suggerimento: per calcolare l inversa di A digitare inv(a)). 4 Grafici di funzioni 4.1 Rappresentare le funzioni trigonometriche (seno, coseno, tangente), segliendo opportunamente i valori di x. 4.2 Rappresentare in colori diversi, sullo stesso grafico, y = x, y = x 2, y = x 3. 4.3 Disegnare il grafico di x, della sua traslata in alto di 2 unità, e della sua traslata a destra di 1 unità. 6
6 Numeri complessi 6.1 Dati i seguenti numeri complessi in forma polare, trovarne la forma cartesiana, a mano e utilizzando Matlab: 6.2 a) ρ = 2, θ = π/3 b) ρ = 10, θ = 3π/2 c) ρ = 1/2, θ = π/4 (Comandi: sin, cos, exp) Dati i seguenti numeri complessi in forma cartesiana, trovarne la forma polare, a mano e utilizzando Matlab: 6.3 a) z = 10i b) z = 2/2 i 2/2 c) z = 1/2 i 3/2 (Comandi: atan2, real, imag, abs) Scrivere una function che riceve in ingresso due numeri complessi, ne calcola e restituisce somma e prodotto e rappresenta i due numeri, la somma e il prodotto nel piano complesso. Eventualmente utilizzare due figure diverse: >>figure(1) >>figure(2) Oppure utilizzare il comando subplot, come mostrato di seguito: >>subplot(2,1,1) >>subplot(2,1,2) Calcolare a mano somma e prodotto di z 1 = 3 + 2i, z 2 = 1 i, quindi verificare il risultato con la funzione Matlab. 6.4 Utilizzando la funzione comp roots calcolare le radici n-sime, con n=2,3,4 di 1 e i. 7