Você está na página 1de 33

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB
DEE - CURSO DE INTRODUÇÃO AO MATLAB Universidade Federal da Bahia Escola Politécnica Departamento de Engenharia

Universidade Federal da Bahia

Escola Politécnica

Departamento de Engenharia Elétrica

da Bahia Escola Politécnica Departamento de Engenharia Elétrica Curso de Introdução ao MATLAB PAULO ASSUNçÃO 1

Curso de Introdução ao MATLAB

PAULO ASSUNçÃO

1

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

INDICE

Parte 1: Comandos Básicos

1.1-Criação de Variáveis: Armazenando escalares e vetores 1.2-Auto-ajuda em MATLAB 1.2.1-Comando Help 1.2.2- Comando lookfor 1.2.3- Comando lookfor 1.3-Operadores aritméticos e relacionais 1.3.1-Operadores aritméticos 1.3.1.1-Sobre escalares 1.3.1.2-Sobre vetores 1.3.2- Operadores relacionais e lógicos 1.3.3- Operadores relacionais e lógicos 1.3.4- Operadores relacionais e lógicos 1.4- Definindo e manipulando matrizes 1.5- Fazendo gráficos no MATLAB 1.6-Gráficos tridimensionais 1.6.1- Gráficos de linha 1.6.2-Gráficos de rede e superfície 1.7- Números complexos, polinômios, equações lineares e funções trigonométricas 1.7.1- Números complexos

1.7.2-Polinômios

1.7.3- Equações Lineares 1.8-Tomada de decisões e controle de fluxo no MATLAB 1.8.1- Loops for 1.8.2- Estruturas condicionais 1.8.3- Loops while

2

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

INTRODUÇÃO

Curso de Introdução ao MATLAB

Parte 1: Comandos Básicos

1.1-Criação de Variáveis: Armazenando escalares e vetores

Para criar uma variável no MATLAB basta escrever seu nome logo após o prompt e separado por igual o valor que se deseja armazenar na variável. Por exemplo, considere uma variável escalar:

>>x=-2

O MATLAB armazena o número -2 na variável x.

x=

-2

Ao pressionar ENTER o MATLAB mostrará que o valor da variável x é -2. Considere a criação de um vetor:

>>x=[1 2 3 4 5] x=

1

2

Cria o vetor linha x cujos elementos são 1,2,3,4 e 5.

3

4

5

Caso você não queira ver os valores armazenados na variável que foi definida ou resultado de um cálculo, coloque “ ; ” no final da linha. Veja o exemplo abaixo:

Para criar um vetor coluna coloque os elementos separados por ponto-e- vírgulas:

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

Cria o vetor coluna x cujos elementos são 1,2,3,4 e 5. (3)

Outras formas possíveis de criação de uma variável vetor são:

>>x=0:0.01:1;

Cria um vetor de 0 até 1, com uma diferença entre elementos igual a 0.01.

>>x=linspace(a,b,n)

Cria um vetor com primeiro elemento a e o último b com n elementos linearmente espaçados.

3

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

>>x=logspace(d1,d2,N)

Cria um vetor logaritmicamente espaçado. Ou seja, ele

linha de 10 d1 até 10 d2 com N ele-

mentos onde os logaritmos na base 10 desses elemen-

constrói um vetor

tos estão linearmente espaçados.

(6)

Obs. Definições default: Se em (4) o passo, em (5) o número n e em (6) N, não forem especificados por você o MATLAB assumirá esses valores como sendo 1,100 e 50 respectivamente.

1.2-Auto-ajuda em MATLAB

O MATLAB possui uma série de comandos que permitem ao seu usuário uma ajuda on-line. Quando você esquecer um comando ou quiser mais informações sobre uma função do MATLAB existem três formas de se obter a informação desejada:

1.2.1- Comando Help

Esta é a forma mais fácil de se obter informações no ambiente MATLAB. Basta digitar help <nome de um comando> e o MATLAB irá apresentar um breve resumo do comando e a função por ele desempenhada. Considere um exemplo simples.

» help sqrt

SQRT

Square root.

SQRT(X) is the square root of X. Complex results are

produced if X is not positive.

See also SQRTM.

É fácil perceber que o comando help apesar de poderoso tem uma limitação. Você precisa saber o comando sobre o qual você deseja informação. Nem sempre é

o que acontece. Suponha que você deseje informação a respeito de interpolação de funções, mas não conhece nenhum comando do MATLAB responsável por tal tarefa. Você ainda pode usar o help, mas você vai fazê-lo de uma forma mais geral. Digitando help apenas no prompt do MATLAB você terá acesso a uma lista de tópicos. Experimente e verá:

4

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

» help

HELP topics:

d:\matlab

- Establish MATLAB session parameters.

matlab\general

- General purpose commands.

matlab\ops

- Operators and special characters.

matlab\lang

- Language constructs and debugging.

matlab\elmat

- Elementary matrices and matrix manipulation.

matlab\specmat

- Specialized matrices.

matlab\elfun

- Elementary math functions.

matlab\specfun

- Specialized math functions.

matlab\matfun

- Matrix functions - numerical linear algebra.

matlab\datafun

- Data analysis and Fourier transform functions.

matlab\polyfun

matlab\funfun

- Polynomial and interpolation functions. - Function functions - nonlinear numerical methods.

.

.

continua

.

Não memorize esta lista. Ela está a sua disposição no MATLAB. Voltando ao nosso problema, para saber funções relacionadas com interpolação basta digitar help polyfun e o MATLAB apresentará uma lista com os comandos de interpolação e assim novos helps podem ser utilizados.

