Sei sulla pagina 1di 68

UNINOV A

Manual de Introdução ao MatLab

Manuel Duarte Ortigueira

Professor Auxiliar do Departamento de Engenharia Electrotécnica


da Faculdade de Ciências e Tecnologia da Universidade Nova de Lisboa

Investigador do UNINOVA

UNINOVA
MAIO DE 2002

1. INTRODUÇÃO................................................................................................... 5

1.1. Sobre o MatLab ......................................................................................................................................... 5

1.2. Obtenção de Informações da Área de Trabalho ..................................................................................... 6

1.3. As Facilidades do HELP (Ajuda) ............................................................................................................. 7

1.4. Os Ficheiros *.m ........................................................................................................................................ 8

1.5. Execução de Programas Externos............................................................................................................ 9

2. CARACTERÍSTICAS E OPERAÇÕES BÁSICAS .......................................... 12

2.1. Declarações e Variáveis........................................................................................................................... 12

2.2. Geração de Vectores................................................................................................................................ 13

2.3. Geração e entrada de matrizes ............................................................................................................... 14

2.4. Elementos das Matrizes........................................................................................................................... 16

2.5. Números e Expressões Aritméticas ........................................................................................................ 21

2.6. Números e Matrizes Complexas ............................................................................................................. 21

2.7. Formato de Saída..................................................................................................................................... 22

3. OPERAÇÕES COM MATRIZES ..................................................................... 25

3.1. Adição e Subtracção ................................................................................................................................ 25

3.2. Multiplicação ........................................................................................................................................... 26

3.3. Divisão ...................................................................................................................................................... 28

2
3.4. Exponenciação ......................................................................................................................................... 28

3.5. Transposição ............................................................................................................................................ 28

4. OPERAÇÕES ELEMENTO A ELEMENTO..................................................... 32

4.1. Adição e Subtração.................................................................................................................................. 32

4.2. Multiplicação e Divisão ........................................................................................................................... 32

4.3. Potenciação............................................................................................................................................... 33

4.4. Operações Comparativas ........................................................................................................................ 33

5. FICHEIROS ".M" ............................................................................................. 36

6. GRÁFICOS ...................................................................................................... 38

6.1. Gráficos Bidimensionais.......................................................................................................................... 38

6.2. Partição da Janela gráfica ...................................................................................................................... 41

6.3. Estilos de linha, símbolos e cores............................................................................................................ 42

6.4. Números Complexos................................................................................................................................ 44

6.5. Escala Logarítmica, Coordenada Polar e Gráfico de Barras .............................................................. 45

6.6. Traçado de Gráficos Tridimensionais e Contornos.............................................................................. 46

6.7. Anotações no Gráfico .............................................................................................................................. 48

7. PROGRAMAÇÃO............................................................................................ 52

7.1. Controlo de Fluxo .................................................................................................................................... 52

7.1.1. Ciclo “for” ......................................................................................................................................... 52

3
7.1.2. Ciclo “while” ..................................................................................................................................... 52

7.1.3. Comandos “if” e “break” .................................................................................................................. 53

7.1.4. O comando switch-case ..................................................................................................................... 55

7.2. OPERAÇÕES COM O DISCO.............................................................................................................. 56

7.2.1. Manipulação do Disco ....................................................................................................................... 56

7.2.2. Importar e Exportar Dados ................................................................................................................ 56

8. VARIÁVEIS E EXPRESSÕES SIMBÓLICAS ................................................. 60

9. APÊNDICE ...................................................................................................... 65

9.1. Funções elementares................................................................................................................................ 65

9.2. Operadores relationais ............................................................................................................................ 67

4
IV. INTRODUÇÃO

IV.1 Sobre o MatLab


