Sei sulla pagina 1di 16

Instituto Politécnico de Setúbal

Engenharia Electrotécnica

Controlo

1.ª AULA
Matlab

Docente

Eng.ª Sónia Marques

3.º Ano –6.º Semestre 2002/2003


Instituto Politécnico de Setúbal - Controlo - 02/03

MATLAB

• 1ª aula
O MATLAB (MATrix LABoratory) é uma linguagem de programação concebida
pela MathWorks, Inc. baseadas na manipulação de matrizes e destinada a realizar
cálculos matemáticos e de engenharia tornando-se assim uma poderosa ferramenta de
software muito utilizada na concepção, simulação e análise de sistemas de controlo.

Declaração de vectores e matrizes

Declaração directa de variáveis onde as variáveis ficam declaradas automaticamente


quando lhes é atribuído um valor.

3 5 
EX: a = 4.3 , b = 6 , A = [ 5 2.2 3] , B =  
1 10
» a=4.3
a=
4.3000
»

A variável a fica automaticamente criada e com o valor 4.3.


» b=6;
»

O mesmo que a variável a mas com ; no fim faz com que não apareça no Workspace o
resultado da operação.

» A=[ 5 2.2 3]
A=
5.0000 2.2000 3.0000
»B=[3 5 ; 1 10]
B=
3 5
1 10
»

 a 3 5
Criar a matriz C á custa das variáveis a e b já criadas C =  
4 5 b

» C=[ a 3 5; 4 5 b]
C=
4.3000 3.0000 5.0000
4.0000 5.0000 6.0000
»

Por Engª Sónia Marques 2


Instituto Politécnico de Setúbal - Controlo - 02/03

Todas as variáveis uma vez criadas podem ser visualizadas através do comando whos:

» whos
Name Size Bytes Class
A 1x3 24 double array
B 2x2 32 double array
C 2x3 48 double array
a 1x1 8 double array
b 1x1 8 double array
Grand total is 15 elements using 120 bytes
»

Para apagar as variáveis já definidas o comando clear:

» clear
»whos
»

Dimensão
Para saber a dimensão de uma matriz basta o comando size(G):

» G= [3 4 5; 13 4 7 ];
»size(G)
ans=
2 3
»

enquanto de um vector o comando lenght(g):

» g= [ 4 7 5 13 4 7 ];
»length(g)
ans=
6
»

Transposta

» A=[ 5 2.2 3];


» A'
ans =
5.0000
2.2000
3.0000
»B=[3 5 ; 1 10];
» B'
ans =
3 1
5 10
»

Por Engª Sónia Marques 3


Instituto Politécnico de Setúbal - Controlo - 02/03

»C=[ 4.3 3 5;4 5 6];


»C'
ans =
4.3000 4.0000
3.0000 5.0000
5.0000 6.0000
»

Pode-se atribuir ao resultado da transposta de C outra variável , p. ex. E = C’, caso


contrário o resultado perde-se:

» E=C'
E=
4.3000 4.0000
3.0000 5.0000
5.0000 6.0000
»

Multiplicação

Na multiplicação tem de se ter cuidado com as dimensões das matrizes. Como B é


2x2 e C 2x3 pode ser calculado B*C:

» B*C
ans =
32.9000 34.0000 45.0000
44.3000 53.0000 65.0000
»

No caso de haver engano é enviado uma mensagem de erro, dando pistas para a não
concretização do pedido:

» C*B
??? Error using ==> *
Inner matrix dimensions must agree.
»

Uma constante tanto faz ser pré-multiplicação como pós-multiplicação:


» a=4.3;
»a*E
ans =
18.4900 17.2000
12.9000 21.5000
21.5000 25.8000
»
» E*a
ans =
18.4900 17.2000
12.9000 21.5000
21.5000 25.8000

Por Engª Sónia Marques 4


Instituto Politécnico de Setúbal - Controlo - 02/03

SOMA
»b=6;
»f=a+b
f=
10.3000
»D=[1 1 ;1 1];
»A+D
ans =
4 6
2 11

Tal como na multiplicação a dimensão das matrizes tem de ser compatível:

» B+C
??? Error using ==> +
Matrix dimensions must agree.
»

Divisão
» A/a
ans =
1.1628 0.5116 0.6977
»

Operações com elementos individuais

C C12 C13 
C =  11 
C21 C22 c23 
A = [A1 A2 A3 ]

Multiplicação de C23 * A2 = 6 * 2.2 = 13.2


»C(2,3)*A(2)
ans =
13.2000
»

Sub-matrizes

