• Nenhum resultado encontrado

Fundamentos de MATLAB Para Engenheiros

N/A
N/A
Protected

Academic year: 2021

Share "Fundamentos de MATLAB Para Engenheiros"

Copied!
148
0
0

Texto

(1)

Fundamentos do

MATLAB

®

para

(2)

FUNDAMENTOS DO MATLAB

®

PARA ENGENHEIROS

(3)

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.

(4)

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

(5)

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

(6)

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

(7)

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.

(8)

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.

(9)

A inicialização do programa possui tempo que varia conforme a capacidade de processamento do computador utilizado. Quanto maior a capacidade de processamento, menor é o tempo que é necessário para a inicialização do MATLAB®. Ao término da inicialização, na barra de status aparecerá a palavra Ready, indicando que o programa se encontra disponível para ser utilizado.

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

A janela na área de trabalho que nos interessa é a Janela de Comando, onde o prompt especial é exibido. Isto significa que o MATLAB® que está esperando por um comando. O prompt no MATLAB® é indicado pelos caracteres (<<), seguida da barra vertical pulsante. Nesta situação, o usuário identifica a disponibilidade de inserção de comandos no MATLAB®.

Figura 1.4 – Prompt de comandos no MATLAB®

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

1.4 – Ambiente de trabalho

Na área de trabalho do MATLAB® pode-se dividir a configuração da interface gráfica em cinco barras e quatro janelas. As barras são imutáveis e a opção que o usuário possui é de apenas deixá-las ou não visíveis. O MATLAB tem disponíveis cinco barras, sendo quatro delas na parte superior da interface gráfica e a última na parte inferior. A figura 1.5 fornece o posicionamento e o

(10)

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

A primeira barra (no sentido descendente) é a barra de títulos. Nela encontramos o título do programa. Abaixo da barra de títulos se encontra a barra de menus. Através dela podemos acessar todas as ferramentas disponíveis no programa.

A terceira barra no sentido descendente é a barra de ferramentas e está no mesmo nível da barra de endereços. Na barra de ferramentas observamos atalhos para as principais aplicações do programa como copiar, colar, abrir novo editor de texto. Na barra de endereços, os diretórios podem ser acessados através de um sistema de endereçamento similar ao do WINDOWS. Na parte inferior da interface encontramos a barra de status. Nela podemos saber qual a situação de operação do programa.

Em relação às janelas, o usuário possui a oportunidade de modificar a aparência e o local dela no gráfico, proporcionando conforto e praticidade ao usuário. As quatro janelas que existem inicialmente na área de trabalho são o

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

Comandos), Current Directory (Diretório Atual) e Command Window (Janela de Comando). As quatro janelas podem ser vistas na figura 1.6.

(11)

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

1.4.1 Janela Command Window

Na figura 1.6 é possível visualizar quatro janelas dispostas lado a lado. A janela da direita é denominada Command Window, ou simplesmente janela de comando. Nela são executados os comandos principais para a realização de seus trabalhos. Se o sistema não estiver executando uma atividade que utilize toda sua memória, você irá encontrar um prompt indicando que o programa aguarda suas instruções, conforme visto na figura 1.4.

À medida que o usuário digita os comandos na janela de comando os mesmos permanecem nela, incomodado com a grande quantidade de informações o usuário pode desejar apagar os textos desejados da janela. Para isso basta a utilização do comando [>> clc].

(12)

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.

(13)

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.

(14)

d) Nas variáveis não pode haver caracteres especiais (acentos, cedilha, sinais exclamativos ou interrogativos, etc)

e) As variáveis não podem ter o nome de uma função interna do MATLAB® [ex.: if, for, sin, quit]

As funções do MATLAB® devem ser sempre escritas com todas as letras minúsculas (ex: sin, cos, log, plot, median).

O MATLAB contém além das variáveis que são criadas pelo usuário as variáveis especiais, que são comuns no dia-a-dia do programador, são elas:

Inf Infinito (alguma divisão por zero)

NaN Não um Número (pode ser um texto ou valor indefinido 0/0) i e j Número imaginário (sqrt(-1))

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

As constantes Inf e NaN não representam valores numéricos em sua essência. São apenas conceitos desenvolvidos pelo sistema e que precisam ser interpretados de forma correta. Para isso é necessário ser lembrado o conceito de underflow e overflow.