O MATLAB é um ambiente de computação e desenvolvimento de aplicações, totalmente
integrado e orientado para levar a cabo projectos que impliquem cálculos matemáticos complexos e a
sua visualização gráfica. O MATLAB integra análise numérica, cálculo matricial, processamento de
sinais e visualização gráfica, num meio onde os problemas e as suas soluções são expressas de modo
semelhante àquele em que se escreviam tradicionalmente, sem necessidade de fazer uso de técnicas de
programação tradicionais.
O nome de MATLAB resultou da contracção das palavras "MATrix LABoratory" e foi inicialmente
concebido para proporcionar fácil acesso às bibliotecas LINPACK e EISPACK, que representam hoje
em dia duas das mais importantes em computação e cálculo matricial.
O MATLAB é um sistema de trabalho interactivo baseado na representação matricial. O programa
permite realizar de um modo rápido a resolução numérica de problemas, num tempo muito menor do
que com linguagens de programação tradicionais como Fortran, Basic ou C.
O MATLAB goza na actualidade de um alto grau de implantação em Escolas e Centros Universitários,
assim como em departamentos de I&D de muitas empresas industriais. Em ambientes universitários,
por exemplo, o MATLAB converteu-se numa ferramenta básica, tanto para os docentes e
investigadores, como uma importante ferramenta para a leccionação de cursos universitários, tais
como sistemas e engenharia de controle, álgebra linear, processamento digital de imagens, sinais, etc.
No mundo industrial, o MATLAB tem sido utilizado como ferramenta de investigação para a
resolução de problemas complexos como por exemplo a realização e aplicação de modelos
matemáticos em engenharia. As utilizações mais frequentes desta ferramenta encontram-se nas áreas
de computação e cálculo numérico tradicional, prototipagem, algorítmia, teoria do controle
automático, estatística, análise de séries temporais para o processamento digital de sinais.

O MATLAB dispõe também de um amplo conjunto de programas de apoio especializados, denominados


Toolboxes, que estendem significativamente o número de funções incorporadas no programa principal. Estas
Toolboxes cobrem praticamente todas as áreas principais no mundo da engenharia, destacando entre elas a
toolbox de processamento de imagens, sinais, controle robusto, estatística, análise financeira, cálculo matemático
simbólico, redes neuronais, lógica difusa, identificação de sistemas, simulação de sistemas dinâmicos, etc. Para
ter uma ideia mais precisa das capacidades do MatLab, basta escrever demo na janela de trabalho.
Alternativamente, pode clicar em help e escolher examples and demos.

O MatLab é muito fácil de usar, sobretudo se se tiver alguns conhecimentos de Fortran ou C,


linguagens que lhe serviram de base. Inicialmente desenvolvido para ser usado em DOS, foi adaptado,
a partir das versões 4.x, para trabalhar em ambiente Windows e, logo a seguir, para OS

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.

IV.2 Obtenção de Informações da Área de Trabalho


Quando se entra no MATLAB, tem-se à disposição uma área de trabalho que, normalmente, fica
referida ao directório “bin” do disco onde está instalado o programa. Para evitar encher esta partição
com ficheiros que nada têm a ver com o MATLAB original, deve trabalhar-se numa área própria. Para
o fazer, há dois procedimentos possíveis:
a) Com o rato, ir a File e fazer Set path. Abre-se a janela Path Browser. Depois é só escolher o
local de trabalho com o Browser. Ainda nesta janela, deve fazer File e Save Path. Esta
forma de escolha da área de trabalho é vantajosa quando se trabalha sempre no mesmo
computador e se tem uma área reservada ao trabalho com o MATLAB.
b) Fazer sucessivamente: cd \ para sair da área do MATLAB e depois ir, da forma usual, para
o local escolhido. Por exemplo, para a disquete: a:.

Tendo fixado o local de referência, estamos em condições de começar a trabalhar. Suponhamos que fazemos as
seguintes entradas:

» a=2;

» b=[1 -1 0 4]; % o símbolo “;” inibe o ecoar dos resultados

» c=[1 2 3;4 5 6;7 8 9];

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

Your variables are:

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

a 1x1 8 double array

ans 1x1 8 double array

b 1x4 32 double array

c 3x3 72 double array

Grand total is 15 elements using 120 bytes

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.

IV.3 As Facilidades do HELP (Ajuda)

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”.

Por exemplo, com

>> help mean

obtemos a seguinte resposta,

MEAN Average or mean value.

For vectors, MEAN(X) is the mean value of the elements in X. For

