apostila (reparado)_2

76
AUTOR: EMERSON MORAES FEAGRI/UNICAMP-SP

Upload: rodolpho-tinini

Post on 05-Aug-2015

98 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: apostila (Reparado)_2

AUTOR: EMERSON MORAES – FEAGRI/UNICAMP-SP

Page 2: apostila (Reparado)_2

SUMÁRIO

1. INTRODUÇÃO

2. AJUDA

2.1. O Comando Help

2.1.1. O comando LOOKFOR_

2.2. O “Help Desk”

2.3. O sistema Matlab

3. CARREGANDO O MATLAB

4. OPERAÇÕES BASICAS E EXPRESSÕES LOGICAS

5. CONSTANTES

EXERCICIOS DE FIXAÇÃO

6. VARIÁVEIS

6.1. Comentário e pontuações 6.2. Variáveis literais

6.3. Obtendo Informações da Área de Trabalho EXERCICIOS DE FIXAÇÃO

7. FUNÇÕES MATEMÁTICAS

7.1. Comandos de auxílio

7.2. Números Complexos EXERCICIOS DE FIXAÇÃO

8. VETORES

9. ENDEREÇAMENTO DE VETORES

9.1.Operações entre vetores

10. MATRIZES

10.1. Operações com Matrizes 10.2. Transposta 10.3. Adição e Subtração

10.4. Multiplicação 10.5. Divisão

10.6. Elementos das Matrizes 10.7. Submatrizes 10.8. Remoção de colunas e linhas

11. POLINÔMIOS

EXERCICIOS DE FIXAÇÃO

12. GRÁFICOS NO MATLAB

12.1. Gráficos Bidimensionais

12.2. Estilos de Linha e Símbolo e o Comando subplot 12.3. Area

12.4. Outros recursos para gráficos bidimensionais 12.5. Pizza ou Torta 12.6. Barras Verticais

12.7. Gráfico em coordenadas polares 12.8. Formatar Gráficos (legendas, eixos, etc.)

Page 3: apostila (Reparado)_2

12.9. Utilizando Matrizes para armazenar e plotar graficos

12.10. Mais Comandos e Funções

13. PLOTANDO GRAFICOS 3D E CONTORNO

13.1. Plot3D 13.2. Pizza 3D ou Torta 3D

13.3. Mesh 13.4. Meshgrid e Surf 13.5. Gráficos de superfície

EXERCICIOS DE FIXAÇÃO

14. IMPORTANDO E EXPORTANDO DADOS DO EXCEL

15. EXPRESSÕES SIMBOLICAS

16. CALCULO I NO MATLAB

16.1. Limites 16.2. Limites à esquerda e à direita

16.3. Derivadas 16.4. Derivadas superiores

16.5. Derivadas Trigonométricas 16.6. Integrais 16.7. Integrais trigonométricas

16.8. Integrais definidas 16.9. Gráficos (ezplot)

16.10. Máximos e Mínimos de Funções EXERCICIOS DE FIXAÇÃO

17. PROGRAMAÇÃO

17.1. Arquivos .m

17.2. Gerenciamento de arquivos 17.3. Criando funções no MatLab

17.4. Regras para escrever uma function

18. CONTROLE DE FLUXO

18.1. Estruturas Condicionais 18.2. Estrutura if-end

18.3. Estrutura if-else-end 18.4. Estrutura if-elseif-end

19. ESTRUTURA DE REPETIÇÃO

19.1. Estrutura for-end

19.2. Estrutura while-end

20. AJUSTE DE CURVAS E INTERPOLAÇÃO

20.1. Comando spline 21. ANIMAÇÃO GRÁFICA

21.1. Animação bidimensional 21.2. Animação tridimensional EXERCICIOS DE FIXAÇÃO

22. EXTRAS

22.1. Movimentar textos em gráficos (gtext)

22.2. Animação com a função comet 22.3. Barra de progresso Simples

EXERCICIOS DE FIXAÇÃO

Page 4: apostila (Reparado)_2

Atenção !!!

Este material tem por objetivo servir de apoio aos alunos do programa TOPE (Todos

Podem Ensinar) da Unicamp. Não me responsabilizo pelo uso indevido desse material. Não me responsabilizo, bem como, proíbo a comercialização desse material, em parte ou integralmente.

Este material está em sua primeira versão e não foi revisado, logo podem existir erros de ortografia e gramática.

Todos os exemplos mostrados nesse material foram testados. Para maiores informações sobre o software MatLab® consulte:

www.mathworks.com

Emerson Moraes

Page 5: apostila (Reparado)_2

1. INTRODUÇÃO

O que é o Matlab?

O Matlab é um sistema para cálculo científico que proporciona um ambiente de fácil utilização com uma notação intuitiva, mas poderosa. Permite a realização de algoritmos numéricos sobre matrizes com o mínimo de programação. Além disso, no ambiente

Matlab é possível à criação e manipulação de matrizes sem a necessidade de dimensionamento prévio e a manipulação das variáveis pode ser realizada de forma

interativa. O termo “Matlab” tem origem na conjugação dos termos “MATrix” e “LABoratory”. Este documento pretende ser apenas uma introdução muito breve ao Matlab e permitir a

um utilizador não “iniciado” começar a dominar os aspectos mais básicos em pouco tempo. A leitura deste documento deve ser realizada ao lado de um PC com o Matlab,

para o utilizador poder testar os exemplos e fazer os diferentes exercícios.

Page 6: apostila (Reparado)_2

2. AJUDA

2.1. O comando HELP

Para esclarecer a maior parte das dúvidas acerca da utilização de uma dada função do Matlab o comando help é de grande utilidade. Se pretender, por exemplo, informação sobre a função sin, basta fazer:

>> help sin

obtendo-se a seguinte descrição:

SIN Sine. SIN(X) is the sine of the elements of X.

O Matlab possui todas as funções organizadas em grupos e a própria estrutura de diretórios onde o Matlab é armazenado em disco reflete esse fato. Por exemplo, todas as

funções de álgebra linear estão armazenadas no diretório matfun. Para obter uma lista completa deste tipo de funções basta fazer:

>> help matfun

Como não é fácil decorar os nomes de todas as categorias de funções, existe uma janela de ajuda mais organizada, bastando para tal escrever o comando:

>> helpwin

2.2. O comando LOOKFOR

Quando se pretende encontrar uma função para resolver um problema, mas desconhece-

se se existirá alguma adequada no Matlab, o comando lookfor permite pesquisar as primeiras linhas do “help” de todas as funções da instalação do Matlab. Esta pesquisa é adequada para resolver a maior parte das situações uma vez que a primeira linha do

"help" de uma função contém sempre uma descrição sumária da sua funcionalidade. O seguinte exemplo procura pela palavra “inverse”.

>> lookfor inverse Se pretender que a função lookfor pesquise todas as linhas do “help”, pode-se utilizar a

opção -all, tal como o seguinte exemplo ilustra.

>> lookfor -all inverse

2.3. O “Help Desk”

A partir da versão 5.0, o Matlab vem acompanhado com uma ajuda em formato "html" e

todos os manuais em formato “pdf”. Essa informação pode ser encontrada no endereço http://www.mathworks.com.

2.4. O sistema Matlab

O sistema Matlab é constituído pelas seguintes partes: • A linguagem

Page 7: apostila (Reparado)_2

Permite a manipulação e criação de matrizes de forma rápida e intuitiva. Diferentes

soluções para um problema podem ser testadas numa fração do tempo que levaria com outras linguagens (C ou Fortran por ex.). Possui um conjunto muito vasto de funções

que permitem resolver problemas complexos de forma eficiente. • O ambiente de trabalho O Matlab proporciona um ambiente de trabalho que permite a gestão e visualização das

variáveis, ler e gravar variáveis em disco e gerar programas em linguagem Matlab, possibilitando assim a automatização de cálculos complexos.

• Gráficos As funções de criação, visualização e manipulação de gráficos são muito fáceis de usar e permitem a criação de gráficos 2D e 3D. O ajuste de escala é automático e o utilizador

pode começar a utilizar as funções de geração de gráficos pouco tempo depois do primeiro contacto com o ambiente do Matlab.

• ”Toolboxes” O Matlab disponibiliza um conjunto de pacotes de funções para as mais variadas áreas de cálculo científico, sendo estes denominados “toolboxes”. Existem “toolboxes” para

estatística, processamento de sinal, processamento de imagem, controlo, cálculo simbólico, etc.

Page 8: apostila (Reparado)_2

3. CARREGANDO O MATLAB

No gerenciador de programas do Windows, um duplo clique no ícone MATLAB

carrega o aplicativo. Uma vez inicializado o MATLAB, aparecerá na tela uma janela de comandos e o "prompt" padrão (EDU>> ou >>) são exibidos na tela. A partir deste ponto,

o MATLAB espera um comando (instruções) do usuário. Todo comando deve ser finalizado teclando-se Enter.

• Editor de Linhas de Comando

As teclas com setas podem ser usadas para se encontrar comandos dados anteriormente, para execução novamente ou sua reedição. Por exemplo, suponha que você entre com

>> sen(0)

Ao apertar a tecla Enter , o MATLAB responde com uma mensagem de erro:

??? Undefined function or variable sen.

Isto acontece porque para se determinar o seno de um ângulo é necessário digitar em inglês o comando sin. Ao invés de reescrever a linha inteira, simplesmente pressione a tecla "seta para cima". O comando errado retorna, e você pode, então, mover o cursor

para trás usando a tecla "seta para esquerda" ou o ponto de inserção com o "mouse" ao lugar apropriado para inserir a letra i:

» sin(0) ans =

0

Note que o MATLAB chamou o resultado de ans (answer = resposta). Além das teclas com setas, pode-se usar outras teclas para reeditar a linha de comando. A seguir é dada

uma breve descrição destas teclas:

Page 9: apostila (Reparado)_2

4. OPERAÇÕES BASICAS E EXPRESSÕES LOGICAS

O MATLAB oferece as seguintes operações aritméticas básicas:

A ordem nas expressões segue a ordem matemática - potência, seguida da multiplicação e da divisão, que por sua vez são seguidas pelas operações de adição e subtração. Parêntesis podem ser usados para alterar esta ordem. Neste caso, os parêntesis mais

internos são avaliados antes dos mais externos. Uma expressão se diz lógica se os operadores são lógicos e os operandos são relações

e/ou variáveis do tipo lógico. Os operadores relacionais realizam comparações entre valores do mesmo tipo. Os operadores relacionais utilizados pelo MATLAB são:

Note que (=) é usado para atribuição de um valor a uma variável, enquanto que (==) é usado para comparação de igualdade. No MATLAB os operadores relacionais podem

ser usados para comparar vetores de mesmo tamanho ou escalares. O resultado de uma relação ou de uma expressão lógica é verdadeiro ou falso; contudo, no MATLAB o resultado é numérico, sendo que 1 significa verdadeiro e 0 significa falso.

Por exemplo: >> 5>8

ans = 0

>> 5==5 ans = 1

Os operadores lógicos permitem a combinação ou negação das relações lógicas.

Os operadores lógicos do MATLAB são:

Page 10: apostila (Reparado)_2

5. CONSTANTES

O MATLAB faz cálculos simples e científicos como uma calculadora. Para tal, os

comandos devem ser digitados diretamente no prompt (>>) do MATLAB, já que este trata-se de um software interativo. Por exemplo:

>> 3*25 + 5*12 ans =

135 Observe que no MATLAB a multiplicação tem precedência sobre a adição.

Uma constante numérica no MATLAB é formada por uma sequência de dígitos que pode estar ou não precedida de um sinal positivo (+) ou negativo (-) e pode conter um

ponto decimal (.). Esta sequência pode terminar ou não por uma das letras e, E, d ou D, seguida de outra sequência de dígitos precedida ou não de um sinal de (+) ou de (-). Esta segunda sequência é a potência de 10 pela qual a primeira sequência deve ser

multiplicada. Por exemplo:

>> 1.23e-1 significa 0,123.

O formato em que uma constante numérica é mostrada no MATLAB segue, como

opção default, os seguintes critérios: se um resultado é inteiro, o MATLAB mostra o número como inteiro; quando o resultado é real, o MATLAB mostra o número com 4 dígitos à direita do ponto decimal; se os dígitos do resultado estiverem fora desta faixa,

o MATLAB mostra o resultado usando a notação científica. Este default pode, entretanto, ser modificado utilizando-se o Numeric Format do item Options na barra

de menus. Usando-se a constante numérica (33,5), considere a tabela a título de exemplo dos formatos numéricos do MATLAB:

Page 11: apostila (Reparado)_2

EXERCICIOS DE FIXAÇÃO

Operações Básicas

1- Efetue as seguintes operações:

a- 137 + 255 e exiba o resultado com 4 dígitos decimais.

b- 400 – 137.43 e exiba o resultado com 4 dígitos decimais.

c- 15 / 6 e exiba o resultado com 16 dígitos.

d- 25 * 7 e exiba o resultado com 2 dígitos.

e- 2 ^ (-5) e exiba o resultado com 4 e 16 dígitos, 4 e 16 dígitos mais expoente.

f- (2.5)^(0.5) e exiba o resultado com 4 e 16 dígitos, 4 e 16 dígitos mais

expoente.

g- Exiba o numero 5.479452054794520 na forma racional

Lembre-se: entre antes das operações com o comando indicando como os

resultados devem ser exibidos (4,2,16 dígitos ou racional, etc). Uma dica é

sempre usar a tecla “para cima” para repetir os comandos que você já usou.

Expressões Lógicas

2- Usando o Matlab responda as afirmações abaixo:

a- 5>4 True ( ) False ( )

b- 50==49 True ( ) False ( )

c- 3.4<=3.5 True ( ) False ( )

d- 3>5 True ( ) False ( )

e- 1~=0 True ( ) False ( )

f- 1~=0 e 2>1 True ( ) False ( )

g- 14>=2 e 2>6 True ( ) False ( )

h- 14>=2 ou 2>6 True ( ) False ( )

i- 2*5==10 True ( ) False ( )

j- 5*7==34 e 5/3<=3 True ( ) False ( )

k- 49/7~=6 e 2^9==1024 True ( ) False ( )

l- 2^10<1025 ou 144^0.5==12 True ( ) False ( )

Page 12: apostila (Reparado)_2

6. VARIÁVEIS

Alternativamente, você pode usar variáveis no Matlab para armazenar informação. Por

exemplo: >> q1=3, p1=25, q2=5, p2=12

q1 = 3

p1 = 25 q2 =

5 p2 =

12 >> total=q1*p1+q2*p2 total =

135

Primeiro, criamos quatro variáveis, q1, p1, q2 e p2, atribuindo a elas os seus valores

respectivos. Observe que o sinal de igual (=) aqui significa atribuição. O que estiver à direita do sinal de igual é “colocado” na variável que estiver à esquerda. Finalmente,

criamos uma variável chamada total que recebeu o total da compra. Os nomes das variáveis devem consistir de uma única palavra, conforme as regras expressas na tabela.

As variáveis podem ser redefinidas a qualquer momento, bastando para isso atribuir lhes um novo valor. Alguns nomes são usados para variáveis predefinidas, ou seja, são variáveis especiais

do MATLAB. Estas são:

Page 13: apostila (Reparado)_2

6.1. Comentário e pontuações

Exemplo:

» q1=3, p1=25,q2=5; p2=12; %Exemplo de uso da vírgula, ponto e vírgula q1 = 3

p1 =

25

Os espaços em branco entre os operadores (aritméticos, lógicos, relacionais) e as variáveis (ou constantes) são opcionais. O mesmo para vale para a vírgula, o ponto e

vírgula e o símbolo de porcentagem. No entanto, o espaço em branco entre a última variável (ou constante) de uma linha e os três pontos é obrigatório (veja exemplo anterior).

6.2. Variáveis literais

Uma variável pode conter uma cadeia de caracteres ao invés de um número. Estes caracteres são manipulados como vetores linha (assunto que será tratado mais adiante).

A cadeia de caracteres deve estar limitada por apóstrofos (‘cadeia de caracteres’) para ser atribuída a uma variável literal. Por exemplo:

>> a = ‘ MATLAB ‘ a =

MATLAB

Page 14: apostila (Reparado)_2

6.3. Obtendo Informações da Área de Trabalho

Os exemplos de declarações mostrados nos itens acima criaram variáveis que são armazenadas na Área de Trabalho do MATLAB. Executando:

>> Who

obtêm-se uma lista das variáveis armazenadas na Área de Trabalho:

Que mostra as seis variáveis geradas em nossos exemplos anteriores, incluindo ans.

Uma informação mais detalhada mostrando a dimensão de cada uma das variáveis correntes são obtidos com whos que para nosso exemplo produz:

Em qualquer momento, podemos ver o valor que está contido em uma variável,

simplesmente digitando no prompt o seu nome.

>> total total = 135

As variáveis no espaço de trabalho podem ser removidas incondicionalmente

usando o comando clear. Por exemplo: >> clear p2 %remove a variávelp2

>> clear %remove todas as variáveis do espaço de trabalho

O comando save é usado para gravar as variáveis do espaço de trabalho em um arquivo (.mat) em disco. O comando load é usado para recuperar os dados gravados em um

arquivo pelo comando save e colocá- los no espaço de trabalho. Maiores informações a respeito da sintaxe destes comandos podem ser obtidas através do comando help, a ser

tratado posteriormente. O comando clc limpa a janela de comandos e coloca o cursor na posição inicial.

Page 15: apostila (Reparado)_2

EXERCICIOS DE FIXAÇÃO

Operação com Variáveis

1- Um aluno da FEF que tinha 1,80 metros de altura e 90 kg pediu a você que calcula se o seu IMC (Índice de Massa Corporal).

a- Utilizando seus conhecimentos em variáveis e Matlab, escreva uma função que retorne o valor do IMC do aluno. Dado: IMC = peso dividido pela altura vezes altura.

Utilize as variáveis: “a” para altura e “p” para peso e “IMC”. (sem aspas).

b- Exiba o resultado com 4 e 2 casas decimais.

c- Utilizando os comandos lógicos responda:

- Ele está com o peso normal, ou seja, com seu IMC entre 18,6 e 24,9.

True ( ) False ( )

d- Ele está com sobrepeso, ou seja, com seu IMC entre 25 e 29,9.

True ( ) False ( )

2- Sabendo que em uma determinada população em uma cidade, o numero de nascidos é igual a 2320 e o numero de falecidos igual á 1784. Calcule usando os conhecimentos até aqui aprendidos:

a- O crescimento vegetativo (CV). Dado: CV=N° nascimentos menos N° de falecimentos. Utilize as variáveis “Nn” para o numero de nascidos e “Nf” para o numero de

falecidos e “CV”

b- Se nessa cidade existem 25000 habitantes e a área da mesma é de 5000 km² determine a Densidade Demográfica dessa cidade.

Dado: Densidade Demográfica é igual ao N° de habitantes divididos pela área

do território. Utilize as variáveis: “DD” para densidade demográfica “Hb” para habitantes e

“At” para a área da cidade.

3- Você foi ao “Ladrão de Açúcar” e comprou 12 bananas, 5 tomates, 1

desodorante, 16 cervejas, 4 pães e 3 miojos. Sabendo que o preço unitário em centavos de cada um desses itens é de 40 (banana), 30 (tomate), 800

(desodorante), 109 (cerveja), 25 (pão) e 110 (miojo) e usando o nome de cada item como nome das respectivas variáveis responda: a- Quanto irá pagar em centavos por sua compra (Use a variável TotalCents).

b- Quanto irá pagar em reais por sua compra (Use as variáveis Real e TotalReal).

c- Sabendo que você dispõem apenas de notas de 3 reais, responda quantas notas serão necessárias. (Use a variável Nota3). Obs: para a solução use a função rem(x,y) que mostra o resto da divisão de

x por y, e pense um pouco mais para responder essa questão com um numero inteiro de notas de 3 reais desconsiderando os centavos que

faltaram para completar o valor total a ser pago e sem acrescentar mais nenhuma variável.

Page 16: apostila (Reparado)_2

7. FUNÇÕES MATEMÁTICAS

O MATLAB tem uma série de funções científicas pré-definidas. A palavra função no

MATLAB tem um significado diferente daquele que tem na Matemática. Aqui, função é um comando, que pode ter alguns argumentos de entrada e alguns de saída. Algumas dessas funções são intrínsecas, ou seja, não podem ser alteradas pelo usuário. Outras

funções estão disponíveis em uma biblioteca externa distribuídas com o programa original (MATLAB TOOLBOX), que são na realidade arquivos com a extensão ".m"

criados a partir das funções intrínsecas. A biblioteca externa (MATLAB TOOLBOX) pode ser constantemente atualizada à medida que novas aplicações são desenvolvidas. As funções do MATLAB, intrínsecas ou arquivos ".m", podem ser utilizadas apenas no

ambiente MATLAB. As categorias gerais de funções matemáticas disponíveis no MATLAB incluem:

· Matemática elementar; · Funções especiais; · Matrizes elementares e especiais;

· Decomposição e fatorização de matrizes; · Análise de dados;

· Polinômios; · Solução de equações diferenciais; · Equações não- lineares e otimização;

· Integração numérica; · Processamento de sinais.

A maioria das funções pode ser usada da mesma forma que seria escrita matematicamente. Por exemplo:

>> x=sqrt(2)/2 x =

0.7071 >> y=acos(x)

y = 0.7854

>> y_graus=y*180/pi y_graus =

45.0000

Estes comandos calculam o arco cujo cosseno é (2^0.5) / 2 , inicialmente em radianos, depois em graus. Abaixo segue uma lista de funções científicas disponíveis:

Page 17: apostila (Reparado)_2

7.1. Comandos de auxílio

No MATLAB, pode-se obter ajuda sobre qualquer comando ou função. Isto pode ser feito basicamente de três formas: interativamente através do menu de barras, através do

comando help ou do comando lookfor. Digitando-se simplesmente o comando help,

>> help

o MATLAB mostra uma listagem de todos os pacotes disponíveis. Ajuda sobre um pacote específico ou sobre um comando ou função específica é obtida com o comando help <tópico>, onde tópico pode ser o nome de um pacote, de um comando ou função.

Por exemplo:

>> help sign SIGN Signum function. For each element of X, SIGN(X) returns 1 if the

element is greater than zero, 0 if it equals zero and -1 if it is less than zero. For complex X,

SIGN(X) = X ./ ABS(X). O comando help é a maneira mais simples de se obter auxílio no caso do usuário