Para as máquinas, cuja capacidade de processamento é limitada e os cálculos são executados de modo numérico, o limite para o valor de zero e o valor de infinito é criado a partir de um limite que dependerá da quantificação que o computador pode medir.

O maior valor real que pode ser encontrado no MATLAB® pode ser encontrado utilizando o comando realmax. Um valor que seja maior do que esse valor real, será interpretado pela máquina como valor infinito, da mesma forma será para algum valor abaixo do valor mínimo, realmin. Para o caso do valor zero, é necessário conhecer sobre a precisão numérica do MATLAB®, através do comando eps. Qualquer valor abaixo do eps não será reconhecido caso a operação executada com valores em uma escala superior, e o resultado para o MATLAB® será considerado como zero.

(15)

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.

(16)

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.

(17)

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

(18)

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 =

(19)

0.0535

As operações no MATLAB® são organizadas em uma ordem de prioridades, que pode ser chamada de hierarquia. A prioridade pode ser visto de acordo com a tabela 1.1.

Operação Nome Prioridade

() Precedência 1º ^ Potência 2º / Divisão à direita 3º \ Divisão à esquerda 4º * Multiplicação 5º + Soma 6º Subtração

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 =

(20)

>> format bank >> var ans = 0.56 >> format short >> var ans = 0.5556

1.9 – Funções Matemáticas Elementares

Abaixo, uma lista com as funções matemáticas elementares do MATLAB®. Fica como sugestão ao aluno a utilização do help para aprender sobre a utilidade de cada uma das funções. Nas funções trigonométricas, a utilização do „d‟ após a função indica que o resultado, ou o argumento de entrada, devem ser em graus „º‟ e não radiano, argumento padrão das funções trigonométricas.

TRIGONOMÉTRICAS

sin cos tan sec csc cot

sind cosd tand secd cscd cotd sinh cosh tanh sech csch coth asin acos atan asec acsc acot asind acosd atand asecd acscd acotd asinh acosh atanh asech acsch acoth

EXPONENCIAL

exp log log10 log2 reallog sqrt ARREDONDAMENTOS

fix floor ceil round mod rem

1.10 – Help

O help é conhecido como o comando mais importante de todo o software, pois considerando as diversas áreas às quais o MATLAB® atende, é praticamente impossível que alguém conheça todos os comandos memorizados. Assim, o comando help consegue atender a todos os públicos

(21)

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.

(22)

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.

(23)

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.

(24)

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)

(25)

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

5. Identifique os erros presentes nas linhas de comando abaixo. a) >> A = [1 2 3 4; 2: 2: 10]

b) >> B = sen(0.92) c) >> C = sin(0,92)

d) >> D = (3 + 5 – 2*cos(pi) – exp(3))/(ln(1)) e) >> Módulo = abs(cos(-22) + 3^4)

(26)

Capítulo 2 – Operações com Matrizes

No capítulo anterior aprendeu-se a trabalhar com escalares, realizando as operações aritméticas de maneira simples, sem necessidade de declaração do formato da variável. O MATLAB® (Matrix Laboratory) considera um escalar como uma matriz de dimensão nula (1x1), mas há a possibilidade de trabalhar com matrizes maiores que apresentam o formato retangular ou quadrado. O objetivo desse capítulo e aprender as principais operações de matrizes no MATLAB®.

2.1 Operações com Matrizes

Matrizes ou variáveis podem ser criadas com ou sem a utilização de um incremento. Sem incremento será necessário digitar todos os elementos da matriz, o que não ocorre com a criação por incremento.

Como sabemos, uma matriz pode ser dividida em elementos de linha e coluna. No MATLAB®, para separar elementos em coluna utilizamos o “espaço”

ou “ , ”. Para separarmos em linhas utilizamos o “ ; ”. Observe a seguir. Para criar uma matriz ou vetor linha:

>> A = [2 4 6] A =

2 4 6

Para uma matriz ou vetor coluna: >> A = [2;4;6]

A = 2 4 6

Para uma matriz ou vetor misto: >> A = [1 2 3;4 5 6;7 8 9]

A =

1 2 3 4 5 6 7 8 9

(27)

Algumas matrizes, devido a sua importância, podem ser criadas com simples comandos como pode ser observado a seguir.

Para uma matriz Identidade: >> I = eye(5) I = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1

Para uma matriz Nula: >> Z = zeros(3,2)

Z =

