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