Matlab permette di disegnare facilmente dei grafici
La prima cosa da fare è costruire una nuova “figura”:
figure
apre una nuova finestra…In molti casi, questo passaggio può essere saltato
figure
automaticamenteSupponiamo di volere costruire un grafico cartesiano
Per prima cosa dobbiamo costruire il vettore delle \(x\)
Possiamo usare linspace
:
x = linspace(-2*pi, 2*pi, 200)
Quindi scrivendo:
…Si ottiene lo stesso risultato, ma senza stampe
Ora otteniamo il vettore con i valori per l’asse delle \(y\)
Calcoliamo per esempio la funzione “seno”
x
…sin
opera elemento per elementoIn questo modo otteniamo:
sin
…x
A questo punto possiamo disegnare il grafico
Si utilizza la funzione plot
plot
riceve come argomento due vettori (coordinate \(x\) e \(y\))Avremmo anche potuto scrivere direttamente:
Si può anche specificare un colore:
plot
per altri dettagli!Si può aggiungere una griglia con:
Per disegnare più curve sovrapposte:
figure() % Nuova figura
plot(x, sin(x), 'b') % Prima curva, in blu
hold on % Attiva la modalità "hold"
plot(x, cos(x), 'g') % Seconda curva, in verde
hold off % Disattiva la modalità "hold"
hold
ogni plot rimpiazza il precedenteDisegnate, per \(x \in [-4, 4]\) le seguenti funzioni:
\[\begin{align} (1)\quad & x^2 - x & (2)\quad & \frac{1}{1 + |x|} \\ (3)\quad & \frac{1}{1 + e^{-x}} & (4)\quad & \frac{1}{x|x|} \end{align}\]
Prima di disegnarle, cercate di intuire se sono:
E quindi verificatelo visivamente
Soluzione:
x = linspace(-4, 4, 200); % Notate il ;
plot(x, x.^2 - x) % Cont., derivabile, conv.
plot(x, 1./(1 + abs(x))) % Cont., non derivabile
plot(x, 1./(1 + exp(-x))) % Cont., derivabile
plot(x, 1./(x.*abs(x))) % Non cont., non derivabile
0
la funzione non è definita…plot
li congiunge con una lineaConsideriamo la serie armonica (troncata):
\[S_N = \sum_{n=1}^N \frac{1}{n}\]
Vogliamo verificare empiricamente che \(S_N\) diverge per \(N \rightarrow \infty\)
Consideriamo la serie armonica (troncata):
\[S_N = \sum_{n=1}^N \frac{1}{n}\]
Vogliamo verificare empiricamente che \(S_n\) diverge per \(N \rightarrow \infty\)
Osservazione fondamentale:
\[S_N = S_{N-1} + \frac{1}{N}\]
Una possibile implementazione (nello start-kit):
Dato un vettore di valori \(x\):
Come procedere:
Vediamo tre metodi (nel file my_sin_cos.m
)…
Primo metodo: concatenazione di colonne
sin(x)
e cos(x)
restituiscono un vettore rigaAvremmo potuto anche usare:
Secondo metodo: concatenazione di righe (una per una)
y2
aggiungendo una rigaTerzo metodo: assegnamento di righe (una per una)
i
e :
)Consideriamo la serie geometrica (troncata):
\[S_N = \sum_{n=0}^N a r^n\]
Vogliamo verificare empiricamente che \(S_n\) converge se \(r < 1\), per \(N \rightarrow \infty\)
Osservazione fondamentale:
\[S_N = S_{N-1} + a r^N\]
Svolgete l’esercizio nel file di script my_geometic.m
Nel file di script my_msum
:
A
e B
di esempio, con la stessa dimensioneConfrontate il vostro risultato con quello dell’operatore +
di Matlab
Abbiamo visto che Matlab permette di accedere ad un vettore con:
V
è un vettoreI
è un vettore di indiciNel file di script my_index.m
:
X
di dati ed un vettore I
di indiciY
con gli elementi di X
…I
Confrontate il vostro risultato con quello di Matlab
Il valore di \(e^x\) si può calcolare sfruttando la serie di Taylor:
\[S_N = \sum_{k = 0}^N \frac{x^k}{k!}\]
Vogliamo verificarlo empiricamente che \(S_N \rightarrow e^x\) quando \(N \rightarrow \infty\):
factorial(k)
Come nel caso della serie armonica, vale:
\[S_N = S_{N-1} + \frac{x^N}{N!}\]
Svolgete l’esercizio nel file di script my_exponential.m
Il valore di \(\sin(x)\) si può calcolare sfruttando la serie di Taylor:
\[S_N = \sum_{k = 0}^N \frac{-1^k x^{2k+1}}{(2k+1)!}\]
Vogliamo verificarlo empiricamente:
Come nel caso della serie armonica, vale:
\[S_N = S_{N-1} + \frac{-1^N x^{2N+1}}{(2N+1)!}\]
Svolgete l’esercizio nel file di script my_sin.m
Dati due vettori \(x\) ed \(y\) di \(n\) elementi, il loro prodotto cartesiano è:
\[\left(\begin{array}{cc} x_1 & y_1 \\ x_1 & y_2 \\ \vdots & \vdots \\ x_n & y_1 \\ \vdots & \vdots \\ x_n & y_n \end{array}\right)\]
Nel file di script my_cartesian.m
: