metodi numerici con elementi di programmazione · matlab (matrix laboratory) è un sistema software...

182
Metodi numerici con elementi di Programmazione A.A. 2017-2018 Introduzione al MatLab (parte 1) 1

Upload: lydiep

Post on 21-Feb-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Metodi numerici con elementi di Programmazione

A.A. 2017-2018

Introduzione al MatLab

(parte 1)

1

Page 2: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

2

Docente: Vittoria Bruni

Email: [email protected]

Ufficio: Via A. Scarpa,

Pal. B, I piano, Stanza n. 16

Tel. 06 49766648

Ricevimento: consultare la sezione Avvisi

nella pagina web dedicata al corso

Page 3: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

3

Il materiale didattico è disponibile sul sito http://ingaero.uniroma1.it/ nella

pagina dedicata al corso Metodi Numerici con elementi di Programmazione

Matlab: Licenza campus Sapienza http://campus3.uniroma1.it

Per consultazione: Getting Started with MatLab – The mathworks

www.mathworks.com

Page 4: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico

• Linguaggio di programmazione ad alto livello interpretato, con particolari facilitazioni nelle elaborazioni di matrici

•Contiene i costrutti tipici dei linguaggi di programmazione

•Possiede un ampio insieme di tipi di dato predefiniti

•Supporta la programmazione orientata agli oggetti

•Usato sia per creare rapidamente piccoli programmi test (programmazione in the small) che per applicazioni più complesse (programmazione in the large)

Matlab

4

Page 5: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico

• Grafici in 2 e 3 dimensioni

•Funzioni per la visualizzazione di vettori e matrici

•Funzioni per l’impostazione dell’aspetto della visualizzazione (annotazioni, colori, linee,…)

•Funzioni per elaborare immagini e creare animazioni

•Funzioni per creare interfacce

Matlab

5

Page 6: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico

• Programmi interni per la risoluzione dei problemi dell’Analisi Numerica

- contiene funzioni elementari, algoritmi di calcolo,

algebra lineare, …

• Pacchetti per svariati tipi di applicazioni (Toolbox) --- l’elaborazione numerica dei segnali e delle immagini, la simulazione di sistemi dinamici, il calcolo simbolico, wavelet, ecc.

• Interazione con altri linguaggi di programmazione (per es. C e Fortran)

Matlab

6

Page 7: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

• Creato da Cleve Moler (Univ. Del New Mexico) alla fine degli anni ‘70 per fornire agli studenti un facile accesso al software per l’elaborazione di matrici sviluppato in LINPACK e EISPACK

•Proprietà della MathWorks dal 1984, è diventato uno standard nella ricerca, nella didattica e anche nell’industria

•Ambiti applicativi:

matematica e calcolo numerico; sviluppo di modelli, simulazioni e prototipi; analisi dati; visualizzazione scientifica; applicazioni con interfaccia utente grafica

Matlab

7

Page 8: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Interfaccia grafica: Finestre

8

finestra principale DI LAVORO INTERATTIVA: dare comandi, eseguire funzioni, etc

Linea di comando o prompt

Page 9: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Interfaccia grafica: Command window

9

Matlab lavora in modo interattivo, cioè l’utente digita una istruzione ed ha immediatamente la risposta. Il prompt su cui si digita l’istruzione è la coppia di caratteri >>

>> comando (Per eseguire, digitare Enter)

Esempio

>> 3+2 (Enter)

ans =

5

>>

Page 10: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab

• Per uscire dalla sessione di lavoro interattiva usare il comando:

>> quit

• Per cancellare il contenuto della finestra usare il comando: >> clc

• Per ripetere le ultime operazioni effettuate usare i tasti: e • Più comandi sulla stessa riga devono essere separati da una virgola

>> 3+2, 5*10-4, 55-22

• Un’istruzione molto lunga si può scrivere su più righe consecutive usando

… >> 3+2+4+(5*3)-5 ...

-5+10*3 (Enter)

10

Interfaccia grafica: Command window

Page 11: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Interfaccia grafica: Finestre

11

contiene tutti i comandi digitati nel prompt

Page 12: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Interfaccia grafica: Command history: contiene tutti comandi digitati da prompt per ripeterli, basta selezionare il comando di interesse con un click

12

Page 13: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Interfaccia grafica: Finestre

13

contiene tutte le variabili in memoria

Page 14: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Interfaccia grafica: Workspace contiene tutte le variabili usate e memorizzate automaticamente Cliccando sulla variabile di interesse si apre la finestra Array Editor in cui è possibile visualizzare il contenuto della variabile

14

Page 15: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Interfaccia grafica: Finestre

15

E’ la directory di lavoro in cui Matlab cerca e salva file e dati

Elenco di tutti i file contenuti nella cartella di lavoro. Permette un accesso rapido e diretto ai file

Page 16: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Interfaccia grafica: Finestre

16

Barra dei menu

Page 17: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab

Per salvare la sessione di lavoro interattiva, o parte di essa, si usa il comando diary >> diary on

>> diary nome.m

( sessione di lavoro che si vuole conservare)

>> diary off

(parte che non si vuole conservare)

>> diary on

(si vuole conservare di nuovo)

>> diary off

Conserva sia gli input che gli output ma anche tutti i messaggi di eventuali errori --- file di testo E’ paragonabile all’azione di prendere appunti durante una lezione di laboratorio

17

Page 18: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Operatori

• operazioni elementari somma + differenza -

prodotto * divisione /

• operatori logici and & or | not ~

• operatori relazionali maggiore > maggiore o uguale >=

minore < minore o uguale <=

uguale == diverso ~=

• elevamento a potenza ^

Matlab come calcolatrice

18

Page 19: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Costanti predefinite Funzioni predefinite

Matlab come calcolatrice

19

Funzione Funzione Matlab

Seno sin(x)

Coseno cos(x)

Tangente tan(x)

Arcsin asin(x)

Arccos acos(x)

Arctan atan(x)

Logaritmo naturale log(x)

Esponenziale exp(x)

Valore assoluto abs(x)

Radice quadrata sqrt(x)

segno sign(x)

Costante Costante in Matlab

Infinito inf

pi

Unità immaginaria i

Numero massimo rappresentabile (21023)

realmax

Numero minimo rappresentabile (2-1022)

realmin

Precisione di macchina (2.220446049250313⋅10-16)

eps

Forma indeterminata nan

Page 20: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Costanti predefinite

Matlab come calcolatrice

20

Costante Costante in Matlab

Infinito inf

pi

Unità immaginaria i

Numero massimo rappresentabile (21023)

realmax

Numero minimo rappresentabile (2-1022)

realmin

Precisione di macchina (2.220446049250313⋅10-16)

eps

Forma indeterminata nan

Rappresentazione dei numeri in Matlab: forma a virgola mobile (floating point) su parole di 64 bit (doppia precisione)

Page 21: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Rappresentazione dei numeri

s n t Numero totale di bits

Doppia precisione 1 11 52 64

L≤ e ≤U

Massimo (2U+1 (1-2-t-1)) Minimo (2L)

Doppia precisione

(U=1023, t=52, L=-1022)

1.79 ⋅ 10308 2.2 ⋅ 10-308

Page 22: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab

Help: per informazioni sulle funzioni di Matlab (vedere anche lo help da menù) >> help nome_funzione informazioni su una specifica funzione Esempio: come si usa la funzione log? >> help log

LOG Natural logarithm.

LOG(X) is the natural logarithm of the elements of X.

Complex results are produced if X is not positive.

See also LOG2, LOG10, EXP, LOGM.

22

Page 23: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab

Se non si conosce il nome delle funzione, si usa il comando lookfor >> lookfor parola chiave

Produce l’elenco e la descrizione di tutte le funzioni che sono in qualche modo legate alla parola chiave

Esempio: esiste una funzione che produca la matrice identità di una certa dimensione? >> lookfor 'identity matrix‘

EYE Identity matrix.

SPEYE Sparse identity matrix. A questo punto si chiede lo help della funzione che interessa, per es. eye 23

Page 24: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Esempio: esiste una funzione che calcola la radice quadrata di un numero? >> lookfor square cir - Cox-Ingersoll-Ross(CIR)mean-reverting square root diffusion

class file

magic - Magic square.

hypot - Robust computation of the square root of the sum of squares

realsqrt - Real square root.

sqrt - Square root.

lscov - Least squares with known covariance.

lsqnonneg - Linear least squares with nonnegativity constraints.

sqrtm - Matrix square root.

cgs - Conjugate Gradients Squared Method.

.

.

>> help sqrt SQRT Square root.

SQRT(X) is the square root of the elements of X. Complex

results are produced if X is not positive.

See also sqrtm, realsqrt, hypot.

Overloaded methods:

codistributed/sqrt

Reference page in Help browser

doc sqrt

24

Page 25: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Digitando solo il comando help si ha l’ elenco degli argomenti (pacchetti disponibili) >> help

HELP topics:

matlab\general - General purpose commands.

matlab\ops - Operators and special characters.

matlab\lang - Programming language constructs.

matlab\elmat - Elementary matrices and matrix manipulation.

matlab\randfun - Random matrices and random streams.

matlab\elfun - Elementary math functions.

matlab\specfun - Specialized math functions.

matlab\matfun - Matrix functions - numerical linear algebra.

matlab\datafun - Data analysis and Fourier transforms.

matlab\polyfun - Interpolation and polynomials.

matlab\funfun - Function functions and ODE solvers.

matlab\sparfun - Sparse matrices.

>> help nome_argomento

Produce l’elenco e la descrizione delle funzioni relative all’argomento selezionato

25

Page 26: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab In Matlab non è necessario dichiarare le variabili. Esse vengono automaticamante definite in seguito ad una assegnazione

La assegnazione è data dal comando = Esempio >> d = 2;

attribuisce alla variabile d il valore 2 (verificare nel workspace) >> c = 4;

attribuisce alla variabile c il valore 4 >> b = c * d;

attribuisce alla variabile b il prodotto delle variabili c e d

Nota: 1. il nome di una variabile è composto da caratteri alfanumerici 2. il primo deve essere alfabetico 3. c’è differenza tra lettere maiuscole e minuscole

26

Page 27: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Per conoscere tali variabili si può anche digitare il comando whos >> whos (Enter)

nome della variabile dimensione memoria occupata tipo Esempio: se d è un numero intero >> whos

Name Size Bytes Class

d 1x1 1 int8 array

Grand total is 1 elements using 1 bytes

27

Page 28: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Oppure si può anche digitare il comando who >> who (Enter)

lista delle variabili contenute nel workspace Esempio: se d e c sono le sole due variabili in memoria >> who

Your variables are:

c d

28

Page 29: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Per visualizzare il contenuto di una variabile, basta digitare il suo nome Esempio: per visualizzare il contenuto di b >> b

b =

8

Oppure usare il comando disp >> disp(b)