A partir do vector A=[ 5 2.2 3 ] formar outro vector s baseado nos dois últimos
elementos de A, s=[ 2.2 3 ] :

»s=A(2:3)
s=
2.2000 3.0000
»
Por Engª Sónia Marques 5
Instituto Politécnico de Setúbal - Controlo - 02/03

Supondo que de um novo vector w=[ 4 5 2 3 8 9 3] criar outro vector com os


elementos do vector w, s=[ 5 2 3 8 9];
» w=[ 4 5 2 3 8 9 3]
w=
4 5 2 3 8 9 3
» s=w(2:6)
s=
5 2 3 8 9
»
Do mesmo modo a partir de uma matriz se pode criar sub-matrizes:

1 2 3 6
5 7 4 9 

E = 2 1 5 2 E E33  1 5
D =  32 =
   E 42 E 43  7 8
5 7 8 4
7 1 3 5

» E=[1 2 3 6; 5 7 4 9; 2 1 5 2;5 7 8 4;7 1 3 5]


E=
1 2 3 6
5 7 4 9
2 1 5 2
5 7 8 4
7 1 3 5
» E(3:4,2:3)
ans =
1 5
7 8
»

Matriz Identidade
Para criar uma matriz identidade basta fazer eye(5) onde 5 significa a dimensão da
matriz:

» eye(5)
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
»

Por Engª Sónia Marques 6


Instituto Politécnico de Setúbal - Controlo - 02/03

HELP
Existem uma série de bibliotecas com funções já definidas.

» 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\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.
matlab\graph2d - Two dimensional graphs.
matlab\graph3d - Three dimensional graphs.
matlab\specgraph - Specialized graphs.
matlab\graphics - Handle Graphics.
matlab\uitools - Graphical user interface tools.
matlab\strfun - Character strings.
matlab\iofun - File input/output.
matlab\timefun - Time and dates.
matlab\datatypes - Data types and structures.
matlab\winfun - Windows Operating System Interface Files (DDE/ActiveX)
matlab\demos - Examples and demonstrations.
toolbox\ncd - Nonlinear Control Design Blockset
toolbox\control - Control System Toolbox.
control\ctrlguis - Control System Toolbox -- GUI support functions.
control\obsolete - Control System Toolbox -- obsolete commands.
stateflow\sfdemos - Stateflow demonstrations and samples.
toolbox\sb2sl - SystemBuild to Simulink Translator
stateflow\stateflow - Stateflow
simulink\simulink - Simulink
simulink\blocks - Simulink block library.
simulink\simdemos - Simulink 3 demonstrations and samples.
simulink\dee - Differential Equation Editor
toolbox\tour - MATLAB Tour
MATLABR11\work - (No table of contents file)
toolbox\local - Preferences.

For more help on directory/topic, type "help topic".


»

Por Engª Sónia Marques 7


Instituto Politécnico de Setúbal - Controlo - 02/03

Por exemplo a biblioteca elfun (elementary functions) :

» help matlab\elfun

Elementary math functions.


Trigonometric.
sin - Sine.
sinh - Hyperbolic sine.
asin - Inverse sine.
asinh - Inverse hyperbolic sine.
cos - Cosine.
cosh - Hyperbolic cosine.
acos - Inverse cosine.
acosh - Inverse hyperbolic cosine.
tan - Tangent.
tanh - Hyperbolic tangent.
atan - Inverse tangent.
atan2 - Four quadrant inverse tangent.
atanh - Inverse hyperbolic tangent.
sec - Secant.
sech - Hyperbolic secant.
asec - Inverse secant.
asech - Inverse hyperbolic secant.
csc - Cosecant.
csch - Hyperbolic cosecant.
acsc - Inverse cosecant.
acsch - Inverse hyperbolic cosecant.
cot - Cotangent.
coth - Hyperbolic cotangent.
acot - Inverse cotangent.
acoth - Inverse hyperbolic cotangent.

Exponential.
exp - Exponential.
log - Natural logarithm.
log10 - Common (base 10) logarithm.
log2 - Base 2 logarithm and dissect floating point number.
pow2 - Base 2 power and scale floating point number.
sqrt - Square root.
nextpow2 - Next higher power of 2.

Complex.
abs - Absolute value.
angle - Phase angle.
complex - Construct complex data from real and imaginary parts.
conj - Complex conjugate.
imag - Complex imaginary part.
real - Complex real part.
unwrap - Unwrap phase angle.
isreal - True for real array.

Por Engª Sónia Marques 8


Instituto Politécnico de Setúbal - Controlo - 02/03

cplxpair - Sort numbers into complex conjugate pairs.

Rounding and remainder.