1.2.3- Comando lookfor

Na sequência, um outro método é, conhecido o assunto de interesse, usar o comando lookfor. Novamente, desejamos informações sobre interpolação. Faça:

» lookfor interpolation

contents.m: % Polynomial and interpolation functions. ICUBIC Cubic Interpolation of a 1-D function. INTERP1 1-D data interpolation (table lookup). INTERP2 2-D data interpolation (table lookup). INTERP3 2-D biharmonic data interpolation and gridding. INTERP4 2-D bilinear data interpolation. INTERP5 2-D bicubic data interpolation.

5

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

INTERPFT 1-D interpolation using a FFT method.

SPLINE

Cubic spline data interpolation.

.

.

continua

O MATLAB lista uma série de comandos relacionados com interpolação. Para maiores informações sobre cada função use o help.

1.2.3-Help da Barra de Menu

Clique com o mouse em Help e encontrará:

Table of Contents: possui uma lista das áreas de atuação do MATLAB.

Index: possui uma lista dos comandos. É só clicar em um deles para ter a sua descrição.

É fundamental que você crie o hábito de utilizar as ferramentas de ajuda On- line do MATLAB. Elas são extremamente fáceis, práticas e poderosas.

1.3-Operadores aritméticos e relacionais

1.3.1-Operadores aritméticos

1.3.1.1-Sobre escalares

Operação

Símbolo

Exemplo

adição,a+b subtração,a-b multiplicação,a.b divisão,a/b potenciação,a b

adição,a+b subtração,a-b multiplicação,a.b divisão,a/b potenciação,a b
adição,a+b subtração,a-b multiplicação,a.b divisão,a/b potenciação,a b
adição,a+b subtração,a-b multiplicação,a.b divisão,a/b potenciação,a b
adição,a+b subtração,a-b multiplicação,a.b divisão,a/b potenciação,a b

+ - * \ ou / ^

+ - * \ ou / ^
+ - * \ ou / ^
+ - * \ ou / ^
+ - * \ ou / ^

3+4

5-1

4*9.5

15/3=15\3

5^2

6

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

1.3.1.2-Sobre vetores

Considere os vetores genéricos: a=[a1 a2 a3

c.

an], b=[b1 b2 b3

bn] e o escalar

Operação

O que o MATLAB faz

Adição escalar

a+c=[a1+c a2+c

an+c]

Multiplicação escalar

a*c=[a1*c a2*c

an*c]

Adição de vetores

a+b=[a1+b1 a2+b2

an+bn]

Multiplicação de vetores

a.*b=[a1*b1 a2*b2

an*bn]

Divisão direita de vetores

a./b=[a1/b1 a2/b2

an/bn]

Divisão esquerda de vetores

a.\b=[a1\b1 a2\b2

an\bn]

Potenciação de vetores

a.^b=[a1^b1 a2^b2

an^bn]

Obs.: Observe que o ponto “. “ seguido da operação (*, /, \ ou ^) significa a operação feita elemento a elementos dos dois vetores. Além disso se você desejar efetuar uma operação escalar sobre cada coordenada do vetor isto pode ser feito através do ponto ‘. ‘seguido da operação desejada. Por exemplo: fazer a.^2 significa quadrar todas as coordenadas do vetor a.

1.3.5- Operadores relacionais e lógicos

Você pode interrogar o MATLAB a respeito de questões lógicas tanto no prompt como numa rotina, um programa .m . Os comandos utilizados são listados abaixo:

Operadores

Descrição

<

Menor que

>

Maior que

<=

Menor que

>=

Maior que

= =

Igual

~ =

Diferente

A utilização deste operadores vai desde simples comparação entre escalares:

» -2<4

ans=1

7

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

» 2>4

ans=0

Observe que quando a resposta à questão lógica levantada por você é positiva o MATLAB apresenta 1 na sua variável default para respostas. Caso contrário a resposta será 0.

ou comparação entre vetores. Por exemplo:

» a=[ 1 3 4 2 5 6];

» b=5-a;

 

Com esse comando o MATLAB comparou

» teste=a>b

os dois vetores coordenada a coordenada e

teste =

expressou o resultado do teste numa variá- vel devidamente definida para esse fim.

0

1

1

0

1

1

1.5- Definindo e manipulando matrizes

A definição de matrizes é muito simples. Observe:

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

A =

Criou-se então uma matriz quadrada de ordem 3. Observe que cada linha foi introduzida como um

1

3

4

vetor e as linhas foram separadas por pontos-e-

2

5

6

vírgulas. Se a matriz que você deseja armazenar

9

7

8

segue alguma regra de definição, ela pode ser in- troduzida via uma rotina MATLAB. Veremos is- so posteriormente.

Uma vez que já temos a matriz definida podemos fazer uma série de manipulações com ela. Vejamos algumas:

» A(3,2)

Se você deseja selecionar um determinado elemen to da matriz, entre com o nome da matriz (no

8

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

caso, A) e entre parênteses a posição dele.

ans =

 

7

»

B=A>4

 

Este comando interroga o MATLAB a respeito

B

=

dos elementos de A que são maiores do que 4 e a resposta é dada na forma de uma matriz onde as posições dos elementos maiores do que 4 são

0

0

0

ocupadas por 1s e as demais por 0s.

0

1

1

1

1

1

»

B(2,5)=3

 

Suponhamos que você deseje especificar um de

B

=

terminado elemento da matriz, atribuindo a ele um valor. Isto pode ser feito entrando o nome da ma triz com a posição entre parênteses e igualando

0

0

0

0

0

isto ao número desejado. Observe um fato interes

