Você está na página 1de 148

Fundamentos do

®
MATLAB para
Engenheiros

Fernando Wesley

Recife/PE - 2012
®
FUNDAMENTOS DO 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.
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
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
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
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 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.

Instrutor: Fernando Wesley


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

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®

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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.

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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.

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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.

Instrutor: Fernando Wesley


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

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®

Instrutor: Fernando Wesley


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

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 =

>> 2 * 2 + 4 / 2

ans =

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 =

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

ans =

14

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

ans =

Instrutor: Fernando Wesley


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

>> 4 ^ 2

ans =

16

>> 4 ^ 2 * 2

ans =

32

>> 2 ^ (3 * 3)

ans =

512

>> 2 / 4

ans =

0.5

>> 2 \ 4

ans =

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 =

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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®

Instrutor: Fernando Wesley


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

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.

Instrutor: Fernando Wesley


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

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®

Instrutor: Fernando Wesley


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

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)

Instrutor: Fernando Wesley


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

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)

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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:

Instrutor: Fernando Wesley


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

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 =

Instrutor: Fernando Wesley


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

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 =

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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 =

>> A(3)

ans =

-2

>> A(5)

ans =

>> A(7)

ans =

-1

>> A(8)

ans =

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 =

Instrutor: Fernando Wesley


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

>> A(3,1)

ans =

-2

>> A(2,2)

ans =

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

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

Instrutor: Fernando Wesley


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

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 =

Instrutor: Fernando Wesley


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

>> size(A)

ans =

3 3

>> ndims(A)

ans =

>> length(A)

ans =

>> diag(A)

ans =

-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

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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


Determina
Polinômio
eig autovetores e poly
característico
autovalores

std Desvio padrão det Determinante

Parte real do número


mean Média aritmética real
complexo
Parte imaginária do
max Valor máximo imag
número complexo
Determina o número
min Valor mínimo rank de linhas
independentes

Instrutor: Fernando Wesley


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

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:

Instrutor: Fernando Wesley


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

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]

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

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

Instrutor: Fernando Wesley


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

Como resultado obtém-se a matriz:

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

Instrutor: Fernando Wesley


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

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.

Instrutor: Fernando Wesley


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

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.

Instrutor: Fernando Wesley


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

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.

Instrutor: Fernando Wesley


Recife / PE - 2012
38
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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

Instrutor: Fernando Wesley


Recife / PE - 2012
39
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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

Instrutor: Fernando Wesley


Recife / PE - 2012
40
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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

Instrutor: Fernando Wesley


Recife / PE - 2012
41
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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

Instrutor: Fernando Wesley


Recife / PE - 2012
42
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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.

Instrutor: Fernando Wesley


Recife / PE - 2012
43
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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

Instrutor: Fernando Wesley


Recife / PE - 2012
44
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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.

Instrutor: Fernando Wesley


Recife / PE - 2012
45
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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

Instrutor: Fernando Wesley


Recife / PE - 2012
46
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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

Instrutor: Fernando Wesley


Recife / PE - 2012
47
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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.

Instrutor: Fernando Wesley


Recife / PE - 2012
48
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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:

𝑓(𝑥𝑖 )
xi+1 = xi -
𝑓′ (𝑥𝑖 )

clear, clc
y1 = inputdlg('digite um número inicial');
y1 = str2double(y1);

Instrutor: Fernando Wesley


Recife / PE - 2012
49
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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 =

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

Instrutor: Fernando Wesley


Recife / PE - 2012
50
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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.

Instrutor: Fernando Wesley


Recife / PE - 2012
51
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3

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.

Instrutor: Fernando Wesley


Recife / PE - 2012
52
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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:

Instrutor: Fernando Wesley


Recife/PE - 2012
53
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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

Instrutor: Fernando Wesley


Recife/PE - 2012
54
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

É 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 =

>> nargout muv

ans =

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

Instrutor: Fernando Wesley


Recife/PE - 2012
55
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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.

Instrutor: Fernando Wesley


Recife/PE - 2012
56
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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

Instrutor: Fernando Wesley


Recife/PE - 2012
57
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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)

Instrutor: Fernando Wesley


Recife/PE - 2012
58
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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.

Instrutor: Fernando Wesley


Recife/PE - 2012
59
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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

Instrutor: Fernando Wesley


Recife/PE - 2012
60
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

É 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 Formato BMP imread Matrizes de cores (true
JPEG Formato JPEG color) e índice
GIF Formato GIF (mapeamento)
TIFF Formato
XDW Formato XDW
CUR Formato CUR
ICO Formato ICO
RAS Formato RAS (raster Sum)
PBM Formato PBM
PGM Formato PGM
PPM Formato PPM
AU Formato AU (áudio Sun) auread Dados de freqüência
SND Formato SND (áudio Sun)
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.

