• Nenhum resultado encontrado

Introduzione a MATLAB - Elettrotecnica

N/A
N/A
Protected

Academic year: 2023

Share "Introduzione a MATLAB - Elettrotecnica"

Copied!
36
0
0

Texto

(1)

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

Lezione n.5

(2)

i1

E

+

R1

R2 i2

i4

V = 4

A

V2 V3

V1

i =

3 J

B

C

Risoluzione di un circuito elettrico (1)

incognite n

l

8

; 3

; 4

 

V 250

A 8

15 10

) 4 (

) 3 (

) 2 (

) 1 (

2 1

E

J

R

R

(3)

3

Sistema fondamentale

 

0 0

) (

) (

3 2

1

4 1

i i

i i i B

A

 

0

0 )

(

) (

3 2

4 2

1 2

1

V V

V V

V M

M

 

E V

J i

V i

R

V i

R

4 3

2 2

2

1 1

1

0 0

) 4 (

) 3 (

) 2 (

) 1 ( LKC

LKT

Bipoli

i1

E

+

R1

R2 i2

i4

V = 4

A

V2 V3

V1

i =

3 J

B

C

(4)

 

 

 

 

E J V

V V V i i i i

R R

0 0 0 0 0 0

1 0

0 0

0 0

0 0

0 0

0 0

0 1

0 0

0 0

1 0

0 0

0

0 0

0 1

0 0

0

0 1 1

0 0

0 0

0

1 0

1 1

0 0

0 0

0 0

0 0

0 1

1 1

0 0

0 0

1 0 0

1

4 3 2 1 4 3 2 1

2 1

Sistema fondamentale in forma matriciale:

Matrice A [8,8], vettore incognite x[8,1], vettore noti b[8,1]

(5)

5 R=[10 15]; %vettore delle resistenze

J=8; % corrente del generatore E=250; % f.e.m del generatore nb=4; % Numero di bipoli

A=zeros(2*nb); % Matrice dei coeff. delle incognite

A(1,1)=1; A(1,4)=1; A(2,1)=-1; A(2,2)=-1; A(2,3)=1; A(3,5)=1; A(3,6)=-1; A(3,8)=1; A(4,6)=1;

A(4,7)=-1; A(5,1)=R(1); A(5,5)=-1; A(6,2)=R(2); A(6,6)=-1; A(7,3)=1; A(8,8)=1;

b=zeros(8,1); % Vettore colonna dei termini noti b(7,1)=J; b(8,1)=E;

x=inv(A)*b; % Vettore colonna delle incognite disp('Valori delle correnti incognite')

disp(' i(1) i(2) i(3) i(4)') disp([x(1) x(2) x(3) x(4)])

disp('')

disp('Valori delle tensioni incognite') disp(' v(1) v(2) v(3) v(4)') disp([x(1+nb) x(2+nb) x(3+nb) x(4+nb)])

(6)

+ E2

E3

E1

i (t)

3

+

+

R1

R2

R3

Risoluzione di un circuito elettrico (2)

1

100 ;

2

200 ;

3

300 ;

1

1 ;

2

2 ;

3

3 ;

EV EV EV R   R   R  

(7)

i 4

+ E2

E3

i 5 E1

i 6

+

+

R1

R2

R3 i 1

i 2

i3

A

B

C

O O'

v1

v2

v3 v =4

v =5

v =6

7

Conviene indicare tutte le incognite (tensioni e correnti sui bipoli)

(8)

Sistema fondamentale

 

0 0

0 0

) ' (

) (

) (

) (

3 2

1

6 3

5 2

4 1

i i

i

i i

i i

i i

O C

B A

 

0 0 )