conhecer o tópico em que ele quer assistência. Note que no exemplo mostrado a função SIGN está escrita em letras maiúsculas somente para destacar.

Deve-se lembrar de que todos os comandos do MATLAB devem ser escritos em letras minúsculas. Portanto, para utilizar esta função deve-se digitar:

>> sign (x)

O Comando lookfor provê assistência pela procura através de todas as primeiras linhas dos tópicos de auxílio do MATLAB e retornando aquelas que contenham a palavra-chave especificada. O interessante deste comando é que a palavra chave não precisa ser

um comando do MATLAB. Sua sintaxe é lookfor <palavra-chave>, onde palavra-chave é a cadeia de caracteres que será procurada nos comandos do MATLAB. Por

exemplo, para se obter informações sobre funções para se resolver integral:

Page 18: apostila (Reparado)_2

>> lookfor integral

ELLIPKE Complete elliptic integral.

EXPINT Exponential integral function. DBLQUAD Numerically evaluate double integral. INNERLP Used with DBLQUAD to evaluate inner loop of integral.

QUAD Numerically evaluate integral, low order method. QUAD8 Numerically evaluate integral, higher order method.

COSINT Cosine integral function. SININT Sine integral function. ASSEMA Assembles area integral contributions in a PDE problem.

COSINT Cosine integral function. FOURIER Fourier integral transform.

IFOURIER Inverse Fourier integral transform. SININT Sine integral function. BLKPIDCON The output of the block is the sum of proportional, integral and

Apesar da palavra integral não ser um comando do MATLAB, ela foi encontrada na

descrição de 14 comandos. Tendo esta informação, o comando help pode ser usado para exibir informações a respeito de um comando específico, como por exemplo:

>>help quad

7.2. Números Complexos

Algumas linguagens de programação requerem um tratamento especial para números

complexos, o que não é o caso do MATLAB. Números complexos são permitidos em todas as operações e funções no MATLAB. Os números complexos são introduzidos

usando-se as funções especiais i e j. Eles podem ser representados de várias maneiras. Por exemplo:

>> z1=3+4*i z1 =

3.0000 + 4.0000i >> z2=3+4j z2 =

3.0000 + 4.0000i >> z1+z2

ans = 6.0000 + 8.0000i

Identidade de Euler: relaciona a forma polar de um número complexo com a sua forma retangular.

Page 19: apostila (Reparado)_2

No MATLAB, a conversão entre as formas polar e retangular de um número complexo

utiliza as seguintes funções:

• real: parte real de um número complexo

• imag: parte imaginária de um número complexo

• abs: calcula o valor absoluto ou módulo de um número complexo

• angle: calcula o ângulo de um número complexo

Exemplo: >> x=1-4i x =

1.0000 - 4.0000i >> a=real(x)

a = 1 >> b=imag(x)

b = -4

>> M=abs(x) M = 4.1231

>> theta=angle(x)*180/pi theta =

-75.9638

EXERCICIOS DE FIXAÇÃO

1- Calcule o seno, o coseno, a tangente, a raiz quadrada de π/2.

2- Calcule o logaritmo e a raiz quadrada de -1.

3- Calcule o valor da função e^(x) para x=1, x=0, x=2 e x=100.

4- Calcule o valor da função sin(x+pi/10) ∗ cos(x) para x= 0,x=pi,x=pi/2.

5- Calcule o máximo divisor comum entre x=15 e y=5 e guarde em uma variável

qualquer.

6- Calcule o mínimo múltiplo comum entre x=84 e y=36 e guarde em uma variável

qualquer.

7- Calcule o resto da divisão de x=273 por y=31 e guarde em uma variável

qualquer.

8- Guarde em uma variável o resultado da multiplicação da variável do item 5 pela

do item 7 dividida pela do item 8.

9- Calcule a soma dos números complexos x=5 + 3i e y=3 – 2j onde z=x+y, e

calcule a parte real de “z” guardando na variável “zreal”. Calcule também o

valor absoluto de “z” guardando o mesmo na variável “zabs”.

Page 20: apostila (Reparado)_2

8. VETORES

O MATLAB permite a manipulação de linhas, colunas, elementos individuais e partes

de matrizes.

Na tabela á baixo, tem-se um resumo das diversas formas de se construir um vetor no

MATLAB.

Exemplo 1:

>> x = 1 : 5 %gera um vetor linha contendo os números de 1 a 5 com incremento

unitário. Produzindo x =

1 2 3 4 5 >> x=1:10.5 x=

1 2 3 4 5 6 7 8 9 10

Exemplo 2:

>> z = 6 : -l : l z =

6 5 4 3 2 1

Exemplo 3:

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

>> k = linspace (0, l, 6)

k =

0 0.2000 0.4000 0.6000 0.8000 1.0000

%gera um vetor linearmente espaçado de 0 a 1, contendo 6 elementos.

>> x=linspace(1,10.5,5) x=

1.0000 3.3750 5.7500 8.1250 10.5000

Page 21: apostila (Reparado)_2

Exemplo 4:

>> x=logspace(0,2,5) x=

1.0000 3.1623 10.0000 31.6228 100.00

Exemplo 5:

>> x=[8 6 8.10 5-6j] x=

8.0000 6.0000 8.1000 5.0000-6.0000i

Nos exemplos acima os vetores possuem uma linha e várias colunas (vetores linha). Da

mesma forma podem existir vetores coluna (uma coluna e várias linhas). Para se criar

um vetor coluna elemento por elemento estes devem estar separados por ( ; ). Por

exemplo:

>> v=[1.5;-3.2;9]

v =

1.5000

-3.2000

9.0000

Esses vetores coluna podem também ser criados a partir dos comandos utilizados

