148
Fundamentos do MATLAB ® para Engenheiros Fernando Wesley Recife/PE - 2012

Fundamentos de MATLAB Para Engenheiros

Embed Size (px)

Citation preview

Page 1: Fundamentos de MATLAB Para Engenheiros

Fundamentos do

MATLAB®

para

Engenheiros

Fernando Wesley

Recife/PE - 2012

Page 2: Fundamentos de MATLAB Para Engenheiros

FUNDAMENTOS DO MATLAB®

PARA ENGENHEIROS

Page 3: Fundamentos de MATLAB Para Engenheiros

i

UNIVERSIDADE DE PERNAMBUCO

POLI JÚNIOR CONSULTORIA

Fundamentos do MATLAB® para Engenheiros

Phillipi Rodrigo de Oliveira Souza (in memorian)

Fernando Wesley Cavalcanti de Araújo Autores

Fernando Wesley Cavalcanti de Araújo Revisão

Gustavo de Almeida Castro

Phillipi Rodrigo de Oliveira Souza (in memorian)

Fernando Wesley Cavalcanti de Araújo Edição, projeto gráfico e produção

Gustavo de Almeida Castro

Priscila Carvalho dos Santos

Phillipi Rodrigo de Oliveira Souza (in memorian)

Fernando Wesley Cavalcanti de Araújo Arte digital

Fernando Wesley Cavalcanti de Araújo Capa

Fernando Wesley Cavalcanti de Araújo Revisão gramatical

Este documento é parte integrante do material didático do curso de extensão em

Fundamentos do MATLAB® para Engenheiros e tem por objetivo descrever os princípios

fundamentais da programação em ambiente MATLAB®

direcionado às ciências exatas e

engenharias.

É permitida a reprodução, parcial ou total deste material, para fins didáticos, desde que

citada a fonte.

Page 4: Fundamentos de MATLAB Para Engenheiros

CONTEÚDO

Capítulo 1 – Introdução ao MATLAB® 1

1.1 – Introdução 1

1.2 – História do MATLAB® 1

1.3 – Aprendendo a utilizar o MATLAB® 2

1.4 – Ambiente de trabalho 3

1.4.1 – Janela Command Window 5

1.4.2 – Janela Workspace 6

1.4.3 – Janelas Commandy History e Current Directory 7

1.5 – Declaração de Variáveis 7

1.6 – Erros 9

1.7 – Trabalhando com escalares 11

1.8 – Formatos de Exibição 13

1.9 – Funções Matemáticas Elementares 14

1.10 – Help 14

1.11 – Editor de Texto 17

Exercícios de Fixação 18

Capítulo 2 – Operações com Matrizes 20

2.1 – Operações com matrizes 20

2.2 – Indexação de matrizes 24

2.3 – Análise de vetores 27

2.4 – Números de matrizes complexos 29

Exercício Aplicado 31

Exercício de Fixação 36

Capítulo 3 – Fundamentos da programação no MATLAB® 38

3.1 – Expressões Booleanas 39

3.2 – Estrutura if-elseif-else 40

Exercício Aplicado 1 41

3.3 – Estrutura switch-case-otherwise 43

Exercício Aplicado 2 44

3.4 – Estrutura for 46

Exercício Aplicado 3 47

3.5 – Estrutura while 48

Exercício Aplicado 4 59

Exercício de fixação 51

Page 5: Fundamentos de MATLAB Para Engenheiros

Capítulo 4 – Funções 53

Exercício Aplicado 56

4.2 – Funções de importação e exportação 59

4.3 – Funções de tratamento 62

Exercício de fixação 64

Capítulo 5 – Polinômio 66

5.1 – Polinômios e suas raízes 66

5.1.1 – Raízes de um polinômio 66

5.1.2 – Encontrar polinômio através de raízes 67

5.2 – Multiplicação e divisão de polinômios 68

5.2.1 – Multiplicação polinomial 68

5.2.2 – Divisão polinomial 69

5.3 – Simplificação de polinômios em frações parciais 71

5.4 – Avaliação de valores de polinômios 72

5.5 – Integração e derivação de polinômios 74

5.5.1 – Derivação de polinômios 74

5.5.2 – Integração de polinômios 74

Exercícios de fixação 76

Capítulo 6 – Gráficos 78

6.1 – Gráficos em duas dimensões 78

6.1.1 – Gráficos simples em duas dimensões 78

6.1.2 – Múltiplos gráficos em duas dimensões 81

6.1.3 – Múltiplos gráficos em uma janela 82

6.1.4 – Utilização do comando subplot 84

6.1.5 – Gráficos especializados 85

6.1.5.1 – Barras 85

6.1.5.2 – Gráfico Pizza 87

6.1.5.3 – Área 88

6.2 – Gráficos em três dimensões 89

6.2.1 – Gráficos simples em três dimensões 89

6.2.2 Comando Mesh, Contour e Surf 92

Exercícios de fixação 95

Capítulo 7 – MATLAB® para análises numéricas 98

7.1 Diferenciação 98

7.1.1 Derivadas simbólicas – Diff 98

7.1.2 – Função jacobian 100

7.2 – Limites – função limit 101

7.3 – Integração – função int 104

Page 6: Fundamentos de MATLAB Para Engenheiros

Exercício Aplicado 107

Capítulo 8 – Simulink 112

8.1 – Introdução 112

8.2 – Inicialização do Simulink 112

8.2.1 – Blocos principais 114

8.2.1.1 – Bloco Sum 115

8.2.1.2 – Bloco Gain 115

8.2.1.3 – Bloco Constant 115

8.2.1.4 – Bloco Integrator 116

8.2.1.5 – Bloco Derivative 116

8.2.1.6 – Bloco Product 116

8.2.1.7 – Bloco Math Function 116

8.2.1.8 – Bloco Scope 117

8.2.2 – Outros blocos 117

8.2.2.1 – Bloco Sin 117

8.2.2.2 – Bloco Step 118

8.2.2.3 – Bloco Ramp 118

8.2.2.4 – Bloco Random 118

8.3 – Exemplos 119

Exercícios de fixação 124

Capítulo 9 – Guia de Interfaces 125

9.1 Criação da Interface 126

9.2 Escolha, Locação e Dimensionamento de Objeto 128

9.3 Maximização e Minimização 134

9.4 O Botão Executar 135

9.5 Barra de Menus 139

Exercícios de fixação 141

Page 7: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 1

Capítulo 1 – Introdução ao MATLAB®

1.1 - Introdução

O MATLAB® (Matrix Laboratory) é um software para computação

numérica, que pode ser utilizado em um ambiente de programação fácil, no

qual os problemas e soluções são expressos de forma simples. Seus elementos

básicos são matrizes que não requerem dimensionamento. Ele permite inserir e

resolver problemas matemáticos de forma muito mais rápida e eficiente que

através de outras linguagens como C++, Basic ou Pascal.

O MATLAB® pode ser utilizado para uma ampla faixa de aplicações,

incluindo processamento de sinais e processamento de imagem, comunicações,

controle de processos, medições e testes, análise e modelagem financeira,

biologia computacional, biogenética, entre outros.

O MATLAB® ainda possui uma família de aplicativos específicos

(toolboxes), que são coleções de funções usadas para resolver determinados

problemas tais como: otimização, manipulação algébrica, redes neurais,

processamento de sinais, simulação de sistemas dinâmicos, entre outros.

Provavelmente, a característica mais importante do MATLAB® é a sua

extensibilidade, que permite que milhares de engenheiros, matemáticos,

funcionários das mais diversas indústrias, o utilizem no dia a dia como uma

linguagem técnica de computação. Pois mesmo com um conhecimento limitado

da língua um programador iniciante pode escrever seu próprio código para

resolver problemas que são complexos o suficiente para serem resolvidos por

outros meios.

1.2 – História do MATLAB®

Cleve Moler foi um professor de matemática e ciência da computação na

Universidade do Novo México. Quando ele desenvolveu a primeira versão do

MATLAB®, Moler queria que seus alunos tivessem acesso ao software Linpack e

Eispec sem ter que usar a linguagem de programação Fortran, que era

complexa. De acordo com a "Scientific Computing World", Moler desenvolveu o

sistema do Matlab para resolver este problema e a linguagem foi projetada

especificamente para lidar com cálculos com matrizes e da área das ciências

exatas.

Page 8: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 2

A linguagem logo se espalhou para outras universidades e encontrou um

público interessado dentro da comunidade matemática e de ciências exatas,

além das engenharias. Jack Little, um engenheiro, conheceu o MATLAB®

durante uma visita feita à Universidade de Stanford em 1983.

Reconhecendo o seu potencial comercial, ele se juntou com Moler e

Bangert. Eles reescreveram MATLAB em C e fundaram a MathWorks em 1984

para continuar o seu desenvolvimento. Em 2000, o MATLAB foi reescrito para

usar um novo conjunto de bibliotecas para auxiliar os usuários na manipulação

de matrizes.

1.3 Aprendendo a utilizar o MATLAB®

Para ter acesso ao MATLAB® o usuário deve tê-lo instalado em seu

computador ou ter o programa disponível na rede em que está conectado. Para

iniciar o MATLAB® a partir do Windows, dê um duplo clique no ícone

MATLAB® em seu Windows desktop. O ícone do MATLAB® é mostrado na

figura 1.1.

Figura 1.1 – Ícone representativo do MATLAB®

Para iniciá-lo a partir de uma plataforma UNIX, digite MATLAB no

prompt de comando do sistema operacional. Quando o MATLAB® é iniciado, a

área de trabalho MATLAB® é visualizada, entretanto nenhuma atividade pode

ser realizada, devido ao fato que o mesmo se encontra em estado de

inicialização, conforme pode ser visto na figura 1.2.

Figura 1.2 – Barra de status no momento da inicialização do MATLAB®

Page 9: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 3

A inicialização do programa possui tempo que varia conforme a

capacidade de processamento do computador utilizado. Quanto maior a

capacidade de processamento, menor é o tempo que é necessário para a

inicialização do MATLAB®. Ao término da inicialização, na barra de status

aparecerá a palavra Ready, indicando que o programa se encontra disponível

para ser utilizado.

Figura 1.3 – Barra de status indicando disponibilidade para inserção de comandos no

MATLAB®

A janela na área de trabalho que nos interessa é a Janela de Comando,

onde o prompt especial é exibido. Isto significa que o MATLAB® que está

esperando por um comando. O prompt no MATLAB® é indicado pelos

caracteres (<<), seguida da barra vertical pulsante. Nesta situação, o usuário

identifica a disponibilidade de inserção de comandos no MATLAB®.

Figura 1.4 – Prompt de comandos no MATLAB®

Você pode sair a qualquer momento do MATLAB com os comandos exit

e quit.

1.4 – Ambiente de trabalho

Na área de trabalho do MATLAB® pode-se dividir a configuração da

interface gráfica em cinco barras e quatro janelas. As barras são imutáveis e a

opção que o usuário possui é de apenas deixá-las ou não visíveis. O MATLAB

tem disponíveis cinco barras, sendo quatro delas na parte superior da interface

gráfica e a última na parte inferior. A figura 1.5 fornece o posicionamento e o

nome das barras disponíveis no MATLAB®.

Page 10: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 4

Figura 1.5 – Barras disponíveis na interface gráfica principal do MATLAB®

A primeira barra (no sentido descendente) é a barra de títulos. Nela

encontramos o título do programa. Abaixo da barra de títulos se encontra a

barra de menus. Através dela podemos acessar todas as ferramentas disponíveis

no programa.

A terceira barra no sentido descendente é a barra de ferramentas e está

no mesmo nível da barra de endereços. Na barra de ferramentas observamos

atalhos para as principais aplicações do programa como copiar, colar, abrir novo

editor de texto. Na barra de endereços, os diretórios podem ser acessados

através de um sistema de endereçamento similar ao do WINDOWS. Na parte

inferior da interface encontramos a barra de status. Nela podemos saber qual a

situação de operação do programa.

Em relação às janelas, o usuário possui a oportunidade de modificar a

aparência e o local dela no gráfico, proporcionando conforto e praticidade ao

usuário. As quatro janelas que existem inicialmente na área de trabalho são o

Workspace (Memória Temporária), Command History (Histórico de

Comandos), Current Directory (Diretório Atual) e Command Window (Janela

de Comando). As quatro janelas podem ser vistas na figura 1.6.

Page 11: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 5

Figura 1.6 – Janelas presentes na interface gráfica principal do MATLAB®

1.4.1 Janela Command Window

Na figura 1.6 é possível visualizar quatro janelas dispostas lado a lado. A

janela da direita é denominada Command Window, ou simplesmente janela de

comando. Nela são executados os comandos principais para a realização de

seus trabalhos. Se o sistema não estiver executando uma atividade que utilize

toda sua memória, você irá encontrar um prompt indicando que o programa

aguarda suas instruções, conforme visto na figura 1.4.

À medida que o usuário digita os comandos na janela de comando os

mesmos permanecem nela, incomodado com a grande quantidade de

informações o usuário pode desejar apagar os textos desejados da janela. Para

isso basta a utilização do comando [>> clc].

Figura 1.7 – Janela de Comando

Page 12: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 6

1.4.2 Janela Workspace

Na parte superior esquerda da figura 1.4, está a janela responsável pela

memória temporária “visível” do programa, a Workspace, figura 1.8. Sua

memória é tida como temporária uma vez que desligado o programa, os dados

inseridos nela serão apagados. Nele podemos encontrar todos os dados

disponibilizados ao MATLAB® e além disso verificar seu valor, e em caso de

vetores é mostrado valores máximos e mínimos.

Quando o usuário utiliza diversos comandos, há o preenchimento da

janela Workspace que não interfere significativamente na linha de raciocínio do

programa, mas pode haver por parte do usuário o desejo de limpar a memória

temporária. É sempre recomendada a limpeza da tela principalmente após o

usuário utilizar um código e for utilizar outro diferente, pois pode haver

confronto das variáveis presentes.

Para limpá-la se utiliza o comando [>> clear]. Obs: O usuário pode fazer

a limpeza de apenas um dos itens caso da memória temporária, sendo o

comando responsável o clear seguido do nome da variável desejada de

exclusão [ex.: clear b].

Outro comando que é importante aqui é o comando who, que mostra ao

usuário todas as variáveis que estão na memória temporária do programa. Para

saber mais detalhes sobre as variáveis, o comando whos deve ser utilizado para

obter tais informações.

Figura 1.8 – Workspace

Page 13: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 7

1.4.3 Janelas Command History e Current Directory

Abaixo da Workspace temos duas janelas divididas por meio de um

sistema de abas. A janela Command History, figura 1.9, e a janela Current

Directory, figura 1.10. A primeira é responsável por listar o histórico de

comandos da Command Window. É subdividida por data e locada na memória

permanente. A limpeza de seu histórico pode ser executada com comando de

rightclick, ou comando de clique direito executado através do botão direto do

mouse, embora não seja aconselhada.

Já a segunda janela, exibe o diretório atual no qual os comandos são

executados, diretório esse igual ao definido pela barra de endereços. Nela serão

exibidos todos os arquivos ou subdiretórios contidos no diretório escolhido,

mesmo que estes contenham atribuições de sistema, oculto ou somente leitura.

Figura 1.9 – Command History Figura 1.10 – Current Directory

1.5 Declaração de Variáveis

Para que o usuário possa utilizar o MATLAB® de forma correta, é

necessário que além dos comandos digitados corretamente que as variáveis

também sejam digitadas corretamente. No MATLAB® as regras para escrita de

variáveis são as seguintes:

a) As variáveis não podem ter espaços em seu nome, isto é, devem

ser palavras únicas: [ex.: velocidademaxima, diasdoano, valorgasto]

b) Variáveis são sensíveis às letras maiúsculas e minúsculas, assim, a

mesma palavra com letra maiúscula é diferente de outra com letra

minúscula. [ex.: Tempo, TEMPO e tempo são variáveis diferentes]

c) As variáveis devem ter no máximo 31 caracteres.

Page 14: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 8

d) Nas variáveis não pode haver caracteres especiais (acentos,

cedilha, sinais exclamativos ou interrogativos, etc)

e) As variáveis não podem ter o nome de uma função interna do

MATLAB® [ex.: if, for, sin, quit]

As funções do MATLAB® devem ser sempre escritas com todas as letras

minúsculas (ex: sin, cos, log, plot, median).

O MATLAB contém além das variáveis que são criadas pelo usuário as

variáveis especiais, que são comuns no dia-a-dia do programador, são elas:

Inf Infinito (alguma divisão por zero)

NaN Não um Número (pode ser um texto ou valor indefinido 0/0)

i e j Número imaginário (sqrt(-1))

ans Variável utilizada para exibição dos resultados padrão

pi 3.14159265358979...

As constantes Inf e NaN não representam valores numéricos em sua

essência. São apenas conceitos desenvolvidos pelo sistema e que precisam ser

interpretados de forma correta. Para isso é necessário ser lembrado o conceito

de underflow e overflow.

Para as máquinas, cuja capacidade de processamento é limitada e os

cálculos são executados de modo numérico, o limite para o valor de zero e o

valor de infinito é criado a partir de um limite que dependerá da quantificação

que o computador pode medir.

O maior valor real que pode ser encontrado no MATLAB® pode ser

encontrado utilizando o comando realmax. Um valor que seja maior do que

esse valor real, será interpretado pela máquina como valor infinito, da mesma

forma será para algum valor abaixo do valor mínimo, realmin. Para o caso do

valor zero, é necessário conhecer sobre a precisão numérica do MATLAB®,

através do comando eps. Qualquer valor abaixo do eps não será reconhecido

caso a operação executada com valores em uma escala superior, e o resultado

para o MATLAB® será considerado como zero.

Page 15: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 9

Figura 1.11 – Exemplificação de overflow e underflow.

1.6 Erros

No MATLAB®, assim como em todos os programas no qual o usuário é

responsável por escrever o código da operação desejada, é suscetível à aparição

de erros, o que impede o desenvolvimento do programa e gera uma resposta

que não é exata para o usuário. Podem-se classificar os erros do MATLAB® em

cinco tipos de erros, no qual quatro deles são devidos à má observação do

usuário e o último dos cinco é em relação ao próprio programa utilizado.

Os erros que são vistos no MATLAB são os seguintes:

1) Sintaxe

2) Argumentos

3) Interrupção

4) Memória

5) Java Script

O Erro de Sintaxe ocorre quando o usuário insere alguma função ou

código que não é reconhecida pelo programa. Este é o tipo de erro que é o

mais fácil de ser corrigido, e o próprio MATLAB® ajuda o usuário indicando a

linha, coluna e expressão que não foi identificada gerando um link que leva

direto à expressão não conforme, facilitando a tarefa de correção do programa.

Os principais exemplos desse tipo de erro são: Nomes de funções digitados

erradamente, falta de balanceamento de sinais e parênteses ou pontos, matrizes

com termos não corretos, entre outros.

O Erro de Argumento ocorre quando o usuário insere os valores de

maneira errônea no programa. Exemplos dessa situação ocorrem quando é

inserido um valor que não está na faixa correta da função, ou a função necessita

de vários valores e o usuário se esquece de digitar algum deles.

Page 16: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 10

Os Erros de Interrupção ocorrem quando o programa é parado de

maneira súbita devido à interrupção do código compilado pelo usuário. Uma

maneira que o usuário pode fazer isso é através do comando [Ctrl + C]. A

interrupção pode ocorrer em qualquer momento em que algum código está

sendo calculado pelo usuário.

Os Erros de Memória ocorrem quando a memória do sistema é excedida

devido a grande quantidade de cálculos executados no sistema. Caso o usuário

se depare com tal problema, uma maneira para solucionar é tentar utilizar uma

quantidade menor de variáveis no workspace.

Para erros causados por problemas de lógica interna de programação do

software, geralmente erros em código Java, ou Java Script, o MATLAB® compila

o mesmo erro “viciando” a lógica de execução do software. Nesses casos é

necessário reiniciar o sistema, ou até reinstalar o programa em alguns casos.

A figura 1.12 mostra como os erros podem ser visualizados na janela de

comando do MATLAB®, onde logo após a função ser chamada pelo usuário,

ocorre a identificação do erro e a exibição para o usuário utilizando as

interrogações (???), e o motivo da não compilação do código em vermelho.

Embora existam muitas classes de erros, após o convívio com o software o

usuário pode se acostumar na identificação do erro e correção do mesmo de

modo rápido e eficaz.

Figura 1.12 – Exemplo de erros que podem ser encontrados no MATLAB®

Page 17: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 11

1.7 Trabalhando com escalares

O MATLAB® tem em seu nome o objetivo principal do programa, que é

a utilização de matrizes para realizar cálculos diversos. Embora possam ocorrer

diferenças na definição de matrizes e escalares, para o MATLAB® os valores

escalares são tratados como uma matriz 1x1. Assim o escalar pode ser chamado

