vuoi
o PayPal
tutte le volte che vuoi
Array (vettori & matrici)
Finora si è pensato alle variabili utilizzate come semplici valori numerici (variabili scalari). In realtà, ogni variabile è una struttura di tipo vettoriale: ARRAY è una lista di valori ordinati secondo uno o più indici. Un array ha due dimensioni: la prima dimensione rappresenta il numero di righe (n), la seconda il numero di colonne (m).
Funzioni MATLAB che consentono di costruire particolari matrici e vettori:
- traccia di una matrice (trace)
- sommare le componenti di un vettore (sum)
Il resto delle funzionalità:
Pre-allocazione: per ottenere codice più veloce, è possibile effettuare la pre-allocazione di vettori e matrici, ossia l'allocazione in memoria dei vettori e delle matrici prima del loro utilizzo (usando la funzione zeros o ones), rendendo il codice più efficiente (spesso si eliminano i messaggi di warning).
- di MATLAB).Memorizzare un vettore riga:
<code><pre>>> x=[1 -1 3 4 0]</pre></code>
- Memorizzare un vettore colonna:
<code><pre>>> x=[1; -1; 3; 4; 0]</pre></code>
- Costruzione di vettori equispaziati:
<code><pre>vettore=inizio:passo:fine( Questo vettore x viene usato negli esempi successivi )</pre></code>
- Comando linspace:
<code><pre>>> x=linspace(0,0.5,6)</pre></code>
Genera dei vettori riga linearmente intervallati. Dove min, max sono gli estremi dell'intervallo incui generare i numeri e num è il numero di elementi da generare nell'intervallo specificato. Il numero di punti è opzionale, se omesso viene posto uguale a 100. Usare la costruzione di vettori equispaziati o usare il comando linspace è indifferente. Il risultato è il medesimo.
- Operazioni con arrayOperazioni base:
<code><pre>Prodotti tra array: vengono eseguite le operazioni di prodotto vettore - vettore,</pre></code>
matrice - vettore,
● matrice - matrice tramite :
*Operazione di vettorializzazione: volendo utilizzare le operazioni aritmetiche tra vettori (come
● elevamento a potenza, divisione, …), che normalmente non sono definite, è possibile farlo
tramite l’utilizzo del simbolo: . posto davanti al simbolo dell’operazione (^, / , …) permette di
svolgere l’operazione per ogni singolo componente del vettore, ottenendo così un nuovo vettore,
di lunghezza uguale, le cui componenti sono frutto dell’operazione.
Perciò, avendo un vettore x, se voglio usare una funzione su ogni componente del vettore
(ottenendo così un nuovo vettore), basta dichiarare la funzione normalmente, utilizzando però la
vettorializzazione delle operazioni. Per esempio:
( Elevare a potenza un vettore x, cioè ottenere un nuovo vettore con le singole componenti di x
elevate al dato esponente n, non è possibile farlo con si utilizza : )
x^n,
x.^n>> y=x.^n( Funzione con elevamento a potenza, divisione: )>> y=(1-3*x.^2)./(2-x.^3)y = 0.5000 0.4852 0.4418 0.3700 0.2686 0.1333
Estrarre parte delle componenti di un array, operatore :● :vettore:○ matrice: permette di estrarre sotto-matrici una matrice nota○ dove l’ordine degli indici è sempre (riga, colonna). Mettendo solo si intendono tutti gli:indici.
Autovalori e autovettori:● Norma di un vettore: comando● >> norm(vettore, tipo_di_norma)
Introduzione alla programmazioneSi utilizzano file di testo salvati con estensione .m , contengono le sequenze di comando da fare seguire alcalcolatore. I file .mat contengono variabili (salvate in un Workspace precedente) che così si possonoriutilizzare e/o modificare. Esistono due tipi di programmi:SCRIPT: lista di istruzioni tra cui funzioni predefinite e/o create dall’utente● FUNCTION: lista di istruzioni con variabili di input/output (opzionali)●Gli SCRIPT operano sulle variabili
contenute in memoria. Le variabili della FUNCTION sono locali e non restano in memoria dopo l'esecuzione della stessa. Lo scopo di una FUNCTION (funzione) è quello di prendere in input un certo numero di valori, fare alcune operazioni con tali argomenti e quindi restituire l'output. Sintassi della FUNCTION:
function [variabile/i output] = nome_function(variabile/i input)
...
end
I parametri di input e output vanno separati da virgole. Quando si salva una FUNCTION il nome del file .m dev'essere lo stesso dato alla funzione.
Funzione handle:
Funzione dichiarata senza l'utilizzo di uno script a parte (non salvata in un file .m). Una funzione handle è un tipo di dati di MATLAB che memorizza un'associazione ad una funzione. Chiamare indirettamente una funzione consente di richiamare la funzione indipendentemente da dove la si chiama. È possibile creare funzioni handle ("maniglie") per funzioni con nome (già definite, con la keyword function
) anonime.
È possibile memorizzare più funzioni handle in un array e salvarle e caricarle, come si farebbe conqualsiasi altra variabile. Per creare una funzioni handle: f = @nome_funzione;
Si chiama una funzione utilizzando una funzione handle nello stesso modo in cui si chiama direttamente lafunzione. Un utilizzo frequente delle funzioni handle:
Funzione anonima: Una funzione anonima è una funzione MATLAB basata su una riga che non richiede un file di programma (niente script). È possibile creare funzioni handle per funzioni anonime. Sintassi: f=@(n) funzione
Dove n
è la variabile indipendente della funzione e funzione
è la funzione scritta direttamente là n funzione
Visualizzazione grafica
Per la visualizzazione grafica di funzioni predefinite: Utilizzare la funzione per plottare grafico 2D. Definendo [a,b] l’intervallo di variazione della funzione fplotscalare, la sintassi di base è: fplot(nome_funzione, [a,b])
Traccia il
plot
si definisce la funzione genericamente (es. come una funzione anonima); si fplot
passa un'altra funzione (quella d'interesse) a quella funzione "generica"; e si lascia che Matlab scelga i valori x e calcoli i valori y.
Per la visualizzazione grafica di funzioni non predefinite:
Funzione (principale function grafica di MATLAB)
plot(x,y)
Traccia il grafico usando direttamente due vettori già definiti, cioè produce il grafico dei punti (x , y ). I due vettori devono avere la stessa lunghezza (se uno è funzione dell'altro non ci saranno ovviamente problemi). Con fplot
bisogna definire manualmente i valori del vettore x e scrivere la y corrispondente data dalla funzione.
Alcune opzioni utili per la visualizzazione grafica:
Specificare la<p>linea del grafico (colore, tipo di linea e simbolo):</p>
<p>Esempio: linea di colore rosso tratteggiata e simbolo “asterisco”:</p>
<pre>>> fplot(@(x) sin(x),[0,1],’r--*’)</pre>
<p>Aprire più finestre per plottare i grafici:</p>
<ul>
<li>: apre una figura generica</li>
<li>>> figure : apre la figura n-esima (n numero di figura alla quale si è arrivati)</li>
<li>>> figure(n)</li>
</ul>
<p>Aggiungere un titolo al grafico:</p>
<pre>>> title(’nome titolo’)</pre>
<p>Aggiungere etichetta all’asse delle ascisse:</p>
<pre>>> xlabel(’nome assex’)</pre>
<p>Aggiungere etichetta all’asse delle ordinate:</p>
<pre>>> ylabel(’nome assey’)</pre>
<p>Per aggiungere un grafico ad uno già utilizzato si usa il comando <code>hold onplot</code>, per smettere di tracciare sullo stesso grafico si utilizza invece il comando <code>hold off.plot(. . .)</code></p>
<p>Formato di visualizzazione</p>
<p>Usando il comando . . . si decide il formato di visualizzazione dei numeri, come il <code>format long</code>,</p>
shortnumero di cifre decimali visualizzabili dopo la virgola, oppure la notazione scientifica o esadecimale . . .
Notazione e (e-notation):
La notazione esponenziale serve per scrivere un elevamento a potenza del 10 (e = 10) e viene usata nellavisualizzazione dei numeri in notazione scientifica o più in generale per la precisione dei risultati (otolleranze): Sintassi:numeroe±n( Per esempio: 1e-4 = 10-4 ; 10e5=106 ; 5e-2 = 5*10-2 )
Operatori logici
Cicli For : il ciclo serve per ripetere le stesse istruzioni un certo numero di volte. La sintassi:● for“passo” significa di quanto mi sposto per iterazione, prima di arrivare al max, può essereomesso. Per esempio passo = 1 significa che ogni iterazione aumento di uno il miocontatore (contatore +1) , passo = 2, lo aumento di due (contatore +2).
While : Il ciclo serve per ripetere le stesse istruzioni fintantoché è vera una● whiledeterminata condizione. La sintassi:
Costrutto if
Il costrutto
Permette di verificare se un'espressione logica risulti vera o falsa. Se l'espressione è vera il programma esegue le istruzioni 1, altrimenti vengono eseguite le istruzioni 2. La sintassi:
Utilizzo di file esterni
Scrittura su file
Scrivere i risultati ottenuti (output) su un file di testo in modo tale da averli salvati esternamente da MATLAB e poterli così usare altrove. Il comando viene utilizzato così:
fopen()
Aprire/creare il file di testo:
>> fid = fopen('nomefile')
fid è una variabile (scelta da noi) scalare intera che identifica il file ("fid = file id"). Se il file esiste viene semplicemente aperto, altrimenti MATLAB lo crea.
Opzioni: si può scegliere come agire sul file
>> fid = fopen('nomefile', permesso)
Il permesso viene identificato tramite una lettera e rappresenta il comportamento che MATLAB avrà con il file:
permesso : writing (sovrascrive dati esistenti)
’w’permesso : append (scrive dati a partire dalla fine del file)
’a’permesso : read (legge solo il contenuto)
’r’Scrittura su file:
Dopo aver usato il comando fopen, si usa il comando fprintf per scrivere sul file, sintassi:
fprintf(fid,’formato’,variabili)
( Per esempio: )
fprintf(fid, '%d %.8f %.8f %.8e %.8e \n', 1, T, Q, ET(1), EQ(1));
Il file va chiuso dopo la scrittura: fclose(fid)
Caricare i dati
In molti casi, è utile caricare i dati in MATLAB direttamente da file di input (file di testo), evitando di inserirlicome visto precedentemente. Ci son due modi per farlo:
1) Carico due file distinti, ciascuno dei