matlab - seminário - ufjf | universidade federal de … · 7. caixeiro viajante ... matlab calcula...

29
UNIVERSIDADE FEDERAL DE JUIZ DE FORA PROGRAMA DE PÓS GRADUAÇÃO EM MODELAGEM COMPUTACIONAL MATLAB - Seminário Algoritmos e Estrutura de Dados 2016_1 Rodrigo Barbosa de Santis 6 DE ABRIL DE 2016

Upload: trankiet

Post on 23-Aug-2018

214 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

UNIVERSIDADE FEDERAL DE JUIZ DE FORA PROGRAMA DE PÓS GRADUAÇÃO EM MODELAGEM COMPUTACIONAL

MATLAB - Seminário Algoritmos e Estrutura de Dados 2016_1

Rodrigo Barbosa de Santis

6 DE ABRIL DE 2016

Page 2: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

Conteúdo 1. Introdução ................................................................................................................................... 1

1.1 Vantagens .............................................................................................................................. 1

1.2 Desvantagens ........................................................................................................................ 2

1.3 O ambiente MATLAB ............................................................................................................. 2

1.3.1 Desktop (Área de Trabalho) ............................................................................................ 2

1.3.2 The Command Window (Janela de Comandos) ............................................................. 3

1.3.3 The Command History Window (Janela de Histórico de Comandos) ............................ 5

1.3.4 The Start Button (Botão Iniciar) ..................................................................................... 6

1.3.5 Edit/Debug Window (Janela de Edição/Debug) ............................................................. 6

1.3.6 Figure Windows (Janelas de Figuras) ............................................................................. 8

2. Criando e operando vetores e matrizes ..................................................................................... 9

2.1 Criando um array ................................................................................................................... 9

2.2 Funções de inicialização de variáveis .................................................................................... 9

2.3 Operando escalares e matrizes ........................................................................................... 11

2.3.1 Operando elemento-por-elemento .............................................................................. 11

2.3.2 Operações relacionais .................................................................................................. 11

2.3.3 Operadores lógicos ....................................................................................................... 12

2.3.4 Operações matemáticas elementares .......................................................................... 12

3. Plotando gráficos 2-D ................................................................................................................ 13

3.1 Personalizando o gráfico ..................................................................................................... 14

3.2 Controle dos eixos e de zoom ............................................................................................. 14

3.3 Gráficos sobrepostos ........................................................................................................... 14

3.4 Gráficos especias em 2-D .................................................................................................... 15

4. Gráficos em 3-D......................................................................................................................... 17

5. Estruturas de Controle e Repetição .......................................................................................... 18

5.1 If-elseif-else ......................................................................................................................... 18

5.2 Switch-case-otherwise ........................................................................................................ 18

5.3 For........................................................................................................................................ 19

5.4 While ................................................................................................................................... 19

5.5 Outros operadores .............................................................................................................. 20

5.5.1 Break ............................................................................................................................. 20

5.5.2 Continue ....................................................................................................................... 20

5.5.3 Error .............................................................................................................................. 21

6. Polinômios, Derivada e Integral ................................................................................................ 21

6.1 Polinômios ........................................................................................................................... 21

6.1.1 Criando Polinômios ....................................................................................................... 21

6.1.2 Somatório ..................................................................................................................... 21

6.1.3 Funções de Calculo ....................................................................................................... 21

6.1.4 Encontrando as raízes ................................................................................................... 22

6.2 Derivada .............................................................................................................................. 22

6.3 Integral ................................................................................................................................ 23

6.3.1 Integral Indefinida ........................................................................................................ 23

Page 3: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

6.3.2 Integral definida ........................................................................................................... 24

7. Caixeiro Viajante ....................................................................................................................... 25

7.1 Solução simples para 5 cidades ........................................................................................... 25

Page 4: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

1

1. Introdução

MATLAB (abreviação para MATrix LABoratory) é um software otimizado para realizar cálculos de engenharia e científicos. Ele foi criado inicialmente com o objetivo de realizar cálculos de matrizes matemáticas, mas, com o passar do tempo, se tornou um sistema computacional capaz de resolver praticamente qualquer problema técnico.

