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.
EX:
3 5 
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
»B=[3 5 ; 1 10]
B=
3 5
1 10
»
3.0000
 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
4.0000 5.0000
»
Por Engª Sónia Marques
5.0000
6.0000
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
3.0000
5.0000
»
4.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
12.9000
21.5000
»
» E*a
ans =
18.4900
12.9000
21.5000
17.2000
21.5000
25.8000
17.2000
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
C12 C13 
C
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
» s=w(2:6)
s=
5 2 3 8 9
»
9
3
Do mesmo modo a partir de uma matriz se pode criar sub-matrizes:
1
5

E = 2

5
7
2 3 6
7 4 9 
1 5 2

7 8 4
1 3 5
E
D =  32
 E 42
E33  1 5
=
E 43  7 8
» 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 1
0 0
0 0
0 0
»
0
0
1
0
0
0
0
0
1
0
Por Engª Sónia Marques
0
0
0
0
1
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
s +s
1
s +1
2
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
2
s +1
+
+
é 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 +1
2
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
Considerando a função de transferência com pólos distintos G ( s ) =
1
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
1
conjugados, G ( s) = 2
.
s + 2s + 2
transferência
com
pólos
complexos
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:
G(S ) =
25
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“ :
G(s) =
Z ( s)
( s − z (1))(s − z (2))...( s − z (n))
=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:
G ( s) =
s 2 + 2s + 3
s 3 + 3s 2 + 3s + 1
tf2zp
G ( s) =
s + 1 ± 1.414i
( 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
G ( s) =
s + 1 ± 1.414i
( s + 1) 3
zp2tf
G ( s) =
s 2 + 2s + 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
1
Imag Axis
0.5
0
-0.5
-1
-1.5
-6
-4
-2
0
Real Axis
2
4
6
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
Download

lab matlab1 - Instituto Politécnico de Setúbal