matrices, MEAN(X) is a row vector containing the mean value of

each column. For N-D arrays, MEAN(X) is the mean value of the

7
elements along the first non-singleton dimension of X.

MEAN(X,DIM) takes the mean along the dimension DIM of X.

Example: If X = [0 1 2

3 4 5]

then mean(X,1) is [1.5 2.5 3.5] and mean(X,2) is [1

4]

See also MEDIAN, STD, MIN, MAX, COV.

A última linha é muito importante, porque nos dá informação sobre outros tópicos relacionados com o
actual.

IV.4 Os Ficheiros *.m


Os ficheiros com extensão “.m” constituem sub-rotinas elaboradas a partir de um conjunto extenso de
funções intrínsecas que não podem ser alteradas pelo utilizador. As TOOLBOXES são, efectivamente,
ficheiros com a extensão ".m" criados a partir das funções intrínsecas. Estas bibliotecas externas
podem ser constantemente actualizadas à medida que novas aplicações vão sendo desenvolvidas. Estas
sub-rotinas dividem-se em dois tipos: scripts e funções. As primeiras servem para efectuar um
determinado tipo de processamento que não necessita de passar variáveis de e para o programa
principal. Por exemplo, um ficheiro com uma lista de valores a usar num dado programa, constitui um
script desde que o seu nome tenha uma extensão .m. As funções efectuam tal passagem. Por isso,
necessitam de uma declaração function. Para criar ficheiros *.m, basta fazer File/new/m-file. Este
comando abre um ficheiro com o Editor. No final, guarda-se com um dado nome, no caso da função
convém ser igual ao nome desta, com uma extensão .m. Para exemplificar, consideremos o script
inteiros.m

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

Se se tratasse de uma função, faríamos:

8
function inteiros(m,n)

for i=m,n

x(i)=i;

end

Para correr a função, fár-se-ia

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

IV.5 Execução de Programas Externos


O caracter ponto de exclamação “!”, é um desvio e indica que o restante da linha será um comando a
ser executado pelo sistema operacional. Este procedimento vem sendo historicamente utilizado em
todos as versões do MATLAB como "“prompt”" para indicar a execução de um colando do DOS,
sendo muito útil nas versões que usavam somente o DOS. No ambiente Windows, entretanto, este
comando tem pouca utilidade.
Para entrar com o caractere de desvio no "“prompt”" do MATLAB, deve-se colocá-lo no início do
comando do DOS ou Windows que se deseja executar. Por exemplo, para carregar um programa, p.
ex., o Notepad do Windows, sem sair do MATLAB, faça

>> ! 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, ...

Nota Importante: para interromper um programa em execução deve fazer CTRL-C.

10
11
V. CARACTERÍSTICAS E OPERAÇÕES BÁSICAS

V.1 Declarações e Variáveis

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

>> variável = expressão

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,

>> s = l - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 ...


>> - 1/8 + 1/9 - l/10 + 1/11 - 1/12 + 1/13;

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.

V.2 Geração de Vectores

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

-3.1416 -2.7489 -2.3562 -1.9635 -1.5708 -1.1781 -0.7854

13
Columns 8 through 14

-0.3927 0 0.3927 0.7854 1.1781 1.5708 1.9635

Columns 15 through 17

2.3562 2.7489 3.1416

Por omissão, o valor do incremento é 1,

>> z= -5:4

z=

-5 -4 -3 -2 -1 0 1 2 3 4

Pode-se, também, gerar vectores usando a função linspace. Por exemplo,

>> k=linspace(0,2,7)

k=

0 0.3333 0.6667 1.0000 1.3333 1.6667 2.0000

gera um vector linearmente espaçado de 0 a 2, contendo 7 elementos.

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.

Em qualquer altura, podemos obter a dimensão de um vector usando a função length:

>> length(k)

ans =

Há outra função que pode ser usada em vez de length; é a função size:

>> size(k)

ans =

1 7

que informa que se trata de um matriz de dimensões 1x7.

V.3 Geração e entrada de matrizes


As matrizes podem ser introduzidas no MATLAB por diferentes processos:

- digitadas na área de trabalho (listagem explícita dos seus elementos),


- geradas por comandos e funções,

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 S 6;7 8 9 ]

e pressionando <enter>, o MATLAB mostra o resultado

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=[sqrt(-1) (-2)^3;log(25) sin(2*pi/3)]

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,

>> w=[1 -1 0];

>> A=[A w']

A=

0 + 1.0000i -8.0000 1.0000

3.2189 0.8660 -1.0000

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=

0 + 1.0000i -8.0000 1.0000

3.2189 0.8660 -1.0000

selecciona as duas primeiras linhas e todas as colunas da matriz A actual.

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

>> A(3,3) = A(1,3) + A(3,l)

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 = ones (10)

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,

>> B(1:2:7,6:l0) = A(5:-1:2,1:5)

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

9.637458638 1.602E-20 6.06375e23

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.

V.6 Números e Matrizes Complexas

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 é

>> w=0.9 * exp(i*pi)

21
As seguintes declarações mostram dois caminhos convenientes para se definir matrizes complexas no
MATLAB:

>> A= [1 2; 3 4]+i*[5 6;7 8]

>> A= [1+5*i 2+6*i; 3+7*i 4+8*i]

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

V.7 Formato de Saída

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=[2/7 pi log(10)]

x=

0.2857 3.1416 2.3026

22
Por exemplo, a expressão

>> x = [4/3 1.2345e-6]

é mostrada , para cada formato usado, da seguinte maneira:

format short 1.3333 0.0000

format short e 1.3333e+000 1.2345e-006

format long 1.33333333333333 0.000000123450000

format long e 1.333333333333333e+000 1.234500000000000e-006

format hex 3ff5555555555555 3eb4b6231abfd271

format rat 4/3 1/810045

format bank 1.33 0.00

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=[2/7 pi 1000*log(10)]

x=

1.0e+003 *

0.0003 0.0031 2.3026

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

As operações com matrizes no MATLAB são as seguintes:

· Adição
· Subtração
· Multiplicação
· Divisão direita
· Divisão esquerda
· Exponenciação
· Transposição

A seguir são descritas estas operações em pormenor.

VI.1 Adição e Subtracção


A adição e subtracção de matrizes são indicadas, respectivamente, por "+" e "-". As operações são
definidas somente se as matrizes forem da mesma dimensão. Por exemplo,
>> A =

1.1069 -0.1069 -0.7628


-0.1069 1.1069 -0.2372
-0.2516 -0.7484 3.6607

>> B

B=

1.0000 8.0000 1.0000


3.2189 0.8660 1.0000
1.0000 1.0000 0

>> C=A+B

C=

2.1069 7.8931 0.2372

25
3.1120 1.9729 0.7628
0.7484 0.2516 3.6607
>> D=A-B

D=

0.1069 -8.1069 -1.7628


-3.3258 0.2409 -1.2372
-1.2516 -1.7484 3.6607

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.

Por exemplo se y = [10 7 4 1 -2 -5 -8],

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

70 49 28 7 -14 -35 -56

40 28 16 4 -8 -20 -32

10 7 4 1 -2 -5 -8

26
-20 -14 -8 -2 4 10 16

-50 -35 -20 -5 10 25 40

-80 -56 -32 -8 16 40 64

-110 -77 -44 -11 22 55 88

>> y’*z

ans =

70 40 10 -20 -50 -80 -110

49 28 7 -14 -35 -56 -77

28 16 4 -8 -20 -32 -44

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

Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz.

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,

• X = A\B é a solução de A*X = B

• X = B/A é a solução de X*A = B

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

>> x = [-1 O 2]'

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=

1.0000 + 5.0000i 2.0000 + 6.0000i

6.0000 + 7.0000i 4.0000 + 8.0000i

Z1 =

1.0000 - 5.0000i 3.0000 - 7.0000i

2.0000 - 6.0000i 4.0000 - 8.0000i

Z2 = 1.0000 + 5.0000i 3.0000 + 7.0000i

2.0000 + 6.0000i 4.0000 + 8.0000i

Também se pode usar conj(Z’).

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 " .‘ ").