O software MATLAB implementa a linguagem MATLAB e possui uma extensa biblioteca de funções predefinidas visando tornar tarefas de programação técnica mais fácil e mais eficiente. Essa grande variedade de funções permite resolução destes problemas técnicos muito mais facilmente do que em outras linguagens como Fortran e C. Essa apostila introduz a linguagem MATLAB e mostra como usar algum de suas funções na resolução de alguns problemas.

1.1 Vantagens

1. Fácil de Usar

MATLAB é uma linguagem interpretada, assim como muitas versões do Basic. O programa pode ser utilizado como um rascunho para validar expressões digitadas na linha de comando. Muitas ferramentas de desenvolvimento são fornecidas para facilitar o uso, como editor/debugger integrado, documentação on-line, manuais e demonstrações. 2. Independe da Plataforma

MATLAB é utilizado em muitos sistemas operacionais diferentes, provendo uma alta independência de plataforma, como Windows, Linux, Unix e Macintosh. Programas escritos em qualquer plataforma irão rodar em todas as outras plataformas. 3. Funções predefinidas

MATLAB vem com uma completa e extensa biblioteca de funções predefinidas que provê soluções pré-empacotadas e testadas para várias atividades básicas técnicas. Por exemplo, suponha que você está escrevendo um programa que precisa calcular as estatísticas associadas com uma série de dados de entrada. Na maioria das linguagens, você precisaria escrever suas próprias subrotinas e funções, para cálculos como média, desvio padrão, mediana, entre outros. É possível adquirir toolboxes(caixas de trabalho), muito úteis para resolver problemas complexos em áreas específicas. Alguns exemplos de toolboxes disponíveis são: processamento de sinal, controle de sistemas, comunicações, processamento de imagens, redes neurais, entre outras. 4. Interface Gráfica para Usuário

MATLAB inclui ferramentas que permite um programa construir uma interface gráfica para usuário (Graphical User Interface) para ele. Com essa capacidade, o programador pode

Page 5: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

2

programas sofisticados de análise de dados que possam ser operados por usuários relativamente inexperientes.

1.2 Desvantagens

MATLAB possui duas desvantagens principais. A primeira é que é uma linguagem

interpretada, e por isso, pode ser mais lenta que linguagens compiladas em tempo de execução. Esse programa pode ser mitigado estruturando o programa em MATLAB para maximizar a performance do código vetorizado, e através do uso do compilador JIT.

A segunda desvantagem é o custo; uma cópia completa do MATLAB é de 5 a 10 vezes mais cara do que um compilador convencional de C ou Fortran. Este custo alto é mais do que compensado pela redução do tempo necessário de um engenheiro ou cientista para criar um programa e implementá-lo, por isso o MATLAB apresenta um custo-benefício atraente para os negócios.

1.3 O ambiente MATLAB

A unidade fundamental de dado em qualquer programa MATLAB é o vetor (array). Um vetor é uma coleção de valores organizados em linhas e colunas e conhecido por um nome único. Valores individuais dentro dos vetores podem ser acessados incluindo o nome do vetor seguido por índices em parênteses que identificam a linha e coluna do valor particular. Até mesmo escalares são tratados como vetores pelo MATLAB - eles são vetores com apenas uma linha e uma coluna. Nós iremos aprender mais sobre como criar e manipular vetores na seção 2.

Quando o MATLAB está em execução, ele pode exibir alguns tipos de janelas que aceitam comandos ou exibem informações. As três mais importantes janelas são Command Windows (Janela de comandos), onde há a entrada de comandos; Figure Windows (Janelas de figuras), que exibem gráficos; e Edit Windows (Janelas de edição), que permite ao usuário criar e modificar programas MATLAB. Nós iremos ver exemplos desses três tipos de janelas nesta seção.

Como suplemento, o MATLAB pode exibir outras janelas que provém ajuda e permitem ao usuário examinar os valores das variáveis definidas na memória. Nós iremos analisar algumas dessas janelas adicionais também nessa seção.

1.3.1 Desktop (Área de Trabalho)