(

) (

6 5

3 2

5 4

2 1

2 1

V V

V V

V V

V V

M

M  

 

3 6

2 5

1 4

3 3

3

2 2

2

1 1

1

0 0 0

6 5 4 3 2 1

E V

E V

E V

V i

R

V i

R

V i

R LKC

LKT

Caratteristiche

(9)

9

3 2 1

6 5 4 3 2 1 6 5 4 3 2 1

3 2

1

0 0 0 0 0 0 0 0 0

1 0

0 0

0 0

0 0

0 0

0 0

0 1

0 0

0 0

0 0

0 0

0 0

0 0

1 0

0 0

0 0

0 0

0 0

0 0

0 1 0

0 0

0 0

0 0

0 0

0 0

1 0

0 0

0 0

0

0 0

0 0

0 1

0 0

0 0

0

1 1

0 1

1 0

0 0

0 0

0 0

0 1

1 0

1 1

0 0

0 0

0 0

0 0

0 0

0 0

0 0

0 1

1 1

0 0

0 0

0 0

1 0

0 1

0 0

0 0

0 0

0 0

0 1

0 0

1 0

0 0

0 0

0 0

0 0

1 0

0 1

E E E

v v v v v v i i i i i i

R R

R

Sistema fondamentale in forma matriciale:

(10)

R=[8 7 15]; %vettore delle resistenze E=[100 250 180]; % vettore f.e.m dei generatori nb=6; % Numero di bipoli

A=zeros(2*nb); % Matrice dei coeff. delle incognite

A(1,1)=1; A(1,4)=-1; A(2,2)=1; A(2,5)=-1; A(3,3)=1; A(3,6)=-1; A(4,1)=1; A(4,2)=1; A(4,3)=1;

A(5,7)=-1;A(5,8)=1;A(5,10)=1; A(5,11)=-1; A(6,8)=-1; A(6,9)=1; A(6,11)=1 ;A(6,12)=-1;

A(7,1)=R(1); A(7,7)=-1; A(8,2)=R(2); A(8,8)=-1; A(9,3)=R(3); A(9,9)=-1; A(10,10)=1;

A(11,11)=1; A(12,12)=1;

b=zeros(2*nb,1); % Vettore colonna dei termini noti b(10:12,1)=E(1:3);

x=inv(A)*b; % Vettore colonna delle incognite disp('Valori delle correnti incognite')

disp(' i(1) i(2) i(3) i(4) i(5) i(6)') disp([x(1) x(2) x(3) x(4) x(5) x(6)])

disp('')

disp('Valori delle tensioni incognite')

disp(' v(1) v(2) v(3) v(4) v(5) v(6) ') disp([x(1+nb) x(2+nb) x(3+nb) x(4+nb) x(5+nb) x(6+nb)])

(11)

E’ opportuno usare metodi diversi per la risoluzione del circuito Scriviamo le equazioni nelle sole incognite correnti

1

1 2 2 1 2

2 3 3 2 3

1 1 1 0

0 0

i

R R i E E

R R i E E

     

   

        

 

   

   

     

11

+ E2

E3

E1

+

+

R1

R2

R3 i 1

i 2

i3

A

B

C

O O'

v1

v2

v3

1 2 3

1 1 2 2 1 2

2 2 3 3 2 3

0 i i i

R i R i E E R i R i E E

  

 

  

   

; 180

; 250

; 100

; 15

; 7

; 8

3 2 1 3 2 1

V E

V E

V E

R R R

Il Sistema da risolvere si è notevomente ridotto !!

(12)

% circuito2bis.m - Risoluzione circuito

% uso come incognite le sole correnti

R=[8 7 15]; %vettore delle resistenze

E=[100 250 180]; %vettore delle f.e.m dei generatori

A=[1 1 1; R(1) -R(2) 0; 0 R(2) -R(3)]; % Matrice dei coeff. delle incognite b=[0; E(1)-E(2); E(2)-E(3)]; % Vettore colonna dei termini noti

I=inv(A)*b; % Vettore colonna delle intensità di corrente V=R.*I; % Vettore colonna delle tensioni sui resistori Pr=V.*I; % Potenza assorbita dai resistori

Pe=E.*I; % Potenza erogata dai generatori

(13)

13

Versione alternativa:

Risolviamo il circuito con il metodo delle correnti di maglia

+ E2

E3

E1

+

+

R1

R2

R3 i 1

i 2

i3

A

B

C

O O'

v1

v2

v3 J1

J2

 

; 0

; 0

3 2

3 1

2 2

2 2

2 2

2 1

2 1

1 1

E J

R J

R J

R E

E J

R J

R J

R

E  

 

 

;

;

2 3

2 3 2

1 2

1 2

2 2 1

2 1

E E

J R R

J R

E E

J R J

R

R

(14)

Esercizio

Risolvere il circuito con il metodo dei potenziali di nodo

(15)
(16)

§ ciclo for …. end

§ ciclo if … end

§ ciclo while … end

MATLAB come linguaggio

di programmazione

(17)

Controllo di flusso: ciclo for …. end

Il ciclo for ha la seguente struttura:

for variabile = espressione istruzione

end

Il ciclo for consente di ripetere iterativamente un certo numero di volte le istruzioni in esso contenute

Esempio for k = 1:10

istruzione end

Il numero di istruzioni è controllato dalla variabile k, che assume i valori da 1 a 10 a intervalli di 1. L’operazione

istruzione” contenuta nel ciclo è eseguita 10 volte.

(18)

for k=1:4 y(k)=k^2;

end

>> y y =

Esempio:

Calcolare il quadrato del numero k per k=1, 2, 3, 4

Inizialmente k=1 e MATLAB esegue l’operazione y(1)=1^2 Successivamente …

k=2 e y(2)=2^2; k=3 e y(3)=3^2;

e infine k=4 e y(4)=4^2;

Le operazioni terminano perchè k ha raggiunto il valore finale 4

(19)

L‘uso eccessivo di cicli for può allungare i tempi di calcolo Basta fare una verifica con le istruzioni sotto riportate. Il vettore V=R*I viene ricavato in due modi diversi:

a) si usa un ciclo for;