0

1

1

0

3

sante. O MATLAB complementa a matriz com ze

1

1

1

0

0

ros caso a posição do elemento especificado não exista na matriz original.

»

v=[- 2 5 1];

 

»

C=B;

»

C(:,6)=v'

 

Com este comando você está informando que

C

=

todos os elementos da sexta coluna de C é igual à transposta do vetor v.

0

0

0

0

0

-2

0

1

1

0

3

5

1

1

1

0

0

1

»

D=zeros(3)

 

Este comando lhe possibilita criar uma matriz nula

D

=

de ordem três. Na prática isto serve como uma re serva de memória.

0

0

0

0

0

0

0

0

0

9

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

»

A<=3

 

Novamente é levantada uma questão lógica ao

ans =

MATLAB. Que elementos de A são menores ou iguais a 3 ?

 

1

1

0

1

0

0

0

0

0

» e=A(A<=3)

Este comando cria um vetor cujos elementos são os elementos de A que são menores ou iguais a 3

e =

 
 

1

2

3

»

D(1,:)=e'

 

Aqui a primeira linha de D é substituída pela trans posta do vetor e.

D

=

1

2

3

0

0

0

0

0

0

»

F=[B D]

 

Este comando concatena numa mesma matriz as matrizes B e D. O resultado dessa

F=

 

operação é referenciado como uma nova matriz, F.

 

0

0

0

0

0

1

2

3

0

1

1

0

3

0

0

0

1

1

1

0

0

0

0

0

»

G=A(3:-1:1,1:3)

Este comando inverte a matriz A. Este

comando

G

=

funciona da seguinte forma: a construção de matri zes se dá linha por linha, coluna a coluna. Isto sig nifica que G(1,1)=A(3,1), G(1,2)=A(3,2) e assim

9

7

8

por diante segundo a definição.

2

5

6

1

3

4

10

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

» H=[G A(:,[2 3])]

H =

9

7

8

3

4

2

5

6

5

6

1

3

4

7

8

Este comando concatena a matriz G com as colu nas 2 e 3 da matriz A.

»

I=ones(3)

 

Cria uma matriz de ordem 3 totalmente preenchi- das por 1s.

I

=

 

1 1

1

1 1

1

1 1

1

»

J=zeros(3)

Cria uma matriz nula com a ordem especificada.

J

=

 

0

0

0

0

0

0

0

0

0

»

J(2:3,:)=A([1 3],:)

Com este comando você define as linhas 2 e 3 da matriz J como as linhas 1 e 3 de A.

J

=

 

0

0

0

1

3

4

9

7

8

»

J([1 3],:)=[ ]

 
 

Assim você exclui as linhas 1 e 3 de J. O mesmo pode ser feito sobre as colunas.

J

=

 

1 3

4

11

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Estas são apenas algumas manipulações possíveis envolvendo matrizes. O leitor deve se sentir estimulado a experimentar outras.

1.5- Fazendo gráficos no MATLAB

Nesta seção você aprenderá como fazer gráficos bidimensionais usando o MATLAB. O comando que mais frequentemente aparece em situações envolvendo gráficos bidimensionais é o comando plot. Com esse comando você pode plotar um vetor versus um outro vetor. Vejamos um exemplo: suponha que você realizou um experimento onde determinadas grandezas x e y foram medidas. Os resultados obtidos foram listados numa tabela.

Grandeza x

Grandeza y

0

0.02

1

0.57

2

0.99

3

1.27

4

1.50

5

1.65

6

1.78

7

1.81

8

1.86

9

1.90

10

1.92

15

1.98

20

1.99

Suponha agora que um dos seus objetivos após a realização do experimento é justamente identificar uma relação entre as duas grandezas. É justamente aí em que o MATLAB lhe pode ser útil. Você pode plotar esses pontos e através do gráfico obtido, tentar identificar tal relação. Assim você ordenará ao MATLAB:

» plot([0 1 2 3 4 5 6 7 8 9 10 15 20],[0.02 0.57 0.99 1.27 1.50 1.65 1.78 1.81 1.86

1.90 1.92 1.98 1.99],'r')

2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 0 5 10 15
2
1.8
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
0
0
5
10
15
20

12

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Observe que no comando plot existem dois argumentos, o primeiro vetor contém os elementos do domínio e o segundo os elementos da imagem. Existe ainda uma letra entre apóstrofos. Essa letra indica a cor em que desejamos o gráfico. A letra r avisa ao MATLAB que o gráfico deve ser feito em vermelho. Falaremos sobre outras cores e comandos de formatação para gráficos. A propósito, os mais atentos devem ter percebido que apesar dos poucos dados oferecidos ao MATLAB o resultado foi uma curva contínua e não um conjunto discreto de pontos. Isto se deve à propriedade que o MATLAB possui de unir os pontos dados por retas. Agora já sabemos que a relação entre y e x é da forma y = [1- exp(-a.x)]. Após essa motivação, vamos iniciar um estudo mais sistemático das ferramentas gráficas do MATLAB. Exemplos serão apresentados e novos comandos utilizados. Suponha agora que seu desejo é plotar dois gráficos no mesmo sistema de coordenadas. Bem, existe duas formas muito simples de fazer isto. Vejamo-las:

» x=linspace(-4*pi,4*pi,100);

» y=sin(x);

» z=sin(x)./x;

» plot(x,y,'b',x,z,'r')

foi

utilizado. É fácil ver que primeiramente plotou-se y versus x (em azul) e depois z versus x (em vermelho).