VII.1 Adição e Subtração

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.

VII.2 Multiplicação e Divisão


A multiplicação de conjuntos é indicada por ".*". Se A e B forem duas matrizes com as mesmas
dimensões, então A.*B indica um conjunto (matriz) cujos elementos são simplesmente o produto dos
elementos individuais de A e B. Por exemplo, se

>> x = [1 2 3]; y = [4 5 6];

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=

4.0000 2.5000 2.0000

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

VII.4 Operações Comparativas

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

% Traça uma função y=ax^2 + bx + c no intervalo -5<x<5


clear
aux=’s’;
while aux= = ‘s’,
clc
a=input(‘a =’);
b=input(‘b =’);
c=input(‘c =’);
x=-5:0.1:5;
y=a*x.^2+b*x+c;
plot(y)
figure(1)
pause
clc
close
aux=input(‘Traçar outro ? (s/n) = => ‘,’s’);
end

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.

IX.1 Gráficos Bidimensionais

Estes são os comandos para traçar gráficos bidimensionais:

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,

>> y=[0 0.2 0.4 .5 .7 .9 1 1.2 .8 .7 .3 .2 0]


>> plot(y)

e o resultado é mostrado na Janela Gráfica:

38
1.4

1.2

0.8

0.6

0.4

0.2

0
0 2 4 6 8 10 12 14

fig.1 – exemplo de uma representação obtida com “plot”

Suponhamos que transformamos os valores de y por meio de f=tan(y); Obtemos

f=

Columns 1 through 7

0 0.2027 0.4228 0.5463 0.8423 1.2602 1.5574

Columns 8 through 13

2.5722 1.0296 0.8423 0.3093 0.2027 0

Pretendendo agora desenhar o gráfico de f, temos duas hipóteses:

>> plot(f)

que produz

2.5

1.5

0.5

0
0 2 4 6 8 10 12 14

fig.2 – representação de f em função do índice de memória

39
ou

>> plot(y,f)

que resulta em

2.5

1.5

0.5

0
0 2 4 6 8 10 12 14

fig.3 – representação de f em função de y.

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 Y é uma matriz e X um vector, plot(X,Y) traça sucessivamente as linhas ou colunas de Y versus o


vetor X.

• Se X é uma matriz e Y é um vector, plot(X,Y) traça sucessivamente as linhas ou colunas de X versus o


vetor Y.

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

>> plot(t, sin(t), t, cos(t), t, sin(t + pi), t, cos(t + pi))

40
fig.4 – representação de sinusóides em função de t.

IX.2 Partição da Janela gráfica

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

fig.5– partição da janela gráfica em 2x2 partes

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

A partição é feita com o comando subplot que tem o formato,

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.

IX.3 Estilos de linha, símbolos e cores

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

Outros tipos de linhas, pontos e cores podem também ser usados:

TIPO DE LINHA TIPO DE PONTO CORES

_ _______________ . ....................... y amarelo

-- -------------------- * ******** m lilás

-. -.-.-.-.-.-.-.-.-.-.-.-. ° ° ° °° ° ° ° ° ° ° c azul claro

. .............................. + ++++++++++ r vermelho

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

>> subplot(211); plot(real(Z));subplot(212); plot(imag(Z))

que resulta em

60

40

20

-20

-40
0 200 400 600 800 1000 1200

50

-50
0 200 400 600 800 1000 1200

fig.7 – representação das partes real e imaginária de uma função complexa

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.

IX.5 Escala Logarítmica, Coordenada Polar e Gráfico de Barras

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:

• polar(teta,r) - traça em coordenadas polares o ângulo teta, em radianos, versus o raio r;

• loglog - traça um gráfico usando escalas logarítmicas para as ordenadas e abcissas;

• semilogx - traça um gráfico em que a escala do eixo x é logarítmica e a do eixo y é linear;

• semilogy - traça um gráfico em que a escala do eixo x é linear e a do eixo y é logarítmica;

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

fig.9 – representação usando uma escala logarítmica

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

IX.6 Traçado de Gráficos Tridimensionais e Contornos

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

