Sei sulla pagina 1di 18

Capitolo 3 MatLab

` MatLab (MATrix LABoratory) e un sistema interattivo basato sulluso delle matrici per il calcolo scientico ed ingegneristico, che permette di eseguire sequenze di comandi e di funzioni senza scrivere un programma vero e proprio. ` Lambiente di lavoro di MatLab e caratterizzato da diverse nestre ciascuna delle quali ha una funzione diversa. C` una nestra dei comandi (Command Window) per il dialogo interattivo, e una nestra di navigazione (Current Directory) per accedere a cartelle e documenti, ed inne una nestra per lattivazione di procedure avanzate (Launch Pad). MatLab pu` operare in diversi modalit` : o a 1) interattiva (dalla nestra dei comandi), quando resta in attesa della digitazione di un comando (in linguaggio corrente istruzione) e lo esegue al premere del tasto Invio; 2) interpretata, quando esegue una sequenza di istruzioni e funzioni scritte in precedenza in ` un le (la cui estensione e .m).

3.1 Funzioni di Base e Variabili Speciali


3.1.1 Funzioni di Base
` In Tabella 1 e riportato un elenco dei comandi di base di MatLab, che in genere si usano nella ` versione interattiva. In Tabella 2 e riportato un elenco di caratteri speciali che hanno validit` sia a ` nella versione interattiva che in quella interpretata. In Tabella 3 e riportato un elenco di alcuni comuni operatori matematici. La Figura 3.1 illustra lapplicazione di una sequenza di comandi di MatLab.

15

Laurea Specialistica in Ingegneria Energetica

Politecnico di Milano

>> 23*14 ans = 322 >> forza = 23 forza = 23 >> spostamento = 14 spostamento = 14 >> lavoro = forza * spostamento lavoro = 322 >> >> A = 15 A = 15 >> b = 3 b = 3 >> A/b ans = 5 >> >> c = Ab c = 3375

Figura 3.1: Alcuni comandi elementari: operatori matematici ed assegnazioni di variabili.

help demo who clear diary computer C exit quit

help facility run demonstration list variables in memory clear workspace diary of the session type of computer local abort exit MatLab exit MatLab

Tabella 1. MatLab: Comandi di base.

c Copyright 2010 - Anna Pandol

16

Politecnico di Milano

Laurea Specialistica in Ingegneria Energetica

= [ and ] ( and ) . ... , ; % : !

assignement statement to dene vectors and matrices arithmetic expression precedence decimal separator the statement continues to the next line separator of subscripts and function arguments end row, and suppress printing comments subscripting, vector generation execute operating system commands Tabella 2. MatLab: Simboli speciali. +

\ /

addition subtraction multiplication power transpose (only for matrices) left division right division

Tabella 3. MatLab: Operatori matematici.

ans eps pi i, j inf NaN clock date flops nargin nargout

answer when expression not asssigned oating point precision 1 Not-a-Number wall clock date oating point operator count number of function input arguments number of function output arguments

Tabella 4. MatLab: Costanti e variabili speciali.

3.1.2 Costanti MatLab e Funzioni Intrinseche