A configuração padrão da área de trabalho do MATLAB é exibida na Figura 1.1. Ela

integra muitas ferramentas para gerenciamento de arquivos, variáveis, e aplicações dentro do ambiente MATLAB.

● As maiores ferramentas acessíveis na área de trabalho do MATLAB são as seguintes: ● Command Window (Janela de Comandos) ● Command History Window ( Janela de Histórico de Comandos) ● Start Button (Botão Iniciar)

Page 6: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

3

● Documents Window(Janela de Documentos), incluindo Editor/Debugger e o Array Editor (Editor de vetores)

● Figure Windows (Janelas de Figuras) ● Workspace Browser (Navegador de Espaço de Trabalho) ● Help Browser (Navegador de Ajuda) ● Path Browser (Navegador de Caminho)

Iremos discutir a função dessas ferramentas a seguir.

Figura 1.1 A área de trabalho padrão do MATLAB

1.3.2 The Command Window (Janela de Comandos)

O lado esquerdo da área de trabalho padrão do MATLAB contém a Command Window

(Janela de Comandos). O usuário pode entrar comandos interativos no prompt de comando (>>) na Janela de Comandos, e eles serão executados na tela.

Como um exemplo simples de cálculo interativo, supomos que você queira calcular a área de um círculo com raio de 2,5 m. Isto pode ser feito na Janela de Comandos digitando

Page 7: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

4

>> area = pi * 2.5^2 area = 19.6350

MATLAB calcula a resposta assim que a tecla “Enter” é pressionada e guarda a resposta na variável (um vetor 1x1) chamada “area”. O conteúdo da variável é exibido na Janela de Comandos como mostra na Figura 1.2, e a variável pode ser usada em próximos cálculos. (Note que pi é uma função predefinida no MATLAB, por isso não precisamos declará-lo como 3,141592...)

Figura 1.2 A Janela de Comandos: Usuários entram comandos e recebem respostas

Se a expressão é muito longa para digitar em uma única linha, ela pode ser continuada em linhas sucessivas digitando reticências (...) ao final da primeira linha, e depois continuando na próxima linha. Por exemplo, as próximas duas sentenças são equivalentes: x1 = 1 + ½ + ⅓ + ¼ + ⅕ + ⅙ e

x1 = 1 + ½ + ⅓ + ¼ … + ⅕ + ⅙

Page 8: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

5

Ao invés de digitar comandos diretamente na Janela de Comandos, uma sequência de

comands pode ser armazenada em um arquivo, e o arquivo inteiro pode ser executado digitando seu nome na Janela de Comandos. Esses arquivos são chamados script files (Arquivos de Roteiro). Script files (e funções, como veremos depois) são também conhecidos como M-files, pois seus arquivos tem a extensão “.m”.

Figura 1.3 Janela de Histórico de Comandos, mostrando um comando sendo deletado

1.3.3 The Command History Window (Janela de Histórico de Comandos)

A Janela de Histórico de Comandos mostra uma lista de comandos que o usuário entrou

na Janela de Comandos. A lista de comandos anteriores pode ser extendida de volta a execuções anteriores do programa. Comandos permanecem na lista até serem deletados. Para reexecutar qualquer comando, apenas de um clique-duplo com o botão esquerdo do mouse. Um menu vai aparecer e permite os usuários a deletar os itens (veja a Figura 1.3).

Page 9: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

6

1.3.4 The Start Button (Botão Iniciar)

O Botão Iniciar permite ao usuário acessar ferramentas, arquivos de ajuda, e mais. Ele

funciona como o Botão Iniciar do Windows. Para iniciar uma ferramenta particular, clique no Botão Iniciar e selecione a ferramenta no submenu apropriado.

1.3.5 Edit/Debug Window (Janela de Edição/Debug)

Uma Janela de Edição é usada para criar um novo arquivo M ou modificar um existente.

Uma Janela de Edição é criada automaticamente quando você cria um arquivo ou abre um existente. Você pode criar um arquivo selecionando “File/New/Script” no menu da área de trabalho, ou clicando no ícone “New script” na barra de ferramentas. Você pode abrir um arquivo existente selecionando “File/Open” no menu da área de trabalho, ou clicando no ícone “Open file” na barra de ferramentas.