Observe que foi definido o vetor x como um vetor de extremos –4*pi e 4*pi, com 100 ele mentos linearmente espaçados. Em seguida y e z foram definidos e o comando plot

Uma forma alternativa de se conseguir o mesmo resultado é:

» x=linspace(-4*pi,4*pi,100);

» y=sin(x);

ele

» z=sin(x)./x;

» plot(x,y,'b')

» hold on

» plot(x,z,'r')

Aqui foi utilizado o comando hold on

“segura” o gráfico de y versus x e sobre

que

plota o gráfico de z versus x.

Observe que o comando hold on informa ao MATLAB que todos os gráficos devem ser realizados na mesma janela figure. Para voltar a situação inicial em que cada comando plot, “limpa” a janela antes de plotar, use o comando hold off no prompt da Command Window (ambiente de trabalho do MATLAB) ou na sua rotina .m.

13

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Para plotar gráficos diferentes sem apagar o gráficos anteriormente plotado, uma possibilidade é o comando figure(número da janela), que cria uma nova janela com o número por você especificado onde seu novo gráfico será realizado.

Voltando aos exemplos. O resultado obtido é mesmo nos dois casos: 1 0.8 0.6 0.4
Voltando aos exemplos. O resultado obtido é mesmo nos dois casos:
1
0.8
0.6
0.4
0.2
0
-0 .2
-0 .4
-0 .6
-0 .8
-1
-1 5
-1 0
-5
0
5
10
15

O comando subplot lhe permite plotar mais de um gráfico na mesma janela Figure do MATLAB. Vejamos um exemplo:

» x=linspace(-2*pi,2*pi,50);

» y=sin(x);

» z=cos(x);

» subplot(1,2,1)

» plot(x,y)

» subplot(1,2,2)

» plot(x,z)

Novamente se definiu um vetor x,y e z. Em seguida o comando subplot se apresenta alo cando memória para dois gráficos na janela

Figure. Essa subdivisão é feita segundo a se

guinte estrutura: O primeiro argumento diz

em quantas “linhas” a tela Figure será divi

dida. O segundo argumento informa o núme mero de “colunas”. O terceiro argumento nu mera o gráfico. Vejamos o resultado:

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -10 -5 0 5
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-10
-5
0
5
10
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -10 -5 0 5
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-10
-5
0
5
10

14

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Como personalizar um gráfico do MATLAB? Existem muitos recursos, alguns até já utilizados nos exemplos acima. O MATLAB lhe permite adicionar

grades, títulos, textos, etc. Além disso, como dito anteriormente, você pode definir

a cor e o tipo de linha em deseja visualizar o gráfico. A tabela abaixo lista as

possibilidades:

Símbolo

Cor

Símbolo

Tipo de linha

y

Amarelo

.

Ponto Círculo Marca x Marca + Asterisco Linha contínua Linha pontilhada Traços e pontos

m

Magenta

o

c

Ciano

x

r

Vermelho

+

g

Verde

*

b

Azul

-

w

Branco

:

k

Preto

-.

 

--

Linha tracejada

 

O exemplo abaixo mostra como devem ser utilizados os comandos acima:

»

x=0:0.1:2*pi;

Observe que a estrutura a ser seguida é:

»

y=exp(-x);

plot(var1,var2,’cor tipo de linha ‘)

»

z=cos(5*x);

»

h=y.*z;

»

plot(x,y,'b*',x,z,'r-.',x,h,'g')

 

1

0.8

0.6

0.4

0.2

0

-0.2

-0.4

-0.6

-0.8

-1

0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7

15

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Para inserir grades, título, nomes aos eixos e texto numa determinada posição do gráfico, usa-se os comandos listados abaixo.

Comando

Estrutura

Descrição

 

xlabel

xlabel(‘texto’)

Nomeia o eixo horizontal com o texto entre apóstrofos

ylabel

ylabel(‘texto’)

Nomeia o eixo vertical com o texto entre apóstrofos

grid

grid

Ativa grades

grid off

grid off

Desativa grades

 

title

title(‘texto’)

Coloca o

texto

entre

apóstrofos como título

text

text(xt,yt,‘texto’)

Coloca o

texto entre

apóstrofos no ponto (xt,yt) por você determinado

gtext

gtext

Coloca o

texto entre

apóstrofos em qualquer posição a ser especificada com um clique do mouse.

Veja o exemplo:

» title('Funções senoidal, exponencial e senoidal amortecida')

» ylabel('y')

» xlabel('x')

» grid

» text(0.5,0.8,'exp(-x)')

» text(2.7,0.5,'cos(5x)')

» gtext('exp(-x)*cos(5x)')

F unções senoidal, exponencial e senoidal am ortecida

1 0.8 exp(-x) 0.6 co s(5x) 0.4 0.2 0 y e xp (-x)*co s(5 x)
1
0.8
exp(-x)
0.6
co
s(5x)
0.4
0.2
0
y
e
xp (-x)*co s(5 x)
-0 .2
-0 .4
-0 .6
-0 .8
-1
0
1
2
3
4
5
6
7

x

16

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Você deve estar lembrado de quão trabalhoso era esboçar uma curva cuja equação era dada em coordenadas polares. Interseções, simetrias, avaliação em alguns pontos, eram alguns dos recursos utilizados para levar a cabo tal tarefa. Em MATLAB, você dispõe do comando polar, cujos argumentos são o angulo vetorial θ e o raio vetor r. Vejamos um exemplo simples. Suponha que desejamos plotar um arco de 30 º a 60 º pertencente a uma circunferência de raio 2. Os comandos abaixo realizam tal tarefa.

90

2

» theta=pi/6:pi/60:pi/3;