de matriz de dimensão nula ou apenas de matriz com um elemento.

Assim, para trabalharmos utilizando escalares devemos saber as regras

de operações para execução dos cálculos de maneira fiel e interessante. Tais

regras não podem ser diferentes do que é utilizado para cálculos matriciais.

Os cálculos executados posteriormente fornecerá ao usuário a

compreensão dos cálculos no MATLAB®.

>> 2 * 2 + 4

ans =

8

>> 2 * 2 + 4 / 2

ans =

6

Quando o comando a ser inserido for idêntico ou semelhante a outro

inserido anteriormente utilize as setas de navegação ↓ e ↑ do seu teclado, para

ter acesso mais rápido á expressão anterior e modificá-la de modo a fornecer o

resultado desejado.

>> 2 * (4 + 4) / 2

ans =

8

>> 2 * (4 * 4 – 2) / 2

ans =

14

>> 2 * (4 * (4 – 2)) / 2

ans =

Page 18: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 12

8

>> 4 ^ 2

ans =

16

>> 4 ^ 2 * 2

ans =

32

>> 2 ^ (3 * 3)

ans =

512

>> 2 / 4

ans =

0.5

>> 2 \ 4

ans =

2

Para suprimir a visualização do resultado das operações insira „ ; ‟ no fim

de cada comando.

A potência de base 10 é representada inserindo a letra “e” ou “E” entre a

notação decimal e a potência da base, sem espaços, como mostra a seguir.

>> 5.347e2

ans =

534.700

>> 5.347E-2

ans =

Page 19: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 13

0.0535

As operações no MATLAB® são organizadas em uma ordem de

prioridades, que pode ser chamada de hierarquia. A prioridade pode ser visto

de acordo com a tabela 1.1.

Operação Nome Prioridade

() Precedência 1º

^ Potência 2º

/ Divisão à direita 3º

\ Divisão à esquerda 4º

* Multiplicação 5º

+ Soma 6º

─ Subtração 7º

Tabela 1.1 – Hierarquia de operações

1.8 – Formatos de exibição

A exibição de valores na janela de comando do MATLAB® é gerada

inicialmente no format short, que é o que vem instalado no programa. Outros

formatos podem ser utilizados para exibição dos resultados, sendo cinco deles

abordados logo abaixo. Para uma ajuda a respeito dos formatos de exibição de

resultados no MATLAB®, utilize o comando [>> help format]

>> var = 0.5555555555

var =

0.5556

>> format short e

>> var

ans =

5.5556e-001

>> format long

>> var

ans =

0.555555555500000

>> format long e

>> var

ans =

5.555555555000000e-001

Page 20: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 14

>> format bank

>> var

ans =

0.56

>> format short

>> var

ans =

0.5556

1.9 – Funções Matemáticas Elementares

Abaixo, uma lista com as funções matemáticas elementares do

MATLAB®. Fica como sugestão ao aluno a utilização do help para aprender

sobre a utilidade de cada uma das funções. Nas funções trigonométricas, a

utilização do „d‟ após a função indica que o resultado, ou o argumento de

entrada, devem ser em graus „º‟ e não radiano, argumento padrão das funções

trigonométricas.

TRIGONOMÉTRICAS

sin cos tan sec csc cot

sind cosd tand secd cscd cotd

sinh cosh tanh sech csch coth

asin acos atan asec acsc acot

asind acosd atand asecd acscd acotd

asinh acosh atanh asech acsch acoth

EXPONENCIAL

exp log log10 log2 reallog sqrt

ARREDONDAMENTOS

fix floor ceil round mod rem

1.10 – Help

O help é conhecido como o comando mais importante de todo o

software, pois considerando as diversas áreas às quais o MATLAB® atende, é

praticamente impossível que alguém conheça todos os comandos

memorizados. Assim, o comando help consegue atender a todos os públicos

Page 21: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 15

que utilizam o software, sendo considerado como uma das mais completas

interfaces de ajuda na classe dos softwares acadêmicos.

Existem duas formas de acesso ao help, quando considerado de forma

geral. A primeira é através do botão que fornece acesso à interface gráfica

da ajuda do MATLAB® conforme figura 1.13. Na interface específica há quatro

abas que fornecem o conteúdo do help que é fornecido através de Contents

(Bibliotecas), Indexação de Palavras (Index), Resultado de pesquisas (Search

Results) e exemplos demonstrativos (Demos).

A outra forma de acesso ao help é através do prompt de comando do

MATLAB® utilizando o comando >> help, gerando as informações presentes na

figura 1.14.

Figura 1.13 – Interface gráfica de ajuda do MATLAB®

Page 22: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 16

Figura 1.14 – Help no prompt da janela de comando

Outra opção para o usuário é a ajuda específica, onde é digitado na

janela de comandos o [>> help comando], sendo fornecido como resultado a

explicação do comando inserido e para vários casos um exemplo do uso do

comando é fornecido logo após a explicação do mesmo. Na figura 1.15 é

mostrado o resultado quando se utiliza [>> help plot] na janela de comando. O

plot é o comando utilizado para criação de gráficos através de vetores x e y.

Figura 1.15 – Exemplo utilizando help de comando específico na janela de comando

É recomendado que para alguma dúvida que o leitor possuir, utilizar

inicialmente o help disponível no MATLAB®. Caso não encontre o resultado

desejado, procurar ajuda na internet e com colegas ou profissionais que

utilizam o software.

Page 23: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 17

1.11 – Editor de texto

Para acessar o editor de texto do MATLAB® o usuário deve digitar o

comando [>> edit]. No editor do texto o usuário pode digitar todo o script e

compilar o código apenas quando desejar, apertando para isso o botão play ou

F5. Na janela de comando isso não é possível, visto que a cada linha digitada

pelo usuário, há a execução da mesma pelo programa.

O uso do editor de texto tem outra grande vantagem em relação à janela

de comando. No caso do código digitado apresentar erros, na janela de

comando será impresso onde o erro foi originado, linha e coluna, e o tipo do

erro, facilitando o trabalho do usuário na identificação e correção dos erros.

Figura 1.16 – Editor de texto do MATLAB®

Page 24: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 18

Exercícios de fixação

1. Experimente modificar o layout de seu ambiente de trabalho, isto é,

modifique a janela de comando, a memória temporária, o histórico de

comandos e o diretório atual de seus locais iniciais. Depois disso tente

recolocá-los em seu local de origem. Obs: Caso alguma destas janelas

seja excluída, recupere-a na aba Desktop presente na barra de menus.

2. Experimente agora modificar as características da fonte e da cor de fundo

utilizadas. Vá em File >> Preferences >> Fonts >> Colors. Caso deseje

voltar à configuração inicial siga os passos acima e clique em „use system

colors’.

3. Verificar as mudanças que ocorrem na visualização dos valores abaixo no

Matlab quando se utiliza os comandos a seguir:

a = 1, b = 100 e c = 0.01

a) >> format bank

b) >> format compact

c) >> format loose

d) >> format short eng

e) >> format hex

f) >> format short

4. Utilizando o help da janela de comando, leia brevemente a definição

(primeiro parágrafo do help) e depois use o comando para verificar o

que ocorre. Obs: Alguns comandos necessitarão de argumento para

fornecer valores de saída, com exemplos indicados ao lado do comando.

a) >> help date

b) >> help uicalendar

c) >> help magic , digite a = magic(3)

d) >> help sin , digite b = sin(pi)

e) >> help sind , digite c = sind(pi)

f) >> help roots , digite (i) d = [1 -4 3] (ii) e = roots(d)

g) >> help poly , digite (i) f = [2; 3] (ii) g = poly(f)

Page 25: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1

Instrutor: Fernando Wesley 19

h) >> help linspace , digite (i) linspace(1,5) (ii)

linspace(1,5,10)

5. Identifique os erros presentes nas linhas de comando abaixo.

a) >> A = [1 2 3 4; 2: 2: 10]

b) >> B = sen(0.92)

c) >> C = sin(0,92)

d) >> D = (3 + 5 – 2*cos(pi) – exp(3))/(ln(1))

e) >> Módulo = abs(cos(-22) + 3^4)

Page 26: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 20

Capítulo 2 – Operações com Matrizes

No capítulo anterior aprendeu-se a trabalhar com escalares, realizando as

operações aritméticas de maneira simples, sem necessidade de declaração do

formato da variável. O MATLAB® (Matrix Laboratory) considera um escalar

como uma matriz de dimensão nula (1x1), mas há a possibilidade de trabalhar

com matrizes maiores que apresentam o formato retangular ou quadrado. O

objetivo desse capítulo e aprender as principais operações de matrizes no

MATLAB®.

2.1 Operações com Matrizes

Matrizes ou variáveis podem ser criadas com ou sem a utilização de um

incremento. Sem incremento será necessário digitar todos os elementos da

matriz, o que não ocorre com a criação por incremento.

Como sabemos, uma matriz pode ser dividida em elementos de linha e

coluna. No MATLAB®, para separar elementos em coluna utilizamos o “espaço”

ou “ , ”. Para separarmos em linhas utilizamos o “ ; ”. Observe a seguir.

Para criar uma matriz ou vetor linha:

>> A = [2 4 6]

A =

2 4 6

Para uma matriz ou vetor coluna:

>> A = [2;4;6]

A =

2

4

6

Para uma matriz ou vetor misto:

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

A =

1 2 3

4 5 6

7 8 9

Page 27: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 21

Algumas matrizes, devido a sua importância, podem ser criadas com

simples comandos como pode ser observado a seguir.

Para uma matriz Identidade:

>> I = eye(5)

I =

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

Para uma matriz Nula:

>> Z = zeros(3,2)

Z =

0 0

0 0

0 0

Para uma matriz Unitária:

>> U = ones(2,3)

U =

1 1 1

1 1 1

Para uma matriz Randômica:

>> W = rand(2,3)

W =

0.2785 0.9575 0.1576

0.5469 0.9649 0.9706

A matriz randômica retorna um vetor com números aleatórios entre zero

e um.

Para criar variáveis (vetores/matrizes) por incremento seguimos a

seguinte sintaxe:

Page 28: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 22

nº inicial : incremento : nº final

DICA: se o incremento for igual a 1, não precisa indicá-lo.

Este tipo de configuração representa a criação de uma seqüência

numérica de valor inicial igual ao nº inicial, valor final igual ao nº final e,

intercaladas por valores cuja diferença e igual ao incremento. Observe na

prática a seguir.

>> A = 10:1:20

A =

10 11 12 13 14 15 16 17 18 19 20

>> A = 10:2:20

A =

10 12 14 16 18 20

>> A = [1:5; 2:2:10]

A =

1 2 3 4 5

2 4 6 8 10

Quando o incremento não é informado o sistema admite como sendo o

padrão, ou seja, incremento de valor 1 (um).

Embora a aritmética de máquina seja, em parte, diferente da habitual, as

matrizes estão sujeitas as mesmas regras de operação. Veja na prática a seguir

alguns casos de operações com matrizes.

Sejam as matrizes

>> A + B

??? Error using ==> plus

Matrix dimensions must agree.

>> B + C

ans =

Page 29: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 23

5 5 4

-3 7 9

>> B * C

??? Error using ==> mtimes

Inner matrix dimensions must agree.

>> A * B

ans =

-8 11 10

-20 29 22

-32 47 34

O MATLAB® dispõe de outros operadores matemáticos que podem

facilitar as operações matriciais como mostra a prática a seguir. Sejam as

matrizes:

>> D = [1 2; 3 4]

D =

1 2

3 4

>> E = [5 6; 7 8]

E =

5 6

7 8

>> D * E

ans =

19 22

43 50

É diferente de

>> D .* E

ans =

5 12

21 32

>> D / E

ans =

Page 30: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 24

3.0000 -2.0000

2.0000 -1.0000

É diferente de

>> D ./ E

ans =

0.2000 0.3333

0.4286 0.5000

>> D ^ 2

ans =

7 10

15 22

É diferente de

>> D .^ 2

ans =

1 4

9 16

Ainda se pode obter a matriz transversa, utilizando o apóstrofo („).

>> F = [1 10 100; 2 20 200; 3 30 300]

ans =

1 10 100

2 20 200

3 30 300

>> G = F’

ans =

1 2 3

10 20 30

100 200 300

2.2 Indexação de matrizes

A indexação é uma forma de mapear, dentro da matriz, os elementos que

estão presentes nela. Através da indexação se pode inserir ou obter valores de

Page 31: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 25

forma simplificada. Existem duas formas de indexação, sendo a uma uni

paramétrica e a poli paramétrica.

Escreva a matriz:

Para obter os valores por meio da indexação uni paramétrica, deve-se

inserir a variável que representa a matriz seguido do valor entre parêntesis do

termo que deseja ser selecionado. Na indexação uni paramétrica, os valores

percorrem inicialmente a primeira coluna no sentido descendente, e chegando

ao elemento da última linha da coluna há a passagem para a coluna posterior.

>> A(1)

ans =

3

>> A(3)

ans =

-2

>> A(5)

ans =

0

>> A(7)

ans =

-1

>> A(8)

ans =

6

Na Indexação multi paramétrica os valores são representados da forma

A(i,j), onde i representa a linha e j a coluna da matriz avaliada.

>> A(1,2)

ans =

4

Page 32: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 26

>> A(3,1)

ans =

-2

>> A(2,2)

ans =

0

>> A(3,3)

ans =

-1

Caso o usuário deseje obter todos os valores da mesma linha ou da

mesma coluna, pode utilizar o comando dois pontos (:). Além de obter todos os

valores da mesma linha ou coluna, também se podem usar dois pontos para

limitar os valores desejados de várias linhas e colunas ao mesmo tempo.

>> A(:,3)

ans =

-1

6

-1

>> A(2,:)

ans =

1 0 6

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

ans =

3 4 -1

1 0 6

Além de obter valores, o usuário pode inserir e substituir valores na

matriz ou vetor desejado através da indexação, sendo esse método muito eficaz

e simples. Supondo que o usuário deseje tornar os valores que na matriz A são -

1 em valores 0, o mesmo poderá usar os seguintes comandos.

>> A(7) = 0

A =

Page 33: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 27

3 4 0

1 0 6

-2 9 -1

>> A(9) = 0

A =

3 4 0

1 0 6

-2 9 0

Também se pode usar a indexação poli paramétrica para modificar os

valores na matriz. O MATLAB® também pode indexar uma matriz através de

outra matriz.

2.3 – Análise de vetores

A análise de vetores é uma ferramenta importante, e através dela

podem-se descobrir diversas informações da matriz, evitando a necessidade de

procurar manualmente tais dados.

Utilizando os comandos para a matriz A:

>> A = [ 3 4 -1; 1 0 6; -2 9 -1]

A =

3 4 -1

1 0 6

-2 9 -1

>> numel (A)

ans =

9

Page 34: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 28

>> size(A)

ans =

3 3

>> ndims(A)

ans =

2

>> length(A)

ans =

3

>> diag(A)

ans =

3

0

-1

>> triu(A)

ans =

3 4 -1

0 0 6

0 0 -1

>> tril(A)

ans =

3 0 0

1 0 0

-2 9 -1

Page 35: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 29

2.4 – Números e matrizes complexos

No MATLAB® os números complexos são chamados utilizando i e j na

parte imaginária. Deve-se evitar criar variáveis com uma das letras, com

finalidade de evitar conflitos internos do programa.

>> C = 2 - 3i

C =

2.0000e+000 -3.0000e+000i

>> D = 3 - 4j

D =

3.0000e+000 -4.0000e+000i

>> E = C + D

E =

5.0000e+000 -7.0000e+000i

>> F = C*D

F =

-6.0000e+000 -1.7000e+001i

>> G = C/D

G =

7.2000e-001 -4.0000e-002i

Da mesma forma podem ser escritas matrizes com elementos complexos

nela

>> A = [2+1j 4-2i 3+9j]

A =

2.0000 + 1.0000i 4.0000 - 2.0000i 3.0000 + 9.0000i

>> B = [1 -3 2] +i*[-2 -4 1]

B =

1.0000 - 2.0000i -3.0000 - 4.0000i 2.0000 + 1.0000i

>> C = A + B

C =

3.0000 - 1.0000i 1.0000 - 6.0000i 5.0000 +10.0000i

Page 36: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 30

>> D = A.*B

D =

4.0000 - 3.0000i -20.0000 -10.0000i -3.0000 +21.0000i

Mais funções:

Comando Explicação Comando Explicação

eig

Determina

autovetores e

autovalores

poly Polinômio

característico

std Desvio padrão det Determinante

mean Média aritmética real Parte real do número

complexo

max Valor máximo imag Parte imaginária do

número complexo

min Valor mínimo rank

Determina o número

de linhas

independentes

Page 37: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 31

EXERCÍCIO APLICADO

Um grande forno industrial é suportado, em sua base, por três longas

colunas de concreto refratário, com 1 m por 1 m de lado, cada. Durante a

operação em condições de regime estacionário, a instalação é de tal forma que

três superfícies de cada coluna são mantidas a 500 K, enquanto a outra(inferior)

é exposta a uma corrente de ar para a qual T∞ = 300 K e h = 10 W/m2K. Uma

passagem abaixo de cada coluna garante que as mesmas sejam periodicamente

vistoriadas por técnicos. Utilizando uma rede de malha com Δx = Δy = 0,25 m,

determine se as passagens oferecem risco de queimadura aos técnicos.

(Transferência de calor e massa – Peter Incropera & De Witt, 5ed. LTC)

Considerações:

1. Regime estacionário.

2. Condução bidimensional.

3. Propriedades constantes.

4. Sem geração interna de calor.

Análise: Redução da rede de 12 pontos nodais para 8 através do eixo de

simetria.

Dessa forma, utilizando as equações de diferenças finitas (não-estendidas),

os balanços de energia para cada nó são dados como:

Page 38: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 32

internos não-simétricos:

Nó 1: T2 + T3 + 1000 – 4T1 = 0

Nó 3: T1 + T4 + T5 + 500 – 4T3 = 0

Nó 5: T3 + T6 + T7 + 500 – 4T5 = 0

internos simétricos:

Nó 2: 2T1 + T4 + 500 – 4T2 = 0

Nó 4: T2 + 2T3 + T6 – 4T4 = 0

Nó 6: T4+ 2T5 + T8 – 4T6 = 0

Nós da superfície plana:

Nó 7: 2T5 + T8 + 2000 – 9T7 = 0

Nó 8: 2T1 + T4 + 500 – 9T8 = 0

Reorganizando e agrupando as equações temos:

Na forma matricial temos:

Para resolver esse problema usaremos a técnica da inversão de matrizes.

[A] . [T] = [C]

[A]-1 . [A] . [T] = [A]-1 . [C]

[I] . [T] = [A]-1 . [C]

[T] = [A]-1 . [C]

Page 39: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 33

Primeiro criamos a matriz de coeficientes e constantes. Em linha de

comando teremos

>> A = [-4 1 1 0 0 0 0 0;...

2 -4 0 1 0 0 0 0;...

1 0 -4 1 1 0 0 0;...

0 1 2 -4 0 1 0 0;...

0 0 1 0 -4 1 1 0;...

0 0 0 1 2 -4 0 1;...

0 0 0 0 2 0 -9 1;...

0 0 0 0 0 2 2 -9]

A =

-4 1 1 0 0 0 0 0

2 -4 0 1 0 0 0 0

1 0 -4 1 1 0 0 0

0 1 2 -4 0 1 0 0

0 0 1 0 -4 1 1 0

0 0 0 1 2 -4 0 1

0 0 0 0 2 0 -9 1

0 0 0 0 0 2 2 -9

>> C = [-1000;-500;-500;0;-500;0;-2000;-1500]

C =

-1000

-500

-500

0

-500

0

-2000

-1500

Em seguida multiplicamos pela matriz de constantes

>> T = inv(A)*C

T =

489.3047

485.1538

472.0651

462.0058

436.9498

418.7393

356.9946

339.0520

Page 40: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 34

Os resultados podem ser interpretados considerando cada linha da

matriz T como a temperatura final de cada nó correspondente ao número da

linha. Dessa forma, na linha 1 teremos a temperatura do nó 1, na linha 5

teremos a temperatura do nó 5 e assim sucessivamente como mostra abaixo.

Porém, observe que a saída, neste caso uma matriz, não nos dá uma ideia

imediata do comportamento do sistema, além de ser mal visualizável. A fim de

dar um caráter mais profissional aos resultados é sugerido que os dados sejam

interpretados graficamente. Neste caso, como se trata de um mapeamento

bidimensional de uma grandeza física, podemos interpretá-los usando o

mapeamento de grandeza por escala de espectro visível.

No MATLAB® o comando utilizado é o imagesc.

>> Final = [500 500 500 500 500;...

500 489.3 485.2 489.3 500;...

500 472.1 462.0 472.1 500;...

500 436.9 418.7 436.9 500;...

500 356.9 339.1 356.9 500]

Final =