0 0 0 0 0 0

Para uma matriz Unitária: >> U = ones(2,3)

U =

1 1 1 1 1 1

Para uma matriz Randômica: >> W = rand(2,3)

W =

0.2785 0.9575 0.1576 0.5469 0.9649 0.9706

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

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

(28)

nº inicial : incremento : nº final

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

Este tipo de configuração representa a criação de uma seqüência numérica de valor inicial igual ao nº inicial, valor final igual ao nº final e, intercaladas por valores cuja diferença e igual ao incremento. Observe na prática a seguir. >> A = 10:1:20 A = 10 11 12 13 14 15 16 17 18 19 20 >> A = 10:2:20 A = 10 12 14 16 18 20 >> A = [1:5; 2:2:10] A = 1 2 3 4 5 2 4 6 8 10

Quando o incremento não é informado o sistema admite como sendo o padrão, ou seja, incremento de valor 1 (um).

Embora a aritmética de máquina seja, em parte, diferente da habitual, as matrizes estão sujeitas as mesmas regras de operação. Veja na prática a seguir alguns casos de operações com matrizes.

Sejam as matrizes

>> A + B

??? Error using ==> plus Matrix dimensions must agree. >> B + C

(29)

5 5 4 -3 7 9

>> B * C

??? Error using ==> mtimes

Inner matrix dimensions must agree. >> A * B

ans =

-8 11 10 -20 29 22 -32 47 34

O MATLAB® dispõe de outros operadores matemáticos que podem facilitar as operações matriciais como mostra a prática a seguir. Sejam as matrizes: >> D = [1 2; 3 4] D = 1 2 3 4 >> E = [5 6; 7 8] E = 5 6 7 8 >> D * E ans = 19 22 43 50 É diferente de >> D .* E ans = 5 12 21 32 >> D / E ans =

(30)

3.0000 -2.0000 2.0000 -1.0000 É diferente de >> D ./ E ans = 0.2000 0.3333 0.4286 0.5000 >> D ^ 2 ans = 7 10 15 22 É diferente de >> D .^ 2 ans = 1 4 9 16

Ainda se pode obter a matriz transversa, utilizando o apóstrofo („). >> F = [1 10 100; 2 20 200; 3 30 300] ans = 1 10 100 2 20 200 3 30 300 >> G = F’ ans = 1 2 3 10 20 30 100 200 300 2.2 Indexação de matrizes

A indexação é uma forma de mapear, dentro da matriz, os elementos que estão presentes nela. Através da indexação se pode inserir ou obter valores de

(31)

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 =

(32)

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

(33)

3 4 0 1 0 6 -2 9 -1 >> A(9) = 0 A = 3 4 0 1 0 6 -2 9 0

Também se pode usar a indexação poli paramétrica para modificar os valores na matriz. O MATLAB® também pode indexar uma matriz através de outra matriz.

2.3 – Análise de vetores

A análise de vetores é uma ferramenta importante, e através dela podem-se descobrir diversas informações da matriz, evitando a necessidade de procurar manualmente tais dados.

Utilizando os comandos para a matriz A:

>> A = [ 3 4 -1; 1 0 6; -2 9 -1] A = 3 4 -1 1 0 6 -2 9 -1 >> numel (A) ans = 9

(34)

>> size(A) ans = 3 3 >> ndims(A) ans = 2 >> length(A) ans = 3 >> diag(A) ans = 3 0 -1 >> triu(A) ans = 3 4 -1 0 0 6 0 0 -1 >> tril(A) ans = 3 0 0 1 0 0 -2 9 -1

(35)

2.4 – Números e matrizes complexos

No MATLAB® os números complexos são chamados utilizando i e j na parte imaginária. Deve-se evitar criar variáveis com uma das letras, com finalidade de evitar conflitos internos do programa.

>> C = 2 - 3i C = 2.0000e+000 -3.0000e+000i >> D = 3 - 4j D = 3.0000e+000 -4.0000e+000i >> E = C + D E = 5.0000e+000 -7.0000e+000i >> F = C*D F = -6.0000e+000 -1.7000e+001i >> G = C/D G = 7.2000e-001 -4.0000e-002i

Da mesma forma podem ser escritas matrizes com elementos complexos nela

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

2.0000 + 1.0000i 4.0000 - 2.0000i 3.0000 + 9.0000i >> B = [1 -3 2] +i*[-2 -4 1]