Uma Janela de Edição exibindo um arquivos simples chamado calc_area.m é mostrado na Figura 1.4. Este arquivo calcula a área de um círculo dado seu raio e exibe o resultado. A Janela de Edição é essencialmente um editor de texto, com os recursos da linguagem MATLAB destacados com cores diferentes. Comentários em um arquivo M aparecem em verde, variáveis e números aparecem em preto, strings completas em magenta, strings incompletas em vermelho, e palavras-chave da linguagem em azul.

Depois de salvo o arquivo, ele pode ser executado digitando seu nome na Janela de Comando. Para o arquivo da figura 1.5, os resultados são o seguinte:

>> calc_area A área do círculo é 19.635

NOTA: Para o comando calc_area funcionar corretamente, certifique-se que o arquivo esteja no mesmo caminho que o Workspace em que você esteja trabalhando. No exemplo o caminho do Workspace e do arquivo é: “C:\Users\Rodrigo\Documents\MATLAB”

Page 10: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

7

(a)

(b)

Figura 1.4 (a) O editor, exibindo o arquivo calc_area (b) Execução do programa

Page 11: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

8

1.3.6 Figure Windows (Janelas de Figuras)

Uma Janela de Figura é utilizada para exibir gráficos. A figura pode ser uma imagem, um

gráfico com dados plotados em duas ou três dimensões, ou uma Interface Gráfica para o Usuário. Um arquivo simples que calcula e plota uma função sin x é mostrada a seguir. % sin_x.m: Este arquivo calcula e plota a % função sin(x) para 0 <= x <= 6. x = 0:0.1:6 y = sin(x) plot(x,y) Se este arquivo for salvo com o nome sin_x.m, então execute o arquivo na Janela de Comandos digitando sin_x. O resultado plotado é exibido na Figura 1.5.

Figura 1.5 Gráfico da função f(x) no MATLAB

Page 12: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

9

2. Criando e operando vetores e matrizes

A unidade fundamental de dados em um programa MATLAB é o array. Um array é uma coleção de valores organizados em linhas e colunas por uma variável de nome simples.

Array com uma única dimensão é chamada de vetor, quando possui duas ou mais dimensões recebe o nome de matriz.

2.1 Criando um array

Para se declarar um array em MATLAB basta escrever o nome da variável (com no máximo 19 caracteres), sinal de igualdade e entrar com os dados entre colchetes. Quando os dados dentro dos colchetes que estão separados por espaço cria-se uma nova coluna e quando estão separados por ponto-e-virgula (;) cria-se uma nova linha. Por exemplo:

>> array1 = [1 2 3 4] >> array2 = [1 2 3; 4 5 6; 7 8 9] array = 1 2 3 4 array2 = 1 2 3 4 5 6 7 8 9 Para acessarmos um determinado elemento de uma dada matriz A, basta

especificarmos os índices i e j da matriz A(i,j). >> display = array2(2,2) % selecionando o elemento A(2,2) display = 5 Para selecionar toda uma linha ou coluna, utilizamos o caracter (:).

>> display = array2(2,1:3) %selecionando a segunda linha

2.2 Funções de inicialização de variáveis

No MATLAB existem funções para criarmos arrays específicos, como por exemplo, arrays com zero, com um (1), identidade.

Page 13: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

10

Segue abaixo uma tabela explicitando essas funções:

Funções Ações

zeros(n) Gera uma matriz n x n de zeros.

zeros(m,n) Gera uma matriz m x n de zeros.

zeros(size(array2)) Gera uma matriz de zeros do mesmo tamanho do array2.

ones(n)

Gera uma matriz n x n de um (1).

ones(m,n) Gera uma matriz m x n de um (1).

ones(size(array2)) Gera uma matriz de um (1) do mesmo tamanho do array2.

eye(n) Gera uma matriz identidade n x n

eye(m,n) Gera uma matriz identidade m x n

length(array2) Retorna o tamanho do vetor, ou a maior dimensão de um array bidimensional.