8

Se si omette il punto e virgola ; alla fine delle istruzioni di comando, viene visualizzato l’output di ogni istruzione >> b=8*2

b =

16

29

Page 30: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab

Se il risultato di un’espressione non viene assegnato ad una variabile definita dall’utente, allora viene automaticamente assegnato alla variabile ans (answer) Esempio:

>> 3+2 (Enter)

ans =

5

30

Page 31: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab

Per cancellare tutte le variabili contenute nel Workspace si usa il comando clear Esempio:

>> b=5;, c=b*2-1;, d= c-b;

>> who

Your variables are:

b c d

>> clear

>> who

>> 31

Page 32: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Per cancellare solo alcune variabili contenute nel Workspace, il comando clear deve essere seguito dall’elenco dei nomi delle variabili separati da uno spazio clear b c (cancella solo le variabili b e c ) Esempio:

>> b=5;, c=b*2-1;, d= c-b;

>> who

Your variables are:

b c d

>> clear b c

>> who

Your variables are:

d 32

Page 33: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab

E’ possibile salvare una o più variabili e riusarle in sessioni successive senza dover rieseguire i comandi con cui sono state create save nomefile Salva tutte le variabili contenute nel Workspace nel file nomefile.mat Il nomefile è scelto dall’utente load nomefile Carica tutte le variabili salvate nel file nomefile.mat nel Workspace

33

Page 34: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Esempio:

>> b=5;, c=b*2-1;, d= c-b;

>> who

Your variables are:

b c d

>> save datilezione

>> clear

>> who

>>

>> load datilezione

>> who

Your variables are:

b c d 34

Page 35: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab

OSS: Ad ogni variabile corrisponde il nome con cui è stata salvata!!! Se nel Workspace è presente una variabile con nome uguale a quello di una variabile contenuta nel file nomefile.mat, dopo l’istruzione load viene sostituita dalla variabile omonima in nomefile.mat Esempio: >> b=5;, c=b*2-1;, d= c-b;

>> save datilezione

>> clear

>> b=25;

>> disp(b)

25

>> load datilezione

>> disp(b)

5

35

Page 36: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Per salvare nel file nomefile.mat solo alcune variabili, è necessario elencare tali variabili, separate da uno spazio, dopo il nomefile save nomefile var1 var2 var3 Salva le variabili var1, var2 e var3 nel file nomefile.mat Esempio:

>> b=5;, c=b*2-1;, d= c-b;

>> save datilezione b c

>> clear b c

>> who

Your variables are:

d

>> load datilezione

>> who

Your variables are:

b c d

36

Page 37: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Nell’episodio Treehouse of Horror dei Simpsons, Homer ha un incubo in cui vede la seguente uguaglianza

178212+184112=192212

L’identità contraddice l’ultimo teorema di Fermat per il quale non esistono numeri naturali x,y,z per i quali sia vera l’identità

xn+yn=zn n 3 Homer ha sognato un controesempio al teorema di Fermat??? Digitiamo i seguenti comandi in Matlab >> format short >> (1782^12+1841^12)^(1/12) ans =

1.9220e+003 !!!!!!!!!

37

Page 38: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Digitiamo ora i seguenti comandi in Matlab >> format long >> (1782^12+1841^12)^(1/12) ans = 1.921999999955867e+003 «Fermat near miss!!!» Potete dire perché, senza svolgere calcoli, l’uguaglianza sognata da Homer non può essere vera?

38

Page 39: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Indipendentemente dal sistema di rappresentazione dei numeri in Matlab, l’utente può scegliere il formato di visualizzazione usando il comando format format nomeformato Visualizza i numeri secondo il formato nomeformato Digitare help format per conoscere tutti i formati di visualizzazione disponibili Attenzione: il comando format non cambia la precisione con cui vengono eseguiti i calcoli !!!

39

Page 40: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Esempi:

>> format short % 4 cifre dopo la virgola (opzione di default) >> sqrt(2)

ans =

1.4142

>> format short e % forma esponenziale (potenze di 10) >> sqrt(2)

ans =

1.4142e+000

>> format long % 14 cifre dopo la virgola >> sqrt(2)

ans =

1.41421356237310

>> format long e % forma esponenziale >> sqrt(2)

ans =

1.414213562373095e+000

40

Page 41: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab In un episodio successivo, Homer ci riprova con la seguente uguaglianza

398712+436512=447212 Homer ha finalmente trovato un controesempio al teorema di Fermat??? Potete dire perché, senza svolgere calcoli, anche questa uguaglianza non può essere vera? Digitiamo i seguenti comandi in Matlab >> format short >> (3987^12+4365^12)^(1/12) ans = 4.4720e+003 >> format long >> (3987^12+4365^12)^(1/12) ans = 4.472000000007058e+003

41

Page 42: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizi • Assegnare alla variabile a il valore 4+2log(π/2)/5

• Calcolare in b il valore ecos(2.4)

• Calcolare in c il valore b/4

• Visualizzare a, b, c in formato corto esponenziale

• Visualizzare gli stessi valori in formato long. Poi tornare al formato di default

• Salvare le variabili a e c nel file datilezione.mat

• Assegnare alla variabile d l’espressione sin(π/3)^2+cos(π/3)^2

• Calcolare le seguenti espressioni

• Salvare il contenuto del Workspace in work1.mat; cancellare tutte le variabili nel Workspace; caricare il file work1.mat. Quali variabili sono contenute nel Workspace? E quale è il loro contenuto?

20 47 ,2 5

)sin(2 ,2

46 58.03

1

3 xxxyxx

yxx

xy

42

Page 43: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Matlab ha classi di dati predefinite • double: numeri in doppia precisione compresi tra -10308 e 10308 (8

bytes per elemento) • uint8: interi a 8 bits per elemento senza segno compresi tra 0 e 255

(usato per le immagini) • uint16: interi a 16 bits per elemento senza segno compresi tra 0 e

65535 • uint32: interi a 32 bits per elemento senza segno compresi tra 0 e

4294967295 • int8: interi a 8 bits per elemento con segno compresi tra –128 e 127 • int16: interi a 16 bits per elemento con segno compresi tra -32768 e

32767 • int32: interi a 16 bits per elemento con segno compresi tra -2147483648 e 2147483647 • single: numeri in singola precisione compresi tra - 1038 e 1038 (4 bytes

per elemento) • char: caratteri (2 bytes per elemento) • logical: 0 o 1 (1 byte per elemento)

43

Page 44: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab I nomi delle classi sono anche funzioni che permettono la conversione da una classe ad un’altra Esempio: se x è una variabile double, il comando int8(x) converte x in una

variabile intera a 8 bits

>> x=sqrt(2)

x =

1.414213562373095e+000

>> int8(x)

ans =

1

>> int8(x*10)

ans =

14

44

Page 45: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Esempio: >> x =

349021

>> int8(x)

ans =

127

>> int16(x)

ans =

32767

>> int32(x)

ans =

349021

45

Page 46: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab Esempio: >> x=-cos(3/4*pi)

x =

7.071067811865475e-001

>> y=sin(3/4*pi)

y =

7.071067811865476e-001

>> z=x^2+y^2

z =

1

>> xi=int8(x)

xi =

1

>> yi=int8(y)

yi =

1

>> zi=xi^2+yi^2

z =

2 46

Page 47: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

47

La rappresentazione dei numeri può essere molto costosa!!!

Ariane 5 Tempi di realizzazione: 10 anni Costo: 7 bilioni di dollari Primo volo dell'Ariane 5: giugno 1996 Durata della missione: 40 secondi Motivo: autodistruzione del razzo per un malfunzionamento del software di controllo Perché? Un dato a 64 bit in virgola mobile venne convertito in un intero a 16 bit con segno operazione errata del processore: il numero in virgola mobile era troppo grande per poter essere rappresentato con un intero a 16 bit. Questo errore scatenò una reazione a catena che causò danni meccanici ai quali seguì l’azionamento del comando di autodistruzione. Fu necessario quasi un anno e mezzo per capire quale fosse stato il malfunzionamento che aveva portato alla distruzione del razzo!

Page 48: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

48

La rappresentazione dei numeri può essere molto costosa!!!

Come se la massa della terra >> M = 5974200000000000000000000 M = 5.974200000000000e+024

diventasse >> int16(M) ans = 32767

Page 49: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matlab

I caratteri char si indicano tra 2 apici Esempio: attribuire alla variabile A il carattere f >> A = ‘f’;

>> disp(A)

f

49

Page 50: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Vettori Un array è un insieme di valori ordinati, secondo uno o più indici, a cui ci si riferisce con un singolo nome di variabile Un array ad un indice è detto vettore Un array a due indici è detto matrice In Matlab si possono definire facilmente vettori e matrici Le variabili in Matlab hanno una struttura vettoriale, per esempio gli scalari sono matrici di dimensione 1x1

50

Page 51: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Un vettore si definisce elencando le sue componenti separate da uno spazio e racchiudendole tra parentesi quadre [ ]

Vettore riga

>> x = [10 20 30 40]

x =

10 20 30 40

è equivalente a

>> x = [10,20,30,40]

x =

10 20 30 40

In questo caso le componenti sono separate da una virgola

Vettori

51

Page 52: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Vettore colonna

>> x=[10; 20; 30; 40]

x =

10

20

30

40

In questo caso le componenti sono separate da un punto e virgola

Anche per visualizzare il contenuto di variabili che sono vettori si può usare il comando disp

>> disp(x)

10

20

30

40

Vettori

52

Page 53: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Per convertire un vettore riga in uno colonna (e viceversa) si usa il comando ‘ (apice) che produce il trasposto della variabile a cui è applicato

>> v=x'

v =

10 20 30 40

Per estrarre un elemento di un vettore:

nome_vettore(posizione elemento)

Esempio: estrarre il secondo elemento di v

>> v(2)

ans =

20

Nota: Gli indici di un vettore sono sempre numeri interi e strettamente positivi

Vettori

53

Page 54: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Per estrarre contemporaneamente più di un elemento di un vettore si usa il

comando : (colon)

nome_vettore(inizio:fine)

Esempio: estrarre dal primo al terzo elemento di v

>> v(1:3)

ans =

10 20 30

Esempio: estrarre dal terzo al quarto elemento di v

>> v(3:4)

ans =

30 40

Vettori - la notazione :

54

Page 55: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: estrarre dal secondo all’ultimo elemento di v

>> v(2:end)

ans =

20 30 40

Esempio: estrarre tutti gli elementi di v

>> v(1:end)

ans =

10 20 30 40

Oppure, se lo si vuole come vettore colonna,

>> v(:)

ans =

10

20

30

40

Vettori - la notazione :

55

Page 56: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Per estrarre contemporaneamente più di un elemento di un vettore non consecutivi ed equispaziati

nome_vettore(inizio:passo:fine)

Esempio: estrarre gli elementi di v di indice pari (passo = 2)

>> v(2:2:end)

ans =

20 40

Esempio: estrarre tutti gli elementi di v di indice pari ma da destra verso sinistra (passo = -2)

>> v(end:-2:1)

ans =

40 20

Vettori - la notazione :

56

Page 57: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Un vettore può essere usato per estrarre elementi non consecutivi e non equispaziati di un altro vettore

nome_vettore([pos1 pos2 pos3 …])

Esempio: Sia v = [7 1 3 7 0 8 3], estrarre gli elementi di v di indici 1 3 e 6

>> v([1 3 6])

ans =

7 3 8

Vettori

57

Page 58: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Il comando : può essere usato anche per generare vettori

Nome_vettore = (minimo:incremento:massimo)

Esempio: Generare un vettore costituito da elementi compresi tra 1.5 e 2.5 con incremento 0.1

>> x=[1.5:0.1:2.5]

x =

1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5

Esempio: Generare un vettore costituito da elementi compresi tra 100 e 80 con incremento -5

>> x=[100:-5:80]

x =

100 95 90 85 80

Se non specificato, l’incremento è da intendersi pari a 1

Vettori - la notazione :

58

Nome_vettore= vettore di elementi equispaziati (di una quantità=incremento) nell’intervallo [minimo,massimo]

Page 59: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Per generare vettori equispaziati contenuti in un certo intervallo si può usare anche il comando linspace

Nome_vettore = linspace(minimo, massimo, numero di elementi)

Nome_vettore è un vettore di lunghezza pari a numero di elementi, i cui elementi sono numeri equispaziati nell’intervallo [minimo, massimo]

Gli elementi del vettore distano della quantità

h=(massimo-minimo)/(numero di elementi - 1)

e la i-esima componente è Nome_vettore(i) = minimo+(i-1)*h

Esempio: Generare un vettore di 10 elementi compresi tra 1.5 e 2.4

>> x=linspace(1.5,2.4,10)

x =

1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4

In questo caso l’incremento h=0.1, infatti

h=(massimo-minimo)/(numero di elementi - 1)=(2.4-1.5)/(10-1)=0.9/9=0.1

Vettori

59

Page 60: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Se un vettore (o una qualsiasi istruzione) è troppo lungo, prima di andare a capo vanno aggiunti 3 punti …

>> x = [3 1 6 7 9 10 4 29 6 0 …

4 5 8 2 4 ]

x =

3 1 6 7 9 10 4 29 6 0 4 5 8 2 4

Se un elemento di un vettore è una espressione, non bisogna lasciare spazi all’interno dell’elemento, oppure l’espressione va racchiusa tra parentesi tonde

>> x = [1 6 3*2+1 4]

x =

1 6 7 4

Oppure

>> x = [1 6 (3*2+1) 4]

x =

1 6 7 4

Vettori

60

Page 61: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

I vettori non vengono dimensionati. La loro dimensione può essere modificata in corso di lavoro

Esempio: Sia x = [3 1 4 5] e si assegni il valore 10 all’ottavo elemento di x

>> x = [3 1 4 5]

x =

3 1 4 5

>> x(8) = 10

x =

3 1 4 5 0 0 0 10

alle posizioni non definite viene assegnato il valore zero

Vettori

61

Page 62: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Sia x = [3 1 4 5] e si elimini l’elemento in posizione 3

>> x(3) = []

x =

3 1 5

[] indica il vettore vuoto

Per conoscere la lunghezza di un vettore si usa il comando length(x)

Esempio: determinare la lunghezza del vettore x sopra definito

>> length(x)

ans =

3

Vettori

62

Page 63: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

1) Assegnare alla variabile x il vettore costituito dai primi 20 numeri naturali. Estrarne il quarto elemento e moltiplicarlo per il quindicesimo.