B =

1.0000 - 2.0000i -3.0000 - 4.0000i 2.0000 + 1.0000i >> C = A + B

(36)

>> 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 característico Polinômio

std Desvio padrão det Determinante

mean Média aritmética real Parte real do número complexo max Valor máximo imag Parte imaginária do número complexo

min Valor mínimo rank

Determina o número de linhas independentes

(37)

EXERCÍCIO APLICADO

Um grande forno industrial é suportado, em sua base, por três longas colunas de concreto refratário, com 1 m por 1 m de lado, cada. Durante a operação em condições de regime estacionário, a instalação é de tal forma que três superfícies de cada coluna são mantidas a 500 K, enquanto a outra(inferior) é exposta a uma corrente de ar para a qual T∞ = 300 K e h = 10 W/m2K. Uma

passagem abaixo de cada coluna garante que as mesmas sejam periodicamente vistoriadas por técnicos. Utilizando uma rede de malha com Δx = Δy = 0,25 m, determine se as passagens oferecem risco de queimadura aos técnicos. (Transferência de calor e massa – Peter Incropera & De Witt, 5ed. LTC)

Considerações:

1. Regime estacionário. 2. Condução bidimensional. 3. Propriedades constantes. 4. Sem geração interna de calor.

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

simetria.

Dessa forma, utilizando as equações de diferenças finitas (não-estendidas), os balanços de energia para cada nó são dados como:

(38)

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]

(39)

Primeiro criamos a matriz de coeficientes e constantes. Em linha de comando teremos >> A = [-4 1 1 0 0 0 0 0;... 2 -4 0 1 0 0 0 0;... 1 0 -4 1 1 0 0 0;... 0 1 2 -4 0 1 0 0;... 0 0 1 0 -4 1 1 0;... 0 0 0 1 2 -4 0 1;... 0 0 0 0 2 0 -9 1;... 0 0 0 0 0 2 2 -9] A = -4 1 1 0 0 0 0 0 2 -4 0 1 0 0 0 0 1 0 -4 1 1 0 0 0 0 1 2 -4 0 1 0 0 0 0 1 0 -4 1 1 0 0 0 0 1 2 -4 0 1 0 0 0 0 2 0 -9 1 0 0 0 0 0 2 2 -9 >> C = [-1000;-500;-500;0;-500;0;-2000;-1500] C = -1000 -500 -500 0 -500 0 -2000 -1500

Em seguida multiplicamos pela matriz de constantes >> T = inv(A)*C T = 489.3047 485.1538 472.0651 462.0058 436.9498 418.7393 356.9946 339.0520

(40)

Os resultados podem ser interpretados considerando cada linha da matriz T como a temperatura final de cada nó correspondente ao número da linha. Dessa forma, na linha 1 teremos a temperatura do nó 1, na linha 5 teremos a temperatura do nó 5 e assim sucessivamente como mostra abaixo.

Porém, observe que a saída, neste caso uma matriz, não nos dá uma ideia imediata do comportamento do sistema, além de ser mal visualizável. A fim de dar um caráter mais profissional aos resultados é sugerido que os dados sejam interpretados graficamente. Neste caso, como se trata de um mapeamento bidimensional de uma grandeza física, podemos interpretá-los usando o mapeamento de grandeza por escala de espectro visível.

No MATLAB® o comando utilizado é o imagesc.

>> Final = [500 500 500 500 500;... 500 489.3 485.2 489.3 500;... 500 472.1 462.0 472.1 500;... 500 436.9 418.7 436.9 500;... 500 356.9 339.1 356.9 500] Final = 500.0000 500.0000 500.0000 500.0000 500.0000 500.0000 489.3000 485.2000 489.3000 500.0000 500.0000 472.1000 462.0000 472.1000 500.0000 500.0000 436.9000 418.7000 436.9000 500.0000 500.0000 356.9000 339.1000 356.9000 500.0000 >> imagesc(Final) >> colorbar >> grid

(41)

Como resultado obtém-se a matriz:

(42)

Exercícios de fixação

1. Digite os valores abaixo para revisar e ampliar seu conceito sobre matrizes no MATLAB®.

a) >> A = [-1.2*sin(4.76) exp(3.66*log(233)) 2.3+4/(5*cos(4))] b) >> B = [1 2 3; 4 5 6; 7 8 9]

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

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

