Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
` 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).
15
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
help facility run demonstration list variables in memory clear workspace diary of the session type of computer local abort exit MatLab exit MatLab
16
Politecnico di Milano
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
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
17
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
18
Politecnico di Milano
19
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
20
Politecnico di Milano
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
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
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.
22
Politecnico di Milano
>> 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]
23
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
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.
24
Politecnico di Milano
>> 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
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
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
Per visualizzare numeri e testi senza la ripetizione della variabile si pu` usare il comando disp o (vedi Figura 3.8).
26
Politecnico di Milano
>> 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
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
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
28
Politecnico di Milano
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.
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
29
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
30
Politecnico di Milano
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
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
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
32