anteriormente para criar os vetores linha, acompanhados do símbolo ( ' ), que é o

operador de transposição. Exemplo:

>> y=(1:0.5:3)'

y =

1.0000

1.5000

2.0000

2.5000

3.0000

>> z=[0 -2.3 4 sqrt(33)]'

z =

0

-2.3000

4.0000

5.7446

>>z=1:1:3

z =

1 2 3

Page 22: apostila (Reparado)_2

9. ENDEREÇAMENTO DE VETORES

No MatLab, cada um dos elementos de um vetor podem ser acessados através de seu

índice que identifica cada uma das colunas. Por exemplo: >> x=1:10 x=

1 2 3 4 5 6 7 8 9 10

>> x(3) % Acessa o terceiro elemento de x ans = 3

>> x(5) % Acessa o quinto elemento de x

ans = 5

Esses elementos de um vetor também podem ser acessados em blocos. Por exemplo:

>> c=linspace(10,40,7) c = 10 15 20 25 30 35 40

>> c(3:5) % terceiro a quinto elemento de c

ans = 20 25 30

>>c(5:-2:1) % quinto, terceiro e primeiro elementos de c ans =

30 20 10 O endereçamento indireto também é possível, permitindo referenciar os elementos em

qualquer ordem: >> c([4 1]) %quarto e primeiro elementos

ans = 25 10

No caso de vetores coluna, os comandos acima funcionam de maneira similar. Por exemplo:

>> d=c' d = 10

15 20

25 30 35

40

Page 23: apostila (Reparado)_2

>> d([4 1]) %quarto e primeiro elementos

ans = 25

10

>> d(5:-2:1)

ans = 30 20

10

9.1. Operações entre vetores

As operações básicas entre vetores só são definidas quando estes tiverem o mesmo

tamanho e orientação (linha ou coluna). Estas operações são:

Page 24: apostila (Reparado)_2

10. MATRIZES

O MATLAB trabalha essencialmente com um tipo de objeto, uma matriz numérica

retangular ( 1x1; 2x2; 3x3; i ( linha) x j (coluna); etc).

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 colchetes em volta do grupo de

elementos que formam a matriz. Por exemplo, entre com a expressão :

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

%Pressionando <enter> o MATLAB mostra o resultado

A =

1 2 3

4 5 6

7 8 9

As linhas das matrizes também podem ser definidas através dos comandos utilizados

anteriormente para se definir vetores linha. Por exemplo:

>> A=[1:3;linspace(4,9,3);0:.5:1]

A = 1.00 2.00 3.00

4.00 6.50 9.00 0 0.50 1.00

Os elementos de uma matriz (ou de um vetor) também podem ser definidos por operações ou funções matemáticas. Por exemplo:

>> B=[15 7;sqrt(36) cos(pi/3);12/7 2.5^2] B = 15.0000 7.0000

6.0000 0.5000 1.7143 6.2500

10.1. Operações com Matrizes

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

· Adição; · Subtração; · Multiplicação;

· Divisão à direita; · Divisão à esquerda;

· Exponenciação;

Page 25: apostila (Reparado)_2

10.2. Transposta

O caracter apóstrofo, " ' " , indica a transposta de uma matriz. Considere os exemplos a

seguir: >>A=[1 2 3; 4 5 6; 7 8 0] A =

1 2 3 4 5 6

7 8 0 >> B = A'

B = 1 4 7

2 5 8 3 6 0

>> x = [-1 0 2]' x =

-1

0

2

10.3. Adição e Subtração

A adição e subtração de matrizes são indicadas, respectivamente, por "+" e "-". As

operações são definidas somente se as matrizes tiverem as mesmas dimensões. Por exemplo, a soma com as matrizes mostradas acima, A + x, não é correta porque A é 3x3

e x é 3x1. Porém, >> C = A + B

é aceitável, e o resultado da soma é C = 2 6 10

6 10 14 10 14 0

A adição e subtração também são definidas se um dos operadores é 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:

>> y = x - 1 resulta em y =

-2 -1

1

Page 26: apostila (Reparado)_2

10.4. Multiplicação

A multiplicação de matrizes é indicada por "*". A multiplicação x*y é definida somente se a segunda dimensão de x for igual à primeira dimensão de y. A multiplicação

>> x'* y é aceitável, e resulta em

Ans = 4

É evidente que o resultado da multiplicação y'*x será o mesmo. Existem dois outros produtos que são transpostos um do outro.

>> x*y'

Ans = 2 l - l 0 0 0

-4 -2 2

>> y*x' Ans = 2 0 -4

1 0 -2

-1 0 2

O produto de uma matriz por um vetor é um caso especial do produto entre matrizes. Por exemplo A e X,

>> b = A*x que resulta em B =

5 8

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

>> pi*x Ans =

-3.1416 0 6.2832

Além da multiplicação matricial e escalar, podemos ter a multiplicação por elemento de

matrizes de mesma dimensão. Esse tipo de operação é feita utilizando-se um ponto ( . ) antes do operador de multiplicação ( * ). Ou seja, se A e B são matrizes definidas por A=[ a11 a12 ... a1n ; a21 a22 ... a2n ; ... ; am1 am2 ... amn] e B=[ b11 b12 ... b1n ;

b21 b22 ... b2n ; ... ; bm1 bm2 ... bmn ], então A.*B =aij*bij. Por exemplo:

Page 27: apostila (Reparado)_2

>> A.*B

ans = 1 8 21

8 25 48 21 48 0

10.5. Divisão

Existem dois símbolos para divisão de matrizes no MATLAB "\" e "/". Se A é 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), mas o resultado é obtido diretamente. Em geral, • X = A\B é a solução de A*X = B

• X = B/A é a solução de X*A = B Por exemplo, como o vetor b foi definido como A*x, a declaração

>> z = A\b

resulta em Z = -1

02 A divisão por elemento entre matrizes é definida de maneira similar à multiplicação por

elemento, ou seja, A./B= aij/bij e A.\B= aij\bij , onde A e B têm mesma dimensão.

10.6. Exponenciação

A expressão A^p eleva A à p-ésima potência e é definida se A é matriz quadrada e p

um escalar. Se p é um inteiro maior do que um, a exponenciação é computada como múltiplas multiplicações. Por exemplo:

>> A^3 Ans = 279 360 306

684 873 684 738 900 441

A exponenciação por elemento entre matrizes é definida de maneira similar à multiplicação por elemento, ou seja, A.^B= aij bij, onde A e B têm mesma dimensão. De maneira similar, a potenciação por elemento entre uma matriz e um escalar apresenta

as seguintes formas: A.^c=aij^c e c.^A=c^aij

10.7. Elementos das Matrizes

Um elemento individual da matriz pode ser indicado incluindo os seus subscritos entre

parênteses. Por exemplo, dada a matriz A:

A = 1 2 3 4 5 6

7 8 9

Page 28: apostila (Reparado)_2

a declaração: >> A(3,3) = A(1,3) + A(3,l)

resulta em: A =

1 2 3 4 5 6

7 8 10 >> A(1:3,2)

Ans = 25

8 >> A(1:3,2:3)

é uma submatriz 3x2, que consiste das três linhas e das últimas duas colunas de A. Ans =

2 3 5 6

8 10

Utilizando os dois pontos no lugar de um subscrito denota-se todos elementos da linha ou coluna. Por exemplo:

>> A(1:2,:) Ans = 1 2 3

4 5 6

é uma submatriz 2x3 que consiste da primeira e segunda linhas e todas colunas da matriz A.

• Funções: o MATLAB possui algumas funções que se aplicam a matrizes como, por

exemplo, as funções size (fornece o número de linhas e colunas de uma matriz) e length

(fornece o maior valor entre o número de linhas e colunas). O MATLAB tem também

funções que se aplicam individualmente à cada coluna da matriz produzindo um vetor

linha com os elementos correspondentes ao resultado de cada coluna. Se a função for

aplicada à transposta da matriz, os resultados serão relativos a cada linha da matriz. Se o

argumento da função for um vetor, o resultado será um escalar. Algumas dessas funções

são:

Page 29: apostila (Reparado)_2

10.8. Submatrizes.

Sendo B uma matriz 5x5 unitária, podemos defini- la através da seguinte função: >> B = ones (5)

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 Sendo C uma matriz de zeros 3x4, podemos defini- la como:

>> C=zeros(3,4) C =

0 0 0 0 0 0 0 0 0 0 0 0

Para que o MATLAB gere uma matriz de números aleatórios entre 0 e 1, utilizamos a

função rand (veja também a função randn, utilizando o comando help ). Exemplo:

>> D=rand(2,3)

D =

0.2190 0.6789 0.9347

0.0470 0.6793 0.3835

10.9. Remoção de colunas e linhas

É possível remover de uma dada matriz qualquer conjunto de linhas e colunas. Para tal,

basta atribuir o valor de uma matriz vazia definida por“[]” às linhas e colunas que se

pretende remover. No exemplo que se segue, elimina-se a 2a coluna da matriz A.

>>a= [1 2; 3 4];

>>A= [a a; a a]

A =

1 2 1 2

3 4 3 4

1 2 1 2

3 4 3 4

>>A(:,2)= []

A =

1 1 2

3 3 4

1 1 2

3 3 4

A remoção de um elemento isolado de uma matriz não é possível uma vez que esta

deixaria de respeitar as propriedades de uma matriz.

>> A(1,2)=[]

??? Indexed empty matrix assignment is not allowed.

Page 30: apostila (Reparado)_2

11. POLINÔMIOS

Existe no ambiente Matlab um conjunto de funções para manipular polinómios. A

definição de polinômios é feita criando vetores cujos elementos são os coeficientes do

polinômio ordenados por potência decrescente tal como o exemplo seguinte ilustra. Para

representar o polinômio p(x) = x2 − 3x + 2, cria-se o vetor:

>>p=[1 -3 2];

e para calcular as suas raízes existe a função

>>r= roots(p)

r=

2

1

Para obter os coeficientes de um polinômio a partir das raízes pode-se utilizar a função

>>poly(r)

ans=

1 -3 2

Também é possível calcular o valor de um polinómio num conjunto de pontos

utilizando a função polyval tal como o exemplo ilustrado abaixo:

>>polyval(p,r)

ans=

0

0

e que, como se pode ver, calculou o valor do polinómio nos seus zeros.

O produto entre dois polinómios é obtido através da função conv (convolução). O

exemplo seguinte ilustra o produto entre os polinômios:

“x2 + 1” e “x3 + x – 1” dado por “x5 + 2x3 − x2 + x – 1”

>>p1= [1 0 1];

>>p2= [1 0 1 -1];

>>conv(p1,p2)

ans=

1 0 2 -1 1 -1

Page 31: apostila (Reparado)_2

EXERCICIOS DE FIXAÇÃO

1- Calcule o valor da função sin(x+pi/10) ∗ cos(x) em 100 pontos do intevalo

[−π,π].

2- Calcule o produto dos polinômios “x^6 + 10” e “x^2 − 2x + 3”

3- Obtenha o polinómio cujas raízes são os números inteiros 1, 2 e 3.

4- Calcule os zeros do seguinte polinómio p(x) = x^3 + 4x^2 − 3x + 1. Calcule o

valor do polinómio em 100 pontos da forma x = e^(jω) com ω ∈ [0 ... 2π].

5- Crie uma matriz 3 × 3 em que todos os elementos são iguais a 3.

6- Crie um vector coluna com 100 elementos aleatórios com uma distribuição

uniforme.

7- Crie uma matriz 4 × 4 em que todos os elementos são iguais a 1 + j2.

8- Considere as matrizes e escalares:

c1=2 e c2=3

A=[21 14 45; 35 14 0; 1 84 13] e B=[10 12 11;2 10 15; 20 5 40 ];

Calcule: a- A.*B

b- B.*A c- Inv(A)*inv(B) d- Inv(A).*inv(B)

e- Usando o comando det(“matriz”) que calcula o determinante. Calcule det(A) e det (B)

f- Resolva o sistema Ax=b onde b=[20 1 25]. Dica (x=A\b ou x=inv(A)*b) OBS: b está declarado como vetor linha, logo para transforma- lo em vetor coluna aplica-se o comando de transposta (b=b’).

Page 32: apostila (Reparado)_2

12. GRÁFICOS NO MATLAB

A construção de gráficos no MATLAB é mais uma das facilidades do sistema.

Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada.

12.1. Gráficos Bidimensionais

Estes são os comandos para plotar gráficos bidimensionais:

Se Y é um vetor, plot(Y) produz um gráfico linear dos elementos de Y versos o índice dos elementos de Y. Por exemplo, para plotar os números:

Y=[0.0, 0.48, 0.84, 1.0, 0.91, 0.6,0,14],

Entre com o vetor e execute o comando plot:

>> Y = [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14]; >> plot(Y)

Page 33: apostila (Reparado)_2

Se X e Y são vetores com dimensões iguais, o comando plot(X,Y) produz um gráfico

bidimensional dos elementos de X versos os elementos de Y, por exemplo:

>> t = 0:0.05:4*pi; >> y = sin(t); >> plot(t,y)

O MATLAB pode também plotar múltiplas linhas e apenas um gráfico. Existem duas maneiras, a primeira é usado 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 vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de Y versos o vetor X.

• Se X é uma matriz e Y é um vetor, plot(X,Y) plota sucessivamente as linhas ou

colunas de X versos o vetor Y.

• Se X e Y são matrizes com mesma dimensão, plot(X,Y) plota sucessivamente as

colunas de X versos as colunas de Y.

• Se Y é uma matriz, plot(Y) plota sucessivamente as colunas de Y versos o índice de

cada elemento da linha de Y. A segunda, e mais fácil, maneira de plotar 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))

Page 34: apostila (Reparado)_2

12.2. Estilos de Linha e Símbolo e o Comando subplot

Os tipos de linhas, símbolos e cores usados para plotar gráficos podem ser controlados

se os padrões não são satisfatórios. Por exemplo: >> X = 0:0.05:1;

>> subplot(1,2,1), plot(X,X.^2,’k*’)