e) >> E = [ 1 2 3 4; 5 6 7 8], F = [9 10 11 12], G = [E;F] 2. Sendo a matriz A = [1 2 3; 4 5 6; 7 8 9]:

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

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

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

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

e) Por fim ache uma matriz 3x3 com a primeira coluna sendo o vetor D, a segunda sendo o vetor E transposto e a terceira coluna sendo a soma das duas anteriores.

3. Para a matriz N = [1 2; 3 4], verifique através dos comandos aprendidos: a) O determinante de N é não nulo.

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

c) Verifique que o det(N) = 1/det(M) e det(N)*det(M) = det(N*M) = 1 4. Uma matriz de 3 dimensões pode ser considerada como uma que possui

largura, comprimento e profundidade. Nessa situação, a matriz que desejamos deve ter 3 linhas, 4 colunas e 2 páginas de „profundidade‟. >> M3d = rand(3,4,2)

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

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

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

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

(43)

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.

(44)

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.

(45)

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.

(46)

segundo o reconhecimento de dois caracteres: 0 (zero) e 1 (um). No caso do MATLAB®, zero implica numa condição falsa, vazia, nula ou nil, ao contrário do um que está relacionado a uma condição verdadeira.

Os símbolos de teste e operadores booleanos podem ser resumidos pela tabela 3.1 e tabela 3.2, respectivamente. Embora possua simbologia distinta, na maioria dos casos, a lógica de tais operadores é encontrada em qualquer plataforma de programação.

Símbolo Teste Exemplo

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

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

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

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

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

>= Maior ou igual A >= B (A menor ou igual a B) Tabela 3.1 – Teste de expressões booleanas.

Símbolo Operador Exemplo de Composição

& E A & B (A e B verdadeiros)

| OU A | B (A ou B verdadeiros)

Tabela 3.2 – Operadores de expressões booleanas.

Além desses clássicos testes e operadores booleanos o MATLAB® disponibiliza outros operadores que podem simplificar, em alguns casos, reduzindo a quantidade de comandos a serem digitados. São conhecidas, em alguns casos como funções booleanas matriciais, pois são aplicadas a matrizes e não a “escalares”. As mais importantes podem ser observadas na tabela 3.3.

Função Teste retorna verdadeiro se Exemplo

isempty matriz é vazia isempty(M)

isequal as matrizes forem numericamente iguais isequal(M)

isnumeric matriz é numérica isnumeric(M)

ischar matriz é alfanumérica ischar(M)

Tabela 3.3 – Funções booleanas matriciais.

3.2 Estrutura if – elseif - else

O if – elseif – else é uma estrutura de seleção que tem a função de selecionar um dado ou conjunto de dados segundo uma propriedade inerente ao mesmo ou selecionar uma função a ser executada. O MATLAB® possui dois

(47)

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

(48)

diversas mensagens ao operador, lhe informando o motivo pelo qual o alarme foi acionado. Além das mensagens, o sistema disponibiliza um código

numérico que é reconhecido como desativador da unidade.

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

Um dos sinais recebidos pelo operador é o da temperatura no interior da Coluna (termopar 12). Tal temperatura não ser inferior a 900ºC e nem pode exceder 1200 ºC. Crie parte do código do supervisório responsável pelas ações acima. (Caso real: RELAN “MODIFICADO”).

Construir um código com os seguintes objetivos: 1. Confirmação do sinal recebido;

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O Script abaixo tem uma sugestão de resolução do problema 3.1 % % % % Data de criação: 15 de setembro de 2008. % % Data da última atualização: 03 de janeiro de 2012. % % Criado por: Phillipi Rodrigo de Oliveira Souza. % % Atualizado por: Fernando Wesley Cavalcanti de Araújo. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;clear % elimina o sinal anterior

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

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

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

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

if semsinal == 1 % não há recebimento do sinal num_protc_seg = 1378; % nº protc seg a ser gerado errordlg('Falha de comunicação com Termopar 12.','ERRO') return

(49)

end

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

if sinal <= 900

num_protc_seg = 2378; % nº protc seg a ser gerado warndlg('Temperatura do prato abaixo do permitido.','PERIGO!') elseif sinal <= 1200

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

num_protc_seg = 2380; % nº protc seg a ser gerado warndlg('Temperatura do prato acima do permitido.','PERIGO!') end