Instrutor: Fernando Wesley


Recife/PE - 2012
61
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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.

Instrutor: Fernando Wesley


Recife/PE - 2012
62
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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.

Instrutor: Fernando Wesley


Recife/PE - 2012
63
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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

Instrutor: Fernando Wesley


Recife/PE - 2012
64
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4

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)

Instrutor: Fernando Wesley


Recife/PE - 2012
65
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5

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 =

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]

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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]

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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]

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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)

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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 =

>> 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
Instrutor: Fernando Wesley
Recife/PE - 2012

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

-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 =
Instrutor: Fernando Wesley
Recife/PE - 2012

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

1.2132e-001

-4.1213e+000

p =

3.4142e+000

5.8579e-001

k =

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 =

>> f = 3*x^3 -4*x^2 + 2*x

f =

136

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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)

Instrutor: Fernando Wesley


Recife/PE - 2012

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

B =

Columns 1 through 5

4.0000e-001 1.2500e+000 -1.3333e+000 6.0000e+000


5.0000e+000

Column 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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²


Instrutor: Fernando Wesley
Recife/PE - 2012

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

b) B(x) = -2x³ + 7x² - 15x + 7


c) C(x) = 4x² - 3x + 5
d) D(x) = 7x7 - 14x5 - 4x4 + 3x² +3

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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

Instrutor: Fernando Wesley


Recife/PE - 2012
78
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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) . (ponto) : (pontilhado)
m (magenta) o (círculo) -. (ponto-traço)
c (azul-claro) x (x’s) -- (tracejado)
r (vermelha) + (cruz) solid (sólida)
g (verde) * (estrela)
b (azul) s (quadrado)
w (branca) d (losango)
k (preta) v (triângulo p/ baixo)
^ (triângulo p/ cima)
Tabela 6.2 – Cores, marcadores e tipos de linhas.

Instrutor: Fernando Wesley


Recife/PE - 2012
79
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
80
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
81
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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.

Instrutor: Fernando Wesley


Recife/PE - 2012
82
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
83
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
84
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
85
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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.

Instrutor: Fernando Wesley


Recife/PE - 2012
86
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
87
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
88
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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.

Instrutor: Fernando Wesley


Recife/PE - 2012
89
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
90
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
91
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
92
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
93
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

Figura 6.9: Exemplo de mesh, surf, meshc, surfc, contour e contour3 para um gráfico 3D.

Instrutor: Fernando Wesley


Recife/PE - 2012
94
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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)

Instrutor: Fernando Wesley


Recife/PE - 2012
95
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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.

Instrutor: Fernando Wesley


Recife/PE - 2012
96
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6

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

Instrutor: Fernando Wesley


Recife/PE - 2012
97
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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)

Instrutor: Fernando Wesley


Recife/PE - 2012
98
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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

Instrutor: Fernando Wesley


Recife/PE - 2012
99
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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 =

Instrutor: Fernando Wesley


Recife/PE - 2012
100
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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

Instrutor: Fernando Wesley


Recife/PE - 2012
101
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

>> syms x;

>> limit(sin(x)/x)

ans =

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;

Instrutor: Fernando Wesley


Recife/PE - 2012
102
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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

Instrutor: Fernando Wesley


Recife/PE - 2012
103
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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

Instrutor: Fernando Wesley


Recife/PE - 2012
104
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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 =

Instrutor: Fernando Wesley


Recife/PE - 2012
105
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

>> b = 1

b =

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

Instrutor: Fernando Wesley


Recife/PE - 2012
106
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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)

Instrutor: Fernando Wesley


Recife/PE - 2012
107
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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.

Instrutor: Fernando Wesley


Recife/PE - 2012
108
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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

Instrutor: Fernando Wesley


Recife/PE - 2012
109
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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:

Instrutor: Fernando Wesley


Recife/PE - 2012
110
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7

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

Instrutor: Fernando Wesley


Recife/PE - 2012
111
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8

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

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

Figura 8.22 – Figura resultante do sistema proposto na figura 8.21.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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;
Instrutor: Fernando Wesley
Recife/PE - 2012

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

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.


Instrutor: Fernando Wesley
Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

Push Button

Check Button

Edit Text Static Text

Pop-up Menu

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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');
Instrutor: Fernando Wesley
Recife/PE - 2012

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

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

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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
Instrutor: Fernando Wesley
Recife/PE - 2012

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

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',[]);

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

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

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.

Instrutor: Fernando Wesley


Recife/PE - 2012

142

Você também pode gostar