fix - Round towards zero.
floor - Round towards minus infinity.
ceil - Round towards plus infinity.
round - Round towards nearest integer.
mod - Modulus (signed remainder after division).
rem - Remainder after division.
sign - Signum.
»

Sempre que se pretenda saber se uma função está já definida no matlab basta escrever
help nome_da_função, como por exemplo:

» help cos
COS Cosine.
COS(X) is the cosine of the elements of X.
»

Complexos

Para representar um número complexo basta multiplicar e a parte imaginária por i ou


j:

» k=1.5+2j
k=
1.5000 + 2.0000i
» » f=4-5i
f=
4.0000 - 5.0000i
»

Todas as operações algébricas são realizadas de acordo com as regras.

Polinómio e raízes
O polinómio é representado pelos seus coeficientes, como por exemplo o polinómio
x 3 + 2 x 2 + 3x + 4 é representado pelo vector [1 2 3 4],

» p=[1 2 3 4]
p=
1 2 3 4
»

Por Engª Sónia Marques 9


Instituto Politécnico de Setúbal - Controlo - 02/03

As raízes do polinómio são dadas pelo comando roots(p):

» a=roots(p)
ans =
-1.6506
-0.1747 + 1.5469i
-0.1747 - 1.5469i
»

Pode-se reconstruir o polinómio original baseado nas raízes pelo comando poly(a):

» poly(a)
ans =
1.0000 2.0000 3.0000 4.0000
»

Diagrama de Blocos
Considere o seguinte diagrama de blocos

1 1
s +s
2
s +1
2

é equivalente a:

1
s + s + s2 + s
4 3

é exequível pelo comando series(num,den) :

» num= 1;
» den=[1 1 0];
» sys1=tf(num,den)
Transfer function:
1
-------
s^2 + s
» sys2=tf(num,[1 0 1])
Transfer function:
1
-------
s^2 + 1
» series(sys1,sys2)
Transfer function:
1
-------------------
s^4 + s^3 + s^2 + s
»

Por Engª Sónia Marques 10


Instituto Politécnico de Setúbal - Controlo - 02/03

ou

» sys1*sys2
Transfer function:
1
-------------------
s^4 + s^3 + s^2 + s
»

Considere o seguinte diagrama de blocos:

1
s +s
2 +

+
1
s +1
2

é equivalente a

1 1
+ 2
s + s s +1
2

2s 2 + s + 1
s4 + s3 + s2 + s

é exequível pelo comando parallel(num,den) :

» parallel(sys1,sys2)
Transfer function:
2 s^2 + s + 1
-------------------
s^4 + s^3 + s^2 + s
»

Considerando o diagrama de blocos,


+ 1
+ s +s
2

1
s +12

utilizando a forma canónica de realimentação o diagrama é equivalente a

s2 +1
s4 + s3 + s2 + s

Por Engª Sónia Marques 11


Instituto Politécnico de Setúbal - Controlo - 02/03

é exequível pelo comando feedback(num,den) :

» feedback(sys1,sys2)
Transfer function:
s^2 + 1
-----------------------
s^4 + s^3 + s^2 + s + 1
»

Modelos
1
Considerando a função de transferência com pólos distintos G ( s ) = pode-se
s ( s + 1)
expandir em fracções parciais pelo comando residue(b,a) :

» num=1
num =
1
» den
den =
1 1 0
» [r,p,k]=residue(num,den)
r=
-1
1
p=
-1
0
k=
[]
»
onde r significa os zeros, p os pólos e k o
1 r1 r 2 1 1
ganho: G( s ) = = + +k = −
s( s + 1) p1 p2 s s +1

♦ Considere a função de transferência com dois pólos múltiplos e um pólo distinto e


1
expande em fracções parciais, G ( s ) = .
( s + 4)( s + 1) 2

Por Engª Sónia Marques 12


Instituto Politécnico de Setúbal - Controlo - 02/03

♦ Considere a função de transferência com pólos complexos


1
conjugados, G ( s) = 2 .
s + 2s + 2

Transformada de Laplace Inversa


Para realizar a transformada de Laplace é necessário recorrer à biblioteca symbolic do
matlab onde se utilizam símbolos em vez das variáveis e como tal tem de se declarar
quais são os símbolos através do comando syms nome_do_símbolo . Nesta biblioteca
também é possível realizar diferenciações, integrações, transformada de Fourier,
solução simbólica de equações, desenvolvimento de funções em série de Taylor, etc.

 1 
A transformada de Laplace inversa da função g ( t ) = L−1 [G( s )] = L−1   =? é
 s( s + 1) 