>> subplot(1,2,2), plot(X,X.^2,’k --')

Uma coisa que você deve ter notado, é que o comando subplot também segue uma ideia

semelhante a de uma matriz. No nosso exemplo anterior, tínhamos plotado dois gráficos

numa mesma janela. Observe os índices no subplot anterior:

subplot(1,2,1) e subplot(1,2,2)

Podemos ver que ver que os dois primeiros índices, ou seja, 1 e 2 representam uma

matriz linha, com uma linha e duas colunas, já o terceiro índice 1 no primeiro subplot e

2 no segundo, significa a posição em que os gráficos apareceram. Para um melhor

entendimento vamos plotar 4 gráficos numa única janela.

Page 35: apostila (Reparado)_2

Esses gráficos são:

>> x=[0:1:20];

y1=x;

y2=2*x;

y3=x.^2;

y4=x.^3;

subplot(2,2,1),plot(x,y1,'+')

subplot(2,2,2),plot(x,y2,'o')

subplot(2,2,3),plot(x,y3,'-')

subplot(2,2,4),plot(x,y4,'.')

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

Page 36: apostila (Reparado)_2

12.3. Area

Gera um gráfico em forma de áreas. Se x e y são vetores, a função é equivalente a

plot(x,y) com a parte inferior do gráfico pintada. Quando y é uma matriz, cada coluna é

tratada como um vetor independente das outras, porém as áreas (uma cor para cada

coluna) são colocadas uma sobre a outra. Exemplo:

>>x=[-10:1:10];y = [-10:1:10]; area(x,y);

12.4. Outros recursos para gráficos bidimensionais

Existem comandos que permitem plotar em escalas logarítmicas, gráficos de barras ou

pizzas. Os seguintes comandos podem ser usados no lugar de plot.

>> x=[0:1:50]

>> y=exp(x);

>> loglog(x,y);

Ao invés dos valores de x e y serão plotados os valores dos logaritmos desses

valores.

>> semilogx(x,y);

Neste último caso escala logarítmica será usada somente para os valores do eixo x.

>> semilogy(x,y);

Page 37: apostila (Reparado)_2

12.5. Pizza ou Torta

Gráficos em formato de torta ou pizza são criados usando este comando. O vetor a contém valores a serem plotados e b é um vetor lógico opcional que descreve as fatias a

serem separadas. Exemplo: gráfico de torta. Exemplo:

>> a = [0.5 1 1.5 2.0 1 0.3];

>> pie(a);

Um recurso interessante é mover no gráfico os valores máximos ou mínimos de um

conjunto de dados. Exemplo:

Você e mais 4 amigos foram ao Star Clean e encheram a cara, na hora de pagar a conta,

de 171 $, você pagou 31 $ , o amigo 1 47 $, amigo 2 e 3 40 $ cada e por ultimo o amigo

4 esperto pagou apenas 13 $. Vamos mostrar no gráfico pizza, a distribuição da conta

paga por cada amigo incluindo você e destacar quem pagou mais e quem pagou menos.

Para tal basta declarar o vetor que mostra quanto cada um pagou e usar os comando

abaixo:

>> pagar=[31 47 40 40 13]; % vetor de pagamentos feito por cada um

>>pie(pagar); %Plota o gráfico com o total (%) de pagamentos feitos por cada um

>>pie(pagar,pagar==max(pagar));%Destaca no gráfico o maior pagamento em %

>>pie(pagar,pagar==min(pagar));%Destaca no gráfico o menor pagamento em %

Page 38: apostila (Reparado)_2

12.6. Barras Verticais

Utilizando o exemplo a seguir:

O valores gastos por você no Star Clean durante sua graduação anualmente foram os

seguintes:

Ano $

2000 500

2001 800

2002 1000

2003 1500

2004 2100

>> ano=[2000 2001 2002 2003 2004];

>> gasto=[500 800 1000 1500 2100];

>> bar(ano,gasto)

12.7. Gráfico em coordenadas polares

Neste caso cada ponto do plano é identificado a um raio r (distância da origem) e

um ângulo tetha (aquele que forma o raio com o eixo X). Cada ponto de uma curva no

plano é identificado com um par (r,tetha). Exemplo 1:

>> tetha=[0:2*pi/100:2*pi];%divisão do intervalo [0,2pi] em 100 partes

>> r = tetha/(2*pi);

>> subplot(1,2,1);

>> polar(tetha,r);%gráfico em coordenadas polares

Page 39: apostila (Reparado)_2

Neste caso o raio é inversamente proporcional à constante 2*pi. Quando o ângulo tetha

aumenta de 0 a 2pi e o raio também aumenta proporcionalmente. Então a curva é

circular afastando-se do centro que é a própria origem, isto é, uma espiral.

>> tetha=[0:2*pi/100:2*pi];%divisão do intervalo [0,2pi] em 100 partes

>> polar(tetha,sin(2*tetha).*cos(2*tetha));

Vimos alguns dos mais diversos tipos de gráficos, no MatLab existe uma infinidade de

modelos de gráficos 2D, por isso uma consulta no help pode lhe ajudar e muito. A ideia

principal é saber o que se quer fazer, em seguida procurar.

12.8. Formatar Gráficos (legendas, eixos, etc.)

A seguir vamos mostrar como formatar gráficos. Apara uma boa compreensão analise

os códigos e tem repetir pelo menos uma vez [copie e cole no workspace], e tente

entender o que cada uma das funções fazem.

Formatar Eixos

Comandos:

- xlabel = insere uma legenda no eixo x.

- ylabel = insere uma legenda no eixo x.

- title = insere um titulo na janela.

- grid [on ou off] = cria uma grade superposta ao gráfico atual

Page 40: apostila (Reparado)_2

Exemplo 1: A posição de um veículo é dado pela seguinte equação y=f(t)=2*t^(2)-2*t.

Plote um gráfico que mostre a sua posição em função do tempo no intervalo de 0 a 10

segundos espaçado segundo a segundo.

>>t=[0:1:10];

y=2*t.^(2)-2*t;

figure;plot(t,y, 'r-- ');

xlabel(' tempo [s] ');

ylabel(' posição [m]');

title('posicao x tempo');

grid on;

Comandos:

- figure = Plota graficos e janelas diferentes

Exemplo 2: Plotar o gráfico anterior em uma janela e o seno de um ângulo entre o

intervalo que vai de 0 a pi espaçado de pi/10.

>>ang=[0:pi/10:pi]; y1=sin(ang);

figure ; plot(ang,y1, 'g--');

xlabel(' theta [rads] ');

ylabel(' sin (theta)');

title('sin(theta) x theta');

grid on;

t=[0:1:10];y2=2*t.^(2)-2*t;

figure;plot(t,y2, 'r--');

xlabel('tempo [s]');

ylabel('posição[m]');

title('posicao x tempo');

grid on;

Page 41: apostila (Reparado)_2

Exemplo 3:

>> a = [0.5 1 1.5 2.0 1 0.3];

pie(a,a==max(a));

title('Produção de grãos');

legend('Arroz','Feijão','Soja','Trigo','Milho','Cevada');

Exemplo 4:

>> a = [0.5 1 1.5 2.0 1 0.7];

b = [1960 1970 1980 1990 2000 2010];

figure

bar(b,a);%barra vertical

xlabel('Anos de produção');

ylabel('Produção de grãos (em milhões de toneladas)');

axis xy;%ordena os valores do eixo Y em forma ascendente

figure

barh(b,a);%barra horizontal

xlabel('Anos de produção');

ylabel('Produção de grãos (em milhões de toneladas)');

axis xy;%ordena os valores do eixo Y em forma ascendente

Page 42: apostila (Reparado)_2

Exemplo 5:

>> x = linspace(0,2*pi,30);

y= sin(x);

z= cos(x);

a= 2*sin(x).*(cos(x));

b= sin(x)./(cos(x)+eps);

subplot(2,2,1)

plot(x,y)

axis([0 2*pi -1 1]);%intervalos para ambos os eixos x e y

title('sin(x)')

subplot(2,2,2)

plot(x,z);

axis([0 2*pi -1 1]);

title('cos(x)');

subplot(2,2,3);

plot(x,a);

axis([0 2*pi -1 1]);

title('2 sin(x) cos(x)');

subplot(2,2,4);

plot(x,b);

axis([0 2*pi -20 20]);

title('sin(x)/cos(x)');

Page 43: apostila (Reparado)_2

12.9. Utilizando Matrizes para armazenar e plotar graficos

A forma mais fácil de explicar esse método de armazenar e plotar gráficos é através de

um exemplo. Um estudante de biologia está analisando o crescimento de 3 espécies de bactérias. A tabela abaixo passada pelo seu orientador mostra a função de crescimento de cada uma

dessas espécies:

O mesmo estudante ficou incumbido de plotar o gráfico de crescimento em função do

tempo [0 á 20 segundos] dessas 3 espécies e nós vamos fazer o mesmo.

>> x=[0:1:20];

A=[ (x)' (x.^2)' (x.*log(x+1))'];

plot(A, '-o')

legend('espA','espB','espC');

Atenção:

Veja que os vetores dentro da matriz estão transpostos, pois sem calcular a transposta dos mesmos dá um erro de-

vido a dimensão da matriz. Por isso ao usar esse método lembre-se sempre

disso. O tamanho dessa matriz é o segui- te: A[20 3].

Page 44: apostila (Reparado)_2

12.10. Mais Comandos e Funções

Exemplo 6:

Comandos:

- text = Insere uma nota no seu gráfico

- axis [on off] = Liga e desliga os eixos

>> x=0:0.05*pi:3*pi;

y = x.*3.*sin(x)+x/10;

set(gcf,'Color',[1 1 1]);%fundo branco

area(x,y);

xlabel('AbcisaX ');

title('Funções Trigonométricas','FontSize',14,...

'Fontweight','bold','FontAngle','italic');

ylabel('Ordenada = x.3 * Sin(x) + x/10');

axis off;

text(3,5,'{\it grafico area.}')

Exemplo 6:

Comandos:

Latex Interpreter= Interpreta Latex

>>text('Interpreter','latex',...

'String','$$\int_0^x\!\int_y dF(u,v)$$',...

'Position',[.5 .5],'FontSize',16)

axis off

Page 45: apostila (Reparado)_2

13. PLOTANDO GRAFICOS 3D E CONTORNO

Estes são alguns comandos para plotar gráficos tridimensionais e contornos.

13.1. Plot3D

Para traçar gráficos curvilíneos 3D utiliza-se o comando ou função plot3. No próximo

exemplo a variável t aumenta com o par (cos(t),sin(t)) que está dentro de uma

circunferência de raio 1. Ao mesmo tempo o par (cos(t),sin(t)) está girando em sentido

antihorário no plano X-Y e a terceira componente de t está aumentando e se afastando

deste plano, logo o gráfico corresponde a uma linha que vai girando e se afastando do

plano X-Y, é uma hélice, cujo ponto de partida é o ponto (0,1,0) = (cos(0),sin(0),0). O

gráfico está desenhado na figura abaixo.

>>t = linspace(0,10*pi,200);

plot3(sin(t),cos(t),t);

title('H é l i c e : curva paramétrica');

xlabel('X = Sin(t)');

ylabel('Y = cos(t)');

zlabel('Z = t');

Page 46: apostila (Reparado)_2

13.2. Pizza 3D ou Torta 3D

A versão tridimensional do gráfico de torta ou pizza é obtida como mostrado no

exemplo abaixo. Preste atenção pois estamos entrando com comandos novos (destaque

e colormap hsv):

>> a = [0.5 1 1.5 2.0 1 0.3];

destaque = [1 1 1 1 0 1]; %pedaços em destaque

pie3(a,destaque); %formato pizza tridimensional

title('Produção de grãos');

colormap hsv; %opção de tonalidade de cor

13.3. Mesh

O comando mesh(X,Y,Z) cria uma perspectiva tridimensional plotando os elementos da

matriz Z em relação ao plano definindo pelas matrizes X e Y. Por exemplo:

>> [X,Y] = meshgrid(-3:.125:3);

Z = peaks(X,Y);

meshc(X,Y,Z);

axis([-3 3 -3 3 -10 5])

contour(Z,10);

Page 47: apostila (Reparado)_2

e o comando contour(Z,10) mostra a projeção da superfície acima no plano xy com 10

iso-linhas:

[X,Y] = meshgrid(-3:.125:3);

Z = peaks(X,Y);

meshc(X,Y,Z);

axis([-3 3 -3 3 -10 5])

contour(Z,10);

13.4. Meshgrid e Surf

[X,Y] = meshgrid(-2:.2:2, -2:.2:2);

Z = X .* exp(-X.^2 - Y.^2);

surf(X,Y,Z)

13.5. Gráficos de superfície

A seguir é apresentado um exemplo com explicações de cada comando gráfico. >> x = -7.5:0.5:7.5; %vetor ou lista x

y = -7.5:0.5:7.5; %vetor ou lista y

[X,Y] = meshgrid(x,y);%matrizes coordenadas (x,y)

R = sqrt(X.^ 2+Y.^ 2)+eps;%soma-se eps para evitar divisão por zero

Z = sin(R)./R+1;

mesh(X,Y,Z);%gráfico de rede

hold on;%segura as saídas gráficas posteriores na janela atual

pcolor(X,Y,Z);%provoca a aparição de uma malha colorida no domínio

shading interp;%a cor é definida de acordo com a altura

contour(X,Y,Z,20,'k');%20 curvas de nível em preto,escolha automática

colorbar;%apresenta uma escala colorida de valores

hold off;%cada comando gráfico será apresentado em uma janela distinta

Page 48: apostila (Reparado)_2

EXERCICIOS DE FIXAÇÃO

1- Leia e releia essa parte de plotar gráficos e tente alterar, é na tentativa e erro que

grandes descobertas acontecem.

2- Plote o gráfico de seno e cosseno em janela diferentes, com legendas, titulo, eixo

x no intervalo de 0 a 2*pi e eixo y no intervalo de -1 a 1, os eixos devem

apresentar as descrições “X” no eixo x e “Y” no eixo y, a cor do gráfico de seno

deve ser azul e a do cosseno vermelha.

3- Repita o exercício anterior, porém, os gráficos devem estar juntos numa mesma

janela usando o comando subplot e o gráfico de cosseno o comando grid deve

estar ligado, e o do seno com os eixos ocultos.

4- Em uma aula super agradável no matadouro da FEM (Faculdade de Engenharia

Mecânica) seu professor de ResMat passou a seguinte tarefa:

Calcular a força de cisalhamento V(x) e o momento fletor M(x) da viga sujeita

ao carregamento distribuído. Onde x (metros) corresponde o intervalo [0 10].

Plote os gráficos usando o comando subplot e o comando area , com o grafico

de cisalhamento acima do de momento fletor, com títulos “Diagrama

Cisalhamento” e “Diagrama Momento Fletor”, com os eixos x com a legenda

“metros” e o y com “N” para o cisalhamento e “N.m” para o de momento fletor.

As equações estão na figura abaixo:

Page 49: apostila (Reparado)_2

14. IMPORTANDO E EXPORTANDO DADOS DO EXCEL

No MatLab também é possível importar e exportar dados de extensão dat, txt, xls.

No nosso curso vamos trabalhar com o Excel (.xls) devido ao seu maior uso. Siga o

exemplo abaixo:

1° Verifique qual o diretório em que o MatLab está para poder exportar e importar para

um lugar que você conheça. O padrão é “work”, porém como no meu caso, alterei para

Desktop. Veja a seguir.

2° Exportar dados para o Excel.

Vamos declarar uma matriz qualquer, no caso A=[0 1 2 3;4 5 6 7; 8 9 0 1].

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

A =

0 1 2 3

4 5 6 7

8 9 0 1

Na sequencia entramos com o comando:

>> xlswrite('test.xls',A,1)

Ao lado podemos ver o resultado

Atenção: Todos os dados

exportatos serão salvos no

diretório corrente, no meu

caso Desktop. Para

importar o arquivo do

Excel deve também no

diretório corrente, mais

uma vez, Desktop no meu

caso.

Page 50: apostila (Reparado)_2

3° Agora vamos importar os dados enviados ao Excel. Use o seguinte comando:

>>B=xlsread('test.xls',1)

B =

0 1 2 3

4 5 6 7

8 9 0 1

O que fizemos até agora foi o seguinte, criamos uma matriz A, exportamos para o

Excel, em seguida importamos esses dados guardando o mesmo em uma matriz B.

Agora vamos fazer uma operação simples e exportar para plan 2 do Excel. Veja abaixo.

>> C=2*B

C =

0 2 4 6

8 10 12 14

16 18 0 2

>> xlswrite('test.xls',C,2)

Em suma, vimos como é simples exportar e importar dados do Excel usando o MatLab.

Algumas ressalvas devem ser feitas:

- Caso queira importar dados, certifique-se de que a planilha esteja no mesmo diretório

do MatLab, se a mesma não estiver, mova-a para o diretório, caso contrario alterar o

diretório como fizemos no começo desse tutorial.

- Ao importar dados do Excel certifique se que a mesma se encontra no modelo 97-2003

pois nos formatos recentes eu ainda não consegui. Talvez devido a minha versão de

MatLab ser relativamente antiga (2009). Talvez ás versão mais recentes deem suporte á

qualquer formato.

- Ao exportar dados, certifique se que a planilha objeto, esteja fechada, caso contrario,

começará a dar erros e os dados não serão e exportados.

Page 51: apostila (Reparado)_2

15. EXPRESSÕES SIMBOLICAS

No MATLAB, é possível manipularmos expressões que além de números 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

Estes comandos mandam o MATLAB simplificar a expressão (sin(x))^2+(cos(x))^2.

Primeiro precisamos dizer ao MATLAB que x é uma variável simbólica, depois

pedimos para simplificar a expressão que envolve x. Neste caso usamos uma função

chamada simplify. Neste caso, a função simplify tem como argumento de entrada uma

expressão simbólica e de saída também.

Uma vez definido que a variável x é uma variável simbólica, podemos definir

expressões que envolvem esta variável. Por exemplo, dadas duas funções f(x) =

2x^2+3x-5 e g(x) = x^2-x+7, podemos fazer uma série de operações algébricas

envolvendo estas funções.

Por exemplo:

>> syms x

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

Page 52: apostila (Reparado)_2

O MATLAB pode realizar operações mais avançadas sobre expressões simbólicas. A

função compose calcula a composição das funções f(x) e g(x) em f(g(x)), a função finverse encontra a inversa funcional de uma expressão e a função subs substitui uma

variável por um número (ou por outra variável) em uma expressão. 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 resolver equações. Por exemplo, para resolver a equação ax^2+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 enxergar usando a

função pretty.

>> pretty(ans)

Page 53: apostila (Reparado)_2

Abaixo segue um resumo das funções para manipulação de expressões algébricas:

diff(f) - calcula a derivada de f.

compose(f,g) - determina a composta f(g(x)). expand(expr) - expande uma expressão expr. finverse(expr) - determina a inversa funcional da expressão expr.

pretty(expr) - exibe a expressão expr numa forma mais bonita. simple(expr) - procura encontrar uma forma mais simples de escrever uma expressão

expr. simplify(expr) - simplifica a expressão expr. solve(expr) - acha a(s) solução(es) da equação expr = 0.

subs(expr,x,a) - substitui na expressão expr a variável x por a. syms x y z a b - define as variáveis simbólicas x, y, z, a e b.

Existem várias outras funções para manipulação de expressões algébricas. Você pode obter informações sobre elas digitando help symbolic. Uma função interessante

que mostra as capacidades do MATLAB em tratar com funções matemáticas é

funtool que é uma calculadora para funções.

Page 54: apostila (Reparado)_2

16. CALCULO I NO MATLAB

16.1. Limites

Para efetuar uma operação com limites no MATLAB, o comando que se deve dar é:

limit(f(x),x,a) onde f(x) é a função que se quer achar o limite, x é a variável e a é o

número no qual o x está tendendo ( x→a ).

Exemplo: Achar o limite abaixo:

>> syms x

>> limit((1+x^2)/(1-x^2),x,2)

ans =

-5/3

16.2. Limites à esquerda e à direita

Para calcular limites à esquerda e à direita, o comando é: limit(f(x),x,a,’left’) e limit(f(x),x,a,’right’), onde ‘left’ e ‘right’ são os comandos para

calcular à esquerda e à direita, respectivamente.

Exemplo:

Achar os limites a seguir:

>> limit(x/(x-3),x,3,'right')

ans =

Inf

>> limit((x+1)/((x-1)^3),x,1,'left')

ans =

-Inf

Page 55: apostila (Reparado)_2

16.3. Derivadas

Para o cálculo de derivas, o comando no MATLAB é:

diff(f(x)), onde f(x) é a função que se quer determinar a derivada.

Exemplo: Derivar as funções abaixo:

>> diff((2*x^2)+3*x)

ans =

4*x+3

>> diff(1/(3-x))

ans =

1/(3-x)^2

16.4. Derivadas superiores

As derivadas superiores são simples de se calcular no MATLAB, o comando para tal

operação é o mostrado abaixo:

diff(f(x),2), esse exemplo é para a derivada segunda da função f(x), para derivada

terceira, coloca-se 3 no lugar do número 2, para derivada quarta, o numero 4 e assim por

diante.

Exemplo: Achar a derivada segunda das seguintes funções:

>> diff(1/(3-x),2)

ans =

2/(3-x)^3

>> diff(x-(1/x),2)

ans =

-2/x^3

Page 56: apostila (Reparado)_2

16.5. Derivadas Trigonométricas

Exemplo: Derivar as seguintes funções:

>> syms x

>> diff(sin(x))

ans =

cos(x)

>> diff(cos(2*x))

ans =

-2*sin(2*x)

>>diff(tan(3*x+5))

ans =

3+3*tan(3*x+5)^2

16.6. Integrais

Na integração de funções, o comando que o MATLAB reconhece para Atal operação é:

int(f(x)) , pode – se colocar a função dentro dos parênteses, ou então definir uma função

f e simplesmente escrever int(f).

Exemplo: Integrar as funções abaixo:

>> syms x

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

>> int(f)

ans =

1/8*x^4-1/3*x^3+1/4*x^2

Page 57: apostila (Reparado)_2

>> f=((2*x^4 - 3*x^3 + 5)/(7*x^2));

>> int(f)

ans =

2/21*x^3-3/14*x^2-5/7/x

16.7. Integrais trigonométricas

Exemplo: Integrar as seguintes integrais:

>> syms x

>> int(cos(2*x))

ans =

1/2*sin(2*x)

>> int(sin(3*x+2))

ans =

-1/3*cos(3*x+2)

16.8. Integrais definidas

Ao se calcular integrais definidas no MATLAB, o comando necessário fornecer o

seguinte comando:

int(f(x),a,b), onde a é o limite inferior e b, o limite superior da integral.

Exemplos:

Page 58: apostila (Reparado)_2

>> syms x

>> int((2*x)/(x-3)^2,0,2)

ans =

4-2*log(3)

>>int((1-2*x-3*x^2),0,1)

ans =

-1

16.9. Gráficos (ezplot)

No MATLAB têm-se como traçar gráficos. Para tal pode-se usar dois métodos: o

primeiro quando se quer um gráfico e não é necessário ter um valor máximo e um valor

mínimo do domínio, e quando o valor do domínio são os números reais.

Um exemplo para a plotagem de gráficos quando o domínio são os números reais é o

gráfico da reta f = x^2 – y^4 . O comando para fazer esse gráfico é: ezplot('f')

>> ezplot('x^2-y^4')

O outro modo de construir gráficos, tendo os limites do domínio é através do

comando: ezplot(f(x),[valor minimo, valor maximo])

>> ezplot(2-(15*x)+(9*x^2)-x^3,[-5, 10])

Page 59: apostila (Reparado)_2

16.10. Máximos e Mínimos de Funções

Uma operação muito útil para o cálculo que o MATLAB contém é a operação onde se

consegue otimizar um problema, ou seja, é a operação onde se acha os valores de

máximo e de mínimo de funções. O MATLAB não faz o gráfico da função, apenas

fornece os valores máximos e mínimos das funções.

O comando para o cálculo dos mínimos é:

x=fminbnd(f(x),x1,x2), onde x1 e x2 são os intervalos onde se procura os máximos e

mínimos; sendo que .

Para o cálculo dos máximos, o comando é:

g(x)= -f(x)

x=fminbnd(g(x),x1,x2)

A estratégia de se usar a função oposta à função usada no cálculo dos mínimos é devido

ao fato de que o máximo na função f é o máximo na função oposta g.

Page 60: apostila (Reparado)_2

EXERCICIOS DE FIXAÇÃO

1- Mais uma vez, você está no matadouro lembra? , e seu querido professor de

ResMat lhe passa a seguinte questão. Plote o diagrama de V(x) e M(x) no

intervalo de 0 á 10 metros, sabendo que a viga representada na figura abaixo está

sujeita a uma carga distribuída p(x)= - 20 [N/m]. Como dica ele dá as condições

de contorno c1 e c2, que possuem os valores de 100 [N] para c1 e 0 para c2.

Dados para esse caso:

Dicas:

- Desclare a variável simbólica x usando o comando syms

- Em seguida declare as constantes de integração c1 e c2

- Declare a função p(x) que no MatLab vai ficar >> p = - 20;

- Use as funções mostradas acima para encontrar V(x), que no nosso caso chamaremos no

MatLab apenas de V provisoriamente.

- Use as funções mostradas acima para encontrar M(x) , que no nosso caso chamaremos no

MatLab apenas de M provisoriamente.

- Declare um vetor chamado metro que inicia no 0 e vai de 1 em 1 até 10 metros.

- Repita esse comando >> Vx=subs(V,metro). O comando mostrado substituirá os valoes do

vetor metro na variável x e depois guarda o resultado da operação no vetor Vx.

- Repita esse comando >> Mx=subs(M,metro). Idem acima.

- Agora você tem os vetores Vx, Mx, e metro, agora é só plotar os gráficos usando o comando

subplot, area, xlabel, ylabel e etc, como feito no outro exercício.

- Simples não acha ?

Page 61: apostila (Reparado)_2

17. PROGRAMAÇÃO

17.1. Arquivos .m

Para resolver problemas simples, é cômodo e eficiente utilizar o MATLAB como se

fosse uma calculadora, entrando-se com os comandos diretamente no prompt. Ou seja,

cada linha de comando é introduzida na Janela de Comandos e processada

imediatamente. Entretanto, à medida que o número de comandos aumenta, ou quando se

deseja mudar o valor de uma ou mais variáveis e executar novamente os comandos, o

melhor é utilizar o MATLAB como uma linguagem de programação, ou seja, utilizar o

MATLAB para executar seqüências de comandos armazenadas em arquivos de roteiro

(script). Esses arquivos que contêm as declarações do MATLAB são chamados

arquivos ".m" ( ou M-files ), como, por exemplo, exemplo1.m. Esses M-files são os

programas fontes do MATLAB e consistem de seqüências de comandos normais do

MATLAB, possibilitando incluir outros arquivos ".m" escritos no formato texto

(ASCII).

Para escrever um programa ( ou arquivo .m ) no MATLAB, escolha File na barra de

menu. Dentro do menu File escolha New e selecione M-file. Abre-se, então, um editor

de textos, onde pode-se escrever os comandos do MATLAB. Para editar um arquivo já

existente, selecione a opção Open M-File, a partir do menu File. Os arquivos podem,

também, ser editados fora do MATLAB utilizando qualquer editor de texto.

Para iniciar nossos estudos em programação, vamos fazer o exemplo abaixo: %==========================================

% Exemplo 1 de programação no MATLAB % Este exemplo plota uma função seno em varias condições

%==========================================

x=0:360;

A=1;

phi=0;

y=A*sin(2*pi*x/360+2*pi*phi/360);

A=2;

z=A*sin(2*pi*x/360+2*pi*phi/360);

phi=45;

v=A*sin(2*pi*x/360+2*pi*phi/360);

phi=-90;

w=A*sin(2*pi*x/360+2*pi*phi/360);

phi=0;

u=A*sin(2*pi*2*x/360+2*pi*phi/360);

plot(x,y,'r-',x,z,'b--',x,v,'g-.',x,w,'y.',x,u, 'o')

grid

xlabel('Valores de x em graus')

ylabel('y,z,v,w e u')

title('Estudo de defasagem e amplitude de um seno')

legend('sen(x)','2*sen(x)','2*sen(x+45)','2*sen(x-90)','2*sen(2*x)')

Page 62: apostila (Reparado)_2

Uma vez escrito o programa, entre no menu File da janela do editor de textos e escolha

a opção Save as... Nesta opção do menu, salve o programa como prog1.m no seu diretório de trabalho. Em seguida, digite o nome do arquivo (sem a extensão .m) para

executar o programa: >> prog1

Por causa da grande utilidade dos M-files, o MATLAB possui diversas funções que tornam os M-files ainda mais interessantes. Estas funções estão listadas na tabela a seguir:

Para entender melhor algumas dessas funções veja o próximo exemplo.

%===================================== % Exemplo 2 de utilização da função M-file “input” % Programa para traçar a curva : % y=A.sin(x+phi) %===================================== x=input('Entre com o vetor x [rad]> ');%0:pi/2:pi

A=input('Entre com o valor de A> ');%2

phi=input('Entre com o valor de phi [graus]> ');%90

y=A*sin(x+pi*phi/180);

plot(x,y,'r');

grid on

title('Exemplo de utilização da função “input”')

xlabel('x em rad/s')

ylabel('y=A.sin(x+phi)')

Page 63: apostila (Reparado)_2

17.2. Gerenciamento de arquivos

O MATLAB possui uma série de comandos para gerenciamento de arquivos, tais como

listar os nomes de arquivos, vizualizar, deletar, etc. Na tabela abaixo tem-se um resumo

dos principais comandos :

17.3. Criando funções no MatLab

As funções executáveis escritas na linguagem utilizada pelo Matlab estão

implementadas em arquivos com extensão “m”. Suponha que o arquivo “exemplo.m” contenha uma série de linhas de comandos ou funções do Matlab, então quando este arquivo é chamado sem extensão do prompt do Matlab:

>> exemplo + <ENTER>

o Matlab entenderá que este arquivo é executável e assim cada linha será interpretada na

seqüência de acordo com a sua função. Da mesma forma um método ou sub-rotina pode ser definido dentro de um arquivo com

extensão “.m” contendo argumentos de entrada e de saída. Por exemplo, cria-se o arquivo “circum.m” contendo as seguintes linhas:

%======================================= %Esta função calcula o perímetro de uma circunferência de % raio R. Si R é uma matriz, circum(R) retornará uma matriz

% contendo os perímetros das circunferências de raios iguais % aos respectivos valores da matriz R

%======================================

function C = circum(R)

C = 2*pi*R;

As linhas acima correspondem ao arquivo circum.m. Para utilizar está função basta digitar:

>> circum(2)

ans =

12.5664

Page 64: apostila (Reparado)_2

Em caso de ser R um vetor:

>> R = [1 2 3];

>> circum(R)

ans =

6.2832 12.5664 18.8496

As primeiras linhas iniciadas com o símbolo % constituem uma valiosa fonte de

informações a respeito da funcionalidade do arquivo. Para ter acesso a elas não é necessário abrir o arquivo com um editor, basta digitar:

>> help circum

então as primeiras linhas juntas de comentários serão mostradas. Por isto é importante documentar de forma precisa esta primeira linha, caso o número

de funções venha a aumentar consideravelmente.

Não é necessário que o nome do arquivo seja igual ao nome da “function” dentro do

mesmo.

Quando a função tem mais de um argumento de saída, digamos área, volume, então

estes devem vir entre colchetes, por exemplo, a seguinte função definida no arquivo

“cilindro.m” calcula a área e o volume de um cilindro.

%============================================

%Calcula-se a área e volume de um cilindro de altura h e raio r

%=========================================

function [area,volume] = cilindro(h,r)

area = 2*pi*r*h+2*pi*r^ 2;

volume = pi*r^ 2*h;

Para chamar esta função seja do “prompt” ou de outro executável “.m”, basta digitar

uma chamada na forma exemplificada a seguir:

[a,v] = cilindro(0.5,1)

No prompt ficaria para altura h=0.5 e raio r=1:

>> [a,v] = cilindro(0.5,1)

a =

9.4248

v =

1.5708

Page 65: apostila (Reparado)_2

Observações:

Para que o arquivo “.m” seja localizado pelo Matlab, este deve se encontrar no diretório atual. O comando pwd do Unix fornecerá o caminho atual, por exemplo:

>> pwd;

/a/home/cenapad/cedric/MATLAB

Se o arquivo “.m”, a ser interpretado pelo Matlab, estiver em outro diretório diferente

do atual, digamos /u/cedric/programas, então o Matlab terá acesso a ele declarando o caminho com o comando path da seguinte maneira.

>> path(path,'/u/cedric/programas');%no Unix

>> path(path,'c:\cedric\programas');%no Windows

17.4. Regras para escrever uma function

É conveniente observar as seguintes características na definição de uma função:

Escrever comentários a respeito da função, tendo especial ênfase na primeira linha de

comentário.

A primeira linha executável deve conter a palavra “function” seguida dos argumentos

de saída entre colchetes, se forem mais de um, o sinal “=” e o nome da função com

argumentos de entrada entre parênteses.

Todos os argumentos de retorno devem estar definidos dentro do corpo da função.

Qualquer erro cometido dentro do arquivo “.m” será acusado quando este for executado,

retornando o formato de um erro de compilação.

Page 66: apostila (Reparado)_2

18. CONTROLE DE FLUXO

18.1. Estruturas Condicionais

Uma estrutura condicional permite a escolha do grupo de comandos a serem executados quando uma dada condição for satisfeita ou não, possibilitando desta forma alterar o

fluxo natural de comandos. Esta condição é representada por uma expressão lógica. 18.2. Estrutura if-end

A estrutura condicional mais simples do MA TLAB é:

if <condição>

<comandos>

end

Se o resultado da expressão lógica <condição> for 1 ( verdadeiro ) então a lista de <comandos> será executada. Se o resultado for 0 ( falso ) os <comandos > não serão

executados. Por exemplo, considere o arquivo ex_cond1.m cujo conteúdo é:

a = input('Entre com o valor de a : ');

if a >= 0

b = sqrt(a)

end

Para executá- lo basta fornecer o seu nome na área de trabalho

>>ex_cond1

>>Entre com o valor de a : 2

b = 1.4142

Neste exemplo, a raiz quadrada de a será atribuída a b somente se o valor de a for maior

ou igual a 0 .

Considere o arquivo banana1.m:

custo=5;

bananas=10;

if bananas>5

custo=0.1*custo;

end

custo

quando executado resultará

>>banana1:

custo =

0.5000

Page 67: apostila (Reparado)_2

No exemplo anterior, a expressão bananas > 5 é verdadeira, assim o comando :

custo=0.1* custo é executado.

Veja agora o exemplo bananas2.m.

custo=5;

bananas=5;

if bananas>5

custo=0.1*custo;

end

custo

quando executado resultará:

>>banana2

custo =

5

Neste exemplo, a expressão bananas > 5 é falsa, assim o comando :

custo=0.1* custo

não foi executado. Assim o custo continua igual a 5.

18.3. Estrutura if-else-end

No caso de haver duas alternativas, uma outra estrutura condicional deve ser usada:

if <condição>

<comandos 1> else

<comandos 0>

end

Se o resultado da expressão lógica <condição > for 1 ( verdadeiro ) então a lista

<comandos 1> será executada. Se <condição> for 0 ( falso ) então será a lista <comandos 0> a ser executada. Por exemplo, o programa do arquivo ex_cond2.m

a = input('Entre com o valor de a : ');

if a > 0

b = log(a)

else

b = exp(a)

end

quando executado resultará >> ex_cond2

Entre com o valor de a : 5

b = 1.6094

Se a for positivo, então o logaritmo natural de a será atribuído a b e se a for negativo ou nulo, então b será igual ao exponencial de a .

Page 68: apostila (Reparado)_2

18.4. Estrutura if-elseif-end

Quando houver mais de duas alternativas, a estrutura if-else-end do MATLAB torna-se

if <condição 1>

<comandos 1>

elseif <condição 2>

<comandos 2>

elseif <condição 3>

<comandos 3>

..

.

else

<comandos 0>

end

A lista <comandos 1> será executada se <condição 1> for igual a 1 (verdadeiro), já a

lista <comandos 2> será executada se <condição 2> for 1 e assim para as outras

condições. Se nenhuma das condições for 1 então <comandos 0> será executada.

Quando a primeira <condição> for satisfeita e os <comandos> executados, a estrutura

if-elseif-end será abandonada, ou seja, o controle do processamento será transferido

para o comando imediatamente após o end . Por exemplo, ex_cond3.m

a = input('Entre com o valor de a : ');

if a <= -10

b = exp(a)

elseif a < 0

b = 1/a

elseif a <= 10

b = a^2

elseif a < 100

b = sqrt(a)

else

b = 10

end

quando executado resultará

>> ex_cond3

Entre com o valor de a : 4

b = 16

Deste modo foi executado o primeiro comando para o qual a cond ição a<=10 foi

satisfeita, ou seja, apesar da condição a<100 ser também verdadeiro, o comando

referente a ela não foi executado. Assim, na estrutura if-elseif-end é executada somente

uma única lista de comandos.

Page 69: apostila (Reparado)_2

19. ESTRUTURA DE REPETIÇÃO

A estrutura de repetição faz com que uma sequência de comandos seja executada

repetidamente até que uma dada condição de interrupção seja satisfeita. O MATLAB

possui duas estruturas de repetição: as estruturas for-end e a while-end

19.1. Estrutura for-end

A estrutura for-end permite que um grupo de comandos seja repetido um número

específico de vezes. Sua sintaxe é:

for <variável>=<arranjo>

<comandos>

end

onde <variável> é a variável-de-controle que assume todos os valores contidos no vetor

linha <arranjo> . Assim, o número de repetições da lista <comandos > é igual ao

número de elementos no vetor <arranjo>. A variável-de-controle não pode ser

redefinida dentro da estrutura for-end .

O laço for é o controlador de fluxo mais simples e usado na programação MATLAB.

Analisando a expressão:

for i=1:5

X(i)=i^2

end

pode-se notar que o laço for é dividido em três partes:

• A primeira parte (i=1) é realizada uma vez, antes do laço ser inicializado.

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

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

A terceira parte acontece quando a condição se torna falsa e o laço termina.

O comando end é usado como limite inferior do corpo do laço.

Vamos considerar um exemplo, executando o programa ex_rep1.m abaixo:

n = input('Valor de n : ');

s = 0;

n2 = n^2;

for i = 1:2:2*n-1

s = s + i;

end,

n2, s

Page 70: apostila (Reparado)_2

quando executado resultará

>> estrep1

Valor de n : 5

n2 = 25

s = 25

Exercícios :

1- Crie o vetor x=[0 36 72 108 144 180 216 252 288 324] através do comando for (exercicio1.m). Solução:

x(1)=0;

for n=2:10

x(n)=x(n-1)+36;

end

x

quando executado resultará

>>exercicio1

x =

0 36 72 108 144 180 216 252 288 324

2- Plote 360 pontos de um período da função y=sen(2*pi*x/360), usando o loop for (exercicio2.m).

Solução:

for x=1:360

y(x)=sin(2*pi*x/360);

end

plot(y)

quando executado resultará

>>exercicio1

Isto é, a primeira instrução diz : para n igual a 2 até 10, execute todas os comandos até a

instrução de end. No primeiro ciclo do for, n=2, no segundo n=3 e assim por diante, até

n=10. Depois do ciclo para n=10, o loop for termina e os comandos após a instrução end

são executados, como é o caso da apresentação dos resultados em x.

OBS: no Matlab, não é muito eficiente construir vetores com for.

Page 71: apostila (Reparado)_2

19.2. Estrutura while-end

A estrutura while-end, ao contrário da for-end, repete um grupo de comandos um

número indefinido de vezes. Sua sintaxe é

while <condição>

<comandos>

end

Enquanto a expressão lógica <condição> for verdadeira a lista <comandos> será

repetida. No laço while apenas a condição é testada. Por exemplo, na expressão

a = 1; b = 15;

while a<b,

clc

a = a+1

b = b-1

pause(1)

end

disp('fim do loop')

a condição a<b é testada. Se ela for verdadeira o corpo do laço, será executado. Então a condição é testada novamente, e se verdadeira o corpo será executado novamente.

Quando o teste se tornar falso o laço terminará, e a execução continuará no comando que segue o laço após o end.

Ao contrário do loop for, que executa um conjunto de comandos um número fixo de

vezes, o loop while executa um conjunto de comandos um número indefinido de vezes.

Os comandos entre as instruções while e end são executadas enquanto todos os

elementos na expressão forem verdadeiras.

Exercício:

Construa o vetor y = [64 32 16 4 2 1] , usando o loop while

Solução:

num=128;

n=0;

while num>1

num=num/2;

n=n+1;

y(n)=num;

end

y

quando executado resultará

y =

64 32 16 8 4 2 1

Page 72: apostila (Reparado)_2

20. AJUSTE DE CURVAS E INTERPOLAÇÃO

Este tipo de ferramentas é útil quando se dispõe de um conjunto descontínuo de dados

(valores numéricos pontuais), e se procura traçar uma curva ou superfície (função

contínua) que contenha estes pontos.

Existem diferentes curvas que podem ser utilizadas para interpolar estes ponto s. Podem

ser usados distintos graus para o polinômio que interpola, ou ainda podem ser usados

polinômios por partes. Quando se usam polinômios por partes pode acontecer que a

curvaque interpola os pontos tenha derivada contínua ou não, naqueles pontos

conhecidos.

Naturalmente surge a questão de que modelo é mais apropriado para interpolar os

dados. O analista numérico deve saber decidir sobre esta questão, já que o uso de um

modelo ou de outro acarretará uma resposta diferente. Nem sempre de um polinômio de

grau maior será obtida uma resposta mais precisa.

Caso o analista conheça a priori o comportamento do seu modelo ele poderá usar esta

informação para a escolha do grau de interpolação. Caso contrário ele deverá procurar

obter maior quantidade de medições experimentais para obter um comportamento mais

apurado na zona de interesse no domínio do problema.

O primeiro exemplo interliga pontos discretos no plano por meio de linhas retas,

obtendo-se uma curva linear ou de grau um por partes, figura abaixo.

dados1=[ 0 0;1 20;2 60;3 68;4 77;5 110];%Conjunto de pontos a

%ser interpolado

disp('Cálculo que interpola este conjunto de pontos em x=2.6 e

x=4.9,respec.');

y1 = interp1(dados1(:,1), dados1(:,2), 2.6) % valor

%interpolado no ponto 2.6

y2 = interp1(dados1(:,1), dados1(:,2), 4.9) % valor

%interpolado no ponto 4.9

xi=0:.01:5;%lista no intervalo [0,5]

yi = interp1(dados1(:,1), dados1(:,2),xi);% lista yi

%interpola a lista xi

plot(dados1(:,1), dados1(:,2),'o',xi,yi);% gráfico da curva

% interpolada

Page 73: apostila (Reparado)_2

A resposta para os dois valores pontuais é: y1 = 64.8000, y2 = 106.7000. Os valores

conhecidos para x estão no intervalo [0,5], e os de y em [0,110], a figura mostra a curva

deinterpolação.

O próximo exemplo corresponde a uma interpolação superficial.

velocidade=[2000,3000,4000,5000,6000];

tempo=[0 1 2 3 4 5];

temperatura = [ 0, 0, 0, 0, 0; 20, 110, 176, 190, 240; 60, ...

180, 220, 285, 327; 68, 240, 349, 380, 428; 77, 310, 450, ...

510, 620; 110, 405, 503, 623, 785];

temp = interp2(velocidade, tempo,temperatura,3800,3.1)

%os próximos passos permitem graficar a curva de interpolação

vel=2000:100:6000;%40 pontos

t=0:0.125:5;%40 pontos

[X,Y] = meshgrid(vel,t);

Z = interp2(velocidade,tempo,temperatura,X,Y);

mesh(X,Y,Z);

xlabel('E I X O X');

ylabel('E I X O Y');

zlabel('E I X O Z');

Page 74: apostila (Reparado)_2

20.1. Comando spline

Este tipo de interpolação utiliza polinômios cúbicos para, no caso plano, unir cada dois pontos com um polinômio, e cada 4 pontos no espaço com uma superfície polinomial.

Ainda a primeira e segunda derivada nestes pontos são contínuas. A figura abaixo mostra a curva spline interpolante do exercício a seguir.

x = [0 1 2 3 4 5];

y = [0 20 60 68 77 110];

temp1 = spline(x,y,2.6);

temp2 = spline(x,y,[2.6 4.9]);

z = [.5 1.5 2.5 3.5 4.5];

temps = spline(x,y,z);

temp1 %resultado

temp2 %resultado

temps %vetor interpolante da lista z

xi=0:0.2:5;%25 pontos

yi = spline(x,y,xi);%interpolação da lista xi

plot(x,y,'o',xi,yi);%curva interpolante

A saída numérica foi: temp1 = 67.3013, temp2 = 67.3013, 105.2020, temps = 2.7917,

42.2083, 66.8750, 70.4167, 89.5833. Observe na figura como a curva é suave nos

pontos conhecidos.

Page 75: apostila (Reparado)_2

21. ANIMAÇÃO GRÁFICA

21.1. Animação bidimensional

Este exemplo mostra como se constrói uma seqüência de gráficos. Estes gráficos são

armazenados em uma matriz M, em seguida o comando movie permite mostrar a

seqüência armazenada em M a uma certa taxa de repetição.

x = -pi/2:.1:pi/2;

for c=1:20,

y = sin(2*x+c*pi/10);

plot(x,y,'r-');

axis([-pi/2 pi/2 -1 1]);

M(c) = getframe;

end;

movie(M,20,10);

A última linha de comando significa que os gráficos armazenados em M são mostrados

10 vezes a uma taxa de repetição de 20 figuras por segundo.

21.2. Animação tridimensional

O laço que se apresenta a seguir não difere muito daquele apresentado anteriormente. Exemplo:

x = -pi/2:.1:pi/2;

y = -pi/2:.1:pi/2;

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

for c=1:20,

Z = sin(2*X+c*pi/10)+1.5*cos(2*Y+c*pi/10);

surf(X,Y,Z);

M(c) = getframe;

end;

movie(M,20);%Esta animação pode ser salva

EXERCICIOS DE FIXAÇÃO

1- Teste fazendo animações para outras funções.

Page 76: apostila (Reparado)_2

22. EXTRAS

22.1. Movimentar textos em gráficos (gtext)

%===============================================

% Movimentar texto no grafico

%===============================================

y = [0 2 5 4 1 0];

plot(y)

help pi

t = 0:.4:4*pi

y = sin(t)

z = cos(t);

plot(t,y,'.',t,z,'-.')

title('Funções')

xlabel('t')

ylabel('Seno e Cosseno')

text(3,0.5,'Seno')

gtext('Cosseno')

%Após executar esse código vá até o gráfico e posicione o cosseno onde quiser.

22.2. Animação com a função comet

%===============================================

% funcao comet

%===============================================

t = 0:.01:2*pi;

x = cos(2*t).*(cos(t).^2);

y = sin(2*t).*(sin(t).^2);

comet(x,y)

22.3. Barra de progresso Simples %===============================================

% Barra de progresso Simples

%===============================================

x=input('Digite um valor máximo para a barra de progresso: ');

%digite 1000 apenas para ver seu funcionamento

barra=waitbar(0,'Calculando...');

for i=1:0.1:x

% Aqui aconteceria o loop e a realização de cálculos.

waitbar(i/ x);

end

close(barra); % Fecha a barra.

EXERCICIOS DE FIXAÇÃO

1- Implemente esse comandos em algum dos seus programas