Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio,...

27
Introduzione a MATLAB Università degli Studi di Napoli Federico II CdL Ing. Elettrica Corso di Laboratorio di Circuiti Elettrici Dr. Carlo Petrarca Dipartimento di Ingegneria Elettrica e Tecnologie dell’Informazione Università di Napoli FEDERICO II 1 Lezione n.4

Transcript of Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio,...

Page 1: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Introduzione a MATLAB

Università degli Studi di Napoli Federico II

CdL Ing. Elettrica

Corso di Laboratorio di Circuiti Elettrici

Dr. Carlo Petrarca

Dipartimento di Ingegneria Elettrica e

Tecnologie dell’Informazione

Università di Napoli FEDERICO II

1

Lezione n.4

Page 2: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Equazioni algebriche lineari

2

11 1 12 2 1 1

21 1 22 2 2 2

1 1 2 2

....

....

........

....

n n

n n

m m mn n m

a x a x a x b

a x a x a x b

a x a x a x b

Un sistema di m equazioni algebriche lineari in n incognite si presenta

nella forma

2

Risolvere il sistema significa trovare il vettore x delle incognite.

Soluzione del sistema è ogni n-pla di numeri che, sostituiti

ordinatamente alle n incognite, rendono ogni primo membro uguale al

rispettivo secondo membro

Page 3: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Se un sistema ammette soluzioni, esso è detto compatibile.

Se il sistema ammette un’unica soluzione, è detto determinato.

Dato un sistema di equazioni lineari, ci chiediamo:

1) Il sistema ammette soluzioni (il sistema è compatibile)?

2) Quante soluzioni ammette?

3) Quali sono le soluzioni?

3

Se un sistema non ammette soluzioni è incompatibile.

Se il sistema ammette più soluzioni è detto indeterminato.

Page 4: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Condizione necessaria e sufficiente affinché un sistema sia compatibile

è che la matrice A dei coefficienti delle incognite e la matrice completa

(A|b) che si ottiene aggiungendo ad essa la colonna dei termini noti,

abbiano lo stesso rango

Teorema di Rouchè-Capelli:

In un sistema compatibile, se il numero di equazioni è inferiore al

numero di incognite (m<n) si possono avere infinite soluzioni

Se il sistema è composto da n equazioni in n incognite, allora un

sistema compatibile ha una ed una sola soluzione se:

rank(A)=n

cioè se la matrice A ha rango massimo.

4

Page 5: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

se la matrice A ha rango massimo :

a) il determinante di A è diverso da zero;

b) la matrice A è invertibile ed esiste A-1 ;

c) la soluzione è:

bAx1

5

vettore incognite matrice coefficienti delle incognite Vettore termini noti

Il sistema può essere posto in forma matriciale:

Ax b

11 12 1

21 22 2

1 1

..

..

.. .. .. ..

..

n

n

m m mn

a a a

a a a

a a a

A

1

2

..

n

x

x

x

x

1

2

..

m

b

b

b

b

Page 6: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Esercizio

Creare un file .m per risolvere il sistema:

Soluzione

x1= 2.10; x2= 1.05; x3= 1.90

66

% Matrice A dei coefficienti delle incognite

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

% Vettore colonna b dei termini noti

b=[0; 1; 4];

% Soluzione del sistema

x=inv(A)*b;

% Mostro il risultato

disp('Il vettore x risulta: ')

disp([x(1) x(2) x(3)])

Page 7: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Il calcolo numerico possiede limitazioni ben precise dovute a:

a. errore generato dall’algoritmo di calcolo;

b. errore generato da qualsiasi macchina, dovuto al fatto che il

calcolatore può rappresentare solo un numero finito di cifre.

Questo secondo tipo di errore si propaga ad ogni

operazione e dà luogo al classico errore di arrotondamento.

c. necessità di modificare l’algoritmo di calcolo per problemi di

tempo, di memoria, di stabilità numerica

MATLAB usa il sistema floating point (punto che si sposta) per

rappresentare un numero x:

e

tdddx .... 21

10241021 ;53 ;2 etcon:7

Page 8: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

la costante eps contiene l’epsilon di macchina. è il

numero più piccolo che sommato ad 1 restituisce un

valore maggiore di 1 :

1 1

dà indicazioni sul massimo numero di cifre significative

2.2204 16eps e

8

realmax è il più grande numero rappresentabile in Matlab

