MATLAB: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Etichette: Modifica visuale Modifica da mobile Modifica da web per mobile
 
(38 versioni intermedie di 31 utenti non mostrate)
Riga 1:
{{Software
|Nome = MATLAB
|Logo = Matlab Logo.png
|Screenshot = MATLAB2011.PNG
|Didascalia = MATLAB R2011a in [[Windows 7]].
|Sviluppatore = [[MathWorks]]
|UltimaVersione =R2017a
|DataUltimaVersione =9 marzo 2017
|UltimaVersioneBeta =
|DataUltimaVersioneBeta =
Line 12 ⟶ 11:
|SistemaOperativo2 = Mac OS X
|SistemaOperativo3 = Linux
|NotaSistemaOperativo = ([httphttps://www.mathworks.com/products/matlab/requirements.html lista])
|Linguaggio = C++
|Linguaggio2 = Java
Line 22 ⟶ 21:
|Lingua = Inglese
|SoftwareLibero = no
| SitoWeb =
|Genre2 = cas
}}
'''MATLAB''' (abbreviazione di '''Mat'''rix '''Lab'''oratory) è un ambiente per il [[calcolo numerico]] e l'analisi [[statistica]] scritto in [[linguaggio C|C]], che comprende anche l'omonimo [[linguaggio di programmazione]] creato dalla ''[[MathWorks]]''. MATLAB consente di manipolare [[Matrice (matematica)|matrici]], visualizzare [[funzione (matematica)|funzioni]] e dati, implementare [[algoritmo|algoritmi]], creare [[interfaccia utente|interfacce]] utente, e interfacciarsi con altri programmi.
Nonostante sia specializzato nel calcolo numerico, uno strumentario opzionale interfaccia MATLAB con il motore di calcolo simbolico di [[Maple]]. MATLAB è usato da milioni di persone nell'industria e nelle università per via dei suoi numerosi strumenti a supporto dei più disparati campi di studio applicati e funziona su diversi [[sistema operativo|sistemi operativi]], tra cui [[Windows]], [[Mac OS]], [[GNU/Linux]] e [[Unix]].
 
== Cenni storiciStoria ==
 
Abbreviazione di "MATrix LABoratory", MATLAB fu creato alla fine degli anni settanta da [[Cleve Moler]], il presidente del dipartimento di scienze informatiche dell'[[Università del Nuovo Messico]]. Egli creòCreò MATLAB per dare ai suoipropri studenti accesso a [[LINPACK]] e ad [[EISPACK]] senza che essi dovessero necessariamente conoscere il [[Fortran]]. Presto il software si diffuse nelle altre università e trovò un grande pubblico tra la comunità dei matematici applicati. L'ingegnere [[John N. Little|Jack Little]], un ingegnere, conobbe il programma durante una visita a Moler all'[[Università di Stanford]] nel [[1983]]. Riconoscendo il suo potenziale commerciale, si unì con Moler e Steve Bangert.: Essiassieme riscrissero MATLAB in [[linguaggio C]] e fondarono la ''The MathWorks'' nel [[1984]] per continuarecontinuarne il suolo sviluppo.
 
Nel 2020, a seguito delle sanzioni degli [[Stati Uniti d'America]] nei confronti della [[Cina]], MATLAB è stato ritirato da due università cinesi, che hanno risposto promuovendo alternative ''[[open source]]'' e sviluppandone altre in casa.<ref>{{Cita web|url=https://www.scmp.com/news/china/diplomacy/article/3088854/us-military-ban-locks-two-chinese-universities-out-popular|titolo=US military ban locks two Chinese universities out of popular software|sito=South China Morning Post|data=2020-06-12|lingua=en|accesso=2021-03-15}}</ref>
 
== Interfaccia ==
L'interfaccia principale di MATLAB è composta da diverse [[finestraFinestra (disambiguainformatica)|finestre]] che è possibile affiancare, spostare, ridurre a [[icona (informatica)|icona]], ridimensionare e così via. Le finestre principali, più usate, sono quattro:
 
* ''Command Windowwindow''
* ''Workspace''
* ''Current directory''
* ''Command history''
 
=== Prompt dei comandi (Command''command Windowwindow'') ===
La ''Commandcommand Windowwindow'' è una finestra dell'interfaccia principale di MATLAB, nella quale è possibile digitare [[istruzione (informatica)|comandi]] supportati, e visualizzare a videoschermo in tempo reale i risultati. Ad esempio è possibile utilizzare MatlabMATLAB come una potente [[calcolatrice]]:
2+3
ans=5
Line 49 ⟶ 50:
È presente anche un help off-line sintetico richiamabile tramite il comando:
help <nome_comando>
Dove ovviamente <nome_comando> siindica riferiscel'istruzione al comando sulsulla quale abbiamosi bisognonecessita di aiuto.
Esempio
help sqrt
Line 59 ⟶ 60:
/ (divisione)
^ (elevamento a potenza)
Se si scrivono più comandi su una stessa linea, è necessario separarli con una virgola ‘,' . Se un comando è terminato con un punto e virgola (;), i risultati ottenuti non verranno visualizzati immediatamente in Command Window, ma verranno solo salvati in workspace (cfr paragrafo successivo).
Con la freccia in su, tasto ↑, si scorronovisualizzano i comandi eseguiti precedentemente eseguitied è possibile eseguirli di nuovo. Si possono utilizzare le parentesi () per modificare la priorità tra le varie operazioni.
 
=== ''Workspace'' ===
IlLo ''Workspaceworkspace'' è lo spazio di lavoro (o spazio di memoria) contenente le variabili dichiarate. Per visualizzare tutte le variabili utilizzate si utilizza il comando <code>who</code>, mentre con il comando <code>whos</code> si visualizzano tutte le variabili utilizzate, ma in forma estesa, cioè ci viene data la loro descrizione: con nome, dimensione, memoria occupata, classe e attributi.
 
La finestra Workspace''workspace'' elenca tutte le variabili allocate in workspace in questo momento, e dà la possibilità di allocare nuove variabili o di importare dall'esterno un elenco di variabili (ad esempio da un file di testo). È inoltre possibile stampare l'elenco delle variabili attuali od eliminarne una direttamente dalla finestra (senza scrivere nessun comando insomma).
 
Per visualizzare innella Command''command Windowwindow'' il valore di una variabile memorizzata innello ''workspace in questo momento,'' è sufficiente scrivere il nome della variabile stessa.
 
=== ''Current Directorydirectory'' ===
La finestra ''Currentcurrent Directorydirectory'' permette, come si può intuire, di esplorare il contenuto delle cartelle sul proprio hard[[supporto diskdi memoria]]. Da questa finestra è possibile aprire direttamente file compatibili con MATLAB con un semplice doppio click. Inoltre è possibile esplorare cartelle utilizzando, innella Command''command Windowwindow'', comandi tipici dei moderni sistemi operativi basati su tecnologia [[UNIX]] (come [[linuxLinux]] e [[Apple Macintosh|MACmacOS]])., come "cd nomecartella", "cd . .", "cd /indirizzocartella", e così via.
 
=== ''Command Historyhistory'' ===
Nella finestra ''Command History'' sono elencati tutti i comandi digitati di recente, divisi per ora e data. È possibile rilanciare direttamente dadalla Command''command History,history'' un comando digitato innella Command''command Windowswindow'' in precedenza, semplicemente con un doppio click.
 
== Programmare in MATLAB ==
=== Variabili ===
==== Variabili predefinite ====
In MATLAB ci sono delle [[variabile (informatica)|variabili]] il cui valore è predefinito e(ma nonpuò modificabilecomunque essere modificato dall'utente). Esse sono:
* ''i'', ''j'': [[unità immaginaria]] in un [[numero complesso]]
* ''pi'': approssimazione di [[pi greco]], π
* ''eps'': precisione di macchina del computer che si sta utilizzando
* ''realmax'': è il massimo [[numero reale]] positivo rappresentabile
* ''realmin'': è il minimo numero reale positivo rappresentabile
* ''inf'': è un numero maggiore di realmax, ∞, infinito
* version''-inf'': ilè un numero della versioneminore di MATLABrealmin, -∞, meno infinito utilizzata
* ''version'': il numero della versione di MATLAB utilizzata
* ''computer'': una sigla che indica il tipo di computer utilizzato. Esempio: PCWIN
* ''ans'': ultimo risultato dell'ultima operazione eseguita
* ''NaN'': "Not a number" , indica il risultato di una forma matematica indeterminata o non definita (es. ∞/∞ oppure 0/0)
 
==== Dichiarazione variabili ====
Line 94 ⟶ 96:
var1=1
var2='abc'
Se non si vuole visualizzare il valore della variabile appena dopo averla dichiarata (come normalmente èavviene) si deve terminare l'assegnamento con un punto e virgola:
var3=1234;
var4='abcdef';
Line 112 ⟶ 114:
viene effettuata la pulizia di tutta la workspace.
 
'''N.B.''': di default le variabili numeriche dichiarate sono tutte di tipo double (floating point in doppia precisione).
 
=== Vettori (con calcolo vettoriale delle grandezze fisiche e matematica delle matrici) ===
 
=== Vettori ===
==== Definizione vettori ====
I vettori possono essere di due tipi:
Line 125 ⟶ 128:
Esempio:
vc=[3; 1; 6; 8]
Spesso è utile definire i vettori con intervalli., Adad esempio un vettore che contiene i primi dieci numeri interi.
In generale:
v=[inizio:incremento:fine]|[inizio:fine]
Line 134 ⟶ 137:
v1=[1 2 3 4 5 6 7 8 9 10]
v2=[-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1]
seSe non si scrive l'incremento, per default èesso viene posto uguale a 1.
 
Bisogna stare attenti a non assegnare all'incremento e alla destinazione numeri relativi discordi, fatto che produrrà il seguente risultato in fase di esecuzione:
Line 147 ⟶ 150:
v(posizione_indice)
v(k), dove k <math>\in</math> <math>\mathbb{N}</math>, seleziona l'elemento in posizione k-esima
Importante: a differenza di quanto avviene in molti altri linguaggi, gli indici deidi vettori e matrici si contano a partire da 1.
Esempio di indicizzazione:
v=[7 3 0 5 2 6]
Line 155 ⟶ 158:
=== Matrici ===
==== Definizione matrici ====
Per creare una matrice si procede in modo simile alle variabili, per quanto riguarda l'assegnamento, racchiudendo la matrice tra patentesiparentesi quadre, separando gli elementi di una stessa riga con una virgola o con uno spazio e le righe con un punto e virgola.
M1=[1 2 3 4;5 6 7 8;9 10 11 12]
M2=[13,14,15;16,17,18]
M3=['a',19,'b';20,'c',21]
 
In una matrice si possono anche racchiudere variabili dichiarate in precedenza
In alternativa a virgole e punti e virgole si possono usare, rispettivamente, spazi e a-capo. In questo modo la rappresentazione di una matrice assomiglia a quella tradizionale dell'algebra:
M4=[ 1 2 3
4 5 6
7 8 9 ];
InNel creare una matrice si possono anche racchiudereutilizzare variabili dichiarate in precedenza
M4=[var1 var2;var3 var4]
ed è inoltre possibile definire le matrici per parti, ad esempio in una matrice M 3 x 3, i comandi
Line 167 ⟶ 175:
consentono di assegnare alla prima riga i valori, precedentemente definiti, a1, b1 e c1, alla seconda a2, b2 e c2 e così via.
 
Un altro modo per una dichiarazione veloce di matrici è ill'uso seguentedell'operatore di sequenza:
Sintassi: M=[ inizio:incremento:fine] |[ inizio|:fine]
anche in questo caso, se si omette l'incremento, per default è 1. Esempio:
M=[1:2:7;4:2:10;7:2:13]
 
M= 1 3 5 7
4 6 8 10
Line 179 ⟶ 187:
Per selezionare un elemento di una matrice, utilizziamo la seguente istruzione:
M(indice_riga, indice_colonna)
M(l,k) dove l,k <math>\in</math> <math>\mathbb{N}</math>, selezionano l'elemento che si trova in riga l-esima e colonna k-esima
È possibile estrarre anche intere colonne o righe. Supponiamo di avere una matrice M delcon tipom nxmx n elementi, in generale:
M(l,:) , estrae l'intera riga l-esima in un vettore riga di dimensionecon m elementi
M(:,k) , estrae l'intera colonna k-esima in un vettore colonna di dimensionecon n elementi
M(:) , estrae l'intera matrice in un vettore colonna di dimensione nxm
Per eliminare la colonna di una matrice M:
M(:,k)=[] ,elimina la colonna k-esima, la matrice M diventa nx(m-1)
 
==== Operazioni con le matrici ====
Si elenca ora una serie di operazioni molto utili per lavorare con le matrici in ambiente MatlabMATLAB.
 
Sia A una generica matrice mxnm x n, con il comando
size(A)
Sisi ottiene un vettore composto dal numero di righe e dal numero di colonne della matrice A (ovviamente questo è estendibile anche a dimensionimatrici maggioricon più di 2due dimensioni).
 
Con l'operatore ' (apostrofo), si ottiene la matrice '''trasposta''' di A:
Line 198 ⟶ 206:
questo comando è utile per trasformare un vettore riga in un vettore colonna e viceversa.
 
Con il comando:
sum(A)
si ottiene un vettore riga composto dalla '''somma''' di ogni colonna di A.
 
Con il comando:
det(A)
si ottiene il determinante della matrice A.
 
Con il comando:
poly(A)
si ottiene un vettore contenente i coefficienti del polinomio caratteristico di A.
Line 218 ⟶ 226:
si ottiene un vettore colonna composto da tutti gli elementi della '''diagonale principale''' di A. Se A fosse un vettore, si otterrebbe invece una matrice diagonale con gli elementi di tale vettore.
 
Con il comando:
trace(A)
si ottiene la '''traccia''' di A, cioè la somma degli elementi della diagonale principale.
 
Con il comando:
fliplr(A)
si ottiene una nuova matrice, ma con '''l'ordine delle colonne invertito'''.
 
Con il comando:
inv(A)
si ottiene la '''matrice inversa''' di A.
 
=== Realizzazione di grafici 2D ===
Uno strumento molto potente che l'ambiente MATLAB offre per rappresentare dati numerici è la rappresentazionepossibilità tramitedi realizzare il [[grafico di una funzione]]. In particolare, dati due vettori x e y dellecon stesseuguale dimensioninumero di elementi, è possibile rappresentarnetracciare il grafico di y=f( in funzione di x) con il comando
plot(x,y)
siSi fa notare che il comando plot non solo disegna y in funzione di x ma crea automaticamente anche un'interpolazione lineare dei valori assunti dalla funzione (dato che ovviamente nessuna funzione memorizzata in un calcolatore è continua).
 
È possibile includere opzioni aggiuntive come il colore o il tipo di linea seguendo la seguente sintassi:
plot(x,y,'marcatore stile colore')
dove il marcatore sta ad indicare in che modo i punti delladei funzionedue vettori saranno rappresentati (ad esempio: +, *, o, x), lo stile è lo stile della linea (è possibile scegliere tra linea continua, tratteggiata, tratto punto ed altri ancora: -, - -, :, -.) che unirà i punti e il colore è quello del grafico, contrassegnabilecontrassegnato con l'iniziale in inglese del colore scelto (ad esempio per avere un grafico verde si dovrà digitare ''g,'' iniziale di ''green''). È da notare che se si assegna un marcatore al comando plot, questo non effettuerà più l'interpolazione lineare automatica tra i punti della funzione, ma si limiterà a rappresentare i singoli punti.
 
Allo stesso modo, con il comando plot, è possibile disegnare una matrice quadrata:
Line 245 ⟶ 253:
dove y1=f(x1), y2=f(x2), e così via, rappresentano le funzioni da rappresentare, oppure utilizzare il comando
hold on
che fa sì che, se c'è un grafico attivo, questo non venga chiuso e il successivo plot si sovrapponga ad esso.
 
Con il comando:
Line 258 ⟶ 266:
aggiunge una griglia al grafico corrente.
 
È possibile, in modo molto semplice disegnare diversi grafici nella stessa finestra. Per fare ciò si usa il comando
subplot(m,n,p)
Con tale comando si disegnano in una finestra mxnm x n grafici. Il comando subplot va inserito subito prima del comando plot, e la variabile p rappresenta il numero del grafico da disegnare, contando lungo le righe da sinistra a destra. Ad esempio se si sta disegnandolavorando su una finestra con 3 righe e 4 colonne di grafici, e si vuole disegnare ora il secondo grafico della seconda riga, si scrive:
subplot(3,4,6)
 
Con il comando
axis([xi xf yi yf])
è possibile impostare a priori la porzione di grafico da visualizzare, indicando con xi l'ascissa iniziale, xf l'ascissa finale, yi l'ordinata iniziale e ovviamente yf l'ordinata finale. Si fa notare che vanno inseriti fra parentesi quadre perché la funzione axis ha bisogno dirichiede un vettore in ingresso, quindi è ovviamente possibile dichiarare all'esterno tale vettore e fornirglielofornirlo come argomento:
axis(V)
 
== Analisi e simulazione di sistemi dinamici con MATLAB ==
MATLAB è un potentissimo strumento per l'analisi numerica di sistemi dinamici, anche con molti ingressi e uscite. MATLAB permette di dichiarare facilmente degli oggetti sistema, grazie ad alcuni comandi giàche prontisi allpossono utilizzare installando un apposito componente aggiuntivo, il ''Control System Toolbox''uso. Dato un sistema dinamico è possibile quindi dichiararlo come sistema in forma esplicita (comando '''ss''', cioè state-space)
 
Sistema in forma esplicita (comando '''ss''', cioè state-space)
sys=ss(A,B,C,D,t0)
dove A, B, C, D, sono ovviamente le matrici dei coefficienti, mentre t0 è il periodo di campionamento dise si considera un sistema a tempo discreto, mentre se t0 viene omesso si dichiara un sistema a tempo continuo.
 
SistemaIl sistema può essere dichiarato anche in forma zeri-poli-guadagno (comando '''zpk''', zero-pole-gain)
sys=zpk([z1 z2 ··· zm],[p1 p2 ··· pn],K)
È da notare che K non è il guadagno statico del sistema, ma è semplicemente la costante fuori dalla [[funzione di trasferimento]] quando è nella forma K*Π(s-z_i)/Π(s-p_i).
 
FunzionePer definire una funzione di trasferimento (si impiega il comando '''tf:''', transfer function)
sys=tf(NUM,DEN)
dove num e den sono vettori riga contenenti i coefficienti dei polinomi al numeratore e al denominatore della funzione di trasferimento desiderata, presiordinati dal grado maggiore a quello minore. perAd esempio per indicare il polinomio: s^3 - 4s^2 + 0.23s - 1.9, equivalesi aldeve inserire il vettore riga:
[1 -4 +.23 -1.9]
 
Con il comando
lsim(sys,u,t,x0)
si ottiene l'andamento del sistema ''sys'' forzato dall'ingresso ''u'', durante il tempo ''t'', con stato iniziale ''x0''. ''u'' deve essere, in pratica, un segnale campionato in tutti gli istanti contenuti nel vettore ''t''. È evidente quindi che ''u'' e ''t'' devono avere la stessa dimensione, cioè lo stesso numero di elementi.
 
=== Un semplice esempio di simulazione ===
Line 324 ⟶ 330:
lsim(sys,u,t,[0 0]')
 
lo stesso risultato si poteva ottenere con il comando ''step,'' che traccia direttamente il grafico della risposta al segnale di ingresso a scalino:
step(sys)
il tempo in questo caso è calcolato automaticamente, ma può anche essere specificato:
Line 343 ⟶ 349:
3 5 7
4 9 2
 
== Alternative ==
Sono disponibili diverse alternative a MATLAB, tra cui:
 
* [[Maple]]
* [[Interactive Data Language]]
* [[Mathematica]]
 
Ce ne sono anche di disponibili come ''[[open source]]'' o [[software libero]]:
 
* [[GNU Octave]]
* [[Scilab]]
* [[FreeMat]]
* [[Julia (linguaggio di programmazione)|Julia]]
* [[Sage (software)|Sage]]
 
Sono relativamente compatibili con il linguaggio MATLAB. Tra queste, GNU Octave è unico perché vuole essere un ''drop-in'' [[GNU Octave#Compatibilità con il linguaggio MATLAB|compatibile con MATLAB]] a livello di sintassi.
 
Tra gli altri linguaggi che trattano gli ''[[array]]'' come [[Tipo di dato|tipi di dato]] basilari sono presenti:
 
* [[APL]]
* [[Fortran]] (dal 90 in poi)
* S-Lang, insieme ai linguaggi statistici [[R (software)|R]] ed S
 
Esistono anche alcune librerie che aggiungono funzionalità simili ai linguaggi esistenti, come:
 
* ILNumerics per [[.NET Framework|.NET]]
* IT++ per [[C++]]
* Numeric.js per [[JavaScript]]
* SciLua e Torch per [[Lua]]
 
* Perl Data Language per [[Perl]]
* [[NumPy]], [[SciPy]] e [[Matplotlib]] per Python
* SciRuby per [[Ruby (linguaggio di programmazione)|Ruby]]
 
== Note ==
Line 357 ⟶ 397:
 
== Altri progetti ==
{{interprogetto|commons=Category:MATLAB}}
 
== Collegamenti esterni ==
* {{SitoCollegamenti ufficialeesterni}}
* {{FOLDOC}}
 
{{Controllo di autorità}}
{{Portale|informatica|matematica}}
 
[[Categoria:Software per la matematica]]
[[Categoria:Software applicativo individuale]]
[[Categoria:Linguaggi di programmazione]]