Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Investigador do UNINOVA
UNINOVA
MAIO DE 2002
1. INTRODUÇÃO................................................................................................... 5
2
3.4. Exponenciação ......................................................................................................................................... 28
4.3. Potenciação............................................................................................................................................... 33
6. GRÁFICOS ...................................................................................................... 38
7. PROGRAMAÇÃO............................................................................................ 52
3
7.1.2. Ciclo “while” ..................................................................................................................................... 52
9. APÊNDICE ...................................................................................................... 65
4
IV. INTRODUÇÃO
5
(MacIntosh) e LINUX. A abordagem que propomos neste trabalho, permite um fácil acesso às
principais características do MATLAB. Deve procurar resolver, cuidadosamente e com atenção, todos
os exercícios que propomos, de forma a familiarizar-se com os procedimentos do MATLAB. Faça
HELP sempre que necessitar. Para interromper use ‘Control-C’. Pode usar os cursores do teclado para
repetir, eventualmente com alterações, instruções dadas anteriormente. Deve usar o comando ‘Clear’
sempre que tenha problemas de memória.
Tendo fixado o local de referência, estamos em condições de começar a trabalhar. Suponhamos que fazemos as
seguintes entradas:
» a=2;
» 8-3/5+7;
Os exemplos de declarações mostrados acima criaram variáveis que são armazenadas na Área de
Trabalho do MATLAB. Fazendo
>> who
obtêm-se uma lista das variáveis armazenadas num dado instante, na Área de Trabalho:
a ans b c
o que mostra as quatro variáveis geradas em nossos exemplos, incluindo ans (usado quando não existe
uma declaração de variável). Uma informação mais pormenorizada mostrando a dimensão de cada
uma das variáveis correntes é obtido com whos que, para nosso exemplo, produz:
6
Name Size Bytes Class
Cada elemento de uma matriz real requer 8 bytes de memória, assim a nossa matriz A, de dimensão
3x3 usa 72 bytes e todas variáveis utilizadas um total de 120 bytes.
Comandos que tenham sido utilizados anteriormente podem ser obtidos novamente usando as teclas ↑
e ↓. Por exemplo, pressionando a tecla ↑ uma vez, obtém-se o último comando digitado. Pressionando
repetidamente a mesma tecla obtêm-se os comandos digitados anteriormente, um de cada vez.
Analogamente, pressionando-se a tecla ↓, repetem-se os comando para a frente. Mais ainda, digitando
no “prompt” os primeiros caracteres de um comando dado anteriormente e então pressionando-se a
tecla ↑, obtém-se o comando mais recente com aqueles caracteres iniciais. Em qualquer momento, as
teclas ←, → podem ser usadas para se mover o cursor dentro de um comando. Desta forma um
comando pode ser corrigido, usando as teclas Delete e Backspace.
O MATLAB possui um comando de ajuda (help) que fornece informações sobre a maior parte dos tópicos. Com
>> help
obtêm-se uma lista desses tópicos disponíveis. Esta ajuda é pouco útil, devido ao seu caracter geral.
Para obter informações sobre um tópico específico, digite help “nome do tópico”.
each column. For N-D arrays, MEAN(X) is the mean value of the
7
elements along the first non-singleton dimension of X.
Example: If X = [0 1 2
3 4 5]
4]
A última linha é muito importante, porque nos dá informação sobre outros tópicos relacionados com o
actual.
for i=10,20
x(i)=i;
end
que efectua a listagem dos inteiros de 10 a 20. Para correr o script, basta fazer na área de trabalho:
» inteiros
8
function inteiros(m,n)
for i=m,n
x(i)=i;
end
» inteiros(10,30)
Convém salientar que os ficheiros a usar devem estar na nossa partição de disco, a menos, que
definamos um caminho para acesso a eles.
As categorias gerais de funções matemáticas disponíveis no MATLAB incluem:
· Matemática elementar;
· Funções especiais;
· Matrizes elementares;
· Matrizes especiais;
· Decomposição e factorização de matrizes;
· Análise de dados;
· Polinómios;
· Solução de equações diferenciais;
· Equações não-lineares e optimização;
· Integração numérica;
· Processamento de sinais.
>> ! Notepad
Uma nova janela é aberta, o Notepad é carregado, podendo ser utilizado da maneira usual.
9
Pode-se usar, também, qualquer comando implícito do DOS, por exemplo: copy, format, ren, mkdjr,
rmdir, ...
10
11
V. CARACTERÍSTICAS E OPERAÇÕES BÁSICAS
O MATLAB é uma linguagem de expressões. As expressões usadas são interpretadas e avaliadas pelo sistema.
As declarações no MATLAB são frequentemente da forma
ou, simplesmente
>> expressão
As expressões são constituídas por operadores e outros caracteres especiais, funções e nomes das variáveis. A
avaliação das expressões produz matrizes, que são então mostradas no ecrã e atribuídas às variáveis para uso
futuro. Se o nome da variável e o sinal de igual "=", são omitidos, uma variável com o nome ans, que representa
a palavra answer (resposta), é automaticamente criada. Por exemplo, digite a expressão
>> 10*33/5
que produz
ans =
66
Se o último caractere da declaração for um ponto e vírgula ";", os resultados no ecrã são suprimidos, mas a tarefa
é realizada. Esse procedimento deve ser sempre usado em situações onde o resultado é uma matriz de grandes
dimensões que não temos interesse em visualizar. Estas saídas de vectores de grandes dimensões contribuem
para retardar a execução de um dado comando ou programa, pelo que devem ser suprimidas, usando “;”.
Se uma expressão for tão grande que não caiba numa linha, pode-se continuá-la na linha seguinte usando um
espaço em branco e reticências,"...", no final das linhas incompletas. Por exemplo, no caso seguinte,
o MATLAB calcula o valor da soma, que atribui à variável s, mas não ecoa esse valor. Note que os espaços em
branco entre os sinais "=", "+" e "-" são opcionais, mas o espaço em branco entre "1/7" e "..." é obrigatório.
As variáveis e funções podem ser formadas por um conjunto de letras e/ou algarismos, até um máximo de 19
caracteres (acima de 19 serão ignorados). O MATLAB faz distinção entre letras maiúsculas e minúsculas, assim
a e A não são as mesmas variáveis. Todas as funções devem ser escritas em letras minúsculas: inv(A) calcula a
inversa de A, mas INV(A) é uma função indefinida.
12
Alguns nomes são usados para variáveis predefinidas. Estas são:
ans - variável usada para os resultados.
pi - número π.
eps - menor número tal que, quando adicionado a 1, cria um número maior que 1 no computador.
flops - armazena o número de operações em ponto flutuante realizadas.
inf - significa infinito.
NaN ou nan - significa “não é um número”, por exemplo, 0/0.
i e j - unidade imaginária -1 .
nargin - número de argumentos de entrada de uma função.
nargout - número de argumentos de saída de uma função.
realmin - menor número que o computador pode armazenar.
realmax - maior número que o computador pode armazenar.
As variáveis podem ser redefinidas a qualquer momento, bastando para isso atribuir-lhes um novo valor; no
entanto, tal não é aconselhável.
Os dois pontos ":", é um caractere importante no MATLAB. Serve para permitir a geração de sucessões
aritméticas do tipo,
>> s=a:i:b
onde a é o valor inicial e b o final; i é o incremento, que pode ser real e negativo. Exs.:
>> x=-5:2:15
x=
-5 -3 -1 1 3 5 7 9 11 13 15
>> y=10:-3:-9
y=
10 7 4 1 -2 -5 -8
>> -pi:pi/8:pi
ans =
Columns 1 through 7
13
Columns 8 through 14
Columns 15 through 17
>> z= -5:4
z=
-5 -4 -3 -2 -1 0 1 2 3 4
>> k=linspace(0,2,7)
k=
Os vectores são armazenados de forma a que os seus elementos ficam indexados aos naturais positivos. No
exemplo acima, k(2)=0.6667. Notar que não são permitidos índices negativos ou nulos.
>> length(k)
ans =
Há outra função que pode ser usada em vez de length; é a função size:
>> size(k)
ans =
1 7
14
- criadas em ficheiros ".m",
- carregadas a partir de um ficheiro de dados externo.
O método mais fácil de definir pequenas matrizes no MATLAB é usando uma listagem explícita. Os
elementos de cada linha da matriz são separados por espaços em branco ou vírgulas e as colunas
separadas por ponto e vírgula, colocando-se parêntesis rectos em volta do conjunto de elementos da
matriz. Por exemplo, escrevendo a expressão
A=
1 2 3
4 5 6
7 8 9
A matriz A é guardada na memória RAM do computador, ficando armazenada para uso posterior.
As matrizes podem, também, ser introduzidas linha a linha, método aconselhado para matrizes de grande
dimensão. Por exemplo:
>>A = [1 2 3
>> 456
>> 7 8 9]
Outra maneira para introduzir matrizes no MATLAB é através de um ficheiro em formato ‘texto’ com extensão
".m". Por exemplo, se o ficheiro "gera.m" contiver estas três linhas de texto,
A= [1 2 3
456
7 8 9]
então a expressão "gera" lê o ficheiro e define a matriz A.
>>gera
O comando load pode ler matrizes geradas pelo MATLAB e armazenadas em ficheiros binários ou matrizes
geradas por outros programas armazenadas em ficheiros ASCII.
15
V.4 Elementos das Matrizes
Os elementos das matrizes podem ser definidos por qualquer expressão do MATLAB, por exemplo,
A=
0 + 1.0000i -8.0000
3.2189 0.8660
Um elemento individual da matriz pode ser referenciado com índice entre parênteses. Continuando o exemplo,
>> a=A(1,2)
a=
-8
Matrizes de grandes dimensões podem ser construídas a partir de matrizes de pequena dimensão. Por exemplo,
pode-se adicionar outra linha na matriz A usando
>>v=[1 -1];
>> A=[A;v]
A=
0 + 1.0000i -8.0000
3.2189 0.8660
1.0000 -1.0000
ou,
A=
16
1.0000 -1.0000 0
Matrizes de pequena dimensão podem ser extraídas de matrizes de grande dimensão, usando ":". Por exemplo,
>> B=A(1:2,:)
B=
Um elemento individual da matriz pode ser indicado incluindo os seus índices entre parênteses. Por exemplo,
para a matriz A,
A=
1 2 3
4 5 6
7 8 9
a declaração
produz o resultado
A=
1 2 3
4 5 6
7 8 10
Um índice pode ser um vector. Se X e V são vectores, então X(V) é [X(V(1)), X(V(2)), .... X(V(n))]. Para as
matrizes, os índices vectores permitem o acesso a submatrizes. Por exemplo, suponha que A é uma matriz
10x10.
A=
92 99 11 18 15 67 74 51 58 40
98 80 17 14 16 73 55 57 64 41
14 81 88 20 22 54 56 63 70 47
85 87 19 21 13 60 62 69 71 28
86 93 25 12 19 61 68 75 52 34
17
17 24 76 83 90 42 49 26 33 65
23 15 82 89 91 48 30 32 39 66
79 16 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59
então
>> A(1:5,3)
ans =
11
17
88
19
25
especifica uma submatriz 5x1, ou vector coluna, que consiste dos cinco primeiros elementos da terceira coluna
da matriz A. Analogamente,
>> A(1:5,7:10)
ans =
74 51 58 40
55 57 64 41
56 63 70 47
62 69 71 28
68 75 52 34
é uma submatriz 5x4, que consiste das primeiras cinco linhas e as últimas quatro colunas.
Utilizando os dois pontos no lugar de um índice, denotam-se todos elementos da linha ou coluna. Por exemplo,
>> A(1:2:5,:)
ans =
18
92 99 11 18 15 67 74 51 58 40
14 81 88 2 22 54 56 63 70 47
86 93 25 12 19 61 68 75 52 34
é uma submatriz 3x10 que consiste na primeira, terceira e quinta linhas e todas as colunas da matriz A.
Podem ser obtidos muitos efeitos sofisticados usando submatrizes em ambos os lados das declarações. Por
exemplo, sendo B uma matriz 10x10 unitária,
B=
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
a declaração,
produz
1 1 1 1 1 86 93 25 12 19
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 85 87 19 21 13
1 1 1 1 1 1 1 1 1 1
19
1 1 1 1 1 14 81 88 20 22
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 98 80 17 14 16
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
O interesse prático motivou a inclusão de algumas funções úteis. Por exemplo a função eye gera a
matriz identidade,
>> I=eye(5)
I=
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
>> I=eye(5,3)
I=
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
20
V.5 Números e Expressões Aritméticas
A notação decimal convencional, com ponto decimal opcional, é usada para números. A notação científica é
usada frequentemente, sobretudo, para representar números muito grandes ou muito pequenos.
3 -99 0.00001
As expressões podem ser construídas usando os operadores aritméticos usuais e as regras de precedência:
1 ^
potenciação
2 /
divisão direita
2 \
divisão esquerda
3 *
multiplicação
4 +
adição
4 -
subtracção
Deve notar-se que existem dois símbolos para divisão: as expressões 1/4 e 4\1 possuem o mesmo valor
numérico, isto é, 0,25. Os parênteses são usados na forma habitual para alterar a precedência usual dos
operadores aritméticos.
Números complexos são permitidos em todas operações e funções no MATLAB. Os números complexos são
definidos usando-se as funções especiais i e j. Por exemplo,
>> z= 3 + 4*i
ou
>> z= 3 +4*j
Outro exemplo é
21
As seguintes declarações mostram dois caminhos convenientes para se definir matrizes complexas no
MATLAB:
que produzem o mesmo resultado. Se se trabalhar com números complexos, é conveniente não usar i ou j para
designar outra variável que não seja a unidade imaginária. Porém, se i ou j forem usados como variáveis, de
forma que tenham os seus valores originais modificados, uma nova unidade complexa deverá ser criada e
utilizada da maneira usual,
>> ii = sqrt(-1);
>> z = 3 + 4*ii
O formato numérico exibido no ecrã pode ser modificado com o comando format, que afecta somente o modo
como as matrizes são mostradas e não a forma como elas são calculadas ou guardadas (o MATLAB efetua todas
as operações em dupla precisão).
Se todos os elementos das matrizes forem inteiros, a matriz é mostrada num formato sem qualquer separador
decimal. Por exemplo,
>> x = [-1 0 1]
resulta sempre em
x=
-1 0 1
Se pelo menos um dos elementos da matriz não é inteiro, existem várias possibilidades de formatar a saída. O
formato utilizado por omissão é chamado de formato short, que mostra 5 dígitos significativos ou usa notação
científica.
x=
22
Por exemplo, a expressão
format + ++
Com os formatos short e long, se o maior elemento da matriz é maior que 1000 ou menor que 0.001, um factor
de escala comum é aplicado para que a matriz completa seja mostrada. Por exemplo,
x=
1.0e+003 *
O formato + é uma maneira compacta de mostrar matrizes de grandes dimensões. Os símbolos "+", "-
", e "espaço em branco" são mostrados, respectivamente para elementos positivos, elementos
negativos e zeros.
23
24
VI. OPERAÇÕES COM MATRIZES
· Adição
· Subtração
· Multiplicação
· Divisão direita
· Divisão esquerda
· Exponenciação
· Transposição
>> B
B=
>> C=A+B
C=
25
3.1120 1.9729 0.7628
0.7484 0.2516 3.6607
>> D=A-B
D=
A adição e subtracção também são definidas se um dos operadores for um escalar, ou seja, uma matriz l x l.
Neste caso, o escalar é adicionado ou subtraído de todos os elementos do outro operador.
>> z=y-3
z=
7 4 1 -2 -5 -8 -11
VI.2 Multiplicação
A multiplicação de matrizes é indicada por "*". A multiplicação x*y, é definida somente se o número de linhas
de x for igual ao número de colunas de y. Por exemplo, o produto interno de dois vectores é uma multiplicação
de uma matriz 1xN por outra Nx1,
>> y*z’
é aceitável, e resulta em
ans =
238
É evidente que o resultado da multiplicação y'*z será o mesmo, visto que se trata de vectores reais. Se fossem
vectores complexos resultaria no conjugado. Existem dois outros produtos que são transpostos um do outro,
>> z’*y
ans =
40 28 16 4 -8 -20 -32
10 7 4 1 -2 -5 -8
26
-20 -14 -8 -2 4 10 16
>> y’*z
ans =
7 4 1 -2 -5 -8 -11
-14 -8 -2 4 10 16 22
-35 -20 -5 10 25 40 55
-56 -32 -8 16 40 64 88
Às matrizes resultantes do produto de 2 vectores dá-se o nome de díadas. O produto de uma matriz por um
vector é um caso especial do produto entre matrizes. Por exemplo, se A for a matriz definida acima,
>> b = A’*y
que resulta em
b=
2380
1666
952
238
-476
-1190
-1904
>> b=y*A’
resulta em
b=
27
2380 1666 952 238 -476 -1190 -1904
VI.3 Divisão
Existem dois símbolos para divisão de matrizes no MATLAB "\" e "/". Se A for uma matriz quadrada não
singular, então A\B e B/A correspondem respectivamente à multiplicação à esquerda e à direita da matriz B pela
inversa da matriz A, ou inv(A)*B e B*inv(A). Em geral,
Por exemplo, sendo o vector b definido como A*x, a declaração, x=A\b é a solução de A*x = b.
VI.4 Exponenciação
A expressão A^p eleva A à p-ésima potência e é definida se A for uma matriz quadrada e p um escalar. Se p é
um inteiro maior do que um, a potenciação é calculada efectuando múltiplas multiplicações. Por exemplo,
>> A =
1 0 2
-1 2 1
0 1 -1
>> A^2
ans =
1 2 0
-3 5 -1
-1 1 2
VI.5 Transposição
O caractere plica, " ' " , indica a transposta de uma matriz, mas, apenas, se ela for real.
A declaração
>> A = [1 2 3; 4 5 6; 7 8 9]
>> B = A'
que resulta em
28
A= 1 2 3
4 5 6
7 8 9
B= 1 4 7
2 5 8
3 6 0
e
produz
x=
-1
2
Se Z for uma matriz complexa, Z’ será a matriz transposta hermiteana (trans-conjugada). Para obter
simplesmente a transposta de Z deve-se usar Z.’, como mostra o exemplo
>> Z = [1 2; 3 4] + [5 6; 7 8]*i
>> Z1 = Z’
>> Z2 = Z.’
que resulta em
Z=
Z1 =
29
30
31
VII. OPERAÇÕES ELEMENTO A ELEMENTO
O termo “operações entre conjuntos” é usado quando as operações aritméticas são realizadas entre os elementos
que ocupam as mesmas posições em cada matriz (elemento por elemento). As operações com conjuntos são
feitas como as operações usuais, utilizando-se os mesmos caracteres ("*", "/", "\", "^" e " ‘ ") precedidos por um
ponto "." (".*", "./", ".\", ".^" e " .‘ ").
Para a adição e a subtracção, a operação com conjuntos e as operações com matrizes são as mesmas. Deste modo
os caracteres "+" e "-" podem ser utilizados tanto para operações com matrizes como para operações com
conjuntos.
então,
>> z = x .* y
resulta em
z=
4 10 18
As expressões A./B e A.\B formam um conjunto cujos elementos são simplesmente os quocientes dos elementos
individuais de A e B. Assim,
>> z = x .\ y
resulta em
z=
32
VII.3 Potenciação
A potenciação de conjuntos é indicada por ".^". A seguir são mostrados alguns exemplos usando os vectores x e
y definidos anteriormente. A expressão
>> z = x .^ y
resulta em
z=
l 32 729
A potenciação pode usar um escalar.
>> z = x.^2
z=
l 4 9
Ou a base pode ser um escalar.
>> z = 2.^[x y]
z=
2 4 8 16 32 64
Estes são os seis operadores usados para comparação de duas matrizes com as mesmas dimensões:
<
menor
<=
menor ou igual
>
maior
>=
maior ou igual
==
igual
~=
diferente
A comparação é feita entre os pares de elementos correspondentes e o resultado é uma matriz composta pelos
33
números um e zero, representando VERDADEIRO e FALSO, respectivamente. Por exemplo,
>> 2 + 2 ~= 4
ans =
Pode-se usar, também os operadores lógicos & (e) e | (ou). Por exemplo,
>> 1= = 1 & 4 = = 3
ans =
>> 1 = = 1 | 4 = = 3
ans =
1
Como veremos adiante, estas operações são extremamente importantes quando se trabalha com ciclos.
34
35
VIII. FICHEIROS ".m"
Os comandos do MATLAB são normalmente digitados na área de trabalho, em que uma única linha
de comando é escrita e processada imediatamente. Como vimos atrás, o MATLAB é também capaz de
executar sequências de comandos armazenadas em ficheiros. Já anteriormente dissemos que os
ficheiros “.m” se chamavam “scripts” e funções.
Para editar um ficheiro texto do MATLAB seleccione New M-File para criar um novo ficheiro ou
Open M-File para editar um ficheiro já existente, a partir do menu File. Os ficheiros podem, também,
ser editados fora do MATLAB, utilizando qualquer editor de texto.
Existem alguns comandos e declarações especiais para serem usados nos ficheiros; por exemplo
O caracter “%” é usado para inserir um comentário no texto, o comando clear apaga todos os dados da
memória. O comando input é usado quando se deseja entrar com um dado a partir da área de trabalho.
O comando pause provoca uma pausa na execução do programa até que qualquer tecla seja digitada;
clc limpa a área de trabalho, figure(1) mostra a Janela Gráfica número 1 e close fecha todas as Janelas
Gráficas.
O MATLAB tem uma série de funções científicas pré-definidas. A maioria pode ser usada da mesma
forma que seria escrita matematicamente. Em apêndice apresentam-se algumas dessas funções.
Todas as Toolboxes do MATLAB são constituídas por ficheiros “.m” inalteráveis pelo utilizador. No entanto, o
utilizador pode acrescentar programas seus em ficheiros “.m” a qualquer Toolbox.
36
37
IX. GRÁFICOS
A construção de gráficos no MATLAB é mais uma das facilidades do sistema. Através de comandos simples
podem obter-se gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada. Existe no
MATLAB uma vasta biblioteca de comandos gráficos.
plot
gráfico linear.
loglog
gráfico em escala loglog.
semilogx
gráfico em semilog.
semilogy
gráfico em semilog.
fill
desenhar polígono 2D.
polar
gráfico em coordenadas polares.
bar
gráfico de barras.
stem
sequência discreta.
stairs
gráfico em escada
hist
traçar histograma.
fplot
traçar função.
Se y for um vector, plot(y) produz um gráfico linear dos elementos de Y versus o índice dos elementos de Y. Por
exemplo,
38
1.4
1.2
0.8
0.6
0.4
0.2
0
0 2 4 6 8 10 12 14
f=
Columns 1 through 7
Columns 8 through 13
>> plot(f)
que produz
2.5
1.5
0.5
0
0 2 4 6 8 10 12 14
39
ou
>> plot(y,f)
que resulta em
2.5
1.5
0.5
0
0 2 4 6 8 10 12 14
O MATLAB pode também traçar múltiplas linhas e apenas um gráfico. Existem dois métodos, o primeiro é
usando apenas dois argumentos, como em plot(X,Y), onde X e/ou Y são matrizes. Então:
• Se X e Y são matrizes com mesma dimensão, plot(X,Y) traça sucessivamente as colunas de X versus as
colunas de Y.
• Se Y é uma matriz, plot(Y) traça sucessivamente as colunas de Y versus o índice de cada elemento da
linha de Y.
O segunda, e mais fácil, método de traçar gráficos com múltiplas linhas é usando o comando plot com múltiplos
argumentos. Por exemplo,
40
fig.4 – representação de sinusóides em função de t.
A janela gráfica pode ser divida em várias sub-janelas. Em cada uma destas podem-se traçar vários gráficos. Por
exemplo:
1 2
0.5 1
0 0
-0.5 -1
-1 -2
0 50 100 0 50 100
60 4
2
40
0
20
-2
0 -4
0 200 400 600 0 200 400 600
41
que foi obtido com a seguinte sequência de comandos,
» t=1:100;
» x=sin(2*pi/27*t);
» y=cos(2*pi/18*t);
» z=x.^2;
» w=x+y;
» W=fft(w,1024);
» subplot(221);plot(t,x,t,y)
» subplot(222);plot(t,z,t,w)
» subplot(223);plot(abs(W(1: 512)))
» subplot(224);plot(angle(W(1:512)))
subplot(IJK)
onde I é o número de linhas e J o número de colunas da partição. K é o número de ordem do gráfico e que se
obtém numerando os gráficos de cima para baixo e da esquerda para a direita, começando em 1.
Os tipos de linhas, símbolos e cores usados para traçar gráficos podem ser controlados se os padrões não forem
satisfatórios. Por exemplo,
>> X = 0:0.05:1;
>> subplot(l2l), plot(X,X.^2,’k*’)
>> subplot(l22), plot(X,X.^2,’k --‘)
42
fig.6 – representação de X usando dois tipos diferentes de linha
x xx x x x x x x g verde
b azul escuro
w branco
k preto
43
IX.4 Números Complexos
Quando os argumentos do comando plot são complexos, a parte imaginária é ignorada, excepto quando é dado
simplesmente um argumento complexo. Para este caso especial é traçada a parte real versus a parte imaginária.
Por exemplo, quando Z é um vector complexo, plot(Z), é equivalente a plot(real(Z),imag(Z)). No entanto,
normalmente necessitamos de ambas as partes, pelo que devemos traçá-las. Para isso, ou fazemos dois gráficos
separados
que resulta em
60
40
20
-20
-40
0 200 400 600 800 1000 1200
50
-50
0 200 400 600 800 1000 1200
ou teremos que usar uma variável independente que pode ser, por exemplo, a sequência dos índices de memória:
>> n=1:length(W);
>> plot(n,real(W),n,imag(W),'r')
60
40
20
-20
-40
-60
0 200 400 600 800 1000 1200
fig.8 – representação das partes real e imaginária de uma função complexa na mesma janela
44
Porém, em muitas situações práticas, necessitamos do módulo e argumento das variáveis complexas, pelo que
devemos representá-los separadamente como fizemos com as partes real e imaginária. Para isso, usam-se as
funções abs e angle.
O uso de loglog, semilogx, semilogy e polar é idêntico ao uso de plot. Estes comandos são usados para traçar
gráficos em diferentes coordenadas e escalas:
O comando bar(X) mostra um gráfico de barras dos elementos do vector X e não aceita argumentos múltiplos.
Na figura seguinte, apresenta-se em escala logarítmica o gráfico 3 da figura apresentada na secção 6.2.
60
50
40
30
20
10
0
0 1 2 3
10 10 10 10
Na figura seguinte, mostra-se a representação das raízes do polinómio p(x) = 2x5 + 2x4 - 4x3 +3x2 – x + 1, obtido
com a função polar.
45
fig.10 – representação num diagrama polar
Para traçar gráficos tridimensionais e contornos é necessário avaliar a função numa grelha rectangular. Isto pode
fazer-se com o comando meshgrid. Em primeiro lugar, devem criar-se 2 vectores descrevendo as grelhas
segundo os eixos xx e yy
>> x=-pi:pi/25:pi;
>> y=-2*pi:pi/40:2*pi;
Seguidamente, cria-se uma grelha do tipo 2-D a partir das duas grelhas do tipo 1-D:
>> [X Y] = meshgrid(x,y);
Com esta grelha assim definida, vamos calcular os valores da função para todos os pares (x,y) obtidos:
>> z=sin(X+Y).*cos(X-Y);
>> mesh(x,y,z)
que resulta em
46
fig.11 – representação tridimensional
ou
>> surf(x,y,z);
47
6
-2
-4
-6
-3 -2 -1 0 1 2 3
O MATLAB possui comandos de fácil utilização que permitem adicionar informações num gráfico:
title
Título do gráfico.
xlabel
Título do eixo-X.
ylabel
Título do eixo-Y.
zlabel
Título do eixo-Z.
text
Inserir anotação no gráfico.
gtext
Inserir anotação com o rato
grid
Traçado de uma grelha.
Por exemplo:
48
>> ylabel(‘f(x)’)
>> grid
Além destas possibilidades, obtidas escrevendo os comandos na área de trabalho, podemos alterar um gráfico,
actuando na janela gráfica. Por exemplo, conforme se pode observar na figura seguinte, fazendo zoom.
3.5
2.5
1.5
Para finalizar esta secção, convém acrescentar que podemos dimensionar os eixos de uma
representação gráfica usando a função axis. Para exemplificar, retomemos o gráfico da função seno
acima apresentado e façamos:
>> axis(v);
49
Obtemos:
0.8
0.6
0.4
f(x) 0.2
-0.2
-0.4
-0.6
-0.8
-1
-3 -2 -1 0 1 2 3
x
Podemos fazer representações paramétricas de forma semelhante à usada atrás. Suponhamos que
queremos representar parametricamente uma elipse. Podemos fazer:
» t=-pi:pi/25:pi;
» x=sin(t);
» y=4*cos(t);
» plot(x,y)
-1
-2
-3
-4
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
50
51
X. PROGRAMAÇÃO
Os comandos que controlam o fluxo, especificam a ordem em que a computação é feita. No MATLAB estes
comandos são semelhantes aos usados na linguagem C, mas com uma estrutura diferente.
O ciclo for é o controlador de fluxo mais simples usado na programação MATLAB. Atente-se no ciclo seguinte:
X(i)=i^2;
end
onde se pode notar que o ciclo for é dividido em quatro partes:
• A segunda parte consiste num teste ou condição que controla o ciclo, (i<=5).
• Na terceira parte a variável i é incrementada de acordo com o incremento especificado (2 neste caso).
• A quarta parte acontece quando a condição se torna falsa e então o ciclo termina.
for i=
1:8
for j= 1:8,
A(i,j)= i+j;
B(i,j)= i-j;
end
end
52
O ciclo while é semelhante ao ciclo for, mas apenas a condição é testada. Por exemplo, na expressão
a = l; b = 15;
while a<b,
clc
a = a+l
b = b-l
pause(l)
end
disp(‘fim do loop’)
a condição a<b é testada. Se ela for verdadeira, o corpo do ciclo será executado. Seguidamente, a
condição é testada novamente; se verdadeira o corpo será executado. Quando o teste concluir que a
condição é falsa, o ciclo terminará a execução e continuará no comando que se segue ao ciclo while,
após o comando end.
for i = l:5,
for j = l:5,
if i = = j
A(i,j) = 2;
elseif abs(i-j) = = 1
A(i,j) = -1;
else
A(i,j) = 0;
end
end
end
Os valores de i e j variam de 1 a 5, varrendo toda a matriz A. Se (if) i for igual a j, A(i,j)=2, ou se (elseif) o valor
absoluto de i-j for igual a 1, A(i,j)=-1, ou, se nenhuma das condições anteriores forem satisfeitas, (else) A(i,j)=0.
O comando elseif permite efectuar “bifurcações”, pelo que é bastante útil. Porém pode ser omitido.
Em geral, as construções com if têm a forma seguinte:
if expr1
acções
elseif expr2
acções
.
.
.
else
acções
53
end
É conveniente, às vezes, controlarmos a saída de um ciclo, de outro modo que não o método do teste,
no início ou no fim do mesmo. O comando break permite uma saída antecipada de um ciclo for ou
while. Um comando break faz com que o ciclo mais interno seja terminado imediatamente.
Por exemplo,
%modifica a matriz A
clc
x = ’s’;
for i = l:5,
if x = = ‘q’,
break
end
j = l;
while j<=5,
[‘A(‘num2str(i) ‘,’ num2str(j)’) = ‘num2str(A(i,j))]
x = input(‘Modifica? (s-sim, n-não, p-próxima linha, q-sair) =>’);
if x = = ’s’,
A(i,j) = input(‘Entre com o novo valor de A(i,j) = = >’);
j=j+l;
clc
end
if x = = ‘n’,
j=j+l;
clc
end
if x = = ‘p’,
clc
break
end
if x = = ‘q’,
clc
break
end
end
end
54
X.1.4 O comando “switch-case”
Este comando actua de forma semelhante ao if e pode ser usado em situações em que há várias alternativas de
saída dependentes de um ou mais parâmetros de entrada. Tem a forma:
SWITCH switch_expr
CASE {case_expr,}
acção
CASE {case_expr1, case_expr2, case_expr3,...}
acção, ...., acção
...
OTHERWISE,
acção, ...., acção
END
Vejamos um exemplo. Suponhamos que temos um conjunto de 8 sinais cujos gráficos queremos traçar em
diferentes partições da área gráfica. Podemos fazer:
for i=1:8
s=X(i,:);
switch i
case {1,2}
subplot(311);
case {4,5,6}
subplot(312);
otherwise
subplot(313);
end
plot(s);
end
55
X.2 OPERAÇÕES COM O DISCO
Os comandos load e save são usados, respectivamente, para importar dados do disco (rígido ou flexível) para a
área de trabalho do MATLAB e exportar dados da área de trabalho para o disco. Podem ser efectuadas outras
operações com o disco, como executar programas externos, alterar o directório de trabalho, listar o directório,
etc.
Os comandos cd, dir, delete, type e what do MATLAB são usados da mesma maneira que os comandos
similares do sistema operacional.
cd
muda de directório de trabalho
dir
lista o conteúdo do directório actual
delete
apaga ficheiro
type
mostra o conteúdo do ficheiro texto
what
lista ficheiros ".m", ".mat" e ".mex".
save
guarda os dados no ficheiros binário "matlab.mat".
save X
guarda a matriz X no ficheiro o binário "x.mat".
Os dados obtidos por outros programas podem ser importados pelo MATLAB desde que estes sejam
guardados em disco num formato apropriado. O comando load pode ser usado se os dados forem
56
armazenados no formato ASCII, e no caso de matrizes, com colunas separadas por espaços e cada
linha da matriz a ocupar uma linha de texto. Por exemplo, suponha que um programa em linguagem C,
depois de executado, gera o ficheiro "teste.sai" que contém a matriz
>> teste
teste =
1 2 3
4 5 6
7 8 9
Obviamente, o MATLAB pode também importar (através do comando load) os dados que foram
anteriormente exportados por ele. Por exemplo, para importar as variáveis X, Y e Z, anteriormente
exportadas usando o comando save, pode-se fazer:
save load
save X load x
Deve salientar-se que o comando save, quando usado para exportar os dados do MATLAB em formato
texto, exporta apenas um bloco contendo todas as variáveis. Quando importamos estes comandos
através do comando load, é importada apenas uma variável com nome do ficheiro. Por exemplo
>> X=rand(3,3)
X=
57
0.0470 0.9347 0.8310
Y=
arq2 =
Estas formas de acesso ao disco são de utilização simples. No entanto, há outras que têm relação
íntima com a linguagem C e que permitem o acesso e transferência de dados obtidos por outros
sistemas de aquisição. São de referir, p.ex.: fread, fwrite, fseek, fscanf, fgetl, fgets, load, fopen, etc.
58
59
XI. VARIÁVEIS E EXPRESSÕES SIMBÓLICAS
Uma das toolboxes mais interessantes (e das mais recentes) é a toolbox symbolic que permite
manipular expressões que além de grandezas e variáveis numéricas, contêm também variáveis
simbólicas. Por exemplo:
>> syms x
>> simplify((sin(x))^2+(cos(x))^2)
ans =1
ans =
1.9459
Também pode ser considerado nesta secção o comando str que serve para introduzir um texto como se
se tratasse de um número:
» str='estou farto do MatLab'
str =
Vamos agora regressar ao objectivo inicial desta secção: usar a toolbox symbolic. Primeiro temos de
informar o MATLAB que x é uma variável simbólica, usando sym; depois pedimos para simplificar a
expressão que a envolve. Neste caso, usamos uma função chamada simplify. Como vimos
60
anteriormente, a função é um comando que pode ter alguns argumentos de entrada e alguns de saída.
Neste caso, a função simplify tem como argumento de entrada e de saída uma expressão simbólica.
Uma vez assente que x é uma variável simbólica, podemos definir expressões que envolvem esta
variável. Por exemplo, dadas duas funções
ans =
2/(x^2-x+7)*x^2+3/(x^2-x+7)*x-5/(x^2-x+7)
>> pretty(ans)
2
x x 5
2 ---------- + 3 ---------- - ----------
2 2 2
x - x + 7 x - x + 7 x - x + 7
>> f^3
ans =
(2*x^2+3*x-5)^3
>> expand(ans)
ans =
8*x^6+36*x^5-6*x^4-153*x^3+15*x^2+225*x-125
Observe que o MATLAB não faz as simplificações ou expansões automaticamente. Para isso, usamos
comandos como por exemplo:
simplify – simplifica;
expand - faz a expansão;
pretty - mostra a expressão de uma forma mais fácil de visualizar;
simple - tenta encontrar a forma mais simples de escrever uma expressão.
61
O MATLAB pode realizar operações mais avançadas sobre expressões simbólicas, usando comandos
como:
Por exemplo:
O MATLAB pode também resolver equações. Por exemplo, para resolver a equação
ax2+bx+c = 0,
>> syms a b c x
>> solve(a*x^2+b*x+c)
ans =
[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]
O MATLAB pode exibir este resultado de uma forma mais fácil de visualizar usando, como vimos a
função pretty.
>> pretty(ans)
[ 2 1/2]
[ -b + (b - 4 a c) ]
[1/2 --------------------]
[ a ]
[ ]
62
[ 2 1/2]
[ -b - (b - 4 a c) ]
[1/2 --------------------]
[ a ]
63
64
XII. APÊNDICE
Trigonométricas
sin - Seno.
cos - Co-seno
tan - Tangente
cot - Cotangente
Exponencial
exp - Exponential.
65
Complexos
arredondamento e resto
sign - Sinal
66
XII.2 Operadores relacionais
The six relational operators are <, <=, >, >=, ==, and ~=.
A < B efectua comparações elemento a elemento entre A e B e retorna uma matrix com as mesmas
dimensões e cujos elementos são um ou zero consoante a relação é ou não verdadeira. Obviamente, A
e B devem ter as mesmas dimensões (ou uma pode ser um escalar).
| “OU” Lógico
A | B é uma matriz cujos elementos são 1's onde A ou B têm elementos não-nulos e 0's onde ambas
têm um zero. A e B devem ter as mesmas dimensões (ou uma pode ser um escalar).
~ “NÃO” Lógico
~A é uma matriz cujos elementos são 1's onde A tem zeros e 0's onde A tem elementos não-nulos.
---------------------------------------------------------------------------------------------------------------
NOTA FINAL – A elaboração deste manual introdutório ao MATLAB, foi feita com base na
experiência pessoal do autor, com o auxílio do Manual do MATLAB 5 e de alguma pesquisa na
Internet. Como texto introdutório não pretende mais do que dar o “pontapé de saída”, ou seja, indicar
um caminho através de um dos mais poderosos meios postos ao dispor de um Engenheiro ou Cientista.
Existe uma grande quantidade de livros sobre ou com aplicações do MatLab, facilmente encontráveis
em livrarias técnicas ou na Internet.
Há alguns temas não tratados que escapam ao objectivo deste texto, como sejam: agregados de
67
células e estruturas, úteis em programação avançada, e o simulink, ferramenta extremamente útil na
simulação de sistemas contínuos e, em particular, de sistemas de Telecomunicações.
Todas as sugestões que permitam aumentar a eficácia deste manual são bem vindas
mdo@uninova.pt e mdo@inesc.pt
68