In Tabella 4 sono riportate alcune costanti e variabili (in realt` funzioni intrinseche) che hanno a un signicato speciale per a MatLab. In Tabella 5 sono riportate alcune funzioni matematiche intrinseche (presenti in MatLab) di uso frequente.

17

c Copyright 2010 - Anna Pandol

Laurea Specialistica in Ingegneria Energetica

Politecnico di Milano

abs angle sqrt real imag conj round fix floor ceil sign rem exp log log10 sin cos tan asin acos atan atan2 sinh cosh tanh asinh acosh atanh bessel gamma erf inverf ellipk ellipj

Absolute value or complex number magnitude phase angle square root real part imaginary part complex conjugate round to the nearest integer round toward zero round toward - round toward + signum function remainder exponential with base e natural logarithm logarithm base 10 sine cosine tangent arcsine arccosine arctangent four quadrant arctangent hyperbolic sine hyperbolic cosine hyperbolic tangent hyperbolic arcsine hyperbolic arccosine hyperbolic arctangent Bessel function gamma function error function inverse error function complete elliptic integral of rst kind jacobian elliptic integral

Tabella 5. MatLab: Funzioni matematiche intrinseche.

c Copyright 2010 - Anna Pandol

18

Politecnico di Milano

Laurea Specialistica in Ingegneria Energetica

3.2 Assegnazioni ed Espressioni


Le variabili (scalari, vettori o matrici) sono lingrediente pi` importante di un linguaggio di u programmazione. Le variabili possono assumere valori numerici diversi nellambito di una sessione di lavoro. Le variabili sono identicate da una stringa di caratteri e sono sensibili al maiuscolo e minus` colo, per cui la variabile A e diversa dalla variabile a. La stringa pu` essere al massimo di 19 o caratteri alfanumerici, ma deve iniziare con un carattere alfabetico. Il contenuto di una variabile viene in generale denito da una assegnazione, che le attibuisce o un valore numerico preciso (costante) o il risultato di unespressione. ` Unespressione e in genere costituita da operatori, funzioni e nomi di variabili. Se il risultato di unespressione (che pu` essere uno scalare, un vettore o una matrice) viene assegnato a una o variabile, questa conserva lassegnamento no a un successivo assegnamento, o al termine del` la sessione, o al comando clear. Se lespressione non e assegnata a una variabile, MatLab la carica nella variabile di default ans. ` In genere unistruzione occupa una sola riga e viene chiusa dal tasto invio. Se listruzione e molto lunga pu` essere prolungata sulla riga successiva con tre o pi` punti seguiti da invio. o u Inoltre, sulla stessa riga possono essere riportati pi` istruzioni separate da virgola o punto e u virgola. Il punto e virgola sopprime la stampa dei risultati dellistruzione, come si pu` vedere o in Figura 3.2.
>> a = 3, b = 4, d = a*a + b*b, c = sqrt(d) a = 3 b = 4 d = 25 c = 5 >> clear >> a = 3; b = 4; c = a*a + b*b; d = sqrt(c) d = 5

Figura 3.2: Istruzioni, variabili ed assegnamenti.

3.3 LAmbiente di Lavoro MatLab


Nellambito della stessa sessione di lavoro, tutti i comandi di linea di MatLab vengono memorizzati, e possono essere richiamati con i tasti cursore (frecce). Quando si nisce una sessione di lavoro, tutte le variabili di MatLab vengono perse.

19

c Copyright 2010 - Anna Pandol

Laurea Specialistica in Ingegneria Energetica

Politecnico di Milano

Il comando save eseguito prima di uscire da MatLab salva il contenuto della memoria in un le formato macchina (binario) chiamato matlab.mat. Per ripristinare lambiente di lavoro salvato, occorre eseguire il comando load. In Tabella 6 sono riportati alcuni comandi di gestione dei le. what chdir delete dir load save pack type fprintf list .m les change current directory delete le directory of les on disk load variables from matlab.mat le save variables to matlab.mat le compact memory via save list function or le print to a le

Tabella 6. MatLab: Comandi di gestione dei le.

3.4 Matrici e Vettori