A fim de explorar o problema e obter diferentes respostas, proponha valores distintos para a variável “sinal”.

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

3.3 Estrutura switch-case-otherwise

Além da estrutura if/elseif/else, mais comum em linguagem de programação, o MATLAB® oferece outra estrutura de seleção, a switch/case/otherwise. Ao contrário da estrutura anterior, essa está limitada à condição de igualdade e desigualdade, veja a seguir na figura 3.5.

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

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

(50)

clear;clc A = log10(1000); switch A case 1 var = „Número 1.„ case 2 var = „Número 2.„ case 3 var = „Número 3.„ otherwise

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

EXERCÍCIO APLICADO 2

Problema 3.2

Resolva o exercício da estrutura de seleção (if-elseif-else), visto anteriormente, com a estrutura (switch-case-otherwise). .

Figura 3.6 – Diagrama esquemático do problema 3.2. Construir um código com os seguintes objetivos:

1. Confirmação do sinal recebido; 2. Análise do sinal recebido e atuações.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O Script "Mod2_Prbl2_2" tem a sugestão de solução do Problema 3.2 % % estrutura de seleção (switch-case-otherwise). % % % % Data de criação: 21 de setembro de 2008. % % Data da última atualização: 03 de janeiro de 2012. % % Criado por: Phillipi Rodrigo de Oliveira Souza. % % Atualizado por: Fernando Wesley Cavalcanti de Araújo. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

(51)

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

sinal = str2double(sinal1); semsinal = isnan(sinal);

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

switch semsinal case 1

num_protc_seg = 1378; % nº protc seg a ser gerado errordlg('Falha de comunicação com Termopar 12.','ERRO') return

otherwise

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

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

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

switch sinal case sinal <= 900

num_protc_seg = 2378; % nº protc seg a ser gerado warndlg('Temperatura do leito abaixo do permitido.','PERIGO') case sinal < 1200

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

num_protc_seg = 2380; % nº protc seg a ser gerado warndlg('Temperatura do leito acima do permitido.','PERIGO') end

A fim de explorar o problema e obter diferentes respostas, proponha valores distintos para a variável “sinal”.

Novamente não esqueça dos comandos CTRL + R e CTRL + T, responsáveis por comentar de forma mais ágil.

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

expressões booleanas de desigualdade. Observe a seguir um código escrito em estrutura de seleção switch/case/otherwise com a utilização de expressões booleanas de desigualdade.

(52)

3.4 – Estrutura for

O for é conhecido como estrutura de repetição, e tem o objetivo de repetir um determinado comando seguindo um critério predefinido pelo programador. Esse tipo de estrutura evita que o usuário do código tenha que repetir mesma tarefa inúmeras vezes. Mas, como a máquina sabe quando parar de repetir o comando? O critério de parada é baseado na seguinte ideia: toda região fora do domínio de repetição é considerada como região de parada, ou seja, caso a expressão de repetição não seja mais verdadeira, o código interrompe o loop.

Esse tipo de estrutura utiliza expressões booleanas descritas anteriormente e trabalha com retorno de execução de funções. Neste caso, qualquer retorno diferente de 0 (zero) é considerado como verdadeiro, e 0 (zero) é considerado falso. O MATLAB® trabalha com duas estruturas de

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

A estrutura “for” repete a execução dos comandos enquanto para todo valor de sua variável começando e terminando com valores predefinidos e a passos incrementados por um valor também predefinido. Na figura 3.7 temos a estrutura de sintaxe e sua interpretação. Em seguida acompanhe um exemplo de aplicação.

Figura 3.7 – Estrutura e sintaxe lógica da estrutura de repetição for. for x = 1:15

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

(53)

EXERCÍCIO APLICADO 3

Problema 3.3

No exercício aplicado do capítulo 1 foi discutido o perfil de temperatura sobre a superfície de uma placa onde a forma matricial do sistema de equações foi dado por:

Utilizando a estrutura de repetição (for) crie a matriz de coeficientes com a menor quantidade de linhas que você puder.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O Script abaixo tem a sugestão de resolução do problema 3.3 % % % % Criado e atualizado por: Phillipi Rodrigo de Oliveira Souza. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear;clc

% criação da diagonal principal for i = 1:1:6 for j = 1:1:6 if i == j A(i,j) = -4; end end end for i = 7:1:8 for j = 7:1:8 if i == j A(i,j) = -9; end end end