b) si usa il prodotto elemento per elemento.

Il risultato è lo stesso, ma i tempi di calcolo sono estremamente diversi!

a) R=[1:1:1e+5]; I=[1:1:1e+5];tic; for k=1:1e+5; V(k)=R(k)*I(k); end;toc;

b) R=[1:1:1e+5]; I=[1:1:1e+5]; tic;V=R.*I;toc;

N.B. utilizzando il comando tic all’inizio di un’operazione ed il comando toc alla fine della stessa, MATLAB restituisce il tempo impiegato per il calcolo

(20)

Controllo di flusso: ciclo if –else-end

Il ciclo if ha la seguente struttura:

if espressione istruzione A else

istruzione B end

Il ciclo if consente di eseguire istruzioni solo se una determinata espressione risulta vera

L’istruzione A è eseguita solo se l’espressione risulta vera,

altrimenti viene eseguita l’istruzione B

(21)

b=3;

a=7;

if a>5

C=6*a*b;

else

C=3*a*b;

end

Esempio:

Calcolare la costante C

(22)

% Immissione dati da tastiera

a=input('Inserisci la variabile a =');

b=3;

if a>5

C=6*a*b;

else

C=3*a*b;

end

La variabile a può anche essere immessa da tastiera

(23)

Immissione di dati da tastiera: input

>> a=input('Inserisci il numero desiderato= ') Inserisci il numero desiderato= 8

a = 8

>> b=input('Inserisci la stringa desiderata= ', 's') Inserisci la stringa desiderata= Lezione

b =

Lezione

>> c=input('Inserisci il vettore desiderato= ') Inserisci il vettore desiderato= [5 7 11]

c =

5 7 11

(24)

== uguale

~= diverso da

< minore di

<= minore o uguale

> maggiore di

>= maggiore o uguale

Per il controllo di flusso occorrono gli operatori relazionali

gli operatori relazionali più comuni sono:

(25)

Creare un vettore di 10.000 elementi scelti in modo casuale secondo una distribuzione uniforme nell’intervallo [0,100].

Valutare poi la percentuale di elementi compresa nei seguenti intervalli:

I1: [0,25[ I2: [25,50[ I3: [50,75[ I4: [50,75[

Esercizio

(26)

Ntot=10000; % Numero di elementi

a=0; b=100; U=a+(b-a).*rand(Ntot,1); % creazione del vettore N1=0; N2=0; N3=0; N4=0; % Inizializzazione

for k=1:Ntot

if U(k)>=0 & U(k)<25 N1=N1+1;

elseif U(k)>=25 & U(k)<50 N2=N2+1;

elseif U(k)>=50 & U(k)<75 N3=N3+1;

elseif U(k)>=75 & U(k)<100 N4=N4+1;

end end

disp('Percentuali rilevate');

disp(' %N1 %N2 %N3 %N4 ')

disp([N1/Ntot*100 N2/Ntot*100 N3/Ntot*100 N4/Ntot*100])

(27)

I cicli possono essere innestati, uno dentro l’altro.

for variabile1 = espressione1 for variabile2 = espressione2

istruzioni end

end

Esercizi: Creare una matrice unità [5×5]

Creare una matrice [5×4] triangolare superiore

for k=1:3 for j=1:2

a(j,k)=k*j;

end end

>> a a =

1 2 3 2 4 6

(28)

Controllo di flusso: while … end

Il ciclo while consente di eseguire un blocco di istruzioni finchè una determinata espressione risulta vera. Quando l’espressione risulta falsa, il flusso del programma esce dal ciclo.

num=10;

eps=.1;

k=0;

while eps<num k=k+1;

a(k)=num;

num=num/2;

>> a a =

10.0 5.0 2.5 1.25 0.625 0.3125 0.1563

Il ciclo while ha la seguente struttura:

while espressione istruzioni

end

(29)

Il comando break

Il comando break consente di uscire rapidamente da un ciclo for o while. Se break è presente in un ciclo innestato, esso consente l’uscita solo dal ciclo interno.

clear all; clc;

k=0;

while 1

n=input('Scrivi un numero= ') if n<0, break, end

k=k+1;

m(k)=n^2;

end

Il ciclo continua finchè

non viene inserito un

numero minore di zero

(30)

Esercizio – esempio3.m

Creare un file .m con cui valutare l’epsilon di macchina

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 In Matlab la costante eps contiene il valore dell’epsilon di macchina

2.2204 16

epse

(31)

% Esempio n.3

% Calcolo dell'epsilon di macchina nella forma 2^-k

% Ripulisco la Command Window e cancello le variabili clc; clear all;

k=0;

epsilon=1; % Comincio dal numero 2^0 while 1~=1+epsilon

epsilon = epsilon/2; % Dimezzo il valore di epsilon k=k+1;

end

% Il ciclo è eseguito una volta in più del necessario

% Correggo i valori di epsilon e di k epsilon=epsilon*2

k=k-1; % epsilon=2^-k

(32)

Esercizi

1) Creare un file .m con cui valutare il più piccolo numero x

min

rappresentabile in Matlab nella forma 2^k

x

min

è il numero per il quale si ha (x

min

/2)=0

2) Creare un file .m con cui valutare il più grande numero x

max

rappresentabile in Matlab nella forma 2^k

x

max

è il numero per il quale si ha (x

max

*2)=inf

(33)

Esercizi

Nel circuito risolto in precedenza :

1.verificare il 1° PdK al nodo O’ con un ciclo for … end 2.verificare il teorema di Tellegen con un ciclo for … end 3.verificare il teorema di Tellegen senza usare cicli

33 +

E2

E3

E1

+

+

R1

R2

R3 i 1

i 2

i3

A

B

C

O O'

v1

v2

v3

(34)

% Verifica la LKC al nodo O'

% N.B. Le intensità di corrente sono calcolate tutte

% con verso di riferimento entrante nel nodo O' Somma=0; % Somma delle correnti nel nodo for k=1:3

Somma=Somma+I(k);

end

Risoluzione esercizi (1)

(35)

Risoluzione esercizi (2)

% Verifica del teorema di Tellegen for k=1:3

Pe(k)=E(k)*I(k); % Potenze Pe erogate dai generatori end

SommaPe=sum(Pe); % Somma delle potenze erogate

for k=1:3

V(k)=R(k)*I(k); % Tensione sul resistore

Pa(k)=V(k)*I(k); % Potenze Pa assorbite dai resistori end

SommaPa=sum(Pa); % Somma delle potenze assorbite SommaPe-SommaPa % Verifica di Tellegen

35

(36)

Risoluzione esercizi (3)

% Verifica del teorema di Tellegen senza cicli for Pe=E.*I; % Potenze Pe erogate dai generatori

SommaPe=sum(Pe); % Somma delle potenze erogate V=R.*I; % Tensione sul resistore

Pa=V.*I; % Potenze Pa assorbite dai resistori

SommaPa=sum(Pa); % Somma delle potenze assorbite SommaPe-SommaPa % Verifica di Tellegen

Referências

Documentos relacionados

APELAÇÃO CÍVEL - AÇÃO DE REPETIÇÃO DE INDÉBITO - ITBI - Município de São Manuel - Pretendida repetição do indébito, vez que após a realização de