500.0000 500.0000 500.0000 500.0000 500.0000

500.0000 489.3000 485.2000 489.3000 500.0000

500.0000 472.1000 462.0000 472.1000 500.0000

500.0000 436.9000 418.7000 436.9000 500.0000

500.0000 356.9000 339.1000 356.9000 500.0000

>> imagesc(Final)

>> colorbar

>> grid

Page 41: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 35

Como resultado obtém-se a matriz:

A matriz pode ser representada pelo mapa de cores a seguir.

Page 42: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 36

Exercícios de fixação

1. Digite os valores abaixo para revisar e ampliar seu conceito sobre

matrizes no MATLAB®.

a) >> A = [-1.2*sin(4.76) exp(3.66*log(233)) 2.3+4/(5*cos(4))]

b) >> B = [1 2 3; 4 5 6; 7 8 9]

c) >> C = [1,2;3,4]

d) >> X = 1:10, Y = sin(X), Z = [X;Y]

e) >> E = [ 1 2 3 4; 5 6 7 8], F = [9 10 11 12], G = [E;F]

2. Sendo a matriz A = [1 2 3; 4 5 6; 7 8 9]:

a) A uma variável B, atribua o elemento a22.

b) A uma variável C, atribua o elemento a13.

c) Em um vetor linha D, atribua os elementos a12, a21 e a33.

d) Obtenha um vetor coluna E com os elementos a23, a31 e a32.

e) Por fim ache uma matriz 3x3 com a primeira coluna sendo o vetor D,

a segunda sendo o vetor E transposto e a terceira coluna sendo a

soma das duas anteriores.

3. Para a matriz N = [1 2; 3 4], verifique através dos comandos aprendidos:

a) O determinante de N é não nulo.

b) Existe uma matriz inversa tal que M = inv(N).

c) Verifique que o det(N) = 1/det(M) e det(N)*det(M) = det(N*M) = 1

4. Uma matriz de 3 dimensões pode ser considerada como uma que possui

largura, comprimento e profundidade. Nessa situação, a matriz que

desejamos deve ter 3 linhas, 4 colunas e 2 páginas de „profundidade‟.

>> M3d = rand(3,4,2)

Tire a média dos seguintes valores M3d(1,2,2), M3d(2,4,2), M3d(3,1,1) e

M3d(1,4,1). Verifique que esse valor é menor do que 1. Por quê?

5. Há dois comandos que são utilizados em matrizes, que são o sparse e o

full. Utilize o help e verifique a diferença entre ambos para a mesma

matriz.

Page 43: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2

Instrutor: Fernando Wesley 37

6. Crie uma matriz linha cujo valor dos elementos variem de 1 a 100 com

incremento de 2. Visualize-a pelo mapa de cores. No final da linha da

matriz adicione elementos que variem de 100 a 1, na forma decrescente.

Visualize a matriz resultante no mapa de cores.

Page 44: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 38

Capítulo 3 – Fundamentos da programação no MATLAB®

O objetivo desse capítulo é capacitar o aluno a realizar as principais

operações no MATLAB® que dizem respeito aos operadores lógicos e de

controle de fluxo do programa. Para isso será usado o editor de texto do

MATLAB® a partir desse capítulo.

Conforme visto no último tópico do primeiro capítulo, as vantagens da

utilização do editor de texto são o principal motivo para utilizarmos o mesmo.

Durante a inserção dos códigos no editor será comum a aparição de erros, e

nessa situação, o programa identifica o erro, indica o local de ocorrência e

fornece um link para que o usuário possa corrigi-lo.

Quando se inicia um código em um editor de texto, uma forte

recomendação é que haja um cabeçalho no mesmo, para indicar ao usuário o

objetivo, as principais variáveis do programa, o que é aceito para cálculo e

demais informações que sejam consideradas importantes. Deve-se comentar o

máximo possível para que outra pessoa que possa utilizar o código consiga

entende-lo sem dificuldade. Os comentários podem ser inseridos após um

comando escrito pelo usuário, apenas há a necessidade do sinal de

percentagem ficar após o comando e antes do texto que se deseja usar como

comentário.

Para criar comentários o usuário deve iniciar a sentença utilizando um

sinal de percentagem (%), ou utilizando o comando CTRL+R na seleção. O

comentário possui coloração verde no editor de texto.

Figura 3.1 – Comentários no editor de texto.

Page 45: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 39

No editor de texto existe uma tênue linha vertical que divide a tela

aproximadamente pela metade, sendo essa linha o limite de impressão do

MATLAB®. É também recomendado que o usuário não ultrapasse essa linha,

pois em caso de necessitar imprimir o código fonte escrito, provavelmente o

resultado será uma impressão desconfigurada. Caso o usuário tenha um código

extenso, pode utilizar o comando três pontos (...) para indicar ao programa que

o código continua na linha inferior. Os três pontos apresentarão coloração azul.

Outra recomendação que é importante é a respeito da organização das

funções salvas. É fortemente recomendado que o usuário salve suas funções em

pastas exclusivas, sendo funções diferentes em pastas diferentes. Apenas no

exemplo em que o usuário necessite de mais funções para resolver um único

problema, todas devem estar na mesma pasta.

Assim:

a. Comentar o código escrito ao máximo

b. Evitar ultrapassar a linha de impressão

c. Salvar funções com objetivos diferentes em pastas diferentes.

Além dos cuidados a respeito do código em si, o usuário deve atentar

para o nome do arquivo no momento de salvar o mesmo. Existem algumas

regras a respeito do nome do arquivo no MATLAB®.

a. Não pode conter caracteres especiais

b. Não pode ter espaços

c. Não pode iniciar com números

d. Não pode ter nome de funções do programa (ex: if, cos, for)

e. Não deve ultrapassar a quantidade de 31 caracteres

É importante verificar todas as cinco condições acima antes de salvar um

arquivo no MATLAB®, pois pode ocorrer que o código esteja correto, mas não

irá compilar devido a conflitos internos gerados pelo nome do arquivo.

3.1 Expressões Booleanas

As expressões booleanas são regras estabelecidas para definir, simplificar

e manipular funções lógicas baseadas em afirmações que são verdadeiras ou

falsas.

Independente da simbologia utilizada na interface usuário-máquina, a

condição de verdadeiro ou falso, internamente à máquina, é interpretada

Page 46: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 40

segundo o reconhecimento de dois caracteres: 0 (zero) e 1 (um). No caso do

MATLAB®, zero implica numa condição falsa, vazia, nula ou nil, ao contrário do

um que está relacionado a uma condição verdadeira.

Os símbolos de teste e operadores booleanos podem ser resumidos pela

tabela 3.1 e tabela 3.2, respectivamente. Embora possua simbologia distinta, na

maioria dos casos, a lógica de tais operadores é encontrada em qualquer

plataforma de programação.

Símbolo Teste Exemplo

== Igual A == B (A igual a B)

~= Diferente A ~= B (A diferente de B)

< Menor que A < B (A menor que B)

> Maior que A > B (A maior que B)

<= Menor ou igual A <= B (A maior ou igual a B)

>= Maior ou igual A >= B (A menor ou igual a B)

Tabela 3.1 – Teste de expressões booleanas.

Símbolo Operador Exemplo de Composição

& E A & B (A e B verdadeiros)

| OU A | B (A ou B verdadeiros)

Tabela 3.2 – Operadores de expressões booleanas.

Além desses clássicos testes e operadores booleanos o MATLAB®

disponibiliza outros operadores que podem simplificar, em alguns casos,

reduzindo a quantidade de comandos a serem digitados. São conhecidas, em

alguns casos como funções booleanas matriciais, pois são aplicadas a matrizes e

não a “escalares”. As mais importantes podem ser observadas na tabela 3.3.

Função Teste retorna verdadeiro se Exemplo

isempty matriz é vazia isempty(M)

isequal as matrizes forem numericamente iguais isequal(M)

isnumeric matriz é numérica isnumeric(M)

ischar matriz é alfanumérica ischar(M)

Tabela 3.3 – Funções booleanas matriciais.

3.2 Estrutura if – elseif - else

O if – elseif – else é uma estrutura de seleção que tem a função de

selecionar um dado ou conjunto de dados segundo uma propriedade inerente

ao mesmo ou selecionar uma função a ser executada. O MATLAB® possui dois

Page 47: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 41

tipos de estruturas de seleção: if-elseif-else, e switch-case-otherwise. O primeiro

é comum em outras linguagens de programação. Tais estruturas são

implementadas utilizando as expressões booleanas descritas anteriormente. Sua

estrutura e o significado lógico de sua sintaxe são exibidos na figura 3.2.

Figura 3.2 – Estrutura e sintaxe lógica da estrutura de seleção if.

A aplicação desse tipo de estrutura pode ser ilustrada nos exemplos a

seguir. Para executar os scripts pressione o botão F5 ou clique no botão .

Escreva o código abaixo em um editor de texto e verifique o resultado

>> x = 3*sin(exp(52.3))+22/(cos(43)*2.44);

if x >= 100

resposta = 'X é maior do que 100'

elseif x < 10

resposta = 'X é menor do que 10'

else

resposta = 'X está entre 10 e 100'

end

EXERCÍCIO APLICADO 1

Problema 3.1

O sistema supervisório de uma unidade de Destilação à Vácuo recebe,

em tempo real, sinais que lhe permite, dentre outros, a manipulação do sistema

de alarmes da unidade. Dentro de um conjunto de atuações, o sistema envia

Page 48: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 42

diversas mensagens ao operador, lhe informando o motivo pelo qual o alarme

foi acionado. Além das mensagens, o sistema disponibiliza um código

numérico que é reconhecido como desativador da unidade.

Figura 3.3 – Diagrama esquemático do exercício aplicado.

Um dos sinais recebidos pelo operador é o da temperatura no interior da

Coluna (termopar 12). Tal temperatura não ser inferior a 900ºC e nem pode

exceder 1200 ºC. Crie parte do código do supervisório responsável pelas ações

acima. (Caso real: RELAN “MODIFICADO”).

Construir um código com os seguintes objetivos:

1. Confirmação do sinal recebido;

2. Análise do sinal recebido e atuações.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% O Script abaixo tem uma sugestão de resolução do problema 3.1 %

% %

% Data de criação: 15 de setembro de 2008. %

% Data da última atualização: 03 de janeiro de 2012. %

% Criado por: Phillipi Rodrigo de Oliveira Souza. %

% Atualizado por: Fernando Wesley Cavalcanti de Araújo. %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;clear % elimina o sinal anterior