nella forma 2^k

realmax = 1.7977e+308

realmax*2 = Inf

1+eps/2 = 1

Page 9: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Sistema di equazioni lineari nelle incognite x1 e x2:

Perturbiamo leggermente la matrice A. Ci aspettiamo che le soluzioni non cambino:

1 2

1 2

10

1.002 0

x x

x x

1 1 10;

1.002 1 0

A b 5010 , 5000 21 xx

Invece ….

1 1 10;

1.001 1 0

A b1 210000; 10010x x

Le soluzioni sono sensibilmente diverse !!!!!

0001.1

10

21

21

xx

xx

9

Page 10: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Una delle conseguenze dell’errore di arrotondamento riguarda

l’accuratezza dei risultati .

Può accadere che piccole perturbazioni nella matrice A portino a

grandi perturbazioni nella soluzione. In tal caso il sistema si dice mal

condizionato

La funzione cond ci permette di verificare se il sistema è mal

condizionato.

E’ auspicabile avere valori di cond bassi. Se il valore di cond è elevato,

allora si suggerisce di cambiare algoritmo: ad esempio, non usare

l’inversione ma usare la il metodo di Cramer o la fattorizzazione LU

cond(A) = 4.0020 e+003

10

Il sistema dell’esempio precedente è mal condizionato ed è pertanto

molto sensibile alle piccole perturbazioni. Infatti si ha:

Page 11: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Regola di CramerDato un sistema di equazioni lineari con A matrice quadrata di

ordine n non singolare, se indichiamo con Ai la matrice ottenuta

sostituendo la i-esima colonna di A con il vettore colonna b,

11

det

detix

iA

A

la soluzione è data da:

11

Page 12: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

12

1 2 3

1 2 3

1 2 3

5 2 2 2

3 4 1

3 0

x x x

x x x

x x x

5 2 2

1 3 4

1 3 1

A

2

1

0

b

1

2

3

x

x

x

x

1 2 3

2 2 2 5 2 2 5 2 2

1 3 4 1 1 4 1 3 1

0 3 1 1 0 1 1 3 026 1 29, ,

93 93 93 93 93 93x x x

det 93 A

12

Esercizio

Usare il metodo di Cramer per risolvere il sistema:

Page 13: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Esercizi

Creare un file .m per risolvere il seguente sistema:

1 2 3

1 2 3

1 2 3

3 5 2 0

6 5 4

8 4 6 5

x x x

x x x

x x x

Soluzione

x1-2.1275; x2= 2.1667; x3= -2.2255

1313

Page 14: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

14

% Esempio di m-file

clear all; clc;

% Matrice A dei coefficienti delle incognite

A=[3 5 2; -1 6 5; 8 4 -6];

% Vettore colonna b dei termini noti

b=[0; 4; 5];

% Controllo se il sistema è ben-condizionato

% Se l'indice cond è molto grande, il sistema è mal-condizionato

disp('Indice cond')

disp(cond(A))

% Ricavo il vettore colonna x delle incognite

x=inv(A)*b;

% Mostro i risultati

disp('Valori delle incognite')

disp(' x(1) x(2) x(3)')

disp([x(1) x(2) x(3)])

Page 15: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Grafici

Se x e y sono due vettori della stessa lunghezza, il comando

plot(x,y) permette di tracciare il grafico della funzione y=f(x)

x=[-2*pi:pi/10:2*pi]; y=sin(x); plot(x,y)

Il comando plot permette di costruire grafici

15

Page 16: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Ogni volta che si traccia un grafico, viene aperta una finestra Figure

16

Se si invia un nuovo comando plot, nella finestra Figure il grafico

precedente viene sostituito da quello nuovo.

Il comando figure consente di creare una nuova finestra in cui

inserire il grafico.

x=[1:100]; y=log10(x); figure(1); plot(x,y) w=[-100:100]; z=10*w.^2+6*w+3; figure(2); plot(w,z))

Page 17: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

plot(x,y,’s’)

Il comando plot consente di specificare il colore, lo stile, I

marker della linea da tracciare. A tal fine, è necessario inserire

la stringa ‘s’ :

la stringa ‘s’ ha la forma del tipo ‘s’=‘colore-marker-stile’

Ad esempio:

colore: b (blue)

g (green)

r (red)

y (yellow)

c (cyan)

k (black)