Para efectuar o traçado gráfico usa-se um dos comandos seguintes:

>> mesh(x,y,z)

que resulta em

46
fig.11 – representação tridimensional

ou
>> surf(x,y,z);

fig.11 – representação tridimensional sombreada

que cria uma versão sombreada da superfície.

O comando contour(x,y,z) mostra a projecção da superfície no plano xy

47
6

-2

-4

-6
-3 -2 -1 0 1 2 3

fig.12 – representação da projecção horizontal

IX.7 Anotações no Gráfico

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:

>> fplot(‘sin’, [-pi pi])


>> title(‘Gráfico da função f(x)=seno(x), -pi<x<pi’)
>> xlabel(‘x’)

48
>> ylabel(‘f(x)’)

>> grid

fig.13 – gráfico com anotações

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

-3 -2.8 -2.6 -2.4 -2.2 -2 -1.8 -1.6

fig.14 – Zoom da figura 12

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:

>> v=[ -pi pi –1.2 1.2];

>> axis(v);

49
Obtemos:

Gráfico da função f(x)=seno(x), -pi<x<pi

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

fig.15 – redimensionamento dos eixos

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

fig.16 – gráfico de elipse


A cópia dos gráficos da janela gráfica para outro tipo de ficheiros, por exemplo Word, Powerpoint,
etc., é imediata, fazendo copy figure. No entanto, convém efectuar a cópia no formato windows
metafile, porque a cópia no formato “bitmap” origina ficheiros que ocupam demasiado espaço em
memória.

50
51
X. PROGRAMAÇÃO

X.1 Controlo de Fluxo

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.

X.1.1 Ciclo “for”

O ciclo for é o controlador de fluxo mais simples usado na programação MATLAB. Atente-se no ciclo seguinte:

>> for i=1:2:5,

X(i)=i^2;

end
onde se pode notar que o ciclo for é dividido em quatro partes:

• A primeira parte (i=1) é realizada uma vez, antes do ciclo se iniciar.

• A segunda parte consiste num teste ou condição que controla o ciclo, (i<=5).

• Esta condição é avaliada. Se verdadeira, o corpo do ciclo (X(i)=i^2) é executado.

• 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.

O comando end é usado como limite inferior do corpo do ciclo.

Por omissão o incremento é 1. É vulgar encontrar ciclos for na manipulação de matrizes:

for i=
1:8

for j= 1:8,

A(i,j)= i+j;

B(i,j)= i-j;

end
end

X.1.2 Ciclo “while”

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.

X.1.3 Comandos “if” e “break”

A seguir, é apresentado um exemplo do uso da declaração if no MATLAB.

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.

X.2.1 Manipulação do Disco

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

Para maiores detalhes sobre estes comandos utilize o help.

X.2.2 Importar e Exportar Dados


Os dados contidos na Área de Trabalho do MATLAB podem ser armazenados em ficheiros, no
formatos texto ou binário, utilizando o comando save. Existem diversas maneiras de utilizar este
comando. Por exemplo, para armazenar as variáveis X, Y e Z pode-se fazer:

save
guarda os dados no ficheiros binário "matlab.mat".
save X
guarda a matriz X no ficheiro o binário "x.mat".

save arql X Y Z guarda as matrizes X, Y e Z no ficheiro binário


"arq1.mat".

save arq2.sai X Y Z -ascii Guarda as matrizes X., Y e Z no ficheiro texto


"arq2.sai" com 8 dígitos.

Save arq3.sai X Y Z -ascii -double guarda as matrizes X., Y e Z no ficheiro texto


"arq3.sai" com 16 dígitos.

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

1.0000 2.0000 3.0000

4.0000 5.0000 6.0000

7.0000 8.0000 9.0000


Executando o comando:

>> load teste.sai

o MATLAB importa a matriz, que passa a chamar-se teste:

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

save arq1 X Y Z load arq1

save arq2.sai X Y Z -ascii load arq2.sai

save arq3.sai X Y Z -ascii -double load arq3.sai

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=

0.2190 0.6793 0.5194

57
0.0470 0.9347 0.8310