sinal1 = inputdlg('Digite a temperatura atual’); %o operador insere a T em

ºC

sinal = str2double(sinal1); %converte de texto a

número

semsinal = isnan(sinal); %para verificação de sinal

%%%%% confirmação do sinal recebido %%%%%

if semsinal == 1 % não há recebimento do sinal

num_protc_seg = 1378; % nº protc seg a ser gerado

errordlg('Falha de comunicação com Termopar 12.','ERRO')

return

else

num_protc_seg = 1379; % nº protc seg a ser gerado

Page 49: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 43

end

%%%%% análise do sinal recebido e atuações %%%%%

if sinal <= 900

num_protc_seg = 2378; % nº protc seg a ser gerado

warndlg('Temperatura do prato abaixo do permitido.','PERIGO!')

elseif sinal <= 1200

num_protc_seg = 2379; % nº protc seg a ser gerado

else

num_protc_seg = 2380; % nº protc seg a ser gerado

warndlg('Temperatura do prato acima do permitido.','PERIGO!')

end

A fim de explorar o problema e obter diferentes respostas, proponha

valores distintos para a variável “sinal”.

DICA 1: Para “comentar” uma linha: CRTL + R.

DICA 2: Para “descomentar”: CRTL + T.

3.3 Estrutura switch-case-otherwise

Além da estrutura if/elseif/else, mais comum em linguagem de

programação, o MATLAB® oferece outra estrutura de seleção, a

switch/case/otherwise. Ao contrário da estrutura anterior, essa está limitada à

condição de igualdade e desigualdade, veja a seguir na figura 3.5.

Figura 3.5 – Estrutura e sintaxe lógica da estrutura de seleção switch.

A aplicação desse tipo de estrutura pode ser ilustrada no exemplo a

seguir.

Page 50: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 44

clear;clc

A = log10(1000);

switch A

case 1

var = „Número 1.„

case 2

var = „Número 2.„

case 3

var = „Número 3.„

otherwise

var = „Número não definido.„

end

EXERCÍCIO APLICADO 2

Problema 3.2

Resolva o exercício da estrutura de seleção (if-elseif-else), visto

anteriormente, com a estrutura (switch-case-otherwise). .

Figura 3.6 – Diagrama esquemático do problema 3.2.

Construir um código com os seguintes objetivos:

1. Confirmação do sinal recebido;

2. Análise do sinal recebido e atuações.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% O Script "Mod2_Prbl2_2" tem a sugestão de solução do Problema 3.2 %

% estrutura de seleção (switch-case-otherwise). %

% %

% Data de criação: 21 de setembro de 2008. %

% Data da última atualização: 03 de janeiro de 2012. %

% Criado por: Phillipi Rodrigo de Oliveira Souza. %

% Atualizado por: Fernando Wesley Cavalcanti de Araújo. %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;clear % elimina o sinal anterior

Page 51: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 45

sinal1 = inputdlg('Digite a temperatura atual'); %o operador insere a

temperatura

sinal = str2double(sinal1);

semsinal = isnan(sinal);

%%%%% confirmação do sinal recebido %%%%%

switch semsinal

case 1

num_protc_seg = 1378; % nº protc seg a ser gerado

errordlg('Falha de comunicação com Termopar 12.','ERRO')

return

otherwise

num_protc_seg = 1379; % nº protc seg a ser gerado

end

%%%%% análise do sinal recebido e atuações %%%%%

%$$$$$$$$$$$$$ POR QUE A ESTRUTURA ABAIXO NÃO É EXECUTADA ? $$$$$$$$$$$$$$%

switch sinal

case sinal <= 900

num_protc_seg = 2378; % nº protc seg a ser gerado

warndlg('Temperatura do leito abaixo do permitido.','PERIGO')

case sinal < 1200

num_protc_seg = 2379; % nº protc seg a ser gerado

otherwise

num_protc_seg = 2380; % nº protc seg a ser gerado

warndlg('Temperatura do leito acima do permitido.','PERIGO')

end

A fim de explorar o problema e obter diferentes respostas, proponha

valores distintos para a variável “sinal”.

Novamente não esqueça dos comandos CTRL + R e CTRL + T,

responsáveis por comentar de forma mais ágil.

OBSERVAÇÃO: a estrutura switch/case/otherwise não pode ser utilizada com

expressões booleanas de desigualdade. Observe a seguir um código escrito em

estrutura de seleção switch/case/otherwise com a utilização de expressões

booleanas de desigualdade.

Page 52: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 46

3.4 – Estrutura for

O for é conhecido como estrutura de repetição, e tem o objetivo de

repetir um determinado comando seguindo um critério predefinido pelo

programador. Esse tipo de estrutura evita que o usuário do código tenha que

repetir mesma tarefa inúmeras vezes. Mas, como a máquina sabe quando parar

de repetir o comando? O critério de parada é baseado na seguinte ideia: toda

região fora do domínio de repetição é considerada como região de parada, ou

seja, caso a expressão de repetição não seja mais verdadeira, o código

interrompe o loop.

Esse tipo de estrutura utiliza expressões booleanas descritas

anteriormente e trabalha com retorno de execução de funções. Neste caso,

qualquer retorno diferente de 0 (zero) é considerado como verdadeiro, e 0

(zero) é considerado falso. O MATLAB® trabalha com duas estruturas de

repetição, a “for” e a “while”.

A estrutura “for” repete a execução dos comandos enquanto para todo

valor de sua variável começando e terminando com valores predefinidos e a

passos incrementados por um valor também predefinido. Na figura 3.7 temos a

estrutura de sintaxe e sua interpretação. Em seguida acompanhe um exemplo

de aplicação.

Figura 3.7 – Estrutura e sintaxe lógica da estrutura de repetição for.

for x = 1:15

y = sin(x*pi) + exp(x*2);

end

Page 53: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 47

EXERCÍCIO APLICADO 3

Problema 3.3

No exercício aplicado do capítulo 1 foi discutido o perfil de temperatura

sobre a superfície de uma placa onde a forma matricial do sistema de equações

foi dado por:

Utilizando a estrutura de repetição (for) crie a matriz de coeficientes com

a menor quantidade de linhas que você puder.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% O Script abaixo tem a sugestão de resolução do problema 3.3 %

% %

% Criado e atualizado por: Phillipi Rodrigo de Oliveira Souza. %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear;clc

% criação da diagonal principal

for i = 1:1:6

for j = 1:1:6

if i == j

A(i,j) = -4;

end

end

end

for i = 7:1:8

for j = 7:1:8

if i == j

A(i,j) = -9;

end

end

end

% criação da primeira diagonal superior principal

for i = 1:2:8

for j = 1:1:8

if i == j-1

A(i,j) = 1;

end

Page 54: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 48

end

end

% criação da segunda diagonal superior principal

for i = 1:1:8

for j = 1:1:8

if i == j-2

A(i,j) = 1;

end

end

end

% criação da primeira diagonal inferior principal

for i = 1:1:8

for j = 1:2:8

if i == j+1

A(i,j) = 2;

end

end

end

% criação da segunda diagonal inferior principal

for i = 1:1:6

for j = 1:1:6

if i == j+2

A(i,j) = 1;

end

end

end

for i = 7:1:8

for j = 1:1:8

if i == j+2

A(i,j) = 2;

end

end

end

3.5 – Estrutura while

A estrutura “while” repete a execução dos comandos enquanto as

expressões de teste, ou expressões booleanas, retornam condição verdadeira.

Na figura 3.8 temos a estrutura de sintaxe e sua interpretação.

Figura 3.8 – Estrutura e sintaxe lógica da estrutura de repetição while.

Page 55: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 49

m = 2;

for I = 1:10

for J = 1:10

while I < m

if I == J

A(I,J) = 2;

elseif abs(I-J) == 1

A(I,J) = -1;

else

A(I,J) = 0;

end

I = I + 1;

end

end

end

Assim como a anterior, essa estrutura pode ser utilizada de forma

encadeada.

EXERCÍCIO APLICADO 4

Problema 3.4

O método de Newton (ou método de Newton-Raphson) foi desenvolvido

no século XVII por Isaac Newton e Joseph Raphson e é um dos métodos

numéricos utilizados para encontrar as raízes de equações de forma rápida e

com cálculos relativamente simples.

A ideia principal do método é que através do chute de um valor inicial, a

função seja aproximada através da linha tangente até interceptar o valor de raiz

com um erro extremamente baixo.

Neste exemplo, o objetivo do programador é usar o MATLAB® para

calcular uma raiz da função f(x) = x³ - x – 4, com erro menor do que 10-4

utilizando o método de Newton-Raphson.

O método é dado pela seguinte expressão:

clear, clc

y1 = inputdlg('digite um número inicial');

y1 = str2double(y1);

xi+1

= xi -

𝑓(𝑥𝑖)

𝑓′(𝑥𝑖)

Page 56: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 50

erro = 1;

contador = 0;

while erro > 0.0001

y1_aux = y1 - (y1^3 - y1 - 4)/(3*y1^2 - 1);

erro = abs(y1 - y1_aux);

y1 = y1_aux;

contador = contador + 1;

end

contador

erro

y1

É dado ao usuário a oportunidade de escolher o valor do chute inicial do

sistema, mas deve-se ressaltar que o método de Newton-Raphson tem

condições a serem satisfeitas para que o resultado final tenha coerência, entre

eles: O intervalo de calculo deve possuir a raiz da função; A função deve ser

diferenciável no intervalo escolhido; a primeira e segunda derivadas não devem

trocar de sinal no intervalo escolhido.

Neste problema, com o valor inicial escolhidos sendo 2,00 e 8.000.000, os

resultados finais serão:

% Para valor de chute inicial igual a 2.00:

contador =

4

erro =

5.2603e-008

y1 =

1.7963e+000

% Para valor de chute inicial igual a 8000000:

contador =

42

erro =

4.5807e-007

y1 =

1.7963e+000

Page 57: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 51

Exercícios de fixação

1. Faça um programa para calcular o salário semanal de um trabalhador.

Você deve inserir o número de horas trabalhadas na semana. O valor de

cada hora é R$ 12,00 e caso o trabalhador ultrapasse a carga horária de

40 horas semanais, o valor da hora é R$ 18,00. Do total, desconte o

Imposto (18% do valor total) e imprima o resultado na janela de

comando.

2. Use o If para saber se um número é impar ou par. Coloque ferramentas

„antibug‟ para cancelar a execução caso o usuário entre com algum texto

ou valor complexo no lugar do valor. (Dica: Os comandos „rem‟ e „imag‟

facilitam a resolução desse problema)

3. Faça um programa que gere e escreva todos os números pares entre dois

números positivos digitados pelo usuário de forma crescente ou

decrescente, a ser escolhido pelo usuário. (Dica: conheça os comandos

„ceil‟ e „floor‟ para auxílio no arredondamento dos valores que não são

inteiros)

4. De acordo com a lenda, certa vez uma rainha requisitou os serviços de

um monge dizendo que o pagamento seria negociado posteriormente. O

monge, após finalizar o serviço e necessitando de alimentos, decidiu que

o pagamento deveria ser feito com grãos de trigo dispostos em um

tabuleiro de xadrez, de tal forma que o primeiro quadro deveria conter

apenas um grão e os quadros subsequentes, o dobro do quadro anterior.

A rainha achou o trabalho barato e pediu que o serviço fosse executado,

sem se dar conta de que seria quase impossível efetuar o pagamento.

Faça um algoritmo para calcular o número de grãos que o monge deve

receber. (Dica: para calcular o tempo necessário para realizar esse calculo,

utilize os comandos „tic‟ e „toc‟ no inicio e final do editor,

respectivamente)

5. Para um número escolhido pelo usuário, faça um código para encontrar

o fatorial desse número.

6. A sequência de Fibronacci é obtida a partir de dois números iniciais,

sendo o F(1) = 0 e o F(2) = 1, e os demais números são obtidos da soma

dos anteriores (ex.: F(2) = F(1) + F(0) = 1; F(3) = F(2) + F(1) = 1 + 1 = 2; e

assim sucessivamente). Desenvolva um algoritmo para encontrar o

número de Fibronacci para o número de iterações que o usuário desejar.

Page 58: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

Instrutor: Fernando Wesley

Recife / PE - 2012 52

7. Nas questões anteriores, coloque comandos „antibug‟ para evitar entrada

de dados incoerentes, como textos, números imaginários e dados que

não permitiriam a resolução da questão.

Page 59: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 53

Capítulo 4 – Funções

Uma função é um programa elaborado por um usuário que utiliza ou não

parâmetros de entrada para fornecer uma resposta. Todas as operações

executadas são ocultas ao usuário, sendo considerado como um código „caixa

preta‟.

Até agora utilizamos o prompt de comando para realizar cálculos

simples. Evoluímos para o uso do editor de texto, onde a inserção de comandos

se torna mais profissional protegendo o próprio código de modificações

involuntárias ou propositais, e no momento da compilação do programa há a

depuração do mesmo, indicando o local do erro, caso exista.

Uma forma mais evoluída de pensar é através da utilização das funções

(functions) do MATLAB®. As funções são uma sequência de comandos que

aceitam parâmetros de entrada, realizam operações com os parâmetros

fornecidos e valores previamente escolhidos pelo programador, podem ser

chamadas dentro de outras funções, possuem help que pode ser criado e

editado pelo programador e por fim fornecem resultados e parâmetros de

saída.

O MATLAB® reconhece internamente três classes de funções:

1. built-in: função interna. Está implementada em seu núcleo e não é

visualizável (Ex.: sin);

2. MATLAB ® m-file: função implementada em m-file. É visível e aberto

para alterações (Ex.: polyfit);

3. User m-file: função criada pelo usuário. Você pode implementar novos

recursos no seu MATLAB ® criando funções para áreas específicas.

Utilize os comandos which para achar seu diretório, e open para

visualizar o código.

As funções aceitam múltiplos parâmetros de entrada e retornam

múltiplos parâmetros de saída (está é uma característica muito peculiar e

extremamente prática do MATLAB®).

A sintaxe básica de definição de funções segue o formato a seguir:

Page 60: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 54

onde:

function: palavra reservada que indica o início de definição de função (é

grafada de azul);

PS1, PS2, . . ., PSN: parâmetros de saída;

nome: nome da função;

PE1, PE2, . . ., PEM: parâmetros de entrada;

expressão 1, . . . ,expressão N: expressões que definem as ações a

serem executadas pela função.

OBSERVAÇÃO: a função e o arquivo m-file devem ter o mesmo

nome.

Em relação aos parâmetros de saída, se a função for chamada:

1. com menos parâmetros que o declarado, a função retornará apenas

parâmetros fornecidos;

2. com mais parâmetros que o declarado, o MATLAB® acusará erro (Too

many output arguments – parâmetros de saída em excesso);

3. se nenhum parâmetro for indicado, função retornará apenas o valor do

primeiro parâmetro.

A seguir temos um exemplo de criação de uma função:

function [s,v] = muv(s0, v0, a, t)

s = s0 +v0*t + a/2*t.^2;

v = v0 + a*t;

A seguir temos o exemplo de como uma função deve ser chamada,

sempre na janela de comandos.

>> [s,v] = muv(10, 2, 3.5, 60)

s =

6430

v =

212

Page 61: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 55

É facultado ao usuário escolher que apareça apenas uma ou nenhuma

das variáveis de saída, caso deseje apenas ter conhecimento de uma das

variáveis ou apenas gerar valores para lançá-los em outra função.

>> [s] = muv(10, 2, 3.5, 60)

s =

6430

DICA:

1. O número de arquivos deve ser igual ao número de funções;

2. Utilize funções diferentes para objetivos diferentes;

OBSERVAÇÃO: Os comandos nargin (número de argumentos de

entrada) e nargout (número de argumentos de saída) podem ser usados

combinados com estruturas condicionais de programação para eliminar bugs

de operador.

>> nargin muv

ans =

4

>> nargout muv

ans =

2

Como já foi dito, o MATLAB® armazena suas variáveis em uma área da

memória que pode ser visualizada pelo workspace. As funções trabalham com

variáveis locais, isto é, ficam armazenadas em áreas de memória própria,

independente do workspace. Os escopos das variáveis do workspace e as

variáveis locais podem ser definidas da seguinte forma:

Variáveis do workspace não são reconhecidas dentro das funções;

Variáveis locais de funções não são reconhecidas no MATLAB®.

Parâmetros de entrada e saída são a forma (interface) mais adequada

para troca de dados entre o workspace do MATLAB® e ambientes internos de

funções. Outra forma de compartilhamento de troca de dados entre workspace

e funções são as variáveis globais. Variáveis criadas no workspace são

Page 62: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 56

reconhecidas por qualquer função que explicite sua categoria como global em

seu código.

Para declarar uma variável como global basta escrever, no código, a

palavra global seguida da(s) variável(is) a serem declaradas.

DICA: como as variáveis globais podem ser reconhecidas por qualquer função,

evite declarar variáveis com nomes de fácil conflito como, “x”, ”m” ou ”i”. Utilize

os comandos whos, clear e isglobal para gerenciar variáveis globais.

EXERCÍCIO APLICADO 1

Necessita-se, em uma aplicação que envolve o MATLAB® e diversas

máquinas que são oriundas de diversos países, de um comando para converter

entre as unidades de temperatura Celsius, Fahrenheit e Kelvin. Para isso, é

necessário que o operador entre com o valor na unidade que é conhecida, e

informar ao programa para que unidade que deseja a conversão.

Sabe-se que tais escalas possuem valores conhecidos de ponto de fusão

e ebulição, dos quais se pode tirar por interpolação as relações entre as

temperaturas.

Page 63: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 57

Utilizaremos várias funções para resolver esse problema, sendo a

primeira „temperatura’ a responsável pela inserção dos parâmetros iniciais e

chamada da função que calculará e imprimirá o resultado em tela.

function temperatura

clc, clear

% O objetivo dessa função é que o operador possa converter os valores de

% temperatura entre celsius, fahrenheit e kelvin.

% O usuário deve digitar c para celsius, f para fahrenheit e k para kelvin

% para indicar entre quais unidades deseja transformação

global temp unidadefinal % declaração de variáveis globais

msgbox('Coloque c para Celsius, f para Fahrenheit e k para Kelvin');

pause(3) % pausa o programa por 3 segundos

temp = inputdlg('Qual o valor na unidade inicial');

unidadeinicial = inputdlg('De qual unidade você deseja converter');

unidadefinal = inputdlg('Para qual unidade você deseja converter');

% Testes 'anti-bug'

temp = str2double(temp);

unidadeinicial = char(unidadeinicial);

unidadefinal = char(unidadefinal);

a = isfinite(temp); %verifica se a temperatura é finita.

if a == 0

errordlg('O valor da temperatura não foi reconhecida!!','Atenção!!!');

return

end

%teste antibug para temperatura inicial

if unidadeinicial ~= 'c' & unidadeinicial ~= 'f' & unidadeinicial ~= 'k'

errordlg('A unidade inicial de conversão não foi

identificada!!','Atenção!!!');

return

end

%teste antibug para temperatura final

if unidadefinal ~= 'c' & unidadefinal ~= 'f' & unidadefinal ~= 'k'

errordlg('A unidade final de conversão não foi

identificada!!','Atenção!!!');

return

end

% Testes para chamada das funções de resolução do problema

if unidadeinicial == 'c'

celsius

end

if unidadeinicial == 'f'

fahrenheit

end

if unidadeinicial == 'k'

kelvin

end

Page 64: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 58

As sub-rotinas „celsius‟, „fahrenheit‟ e „kelvin‟ são escritas em arquivos

separados, e obrigatoriamente devem estar na mesma pasta da função

temperatura, para que possam ser chamados corretamente.

function celsius

global temp unidadefinal

if unidadefinal == 'c'

resultado = temp;

mostrar = 'a temperatura obtida em celsius é: ';

end

if unidadefinal == 'f'

resultado = temp*1.8 + 32;

mostrar = 'a temperatura obtida em fahrenheit é: ';

end

if unidadefinal == 'k'

resultado = temp + 273;

mostrar = 'a temperatura obtida em kelvin é: ';

end

resultado = num2str(resultado);

s = strcat(mostrar, resultado, 'º ', unidadefinal)

O comando strcat é utilizado para unir várias strings em uma,

concatenando-as de forma que o resultado do problema pode ser mostrado em

uma linha apenas, ou uma caixa de dialogo desejada (msgbox, warndlg,

errordlg, etc.)

Para as demais funções:

function fahrenheit

global temp unidadefinal

if unidadefinal == 'c'

resultado = (temp-32)/1.8;

mostrar = 'a temperatura obtida em celsius é: ';

end

if unidadefinal == 'f'

resultado = temp;

mostrar = 'a temperatura obtida em fahrenheit é: ';

end

if unidadefinal == 'k'

resultado = (temp-32)/1.8 + 273;

mostrar = 'a temperatura obtida em kelvin é: ';

end

resultado = num2str(resultado);

s = strcat(mostrar, resultado, 'º ', unidadefinal)

Page 65: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 59

function kelvin

global temp unidadefinal

if unidadefinal == 'c'

resultado = temp - 273;

mostrar = 'a temperatura obtida em celsius é: '

end

if unidadefinal == 'f'

resultado = 1.8*(temp - 273) + 32;

mostrar = 'a temperatura obtida em fahrenheit é: '

end

if unidadefinal == 'k'

resultado = temp;

mostrar = 'a temperatura obtida em kelvin é: '

end

resultado = num2str(resultado);

s = strcat(mostrar, resultado, 'º ', unidadefinal)

Assim o operador obterá de forma rápida a conversão entre as unidades

4.2 – Funções de Importação e Exportação

Na grande maioria dos casos, os dados necessários à execução das sub-

rotinas não se encontram disponíveis de forma explícita. Algumas vezes é

necessário um tratamento prévio de determinadas informações para garantir a

compilação de códigos. Da mesma forma que importar os dados, é importante

também exportar. Embora o MATLAB® ofereça diversas formas de importação

manipulação e exportação de dados, veremos apenas as mais importantes à

nossa área.

Inicialmente trabalharemos com as funções de exportação e importação,

logo após estudaremos as funções de tratamento de dados e por último

aprenderemos como criar e manipular gráficos em duas e três dimensões.

dlmread: lê uma matriz de um arquivo ASCII.

dlmwrite: grava uma matriz de um arquivo ASCII.

Page 66: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 60

load: lê variáveis do tipo “.mat” (formato binário proprietário).

save: grava variáveis do tipo “.mat”.

O exemplo abaixo mostra como funciona a exportação e importação de

uma matriz que se encontra no workspace para o formato ASCII. O resultado

pode ser visto no bloco de notas, que lê o formato em questão.

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

A =

1 2 3

4 5 6

7 8 9

>> dlmwrite('matriz.txt', A, '-')

Dessa forma da matriz A foi gerado um arquivo com nome „matriz.txt‟

que pode ser aberto no bloco de notas (teste isso!) e que como delimitador, usa

o hífen (-). O delimitador é utilizado para indicar ao MATLAB® e demais

programas como separar os itens que estão na mesma linha.

O passo inverso para importar uma matriz que existe e utilizá-la no

MATLAB® é simples e visto abaixo:

>> B = dlmread('matriz.txt','-')

B =

1 2 3

4 5 6

7 8 9

Page 67: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 61

É importante verificar o delimitador utilizado, pois a importação de dados

através de delimitadores errados fornecem, consequentemente, matrizes com

dados incorretos para o sistema. Pode ser utilizado como delimitador qualquer

caractere do sistema, os mais comuns são o espaço („ „) e a vírgula („,‟).

Outras funções de importação e exportação, assim como suas respectivas

descrições podem ser encontradas na tabela 4.1.

Extensão Descrição Função Retorno

MAT Formato MATLAB load Variáveis no arquivo

CSV Nº separados por ‘ , ’ cvsread Matriz numérica

DAT Texto formatado importdata Matriz numérica

DLM Números delimitados dlmread Matriz numérica

TAB Números tabulados dlmread Matriz numérica

XLS Planilha do MS-Excel xlsread Matriz numérica e cell-array

WK1 Planilha do Lotus 123 wk1read Matriz numérica e cell-array

CDF* Common Data Format cdfread cell-array e registro CDF

FITS* Flexible Image Transport System fitsread Formato FTIS

HDF* Hierarchical data Format hdfread Formato HDF

AVI Formato AVI(animação) aviread Formato MATLAB movie

BMP

JPEG

GIF

TIFF

XDW

CUR

ICO

RAS

PBM

PGM

PPM

Formato BMP

Formato JPEG

Formato GIF

Formato

Formato XDW

Formato CUR

Formato ICO

Formato RAS (raster Sum)

Formato PBM

Formato PGM

Formato PPM

imread Matrizes de cores (true

color) e índice

(mapeamento)

AU

SND

Formato AU (áudio Sun)

Formato SND (áudio Sun)

auread Dados de freqüência

WAV Formato WAV (áudio MS) wavread Dados de frequência

Tabela 4.1 – funções gerais para importação e exportação de dados. (*) Padrão de

arquivos para troca de dados criado pela NASA.

Caso não se tenha certeza qual tipo de dados a serem manipulados, use

a função importdata. Essa função recebe qualquer extensão da tabela anterior.

Mas, se ela recebe qualquer extensão então porque utilizar as outras? A função

importdata é uma função genérica e como tal não contém todas as

características de armazenamento que cada uma tem individualmente. Como

ela possui um código de armazenamento padrão, pode ser possível um trabalho

a mais para conseguir extrair o que se deseja.

Page 68: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 62

Para saber quais são as funções que podem ser importadas e exportadas

pelo MATLAB e os comandos necessários para que ocorram tais modificações

digite >> help fileformats.

4.3 – Funções de tratamento

Muitas vezes necessitamos exportar dados para visualização na janela de

comandos do MATLAB®, entretanto o formato não é adequado frente à

situação em questão.

Para resolver isso, utilizamos até agora caixas de diálogo (msgbox,

errordlg, warndlg) e no problema 2.5 foi visto o comando strcat que concatena

várias strings em apenas uma, o que torna a exibição de resultados mais

profissional.

Para resolver esse problema de forma definitiva trabalharemos com o

comando ou função fprintf. Podemos definir as atribuições dessa função como

a gravação de dados em um arquivo formatado. Sua sintaxe pode ser observada

a seguir.

Caracteres são utilizados nos flags como controladores de alinhamento e

sinal. Eles estão resumidos na tabela 4.2.

Caractere Descrição Exemplo

- Alinhamento à esquerda %-5.2d

+ Sempre imprime sinal dos números %+5.2d

0 Preenche espaços com ‘0’ em vez de ‘ ’ %05.2d Tabela 4.2 – Caracteres dos flags do comando fprintf.

O parâmetro T define o número de dígitos à esquerda do ponto decimal.

Para definição do número de dígitos à direita temos o parâmetro de entrada P.

O parâmetro C define a identificação de notação como mostra a tabela

4.3.

Page 69: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 63

Formato Notação Exemplo Resultado

%c Caractere fprintf(‘%’c,’a’) a

%s Cadeia de caractere fprintf(‘%’s,’abc’) abc

%d Decimal fprintf(‘%’5.3d,’pi’) 3.142e+000

%f Ponto flutuante fprintf(‘%5.3f’,’pi’) 3.142

%e Exponencial fprintf(‘%’5.3e,’pi’) 3.142e+000 Tabela 4.3 – Caracteres de identificação de notação.

Alguns caracteres especiais podem ser utilizados para atribuir funções

extras ao fprintf. São postos sempre após o primeiro conjunto de parâmetros e

podem ser resumidos na tabela 4.4.

Caractere Nome Descrição

\b backspace Retorno de caractere

\f form feed Avanço de linha

\n new line Pula linha

\r carriage return Retorno de linha

\t horizontal tab Tabulação horizontal

\\ backslash Caractere barra invertida

\” quotation mark Caractere aspas “

%% percent character Caractere porcentagem % Tabela 4.4 – Caracteres especiais do fprintf.

Page 70: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 64

Exercícios de fixação

1. Crie um comentário após o início das funções do exercício proposto

explicando sobre o objetivo de cada uma delas, verificando que o mesmo

aparecerá como descrição da ajuda quando utilizado o help nome da

função.

2. Escreva uma „function‟ que calcule a área de um trapézio, sendo „a‟ a base

menor, „b‟ a base maior e „h‟ a altura do mesmo.

3. Escreva uma „function‟ para converter de coordenadas cartesianas a

coordenadas polares, inclusive quando os valores inseridos forem em três

dimensões.

4. Faça uma „function‟ na qual o usuário deva acertar o número aleatório

entre 1 e 5 escolhido pelo computador.

5. Crie uma função para que o programa indique qual é o maior divisor

comum entre dois números digitados pelo usuário. Utilize comandos

antibugs para evitar inserção de valores incoerentes.

6. Para uma equação y = ax² + bx + c, sendo as entradas a, b e c crie uma

„function‟ que diz se as raízes são reais ou imaginárias, mostrando-as ao

usuário.

7. Crie uma função que leia três números e os imprima em forma crescente.

Crie uma restrição para que os valores inseridos sejam inteiros entre 1 e

10, e o programa deve imprimir o nome (não o valor) e a ordem dos

valores em apenas uma linha.

8. Crie uma matriz A = ones(3) e exporte-a para o Microsoft Excel®, de

forma que os dados da matriz fiquem nas células A1:C3 da primeira

planilha. Use clc e clear para deletar os dados iniciais e importe a matriz

para o MATLAB®, verificando dessa maneira se houve correta importação

e exportação de dados.

9. Utilizando o Microsoft Paint® faça uma figura qualquer salvando-a em

formato jpeg no diretório que está sendo utilizado para as aulas de

MATLAB®. Utilize o comando >> A = imread(„nome do arquivo.jpg‟) e

após utilize o comando image(A) para visualizar a figura no MATLAB®.

Page 71: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

Instrutor: Fernando Wesley

Recife/PE - 2012 65

10. Em relação à visualização de valores no MATLAB®, para as expressões B

= 12345.6789 e C = „aula‟ digite os seguintes comandos verifique o que

ocorre.

a) fprintf('%-5.2d',B)

b) fprintf('%+5.2d',B)

c) fprintf('%-2.5d',B)

d) fprintf('%-2.5f',B)

e) fprintf('%-5.2d\n',B)

f) fprintf('%-5.2d\t',B)

g) fprintf(„%s\f‟, C)

h) fprintf(' exercício%s\n ',C)

Page 72: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

66

Capítulo 5 – Polinômios

5.1 – Polinômios e suas raízes

No MATLAB®, os polinômios são expressos como vetores linhas, sendo

sempre iniciada do coeficiente do maior termo presente no mesmo. Para um

polinômio f(x) = 33x² + 14x – 65, o vetor que representa o polinômio acima é:

>> f = [33 14 -65]

Independente do grau do polinômio, o mesmo deve sempre iniciar do

maior termo presente, e terminar no termo independente de variável. Caso não

haja esse termo no polinômio, indicar o valor zero no lugar do mesmo. A função

g(x) presente abaixo exemplifica esses casos.

g(x) = 2x4 – 3x² + 7x

>> = g = [2 0 -3 7 0]

5.1.1 – Raízes de um polinômio

Para o cálculo de raízes de um polinômio, utiliza-se o comando roots, e

