CursoMatlab_Paulo

33
DEE - CURSO DE INTRODUÇÃO AO MATLAB Universidade Federal da Bahia Escola Politécnica Departamento de Engenharia Elétrica Curso de Introdução ao MATLAB PAULO ASSUNçÃO 1

Transcript of CursoMatlab_Paulo

Page 1: CursoMatlab_Paulo

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Cur

Universidade Federal da BahiaEscola Politécnica

Departamento de Engenharia Elétrica

so de Introdução ao

MATLAB

PAULO ASSUNçÃO

1

Page 2: CursoMatlab_Paulo

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

Page 3: CursoMatlab_Paulo

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] Cria o vetor linha x cujos elementos são 1,2,3,4 e 5. x= 1 2 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

Page 4: CursoMatlab_Paulo

DEE - CURSO DE INTRODUÇÃO AO MATLAB

>>x=logspace(d1,d2,N) Cria um vetor logaritmicamente espaçado. Ou seja, ele constrói um vetor linha de 10 d1 até 10d2 com N ele- mentos onde os logaritmos na base 10 desses elemen- 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

Page 5: CursoMatlab_Paulo

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 - Polynomial and interpolation functions. matlab\funfun - 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

Page 6: CursoMatlab_Paulo

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 + 3+4 subtração,a-b - 5-1 multiplicação,a.b * 4*9.5 divisão,a/b \ ou / 15/3=15\3 potenciação,ab ^ 5^2

6

Page 7: CursoMatlab_Paulo

DEE - CURSO DE INTRODUÇÃO AO MATLAB

1.3.1.2-Sobre vetores Considere os vetores genéricos: a=[a1 a2 a3 ... an], b=[b1 b2 b3 ...bn] e o escalar c. 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

Page 8: CursoMatlab_Paulo

DEE - CURSO DE INTRODUÇÃO AO MATLAB

» 2>4 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. ans=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 expressou o resultado do teste numa variá- teste = 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

Page 9: CursoMatlab_Paulo

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 dos elementos de A que são maiores do que 4 e B = 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 terminado elemento da matriz, atribuindo a ele um B = 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 todos os elementos da sexta coluna de C é igual C = à 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 de ordem três. Na prática isto serve como uma re D = serva de memória. 0 0 0 0 0 0 0 0 0

9

Page 10: CursoMatlab_Paulo

DEE - CURSO DE INTRODUÇÃO AO MATLAB

» A<=3 Novamente é levantada uma questão lógica ao MATLAB. Que elementos de A são menores ou ans = 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 operação é referenciado como uma nova matriz, F.

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 funciona da seguinte forma: a construção de matri G = 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

Page 11: CursoMatlab_Paulo

DEE - CURSO DE INTRODUÇÃO AO MATLAB

» H=[G A(:,[2 3])] Este comando concatena a matriz G com as colu nas 2 e 3 da matriz A. H = 9 7 8 3 4 2 5 6 5 6 1 3 4 7 8 » 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

Page 12: CursoMatlab_Paulo

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

0 5 10 15 200

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

12

Page 13: CursoMatlab_Paulo

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); Observe que foi definido o vetor x como um » y=sin(x); vetor de extremos –4*pi e 4*pi, com 100 ele » z=sin(x)./x; mentos linearmente espaçados. Em seguida » plot(x,y,'b',x,z,'r') y e z foram definidos e o comando plot foi utilizado. É fácil ver que primeiramente plotou-se y versus x (em azul) e depois z versus x (em vermelho). Uma forma alternativa de se conseguir o mesmo resultado é: » x=linspace(-4*pi,4*pi,100); Aqui foi utilizado o comando hold on que » y=sin(x); “segura” o gráfico de y versus x e sobre ele » z=sin(x)./x; plota o gráfico de z versus x. » plot(x,y,'b') » hold on » plot(x,z,'r') 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

Page 14: CursoMatlab_Paulo

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:

-15 -10 -5 0 5 10 15-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

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); Novamente se definiu um vetor x,y e z. Em » y=sin(x); seguida o comando subplot se apresenta alo » z=cos(x); cando memória para dois gráficos na janela » subplot(1,2,1) Figure. Essa subdivisão é feita segundo a se » plot(x,y) guinte estrutura: O primeiro argumento diz » subplot(1,2,2) em quantas “linhas” a tela Figure será divi » plot(x,z) dida. O segundo argumento informa o núme mero de “colunas”. O terceiro argumento nu mera o gráfico. Vejamos o resultado:

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

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

14

Page 15: CursoMatlab_Paulo

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 m Magenta o Círculo c Ciano x Marca x r Vermelho + Marca + g Verde * Asterisco b Azul - Linha contínua w Branco : Linha pontilhada k Preto -. Traços e pontos -- 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')

0 1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

15

Page 16: CursoMatlab_Paulo

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

0 1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x

Funções senoidal, exponencial e senoidal amortecida

cos(5x)

exp(-x)*cos(5x)

exp(-x)

y

16

Page 17: CursoMatlab_Paulo

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. » theta=pi/6:pi/60:pi/3; » r=2*ones(size(theta)); » polar(theta,r,'r*') Observe que o primeiro argumento do comando polar é o ângulo vetorial e o segundo é o raio vetor. Vejamos um outro exemplo:

0.5

1

1.5

2

30

210

60

240

90

270

120

300

150

330

180 0

» theta=0:pi/60:4*pi; » r=theta; » polar(theta,r)

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

6.2832

12.5664

30

210

60

240

90

270

120

300

150

330

180 0

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

Page 18: CursoMatlab_Paulo

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 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(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) axis(‘xy’)

Usa a forma padrão de coordenadas cartesianas, ou seja o menor par de coordenadas é plotado a esquerda e os valores do eixo horizontal aumentam para a direita, ao mesmo tempo em que os do vertical aumentam para cima.

axis ij 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(square) axis(‘square’)

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

axis equal axis (‘equal’)

Define o mesmo fator de escalonamento para ambos os eixos

axis normal axis (‘normal’)

Anula os efeitos dos dois comandos acima.

axis off axis (‘off’)

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

axis on axis (‘on’)

Liga nome de eixos, marcadores e grades

18

Page 19: CursoMatlab_Paulo

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

-1-0.5

00.5

1

-1-0.5

00.5

10

20

40

60

80

» t=0:pi/60:20*pi; » plot3(sin(t),cos(t),t,'r')

Observe que foi utilizado umahélice circular parametrizadasegundo um parâmetro t.Outro fato a ser observado éque vc pode continuar editando as cores usando omesmo procedimento jáconhecido.

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

Page 20: CursoMatlab_Paulo

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

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

» y=x; » [X Y]=meshgrid(x,y) X = -5 -4 -3 -2 -1 0 1 2 3 4 5 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 (Xij,Yij,Zij), enquanto o segundo plota pontos do tipo (i,j,Zij) onde i,j são índices relativos à ordem das matrizes. Explicaremos a seguir, após a execução do gráfico.

-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

Page 21: CursoMatlab_Paulo

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Consideremos uma função qualquer. Por exemplo z=x2+y2.

» Z=X.^2+Y.^2; » mesh(Z)

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

05

1015

0

5

1015

0

20

40

60

80

A outra forma é: » mesh(X,Y,Z)

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

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 (Xij,Yij,Zij) e como sabemos X e Y somente possui elementos entre –5 e 5.

-5

0

5

-5

0

5

0

10

20

30

40

50

21

Page 22: CursoMatlab_Paulo

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)

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.

-5

0

5

-5

0

50

10

20

30

40

50

1.7- Números complexos, polinômios, equações lineares e funções trigonométricas 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

Page 23: CursoMatlab_Paulo

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

Page 24: CursoMatlab_Paulo

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

5 5.5 6 6.5 77

7.2

7.4

7.6

7.8

8

8.2

8.4

8.6

8.8

9

eixo real

eixoimaginário

6 + 8 i

24

Page 25: CursoMatlab_Paulo

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.

2

4

6

8

10

30

210

60

240

90

270

120

300

150

330

180 0

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

Page 26: CursoMatlab_Paulo

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)=anxn +...+a0 no MATLAB você utilizará o seguinte arranjo para os seus coeficientes. >>p=[an . . . a0] Vejamos agora algumas necessidades relacionadas com polinômios e as soluções que o MATLAB nos oferece: Raizes de polinômios

26

Page 27: CursoMatlab_Paulo

DEE - CURSO DE INTRODUÇÃO AO MATLAB

Suponha que é desejado as raízes do polinômio x3-7x+6. O método a ser utilizado no MATLAB é ilustrado abaixo: » p=[1 0 -7 6]; » roots(p) ans = -3.0000 2.0000 1.0000 O problema inverso: Ca Suponha agora quencontrar o polinômio aexemplo. » raizes=[-3 2 1]; » p=poly(raizes) p = 1 0 -7 6 Avaliando um polinômi Agora você possudeterminado valor da vautilizando a função polyvdeseja avaliar e o segundo Vejamos um exem » x=-5:1:5; » polyval(p,x)

Observe que o coeficiente de x2 é zero. Se esquecessemos desse fato, teríamos entrado com o polinômio x2-7x+6 e não o desejado. Por isso tome cuidado e entre com oscoeficientes nulos também.

lculando coeficientes de raízes

e nos foi dado as raízes e a partir delas desejamos ssociado. A função poly resolve este problema. Veja o

o num conjunto de valores

i um polinômio e deseja saber o seu valor em um riável ou em um conjunto de valores. Isto pode ser feito al(p,x), onde o primeiro argumento é o polinômio que se o valor ou conjunto de valores em que se deseja.

plo:

27

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

Page 28: CursoMatlab_Paulo

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)

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.

quociente = 1 2 -3 resto = 0 0 0 0 1.7.3- Equações Lineares 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

Page 29: CursoMatlab_Paulo

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,...,n. Talvez você esteja se perguntando isto agora. 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: 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 Criou-se o vetor n = [1 2 3 4] y = sin(n*t); plot(t,y) pause end

29

Page 30: CursoMatlab_Paulo

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

Page 31: CursoMatlab_Paulo

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

Page 32: CursoMatlab_Paulo

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:

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.

» 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

Page 33: CursoMatlab_Paulo

DEE - CURSO DE INTRODUÇÃO AO MATLAB

plot(t,fourier) n=n+2; cont=cont+1; end

-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

33