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
Instrutor: Fernando Wesley 1
Capítulo 1 – Introdução ao MATLAB®
1.1 - Introdução
O MATLAB® (Matrix Laboratory) é um software para computação
numérica, que pode ser utilizado em um ambiente de programação fácil, no
qual os problemas e soluções são expressos de forma simples. Seus elementos
básicos são matrizes que não requerem dimensionamento. Ele permite inserir e
resolver problemas matemáticos de forma muito mais rápida e eficiente que
através de outras linguagens como C++, Basic ou Pascal.
O MATLAB® pode ser utilizado para uma ampla faixa de aplicações,
incluindo processamento de sinais e processamento de imagem, comunicações,
controle de processos, medições e testes, análise e modelagem financeira,
biologia computacional, biogenética, entre outros.
O MATLAB® ainda possui uma família de aplicativos específicos
(toolboxes), que são coleções de funções usadas para resolver determinados
problemas tais como: otimização, manipulação algébrica, redes neurais,
processamento de sinais, simulação de sistemas dinâmicos, entre outros.
Provavelmente, a característica mais importante do MATLAB® é a sua
extensibilidade, que permite que milhares de engenheiros, matemáticos,
funcionários das mais diversas indústrias, o utilizem no dia a dia como uma
linguagem técnica de computação. Pois mesmo com um conhecimento limitado
da língua um programador iniciante pode escrever seu próprio código para
resolver problemas que são complexos o suficiente para serem resolvidos por
outros meios.
1.2 – História do MATLAB®
Cleve Moler foi um professor de matemática e ciência da computação na
Universidade do Novo México. Quando ele desenvolveu a primeira versão do
MATLAB®, Moler queria que seus alunos tivessem acesso ao software Linpack e
Eispec sem ter que usar a linguagem de programação Fortran, que era
complexa. De acordo com a "Scientific Computing World", Moler desenvolveu o
sistema do Matlab para resolver este problema e a linguagem foi projetada
especificamente para lidar com cálculos com matrizes e da área das ciências
exatas.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 2
A linguagem logo se espalhou para outras universidades e encontrou um
público interessado dentro da comunidade matemática e de ciências exatas,
além das engenharias. Jack Little, um engenheiro, conheceu o MATLAB®
durante uma visita feita à Universidade de Stanford em 1983.
Reconhecendo o seu potencial comercial, ele se juntou com Moler e
Bangert. Eles reescreveram MATLAB em C e fundaram a MathWorks em 1984
para continuar o seu desenvolvimento. Em 2000, o MATLAB foi reescrito para
usar um novo conjunto de bibliotecas para auxiliar os usuários na manipulação
de matrizes.
1.3 Aprendendo a utilizar o MATLAB®
Para ter acesso ao MATLAB® o usuário deve tê-lo instalado em seu
computador ou ter o programa disponível na rede em que está conectado. Para
iniciar o MATLAB® a partir do Windows, dê um duplo clique no ícone
MATLAB® em seu Windows desktop. O ícone do MATLAB® é mostrado na
figura 1.1.
Figura 1.1 – Ícone representativo do MATLAB®
Para iniciá-lo a partir de uma plataforma UNIX, digite MATLAB no
prompt de comando do sistema operacional. Quando o MATLAB® é iniciado, a
área de trabalho MATLAB® é visualizada, entretanto nenhuma atividade pode
ser realizada, devido ao fato que o mesmo se encontra em estado de
inicialização, conforme pode ser visto na figura 1.2.
Figura 1.2 – Barra de status no momento da inicialização do MATLAB®
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 3
A inicialização do programa possui tempo que varia conforme a
capacidade de processamento do computador utilizado. Quanto maior a
capacidade de processamento, menor é o tempo que é necessário para a
inicialização do MATLAB®. Ao término da inicialização, na barra de status
aparecerá a palavra Ready, indicando que o programa se encontra disponível
para ser utilizado.
Figura 1.3 – Barra de status indicando disponibilidade para inserção de comandos no
MATLAB®
A janela na área de trabalho que nos interessa é a Janela de Comando,
onde o prompt especial é exibido. Isto significa que o MATLAB® que está
esperando por um comando. O prompt no MATLAB® é indicado pelos
caracteres (<<), seguida da barra vertical pulsante. Nesta situação, o usuário
identifica a disponibilidade de inserção de comandos no MATLAB®.
Figura 1.4 – Prompt de comandos no MATLAB®
Você pode sair a qualquer momento do MATLAB com os comandos exit
e quit.
1.4 – Ambiente de trabalho
Na área de trabalho do MATLAB® pode-se dividir a configuração da
interface gráfica em cinco barras e quatro janelas. As barras são imutáveis e a
opção que o usuário possui é de apenas deixá-las ou não visíveis. O MATLAB
tem disponíveis cinco barras, sendo quatro delas na parte superior da interface
gráfica e a última na parte inferior. A figura 1.5 fornece o posicionamento e o
nome das barras disponíveis no MATLAB®.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 4
Figura 1.5 – Barras disponíveis na interface gráfica principal do MATLAB®
A primeira barra (no sentido descendente) é a barra de títulos. Nela
encontramos o título do programa. Abaixo da barra de títulos se encontra a
barra de menus. Através dela podemos acessar todas as ferramentas disponíveis
no programa.
A terceira barra no sentido descendente é a barra de ferramentas e está
no mesmo nível da barra de endereços. Na barra de ferramentas observamos
atalhos para as principais aplicações do programa como copiar, colar, abrir novo
editor de texto. Na barra de endereços, os diretórios podem ser acessados
através de um sistema de endereçamento similar ao do WINDOWS. Na parte
inferior da interface encontramos a barra de status. Nela podemos saber qual a
situação de operação do programa.
Em relação às janelas, o usuário possui a oportunidade de modificar a
aparência e o local dela no gráfico, proporcionando conforto e praticidade ao
usuário. As quatro janelas que existem inicialmente na área de trabalho são o
Workspace (Memória Temporária), Command History (Histórico de
Comandos), Current Directory (Diretório Atual) e Command Window (Janela
de Comando). As quatro janelas podem ser vistas na figura 1.6.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 5
Figura 1.6 – Janelas presentes na interface gráfica principal do MATLAB®
1.4.1 Janela Command Window
Na figura 1.6 é possível visualizar quatro janelas dispostas lado a lado. A
janela da direita é denominada Command Window, ou simplesmente janela de
comando. Nela são executados os comandos principais para a realização de
seus trabalhos. Se o sistema não estiver executando uma atividade que utilize
toda sua memória, você irá encontrar um prompt indicando que o programa
aguarda suas instruções, conforme visto na figura 1.4.
À medida que o usuário digita os comandos na janela de comando os
mesmos permanecem nela, incomodado com a grande quantidade de
informações o usuário pode desejar apagar os textos desejados da janela. Para
isso basta a utilização do comando [>> clc].
Figura 1.7 – Janela de Comando
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 6
1.4.2 Janela Workspace
Na parte superior esquerda da figura 1.4, está a janela responsável pela
memória temporária “visível” do programa, a Workspace, figura 1.8. Sua
memória é tida como temporária uma vez que desligado o programa, os dados
inseridos nela serão apagados. Nele podemos encontrar todos os dados
disponibilizados ao MATLAB® e além disso verificar seu valor, e em caso de
vetores é mostrado valores máximos e mínimos.
Quando o usuário utiliza diversos comandos, há o preenchimento da
janela Workspace que não interfere significativamente na linha de raciocínio do
programa, mas pode haver por parte do usuário o desejo de limpar a memória
temporária. É sempre recomendada a limpeza da tela principalmente após o
usuário utilizar um código e for utilizar outro diferente, pois pode haver
confronto das variáveis presentes.
Para limpá-la se utiliza o comando [>> clear]. Obs: O usuário pode fazer
a limpeza de apenas um dos itens caso da memória temporária, sendo o
comando responsável o clear seguido do nome da variável desejada de
exclusão [ex.: clear b].
Outro comando que é importante aqui é o comando who, que mostra ao
usuário todas as variáveis que estão na memória temporária do programa. Para
saber mais detalhes sobre as variáveis, o comando whos deve ser utilizado para
obter tais informações.
Figura 1.8 – Workspace
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 7
1.4.3 Janelas Command History e Current Directory
Abaixo da Workspace temos duas janelas divididas por meio de um
sistema de abas. A janela Command History, figura 1.9, e a janela Current
Directory, figura 1.10. A primeira é responsável por listar o histórico de
comandos da Command Window. É subdividida por data e locada na memória
permanente. A limpeza de seu histórico pode ser executada com comando de
rightclick, ou comando de clique direito executado através do botão direto do
mouse, embora não seja aconselhada.
Já a segunda janela, exibe o diretório atual no qual os comandos são
executados, diretório esse igual ao definido pela barra de endereços. Nela serão
exibidos todos os arquivos ou subdiretórios contidos no diretório escolhido,
mesmo que estes contenham atribuições de sistema, oculto ou somente leitura.
Figura 1.9 – Command History Figura 1.10 – Current Directory
1.5 Declaração de Variáveis
Para que o usuário possa utilizar o MATLAB® de forma correta, é
necessário que além dos comandos digitados corretamente que as variáveis
também sejam digitadas corretamente. No MATLAB® as regras para escrita de
variáveis são as seguintes:
a) As variáveis não podem ter espaços em seu nome, isto é, devem
ser palavras únicas: [ex.: velocidademaxima, diasdoano, valorgasto]
b) Variáveis são sensíveis às letras maiúsculas e minúsculas, assim, a
mesma palavra com letra maiúscula é diferente de outra com letra
minúscula. [ex.: Tempo, TEMPO e tempo são variáveis diferentes]
c) As variáveis devem ter no máximo 31 caracteres.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 8
d) Nas variáveis não pode haver caracteres especiais (acentos,
cedilha, sinais exclamativos ou interrogativos, etc)
e) As variáveis não podem ter o nome de uma função interna do
MATLAB® [ex.: if, for, sin, quit]
As funções do MATLAB® devem ser sempre escritas com todas as letras
minúsculas (ex: sin, cos, log, plot, median).
O MATLAB contém além das variáveis que são criadas pelo usuário as
variáveis especiais, que são comuns no dia-a-dia do programador, são elas:
Inf Infinito (alguma divisão por zero)
NaN Não um Número (pode ser um texto ou valor indefinido 0/0)
i e j Número imaginário (sqrt(-1))
ans Variável utilizada para exibição dos resultados padrão
pi 3.14159265358979...
As constantes Inf e NaN não representam valores numéricos em sua
essência. São apenas conceitos desenvolvidos pelo sistema e que precisam ser
interpretados de forma correta. Para isso é necessário ser lembrado o conceito
de underflow e overflow.
Para as máquinas, cuja capacidade de processamento é limitada e os
cálculos são executados de modo numérico, o limite para o valor de zero e o
valor de infinito é criado a partir de um limite que dependerá da quantificação
que o computador pode medir.
O maior valor real que pode ser encontrado no MATLAB® pode ser
encontrado utilizando o comando realmax. Um valor que seja maior do que
esse valor real, será interpretado pela máquina como valor infinito, da mesma
forma será para algum valor abaixo do valor mínimo, realmin. Para o caso do
valor zero, é necessário conhecer sobre a precisão numérica do MATLAB®,
através do comando eps. Qualquer valor abaixo do eps não será reconhecido
caso a operação executada com valores em uma escala superior, e o resultado
para o MATLAB® será considerado como zero.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 9
Figura 1.11 – Exemplificação de overflow e underflow.
1.6 Erros
No MATLAB®, assim como em todos os programas no qual o usuário é
responsável por escrever o código da operação desejada, é suscetível à aparição
de erros, o que impede o desenvolvimento do programa e gera uma resposta
que não é exata para o usuário. Podem-se classificar os erros do MATLAB® em
cinco tipos de erros, no qual quatro deles são devidos à má observação do
usuário e o último dos cinco é em relação ao próprio programa utilizado.
Os erros que são vistos no MATLAB são os seguintes:
1) Sintaxe
2) Argumentos
3) Interrupção
4) Memória
5) Java Script
O Erro de Sintaxe ocorre quando o usuário insere alguma função ou
código que não é reconhecida pelo programa. Este é o tipo de erro que é o
mais fácil de ser corrigido, e o próprio MATLAB® ajuda o usuário indicando a
linha, coluna e expressão que não foi identificada gerando um link que leva
direto à expressão não conforme, facilitando a tarefa de correção do programa.
Os principais exemplos desse tipo de erro são: Nomes de funções digitados
erradamente, falta de balanceamento de sinais e parênteses ou pontos, matrizes
com termos não corretos, entre outros.
O Erro de Argumento ocorre quando o usuário insere os valores de
maneira errônea no programa. Exemplos dessa situação ocorrem quando é
inserido um valor que não está na faixa correta da função, ou a função necessita
de vários valores e o usuário se esquece de digitar algum deles.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 10
Os Erros de Interrupção ocorrem quando o programa é parado de
maneira súbita devido à interrupção do código compilado pelo usuário. Uma
maneira que o usuário pode fazer isso é através do comando [Ctrl + C]. A
interrupção pode ocorrer em qualquer momento em que algum código está
sendo calculado pelo usuário.
Os Erros de Memória ocorrem quando a memória do sistema é excedida
devido a grande quantidade de cálculos executados no sistema. Caso o usuário
se depare com tal problema, uma maneira para solucionar é tentar utilizar uma
quantidade menor de variáveis no workspace.
Para erros causados por problemas de lógica interna de programação do
software, geralmente erros em código Java, ou Java Script, o MATLAB® compila
o mesmo erro “viciando” a lógica de execução do software. Nesses casos é
necessário reiniciar o sistema, ou até reinstalar o programa em alguns casos.
A figura 1.12 mostra como os erros podem ser visualizados na janela de
comando do MATLAB®, onde logo após a função ser chamada pelo usuário,
ocorre a identificação do erro e a exibição para o usuário utilizando as
interrogações (???), e o motivo da não compilação do código em vermelho.
Embora existam muitas classes de erros, após o convívio com o software o
usuário pode se acostumar na identificação do erro e correção do mesmo de
modo rápido e eficaz.
Figura 1.12 – Exemplo de erros que podem ser encontrados no MATLAB®
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 11
1.7 Trabalhando com escalares
O MATLAB® tem em seu nome o objetivo principal do programa, que é
a utilização de matrizes para realizar cálculos diversos. Embora possam ocorrer
diferenças na definição de matrizes e escalares, para o MATLAB® os valores
escalares são tratados como uma matriz 1x1. Assim o escalar pode ser chamado
de matriz de dimensão nula ou apenas de matriz com um elemento.
Assim, para trabalharmos utilizando escalares devemos saber as regras
de operações para execução dos cálculos de maneira fiel e interessante. Tais
regras não podem ser diferentes do que é utilizado para cálculos matriciais.
Os cálculos executados posteriormente fornecerá ao usuário a
compreensão dos cálculos no MATLAB®.
>> 2 * 2 + 4
ans =
8
>> 2 * 2 + 4 / 2
ans =
6
Quando o comando a ser inserido for idêntico ou semelhante a outro
inserido anteriormente utilize as setas de navegação ↓ e ↑ do seu teclado, para
ter acesso mais rápido á expressão anterior e modificá-la de modo a fornecer o
resultado desejado.
>> 2 * (4 + 4) / 2
ans =
8
>> 2 * (4 * 4 – 2) / 2
ans =
14
>> 2 * (4 * (4 – 2)) / 2
ans =
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 12
8
>> 4 ^ 2
ans =
16
>> 4 ^ 2 * 2
ans =
32
>> 2 ^ (3 * 3)
ans =
512
>> 2 / 4
ans =
0.5
>> 2 \ 4
ans =
2
Para suprimir a visualização do resultado das operações insira „ ; ‟ no fim
de cada comando.
A potência de base 10 é representada inserindo a letra “e” ou “E” entre a
notação decimal e a potência da base, sem espaços, como mostra a seguir.
>> 5.347e2
ans =
534.700
>> 5.347E-2
ans =
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 13
0.0535
As operações no MATLAB® são organizadas em uma ordem de
prioridades, que pode ser chamada de hierarquia. A prioridade pode ser visto
de acordo com a tabela 1.1.
Operação Nome Prioridade
() Precedência 1º
^ Potência 2º
/ Divisão à direita 3º
\ Divisão à esquerda 4º
* Multiplicação 5º
+ Soma 6º
─ Subtração 7º
Tabela 1.1 – Hierarquia de operações
1.8 – Formatos de exibição
A exibição de valores na janela de comando do MATLAB® é gerada
inicialmente no format short, que é o que vem instalado no programa. Outros
formatos podem ser utilizados para exibição dos resultados, sendo cinco deles
abordados logo abaixo. Para uma ajuda a respeito dos formatos de exibição de
resultados no MATLAB®, utilize o comando [>> help format]
>> var = 0.5555555555
var =
0.5556
>> format short e
>> var
ans =
5.5556e-001
>> format long
>> var
ans =
0.555555555500000
>> format long e
>> var
ans =
5.555555555000000e-001
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 14
>> format bank
>> var
ans =
0.56
>> format short
>> var
ans =
0.5556
1.9 – Funções Matemáticas Elementares
Abaixo, uma lista com as funções matemáticas elementares do
MATLAB®. Fica como sugestão ao aluno a utilização do help para aprender
sobre a utilidade de cada uma das funções. Nas funções trigonométricas, a
utilização do „d‟ após a função indica que o resultado, ou o argumento de
entrada, devem ser em graus „º‟ e não radiano, argumento padrão das funções
trigonométricas.
TRIGONOMÉTRICAS
sin cos tan sec csc cot
sind cosd tand secd cscd cotd
sinh cosh tanh sech csch coth
asin acos atan asec acsc acot
asind acosd atand asecd acscd acotd
asinh acosh atanh asech acsch acoth
EXPONENCIAL
exp log log10 log2 reallog sqrt
ARREDONDAMENTOS
fix floor ceil round mod rem
1.10 – Help
O help é conhecido como o comando mais importante de todo o
software, pois considerando as diversas áreas às quais o MATLAB® atende, é
praticamente impossível que alguém conheça todos os comandos
memorizados. Assim, o comando help consegue atender a todos os públicos
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 15
que utilizam o software, sendo considerado como uma das mais completas
interfaces de ajuda na classe dos softwares acadêmicos.
Existem duas formas de acesso ao help, quando considerado de forma
geral. A primeira é através do botão que fornece acesso à interface gráfica
da ajuda do MATLAB® conforme figura 1.13. Na interface específica há quatro
abas que fornecem o conteúdo do help que é fornecido através de Contents
(Bibliotecas), Indexação de Palavras (Index), Resultado de pesquisas (Search
Results) e exemplos demonstrativos (Demos).
A outra forma de acesso ao help é através do prompt de comando do
MATLAB® utilizando o comando >> help, gerando as informações presentes na
figura 1.14.
Figura 1.13 – Interface gráfica de ajuda do MATLAB®
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 16
Figura 1.14 – Help no prompt da janela de comando
Outra opção para o usuário é a ajuda específica, onde é digitado na
janela de comandos o [>> help comando], sendo fornecido como resultado a
explicação do comando inserido e para vários casos um exemplo do uso do
comando é fornecido logo após a explicação do mesmo. Na figura 1.15 é
mostrado o resultado quando se utiliza [>> help plot] na janela de comando. O
plot é o comando utilizado para criação de gráficos através de vetores x e y.
Figura 1.15 – Exemplo utilizando help de comando específico na janela de comando
É recomendado que para alguma dúvida que o leitor possuir, utilizar
inicialmente o help disponível no MATLAB®. Caso não encontre o resultado
desejado, procurar ajuda na internet e com colegas ou profissionais que
utilizam o software.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 17
1.11 – Editor de texto
Para acessar o editor de texto do MATLAB® o usuário deve digitar o
comando [>> edit]. No editor do texto o usuário pode digitar todo o script e
compilar o código apenas quando desejar, apertando para isso o botão play ou
F5. Na janela de comando isso não é possível, visto que a cada linha digitada
pelo usuário, há a execução da mesma pelo programa.
O uso do editor de texto tem outra grande vantagem em relação à janela
de comando. No caso do código digitado apresentar erros, na janela de
comando será impresso onde o erro foi originado, linha e coluna, e o tipo do
erro, facilitando o trabalho do usuário na identificação e correção dos erros.
Figura 1.16 – Editor de texto do MATLAB®
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 18
Exercícios de fixação
1. Experimente modificar o layout de seu ambiente de trabalho, isto é,
modifique a janela de comando, a memória temporária, o histórico de
comandos e o diretório atual de seus locais iniciais. Depois disso tente
recolocá-los em seu local de origem. Obs: Caso alguma destas janelas
seja excluída, recupere-a na aba Desktop presente na barra de menus.
2. Experimente agora modificar as características da fonte e da cor de fundo
utilizadas. Vá em File >> Preferences >> Fonts >> Colors. Caso deseje
voltar à configuração inicial siga os passos acima e clique em „use system
colors’.
3. Verificar as mudanças que ocorrem na visualização dos valores abaixo no
Matlab quando se utiliza os comandos a seguir:
a = 1, b = 100 e c = 0.01
a) >> format bank
b) >> format compact
c) >> format loose
d) >> format short eng
e) >> format hex
f) >> format short
4. Utilizando o help da janela de comando, leia brevemente a definição
(primeiro parágrafo do help) e depois use o comando para verificar o
que ocorre. Obs: Alguns comandos necessitarão de argumento para
fornecer valores de saída, com exemplos indicados ao lado do comando.
a) >> help date
b) >> help uicalendar
c) >> help magic , digite a = magic(3)
d) >> help sin , digite b = sin(pi)
e) >> help sind , digite c = sind(pi)
f) >> help roots , digite (i) d = [1 -4 3] (ii) e = roots(d)
g) >> help poly , digite (i) f = [2; 3] (ii) g = poly(f)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 1
Instrutor: Fernando Wesley 19
h) >> help linspace , digite (i) linspace(1,5) (ii)
linspace(1,5,10)
5. Identifique os erros presentes nas linhas de comando abaixo.
a) >> A = [1 2 3 4; 2: 2: 10]
b) >> B = sen(0.92)
c) >> C = sin(0,92)
d) >> D = (3 + 5 – 2*cos(pi) – exp(3))/(ln(1))
e) >> Módulo = abs(cos(-22) + 3^4)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 20
Capítulo 2 – Operações com Matrizes
No capítulo anterior aprendeu-se a trabalhar com escalares, realizando as
operações aritméticas de maneira simples, sem necessidade de declaração do
formato da variável. O MATLAB® (Matrix Laboratory) considera um escalar
como uma matriz de dimensão nula (1x1), mas há a possibilidade de trabalhar
com matrizes maiores que apresentam o formato retangular ou quadrado. O
objetivo desse capítulo e aprender as principais operações de matrizes no
MATLAB®.
2.1 Operações com Matrizes
Matrizes ou variáveis podem ser criadas com ou sem a utilização de um
incremento. Sem incremento será necessário digitar todos os elementos da
matriz, o que não ocorre com a criação por incremento.
Como sabemos, uma matriz pode ser dividida em elementos de linha e
coluna. No MATLAB®, para separar elementos em coluna utilizamos o “espaço”
ou “ , ”. Para separarmos em linhas utilizamos o “ ; ”. Observe a seguir.
Para criar uma matriz ou vetor linha:
>> A = [2 4 6]
A =
2 4 6
Para uma matriz ou vetor coluna:
>> A = [2;4;6]
A =
2
4
6
Para uma matriz ou vetor misto:
>> A = [1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 21
Algumas matrizes, devido a sua importância, podem ser criadas com
simples comandos como pode ser observado a seguir.
Para uma matriz Identidade:
>> I = eye(5)
I =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Para uma matriz Nula:
>> Z = zeros(3,2)
Z =
0 0
0 0
0 0
Para uma matriz Unitária:
>> U = ones(2,3)
U =
1 1 1
1 1 1
Para uma matriz Randômica:
>> W = rand(2,3)
W =
0.2785 0.9575 0.1576
0.5469 0.9649 0.9706
A matriz randômica retorna um vetor com números aleatórios entre zero
e um.
Para criar variáveis (vetores/matrizes) por incremento seguimos a
seguinte sintaxe:
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 22
nº inicial : incremento : nº final
DICA: se o incremento for igual a 1, não precisa indicá-lo.
Este tipo de configuração representa a criação de uma seqüência
numérica de valor inicial igual ao nº inicial, valor final igual ao nº final e,
intercaladas por valores cuja diferença e igual ao incremento. Observe na
prática a seguir.
>> A = 10:1:20
A =
10 11 12 13 14 15 16 17 18 19 20
>> A = 10:2:20
A =
10 12 14 16 18 20
>> A = [1:5; 2:2:10]
A =
1 2 3 4 5
2 4 6 8 10
Quando o incremento não é informado o sistema admite como sendo o
padrão, ou seja, incremento de valor 1 (um).
Embora a aritmética de máquina seja, em parte, diferente da habitual, as
matrizes estão sujeitas as mesmas regras de operação. Veja na prática a seguir
alguns casos de operações com matrizes.
Sejam as matrizes
>> A + B
??? Error using ==> plus
Matrix dimensions must agree.
>> B + C
ans =
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 23
5 5 4
-3 7 9
>> B * C
??? Error using ==> mtimes
Inner matrix dimensions must agree.
>> A * B
ans =
-8 11 10
-20 29 22
-32 47 34
O MATLAB® dispõe de outros operadores matemáticos que podem
facilitar as operações matriciais como mostra a prática a seguir. Sejam as
matrizes:
>> D = [1 2; 3 4]
D =
1 2
3 4
>> E = [5 6; 7 8]
E =
5 6
7 8
>> D * E
ans =
19 22
43 50
É diferente de
>> D .* E
ans =
5 12
21 32
>> D / E
ans =
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 24
3.0000 -2.0000
2.0000 -1.0000
É diferente de
>> D ./ E
ans =
0.2000 0.3333
0.4286 0.5000
>> D ^ 2
ans =
7 10
15 22
É diferente de
>> D .^ 2
ans =
1 4
9 16
Ainda se pode obter a matriz transversa, utilizando o apóstrofo („).
>> F = [1 10 100; 2 20 200; 3 30 300]
ans =
1 10 100
2 20 200
3 30 300
>> G = F’
ans =
1 2 3
10 20 30
100 200 300
2.2 Indexação de matrizes
A indexação é uma forma de mapear, dentro da matriz, os elementos que
estão presentes nela. Através da indexação se pode inserir ou obter valores de
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 25
forma simplificada. Existem duas formas de indexação, sendo a uma uni
paramétrica e a poli paramétrica.
Escreva a matriz:
Para obter os valores por meio da indexação uni paramétrica, deve-se
inserir a variável que representa a matriz seguido do valor entre parêntesis do
termo que deseja ser selecionado. Na indexação uni paramétrica, os valores
percorrem inicialmente a primeira coluna no sentido descendente, e chegando
ao elemento da última linha da coluna há a passagem para a coluna posterior.
>> A(1)
ans =
3
>> A(3)
ans =
-2
>> A(5)
ans =
0
>> A(7)
ans =
-1
>> A(8)
ans =
6
Na Indexação multi paramétrica os valores são representados da forma
A(i,j), onde i representa a linha e j a coluna da matriz avaliada.
>> A(1,2)
ans =
4
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 26
>> A(3,1)
ans =
-2
>> A(2,2)
ans =
0
>> A(3,3)
ans =
-1
Caso o usuário deseje obter todos os valores da mesma linha ou da
mesma coluna, pode utilizar o comando dois pontos (:). Além de obter todos os
valores da mesma linha ou coluna, também se podem usar dois pontos para
limitar os valores desejados de várias linhas e colunas ao mesmo tempo.
>> A(:,3)
ans =
-1
6
-1
>> A(2,:)
ans =
1 0 6
>> A(1:2,1:3)
ans =
3 4 -1
1 0 6
Além de obter valores, o usuário pode inserir e substituir valores na
matriz ou vetor desejado através da indexação, sendo esse método muito eficaz
e simples. Supondo que o usuário deseje tornar os valores que na matriz A são -
1 em valores 0, o mesmo poderá usar os seguintes comandos.
>> A(7) = 0
A =
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 27
3 4 0
1 0 6
-2 9 -1
>> A(9) = 0
A =
3 4 0
1 0 6
-2 9 0
Também se pode usar a indexação poli paramétrica para modificar os
valores na matriz. O MATLAB® também pode indexar uma matriz através de
outra matriz.
2.3 – Análise de vetores
A análise de vetores é uma ferramenta importante, e através dela
podem-se descobrir diversas informações da matriz, evitando a necessidade de
procurar manualmente tais dados.
Utilizando os comandos para a matriz A:
>> A = [ 3 4 -1; 1 0 6; -2 9 -1]
A =
3 4 -1
1 0 6
-2 9 -1
>> numel (A)
ans =
9
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 28
>> size(A)
ans =
3 3
>> ndims(A)
ans =
2
>> length(A)
ans =
3
>> diag(A)
ans =
3
0
-1
>> triu(A)
ans =
3 4 -1
0 0 6
0 0 -1
>> tril(A)
ans =
3 0 0
1 0 0
-2 9 -1
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 29
2.4 – Números e matrizes complexos
No MATLAB® os números complexos são chamados utilizando i e j na
parte imaginária. Deve-se evitar criar variáveis com uma das letras, com
finalidade de evitar conflitos internos do programa.
>> C = 2 - 3i
C =
2.0000e+000 -3.0000e+000i
>> D = 3 - 4j
D =
3.0000e+000 -4.0000e+000i
>> E = C + D
E =
5.0000e+000 -7.0000e+000i
>> F = C*D
F =
-6.0000e+000 -1.7000e+001i
>> G = C/D
G =
7.2000e-001 -4.0000e-002i
Da mesma forma podem ser escritas matrizes com elementos complexos
nela
>> A = [2+1j 4-2i 3+9j]
A =
2.0000 + 1.0000i 4.0000 - 2.0000i 3.0000 + 9.0000i
>> B = [1 -3 2] +i*[-2 -4 1]
B =
1.0000 - 2.0000i -3.0000 - 4.0000i 2.0000 + 1.0000i
>> C = A + B
C =
3.0000 - 1.0000i 1.0000 - 6.0000i 5.0000 +10.0000i
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 30
>> D = A.*B
D =
4.0000 - 3.0000i -20.0000 -10.0000i -3.0000 +21.0000i
Mais funções:
Comando Explicação Comando Explicação
eig
Determina
autovetores e
autovalores
poly Polinômio
característico
std Desvio padrão det Determinante
mean Média aritmética real Parte real do número
complexo
max Valor máximo imag Parte imaginária do
número complexo
min Valor mínimo rank
Determina o número
de linhas
independentes
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 31
EXERCÍCIO APLICADO
Um grande forno industrial é suportado, em sua base, por três longas
colunas de concreto refratário, com 1 m por 1 m de lado, cada. Durante a
operação em condições de regime estacionário, a instalação é de tal forma que
três superfícies de cada coluna são mantidas a 500 K, enquanto a outra(inferior)
é exposta a uma corrente de ar para a qual T∞ = 300 K e h = 10 W/m2K. Uma
passagem abaixo de cada coluna garante que as mesmas sejam periodicamente
vistoriadas por técnicos. Utilizando uma rede de malha com Δx = Δy = 0,25 m,
determine se as passagens oferecem risco de queimadura aos técnicos.
(Transferência de calor e massa – Peter Incropera & De Witt, 5ed. LTC)
Considerações:
1. Regime estacionário.
2. Condução bidimensional.
3. Propriedades constantes.
4. Sem geração interna de calor.
Análise: Redução da rede de 12 pontos nodais para 8 através do eixo de
simetria.
Dessa forma, utilizando as equações de diferenças finitas (não-estendidas),
os balanços de energia para cada nó são dados como:
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 32
internos não-simétricos:
Nó 1: T2 + T3 + 1000 – 4T1 = 0
Nó 3: T1 + T4 + T5 + 500 – 4T3 = 0
Nó 5: T3 + T6 + T7 + 500 – 4T5 = 0
internos simétricos:
Nó 2: 2T1 + T4 + 500 – 4T2 = 0
Nó 4: T2 + 2T3 + T6 – 4T4 = 0
Nó 6: T4+ 2T5 + T8 – 4T6 = 0
Nós da superfície plana:
Nó 7: 2T5 + T8 + 2000 – 9T7 = 0
Nó 8: 2T1 + T4 + 500 – 9T8 = 0
Reorganizando e agrupando as equações temos:
Na forma matricial temos:
Para resolver esse problema usaremos a técnica da inversão de matrizes.
[A] . [T] = [C]
[A]-1 . [A] . [T] = [A]-1 . [C]
[I] . [T] = [A]-1 . [C]
[T] = [A]-1 . [C]
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 33
Primeiro criamos a matriz de coeficientes e constantes. Em linha de
comando teremos
>> A = [-4 1 1 0 0 0 0 0;...
2 -4 0 1 0 0 0 0;...
1 0 -4 1 1 0 0 0;...
0 1 2 -4 0 1 0 0;...
0 0 1 0 -4 1 1 0;...
0 0 0 1 2 -4 0 1;...
0 0 0 0 2 0 -9 1;...
0 0 0 0 0 2 2 -9]
A =
-4 1 1 0 0 0 0 0
2 -4 0 1 0 0 0 0
1 0 -4 1 1 0 0 0
0 1 2 -4 0 1 0 0
0 0 1 0 -4 1 1 0
0 0 0 1 2 -4 0 1
0 0 0 0 2 0 -9 1
0 0 0 0 0 2 2 -9
>> C = [-1000;-500;-500;0;-500;0;-2000;-1500]
C =
-1000
-500
-500
0
-500
0
-2000
-1500
Em seguida multiplicamos pela matriz de constantes
>> T = inv(A)*C
T =
489.3047
485.1538
472.0651
462.0058
436.9498
418.7393
356.9946
339.0520
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 34
Os resultados podem ser interpretados considerando cada linha da
matriz T como a temperatura final de cada nó correspondente ao número da
linha. Dessa forma, na linha 1 teremos a temperatura do nó 1, na linha 5
teremos a temperatura do nó 5 e assim sucessivamente como mostra abaixo.
Porém, observe que a saída, neste caso uma matriz, não nos dá uma ideia
imediata do comportamento do sistema, além de ser mal visualizável. A fim de
dar um caráter mais profissional aos resultados é sugerido que os dados sejam
interpretados graficamente. Neste caso, como se trata de um mapeamento
bidimensional de uma grandeza física, podemos interpretá-los usando o
mapeamento de grandeza por escala de espectro visível.
No MATLAB® o comando utilizado é o imagesc.
>> Final = [500 500 500 500 500;...
500 489.3 485.2 489.3 500;...
500 472.1 462.0 472.1 500;...
500 436.9 418.7 436.9 500;...
500 356.9 339.1 356.9 500]
Final =
500.0000 500.0000 500.0000 500.0000 500.0000
500.0000 489.3000 485.2000 489.3000 500.0000
500.0000 472.1000 462.0000 472.1000 500.0000
500.0000 436.9000 418.7000 436.9000 500.0000
500.0000 356.9000 339.1000 356.9000 500.0000
>> imagesc(Final)
>> colorbar
>> grid
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 35
Como resultado obtém-se a matriz:
A matriz pode ser representada pelo mapa de cores a seguir.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 36
Exercícios de fixação
1. Digite os valores abaixo para revisar e ampliar seu conceito sobre
matrizes no MATLAB®.
a) >> A = [-1.2*sin(4.76) exp(3.66*log(233)) 2.3+4/(5*cos(4))]
b) >> B = [1 2 3; 4 5 6; 7 8 9]
c) >> C = [1,2;3,4]
d) >> X = 1:10, Y = sin(X), Z = [X;Y]
e) >> E = [ 1 2 3 4; 5 6 7 8], F = [9 10 11 12], G = [E;F]
2. Sendo a matriz A = [1 2 3; 4 5 6; 7 8 9]:
a) A uma variável B, atribua o elemento a22.
b) A uma variável C, atribua o elemento a13.
c) Em um vetor linha D, atribua os elementos a12, a21 e a33.
d) Obtenha um vetor coluna E com os elementos a23, a31 e a32.
e) Por fim ache uma matriz 3x3 com a primeira coluna sendo o vetor D,
a segunda sendo o vetor E transposto e a terceira coluna sendo a
soma das duas anteriores.
3. Para a matriz N = [1 2; 3 4], verifique através dos comandos aprendidos:
a) O determinante de N é não nulo.
b) Existe uma matriz inversa tal que M = inv(N).
c) Verifique que o det(N) = 1/det(M) e det(N)*det(M) = det(N*M) = 1
4. Uma matriz de 3 dimensões pode ser considerada como uma que possui
largura, comprimento e profundidade. Nessa situação, a matriz que
desejamos deve ter 3 linhas, 4 colunas e 2 páginas de „profundidade‟.
>> M3d = rand(3,4,2)
Tire a média dos seguintes valores M3d(1,2,2), M3d(2,4,2), M3d(3,1,1) e
M3d(1,4,1). Verifique que esse valor é menor do que 1. Por quê?
5. Há dois comandos que são utilizados em matrizes, que são o sparse e o
full. Utilize o help e verifique a diferença entre ambos para a mesma
matriz.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 2
Instrutor: Fernando Wesley 37
6. Crie uma matriz linha cujo valor dos elementos variem de 1 a 100 com
incremento de 2. Visualize-a pelo mapa de cores. No final da linha da
matriz adicione elementos que variem de 100 a 1, na forma decrescente.
Visualize a matriz resultante no mapa de cores.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 38
Capítulo 3 – Fundamentos da programação no MATLAB®
O objetivo desse capítulo é capacitar o aluno a realizar as principais
operações no MATLAB® que dizem respeito aos operadores lógicos e de
controle de fluxo do programa. Para isso será usado o editor de texto do
MATLAB® a partir desse capítulo.
Conforme visto no último tópico do primeiro capítulo, as vantagens da
utilização do editor de texto são o principal motivo para utilizarmos o mesmo.
Durante a inserção dos códigos no editor será comum a aparição de erros, e
nessa situação, o programa identifica o erro, indica o local de ocorrência e
fornece um link para que o usuário possa corrigi-lo.
Quando se inicia um código em um editor de texto, uma forte
recomendação é que haja um cabeçalho no mesmo, para indicar ao usuário o
objetivo, as principais variáveis do programa, o que é aceito para cálculo e
demais informações que sejam consideradas importantes. Deve-se comentar o
máximo possível para que outra pessoa que possa utilizar o código consiga
entende-lo sem dificuldade. Os comentários podem ser inseridos após um
comando escrito pelo usuário, apenas há a necessidade do sinal de
percentagem ficar após o comando e antes do texto que se deseja usar como
comentário.
Para criar comentários o usuário deve iniciar a sentença utilizando um
sinal de percentagem (%), ou utilizando o comando CTRL+R na seleção. O
comentário possui coloração verde no editor de texto.
Figura 3.1 – Comentários no editor de texto.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 39
No editor de texto existe uma tênue linha vertical que divide a tela
aproximadamente pela metade, sendo essa linha o limite de impressão do
MATLAB®. É também recomendado que o usuário não ultrapasse essa linha,
pois em caso de necessitar imprimir o código fonte escrito, provavelmente o
resultado será uma impressão desconfigurada. Caso o usuário tenha um código
extenso, pode utilizar o comando três pontos (...) para indicar ao programa que
o código continua na linha inferior. Os três pontos apresentarão coloração azul.
Outra recomendação que é importante é a respeito da organização das
funções salvas. É fortemente recomendado que o usuário salve suas funções em
pastas exclusivas, sendo funções diferentes em pastas diferentes. Apenas no
exemplo em que o usuário necessite de mais funções para resolver um único
problema, todas devem estar na mesma pasta.
Assim:
a. Comentar o código escrito ao máximo
b. Evitar ultrapassar a linha de impressão
c. Salvar funções com objetivos diferentes em pastas diferentes.
Além dos cuidados a respeito do código em si, o usuário deve atentar
para o nome do arquivo no momento de salvar o mesmo. Existem algumas
regras a respeito do nome do arquivo no MATLAB®.
a. Não pode conter caracteres especiais
b. Não pode ter espaços
c. Não pode iniciar com números
d. Não pode ter nome de funções do programa (ex: if, cos, for)
e. Não deve ultrapassar a quantidade de 31 caracteres
É importante verificar todas as cinco condições acima antes de salvar um
arquivo no MATLAB®, pois pode ocorrer que o código esteja correto, mas não
irá compilar devido a conflitos internos gerados pelo nome do arquivo.
3.1 Expressões Booleanas
As expressões booleanas são regras estabelecidas para definir, simplificar
e manipular funções lógicas baseadas em afirmações que são verdadeiras ou
falsas.
Independente da simbologia utilizada na interface usuário-máquina, a
condição de verdadeiro ou falso, internamente à máquina, é interpretada
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 40
segundo o reconhecimento de dois caracteres: 0 (zero) e 1 (um). No caso do
MATLAB®, zero implica numa condição falsa, vazia, nula ou nil, ao contrário do
um que está relacionado a uma condição verdadeira.
Os símbolos de teste e operadores booleanos podem ser resumidos pela
tabela 3.1 e tabela 3.2, respectivamente. Embora possua simbologia distinta, na
maioria dos casos, a lógica de tais operadores é encontrada em qualquer
plataforma de programação.
Símbolo Teste Exemplo
== Igual A == B (A igual a B)
~= Diferente A ~= B (A diferente de B)
< Menor que A < B (A menor que B)
> Maior que A > B (A maior que B)
<= Menor ou igual A <= B (A maior ou igual a B)
>= Maior ou igual A >= B (A menor ou igual a B)
Tabela 3.1 – Teste de expressões booleanas.
Símbolo Operador Exemplo de Composição
& E A & B (A e B verdadeiros)
| OU A | B (A ou B verdadeiros)
Tabela 3.2 – Operadores de expressões booleanas.
Além desses clássicos testes e operadores booleanos o MATLAB®
disponibiliza outros operadores que podem simplificar, em alguns casos,
reduzindo a quantidade de comandos a serem digitados. São conhecidas, em
alguns casos como funções booleanas matriciais, pois são aplicadas a matrizes e
não a “escalares”. As mais importantes podem ser observadas na tabela 3.3.
Função Teste retorna verdadeiro se Exemplo
isempty matriz é vazia isempty(M)
isequal as matrizes forem numericamente iguais isequal(M)
isnumeric matriz é numérica isnumeric(M)
ischar matriz é alfanumérica ischar(M)
Tabela 3.3 – Funções booleanas matriciais.
3.2 Estrutura if – elseif - else
O if – elseif – else é uma estrutura de seleção que tem a função de
selecionar um dado ou conjunto de dados segundo uma propriedade inerente
ao mesmo ou selecionar uma função a ser executada. O MATLAB® possui dois
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 41
tipos de estruturas de seleção: if-elseif-else, e switch-case-otherwise. O primeiro
é comum em outras linguagens de programação. Tais estruturas são
implementadas utilizando as expressões booleanas descritas anteriormente. Sua
estrutura e o significado lógico de sua sintaxe são exibidos na figura 3.2.
Figura 3.2 – Estrutura e sintaxe lógica da estrutura de seleção if.
A aplicação desse tipo de estrutura pode ser ilustrada nos exemplos a
seguir. Para executar os scripts pressione o botão F5 ou clique no botão .
Escreva o código abaixo em um editor de texto e verifique o resultado
>> x = 3*sin(exp(52.3))+22/(cos(43)*2.44);
if x >= 100
resposta = 'X é maior do que 100'
elseif x < 10
resposta = 'X é menor do que 10'
else
resposta = 'X está entre 10 e 100'
end
EXERCÍCIO APLICADO 1
Problema 3.1
O sistema supervisório de uma unidade de Destilação à Vácuo recebe,
em tempo real, sinais que lhe permite, dentre outros, a manipulação do sistema
de alarmes da unidade. Dentro de um conjunto de atuações, o sistema envia
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 42
diversas mensagens ao operador, lhe informando o motivo pelo qual o alarme
foi acionado. Além das mensagens, o sistema disponibiliza um código
numérico que é reconhecido como desativador da unidade.
Figura 3.3 – Diagrama esquemático do exercício aplicado.
Um dos sinais recebidos pelo operador é o da temperatura no interior da
Coluna (termopar 12). Tal temperatura não ser inferior a 900ºC e nem pode
exceder 1200 ºC. Crie parte do código do supervisório responsável pelas ações
acima. (Caso real: RELAN “MODIFICADO”).
Construir um código com os seguintes objetivos:
1. Confirmação do sinal recebido;
2. Análise do sinal recebido e atuações.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O Script abaixo tem uma sugestão de resolução do problema 3.1 %
% %
% Data de criação: 15 de setembro de 2008. %
% Data da última atualização: 03 de janeiro de 2012. %
% Criado por: Phillipi Rodrigo de Oliveira Souza. %
% Atualizado por: Fernando Wesley Cavalcanti de Araújo. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear % elimina o sinal anterior
sinal1 = inputdlg('Digite a temperatura atual’); %o operador insere a T em
ºC
sinal = str2double(sinal1); %converte de texto a
número
semsinal = isnan(sinal); %para verificação de sinal
%%%%% confirmação do sinal recebido %%%%%
if semsinal == 1 % não há recebimento do sinal
num_protc_seg = 1378; % nº protc seg a ser gerado
errordlg('Falha de comunicação com Termopar 12.','ERRO')
return
else
num_protc_seg = 1379; % nº protc seg a ser gerado
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 43
end
%%%%% análise do sinal recebido e atuações %%%%%
if sinal <= 900
num_protc_seg = 2378; % nº protc seg a ser gerado
warndlg('Temperatura do prato abaixo do permitido.','PERIGO!')
elseif sinal <= 1200
num_protc_seg = 2379; % nº protc seg a ser gerado
else
num_protc_seg = 2380; % nº protc seg a ser gerado
warndlg('Temperatura do prato acima do permitido.','PERIGO!')
end
A fim de explorar o problema e obter diferentes respostas, proponha
valores distintos para a variável “sinal”.
DICA 1: Para “comentar” uma linha: CRTL + R.
DICA 2: Para “descomentar”: CRTL + T.
3.3 Estrutura switch-case-otherwise
Além da estrutura if/elseif/else, mais comum em linguagem de
programação, o MATLAB® oferece outra estrutura de seleção, a
switch/case/otherwise. Ao contrário da estrutura anterior, essa está limitada à
condição de igualdade e desigualdade, veja a seguir na figura 3.5.
Figura 3.5 – Estrutura e sintaxe lógica da estrutura de seleção switch.
A aplicação desse tipo de estrutura pode ser ilustrada no exemplo a
seguir.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 44
clear;clc
A = log10(1000);
switch A
case 1
var = „Número 1.„
case 2
var = „Número 2.„
case 3
var = „Número 3.„
otherwise
var = „Número não definido.„
end
EXERCÍCIO APLICADO 2
Problema 3.2
Resolva o exercício da estrutura de seleção (if-elseif-else), visto
anteriormente, com a estrutura (switch-case-otherwise). .
Figura 3.6 – Diagrama esquemático do problema 3.2.
Construir um código com os seguintes objetivos:
1. Confirmação do sinal recebido;
2. Análise do sinal recebido e atuações.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O Script "Mod2_Prbl2_2" tem a sugestão de solução do Problema 3.2 %
% estrutura de seleção (switch-case-otherwise). %
% %
% Data de criação: 21 de setembro de 2008. %
% Data da última atualização: 03 de janeiro de 2012. %
% Criado por: Phillipi Rodrigo de Oliveira Souza. %
% Atualizado por: Fernando Wesley Cavalcanti de Araújo. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear % elimina o sinal anterior
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 45
sinal1 = inputdlg('Digite a temperatura atual'); %o operador insere a
temperatura
sinal = str2double(sinal1);
semsinal = isnan(sinal);
%%%%% confirmação do sinal recebido %%%%%
switch semsinal
case 1
num_protc_seg = 1378; % nº protc seg a ser gerado
errordlg('Falha de comunicação com Termopar 12.','ERRO')
return
otherwise
num_protc_seg = 1379; % nº protc seg a ser gerado
end
%%%%% análise do sinal recebido e atuações %%%%%
%$$$$$$$$$$$$$ POR QUE A ESTRUTURA ABAIXO NÃO É EXECUTADA ? $$$$$$$$$$$$$$%
switch sinal
case sinal <= 900
num_protc_seg = 2378; % nº protc seg a ser gerado
warndlg('Temperatura do leito abaixo do permitido.','PERIGO')
case sinal < 1200
num_protc_seg = 2379; % nº protc seg a ser gerado
otherwise
num_protc_seg = 2380; % nº protc seg a ser gerado
warndlg('Temperatura do leito acima do permitido.','PERIGO')
end
A fim de explorar o problema e obter diferentes respostas, proponha
valores distintos para a variável “sinal”.
Novamente não esqueça dos comandos CTRL + R e CTRL + T,
responsáveis por comentar de forma mais ágil.
OBSERVAÇÃO: a estrutura switch/case/otherwise não pode ser utilizada com
expressões booleanas de desigualdade. Observe a seguir um código escrito em
estrutura de seleção switch/case/otherwise com a utilização de expressões
booleanas de desigualdade.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 46
3.4 – Estrutura for
O for é conhecido como estrutura de repetição, e tem o objetivo de
repetir um determinado comando seguindo um critério predefinido pelo
programador. Esse tipo de estrutura evita que o usuário do código tenha que
repetir mesma tarefa inúmeras vezes. Mas, como a máquina sabe quando parar
de repetir o comando? O critério de parada é baseado na seguinte ideia: toda
região fora do domínio de repetição é considerada como região de parada, ou
seja, caso a expressão de repetição não seja mais verdadeira, o código
interrompe o loop.
Esse tipo de estrutura utiliza expressões booleanas descritas
anteriormente e trabalha com retorno de execução de funções. Neste caso,
qualquer retorno diferente de 0 (zero) é considerado como verdadeiro, e 0
(zero) é considerado falso. O MATLAB® trabalha com duas estruturas de
repetição, a “for” e a “while”.
A estrutura “for” repete a execução dos comandos enquanto para todo
valor de sua variável começando e terminando com valores predefinidos e a
passos incrementados por um valor também predefinido. Na figura 3.7 temos a
estrutura de sintaxe e sua interpretação. Em seguida acompanhe um exemplo
de aplicação.
Figura 3.7 – Estrutura e sintaxe lógica da estrutura de repetição for.
for x = 1:15
y = sin(x*pi) + exp(x*2);
end
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 47
EXERCÍCIO APLICADO 3
Problema 3.3
No exercício aplicado do capítulo 1 foi discutido o perfil de temperatura
sobre a superfície de uma placa onde a forma matricial do sistema de equações
foi dado por:
Utilizando a estrutura de repetição (for) crie a matriz de coeficientes com
a menor quantidade de linhas que você puder.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O Script abaixo tem a sugestão de resolução do problema 3.3 %
% %
% Criado e atualizado por: Phillipi Rodrigo de Oliveira Souza. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;clc
% criação da diagonal principal
for i = 1:1:6
for j = 1:1:6
if i == j
A(i,j) = -4;
end
end
end
for i = 7:1:8
for j = 7:1:8
if i == j
A(i,j) = -9;
end
end
end
% criação da primeira diagonal superior principal
for i = 1:2:8
for j = 1:1:8
if i == j-1
A(i,j) = 1;
end
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 48
end
end
% criação da segunda diagonal superior principal
for i = 1:1:8
for j = 1:1:8
if i == j-2
A(i,j) = 1;
end
end
end
% criação da primeira diagonal inferior principal
for i = 1:1:8
for j = 1:2:8
if i == j+1
A(i,j) = 2;
end
end
end
% criação da segunda diagonal inferior principal
for i = 1:1:6
for j = 1:1:6
if i == j+2
A(i,j) = 1;
end
end
end
for i = 7:1:8
for j = 1:1:8
if i == j+2
A(i,j) = 2;
end
end
end
3.5 – Estrutura while
A estrutura “while” repete a execução dos comandos enquanto as
expressões de teste, ou expressões booleanas, retornam condição verdadeira.
Na figura 3.8 temos a estrutura de sintaxe e sua interpretação.
Figura 3.8 – Estrutura e sintaxe lógica da estrutura de repetição while.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 49
m = 2;
for I = 1:10
for J = 1:10
while I < m
if I == J
A(I,J) = 2;
elseif abs(I-J) == 1
A(I,J) = -1;
else
A(I,J) = 0;
end
I = I + 1;
end
end
end
Assim como a anterior, essa estrutura pode ser utilizada de forma
encadeada.
EXERCÍCIO APLICADO 4
Problema 3.4
O método de Newton (ou método de Newton-Raphson) foi desenvolvido
no século XVII por Isaac Newton e Joseph Raphson e é um dos métodos
numéricos utilizados para encontrar as raízes de equações de forma rápida e
com cálculos relativamente simples.
A ideia principal do método é que através do chute de um valor inicial, a
função seja aproximada através da linha tangente até interceptar o valor de raiz
com um erro extremamente baixo.
Neste exemplo, o objetivo do programador é usar o MATLAB® para
calcular uma raiz da função f(x) = x³ - x – 4, com erro menor do que 10-4
utilizando o método de Newton-Raphson.
O método é dado pela seguinte expressão:
clear, clc
y1 = inputdlg('digite um número inicial');
y1 = str2double(y1);
xi+1
= xi -
𝑓(𝑥𝑖)
𝑓′(𝑥𝑖)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 50
erro = 1;
contador = 0;
while erro > 0.0001
y1_aux = y1 - (y1^3 - y1 - 4)/(3*y1^2 - 1);
erro = abs(y1 - y1_aux);
y1 = y1_aux;
contador = contador + 1;
end
contador
erro
y1
É dado ao usuário a oportunidade de escolher o valor do chute inicial do
sistema, mas deve-se ressaltar que o método de Newton-Raphson tem
condições a serem satisfeitas para que o resultado final tenha coerência, entre
eles: O intervalo de calculo deve possuir a raiz da função; A função deve ser
diferenciável no intervalo escolhido; a primeira e segunda derivadas não devem
trocar de sinal no intervalo escolhido.
Neste problema, com o valor inicial escolhidos sendo 2,00 e 8.000.000, os
resultados finais serão:
% Para valor de chute inicial igual a 2.00:
contador =
4
erro =
5.2603e-008
y1 =
1.7963e+000
% Para valor de chute inicial igual a 8000000:
contador =
42
erro =
4.5807e-007
y1 =
1.7963e+000
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 51
Exercícios de fixação
1. Faça um programa para calcular o salário semanal de um trabalhador.
Você deve inserir o número de horas trabalhadas na semana. O valor de
cada hora é R$ 12,00 e caso o trabalhador ultrapasse a carga horária de
40 horas semanais, o valor da hora é R$ 18,00. Do total, desconte o
Imposto (18% do valor total) e imprima o resultado na janela de
comando.
2. Use o If para saber se um número é impar ou par. Coloque ferramentas
„antibug‟ para cancelar a execução caso o usuário entre com algum texto
ou valor complexo no lugar do valor. (Dica: Os comandos „rem‟ e „imag‟
facilitam a resolução desse problema)
3. Faça um programa que gere e escreva todos os números pares entre dois
números positivos digitados pelo usuário de forma crescente ou
decrescente, a ser escolhido pelo usuário. (Dica: conheça os comandos
„ceil‟ e „floor‟ para auxílio no arredondamento dos valores que não são
inteiros)
4. De acordo com a lenda, certa vez uma rainha requisitou os serviços de
um monge dizendo que o pagamento seria negociado posteriormente. O
monge, após finalizar o serviço e necessitando de alimentos, decidiu que
o pagamento deveria ser feito com grãos de trigo dispostos em um
tabuleiro de xadrez, de tal forma que o primeiro quadro deveria conter
apenas um grão e os quadros subsequentes, o dobro do quadro anterior.
A rainha achou o trabalho barato e pediu que o serviço fosse executado,
sem se dar conta de que seria quase impossível efetuar o pagamento.
Faça um algoritmo para calcular o número de grãos que o monge deve
receber. (Dica: para calcular o tempo necessário para realizar esse calculo,
utilize os comandos „tic‟ e „toc‟ no inicio e final do editor,
respectivamente)
5. Para um número escolhido pelo usuário, faça um código para encontrar
o fatorial desse número.
6. A sequência de Fibronacci é obtida a partir de dois números iniciais,
sendo o F(1) = 0 e o F(2) = 1, e os demais números são obtidos da soma
dos anteriores (ex.: F(2) = F(1) + F(0) = 1; F(3) = F(2) + F(1) = 1 + 1 = 2; e
assim sucessivamente). Desenvolva um algoritmo para encontrar o
número de Fibronacci para o número de iterações que o usuário desejar.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 3
Instrutor: Fernando Wesley
Recife / PE - 2012 52
7. Nas questões anteriores, coloque comandos „antibug‟ para evitar entrada
de dados incoerentes, como textos, números imaginários e dados que
não permitiriam a resolução da questão.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 53
Capítulo 4 – Funções
Uma função é um programa elaborado por um usuário que utiliza ou não
parâmetros de entrada para fornecer uma resposta. Todas as operações
executadas são ocultas ao usuário, sendo considerado como um código „caixa
preta‟.
Até agora utilizamos o prompt de comando para realizar cálculos
simples. Evoluímos para o uso do editor de texto, onde a inserção de comandos
se torna mais profissional protegendo o próprio código de modificações
involuntárias ou propositais, e no momento da compilação do programa há a
depuração do mesmo, indicando o local do erro, caso exista.
Uma forma mais evoluída de pensar é através da utilização das funções
(functions) do MATLAB®. As funções são uma sequência de comandos que
aceitam parâmetros de entrada, realizam operações com os parâmetros
fornecidos e valores previamente escolhidos pelo programador, podem ser
chamadas dentro de outras funções, possuem help que pode ser criado e
editado pelo programador e por fim fornecem resultados e parâmetros de
saída.
O MATLAB® reconhece internamente três classes de funções:
1. built-in: função interna. Está implementada em seu núcleo e não é
visualizável (Ex.: sin);
2. MATLAB ® m-file: função implementada em m-file. É visível e aberto
para alterações (Ex.: polyfit);
3. User m-file: função criada pelo usuário. Você pode implementar novos
recursos no seu MATLAB ® criando funções para áreas específicas.
Utilize os comandos which para achar seu diretório, e open para
visualizar o código.
As funções aceitam múltiplos parâmetros de entrada e retornam
múltiplos parâmetros de saída (está é uma característica muito peculiar e
extremamente prática do MATLAB®).
A sintaxe básica de definição de funções segue o formato a seguir:
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 54
onde:
function: palavra reservada que indica o início de definição de função (é
grafada de azul);
PS1, PS2, . . ., PSN: parâmetros de saída;
nome: nome da função;
PE1, PE2, . . ., PEM: parâmetros de entrada;
expressão 1, . . . ,expressão N: expressões que definem as ações a
serem executadas pela função.
OBSERVAÇÃO: a função e o arquivo m-file devem ter o mesmo
nome.
Em relação aos parâmetros de saída, se a função for chamada:
1. com menos parâmetros que o declarado, a função retornará apenas
parâmetros fornecidos;
2. com mais parâmetros que o declarado, o MATLAB® acusará erro (Too
many output arguments – parâmetros de saída em excesso);
3. se nenhum parâmetro for indicado, função retornará apenas o valor do
primeiro parâmetro.
A seguir temos um exemplo de criação de uma função:
function [s,v] = muv(s0, v0, a, t)
s = s0 +v0*t + a/2*t.^2;
v = v0 + a*t;
A seguir temos o exemplo de como uma função deve ser chamada,
sempre na janela de comandos.
>> [s,v] = muv(10, 2, 3.5, 60)
s =
6430
v =
212
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 55
É facultado ao usuário escolher que apareça apenas uma ou nenhuma
das variáveis de saída, caso deseje apenas ter conhecimento de uma das
variáveis ou apenas gerar valores para lançá-los em outra função.
>> [s] = muv(10, 2, 3.5, 60)
s =
6430
DICA:
1. O número de arquivos deve ser igual ao número de funções;
2. Utilize funções diferentes para objetivos diferentes;
OBSERVAÇÃO: Os comandos nargin (número de argumentos de
entrada) e nargout (número de argumentos de saída) podem ser usados
combinados com estruturas condicionais de programação para eliminar bugs
de operador.
>> nargin muv
ans =
4
>> nargout muv
ans =
2
Como já foi dito, o MATLAB® armazena suas variáveis em uma área da
memória que pode ser visualizada pelo workspace. As funções trabalham com
variáveis locais, isto é, ficam armazenadas em áreas de memória própria,
independente do workspace. Os escopos das variáveis do workspace e as
variáveis locais podem ser definidas da seguinte forma:
Variáveis do workspace não são reconhecidas dentro das funções;
Variáveis locais de funções não são reconhecidas no MATLAB®.
Parâmetros de entrada e saída são a forma (interface) mais adequada
para troca de dados entre o workspace do MATLAB® e ambientes internos de
funções. Outra forma de compartilhamento de troca de dados entre workspace
e funções são as variáveis globais. Variáveis criadas no workspace são
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 56
reconhecidas por qualquer função que explicite sua categoria como global em
seu código.
Para declarar uma variável como global basta escrever, no código, a
palavra global seguida da(s) variável(is) a serem declaradas.
DICA: como as variáveis globais podem ser reconhecidas por qualquer função,
evite declarar variáveis com nomes de fácil conflito como, “x”, ”m” ou ”i”. Utilize
os comandos whos, clear e isglobal para gerenciar variáveis globais.
EXERCÍCIO APLICADO 1
Necessita-se, em uma aplicação que envolve o MATLAB® e diversas
máquinas que são oriundas de diversos países, de um comando para converter
entre as unidades de temperatura Celsius, Fahrenheit e Kelvin. Para isso, é
necessário que o operador entre com o valor na unidade que é conhecida, e
informar ao programa para que unidade que deseja a conversão.
Sabe-se que tais escalas possuem valores conhecidos de ponto de fusão
e ebulição, dos quais se pode tirar por interpolação as relações entre as
temperaturas.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 57
Utilizaremos várias funções para resolver esse problema, sendo a
primeira „temperatura’ a responsável pela inserção dos parâmetros iniciais e
chamada da função que calculará e imprimirá o resultado em tela.
function temperatura
clc, clear
% O objetivo dessa função é que o operador possa converter os valores de
% temperatura entre celsius, fahrenheit e kelvin.
% O usuário deve digitar c para celsius, f para fahrenheit e k para kelvin
% para indicar entre quais unidades deseja transformação
global temp unidadefinal % declaração de variáveis globais
msgbox('Coloque c para Celsius, f para Fahrenheit e k para Kelvin');
pause(3) % pausa o programa por 3 segundos
temp = inputdlg('Qual o valor na unidade inicial');
unidadeinicial = inputdlg('De qual unidade você deseja converter');
unidadefinal = inputdlg('Para qual unidade você deseja converter');
% Testes 'anti-bug'
temp = str2double(temp);
unidadeinicial = char(unidadeinicial);
unidadefinal = char(unidadefinal);
a = isfinite(temp); %verifica se a temperatura é finita.
if a == 0
errordlg('O valor da temperatura não foi reconhecida!!','Atenção!!!');
return
end
%teste antibug para temperatura inicial
if unidadeinicial ~= 'c' & unidadeinicial ~= 'f' & unidadeinicial ~= 'k'
errordlg('A unidade inicial de conversão não foi
identificada!!','Atenção!!!');
return
end
%teste antibug para temperatura final
if unidadefinal ~= 'c' & unidadefinal ~= 'f' & unidadefinal ~= 'k'
errordlg('A unidade final de conversão não foi
identificada!!','Atenção!!!');
return
end
% Testes para chamada das funções de resolução do problema
if unidadeinicial == 'c'
celsius
end
if unidadeinicial == 'f'
fahrenheit
end
if unidadeinicial == 'k'
kelvin
end
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 58
As sub-rotinas „celsius‟, „fahrenheit‟ e „kelvin‟ são escritas em arquivos
separados, e obrigatoriamente devem estar na mesma pasta da função
temperatura, para que possam ser chamados corretamente.
function celsius
global temp unidadefinal
if unidadefinal == 'c'
resultado = temp;
mostrar = 'a temperatura obtida em celsius é: ';
end
if unidadefinal == 'f'
resultado = temp*1.8 + 32;
mostrar = 'a temperatura obtida em fahrenheit é: ';
end
if unidadefinal == 'k'
resultado = temp + 273;
mostrar = 'a temperatura obtida em kelvin é: ';
end
resultado = num2str(resultado);
s = strcat(mostrar, resultado, 'º ', unidadefinal)
O comando strcat é utilizado para unir várias strings em uma,
concatenando-as de forma que o resultado do problema pode ser mostrado em
uma linha apenas, ou uma caixa de dialogo desejada (msgbox, warndlg,
errordlg, etc.)
Para as demais funções:
function fahrenheit
global temp unidadefinal
if unidadefinal == 'c'
resultado = (temp-32)/1.8;
mostrar = 'a temperatura obtida em celsius é: ';
end
if unidadefinal == 'f'
resultado = temp;
mostrar = 'a temperatura obtida em fahrenheit é: ';
end
if unidadefinal == 'k'
resultado = (temp-32)/1.8 + 273;
mostrar = 'a temperatura obtida em kelvin é: ';
end
resultado = num2str(resultado);
s = strcat(mostrar, resultado, 'º ', unidadefinal)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 59
function kelvin
global temp unidadefinal
if unidadefinal == 'c'
resultado = temp - 273;
mostrar = 'a temperatura obtida em celsius é: '
end
if unidadefinal == 'f'
resultado = 1.8*(temp - 273) + 32;
mostrar = 'a temperatura obtida em fahrenheit é: '
end
if unidadefinal == 'k'
resultado = temp;
mostrar = 'a temperatura obtida em kelvin é: '
end
resultado = num2str(resultado);
s = strcat(mostrar, resultado, 'º ', unidadefinal)
Assim o operador obterá de forma rápida a conversão entre as unidades
4.2 – Funções de Importação e Exportação
Na grande maioria dos casos, os dados necessários à execução das sub-
rotinas não se encontram disponíveis de forma explícita. Algumas vezes é
necessário um tratamento prévio de determinadas informações para garantir a
compilação de códigos. Da mesma forma que importar os dados, é importante
também exportar. Embora o MATLAB® ofereça diversas formas de importação
manipulação e exportação de dados, veremos apenas as mais importantes à
nossa área.
Inicialmente trabalharemos com as funções de exportação e importação,
logo após estudaremos as funções de tratamento de dados e por último
aprenderemos como criar e manipular gráficos em duas e três dimensões.
dlmread: lê uma matriz de um arquivo ASCII.
dlmwrite: grava uma matriz de um arquivo ASCII.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 60
load: lê variáveis do tipo “.mat” (formato binário proprietário).
save: grava variáveis do tipo “.mat”.
O exemplo abaixo mostra como funciona a exportação e importação de
uma matriz que se encontra no workspace para o formato ASCII. O resultado
pode ser visto no bloco de notas, que lê o formato em questão.
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> dlmwrite('matriz.txt', A, '-')
Dessa forma da matriz A foi gerado um arquivo com nome „matriz.txt‟
que pode ser aberto no bloco de notas (teste isso!) e que como delimitador, usa
o hífen (-). O delimitador é utilizado para indicar ao MATLAB® e demais
programas como separar os itens que estão na mesma linha.
O passo inverso para importar uma matriz que existe e utilizá-la no
MATLAB® é simples e visto abaixo:
>> B = dlmread('matriz.txt','-')
B =
1 2 3
4 5 6
7 8 9
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 61
É importante verificar o delimitador utilizado, pois a importação de dados
através de delimitadores errados fornecem, consequentemente, matrizes com
dados incorretos para o sistema. Pode ser utilizado como delimitador qualquer
caractere do sistema, os mais comuns são o espaço („ „) e a vírgula („,‟).
Outras funções de importação e exportação, assim como suas respectivas
descrições podem ser encontradas na tabela 4.1.
Extensão Descrição Função Retorno
MAT Formato MATLAB load Variáveis no arquivo
CSV Nº separados por ‘ , ’ cvsread Matriz numérica
DAT Texto formatado importdata Matriz numérica
DLM Números delimitados dlmread Matriz numérica
TAB Números tabulados dlmread Matriz numérica
XLS Planilha do MS-Excel xlsread Matriz numérica e cell-array
WK1 Planilha do Lotus 123 wk1read Matriz numérica e cell-array
CDF* Common Data Format cdfread cell-array e registro CDF
FITS* Flexible Image Transport System fitsread Formato FTIS
HDF* Hierarchical data Format hdfread Formato HDF
AVI Formato AVI(animação) aviread Formato MATLAB movie
BMP
JPEG
GIF
TIFF
XDW
CUR
ICO
RAS
PBM
PGM
PPM
Formato BMP
Formato JPEG
Formato GIF
Formato
Formato XDW
Formato CUR
Formato ICO
Formato RAS (raster Sum)
Formato PBM
Formato PGM
Formato PPM
imread Matrizes de cores (true
color) e índice
(mapeamento)
AU
SND
Formato AU (áudio Sun)
Formato SND (áudio Sun)
auread Dados de freqüência
WAV Formato WAV (áudio MS) wavread Dados de frequência
Tabela 4.1 – funções gerais para importação e exportação de dados. (*) Padrão de
arquivos para troca de dados criado pela NASA.
Caso não se tenha certeza qual tipo de dados a serem manipulados, use
a função importdata. Essa função recebe qualquer extensão da tabela anterior.
Mas, se ela recebe qualquer extensão então porque utilizar as outras? A função
importdata é uma função genérica e como tal não contém todas as
características de armazenamento que cada uma tem individualmente. Como
ela possui um código de armazenamento padrão, pode ser possível um trabalho
a mais para conseguir extrair o que se deseja.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 62
Para saber quais são as funções que podem ser importadas e exportadas
pelo MATLAB e os comandos necessários para que ocorram tais modificações
digite >> help fileformats.
4.3 – Funções de tratamento
Muitas vezes necessitamos exportar dados para visualização na janela de
comandos do MATLAB®, entretanto o formato não é adequado frente à
situação em questão.
Para resolver isso, utilizamos até agora caixas de diálogo (msgbox,
errordlg, warndlg) e no problema 2.5 foi visto o comando strcat que concatena
várias strings em apenas uma, o que torna a exibição de resultados mais
profissional.
Para resolver esse problema de forma definitiva trabalharemos com o
comando ou função fprintf. Podemos definir as atribuições dessa função como
a gravação de dados em um arquivo formatado. Sua sintaxe pode ser observada
a seguir.
Caracteres são utilizados nos flags como controladores de alinhamento e
sinal. Eles estão resumidos na tabela 4.2.
Caractere Descrição Exemplo
- Alinhamento à esquerda %-5.2d
+ Sempre imprime sinal dos números %+5.2d
0 Preenche espaços com ‘0’ em vez de ‘ ’ %05.2d Tabela 4.2 – Caracteres dos flags do comando fprintf.
O parâmetro T define o número de dígitos à esquerda do ponto decimal.
Para definição do número de dígitos à direita temos o parâmetro de entrada P.
O parâmetro C define a identificação de notação como mostra a tabela
4.3.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 63
Formato Notação Exemplo Resultado
%c Caractere fprintf(‘%’c,’a’) a
%s Cadeia de caractere fprintf(‘%’s,’abc’) abc
%d Decimal fprintf(‘%’5.3d,’pi’) 3.142e+000
%f Ponto flutuante fprintf(‘%5.3f’,’pi’) 3.142
%e Exponencial fprintf(‘%’5.3e,’pi’) 3.142e+000 Tabela 4.3 – Caracteres de identificação de notação.
Alguns caracteres especiais podem ser utilizados para atribuir funções
extras ao fprintf. São postos sempre após o primeiro conjunto de parâmetros e
podem ser resumidos na tabela 4.4.
Caractere Nome Descrição
\b backspace Retorno de caractere
\f form feed Avanço de linha
\n new line Pula linha
\r carriage return Retorno de linha
\t horizontal tab Tabulação horizontal
\\ backslash Caractere barra invertida
\” quotation mark Caractere aspas “
%% percent character Caractere porcentagem % Tabela 4.4 – Caracteres especiais do fprintf.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 64
Exercícios de fixação
1. Crie um comentário após o início das funções do exercício proposto
explicando sobre o objetivo de cada uma delas, verificando que o mesmo
aparecerá como descrição da ajuda quando utilizado o help nome da
função.
2. Escreva uma „function‟ que calcule a área de um trapézio, sendo „a‟ a base
menor, „b‟ a base maior e „h‟ a altura do mesmo.
3. Escreva uma „function‟ para converter de coordenadas cartesianas a
coordenadas polares, inclusive quando os valores inseridos forem em três
dimensões.
4. Faça uma „function‟ na qual o usuário deva acertar o número aleatório
entre 1 e 5 escolhido pelo computador.
5. Crie uma função para que o programa indique qual é o maior divisor
comum entre dois números digitados pelo usuário. Utilize comandos
antibugs para evitar inserção de valores incoerentes.
6. Para uma equação y = ax² + bx + c, sendo as entradas a, b e c crie uma
„function‟ que diz se as raízes são reais ou imaginárias, mostrando-as ao
usuário.
7. Crie uma função que leia três números e os imprima em forma crescente.
Crie uma restrição para que os valores inseridos sejam inteiros entre 1 e
10, e o programa deve imprimir o nome (não o valor) e a ordem dos
valores em apenas uma linha.
8. Crie uma matriz A = ones(3) e exporte-a para o Microsoft Excel®, de
forma que os dados da matriz fiquem nas células A1:C3 da primeira
planilha. Use clc e clear para deletar os dados iniciais e importe a matriz
para o MATLAB®, verificando dessa maneira se houve correta importação
e exportação de dados.
9. Utilizando o Microsoft Paint® faça uma figura qualquer salvando-a em
formato jpeg no diretório que está sendo utilizado para as aulas de
MATLAB®. Utilize o comando >> A = imread(„nome do arquivo.jpg‟) e
após utilize o comando image(A) para visualizar a figura no MATLAB®.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 4
Instrutor: Fernando Wesley
Recife/PE - 2012 65
10. Em relação à visualização de valores no MATLAB®, para as expressões B
= 12345.6789 e C = „aula‟ digite os seguintes comandos verifique o que
ocorre.
a) fprintf('%-5.2d',B)
b) fprintf('%+5.2d',B)
c) fprintf('%-2.5d',B)
d) fprintf('%-2.5f',B)
e) fprintf('%-5.2d\n',B)
f) fprintf('%-5.2d\t',B)
g) fprintf(„%s\f‟, C)
h) fprintf(' exercício%s\n ',C)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
66
Capítulo 5 – Polinômios
5.1 – Polinômios e suas raízes
No MATLAB®, os polinômios são expressos como vetores linhas, sendo
sempre iniciada do coeficiente do maior termo presente no mesmo. Para um
polinômio f(x) = 33x² + 14x – 65, o vetor que representa o polinômio acima é:
>> f = [33 14 -65]
Independente do grau do polinômio, o mesmo deve sempre iniciar do
maior termo presente, e terminar no termo independente de variável. Caso não
haja esse termo no polinômio, indicar o valor zero no lugar do mesmo. A função
g(x) presente abaixo exemplifica esses casos.
g(x) = 2x4 – 3x² + 7x
>> = g = [2 0 -3 7 0]
5.1.1 – Raízes de um polinômio
Para o cálculo de raízes de um polinômio, utiliza-se o comando roots, e
como argumento utiliza-se o vetor linha representando o polinômio desejado.
f(x) = x² - 7x + 12
>> f = [1 -7 12]
f =
1 -7 12
>> x = roots(f)
x =
4
3
O usuário deve identificar que para um polinômio de grau n, haverá n
raízes que solucionam o sistema, sendo as mesmas reais e/ou imaginárias. O
exemplo abaixo mostra um polinômio de terceiro grau, que como resultado
uma raiz real e duas imaginárias.
g(x) = -1x³ + 4x² + 8
>> g = [-1 4 0 8]
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
67
g =
-1 4 0 8
>> x = roots(g)
x =
4.4111e+000
-2.0557e-001 +1.3309e+000i
-2.0557e-001 -1.3309e+000i
O usuário pode perceber ainda que as raízes complexas do caso anterior
são conjugadas.
5.1.2 – Encontrar polinômio a partir das raízes
Para o caso em que o usuário possui as raízes do sistema, mas deseja
obter o polinômio característico pode utilizar o comando poly, inserindo como
argumento um vetor linha cuja entrada são as raízes do sistema. Partindo do
mesmo princípio visto no item anterior, um vetor que contenha um número n
de raízes, fornecerá um polinômio com grau n.
Por exemplo, caso o usuário deseje conhecer o polinômio cujas raízes são
x1 = 2 e x2 = -6, deve fazer da seguinte maneira.
>> r = [2 -6]
r =
2 -6
>> x = poly(r)
x =
1 4 -12
Assim, o polinômio responsável por tais raízes é f(x) = x² + 4x – 12.
Da mesma forma pode-se encontrar polinômios para funções com graus
maiores. Para encontrar o polinômio característico da função com as cinco
raízes especificadas abaixo, deve-se proceder da seguinte forma:
x1 = -5; x2 = -2,5; x3 = -1; x4 = 1 e x5 = 4
% x1 = -5; x2 = -2,5; x3 = -1; x4 = 1 e x5 = 4
>> s = [-5 -2.5 -1 1 4]
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
68
s =
-5.0000e+000 -2.5000e+000 -1.0000e+000 1.0000e+000 4.0000e+000
>> r = poly(s)
r =
Columns 1 through 5
1.0000e+000 3.5000e+000 -1.8500e+001 -5.3500e+001 1.7500e+001
Column 6
5.0000e+001
Assim, o polinômio que engloba todas as raízes vistas anteriormente é:
f(x) = x5 + 3,5x4 – 0,185x³ - 0,535x² - 0,175x + 5
O comando poly também retorna o polinômio específico de uma matriz
quadrada, conforme exemplo a seguir:
>> A = [1 2; 3 4]
A =
1 2
3 4
>> b = poly(A)
b =
1.0000e+000 -5.0000e+000 -2.0000e+000
5.2 – Multiplicação e divisão de polinômios
5.2.1 – Multiplicação polinomial
Para efetuarmos a multiplicação entre dois polinômios, devemos utilizar
o comando conv, processo este também chamado de convolução. Assim, para
os polinômios:
A = 2x + 5 e B = -x + 4
>> a = [2 5]
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
69
a =
2 5
>> b = [-1 4]
b =
-1 4
>> c = conv(a,b)
c =
-2 3 20
O polinômio resultante de multiplicação é c(x) = -2x² + 3x + 20
Para os polinômios D(x) = 2x² - 3x +12 e F(x) = -14x + 3, deseja obter a
seguinte multiplicação (-D x 3,5F):
>> d = [2 -3 12]
d =
2 -3 12
>> f = [-14 3]
f =
-14 3
>> g = conv(-d,3.5*f)
g =
9.8000e+001 -1.6800e+002 6.1950e+002 -1.2600e+002
Assim, o polinômio de terceiro grau obtido acima representa o resultado
da multiplicação realizada.
5.2.2 - Divisão polinomial
A divisão polinomial ou deconvolução pode ser realizada pelo comando
deconv. O resultado dessa operação retorna um vetor q ‘quociente’ e um vetor
r ‘resto’ da divisão.
A sintaxe dessa função é a seguinte:
[r,q] = deconv(a,b)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
70
Para realizar a divisão da função a(x) = 3x² - 3x + 6 pela função b(x) = 3x,
o resultado pode ser visto logo abaixo.
>> a = [3 -3 6]
a =
3 -3 6
>> b = [3]
b =
3
>> c = deconv(a,b)
c =
1 -1 2
O resultado impresso é a função c(x) = x² - x + 2.
Na função acima não há resto de divisão. Para verificar, utilize o comando
[c,d] = deconv(a,b), e a visualização fornecerá resultado de resto como zero.
Mas para a divisão das duas funções abaixo, há resto de divisão.
R(x) = x5 – 4x4 + 3x² - 2
S(x) = x³ + 2x
>> r = [ 1 -4 0 3 0 -2]
r =
1 -4 0 3 0 -2
>> s = [3 0 2 0]
s =
3 0 2 0
>> [w,k] = deconv(r,s)
w =
3.3333e-001 -1.3333e+000 -2.2222e-001
k =
Columns 1 through 5
0 0 0 5.6667e+000 4.4444e-001
Column 6
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
71
-2.0000e+000
Pode ser visto que o vetor W(x) representa o quociente da divisão,
enquanto o vetor k representa o polinômio representativo do resto da divisão.
5.3 – Simplificação de polinômios em frações parciais
Uma forma para simplificar a visualização de divisão de polinômios é
através da utilização das frações parciais. Verifique o exemplo a seguir:
Partindo da relação acima, pode-se utilizar o comando residue para
obter a simplificação acima em frações parciais. A sintaxe da função residue é a
seguinte:
[r,p,k] = residue(A,B)
Onde: r = numeradores
p = denominadores
k = termo livre
A execução dos cálculos para encontrar os termos desejados ocorre da
seguinte maneira:
>> A = [1 -8 16]
A =
1 -8 16
>> B = [1 -4 2]
B =
1 -4 2
>> [r,p,k] = residue(A,B)
r =
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
72
1.2132e-001
-4.1213e+000
p =
3.4142e+000
5.8579e-001
k =
1
Assim, o resultado obtido representa a seguinte fração parcial:
Também pode ser obtido resultado caso haja interesse do usuário em
realizar o cálculo para obter as funções de numerador e denominador a partir
dos resíduos, polos e do termo direto.
5.4 – Avaliação de valores de polinômios
Caso se deseje saber o valor que o polinômio p(x) possui para um certo
valor de x, deve-se definir primeiramente o x, para logo após realizar o cálculo
do polinômio em questão.
f(x) = 3x³ - 4x² + 2x, x = 4
>> x = 4
x =
4
>> f = 3*x^3 -4*x^2 + 2*x
f =
136
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
73
Da forma acima se pode obter o valor da função em certo ponto
definido. Caso se deseje obter o valor da função para uma série de pontos,
pode-se proceder de duas formas.
Na primeira forma deve ser criado um vetor por meio de incrementos, e
após isso criar a função devendo-se ter cuidado para realizar a multiplicação
termo a termo (utilizando-se o ponto antes da multiplicação da variável). Na
segunda forma pode-se utilizar o comando polyval, que funciona na seguinte
sintaxe:
r = polyval(p,x)
Onde p = polinômio em vetor linha
x = intervalo desejado
Abaixo, um exemplo utilizando os dois comandos:
% Primeira forma de cálcular
>> x = 2:6
x =
2 3 4 5 6
>> f = 3*x.^3 - 4*x.^2 +2*x
f =
12 51 136 285 516
% Segunda forma de calcular
>> x = 2:6
x =
2 3 4 5 6
>> f = [3 -4 2 0]
f =
3 -4 2 0
>> x = polyval(f,x)
x =
12 51 136 285 516
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
74
Para ambas as formas utilizadas, os resultados devem ser iguais.
5.5 – Integração e derivada de polinômios
5.5.1 – Derivação de polinômios
Para a derivação de polinômios, o mesmo deve ser posto no formato de
vetor linha, e após isso, utilizar o comando polyder. O argumento para a
função polyder é o vetor linha que representa o polinômio que se deseja
derivar.
Para o polinômio f(x) = x³ + 3x² + 5x + 10
>> A = [1 3 5 10]
A =
1 3 5 10
>> B = polyder(A)
B =
3 6 5
5.5.2 – Integração de polinômios
Para a integração de um polinômio, a função utilizada deve ser a polyint.
A função polyint deve possuir, como primeiro argumento, o polinômio que se
deseja integrar inserido como vetor linha. Caso se deseje inserir um termo
constante na integração, o mesmo deve ser posto como segundo argumento da
função polyint.
Abaixo, o primeiro caso (variável B) apenas mostra a integração com
apenas um argumento, assumindo-se que o termo constante é igual a zero. No
segundo caso (variável C), a integração é realizada e o fator constante é posto
como 4,3.
>> A = [2 5 -4 12 5]
A =
2 5 -4 12 5
>> B = polyint(A)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
75
B =
Columns 1 through 5
4.0000e-001 1.2500e+000 -1.3333e+000 6.0000e+000
5.0000e+000
Column 6
0
>> C = polyint(A, 4.3)
C =
Columns 1 through 5
4.0000e-001 1.2500e+000 -1.3333e+000 6.0000e+000
5.0000e+000
Column 6
4.3000e+000
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
76
Exercícios de fixação
1. Encontre as raízes dos polinômios abaixo:
a) A(x) = 4x² - 3x + 5
b) B(x) = x³ - 4x + 2x -12
c) C(x) = x4 – x² - 9
d) D(x) = x4 – 4x³ - 4x²
e) E(x) = x8 – 4x6 + 34x5 - 2.55x³ +32x
2. Encontre os polinômios característicos a partir das raízes abaixo:
a) x1 = -2,4; x2 = 4,2
b) x1 = 4; x2 = 4,2; x3 = -2,4 + 0,11i
c) x1 = 0; x2 = 1,3 + 2i; x3 = -1,3 - 2i; x4 = 5
d) x1 = 1; x2 = 2 ; x3 = 3; x4 = 4
3. Partindo dos polinômios fornecidos, encontre os resultados das
seguintes operações:
R(x) = x³ - x² - 5x + 7
S(x) = -4x² + 7
T(x) = 2x -1
a) A(x) = 2R x T
b) B(x) = R x 0,4T x 0,67S
c) C(x) = S² x 4,5RT
d) D(x) = S/(R x 1,5T)
e) E(x) = (5,6T/R)/(12,8S/T)
4. Simplifique para frações parciais as divisões polinomiais abaixo:
a) A(x)/B(x) = (2x³ + 4x² - 5x + 7)/(x² - 4x)
b) C(x)/D(x) = (-4x5 – 3x² + 5x)/(x³ + 9x +3)
c) E(x)/F(x) = (9x² + 12x – 4)/(23x - 12)
5. Encontre as derivadas e as integrais dos polinômios abaixo
a) A(x) = 3x4 – 14x³ - 4x²
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Instrutor: Fernando Wesley
Recife/PE - 2012
77
b) B(x) = -2x³ + 7x² - 15x + 7
c) C(x) = 4x² - 3x + 5
d) D(x) = 7x7 - 14x5 - 4x4 + 3x² +3
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 78
Capítulo 6 – Gráficos
6.1 Gráficos em duas dimensões (2D)
Agora mostraremos os recursos disponíveis no MATLAB® de criação e
manipulação de figuras para a apresentação de resultados em formato gráfico.
O conjunto desses recursos é denominado Handle Graphics.
6.1.1 Gráficos simples em duas dimensões (2D)
Para que os gráficos sejam gerados de maneira organizada e de acordo
com o desejo do usuário, é recomendado utilizar os seguintes passos para a sua
criação, seja para duas ou três dimensões.
Passo Nome
01 Preparação dos dados (leitura e tratamento)
02 Seleção e configuração da posição do gráfico na janela de exibição
03 Chamada da função do gráfico
04 Selecionar coloração das linhas e símbolos
05 Configurar eixos, legendas e título do gráfico
Tabela 6.1 – Passo a passo para construção de gráficos.
Passo 1: Na preparação dos dados insere-se os valores a serem
utilizados. Esses valores podem ser obtidos de outros programas através da
exportação ou serem criados pelo usuário no exato momento da utilização do
MATLAB®.
Passo 2: Seleciona-se a janela utilizada para exibição do gráfico e
coloca-se o gráfico da maneira cuja exibição melhor atenda à expectativa do
usuário. Será aprendido o subplot, que é a forma que o MATLAB oferece para
exibição de vários gráficos simultaneamente em apenas uma janela. Essa é a
etapa do tratamento de gráficos que comandos como o subplot pode aparecer.
Passo 3: Após a obtenção dos dados e seleção da janela de exibição,
chama-se o gráfico. Nesse momento já é possível ver o gráfico formado, mas
ainda não há uma formatação que possa ser considerada profissional no
mesmo.
Passo 4: Esse passo é importante nos momentos em que é
necessário diferenciar dados em uma mesma figura. Para diferenciação dos
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 79
gráficos entre si, aconselha-se modificar a coloração e o formato das linhas,
deixando-as diferentes uma das outras.
Passo 5: Por último, mas não menos importante, há o desejo do
usuário de colocar nome nos eixos, titulo e legenda do gráfico. Essa etapa é a
responsável por tais modificações.
Um exemplo para ilustrar a criação e configuração dos gráficos, com o
passo a passo acima está abaixo.
Passo 1:
x = -3:0.1:3
y = x.*cos(-x)
Passo 2:
figure('Name','Gráfico','Number','off','Color','c')
Para mais atribuições consulte as propriedades da figure no help.
Passo 3 e 4:
plot(x,y)
plot(x,y,’bs’)
plot(x,y,’r+’)
As cores, marcadores e tipo de linhas podem ser resumidos na tabela 6.2.
Em relação às cores, essas letras referem a cor dentro das aplicações do
MATLAB®, sendo a forma mais simples de representação da mesma.
Cor Marcador Tipo de Linha
y (amarelo) m (magenta) c (azul-claro) r (vermelha) g (verde) b (azul) w (branca) k (preta)
. (ponto) o (círculo) x (x’s) + (cruz) * (estrela) s (quadrado) d (losango) v (triângulo p/ baixo) ^ (triângulo p/ cima)
: (pontilhado) -. (ponto-traço) -- (tracejado) solid (sólida)
Tabela 6.2 – Cores, marcadores e tipos de linhas.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 80
Passo 5
grid
legend(‘curva’)
xlabel(‘eixo x’)
ylabel(‘eixo y’)
title(‘grafico x.cos(-x)’)
gtext(‘ponto de inflexão’)
No passo 5, os comandos xlabel e ylabel são responsáveis por inserir
dados nos eixos x e y do gráfico. O comando grid é responsável por deixar o
gráfico com a característica milimetrada. Ainda há os comandos legend, title e
gtext, que respectivamente são usados para inserir a legenda do gráfico, o título
e um texto que pode ser posicionado com o auxílio do mouse em qualquer
lugar da imagem. Em caso de dúvida, o comando help é recomendado para
saber mais detalhes a respeito dos comandos acima.
O MATLAB® possui inúmeras estruturas de exibição gráfica. Algumas
delas podem ser encontradas na tabela 6.3.
Comando Atribuição
loglog Valor logarítmico de x e y.
semilogx(i) Valor logarítmico de x e linear para y.
impulse Resposta ao impulso.
step Resposta ao degrau.
bode Diagrama de BODE.
polar Gráficos com eixos de coordenadas polares.
nichols Diagrama de Nichols.
nyquist Diagrama de Nyquist.
zpplot Zeros e pólos de funções transferência.
resid Análise de correlações e correlações cruzadas.
sim Simulação de modelos matemáticos.
Tabela 6.3 – Estruturas de exibição gráfica.
Para os casos vistos na tabela 6.3, a forma de comando normalmente é
semelhante a do plot, ex.:
>> loglog(x,y)
>> semilogx(x,y)
>> t = 0:0.1:2*pi; polar(t,sin(2*t).*cos(2*t),'--r')
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 81
6.1.2 Múltiplos gráficos em janelas diferentes
Para que vários gráficos sejam exibidos em janelas diferentes, é
necessário utilizar o comando figure antes da chamada de cada gráfico. Caso
não se utilize desse comando, o que ocorrerá é que apenas o último dos
gráficos será visualizado na janela de exibição gráfica.
%chamada da primeira janela
figure('Name', 'seno(t)')
t = 0:0.1*pi:2*pi
x = sin(t)
plot(t,x)
xlabel('t')
ylabel('seno(t)')
title('seno(t) x t')
%chamada da segunda janela
figure('Name', 'cosseno(t)')
t = 0:0.1*pi:2*pi
y = cos(t)
plot(t,y)
xlabel('t')
ylabel('cosseno(t)')
title('cosseno(t) x t')
%chamada da terceira janela
figure('Name', 'logaritmo natural(t)')
t = 0:0.1*pi:2*pi
z = log(t)
plot(t,z)
xlabel('t'), ylabel('logaritmo natural(t)'),title('log natural(t)xt')
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 82
Figura 6.1 – Exibição de gráficos em diferentes janelas
6.1.3 Múltiplos gráficos em uma janela
Certas vezes é importante para o usuário ter vários gráficos colocados
em apenas uma janela, seja para efeito de comparação ou de visualização de
gráficos complementares. O MATLAB® oferece essa opção ao usuário no qual
um exemplo ilustrativo pode ser visto no código abaixo.
x= linspace(0, 2*pi, 30);
y= exp(x).*sin(x);
z= exp(x).*cos(x);
m= 0.09*exp(x).*x;
plot(x,y,'r.',x,z,'m^',x,m,'k:')
grid on
legend('exp(x)*sin(x)', 'exp(x)*cos(x)','0.09*exp(x)*x')
As variáveis y, z e m dependem de x, que foi definido utilizando o
comando linspace. Uma maneira de mostrar todas as variáveis em questão é
através do comando plot, no qual se coloca a variável inicial, a variável
dependente e a aparência da linha, que nesse caso é importante que se defina
para evitar possível confusão entre as linhas impressas na janela de exibição.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 83
Figura 6.2 – Exibição gráfica do exemplo com vários gráficos em apenas uma janela
Ainda se pode utilizar outra maneira para obter o mesmo resultado,
utilizado desta vez o comando hold, responsável por ‘segurar’ os gráficos na
mesma imagem. Assim, antes de se chamar os gráficos, ativa-se o hold para que
os gráficos possam ser impressos na mesma figura. Caso não se utilize o hold
on, apenas o último dos gráficos chamados pelo plot é impresso.
x=linspace(0, 2*pi, 30);
y=exp(x).*sin(x);
z=exp(x).*cos(x);
m=0.09*exp(x).*x;
hold on
plot(x,y,'r.')
plot(x,z,'m^')
plot(x,m,'k:')
grid on
legend('exp(x)*sin(x)', 'exp(x)*cos(x)','0.09*exp(x)*x')
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 84
6.1.4 Utilização do comando subplot
Uma das desvantagens em exibir vários gráficos, de maneira individual
ou conjunta, em janelas diferentes, é a poluição visual na qual o usuário fica
sujeito, pois dependendo da situação os muitos gráficos que são gerados
podem não corresponder à intenção do programador.
Assim, uma forma de remediar essa situação, e que é diferente do que é
visto no item anterior é o uso do comando subplot, que é responsável por
colocar vários gráficos em apenas uma janela, de forma que a exibição dos
gráficos não é por sobreposição, mas é de forma tal que os gráficos possam
aparecer em janelas menores dentro da janela de exibição, com o operador
indicando o local que deve aparecer. O código a seguir contém um exemplo no
qual o subplot foi utilizado, onde o resultado pode ser visto na figura 6.3.
t = -2*pi:0.1*pi:2*pi;
x = cos(t)
subplot(2,2,1)
plot(t, x,'r--')
axis([-2*pi 2*pi,-1 1])
title('cos(t)')
grid on
y = sin(t)
subplot(2,2,2)
plot(t, y,'b*')
axis([-2*pi 2*pi,-1 1])
title('sen(t)')
grid on
z = sin(t).*cos(t)
subplot(2,2,3)
plot(t, z, 'g-.')
axis([-2*pi 2*pi,-1 1])
title('sen(t).cos(t)')
grid on
subplot(2,2,4)
plot(sin(t), cos(t),'k+')
axis equal
title('sen(t) x cos(t)')
grid on
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 85
Figura 6.3 – Exibição gráfica da figura resultante do exemplo com o comando subplot
Para facilitar o uso do comando subplot recomenda-se pensar nele como
sendo parte de uma matriz, onde cada gráfico ou figura será plotado da mesma
maneira utilizada para indexação simples, onde a matriz escolhida foi uma 2x2 e
os gráficos foram impressos na ordem crescente de número de coluna e linha.
6.1.5 Gráficos especializados
6.1.5.1 Barras
O primeiro dos gráficos especializados que será estudado é o de barras.
Esse tipo de gráfico pode ser criado utilizando o comando bar. Esse tipo de
gráfico pode ser utilizado para plotar gráficos que possuam dados com valores
específicos e sejam indexados em ordem crescente como também no caso de
valores que sejam dependentes de outro valor.
O código a seguir apresenta um exemplo que também utiliza o comando
subplot. Nesse exemplo há, no primeiro gráfico, um exemplo no qual a nota de
várias turmas é plotada e pode ser comparada através do uso do gráfico de
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 86
barras. No segundo gráfico há em no eixo das abscissas a variável t e no eixo
das ordenadas a variável sen(t), o resultado de tais exibições é mostrado na
figura 6.4.
% primeiro caso: dados sem dependência
turma = [1 2 3 4 5]
nota_alunos = [8.8 7.5 4.6 9.6 6.5]
subplot(2,1,1)
bar(turma,nota_alunos,'r')
xlabel('Turma')
ylabel('Nota média')
grid on
% segundo caso: dados com dependência
t = 0: 0.25: 4*pi
x = sin(t)
subplot(2,1,2)
bar(t,x,'c')
xlabel('t')
ylabel('sen(t)')
Uma das desvantagens do uso do gráfico em barra é que é complicado
para inserir dados com nomes, como no caso em que o desejo do usuário é
colocar nomes para cada barra já no próprio código do programa. Uma das
formas ‘manuais’ de se colocar nomes nas barras é através do comando gtext,
onde o usuário pode inserir o texto na posição desejada em qualquer um dos
gráficos.
Percebe-se, ainda, que o uso do comando bar é semelhante ao comando
plot, e onde configurações do gráfico como cor, textos dos eixos e títulos são
usados os mesmos comandos.
Esses comandos são utilizados igualmente para todos os comandos
especializados.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 87
Figura 6.4 – exemplo de exibição em barras.
6.1.5.2 Gráfico Pizza (Pie Charts)
O gráfico pizza (pie charts, em inglês) é utilizado quando se deseja saber
a porcentagem ou valor de um determinado dado em relação a todos os
demais, sendo a soma de todos os dados, quando plotados em porcentagem,
igual a 100%.
Supondo que no curso de Fundamentos de MATLAB® o percentual de
alunos por curso seja o exposto abaixo:
Curso Porcentagem total (%)
Eng. Química 23
Eng. Civil 13
Eng. Mecânica 22
Eng. Produção 18
Eng. Elétrica 20
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 88
Uma forma de representar tais resultados através de um gráfico em pizza
é a seguinte:
porcentagem_de_alunos = [18 22 13 27 20];
grafico_pizza = pie(porcentagem_de_alunos);
title('porcentagens de alunos no curso')
gtext('engenharia química')
gtext('engenharia civil')
gtext('engenharia mecânica')
gtext('engenharia de produção')
gtext('engenharia naval')
Figura 6.5 – gráfico em pizza com auxílio do gtext
Infelizmente não há uma maneira simples de colocar os dados escritos no
gráfico, de forma que represente cada fatia do gráfico. Existem na internet
funções como a pielabel, na qual o usuário pode diretamente colocar os textos
associados a cada valor. Outra forma de se conseguir isso é utilizando o
comando gtext, que o usuário deverá colocar manualmente com auxílio do
mouse. A figura resultante após uso do gtext é a figura 6.5.
6.1.5.3 Área
O comando area gera um gráfico no qual a parte entre o eixo y e a
função é visualmente preenchida a partir de dados de um vetor ou matriz. Por
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 89
definição, a área preenchida é aquele entre a linha definida pelo usuário e a
linha que representa y = 0, assim, o comando a ser usado é area(x,y).
Há a possibilidade do usuário definir outro eixo no qual a área seja
preenchida, assim o usuário deve chamar area(x,y,eixodesejado). A cor da área
também pode ser escolhida, e para isso o usuário deve inserir o comando da
seguinte forma area(x,y, eixodesejado, ‘facecolor’, ‘cor desejada em inglês’). Um
exemplo no qual a função area é chamada é mostrado a seguir.
x = -3*pi:0.1*pi:3*pi
y = cos(x).*(sin(0.2*x))
subplot(2,1,1)
area(x,y, 'facecolor', 'cyan')
grid on
z = sin(x).*(cos(0.2*x))
subplot(2,1,2)
area(x,z,-0.5, 'facecolor', 'yellow')
axis tight, grid on
Figura 6.6: Exemplo da função para mostrar a área.
6.2 Gráficos em três dimensões (3D)
6.2.1 Gráficos simples em três dimensões
O comando para imprimir gráficos em 3D de forma simples é através do
plot3. A maneira de fazer a impressão é semelhante a utilizada para gráficos 2D.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 90
Entretanto é necessário que o usuário explicite o eixo z, de forma que o
complete as três dimensões. Caso haja o desejo de nomear o eixo z, pode-se
usar o zlabel para isso, da mesma forma que ocorre para xlabel e ylabel.
t = 0: 0.01*pi:20*pi;
x = sin(t).*log(-0.2*t);
y = cos(t).*log(-0.2*t);
z = t;
plot3(x,y,z);
xlabel('x');
ylabel('y');
zlabel('z');
A imagem gerada através do comando acima é mostrada na figura 6.7.
Figura 6.7 – Exemplo utilizando o plot3.
Os comandos para inserir títulos, legendas e as modificações em cor de
gráfico e demais características continuam as mesmas do caso em duas
dimensões. Outra ferramenta que é bastante útil no estudo dos gráficos em três
dimensões é view. A função view(az,el) é responsável no valor az a fazer o
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 91
deslocamento rotacional horizontal e o valor el é responsável pela rotação
vertical realizada.
Um exemplo, que verifica várias perspectivas de vista, e que usa o subplot
de forma que várias imagens podem ser vistas ao mesmo tempo pelo usuário
do programa pode ser visto a seguir, sendo o gráfico resultante o exposto na
figura 6.8.
t = 0: 0.1:14;
x = sin(t).*exp(-0.1*t);
y = cos(t).*exp(-0.1*t);
z = t;
subplot(2,2,1); plot3(x,y,z);
xlabel('x');ylabel('y');zlabel('z');
title('Perspectiva padrão - plot3');
subplot(2,2,2); plot3(x,y,z, 'rd');
xlabel('x');ylabel('y');zlabel('z');
view(-54, -144)
title('Az = 54, El = -144');
subplot(2,2,3); plot3(x,y,z, 'k*');
xlabel('x');ylabel('y');zlabel('z');
view(0, 90)
title('Az = 0, El = 90');
subplot(2,2,4); plot3(x,y,z, 'mo');
xlabel('x');ylabel('y');zlabel('z');
view(90, 0)
title('Az = 90, El = 0');
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 92
Figura 6.8: Uso do view e subplot para verificar diferentes perspectivas do mesmo gráfico
com uso do plot3.
6.2.2 Comando Mesh, Contour e Surf
Os comandos mesh, contour e surf são utilizados em gráficos de
superfícies que podem ser visualizados em três dimensões. O exemplo que será
estudado a seguir é o do exemplo do chapéu mexicano, e nos auxiliará na
compreensão dos comandos.
O mesh é usado para mostrar a superfície estudada, mas apenas os
pontos dela, de forma que a superfície não fica ‘sólida’. O comando meshgrid é
utilizado para gerar as matrizes x e y que serão utilizadas, de forma que
também o gráfico também terá o grid, isto é, a aparência milimetrada em seus
eixos. É o comando principal aqui, pois é ele que gera as matrizes necessárias
para formação das superfícies.
O comando surf é semelhante ao mesh, sendo a diferença que é
mostrado uma forma sólida entre os pontos estudados no mesh. A sua forma de
chamada é a mesma, sendo chamado surf(z) no lugar do mesh(z), do caso
anterior. Ainda há o uso possível de surfc e meshc, que gera um contorno na
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 93
região 2D, conhecida como linhas de contorno na região abaixo do gráfico. A
chamada das mesmas é semelhante ao mesh e ao surf.
Caso o usuário deseje ver apenas o contorno da função estudada pode
usar o comando contour que gera apenas as linhas de contorno, e possui
chamada semelhante ao mesh e surf. A função contour mostra a função em 2D,
e para mostrar a função em 3D a função usada deve ser contour3.
O exemplo a seguir mostrará todas as funções vistas nesse tópico com
auxílio da função subplot, para que facilite a identificação das diferenças, que
embora sejam sutis, existem. O resultado do código é a figura 6.9.
figure('Name', 'gráficos 3D', 'color', 'white')
subplot(3,2,1)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
mesh(z)
title('Mesh')
subplot(3,2,2)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
surf(z)
title('Surf')
subplot(3,2,3)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
meshc(z)
title('Meshc')
subplot(3,2,4)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
surfc(z)
title('Surfc')
subplot(3,2,5)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
contour(z)
title('Contour')
subplot(3,2,6)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
contour3(z)
title('Contour3')
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 94
Figura 6.9: Exemplo de mesh, surf, meshc, surfc, contour e contour3 para um gráfico 3D.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 95
Exercícios de fixação
1. Para a função x = sin(t), com -3π < t < 3π, use o comando plot para exibir o
gráfico e associado a ele os seguintes comandos para exibir o eixo.
a) axis off
b) axis on
c) axis square
d) axis tight
e) axis equal
f) axis ([ -pi pi -1 1])
2. Ao se deparar com um gráfico que possui difícil definição, inicialmente pode-se
tentar diminuir o intervalo de acréscimo dos valores, para que o mesmo
apresente melhor nitidez. Entretanto muitas vezes isso pode não ocorrer. O que
é recomendado nessas situações é o uso do comando fplot. Transcreva o
exemplo a seguir e tire suas conclusões:
x = 0:0.01:1; %teste com acréscimo de 0.01, 0.001 e 0.0001
subplot(2,1,1)
plot(x, cos(1./x))
title('utilizando o plot');
subplot(2,1,2)
fplot('cos(1/x)', [0 1]) %não é necessário colocar ‘cos1./x’ title('utilizando o fplot');
3. No exemplo do subplot, faça os gráficos aparecerem de forma que na primeira
linha apareça dois gráficos lado a lado, o do seno(x) e cosseno(x), na segunda
linha apareça apenas o sen(t).cos(t), ocupando o mesmo espaço dos dois
gráficos da primeira linha, e na terceira linha apareça sen(t)xcos(t), também
ocupando o mesmo espaço que os dois primeiros gráficos.
4. No exemplo feito para aprendizado do comando bar, experimente substituir o
comando bar por barh, bar3 e bar3h para verificar o que ocorre na exibição dos
resultados.
5. Em uma cidade, as temperaturas médias nos dez primeiros dias foram as
seguintes, em Celsius: 24, 27, 26, 29, 20, 19, 22, 25, 29, 31. Mostre um gráfico em
barra com as temperaturas da cidade estudada nesses dias.
6. Comandos exclusivos para gráficos do tipo pizza são o explode e o pie3. O pie3
é semelhante ao bar3, mostrado na questão anterior. O explode, entretanto,
tem como objetivo destacar fatias da pizza, de forma que fiquem separadas da
figura inicial. Experimente usar o seguinte comando no exercício do gráfico em
pizza. Obs: o comando gtext apenas funciona em gráficos 2D.
explode = [0 0 0.5 0 0]
porcentagem_de_alunos = [18 22 13 27 20]
grafico_pizza = pie(porcentagem_de_alunos, explode)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 96
7. O MATLAB® possui uma ferramenta de animação de gráficos comet (2D) e
comet3 (3D). Experimente utilizá-los com os seguintes exemplos abaixo. Obs:
Para que o comet funcione bem, deve-se utilizar um incremento muito pequeno
para visualização do andamento do gráfico.
% Caso 2D
t = -pi:pi/200:pi
x = sin(cos(tan(t)))-cos(tan(sin(t)))-tan(cos(t).*sin(t));
comet(t,x)
% Caso 3D
t = 0.5*pi:pi/600:5*pi;
x = cos(4*t);
y = sin(5*t);
z = 0.5*t;
comet3(x,y,z)
% Outro caso 3D
t = 0:0.1:100;
x = sin(t).*exp(-t/10);
y= cos(t).*exp(-t/14);
z = t;
comet3(x,y,z);
8. Utilize as ferramentas que estão localizadas na barra de ferramentas de figura.
Deduza a utilidade de cada uma quando utilizando-as em algum gráfico
estudado anteriormente, de preferência 3D.
9. Utilize os comandos cylinder, sphere e ellipsoid de forma que gerem uma
superfície, e depois mostre-a usando algum dos comandos de visualização de
superfície. Após criar a esfera, perceba a importância da utilização de eixos
adequados, como através do axis equal.
10. Utilize o comando surf(peaks(60)), e verifique o que ocorre na visualização
quando se utiliza os seguintes comandos: >>shading interp >>shading flat e
>>shading faceted.
11. Ainda com o exemplo anterior, aprenda a modificar a escala de cores utilizada.
O comando para tal realização é o colormap, que deve ser seguido de um
argumento de que cores utilizar. Ex: >> colormap(colorcube). Teste os seguintes
argumentos: hot, gray, spring, autumn, summer, winter, bone, white, hsv
(padrão), flag e pink. Não se esqueça de inserir a colorbar (na barra de
ferramentas) para visualização dos valores na figura.
12. Embora não seja intuitivo fazer gráficos de superfícies no MATLAB®, o usuário
pode fazer tais gráficos utilizando o comando meshgrid, de maneira simples. O
código abaixo está escrito para exibir uma superfície em questão, deixando os
demais exemplos para o leitor desenvolver oportunamente.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Instrutor: Fernando Wesley
Recife/PE - 2012 97
a) f = -xy exp(-(x²+y²)); -2<x<2 e -2<y<2
[x,y] = meshgrid(-2:0.1:2, -2:0.1:2);
f = -x*y*exp(-(x.^2+y.^2));
surf(x,y,f); xlabel('x'); ylabel('y'); grid on
b) f = (x – 5)² + (y )²; 4<x< 6 e -1<y<1
c) f = (x – cos(x))² + (y + sen(y))² - (xy); -2<x<6 e -2<y<6
d) f = x exp(x² - y²); -2<x<2 e -2<y<2
e) f = cos(x).sen(y); -π<x<π e –π<y<π
f) f = exp(cos(x.(cos(exp(y)))); -10<x<10 e -5<y<5
g) f = cos(xy) + sen(x²) + exp(-y²); 4<x<7 e 2<x<5
13. Funções como surf e mesh podem exibir os resultados de função de bessel. Um
exemplo está no código a seguir. Verfique o que ocorre quando se muda o
intervalo do meshgrid, e o termo de soma (0.03).
[x,y] = meshgrid(-5:0.5:5);
f = abs(besselj(0,abs(x)+abs(y))) + 0.03;
surfc(x,y,7*log(f));
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
98
Capítulo 7 – MATLAB® para análises numéricas
Nesse capítulo, o objetivo é utilizar as funções do MATLAB® para auxiliar
em cálculos de valores máximos e mínimos de funções, derivadas e integrais
entre outros dados.
7.1 Diferenciação
No MATLAB® as diferenciações podem ser realizadas de modo
simbólico. Caso o usuário necessite do resultado numérico, recomenda-se
verificar o resultado simbólico e efetuar a substituição do resultado de maneira
manual.
Para derivada de expressões simbólicas (apenas o resultado escrito),
comumente utiliza-se o diff e o divergence.
7.1.1 Derivadas simbólicas - Diff
Para chamada do diff, é importante que antes da sintaxe da função, o
usuário construa um objeto simbólico utilizando o comando syms seguido do
nome da variável desejada (ex.: syms x). A variável simbólica escrita deve ser a
utilizada quando a função for chamada para a diferenciação da maneira literal
ou da maneira numérica.
As sintaxes de escrita são as seguintes:
syms x – declara x como variável simbólica
diff(expressão) – deriva em relação à variável simbólica
declarada pelo usuário
diff(expressão, y) – deriva a expressão em relação à variável y
(também declarada simbolicamente pelo usuário)
diff(expressão, n) – deriva a expressão n vezes, sendo n um
número inteiro.
diff(expressão, y, n) – deriva a expressão em relação a y n
vezes.
Como exemplos:
>> syms x
>> y = sin(x)
y = sin(x)
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
99
>> r = diff(y)
r = cos(x)
Derivada de 2 sen(x)² em relação a y.
>> syms x
>> diff(2*sin(x)^2)
ans = 4*cos(x)*sin(x)
Para a derivada de (2 sen(x))², o resultado se mostra diferente:
>> syms x
>> diff((2*sin(x))^2)
ans = 8*cos(x)*sin(x)
Para calcular a derivada segunda da expressão acima em relação a x,
utiliza o argumento 2 após o comando diff.
>> syms x
>> diff((2*sin(x))^2, 2)
ans = 8*cos(x)^2 - 8*sin(x)^2
Caso se tenha uma função que varie simultaneamente em relação à x e a
t, e deseja-se calcular a derivada da mesma em relação à variável t, utiliza-se
como argumento o t que deve ser declarado de forma simbólica anteriormente.
Ex.: Para a função xt² sen(x).
>> syms x t
>> y = t^2*x*sin(x)
y = t^2*x*sin(x)
>> r = diff(y,t)
r = 2*t*x*sin(x)
Calculando-se a derivada da mesma função anterior duas vezes em
relação a t, a maneira de inserir os argumentos deve ser feita de seguinte modo.
>> r = diff(y,t,2)
r = 2*x*sin(x)
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
100
Ainda se pode derivar a expressão acima em relação à x e a t
concomitantemente. Entretanto a função diff aceita no máximo três
parâmetros, de forma tal que o usuário no poderá derivar uma função em
relação a mais de duas variáveis de apenas uma vez. Nesse caso é facultado ao
usuário realizar várias etapas para chegar no resultado desejado.
>> r = diff(y,x,t)
r = 2*t*x*sin(x)
Caso o usuário insira uma expressão que não seja simbólica, o resultado
será fornecido na forma de matriz vazia. Isso ocorrerá mesmo se o valor inserido
for numericamente definido no programa.
>> diff(cos(5))
ans =
[]
7.1.2 – Função jacobian
A função jacobian, é utilizada para calcular a matriz jacobiana da função
é semelhante à função diff, vista anteriormente, mas é utilizada para calcular o
gradiente da função em relação às suas dimensões. É necessário inserir as
variáveis simbólicas nesse caso.
A sintaxe da função jacobian é a seguinte:
jacobian(f,v) – onde f é a função desejada e v é o vetor desejado para
derivação. O jacobiano pode ser encontrado para casos com duas e três
dimensões.
Os exemplos a seguir fornecem compreensão sobre o comando jacobian.
Em duas dimensões:
>> syms x y
>> r = sin(x); s = cos(y)
s =
cos(y)
>> J = jacobian([r;s], [x y])
J =
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
101
[ cos(x), 0]
[ 0, -sin(y)]
Em três dimensões:
>> syms r l f
>> x = r*cos(l)*cos(f); y = r*cos(l)*sin(f); z = r*sin(l);
>> J = jacobian([x; y; z], [r l f])
J =
[ cos(f)*cos(l), -r*cos(f)*sin(l), -r*cos(l)*sin(f)]
[ cos(l)*sin(f), -r*sin(f)*sin(l), r*cos(f)*cos(l)]
[ sin(l), r*cos(l), 0]
7.2 – Limites – função limit
O limite representa de forma matemática a forma que uma função se
comporta quando a mesma se aproxima de um determinado valor. Os limites
são utilizados de maneira ampla no cálculo diferencial e na análise numérica.
Para o MATLAB® fornecer os limites também é necessário que haja a
definição das variáveis simbólicas (syms) antes do uso da função limit. A sintaxe
da função limit é a seguinte:
syms x t h – declara as três letras como variáveis simbólicas
limit(F,x,a) – Calcula o limite da função F quando o valor de x
é a.
limit(F) – Calcula o limite da função tomando a = 0
limit(F,x,a, ‘right’) ou limit(F,x,a,’left’) – Calcula o limite
da função F utilizando o valor a na direita ou esquerda.
Os exemplos a seguir exemplificam o uso da função limit.
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
102
>> syms x;
>> limit(sin(x)/x)
ans =
1
Quando não há definição do valor desejado para o ‘a’, o limite é
calculado para 0.
>> syms x
>> limit(cos(x)/x)
ans =
NaN
Para calcular o limite da função F(x) = x-2/(x²-4) quando x tende a 2, as
seguintes linhas de comando podem ser utilizadas.
>> syms x
>> limit((x-2)/(x^2-4),2)
ans =
1/4
Para calcular os limites da função 1/x à direita e à esquerda quando
ambos os limites tendem a zero, o código a ser utilizado é o seguinte:
>> syms x
>> limit(1./x,x,0,'right')
ans =
Inf
>> syms x
>> limit(-1./x,x,0,'left')
ans =
-Inf
Caso haja dúvida por parte do leitor a respeito dos valores acima, pode-
se criar um gráfico para mostrar o comportamento da função 1/x.
>> x = -1:0.01:1;
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
103
>> y = 1./x;
>> plot(x,y)
Como resultado surge o seguinte gráfico:
Figura 7.1: Gráfico da função f = 1/x
Ainda pode ser calculado o limite de varias funções de maneiras
consecutivas, inserindo-as em um vetor, onde cada elemento deve representar
uma função, no caso o vetor do exemplo posterior será o v(x), e as funções
presentes nele serão (1 + a/x)^x, exp(-x) e cos(x)*sin(-x). O objetivo é calcular o
limite das funções quando x tende a infinito pela esquerda.
>> syms x
>> v = [(1 + a/x)^x, exp(-x), cos(x)*sin(-x)]
v =
[ (a/x + 1)^x, 1/exp(x), -cos(x)*sin(x)]
>> limit(v,x,inf, 'left')
ans =
[exp(a), 0, NaN]
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
104
7.3 – Integração – função int
A integração ou anti-derivada de uma função pode ser encontrada
através do comando int, abreviação do nome integrate que representa a palavra
integração em inglês.
O MATLAB® é capaz de calcular integrais de maneira definida e
indefinida, imprimindo os resultados após o calculo dos mesmos. Da mesma
forma que para as funções anteriores, é necessário que o usuário represente as
variáveis simbólicas para cálculo das funções.
A sintaxe da função int é mostrada abaixo:
Os exemplos a seguir demonstram a maneira de utilização da função int.
Para calcular a função resultante da integração do sen(x):
syms x – cria a variável x simbólica
int(s) – Integral indefinida da função s em relação à sua
variável simbólica
int(s,v) – Integral indefinda da função s em relação à variável
simbólica v.
int(s,a,b) – Integral definida da função s em relação à sua
variável simbólica entre os limites de integração a e b que pode ser
variável double ou escalares simbólicos.
int(s,v,a,b) – Integral definida da função s em relação à v com
valores calculados entre os limites de integração a e b que podem ser
double ou escalares simbólicos.
>> syms x
>> int(sin(x))
ans =
-cos(x)
Tendo-se a função sen(xt), deseja-se obter a integral em relação a x.
>> syms x t
>> int(sin(x*t))
ans =
-cos(t*x)/t
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
105
Utilizando-se a mesma função acima, deseja agora obter a integral da
função em relação à variável t.
>> syms x t
>> int(sin(x*t),t)
ans =
-cos(t*x)/x
Um caso interessante ocorre quando se deseja obter a integral de x^n. A
mesma pode ser log(x), se n= -1 e (xn+1)/(n+1) para os casos contrários. O
resultado impresso na janela de comando do MATLAB® é o seguinte neste
caso:
>> syms x n
>> int(x^n,x)
ans =
piecewise([n = -1, log(x)], [n <> -1, x^(n + 1)/(n + 1)])
A integral indefinida tem algumas restrições em relação ao calculo de
derivadas realizado no MATLAB®. De forma geral uma integral pode existir,
mas o software pode não ser capaz de encontra-la. Também há o caso do
software não possuir memória suficiente para realizar o calculo, e o mesmo
deve ser realizado em um computador com memória superior.
Para cálculo da integral definida, deve-se possuir a função desejada e os
limites de integração (condições de contorno).
Para a função f(x) = x², e condições de contorno a= 0 e b = 1, pode-se
encontrar a integral definida da seguinte forma.
>> syms x
>> f = x^2
f =
x^2
>> a = 0
a =
0
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
106
>> b = 1
b =
1
>> int(f,a,b)
ans =
1/3
No caso de uma função mais complexa, f(x) = log(x)*sqrt(x) com
condições de contorno entre 0 e 3, o código para compilação e resultado é
mostrado a seguir:
>> syms x
>> f = log(x)*sqrt(x);
>> a = 0;
>> b = 3;
>> res = int(f,a,b)
res =
3^(1/2)*(log(9) - 4/3)
Outro exemplo é para a função f(x) = exp(x)*x²/7 com condições de
contorno entre 1 e pi:
>> syms x
>> f = exp(x)*x^2/7;
>> a = 1;
>> b = pi;
>> s = int(f,a,b)
s =
(exp(pi)*(pi^2 - 2*pi + 2))/7 - exp(1)/7
De forma geral, após o aprendizado dos comandos e do uso das variáveis
simbólicas, é possível utilizar o MATLAB® para os cálculos de limites, derivadas
e integrais dentro das funções matemáticas mais comuns.
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
107
EXERCÍCIO APLICADO
Encontrar assíntotas, pontos máximos e mínimos e ponto de inflexão da
função abaixo:
Para criar a função de maneira simbólica, utilizam-se os comandos
abaixo:
% criação da função de modo simbólico
syms x
num = 3*x^2 + 6*x - 1;
den = x^2 + x - 3;
f = num/den;
Para visualização do gráfico, o comando que deve ser utilizado é o
ezplot. O ezplot é utilizado para os casos onde se trabalha com a variável x e o
gráfico resultante apresentará como exibição padrão eixos x e y limitados entre
-2π e 2π. As funções que possuem o ez indicam que são ‘easy to use’ (fácil para
usar), e podem ser plotadas apenas usando como argumento a função
estudada. Utilizando o comando ezplot(f), a figura resultante é:
Figura 7.2 – Uso do ezplot para visualização da função (3x² + 6x – 1)/(x² + x – 3)
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
108
Para encontrar as assíntotas verticais e horizontais do gráfico, o usuário
deve fazer o seguinte. A assíntota horizontal é encontrada tomando o limite
da função f quando x tende a infinito e menos infinito. A assíntotal vertical
pode ser encontrada quando o numerador da função tem limite zero.
%cálculo e exibição das assíntotas horizontais e verticais
ah1 = limit(f,inf);
ah2 = limit(f,-inf);
av = solve(den);
figure('name', 'Assíntotas', 'number', 'Off')
ezplot(f)
hold on
% Plota assíntota horizontal
plot([-2*pi 2*pi], [double(ah1) double(ah2)],'g')
% Plota assíntotas verticais
plot(double(av(1))*[1 1], [-5 10],'r')
plot(double(av(2))*[1 1], [-5 10],'r')
title('Assíntotas Vertical e Horizontal')
xlabel('eixo x')
ylabel('eixo y')
hold off
Do código acima tem-se que as assíntotas horizontais (ah1 e ah2) tem o
mesmo valor, sendo assim, uma única reta que corta o gráfico de forma
horizontal. Em relação às assíntotas verticais, o cálculo das raízes do
denominador fornecem duas raízes e assim, dois valores para assíntotas
verticais.
Para ambos os casos, é necessário a conversão do valor da encontrado
para double, visto que desejamos utilizar o comando plot. A figura 7.3 mostra a
função estudada e suas assíntotas verticais na coloração vermelha e a assíntota
horizontal na coloração verde. Utilizou-se o comando plot limitando os eixos de
exibição do gráfico para os resultados, e no caso da assíntota vertical,
multiplicou-se por [1 1] para manter o valor na escala original.
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
109
Figura 7.3 – Exibição das assíntotas horizontal e vertical da função (3x² + 6x – 1)/(x² + x – 3).
Para encontrar pontos máximos e mínimos da função, devemos derivar a
função inicial, igualar a zero e encontrar as raízes. De tais raízes obteremos os
pontos máximos e mínimos da função.
% calculos de pontos máximos e mínimos
flinha = diff(f); %derivada da função f em relação a x
flinha = simplify(flinha); %auto-organização da função
pretty(flinha) %exibição da função resultante na janela de
comando
crit_pts = solve(flinha);
figure('name', 'Ptos máximo e mínimo', 'number', 'On')
ezplot(f)
hold on
plot(double(crit_pts), double(subs(f,crit_pts)),'ro')
title('Máximo e Mínimo de f')
text(-5.5,3.2,'Mínimo Local')
text(-2.5,2,'Máximo Local')
hold off
No código acima, inicia-se utilizando diff, para derivar simbolicamente a
nossa função estudada, após isso simplify é utilizado para organizar o
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
110
resultado da função anterior, que nem sempre (raramente) está na forma mais
organizada possível. Outra função interessante é a pretty, que exibe na janela
de comando de maneira organizada o argumento que foi utilizado nela. É
aconselhado ao usuário testar as funções acima para conhecê-las
individualmente.
A função solve é utilizada para fornecer o resultado das raízes da função
utilizada como argumento. A utilidade dela é a mesma da função roots, mas a
função solve é utilizada para achar raízes de expressões simbólicas, como a que
estamos trabalhando. O resultado dela é um vetor contendo um número de
raízes proporcional ao grau do polinômio estudado.
A figura resultante do código acima é a seguinte:
Figura 7.4 – Pontos máximo e mínimo da função (3x² + 6x – 1)/(x² + x – 3)
Além dos ponto máximo e do ponto mínimo, é facultado ao usuário
encontrar o ponto de inflexão. O mesmo pode ser encontrado derivando-se a
função original duas vezes e igualando o resultado a zero. A lógica do código é
a mesma para o caso do ponto máximo e mínimo, e está descrito logo a seguir:
Introdução ao MATLAB®- POLI Júnior Engenharia Capìtulo 7
Instrutor: Fernando Wesley Recife/PE - 2012
111
%calculo do ponto de inflexão
flinha2 = diff(flinha);
flinha2 = simplify(flinha2);
pretty(flinha2)
pt_inflx = solve(flinha2);
double(pt_inflx)
inflx = (pt_inflx(1));
figure('name', 'Pto de inflexão', 'number', 'On')
ezplot(f)
hold on
plot(double(inflx), double(subs(f,inflx)),'bo')
title('Ponto de inflexão de f')
text(-5,2,'Ponto de inflexão')
hold off
Como resultado, a figura fornecida com o ponto de inflexão é a seguinte:
Figura 7.5 – Ponto de inflexão da função (3x² + 6x – 1)/(x² + x – 3)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
112
Capítulo 8 – Simulink
8.1 – Introdução
O Simulink (Simulation and Link) é uma extensão do MATLAB®. A sua
utilidade é oferecer modelagens, simulações e analises de sistemas dinâmicos
através de uma interface e gráfica (GUI).
O Simulink se torna simples de operar devido às suas características de
operações ‘click-and-drag’ (clicar e arrastar) com o mouse. O Simulink também
possui uma biblioteca com diversas ferramentas (toolboxes) que podem ser
utilizados em situações específicas.
A interface simples do Simulink é semelhante àquela que ilustra uma
cadeia de operações feita com lápis e papel, sendo o sistema representado
através de linhas e blocos. Cada bloco utilizado representa alguma operação
específica, e as linhas mostram a ordem na qual as operações devem ser
executadas.
8.2 – Inicialização do Simulink
Para iniciar o Simulink, é necessário possuir o MATLAB® instalado em
seu computador. Abrindo o MATLAB®, O usuário deve clicar no ícone
destacado na figura 8.1, presente na barra de ferramentas, na interface principal
do MATLAB®.
Figura 8.1 – Ícone representativo do Simulink
Após o clique no ícone em questão, será aberta uma janela que pode ser
verificada na figura 8.2, que contém os principais modelos para construção dos
blocos no Simulink. Nela podem ser vistos comandos como a criação de um
novo arquivo, a janela de busca de blocos, a janela de descrição, a biblioteca e o
conjunto de blocos do MATLAB®.
Caso o programador deseje visualizar mais opções de blocos, pode clicar
no sinal (+) presente à esquerda dos toolboxes, presente na biblioteca do
MATLAB®. Boa parte dos blocos são muito específicos, e utilizados somente em
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
113
situações especiais. Quanto aos blocos gerais, será visto uma introdução neste
capítulo.
Figura 8.2 – Biblioteca do Simulink
Para criação de um novo modelo, o usuário pode clicar no ícone que
representa a criação de novos modelos, visto na figura 8.3, ou pode utilizar o
comando CTRL+N, responsável pela criação de uma janela para criação dos
modelos.
Figura 8.3 – Ícone para criação de novos modelos do simulink
Após a chamada da nova janela, figura 8.4, a mesma se apresentará em
branca, para que o usuário possa inserir os blocos desejados de forma que
obtenha o sistema em questão. Na parte em branco da janela devem ser
inseridos todos os blocos de forma que o usuário possa ter todo o seu sistema
representado internamente.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
114
É recomendado que o usuário possa explorar e utilizar os blocos do
MATLAB® de forma que, embora não conheça a finalidade específica do bloco
em questão, se familiarize com a forma de exibição, de obtenção de dados e do
fornecimento dos resultados. Além disso, o usuário está livre para conhecer
blocos que são dependentes e independentes do tempo.
Figura 8.4 – Janela na qual devem ser inseridos os blocos do Simulink
8.2.1 – Blocos principais
No Simulink, alguns blocos podem ser ditos ‘principais’, pois são blocos
básicos é podem ser utilizados em praticamente qualquer ocasião na criação de
qualquer diagrama de blocos. Tais blocos são os seguintes: Somador (Sum),
Ganho (Gain), Constante (Cte), Integrador (Integrator), Derivativo (Derivative),
Bloco Multiplicativo, Bloco de funções e Osciloscópio (Scope).
Para que possamos compreender a utilidade de cada bloco, é necessário
haver um conceito de parâmetros de entrada e parâmetros de saída. Os
parâmetros de entrada são valores necessários para que o programa funcione
corretamente. Parâmetros de saída são os valores que são fornecidos como
resultado do programa.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
115
Alguns blocos podem necessitar apenas de parâmetro de entrada, como
é o caso do osciloscópio, visto que para mostrar os valores necessita-se apenas
de inserí-los no sistema. Alguns fornecem apenas parâmetros de saída, como é
o caso do bloco constante. Ainda há blocos que necessitam dos dois
parâmetros, como o caso dos que realizam operações, como o ganho. Por fim,
existem blocos que fornece saída e podem pedir várias entradas, como o bloco
multiplicativo e o ganho.
8.2.1.1 – Bloco Sum
O bloco Sum (somador) é utilizado para a operação de soma entre vários
valores, como pode ser visto na figura 8.5. A entrada desse bloco pode ser de
sinais positivos e negativos, cabendo ao programador escolher na janela de
parâmetros de blocos, clicando duas vezes sobre o mesmo. O mesmo pode ser
selecionado na biblioteca de Blocos Comumente Utilizados (Commonly Used
Blocks)
Figura 8.5 – Bloco Sum
8.2.1.2 – Bloco Gain
O bloco Gain (ganho) é utilizado para multiplicação do parâmetro de
entrada por algum valor constante que seja real.
Figura 8.6 – Bloco Gain
8.2.1.3 – Bloco Constant
O Bloco Constant (Constante) é utilizado para fornecer ao sistema
montado um valor que não varia com o tempo.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
116
Figura 8.7 – Bloco constant
8.2.1.4 – Bloco Integrator
O Bloco Integrator (Integrador) é utilizado em um sistema para o
fornecimento da integral do sinal fornecido em um certo intervalo de tempo.
Pode ser utilizado, por exemplo, para resolução de equações diferenciais.
Figura 8.8 – Bloco Integrator
8.2.1.5 – Bloco Derivative
O bloco derivative (derivativo) é utilizado para encontrar a derivada em
relação ao tempo do sinal utilizado. O Bloco derivative pode ser encontrado na
biblioteca de funções contínuas.
Figura 8.9 – Bloco derivativo
8.2.1.6 – Bloco Product
O bloco product (Product) é utilizado para multiplicar ou dividir
diferentes sinais provenientes ou não da mesma fonte. O sinal de saída fornece
o resultado da operação realizada dentro do bloco.
Figura 8.10 – Bloco Product
8.2.1.7 – Bloco Math Function
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
117
O Bloco Math Function (Função Matemática) é utilizado quando se
deseja obter um sinal multiplicado por alguma função matemática que use o
sinal como parâmetro de entrada. Entre as funções disponíveis, existe
exponencial, logaritmos, raiz quadrada entre outras. O bloco pode ser
encontrado na biblioteca de funções matemáticas.
Figura 8.11 – Bloco Math Function
8.2.1.8 – Bloco Scope
O Bloco Scope (Osciloscópio) é responsável por fornecer resultados
gráficos do parâmetro desejado em função do tempo.
Figura 8.12 – Bloco Scope
8.2.2 – Outros blocos
Existem blocos que são importantes ao usuário a ciência de existência,
pois em alguns momentos pode ser necessário a utilização dos mesmos. Nesse
item citaremos os seguintes blocos: Sin, Step, Ramp e Random Number. Todos
esses blocos podem ser encontrados na biblioteca Sources, que possuem
apenas parâmetros de saída.
8.2.2.1 – Bloco Sin
O bloco Sin (seno) permite ao usuário inserir, dentro de uma operação
matemática a função seno (ou cosseno) variando com o tempo. O Bloco Sin
apresenta apenas parâmetro de saída, e os parâmetros da função devem ser
inseridos na janela de parâmetros.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
118
Figura 8.13 – Bloco Sin
8.2.2.2 – Bloco Step
O bloco Step é responsável para o aparecimento da função degrau. A
definição da função degrau é a seguinte:
O bloco que representa a função degrau é o seguinte:
Figura 8.14 – Bloco Step
8.2.2.3 – Bloco Ramp
O Bloco Ramp representa a função rampa. Da mesma forma que a função
degrau, os valores só aparecem a partir de um certo valor de tempo definido
pelo usuário de forma prévia. A definição da função rampa é a seguinte:
Figure 8.15 – Bloco Ramp
8.2.2.4 – Bloco Random
O Bloco Random é utilizado para gerar um número aleatório, com média
e variância definidas pelo usuário. Os valores também são gerados para
intervalos de tempo definidos pelo usuário.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
119
Figura 8.16 – Bloco Random
8.3 – Exemplos
Para verificar a utilidade dos blocos, serão mostrados sistemas simples, e
após eles, aumentar a complexidade do estudo.
O primeiro a ser estudado é o da função seno. Para isso será montado
um diagrama de blocos utilizando o bloco ramp (para criar os valores que serão
argumentos para a função seno), o bloco sin (que necessita de parâmetro de
entrada e de saída), e o bloco scope, necessário para a visualização da função.
Figura 8.17 – Montagem do sistema com função seno
Após o usuário selecionar o tempo limite de execução no espaço
reservado na barra de ferramentas, que vem com padrão de 10 segundos (ou o
intervalo de tempo desejado), o usuário deve clicar sobre a função scope para
verificar o gráfico resultante.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
120
Figura 8.18 – Gráfico da função seno no oscilóscópio
Digamos que se deseja verificar a função seno e exponencial utilizando o
mesmo osciloscópio para verificar o resultado. A montagem deve ser feita da
seguinte maneira. Primeiramente será necessário ao usuário inserir o bloco de
função exponencial, encontrado na biblioteca de funções matemáticas ao
diagrama de blocos que é construído.
Após isso, é necessário inserir o bloco rampa como parâmetro de entrada
do bloco da função exponencial. Mas para que os dois valores possam ser vistos
no osciloscópio, é necessário que se mude da visualização de um eixo para dois
eixos. O mesmo pode ser feito da seguinte forma.
Clica-se para abrir o osciloscópio e com ele aberto, clica-se no botão que
é responsável por abrir os parâmetros do osciloscópio. Após isso deve-se alterar
para 2 o valor de eixos aparentes. O diagrama de blocos ficará com a aparência
da figura 8.19. O resultado pode ser verificado clicando sobre o osciloscópio. O
resultado será conforme a figura 8.20.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
121
Figura 8.19 – Sistema com função exponencial e função seno
Função 8.20 – Gráfico da função seno e exponencial
Para último caso, efetuaremos algumas alterações. A primeira é em
relação à função seno, que receberá um valor aleatório somado a ela. A
segunda é a substituição da função exponencial pela função cosseno, sendo
que o gráfico desejado é de duas vezes a função cosseno.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
122
Para encontrarmos a função cosseno, ao invés de puxarmos um bloco
responsável por efetuar tal cálculo, usaremos o integrador para integrar a
função seno para a função cosseno. E em relação ao bloco de valores aleatórios,
na biblioteca sources deve-se puxar o bloco Random Number, responsável por
gerar um número aleatório. A montagem dos blocos deve gerar um sistema
semelhante da figura 8.21. A multiplicação dos valores pode ser efetuada a
partir do bloco gain, utilizando o valor 02 como responsável pela multiplicação.
Figura 8.21 – Sistema proposto com função seno adicionado de valor aleatório e dobro da
função cosseno.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
123
Figura 8.22 – Figura resultante do sistema proposto na figura 8.21.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Instrutor: Fernando Wesley Recife/PE - 2012
124
8.4 – Exercícios de Fixação
1. A partir do simulink, crie um diagrama de blocos que mostre em
gráfico as seguintes funções.
a) x²
b) sen(x) + x³
c) x – 2(x² + 4)
d) x(cos(x)) + x² - 4/x
2. Do exercício acima, utilize o bloco MUX para criar um vetor com as
quatro funções acima, de forma que as mesmas sejam exibidas em uma janela
do osciloscópio. Após isso retire o MUX e deixe as funções aparecendo em
quatro janelas diferentes.
3. Um parâmetro que é importante para análise e controle de processos é
a função transferência, que mede o quanto varia a entrada e saída de um
sistema. A função transferência de primeira ordem é dada da seguinte forma:
k/(as + b), onde k, a e b são constantes. Uma função de segunda ordem é da
seguinte maneira: k/(as² +bs+c), onde k, a, b e c são valores constantes.
Encontre o bloco responsável pela função transferência e teste-o com diversos
valores para verificar como é a resposta do sistema para diferentes valores
dessa função.
4. O simulink pode ser utilizado para a resolução de equações
diferenciais. Resolva as seguintes equações diferenciais utilizando o simulink.
a) y’ + sen(y) – y
b) 3y’ – cos(3y) + 4sen(exp(5)) + 8
c) y’’ – (y’)³ - cos(y’) + sen(y + 7) – log(y)/sin(y’)
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
125
Capítulo 9 – Guia de Interfaces
Nos módulos anteriores aprendemos a construir códigos de programa
em script, que eram executados pelo próprio editor do programa e em seguida
a criar funções que eram executadas pela janela de comandos. Porém, executar
códigos pelo editor ou pela janela de comandos pode trazer problemas, tais
como:
Edição involuntária (apenas pelo editor);
Problemas de visualização de resposta;
Interface poluída visualmente.
O fato de estar com o editor aberto leva a possibilidade de edição
involuntária do código seja por uma simples batida inconsciente no teclado ou
alterações propositais. Como a interface do editor não nos dá uma resposta do
status de execução do código, pois sempre é necessário visualizar as respostas
do sistema na janela de comandos ou caixas de diálogos que possam ser
chamadas pelo programador. Além disso, o fato do editor não atrair
visualmente o operador nos leva a considerar outras opções de interface.
Baseado nesses problemas, este módulo tem a finalidade de introduzir o
leitor nos conhecimentos básicos de criação de interfaces de software através
do MATLAB® via programação orientada ao objeto.
Mas o que é programação orientada ao objeto?
Podemos definir, de maneira simples, programação orientada ao objeto
como um tipo programação onde os elementos podem ser considerados,
dentro de determinado contexto, como objetos, e analogamente podem ser
mutáveis em forma, posição, nome, propriedades, entre outros.
A criação de interfaces gráficas está fundamentada, para este tipo de
programação, em quatro passos:
1. Criação do espaço de locação dos objetos;
2. Escolha, locação e dimensionamento de objetos;
3. Nomeação de objetos;
4. Atribuição de função.
Já a execução da interface é fundamentada em quatro passos:
1. Reconhecimento dos objetos;
2. Assimilação de valores e propriedades;
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
126
3. Execução de funções previamente determinadas;
4. Atribuição de valores e propriedades.
O diagrama da figura 9.1 mostra como se comporta a execução da
interface.
Figura 9.1 – Diagrama de execução de interfaces.
9.1 Criação da Interface
Para os passos de criação de interfaces utilizamos o guia de interfaces
gráficas do MATLAB®, GUI (Graphical User Interface). Para inicializá-lo basta
executar o comando guide (abreviatura de Graphical User Interface Desing
Enviroment). Após esse comando uma janela como mostra a figura 9.2 será
exibida.
Figura 9.2 – Janela inicial do guia de interfaces.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
127
A janela da figura 9.2 é subdividida em duas abas. A aba Create New
GUI é usada quando se deseja criar uma nova interface. Já a aba Open Existing
GUI abre para edição uma interface já existente. Como será a nossa primeira
interface escolha a primeira aba e clique em OK. Observe que uma caixa de
texto, ver figura 9.3, será exibida indicando o status de inicialização do guia.
Figura 9.3 – Caixa de status de
inicialização do guia de interfaces.
Se tudo ocorrer normalmente uma janela para criação de interfaces será
exibida como mostra a figura 9.4.
Figura 9.4 – Guia de criação de interfaces gráficas, GUIDE.
No GUIDE será foco de nosso estudo a barra de objetos, localizada à
esquerda da janela e a barra de ferramentas, localizada entre a barra de menus
e a janela de alocação gráfica.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
128
Para garantir a segurança do que está sendo desenvolvido primeiro
vamos salvar a interface em um diretório previamente escolhido.
Obs.: preferencialmente atribua um nome que seja de fácil associação com as
atribuições do programa. Por exemplo, se for um software que realiza análises
em combustíveis fósseis, AnalisysOil.
ATENÇÃO: não altere o código até se informar de como, onde e o que alterar.
9.2 Escolha, Locação e Dimensionamento de Objeto
A escolha e locação dos objetos deverão corresponder aos propósitos
para o qual sua interface servirá. De forma geral, podemos sempre subdividir os
objetos que serão alocados na área de alocação gráfica em três categorias:
1. Objetos de Assimilação;
2. Objetos de Atribuição;
3. Objetos Inertes.
Os objetos de assimilação são usados para assimilar (obter) informações
acerca do que se pretende. Os de atribuição (recebem) definem valores aos
objetos acerca do que se pretende. E os inertes possuem apenas função
estética. O mesmo tipo de objeto pode ter função dupla ou até mesmo tripla
dentro dessa classificação.
A figura 9.5 é um exemplo de rascunho que nos fornece uma sugestão
de como poderia ficar tal interface.
Figura 9.5 – Diagrama sugerido de criação da interface.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
129
Antes da alocação dos objetos expanda ao máximo a sua área de
alocação gráfica segurando pela alça no canto inferior direito da mesma. Ver
figura 9.6.
Figura 9.6 – Expansão da área de alocação gráfica.
Em seguida vamos adicionar os dois painéis, um para entrada de dados e
outro para saída de dados. Os painéis são usados para agrupar os Static Text,
Edit Text e outros itens de forma mais organizada, por exemplo. È interessante
utilizar o Panel, pois se o usuário necessitar mover os objetos já criados, pode
movê-los todos em um movimento, caso estejam dentro do painel. Clique no
botão Panel na barra de objetos como mostra o detalhe da figura 9.7.
Figura 9.7 – Objeto panel.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
130
Após clicar no objeto retorne à área de alocação gráfica, escolha o local
onde deverá ser colocado o objeto, clique e segure o clique com o botão do
mouse, e arraste para dimensionar. Solte o botão e o objeto será criado. Não se
preocupe em errar a posição e o tamanho, mesmo após a criação o objeto pode
ser alterado facilmente pelas alças de dimensionamento localizadas em seus
vértices.
Para colocar outro painel o mesmo procedimento pode ser executado ou
ainda tente arrastar um objeto similar (o primeiro painel neste caso) com o
botão direito do mouse para outra posição da área. Ao soltar o botão direito do
mouse, uma cópia do objeto inicial será criada.
Após a execução desses passos seu guia de interfaces deverá possuir
aproximadamente a aparência da figura 9.8.
Figura 9.8 – Alocação de painéis.
O próximo passo será a alocação de uma área que servirá para exibir
inicialmente uma figura e posteriormente para exibição de gráficos. O objeto
que possui tais atribuições é o Axes, ver figura 9.9.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
131
Figura 9.9 – Objeto Axes
Para alocação desse objeto proceda da mesma forma que o painel. Após
a execução desses passos seu guia de interfaces deverá possuir
aproximadamente a aparência da figura 9.10.
Figura 9.10 – Alocação de eixos.
Os mesmo passos deverão ser procedidos para alocação dos seguintes
objetos: Check Box, Edit Text, Static Text, Pop-up Menu e Push Button. Tais
itens estão locados na barra de objetos do guia de interface da maneira descrita
na figura 9.11.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
132
Push Button
Edit Text
Pop-up Menu
Static Text
Check Button
Figura 9.11 – locação de vários itens na barra de objetos
Inicialmente os objetos inseridos terão títulos padrão atribuídos pelo
MATLAB®. Esses títulos podem ser alterados assim como outras propriedades
através do Inspetor de Propriedades do objeto. A janela do inspetor pode ser
acionada por um duplo clique no botão esquerdo do mouse. Suas principais
propriedades estão mostradas na figura 9.12
Obs. (1): o objeto Pop-up Menu precisa ser editado para que o mesmo possa
oferecer opções de escolha ao usuário. Os itens de escolhas podem ser
adicionados na propriedade String no inspetor de propriedades e cada escolha
será representada por um número. Assim, a escolha da linha um atribuirá valor
(Value) 1 ao objeto, a escolha da linha dois valor 2, e assim sucessivamente.
Obs. (2): com objetos de marcação como Check Box será atribuído valor
(Value) 1 quando ativado e 0 quando desativado.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
133
Figura 9.12 – Principais propriedades dos objetos pelo inspetor.
Após a alocação de todos os objetos o guia de interfaces e alteração de
suas propriedades ela deverá possuir aproximadamente a aparência da figura
9.13.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
134
Figura 9.13 – Aparência final do guia de interfaces.
Para visualizar a interface propriamente dita digite crtl + t ou clique no
botão RUN da barra de ferramentas.
9.3 Maximização e Minimização
Para tornar a sua janela maximizável ou minimizável acesse o menu
Tools\GUI Options ... na barra de menus. Na propriedade Resize behavior
escolha a opção Proportional como mostra a figura 9.14.
Figura 9.14 – Propriedades de dimensionamento de janela.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
135
9.4 O Botão Executar
Esse botão será responsável pela leitura dos dados no painel de entrada
de dados e pelos cálculos referentes à resolução do problema. Primeiro
precisamos associar tal botão a uma função. Isso é feito na propriedade
CallBack no inspetor de propriedades.
Obs.: O nome inserido na função Callback deve ser idêntico ao da função. Evite
usar caracteres especiais e ponto. Também não use o nome da função como
outro que é conhecido geralmente (ex: for, while, quit), para evitar conflitos
internos.
Para o reconhecimento do objeto da interface usamos o comando
findobj com a seguinte sintaxe, como exemplo:
obj = findobj('Tag','edit1');
Para assimilar usamos o comando get com a seguinte sintaxe, como
exemplo:
tsim = get(obj,'String');
Porém a assimilação do conteúdo do objeto faz atribuição do mesmo a
um texto, tipo char ou string. Se for necessário utilizar esse conteúdo como
número fazemos a mudança de atribuição para a forma de precisão dupla, ou
simplesmente double.
Usamos o comando str2double para efetuar tal mudança. tsim = str2double(tsim);
Para atribuição de uma propriedade, usa-se o comando set especificando
o objeto desejado, a escolha da propriedade e o valor desejado para a
propriedade.
set = (obj, ‘Enable’, ‘on’);
Proceda com esses passos para todos os objetos como mostra o exemplo
a seguir.
function calcular
global s v t
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Importação dos Dados da Interface
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
obj = findobj('Tag','edit1');
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
136
S0 = get(obj,'String'); S0 = str2double(S0); aux = isnan(S0); if aux == 1 errordlg('O valor de S0 não foi definido.','Atenção!'); return end
obj = findobj('Tag','edit2'); V0 = get(obj,'String');
V0 = str2double(V0); aux = isnan(V0); if aux == 1 errordlg('O valor de V0 não foi definido.','Atenção!'); return end
obj = findobj('Tag','edit3'); a = get(obj,'String'); a = str2double(a); aux = isnan(a); if aux == 1 errordlg('O valor de a não foi definido.','Atenção!'); return end
obj = findobj('Tag','edit4'); ti = get(obj,'String'); ti = str2double(ti); aux = isnan(ti); if aux == 1 errordlg('O valor de ti não foi definido.','Atenção!'); return end
obj = findobj('Tag','edit5'); tf = get(obj,'String'); tf = str2double(tf); aux = isnan(tf); if aux == 1 errordlg('O valor de tf não foi definido.','Atenção!'); return end
if tf<=ti errordlg('O valor de tf deve ser maior do que ti','Atenção!'); return end
obj = findobj('Tag','edit6'); dt = get(obj,'String'); dt = str2double(dt); aux = isnan(dt); if aux == 1 errordlg('O valor de dt não foi definido.','Atenção!'); return end
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
137
if dt>=(tf-ti) warndlg('O valor de dt deve ser menor do que o valor do
intervalo','Atenção!'); return end
if dt <= 0 warndlg('O valor de dt deve ser maior do que zero! ','Atenção!'); return end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Cálculo do Espaço e Tempo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t = ti:dt:tf;
s = S0 + V0*t + (a*t.^2)/2; v = V0 + a*t;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Exportação dos Dados para Interface
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
obj = findobj('Tag','edit7'); set(obj,'Enable','on'); s_char = num2str(s(end)); set(obj,'String',s_char);
obj = findobj('Tag','edit8'); set(obj,'Enable','on'); v_char = num2str(v(end)); set(obj,'String',v_char);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Exibição Gráfica
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
obj = findobj('Tag','axes1'); set(obj,'Visible','On');
obj = findobj('Tag','popupmenu1'); popmenu = get(obj,'Value');
if popmenu == 1 warndlg('escolha um gráfico para exibição', 'Atenção') return
elseif popmenu == 2 cla, gca plot(t,s,'r') grid on title('Perfil de Espaço') xlabel('Tempo (seg)') ylabel('Espaço (m)') return
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
138
elseif popmenu == 3 cla, gca plot(t,v,'b') grid on title('Perfil de Velocidade') xlabel('Tempo (seg)') ylabel('Velocidade (m/s)') return
elseif popmenu == 4 cla, gca plot(t,s,'r--',t,v,'b'); title('Perfil de velocidade em azul, Perfil de Espaço em linha
tracejada'); grid on xlabel('Tempo (seg)'); ylabel('Velocidade(m/s) e Espaço(m)'); legend('Espaço', 'Velocidade'); end
Agora o código referente ao botão limpar dados:
function limpar
obj = findobj('Tag','edit1'); set(obj,'String','');
obj = findobj('Tag','edit2'); set(obj,'String','');
obj = findobj('Tag','edit3'); set(obj,'String','');
obj = findobj('Tag','edit4'); set(obj,'String','');
obj = findobj('Tag','edit5'); set(obj,'String','');
obj = findobj('Tag','edit6'); set(obj,'String','');
obj = findobj('Tag','edit7'); set(obj,'String','','Enable','off');
obj = findobj('Tag','edit8'); set(obj,'String','','Enable','off');
obj = findobj('Tag','popupmenu1'); set(obj,'Value',1);
logo = imread('LOGO.jpg'); image(logo); obj = gca; set(obj,'xtick',[],'ytick',[]);
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
139
Por fim, o programa exibirá resultados semelhante à figura 9.15, a seguir:
Figura 9.15: Tela de exibição de resultados
9.5 Barra de Menus
A barra de menus é criada pela ferramenta Menu Editor localizada na
barra de ferramentas. Clicando nela, o usuário pode encontrar uma janela para
edição de menus, mostrada na Figura 9.16.
Figura 9.16 – Janela de edição dos Menus
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
140
Onde Label é a propriedade responsável pela atribuição de nome ao
menu, Tag é a identificação interna para atribuição e assimilação de
propriedades, Accelerator é a definição de atalho e Callback é a função que
será executada quando o menu for escolhido.
Considerações Finais
1. Faça um esboço do seu software para guiá-lo;
2. Não crie nada fora dos padrões comerciais, no caso de uso profissional.
3. Se seu programa for comercializado, crie novas versões e venda também
o suporte a atualizações;
4. Sempre em dúvidas, consulte primeiramente o help do programa.
5. Leia livros especializados em MATLAB® para aprender mais dicas e
comandos úteis.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
141
Exercícios de fixação
1. Verifique as interfaces que já existem no guia de interfaces. Veja o Gui
com auto controles e o Gui com eixos e menu.
2. Utilize a barra de objetos, localizada à esquerda da janela de edição e a
barra de status, localizada acima da janela. Utilize todos os itens que
estão acima, aprendendo a função de cada um na prática.
3. Para o exercício visto no capítulo 9, no tópico 9.4, crie uma barra de
menus na interface estudada que possua a função desligar o programa
(quit), a opção para a janela aparecer fora da interface, de maneira
individual, e opção para o computador escolher dados randômicos, que
sejam coerentes com o programa, e plote o resultado. Faça também uma
melhoria que considere importante para a interface estudada.
4. Faça uma interface para um exemplo onde o usuário deve escolher um
número, e o programa deve mostrar se o número escolhido é certo ou
não, retornando uma imagem verde caso o resultado seja certo e uma
imagem vermelha caso o resultado seja errado.
5. Faça uma interface que deve haver 4 janelas, onde respondem pelo
número 1, 2, 3 e 4. O usuário deve dizer qual a janela o computador
escolheu, mostrando uma imagem positiva, caso o resultado seja certo, e
uma negativa, caso o resultado seja errado.
6. O tipo de jogo de sorte com fins lucrativos visto no caso anterior é
proibido no Brasil devido à razão que você verá a seguir. Utilizando o
programa anterior, faça uma alteração na qual o usuário nunca possa
acertar o resultado escolhido pelo computador, mas os resultados devem
continuar aleatórios. Crie um botão com o nome ‘Ganhe já’. Crie outro
botão com o nome ‘Sorte maior’ na qual o usuário tem apenas 10% de
chance de vencer o jogo, sendo os resultados aleatórios da mesma
maneira. Por fim, coloque outro botão com o nome ‘Primeiro jogo’ no
qual o usuário tem 80% de chance de vencer.
7. Resolva o problema 2.5 utilizando uma interface gráfica, na qual o
usuário escolhe através de radiobuttons ou checkbuttons as unidades nas
quais deve haver a transformação. Qual a diferença entre as duas
escolhas, quando dentro de um ‘button group’, outra opção dentro da
janela de objetos do guia de interfaces.
8. Resolva o exercício de fixação 2.11 através de um guia de interfaces.
Exiba o gráfico da função entre limites definidos pelo usuário.
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Instrutor: Fernando Wesley Recife/PE - 2012
142
9. Exiba gráficos de uma função que o usuário pode escolher. Para isso
forneça a ele as seguintes opções: seno, cosseno, tangente, logaritmo,
exponencial, x^n e uma constante, na qual o usuário escolhe os
argumentos de cada uma delas. A interface ainda deve receber os limites
e mostrar o gráfico resultante ao usuário.
10. Resolva o exercício de fixação 3.8 de forma que o usuário deva
primeiramente selecionar quantos dados deseja inserir no programa (até
o máximo de 10), aparecendo as caixas de texto para inserir após isso
(utilize o enable on/off e o visible on/off). Após isso mostre em
histograma o resultado.
11. Crie um programa de supermercado em MATLAB. Faça o seguinte: Antes
de iniciar é necessário um login (com senha) para que os espaços de
inserir texto e preço fiquem disponíveis a modificação. Após isso digite o
nome do produto e o preço do mesmo, de forma que após a soma possa
ser realizada e seja criada uma lista através de indexação. Ainda, crie um
botão para encerrar as compras, fornecendo ao usuário a opção de pagar
à vista, parcelado (de várias formas) e em cheque pré-datado. Escolhida a
opção, crie a opção que mostra o valor final. Ainda crie um botão para
apagar todos os dados, e outro para log-off do sistema.