2) Creare un vettore x che ha 6 componenti con valori compresi tra 0 e 10,

estremi inclusi, con incremento costante.

3) Creare un vettore x che ha componenti con valori compresi tra 0 e 10, estremi inclusi, con incremento costante pari a 0.2.

- Determinarne la lunghezza. - Estrarne gli elementi di indice pari e assegnarli alla variabile y. - Estrarre gli elementi di indice dispari di y procedendo da destra verso sinistra e assegnarli alla variabile z. - Eliminare il primo elemento di z. - Assegnare il valore –9 al ventesimo elemento di z. - Sostituire il secondo elemento di z con 2*cos(/4) - Creare il vettore w costituito da tutti gli elementi di y seguiti dai primi 2 elementi di z e gli ultimi 3 di x. - Visualizzare il vettore w.

Esercizi

63

Page 64: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Una matrice si può definire come un insieme di vettori riga separati da un punto e virgola oppure di vettori colonna separati da uno spazio o una virgola

>> A = [2 5 7; 1 7 9; 8 1 -4];

A =

2 5 7

1 7 9

8 1 -4

>> A = [[2;1;8] [5;7;1] [7;9;-4]]

A =

2 5 7

1 7 9

8 1 -4

Matrici

Page 65: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Per estrarre un elemento della matrice si usa

nome_matrice(indice_riga, indice_colonna)

indice_riga e indice_colonna devono essere interi strettamente positivi!

Esempio: Estrarre l’elemento di A di indici (2,3)

>> A(2,3)

ans =

9

Esempio: Estrarre la terza colonna di A

>> A(:,3)

ans =

7

9

-4

Matrici

Page 66: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Estrarre la prima riga di A

>> A(1,:)

ans =

2 5 7

Matrici

A(i,j) restituisce l’elemento con indice di riga i e indice di colonna j della matrice A

A(i,:) restituisce il vettore riga corrispondente alla riga i della matrice A

A(:,j) restituisce il vettore colonna corrispondente alla colonna j della matrice A

A(i,m:p:n) restituisce un vettore riga contenente gli elementi nelle colonne da m a n con passo p della i-esima riga della matrice A

Page 67: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: estrarre il vettore riga contenente gli elementi nelle colonne 1,3 della terza riga della matrice A

>> A(3,1:2:3)

ans =

8 -4

Esempio: estrarre il vettore colonna contenente gli

elementi nelle righe 2,4,6 della quarta colonna di A =

>> A(2:2:end,4)

ans =

-2

0

6

Matrici

320067

46110

53411

10453

4119104

122042

97125

Page 68: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Estrazione di sottomatrici : A(m:k, i:j) indica la sottomatrice di A con le righe da m a k, e le colonne da i a j.

A(:, i:j) sottomatrice delle colonne da i a j.

A(m:k, :) sottomatrice delle righe da m a k.

Esempio: Sia A=[1 2 0; 3 4 1; 2 6 3], estrarre la sottomatrice con indici di riga da 2 a 3 e di colonna da 1 a 3

>>b=A(2:3,1:3)

b= 3 4 1

2 6 3

Matrici

Nota: In questo caso, questa istruzione è equivalente a >>b=A(2:3, :) ovvero >>b=A(2:3, 1:end)

Page 69: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matrici Per conoscere la dimensione di una matrice di usa il comando size() size(A) restituisce un vettore di 2 componenti di cui la prima indica il numero di righe mentre la seconda il numero di colonne Esempio: Se A = [3 5 8; -1 2 4] >> size(A)

ans =

2 3

num.righe num.colonne

Page 70: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Aggiunta alla matrice A di una colonna: A=[A u] aggiunge ad A il

vettore u come ultima colonna

(u deve essere vettore colonna, se u è un vettore riga allora A=[A u’] )

Esempio: Sia A=[1 2 0; 3 4 1; 2 6 3]. Aumentarne la dimensione aggiungendo il vettore u = [-1; 4;0] come ultima colonna

>> A = [A u]

A =

1 2 0 -1

3 4 1 4

2 6 3 0

Matrici

Page 71: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Aggiunta di una riga: A=[A; v] aggiunge ad A il vettore v come ultima riga

Esempio: Sia A=[1 2 0; 3 4 1; 2 6 3]. Aumentarne la dimensione aggiungendo il vettore u = [-1; 4;0] come ultima riga

