Appunti Matlab A.A. 2021/2022
Sommario
- Lezione 3 marzo ........................................................................................................................... 2
- Lezione 10 marzo ........................................................................................................................ 3
- Lezione 17 marzo ........................................................................................................................ 6
- Lezione 24 marzo ........................................................................................................................ 9
- Lezione 31 marzo ...................................................................................................................... 13
- Lezione 7 aprile ......................................................................................................................... 18
- Lezione 14 aprile ...................................................................................................................... 23
- Lezione 21 aprile ...................................................................................................................... 29
- Lezione 28 aprile ...................................................................................................................... 33
- Lezione 5 maggio ...................................................................................................................... 39
- Lezione 12 maggio .................................................................................................................... 42
- Lezione 19 maggio .................................................................................................................... 49
- Lezione 26 maggio .................................................................................................................... 53
Lezione 3 marzo
Come si usa Linux?
Nel menù attività c’è un’icona che raffigura un quadrato nero, cliccandoci sopra si aprirà la finestra di terminale. Una volta apertasi vede il simbolo del dollaro $ e prima c’è l’username con il numero della postazione. Questa finestra ci servirà come punto di appoggio per accedere a Matlab. La finestra di terminale ci dice dove siamo, in quale directory. Scrivendo ls ci apparirà l’elenco di quello che c’è nella directory in cui siamo.
Se devo creare una nuova directory (ramo della directory principale) scrivo mkdir nome_directory (ad esempio mkdir laboratorio). Per entrare nella directory che ho appena creato scrivo cd nome_directory, dopo aver fatto questo, nella parentesi quadra ci apparirà il nome della directory dopo il nostro username. Per tornare indietro di una directory (tornare a quella precedente) scrivo cd ... Per aprire Matlab scrivo matlab &.
Termini che useremo spesso
- Script: sinonimo di programma o codice
- Implementare uno script: sinonimo di scrivere un programma
- Eseguire uno script: il computer esegue le indicazioni contenute nello script
- Algoritmo: le istruzioni a parte dalle quali si costruisce un programma. È la strategia di soluzione di un problema, è un procedimento di calcolo che ci permette di risolvere il problema stesso.
COMANDO clc = cancella tutto quello che ho sulla command window ma mi mantiene i valori delle variabili.
COMANDO whos = ci mostra le caratteristiche di ogni variabile.
COMANDO who = ci elenca le variabili.
COMANDO clear = cancella una o tutte le variabili.
COMANDO edit nome_script.m = crea uno script.
COMANDO % = crea una riga di commento nello script.
Se metto il ; il risultato dell’operazione non apparirà sulla command window.
Primo script
% primo script di prova
clear % cancello tutte le eventuali variabili presenti nel workspace
a=3; % serve per non visualizzare il contenuto della variabile sulla command window
h=5;
disp ('base ='); disp(a)
disp ('altezza ='); disp(h)
area=a*h/2;
disp ('il valore dell''area e'' uguale a') % quando lancio lo script mi esce la frase che ho scritto tra gli apostrofi
disp(area) % appare il valore trovato
COMANDO diary on = apre un file che si chiama diary e che salva tutto quello che scrivo nella command window prima di scrivere diary off.
Lezione 10 marzo
Se scrivo diary('lab10marzo.txt') viene generato un file dove rimane in memoria tutto quello che scrivo sulla command window.
Se voglio scrivere una variabile in singola precisione (non in doppia come default) devo scrivere b=single(nome_variabile_o_valore). Se voglio trasformarla in doppia precisione scrivo i=double(b). Se voglio creare una variabile di soli caratteri devo scrivere stringa='ciò_che_voglio_scrivere'. La variabile che ho creato si chiamerà stringa.
Se chiedo a Matlab di verificare se una proposizione sia vera o falsa (ad esempio 5<9) se mi da ans=1 vuol dire che è vero, se invece appare ans=0 sarà falso. (ans sarà una variabile logica).
Operazioni logiche
Se io ho due predicati logici scalari (p1 e p2) questi due possono essere veri o falsi.
Se scrivo p1 && p2 potrà essere:
- V && V la risposta sarà VERO
- V && F la risposta sarà FALSO
- F && V la risposta sarà FALSO
- F && F la risposta sarà FALSO
Una proposizione in cui vado a mettere la congiunzione & sarà VERA solo se tutte le proposizioni siano vere, ne basta una falsa per far in modo che tutta la proposizione sia falsa.
Un altro modo per mettere insieme proposizioni è la O disgiunzione. Essa serve per dire ‘può essere vera questa cosa o anche questa cosa’ (oggi c’è il sole oppure c’è la pioggia: deve essere vera o l’una o l’altra cosa, quindi ne basta una vera per fare in modo che la proposizione sia vera).
In Matlab viene fatta con || (doppia barra verticale). Se ho due predicati p1 e p2 che possono essere veri o falsi, uniti avrò:
- V | V la risposta sarà VERO
- V | F la risposta sarà VERO
- F | V la risposta sarà VERO
- F | F la risposta sarà FALSO
Quindi una connessione logica in cui c’è una disgiunzione sarà sempre VERA tranne quando le due proposizioni sono entrambe FALSE.
Per la negazione di una proposizione si utilizza il simbolo tilde (~). Se nego una proposizione FALSA diventerà VERA, mentre se nego una proposizione VERA diventerà FALSA.
Vettori e matrici
Oltre a lavorare con scalari, lavoreremo anche con vettori o matrici.
Potrò avere un:
- Vettore riga (quando ho tanti numeri in una riga)
- Vettore colonna (quando ho tanti numeri in una colonna)
Per creare un vettore riga semplice e assegnare il risultato di esso a una variabile (x in questo caso) scrivo: x = [ 1 2 3 4] tra un numero e l’altro posso lasciare uno spazio bianco o mettere la virgola.
Dopo aver dato l’invio nel workspace mi appare il vettore riga che ho creato. Se poi faccio il comando whos vedrò che lo spazio occupato da questa variabile è 1x4 perché occupa una riga e 4 colonne. Se voglio sapere e prendere la seconda componente di questo vettore devo scrivere x(2) {in questo caso 2 è il numero della componente che voglio prendere, che coincida al valore è solo un caso}, e premendo invio mi appare il valore della seconda componente del vettore x.
Se voglio modificare una componente all’interno di un vettore posso assegnargli un altro valore, se ad esempio scrivo x(2)=x(2)+2 assegno alla componente 2 del vettore se stessa con l’aggiunta di 2. Modifico così la seconda componente del vettore senza modificarne il resto.
Per creare un vettore colonna si può o creare un vettore riga e poi creare la sua trasposta oppure creare direttamente il vettore colonna. Per fare la trasposta di un vettore o di una matrice si usa l’apostrofo (‘). Quindi basta che scrivo y=x’.
Se dopo aver fatto il vettore colonna, eseguo il comando whos vedo che il vettore colonna occupa 4x1 mentre il vettore riga 1x4.
Per lavorare sulla singola componente del vettore colonna si fa lo stesso procedimento fatto sul vettore riga. Per creare direttamente un vettore colonna invece si può scrivere come il vettore riga ma invece di lasciare lo spazio tra un valore e l’altro metto il punto e virgola (;) per far capire a Matlab di andare a capo). Posso fare la stessa cosa andando a capo dopo ogni numero e poi chiudere la [].
Se ho un vettore riga x e voglio trasformarla in vettore colonna y posso scrivere y=x(:) i : sono un comando che permette di prendere le componenti del vettore riga e mettere in colonna.
Come si crea una matrice?
Nello stesso modo dei vettori, tutto [ ] e dopo aver scritto le componenti della prima riga metto un ; per scrivere le componenti della seconda e così via. A=[1 2 3 4; 5 6 7 8; 9 10 11 12]
Un altro modo per scrivere la stessa matrice è andare a capo dopo ogni riga e quando si ha finito chiudere la parentesi. Per andare a prendere un elemento della matrice, tipo la componente della seconda riga e seconda colonna, devo scrivere A=(2,2) {2 e 2 sono i due indici di riga e colonna che mi interessano}
Se scrivo A=(2,3) significa che sto cercando la componente alla 2a riga e 3a colonna. Se voglio trovare la matrice trasposta basta che assegno un nuovo nome alla matrice e ci aggiungo l’apostrofo quindi mi basta scrivere B=A’ per visualizzare la matrice trasposta della matrice di partenza.
Se voglio prendere tutti gli elementi di una riga o di una colonna utilizzo l’operatore : se scrivo A(:,1) vengono fuori tutti gli elementi di riga rispetto alla prima colonna (che ho messo per secondo. Se invece scrivo A(1,:) vengono fuori i componenti della prima riga di A.
Variabili speciali e formati numerici
Se mi serve la variabile pi.greco, essa è già memorizzata da Matlab, basta che scrivo pi, mi appare però con sole 4 cifre decimali. Per cambiare visualizzazione delle cifre decimali, se ad esempio ne voglio molte di più, basta che scrivo format long.
Se scrivo format shorte mi appariranno poche cifre decimali ma mi fornisce indicazioni sulla parte esponenziale. Se scrivo format longe mi apparirà un formato esponenziale con parecchie cifre nella parte frazionaria. Per tornare al formato di default di Matlab basta che scrivo format.
Questi formati possono essere utili se devo visualizzare i risultati e lavorare solo sulla command window.
Struttura IF (condizionale)
Se (IF) è vera una proposizione logica allora fai determinate istruzioni, altrimenti (ELSE) fai altre istruzioni. END.
Se (IF) è vera una proposizione logica allora fai determinate istruzioni, END. (Se è falsa non fare niente).
Se (IF) è vera la proposizione logica 1 fai le istruzioni 1, (ELSEIF) altrimenti se è vera la proposizione logica 2 esegui le istruzioni 2, (ELSE) altrimenti fai istruzioni finali. END.
Script per risolvere delta delle equazioni di secondo grado
clear % cancello tutte le variabili possibili presenti nella command window
a=1; b=-4; c=3; % assegno dei valori a delle variabili
delta=b^2-4*a*c;
if delta>=0
x1=(-b+sqrt(delta))/(2*a); % sqrt è la radice quadrata
x2=(-b-sqrt(delta))/(2*a);
disp('radici')
disp(x1); disp(x2);
else % altrimenti
disp('non ci sono radici reali')
end
Lezione 17 marzo
Quando noi abbiamo un vettore e vogliamo fare delle operazioni su quel vettore di tipo aritmetico (ma non algebrico) Matlab ci permette di fare determinate cose in modo semplice. Andiamo a scrivere due vettori riga qualsiasi x e y con lo stesso numero di componenti. Con questi due vettori possiamo fare diverse cose.
Vettorizzazione delle funzioni
Prendo una funzione qualsiasi semplice (tipo la radice quadrata) e voglio fare componente per componente. Posso scrivere z=x+y e mi risulta un vettore riga con le componenti che sono la somma delle singole componenti dei vettori x e y. Una volta creato il vettore z basta scrivere sqrt(z) per fare la radice quadrata di tutte le componenti del vettore z.
Questa cosa prende il nome di vettorizzazione delle funzione: ho x vettore e f funzione predefinita di Matlab avrò y=f(x) in y(1)=f(x(1)), y(2)=f(x(2)) e così via. Le funzioni di Matlab matematiche sono ad esempio sqrt (radice quadrata), exp (e), log (logaritmo naturale), log 10 (logaritmo in base 10), abs (valore assoluto), sin (seno), cos (coseno), tan (tangente).
Operazioni su vettori
Somma e sottrazione tra 2 vettori (stessa dimensione cioè vettori riga o colonna, entrambi con lo stesso numero di componenti)
z= x + y
z= x – y
Moltiplicazione e divisione su vettori componente per componente non posso utilizzare i simboli * e / per i vettori, ma solo per variabili scalari. Invece per la moltiplicazione e divisione su vettori componente per componente devo utilizzare il simbolo .* o ./
Se ho una matrice A di dimensione 3x3 e un vettore x di 3 componenti in algebra lineare fare il prodotto y=Ax darà come risultato un vettore colonna, in Matlab devo scrivere y=A*x. Se invece scrivo y=A.*x avrò come risultato una matrice, perché Matlab lo calcola il prodotto degli elementi di A componente per componente per gli elementi di x. →* ./ .^ in questo modo vettorizzo
Function handle
Funzioni che sono delle variabili che se non salvo in uno script verranno perse.
Voglio scrivere la funzione f(x) = 2x + sin(x) – e * x2. →
Per introdurre una function handle devo assegnarle un nome (f) f=@(x) 2*x + sin(x) – exp(x) .* x.^2
La @ serve per indicare che la f è una function handle (funzione che devo poter valutare). All’ultima moltiplicazione (così come nell’elevazione) ho utilizzato il .* (e .^) perché devo poterlo valutare anche sui vettori, mentre nella prima moltiplicazione ho usato solo * perché il 2 è scalare. La function handle avremo a valutare sia su scalari sia su vettori, è per questo che uso le operazioni vettorizzate.
Script per fare il grafico di una funzione
Posso creare vettori di componenti equidistanti
x= linspace (a,b,n) a e b sono estremi dell’intervallo n è il numero di punti (se non metto n mi crea 100 punti di default)
x = a : incremento : b se a < b l’incremento > 0 se a > b l’incremento < 0
% script di esempio sui grafici di funzione
clear % eliminare tutte le variabili che potrebbero darci fastidio
close all % chiudiamo tutte le eventuali figure presenti (grafici prima)
f=@(x) 0.2-1.5*sin(x); % la funzione seno è già vettorizzata
fplot(f) comando che crea il grafico della funzione
% quando lancerò questo script non apparirà nulla sulla command window ma uscirà una finestra aggiuntiva con il grafico
% se voglio aumentare lo spessore delle righe del grafico scrivo così
fplot(f,'linewidth',2) % spessore da 0 a 4
% di default il colore del grafico è il blu
% se non definisco un intervallo Matlab prenderà i valori da -5 a 5
hold on % conservo il primo grafico, sovrascrivendolo con il secondo
% prendo ora solo alcuni valori che metterò in un vettore
x=[0 2 4 6]; % ascisse
y=f(x); % ordinate
% plot(x,y) non più fplot perché conosco sia le ascisse che le ordinate
% facendo così mi unisce i punti
plot(x,y,'o') % così metterò in risalto i punti sul grafico precedente senza unirli con i segmenti
figure % apro una figura successiva a quella già creata
a=0; b=2; % estremi dell'intervallo su cui voglio fare il grafico
x=linspace(a,b);
y=f(x);
plot(x,y,'linewidth',2)
% ora vedrò due figure
% voglio andare a fare sul secondo grafico l'asse delle ascisse e il grafico della bisettrice
hold on % il primo hold on mi serviva per sovrascrivere la prima figura, ora ne devo scrivere un altro
x1=[a,b] % vettore ascisse
y1=[0,0] % vettore ordinate
plot (x1,y1,'linewidth',2) % asse delle ascisse
plot (x,x,'linewidth',2) % bisettrice essendo y=x
xpath ('asse delle ascisse') % etichetta su asse x
xpath ('asse delle ordinate') % etichetta su asse y
title ('Esperimenti di grafici') % titolo della figura
plot(x,y,'o') % così metterò in risalto i punti sul grafico precedente
plot (x1,y1,'linewidth',2) % asse delle ascisse
plot (x,x,'linewidth',2) % bisettrice essendo y=x
xpath ('asse delle ascisse') % etichetta su asse x
xpath ('asse delle ordinate') % etichetta su asse y
title ('Esperimenti di grafici') % titolo della figura
Lezione 24 marzo
Ripasso della struttura condizionale IF
1a tipo di struttura
Se (if) la proposizione logica che andiamo a scrivere è vera allora abbiamo delle istruzioni (una o più) da eseguire, altrimenti (else) possiamo fare altre istruzioni. Fine (END)
2a tipo di struttura
Se (if) la proposizione logica è vera allora abbiamo delle istruzioni da eseguire, altrimenti (else) se (if) abbiamo un’altra proposizione logica abbiamo da eseguire altre istruzioni, (posso fare ‘altrimenti se’ quante volte voglio), poi ci saranno le istruzioni finali. Fine (END)
Ciclo FOR
In genere io faccio variare un indice intero e al variare di esso faccio determinate istruzioni
FOR i= 1 : 10 [oppure 1 : 1 (incremento) : 10] istruzioni END
L’operatore : ci permette di creare un vettore di componenti equidistanti. Se scrivo x= 1 : 2 : 10, Matlab mi creerà un vettore con componenti (1 3 5 7 9), ovvero un vettore da 1 a 10 con componenti equidistanti di passo 2. Se io volessi creare un vettore di passo 1, invece di scrivere x= 1 : 1 : 10 mi basta scrivere x = 1 : 10 (di default usa 1 come incremento)
In generale il ciclo for è: FOR i = (vettore riga) istruzioni END
Quando entro nel ciclo, la i è uguale alla prima componente del vettore, eseguo le istruzioni, torno indietro al ciclo FOR e i diventa la seconda componente ed eseguo le istruzioni, ecc.
Quando scrivo somma=0 ho inizializzato una variabile = 0. Io voglio fare questa somma di i _ n=25
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Riassunto corso Calcolo numerico (Prof. Mazzia)
-
Schemi preparazione esame Matlab
-
Dimostrazioni Teoremi corso Calcolo numerico (Prof. Mazzia)
-
Riassunto esame Economia aziendale, Prof. Moisello Annamaria, libro consigliato Azienda - Istituzioni di Economia A…