como argumento utiliza-se o vetor linha representando o polinômio desejado.

f(x) = x² - 7x + 12

>> f = [1 -7 12]

f =

1 -7 12

>> x = roots(f)

x =

4

3

O usuário deve identificar que para um polinômio de grau n, haverá n

raízes que solucionam o sistema, sendo as mesmas reais e/ou imaginárias. O

exemplo abaixo mostra um polinômio de terceiro grau, que como resultado

uma raiz real e duas imaginárias.

g(x) = -1x³ + 4x² + 8

>> g = [-1 4 0 8]

Page 73: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

67

g =

-1 4 0 8

>> x = roots(g)

x =

4.4111e+000

-2.0557e-001 +1.3309e+000i

-2.0557e-001 -1.3309e+000i

O usuário pode perceber ainda que as raízes complexas do caso anterior

são conjugadas.

5.1.2 – Encontrar polinômio a partir das raízes

Para o caso em que o usuário possui as raízes do sistema, mas deseja

obter o polinômio característico pode utilizar o comando poly, inserindo como

argumento um vetor linha cuja entrada são as raízes do sistema. Partindo do

mesmo princípio visto no item anterior, um vetor que contenha um número n

de raízes, fornecerá um polinômio com grau n.

Por exemplo, caso o usuário deseje conhecer o polinômio cujas raízes são

x1 = 2 e x2 = -6, deve fazer da seguinte maneira.

>> r = [2 -6]

r =

2 -6

>> x = poly(r)

x =

1 4 -12

Assim, o polinômio responsável por tais raízes é f(x) = x² + 4x – 12.

Da mesma forma pode-se encontrar polinômios para funções com graus

maiores. Para encontrar o polinômio característico da função com as cinco

raízes especificadas abaixo, deve-se proceder da seguinte forma:

x1 = -5; x2 = -2,5; x3 = -1; x4 = 1 e x5 = 4

% x1 = -5; x2 = -2,5; x3 = -1; x4 = 1 e x5 = 4

>> s = [-5 -2.5 -1 1 4]

Page 74: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

68

s =

-5.0000e+000 -2.5000e+000 -1.0000e+000 1.0000e+000 4.0000e+000

>> r = poly(s)

r =

Columns 1 through 5

1.0000e+000 3.5000e+000 -1.8500e+001 -5.3500e+001 1.7500e+001

Column 6

5.0000e+001

Assim, o polinômio que engloba todas as raízes vistas anteriormente é:

f(x) = x5 + 3,5x4 – 0,185x³ - 0,535x² - 0,175x + 5

O comando poly também retorna o polinômio específico de uma matriz

quadrada, conforme exemplo a seguir:

>> A = [1 2; 3 4]

A =

1 2

3 4

>> b = poly(A)

b =

1.0000e+000 -5.0000e+000 -2.0000e+000

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

5.2.1 – Multiplicação polinomial

Para efetuarmos a multiplicação entre dois polinômios, devemos utilizar

o comando conv, processo este também chamado de convolução. Assim, para

os polinômios:

A = 2x + 5 e B = -x + 4

>> a = [2 5]

Page 75: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

69

a =

2 5

>> b = [-1 4]

b =

-1 4

>> c = conv(a,b)

c =

-2 3 20

O polinômio resultante de multiplicação é c(x) = -2x² + 3x + 20

Para os polinômios D(x) = 2x² - 3x +12 e F(x) = -14x + 3, deseja obter a

seguinte multiplicação (-D x 3,5F):

>> d = [2 -3 12]

d =

2 -3 12

>> f = [-14 3]

f =

-14 3

>> g = conv(-d,3.5*f)

g =

9.8000e+001 -1.6800e+002 6.1950e+002 -1.2600e+002

Assim, o polinômio de terceiro grau obtido acima representa o resultado

da multiplicação realizada.

5.2.2 - Divisão polinomial

A divisão polinomial ou deconvolução pode ser realizada pelo comando

deconv. O resultado dessa operação retorna um vetor q ‘quociente’ e um vetor

r ‘resto’ da divisão.

A sintaxe dessa função é a seguinte:

[r,q] = deconv(a,b)

Page 76: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

70

Para realizar a divisão da função a(x) = 3x² - 3x + 6 pela função b(x) = 3x,

o resultado pode ser visto logo abaixo.

>> a = [3 -3 6]

a =

3 -3 6

>> b = [3]

b =

3

>> c = deconv(a,b)

c =

1 -1 2

O resultado impresso é a função c(x) = x² - x + 2.

Na função acima não há resto de divisão. Para verificar, utilize o comando

[c,d] = deconv(a,b), e a visualização fornecerá resultado de resto como zero.

Mas para a divisão das duas funções abaixo, há resto de divisão.

R(x) = x5 – 4x4 + 3x² - 2

S(x) = x³ + 2x

>> r = [ 1 -4 0 3 0 -2]

r =

1 -4 0 3 0 -2

>> s = [3 0 2 0]

s =

3 0 2 0

>> [w,k] = deconv(r,s)

w =

3.3333e-001 -1.3333e+000 -2.2222e-001

k =

Columns 1 through 5

0 0 0 5.6667e+000 4.4444e-001

Column 6

Page 77: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

71

-2.0000e+000

Pode ser visto que o vetor W(x) representa o quociente da divisão,

enquanto o vetor k representa o polinômio representativo do resto da divisão.

5.3 – Simplificação de polinômios em frações parciais

Uma forma para simplificar a visualização de divisão de polinômios é

através da utilização das frações parciais. Verifique o exemplo a seguir:

Partindo da relação acima, pode-se utilizar o comando residue para

obter a simplificação acima em frações parciais. A sintaxe da função residue é a

seguinte:

[r,p,k] = residue(A,B)

Onde: r = numeradores

p = denominadores

k = termo livre

A execução dos cálculos para encontrar os termos desejados ocorre da

seguinte maneira:

>> A = [1 -8 16]

A =

1 -8 16

>> B = [1 -4 2]

B =

1 -4 2

>> [r,p,k] = residue(A,B)

r =

Page 78: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

72

1.2132e-001

-4.1213e+000

p =

3.4142e+000

5.8579e-001

k =

1

Assim, o resultado obtido representa a seguinte fração parcial:

Também pode ser obtido resultado caso haja interesse do usuário em

realizar o cálculo para obter as funções de numerador e denominador a partir

dos resíduos, polos e do termo direto.

5.4 – Avaliação de valores de polinômios

Caso se deseje saber o valor que o polinômio p(x) possui para um certo

valor de x, deve-se definir primeiramente o x, para logo após realizar o cálculo

do polinômio em questão.

f(x) = 3x³ - 4x² + 2x, x = 4

>> x = 4

x =

4

>> f = 3*x^3 -4*x^2 + 2*x

f =

136

Page 79: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

73

Da forma acima se pode obter o valor da função em certo ponto

definido. Caso se deseje obter o valor da função para uma série de pontos,

pode-se proceder de duas formas.

Na primeira forma deve ser criado um vetor por meio de incrementos, e

após isso criar a função devendo-se ter cuidado para realizar a multiplicação

termo a termo (utilizando-se o ponto antes da multiplicação da variável). Na

segunda forma pode-se utilizar o comando polyval, que funciona na seguinte

sintaxe:

r = polyval(p,x)

Onde p = polinômio em vetor linha

x = intervalo desejado

Abaixo, um exemplo utilizando os dois comandos:

% Primeira forma de cálcular

>> x = 2:6

x =

2 3 4 5 6

>> f = 3*x.^3 - 4*x.^2 +2*x

f =

12 51 136 285 516

% Segunda forma de calcular

>> x = 2:6

x =

2 3 4 5 6

>> f = [3 -4 2 0]

f =

3 -4 2 0

>> x = polyval(f,x)

x =

12 51 136 285 516

Page 80: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

74

Para ambas as formas utilizadas, os resultados devem ser iguais.

5.5 – Integração e derivada de polinômios

5.5.1 – Derivação de polinômios

Para a derivação de polinômios, o mesmo deve ser posto no formato de

vetor linha, e após isso, utilizar o comando polyder. O argumento para a

função polyder é o vetor linha que representa o polinômio que se deseja

derivar.

Para o polinômio f(x) = x³ + 3x² + 5x + 10

>> A = [1 3 5 10]

A =

1 3 5 10

>> B = polyder(A)

B =

3 6 5

5.5.2 – Integração de polinômios

Para a integração de um polinômio, a função utilizada deve ser a polyint.

A função polyint deve possuir, como primeiro argumento, o polinômio que se

deseja integrar inserido como vetor linha. Caso se deseje inserir um termo

constante na integração, o mesmo deve ser posto como segundo argumento da

função polyint.

Abaixo, o primeiro caso (variável B) apenas mostra a integração com

apenas um argumento, assumindo-se que o termo constante é igual a zero. No

segundo caso (variável C), a integração é realizada e o fator constante é posto

como 4,3.

>> A = [2 5 -4 12 5]

A =

2 5 -4 12 5

>> B = polyint(A)

Page 81: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

75

B =

Columns 1 through 5

4.0000e-001 1.2500e+000 -1.3333e+000 6.0000e+000

5.0000e+000

Column 6

0

>> C = polyint(A, 4.3)

C =

Columns 1 through 5

4.0000e-001 1.2500e+000 -1.3333e+000 6.0000e+000

5.0000e+000

Column 6

4.3000e+000

Page 82: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

76

Exercícios de fixação

1. Encontre as raízes dos polinômios abaixo:

a) A(x) = 4x² - 3x + 5

b) B(x) = x³ - 4x + 2x -12

c) C(x) = x4 – x² - 9

d) D(x) = x4 – 4x³ - 4x²

e) E(x) = x8 – 4x6 + 34x5 - 2.55x³ +32x

2. Encontre os polinômios característicos a partir das raízes abaixo:

a) x1 = -2,4; x2 = 4,2

b) x1 = 4; x2 = 4,2; x3 = -2,4 + 0,11i

c) x1 = 0; x2 = 1,3 + 2i; x3 = -1,3 - 2i; x4 = 5

d) x1 = 1; x2 = 2 ; x3 = 3; x4 = 4

3. Partindo dos polinômios fornecidos, encontre os resultados das

seguintes operações:

R(x) = x³ - x² - 5x + 7

S(x) = -4x² + 7

T(x) = 2x -1

a) A(x) = 2R x T

b) B(x) = R x 0,4T x 0,67S

c) C(x) = S² x 4,5RT

d) D(x) = S/(R x 1,5T)

e) E(x) = (5,6T/R)/(12,8S/T)

4. Simplifique para frações parciais as divisões polinomiais abaixo:

a) A(x)/B(x) = (2x³ + 4x² - 5x + 7)/(x² - 4x)

b) C(x)/D(x) = (-4x5 – 3x² + 5x)/(x³ + 9x +3)

c) E(x)/F(x) = (9x² + 12x – 4)/(23x - 12)

5. Encontre as derivadas e as integrais dos polinômios abaixo

a) A(x) = 3x4 – 14x³ - 4x²

Page 83: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

Instrutor: Fernando Wesley

Recife/PE - 2012

77

b) B(x) = -2x³ + 7x² - 15x + 7

c) C(x) = 4x² - 3x + 5

d) D(x) = 7x7 - 14x5 - 4x4 + 3x² +3

Page 84: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 78

Capítulo 6 – Gráficos

6.1 Gráficos em duas dimensões (2D)

Agora mostraremos os recursos disponíveis no MATLAB® de criação e

manipulação de figuras para a apresentação de resultados em formato gráfico.

O conjunto desses recursos é denominado Handle Graphics.

6.1.1 Gráficos simples em duas dimensões (2D)

Para que os gráficos sejam gerados de maneira organizada e de acordo

com o desejo do usuário, é recomendado utilizar os seguintes passos para a sua

criação, seja para duas ou três dimensões.

Passo Nome

01 Preparação dos dados (leitura e tratamento)

02 Seleção e configuração da posição do gráfico na janela de exibição

03 Chamada da função do gráfico

04 Selecionar coloração das linhas e símbolos

05 Configurar eixos, legendas e título do gráfico

Tabela 6.1 – Passo a passo para construção de gráficos.

Passo 1: Na preparação dos dados insere-se os valores a serem

utilizados. Esses valores podem ser obtidos de outros programas através da

exportação ou serem criados pelo usuário no exato momento da utilização do

MATLAB®.

Passo 2: Seleciona-se a janela utilizada para exibição do gráfico e

coloca-se o gráfico da maneira cuja exibição melhor atenda à expectativa do

usuário. Será aprendido o subplot, que é a forma que o MATLAB oferece para

exibição de vários gráficos simultaneamente em apenas uma janela. Essa é a

etapa do tratamento de gráficos que comandos como o subplot pode aparecer.

Passo 3: Após a obtenção dos dados e seleção da janela de exibição,

chama-se o gráfico. Nesse momento já é possível ver o gráfico formado, mas

ainda não há uma formatação que possa ser considerada profissional no

mesmo.

Passo 4: Esse passo é importante nos momentos em que é

necessário diferenciar dados em uma mesma figura. Para diferenciação dos

Page 85: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 79

gráficos entre si, aconselha-se modificar a coloração e o formato das linhas,

deixando-as diferentes uma das outras.

Passo 5: Por último, mas não menos importante, há o desejo do

usuário de colocar nome nos eixos, titulo e legenda do gráfico. Essa etapa é a

responsável por tais modificações.

Um exemplo para ilustrar a criação e configuração dos gráficos, com o

passo a passo acima está abaixo.

Passo 1:

x = -3:0.1:3

y = x.*cos(-x)

Passo 2:

figure('Name','Gráfico','Number','off','Color','c')

Para mais atribuições consulte as propriedades da figure no help.

Passo 3 e 4:

plot(x,y)

plot(x,y,’bs’)

plot(x,y,’r+’)

As cores, marcadores e tipo de linhas podem ser resumidos na tabela 6.2.

Em relação às cores, essas letras referem a cor dentro das aplicações do

MATLAB®, sendo a forma mais simples de representação da mesma.

Cor Marcador Tipo de Linha

y (amarelo) m (magenta) c (azul-claro) r (vermelha) g (verde) b (azul) w (branca) k (preta)

. (ponto) o (círculo) x (x’s) + (cruz) * (estrela) s (quadrado) d (losango) v (triângulo p/ baixo) ^ (triângulo p/ cima)

: (pontilhado) -. (ponto-traço) -- (tracejado) solid (sólida)

Tabela 6.2 – Cores, marcadores e tipos de linhas.

Page 86: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 80

Passo 5

grid

legend(‘curva’)

xlabel(‘eixo x’)

ylabel(‘eixo y’)

title(‘grafico x.cos(-x)’)

gtext(‘ponto de inflexão’)

No passo 5, os comandos xlabel e ylabel são responsáveis por inserir

dados nos eixos x e y do gráfico. O comando grid é responsável por deixar o

gráfico com a característica milimetrada. Ainda há os comandos legend, title e

gtext, que respectivamente são usados para inserir a legenda do gráfico, o título

e um texto que pode ser posicionado com o auxílio do mouse em qualquer

lugar da imagem. Em caso de dúvida, o comando help é recomendado para

saber mais detalhes a respeito dos comandos acima.

O MATLAB® possui inúmeras estruturas de exibição gráfica. Algumas

delas podem ser encontradas na tabela 6.3.

Comando Atribuição

loglog Valor logarítmico de x e y.

semilogx(i) Valor logarítmico de x e linear para y.

impulse Resposta ao impulso.

step Resposta ao degrau.

bode Diagrama de BODE.

polar Gráficos com eixos de coordenadas polares.

nichols Diagrama de Nichols.

nyquist Diagrama de Nyquist.

zpplot Zeros e pólos de funções transferência.

resid Análise de correlações e correlações cruzadas.

sim Simulação de modelos matemáticos.

Tabela 6.3 – Estruturas de exibição gráfica.

Para os casos vistos na tabela 6.3, a forma de comando normalmente é

semelhante a do plot, ex.:

>> loglog(x,y)

>> semilogx(x,y)

>> t = 0:0.1:2*pi; polar(t,sin(2*t).*cos(2*t),'--r')

Page 87: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 81

6.1.2 Múltiplos gráficos em janelas diferentes

Para que vários gráficos sejam exibidos em janelas diferentes, é

necessário utilizar o comando figure antes da chamada de cada gráfico. Caso

não se utilize desse comando, o que ocorrerá é que apenas o último dos

gráficos será visualizado na janela de exibição gráfica.

%chamada da primeira janela

figure('Name', 'seno(t)')

t = 0:0.1*pi:2*pi

x = sin(t)

plot(t,x)

xlabel('t')

ylabel('seno(t)')

title('seno(t) x t')

%chamada da segunda janela

figure('Name', 'cosseno(t)')

t = 0:0.1*pi:2*pi

y = cos(t)

plot(t,y)

xlabel('t')

ylabel('cosseno(t)')

title('cosseno(t) x t')

%chamada da terceira janela

figure('Name', 'logaritmo natural(t)')

t = 0:0.1*pi:2*pi

z = log(t)

plot(t,z)

xlabel('t'), ylabel('logaritmo natural(t)'),title('log natural(t)xt')

Page 88: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 82

Figura 6.1 – Exibição de gráficos em diferentes janelas

6.1.3 Múltiplos gráficos em uma janela

Certas vezes é importante para o usuário ter vários gráficos colocados

em apenas uma janela, seja para efeito de comparação ou de visualização de

gráficos complementares. O MATLAB® oferece essa opção ao usuário no qual

um exemplo ilustrativo pode ser visto no código abaixo.

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

y= exp(x).*sin(x);

z= exp(x).*cos(x);

m= 0.09*exp(x).*x;

plot(x,y,'r.',x,z,'m^',x,m,'k:')

grid on

legend('exp(x)*sin(x)', 'exp(x)*cos(x)','0.09*exp(x)*x')

As variáveis y, z e m dependem de x, que foi definido utilizando o

comando linspace. Uma maneira de mostrar todas as variáveis em questão é

através do comando plot, no qual se coloca a variável inicial, a variável

dependente e a aparência da linha, que nesse caso é importante que se defina

para evitar possível confusão entre as linhas impressas na janela de exibição.

Page 89: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 83

Figura 6.2 – Exibição gráfica do exemplo com vários gráficos em apenas uma janela

Ainda se pode utilizar outra maneira para obter o mesmo resultado,

utilizado desta vez o comando hold, responsável por ‘segurar’ os gráficos na

mesma imagem. Assim, antes de se chamar os gráficos, ativa-se o hold para que

os gráficos possam ser impressos na mesma figura. Caso não se utilize o hold

on, apenas o último dos gráficos chamados pelo plot é impresso.

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

y=exp(x).*sin(x);

z=exp(x).*cos(x);

m=0.09*exp(x).*x;

hold on

plot(x,y,'r.')

plot(x,z,'m^')

plot(x,m,'k:')

grid on

legend('exp(x)*sin(x)', 'exp(x)*cos(x)','0.09*exp(x)*x')

Page 90: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 84

6.1.4 Utilização do comando subplot

Uma das desvantagens em exibir vários gráficos, de maneira individual

ou conjunta, em janelas diferentes, é a poluição visual na qual o usuário fica

sujeito, pois dependendo da situação os muitos gráficos que são gerados

podem não corresponder à intenção do programador.

Assim, uma forma de remediar essa situação, e que é diferente do que é

visto no item anterior é o uso do comando subplot, que é responsável por

colocar vários gráficos em apenas uma janela, de forma que a exibição dos

gráficos não é por sobreposição, mas é de forma tal que os gráficos possam

aparecer em janelas menores dentro da janela de exibição, com o operador

indicando o local que deve aparecer. O código a seguir contém um exemplo no

qual o subplot foi utilizado, onde o resultado pode ser visto na figura 6.3.

t = -2*pi:0.1*pi:2*pi;

x = cos(t)

subplot(2,2,1)

plot(t, x,'r--')

axis([-2*pi 2*pi,-1 1])

title('cos(t)')

grid on

y = sin(t)

subplot(2,2,2)

plot(t, y,'b*')

axis([-2*pi 2*pi,-1 1])

title('sen(t)')

grid on

z = sin(t).*cos(t)

subplot(2,2,3)

plot(t, z, 'g-.')

axis([-2*pi 2*pi,-1 1])

title('sen(t).cos(t)')

grid on

subplot(2,2,4)

plot(sin(t), cos(t),'k+')

axis equal

title('sen(t) x cos(t)')

grid on

Page 91: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 85

Figura 6.3 – Exibição gráfica da figura resultante do exemplo com o comando subplot

Para facilitar o uso do comando subplot recomenda-se pensar nele como

sendo parte de uma matriz, onde cada gráfico ou figura será plotado da mesma

maneira utilizada para indexação simples, onde a matriz escolhida foi uma 2x2 e

os gráficos foram impressos na ordem crescente de número de coluna e linha.

6.1.5 Gráficos especializados