>> A = [A; u']

A =

1 2 0

3 4 1

2 6 3

-1 4 0

Matrici

Nota: u è definito come vettore colonna!

Page 72: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizi • Costruire una matrice 5x5, ed assegnarla alla variabile A • Estrarre da A la sottomatrice 2x2 costituita dalla

seconda e terza riga e dalla seconda e terza colonna di A ed indicare con D la matrice ottenuta

• Estrarre gli elementi sulla diagonale principale di D e assegnarli al vettore d

• Estrarre gli elementi che non appartengono alla diagonale principale di D e assegnarli al vettore f

• Estrarre gli elementi della seconda e della terza colonna di A e indicare con B la matrice ottenuta

• Determinare la dimensione di B • Estrarre gli elementi sulla diagonale principale di B e

assegnarli al vettore b • Estrarre gli elementi che non appartengono alla diagonale

principale di B e assegnarli al vettore c • Determinare la dimensione di b e c

Page 73: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Alcune operazioni Gli operatori + - * / si applicano direttamente a vettori e matrici quando le dimensioni sono conformi

Somma di vettori o matrici

>> D = A + B A e B devono avere la stessa dimensione!!!

D ha la stessa dimensione di A e B

Differenza di matrici o matrici

>> D = A - B A e B devono avere la stessa dimensione!!!

D ha la stessa dimensione di A e B

Page 74: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Alcune operazioni Esempio: Siano v = [0 –4 5 7] e w = [1;9;2;0].

>> v+w non è corretto in quanto v è un vettore riga mentre w è un

vettore colona

>> v+w’ è corretta

>> y=v+w'

y =

1 5 7 7

Esempio: Siano A = [0 –4; 5 7] e B = [1 9; 2 0].

>> C = A - B

C =

-1 -13

3 7

Page 75: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Alcune operazioni Prodotto righe-colonne di matrici

>> C = A * B numero di colonne di A deve essere uguale al numero

di righe di B.

C ha dimensione = [num.righe di A, num.colonne di B]

Esempio: Siano A = [0 –4; 5 7] e B = [1 9; 2 0].

>> C = A * B

C =

-8 0

19 45

Esempio: Siano A = [0 –4; 5 7] e B = [1 9 ; 2 0: -3 1].

>> C=A*B non è corretta!!!

Page 76: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Alcune operazioni Esempio: Siano v = [0 –4 5 7] e w = [1;9;2;0].

>> v*w e w*v sono corrette

>> v*w

ans =

-26

>> w*v

ans =

0 -4 5 7

0 -36 45 63

0 -8 10 14

0 0 0 0

>> v*w’ e w*v’ non sono corrette!

Page 77: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Alcune operazioni Prodotto per uno scalare: k*v moltiplica ogni elemento del vettore (o matrice) v per lo scalare k

Esempio: Sia v = [4 2 -1]

>> 3*v

ans =

12 6 -3

Somma o differenza con uno scalare: v + a somma ad ogni elemento di v (vettore o matrice ) il numero a.

>> v-2

ans =

2 0 -3

Potenza: A^n (A matrice quadrata, n intero >0) moltiplica A n volte per se stessa.

>> A = [4 1; 6 9];

>> A^3

166 139

834 861

Page 78: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Alcune operazioni Operatori di divisione / (slash) \ (backslash)

Backlash: x=A\B indica la soluzione dell’equazione Ax=B.

Se B è un vettore, Ax=B è un ordinario sistema di equazioni lineari, ed x sarà la soluzione.

Se invece B è una matrice avente come colonne b1,b2,…bn , allora X=A\B sarà a sua volta una matrice, avente come colonne x1,x2,…xn , cioè le soluzioni dei sistemi lineari Ax1=b1, Ax2=b2, … Axn=bn.

Slash: X=B/A indica la matrice tale che XA=B.

Page 79: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio Risolvere il seguente sistema lineare

dopo aver calcolato il determinante, il rango e l’inversa della matrice dei coefficienti associata.

OSS:

La matrice del sistema è

Il termine noto è

6 42

3 35

32

21

321

32

xx

xxx

xx

042

351

210

A

6

3

3

b

Page 80: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio >> A=[0 1 -2; -1 5 3; 2 -4 0];

>> det(A)

ans =

18 Nota: A è non singolare!!! Come si calcola il rango di una matrice? Esiste una funzione MatLab predefinita che calcola il rango della matrice?

>> lookfor 'matrix rank'

rank - Matrix rank.

Page 81: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

>> help rank

RANK Matrix rank.

RANK(A) provides an estimate of the number of linearly

independent rows or columns of a matrix A.

RANK(A,tol) is the number of singular values of A

that are larger than tol.

RANK(A) uses the default tol = max(size(A)) * eps(norm(A)).

Class support for input A:

float: double, single

Overloaded methods:

gf/rank

rptcp/rank

Reference page in Help browser

doc rank

>> rank(A)

ans =

3

Page 82: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

>> IA = inv(A)

IA =

0.6667 0.4444 0.7222

0.3333 0.2222 0.1111

-0.3333 0.1111 0.0556

>> b = [-3 -3 6]’; % Il vettore b deve essere un vettore

colonna!!!!

>> x = A\b;

>> disp(x)

1

-1

1

Page 83: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizi

• Costruire una matrice 5x5, ed assegnarla alla variabile A • Calcolare il prodotto A AT • Calcolare il prodotto A AT elemento per elemento • Sommare le righe di A e sia v il vettore risultante • Sommare le colonne di A e sia w il vettore risultante. • Eseguire i prodotti possibili tra v e w • Elevare a potenza gli elementi di w usando gli elementi di

v come esponenti e sia y il vettore risultante • Sia B la matrice i cui vettori riga sono i vettori v, w e y

opportunamente dimensionati • Calcolare il prodotto degli elementi della quarta colonna

di B (usare il comando lookfor)

Page 84: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Operazioni puntuali Prodotto elemento per elemento

>> C = A .* B C(i,j) = A(i,j)*B(i,j) per tutti gli indici i e j

A e B devono avere la stessa dimensione!!!

C ha la stessa dimensione di A e B

Divisione elemento per elemento

>> C = A./B C(i,j) = A(i,j)/B(i,j) per tutti gli indici i e j

A e B devono avere le stesse dimensioni

C ha la stessa dimensione di A e B

Potenza elemento per elemento

>>C = A .^B C(i,j) = A(i,j)^B(i,j) per tutti gli indici i e j

Ciascun elemento di A viene elevato a potenza, con esponente l’elemento corrispondente di B

A e B devono avere le stesse dimensioni

C ha la stessa dimensione di A e B

Page 85: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Operazioni puntuali Esempio: Siano v = [0 –4 5 7] e w = [1;9;2;0].

>> v.*w’ è corretta >> v.*w non è corretta!

>> v.*w'

ans =

0 -36 10 0

Esempio: Siano A = [0 –4; 5 7] e B = [1 9; 2 0].

>> C = A * B

C =

-8 0

19 45

>> D = A.*B Nota: D C

D =

0 -36

10 0

Page 86: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Operazioni puntuali

Esempio: Siano A = [0 –8; 6 7] e B = [1 4; 2 1].

>> D = A./B

D =

0 -2

3 7

>> D = A.^2

D =

0 64

36 49

Esempio: Siano A = [0 –8; 6 7] e v = [1; 4].

>> D = A.*v non è corretta!!!

Page 87: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Operazioni puntuali

Esempio: Siano A = [0 –8; 6 7] e B = [1 4; 2 1].

>> D = A.^B

D =

0 4096

36 7

Esempio: Siano A = [0 –8; 6 7] e v = [1; 4].

>> D = A.^v non è corretta!!!

Page 88: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Le operazioni puntuali (elemento per elemento) non hanno una corrispondente operazione nell’algebra lineare

Sono definite solo per facilitare alcuni calcoli che vanno ripetuti su ogni singola componente di un vettore e/o una matrice

Permettono di scrivere sequenze di istruzioni in forma chiara e compatta, evitando, per esempio, l’uso di cicli

Operazioni puntuali

Page 89: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Tabulare i valori della funzione ex nell’intervallo [0,2]

Operazioni puntuali

Page 90: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Tabulare i valori della funzione ex nell’intervallo [0,2]

>> x = linspace(0,2,5);

Operazioni puntuali

Page 91: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Tabulare i valori della funzione ex nell’intervallo [0,2]

>> x = linspace(0,2,5);

Operazioni puntuali

Genera un vettore x di 5 elementi equispaziati e contenuti nello intervallo [0,2]

Page 92: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Tabulare i valori della funzione ex nell’intervallo [0,2]

>> x = linspace(0,2,5);

>> f = exp(x);

Operazioni puntuali

Genera un vettore x di 5 elementi equispaziati e contenuti nello intervallo [0,2]

Page 93: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Tabulare i valori della funzione ex nell’intervallo [0,2]

>> x = linspace(0,2,5);

>> f = exp(x);

Operazioni puntuali

Genera un vettore x di 5 elementi equispaziati e contenuti nello intervallo [0,2]

Genera un vettore f di 5 elementi corrispondenti al valore della funzione ex valutata in ogni elemento del vettore x

Page 94: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Tabulare i valori della funzione ex nell’intervallo [0,2]

>> x = linspace(0,2,5);

>> f = exp(x);

>> disp([x’ f’ ])

Operazioni puntuali

Genera un vettore x di 5 elementi equispaziati e contenuti nello intervallo [0,2]

Genera un vettore f di 5 elementi corrispondenti al valore della funzione ex valutata in ogni elemento del vettore x

Page 95: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Tabulare i valori della funzione ex nell’intervallo [0,2]

>> x = linspace(0,2,5);

>> f = exp(x);

>> disp([x’ f’ ])

Operazioni puntuali

Visualizza gli elementi della matrice le cui colonne sono i vettori x ed f

Genera un vettore x di 5 elementi equispaziati e contenuti nello intervallo [0,2]

Genera un vettore f di 5 elementi corrispondenti al valore della funzione ex valutata in ogni elemento del vettore x

Page 96: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Tabulare i valori della funzione ex nell’intervallo [0,2]

>> x = linspace(0,2,5);

>> f = exp(x);

>> disp([x’ f’ ])

0 1.0000

0.5000 1.6487

1.0000 2.7183

1.5000 4.4817

2.0000 7.3891

Operazioni puntuali

Visualizza gli elementi della matrice le cui colonne sono i vettori x ed f

Genera un vettore x di 5 elementi equispaziati e contenuti nello intervallo [0,2]

Genera un vettore f di 5 elementi corrispondenti al valore della funzione ex valutata in ogni elemento del vettore x

Page 97: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Tabulare i valori della funzione ex nell’intervallo [0,2]

>> x = linspace(0,2,5);

>> f = exp(x);

>> disp([x’ f’ ])

0 1.0000

0.5000 1.6487

1.0000 2.7183

1.5000 4.4817

2.0000 7.3891

Operazioni puntuali

Visualizza gli elementi della matrice le cui colonne sono i vettori x ed f

Genera un vettore x di 5 elementi equispaziati e contenuti nello intervallo [0,2]

Genera un vettore f di 5 elementi corrispondenti al valore della funzione ex valutata in ogni elemento del vettore x

Valori della funzione ex nei punti 0, 1/2, 1, 3/2, 2

Page 98: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

>> f = exp(x);

La funzione exp applicata al vettore x produce un vettore f della stessa dimensione di x tale che: la componente di indice i di f contiene il valore della funzione esponenziale nel punto x(i), cioè

f(i) = ex(i)

f = [exp(x(1)), exp(x(2)), exp(x(3)), exp(x(4)),, exp(x(5))]

Operazioni puntuali

Page 99: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

>> f = exp(x).*sin(x)+1;

la componente di indice i di f contiene il valore della funzione

f(x) = ex sin(x)+1 nel punto x(i), cioè

f(i) = ex(i) sin(x(i))+1

f = [exp(x(1))sin(x(1))+1, exp(x(2))sin(x(2))+1,….., exp(x(n))sin(x(i))+1]

Operazioni puntuali

Page 100: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio: Separare gli zeri della seguente funzione f() = e + 0.435 (e - 1) / - 1.564

Si calcola il valore della funzione in corrispondenza di valori equidistanti della variabile in un certo intervallo e si osserva se il segno dei valori ottenuti:

>> lambda = linspace(0.10,0.20,6);

>>f=exp(lambda)+0.435*(exp(lambda)-1)./lambda– 1.564;

>> disp([lambda’ f’])

0.100000000000000 -0.001335588295285

0.120000000000000 0.025672938554613

0.140000000000000 0.053195959592184

0.160000000000000 0.081243551500794

0.180000000000000 0.109825990666185

0.200000000000000 0.138953757158539

L’intervallo [0.10, 0.12] contiene almeno uno zero della f()

Separazione delle radici: tabulazione

Page 101: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio: Separare gli zeri della seguente funzione f() = e + 0.435 (e - 1) / - 1.564

Si calcola il valore della funzione in corrispondenza di valori equidistanti della variabile in un certo intervallo e si osserva se il segno dei valori ottenuti:

>> lambda = (0.10:0.02:0.20);

>>f=exp(lambda)+0.435*(exp(lambda)-1)./lambda– 1.564;

>> disp([lambda’ f’])

0.100000000000000 -0.001335588295285

0.120000000000000 0.025672938554613

0.140000000000000 0.053195959592184

0.160000000000000 0.081243551500794

0.180000000000000 0.109825990666185

0.200000000000000 0.138953757158539

L’intervallo [0.10, 0.12] contiene almeno uno zero della f()

Separazione delle radici: tabulazione

Page 102: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio: Separare gli zeri della seguente funzione

>>x = linspace(-0.9,0.5,10);

>>f = log(x+1)+sqrt(x+2)– 1;

>> disp([x’ f’])

-0.9000 -2.2538

-0.7444 -1.2438

-0.5889 -0.7010

-0.4333 -0.3163

-0.2778 -0.0131

-0.1222 0.2400

0.0333 0.4587

0.1889 0.6525

0.3444 0.8271

0.5000 0.9866

Separazione delle radici: tabulazione

L’intervallo [-0.2778,-0.1222] contiene almeno uno zero della f(x)

Page 103: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio: Verificare che la funzione f(x) = x 3 – 10x 2 + 5 ha uno zero nell’intervallo [0.6,0.8]

>>x = 0.6:0.05:0.8;

>>f = x.^3-10*x.^2+5;

>> disp([x’ f’])

0.6000 1.6160

0.6500 1.0496

0.7000 0.4430

0.7500 -0.2031

0.8000 -0.8880

Separazione delle radici: tabulazione

Page 104: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizi

• Costruire la tabella dei valori assunti dalla funzione log(x) nell’intervallo [1/2,3/2] usando un passo di discretizzazione pari a 0.025

• Valutare la funzione ex in 100 valori equidistanti nell’intervallo [0, 1] usando i primi cinque termini dello sviluppo in serie di Taylor attorno allo zero

• Stabilire se le seguenti funzioni hanno almeno uno zero log(x)-5+x x2-log(x2+2) x2-10x+23 x2-sin(πx)e-x

Page 105: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Grafici 1D

figure apre la finestra grafica

figure(n) n è il numero associato alla finestra grafica

>> figure(1)

105

Page 106: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Grafici

plot(vettore_x, vettore_y, 'opzioni') vettore_x e vettore_y devono avere lo stesso numero di componenti opzioni: colore, simbolo linea, marcatore di punto (si possono

omettere) Esempi colore: m magenta, r rosso, g verde, b blu, w bianco, k nero, y giallo Esempi tipo di linea: - continua (default), -- tratteggiata, : punteggiata, -. Punto-linea Esempi marcatore di punto + croce, o cerchietto, * asterisco, x ics,….

106

Page 107: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

107

Grafici Esempio: Siano x = [1 2 3 4] e y = log(x). Disegnare y in funzione di x

usando una linea tratteggiata rossa e marcando i punti della curva con asterischi

>> x = 1:4;

>> y=log(x);

>> plot(x,y, 'r--*')

OSS: nella rappresentazione grafica, l’opzione linea unisce i punti con una linea retta!!!

Page 108: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

108

Grafici OSS: nella rappresentazione grafica, l’opzione linea unisce i punti con una linea retta!!! Se vogliamo produrre un grafico più preciso, dobbiamo aumentare il numero di punti nell’intervallo scelto Esempio: >> x = 1:.1:4;

>> y=log(x);

>> plot(x,y, 'r--')

Page 109: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

109

Grafici: altre opzioni E’ possibile migliorare la qualità visiva del grafico usando altre opzioni, come per esempio lo spessore di linea, il colore del marcatore di punto, etc. Esempio:

>>x = -pi:pi/10:pi;

>>y = tan(sin(x)) - sin(tan(x));

>>plot(x,y,'--rs','LineWidth',2,...

'MarkerEdgeColor','k',...

'MarkerFaceColor','g',...

'MarkerSize',10)

Regola la dimensione dello spessore di linea

Regolano rispettivamente: - il colore del bordo - il colore della parte interna - la dimensione del marcatore di punto

Page 110: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Grafici sovrapposti Sia x il vettore delle ascisse e y1 e y2 due vettori aventi la stessa lunghezza di x. Per visualizzare due grafici diversi sulla stessa finestra si usa il comando hold on >>figure

>>plot(x,y1)

>>hold on

>>plot(x,y2)

>>hold off

Oppure la seguente istruzione >> plot(x, y1, ‘opzioni’,x, y2,’opzioni’)

(le opzioni si possono omettere) 110

Page 111: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Sia x = 1:10, y1=atan(x) e y2=log(x). Disegnare sulla stessa finestra y1 e y2 marcandoli opportunamente >> x=1:10;

>> y1=atan(x);

>> y2=log(x);

>> figure,

>> plot(x,y1,'k-',x,y2,'b:')

Grafici sovrapposti

111

Page 112: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: Sia x = 1:10, y1=atan(x) e y2=log(x). Disegnare sulla stessa finestra y1 e y2 marcandoli opportunamente >> x=1:10;

>> y1=atan(x);

>> y2=log(x);

>> figure,

>> plot(x,y1,'k-',x,y2,'b:')

Oppure

>> figure,

>> plot(x,y1,'k-')

>> hold on

>> plot(x,y2,'b:')

Grafici sovrapposti

112

Page 113: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

>> figure,

>> plot(x,y1,'k-')

>> plot(x,y2,'b:')

Grafici sovrapposti

113

OSS: Se non si usa il comando hold on, il secondo grafico viene disegnato sulla stessa finestra grafica del primo, ma il primo grafico viene cancellato!!!

Page 114: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Grafici Etichette title(‘stringa‘) titolo del grafico xlabel('stringa') etichetta per l‟ asse delle ascisse (asse x) ylabel('stringa') etichetta dell‟asse delle ordinate (asse y) grid inserisce una griglia nel grafico legend('stringa1', 'stringa2',…) legenda: identifica le curve disegnate nel

grafico con stringhe diverse (stabilite dall’utente) nell’ordine in cui sono state disegnate 114

Page 115: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Grafici Etichette axis([xmin xmax ymin ymax]) regola la dimensione degli assi coordinati (determina il rettangolo nel quale si vogliono visualizzare i dati) axis(„equal‟) usa la stessa scala di misura sulle ascisse

e le ordinate

115

Page 116: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Grafici Esempio: Sia x un vettore composto da 100 elementi equidistanti e contenuti nell‟intervallo [0,1]. Definire il vettore y = sin(2 x) e il vettore z = cos(2 x). Disegnarli sullo stesso grafico usando tratti diversi e colori diversi nel rettangolo [0 1]x[-1 1]. Etichettare gli assi rispettivamente con “x” e ”f(x)” e dare il seguente titolo “funzioni trigonometriche”. Includere una legenda.

>> x = linspace(0,1,100);

>> y = sin(2*pi*x);

>> z = cos(2*pi*x);

>> figure

>> plot(x,y,’r’,x,z,’b:’)

>> axis([0 1 -1 1])

>> xlabel(‘x’)

>> ylabel(‘f(x)’)

>> title(‘funzioni trigonometriche’)

>> legend(‘seno’,’coseno’)

116

Page 117: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Sottografici subplot(m,n,k) suddivide la finestra dei grafici in una matrice mxn e attiva la k-ma sottofinestra Il comando subplot(m,n,k) è sempre seguito dal comando plot che disegna il grafico nella finestra attivata Esempio >>subplot(2,3,4)

divide la finestra grafica in 6 sottofinestre e attiva la quarta Le sottofinestre sono ordinate da sinistra a destra, dall’alto verso il basso

117

1 2 3

4 5 6

Page 118: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Sottografici Esempio >>subplot(2,1,1)

divide la finestra grafica in 2 sottofinestre poste una sotto l‟altra e attiva la prima

>>plot(x1,y1);

>>title(‘grafico1’)

>>subplot(2,1,2);

attiva la seconda sottofinestra

>>plot(x2,y2);

>>title(‘grafico2’)

118

Page 119: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

1. Graficare tra 0 e 2*pi la funzione sin(x) e le sue approssimazioni con il polinomio di Taylor di 1° e 5° grado, cioè x e x-x^3/3!+x^5/5!. Le 3 curve devono essere rispettivamente a tratto continuo, tratteggiata e marcata con cerchietti.

2. Graficare le funzioni definite nell’esercizio precedente su una stessa finestra grafica ma usando opportunamente tre sottofinestre diverse.

3. Disegnare un cerchio

4. Disegnare in 6 sottofinestre distinte i nodi di Chebychev

nell‟intervallo [-1,1] con n=4,6,8,10,12,14

Esercizi

119

nin

ixi ,...0 cos

Page 120: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

120

Esercizio

Considerare tre forme equivalenti di uno stesso polinomio:

Stabilire se, valutate al calcolatore in uno stesso punto, forniscono lo stesso risultato. Si supponga di lavorare in singola precisione.

Page 121: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

121

Esercizio

>> x = 0.99:.0001:1.01;

>> x=single(x);

>> p1=(x-1).^6;

>> p2=x.^6-6*x.^5+15*x.^4-20*x.^3+15*x.^2-6*x+1;

>> p3=1+x.*(-6+x.*(15+x.*(-20+x.*(15+x.*(-6+x)))));

>> figure,

>> subplot(3,1,1), plot(x,p1)

>> title('(x-1)^6')

>> subplot(3,1,2), plot(x,p2)

>> title('x^6-6*x^5+15*x^4-20*x^3+15*x^2-6*x+1')

>> subplot(3,1,3), plot(x,p3)

>> title('1+x*(-6+x*(15+x*(-20+x*(15+x*(-6+x)))))')

Page 122: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

122

Esercizio

Page 123: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni e Grafici Sebbene Matlab offra diverse funzioni matematiche predefinite, è possibile definirne altre nei modi seguenti:

• Stringa di caratteri (definita tra due apici ‘ ‘ ) >> f=‘(x-1).^6’ f =

(x-1).^6

• Comando inline >> f=inline(‘(x-1).^6’) f =

Inline function:

f(x) = (x-1).^6

• Anonymous function mediante il simbolo @, che è un puntatore ad una funzione

>> f=@(x)[(x-1).^6]

f =

@(x)[(x-1).^6]

123

Page 124: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni e Grafici Per valutare la funzione, definita secondo una delle tre modalità precedenti, in un punto x (oppure in un insieme di punti memorizzati in un vettore x), è necessario prima definire x e quindi usare i seguenti comandi • Stringa di caratteri (definita tra due apici ‘ ‘ ) >> f=‘(x-1).^6’; >> x=linspace(0.99,1.01,100);

>> y=eval(f);

124

y è un vettore della stessa dimensione di x e contiene i valori della funzione f valutati in ogni elemento di x Equivalente a y=eval(f,x)

Page 125: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni e Grafici

• Stringa di caratteri

125

>> f1=‘(x-1).^6’;

>> f2=‘x.^6-6*x.^5+15*x.^4-20*x.^3+15*x.^2-6*x+1’;

>> f3=‘1+x.*(-6+x.*(15+x.*(-20+x.*(15+x.*(-6+x)))))’;

>> x = 0.99:.0001:1.01;

>> x=single(x);

>> p1 = eval(f1);

>> p2 = eval(f2);

>> p3 = eval(f3);

>> figure,

>> subplot(3,1,1), plot(x,p1)

>> title(f1)

>> subplot(3,1,2), plot(x,p2)

>> title(f2)

>> subplot(3,1,3), plot(x,p3)

>> title(f3)

Page 126: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni e Grafici Per valutare la funzione, definita secondo una delle tre modalità precedenti, in un punto x (oppure in un insieme di punti memorizzati in un vettore x), è necessario prima definire x e quindi usare i seguenti comandi

• Comando inline >> f=inline(‘(x-1).^6’); >> x=linspace(0.99,1.01,100);

>> y=f(x);

oppure

>>y=feval(f,x);

126

y è un vettore della stessa dimensione di x e contiene i valori della funzione f valutati in ogni elemento di x

Page 127: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni e Grafici

• Comando inline

127

>> f1=inline(‘(x-1).^6’);

>> f2=inline(‘x.^6-6*x.^5+15*x.^4-20*x.^3+15*x.^2-6*x+1’);

>> f3=inline(‘1+x.*(-6+x.*(15+x.*(-20+x.*(15+x.*(-6+x)))))’);

>> x = 0.99:.0001:1.01;

>> x=single(x);

>> p1 = f1(x);

>> p2 = f2(x);

>> p3 = f3(x);

>> figure,

>> subplot(3,1,1), plot(x,p1)

>> title('(x-1)^6')

>> subplot(3,1,2), plot(x,p2)

>> title('x^6-6*x^5+15*x^4-20*x^3+15*x^2-6*x+1')

>> subplot(3,1,3), plot(x,p3)

>> title('1+x*(-6+x*(15+x*(-20+x*(15+x*(-6+x)))))')

Page 128: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni e Grafici

• Comando inline

128

>> f1=inline(‘(x-1).^6’);

>> f2=inline(‘x.^6-6*x.^5+15*x.^4-20*x.^3+15*x.^2-6*x+1’);

>> f3=inline(‘1+x.*(-6+x.*(15+x.*(-20+x.*(15+x.*(-6+x)))))’);

>> x = 0.99:.0001:1.01;

>> x=single(x);

>> p1 = feval(f1,x);

>> p2 = feval(f2,x);

>> p3 = feval(f3,x);

>> figure,

>> subplot(3,1,1), plot(x,p1)

>> title('(x-1)^6')

>> subplot(3,1,2), plot(x,p2)

>> title('x^6-6*x^5+15*x^4-20*x^3+15*x^2-6*x+1')

>> subplot(3,1,3), plot(x,p3)

>> title('1+x*(-6+x*(15+x*(-20+x*(15+x*(-6+x)))))')

Page 129: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni e Grafici Per valutare la funzione, definita secondo una delle tre modalità precedenti, in un punto x (oppure in un insieme di punti memorizzati in un vettore x), è necessario prima definire x e quindi usare i seguenti comandi

• Anonymous function mediante il simbolo @, che è un puntatore ad

una funzione

>> f=@(x)[(x-1).^6];

>> x=linspace(0.99,1.01,100);

>> y=f(x);

oppure

>>y=feval(f,x);

129

y è un vettore della stessa dimensione di x e contiene i valori della funzione f valutati in ogni elemento di x

Page 130: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni e Grafici

• Comando inline

130

>> f1=@(x)[(x-1).^6];

>> f2=@(x)[x.^6-6*x.^5+15*x.^4-20*x.^3+15*x.^2-6*x+1];

>> f3=@(x)[1+x.*(-6+x.*(15+x.*(-20+x.*(15+x.*(-6+x)))))];

>> x = 0.99:.0001:1.01;

>> x=single(x);

>> p1 = f1(x);

>> p2 = f2(x);

>> p3 = f3(x);

>> figure,

>> subplot(3,1,1), plot(x,p1)

>> title('(x-1)^6')

>> subplot(3,1,2), plot(x,p2)

>> title('x^6-6*x^5+15*x^4-20*x^3+15*x^2-6*x+1')

>> subplot(3,1,3), plot(x,p3)

>> title('1+x*(-6+x*(15+x*(-20+x*(15+x*(-6+x)))))')

Page 131: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni e Grafici fplot(funzione,limiti_assi,'opzioni') Permette di graficare la funzione (definita usando una delle modalità mostrate nelle slide precedenti) nell’intervallo definito da limiti_assi senza dover definire il vettore x limiti_assi : [xmin xmax] è un vettore contenente i limiti inf e sup dell’intervallo in cui si vuole visualizzare funzione; ‘opzioni’: sono le opzioni del comando plot Esempio: >> f = @(x)[x^2+5];

>> fplot(f,[-1 1])

>> xlabel(‘x’), ylabel(‘f(x)’)

131 Disegna il grafico della funzione f nell’intervallo [-1,1]

Page 132: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

132

Consideriamo lo sviluppo in serie di Taylor di ex attorno allo 0

10 62

1 32

xexx

xex

Graficare ex e la sua approssimazione negli intervalli [0,1] e [0 10-8]

Esercizio

>> f = @(x)[exp(x)];

>> f2 = @(x)[1+x+x^2/2];

>> figure,

>> subplot(1,2,1),

>> fplot(f,[0 1],'k'), hold on,

>> fplot(f2,[0 1],'r'),

>> legend('exp(x)','approx Taylor')

>> subplot(1,2,2),

>> fplot(f,[0 10^-8],'k:'),

>> hold on, fplot(f2,[0 10^-8],'r:')

Page 133: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

>>f=@(lambda)[exp(lambda)+0.435*(exp(lambda)-1)/lambda–1.564];

>>assey=@(x)[0];

>>figure,

>>fplot(f,[0 1000],'k')

>>hold on,

>>fplot(assey,[0 1000],'r')

>>xlabel('x')

>>ylabel('f(x)')

133

Esercizio: Separare graficamente gli zeri positivi della seguente funzione f() = e + 0.435 (e - 1) / - 1.564

Dal grafico è evidente che per valori di x molto grandi la funzione è sicuramente diversa da zero Si può, quindi, restringere l’intervallo di visualizzazione della funzione

Separazione grafica delle radici

Page 134: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio: Separare graficamente gli zeri positivi della seguente funzione f() = e + 0.435 (e - 1) / - 1.564

Si può restringere ancora l’intervallo di visualizzazione della funzione

134

Separazione grafica delle radici

>>f=@(lambda)[exp(lambda)+0.435*(exp(lambda)-1)/lambda–1.564];

>>assey=@(x)[0];

>>figure,

>>fplot(f,[0 100],'k')

>>hold on,

>>fplot(assey,[0 100],'r')

>>xlabel('x')

>>ylabel('f(x)')

Page 135: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio: Separare graficamente gli zeri positivi della seguente funzione f() = e + 0.435 (e - 1) / - 1.564

Si può restringere ancora l’intervallo di visualizzazione della funzione

135

Separazione grafica delle radici

>>f=@(lambda)[exp(lambda)+0.435*(exp(lambda)-1)/lambda–1.564];

>>assey=@(x)[0];

>>figure,

>>fplot(f,[0 10],'k')

>>hold on,

>>fplot(assey,[0 10],'r')

>>xlabel('x')

>>ylabel('f(x)')

Page 136: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio: Separare graficamente gli zeri positivi della seguente funzione f() = e + 0.435 (e - 1) / - 1.564

Si può restringere ancora l’intervallo di visualizzazione della funzione

136

Separazione grafica delle radici

>>f=@(lambda)[exp(lambda)+0.435*(exp(lambda)-1)/lambda–1.564];

>>assey=@(x)[0];

>>figure,

>>fplot(f,[0 5],'k')

>>hold on,

>>fplot(assey,[0 5],'r')

>>xlabel('x')

>>ylabel('f(x)')

Page 137: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio: Separare graficamente gli zeri positivi della seguente funzione f() = e + 0.435 (e - 1) / - 1.564

Dal grafico è possibile determinare un buon intervallo di separazione dello zero della funzione, per esempio [0.05,0.15]

137

Separazione grafica delle radici

>>f=@(lambda)[exp(lambda)+0.435*(exp(lambda)-1)/lambda–1.564];

>>assey=@(x)[0];

>>figure,

>>fplot(f,[0 1],'k')

>>hold on,

>>fplot(assey,[0 1],'r')

>>xlabel('x')

>>ylabel('f(x)')

Page 138: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

138

La finestra grafica di Matlab

Zoom in avanti

Zoom indietro

Rotazione

Page 139: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

1. Usare le diverse modalità per valutare e graficare le seguenti funzioni negli intervalli I specificati

• f(x) = 1/(1+x2), I=[-5,5]

• f(x) = sin(x)+cos(x), I=[-π, π]

2. Separare gli zeri delle seguenti funzioni contenuti negli intervalli specificati

• f(x) = (x-1)2-3log(x) in I=[0.5,2]

• f(x) = sin(x)+x-1 in I=[0,π]

• f(x) = log(x)+x2-x in I=[0.7,2.3]

3. Separare le radici dell’ equazione non lineare log(1/x)-x2=0

graficando su una stessa finestra le funzioni f(x)=log(1/x) e g(x)=x2

Esercizi

139

Page 140: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Eliminare righe o colonne:

A(i,:) =[] elimina la i-ma riga di A

A(: , m:k)=[] elimina tutte le colonne di indici da m a k

Esempio: Sia A = [1 2 0; 3 4 1; 2 6 3]. Eliminare la seconda riga.

>> A(2,:)=[]

A =

1 2 0

2 6 3

Esempio: Sia A = [1 2 0; 3 4 1; 2 6 3]. Eliminare la prima e la seconda colonna.

>> A(:,[1 2])=[]

A =

0

1

3

Matrici

Page 141: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Annullare righe o colonne:

A(i,:) =0 sostituisce alla i-ma riga di A un vettore di elementi nulli

A(: , m:k)=0 sostituisce tutte le colonne di indici da m a k con vettori di elementi nulli

Esempio: Sia A = [1 2 ; 3 4]. Annullare la seconda riga.

>> A(2,:)=0

A =

1 2

0 0

Esempio: Sia A = [1 2 0; 3 4 1; 2 6 3]. Annullare la prima e la seconda colonna.

>> A(:,[1 2])=0

A =

0 0 0

0 0 1

0 0 3

Matrici

Page 142: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Modifica di Matrici

A(i,j)=x Assegna il valore x all’elemento i,j della matrice A

A(i,:)=v Assegna alla riga i della matrice A gli elementi del vettore riga v

A(:,j)=w Assegna alla colonna j della matrice A gli elementi del vettore colonna w

A(i,m:p:n)=v Assegna agli elementi di indice di colonna da m a n con passo p della i-esima riga gli elementi del vettore riga v

A(i,:)=[ ] Elimina la riga i della matrice A

A(:,j)=[ ] Elimina la colonna j della matrice A

Page 143: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Matrici Il comando colon : A(:) organizza gli elementi della matrice in un vettore colonna (posiziona le colonne di A una sotto l’altra) Usando la stessa strategia A(k) indica il k-esimo elemento di A, ovvero il k-esimo elemento del vettore colonna in cui è memorizzata A Esempio: Se A = [1 0 3; 4 2 1] >> A(:)

ans =

1

4

0

2

3

1

>> A(5)

ans =

3

Page 144: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizi

•Costruire una matrice 5x5, ed assegnarla alla variabile A •Azzerare la prima colonna di A •Eliminare la seconda e l’ultima colonna di A ed indicare con C la matrice così ottenuta •Estrarre da A la sottomatrice 2x2 costituita dalla seconda e terza riga e dalla seconda e terza colonna di A ed indicare con D la matrice ottenuta •Estrarre da C una matrice di dimensione 2x2 e sottrarla alla matrice D

Page 145: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Alcune funzioni sum(A) se A è un vettore calcola la somma degli elementi. Se A è una matrice? (usare lo help) prod(A) se A è un vettore calcola il prodotto degli elementi. Se A è una matrice? [m,n]=size(A) assegna ad m ed n i valori delle dimensioni di A D=det(A) calcola il determinante di A B=inv(A) calcola la matrice inversa di A A=zeros(m,n) crea una matrice di dimensione m x n con tutti gli elementi nulli A=ones(m,n) crea una matrice di dimensione m x n con tutti gli elementi uguali a 1 D=eye(m,n) la matrice D ha tutti 1 in posizione diagonale (se D è quadrata, D=eye(n) è la matrice identità)

145

Page 146: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Alcune funzioni

R=rand(m,n) matrice di dimensione mxn i cui elementi sono numeri casuali uniformemente distribuiti e compresi tra 0 ed 1 R= randn(m,n) matrice di dimensione mxn i cui elementi sono numeri casuali con distribuzione normale di media nulla e varianza 1

146

Page 147: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizi Si scrivano i comandi Matlab per ognuna delle seguenti operazioni 1. Creare un vettore riga x di 5 elementi equispaziati

nell’intervallo [2,3] 2. Aggiungere 1 al secondo elemento di x 3. Creare un vettore riga y avente la stessa dimensione di x i cui

elementi sono i numeri interi pari maggiori o uguali a 4 4. Creare una matrice A la cui prima riga sia il vettore x, la

seconda riga sia un vettore i cui elementi sono tutti uguali a 1 e la terza riga sia uguale a y

5. Definire il vettore riga z i cui elementi siano uguali alla media degli elementi di ogni colonna di A

6. Definire il vettore colonna w i cui elementi siano uguali alla media degli elementi di ogni riga di A

7. E’ possibile usare una sola istruzione per creare il vettore a tale che a(n) =(-1)nπ2n /(2n)!, con 0≤ n≤50? 147

Page 148: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizi Si scrivano i comandi Matlab per ognuna delle seguenti operazioni 8. Dato il vettore t = [0:0.01:1], calcolare le seguenti funzioni:

et(1+t), cos-1(t), tan2(t)-1

9. Si considerino le matrici A = [1 2; 4 -1] e B = [4 -2; -6 3] - Calcolare C=A+B, D = A-B, F=AB e G=BA -Definire la matrice H tale che H(i,j)= B(i,j)+A(i,j)B(i,j)1/3

-Se A e B non sono matrici singolari, calcolarne le matrici inverse -Sottrarre alla seconda riga di A la sua prima riga moltiplicata per 3 10. Dati i vettori x=[0 2 3]’, y=[2 -3 4] e le matrici A = [0 8; -4 3; -2 5], B=[9 7 6; 8 5 -1], stabilire quali dei seguenti comandi possono essere eseguiti correttamente x+y x+y’ x*y y*x A*y A’*x B’.*A y*A*B*x

148

Page 149: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Operatori relazionali

Si applicano a matrici o vettori aventi la stessa dimensione e sono operazioni elemento per elemento

C = A < B minore C = A <= B minore o uguale C = A > B maggiore C = A >= B maggiore o uguale C = A == B uguale C = A ~= B diverso La matrice di output C ha la stessa dimensione di A e B C(i,j) = 1 se la relazione è verificata, C(i,j) = 0 se la relazione non è verificata 149

Page 150: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Operatori relazionali

Esempio: >> A=[1 2 3; 4 5 6; 7 8 9]

A =

1 2 3

4 5 6

7 8 9

>> B = [0 2 4; 3 5 6; 3 4 9]

B =

0 2 4

3 5 6

3 4 9

>> A==B

ans =

0 1 0

0 1 1

0 0 1

Verificare anche gli altri operatori 150

Page 151: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Operatori logici

Si applicano a matrici o vettori aventi la stessa dimensione e sono operazioni elemento per elemento

C = A & B and (vero solo se entrambe sono vere)

C = A | B or (vero se almeno una è vera)

C = A ~ B not C = xor(A, B) or esclusivo (vero se solo una della due è vera)

all(v) restituisce 1 se tutti gli elementi del vettore v sono

diversi da zero, 0 altrimenti. Se v è una matrice? any(v) restituisce 1 se almeno un elemento del vettore v è

diverso da zero, 0 altrimenti. Se v è una matrice?

151

Page 152: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Operatori logici

Esempio: Siano x=[0 5 3 7] ed y=[0 2 8 7] >> x>y

ans =

0 1 0 0

>> x>4

ans =

0 1 0 1

>> m=(x>y)&(x>4)

m =

0 1 0 0

>> p= x|y

p =

0 1 1 1

Nota: qualsiasi intero 0 vale vero

152

Page 153: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizi

1. Generare una matrice A di dimensione 30x30 di numeri casuali con media nulla e varianza 1: a) usando gli operatori relazionali ma non le funzioni predefinite in matlab, determinare il vettore v contenente il valore assoluto degli elementi di A b) determinare il vettore w w(k) = 0 se |A(k)| 1.2 w(k) = A(k) se |A(k)| >1.2