» r=2*ones(size(theta));

» polar(theta,r,'r*')

120 60 1.5 150 1 30 0.5 180 0 210 330 240 300
120
60
1.5
150
1
30
0.5
180
0
210
330
240
300

270

Observe que o primeiro argumento do comando polar é o ângulo vetorial e o segundo é o raio vetor. Vejamos um outro exemplo:

» theta=0:pi/60:4*pi;

» r=theta;

» polar(theta,r)

90 12.5664 120 60 150 6.2832 30 180 0 210 330 240 300
90
12.5664
120
60
150
6.2832
30
180
0
210
330
240
300

270

Esta é a espiral de Arquimedes. Você encontrará outras belas curvas para plotar na lista de exercícios.

Até agora todos os comandos plot empregados retornaram gráficos cujos eixos foram escalonados automaticamente. Pode acontecer que este escalonamento, em determinada situação, não satisfaça a sua vontade.

17

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

O que pode ser feito para resolver essa situação? O MATLAB possui o comando axis que lhe permite total controle sobre a personalização dos eixos horizontal e vertical. A tabela abaixo mostra as características e variações desse comando.

Comandos

 

Descrição

axis([xmin xmax ymin ymax])

O

vetor que serve de argumento para o

comando tem como coordenadas os valores minímos e máximos dos eixos horizontal e vertical.

axis auto

Retorna ao escalonamento automático, onde o xmin=min(vetor a ser plotado no eixo horizontal), xmax=max(vetor a ser plotado no eixo horizontal), etc.

axis(‘auto’)

axis(axis)

Fixa a escala nos limites atuais de modo que se o comando hold for executado, os gráficos a serem plotados na mesma janela figure usam os mesmos limites de eixos.

axis(xy)

Usa a forma padrão de coordenadas cartesianas, ou seja o menor par de

coordenadas é plotado a esquerda e os valores

axis(‘xy’)

do

eixo horizontal aumentam para a direita, ao

mesmo tempo em que os do vertical aumentam para cima.

axis ij

Usa a forma matricial em que o menor par de coordenadas é colocado no canto superior esquerdo. O eixo horizontal cresce para a direita enquanto que o vertical de cima para baixo.

axis(‘ij’)

axis(square)

Torna o gráfico quadrado e não mais retangular como é o padrão.

axis(‘square’)

axis equal

Define o mesmo fator de escalonamento para ambos os eixos

axis (‘equal’)

axis normal axis (‘normal’)

Anula os efeitos dos dois comandos acima.

axis off

Apagar nome de eixos, títulos, grades e marcadores. Só não atua sobre text e gtext.

axis (‘off’)

axis on

Liga nome de eixos, marcadores e grades

axis (‘on’)

18

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

1.6-Gráficos tridimensionais

Até agora trabalhamos exclusivamente com gráficos em duas dimensões. Nesta seção serão introduzidos os dois tipos de gráficos em 3 dimensões: os gráficos de linha e de rede.

1.6.1- Gráficos de linha

Podemos considerar este tipo de gráficos 3D como uma extensão daqueles obtidos pelo comando plot. O comando plot3 executa um gráfico de linha. Ao contrário de plot, plot3 possui três argumentos cada qual associado a uma dos eixos cartesianos. Veja o exemplo.

» t=0:pi/60:20*pi;

» plot3(sin(t),cos(t),t,'r')

Observe que foi utilizado uma hélice circular parametrizada segundo um parâmetro t. Outro fato a ser observado é que vc pode continuar editando as cores usando o mesmo procedimento já conhecido.

80 60 40 20 0 1 0.5 1 0.5 0 0 -0.5 -0.5 -1 -1
80
60
40
20
0
1
0.5
1
0.5
0
0
-0.5
-0.5
-1
-1

Obs.: A exemplo do que acontecia para gráficos 2D, é possível nomear o gráfico e seus eixos. Inclusive o eixo z. Use o comando zlabel para isso. O comando axis tem como argumento agora um vetor com 6 coordenadas. [xmin xmax ymin ymax zmin zmax]. Ou seja, os comando de formatação seguem o padrão já conhecido com extensões bastante intuitivas.

1.6.2-Gráficos de rede e superfície

Nos gráficos de rede o MATLAB irá considerar z como a imagem de um domínio formado por pontos (x,y). Ou seja, serão plotadas funções do tipo z=f(x,y). Para o MATLAB executar esta tarefa deve ser definido o domínio para x e para y. A partir deste domínio, uma grade deve ser estabelecida usando a função

19

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

meshgrid. Esta grade é que de fato servirá para o cálculo de Z e posterior confecção do gráfico. Vejamos um exemplo:

» x=-5:1:5; Observe que a função tem -5<x,y<5. O comando

» y=x; » [X Y]=meshgrid(x,y)

meshgrid gerará uma repetição para x e y, chamadas de matriz X e Y. Veja:

X =

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

-5

-4

-3

-2

-1

0

1

2

3

4

5

Y =

-5

-5

-5

-5

-5

-5

-5

-5

-5

-5

-5

-4

-4

-4

-4

-4

-4

-4

-4

-4

-4

-4

-3

-3

-3

-3

-3

-3

-3

-3

-3

-3

-3

-2

-2

-2

-2

-2

-2

-2

-2

-2

-2

-2

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

2

2

2

2

2

2

2

2

2

2

2

3

3

3

3

3

3

3

3

3

3

3

4

4

4

4

4

4

4

4

4

4

4

5

5

5

5

5

5

5

5

5

5

5

20