Vettori e matrici possono essere deniti in diversi modi: 1) digitati da linea di comando come una lista di numeri o variabili; 2) generati da funzioni intrinseche per la creazione di vettori; 3) costruiti allinterno di funzioni .m; 4) caricati da le esterni mediante lettura. Lesempio nelle Figure 3.3-3.4 illustra le operazioni pi` semplici su matrici e vettori. u
>> x = [2. 6. 12.] x = 2 6 12 >> x.2 ans = 4 36 144 >> y = [3. 5. 1.] y = 3 5 1 >> x.*y ans = 6 30 12 >> y ans = 3

Figura 3.3: Operazioni su matrici e vettori. Continua.

c Copyright 2010 - Anna Pandol

20

Politecnico di Milano

Laurea Specialistica in Ingegneria Energetica

5 1 >> x*y ans = 48 >> x*y ans = 6 10 2 18 30 6 36 60 12 >> 2*x ans = 4 12 24 >> x(2) ans = 6 >> x(1:2) ans = 2 6 >> x(3:-1:1) ans = 12 6 2 >> x=(0:0.1:0.6) x = Columns 1 through 7 0 0.1000 0.2000 0.3000 0.4000 >> linspace(0,pi,6) ans = Columns 1 through 6 0 0.6283 1.2566 1.8850 2.5133 >> x = [6 2 4 8 -2 12]; y = [2,6,3,1,2,10]; >> x x = 6 2 4 8 -2 12 >> y y = 2 6 3 1 2 10 >> size(y) ans = 1 6 >> x + y ans = 8 8 7 9 0 22 >> x.*y ans = 12 12 12 8 -4 120 >> x./y ans = 3.0000 0.3333 1.3333 8.0000 -1.0000

0.5000

0.6000

3.1416

1.2000

Figura 3.4: Operazioni su matrici e vettori. Continuazione. 21


c Copyright 2010 - Anna Pandol

Laurea Specialistica in Ingegneria Energetica

Politecnico di Milano

eye zeros ones diag triu tril rand hilb magic toeplitz rot90 fliplr flipud

identity matrix matrix of zeros matrix of ones put in diagonal the vector elements upper triangular part of a matrix lower triangular part of a matrix randomly generated matrix Hilbert matrix magic square look at the help swap rows and columns inverting order ip from left to right matrix columns ip from up to down matrix rows

Tabella 7. MatLab: Operazioni intrinseche per la costruzione di matrici e vettori.

In Tabella 7 si trovano alcune funzioni intrinseche di MatLab per la gestione di matrici. La funzione ones(m,n) con m, n scalari interi, crea una matrice m x n di uni; ones(A) ` con A matrice, crea una matrice delle stesse dimensioni di A piena di uni. Se x e un vettore di dimensione n, diag(x) crea una matrice quadrata diagonale di dimensione n x n con gli elementi di x sulla diagonale principale; mentre diag(A) contiene la diagonale principale della matrice A (che deve essere quadrata). Nelle Figure 3.5-3.6 sono illustrate alcune operazioni sulle matrici.

c Copyright 2010 - Anna Pandol

22

Politecnico di Milano

Laurea Specialistica in Ingegneria Energetica

>> A=[1 4 6; 2 1 8; -2 7 -9]; B = [A, ones(3,2); zeros(2,3), eye(2)] B = 1 4 6 1 1 2 1 8 1 1 -2 7 -9 1 1 0 0 0 1 0 0 0 0 0 1 >> x=[1,2;6,7] x = 1 2 6 7 >> y=[1 2 3 4 5 6 7 8 9] y = 1 2 3 4 5 6 7 8 9 >> x = [3, -1, 5]; >> y = [x; x+1; x*2 - 1]

Figura 3.5: Operazioni su matrici e vettori. Continua.

23

c Copyright 2010 - Anna Pandol

Laurea Specialistica in Ingegneria Energetica

Politecnico di Milano

y = 3 -1 5 4 0 6 5 -3 9 >> rot90(y) ans = 5 6 9 -1 0 -3 3 4 5 >> fliplr(y) ans = 5 -1 3 6 0 4 9 -3 5 >> y(:,3) ans = 5 6 9 >> y(2,:) ans = 4 0 6 >> z = [0.2 0.4 1.3] z = 0.2000 0.4000 >> v = diag(z) v = 0.2000 0 0 0.4000 0 0

1.3000

0 0 1.3000

Figura 3.6: Operazioni su matrici e vettori.