marker: . (punto)

o (cerchio)

s (quadrato)

+ (croce)

* (stella)

d (rombo)

x (ics)

stile: - (continua)

: (puntata)

-. (punto-linea)

-- (tratteggiata)

17

Page 18: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

plot(x,y,'ro--')

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

plot(x,y,'mv')plot(x,y,'k*:')

plot(x,y,'gd-')

18

Page 19: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Il comando hold on consente di tracciare più curve su uno

stesso grafico

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

>> x=[-2*pi:pi/10:2*pi]; y=sin(x); plot(x,y)

>> z=cos(x); hold on; plot(x,z,'r+-')

19

Page 20: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Possiamo inserire un titolo al grafico

>> title(‘Funzione seno')

Possiamo dare un’etichetta agli assi x e y

>> xlabel('x [rad]')

>> ylabel('sin(x)')

20

Possiamo decidere il tipo di carattere da utilizzare

>> xlabel('x [rad]‘,’Fontame’, ‘Arial’)

O anche la dimensione del carattere

>> xlabel('x [rad]‘,’Fontname’, ‘Arial’,’Fontsize’, 13)

Page 21: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Possiamo anche usare caratteri dell’alfabeto greco

>> title('Funzione sen( \omega t + \alpha)')

MATLAB assegna automaticamente il range degli assi. Si può usare il

comando axis([xmin xmax ymin ymax]) per scegliere il range in

modo autonomo

>> axis([-2*pi 2*pi -1 1])

Il comando grid consente di mostrare una griglia

>> grid

21

Funzione sen(t + )

Oppure usare pedici e apici

>> ylabel('successione x_n = \beta _1 + n^2') successione xn=1 + n2

Page 22: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

22

Cliccando sul comando Tools – Edit plot è possibile modificare

manualmente le caratteristiche del grafico e, cioè, cambiare i colori, i

simboli, il titolo, gli assi, ecc.

Page 23: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Il comando subplot

Il comando subplot permette di costruire più grafici nella

stessa finestra

subplot(m,n,p)

Suddivide la finestra in una matrice (mn) di grafici

Seleziona il grafico p-esimo

subplot(2,3,1)

Ottengo una finestra con (2 3) grafici e lavoro sul grafico 1

23

Page 24: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

Creare il file usa_subplot.m con il quale tracciare su un unico grafico le

funzioni: sin(x); cos(x); sin(x)^2; cos(x)^2; cos(x)*sin(x); cos(x)+sin(x)

0 5 10-1

-0.5

0

0.5

1Funzione sin(x)

0 5 10-1

-0.5

0

0.5

1Funzione cos(x)

0 5 100

0.2

0.4

0.6

0.8

1Funzione sin(x)2

0 5 100

0.2

0.4

0.6

0.8

1Funzione cos(x)2

0 5 10-0.5

0

0.5Funzione sin(x)*cos(x)

0 5 10-1.5

-1

-0.5

0

0.5

1

1.5Funzione sin(x)+cos(x)

24

Page 25: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

sin - Seno

asin - Arcoseno

cos - Coseno

acos - Arcocoseno

tan - Tangente

atan - Arcotangente.

exp - Esponenziale

log - Logaritmo naturale

log10 - Logaritmo (base 10)

sqrt - Radice quadrata

abs - Valore assoluto

max - Massimo

min - Minimo

25

Funzioni elementari

Page 26: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

26

>> y=cos(5*4)

y =

0.4081

>> y=cos(5)*4

y=

1.1346

Esempi:

4*5cosy 4*5cosy

L’argomento della funzione cos è espresso in radianti

>> y=cos(pi)

y =

-1 cosy

L’argomento della funzione cosd è espresso in gradi

>> y=cosd(180)

y =

-1

180cosy

Regole di priorità:

Page 27: Introduzione a Matlab parte 2 - unina.it · allora si suggerisce di cambiare algoritmo: ad esempio, non usare l’inversionema usare la il metodo di Cramer o la fattorizzazione LU

27

Esempi:

Esercizio. Calcolare l’espressione:

>> a=5e+3

a=

5000e+3 significa 103

>> a=5*exp(3)

a=

100.4277

exp(3) significa e3

e=2.7183

7

2cos

10*54 34ey

>> y=sqrt((4*exp(4)+5e+3)/cos(2*pi/7))

y =

91.4858