A função meshgrid criou uma matriz X cujas linhas são cópias do vetor x e uma matriz Y, cujas colunas são cópias do vetor y. Pra que isso afinal de contas? Bem, observe que todas as combinações possíveis para pares (x,y), podem ser conseguida a partir destas matrizes. O que vai nos permitir avaliar em todos os pontos do domínio a função z=f(x,y). O comando utilizado para plotar será

mesh(X,Y,Z) ou apenas mesh(Z). O primeiro plota os pontos do tipo (X ij ,Y ij ,Z ij ), enquanto o segundo plota pontos do tipo (i,j,Z ij ) onde i,j são índices relativos à ordem

matrizes.

das

Explicaremos a seguir, após a execução do gráfico.

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Consideremos uma função qualquer. Por exemplo z=x 2 +y 2 .

» Z=X.^2+Y.^2;

» mesh(Z) 80 60 40 20 0 15 10 10 5 5 0 0
» mesh(Z)
80
60
40
20
0
15
10
10
5
5
0
0

15

A outra forma é:

» mesh(X,Y,Z) 50 40 30 20 10 0 5 0 0 -5 -5
» mesh(X,Y,Z)
50
40
30
20
10
0
5
0
0
-5
-5

5

Veja que foi usado mesh(Z), ou seja foi plotada a matriz Z elemento a elemento. Cada ponto desta curva é da forma (i,j,Z ij ). Portanto, Z 11 foi representado por

(1,1,Z 11 ).

Veja a diferença nos eixos x e y. No gráfico ao lado eles estão dimensionados de –5 a 5. Enquanto no gráfico anterior tem-se de 0 a 15. Isto se deve ao fato que temos todos os elementos de Z

representados

graficamente por pontos (X ij ,Y ij ,Z ij ) e como sabemos X e Y somente possui elementos entre 5 e 5.

Uma vez dominada a rotina para execução de gráficos de rede, você também já aprendeu os gráficos de superfície. Como? Simples. Os gráficos de superfícies

21

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

são os mesmos de rede exceto pelo fato de que os espaços entre as linha são preenchidos com uma textura. Após a construção das matrizes X e Y, basta usar a função surf ao invés da função mesh. Veja esta função aplicada ao exemplo anterior:

» surf(X,Y,Z) 50 40 30 20 10 0 5 0 0 -5 -5
» surf(X,Y,Z)
50
40
30
20
10
0
5
0
0
-5
-5

5

Existem ainda uma série de comando relacionados com gráficos. Contudo os aqui apresentados são os mais importantes e satisfazem a 90% das necessidades. Mais recursos gráficos serão objetos de um outro capítulo dessa apostila. Lá será abordado mapas de contorno, mapas de cor, transformações geométricas, manipulação de gráficos, animações e etc.

1.7-

trigonométricas

Números

complexos,

polinômios,

equações

lineares

e

funções

Nesta seção veremos alguns tópicos da matemática cujo contato é frequente. Você aprenderá como tratar tais assuntos no MATLAB.

1.7.1- Números complexos

A unidade imaginária no MATLAB pode ser representada tanto pela letra i quanto pela letra j. Veja o exemplo:

22

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

»

i^2

» j^2

ans =

ans =

-1.0000+ 0.0000i

1.0000+ 0.0000i

Com a ajuda da unidade imaginária se define o número complexo da forma

usual:

» z1=6+8*i

z1 =

6.0000+ 8.0000i

Os comandos conj, abs e angle calculam, respectivamente, o conjugado, o módulo e o ângulo do número complexo.

»

conj(z1)

» abs(z1)

» angle(z1)

ans =

ans =

ans =

6.0000- 8.0000i

10

0.9273

As operações elementares são efetuadas da mesma maneira que com os número reais. Obs.: - Não é obrigatório o uso de ‘*’, antes de i ou j na parte imaginária do número complexo. Ou seja o MATLAB, aceitará tanto 6+8*i, quanto 6+8i. - Não se esqueça que os ângulos em MATLAB são sempre dados em radianos, por isso angle(z1) foi igual a 0.923 no exemplo anterior. - Se as letras i e j forem utilizadas para definir variáveis, o MATLAB não as considerará como unidade imaginária.

Como plotar um número complexo?

Números complexos podem ser representados como pontos no plano de Argand-Gauss. Para tanto, devemos separar a parte real da imaginária e plotar o

23

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

ponto formado por essa duas coordenadas. Isto é feito utilizando os comandos real e imag, que retornam, respectivamente, as partes real e imaginária do seu argumento complexo. Vejamos:

»

a=real(z1)

» b=imag(z1)

a

=

b =

6

8

e

assim:

»

plot(a,b,'ro')

»

xlabel('eixo real')

»

ylabel('eixo imaginário')

»

title('6+8i')

eixo

ima

giná

rio

9

8.8

8.6

8.4

8.2

8

7.8

7.6

7.4

7.2

7

6+8i

5 5.5 6 6.5 7
5
5.5
6
6.5
7

eixoreal

24

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

O resultado não é muito empolgante. Talvez com compass tenhamos um pouco mais de diversão.

» compass(z1)

Este comando plota a representação polar do número complexo.

90

10

120 60 8 6 150 30 4 2 180 0 210 330 240 300
120
60
8
6
150
30
4
2
180
0
210
330
240
300

270

Obs.: É importante

ressaltar que esse

resultado foi obtido

utilizando-se a versão 5.0 do MATLAB. Se a 4.0 for utilizada o resultado diferirá um pouco do aqui apresentado. Ele não será representado sobre um “papel” de coordenadas polares. Experimente.

Vejamos agora as representações trigonométrica e exponencial dos números