Anche per le matrici si usano gli stessi simboli degli scalari: addizione, sottrazione, moltipli` cazione, elevamento a potenza e divisione (Tabella 3). Loperazione di trasposizione e ottenuta con lapice . Le funzioni intrinseche su matrici di MatLab sono riportate in Tabella 8. ` Un commento particolare va fatto sulla operazione di divisione. Se A e una matrice quadrata ` non singolare, e b un vettore colonna compatibile, allora x e soluzione del sistema A * x = b. In Figura 3.7 sono descritte le operazioni avanzate sulle matrici, inclusa la soluzione di un sistema lineare.

c Copyright 2010 - Anna Pandol

24

Politecnico di Milano

Laurea Specialistica in Ingegneria Energetica

>> a = [2 3; 1 4]; b = [8; 9]; Ainv = inv(A); x = Ainv*b x = 1 2 >> x = [4 2 3; 1 6 5; -2 5 10]; >> det(x) ans = 151 >> y = inv(x) y = 0.2318 -0.0331 -0.0530 -0.1325 0.3046 -0.1126 0.1126 -0.1589 0.1457 >> x*y ans = 1.0000 0.0000 0 -0.0000 1.0000 0 0 -0.0000 1.0000 >> lux = lu(x) lux = 4.0000 2.0000 3.0000 -0.5000 6.0000 11.5000 0.2500 0.9167 -6.2917 >> triu(lux) ans = 4.0000 2.0000 3.0000 0 6.0000 11.5000 0 0 -6.2917 >> diag(lux) ans = 4.0000 6.0000 -6.2917 >> [V,D] = eig(x) V = -0.0149 -0.6756 0.3728 -0.8288 -0.6529 0.5770 0.5593 0.3425 0.7267 D = 2.6440 0 0 0 4.4123 0 0 0 12.9438 >> x*V - V*D ans = 1.0e-014 * 0.1339 0.0444 -0.1776 -0.2665 -0.1332 0.0888 0.1332 0.1332 0

Figura 3.7: Manipolazione di matrici. 25


c Copyright 2010 - Anna Pandol

Laurea Specialistica in Ingegneria Energetica

Politecnico di Milano

eig chol sdv inv lu qr logm expm sqrtm poly det size rank

eigenvalues and eigenvectors cholesky factorization single value decomposition inverse LU factorization QR factorization matrix logarithm matrix exponential matrix square root characteristic polynomial determinant matrix sizes matrix rank

Tabella 8. MatLab: Operazioni intrinseche di algebra di matrici e vettori.

3.5 Formati di Visualizzazione


In Figura 3.8 sono riportati gli effetti dei comandi di visualizzazione per numeri e variabili. MatLab lavora sempre in doppia precisione, ma per default visualizza i risultati numerici in formato compatto (5 cifre signicative). Il formato di visualizzazione pu` essere modicato o con il comando format, Tabella 9. Il formato resta attivo no a nuova assegnazione o a chiusura della sessione.

format format format format format format format format format

short long short e long e bank + rat hex compact

default display, 5 digits 16 digits 5 digits plus exponent 16 digits plus exponent 2 decimal digits positive, zero or negative rational approximation hexadecimal suppress most blank lines

Tabella 9. MatLab: Formati di visualizzazione.

Per visualizzare numeri e testi senza la ripetizione della variabile si pu` usare il comando disp o (vedi Figura 3.8).

c Copyright 2010 - Anna Pandol

26

Politecnico di Milano

Laurea Specialistica in Ingegneria Energetica

>> format short >> a = 1234, b = 123456789.0123456789 a = 1234 b = 1.2346e+008 >> format long e >> a, b a = 1234 b = 1.234567890123457e+008 >> format bank >> a, b a = 1234.00 b = 123456789.01 >> format + >> a, b a = + b = + >> pi ans = 3.14159265358979 >> disp(pi) 3.14159265358979 >> disp(prova di stampa) prova di stampa >> fprintf(Greek pi is %g n, pi) Greek pi is 3.14159 >> a=[1,2,3;4,5,6] a = 1 2 3 4 5 6 >> fprintf(Matrix a is %g n, a) Matrix a is 1 Matrix a is 4 Matrix a is 2 Matrix a is 5 Matrix a is 3 Matrix a is 6

Figura 3.8: Visualizzazioni di numeri.

Se si desidera un migliore controllo del formato di output, si pu` usare la funzione fprintf, o ` che ha due argomenti. Il primo argomento e una stringa in cui sono inseriti particolari simboli ` per la stampa delle variabili, e il secondo e la lista delle variabili da stampare. I simboli di

