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