Software di calcolo numerico, analisi, statistica e simulazione Un esempio pratico: Octave Problemi tradizionali • • • • • • Risoluzione di funzioni matematiche complesse Esecuzione di calcoli matriciali Analisi ed elaborazione di segnali e immagini Modellazione matematica di controlli numerici Ottimizzazione di funzioni complesse Analisi statistica di dati sperimentali Tool di riferimento: matlab Matlab è il più diffuso e riconosciuto software per il calcolo numerico, simulazioni matematiche e molto altro. http://www.mathworks.it PRO: grandissima community, librerie già pronte per ogni genere di problemi, strumenti grafici per plugin come simulink CONTRO: licenza a pagamento Tool disponibili: alternative – 1 Uno dei principali competitor di Matlab è Mathematica della Wolfram Research http://www.wolfram.com/mathematica - A pagamento - Molto diffuso tra fisici e matematici - comunità sperimentali Tool disponibili: alternative - 2 IDL http://www.exelisvis.com/ProductsServices/IDL.aspx - A pagamento - Diffuso tra fisici e astrofisici - Sta perdendo quota di mercato, a favore di Matlab Tool disponibili: alternative - 3 Una buona alternativa a Matlab, gratuita, è la combinazione: PYTHON + NumPy e SciPy http://www.scipy.org/ - Librerie gratuite, linguaggio di scripting noto - C’è parecchia roba già pronta, facilmente integrabile con altri prodotti - Matlab è sempre il punto di riferimento Tool disponibili: alternative - 4 Octave è una buona alternativa, gratuita www.gnu.org/software/octave/ PRO: ottima compatibilità (quasi stesso linguaggio di scripting) CONTRO: non completo Anche Scilab è un’altra alternativa gratuita: http://www.scilab.org/ PRO: abbastanza ricco CONTRO: scarsa compatibilità Matlab “Matlab (abbreviazione di Matrix Laboratory) è un ambiente per il calcolo numerico e l’analisi statistica che comprende anche l'omonimo linguaggio di programmazione.” (Wikipedia). In qualunque ambiente di lavoro di ingegneria vi troverete, dovrete quasi certamente far uso di algoritmi, codice e utilizzo di linguaggi di programmazione. Matlab control toolbox Matlab contiene uno dei pacchetti più diffusi per l’analisi e la prototipazione di sistemi di controllo. Control System Toolbox e Simulink http://www.mathworks.it/it/products/control/ http://www.mathworks.it/products/simulink/ Essi non sono presenti nei prodotti concorrenti. Octave Octave è un linguaggio interpretato ad alto livello orientato al calcolo numerico: moltiplica e inverte matrici, determina radici di equazioni lineari e non lineari, manipola polinomi, integra, differenzia e disegna grafici. Il suo insieme di funzioni ne comprende molte orientate all’ottimizzazione, alla statistica, finanziaria, all’interpolazione, alla teoria del controllo e allo studio dell’audio e delle immagini. www.gnu.org/software/octave/ Installazione Octave è disponibile per vari sistemi operativi, e può essere utilizzato da chiunque, e redistribuito secondo la licenza GNU. Windows: - scaricare il pacchetto http://sourceforge.net/projects/octave/files/Octave%20Windows%20binaries/ - scomprimerlo in un luogo a piacere - avviare l’applicativo con Octave.exe dentro la cartella bin. Interfaccia Octave Octave ha un interfaccia a linea di comando. Ciò significa che le istruzioni da eseguire vanno inserite da tastiera, e saranno interpretate da Octave secondo il suo linguaggio di programmazione. Octave utilizza le stesse funzioni ed è completamente compatibile con gli script generati per matlab. Interfaccia Esistono interfacce grafiche di produttori esterni, che sostanzialmente gestiscono la linea di comando con tab, ma l’input rimane sostanzialmetne sempre a linea di comando. Variabili, numeri, matrici Octave gestisce - numeri reali (6,45424342 1012) - numeri immaginari (4+3i, 10-3i) - matrici e vettori 1 3 [ 1 3 -12 4 ] 2 5 [ ] Workspace e variabili Ogni volta che aprite una console di Octave state utilizzando un “workspace”, che è un ambiente di lavoro dove vengono salvate le variabili, le funzioni dichiarate. octave:2> y = 6 y = 6 octave:3> im = 3-4i im = 3 - 4i octave:4> angle = 3/4 * pi angle = 2.3562 Operatori Gli operatori di base si applicano a variabili che rappresentano costanti numeriche. Operatori di base: + - * / ^ -- ++ octave:6> 30+i ans = / i 31 octave:9> (8 * 10^16) / (4 * 10^12) ans = 20000 Vettori Per definire un vettore si usa la sintassi a = [1 2 3 4] I valori sono separati da spazi. È lo stesso vettore: b = [2^0 3-1 6/2 2*2] I vettori possono contenere ovviamente numeri complessi. Matrice Le matrici sono definite con la sintassi simile al vettore, le righe sono separate da “;” octave:11> c = [1 2 3; 4 5 6; 7 8 9] c = 1 4 7 2 5 8 3 6 9 Operatori tra matrici Le operazioni tra matrici utilizzano gli operatori Simbolo uso Operazione + a+b Addizione elemento per elemento - a-b Sottrazione elemento per elemento * a*b Moltiplicazione righe per colonne su matrici quadrate .* a.*b Moltiplicazione elemento per elemento \ a\b Divisione sinistra ./ a./b Divisione elemento per elemento ^ a^b Elevamento a potenza su matrici quadrate .^ a.^b Elevamento a potenza elemento per elemento ' a' Trasposta di una matrice Esempi operazioni tra vettori octave:12> a = [1 2 3] a= 1 2 3 octave:14> a *b ans = 42 octave:13> b = [3; 6; 9] b= 3 6 9 octave:15> b * a ans = 3 6 9 6 12 18 9 18 27 Operazioni tra matrici octave:16> a = [1 2; 3 4] a= 1 2 3 4 octave:17> b = [1 0; 0 -1] b= 1 0 0 -1 octave:18> a * b ans = 1 -2 3 -4 octave:23> a \ b ans = -2.00000 -1.00000 1.50000 0.50000 who Il comando who vi restituisce il contenuto del vostro workspace: octave:24> who Variables in the current scope: a angle ans b c im y Con i comandi save e load si può salvare il workspace su file e ricaricarlo, altrimenti alla chiusura della finestra si perde tutto. Salvataggio e caricamento I file salvati sono posizionati nel percorso corrente. Digitare pwd per visualizzarlo. È possibile cambiare percorso (cd.. ) visualizzare i file correnti (dir) I file sono salvati geralmente con estensione .m Con il comando clear si ripulisce il workspace Simbolo : Il simbolo : può essere utilizzato per costruire agevolmente vettori e matrici. octave:35> a = [1:10] a= 1 2 3 4 5 6 7 8 9 10 octave:36> b = [1:0.3:3] b= 1.0000 1.3000 1.6000 1.9000 2.2000 2.5000 2.8000 Cicli e condizioni Come in tutti i linguaggi di programmazione esiste il modo di iterare istruzioni, all’interno dell’esecuzione del vostro programma. i=1 for x = -5:0.1:5 y(i) = x^2 i=i+1 end if ( a != 0) b = 1/a else b = NaN Fibonacci Serie di Fibonacci: 1 1 3 5 8 13 21 … Salvare in un VETTORE i primi 10 numeri della serie: max=10; n=zeros(max,1); n(1)=0; n(2)=1; for i=3:max n(i)=n(i-1)+n(i-2) end Sfruttare le proprietà matriciali Cercare di sfruttare sempre, ove possibile, il calcolo matriciale, punto di forza di questi software. Esempio: calcolo delle tabelline: tab1 = 1:10 tab2 = 2*[1:10] tab3 = 3*[1:10] … #assurdo: codice ripetuto. for i=1:10 tabelline(:,i) = i*[1:10]'; end #ciclo for, sfrutta l’indice per costruire n righe nella tabellina. i*v’ ;) tabelline = tab1' * tab1 #top: prodotto colonna*riga!! Variabili non tipizzate In questo linguaggio le variabili non sono tipizzate, infatti è possibile: octave:55> y = 4 y= 4 octave:56> y = [1 2] y= 1 2 Pro: non devo definire il tipo di una variabile Contro: codice più difficile da gestire, è facile sbagliare e sovrascrivere una variabile con un tipo sbagliato. Funzioni matematiche [1/2] Octave viene fornito con una ricca serie di funzioni matematiche già implementate. sin (x), cos (x), tan(x), arctan(x), asin(x), … funzioni trigonometriche classiche. polyderiv(x), polyval(x,a), polyinteg (x), roots(x) conv(x) e deconv(x,y): calcolano derivata, valori, integrale, radici, convoluzione e deconvoluzione di polinomi. factor(x): scomposizione in fattori primi primes(x): elenco di numeri primi fino al valore x Funzioni matematiche [2/2] var(x), dev(x): varianza, deviazione standard risoluzione di sistemi lineari fsolve(espressione, intorno): ottiene le radici di un’espressione f(x)=0, dato un punto iniziale da cui partire. eig(x),rank(x): autovalori, rango di matrici Disegno di grafici Octave permette di disegnare grafici di insiemi di dati. Esempio: x=[-pi:pi/32:pi] plot(x, sin(x)) funzioni per il disegno disegnare più grafici di più funzioni contemporaneamente: plot (x, f(x), x, g(x)) disegnare diversi tipi di grafico: bar(x), hist(x) E’ possibile specificare il colore e l’aspetto: plot(x,y,’ro’) %rosso e stile cerchietti plot(y,’bx’) %blu con le x Esempio parametri grafico x=0:pi/50:2*pi; y1=sin(x); y2=cos(x); plot(x,y1,x,y2) grid on xlabel(‘angoli in radianti') ylabel(‘y-ordinate’) title(‘Grafico seno e coseno’) legend(‘seno’,’coseno’) Funzioni E’ possibile definire funzioni, con o senza parametri in ingresso, che eseguano istruzioni più o meno complesse. La definizione di una funzione inizia con: function nomefunzione function nomefunzione (lista degli argomenti) function variabile di ritorno = nomefunzione (lista degli argomenti) function [lista variabili di ritorno] = nomefunzione (lista degli argomenti) tutte devono terminare con endfunction Riutilizzo di script e funzioni Gli script sono dei file con estensione .m, posizionati nel percorso di path. Per modificare il path usare il comando: path(path, 'c:\percorsoAggiuntivo\') Gli script possono contenere sia singole funzioni, che interi programmi: basta digitare il nome del file/funzione per eseguirli. Esempi vari 1 function [area,perimetro]=calcola(a,b) area=a*b perimetro=2*a+2*b endfunction #ritorna un numero casuale nell’intervallo min-max, compresi. function casual (min, max) floor((max-min+1)* rand) + min endfunction Esempi vari 2 function[pos, neg] = segno ( A ) neg = 0; pos = 0; for i=1:length ( A ) if A ( i ) < 0 neg = neg + 1; elseif A ( i ) > 0 pos = pos + 1; end end end Script: B = input('Dai il vettore di interi:'); [ps, ng] = segno ( B ); fprintf('Numero positivi: %d e negativi: %d\n', ps, ng ); Riferimenti utili Manuale di Octave: http://www.gnu.org/software/octave/octave.pdf Introduzione ad Octave (in italiano!) http://www.matematicamente.it/software/octave/M.Ventrone-Octave_guida.pdf Materiale didattico (slide di spiegazione ed esercizi) del prof. Michelini http://www.michelini.org/pmwiki.php/FondamentiDiInformatica/MaterialeDidattico
© Copyright 2024 Paperzz