% criação da primeira diagonal superior principal for i = 1:2:8

for j = 1:1:8

if i == j-1 A(i,j) = 1;

(54)

end end

% criação da segunda diagonal superior principal for i = 1:1:8 for j = 1:1:8 if i == j-2 A(i,j) = 1; end end end

% criação da primeira diagonal inferior principal for i = 1:1:8 for j = 1:2:8 if i == j+1 A(i,j) = 2; end end end

% criação da segunda diagonal inferior principal for i = 1:1:6 for j = 1:1:6 if i == j+2 A(i,j) = 1; end end end for i = 7:1:8 for j = 1:1:8 if i == j+2 A(i,j) = 2; end end end 3.5 – Estrutura while

A estrutura “while” repete a execução dos comandos enquanto as expressões de teste, ou expressões booleanas, retornam condição verdadeira. Na figura 3.8 temos a estrutura de sintaxe e sua interpretação.

(55)

m = 2; for I = 1:10 for J = 1:10 while I < m if I == J A(I,J) = 2; elseif abs(I-J) == 1 A(I,J) = -1; else A(I,J) = 0; end I = I + 1; end end end

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

EXERCÍCIO APLICADO 4

Problema 3.4

O método de Newton (ou método de Newton-Raphson) foi desenvolvido no século XVII por Isaac Newton e Joseph Raphson e é um dos métodos numéricos utilizados para encontrar as raízes de equações de forma rápida e com cálculos relativamente simples.

A ideia principal do método é que através do chute de um valor inicial, a função seja aproximada através da linha tangente até interceptar o valor de raiz com um erro extremamente baixo.

Neste exemplo, o objetivo do programador é usar o MATLAB® para calcular uma raiz da função f(x) = x³ - x – 4, com erro menor do que 10-4

utilizando o método de Newton-Raphson.

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

clear, clc

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

x

i+1

= x

i

-

𝑓(𝑥

𝑖

)

(56)

erro = 1; contador = 0;

while erro > 0.0001

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

y1 = y1_aux; contador = contador + 1; end contador erro y1

É dado ao usuário a oportunidade de escolher o valor do chute inicial do sistema, mas deve-se ressaltar que o método de Newton-Raphson tem condições a serem satisfeitas para que o resultado final tenha coerência, entre eles: O intervalo de calculo deve possuir a raiz da função; A função deve ser diferenciável no intervalo escolhido; a primeira e segunda derivadas não devem trocar de sinal no intervalo escolhido.

Neste problema, com o valor inicial escolhidos sendo 2,00 e 8.000.000, os resultados finais serão:

% Para valor de chute inicial igual a 2.00: contador = 4 erro = 5.2603e-008 y1 = 1.7963e+000

% Para valor de chute inicial igual a 8000000: contador = 42 erro = 4.5807e-007 y1 = 1.7963e+000

(57)

Exercícios de fixação

1. Faça um programa para calcular o salário semanal de um trabalhador. Você deve inserir o número de horas trabalhadas na semana. O valor de cada hora é R$ 12,00 e caso o trabalhador ultrapasse a carga horária de 40 horas semanais, o valor da hora é R$ 18,00. Do total, desconte o Imposto (18% do valor total) e imprima o resultado na janela de comando.

2. Use o If para saber se um número é impar ou par. Coloque ferramentas „antibug‟ para cancelar a execução caso o usuário entre com algum texto ou valor complexo no lugar do valor. (Dica: Os comandos „rem‟ e „imag‟ facilitam a resolução desse problema)

3. Faça um programa que gere e escreva todos os números pares entre dois números positivos digitados pelo usuário de forma crescente ou decrescente, a ser escolhido pelo usuário. (Dica: conheça os comandos „ceil‟ e „floor‟ para auxílio no arredondamento dos valores que não são inteiros)

4. De acordo com a lenda, certa vez uma rainha requisitou os serviços de um monge dizendo que o pagamento seria negociado posteriormente. O monge, após finalizar o serviço e necessitando de alimentos, decidiu que o pagamento deveria ser feito com grãos de trigo dispostos em um tabuleiro de xadrez, de tal forma que o primeiro quadro deveria conter apenas um grão e os quadros subsequentes, o dobro do quadro anterior. A rainha achou o trabalho barato e pediu que o serviço fosse executado, sem se dar conta de que seria quase impossível efetuar o pagamento. Faça um algoritmo para calcular o número de grãos que o monge deve receber. (Dica: para calcular o tempo necessário para realizar esse calculo, utilize os comandos „tic‟ e „toc‟ no inicio e final do editor, respectivamente)

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