size(array2) Retorna dois valores especificando o numero de linhas e colunas em array2.

input (‘Enter data: ’) Recebe dados de entrada do teclado.

Outras formas de inicializar um array:

● Por expressões curtas ○ vetor = primeiro:incremento:ultimo

Exemplo:

>> x = 1:2:10 x = 1 3 5 7 9

○ matriz=[primeiro:incremento:ultimo ; primeiro:incremento:ultimo] Para matriz é necessário que as duas linhas possuam o mesmo tamanho

Page 14: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

11

>> y = [1:2:10;2:4:20] y = 1 3 5 7 9 2 6 10 14 18

● Usando linspace ○ vetor = linspace (primeiro,ultimo,numero de elementos)

>> x = linspace(0,10,5)

x = 0 2.5000 5.0000 7.5000 10.0000

2.3 Operando escalares e matrizes

No MATLAB é possível operar escalares e matrizes de uma forma bem simples. Contudo, para se utilizar em matrizes é necessário cumprir algumas condições:

a. A + B ou A - B: apenas se ambas forem do mesmo tamanho; b. A * B: apenas se número de colunas de A for igual ao número de linhas de B; c. A / B: é valida ou igual a A*(B^-1) para matrizes quadradas de mesmo

tamanho; d. A ^ 2: se A for quadrada e é o mesmo que A*A;

2.3.1 Operando elemento-por-elemento

Para se operar elemento-por-elemento, utilizamos a seguinte estrutura: A .*B - multiplicação de elemento por elemento

A ./B - divisão de elemento por elemento A .^B - exponenciação de elemento por elemento A .’B - transposta não conjugada

2.3.2 Operações relacionais

Para se fazer operações relacionais, temos:

< Menor <= Menor igual > Maior >= Maior igual == Igual ~= Diferente

E os dados são retornados na forma de array contendo os valores 0 (para falso) e 1 (para verdadeiro)

Page 15: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

12

Exemplo: >> x = [4 8 6 5]; >> y = [7 4 1 2]; >> k = x<y k = 1 0 0 0

2.3.3 Operadores lógicos

Os operadores lógicos utilizados no MATLAB são:

& “E” lógico

| “OU” lógico

~ “NÃO” lógico

Xor “OU” exclusivo

2.3.4 Operações matemáticas elementares

Funções Trigonométricas sin seno asin arco seno cos cosseno aços arcocosseno tan tangente atan, atan2 arco tangente sec secante asec arco secante csc cosecante acsc arco cosecante cot cotangente acot arco cotangente

sinh seno hiperbólico asinh arco seno hiperbólico cosh cosseno hiperbólico acosh arco cosseno hiperbólico tanh tangente hiperbólico atanh arco tangente hiperbólico sech secante hiperbólico asech arco secante hiperbólico csch cossecante hiperbólico acsch arco cossecante hiperbólico coth cotangente hiperbólico acoth arco cotangente hiperbólico

Funções Exponenciais exp Exponencial log Logaritmo natural log10 Logaritmo na base 10 sqrt Raiz quadrada

Page 16: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

13

Funções Complexas abs Valor absoluto angle Ângulo de fase conj Complexo conjugado imag Parte imaginária real Parte real Funções de aproximação fix Aproxima na direção de zero floor Aproxima na direção de -∞ ceil Aproxima na direção de +∞ round Aproxima para o inteiro mais próximo rem Resto da divisão

3. Plotando gráficos 2-D

O comando mais básico e , talvez, o mais útil para plotar gráficos em MATLAB é o >> plot(x,y,’Opções de Estilo’)

onde x e y são vetores contendo as coordenadas de pontos do gráfico e opções de estilo é um argumento para personalização da cor, do estilo de linha, e estilo de marcação, todas podem ser especificadas juntas na sequencia: cor, estilo de linha, estilo de marcador.

Os dois vetores (x e y) DEVEM ter o mesmo tamanho. Se por um acaso utilizarmos “plot(y)”, o eixo X receberá valores da posição da coordenada de y. Por exemplo:

>> y = [5 4 6 9] >> plot (y) Irá gerar pontos na gráfico nas seguintes coordenadas: (1,5) , (2,4) , (3,6) , (4,9) Segue abaixo uma tabela com as opções de estilo:

Page 17: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

14

3.1 Personalizando o gráfico

Para se adicionar título, nome para os eixos e comentários dentro do gráfico, utliza-se os seguintes comandos:

3.2 Controle dos eixos e de zoom

Após o gráfico ser gerado, é possivel modificar os limites dos eixos com o seguinte comando: >> axis([ xmin xmax ymin ymax ]) onde xmin, xmax, ymin, ymax são os valores dos limites dos eixos a serem colocados no comando. Outra opções de comando:

3.3 Gráficos sobrepostos

No MATLAB, a cada comando plot dado, o novo gráfico substitui o anterior, para que isso não ocorra têm-se três opções:

Page 18: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

15

1. Para gerar um novo gráfico, utiliza-se primeiro o comando figure, que serve para criar um nova janela e depois usar o novo plot. Ex: >> plot (x,y)

>> figure >> plot (y,x)

2. Para adicionar novas curvas ao seu gráfico já gerado, utiliza-se o comando hold. Ex:

>> plot (x,y) >> hold on >> plot (y,x) >> plot (y,k) >> hold off 3. Para adicionar numa mesma tela outros gráficos utiliza-se o comando subplot, que possui três argumentos: subplot (m,n,p). Onde o comando divide a tela em m x n janela e coloca o gráfico p-ésima janela, sendo que é contada da esquerda para a direita e de cima para baixo. Ex:

>> subplot(2,2,3) >> plot(x,k) >> subplot(2,2,1) >> plot(x,y) >> subplot(2,2,2) >> plot(y)

3.4 Gráficos especias em 2-D

Page 19: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

16

Exemplos de uso desses comandos especiais:

Page 20: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

17

4. Gráficos em 3-D O MATLAB dispõe de diversas funções que facilitam a visualização do gráfico 3D. As facilidades dispostas incluem funções para plotar curvas especiais, objetos em forma de grade, superfícies com textura, gerando contornos automaticamente, especificando os pontos de luz, interpolando cores e textura e mesmo digitando help graph3d no comando você obtém uma lista de funções viáveis para gráficos 3D gerais. Aqui está uma lista dos mais comuns: plot3 plot curvas no espaço stem3 cria dados discretos na plotagem fatiados bar3 desenha gráficos 3D em barras bar3h idem para gráficos horizontais pie3 desenha o gráfico de pizza 3D comet3 faz animações gráficas fill3 desenha figuras 3D preenchidas contour3 faz os contornos de um gráfico 3D guiver3 desenha vetores de campo em 3D scatter3 faz gráficos 3D espalhados mesh desenha superfície meshc desenha superfície ao longo de contornos meshz desenha superfície com cortinas surf desenha superfície em 3D (igual ao mesh, porém preenchido) surfc idem meshc, porém preenchido surfl cria superfície com as fontes de luz especificadas trimesh mesh com triângulos trisurf surf com triângulos slice desenha uma superfície volumétrica em pedaços waterfall cria um gráfico em forma de cachoeira cylinder cria um cilíndro sphere cria uma esfera Entre estas funções plt3 e comet3 são análogos ao plot e ao comet do 2D.

Page 21: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

18

5. Estruturas de Controle e Repetição

5.1 If-elseif-else

Esta construção representa uma comparação necessária para a execução de um bloco de comandos como resultado de uma comparação lógica. Por exemplo: if i > 5; % Cond 1 k = 1; % ação ocorre caso a Cond 1 seja verdadeira elseif (I > 1) & (j == 20) % Cond 2 k = 5*i + j; % ação ocorre caso a Cond 2 seja verdadeira else k = 1; % condição ocorre caso cond.1 e 2 sejam falsas end

5.2 Switch-case-otherwise

Essa construção prove uma ramificação lógica para a computação. Uma variável é utilizada como uma chave e os valores da variável fazem com que os diferentes casos sejam executados. A sintaxe geral é: switch variável case valor1 1º bloco de comandos case valor2 2º bloco de comandos ... otherwise último bloco de comandos end

