• Nenhum resultado encontrado

Instituto Politécnico de Setúbal. Engenharia Electrotécnica. Controlo. 1.ª AULA Matlab. Docente. Eng.ª Sónia Marques

N/A
N/A
Protected

Academic year: 2021

Share "Instituto Politécnico de Setúbal. Engenharia Electrotécnica. Controlo. 1.ª AULA Matlab. Docente. Eng.ª Sónia Marques"

Copied!
16
0
0

Texto

(1)

Engenharia Electrotécnica

Controlo

1.ª AULA

Matlab

Docente

(2)

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: a = 4.3 , b = 6 , A = [ 5 2.2 3] ,      = 10 1 5 3 B

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

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.

Criar a matriz C á custa das variáveis a e b já criadas      = b a C 5 4 5 3 » a=4.3 a = 4.3000 » » b=6; » » A=[ 5 2.2 3] A = 5.0000 2.2000 3.0000 »B=[3 5 ; 1 10] B = 3 5 1 10 » » C=[ a 3 5; 4 5 b] C = 4.3000 3.0000 5.0000 4.0000 5.0000 6.0000 »

(3)

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 »

(4)

»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

(5)

SOMA

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

Divisão

Operações com elementos individuais

=

23 22 21 13 12 11

c

C

C

C

C

C

C

[

A

1

A

2

A

3

]

A

=

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

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 ] : »b=6; »f=a+b f = 10.3000 »D=[1 1 ;1 1]; »A+D ans = 4 6 2 11 » B+C ??? Error using ==> +

Matrix dimensions must agree. » » A/a ans = 1.1628 0.5116 0.6977 » »C(2,3)*A(2) ans = 13.2000 » »s=A(2:3) s = 2.2000 3.0000

(6)

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];

Do mesmo modo a partir de uma matriz se pode criar sub-matrizes:

=

5

3

1

7

4

8

7

5

2

5

1

2

9

4

7

5

6

3

2

1

E

=

=

8

7

5

1

43 42 33 32

E

E

E

E

D

» 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 » » 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 »

(7)

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". »

(8)

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.

(9)

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 4

3 2 2 3+ x + x+

x é representado pelo vector [1 2 3 4],

» p=[1 2 3 4] p =

1 2 3 4 »

(10)

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

é equivalente a:

é 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 » s s2 + 1 1 1 2 + s s s s s4 + 3 + 2 + 1

(11)

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

Considere o seguinte diagrama de blocos:

é equivalente a

é 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,

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

s s2 + 1 1 1 2 + s + + s s s s s s + + + + + 2 3 4 2 1 2 1 1 1 2 2 +s + s + s s s2 + 1 1 1 2 + s + + s s s s s + + + + 2 3 4 2 1

(12)

é 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

) 1 ( 1 ) ( + = s s s G pode-se 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 ganho: 1 1 1 2 2 1 1 1 1 + − = + + = + = s s k p r p r ) s ( s ) s ( G

♦ Considere a função de transferência com dois pólos múltiplos e um pólo distinto e expande em fracções parciais, 2

) 1 )( 4 ( 1 ) ( + + = s s s G .

(13)

♦ Considere a função de transferência com pólos complexos conjugados, 2 2 1 ) ( 2 + + = s s s G .

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.

A transformada de Laplace inversa da função

[

]

? ) s ( s L ) s ( G L ) t ( g =      + = = − − 1 1 1 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,

[

]

? s s L ) s ( s L ) s ( G L ) t ( g  = + + − =       + = = − − − 1 1 1 1 1 1 1 1 » syms s » ilaplace((-1/s)+1/(s+1)) ans = -1+exp(-t) »

(14)

Transformada de Laplace Directa

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

[

]

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

Considerando a função de transferência:

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

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“ :

)) ( ))...( 2 ( ))( 1 ( ( )) ( ))...( 2 ( ))( 1 ( ( ) ( ) ( ) ( n p s p s p s n z s z s z s k s P s Z s G − − − − − − = = » 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

(15)

» 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:

1 3 3 3 2 ) ( 3 2 2 + + + + + = s s s s s s G 3 ) 1 ( 414 . 1 1 ) ( + ± + = s i s s G » 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 3 ) 1 ( 414 . 1 1 ) ( + ± + = s i s s G 1 3 3 3 2 ) ( 3 2 2 + + + + + = s s s s s s G » [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: zp2tf tf2zp

(16)

s^2 + 2 s + 3 --- s^5 - 12 s^4 + 16 s^3 + 272 s^2 - 1017 s + 740» num » pzmap(sys) -6 -4 -2 0 2 4 6 -1.5 -1 -0.5 0 0.5 1 1.5 Real Axis Im ag A xi s Pole-zero map

Ganho estático

O ganho estático do sistema (0) lim ( ) lim ( )

0G s t G G s t→∞ = →

= pode ser obtido pelo comando 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 x3+2x2+3x+4 e 7x2 + x8 +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 é

36 59 70 46 22 7x5 + x4 + x3 + x2 + x+ , » 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 »

Referências

Documentos relacionados

a) Aplicação das provas objetivas. b) Divulgação dos gabaritos oficiais do Concurso Público. c) Listas de resultados do Concurso Público. Os recursos interpostos que não se

Diante do exposto, este trabalho visa apresentar uma análise do monitoramento dinâmico de um ponto geodésico materializado sobre a estrutura da passarela que liga os campi

Description of a new species of annual fish of the genus Neofundulus (Cyprinodontiformes: Rivulidae) from the upper río Mamoré basin, Bolivia.. Spectrolebias pilleti, a new

As pontas de contato retas e retificadas em paralelo ajustam o micrômetro mais rápida e precisamente do que as pontas de contato esféricas encontradas em micrômetros disponíveis

Data Stewardship Ambiente de trabalho APIs, SDKs Clientes construídos por customização Application Toolkit Servidor de banco de dados Banco de dados do MDM (MDM físico e

As abraçadeiras tipo TUCHO SIMPLES INOX , foram desenvolvidas para aplicações que necessitam alto torque de aperto e condições severas de temperatura, permitin- do assim,

(3) Arquivos gerados no diretório c:\.. It * contains the actual compiled code for that M-function.. Remove repeated data points.'])) else.

'northeastoutside' Canto superior direito externo dos eixos (padrão para eixos de 3-­‐d) 'northwestoutside' Fora do canto superior esquerdo dos eixos. 'southeastoutside' Canto