6. A sequência de Fibronacci é obtida a partir de dois números iniciais, sendo o F(1) = 0 e o F(2) = 1, e os demais números são obtidos da soma dos anteriores (ex.: F(2) = F(1) + F(0) = 1; F(3) = F(2) + F(1) = 1 + 1 = 2; e assim sucessivamente). Desenvolva um algoritmo para encontrar o número de Fibronacci para o número de iterações que o usuário desejar.

(58)

7. Nas questões anteriores, coloque comandos „antibug‟ para evitar entrada de dados incoerentes, como textos, números imaginários e dados que não permitiriam a resolução da questão.

(59)

Capítulo 4 – Funções

Uma função é um programa elaborado por um usuário que utiliza ou não parâmetros de entrada para fornecer uma resposta. Todas as operações executadas são ocultas ao usuário, sendo considerado como um código „caixa preta‟.

Até agora utilizamos o prompt de comando para realizar cálculos simples. Evoluímos para o uso do editor de texto, onde a inserção de comandos se torna mais profissional protegendo o próprio código de modificações involuntárias ou propositais, e no momento da compilação do programa há a depuração do mesmo, indicando o local do erro, caso exista.

Uma forma mais evoluída de pensar é através da utilização das funções (functions) do MATLAB®. As funções são uma sequência de comandos que aceitam parâmetros de entrada, realizam operações com os parâmetros fornecidos e valores previamente escolhidos pelo programador, podem ser chamadas dentro de outras funções, possuem help que pode ser criado e editado pelo programador e por fim fornecem resultados e parâmetros de saída.

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

1. built-in: função interna. Está implementada em seu núcleo e não é visualizável (Ex.: sin);

2. MATLAB ® m-file: função implementada em m-file. É visível e aberto para alterações (Ex.: polyfit);

3. User m-file: função criada pelo usuário. Você pode implementar novos recursos no seu MATLAB ® criando funções para áreas específicas.

Utilize os comandos which para achar seu diretório, e open para visualizar o código.

As funções aceitam múltiplos parâmetros de entrada e retornam múltiplos parâmetros de saída (está é uma característica muito peculiar e extremamente prática do MATLAB®).

(60)

onde:

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

grafada de azul);

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

nome: nome da função;

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

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

serem executadas pela função.

OBSERVAÇÃO:

a função e o arquivo m-file devem ter o mesmo

nome.

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

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

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

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

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

A seguir temos um exemplo de criação de uma função: function [s,v] = muv(s0, v0, a, t)

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

A seguir temos o exemplo de como uma função deve ser chamada, sempre na janela de comandos.

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

6430 v =

Referências

Documentos relacionados

- Para definir suas metas, foque no destino onde você quer chegar, não no meio para chegar lá;.. -Você deve separar suas metas em

Contrapondo-se à lógica do modo de produção capitalista, diversas comunidades possuem outras determinações em sua repro- dução social material e imaterial: posse e controle,

Atração: comidas típicas e brincadeiras para família Festa Junina Nossa Senhora Do Perpétuo Socorro Data/Horário: Sábado (23/06), às 18h. Endereço: Rua São Paulo, esquina com a

Este trabalho tem como objetivo avaliar o efeito de tratamento criogênico no comporta- mento a fadiga termomecânica estrutural de uma liga NiTi por meio da avaliação da defor-

Com a opção Permitir modo de poupança de en- ergia ativa, o dLAN 1200+ WiFi ac muda automati- camente para o modo Standby após cerca de 10 minutos, se não se encontrar ativa nenhuma

Com base nos cálculos realizados, e considerando a solução de custo ótimo para a envolvente do edifício em conjunto com as combinações 4 e 8 (que usam a

Assim como discute adaptações do teatro e da literatura para o cinema, Bazin relaciona, em dois textos curtos, “Pintura e cinema” e “Um filme bergsoniano: O mistério

DIREITO DE OPOSIÇÃO AO DESCONTO DAS CONTRIBUIÇÕES PARA CUSTEIO DA ATIVIDADE SINDICAL LABORAL:.. Fica assegurado aos trabalhadores da categoria, exclusivamente aos não sócios