CAPTULO 1 - Introduo
Motivao - Este curso tem por objetivo a familiarizao com pacote matemtico
MATLAB e SciLab. Este ltimo agora apresentado por ser de domnio pblico, e
portanto, no ter custo associado aquisio. As operaes bsicas so mostradas, bem
como os comandos de programas, grficos e toolboxes. Alguns exemplos e exerccios
so mostrados. Todavia, muito embora o SciLab disponha de pacote equivalente ao
Simulink, o mesmo no explorado aqui, sendo mostrado apenas para Matlab.
1. Instalao
Para a instalao do Matlab, basta seguir as instrues do CD de instalao,
enquanto que o SciLab obtido diretamente na internet. A instalao de ambos bastante
simples.
ou
a = 2 + 6j
Se for de interesse trabalhar com a parte real do nmero a, usa-se o comando:
b = real (a)
Com resposta dada pelo programa b = 2
Da mesma forma, se a parte imaginria for de interesse, usa-se:
c = imag (a)
Com resposta dada por c = 6
Para o nmero complexo dado acima ser representado na forma polar, usa-se o
comando:
d = abs(a)
Com resposta dada por d = 6.3246, que o mesmo que
fase em Matlab ser dado por:
4 36 . O ngulo de
e = angle (a)
Com resposta em radianos dada por e = 1.2490, que o mesmo que atang (6/2).
Esta funo tambm existe em Matlab e SciLab.
Notas
1. Note que para cada nova varivel de interesse, foi associada uma letra qualquer. Aqui
vai a primeira diferena do pacote em relao a FORTRAN, por exemplo. Esta
diferena reside no fato de no se precisar declarar variveis nem obedecer nenhuma
hierarquia para tornar uma varivel real ou inteira.
2. Da nota acima, segue uma importante observao relativa representao de nmeros
complexos: As variveis i e j podem, portanto, assumir qualquer valor. Desta
forma, se i for especificado como 2, por exemplo, ao se escrever
a = 2 + i*6
teremos como resposta a = 14. Logo, ao se representar nmeros complexos, deve-se ter
certeza de que i e j no esto previamente definidos.
3. Quando escrevemos a = 2 + i*6, obtemos na tela
a=
2.0 + 6.0000i
A=
1
1
1
A = zeros(3,1)
Com resposta:
A=
0
0
0
Estes vetores podem se mostrar extremamente teis em determinadas situaes.
Operaes com vetores sero mostradas adiante.
Matrizes
Matrizes podem ser representadas de duas formas, como mostrado a seguir:
A = [1 2 3; 4 5 6; 7 8 9]
Uma vez que o smbolo ; no foi usado, o programa responde:
A=
1
4
7
2
5
8
3
6
9
Ou da forma direta:
A = [1 2 3
456
7 8 9]
A =
1 2 3
4 5 6
7 8 9
Em ambos os casos, tem-se a mesma matriz.
Operaes
Vetor
Assuma os vetores
A=[
B= [
3
4
5]
7
5
2]
Multiplicao
Sabe-se que no possvel a multiplicao de dois vetores, a menos que se
transponha um deles. Entretanto, MATLAB fornece uma opo de se multiplicar, ou
elevar a alguma potncia, cada membro de um vetor ou uma matriz, da seguinte forma:
A multiplicao, elemento por elemento, dada pelo smbolo .*. Desta forma,
pode-se ter:
C = A .* B
Com resposta
C=[
21
20
10]
Que igual ao produto de cada elemento do vetor A por cada elemento do vetor B.
Da mesma forma, para elevar cada componente do vetor A a uma potncia (lembre que
no possvel elevar um vetor ao quadrado, por exemplo), usa-se o smbolo .^. Desta
forma:
D = A .^2
Com resposta
D =[
9
16
25 ]
Uma vez mais, manipulaes com vetores poderiam ser includas, como mostrado a
seguir:
G = (A+B).^2
Com resposta
G=[
100
81
49]
Produtrio e somatrio dos termos
Obtidos atravs dos comandos
h = sum (A)
Com resposta
h = 12
e
k = prod (A)
Com resposta
k = 60
2.3.2 Matrizes
Assuma as matrizes
A=[
1 3
6 3
8 9
5
8
2]
B=[
4 9
2 3
7 0
8
5
1]
Com resposta
D=[
-3 -6 -3
4 0 3
1 9 1]
A multiplicao de matrizes obtida atravs do comando *. Note que neste
caso, tem-se uma operao diferente daquela obtida quando o smbolo .* usado.
Portanto:
E=A*B
fornece
E=[
45 18 28
86 63 71
64 99 111]
enquanto
F = A .*B
fornece
F= [
4 27 40
12 9 40
56 0 2 ]
Norma
Obtida da mesma forma daquela mostrada para vetores
g = norm (A)
Com resposta
g = 15.6614
Rank
Obtido atravs de
h = rank (A)
Com resposta
h=3
Autovalores e autovetores
Em Matlab, dados pelo comando
[ u v] = eig (A)
Com resposta
u=[
-0.3767 -0.7767 -0.3571
-0.6368 0.6064 -0.4574
-0.6727 0.1703 0.8144]
v=[
15.0000
0
0
0 -2.4384
0
0
0 -6.5616]
Das matrizes acima, v representa a matriz de autovalores, enquanto u representa a
matriz de autovetores. A mesma resposta acima obtia em SciLab em resposta ao
seguinte comando:
[ u v] = spec (A)
Valores singulares
Obtidos, desta vez pelo mesmo comando para os dois pacotes como:
l = svd (A)
Com resposta
l=[
15.6614
6.4924
2.3604]
Determinante
Obtido atravs do comando
m = det (A)
Com resposta
m = 240
Que igual ao produtrio da matriz diagonal v, obtida atravs do comando
n = prod (diag(v))
Inversa de matrizes
Assuma o produto p = A*B-1 . A soluo, em MATLAB, pode ser obtida atravs
de
a) P = A*inv(B)
Com soluo
-0.0213
P=[
1.0638 -0.1489
10
Fatorao de matrizes
Obtida atravs do comando
[l, u] = lu (A)
Obtendo como resultado as matrizes triangular inferior L e superior U
Mudando a dimenso de uma matriz
Assuma que se queira mudar a dimenso da matriz a de 3x3 para 1x9. Isto pode
ser feito atravs do comando:
Q = reshape(A,[1 9])
Obtendo:
Q=1
11
Obtendo:
Y=[
1 6 8
3 3 9
5 8 2]
Manipulaes com matrizes
Uma importante caracterstica de MATLAB refere-se a facilidade com que se
pode manusear matrizes. Alguns exemplos sero dados. Um elemento qualquer de uma
matriz a pode ser identificado como A(i, j), onde i e j so os componentes que identificam
a linha e a coluna associadas ao componente.. Para se referir a todas as linhas ou colunas
de uma matriz usa-se o smbolo :. Desta forma, alguns exemplos podem ser mostrados,
tomando novamente as matrizes A e B .
Se for de interesse formar um vetor com a segunda coluna matriz A, usa-se:
r = A (: , 2)
Obtendo:
r=[
3
3
9]
Da mesma forma, se fosse de interesse formar um vetor transposto a partir da
segunda linha da matriz A:
s = A (2, : )
Com o resultado
s=[
6 3
8]
possvel tambm criar um vetor com alguns elementos da matriz. Por exemplo,
pode-se criar um vetor com alguns componentes de linha ou coluna, como por exemplo,
criar um vetor com os dois primeiros componentes de segunda coluna de
t = A (1:2 , 2)
Obtendo:
12
t=[
3
3]
Estas propriedades so muito importantes, uma vez que possibilitam a
manipulao de matrizes nas mais variadas formas. Pode-se tambm criar uma nova
matriz a partir de uma j existente. Assuma que se queira criar uma matriz x a partir da
matriz Entretanto, as linhas e colunas 2 e 3 da matriz x correspondem s linhas e
colunas 3 e 2 da matriz a . Desta forma:
x = A;
Cria uma matriz x idntica a a . Note o smbolo ;, indicando que a matriz x no
deve aparecer na tela.
x([2 3],:)=A([3 2],:)
x=[
1 3
8 9
6 3
5
2
8]
3
3
9]
13
A insero do elemento criou uma nova linha com elementos nulos, exceto o
componente 1 relativo posio (4, 2).
Exemplo de insero atravs de operao:
A (4,2) = A (1,1) + A (3,3)
A=[
1 3 5
6 3 8
8 9 2
0 3 0]
Desta vez um novo elemento, funo de outros elementos da matriz, foi
acrescentado, alterando a dimenso da matriz.
Matrizes Esparsas
MATLAB trabalha com matrizes esparsas. Uma matriz pode ser armazenada na
forma esparsa, na forma (i,j)=comp, onde i e j so as colunas do elemento comp, ou
podem ser transformadas em esparsas a partir de uma matriz previamente fornecida na
forma densa. Cada um dos casos mostrado abaixo:
Montando uma matriz genrica:
A(1,1)=2;
A(2,3)=4;
A(3,2)=8;
Gerando:
A =[
0
0
8
2
0
0
0
4
0]
que uma matriz na forma densa. Portanto, para criar uma matriz esparsa, usa-se o
comando:
A = sparse (A)
e a matriz acima se tornaria
14
A=
(1,1)
(3,2)
(2,3)
2
8
4
2
8
4
Matrizes Aleatrias
Para gerar matrizes aleatrias, basta dar o comando
A = rand(3,3)
que MATLAB automaticamente cria uma matriz de valores aleatrios de dimenso 3x3.
No caso deste exemplo, o programa devolveu:
A =[
0.6539 0.9103 0.0475
0.4160 0.7622 0.7361
0.7012 0.2625 0.3282]
15
Exerccio
Criar duas matrizes aleatrias A(4,3) e B(3,4). Achar C=A*B. Achar rank,
norma, autovalores e determinante de C. Achar sua transposta. Criar um vetor aleatrio
e(4,1) e resolver
Cx=e
CT x = e
Resolver atravs da inversa, fatorao LU e sinais lgicos \ e /.
16
Note entretanto que a figura est sem ttulo, legenda no eixos x e y e anotaes
referentes curva. Estes podem ser diretamente obtidos atravs da edio da figura,
disponvel em ambos os pacotes. Todavia, pode-se fazer as modificaes no console,
conforme mostrado a seguir:
title('grfico exemplo para turma CESE')
xlabel('eixo x')
ylabel('eixo y')
17
Portanto, title o comando que d ttulo curva, enquanto xlabel e ylabel definem
as legendas dos eixos x e y, respectivamente. Para inserir anotao dentro do grfico,
usa-se, somente em Matlab
gtext('grafico x-y')
E o novo grfico mostrado:
Se ao invs da linha cheia obtida no grfico, fosse prefervel outro tipo de linha,
como asteriscos, por exemplo, usaria-se:
plot (x, y, *)
Obtendo:
18
crculo
x
+
asterisco
dois pontos
Ponto com trao
tracejada
19
Note que o grfico gerado em MATLAB foi importado por um editor de textos
(word) diretamente. Para que isto ocorra necessrio que se exporteo grfico obtido
atravs do comando print. Algumas opes so mostradas abaixo:
dps
Grfico em 3 dimenses
Assuma que em adio aos vetores x e y, tenha-se o vetor z:
z=[3 5 7 8 2]T
Para obter um grfico que relacione x, y e z, usa-se , em Matlab, o comando:
plot3 (x, y, z)
O equivalente em SciLab dado por:
Plot3d (x,y,z)
Obtendo:
20
Note que das opes mostradas para o caso de duas dimenses, somente o
comando gtext no foi utilizado, uma vez que este s funciona para sistemas em duas
dimenses.
21
22
23
16.1168
-1.1168
0.0000
det1
det1 =
0
norm1
norm1 =
16.8481
rank1
rank1 =
2
diary off
O arquivo resul fornece
caso1
diary resul
aut
aut =
16.1168
-1.1168
0.0000
det1
det1 =
0
norm1
norm1 =
16.8481
rank1
24
rank1 =
2
diary off
Idntico, portanto, aos comandos dados na tela.
Comando clear
Foi mostrado que o comando who mostra as variveis armazenadas pelo
programa. Pode ser de interesse do operador, por uma razo qualquer, excluir uma
varivel durante o processamento. Para isso usa-se o comando clear, que pode ser
utilizado para limpar quantas variveis se queira. Voltando ao exemplo do arquivo
caso1.m, tem-se as variveis:
Your variables are:
a
aut
det1
norm1
rank1
det1
norm1
rank1
25
ans =
3 3
Exerccios
1Criar um arquivo de extenso m, que contenha uma matriz A de dimenso 4x4.
Achar B=A*A, C=B*A; D=C*A, E=D*A, F=E*A
Achar o menor autovalor de cada matriz e plotar, para cada matriz o maior valor
singular em funo do maior autovalor (mdulo). Salvar o grfico em extenso bmp ou
pcx e importar em um documento do word.
2Criar uma matriz aleatria de dimenso 5x5. Criar uma outra matriz, obtida a
partir da multiplicao de um escalar por uma das linhas da matriz original. Varie este
escalar a partir de 1 at 0. Para cada matriz obtida, anotar o menor autovalor e o
determinante. Plotarestes valores em funo da constante de multiplicao.
26
10
12
14
16
18
20
No exemplo acima, t varia de 1 a 10 com passo 1. Para cada valor de ti, uma
varivel tj criada. Passos diferentes de 1 tambm podem ser considerados, como
mostrado abaixo:
k=1;
for ti=1:2:11
tj(k)=ti;
k=k+1;
end
tj
1 3 5 7 9
11
27
for t1=1:-0.1:0
varia ti de 1 a 0 com passo de -0.1.
If-Then-Else
Comando lgico condicional. Se uma determinada condio for satisfeita,
executa-se algo, caso contrrio, executa-se outra instruo, ou nenhuma. Exemplo:
for ti=1:10
if ti <= 5
tj(ti)=ti;
else
tj(ti)=-ti;
end
end
tj
tj =
1
5 -6
-7
-8
-9 -10
Menor ou igual
Maior ou igual
Menor
Maior
Igual
Diferente
Com os comandos acima, qualquer instruo pode ser dada dentro do comando IF.
Note que o comando if foi dado dentro do comando FOR, o que j estrutura a formao
de um programa.
BREAK
Utilizado para encerrar uma execuo, desde que alguma exigncia seja satisfeita.
Exemplo:
for ti=1:10
if ti == 7
28
tj(ti)=ti;
break
break
end
end
tj =
0
29
max(A)
ans =
3
min(A)
ans =
-9
Portanto, as funes max e min consideram o valor real de uma varivel. Se o
valor mximo ou mnimo for desejado em mdulo, obtem-se:
max(abs(A))
ans =
9
min(abs(A))
ans =
3
Neste caso, a considerao modular, e o valor -9, considerado mnimo no
primeiro caso, torna-se mximo no segundo.
Sort
Assuma o mesmo vetor a considerado acima. Se for do interesse do usurio
ordenar o vetor a de forma crescente, usa-se o comando
b = sort (A)
Obtendo como resposta:
b=
-9
-4
3
Uma vez mais, se os valores em mdulo so desejados, usa-se:
c = sort ( abs (A))
30
Obtendo:
c=
3
4
9
Uma terceira alternativa refere-se possibilidade de escalonamento em ordem
modular decrescente. Para isso, usa-se:
d = sort(-abs ( A))
Obtendo:
d=
-9
-4
-3
Note neste caso que os valores de d so negativos, mas isto irrelevante se o valor
modular for de interesse.
Find
Utilizado para encontrar uma varivel de interesse dentro de um conjunto de
dados. A resposta a posio da varivel dentro do conjunto de dados. Por exemplo
e = find(A == -9)
Com resposta:
e=
2
fprintf
Utilizado para fornecer alguma informao relevante na tela. Esta informao
pode vir associada a um comentrio.
fprintf('Representando %g%% do sistema\n\n',nfgh);
do
31
sistema\n\n'
comentrio,
Input
Utilizada para fornecer um dado a ser utilizado pelo programa. Neste caso, a
informao digitada pelo usurio na tela.
dc=input('fornea o valor desejado = > ')
E o valor digitado na tela ser automaticamente considerado igual a dc.
pause
Utilizado para parar provisoriamente o processamento. Aps digitar enter
novamente, o programa volta a ser executado.
Save
Utilizado para salvar em formato binrio algumas variveis de interesse.
Save arq X
Salva no arquivo arq.mat a varivel X. Para carregar a varivel X, basta digitar
load arq, e automaticamente esta varvel estar na rea de trabalho.
Exerccio
1Criar uma matriz aleatria de dimenso 8x8 em um arquivo de extenso m.
Achar norma, rank, autivalores e determinante desta matriz. Multiplica a matriz de 1 a 10.
Calcule todos tens acima para cada fator e plote tudo em funo do fator.
2-
3-
Cdigo:
x=0;
erro=10;
while (erro>0.001)
dy=2*x+2;
delta=-(1/dy)*erro;
x=x+delta;
erro=x^2+2*x+1;
end
32
33
Captulo 6 - . Simulink
Introduo
Simulink uma opo em MATLAB para simulao de sistemas dinmicos. Estes
sistemas poderiam ser implementados computacionalmente em MATLAB, mas podem
ser resolvidos de forma mais simples atravs desta opo. A seguir, ser mostrado como
montar um diagrama de blocos em um arquivo de extenso m. Dentro do ambiente
MATLAB, digite simulink. A seguinte tela ser obtida:
Sources
Sinks
Discrete
Linear
Cada um dos tens acima constitui diversas opes de bloco. Por exemplo,
clicando duas vezes sobre o smbolo sources, obtem-se:
Signal S ource Library
12:34
Clock
Signal
Generator
Digital Clock
1
Constant
Sine Wave
Step Input
untitled.mat
[T,U]
From File
Random
Number
Repeating
Sequence
Pulse
Generator
From
Workspace Chirp S ignal
Band-Limited
White Noise
34
+
+
Sum
Inner
Product
du/dt
Derivative
1/s
Integrator
1
Gain
1.317
Matrix
Gain
Slider
Gain
1
s+1
Transfer Fcn
(s-1)
s(s+1)
Zero-Pole
x' = Ax+Bu
y = Cx+Du
State-S pace
35
Signal
Generator
Digital Clock
1
Constant
Sine Wave
Step Input
untitled.mat
[T,U]
From File
Random
Number
Repeating
Sequence
Pulse
Generator
From
Workspace Chirp S ignal
Band-Limited
White Noise
Obtendo na janela
Sine Wave
Um sinal integrador deve ser adicionado. Clicando sobre a opo linear, obtm-se
tal comando. Arrastando para a janela do arquivo de extenso m, obtem-se:
36
Sine Wave
1/s
Integrator
A conexo entre ambos feita clicando o boto esquerdo do mouse sobre a seta
do sinal de onda senoidal, arrastando esta em seguida at o integrador, obtendo:
Si ne Wave
1/s
Integrator
Desta forma, um simples diagrama de bloco foi montado. Assuma ento que os
parmetros da sinal de onda senoidal devam ser ajustados. Neste caso, basta clicar duas
vezes o boto esquerdo sobre este bloco no arquivo de extenso m. Um quadro a
respeito deste operador aparecer, onde amplitude, frequncia e ngulo podem ser
ajustados. Tal operao possvel para qualquer operador. Este arquivo, se pronto, deve
ser salvo. Tal comando feito atravs do menu file disponvel na barra do arquivo onde
o diagrama de blocos foi gerado. Note que este arquivo deve ter extenso m.
Assuma que uma vez que este arquivo esteja gravado, deseja sair do programa.
Basta fechar o arquivo atravs do menu file e dar o comando quit no prompt do
MATLAB. Para carregar o arquivo novamente, uma vez estando dentro do MATLAB,
basta digitar simulink, clicar sobre a opo file, open e clicar sobre o nome do
arquivo. Se por exemplo, for de interesse do operador inserir um bloco de somatrio na
sada, procede-se da seguinte forma:
37
Si ne Wave
1/s
Integrator
+
+
Sine Wave Sum
1/s
Integrator
38
Si ne Wave
+
+
Sum
1/s
Integrator
E o novo diagrama est pronto. Deve-se salvar o novo arquivo e proceder com a
simulao.
Simulando um arquivo de extenso m
ma vez criado o arquivo de extenso m, deve-se escolher que mtodo de
integrao utilizar. Simulink oferece as seguintes possibilidades:
linsim
rk23
rk45
gear
adams
euler
39
Signal
Generator
+
+
Sum
s+1
Transfer Fcn
Gain
40
Se uma das variveis for alterada, por exemplo, a funo de transferncia tiver o
numerador igual a 2, obtm-se:
Portanto, qualquer mudana pode ser feita para se testar o efeito nas variveis de
estado.
41
Exerccio
Simular o sistema abaixo, onde
R=2, L=1
42