0.6789 0.3835 0.0346


>> Y = rand(3,3)

Y=

0.0535 0.0077 0.4175

0.5297 0.3835 0.6868

0.6711 0.0668 0.5890


>> save arq2.sai X Y -ascii
>> clear
>> load arq2.sai
>> arq2

arq2 =

0.2190 0.6793 0.5194

0.0470 0.9347 0.8310

0.6789 0.3835 0.0346

0.0535 0.0077 0.4175

0.5297 0.3834 0.6868

0.6711 0.0668 0.5890

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

Com estes comandos consegue-se simplificar a expressão sen2x+cos2x.


Mesmo usando apenas a área de trabalho podemos tirar partido das possibilidades do cálculo
simbólico. Por exemplo o comando inline permite definir uma função e usá-la sempre que queira, sem
necessidade de a redefinir. Vejamos:
» f=inline(‘log(x^2+abs(y))’,’x’,’y’)
dá:
f=
Inline function:
f(x,y) = log(x^2+abs(y))
» f(-2,3)

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 =

estou farto do MatLab


Um outro comando interessante é feval que permite correr uma função definida pelo seu nome com
determinados parâmetros:
» feval=(‘inteiros’,10,30)

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

f(x) = 2x2+3x-5 e g(x) = x2-x+7,

podemos efectuar uma série de operações algébricas envolvendo estas funções.


>> f=2*x^2+3*x-5; g=x^2-x+7;
>> f+g
ans =
3*x^2+2*x+2
>> f-g
ans =
x^2+4*x-12
>> f*g
ans =
(2*x^2+3*x-5)*(x^2-x+7)
>> expand(ans)
ans =
2*x^4+x^3+6*x^2+26*x-35
>> f/g
ans =
(2*x^2+3*x-5)/(x^2-x+7)
>> expand(ans)

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:

compose - calcula a composição das funções f(x) e g(x) em f(g(x));


finverse - encontra a inversa funcional de uma expressão;
subs - substitui uma variável por um número (ou por outra variável) numa expressão;
diff - calcula a derivada de f.

Por exemplo:

>> f=1/(1-x^2); g=sin(x);


>> compose(f,g)
ans = 1/(1-sin(x)^2)
>> compose(g,f)
ans = sin(1/(1-x^2))
>> finverse(g)
ans = asin(x)
>> subs(f,x,2)
ans = -1/3

O MATLAB pode também resolver equações. Por exemplo, para resolver a equação

ax2+bx+c = 0,

algebricamente, podemos usar os comandos:

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

XII.1 Funções elementares

Trigonométricas

sin - Seno.

sinh - Seno Hiperbólico

asin - arco do seno

cos - Co-seno

acos - arco do co-seno

tan - Tangente

tanh - Tangente Hiperbólica

atan - arco de tangente

atan2 - arco de tangente para os 4 quadrantes

cot - Cotangente

Exponencial

exp - Exponential.

log - Logaritmo Natural

log10 - Logaritmo decimal

log2 - Logaritmo de Base 2

pow2 - potência de base 2

sqrt - raíz quadrada

65
Complexos

abs - Valor absoluto = módulo

angle - Fase = argumento

complex - Constroi complexos a partir das partes real e imaginária.

conj - Complexo conjugado

imag - Parte imaginária

real - Parte real

unwrap - “desenbrulha” a fase = soma múltiplos de 2π para tornar a


fase contínua

cplxpair - Faz sair números aos pares complexos conjugados

arredondamento e resto

fix - Arredonda em direcção a zero

floor - Arredonda para baixo (esquerda no eixo real)

ceil - Arredonda para cima (direita no eixo real)

round - Arredonda para o inteiro mais próximo

mod - Módulo = resto depois de divisão (com sinal)

rem - resto depois de divisão

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).

& “E” Lógico


A & B é uma matriz cujos elementos são 1's onde ambas A e B têm elementos não-nulos e 0's
onde, pelo menos, uma tem um zero. 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.

xor “OU” Exclusivo


xor(A,B) é 1 onde ou A, ou B, mas não ambas, é não-nula.

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

Potrebbero piacerti anche