6.1.5.1 Barras

O primeiro dos gráficos especializados que será estudado é o de barras.

Esse tipo de gráfico pode ser criado utilizando o comando bar. Esse tipo de

gráfico pode ser utilizado para plotar gráficos que possuam dados com valores

específicos e sejam indexados em ordem crescente como também no caso de

valores que sejam dependentes de outro valor.

O código a seguir apresenta um exemplo que também utiliza o comando

subplot. Nesse exemplo há, no primeiro gráfico, um exemplo no qual a nota de

várias turmas é plotada e pode ser comparada através do uso do gráfico de

Page 92: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 86

barras. No segundo gráfico há em no eixo das abscissas a variável t e no eixo

das ordenadas a variável sen(t), o resultado de tais exibições é mostrado na

figura 6.4.

% primeiro caso: dados sem dependência

turma = [1 2 3 4 5]

nota_alunos = [8.8 7.5 4.6 9.6 6.5]

subplot(2,1,1)

bar(turma,nota_alunos,'r')

xlabel('Turma')

ylabel('Nota média')

grid on

% segundo caso: dados com dependência

t = 0: 0.25: 4*pi

x = sin(t)

subplot(2,1,2)

bar(t,x,'c')

xlabel('t')

ylabel('sen(t)')

Uma das desvantagens do uso do gráfico em barra é que é complicado

para inserir dados com nomes, como no caso em que o desejo do usuário é

colocar nomes para cada barra já no próprio código do programa. Uma das

formas ‘manuais’ de se colocar nomes nas barras é através do comando gtext,

onde o usuário pode inserir o texto na posição desejada em qualquer um dos

gráficos.

Percebe-se, ainda, que o uso do comando bar é semelhante ao comando

plot, e onde configurações do gráfico como cor, textos dos eixos e títulos são

usados os mesmos comandos.

Esses comandos são utilizados igualmente para todos os comandos

especializados.

Page 93: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 87

Figura 6.4 – exemplo de exibição em barras.

6.1.5.2 Gráfico Pizza (Pie Charts)

O gráfico pizza (pie charts, em inglês) é utilizado quando se deseja saber

a porcentagem ou valor de um determinado dado em relação a todos os

demais, sendo a soma de todos os dados, quando plotados em porcentagem,

igual a 100%.

Supondo que no curso de Fundamentos de MATLAB® o percentual de

alunos por curso seja o exposto abaixo:

Curso Porcentagem total (%)

Eng. Química 23

Eng. Civil 13

Eng. Mecânica 22

Eng. Produção 18

Eng. Elétrica 20

Page 94: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 88

Uma forma de representar tais resultados através de um gráfico em pizza

é a seguinte:

porcentagem_de_alunos = [18 22 13 27 20];

grafico_pizza = pie(porcentagem_de_alunos);

title('porcentagens de alunos no curso')

gtext('engenharia química')

gtext('engenharia civil')

gtext('engenharia mecânica')

gtext('engenharia de produção')

gtext('engenharia naval')

Figura 6.5 – gráfico em pizza com auxílio do gtext

Infelizmente não há uma maneira simples de colocar os dados escritos no

gráfico, de forma que represente cada fatia do gráfico. Existem na internet

funções como a pielabel, na qual o usuário pode diretamente colocar os textos

associados a cada valor. Outra forma de se conseguir isso é utilizando o

comando gtext, que o usuário deverá colocar manualmente com auxílio do

mouse. A figura resultante após uso do gtext é a figura 6.5.

6.1.5.3 Área

O comando area gera um gráfico no qual a parte entre o eixo y e a

função é visualmente preenchida a partir de dados de um vetor ou matriz. Por

Page 95: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 89

definição, a área preenchida é aquele entre a linha definida pelo usuário e a

linha que representa y = 0, assim, o comando a ser usado é area(x,y).

Há a possibilidade do usuário definir outro eixo no qual a área seja

preenchida, assim o usuário deve chamar area(x,y,eixodesejado). A cor da área

também pode ser escolhida, e para isso o usuário deve inserir o comando da

seguinte forma area(x,y, eixodesejado, ‘facecolor’, ‘cor desejada em inglês’). Um

exemplo no qual a função area é chamada é mostrado a seguir.

x = -3*pi:0.1*pi:3*pi

y = cos(x).*(sin(0.2*x))

subplot(2,1,1)

area(x,y, 'facecolor', 'cyan')

grid on

z = sin(x).*(cos(0.2*x))

subplot(2,1,2)

area(x,z,-0.5, 'facecolor', 'yellow')

axis tight, grid on

Figura 6.6: Exemplo da função para mostrar a área.

6.2 Gráficos em três dimensões (3D)

6.2.1 Gráficos simples em três dimensões

O comando para imprimir gráficos em 3D de forma simples é através do

plot3. A maneira de fazer a impressão é semelhante a utilizada para gráficos 2D.

Page 96: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 90

Entretanto é necessário que o usuário explicite o eixo z, de forma que o

complete as três dimensões. Caso haja o desejo de nomear o eixo z, pode-se

usar o zlabel para isso, da mesma forma que ocorre para xlabel e ylabel.

t = 0: 0.01*pi:20*pi;

x = sin(t).*log(-0.2*t);

y = cos(t).*log(-0.2*t);

z = t;

plot3(x,y,z);

xlabel('x');

ylabel('y');

zlabel('z');

A imagem gerada através do comando acima é mostrada na figura 6.7.

Figura 6.7 – Exemplo utilizando o plot3.

Os comandos para inserir títulos, legendas e as modificações em cor de

gráfico e demais características continuam as mesmas do caso em duas

dimensões. Outra ferramenta que é bastante útil no estudo dos gráficos em três

dimensões é view. A função view(az,el) é responsável no valor az a fazer o

Page 97: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 91

deslocamento rotacional horizontal e o valor el é responsável pela rotação

vertical realizada.

Um exemplo, que verifica várias perspectivas de vista, e que usa o subplot

de forma que várias imagens podem ser vistas ao mesmo tempo pelo usuário

do programa pode ser visto a seguir, sendo o gráfico resultante o exposto na

figura 6.8.

t = 0: 0.1:14;

x = sin(t).*exp(-0.1*t);

y = cos(t).*exp(-0.1*t);

z = t;

subplot(2,2,1); plot3(x,y,z);

xlabel('x');ylabel('y');zlabel('z');

title('Perspectiva padrão - plot3');

subplot(2,2,2); plot3(x,y,z, 'rd');

xlabel('x');ylabel('y');zlabel('z');

view(-54, -144)

title('Az = 54, El = -144');

subplot(2,2,3); plot3(x,y,z, 'k*');

xlabel('x');ylabel('y');zlabel('z');

view(0, 90)

title('Az = 0, El = 90');

subplot(2,2,4); plot3(x,y,z, 'mo');

xlabel('x');ylabel('y');zlabel('z');

view(90, 0)

title('Az = 90, El = 0');

Page 98: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 92

Figura 6.8: Uso do view e subplot para verificar diferentes perspectivas do mesmo gráfico

com uso do plot3.

6.2.2 Comando Mesh, Contour e Surf

Os comandos mesh, contour e surf são utilizados em gráficos de

superfícies que podem ser visualizados em três dimensões. O exemplo que será

estudado a seguir é o do exemplo do chapéu mexicano, e nos auxiliará na

compreensão dos comandos.

O mesh é usado para mostrar a superfície estudada, mas apenas os

pontos dela, de forma que a superfície não fica ‘sólida’. O comando meshgrid é

utilizado para gerar as matrizes x e y que serão utilizadas, de forma que

também o gráfico também terá o grid, isto é, a aparência milimetrada em seus

eixos. É o comando principal aqui, pois é ele que gera as matrizes necessárias

para formação das superfícies.

O comando surf é semelhante ao mesh, sendo a diferença que é

mostrado uma forma sólida entre os pontos estudados no mesh. A sua forma de

chamada é a mesma, sendo chamado surf(z) no lugar do mesh(z), do caso

anterior. Ainda há o uso possível de surfc e meshc, que gera um contorno na

Page 99: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 93

região 2D, conhecida como linhas de contorno na região abaixo do gráfico. A

chamada das mesmas é semelhante ao mesh e ao surf.

Caso o usuário deseje ver apenas o contorno da função estudada pode

usar o comando contour que gera apenas as linhas de contorno, e possui

chamada semelhante ao mesh e surf. A função contour mostra a função em 2D,

e para mostrar a função em 3D a função usada deve ser contour3.

O exemplo a seguir mostrará todas as funções vistas nesse tópico com

auxílio da função subplot, para que facilite a identificação das diferenças, que

embora sejam sutis, existem. O resultado do código é a figura 6.9.

figure('Name', 'gráficos 3D', 'color', 'white')

subplot(3,2,1)

[x,y] = meshgrid(-8:0.5:8);

r = sqrt(x.^2 + y.^2);

z = sin(r)./r;

mesh(z)

title('Mesh')

subplot(3,2,2)

[x,y] = meshgrid(-8:0.5:8);

r = sqrt(x.^2 + y.^2);

z = sin(r)./r;

surf(z)

title('Surf')

subplot(3,2,3)

[x,y] = meshgrid(-8:0.5:8);

r = sqrt(x.^2 + y.^2);

z = sin(r)./r;

meshc(z)

title('Meshc')

subplot(3,2,4)

[x,y] = meshgrid(-8:0.5:8);

r = sqrt(x.^2 + y.^2);

z = sin(r)./r;

surfc(z)

title('Surfc')

subplot(3,2,5)

[x,y] = meshgrid(-8:0.5:8);

r = sqrt(x.^2 + y.^2);

z = sin(r)./r;

contour(z)

title('Contour')

subplot(3,2,6)

[x,y] = meshgrid(-8:0.5:8);

r = sqrt(x.^2 + y.^2);

z = sin(r)./r;

contour3(z)

title('Contour3')

Page 100: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 94

Figura 6.9: Exemplo de mesh, surf, meshc, surfc, contour e contour3 para um gráfico 3D.

Page 101: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 95

Exercícios de fixação

1. Para a função x = sin(t), com -3π < t < 3π, use o comando plot para exibir o

gráfico e associado a ele os seguintes comandos para exibir o eixo.

a) axis off

b) axis on

c) axis square

d) axis tight

e) axis equal

f) axis ([ -pi pi -1 1])

2. Ao se deparar com um gráfico que possui difícil definição, inicialmente pode-se

tentar diminuir o intervalo de acréscimo dos valores, para que o mesmo

apresente melhor nitidez. Entretanto muitas vezes isso pode não ocorrer. O que

é recomendado nessas situações é o uso do comando fplot. Transcreva o

exemplo a seguir e tire suas conclusões:

x = 0:0.01:1; %teste com acréscimo de 0.01, 0.001 e 0.0001

subplot(2,1,1)

plot(x, cos(1./x))

title('utilizando o plot');

subplot(2,1,2)

fplot('cos(1/x)', [0 1]) %não é necessário colocar ‘cos1./x’ title('utilizando o fplot');

3. No exemplo do subplot, faça os gráficos aparecerem de forma que na primeira

linha apareça dois gráficos lado a lado, o do seno(x) e cosseno(x), na segunda

linha apareça apenas o sen(t).cos(t), ocupando o mesmo espaço dos dois

gráficos da primeira linha, e na terceira linha apareça sen(t)xcos(t), também

ocupando o mesmo espaço que os dois primeiros gráficos.

4. No exemplo feito para aprendizado do comando bar, experimente substituir o

comando bar por barh, bar3 e bar3h para verificar o que ocorre na exibição dos

resultados.

5. Em uma cidade, as temperaturas médias nos dez primeiros dias foram as

seguintes, em Celsius: 24, 27, 26, 29, 20, 19, 22, 25, 29, 31. Mostre um gráfico em

barra com as temperaturas da cidade estudada nesses dias.

6. Comandos exclusivos para gráficos do tipo pizza são o explode e o pie3. O pie3

é semelhante ao bar3, mostrado na questão anterior. O explode, entretanto,

tem como objetivo destacar fatias da pizza, de forma que fiquem separadas da

figura inicial. Experimente usar o seguinte comando no exercício do gráfico em

pizza. Obs: o comando gtext apenas funciona em gráficos 2D.

explode = [0 0 0.5 0 0]

porcentagem_de_alunos = [18 22 13 27 20]

grafico_pizza = pie(porcentagem_de_alunos, explode)

Page 102: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 96

7. O MATLAB® possui uma ferramenta de animação de gráficos comet (2D) e

comet3 (3D). Experimente utilizá-los com os seguintes exemplos abaixo. Obs:

Para que o comet funcione bem, deve-se utilizar um incremento muito pequeno

para visualização do andamento do gráfico.

% Caso 2D

t = -pi:pi/200:pi

x = sin(cos(tan(t)))-cos(tan(sin(t)))-tan(cos(t).*sin(t));

comet(t,x)

% Caso 3D

t = 0.5*pi:pi/600:5*pi;

x = cos(4*t);

y = sin(5*t);

z = 0.5*t;

comet3(x,y,z)

% Outro caso 3D

t = 0:0.1:100;

x = sin(t).*exp(-t/10);

y= cos(t).*exp(-t/14);

z = t;

comet3(x,y,z);

8. Utilize as ferramentas que estão localizadas na barra de ferramentas de figura.

Deduza a utilidade de cada uma quando utilizando-as em algum gráfico

estudado anteriormente, de preferência 3D.

9. Utilize os comandos cylinder, sphere e ellipsoid de forma que gerem uma

superfície, e depois mostre-a usando algum dos comandos de visualização de

superfície. Após criar a esfera, perceba a importância da utilização de eixos

adequados, como através do axis equal.

10. Utilize o comando surf(peaks(60)), e verifique o que ocorre na visualização

quando se utiliza os seguintes comandos: >>shading interp >>shading flat e

>>shading faceted.

11. Ainda com o exemplo anterior, aprenda a modificar a escala de cores utilizada.

O comando para tal realização é o colormap, que deve ser seguido de um

argumento de que cores utilizar. Ex: >> colormap(colorcube). Teste os seguintes

argumentos: hot, gray, spring, autumn, summer, winter, bone, white, hsv

(padrão), flag e pink. Não se esqueça de inserir a colorbar (na barra de

ferramentas) para visualização dos valores na figura.

12. Embora não seja intuitivo fazer gráficos de superfícies no MATLAB®, o usuário

pode fazer tais gráficos utilizando o comando meshgrid, de maneira simples. O

código abaixo está escrito para exibir uma superfície em questão, deixando os

demais exemplos para o leitor desenvolver oportunamente.

Page 103: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Instrutor: Fernando Wesley

Recife/PE - 2012 97

a) f = -xy exp(-(x²+y²)); -2<x<2 e -2<y<2

[x,y] = meshgrid(-2:0.1:2, -2:0.1:2);

f = -x*y*exp(-(x.^2+y.^2));

surf(x,y,f); xlabel('x'); ylabel('y'); grid on

b) f = (x – 5)² + (y )²; 4<x< 6 e -1<y<1

c) f = (x – cos(x))² + (y + sen(y))² - (xy); -2<x<6 e -2<y<6

d) f = x exp(x² - y²); -2<x<2 e -2<y<2

e) f = cos(x).sen(y); -π<x<π e –π<y<π

f) f = exp(cos(x.(cos(exp(y)))); -10<x<10 e -5<y<5

g) f = cos(xy) + sen(x²) + exp(-y²); 4<x<7 e 2<x<5

13. Funções como surf e mesh podem exibir os resultados de função de bessel. Um

exemplo está no código a seguir. Verfique o que ocorre quando se muda o

intervalo do meshgrid, e o termo de soma (0.03).

[x,y] = meshgrid(-5:0.5:5);

f = abs(besselj(0,abs(x)+abs(y))) + 0.03;

surfc(x,y,7*log(f));

Page 104: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

98

Capítulo 7 – MATLAB® para análises numéricas

Nesse capítulo, o objetivo é utilizar as funções do MATLAB® para auxiliar

em cálculos de valores máximos e mínimos de funções, derivadas e integrais

entre outros dados.

7.1 Diferenciação

No MATLAB® as diferenciações podem ser realizadas de modo

simbólico. Caso o usuário necessite do resultado numérico, recomenda-se

verificar o resultado simbólico e efetuar a substituição do resultado de maneira

manual.

Para derivada de expressões simbólicas (apenas o resultado escrito),

comumente utiliza-se o diff e o divergence.

7.1.1 Derivadas simbólicas - Diff

Para chamada do diff, é importante que antes da sintaxe da função, o

usuário construa um objeto simbólico utilizando o comando syms seguido do

nome da variável desejada (ex.: syms x). A variável simbólica escrita deve ser a

utilizada quando a função for chamada para a diferenciação da maneira literal

ou da maneira numérica.

As sintaxes de escrita são as seguintes:

syms x – declara x como variável simbólica

diff(expressão) – deriva em relação à variável simbólica

declarada pelo usuário

diff(expressão, y) – deriva a expressão em relação à variável y

(também declarada simbolicamente pelo usuário)

diff(expressão, n) – deriva a expressão n vezes, sendo n um

número inteiro.

diff(expressão, y, n) – deriva a expressão em relação a y n

vezes.

Como exemplos:

>> syms x

>> y = sin(x)

y = sin(x)

Page 105: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

99

>> r = diff(y)

r = cos(x)

Derivada de 2 sen(x)² em relação a y.

>> syms x

>> diff(2*sin(x)^2)

ans = 4*cos(x)*sin(x)

Para a derivada de (2 sen(x))², o resultado se mostra diferente:

>> syms x

>> diff((2*sin(x))^2)

ans = 8*cos(x)*sin(x)

Para calcular a derivada segunda da expressão acima em relação a x,

utiliza o argumento 2 após o comando diff.

>> syms x

>> diff((2*sin(x))^2, 2)

ans = 8*cos(x)^2 - 8*sin(x)^2

Caso se tenha uma função que varie simultaneamente em relação à x e a

t, e deseja-se calcular a derivada da mesma em relação à variável t, utiliza-se

como argumento o t que deve ser declarado de forma simbólica anteriormente.

Ex.: Para a função xt² sen(x).

>> syms x t

>> y = t^2*x*sin(x)

y = t^2*x*sin(x)

>> r = diff(y,t)

r = 2*t*x*sin(x)

Calculando-se a derivada da mesma função anterior duas vezes em

relação a t, a maneira de inserir os argumentos deve ser feita de seguinte modo.

>> r = diff(y,t,2)

r = 2*x*sin(x)

Page 106: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

100

Ainda se pode derivar a expressão acima em relação à x e a t

concomitantemente. Entretanto a função diff aceita no máximo três

parâmetros, de forma tal que o usuário no poderá derivar uma função em

relação a mais de duas variáveis de apenas uma vez. Nesse caso é facultado ao

usuário realizar várias etapas para chegar no resultado desejado.

>> r = diff(y,x,t)

r = 2*t*x*sin(x)

Caso o usuário insira uma expressão que não seja simbólica, o resultado

será fornecido na forma de matriz vazia. Isso ocorrerá mesmo se o valor inserido

for numericamente definido no programa.

>> diff(cos(5))

ans =

[]

7.1.2 – Função jacobian

A função jacobian, é utilizada para calcular a matriz jacobiana da função

é semelhante à função diff, vista anteriormente, mas é utilizada para calcular o

gradiente da função em relação às suas dimensões. É necessário inserir as

variáveis simbólicas nesse caso.

A sintaxe da função jacobian é a seguinte:

jacobian(f,v) – onde f é a função desejada e v é o vetor desejado para

derivação. O jacobiano pode ser encontrado para casos com duas e três

dimensões.

Os exemplos a seguir fornecem compreensão sobre o comando jacobian.

Em duas dimensões:

>> syms x y

>> r = sin(x); s = cos(y)

s =

cos(y)

>> J = jacobian([r;s], [x y])

J =

Page 107: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

101

[ cos(x), 0]

[ 0, -sin(y)]

Em três dimensões:

>> syms r l f

>> x = r*cos(l)*cos(f); y = r*cos(l)*sin(f); z = r*sin(l);

>> J = jacobian([x; y; z], [r l f])

J =

[ cos(f)*cos(l), -r*cos(f)*sin(l), -r*cos(l)*sin(f)]

[ cos(l)*sin(f), -r*sin(f)*sin(l), r*cos(f)*cos(l)]

[ sin(l), r*cos(l), 0]

7.2 – Limites – função limit

O limite representa de forma matemática a forma que uma função se

comporta quando a mesma se aproxima de um determinado valor. Os limites

são utilizados de maneira ampla no cálculo diferencial e na análise numérica.

Para o MATLAB® fornecer os limites também é necessário que haja a

definição das variáveis simbólicas (syms) antes do uso da função limit. A sintaxe

da função limit é a seguinte:

syms x t h – declara as três letras como variáveis simbólicas

limit(F,x,a) – Calcula o limite da função F quando o valor de x

