apostila (Reparado)_2
-
Upload
rodolpho-tinini -
Category
Documents
-
view
98 -
download
0
Transcript of apostila (Reparado)_2
AUTOR: EMERSON MORAES – FEAGRI/UNICAMP-SP
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.)
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
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
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.
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
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.
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:
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:
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:
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 ( )
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:
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
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.
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.
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:
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:
>> 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.
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”.
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
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
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
>> 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:
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;
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
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:
>> 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
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:
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.
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
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’).
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)
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))
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.
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:
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);
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 %
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
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
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;
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
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)');
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].
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
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');
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);
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
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:
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.
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.
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)
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)
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.
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
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
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
>> 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:
>> 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])
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.
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 ?
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)')
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)')
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
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
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.
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
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 .
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.
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
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.
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
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
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');
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.
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.
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