27

c Copyright 2010 - Anna Pandol

Laurea Specialistica in Ingegneria Energetica

Politecnico di Milano

` stampa sono riportati in Tabella 10. Se largomento da stampare e una matrice, la stringa di ` intestazione viene ripetuta pi` volte. Un esempio e riportato in Figura 3.8. u MatLab possiede funzioni speciali per la manipolazione dei testi e delle stringhe. Alcune di queste sono riportate in Tabella 11.
%e %f %g \n exponential notation oating point notation whichever is shorter new line

Tabella 10. MatLab: Simboli per la visualizzazione di numeri. abs eval num2str int2str setstr sprintf isstr strcomp hex2num convert string to ASCII (text) value evaluate text macro convert number to string convert integer to string set a ag which indicates that a matrix is a string write a number into a string detect string variables compare string variables convert hex string to number

Tabella 11. MatLab: Funzioni di manipolazione di testi e stringhe.

3.6 MatLab Interpretato


Matlab lavora anche leggendo i comandi scritti su un le in formato testo (ASCII). Per poter accedere ai le, bisogna indicare a MatLab la directory in cui i le sono contenuti, selezionando il percorso dalla nestra Current directory. I le hanno sempre estensione .m e sono di due tipi: 1. File script. Sono semplicemente una sequenza di normali istruzioni MatLab. Il nome del le (privato dellestensione) viene riconosciuto da MatLab come un comando. Pertanto, per eseguire la sequenza di istruzioni contenute nel le, basta digitare il nome del le. I le script possono essere creati usando un qualunque editor di testo, possibilmente non usando un vero processore di testi. Un le script pu` richiamare un altro le .m, anche o se stesso (modalit` ricursiva). Uno script pu` essere usato per caricare valori numerici a o allinterno di una matrice. 2. File funzione. Contengono istruzioni anche complesse (cicli, assegnazioni multiple, lettura e scrittura da le...) e che a tutti gli effetti vengono considerate equivalenti alle funzioni interne.

c Copyright 2010 - Anna Pandol

28

Politecnico di Milano

Laurea Specialistica in Ingegneria Energetica

3.6.1 I File Funzione

Le funzioni di MatLab ricevono alcuni argomenti come dati di ingresso (input) e restituiscono altri argomenti come dati di uscita (output). Le funzioni vengono identicate da MatLab con il loro nome, a cui deve corrispondere un le .m esterno che ha lo stesso nome, e che si deve trovare in una directory accessibile a MatLab. La prima istruzione del le funzione deve dichiarare il nome della funzione, gli argomenti in ingresso e quelli in uscita. Se mancasse questa riga di denizione, il le diventerebbe uno script. Nel le principale del programma possono essere contenute diverse funzioni. I nomi delle variabili in ingresso e in uscita possono differire dal nome che le stesse variabili hanno nella funzione chiamante. Infatti le variabili allinterno delle funzioni sono locali (ovvero vengono riconosciute solo allinterno della funzione) e sono pertanto indipendenti dal nome globale. ` Oltre alle istruzioni del linguaggio interattivo, nelle funzioni le e possibile usare istruzioni di usso, le pi` importanti delle quali sono elencate in Tabella 12. u ` Un esempio di funzione con luso di istruzioni di usso e riportata in Figura 3.9.

if elseif else end for while break return pause

conditionally execute the following statements additional conditionally execution alternative conditional statements terminate if, for, while cycle the following statements a number of times cycle the following statements while a condition is satised break out of for or while loops return from function pause until a key is pressed

Tabella 12. MatLab: Istruzioni di usso.

29

c Copyright 2010 - Anna Pandol

Laurea Specialistica in Ingegneria Energetica

Politecnico di Milano

function [intwork, termini] = work (sigma, epsilon) intwork = 0; termini = 0; for k = 1:3 for j = 1:3 iw = sigma(k,j)*epsilon(k,j) if (iw = 0) termini = termini + 1; intwork = intwork + iw; end end end return

Figura 3.9: Esempio di le funzione.

3.6.2 Lettura e Scrittura da File


I dati di ingresso necessari a un programma ad elementi niti sono numerosi, ed in generale sono scritti su un le che viene generato da programmi appositi (generatori di mesh) in formato testo, in modo che loperatore possa effettuare modiche sul testo stesso. ` Pertanto tra le funzioni di MatLab e importante conoscere anche quelle che sono relative alla lettura e alla scrittura di le di testo in cui sono possone essere contenute parti numeriche e parti a stringa. Le funzioni di MatLab di lettura/scrittura avanzata da/su le (Tabella 13), che aprono il le, lo leggono, salvano i dati in variabili di memoria, e inne chiudono il le, non sono utilizzabili. Occorre invece fare uso di funzioni di lettura/scrittura a livello basso (Tabella 14). Si deve dunque aprire un le con fopen, leggere il contenuto in ordine sequenziale con fscanf, fgets, fgetl e inne chiudere il le fclose. ` La lettura/scrittura da le in formato binario e un modo alternativo di scambiare informazioni ` con un codice di calcolo. La differenza e che i dati scritti sono in formato compresso e possono ` essere riletti solo da un programma. Pertanto e scarsamente utilizzabile per elementi niti. ` Un esempio di lettura di dati da le e riportato in Figura 3.10. importdata load open save winopen Load data from various types of les Load all or specic data from MAT or ASCII le Open les of various types using appropriate editor or program Save all or specic data to MAT or ASCII le Open le in appropriate application (Windows only)

Tabella 13. MatLab: Funzioni di input/output ad alto livello.

c Copyright 2010 - Anna Pandol

30

Politecnico di Milano

Laurea Specialistica in Ingegneria Energetica

fclose feof ferror fgetl fgets fopen fprintf fread frewind fscanf fseek ftell fwrite

Close one or more open les Test for end-of-le Query MatLab about errors in le input or output Return next line of le as string without line terminator(s) Return next line of le as string with line terminator(s) Open le or obtain information about open les Write formatted data to le Read binary data from le Rewind open le Read formatted data from le Set le position indicator Get le position indicator Write binary data to le

Tabella 14. MatLab: Funzioni di input/output a basso livello.

La funzione fopen apre il le di nome esterno stri e restituisce una variabile fid che individua il le allinterno del programma. La funzione fgets legge una riga del le fid (no al carattere di nuova riga) e la restituisce nella variabile tline. La funzione fscanf legge una serie di argomenti dal le fid e li restituisce nella variabile ` scalare o vettoriale desiderata. fscanf ha tre argomenti; il primo e lindicatore del le fid, ` ` il secondo e il formato di lettura, il terzo e un numero intero che dice il numero di dati che devono essere letti. Nellesempio in Figura 3.10, la prima chiamata di fscanf legge un solo dato e lo restituisce nella variabile mE. Nella sesta chiamata, allinterno del ciclo for, fscanf legge due numeri e li inserisce nella riga i1 (colonne 1 e 2 rispettivamente) della matrice coor, di dimensioni (nnod x 2).

31

c Copyright 2010 - Anna Pandol

Laurea Specialistica in Ingegneria Energetica

Politecnico di Milano

% opens input file fid = fopen(stri,r); % read elastic constants section tline mE mnu type = = = = fgets(fid); fscanf(fid,%f,1); fscanf(fid,%f,1); fscanf(fid,%i,1); % % % % skip a blank line elastic moduls poisson coefficient type=0: plane strain; type=1: plane stress

% read nodes tline = fgets(fid); nnod = fscanf(fid,%i,1); coor = zeros(nnod,2);

% number of nodes % allocates "coor"

for i1=1:nnod, inod = fscanf(fid,%i,1); coor(i1,:) = fscanf(fid,%f,2); end fclose(fid);

% reads nodal coordinates

Figura 3.10: Esempio di lettura di dati da le.

c Copyright 2010 - Anna Pandol

32

Potrebbero piacerti anche