153

Page 154: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

fliplr(v): inverte l‟ordine degli indici di un vettore riga se v è una matrice, inverte l‟ordine degli indici di colonna flipud(v): inverte l‟ordine degli indici di un vettore colonna se v è una matrice, inverte l‟ordine degli indici di riga Esempio: >> v = [3 1 –4 0];

>> a = fliplr(v)

a =

0 -4 1 3

>> b = flipud(v’)

b =

3

1

-4

0

Alcune funzioni utili

154

Page 155: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: >> A = [3 1 –4; 10 0 3; -1 2 0]

A =

3 1 -4

10 0 3

-1 2 0

>> a = fliplr(A)

a =

-4 1 3

3 0 10

0 2 -1

>> b = flipud(A)

b =

-1 2 0

10 0 3

3 1 -4

Alcune funzioni utili

155

Page 156: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

diff(v) calcola la differenza tra componenti successive di un vettore [v(2)-v(1), v(3)-v(2), …., v(end)-v(end-1)]. La dimensione del vettore risultante è length(v)-1 Se v è una matrice, la matrice risultante contiene le differenze successive tra le righe di v. La dimensione della matrice di output è (m-1)xn se la dimensione di v è mxn.

diff(v,k) calcola le differenze di ordine k tra le componenti di v. Esempio: >> v = [9 1 7 4 3 0 9 -1];

