Professional Documents
Culture Documents
CAPÍTULO 1 - Introdução
Motivação - Este curso tem por objetivo a familiarização com pacote matemático
“MATLAB”. As operações básicas são mostradas, bem como os comandos de programas,
gráficos e “toolboxes”. Alguns exemplos e exercícios são mostrados.
1. Instalação
Siga as instruções da tela, i.e., insira cada disco na medida em que o computador
solicitar. Após a instalação dos discos básicos, o computador oferece a opção de instalar as
“toolboxes”. Para instalá-las, continue seguindo as instruções da tela.
Uma vez instalado o programa, clique sobre o ícone matlab para acessar o programa.
Uma vez acessado o programa, o usuário estará no diretório em que o pacote estiver instalado.
Pode-se mudar de diretório normalmente dentro do programa. O exemplo abaixo mostra a
página de acesso e a forma de se mudar para um diretório qualquer.
» cd ..
» cd flow
No exemplo acima, as duas primeiras linhas são inerentes ao programas, i.e., elas
aparecerão todas as vezes em que o programa for acessado. A terceira linha refere-se à
mudança para o diretório raiz, e a quarta linha indica que o usuário quer trabalhar no diretório
flow. Ao entrar no programa, o usuário visualiza uma barra de ferramentas na parte superior da
tela. As opções fornecidas nesta barra de ferramentas serão tratadas mais adiante. Uma vez
acessado o programa, o usuário está apto a trabalhar com suas operações básicas. A seção a
seguir introduz algumas funções importantes. Note, entretanto, que os conceitos matemáticos
associados a cada comando não serão tratados aqui.
1
CAPÍTULO 2 - Operações Básicas
Números complexos
a = 2 + i*6
ou
a = 2 + j*6
Se for de interesse trabalhar com a parte real do número “a”, usa-se o comando:
b = real (a)
c = imag (a)
d = abs(a)
Com resposta dada por d = 6.3246, que é o mesmo que 4 + 36 . Se ângulo de fase
será dado por:
e = angle (a)
Com resposta em radianos dada por e = 1.2490, que é o mesmo que atang (6/2).
Esta função também existe em Matlab.
Notas
1. Note que para cada nova variável de interesse, foi associada uma letra qualquer. Aqui vai a
primeira diferença do pacote em relação a FORTRAN, por exemplo. Esta diferença reside
no fato de não se precisar declarar variáveis nem obedecer nenhuma hierarquia para tornar
uma variável real ou inteira.
2
2. Da nota acima, segue uma importante observação relativa à representação de números
complexos: As variáveis “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 números complexos, deve-se ter
certeza de que “i” e “j” não estão previamente definidos.
2.0 + 6.0000i
a = 2 + i*6 ;
O símbolo “;” colocado ao fim da expressão informa ao programa que não é necessário
reproduzir tal informação na tela.
Vetores
A = [1
2
3];
» A = [1
2
3]
A =
1
2
3
Note que no caso acima não foi usado o símbolo “;”, e por este motivo o programa
devolveu o vetor “A”. Pode-se criar diretamente um vetor com elementos iguais a um ou zero
da seguinte forma:
3
A = ones(3,1)
Com resposta:
A=
1
1
1
» A = zeros(3,1)
Com resposta:
A=
0
0
0
Matrizes
A = [1 2 3; 4 5 6; 7 8 9]
Uma vez que o símbolo “;” não foi usado, o programa responde:
A=
1 2 3
4 5 6
7 8 9
Ou da forma direta:
» A = [1 2 3
456
7 8 9]
4
A =
1 2 3
4 5 6
7 8 9
Em ambos os casos, tem-se a mesma matriz.
Operações
Vetor
Assuma os vetores
A=[ B= [
3 7
4 5
5] 2]
Norma
w = norm (A)
w = 7.0711
onde w representa a norma euclidiana do vetor A Outros tipos de norma podem ser
identificados. De maior importância, destaca-se a norma infinita, dada por
Pode-se também achar a norma de um vetor que seja combinação de dois outros vetores,
como por exemplo:
f = norm (A+B)
5
Com resposta
f = 15.1658
Note que neste caso, MATLAB computou internamente o vetor A+B e forneceu a resposta
pedida.
Multiplicação
A multiplicação, elemento por elemento, é dada pelo símbolo “.*”. 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 potência (lembre que não é
possível elevar um vetor ao quadrado, por exemplo), usa-se o símbolo “.^”. Desta forma:
D = A .^2
Com resposta
D =[
9
16
25 ]
6
Uma vez mais, manipulações com vetores poderiam ser incluídas, como mostrado a seguir:
G = (A+B).^2
Com resposta
G=[
100
81
49]
Produtório e somatório dos termos
h = sum (A)
Com resposta
h = 12
k = prod (A)
Com resposta
k = 60
2.3.2 Matrizes
Assuma as matrizes
A=[
1 3 5
6 3 8
8 9 2]
B=[
4 9 8
2 3 5
7 0 1]
7
Diversas operações podem então ser mostradas.
C=A+B
Com resposta
C=[
5 12 13
8 6 13
15 9 3 ]
» D = A-B
Com resposta
D=[
-3 -6 -3
4 0 3
1 9 1]
A multiplicação de matrizes é obtida através do comando “*”. Note que neste caso,
tem-se uma operação diferente daquela obtida quando o símbolo “.*” é usado. Portanto:
E=A*B
fornece
E=[
45 18 28
86 63 71
64 99 111]
enquanto
» F = A .*B
8
fornece
F= [
4 27 40
12 9 40
56 0 2 ]
Norma
g = norm (A)
Com resposta
g = 15.6614
Rank
Obtido através de
h = rank (A)
Com resposta
h=3
Autovalores e autovetores
[ u v] = eig (A)
Com resposta
9
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]
Valores singulares
l = svd (A)
Com resposta
l=[
15.6614
6.4924
2.3604]
Determinante
m = det (A)
Com resposta
m = 240
n = prod (diag(v))
10
Número de condição de uma matriz
o = cond (A)
Inversa de matrizes
a) P = A*inv(B)
Com solução
P=[
-0.0213 1.0638 -0.1489
-0.3617 2.0851 0.4681
1.9787 -2.9362 0.8511 ]
P = A/B
Com solução idêntica a mostrada acima. Através desta operação, o resultado é obtido
diretamente, sem necessidade de inversa. Tem-se, para a solução de um sistema do tipo Ax =
b
x = A\B é solução de Ax = b
x = B/A é solução de xA = B
Fatorização de matrizes
[l, u] = lu (A)
11
Obtendo como resultado as matrizes triangular inferior L e superior U
Assuma que se queira mudar a dimensão da matriz a de 3x3 para 1x9. Isto pode ser
feito através do comando:
Q = reshape(A,[1 9])
Obtendo:
Q=1 6 8 3 3 9 5 8 2
Transposta de uma matriz
Y = A’
Obtendo:
Y=[
1 6 8
3 3 9
5 8 2]
r = A (: , 2)
Obtendo:
r=[
3
12
3
9]
s = A (2, : )
Com o resultado
s=[
6 3 8]
É possível também 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:
t=[
3
3]
Estas propriedades são muito importantes, uma vez que possibilitam a manipulação de
matrizes nas mais variadas formas. Pode-se também 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 idêntica a a . Note o símbolo “;”, indicando que a matriz x não deve
aparecer na tela.
x=[
1 3 5
8 9 2
6 3 8]
13
x(:,[2 3])=A(:,[3 2])
x=[
1 5 3
8 8 3
6 2 9]
A(4,2)=1
A=[
1 3 5
6 3 8
8 9 2
0 1 0]
A inserção do elemento criou uma nova linha com elementos nulos, exceto o
componente 1 relativo à posição (4, 2).
A=[
1 3 5
6 3 8
8 9 2
0 3 0]
Desta vez um novo elemento, função de outros elementos da matriz, foi acrescentado,
alterando a dimensão 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 são 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:
14
Montando uma matriz genérica:
A(1,1)=2;
» A(2,3)=4;
» A(3,2)=8;
Gerando:
A =[
2 0 0
0 0 4
0 8 0]
que é uma matriz na forma densa. Portanto, para criar uma matriz esparsa, usa-se o comando:
A = sparse (A)
A=
(1,1) 2
(3,2) 8
(2,3) 4
Onde apenas os elementos diferentes de zero aparecem. Portanto, para gerar a matriz
acima na forma esparsa, usa-se os comandos:
A = sparse(A)
a=
All zero sparse: 0-by-0
» A(1,1)=2;
» A(2,3)=4;
» A(3,2)=8;
»A
Obtendo:
15
A=
(1,1) 2
(3,2) 8
(2,3) 4
Matrizes Aleatórias
A = rand(3,3)
que MATLAB automaticamente cria uma matriz de valores aleatórios de dimensão 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]
Exercício
Criar duas matrizes aleatórias 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 aleatório e(4,1) e
resolver
Cx=e
CT x = e
Resolver através da inversa, fatorização LU e sinais lógicos \ e /.
16
CAPÍTULO 3 - Gráficos em duas e três dimensões
x = [1 2 3 4 5]T
y = [2 4 6 8 10]T
Quer-se representar a relação entre ambos através de um gráfico. Para isto usa-se o
comando:
plot(x,y,’w’)
17
No comando acima x e y são os vetores a serem plotados e w refere-se a branco, que é a cor
a ser usada, uma vez que o fundo da tela á preto. O seguinte gráfico é obtido
Note entretanto que a figura está sem título, legenda no eixos x e y e anotações
referentes à curva. Estes podem ser obtidos da seguinte forma:
Portanto, title é o comando que dá título à curva, enquanto xlabel e ylabel definem as
legendas dos eixos x e y, respectivamente. Para inserir anotação dentro do gráfico, usa-se:
gtext('grafico x-y')
18
Se ao invés da linha cheia obtida no gráfico, fosse preferível outro tipo de linha, como
asteriscos, por exemplo, usaria-se:
Obtendo:
19
Outros tipos e cores de linhas podem ser obtidos. Abaixo são mostrados os possíveis:
Cores
y amarelo
r vermelho
g verde
b azul
w branco
m lilás
c azul claro
Linha
. ponto
o círculo
x x
+ +
* asterisco
: dois pontos
-. Ponto com traço
.. tracejada
20
Note que o gráfico gerado em MATLAB foi importado por um editor de textos (word)
diretamente. Para que isto ocorra é necessário que se salve o gráfico obtido através do
comando print. Algumas opções são mostradas abaixo:
Gráfico em 3 dimensões
z=[3 5 7 8 2]T
plot3 (x, y, z)
Obtendo:
21
Note que das opções mostradas para o caso de duas dimensões, somente o comando
gtext não foi utilizado, uma vez que este só funciona para sistemas em duas dimensões.
22
CAPÍTULO 4 - Comandos de arquivos
Introdução
Uma vez carregada a matriz, qualquer das funções mostradas previamente pode ser
utilizada. Note também que uma vez que o arquivo de extensão “m” pode conter comandos do
programa, o operador pode criar um arquivo “.m” que funcione como um programa . O
exemplo abaixo ilustra o arquivo caso1.m contendo a matriz A e os comandos que pedem seu
determinante, autovalores, norma e rank. Note que o símbolo “;” é colocado ao fim de cada
comando.
A=[
1 2 3
4 5 6
7 8 9] ;
% os comandos estão abaixo
det1=det(A) ;
aut=eig(A) ;
norm1=norm(A) ;
rank1=rank(A) ;
23
produziria uma mensagem de erro. Digitando caso1 na tela, esta permanecerá limpa após a
execução do programa, uma vez que o símbolo “;” foi utilizado.
» caso1
» who
» norm1
que é a variável associada a norma no programa caso1.m. A resposta do programa é dada por
norm1 =
16.8481
Qualquer outra variável pode ser obtida desta forma. Uma outra possibilidade refere-se
ao armazenamento dos resultados obtidos. Para este fim o comando “diary” pode ser utilizado.
Armazenando resultados
caso1
» diary resul
» aut
aut =
16.1168
-1.1168
0.0000
24
» det1
det1 =
0
» norm1
norm1 =
16.8481
» rank1
rank1 =
2
» diary off
caso1
» diary resul
» aut
aut =
16.1168
-1.1168
0.0000
» det1
det1 =
» norm1
norm1 =
16.8481
» rank1
25
rank1 =
2
» diary off
Comando clear
Foi mostrado que o comando “who” mostra as variáveis armazenadas pelo programa.
Pode ser de interesse do operador, por uma razão qualquer, excluir uma variável durante o
processamento. Para isso usa-se o comando “clear”, que pode ser utilizado para limpar
quantas variáveis se queira. Voltando ao exemplo do arquivo caso1.m, tem-se as variáveis:
clear aut
E a variável não está mais armazenada. Se todas as variáveis devem ser excluídas, usa-
se o comando
clear
Comando size
26
Devolve a dimensão do elemento especificado. Por exemplo, size(A) forneceria
ans =
3 3
Exercícios
1- Criar um arquivo de extensão “m”, que contenha uma matriz A de dimensão 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 função do maior autovalor (módulo). Salvar o gráfico em extensão “bmp” ou “pcx”
e importar em um documento do word.
2- Criar uma matriz aleatória de dimensão 5x5. Criar uma outra matriz, obtida a partir da
multiplicação 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 função da constante de multiplicação.
27
CAPÍTULO 5 - Comandos de Programa
Introdução
For
» for ti=1:10
j(ti)=2*ti;
end
» tj
tj =
2 4 6 8 10 12 14 16 18 20
No exemplo acima, tï” varia de 1 a 10 com passo 1. Para cada valor de ti, uma
variável tj é criada. Passos diferentes de 1 também 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
28
No exemplo acima, ti varia de 1 a 11 com passo de 2. A variável tj é criada dentro do
loop com índice k atualizado a cada atualização de ti. O exemplo acima serve para números
negativos também. Por exemplo,
for t1=1:-0.1:0
If-Then-Else
for ti=1:10
if ti <= 5
tj(ti)=ti;
else
tj(ti)=-ti;
end
end
» tj
tj =
1 2 3 4 5 -6 -7 -8 -9 -10
Com os comandos acima, qualquer instrução pode ser dada dentro do comando IF.
Note que o comando if foi dado dentro do comando FOR, o que já estrutura a formação de
um programa.
BREAK
29
Utilizado para encerrar uma execução, desde que alguma exigência seja satisfeita.
Exemplo:
for ti=1:10
if ti == 7
tj(ti)=ti;
break
break
else
end
end
» tj
tj =
1 2 3 4 5 6
While
ti=0;
» while ti <= 6
ti=ti+1;
tj(ti)=ti;
end
» tj
tj =
1 2 3 4 5 6 7
30
As funções acima fornecem os valores máximo, mínimo e absoluto de um vetor. A
função abs pode ser combinada com as funções máximo e mínimo. Como exemplo, assuma o
vetor
A=[
3
-9
-4]
Com as operações
max(A)
ans =
3
» min(A)
ans =
-9
Portanto, as funções max e min consideram o valor real de uma variável. Se o valor
máximo ou mínimo for desejado em módulo, obtem-se:
max(abs(A))
ans =
9
» min(abs(A))
ans =
3
Sort
b = sort (A)
31
Obtendo como resposta:
b=
-9
-4
3
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 são negativos, mas isto é irrelevante se o valor
modular for de interesse.
Find
e = find(A == -9)
Com resposta:
32
e=
2
fprintf
Utilizado para fornecer alguma informação relevante na tela. Esta informação pode vir
associada a um comentário.
Input
Utilizada para fornecer um dado a ser utilizado pelo programa. Neste caso,a
informação é digitada pelo usuário na tela.
pause
Save
Save arq X
Salva no arquivo arq.mat a variável X. Para carregar a variável X, basta digitar load
arq, e automaticamente esta varável estará na área de trabalho.
ode23, ode45
Usados para resolver equações diferenciais no tempo. Para isso, usa-se o comando:
33
onde arquivo é o arquivo de extensão “m” utilizado, T0 e Tfinal são o tempo inicial e final de
simulação e Y0 são as condições iniciais.
Exercício
1- Criar uma matriz aleatória de dimensão 8x8 em um arquivo de extensão “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 função do fator.
Código:
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
34
Capítulo 6 - . Simulink
Introdução
Cada um dos ítens acima constitui diversas opções de bloco. Por exemplo, clicando
duas vezes sobre o símbolo sources, obtem-se:
35
Signal Source Library
12:34
Clock Digital Clock
Repeating
Sequence
1
Constant
Signal
Generator
Pulse
Generator
Sine Wave Step Input
[T,U]
untitled.mat
From
From File Chirp Signal
Workspace
Random Band-Limited
Number White Noise
Linear Library
+ .
+
Sum Inner
Product
1/s du/dt
Integrator Derivative
1 K 1.317
1 (s-1)
s+1 s(s+1)
Transfer Fcn Zero-Pole
x' = Ax+Bu
y = Cx+Du
State-Space
36
Para se criar um arquivo de extensão “m”, clica-se em “file” no menu disponível da caixa
“simulink”, escolhendo a opção “new”. Portanto, passa-se a ter duas janelas, uma com as
opções “simulink”, e outra referente ao arquivo de extensão “m”. Para criar um diagrama de
blocos neste arquivo, pressiona-se o botão esquerdo do “mouse” sobre o elemento de
interesse e arrasta-se para a janela do arquivo “m”. O exemplo abaixo mostra quando a caixa
geradora de onda senoidal é arrastada para a janela do arquivo de extensão “m”. Esta
operação copia esta caixa na janela, i.e., a operação original continua disponível na janela
“simulink”.
12:34
Clock Digital Clock
Repeating
Sequence
1
Constant
Signal
Generator
Pulse
Generator
Sine Wave Step Input
[T,U]
untitled.mat
From
From File Chirp Signal
Workspace
Random Band-Limited
Number White Noise
Obtendo na janela
Sine Wave
37
Um sinal integrador deve ser adicionado. Clicando sobre a opção linear, obtêm-se tal
comando. Arrastando para a janela do arquivo de extensão “m”, obtem-se:
1/s
Sine Wave Integrator
A conexão entre ambos é feita clicando o botão esquerdo do mouse sobre a seta do
sinal de onda senoidal, arrastando esta em seguida até o integrador, obtendo:
1/s
Sine Wave Integrator
Desta forma, um simples diagrama de bloco foi montado. Assuma então que os
parâmetros da sinal de onda senoidal devam ser ajustados. Neste caso, basta clicar duas vezes
o botão esquerdo sobre este bloco no arquivo de extensão “m”. Um quadro a respeito deste
operador aparecerá, onde amplitude, frequência e ângulo podem ser ajustados. Tal operação é
possível para qualquer operador. Este arquivo, se pronto, deve ser salvo. Tal comando é feito
através do menu “file” disponível na barra do arquivo onde o diagrama de blocos foi gerado.
Note que este arquivo deve ter extensão “m”.
Assuma que uma vez que este arquivo esteja gravado, deseja sair do programa. Basta
fechar o arquivo através do menu “file” e dar o comando “quit” no prompt do MATLAB. Para
38
carregar o arquivo novamente, uma vez estando dentro do MATLAB, basta digitar “simulink”,
clicar sobre a opção “file”, “open” e clicar sobre o nome do arquivo. Se por exemplo, for de
interesse do operador inserir um bloco de somatório na saída, procede-se da seguinte forma:
Apaga-se a linha que liga os dois primeiros blocos:
1/s
Sine Wave Integrator
+
+ 1/s
Sine Wave Sum
Integrator
39
+
+ 1/s
Sine Wave Sum Integrator
E o novo diagrama está pronto. Deve-se salvar o novo arquivo e proceder com a
simulação.
Üma vez criado o arquivo de extensão “m”, deve-se escolher que método de
integração utilizar. Simulink oferece as seguintes possibilidades:
Comando de Execução
Asumindo que o linsim seja escolhido (todos os outros têm procedimento idêntico),
digita-se:
[a b]=linsim(“file”,tmax,xo,options)
40
onde
+ 2
1
+
s + 1
Signal Sum Gain Transfer Fcn
Generator
options=[0.001,0.00001,10];
[tl,xl]=linsim('sim1',10,1,options);
plot(tl,xl,’w’)
41
Se uma das variáveis for alterada, por exemplo, a função de transferência tiver o
numerador igual a 2, obtêm-se:
42
Portanto, qualquer mudança pode ser feita para se testar o efeito nas variáveis de
estado.
Exercício
43