Page 22: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

19

Um exemplo de uso da estrutura é o programa abaixo: switch cor case ‘vermelho’ c = [1 0 0]; case ‘verde’ c = [0 1 0]; case ‘azul’ c = [0 0 1]; otherwise error(‘escolha de cor inválida’) end

5.3 For

Utilizado para repetir um grupo de comandos por um número fixo de vezes. Por exemplo: for m = 1:2:100 Num = 1(m+1) end

5.4 While

Um laço while é utilizado para executar um grupo de comandos para um número indefinido de vezes até que determinada condição especificada seja satisfeita. Por exemplo: % Vamos encontrar todas as potências de 2 abaixo de 10000 v = 1; i = 1; while num < 10000 num = 2^i; v = [ v; num]; i = i + 1; end

Page 23: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

20

5.5 Outros operadores

5.5.1 Break

O comando Break dentro de um laço for ou while termina a execução do laço, até mesmo se a condição do laço for verdadeira. Ex: while 1 n = input(‘Entre com o nº máximo de interações ‘)

if n <= 0 break

end for i = 1:n end

end Caso haja um laço dentro de outro, o comando break finaliza somente o laço mais interno.

5.5.2 Continue

O commando return retorna o controle da função chamada. Ex: Function animatebar(t0, tf, x0); % animatebar anima um pêndulo disp(‘Você deseja ver o retrato da fase?’) ans = input (‘Digite 1 para SIM, e 0 para NÃO’) if ans == 0 return else plot(x,...) end

Page 24: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

21

5.5.3 Error

O comando error(‘mensagem’) dentro de uma função ou um script aborta a execução, mostra uma mensagem de error e retorna o controle para o teclado. Exemplo: function c = crossprod (a,b); % crossprod (a,b) calcula o produto vetorial axb If nargin ~= 2 error(‘Desculpe, precisa da entrada de 2 vetores’) end

6. Polinômios, Derivada e Integral

6.1 Polinômios

6.1.1 Criando Polinômios

Para se criar um polinômio e poder trabalhar com ele (encontrando suas raizes, derivando, integrando) é necessário criá-lo como char em função de x.

Exemplo: >> f = '3*x^2 - 15*x + 18'; >> f1=’x^3’;

6.1.2 Somatório

Para se ter o somátorio utiliza-se o comando: >> symsum(f,x,a,b) a e b são os limites inferior e superior respectivamente.

6.1.3 Funções de Calculo

a. limit(f,x,a) – retorna o limite de f(x) quando x → a b. limit(f,x,a,´right`) - retorna o limite de f(x) quando x → a+ c. limit(f,x,a,´left`) - retorna o limite de f(x) quando x →a- d. diff(f,x,n) – retorna a n-ésima derivada de f(x)

* A função “diff” também opera em matrizes. Para os comandos a seguir, é necessário usar a conversão

Page 25: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

22

f = sym(f); Pois esses calculos não são feitos com o tipo char.

a. simple(p) – simplifica uma expressão simbólica p. b. expand(p) – expande todos os termos de p. c. factor(p) – tenta representar p como produto de polinômios.

6.1.4 Encontrando as raízes

Para se encontrar as raízes de um polinômio, utiliza-se o comando solve. Exemplo:

>> f f = 3*x^2 - 15*x + 18 >> raiz = solve (f) raiz= 3 2

6.2 Derivada

No MATLAB é possível encontrar a derivada de uma função, visualizar seu gráfico com comandos simples. Por Exemplo: >> f = '3*x^2 - 15*x + 18' % Cria a função como char f = 3*x^2 - 15*x + 18 >> derivada = diff(f) % faz a derivada da função derivada =

6*x-15 >> derivada = char (derivada) % Transforma a derivada novamente em char derivada =

6*x-15 >> subplot(2,1,1) >> fplot (f, [-30 30]) % Plota o gráfico da função >> subplot(2,1,2) >> fplot (derivada, [-30 30]) % Plota o gráfico da derivada

Page 26: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

23

6.3 Integral

6.3.1 Integral Indefinida