>>diff(v)

ans =

-8 6 -3 -1 -3 9 -10

>>diff(v,2)

ans =

14 -9 2 -2 12 -19

>>diff(v,3)

ans =

-23 11 -4 14 -31

Alcune funzioni utili

156

Page 157: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esempio: >> A = [9 1 7; 4 3 0 ;9 –1 5]

A =

9 1 7

4 3 0

9 -1 5

>> diff(A)

ans =

-5 2 -7

5 -4 5

>> diff(A,2)

ans =

10 -6 12

Alcune funzioni utili

157

Page 158: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

indici = find(condizione su v) restituisce un vettore costituito dagli indici corrispondenti alle componenti di v che verificano la condizione. Esempio: ind = find(v == 0) Restituisce le posizioni delle componenti nulle di v Se si omette la condizione, cioè ind = find(v), ind contiene le posizioni delle componenti di v diverse da zero Esempio: >> V = [6 1 0.3 –5 10 –4 8 3];

>> ind = find(V <= 0);

>> ind

ind =

4 6

>> V(ind)

ans =

-5 -4

Alcune funzioni utili

158

Page 159: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Dato x = [7 6 1 2 0 -1 4 3 -2 0], scrivere i comandi Matlab necessari per eseguire le seguenti operazioni 1. Porre a zero gli elementi negativi di x 2. Generare il vettore y contenente gli elementi di x più