é a.

limit(F) – Calcula o limite da função tomando a = 0

limit(F,x,a, ‘right’) ou limit(F,x,a,’left’) – Calcula o limite

da função F utilizando o valor a na direita ou esquerda.

Os exemplos a seguir exemplificam o uso da função limit.

Page 108: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

102

>> syms x;

>> limit(sin(x)/x)

ans =

1

Quando não há definição do valor desejado para o ‘a’, o limite é

calculado para 0.

>> syms x

>> limit(cos(x)/x)

ans =

NaN

Para calcular o limite da função F(x) = x-2/(x²-4) quando x tende a 2, as

seguintes linhas de comando podem ser utilizadas.

>> syms x

>> limit((x-2)/(x^2-4),2)

ans =

1/4

Para calcular os limites da função 1/x à direita e à esquerda quando

ambos os limites tendem a zero, o código a ser utilizado é o seguinte:

>> syms x

>> limit(1./x,x,0,'right')

ans =

Inf

>> syms x

>> limit(-1./x,x,0,'left')

ans =

-Inf

Caso haja dúvida por parte do leitor a respeito dos valores acima, pode-

se criar um gráfico para mostrar o comportamento da função 1/x.

>> x = -1:0.01:1;

Page 109: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

103

>> y = 1./x;

>> plot(x,y)

Como resultado surge o seguinte gráfico:

Figura 7.1: Gráfico da função f = 1/x

Ainda pode ser calculado o limite de varias funções de maneiras

consecutivas, inserindo-as em um vetor, onde cada elemento deve representar

uma função, no caso o vetor do exemplo posterior será o v(x), e as funções

presentes nele serão (1 + a/x)^x, exp(-x) e cos(x)*sin(-x). O objetivo é calcular o

limite das funções quando x tende a infinito pela esquerda.

>> syms x

>> v = [(1 + a/x)^x, exp(-x), cos(x)*sin(-x)]

v =

[ (a/x + 1)^x, 1/exp(x), -cos(x)*sin(x)]

>> limit(v,x,inf, 'left')

ans =

[exp(a), 0, NaN]

Page 110: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

104

7.3 – Integração – função int

A integração ou anti-derivada de uma função pode ser encontrada

através do comando int, abreviação do nome integrate que representa a palavra

integração em inglês.

O MATLAB® é capaz de calcular integrais de maneira definida e

indefinida, imprimindo os resultados após o calculo dos mesmos. Da mesma

forma que para as funções anteriores, é necessário que o usuário represente as

variáveis simbólicas para cálculo das funções.

A sintaxe da função int é mostrada abaixo:

Os exemplos a seguir demonstram a maneira de utilização da função int.

Para calcular a função resultante da integração do sen(x):

syms x – cria a variável x simbólica

int(s) – Integral indefinida da função s em relação à sua

variável simbólica

int(s,v) – Integral indefinda da função s em relação à variável

simbólica v.

int(s,a,b) – Integral definida da função s em relação à sua

variável simbólica entre os limites de integração a e b que pode ser

variável double ou escalares simbólicos.

int(s,v,a,b) – Integral definida da função s em relação à v com

valores calculados entre os limites de integração a e b que podem ser

double ou escalares simbólicos.

>> syms x

>> int(sin(x))

ans =

-cos(x)

Tendo-se a função sen(xt), deseja-se obter a integral em relação a x.

>> syms x t

>> int(sin(x*t))

ans =

-cos(t*x)/t

Page 111: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

105

Utilizando-se a mesma função acima, deseja agora obter a integral da

função em relação à variável t.

>> syms x t

>> int(sin(x*t),t)

ans =

-cos(t*x)/x

Um caso interessante ocorre quando se deseja obter a integral de x^n. A

mesma pode ser log(x), se n= -1 e (xn+1)/(n+1) para os casos contrários. O

resultado impresso na janela de comando do MATLAB® é o seguinte neste

caso:

>> syms x n

>> int(x^n,x)

ans =

piecewise([n = -1, log(x)], [n <> -1, x^(n + 1)/(n + 1)])

A integral indefinida tem algumas restrições em relação ao calculo de

derivadas realizado no MATLAB®. De forma geral uma integral pode existir,

mas o software pode não ser capaz de encontra-la. Também há o caso do

software não possuir memória suficiente para realizar o calculo, e o mesmo

deve ser realizado em um computador com memória superior.

Para cálculo da integral definida, deve-se possuir a função desejada e os

limites de integração (condições de contorno).

Para a função f(x) = x², e condições de contorno a= 0 e b = 1, pode-se

encontrar a integral definida da seguinte forma.

>> syms x

>> f = x^2

f =

x^2

>> a = 0

a =

0

Page 112: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

106

>> b = 1

b =

1

>> int(f,a,b)

ans =

1/3

No caso de uma função mais complexa, f(x) = log(x)*sqrt(x) com

condições de contorno entre 0 e 3, o código para compilação e resultado é

mostrado a seguir:

>> syms x

>> f = log(x)*sqrt(x);

>> a = 0;

>> b = 3;

>> res = int(f,a,b)

res =

3^(1/2)*(log(9) - 4/3)

Outro exemplo é para a função f(x) = exp(x)*x²/7 com condições de

contorno entre 1 e pi:

>> syms x

>> f = exp(x)*x^2/7;

>> a = 1;

>> b = pi;

>> s = int(f,a,b)

s =

(exp(pi)*(pi^2 - 2*pi + 2))/7 - exp(1)/7

De forma geral, após o aprendizado dos comandos e do uso das variáveis

simbólicas, é possível utilizar o MATLAB® para os cálculos de limites, derivadas

e integrais dentro das funções matemáticas mais comuns.

Page 113: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

107

EXERCÍCIO APLICADO

Encontrar assíntotas, pontos máximos e mínimos e ponto de inflexão da

função abaixo:

Para criar a função de maneira simbólica, utilizam-se os comandos

abaixo:

% criação da função de modo simbólico

syms x

num = 3*x^2 + 6*x - 1;

den = x^2 + x - 3;

f = num/den;

Para visualização do gráfico, o comando que deve ser utilizado é o

ezplot. O ezplot é utilizado para os casos onde se trabalha com a variável x e o

gráfico resultante apresentará como exibição padrão eixos x e y limitados entre

-2π e 2π. As funções que possuem o ez indicam que são ‘easy to use’ (fácil para

usar), e podem ser plotadas apenas usando como argumento a função

estudada. Utilizando o comando ezplot(f), a figura resultante é:

Figura 7.2 – Uso do ezplot para visualização da função (3x² + 6x – 1)/(x² + x – 3)

Page 114: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

108

Para encontrar as assíntotas verticais e horizontais do gráfico, o usuário

deve fazer o seguinte. A assíntota horizontal é encontrada tomando o limite

da função f quando x tende a infinito e menos infinito. A assíntotal vertical

pode ser encontrada quando o numerador da função tem limite zero.

%cálculo e exibição das assíntotas horizontais e verticais

ah1 = limit(f,inf);

ah2 = limit(f,-inf);

av = solve(den);

figure('name', 'Assíntotas', 'number', 'Off')

ezplot(f)

hold on

% Plota assíntota horizontal

plot([-2*pi 2*pi], [double(ah1) double(ah2)],'g')

% Plota assíntotas verticais

plot(double(av(1))*[1 1], [-5 10],'r')

plot(double(av(2))*[1 1], [-5 10],'r')

title('Assíntotas Vertical e Horizontal')

xlabel('eixo x')

ylabel('eixo y')

hold off

Do código acima tem-se que as assíntotas horizontais (ah1 e ah2) tem o

mesmo valor, sendo assim, uma única reta que corta o gráfico de forma

horizontal. Em relação às assíntotas verticais, o cálculo das raízes do

denominador fornecem duas raízes e assim, dois valores para assíntotas

verticais.

Para ambos os casos, é necessário a conversão do valor da encontrado

para double, visto que desejamos utilizar o comando plot. A figura 7.3 mostra a

função estudada e suas assíntotas verticais na coloração vermelha e a assíntota

horizontal na coloração verde. Utilizou-se o comando plot limitando os eixos de

exibição do gráfico para os resultados, e no caso da assíntota vertical,

multiplicou-se por [1 1] para manter o valor na escala original.

Page 115: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

109

Figura 7.3 – Exibição das assíntotas horizontal e vertical da função (3x² + 6x – 1)/(x² + x – 3).

Para encontrar pontos máximos e mínimos da função, devemos derivar a

função inicial, igualar a zero e encontrar as raízes. De tais raízes obteremos os

pontos máximos e mínimos da função.

% calculos de pontos máximos e mínimos

flinha = diff(f); %derivada da função f em relação a x

flinha = simplify(flinha); %auto-organização da função

pretty(flinha) %exibição da função resultante na janela de

comando

crit_pts = solve(flinha);

figure('name', 'Ptos máximo e mínimo', 'number', 'On')

ezplot(f)

hold on

plot(double(crit_pts), double(subs(f,crit_pts)),'ro')

title('Máximo e Mínimo de f')

text(-5.5,3.2,'Mínimo Local')

text(-2.5,2,'Máximo Local')

hold off

No código acima, inicia-se utilizando diff, para derivar simbolicamente a

nossa função estudada, após isso simplify é utilizado para organizar o

Page 116: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

110

resultado da função anterior, que nem sempre (raramente) está na forma mais

organizada possível. Outra função interessante é a pretty, que exibe na janela

de comando de maneira organizada o argumento que foi utilizado nela. É

aconselhado ao usuário testar as funções acima para conhecê-las

individualmente.

A função solve é utilizada para fornecer o resultado das raízes da função

utilizada como argumento. A utilidade dela é a mesma da função roots, mas a

função solve é utilizada para achar raízes de expressões simbólicas, como a que

estamos trabalhando. O resultado dela é um vetor contendo um número de

raízes proporcional ao grau do polinômio estudado.

A figura resultante do código acima é a seguinte:

Figura 7.4 – Pontos máximo e mínimo da função (3x² + 6x – 1)/(x² + x – 3)

Além dos ponto máximo e do ponto mínimo, é facultado ao usuário

encontrar o ponto de inflexão. O mesmo pode ser encontrado derivando-se a

função original duas vezes e igualando o resultado a zero. A lógica do código é

a mesma para o caso do ponto máximo e mínimo, e está descrito logo a seguir:

Page 117: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

Instrutor: Fernando Wesley Recife/PE - 2012

111

%calculo do ponto de inflexão

flinha2 = diff(flinha);

flinha2 = simplify(flinha2);

pretty(flinha2)

pt_inflx = solve(flinha2);

double(pt_inflx)

inflx = (pt_inflx(1));

figure('name', 'Pto de inflexão', 'number', 'On')

ezplot(f)

hold on

plot(double(inflx), double(subs(f,inflx)),'bo')

title('Ponto de inflexão de f')

text(-5,2,'Ponto de inflexão')

hold off

Como resultado, a figura fornecida com o ponto de inflexão é a seguinte:

Figura 7.5 – Ponto de inflexão da função (3x² + 6x – 1)/(x² + x – 3)

Page 118: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

112

Capítulo 8 – Simulink

8.1 – Introdução

O Simulink (Simulation and Link) é uma extensão do MATLAB®. A sua

utilidade é oferecer modelagens, simulações e analises de sistemas dinâmicos

através de uma interface e gráfica (GUI).

O Simulink se torna simples de operar devido às suas características de

operações ‘click-and-drag’ (clicar e arrastar) com o mouse. O Simulink também

possui uma biblioteca com diversas ferramentas (toolboxes) que podem ser

utilizados em situações específicas.

A interface simples do Simulink é semelhante àquela que ilustra uma

cadeia de operações feita com lápis e papel, sendo o sistema representado

através de linhas e blocos. Cada bloco utilizado representa alguma operação

específica, e as linhas mostram a ordem na qual as operações devem ser

executadas.

8.2 – Inicialização do Simulink

Para iniciar o Simulink, é necessário possuir o MATLAB® instalado em

seu computador. Abrindo o MATLAB®, O usuário deve clicar no ícone

destacado na figura 8.1, presente na barra de ferramentas, na interface principal

do MATLAB®.

Figura 8.1 – Ícone representativo do Simulink

Após o clique no ícone em questão, será aberta uma janela que pode ser

verificada na figura 8.2, que contém os principais modelos para construção dos

blocos no Simulink. Nela podem ser vistos comandos como a criação de um

novo arquivo, a janela de busca de blocos, a janela de descrição, a biblioteca e o

conjunto de blocos do MATLAB®.

Caso o programador deseje visualizar mais opções de blocos, pode clicar

no sinal (+) presente à esquerda dos toolboxes, presente na biblioteca do

MATLAB®. Boa parte dos blocos são muito específicos, e utilizados somente em

Page 119: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

113

situações especiais. Quanto aos blocos gerais, será visto uma introdução neste

capítulo.

Figura 8.2 – Biblioteca do Simulink

Para criação de um novo modelo, o usuário pode clicar no ícone que

representa a criação de novos modelos, visto na figura 8.3, ou pode utilizar o

comando CTRL+N, responsável pela criação de uma janela para criação dos

modelos.

Figura 8.3 – Ícone para criação de novos modelos do simulink

Após a chamada da nova janela, figura 8.4, a mesma se apresentará em

branca, para que o usuário possa inserir os blocos desejados de forma que

obtenha o sistema em questão. Na parte em branco da janela devem ser

inseridos todos os blocos de forma que o usuário possa ter todo o seu sistema

representado internamente.

Page 120: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

114

É recomendado que o usuário possa explorar e utilizar os blocos do

MATLAB® de forma que, embora não conheça a finalidade específica do bloco

em questão, se familiarize com a forma de exibição, de obtenção de dados e do

fornecimento dos resultados. Além disso, o usuário está livre para conhecer

blocos que são dependentes e independentes do tempo.

Figura 8.4 – Janela na qual devem ser inseridos os blocos do Simulink

8.2.1 – Blocos principais

No Simulink, alguns blocos podem ser ditos ‘principais’, pois são blocos

básicos é podem ser utilizados em praticamente qualquer ocasião na criação de

qualquer diagrama de blocos. Tais blocos são os seguintes: Somador (Sum),

Ganho (Gain), Constante (Cte), Integrador (Integrator), Derivativo (Derivative),

Bloco Multiplicativo, Bloco de funções e Osciloscópio (Scope).

Para que possamos compreender a utilidade de cada bloco, é necessário

haver um conceito de parâmetros de entrada e parâmetros de saída. Os

parâmetros de entrada são valores necessários para que o programa funcione

corretamente. Parâmetros de saída são os valores que são fornecidos como

resultado do programa.

Page 121: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

115

Alguns blocos podem necessitar apenas de parâmetro de entrada, como

é o caso do osciloscópio, visto que para mostrar os valores necessita-se apenas

de inserí-los no sistema. Alguns fornecem apenas parâmetros de saída, como é

o caso do bloco constante. Ainda há blocos que necessitam dos dois

parâmetros, como o caso dos que realizam operações, como o ganho. Por fim,

existem blocos que fornece saída e podem pedir várias entradas, como o bloco

multiplicativo e o ganho.

8.2.1.1 – Bloco Sum

O bloco Sum (somador) é utilizado para a operação de soma entre vários

valores, como pode ser visto na figura 8.5. A entrada desse bloco pode ser de

sinais positivos e negativos, cabendo ao programador escolher na janela de

parâmetros de blocos, clicando duas vezes sobre o mesmo. O mesmo pode ser

selecionado na biblioteca de Blocos Comumente Utilizados (Commonly Used

Blocks)

Figura 8.5 – Bloco Sum

8.2.1.2 – Bloco Gain

O bloco Gain (ganho) é utilizado para multiplicação do parâmetro de

entrada por algum valor constante que seja real.

Figura 8.6 – Bloco Gain

8.2.1.3 – Bloco Constant

O Bloco Constant (Constante) é utilizado para fornecer ao sistema

montado um valor que não varia com o tempo.

Page 122: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

116

Figura 8.7 – Bloco constant

8.2.1.4 – Bloco Integrator

O Bloco Integrator (Integrador) é utilizado em um sistema para o

fornecimento da integral do sinal fornecido em um certo intervalo de tempo.

Pode ser utilizado, por exemplo, para resolução de equações diferenciais.

Figura 8.8 – Bloco Integrator

8.2.1.5 – Bloco Derivative

O bloco derivative (derivativo) é utilizado para encontrar a derivada em

relação ao tempo do sinal utilizado. O Bloco derivative pode ser encontrado na

biblioteca de funções contínuas.

Figura 8.9 – Bloco derivativo

8.2.1.6 – Bloco Product

O bloco product (Product) é utilizado para multiplicar ou dividir

diferentes sinais provenientes ou não da mesma fonte. O sinal de saída fornece

o resultado da operação realizada dentro do bloco.

Figura 8.10 – Bloco Product

8.2.1.7 – Bloco Math Function

Page 123: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

117

O Bloco Math Function (Função Matemática) é utilizado quando se

deseja obter um sinal multiplicado por alguma função matemática que use o

sinal como parâmetro de entrada. Entre as funções disponíveis, existe

exponencial, logaritmos, raiz quadrada entre outras. O bloco pode ser

encontrado na biblioteca de funções matemáticas.

Figura 8.11 – Bloco Math Function

8.2.1.8 – Bloco Scope

O Bloco Scope (Osciloscópio) é responsável por fornecer resultados

gráficos do parâmetro desejado em função do tempo.

Figura 8.12 – Bloco Scope

8.2.2 – Outros blocos

Existem blocos que são importantes ao usuário a ciência de existência,

pois em alguns momentos pode ser necessário a utilização dos mesmos. Nesse

item citaremos os seguintes blocos: Sin, Step, Ramp e Random Number. Todos

esses blocos podem ser encontrados na biblioteca Sources, que possuem

apenas parâmetros de saída.

8.2.2.1 – Bloco Sin

O bloco Sin (seno) permite ao usuário inserir, dentro de uma operação

matemática a função seno (ou cosseno) variando com o tempo. O Bloco Sin

apresenta apenas parâmetro de saída, e os parâmetros da função devem ser

inseridos na janela de parâmetros.

Page 124: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

118

Figura 8.13 – Bloco Sin

8.2.2.2 – Bloco Step

O bloco Step é responsável para o aparecimento da função degrau. A

definição da função degrau é a seguinte:

O bloco que representa a função degrau é o seguinte:

Figura 8.14 – Bloco Step

8.2.2.3 – Bloco Ramp

O Bloco Ramp representa a função rampa. Da mesma forma que a função

degrau, os valores só aparecem a partir de um certo valor de tempo definido

pelo usuário de forma prévia. A definição da função rampa é a seguinte:

Figure 8.15 – Bloco Ramp

8.2.2.4 – Bloco Random

O Bloco Random é utilizado para gerar um número aleatório, com média

e variância definidas pelo usuário. Os valores também são gerados para

intervalos de tempo definidos pelo usuário.

Page 125: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

119

Figura 8.16 – Bloco Random

8.3 – Exemplos

Para verificar a utilidade dos blocos, serão mostrados sistemas simples, e

após eles, aumentar a complexidade do estudo.

O primeiro a ser estudado é o da função seno. Para isso será montado

um diagrama de blocos utilizando o bloco ramp (para criar os valores que serão

argumentos para a função seno), o bloco sin (que necessita de parâmetro de

entrada e de saída), e o bloco scope, necessário para a visualização da função.

Figura 8.17 – Montagem do sistema com função seno

Após o usuário selecionar o tempo limite de execução no espaço

reservado na barra de ferramentas, que vem com padrão de 10 segundos (ou o

intervalo de tempo desejado), o usuário deve clicar sobre a função scope para

verificar o gráfico resultante.

Page 126: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

120

Figura 8.18 – Gráfico da função seno no oscilóscópio

Digamos que se deseja verificar a função seno e exponencial utilizando o

mesmo osciloscópio para verificar o resultado. A montagem deve ser feita da

seguinte maneira. Primeiramente será necessário ao usuário inserir o bloco de

função exponencial, encontrado na biblioteca de funções matemáticas ao

diagrama de blocos que é construído.

Após isso, é necessário inserir o bloco rampa como parâmetro de entrada

do bloco da função exponencial. Mas para que os dois valores possam ser vistos

no osciloscópio, é necessário que se mude da visualização de um eixo para dois

eixos. O mesmo pode ser feito da seguinte forma.

Clica-se para abrir o osciloscópio e com ele aberto, clica-se no botão que

é responsável por abrir os parâmetros do osciloscópio. Após isso deve-se alterar

para 2 o valor de eixos aparentes. O diagrama de blocos ficará com a aparência

da figura 8.19. O resultado pode ser verificado clicando sobre o osciloscópio. O

resultado será conforme a figura 8.20.

Page 127: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

121

Figura 8.19 – Sistema com função exponencial e função seno

Função 8.20 – Gráfico da função seno e exponencial