Também é possível encontrarmos a integral indefinida de uma função com os seguintes passos: >> f = '3*x^2 - 15*x + 18' % Cria a função como char f =

3*x^2 - 15*x + 18 >> integral = int(f) % faz a integral da função integral =

x^3-15/2*x^2+18*x >> integral = char (integral) % Transforma a integral novamente em char integral =

x^3-15/2*x^2+18 >> subplot(2,1,1) >> fplot (f, [-30 30]) % Plota o gráfico da função >> subplot(2,1,2) >> fplot (integral, [-30 30]) % Plota o gráfico da integral

Page 27: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

24

6.3.2 Integral definida

Para se fazer a integral definida da função, basta adicionar os limites de integração ao comando int(). Exemplo:

>> f = '3*x^2 - 15*x + 18' % Cria a função como char f =

3*x^2 - 15*x + 18 >> integral = int(f, -30,30) % Faz a integral definida da

função integral=

55080

Page 28: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

25

7. Caixeiro Viajante

O problema do caixeiro-viajante (PCV), travelling salesman problem (TSP) (em inglês) , é um problema de otimização que, apesar de parecer modesto é, na realidade, muito investigado por cientistas, matemáticos e investigadores de diversas áreas, tais como: logística, genética e produção, entre outros (Applegate et al., 2011).

O problema pertence à categoria NP-Completo que o remete para um campo de complexidade exponencial, isto é, o esforço computacional necessário para a sua resolução cresce exponencialmente com o tamanho do problema. Assim, dado que é difícil, se não impossível, determinar a solução ótima desta classe de problemas, os métodos de resolução passam pelas heurísticas e afins que, do ponto de vista matemático, não asseguram a obtenção de uma solução ótima (Da Cunha et al., 2002).

Ele consiste na procura de um circuito que possua a menor distância, começando numa qualquer cidade, entre várias, visitando cada cidade precisamente uma vez e regressando à cidade inicial.

7.1 Solução simples para 5 cidades

Como visto acima, a complexidade da solução do problema cresce de acordo com o número de cidades, portanto, adotaremos 5 cidades para o percurso do caixeiro viajante. O primeiro passo é definir as coordenadas (X,Y) das cidades. Depois, criar uma matriz que armazene as distancias entre cada uma das cidades. Exemplo:

Cidades 1 2 3 4 5

1 0 (1,2) (1,3) (1,4) (1,5)

2 (2,1) 0 (2,3) (2,4) (2,5)

3 (3,1) (3,2) 0 (3,4) (3,5)

4 (4,1) (4,2) (4,3) 0 (4,5)

5 (5,1) (5,2) (5,3) (5,4) 0

Page 29: MATLAB - Seminário - UFJF | Universidade Federal de … · 7. Caixeiro Viajante ... MATLAB calcula a resposta assim que a tecla Enter é pressionada e guarda a resposta na variável

26

A partir disso, temos que encontrar as combinações de caminho. Lembrando que ele tem que começar em uma cidade e terminar na mesma, portanto, tem diferença a cidade que o caixeiro começa, o que reduz as combinações possíveis de caminho. A cada caminho determinado, temos que somar as distancias entre as cidades, se essa distância for menor que a já encontrada, substitui o valor na variável bestdistance. E armazena na variável bestpath o caminho que gerou essa menor distancia. Usando o comando plot é possível desenhar o gráfico com essas esses percursos.

Bibliografia Applegate, D. L., Bixby, R. E., Chvatal, V., & Cook, W. J. (2011). The traveling salesman problem: a computational study. Princeton university press. Chapman, S. (2008). Essentials of MATLAB programming. Nelson Education. Da Cunha, C. B., de Oliveira Bonasser, U., & Abrahão, F. T. M. (2002). Experimentos computacionais com heurísticas de melhorias para o problema do caixeiro viajante. In XVI Congresso da Anpet. MATLAB Documentation, Mathworks. Recuperado em 29, março, 2016 de http://www.mathworks.com/help/matlab/ Travelling Salesman Problem, Mathworks. recuperado em 29, março, 2016 de http://www.mathworks.com/help/optim/ug/travelling-salesman-problem.html