grandi di 3 3. Aggiungere 3 agli elementi pari di x 4. Detto m il valore della media degli elementi di x: - porre gli elementi di x inferiori a m uguali a zero - porre gli elementi di x superiori alla media uguali alla loro differenza con m

Esercizi

159

Page 160: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Usando opportunamente le funzioni Matlab find e diff, scrivere la sequenza di istruzioni necessaria per individuare e stampare opportunamente gli estremi dell’intervallo di separazione della radice delle seguenti equazioni non lineari: • f() = e + 0.435 (e - 1) / - 1.564 in I=[0.05,0.15] • f(x) = log(x+1)+(x+2)1/2-1 in I=[-0.9,0.5] • f(x) = x 3 – 10x 2 + 5 in I=[0.6,0.8] • f(x) = (x-1)2-3log(x) in I=[0.5,2] • f(x) = sin(x)+x-1 in I=[0,π] • f(x) = log(x)+x2-x in I=[0.7,2.3]

I valori degli estremi devono assegnati al vettore intervallo. Il messaggio di stampa deve distinguere i due estremi

Esercizi

160

Page 161: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

>> x=(0.6:.02:.8)’;

>> f=@(x)[x.^3-10*x.^2+5];

>> y=f(x);

>> pos = find(abs(diff(sign(y))));

>> intervallo(1) = x(pos);

>> intervallo(2) = x(pos+1);