dado pelo comando ilaplace(função) onde é necessário primeiro declarar s como
variável symbolica e a função tem de ser dada na forma de resíduo,
 1  − 1 1 
g ( t ) = L−1 [G( s )] = L−1   = L−1  +  =?
 s( s + 1)   s s + 1

» syms s
» ilaplace((-1/s)+1/(s+1))
ans =
-1+exp(-t)
»

Por Engª Sónia Marques 13


Instituto Politécnico de Setúbal - Controlo - 02/03

Transformada de Laplace Directa


Vejamos a transformada de Laplace directa da função apresentada no exercício
anterior,

[ ]
G( s ) = L − 1 + e −t = −
1
+
1
s s +1
» syms t
» laplace(-1+exp(-t))
ans =
-1/s+1/(s+1)
»

Considerando a função de transferência:


25
G(S ) =
s + 4s + 25
2

Representa-se o numerador por um polinómio num=[25] e o denominador


den=[ 1 4 25 ]:

» num=[25];
»den=[ 1 4 25];

A função de transferência pode ser visualizada através do comando tf(num,den):

» G=tf(num,den)
Transfer function:
25
--------------
s^2 + 4 s + 25
»

A função de transferência pode também ser visualizada na forma “Zero-Pole-Gain“ :

Z ( s) ( s − z (1))(s − z (2))...( s − z (n))


G(s) = =k
P( s) ( s − p(1))(s − p (2))...(s − p(n))
» sys1=zpk(G)
Zero/pole/gain:
25
---------------
(s^2 + 4s + 25)
ou
» Z=[]
Z=
[]
» P=roots(den)
P=
-2.0000 + 4.5826i
-2.0000 - 4.5826i

Por Engª Sónia Marques 14


Instituto Politécnico de Setúbal - Controlo - 02/03

» K=25
K=
25
» sys1=zpk(Z,P,K)
Zero/pole/gain:
25
---------------
(s^2 + 4s + 25)
»

A conversão entre modelos é realizável pelo comando tf2zp ou zp2tf:

s 2 + 2s + 3 tf2zp s + 1 ± 1.414i
G ( s) = G ( s) =
s 3 + 3s 2 + 3s + 1 ( s + 1) 3

» num=[1 2 3];
» den=[1 3 3 1];
» [z,p,k]=tf2zp(num,den)

z=
-1.0000 + 1.4142i
-1.0000 - 1.4142i

p=
-1.0000
-1.0000 + 0.0000i
-1.0000 - 0.0000i
k=
1

s + 1 ± 1.414i zp2tf s 2 + 2s + 3
G ( s) = G ( s) =
( s + 1) 3 s 3 + 3s 2 + 3s + 1

» [num,den]=zp2tf(z,p,k)

num =
0 1.0000 2.0000 3.0000
den =
1.0000 3.0000 3.0000 1.0000
»

Pode-se visulaizar os zeros e pólos de uma função de transferência através do


comando pzmap(sys):

» num=[0 1 2 3];
» den=[ 1 –12 16 272 –1017 740];
» sys=tf(num,den)
Transfer function:

Por Engª Sónia Marques 15


Instituto Politécnico de Setúbal - Controlo - 02/03

s^2 + 2 s + 3
----------------------------------------------
s^5 - 12 s^4 + 16 s^3 + 272 s^2 - 1017 s + 740» num
» pzmap(sys)
Pole-zero map
1.5

0.5
Imag Axis

-0.5

-1

-1.5
-6 -4 -2 0 2 4 6
Real Axis

Ganho estático
O ganho estático do sistema G (0) = lim G (t ) = lim G ( s) pode ser obtido pelo comando
t →∞ s →0

dcgain(sys) onde o sistema pode ser obtido pelos comandos tf ou zpk,

» dcgain(sys)
ans =
0.0041

Convolução
Considere os seguintes polinómios x 3 + 2 x 2 + 3x + 4 e 7 x 2 + 8 x + 9 representados
pelos vectores a=[ 1 2 3 4] e b=[7 8 9] a convolução é exequível pelo comando
conv(a,b) e corresponde à multiplicação entre polinómios cujo resultado é
7 x 5 + 22 x 4 + 46 x 3 + 70 x 2 + 59 x + 36 ,

» a=[ 1 2 3 4];
» b =[ 7 8 9];
»c=conv(a,b)
c=
7 22 46 70 59 36
»

Deconvolução

Pode-se usar a deconvolução para obter o polinómio original,

»deconv(c,a)
ans =
7 8 9
»

Por Engª Sónia Marques 16

Potrebbero piacerti anche