Para último caso, efetuaremos algumas alterações. A primeira é em

relação à função seno, que receberá um valor aleatório somado a ela. A

segunda é a substituição da função exponencial pela função cosseno, sendo

que o gráfico desejado é de duas vezes a função cosseno.

Page 128: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

122

Para encontrarmos a função cosseno, ao invés de puxarmos um bloco

responsável por efetuar tal cálculo, usaremos o integrador para integrar a

função seno para a função cosseno. E em relação ao bloco de valores aleatórios,

na biblioteca sources deve-se puxar o bloco Random Number, responsável por

gerar um número aleatório. A montagem dos blocos deve gerar um sistema

semelhante da figura 8.21. A multiplicação dos valores pode ser efetuada a

partir do bloco gain, utilizando o valor 02 como responsável pela multiplicação.

Figura 8.21 – Sistema proposto com função seno adicionado de valor aleatório e dobro da

função cosseno.

Page 129: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

123

Figura 8.22 – Figura resultante do sistema proposto na figura 8.21.

Page 130: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

Instrutor: Fernando Wesley Recife/PE - 2012

124

8.4 – Exercícios de Fixação

1. A partir do simulink, crie um diagrama de blocos que mostre em

gráfico as seguintes funções.

a) x²

b) sen(x) + x³

c) x – 2(x² + 4)

d) x(cos(x)) + x² - 4/x

2. Do exercício acima, utilize o bloco MUX para criar um vetor com as

quatro funções acima, de forma que as mesmas sejam exibidas em uma janela

do osciloscópio. Após isso retire o MUX e deixe as funções aparecendo em

quatro janelas diferentes.

3. Um parâmetro que é importante para análise e controle de processos é

a função transferência, que mede o quanto varia a entrada e saída de um

sistema. A função transferência de primeira ordem é dada da seguinte forma:

k/(as + b), onde k, a e b são constantes. Uma função de segunda ordem é da

seguinte maneira: k/(as² +bs+c), onde k, a, b e c são valores constantes.

Encontre o bloco responsável pela função transferência e teste-o com diversos

valores para verificar como é a resposta do sistema para diferentes valores

dessa função.

4. O simulink pode ser utilizado para a resolução de equações

diferenciais. Resolva as seguintes equações diferenciais utilizando o simulink.

a) y’ + sen(y) – y

b) 3y’ – cos(3y) + 4sen(exp(5)) + 8

c) y’’ – (y’)³ - cos(y’) + sen(y + 7) – log(y)/sin(y’)

Page 131: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

125

Capítulo 9 – Guia de Interfaces

Nos módulos anteriores aprendemos a construir códigos de programa

em script, que eram executados pelo próprio editor do programa e em seguida

a criar funções que eram executadas pela janela de comandos. Porém, executar

códigos pelo editor ou pela janela de comandos pode trazer problemas, tais

como:

Edição involuntária (apenas pelo editor);

Problemas de visualização de resposta;

Interface poluída visualmente.

O fato de estar com o editor aberto leva a possibilidade de edição

involuntária do código seja por uma simples batida inconsciente no teclado ou

alterações propositais. Como a interface do editor não nos dá uma resposta do

status de execução do código, pois sempre é necessário visualizar as respostas

do sistema na janela de comandos ou caixas de diálogos que possam ser

chamadas pelo programador. Além disso, o fato do editor não atrair

visualmente o operador nos leva a considerar outras opções de interface.

Baseado nesses problemas, este módulo tem a finalidade de introduzir o

leitor nos conhecimentos básicos de criação de interfaces de software através

do MATLAB® via programação orientada ao objeto.

Mas o que é programação orientada ao objeto?

Podemos definir, de maneira simples, programação orientada ao objeto

como um tipo programação onde os elementos podem ser considerados,

dentro de determinado contexto, como objetos, e analogamente podem ser

mutáveis em forma, posição, nome, propriedades, entre outros.

A criação de interfaces gráficas está fundamentada, para este tipo de

programação, em quatro passos:

1. Criação do espaço de locação dos objetos;

2. Escolha, locação e dimensionamento de objetos;

3. Nomeação de objetos;

4. Atribuição de função.

Já a execução da interface é fundamentada em quatro passos:

1. Reconhecimento dos objetos;

2. Assimilação de valores e propriedades;

Page 132: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

126

3. Execução de funções previamente determinadas;

4. Atribuição de valores e propriedades.

O diagrama da figura 9.1 mostra como se comporta a execução da

interface.

Figura 9.1 – Diagrama de execução de interfaces.

9.1 Criação da Interface

Para os passos de criação de interfaces utilizamos o guia de interfaces

gráficas do MATLAB®, GUI (Graphical User Interface). Para inicializá-lo basta

executar o comando guide (abreviatura de Graphical User Interface Desing

Enviroment). Após esse comando uma janela como mostra a figura 9.2 será

exibida.

Figura 9.2 – Janela inicial do guia de interfaces.

Page 133: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

127

A janela da figura 9.2 é subdividida em duas abas. A aba Create New

GUI é usada quando se deseja criar uma nova interface. Já a aba Open Existing

GUI abre para edição uma interface já existente. Como será a nossa primeira

interface escolha a primeira aba e clique em OK. Observe que uma caixa de

texto, ver figura 9.3, será exibida indicando o status de inicialização do guia.

Figura 9.3 – Caixa de status de

inicialização do guia de interfaces.

Se tudo ocorrer normalmente uma janela para criação de interfaces será

exibida como mostra a figura 9.4.

Figura 9.4 – Guia de criação de interfaces gráficas, GUIDE.

No GUIDE será foco de nosso estudo a barra de objetos, localizada à

esquerda da janela e a barra de ferramentas, localizada entre a barra de menus

e a janela de alocação gráfica.

Page 134: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

128

Para garantir a segurança do que está sendo desenvolvido primeiro

vamos salvar a interface em um diretório previamente escolhido.

Obs.: preferencialmente atribua um nome que seja de fácil associação com as

atribuições do programa. Por exemplo, se for um software que realiza análises

em combustíveis fósseis, AnalisysOil.

ATENÇÃO: não altere o código até se informar de como, onde e o que alterar.

9.2 Escolha, Locação e Dimensionamento de Objeto

A escolha e locação dos objetos deverão corresponder aos propósitos

para o qual sua interface servirá. De forma geral, podemos sempre subdividir os

objetos que serão alocados na área de alocação gráfica em três categorias:

1. Objetos de Assimilação;

2. Objetos de Atribuição;

3. Objetos Inertes.

Os objetos de assimilação são usados para assimilar (obter) informações

acerca do que se pretende. Os de atribuição (recebem) definem valores aos

objetos acerca do que se pretende. E os inertes possuem apenas função

estética. O mesmo tipo de objeto pode ter função dupla ou até mesmo tripla

dentro dessa classificação.

A figura 9.5 é um exemplo de rascunho que nos fornece uma sugestão

de como poderia ficar tal interface.

Figura 9.5 – Diagrama sugerido de criação da interface.

Page 135: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

129

Antes da alocação dos objetos expanda ao máximo a sua área de

alocação gráfica segurando pela alça no canto inferior direito da mesma. Ver

figura 9.6.

Figura 9.6 – Expansão da área de alocação gráfica.

Em seguida vamos adicionar os dois painéis, um para entrada de dados e

outro para saída de dados. Os painéis são usados para agrupar os Static Text,

Edit Text e outros itens de forma mais organizada, por exemplo. È interessante

utilizar o Panel, pois se o usuário necessitar mover os objetos já criados, pode

movê-los todos em um movimento, caso estejam dentro do painel. Clique no

botão Panel na barra de objetos como mostra o detalhe da figura 9.7.

Figura 9.7 – Objeto panel.

Page 136: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

130

Após clicar no objeto retorne à área de alocação gráfica, escolha o local

onde deverá ser colocado o objeto, clique e segure o clique com o botão do

mouse, e arraste para dimensionar. Solte o botão e o objeto será criado. Não se

preocupe em errar a posição e o tamanho, mesmo após a criação o objeto pode

ser alterado facilmente pelas alças de dimensionamento localizadas em seus

vértices.

Para colocar outro painel o mesmo procedimento pode ser executado ou

ainda tente arrastar um objeto similar (o primeiro painel neste caso) com o

botão direito do mouse para outra posição da área. Ao soltar o botão direito do

mouse, uma cópia do objeto inicial será criada.

Após a execução desses passos seu guia de interfaces deverá possuir

aproximadamente a aparência da figura 9.8.

Figura 9.8 – Alocação de painéis.

O próximo passo será a alocação de uma área que servirá para exibir

inicialmente uma figura e posteriormente para exibição de gráficos. O objeto

que possui tais atribuições é o Axes, ver figura 9.9.

Page 137: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

131

Figura 9.9 – Objeto Axes

Para alocação desse objeto proceda da mesma forma que o painel. Após

a execução desses passos seu guia de interfaces deverá possuir

aproximadamente a aparência da figura 9.10.

Figura 9.10 – Alocação de eixos.

Os mesmo passos deverão ser procedidos para alocação dos seguintes

objetos: Check Box, Edit Text, Static Text, Pop-up Menu e Push Button. Tais

itens estão locados na barra de objetos do guia de interface da maneira descrita

na figura 9.11.

Page 138: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

132

Push Button

Edit Text

Pop-up Menu

Static Text

Check Button

Figura 9.11 – locação de vários itens na barra de objetos

Inicialmente os objetos inseridos terão títulos padrão atribuídos pelo

MATLAB®. Esses títulos podem ser alterados assim como outras propriedades

através do Inspetor de Propriedades do objeto. A janela do inspetor pode ser

acionada por um duplo clique no botão esquerdo do mouse. Suas principais

propriedades estão mostradas na figura 9.12

Obs. (1): o objeto Pop-up Menu precisa ser editado para que o mesmo possa

oferecer opções de escolha ao usuário. Os itens de escolhas podem ser

adicionados na propriedade String no inspetor de propriedades e cada escolha

será representada por um número. Assim, a escolha da linha um atribuirá valor

(Value) 1 ao objeto, a escolha da linha dois valor 2, e assim sucessivamente.

Obs. (2): com objetos de marcação como Check Box será atribuído valor

(Value) 1 quando ativado e 0 quando desativado.

Page 139: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

133

Figura 9.12 – Principais propriedades dos objetos pelo inspetor.

Após a alocação de todos os objetos o guia de interfaces e alteração de

suas propriedades ela deverá possuir aproximadamente a aparência da figura

9.13.

Page 140: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

134

Figura 9.13 – Aparência final do guia de interfaces.

Para visualizar a interface propriamente dita digite crtl + t ou clique no

botão RUN da barra de ferramentas.

9.3 Maximização e Minimização

Para tornar a sua janela maximizável ou minimizável acesse o menu

Tools\GUI Options ... na barra de menus. Na propriedade Resize behavior

escolha a opção Proportional como mostra a figura 9.14.

Figura 9.14 – Propriedades de dimensionamento de janela.

Page 141: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

135

9.4 O Botão Executar

Esse botão será responsável pela leitura dos dados no painel de entrada

de dados e pelos cálculos referentes à resolução do problema. Primeiro

precisamos associar tal botão a uma função. Isso é feito na propriedade

CallBack no inspetor de propriedades.

Obs.: O nome inserido na função Callback deve ser idêntico ao da função. Evite

usar caracteres especiais e ponto. Também não use o nome da função como

outro que é conhecido geralmente (ex: for, while, quit), para evitar conflitos

internos.

Para o reconhecimento do objeto da interface usamos o comando

findobj com a seguinte sintaxe, como exemplo:

obj = findobj('Tag','edit1');

Para assimilar usamos o comando get com a seguinte sintaxe, como

exemplo:

tsim = get(obj,'String');

Porém a assimilação do conteúdo do objeto faz atribuição do mesmo a

um texto, tipo char ou string. Se for necessário utilizar esse conteúdo como

número fazemos a mudança de atribuição para a forma de precisão dupla, ou

simplesmente double.

Usamos o comando str2double para efetuar tal mudança. tsim = str2double(tsim);

Para atribuição de uma propriedade, usa-se o comando set especificando

o objeto desejado, a escolha da propriedade e o valor desejado para a

propriedade.

set = (obj, ‘Enable’, ‘on’);

Proceda com esses passos para todos os objetos como mostra o exemplo

a seguir.

function calcular

global s v t

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Importação dos Dados da Interface

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

obj = findobj('Tag','edit1');

Page 142: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

136

S0 = get(obj,'String'); S0 = str2double(S0); aux = isnan(S0); if aux == 1 errordlg('O valor de S0 não foi definido.','Atenção!'); return end

obj = findobj('Tag','edit2'); V0 = get(obj,'String');

V0 = str2double(V0); aux = isnan(V0); if aux == 1 errordlg('O valor de V0 não foi definido.','Atenção!'); return end

obj = findobj('Tag','edit3'); a = get(obj,'String'); a = str2double(a); aux = isnan(a); if aux == 1 errordlg('O valor de a não foi definido.','Atenção!'); return end

obj = findobj('Tag','edit4'); ti = get(obj,'String'); ti = str2double(ti); aux = isnan(ti); if aux == 1 errordlg('O valor de ti não foi definido.','Atenção!'); return end

obj = findobj('Tag','edit5'); tf = get(obj,'String'); tf = str2double(tf); aux = isnan(tf); if aux == 1 errordlg('O valor de tf não foi definido.','Atenção!'); return end

if tf<=ti errordlg('O valor de tf deve ser maior do que ti','Atenção!'); return end

obj = findobj('Tag','edit6'); dt = get(obj,'String'); dt = str2double(dt); aux = isnan(dt); if aux == 1 errordlg('O valor de dt não foi definido.','Atenção!'); return end

Page 143: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

137

if dt>=(tf-ti) warndlg('O valor de dt deve ser menor do que o valor do

intervalo','Atenção!'); return end

if dt <= 0 warndlg('O valor de dt deve ser maior do que zero! ','Atenção!'); return end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Cálculo do Espaço e Tempo

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

t = ti:dt:tf;

s = S0 + V0*t + (a*t.^2)/2; v = V0 + a*t;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Exportação dos Dados para Interface

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

obj = findobj('Tag','edit7'); set(obj,'Enable','on'); s_char = num2str(s(end)); set(obj,'String',s_char);

obj = findobj('Tag','edit8'); set(obj,'Enable','on'); v_char = num2str(v(end)); set(obj,'String',v_char);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Exibição Gráfica

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

obj = findobj('Tag','axes1'); set(obj,'Visible','On');

obj = findobj('Tag','popupmenu1'); popmenu = get(obj,'Value');

if popmenu == 1 warndlg('escolha um gráfico para exibição', 'Atenção') return

elseif popmenu == 2 cla, gca plot(t,s,'r') grid on title('Perfil de Espaço') xlabel('Tempo (seg)') ylabel('Espaço (m)') return

Page 144: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

138

elseif popmenu == 3 cla, gca plot(t,v,'b') grid on title('Perfil de Velocidade') xlabel('Tempo (seg)') ylabel('Velocidade (m/s)') return

elseif popmenu == 4 cla, gca plot(t,s,'r--',t,v,'b'); title('Perfil de velocidade em azul, Perfil de Espaço em linha

tracejada'); grid on xlabel('Tempo (seg)'); ylabel('Velocidade(m/s) e Espaço(m)'); legend('Espaço', 'Velocidade'); end

Agora o código referente ao botão limpar dados:

function limpar

obj = findobj('Tag','edit1'); set(obj,'String','');

obj = findobj('Tag','edit2'); set(obj,'String','');

obj = findobj('Tag','edit3'); set(obj,'String','');

obj = findobj('Tag','edit4'); set(obj,'String','');

obj = findobj('Tag','edit5'); set(obj,'String','');

obj = findobj('Tag','edit6'); set(obj,'String','');

obj = findobj('Tag','edit7'); set(obj,'String','','Enable','off');

obj = findobj('Tag','edit8'); set(obj,'String','','Enable','off');

obj = findobj('Tag','popupmenu1'); set(obj,'Value',1);

logo = imread('LOGO.jpg'); image(logo); obj = gca; set(obj,'xtick',[],'ytick',[]);

Page 145: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

139

Por fim, o programa exibirá resultados semelhante à figura 9.15, a seguir:

Figura 9.15: Tela de exibição de resultados

9.5 Barra de Menus

A barra de menus é criada pela ferramenta Menu Editor localizada na

barra de ferramentas. Clicando nela, o usuário pode encontrar uma janela para

edição de menus, mostrada na Figura 9.16.

Figura 9.16 – Janela de edição dos Menus

Page 146: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

140

Onde Label é a propriedade responsável pela atribuição de nome ao

menu, Tag é a identificação interna para atribuição e assimilação de

propriedades, Accelerator é a definição de atalho e Callback é a função que

será executada quando o menu for escolhido.

Considerações Finais

1. Faça um esboço do seu software para guiá-lo;

2. Não crie nada fora dos padrões comerciais, no caso de uso profissional.

3. Se seu programa for comercializado, crie novas versões e venda também

o suporte a atualizações;

4. Sempre em dúvidas, consulte primeiramente o help do programa.

5. Leia livros especializados em MATLAB® para aprender mais dicas e

comandos úteis.

Page 147: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

141

Exercícios de fixação

1. Verifique as interfaces que já existem no guia de interfaces. Veja o Gui

com auto controles e o Gui com eixos e menu.

2. Utilize a barra de objetos, localizada à esquerda da janela de edição e a

barra de status, localizada acima da janela. Utilize todos os itens que

estão acima, aprendendo a função de cada um na prática.

3. Para o exercício visto no capítulo 9, no tópico 9.4, crie uma barra de

menus na interface estudada que possua a função desligar o programa

(quit), a opção para a janela aparecer fora da interface, de maneira

individual, e opção para o computador escolher dados randômicos, que

sejam coerentes com o programa, e plote o resultado. Faça também uma

melhoria que considere importante para a interface estudada.

4. Faça uma interface para um exemplo onde o usuário deve escolher um

número, e o programa deve mostrar se o número escolhido é certo ou

não, retornando uma imagem verde caso o resultado seja certo e uma

imagem vermelha caso o resultado seja errado.

5. Faça uma interface que deve haver 4 janelas, onde respondem pelo

número 1, 2, 3 e 4. O usuário deve dizer qual a janela o computador

escolheu, mostrando uma imagem positiva, caso o resultado seja certo, e

uma negativa, caso o resultado seja errado.

6. O tipo de jogo de sorte com fins lucrativos visto no caso anterior é

proibido no Brasil devido à razão que você verá a seguir. Utilizando o

programa anterior, faça uma alteração na qual o usuário nunca possa

acertar o resultado escolhido pelo computador, mas os resultados devem

continuar aleatórios. Crie um botão com o nome ‘Ganhe já’. Crie outro

botão com o nome ‘Sorte maior’ na qual o usuário tem apenas 10% de

chance de vencer o jogo, sendo os resultados aleatórios da mesma

maneira. Por fim, coloque outro botão com o nome ‘Primeiro jogo’ no

qual o usuário tem 80% de chance de vencer.

7. Resolva o problema 2.5 utilizando uma interface gráfica, na qual o

usuário escolhe através de radiobuttons ou checkbuttons as unidades nas

quais deve haver a transformação. Qual a diferença entre as duas

escolhas, quando dentro de um ‘button group’, outra opção dentro da

janela de objetos do guia de interfaces.

8. Resolva o exercício de fixação 2.11 através de um guia de interfaces.

Exiba o gráfico da função entre limites definidos pelo usuário.

Page 148: Fundamentos de MATLAB Para Engenheiros

Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9

Instrutor: Fernando Wesley Recife/PE - 2012

142

9. Exiba gráficos de uma função que o usuário pode escolher. Para isso

forneça a ele as seguintes opções: seno, cosseno, tangente, logaritmo,

exponencial, x^n e uma constante, na qual o usuário escolhe os

argumentos de cada uma delas. A interface ainda deve receber os limites

e mostrar o gráfico resultante ao usuário.

10. Resolva o exercício de fixação 3.8 de forma que o usuário deva

primeiramente selecionar quantos dados deseja inserir no programa (até

o máximo de 10), aparecendo as caixas de texto para inserir após isso

(utilize o enable on/off e o visible on/off). Após isso mostre em

histograma o resultado.

11. Crie um programa de supermercado em MATLAB. Faça o seguinte: Antes

de iniciar é necessário um login (com senha) para que os espaços de

inserir texto e preço fiquem disponíveis a modificação. Após isso digite o

nome do produto e o preço do mesmo, de forma que após a soma possa

ser realizada e seja criada uma lista através de indexação. Ainda, crie um

botão para encerrar as compras, fornecendo ao usuário a opção de pagar

à vista, parcelado (de várias formas) e em cheque pré-datado. Escolhida a

opção, crie a opção que mostra o valor final. Ainda crie um botão para

apagar todos os dados, e outro para log-off do sistema.