>> fprintf('l''estremo inferiore e’’ %6.5f\nl''estremo

superiore e’’ %6.5f\n',intervallo)

l'estremo inferiore e' 0.72000

l'estremo superiore e' 0.74000

Esempio

161

Page 162: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Infatti

>> [(1:length(x))' x y sign(y)]

ans =

1.0000 0.6000 1.6160 1.0000

2.0000 0.6200 1.3943 1.0000

3.0000 0.6400 1.1661 1.0000

4.0000 0.6600 0.9315 1.0000

5.0000 0.6800 0.6904 1.0000

6.0000 0.7000 0.4430 1.0000

7.0000 0.7200 0.1892 1.0000

8.0000 0.7400 -0.0708 -1.0000

9.0000 0.7600 -0.3370 -1.0000

10.0000 0.7800 -0.6094 -1.0000

11.0000 0.8000 -0.8880 -1.0000

Esempio

162

Page 163: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

>> [(1:length(x)-1)' diff(sign(y))]

ans =

1 0

2 0

3 0

4 0

5 0

6 0

7 -2

8 0

9 0

10 0

>> pos=find(abs(diff(sign(y))))

pos =

7

equivalente a >> pos=find((diff(sign(y)))~=0)

pos =

7

Esempio

163

Page 164: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni di input e output Per visualizzare stringhe sullo schermo:

disp(„stringa di caratteri’ )

Esempio: >> disp('Oggi e'' una bella giornata')

Oggi e' una bella giornata

>> disp(['Sabato ',' Domenica ',' Lunedi'''])

Sabato Domenica Lunedi'

Nota: Se la stringa contiene apostrofi e/o

accenti è necessario il doppio apice ‘’ per evitare conflitti con l’apice singolo usato per racchiudere caratteri

Nota: Si visualizza un vettore le cui componenti sono stringhe

Page 165: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni di input e output >> disp(['Sabato ';'Domenica';'Lunedi'' '])

Sabato

Domenica

Lunedi‘

>> disp(['Sabato';'Domenica';'Lunedi'''])

??? Error using ==> vertcat

CAT arguments dimensions are not consistent.

Nota: Si visualizza un vettore colonna le cui componenti sono stringhe. In questo caso è necessario che le stringhe siano composte dallo stesso numero di caratteri, altrimenti si riceve un messaggio di errore. Per avere stringhe della stessa lunghezza sono stati usati gli spazi bianchi

Page 166: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni di input e output

E’ possibile visualizzare caratteri e numeri contemporaneamente definendo un vettore composto da caratteri e numeri. Il numero, però, deve essere trasformato in stringa usando il comando num2str num2str(x) trasforma il numero contenuto nella variabile x in un

carattere >> x=3;

>> disp(['la variabile x contiene il valore ' num2str(x)])

la variabile x contiene il valore 3

Page 167: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Funzioni di input e output Per introdurre valori da tastiera: nome_variabile = input(„stringa di caratteri tra apici’) Assegna alla variabile nome_variabile il valore (scalare, vettore o matrice) digitato dall’utente da tastiera subito dopo la „stringa di caratteri tra apici’ che viene visualizzata sulla finestra dei comandi Esempio: >>n=input(‘inserisci il numero di righe della matrice: ’)

inserisci il numero di righe: 3

n =

3

>>m=input(‘inserisci il numero di colonne della matrice:’)

inserisci il numero di colonne: 7

m =

7

>>A=zeros(n,m);(A è una matrice di zeri di dimensione nxm)

Page 168: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Output dei dati Per visualizzare un insieme di dati (variabili) di output in un formato specifico, si può usare il comando fprintf(fid, formato, variabili)

la stringa di formato contiene i codici che specificano il tipo di variabile che viene scritta nel file di output scelto (che può essere opzionale) il cui indicatore è fid. Se si omette fid, le variabili vengono visualizzate nel formato specificato sulla finestra dei comandi

Esempio >> x = 3;

>> s = 'ciao';

>> fprintf('un intero %d e una stringa %s\n', x, s)

un intero 3 e una stringa ciao

Page 169: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

169

Formattazione dell‟output Descrittori di formato: specificano tipo, allineamento, cifre significative, ampiezza di campo

%s -> formato stringa %d -> formato numero intero %f -> formato numero decimale %e -> formato numero in notazione scientifica %g -> formato numero in forma compatta (non stampa gli zeri non significativi)

Esempi: %10s visualizza una stringa di 10 caratteri %6.2f visualizza un numero con 6 cifre di cui 2 decimali %-5d visualizza un intero con 5 cifre allineato a sinistra

Caratteri speciali \n -> carattere di ritorno a capo \t -> carattere di tabulazione

>> fprintf('un intero %d e una stringa %s\n', x, s)

un intero 3 e una stringa ciao

Page 170: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

170

Formattazione dell‟output >> x=sqrt(2);

>> fprintf('il valore della variabile e'' %6.4f \n', x)

il valore della variabile e‘ 1.4142

>> fprintf('il valore della variabile e'' %6.4e \n', x)

il valore della variabile e‘ 1.4142e+000

Page 171: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

171

Nota. fprintf può visualizzare vettori e matrici stampando gli

elementi su una riga secondo l’ordinamento lessicografico

(leggendoli per colonna) se non si indicano formati particolari.

>> A=[1 2 3; 4 5 6]

A =

1 2 3

4 5 6

>> fprintf('%3d',A)

1 4 2 5 3 6

>> fprintf('%3d%3d\n',A)

1 4

2 5

3 6

Formattazione dell‟output

Page 172: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

172

Formattazione dell‟output Esercizio: Costruire e visualizzare la tabella dei valori delle funzioni sin(x) e cos(x) in corrispondenza di k punti equidistanti in

[0, π]. k deve essere digitato da tastiera dall’utente >>k=input(‘inserire il numero di punti in cui valutare le...

funzioni ’);

inserire il numero di punti in cui valutare le funzioni 6

>>x=linspace(0,pi,k);

>>f1=cos(x);

>>f2=sin(x);

>> fprintf('n\t x(n)\t cos(x(n))\t sin(x(n))\n');,...

fprintf('%d\t %3.2f\t %+6.5f\t %-6.5f\n',[(1:k);x;f1;f2])

n x(n) cos(x(n)) sin(x(n))

1 0.00 +1.00000 0.00000

2 0.63 +0.80902 0.58779

3 1.26 +0.30902 0.95106

4 1.88 -0.30902 0.95106

5 2.51 -0.80902 0.58779

6 3.14 -1.00000 0.00000

Page 173: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

173

Formattazione dell‟output Infatti >>disp([(1:k);x;f1;f2])

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000

0 0.6283 1.2566 1.8850 2.5133 3.1416

1.0000 0.8090 0.3090 -0.3090 -0.8090 -1.0000

0 0.5878 0.9511 0.9511 0.5878 0.0000

n x(n) cos(x(n)) sin(x(n))

1 0.00 +1.00000 0.00000

2 0.63 +0.80902 0.58779

3 1.26 +0.30902 0.95106

4 1.88 -0.30902 0.95106

5 2.51 -0.80902 0.58779

6 3.14 -1.00000 0.00000

Page 174: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio Quale comando si deve usare per ottenere la seguente stampa?

x=1.00 | log(x)=0.00

x=1.25 | log(x)=0.22

x=1.50 | log(x)=0.41

x=1.75 | log(x)=0.56

x=2.00 | log(x)=0.69

Page 175: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Esercizio Quale comando si deve usare per ottenere la seguente stampa?

x=1.00 | log(x)=0.00

x=1.25 | log(x)=0.22

x=1.50 | log(x)=0.41

x=1.75 | log(x)=0.56

x=2.00 | log(x)=0.69

>> x=1:.25:2; y=log(x);

>> fprintf('x=%-6.2f | log(x)=%-6.2f\n',[x;y]);

Page 176: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Output dei dati Per scrivere su file un insieme di dati di output con un certo formato, fprintf deve essere usato insieme ai comandi fopen e fclose: fid = fopen ('stringa', 'w')

fid identifica il file di cui 'stringa‘ definisce il nome 'w‘ indica la modalità con cui è aperto il file, ovvero scrittura

fprintf(fid, 'formato', variabili) scrive nel file identificato dalla variabile fid le variabili con il

formato assegnato fclose (fid) chiude il file identificato da fid

Page 177: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Output dei dati Esempio: >> x = 0:.1:1;

>> y = [x; exp(x)];

>> fid1 = fopen('exp.txt','w');

>> fprintf(fid1,'%6.2f %12.8f\n',y);

>> fclose(fid1)

>> type exp.txt

0.00 1.00000000

0.10 1.10517092

0.20 1.22140276

0.30 1.34985881

0.40 1.49182470

0.50 1.64872127

0.60 1.82211880

0.70 2.01375271

0.80 2.22554093

0.90 2.45960311

1.00 2.71828183

Page 178: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Output dei dati Esempio: >> n=4; x=1234.5467; err=1.345677e-4;

>> fid = fopen(‘fileout.dat','w');

>> fprintf(fid,'Iter = %5.0f \t approx x = %10.7f \t Err = %7.2e',n,x,err);

>> fclose(fid);

>> type fileout.dat

Iter = 4 approx x = 1234.5467000 Err = 1.35e-004

Page 179: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Output dei dati Per leggere da un file un insieme di dati si usano i comandi fopen, fscanf e fclose: fid = fopen('stringa') fid identifica il file da aprire di cui stringa indica il nome

vari = fscanf(fid,formato,size) legge i dati contenuti nel file identificato da fid, li converte in base al formato specificato e li memorizza nella variabile vari. size indica la dimensione della variabile vari Se size è uno scalare, allora vari è un vettore colonna Se size è un vettore, per esempio [nrighe; ncol], allora legge nrighe*ncol numeri e li memorizza in una matrice di ugual dimensione Se ncol=inf, allora legge, per righe, tutti i dati nel file. fclose (fid) chiude il file identificato da fid.

Page 180: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Output dei dati Esempio:

>> fid = fopen('exp.txt');

>> T = fscanf(fid,'%g %g',[2 inf]);

>> fclose(fid) >> T = T'

T =

0 1

0.1 1.10517092

0.2 1.22140276

0.3 1.34985881

0.4 1.4918247

0.5 1.64872127

0.6 1.8221188

0.7 2.01375271

0.8 2.22554093

0.9 2.45960311

1 2.71828183

Oss: il file ha 2 colonne. fscanf legge per righe 2 elementi fino alla fine del file. Pertanto T sarà una matrice di dimensione 2 righe x 11 colonne Per ottenere la matrice scritta nel file è necessario trasporre T

Page 181: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Output dei dati Esempio: >> type dati.in

0.10 2

0.20 3

0.30 4

>> fid = fopen('dati.in');

>> vetto1 = fscanf(fid,'%g %g',2) % legge la prima riga

>> vetto2 = fscanf(fid,'%g %g',2) % legge la seconda riga

>> vetto3 = fscanf(fid,'%g %g',2) % legge la terza riga

>> fclose(fid)

Oss: fscanf legge per righe!!!

Page 182: Metodi numerici con elementi di Programmazione · Matlab (MATrix LABoratory) è un sistema software integrato per il calcolo tecnico e scientifico ... sistemi dinamici, il calcolo

Output dei dati Per visualizzare un insieme di dati di output in un formato specifico, si può usare anche il comando sprintf(formato, variabili)

la stringa di formato contiene i codici che specificano il tipo di variabile che deve essere visualizzata

L’output è indirizzato su una stringa di testo

Esempio >>x = 3;

>>s = 'ciao';

>>stringa=sprintf('un intero %d e una stringa %s\n',x, s);

>> disp(stringa)

un intero 3 e una stringa ciao