complexos. Para tanto, imagine que agora só conheçamos a magnitude ou módulo

e o argumento do número complexo. Sejam esses os valores:

Magnitude= 10 Argumento= 0.923

Conhecidos

estes

valores,

os

números

podem

entrados

na

forma

trigonométrica. O MATLAB lhe devolvera a forma retangular. Veja o exemplo:

» mag=10;

» theta=0.9273;

» z1=mag*(cos(theta)+i*sin(theta))

z1 =

6.0000 + 8.0000i

25

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Um modo mais conveniente é utilizar-se da fórmula de Euler. Veja:

» z1=mag*exp(i*theta)

z1 =

6.0000 + 8.0000i

Arranjos de números complexos

Os números complexos podem ser ordenados em arranjos da mesma maneira que os números reais. Veja o exemplo:

»

z1= 3+4i;

»

z2= 6+8i;

»

z=[0 z1 z2]

»

z

z

=

0

3.0000 + 4.0000i

6.0000 + 8.0000i

o

mesmo procedimento pode ser utilizado para arranjos bidimensionais. Aplicando

o sinal de apóstrofo, você obterá não o transposto do vetor, mas sim a transposta

conjugada do vetor que é a transposta com os elementos conjugados.

1.7.2-Polinômios

Os

polinômios

são

representados

por

arranjos

unidimensionais

no

MATLAB. Ou seja, se você deseja representar o polinômio p(x)=a n x n + MATLAB você utilizará o seguinte arranjo para os seus coeficientes.

+a

0 no

>>p=[a n

a

0 ]

Vejamos agora algumas necessidades relacionadas com polinômios e as soluções que o MATLAB nos oferece:

Raizes de polinômios

26

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Suponha que é desejado as raízes do polinômio x 3 -7x+6. O utilizado no MATLAB é ilustrado abaixo:

» p=[1 0 -7 6];

» roots(p)

método a ser

ans =

-3.0000

2.0000

1.0000

desse

fato, teríamos entrado com o polinômio x 2 -7x+6 e não o desejado. Por isso tome cuidado e entre com os coeficientes nulos também.

Observe que o coeficiente de x 2 é zero. Se esquecessemos

O problema inverso: Calculando coeficientes de raízes

Suponha agora que nos foi dado as raízes e a partir delas desejamos encontrar o polinômio associado. A função poly resolve este problema. Veja o exemplo.

» raizes=[-3 2 1];

» p=poly(raizes)

p =

1

0

-7

6

Avaliando um polinômio num conjunto de valores

Agora você possui um polinômio e deseja saber o seu valor em um determinado valor da variável ou em um conjunto de valores. Isto pode ser feito utilizando a função polyval(p,x), onde o primeiro argumento é o polinômio que se deseja avaliar e o segundo o valor ou conjunto de valores em que se deseja. Vejamos um exemplo:

» x=-5:1:5;

» polyval(p,x)

Esta função é de particular interesse quando estudarmos interpolação em outro momento deste curso

27

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

ans =

-84

-30

0

12

12

6

0

0

12

42

96

Multiplicação e divisão de polinômios

Não deixe o bom senso enganá-los. A multiplicação de polinômios não é executada da mesma maneira que uma multiplicação vetorial. Mesmo por que o que vc faria com a divisão? Existem duas funções do MATLAB dedicadas a estas operações entre polinômios. Suponha que você deseje dividir o nosso polinômio p(x) por x-2. Para isso usamos a função deconv(dividendo, divisor) que resultará num arranjo do tipo[quociente, resto]. Vejamos:

» p=[1 0 -7 6];

» divisor=[1 0 -7 6];

» dividendo=[1 -2];

» [quociente,resto]=deconv(divisor,dividendo)

quociente =

1

2

resto =

0

0

-3

0

0

1.7.3- Equações Lineares

Observe que foi definido dois vetores, quociente e resto que guardam em suas coordenadas os coeficientes dos respectivos resultados. Para multiplicação tudo se dá de uma forma mais simples.Usa-se o comando conv, cujos argumentos são os vetores relacionados aos polinômios que se deseja multiplicar.

1.8-Tomada de decisões e controle de fluxo no MATLAB

Certamente você já escreveu algum programa de computador por mais simples que ele tenha sido. Se você utilizou uma linguagem de programação

28

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

estruturada para tal, já deve conhecer as estruturas de controle do fluxo de

execução de um programa. Essa palavras-chaves de uma linguagem são extremamente importantes, pois permitem que resultados de cálculos feitos anteriormente influenciem operações futuras. Até agora, temos trabalhado com o MATLAB do ponto de vista de operadores. Mas, MATLAB também pode ser encarado como uma linguagem de programação. Portanto, você pode escrever rotinas e sub-rotinas e salvá-las como programas que você poderá utilizar toda vez que desejar. Para estar habilitado para escrever tais rotinas, você precisa estar afeito as estruturas de tomada de decisões

e controle de fluxo do MATLAB. Vamos a elas então.

1.8.1- Loops for

Essa estrutura permite que você execute uma série de comandos uma quantidade de vezes determinada. Sua forma geral é:

for x = vetor

comandos

end

Por que esse vetor? Nas linguagens que conheçemos o loop for é indexado

por uma sequência do tipo i=1,2,

Bem, se lembre que o MATLAB trabalha com vetores e portanto a sequência que você estava acostumado é representada por um vetor. Para esclarecer vejamos alguns exemplos:

Talvez você esteja se perguntando isto agora.

,n.

Suponha que estamos interessados nos gráficos da função sen(n.t), para valores de n variando de 1 a 4 no intervalo de tempo de -1 a 1. O loop for abaixo leva a cabo tal tarefa:

t = -1:0.1:1;

for n=1:4 y = sin(n*t); plot(t,y) pause

end

Criou-se o vetor n = [1 2 3 4]

29

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Tente executar este programa. O pause é um comando que permite que você plote um gráfico de cada vez. A janela figure ficará em pause mode. Após teclar em qualquer tecla o próximo gráfico será executado na janala figure.

1.8.2- Estruturas condicionais

Quando um comando deve ser executado mediante a satisfação de uma determinada condição, você utilizará estruturas condicionais. A exemplo de outras linguagens o MATLAB possui a estrutura if-else-end. Sua utilização segue a configuração abaixo:

if expressão 1 comandos else if expressão 2 comandos

else

comandos

end

Você pode se utilizar de quantos else if forem necessários. Além disso os comandos associados à primeira expressão verdadeira é que são executados. Veja um exemplo (extraído do livro MATLAB for Engineers – Biran & Breiner).

%HI_LO executa o jogo do mesmo nome

% Quando perguntado, entre sua tentativa, o computador

% irá lhe dizer se você está correto ou não, dizendo se sua tentativa está “acima”

% ou “abaixo” do número aleatório calculado pelo computador

x=fix(100*rand);

n=7;

teste=1;

for k=1:7;

numb=int2str(n);

disp([‘Você tem direito a ’ numb ‘ tentativas’]) disp( ‘Uma tentativa é um número entre 0 e 100’) tentativa=input(‘Entre sua tentativa’)

30

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

if tentativa<x disp(‘abaixo’) elseif tentativa>x disp(‘acima’)

else

 

disp(‘Você venceu’)

teste=0

break

end

n=n-1;

end

if teste>0

disp(‘Você perdeu’)

end

Este programa foi escolhido porque além de exemplificar o uso das estruturas condicionais, ele contém também uma série de comandos que você ainda não conhece, mas que aprenderá agora. Vejamos o que o programa faz. Primeiro o nome do programa: HI_LO (ou seja High-Low). O nome do programa e uma sucinta explicação do que ele é capaz de fazer é colocado à direita de sinais percentuais. Estes sinais indicam comentários. Quando você salva HI_LO ele será armazenado como um arquivo .m e como tal, poderá ser acessado pelo comando help. Se você fizer isto, este comentário aparecerá na MATLAB Command Window explicando (ou relembrando) o que o programa é capaz de fazer. A primeira linha do programa propriamente é x=fix(100*rand). Aí você encontra duas novas funções fix e rand. A segunda gera um número aleatório entre 0 e 1 que obedece a uma distribuição gaussiana de probabilidades. Este número é multiplicado por 100 gerando um número decimal entre 0 e 100. A função fix considera somente a parte inteira e assim um número inteiro é armazenado na variável x. Em seguida aparece um loop for, que lhe dará as 7 tentativas para ganhar o jogo. Temos a função int2str que transforma o seu argumento inteiro numa string. Ou seja, o número n será armazenado não mais como um número e sim como uma

string, que é chamada de numb. Aparece a gora a função disp que apresenta na tela

a string que tem como argumento. Observe que na sua primeira aparição, seu

argumento é o vetor [‘Você tem direito a ’ numb ‘ tentativas’] que contém 3 strings: ‘Você tem direito a ‘, numb e ‘ tentativas’. Veja a importância da utilização da função int2str. Se ela não fosse usada haveria problemas na execução do programa, pois a função disp esta preparada para receber argumentos string e não

31

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

números. Já na segunda aparição os colchetes são dispensados pois só temos uma string e não um vetor delas. Finalmente temos a função input na linha que segue. Esta função apresenta

a string que é seu argumento e então espera uma entrada do teclado, que pode ser

qualquer expressão do MATLAB. Esta expressão será calculada com as variáveis correntes do espaço de trabalho (se possível) e um valor será retornado como resposta. No nosso caso, estamos apenas esperando um número inteiro entre 0 e 100 a ser armazenado na variável tentativa. Vem agora a parte condicional, que você entende por simples inspeção e no interior do bloco else aparece o comando break. Este comando interrompe a execução do programa e o finaliza quando você acerta o número secreto. O resto do programa também é facilmente entendido.

1.8.3- Loops while

O loop while é utilizado até que uma determinada condição seja satisfeita. Então ele possui uma característica comum às duas estruturas anteriores. Ele realiza um teste lógico e executa um bloco de comandos repetidamente como um loop for. Veja a sua estrutura:

while expressão

Comandos

end

Vejamos um exemplo:

» t=-2:0.05:2;

» omega=2*pi;

» n=1;

» cont=n;

» fourier=0;

» while n<=7

fourier=fourier+(4/n)*cos(n*omega*t)*sin(n*pi/2);

subplot(2,2,cont)

32

Este programa gera o gráfico da aproximação por série de Fourier de uma onda quadrada. Foi usado o loop while, mas o loop for podia ser utilizado.

DEE - CURSO DE INTRODUÇÃO AO MATLAB

DEE - CURSO DE INTRODUÇÃO AO MATLAB

plot(t,fourier)

n=n+2;

cont=cont+1;

end

4 2 0 -2 -4 -2 0 2
4
2
0
-2
-4
-2
0
2
4 2 0 -2 -4 -2 0 2
4
2
0
-2
-4
-2
0
2
4 2 0 -2 -4 -2 0 2
4
2
0
-2
-4
-2
0
2
4 2 0 -2 -4 -2 0 2
4
2
0
-2
-4
-2
0
2

33