APOSTILA MATLAB

127

Transcript of APOSTILA MATLAB

Page 1: APOSTILA MATLAB
Page 2: APOSTILA MATLAB

Introdução ao MATLAB

2

1. Apresentação...................................................................................................5

1.1. Solução de Problemas ...................................................................................... 5 1.1.1. Enunciado do Problema ............................................................................ 5 1.1.3. Exemplo Manual ......................................................................................... 6 1.1.4. Solução MATLAB ....................................................................................... 7 1.1.5. Testando ......................................................................................................7

1.2. Apresentação......................................................................................................8 1.2.1. Ambiente de Trabalho.............................................................................. 10 1.2.2. Editor de Linhas de Comando ................................................................ 11

2. Introdução......................................................................................................13 2.1. Introdução a Matrizes Simples....................................................................... 13 2.2. Elementos de Matrizes.................................................................................... 14 2.3. Decaração de Variáveis .................................................................................. 15 2.4. Informações sobre a Área de Trabalho........................................................ 16 2.5. Números e Expressões Aritméticas.............................................................. 17 2.6. Números e Matrizes Complexas ................................................................... 18 2.7. Formatação de Saída ...................................................................................... 19 2.8. Utilização do Help (Ajuda) .......................................................................... 20 2.9. Funções ............................................................................................................. 20

3. Manipulação de Matrizes e Vetores......................................................................21 3.1 . Operações com Matrizes ......................................................................... 21

3.1.2 Adição e Subtração ............................................................................. 22 3.1.3 Multiplicação ......................................................................................... 22 3.1.4 Divisão ................................................................................................... 23 3.1.5 Potenciação .......................................................................................... 23 3.2 Operações Elemento a Elemento (Conjuntos) ................................... 23 3.2.1 Adição e Subtração ............................................................................. 23 3.2.2 Multiplicação e Divisão ....................................................................... 24 3.2.3 Potenciação .......................................................................................... 24

3.3. Matrizes Elementares...................................................................................... 24 3.3.1 Geração de Vetores ............................................................................ 24 3.3.2 . Matriz Identidade ............................................................................... 25 3.3.3 Matriz Composta por Elementos Unitários ...................................... 25 3.3.4 Matriz Nula ............................................................................................ 25 3.3.5 Matriz Aleatória .................................................................................... 26

3.4 Elementos de Matrizes ............................................................................... 26 3.5 Manipulação de Matrizes............................................................................ 27

3.5.1 Matriz Diagonal ou Diagonal de uma Matriz ......................................... 27 3.5.2 Matrizes Triangulares.......................................................................... 28 3.5.3 Redimensionamento de Matrizes...................................................... 28 3.5.4 Rotação dos Elementos da Matriz .................................................... 29

4. Funções..........................................................................................................30 4.1 Funções Escalares ...................................................................................... 30 4.2. Funções Vetoriais ............................................................................................ 30

Sumário

Page 3: APOSTILA MATLAB

Introdução ao MATLAB

3

4.3 Funções Matriciais....................................................................................... 31 5. Polinômios......................................................................................................33 6. Gráficos..........................................................................................................35

6.1 – Gráficos X-Y ................................................................................................... 35 6.1.1 Acessórios para os Gráficos .............................................................. 37 6.1.2 Números Complexos........................................................................... 38

6.2 Gráficos Polares ................................................................................................ 39 6.3. Gráficos 3D ....................................................................................................... 39

7. Programação..................................................................................................43 7.1 Arquivo.m ........................................................................................................... 43 7.2 Operadores Lógicos e Relacionais ........................................................... 44

7.2.1 Operadores Relacionais ..................................................................... 44 7.2.2 Operadores Lógicos ............................................................................ 44

7.3. Comandos For – While - If............................................................................. 46 7.3.1. Comando If ........................................................................................... 46 7.3.2. Ciclo For ................................................................................................ 47 7.3.3 Ciclo While ............................................................................................ 48

7.4. Declarando Funções ....................................................................................... 48 8. Sistemas de Equações Lineares....................................................................56

8.1. Interpretação gráfica ................................................................................... 56 8.2. Solução usando operação com matrizes................................................. 58 8.3. Divisão de matrizes ..................................................................................... 58

9. Cáculo............................................................................................................61 9.1. Zeros de Funções ........................................................................................ 61 9.2. Minimização de Funções........................................................................... 62 9.3. Limites ........................................................................................................... 62 9.4. Limites à esquerda e à direita.................................................................... 62

10. Integração Numérica....................................................................................64 10.1. Integrais..................................................................................................... 64 10.2. Integrais Definidas ................................................................................... 64 10.3. Integrais Definidas (outros métodos).................................................... 65

10.2.1 Regra Trapezoidal ............................................................................... 65 10.2.2 Regra de Simpson ............................................................................... 66 10.2.3 Regra de Newton-Cotes ..................................................................... 67

11. Diferenciação Numérica...............................................................................70 11.1. Derivação por expressões de diferenças............................................. 70 11.2. Comando diff ............................................................................................ 71 11.3. Derivadas Superiores.............................................................................. 72 11.4. Derivadas Trigonométricas: ................................................................... 72

12. Ajuste de Curvas..........................................................................................73 12.1. Ajuste de Curvas............................................................................................ 73 12.2. Interpolação Unidimensional.................................................................. 74

13. Análise Polinomial........................................................................................78 13.1. Avaliação do polinômio ........................................................................... 78 13.2. Comando polyval ..................................................................................... 78 13.3. Operações Aritméticas........................................................................... 79

13.3.1 Soma e subtração ................................................................................... 79 13.3.2. Multiplicação............................................................................................ 80

Page 4: APOSTILA MATLAB

Introdução ao MATLAB

4

13.3.3. Divisão......................................................................................................80 13.4. Raízes de polinômios .............................................................................. 81

15. Transformadas.............................................................................................84 15.1. Funções Degrau e Impulso .................................................................... 84 15.3. Transformada de Fourier ........................................................................ 85 15.4. Transformada Z........................................................................................ 85

16. SIMULINK....................................................................................................86 16.1. Introdução ....................................................................................................... 88

16.1.1. Diagrama de Blocos............................................................................... 88 16.1.2. Símbolos .................................................................................................. 90

16.2. Conhecendo o SIMULINK ............................................................................ 90 16.2.1. Acessando o SIMULINK........................................................................ 90 16.2.2. Construindo um Modelo Simples ......................................................... 91

16.3. Construindo Modelos no SIMULINK......................................................... 104 16.3.1 - Elementos de Modelos....................................................................... 104 16.3.2. Manipulando Blocos............................................................................. 105 16.3.3. Fontes..................................................................................................... 105

16.3.3.1. Fontes Comuns ............................................................................. 107 16.3.4. Importando do MATLAB (From Workspace Block)......................... 108

16.3.4.1. Importando Arquivos Gerados no MATLAB (From File Input Block) ....... 110 16.3.5. Dispositivos de Saída .......................................................................... 110 16.3.6. Osciloscópio (Scope) ........................................................................... 110

16.3.6.1. Ferramenta Zoom na tela do Osciloscópio ............................... 112 16.3.6.2. Propriedades do Osciloscópio .................................................... 113

16.3.7. Gráfico XY ............................................................................................ 114 16.3.8. Configurando a Simulação.................................................................. 115

16.3.8.1. Solver Page.................................................................................... 116 16.3.9. Executando uma Simulação ............................................................... 117

16.4. Exemplos Práticos ....................................................................................... 118 16.4.1. Visão geral do Simulink ....................................................................... 118 16.4.2. Simulando um salto de bungee jumping........................................... 123

Apêndice A. Lista de Exercícios.......................................................................126 Referências Bibliográficas................................................................................127

Page 5: APOSTILA MATLAB

Introdução ao MATLAB

5

1. Apresentação

1.1. Solução de Problemas A solução de problemas é parte essencial não somente dos cursos de

engenharia, mas também dos cursos de Matemática, Física, Química e Ciência da Computação. Logo, é importante uma base sólida em solução de problemas. Também é de grande auxílio um embasamento suficiente para trabalhar em todas estas áreas, para que não tenhamos que aprender uma técnica para problemas de matemática, e uma técnica diferente para problemas de física, e assim por diante. A técnica de solução de problemas que apresentamos trabalhos para problemas de engenharia e pode ser seguida de perto para resolver problemas em outras áreas; mas, supõe-se que estamos usando o MATLAB para ajudar a resolvê-los.

O processo ou metodologia para resolução de problemas que usaremos ao longo do texto possui cinco passos: 1. Enunciar o problema claramente. 2. Descrever a informação de entrada e saída. 3. Trabalhar o problema manualmente. 4. Desenvolver uma solução MATLAB. 5. Testar a solução usando uma variedade de grupo de dados.

Descreveremos cada um dos passos usando o exemplo do cálculo da distância entre dois pontos em um plano. 1.1.1. Enunciado do Problema

O primeiro passo é enunciar o problema claramente. É extremamente importante que o enunciado seja conciso para evitar desentendimentos. Para este exemplo, o enunciado do problema é:

Calcule a distância em linha reta entre dois pontos num plano.

1.1.2. Descrição Entrada/Saída

O segundo passo é descrever cuidadosamente a informação que é dada para resolver o problema e então identificar os valores a serem calculados. Estes itens representam a entrada e a saída para o problema e agregadamente podem ser chamados entrada/saída, ou I/0. Para muitos problemas, é útil usar um diagrama que mostra a entrada e a saída. Algumas vezes, este tipo de diagrama é chamado de “caixa preta” porque não estamos definindo para este ponto todos os passos para determinar a saída, mas estamos mostrando a informação que é usada para calcular a saída. Para este exemplo, poderíamos usar o diagrama na figura 1.1.

Solução de Problemas

Page 6: APOSTILA MATLAB

Introdução ao MATLAB

6

1.1.3. Exemplo Manual

O terceiro passo é trabalhar o problema manualmente ou com uma calculadora, usando um pequeno grupo de dados. É um passo muito importante e não deve ser ignorado por mais simples que seja o problema. É um item no qual você trabalha os detalhes da solução do problema. Se você não pode pegar um simples grupo de números e calcular a saída (seja manualmente ou com uma calculadora), então você não está pronto para executar o próximo passo; você deve reler o problema e talvez consultar material de referência. Uma vez que pode trabalhar o problema de um simples grupo de dados, então você está pronto para desenvolver um algoritmo ou um esboço passo a passo da solução. Este esboço é convertido para os comandos MATLAB para que possamos usar o computador para fazer todos os cálculos. O exemplo manual para este exemplo é mostrado a seguir: Suponha que os pontos p1 e p2 tenham as seguintes coordenadas:

p1 = (1,5), p2 = (4,7)

Queremos calcular a distância entre dois pontos, que é a hipotenusa de um triângulo retângulo, conforme mostra a figura 1.2. Usando o Teorema de Pitágoras, podemos calcular a distância d com a seguinte equação:

21 ssd +=

( ) ( )22 5714 −+−=d

13=d

61,3=d

Page 7: APOSTILA MATLAB

Introdução ao MATLAB

7

1.1.4. Solução MATLAB

No próximo capítulo, falaremos sobre os comandos MATLAB. Contudo, da solução você pode ver que os comandos são muito similares às equações que foram usadas no exemplo manual. O sinal de percentagem é usado para anteceder comentários que explicam os comandos MATLAB.

1.1.5. Testando

O passo final em nosso processo de solução de problemas é testar a solução. Primeiramente, devemos testar a solução com os dados do exemplo manual, já que calculamos a solução. Quando os comandos MATLAB na solução são executados, o computador mostra a seguinte saída:

d = 3.6056

Esta saída coincide com o valor que calculamos no exemplo manual. Se a solução MATLAB não coincidir com o exemplo manual, devemos rever ambas soluções a fim de encontrar o erro. Uma vez que a solução trabalha com o exemplo manual, devemos também testá-la com vários grupos de dados para certificar que a solução é válida para outras séries de dados.

% % Este programa calcula e imprime % distância, em linha reta, entre dois pontos. p1 = [1,5]; % ponto 1 inicial p2 = [4,7]; % ponto2 inicial d = sqrt (sum ((p2-p1).^2)) % calcular distância

Page 8: APOSTILA MATLAB

Introdução ao MATLAB

8

1.2. Apresentação O MATLAB® pode ser usado como uma linguagem de programação ou

como uma ferramenta de cálculo interativa. Em ambos os casos, o ambiente MATLAB permite a realização de cálculos, visualização de resultados e desenvolvimento de algoritmos usando uma sintaxe muito próxima da notação matemática usual.

O nome MATLAB vem de MATrix LABoratory e representa bem o seu modo de funcionamento. Todas as variáveis são definidas de forma matricial, o que faz com que este ambiente seja ideal para resolver problemas de cálculo envolvendo matrizes e vetores.

Um arquivo de programa MATLAB recebe a extensão .m e, por isso, também é chamado de m-file ou arquivo .m. Ele pode ser criado e/ou modificado no editor próprio do MATLAB - MATLAB Editor/Debugger - que possui características que auxiliam bastante na edição de programas como auto-colorização de palavras de acordo com a sintaxe e interação com o ambiente de cálculo do MATLAB. Existem também os arquivos .mat que são arquivos binários que contém as variáveis da Workspace. Estes arquivos são gerados indo em File => Save Workspace => nomedoarquivo.mat. É importante diferenciar, portanto, arquivos .m dos arquivos .mat. Os arquivos .m contém uma série de comandos que, ao serem chamados no Workspace, são executados. Já os arquivos .mat contém somente as variáveis e os seus valores armazenados.

Uma das grandes virtudes do MATLAB é que todas as suas funções são escritas em m-files, sendo que algumas delas podem ser modificadas e várias outras criadas. Este fato possibilitou a criação de diversos conjuntos de funções específicas para determinadas áreas, como controle, análise de sinais, finanças, entre outras. Estes conjuntos de funções, ou de m-files, são chamados de toolbox.

Toolboxes direcionados para diversas áreas são distribuídos pela The MathWorks Inc. – empresa que desenvolve o software MATLAB (http://www.mathworks.com) - e inúmeros outros são desenvolvidos em todo o mundo, com e sem reconhecimento da MathWorks, e podem geralmente ser encontrados na internet. Um dos toolboxes desenvolvidos pela MathWorks é chamado Simulink. Ele é uma ferramenta interativa para desenvolvimento, simulação e análise de sistemas dinâmicos através da criação de modelos baseados em diagramas de blocos. Conjuntos de blocos podem ser usados para modelar sistemas específicos. Esses conjuntos de blocos são chamados Blocksets. Assim como ocorre com os toolboxes, blocksets direcionados a várias áreas são também desenvolvidos em todo o mundo. Para ilustrar a vastidão do campo de aplicação do MATLAB, abaixo segue uma pequena listagem de toolboxes e blocksets desenvolvidos pela MathWorks.

Apresentação

Page 9: APOSTILA MATLAB

Introdução ao MATLAB

9

Aerospace Blockset Biblioteca que utiliza os fundamentos do SIMULINK para prover

ferramentas especializadas para o desenvolvimento de ferramentas de modelagem, integração e simulação de aeronaves, naves espaciais, mísseis e sistemas de propulsão ou subsistemas.

Bioinformatics Toolbox Aplicativo MATLAB que possui ferramentas especializadas para análise

de genoma, visualização e normalização de micro vetores e análise das propriedades de proteínas.

Communications Blockset Aplicativo SIMULINK composto por cerca de 150 blocos do SIMULINK

dedicados às áreas de desenvolvimento de projeto, simulação e análise de sistemas de comunicação digitais e analógicos.

Control System Toolbox Aplicativo MATLAB para área de modelagem e análise de sistemas

automáticos de controle. Este Toolbox permite modelar, simular e analisar sistemas contínuos e discretos, com múltiplas entradas e múltiplas saídas (MIMO).

Data Acquisition Toolbox Aplicativo MATLAB composto por funções para importação de dados

obtidos a partir de placas de aquisição de dados. Curve Fitting Toolbox Aplicativo MATLAB de ajuste de curvas. Este Toolbox permite modelar,

simular e analisar sofisticados métodos de ajuste de curvas de forma prática e flexível.

Financial Toolbox Aplicativo MATLAB para área financeira (estudo de preços, cálculo de

juros e investimentos, análise de derivativos e otimização de portifólios). Statistics e Optimization Toolboxes são necessários para o funcionamento do Financial Toolbox.

Image Processing Toolbox Aplicativo MATLAB para área de processamento de imagens (estudo,

tratamento e análise de sinais analógicos/digitais transformados em imagens gráficas). Signal Processing Toolbox é necessário para o funcionamento deste Toolbox.

Mapping Toolbox Aplicativo MATLAB composto por funções para tratamento de mapas e

informações cartográficas (por exemplo: coordenadas cartográficas, deformações, representações tri-dimensionais).

Page 10: APOSTILA MATLAB

Introdução ao MATLAB

10

Partial Differential Equation Toolbox Aplicativo MATLAB composto por funções para resolução de equações

diferenciais parciais em espaço bidimensional utilizando método de elementos finitos.

Statistics Toolbox Aplicativo MATLAB para área de estatística, incluindo além de

ferramentas estatísticas básicas de análise de dados, recurso de modelagem e análise estatística de modelos lineares e não-lineares.

SimMechanics Biblioteca de blocos do SIMULINK que possibilita a modelagem e

simulação de sistemas mecânicos, tais como: componentes mecânicos (corpos e juntas), simulação de movimentos, etc. 1.2.1. Ambiente de Trabalho

Quando o MATLAB é inicializado, três janelas são exibidas: a

Workspace, a Command History e a Janela de Comando (Command Window). Na aba Workspace aparecem as variáveis, seu tamanho e valor atual, as variáveis são arrays onde cada elemento tem 8 bytes e podem ser editadas utilizando o Array Editor através de um clique duplo no nome da variável. Na janela Command History são armazenados todos os comandos já utilizados, sendo que estes podem ser reescritos na Command Window apenas utilizando as teclas UP e DOWN do teclado, sem necessidade de serem digitados novamente. Por sua vez, a Janela de Comando é a parte principal do MATLAB, onde serão escritos os códigos, funções e demais comandos. Nessa janela, o "prompt" padrão (>>) é exibido na tela e, a partir deste ponto, o MATLAB espera as instruções do utilizador. Para introduzir uma pequena matriz, por exemplo, utiliza-se:

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

Colocam-se colchetes em torno dos dados e separam-se as linhas por ponto e vírgula. Quando se pressiona a tecla <enter> o MATLAB responde com:

A = 1 2 3 4 5 6 7 8 7

Page 11: APOSTILA MATLAB

Introdução ao MATLAB

11

Para inverter esta matriz, utiliza-se:

>> B = inv(A) B = -2.1667 1.6667 -0.5000 2.3333 -2.3333 1.0000 -0.5000 1.0000 -0.5000 1.2.2. Editor de Linhas de Comando

As teclas UP e DOWN podem ser usadas para se encontrar comandos

usados anteriormente, para nova execução ou reedição. No caso de pretender efetuar o cálculo de:

5tanlog

π

Introduz-se na janela de comando: >> log (sqt(tan(pi/5)))

Como para calcular a raiz quadrada o comando certo é sqrt , o MATLAB responde com uma mensagem de erro:

??? Undefined function or variable sqt.

O comando com a resposta apropriada seria:

>> log (sqrt(tan(pi/5))) ans= -0.1597 NOTA: Todas as funções que façam uso de um argumento em ângulo são calculadas com o dito argumento expresso em radianos.

O Matlab possui diversas variáveis predefinidas, incluindo pi, Inf, NaN, i e j. Três exemplos são mostrados abaixo: >> z = 3 + 4*i

z = 3.0000 + 4.0000i >> Inf ans = Inf

>> 0/0

Page 12: APOSTILA MATLAB

Introdução ao MATLAB

12

Warning: Divide by zero. ans = NaN

O termo NaN significa, em inglês, Not-a-Number (símbolo de

indeterminação) e resulta de operações de valor indeterminado. Inf representa +∞ e pi representa π. A variável 1−=i é usada para representar números complexos. A variável 1−=j pode ser usada em vez de i nas operações aritméticas com números complexos por aqueles que a preferem. Estas variáveis predefinidas podem ser inadvertidamente redefinidas. É claro que elas podem ser redefinidas intencionalmente a fim de liberar o nome da variável para outros usos. Por exemplo, pode-se querer usar i como inteiro e reservar j para a aritmética com números complexos. Seja cauteloso e deixe estes nomes de variáveis predefinidas intocados, pois há uma infinidade de nomes alternativos que podem ser usados. As variáveis predefinidas podem ser realocadas aos seus valores default usando o comando clear nome_da_variável (por exemplo, clear pi).

Page 13: APOSTILA MATLAB

Introdução ao MATLAB

13

2. Introdução O MATLAB trabalha essencialmente com um tipo de objeto: uma matriz

numérica retangular podendo conter elementos complexos. Observa-se que um escalar é uma matriz de dimensão 1x1 e que um vetor é uma matriz que possui somente uma linha ou uma coluna.

2.1. Introdução a Matrizes Simples

As matrizes podem ser introduzidas no MATLAB de diferentes modos:

- Introduzida na Janela de Comando (lista explícita de elementos). - Geradas por comandos e funções. - Criadas em arquivos ".m". - Carregadas a partir de um arquivo de dados externo.

O método mais fácil de introduzir pequenas matrizes no MATLAB é utilizando uma lista explícita. Os elementos de cada linha da matriz são separados por espaços em branco ou vírgulas e as colunas separadas por ponto e vírgula, colocando-se colchetes em volta do grupo de elementos que formam a matriz com o objetivo de limitá-la. Por exemplo, introduzindo-se a expressão:

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

7 8 7

A matriz A é guardada na memória RAM do computador, ficando

armazenada para uso posterior. As matrizes podem, também, ser introduzidas linha a linha, o que é

indicado para matrizes de grande dimensão. Por exemplo:

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

Outra maneira para introduzir matrizes no MATLAB é através de um

arquivo no formato texto com extensão ".m". Por exemplo, se um arquivo chamado "matriz.m " contiver estas três linhas de texto:

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

Introdução

Page 14: APOSTILA MATLAB

Introdução ao MATLAB

14

Então a expressão "matriz " lerá o arquivo e introduzirá a matriz A.

>>matriz

O comando load pode ler matrizes geradas pelo MATLAB e

armazenadas em arquivos binários ou matrizes geradas por outros programas armazenadas em arquivos ASCII. Assim, para ler um arquivo .mat chamado matriz.mat segue-se a seguinte estrutura: load matriz.mat , e as variáveis salvas no arquivo binário matriz.mat serão carregadas na Workspace.

NOTA: Em todos os exemplos, m e n são inteiros positivos. Para especificar um único elemento da matriz utilizam-se os índices

referentes ao número de linha e número de coluna entre parênteses da matriz onde se encontra o elemento: A(m,n) .

Outra forma de gerar matrizes é através de ciclos for . Por exemplo, para

gerar uma matriz M com i linhas e j colunas, a seguinte estrutura pode ser utilizada:

>> for i = 1:3, for j = 1:3, M(i,j) = i+j; end end

E obtemos como resultado a matriz:

>> M M = 2 3 4 3 4 5 4 5 6

OBS: o índice das matrizes começa em 1, não em 0.

2.2. Elementos de Matrizes

Os elementos das matrizes podem ser quaisquer expressões do MATLAB. Por exemplo:

>> x = [-1.3 sqrt(2) ((1+2+3)*4/5)^2] x = -1.3000 1.4142 23.0400

Page 15: APOSTILA MATLAB

Introdução ao MATLAB

15

Um elemento individual da matriz pode ser referenciado com índice entre

parênteses. Continuando o exemplo: >> x(6) = abs(x(1)) x = -1.3000 1.4142 23.0400 0 0 1.3000

Nota-se que a dimensão do vetor x é aumentada automaticamente de 1x3 para 1x6 de modo a acomodar o novo elemento, e que os elementos indefinidos do intervalo são estabelecidos como zero.

Matrizes de maior dimensão podem ser construídas a partir de pequenas matrizes. Por exemplo, pode-se anexar outra linha à matriz A usando:

>> r= [ 10 11 12]; >> A= [A;r] A = 1 2 3 4 5 6 7 8 7 10 11 12

Nota-se que o vetor r não foi listado porque ao seu final foi acrescentado ";".

Podem ser extraídas matrizes pequenas da matriz original utilizando “:”. Por exemplo: >> A = A(1:3,:) A = 1 2 3 4 5 6 7 8 7

Seleciona da linha 1 até a linha 3 e todas as colunas da matriz A atual.

2.3. Decaração de Variáveis

O MATLAB é uma linguagem de expressões. As expressões usadas são interpretadas e avaliadas pelo sistema. As declarações no MATLAB são freqüentemente da forma:

>> variável = expressão

Page 16: APOSTILA MATLAB

Introdução ao MATLAB

16

Ou simplesmente:

>> expressão

As expressões são compostas de operadores e outros caracteres

especiais, de funções e dos nomes das variáveis. As avaliações das expressões produzem matrizes, que são então mostradas na tela e atribuídas às variáveis para uso futuro. Se o nome da variável e o sinal de igualdade "=" são omitidos, a variável com o nome ans , que representa a palavra "answer " (resposta), é automaticamente criada. Por exemplo, introduzindo a expressão:

>> 1900/81 ans= 23.4568

Se o último caractere da declaração é um ponto e vírgula, ";", a

impressão na tela é suprimida, mas a tarefa é realizada. Esse procedimento é usado em arquivos com extensão ".m" e em situações onde o resultado é uma matriz de grandes dimensões e há interesse em apenas alguns dos seus elementos.

Se a expressão é tão grande que não cabe em apenas uma linha, pode-se continuar a expressão na próxima linha usando um espaço em branco e três pontos," ...", ao final das linhas incompletas. Por exemplo: >> s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 ... - 1/8 + 1/9 - 1/10 + 1/11 - 1/12 + 1/13;

Calcula o resultado da série, atribuindo o somatório à variável s, mas

não imprime o resultado na tela. As variáveis e funções podem ser formadas por um conjunto de letras,

ou por um conjunto de letras e números, onde somente os primeiros 19 caracteres do conjunto são identificados. O MATLAB faz distinção entre letras maiúsculas e minúsculas, assim a e A não são as mesmas variáveis. Todas as funções devem ser escritas em letras minúsculas: inv(A) calcula a inversa de A, mas INV(A) é uma função indefinida.

2.4. Informações sobre a Área de Trabalho

Os exemplos de declarações mostrados nos itens acima criaram

variáveis que são armazenadas na Área de Trabalho do MATLAB. Executando:

>> who

Obtém-se uma lista das variáveis armazenadas na Área de Trabalho:

Your variables are:

Page 17: APOSTILA MATLAB

Introdução ao MATLAB

17

A B ans r s x

que mostra as seis variáveis geradas nos exemplos, incluindo ans .

Observe que o comando who está em letras minúsculas . Todo comando no MATLAB deve ser inserido dessa forma.

Uma informação mais detalhada que indica a dimensão de cada uma das variáveis correntes é obtida com whos , que para o exemplo produz:

>> whos Name Size Bytes Class A 4x3 96 double array B 3x3 72 double array ans 3x3 72 double array r 1x3 24 double array s 1x1 8 double array x 1x3 24 double array Grand total is 37 elements using 296 bytes

Cada elemento de uma matriz real requer 8 bytes de memória, assim a matriz A de dimensão 4x3 faz uso de 96 bytes e todas as variáveis utilizadas um total de 296 bytes.

2.5. Números e Expressões Aritméticas

A notação decimal convencional, com ponto decimal opcional e o sinal negativo, é usada para números. A potência de dez pode ser incluída como um sufixo. A seguir são mostrados alguns exemplos de números aceitos:

3 -99 0.00001

9.637458638 1.602E-20 6.06375e23

As expressões podem ser construídas através dos operadores aritméticos usuais e das regras de precedência:

1 ^ Potenciação 2 / Divisão à direita

2 \ Divisão à esquerda

3 * Multiplicação 4 + Adição 4 - Subtração

Deve-se notar que existem dois símbolos para divisão: as expressões

1/4 e 4\1 possuem o mesmo valor numérico, isto é, 0.25.

Page 18: APOSTILA MATLAB

Introdução ao MATLAB

18

São usados parênteses na sua forma padrão para alterar a procedência usual dos operadores aritméticos.

2.6. Números e Matrizes Complexas

Os Números Complexos são permitidos em todas as operações e funções no MATLAB. Os números complexos são introduzidos utilizando as funções especiais i ou j que correspondem à parte imaginária de um número complexo. Por exemplo:

>> z= 3 + 4*i

ou >> z= 3 +4*j

Sabendo que um número complexo é constituído por uma parte real {Re}

e por uma parte imaginária {Im}, tal que: z = {Re} + {Im}*i

ele pode ser expresso na forma: >> z= r*exp(i*theta)

em que : >> r = abs(z) >> theta = angle(z)*180/pi

As seguintes declarações mostram dois caminhos convenientes para se

introduzir matrizes complexas no MATLAB: >> A= [1 2; 3 4]+i*[5 6;7 8]

ou >> A= [1+5*i 2+6*i; 3+7*i 4+8*i]

Ambas produzem o mesmo resultado.

Se quisermos determinar a parte real da matriz A usamos a função real(A), já a parte imaginária pode ser visualizada com a função imag(A) como pode ser visualizado abaixo: >> real(A) ans =

Page 19: APOSTILA MATLAB

Introdução ao MATLAB

19

1 2 3 4 >> imag(A) ans = 5 6 7 8

2.7. Formatação de Saída

O formato numérico exibido na tela pode ser modificado utilizando o

comando format , que afeta somente o modo como as matrizes são mostradas, e não como elas são calculadas ou guardadas (o MATLAB efetua todas as operações em dupla precisão).

Se todos os elementos da matriz são inteiros exatos, a matriz é mostrada num formato sem qualquer ponto decimal. Por exemplo:

>> x = [-1 0 1] x = -1 0 1

Se pelo menos um dos elementos da matriz não é inteiro exato, existem

várias possibilidades de formatar a saída. O formato padrão, chamado de formato short , mostra aproximadamente 5 dígitos significativos ou usam notação científica. Para modificar o formato da saída, devemos inserir o comando format . A tabela abaixo mostra os principais formatos:

Com o formato short e long , se o maior elemento da matriz é superior a

1000 ou inferior a 0.001, é aplicado um fator de escala comum para que a matriz completa seja mostrada. Por exemplo:

>> X = 1e20*x X = 1.0e+020 * 1.3333 0 0.0000

short 5 dígitos significativos short e 5 dígitos significativos em notação científica long 15 dígitos significativos long e 15 dígitos significativos em notação científica hex em sistema hexadecimal rat em formato de número racional bank duas casas após a vírgula + Mostra o sinal do número sem o seu valor, a

parte imaginária do número é ignorada

Page 20: APOSTILA MATLAB

Introdução ao MATLAB

20

Com o comando format + os símbolos "+", "-", e "espaço em branco " são mostrados, respectivamente para representar elementos positivos, elementos negativos e zeros.

2.8. Utilização do Help (Ajuda)

O MATLAB possui um comando de ajuda: help , que fornece

informações sobre a maior parte dos tópicos:

>> help

Para obter informações sobre um tópico específico, referir help tópico .

Por exemplo,

>> help plot

fornece uma lista de todos os comandos relacionados com gráficos bidimensionais. A mesma sintaxe é usada para obter informações sobre um comando específico.

2.9. Funções

As potencialidades do MATLAB residem no seu extenso conjunto de

funções. O MATLAB possui um grande número de funções intrínsecas que não podem ser alteradas pelo utilizador. Outras funções estão disponíveis numa biblioteca externa distribuída com o programa original (MATLAB TOOLBOX), que são na realidade arquivos com a extensão ".m" criados a partir das funções intrínsecas. As categorias gerais de funções matemáticas disponíveis no MATLAB incluem:

- Matemática elementar; - Funções especiais; - Matrizes elementares; - Matrizes especiais; - Decomposição e fatoração de matrizes; - Análise de dados; - Polinômios; - Solução de equações diferenciais; - Equações não-lineares e otimização; - Integração numérica; - Processamento de sinais; - Entre outras

As seções subseqüentes mostram mais detalhadamente as diferentes categorias de funções.

Qualquer informação adicional sobre os conteúdos das diversas categorias poderá ser encontrado no respectivo help .

Page 21: APOSTILA MATLAB

Introdução ao MATLAB

21

3. Manipulação de Matrizes e Vetores

3.1 . Operações com Matrizes

O MATLAB possui dois tipos diferentes de operações aritméticas. As operações aritméticas matriciais são definidas pelas regras da Álgebra Linear. As operações aritméticas com arrays (conjuntos) são efetuadas elemento por elemento. O caractere de ponto decimal “.” distingue as operações matriciais das operações com arrays. No entanto, como as operações matriciais e com arrays são iguais para a soma e para a subtração, o par de caracteres “.+” e “.-“ não é usado para estas.

As operações com matrizes no MATLAB são as seguintes: - Transposta; - Adição; - Subtração; - Multiplicação; - Divisão à direita; - Divisão à esquerda; - Potenciação;

A seguir cada uma destas operações é apresentada com maior detalhe. 3.1.1 Transposta

O caractere apóstrofo ( ' ) indica a transposta de uma matriz, por

exemplo:

>> B = A' % A variável B recebe a matriz transposta de A

Se Z for uma matriz complexa, Z’ será a matriz conjugada complexa

transposta.

Para obter simplesmente a transposta de Z deve-se usar Z.’, como

mostra o exemplo:

>>Z = [1 2; 3 4] + [5 6; 7 8]*i Z =

1.0000+ 5.0000i 2.0000+ 6.0000i 3.0000+ 7.0000i 4.0000+ 8.0000i >>Z1 = Z'

Z1 = 1.0000- 5.0000i 3.0000- 7.0000i 2.0000- 6.0000i 4.0000- 8.0000i

Manipulação de matrizes e vetores

Page 22: APOSTILA MATLAB

Introdução ao MATLAB

22

Caso desejar apenas a matriz complexa conjugada de Z deve-se usar

Z.’’

>> Z3=Z.'' Z3 = 1.0000 - 5.0000i 2.0000 - 6.0000i 3.0000 - 7.0000i 4.0000 - 8.0000i

3.1.2 Adição e Subtração

A adição e a subtração de matrizes são indicadas, respectivamente, por "+" e "-". As operações são definidas somente se as matrizes possuírem as mesmas dimensões.

A adição e a subtração também são definidas se um dos operadores for um escalar, ou seja, uma matriz 1x1. Neste caso, o escalar é adicionado ou subtraído de todos os elementos do outro operador. Por exemplo:

>> y = [1 2; 3 8] - 1 y = 0 1 2 7 3.1.3 Multiplicação

A multiplicação de matrizes é indicada por "*". A multiplicação x*y é

definida somente se a segunda dimensão de x for igual à primeira dimensão de y.

Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz. Por exemplo: >> x=[-1; 0; 2]; >> pi*x ans= -3.1416 0 6.2832

Se os tamanhos das matrizes forem incompatíveis para a operação matricial, será gerada uma mensagem de erro, com exceção do caso de operações entre escalares e matrizes (para adição, subtração, divisão e multiplicação). 3.1.4 Divisão

>>Z2 = Z.' Z2 = 1.0000+ 5.0000i 3.0000+ 7.0000i 2.0000+ 6.0000i 4.0000+ 8.0000i

Page 23: APOSTILA MATLAB

Introdução ao MATLAB

23

A divisão de matrizes requer especial atenção, pois existem dois

símbolos para divisão de matrizes no MATLAB "\" e "/". Se A for uma matriz inversível quadrada e b for um vetor coluna (ou linha) compatível, então A\b e b/A corresponderão respectivamente à multiplicação à esquerda e à direita da matriz b pela inversa da matriz A, ou inv(A)*b e b*inv(A) , mas o resultado é obtido diretamente: X = A\b é a solução de A*X = b X = b/A é a solução de X*A = b

Deve-se ter o cuidado de observar as dimensões das matrizes que estão envolvidas na operação, o número de colunas de A deve ser igual ao número de linhas de b (em A\b), já em b/A o número de linhas de A deve ser igual ao número de colunas de b (em A\b). A divisão à direita é definida em termos da divisão à esquerda por:

b/A = (A'\b)

3.1.5 Potenciação

A expressão A^p eleva A à p-ésima potência e é definida se A é matriz quadrada e p um escalar. Se p é um inteiro maior do que um, a potenciação é calculada como múltiplas multiplicações.

Se A é uma matriz e a é um escalar, a^A calcula o escalar elevado à matriz A fazendo uso dos autovalores e autovetores.

NOTA: X^A , sendo X e A matrizes, apresenta erro. 3.2 Operações Elemento a Elemento (Conjuntos)

O termo operações com conjuntos é utilizado quando as operações

aritméticas são realizadas entre os elementos que ocupam as mesmas posições em cada matriz (elemento por elemento). As operações com conjuntos são efetuadas como as operações usuais, utilizando-se os mesmos caracteres ("*", "/", "\", "^ " e " ‘ ") precedidos por um ponto "." (".*", "./", ".\", ".^ " e " .‘ ").

3.2.1 Adição e Subtração

Para a adição e a subtração, as operações com conjuntos e as

operações com matrizes são iguais. Deste modo os caracteres "+" e "-" são empregados do mesmo modo e considerando as mesmas restrições de utilização.

3.2.2 Multiplicação e Divisão

Page 24: APOSTILA MATLAB

Introdução ao MATLAB

24

A multiplicação de conjuntos é indicada por ".*". Se A e B são matrizes

com as mesmas dimensões, então A.*B indica um conjunto cujos elementos são simplesmente o produto dos elementos individuais de A e B.

As expressões A./B e A.\B formam um conjunto cujos elementos são simplesmente os quocientes dos elementos individuais de A e B. Assim:

>> a=[1 2 3]; >> b=[2 4 6]; >> x=a./b >> x=b./a x = x = 0.5000 0.5000 0.5000 2 2 2

3.2.3 Potenciação

A potenciação de conjuntos é indicada por ".^ ". A seguir são mostrados alguns exemplos utilizando os vetores x e y. A expressão:

A potenciação pode usar um escalar: >> x=[1 2 3]; >> a=x.^3 a = 1 8 27

Ou a base pode ser um escalar:

>> 2.^x ans = 1 4 8 3.3. Matrizes Elementares

Além das já descritas, o MATLAB dispõe de diversas funções que

permitem a rápida elaboração de matrizes padrão, dentre elas: 3.3.1 Geração de Vetores

O caractere dois pontos, ":", permite a geração de vetores no MATLAB.

A declaração:

>> x = 1 : 5

Gera um vetor linha contendo os números de 1 a 5 com incremento unitário. Produzindo: x = 1 2 3 4 5

Outros incrementos, diferentes da unidade podem ser utilizados, como seja o caso do seguinte exemplo que impõe um incremento de pi/4.

Page 25: APOSTILA MATLAB

Introdução ao MATLAB

25

>> y = 0 : pi/4 : pi y = 0 0.7854 1.5708 2.3562 3.1 416 Também são possíveis incrementos decrescentes (negativos).

Pode-se, também, gerar vetores linearmente espaçados fazendo uso da função linspace. Por exemplo, >> k = linspace (0, 1, 6) k = 0 0.2000 0.4000 0.6000 0.8 000 1.0000

Cria um vetor linearmente espaçado de 0 a 1, contendo 6 elementos. Ao pretender-se um espaçamento logarítmico desde o valor inicial 10x1

até ao valor final 10x2 do vetor composto por k elementos, a função a utilizar será: >> logspace (x1 , x2 , k)

A exceção para essa função é quando x2 = π. Caso isso ocorra, os k pontos estarão espaçados desde 10x1 até π.

3.3.2 . Matriz Identidade

De modo a construir uma matriz identidade (quadrada ou com dimensão

n x m, a função a utilizar é dada por): >> eye(m,n)

3.3.3 Matriz Composta por Elementos Unitários No caso de ser necessário a obtenção de uma matriz composta apenas

por elementos unitários, temos que: >> ones(m,n)

3.3.4 Matriz Nula Para efetuar qualquer tipo de manipulação matricial, poderá ser útil a

construção de uma matriz composta por elementos nulos: >> zeros(n,m)

3.3.5 Matriz Aleatória

Page 26: APOSTILA MATLAB

Introdução ao MATLAB

26

A elaboração de testes a qualquer programa desenvolvido no MATLAB, ou para utilização de um outro qualquer modo, poderá fazer uso de matrizes compostas por números aleatórios uniformemente distribuídos no intervalo entre 0 e 1. A função que realiza esta operação é: >> rand(m,n) onde m representa o número de linhas e n o número de colunas da matriz desejada.

No caso de se pretender uma distribuição normal dos números aleatórios, com média zero, variância um e devio padrão um, a função a ser utilizada será: >> randn(m,n)

Cabe salientar que em uma distribuição normal, 68% dos valores estão compreendidos entre –1 e 1.

O comando magic (n) cria uma matriz quadrada integral de dimensões n x n (linhas e colunas têm a mesma soma). >>x=magic(4)

3.4 Elementos de Matrizes

Um elemento individual da matriz pode ser indicado incluindo os seus subscritos entre parênteses. Por exemplo, dada a matriz A: A = 1 2 3 4 5 6 7 8 9

A declaração: >> A(3,3) = A(1,3) + A(3,1) A = 1 2 3 4 5 6 7 8 10

Um subscrito pode ser um vetor. Se X e V são vetores, então X(V) é [X(V(1)), X(V(2)), .... X(V(n))]. Para as matrizes, os subscritos vetores permitem o acesso às submatrizes contínuas e descontínuas. Por exemplo, suponha que A é uma matriz 10x10.

Page 27: APOSTILA MATLAB

Introdução ao MATLAB

27

A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 >> A(1:5,7:10) ans = 7 8 9 10 17 18 19 20 27 28 29 30 37 38 39 40 47 48 49 50

É uma submatriz 5x4 que consiste nas primeiras cinco linhas e nas últimas quatro colunas.

Utilizando os dois pontos no lugar de um subscrito denota-se todos elementos da linha ou coluna. Por exemplo,

>> A(1:2:5,:) ans = 1 2 3 4 5 6 7 8 9 10 21 22 23 24 25 26 27 28 29 30 41 42 43 44 45 46 47 48 49 50

É uma submatriz 3x10 que consiste da primeira, terceira e quinta linhas e todas colunas da matriz A.

3.5 Manipulação de Matrizes

Do mesmo modo, estão implementadas no código diversas funções que permitem a manipulação e construção de matrizes genéricas.

3.5.1 Matriz Diagonal ou Diagonal de uma Matriz

Se x for um vetor, diag(x) será a matriz diagonal com x na diagonal; >> x=[1 2 3 1 -1 4]; >> diag(x) ans = 1 0 0 0 0 0

Page 28: APOSTILA MATLAB

Introdução ao MATLAB

28

0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 4

Se A for uma matriz quadrada, então diag(A) será um vetor cujos componentes são os elementos da diagonal de A. >> A=[3 11 5; 4 1 -3; 6 2 1] A = 3 11 5 4 1 -3 6 2 1 >> diag(A) ans = 3 2 1

3.5.2 Matrizes Triangulares

O código possui duas funções que permitem a extração das matrizes triangular superior e triangular inferior de uma matriz quadrada. São elas, respectivamente: triu(A); tril(A);

3.5.3 Redimensionamento de Matrizes

Dada a matriz A composta por m linhas e n colunas A(m,n); poderá ser redimensionada, através do comando reshape (A,n,m) , desde que o produto de mxn se mantenha constante.

>>A(m,n) >> B = reshape(A,n,m) >> A=[1 2 3; 4 5 6] A = 1 2 3 4 5 6 >> B=reshape(A,3,2) B = 1 5 4 3 2 6

3.5.4 Rotação dos Elementos da Matriz

Page 29: APOSTILA MATLAB

Introdução ao MATLAB

29

Os elementos da matriz A poderão ser rodados 90º no sentido anti-horário (ou rodados k*90º) através do uso da função:

>>rot90(A,k) A = 1 2 3 4 5 6 >> rot90(A,1) ans = 3 6 2 5 1 4

4. Funções

Funções

Page 30: APOSTILA MATLAB

Introdução ao MATLAB

30

4.1 Funções Escalares

Algumas funções no MATLAB operam essencialmente sobre escalares, mas operam sobre cada elemento se aplicadas a uma matriz. As funções escalares mais comuns são: Exp Exponencial; Abs Valor absoluto; Log Logaritmo natural; Log10 Logaritmo base 10; sqrt Raiz quadrada; sin Seno; asin Arco seno; cos Coseno; acos Arco Coseno; tan Tangente; atan Arco Tangente; round Arredondamento ao inteiro mais próximo; floor Arredondamento ao inteiro mais próximo na

direção de menos infinito; ceil Arredondamento ao inteiro mais próximo na

direção de mais infinito; rem Resto da divisão; sign Para cada elemento de x, sign(x) retorna 1 se o

elemento é maior que zero, 0 se é igual a zero e -1 se ele é menor que zero

4.2. Funções Vetoriais

Opera com elementos de colunas desejadas, caso seja desejado operar

com linhas ao invés de colunas deve-se transpor a matriz e então operá-la com a sua coluna que antes era sua linha. Abaixo estão alguns exemplos de funções:

Page 31: APOSTILA MATLAB

Introdução ao MATLAB

31

4.3 Funções Matriciais

Uma boa aplicação do MATLAB é suas funções matriciais. Dentre as mais usadas estão essas: eig Valores próprios e vetores próprios; chol Fatorização de Cholesky; Svd Decomposição em fator singular; inv Inversa; lu Fatorização triangular LU; qr Fatorização ortogonal QR; hess Forma de Hessenberg; schur Decomposição de Schur; expm Matriz Exponencial; sqrtm Matriz de raiz quadrada; poly Polinômio característico; det Determinante; size Tamanho; norm Norma 1, Norma 2, Norma F, Norma

Infinita; cond Número de condição na norma 2; rank Número de linhas linearmente

independentes. Vamos dar um exemplo para ilustrar algumas funções:

max Valor máximo dos elementos de cada coluna;

sum Soma dos elementos de cada coluna; Median Valor mediano dos elementos de cada

coluna; any Devolve 1 se qualquer elemento da coluna

for diferente de 0; min Valor mínimo dos elementos de cada

coluna; prod Produto dos elementos de cada coluna; all Devolve 1 se todos os elementos de cada

coluna forem diferentes de 0; sort Organização dos elementos da coluna por

ordem decrescente de valor; Std Desvio padrão dos elementos de cada

coluna.

Page 32: APOSTILA MATLAB

Introdução ao MATLAB

32

» P=[1 0 0; 0 2 2; 2 3 1] P = 1 0 0 0 2 2 2 3 1 » inv(P) ans = 1.0000 0 0 -1.0000 -0.2500 0.5000 1.0000 0.7500 -0.5000 » poly(P) ans = 1 -4 -1 4 » size(P) ans = 3 3 » det(P) ans = -4

5. Polinômios

Polinômios

Page 33: APOSTILA MATLAB

Introdução ao MATLAB

33

Embora o MATLAB não permita trabalhar diretamente com polinômios, dispõe de um conjunto de funções dedicadas à sua manipulação.

Os polinômios são representados no MATLAB por vetores linhas que contêm os coeficientes das sucessivas potências do polinômio ordenados por ordem significativa decrescente. Vamos ilustrar com um exemplo:

» p = [1 -6 -72 -27] p = 1 -6 -72 -27 » x=roots(p) x = 12.1229 -5.7345 -0.3884 » p=poly(x) p = 1.0000 -6.0000 -72.0000 -27.0000

No exemplo acima definimos um polinômio qualquer p sendo (p = s³ -

6s² -72s -27) a seguir calculamos suas raízes através do comando roots e na seqüência pegamos os resultados das raízes e aplicamos a função poly chegando novamente no polinômio inicial p.

É válido relembrar de uma importante observação caso o nosso polinômio inicial tivesse um coeficiente diferente de 1 para o maior grau (s³) quando aplicássemos a função poly sobre as raízes o novo polinômio seria com coeficiente 1 para o maior grau, o que não mudaria nada pois é uma equação em que um lado tem um polinômio p e de outro zero, logo podemos multiplicar ambos os lados por qualquer variável.

x²+2x+4=0 ax²+2ax+4a=0a ax²+2ax+4a=0

Além das duas operações já citadas há ainda as básicas, soma,

subtração, multiplicação e divisão. Soma e subtração faz-se normalmente sem maiores problemas, para multiplicação usa-se conv e para a divisão deconv . Exemplo:

» p=[3 2 1] {definindo um primeiro polinômio} p = 3 2 1 » q=[4 3 1] { definindo um segundo polinômio } q = 4 3 1 » M=conv(p,q) {efetuando a multiplicação entre os dois polinômio s} M = 12 17 13 5 1 » [d,r]=deconv(M,q) {vamos dividir a multiplicação feita anteriormente, por o polinômio q e isto deverá resultar no polinômio p, a variável r corresponde ao resto que nesse caso, será 0} d = 3 2 1 r = 0 0 0 0 0

Page 34: APOSTILA MATLAB

Introdução ao MATLAB

34

6. Gráficos A construção de gráficos no MATLAB é mais uma das potencialidades do

sistema. Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada. No MATLAB existe uma vasta biblioteca de comandos gráficos.

Gráficos

Page 35: APOSTILA MATLAB

Introdução ao MATLAB

35

6.1 – Gráficos X-Y

Comandos de geração de gráficos bidimensionais:

plot Gráfico linear. loglog Gráfico em escala logarítmica.

semilogx Gráfico em escala semi-logarítmica (eixo x). semilogy Gráfico em escala semi-logarítmica (eixo y).

fill Desenhar polígono 2D. polar Gráfico em coordenadas polar. bar Gráfico de barras.

stem Gráfico de seqüência discreta. stairs Gráfico em degrau.

errorbar Gráfico do erro. hist Histograma. rose Histograma em ângulo.

compass Gráfico em forma de bússola. feather Gráfico em forma de pena.

fplot Gráfico da função. comet Gráfico com trajetória de cometa.

Se Y é um vetor, plot(Y) produz um gráfico linear dos elementos de Y

versus o índice dos elementos de Y. Por exemplo, para exibir os números [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14], basta introduzir o vetor e executar o comando plot:

>> Y = [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0.14]; >> plot(Y)

O MATLAB pode também exibir múltiplas linhas em apenas um gráfico.

Existem duas maneiras, a primeira resulta no uso de apenas dois argumentos, como em plot(X,Y) , onde X e/ou Y são matrizes. Então:

- Se Y é uma matriz e X um vetor, plot(X,Y) exibe sucessivamente as linhas ou colunas de Y versus o vetor X.

- Se X é uma matriz e Y é um vetor, plot(X,Y) exibe sucessivamente as linhas ou colunas de X versus o vetor Y.

- Se X e Y são matrizes com mesma dimensão, plot(X,Y) exibe sucessivamente as colunas de X versus as colunas de Y.

- Se Y é uma matriz, plot(Y) exibe sucessivamente as colunas de Y versus o índice de cada elemento da linha de Y.

O segundo método (e mais fácil) de exibir gráficos com múltiplas linhas faz uso do comando plot com múltiplos argumentos. Exploremo-lo em um exemplo mais detalhado.

Primeiramente, preparemos os dados, escolhendo o domínio e as funções a serem mostradas:

>> x = 0:0.3:30;

Page 36: APOSTILA MATLAB

Introdução ao MATLAB

36

>> y1 = exp(-.01*x).*sin(x); >> y2 = exp(-.05*x).*sin(.7*x); >> y3 = exp(-.1*x).*sin(.5*x);

Escolhamos uma janela para traçar o gráfico:

>> figure(1) O comando figure abre uma janela gráfica intitulada “Figure No.1 ”. Este

comando é opcional; se não for utilizado, o MATLAB abrirá uma janela gráfica padrão. Agora utilizaremos a função plot para plotar os três gráficos na mesma janela:

>> h = plot(x,y1,’b+:’,x,y2,’ro-‘,x,y3,’gx-.’);

O terceiro, o sexto e o nono argumento representam a seqüência de propriedades: cor, ponto e traço. Em ‘ro- .‘ temos uma linha vermelha com cada ponto representado por um círculo e o espaço entre ele preenchido por ponto-e-traço.

Observa-se que ‘h’ é uma referência ao gráfico plotado (neste caso, ‘h’ é um vetor de referências). Através do comando set , após os gráficos terem sido desenhados, é possível alterar os tipos de linhas, marcadores e cores para as curvas. Por exemplo, poderíamos fazer:

>> set(h,'LineWidth',2,'LineStyle','--') >> set(h,'Color','r')

Se desejássemos alterar apenas uma das curvas, passaríamos para o comando ‘set’ um elemento do vetor (h(2), por exemplo).

Vejamos resumidamente os principais tipos de linhas e cores:

6.1.1 Acessórios para os Gráficos

Definamos agora os limites dos eixos, pelo comando axis . Linhas em

grelha podem ser ativadas pela propriedade grid :

>> axis([0 20 -1 1]); >> grid on

Page 37: APOSTILA MATLAB

Introdução ao MATLAB

37

Para adicionarmos anotações no gráfico, como identificação dos eixos, título e legenda, usamos os seguintes comandos: Eixos: >> xlabel('Tempo'); ylabel('Amplitude');

Legenda e título: >> legend(h,'Primeiro','Segundo','Terceiro'); title ('Resposta no Tempo');

Obs.: Se dois gráficos tiverem sido adicionados separadamente em uma janela gráfica, o argumento de referência não é utilizado no comando ‘legend’.

E eis o gráfico resultante:

Para plotar mais de um gráfico na mesma janela, têm-se três opções. A

primeira foi utilizada no exemplo anterior, que seria usar um único comando com vários argumentos. A segunda é ativar a propriedade hold, que permite a inserção de dois ou mais gráficos, inserindo os comando separadamente.

>> hold on

Dessa forma, os gráficos serão sobrepostos em uma mesma janela

gráfica. No entanto, se não desejarmos mais essa função ativa, basta digitar:

>> hold off

E por última opção temos o comando subplot, que divide uma janela gráfica em várias janelas no seu interior.

Page 38: APOSTILA MATLAB

Introdução ao MATLAB

38

>>subplot(2,2,3)

Este comando divide a janela gráfica em uma matriz 2x2 (4 elementos, portanto) e prepara o terceiro elemento (linha 2, coluna 1) para receber futuros gráficos.

6.1.2 Números Complexos

Quando os argumentos a exibir são complexos, a parte imaginária é

ignorada, exceto quando é dado simplesmente um argumento complexo. Para este caso especial é exibida a parte real versus a parte imaginária. Então, plot(Z) , quando Z é um vetor complexo, é equivalente a plot(real(Z),imag(Z)) .

>> Z=[1+i*1;3+i*3;5+i*5;7+i*10;9+i*15]; >> plot(real(Z),imag(Z))

6.2 Gráficos Polares

Gráficos polares são úteis quando valores são representados por ângulo

e grandeza (magnitude). Por exemplo, se medirmos a intensidade luminosa ao redor de uma fonte de luz, podemos representar a informação com um ângulo fixando eixos e magnitude representando intensidade.

Coordenadas Polares: Um ponto é representado em coordenadas polares por um angulo θ e uma magnitude r. O valor de θ é geralmente dado entre 0 e 2θ. A magnitude é um valor positivo que representa a distância do eixo que fornece o angulo até o ponto.

polar(theta,r): Este comando generaliza gráficos polares com ângulo θ

(em radiano) e magnitude r correspondente. Exemplo: Os comando para a construção do gráfico da figura abaixo:

>> theta = 0:2*pi / 100 : 2*pi; >> r = theta / (2*pi); >> polar(theta,r);

Page 39: APOSTILA MATLAB

Introdução ao MATLAB

39

Transformação retangular / polar ; polar / retangul ar: As vezes, devido a praticidade é interessante transformarmos coordenadas de um sistema para outro.

As equações abaixo relacionam os sistemas polar e retangular: polar / retangular _________________________ x = r cos q ; y = r sin q ; retangular / polar _________________________ r = Ö x² + y² ; q = atan (y/x);

6.3. Gráficos 3D A rede de superfície pode ser gerada por um conjunto de valores em

uma matriz. Cada ponta na matriz representa o valor da superfície que corresponde ao ponto na tela.

Para gerar um arquivo que representa uma superfície 3D, primeiramente calculamos o conjunto dos valores de x e y que representam as variáveis independentes e depois calculamos os valores de z que representam os valores da superfície. O comando no MATLAB para plotar gráficos 3D é mesh(z).

O comando meshgrid tem os argumentos do vetor x e y, ou seja transforma o domínio especificado pelos vetores x e y em vetores que podem ser usados em cálculos de funções de 2 variáveis e construção de gráfico 3D.

Exemplo: Gerar o gráfico 3D da função -0.5 < x < 0.5 ; -0.5 < y < 0.5 ;

f(x ,y)= z = _1 - x²- y² 1 = |x² + y² + z²|

Solução:

[xgrid,ygrid]=meshgrid(-0.5:0.1:0.5,-0.5:0.1:0.5); z=sqrt(abs(1 - xgrid.^2 - ygrid.^2)); mesh(z);

Page 40: APOSTILA MATLAB

Introdução ao MATLAB

40

Estes são alguns dos comandos de exibição de gráficos tridimensionais e de contornos:

Quando geramos redes de superfície 3D podemos querer escolher a

posição de visão que será definida com os termos azimuth ( rotação horizontal ) e vertical elevation que especifica os graus (rotação vertical ).

Exemplo: Rotação horizontal:

plot3 Exibição do gráfico em espaço 3D. fill3 Desenhar polígono 3D. comet3 Exibir em 3D com trajetória de cometa. contour Exibir contorno 2D. contour3 Exibir contorno 3D. clabel Exibir contorno com valores. quiver Exibir gradiente. mesh Exibir malha 3D. meshc Combinação mesh/contour. surf Exibir superfície 3D. surfc Combinação surf/contour. surfil Exibir superfície 3D com iluminação. slice Plot visualização volumétrica. cylinder Gerar cilindro. sphere Gerar esfera.

Page 41: APOSTILA MATLAB

Introdução ao MATLAB

41

f(x ,y) = z = 1 - x²- y² 1 = |x² + y² + z²|

Solução:

Exemplo: Rotação vertical:

f(x ,y)= z = _1 - x²- y² 1 = |x² + y² + z²|

Solução:

>> [xgrid,ygrid] = meshgrid(-0.5:0.1:0.5;-0.5:0.1:0 .5); >> z=sqrt(abs(1 - xgrid.^2 - ygrid.^2)); >> mesh(z,[ - 37.5,0]);

>> [xgrid,ygrid]=meshgrid(-0.5:0.1:0.5;-0.5:0.1:0.5 ); >> z=sqrt(abs)1 - xgrid.^2 - ygrid.^2)); >> mesh(z,[-37.5,-30]);

Page 42: APOSTILA MATLAB

Introdução ao MATLAB

42

Page 43: APOSTILA MATLAB

Introdução ao MATLAB

43

7. Programação 7.1 Arquivo.m

Os comandos do MATLAB são normalmente introduzidos através da janela de comando, onde uma única linha de comando é introduzida e processada imediatamente. O MATLAB é, no entanto, capaz também de executar seqüências de comandos armazenadas em arquivos. Os arquivos que contêm as declarações do MATLAB são chamados arquivos “.m” , e consistem em seqüências de comandos normais do MATLAB, possibilitando incluir outros arquivos “.m” escritos no formato texto (ASCII). Para editar um arquivo texto na janela de comando do MATLAB selecione New M-File para criar um novo arquivo ou Open M-File para editar um arquivo .m já existente, a partir do menu File. Os arquivos podem, também, ser editados fora do MATLAB utilizando qualquer editor de texto. Para isso, basta salvar os arquivos com a extensão “.m”. Para executar um programa do tipo M-File , deve-se selecionar Run Script , também a partir do menu File. Existem alguns comandos e declarações especiais para serem usadas nos arquivos. Alguns comandos importantes para se trabalhar com arquivos.m são: % Usado para inserir comentários no texto; clear Apaga todo os dados da memória; input Usado quando se deseja adicionar um dado

ao problema pela janela de comando; pause Causa uma pausa na execução do

programa até que uma tecla seja digitada; clc Limpa a janela de comando figure(n) Mostra a janela gráfica de número n; close all Fecha todas as janelas gráficas.

7.2 Operadores Lógicos e Relacionais Os operadores usados para a comparação de duas matrizes com as mesmas dimensões são expressos por:

7.2.1 Operadores Relacionais

Programação

Page 44: APOSTILA MATLAB

Introdução ao MATLAB

44

Símbolo Descrição

< Menor < = Menor ou igual > Maior

> = Maior ou igual = = Igual ~ = Diferente

A comparação é feita entre os pares de elementos correspondentes e o resultado é uma matriz composta de números um(1) e zero(0), representando respectivamente verdadeiro e falso. Por exemplo: » 2+2 ~ = 4 ans = 0

Observação: Apenas os operadores “= =” e “~ =” testam tanto a parte

real como a imaginária, os demais, apenas a parte real. » x=5; y=3*(x= =3) y = 0 » x=5; y=3*(x= =5) y = 3 » x=5; y=3*(x~ =5) y = 0 » x=5; y=3*(x~ =3) y = 3

7.2.2 Operadores Lógicos

Símbolo Função

& AND | OR ~ NOT

xor XOR

Esses operadores operam da mesma forma que os operadores

relacionais, dando como resposta verdadeiro ou falso. Exemplo:

INPUTS AND OR XOR

Page 45: APOSTILA MATLAB

Introdução ao MATLAB

45

A B & | xor 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0

» A = [ 1 0 1 0 0 0 1 1 1] A = 1 0 1 0 0 0 1 1 1 » B= [ 0 1 0 0 0 1 -1 10 0] B = 0 1 0 0 0 1 1 1 0 » A&B ans = 0 0 0 0 0 0 1 1 0

Note que foi aplicado o operador lógico AND e esse comparou cada

elemento da matriz A com cada elemento da matriz B, sendo que sua resposta pode ser apenas 0 ou 1. Sendo que qualquer número diferente de 0, inclusive os negativos, é considerado 1 pois o MATLAB trabalha na linguagem binária.

Os operadores lógicos possuem a precedência mais baixa relativamente aos operadores aritméticos e relacionais.

A precedência entre os operadores lógicos se dá da seguinte maneira:

NOT Maior precedência; AND e OR Têm igual precedência após NOT;

7.3. Comandos For – While - If

Os comandos FOR, WHILE e IF controlam o fluxo e especificam a ordem e a estrutura de cálculo do programa. No MATLAB estes comandos são semelhantes aos usados na linguagem de programação C, mas com uma estrutura diferente. Nas próximas seções deste capítulo apresentaremos a estrutura de tomada de decisões IF e os dois comandos para gerar loops no MATLAB: o comando FOR e o comando WHILE.

7.3.1. Comando If

Page 46: APOSTILA MATLAB

Introdução ao MATLAB

46

Esta instrução permite que executemos um comando se a expressão lógica é verdadeira e um diferente comando se a expressão é falsa. A forma geral do comando if combinada à instrução else é mostrada a seguir:

if expressão grupo de comandos A else grupo de comandos B end

A seguir é apresentado um exemplo do uso da declaração if no MATLAB. Você pode fazê-lo na janela de comando ou ainda através do método .m novamente. for i = 1:5, for j = 1:5, if i = = j A(i,j)=2; else if abs(i-j) = =1 A(i,j) = -1; else A(i,j) = 0; end end end end A A = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2

Neste exemplo fizemos o uso do comando if, sendo que utilizamos, o

que é normal, um dentro de outro. Sempre lembrando que no uso do comando if devemos ter uma seqüência que executa caso a condição seja verdadeira e outra que não é requerida, mas pode-se ter também, que execute um outro processo caso a condição seja falsa (else ). Após o ciclo, pediu-se o valor da variável A para sabermos se realmente o comando funcionou.

7.3.2. Ciclo For

Page 47: APOSTILA MATLAB

Introdução ao MATLAB

47

O ciclo for é controlador de fluxo mais simples usado na programação MATLAB. Analisando a expressão: for i=1:5, x(i)=i^2; end

Pode-se notar que o ciclo for é dividido em três partes:

1. i =1 é realizado antes do ciclo começar. 2. Testando a condição que controla o ciclo (i<=5). Se for o ciclo é

executado. 3. Se o teste do ciclo for falso o ciclo termina devido ao comando end.

Exemplo: for i = 1:8 for j = 1:8, A(i,j) = i + j; B(i,j) = i - j; end end C= A + B C = 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 12 12 12 12 12 12 12 12 14 14 14 14 14 14 14 14 16 16 16 16 16 16 16 16

Neste exemplo fizemos duas matrizes através de dois ciclos variando de

1 a 8 e ao fim disso fizemos a operação da soma dessas duas matrizes gerando uma matriz C que é dada por:

C = A + B → C = (i + j) + (i - j) → C = 2i

7.3.3 Ciclo While No ciclo while apenas a condição é testada. Vamos fazer um exemplo agora utilizando o arquivo.m: Primeiro abra o menu File vá em New e em seguida seleciona M-file Agora na janela correspondente ao M-File escreva o seguinte comando: a=1;b=15; while a<b, clc disp( 'loop em curso' ) a=a+1 b=b-1

Page 48: APOSTILA MATLAB

Introdução ao MATLAB

48

pause(2) end clc disp( 'fim do loop' )

Antes de mais nada, salve o arquivo como loop.m na mesma pasta onde

você está rodando o programa. Nesse comando teremos uma comparação de dados entre as variáveis a

e b começando com a valendo 1 e b valendo 15 e enquanto a for menor que b o ciclo segue e a cada ciclo a variável a é incrementada em 1 e a b perde uma unidade, isso ocorrerá até que a fique maior que b. Também é importante salientar o comando pause que é o tempo que o ciclo irá levar a mais que o normal, pois como sabemos o processamento se daria em frações de segundos e consequentemente não poderíamos observar o comando, por isso o pause de 2 segundos.

Agora volte a janela de comando e digite loop que a instrução toda será processada.

7.4. Declarando Funções Para criarmos funções necessitamos trabalhar na janela de M-Files, para tanto, como você já sabe, vá em File→New→M-File. Antes de apresentarmos vamos dar as 3 regras principais para a criação de funções no MATLAB:

1. Deve-se ter ao menos o nome da função, a variável de entrada e a função f.

2. O arquivo .m deve ser salvo com o mesmo nome da função. 3. A função f deve ser igualada a função operacional. Vamos tornar mais claro esses pontos com um exemplo:

function f = hema(x) f = x/24/30/12

Abrimos o M-File e digitamos function f e após isso igualamos a uma

função que criaremos, no caso hema, que significa horas em ano sendo uma transformação. Na linha abaixo igualamos a função f ao corpo da função hema. E por último temos a nossa variável de entrada que é o x, que representa as horas. Pronto, agora basta salvar esse arquivo com o nome idêntico da função hema, após isso vamos à janela de comando principal e chamamos pela nova função:

» hema(8640) f = 1 ans =

Page 49: APOSTILA MATLAB

Introdução ao MATLAB

49

1

No caso, está digitado exatamente o valor de um ano em horas, portanto

a resposta é 1.

Aplicação à Solução de Problemas: Fibras Óticas

Se a luz está direcionada para o extremo de uma longa haste de vidro

ou plástico, a luz será totalmente refletida pelas paredes, ziguezagueando e segue adiante até chegar a outra extremidade. Este interessante fenômeno ótico pode ser usado para transmitir luz e imagens regulares, de um lugar para outro. Se “guia de luz”, a luz seguirá a forma da haste e emergirá somente na extremidade, como mostramos na figura a seguir:

A fibra ótica é uma fibra de vidro muito fina. Se os extremos das fibras são polidos e o arranjo espacial é o mesmo em ambos extremos (um feixe coerente), a fibra pode ser usada para transmitir uma imagem, e o feixe é chamado condutor de imagem. Se as fibras não têm o mesmo arranjo para ambos extremos (feixe incoerente), a luz é transmitida em vez da imagem, e por esta razão é chamada guia de luz. Por causa da flexibilidade das fibras óticas, as guias de luz e condutores de imagens são usadas em instrumentos projetados para permitir a observação visual de objetos ou áreas que de outro modo seriam inacessíveis. Por exemplo, um endoscópio é um instrumento usado por físicos para examinar o interior do corpo de um paciente com somente um pequeno corte. Um endoscópio usa uma fibra ótica para transmitir a luz necessária dentro do corpo de um paciente. As fibras óticas podem ser usadas para transmitir feixes de luz LASER, o qual pode ser usado para desobstruir artérias, quebrar pedras nos rins, e limpar cataratas. Este fenômeno de reflexão total interna origina-se da lei de Snell e depende unicamente dos índices de refração para os material considerados para guias de luz. Um guia de luz é composto de dois materiais ¾ o núcleo central e o material que o envolve, denominado de blindagem. O material que compõe o núcleo tem o índice de refração mais alto que o meio que o envolve. Quando a luz incide em uma interface entre dois meios com índices de refração diferentes, parte dela é refletida a outra parte é refratada. A quantidade de luz

Page 50: APOSTILA MATLAB

Introdução ao MATLAB

50

refratada depende dos índices de refração dos materiais e o ângulo de incidência da luz. Se a luz incidente na interface entre dois meios provém de um material com maior índice de refração, então parte da luz atravessa a interface. O ângulo de incidência onde a luz é totalmente refletida pela superfície é chamado de ângulo crítico qc. Como o ângulo crítico depende dos índices de refração de dois materiais, podemos calcular este ângulo e determinar se a luz que entra em uma haste a um ângulo particular permanecerá no interior da mesma. Suponha que n2 é o índice de refração do meio envolvente, e n1 é o índice de refração da haste. Se n2 é maior que n1, a haste não transmitirá luz; caso contrário, o ângulo crítico pode ser determinado pela equação:

21 nnsen c +=θ

Escreva um programa MATLAB que determina se a luz será ou não transmitida por dois materiais que forma um guia. Suponha que um arquivo de dados ASCII denominado indices.dat contenha o número de possíveis índices de refração da fibra seguido pelo índice de refração do meio que o envolve. O programa deve determinar se os materiais formarão um guia de luz e, então, para quais ângulos a luz entra no guia. 1. ENUNCIADO DO PROBLEMA Determine se os materiais especificados formarão ou não um guia de luz. Se eles não formarem, calcule os ângulos para o qual a luz pode entra na haste e ser transmitida. 2. DESCRIÇÃO ENTRADA \ SAÍDA

Como mostramos na figura abaixo, a entrada ao programa é um arquivo de dados contendo os índices de refração para os guias de luz em potencial. A saída é uma mensagem indicando se a luz é ou não transmitida e o ângulos para quais pode entrar no guia.

Page 51: APOSTILA MATLAB

Introdução ao MATLAB

51

3. EXEMPLO MANUAL

O índice de refração do ar é 1,0003 e o índice do vidro é 1,5. Se formarmos um guia de luz de vidro envolvido pelo ar, o ângulo crítico qc pode ser calculado como mostramos a seguir:

( ) °==

=

= −−− 82,4166687,0

5,1

003,1 11

1

21 sensenn

nsencθ

O guia de luz transmitirá luz para todos os ângulos de incidência maiores

que 41,820 . 4. SOLUÇÃO DO MATLAB 5. TESTANDO

Aplicação à Solução de Problemas: Equilíbrio de Temperatura

O projeto de novos materiais para o aperfeiçoamento das características

do fluxo de ar acerca dos veículos envolve a análise dos materiais para não somente o fluxo de ar mas também para propriedades como a distribuição de temperatura. Neste problema, consideramos a distribuição em uma fina placa metálica tal que esta alcance um ponto de equilíbrio térmico. A placa é projetada para ser usada em uma aplicação na qual as temperaturas de todos os quatro lados da placa metálica estejam a temperaturas constantes ou a temperaturas isotérmicas. A temperatura para os outros pontos da placa é uma função da temperatura dos pontos envolventes. Se considerarmos as placas para serem semelhantes a uma grade, então uma matriz poderia ser

Page 52: APOSTILA MATLAB

Introdução ao MATLAB

52

usada para armazenar as temperaturas dos pontos correspondentes sobre a placa. A figura abaixo mostra uma grade para uma placa que está sendo analisada com seis medidas de temperatura ao longo dos lados e oito temperaturas ao longo das partes superior e inferior. Os pontos isotérmicos nos quatros lados são sombreados. Um total de 48 valores de temperaturas está representado.

Grade de uma placa metálica As temperaturas isotérmicas sobre os quatro lados seriam especificadas; supomos que os lados superior, esquerdo e direito são mantidos à mesma temperatura enquanto que o lado inferior da placa é mantida a uma temperatura diferente. Os pontos restantes são inicialmente selecionados para uma temperatura arbitrária, normalmente zero. A nova temperatura de cada ponto interno é calculado como a média das quatro temperaturas envolventes (veja a figura a seguir) e é dada por:

44321

0

TTTTT

+++=

Page 53: APOSTILA MATLAB

Introdução ao MATLAB

53

Depois de calcular a nova temperatura para um ponto interno, a diferença entre a antiga e a temperatura recente é calculada. Se a mudança de temperatura for maior que algum valor de tolerância especificado, a placa já não está em equilíbrio térmico, e o processo inteiro é repetido.

Usamos as duas matrizes para as temperaturas, uma das antigas temperaturas e uma das recentes temperaturas. Precisamos de duas matrizes porque supomos que a temperatura muda para todos os pontos que ocorrem simultaneamente, sempre que as calculamos. Se usarmos uma única matriz, estaríamos atualizando informação sem que antes estivéssemos com a informação antiga. Por exemplo, suponha que estamos calculando a nova temperatura para a posição (3, 3). O novo valor é a média das temperaturas nas posições (2, 3), (3, 2), (3, 4), e (4, 3). Quando calculamos a nova temperatura para a posição (3, 4), novamente calculamos uma média, mas queremos usar o antigo valor na posição (3, 3), e não o seu valor atualizado. Portanto, usamos uma matriz de temperaturas antigas para calcular uma matriz de novas temperaturas e para determinar se alguma temperatura muda acima da tolerância. Quando movemos as novas temperaturas para o conjunto antigo. Quando nenhuma das temperaturas muda acima da tolerância, supomos que o equilíbrio foi alcançado, e imprimimos as temperaturas finais. 1. ENUNCIADO DO PROBLEMA Determine os valores de equilíbrio para uma placa de metal com lados isotérmicos. 2. DESCRIÇÃO ENTRADA / SAÍDA

Page 54: APOSTILA MATLAB

Introdução ao MATLAB

54

Como mostra a figura abaixo, a entrada é o tamanho da grade da placa, as temperaturas isotérmicas e o valor de tolerância. A saída é o grupo de temperaturas de equilíbrio para a placa de metal.

3. EXEMPLO MANUAL Tenha a certeza que compreende o processo, examinamos um simples

caso, estudando cada iteração. Supondo que a matriz contém quatro linhas e quatro colunas. As temperaturas isotérmicas são 100º e 50º, e nós iniciamos todos os pontos restantes do zero. Usamos uma tolerância de 40º. O grupo inicial de temperaturas e as sucessivas iterações ao equilíbrio térmico são mostradas a seguir:

Temperaturas Iniciais

50505050

10000100

10000100

100100100100

Primeira Iteração

50505050

1005,375,37100

1005050100

100100100100

Segunda Iteração

50505050

100375,59375,59100

100875,71875,71100

100100100100

Page 55: APOSTILA MATLAB

Introdução ao MATLAB

55

Como nenhuma das temperaturas alteradas entre a primeira e segunda interação ultrapassa a tolerância de 400, as temperaturas na segunda iteração estão também em equilíbrio.

4. SOLUÇÃO DO MATLAB 5. TESTANDO

Page 56: APOSTILA MATLAB

Introdução ao MATLAB

56

8. Sistemas de Equações Lineares 8.1. Interpretação gráfica

A interpretação gráfica é necessária para solução a sistemas de equações lineares ocorrente freqüentemente em problemas de engenharia. Há vários métodos existentes para solucionar sistemas de equações, mas eles envolvem operações demoradas com grande oportunidade de erro. Entretanto temos que entender o processo para que possamos corrigir e interpretar os resultados do computador. Uma equação linear com duas variáveis, semelhante a 2x - y = 3, define uma linha reta e é escrita na forma y = mx + b, onde m é o coeficiente angular e b o coeficiente linear. Podemos escrever y = 2x - 3. Se tivermos 2 equações lineares, elas podem representar 2 diferentes retas que se interceptam em um mesmo ponto, ou elas podem representar 2 retas paralelas que nunca se interceptam ou ainda podem representar a mesma reta. Estas possibilidades são vistas na figura 8.1.

Sistemas de Equações Lineares

Page 57: APOSTILA MATLAB

Introdução ao MATLAB

57

Equações que representam duas retas que se interceptam podem ser

facilmente identificadas porque possuem diferentes coeficientes angulares.

Exemplo: y = 2x -3 ; y = -x +3;

Equações que representam duas retas paralelas possuem o mesmo coeficiente angular e coeficientes lineares diferentes.

Exemplo: y = 2x - 3 ; y = 2x + 1;

Page 58: APOSTILA MATLAB

Introdução ao MATLAB

58

Equações que representam a mesma reta são equações com mesmo coeficiente angular e mesmo coeficiente linear.

Exemplo: y = 2x - 3 ; 3y = 6x - 9;

Se a equação linear contém 3 variáveis x, y, z então ela representa um plano em espaço tridimensional.

Se tivermos duas equações com três variáveis, elas podem representar

dois planos que se interceptam em uma linha, ou podem representar dois planos paralelos ou ainda podem representar o mesmo plano. Essas idéias podem ser estendidas para mais de três variáveis, porém se torna difícil a visualização desta situação. Em muitos sistemas de engenharia estamos interessados em determinar se existe uma solução comum para sistemas de equações. Se a solução comum existe então podemos determiná-la. Vamos discutir dois métodos para solução de sistemas de equação usando MATLAB. 8.2. Solução usando operação com matrizes

Considerando o sistema seguinte de três equações com três variáveis desconhecidas. 3x +2y -z = 10 -x +3y +2z = 5 x -y -z = -1 Podemos reescrever os sistemas de equações usando as seguintes matrizes: A = 3 2 -1 x = x B = 10 -1 3 2 y 5 1 -1 -1 z -1

Usando multiplicação de matrizes, o sistemas de equações pode ser escrito na forma: Ax = B 8.3. Divisão de matrizes No MATLAB, um sistema de equações simultâneas pode ser resolvido usando divisão de matrizes. A solução da equação da matriz Ax = B pode ser calculada usando divisão A\B. Exemplo: Ax = B

Page 59: APOSTILA MATLAB

Introdução ao MATLAB

59

A = [3, 2, -1; -1, 3, 2; 1, -1, -1]; B = [10; 5; -1]; x =A \ B;

O vetor x contém os seguintes valores -2; 5; -6. Para confirmar se os valores de x estão corretos podemos multiplicar A*x e veremos que o resultado será B. 8.4. Matriz inversa O sistema de equações pode ser resolvido usando matriz inversa. Por exemplo assumimos que A, x, B são matrizes definidas a seguir: A = 3 2 -1 x = x B = 10 -1 3 2 y 5 1-1 -1 z -1

Então A*x = B. Suponha que multiplicamos ambos os lados da equação

da matriz por A^-1 então temos: A^-1*A*x =A^ -1*B] Mas A^-1*A é igual a matriz identidade I, então temos: I*x=A^-1*B ou x = A^-1*B; No MATLAB podemos calcular essa expressão usando o comando: X = inv(A)*B;

Aplicação à solução de problemas:

Análise de circuito elétrico

A análise de circuito elétrico freqüentemente envolve o encontro de soluções de conjunto de equações. Essas equações são usadas para descrever as correntes que entram e que saem dos nós, ou a voltagem em cada malha. A figura abaixo nos mostra um circuito com duas fontes de tensão. As três equações que descrevem a tensão ao redor dos três laços são:

Page 60: APOSTILA MATLAB

Introdução ao MATLAB

60

( R1+R2 )i1 -R2i2 +0i3 = V1 -R2i1 +(R2+R3+R4) i2 -R4i3 = 0 0i1 -R4i2 +(R4+R5)i3 = -V2

Problema : Calcular as três correntes do circuito da figura 8.2 considerando os valores da figura para R1, R2, R3, R4, R5, V1 e V2. Entrada / Saída:

3. SOLUÇÃO NO MATLAB 4. TESTANDO

Page 61: APOSTILA MATLAB

Introdução ao MATLAB

61

9. Cáculo 9.1. Zeros de Funções

O MATLAB encontra zeros de funções usando o comando fzero. A função, da qual deseja-se encontrar os zeros, deve ser definida em um arquivo .m como definido previamente. Considere a seguinte função f (x) = sin(x) - cos(x). A função func1 é então escrita:

function f = func1(x); f = sin(x) - cos(x);

A raiz pode ser determinada usando o comando fzero no comand

window do MATLAB ou no interior de um arquivo .m.

>> fzero('func1',1) ans = 0.7854

Note que o segundo argumento, 1, é um chute inicial para o cálculo da

raiz. Note também que o valor do ângulo x que satisfaz f (x) = 0 está em radianos (0.7854 radianos = 45 graus). No entanto, existem outros valores de x para os quais f (x) = 0, isto é, a função f (x) tem outras raízes. Dando o chute inicial 3, por exemplo, tem-se

>> fzero('func1',3) ans = 3.9270 ou, em graus, 225°. Este comando pode ser utilizado com qualquer outra função escrita no MATLAB.

Os dois zeros calculados anteriormente podem ser verificados no gráfico da função.

>> fplot('func1',[0 2*pi]);grid;

Cálculo

Page 62: APOSTILA MATLAB

Introdução ao MATLAB

62

9.2. Minimização de Funções Continuando o exemplo anterior, a localização do ponto de mínimo da

função func1(x) no intervalo de -1 a 2pi é obtido da seguinte maneira, a partir do uso da função fminbnd.

>> [xmin ymin] = fminbnd('func1',0,2*pi) xmin = 5.49778788018538 ymin = -1.41421356237271 9.3. Limites

Para efetuar uma operação com limites no MATLAB, o comando que se deve dar é: limit(f(x),x,a) onde f(x) é a função que se quer achar o limite, x é a variável e a é o número no qual o x está tendendo )( ax → .

Exemplo: Achar o limite abaixo:

a. 2

2

2 1

1lim x

x

x −+

>> syms x >> limit(((1+x^2)/(1-x^2)),x,2) ans= -5/3

9.4. Limites à esquerda e à direita

Page 63: APOSTILA MATLAB

Introdução ao MATLAB

63

Para calcular limites à esquerda e àdireita, o comando é: limit(f(x),x,a,’left’) e limit(f(x),x,a,’right’), onde ‘left’ e ‘right’ são os comandos para clacular à esquerda e à direita, respectivamente.

Exemplo: Achar o limite abaixo:

a.3

1 )1(

1lim −

+−→ x

x

x

b.3lim

3 −+→ x

x

x

>> syms x >> limit((x/(x-3)),x,3,’right’) ans= inf >> limit(((x+1)/(x-1)^3),x,1,’left’) ans = -inf

Page 64: APOSTILA MATLAB

Introdução ao MATLAB

64

10. Integração Numérica 10.1. Integrais

Na integração de funções, o comando que o MATLAB reconhece para tal operação é int(f(x)).

Exemplo: Integrar as funções abaixo: a. ∫ − dxxx 2)1(

b. dxx

xx∫

+−2

34

7

532

Utilizando o comando acima explicado:

>> syms x >> f=((x^1/2)*(1-x)^2); >> int(f) ans = 1/8*x^4-1/3*x^3+1/4*x^2 >> f=(((2*x^4)-(3*x^3)+5)/(7*x^2)); >> int(f) ans = -2/21*x^3-3/14*x^2-5/7/x

10.2. Integrais Definidas

As integrais definidas podem ser calculadas com o comando int(f(x),a,b), onde a é o limite inferior e b, o limite superior da integral.

Exemplos:

a. ∫ −

2

02)3(

2dx

x

x

b.∫ −−1

0

2 )321( dxxx

>> syms x >> it(((2*x)/(x-3)^2),0,2) ans = 4-2*log(3) >> int((1-2*x-3*x^2),0,1)

Integração Numérica

Page 65: APOSTILA MATLAB

Introdução ao MATLAB

65

ans = -1

10.3. Integrais Definidas (outros métodos)

As integrais definidas podem ser aproximadas usando a regra de

Simpson com o comando quad ou usando a regra trapezoidal com o comando trapz. Os dois comandos trabalham de maneira bem diferente. 10.2.1 Regra Trapezoidal

Quando a área sob a curva pode ser representada por trapézios e o intervalo [a,b], dividido em n partes iguais, a área aproximada poderá ser calculada através da seguinte fórmula:

onde os valores de xi representam os pontos no final da cada trapézio e

x0 = a e xn = b. A estimativa da integral melhora quando usarmos um maior número de componentes ( como por exemplo trapézios), para aproximar a área sob a curva, pois quanto menor for o intervalo da função a curva tende a uma reta.

O comando trapz aproxima a integral usando os pontos da função definidos pelo usuário. Assim, para usar este comando primeiro deve-se definir os vetores x, no intervalo [a, b], e f, os valores da função correspondentes aos valores definidos no vetor x. Considere, por exemplo, a seguinte integral.

A aproximação para esta integral pode ser calculada através do seguinte

programa:

function I = Integral(dx); x = 0:dx:1; y = 2*x.*exp(-x.^2); I = trapz(x,y);

Este programa cria um vetor x de a = 0 até b = 1, com incremento dx definido pelo usuário, calcula os valores de f (x) nestes pontos e usa o comando trapz para aproximar a integral de f (x). O cálculo da integral é feito no MATLAB, usando a recém-definida função “Integral”, da seguinte maneira.

Page 66: APOSTILA MATLAB

Introdução ao MATLAB

66

>> integral(.1) ans = 0.6298

Para um dx menor.

>> integral(.02) ans = 0.6320

Observe que as aproximações da integral para dx = 0.1 e dx = 0.02 são

diferentes. De fato, usando o incremento menor dx = 0.02 aproxima-se melhor a área sob a curva f (x). O valor exato desta integral é Iexato = 1 – exp(-1) ou, calculando no MATLAB I = 0.63212055882856.

A figura seguinte mostra graficamente a função para dx = 0.1 e para dx = 0.02. A área sob a curva é a integral definida da função f (x).

Observando o gráfico da função, é fácil imaginar porque a diminuição do incremento dx melhora a aproximação da integral. No entanto, na próxima seção, um método mais eficiente para o cálculo da integral é apresentado.

10.2.2 Regra de Simpson

O comando quad permite que se calcule a integral I usando a Regra de Simpson. A sintaxe deste comando é a seguinte:

quad('fc',a,b,tol)

Entre os argumentos, 'fc' é um arquivo.m em que se define a função da

qual se quer calcular a integral, a e b são os limites de integração e tol é a

Page 67: APOSTILA MATLAB

Introdução ao MATLAB

67

tolerância de erro exigida para a aproximação da integral. Mostra-se mais adiante que, quanto menor a tolerância de erro exigida, mais preciso é o cálculo da integral.

Primeiro cria-se o programa func2.m que define a função f (x).

function y=func2(x) y=2*x.*exp(-x.^2);

O cálculo da integral I pode ser efetuado usando a tolerância usual que

é de 10-3. Neste caso, é desnecessário definir tol no comand window.

>> quad('func2',0,1) ans = 0.63212053454568

Calculando agora com uma tolerância de 10-8. >> quad('func2',0,1,1e-8) ans = 0.63212055882677

Note que, comparando-se com o valor exato apresentado na seção

anterior, quando se diminui a tolerância melhora-se a aproximação da integral.

10.2.3 Regra de Newton-Cotes

O comando quad8 usa uma forma adaptada da regra de Newton-Cotes. Este comando funciona melhor em certas funções com certos tipos de singularidades como, por exemplo:

Lembrando que uma singularidade é um ponto no qual uma função ou

sua derivada não é definida ou tende para o infinito. Tanto quad8 quanto quad8 escrevem na tela uma mensagem quando

detectam uma singularidade, mas ainda assim o valor estimado da integral é retornado.

Exercício 1 Seja a função f(x) = | x |. Resolva as integrais abaixo usando o MATLAB e compare com os resultados obtidos a mão.

Page 68: APOSTILA MATLAB

Introdução ao MATLAB

68

a. int[0.6,0.5] f(x) dx b. int[0.5,-0.5] f(x) dx c. int[0.0,-1.0] f(x) dx

Problema Aplicado:

Análise de Escoamento de um Óleo num Oleoduto

A análise do fluxo de um líquido em duto tem aplicação em muitos sistemas diferentes, incluindo o estudo em veias e artérias no corpo humano, o sistema hidráulico de uma cidade, o sistema de irrigação de uma fazenda, o sistema de jato de tinta de uma impressora, etc. O atrito de um fluxo ao passar num oleoduto circular gera a chamada velocidade de perfil no fluido.

O óleo que está em contato com as paredes do duto não está se movendo na mesma velocidade que o óleo no centro do fluido. O diagrama abaixo mostra como a velocidade do óleo varia de acordo com o diâmetro do duto e define as variáveis usadas para esta análise:

A velocidade de perfil é definida pela seguinte equação:

onde n é um número inteiro entre 5 e 10 que define o contorno do escoamento do óleo. A velocidade média de escoamento do óleo pode ser calculada integrando-se a velocidade de perfil no intervalo de 0 a r0.

Page 69: APOSTILA MATLAB

Introdução ao MATLAB

69

Os valores de vmax e de n podem ser medidos experimentalmente, e o

valor de r0 é o próprio raio do tubo. Escreva um programa no MATLAB para integrar a velocidade de perfil e assim determinar a velocidade média do óleo no duto. Método Para a Resolução do Problema 1. O PROBLEMA EM SI

Calcular a velocidade média do óleo em um duto. 2. DESCRIÇÃO DA ENTRADA E SAÍDA

Os dados experimentais que serão tomados como entrada em nosso programa são a velocidade máxima vmax, o raio do duto r0, e o valor de n.A saída de nosso programa será a velocidade média do óleo no duto.

3. FORMA QUE AJUDARÁ NA QUESTÃO

Plotar um gráfico da função r (1 - r / r0) 1 / n e estimar o valor da integral através do cálculo da área sob a curva. 4. SOLUÇÃO NO MATLAB

Page 70: APOSTILA MATLAB

Introdução ao MATLAB

70

11. Diferenciação Numérica

A derivada de uma função f em um ponto pode ser descrita graficamente como a inclinação da reta que tangencia a função naquele ponto. Pontos da função onde a derivada é zero são chamados pontos críticos. São pontos onde a tangente é representada por uma linha horizontal e que, por isso, definem o local de máximo e de mínimo da função. Podemos perceber ao analisar uma determinada função num determinado intervalo que o sinal da derivada pode mudar, e, se esse sinal muda, significa que dentro deste intervalo existe local de máximo e local de mínimo. Podemos também analisar uma função pela sua derivada segunda. De modo que, se a derivada segunda de um ponto crítico é positiva, então o valor da função naquele ponto significa um local de mínimo. Da mesma forma, se a derivada segunda de um ponto crítico é negativa, então a função possui um local de máximo.

11.1. Derivação por expressões de diferenças

As técnicas de diferenciação numérica estimam a derivada de uma função em um ponto kx através da aproximação da inclinação da reta tangente à curva neste ponto usando valores que a função assume em pontos perto de

kx . Essa aproximação pode ser feita de vários modos. Assim, dependendo dos pontos, temos três técnicas:

Diferenciação Numérica

Page 71: APOSTILA MATLAB

Introdução ao MATLAB

71

A derivada segunda pode ser achada através da fórmula:

11.2. Comando diff Para o cálculo de derivadas, o comando no MATLAB é diff(f(x)), onde f(x) é a função que se quer determinar a derivada. Exemplo: Derivar as funções abaixo: a. xxxf 32)( 2 +=

b.x

xf−

=3

1)(

Utilizando o comando acima explicado: >> syms x >>diff(|2*x^2)+3*x) ans = 4*x+3 >>diff((1/|3-x|)) ans = 1/(3-x)^3

Page 72: APOSTILA MATLAB

Introdução ao MATLAB

72

11.3. Derivadas Superiores

As derivadas superiores podem ser calculadas através do comando diff(f(x),2), onde essa representação é para a derivada segunda da função f(x), para derivada terceira, coloca-se 3 no lugar do número 2, para derivada quarta, o número 4 e assim por diante.

Exemplo: Achar a derivada segunda das seguintes funções:

a. x

xf−

=3

1)(

b.x

xxf1

)( −=

Utilizando o comando acima explicado:

>> syms x >> diff((1/|3-x|),2) ans = 2/(3-x)^3 >>diff((x-(1/x)),2) ans = -2/x^3

11.4. Derivadas Trigonométricas:

Exemplo: Derivar as seguintes funções: a. )sen()( xxf = b. )2cos()( xxf = c. )53tan()( += xxf

>> syms x >> diff(sin|x|) ans = cos(x) >>diff(cos|2*x|) ans = -2*sin|2*x| >>diff(tan|3*x+5|) ans = 3+3*tan(3*x+5)^2

Page 73: APOSTILA MATLAB

Introdução ao MATLAB

73

12. Ajuste de Curvas Em numerosas áreas, precisa-se do uso de uma equação para se

resolver um problema. O que fazer se nós só estivermos com os dados na mão? Nesse caso, o uso do ajustamento e interpolação poderá nos facilitar essa resolução.

12.1. Ajuste de Curvas

No MATLAB, a função polyfit pode resolver quando você tem os dados e tem que transformar em polinômios. A ilustração abaixo, permite-nos ver o uso dessa função. Depois, vamos plotar para ver se o ajustamento está certo: » x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1]; » y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];

Para usar o comando polyfit deve-se indicar qual o grau do polinômio

para se tentar ajustar. Por exemplo, se n=1, ele tentará ajustar para uma reta. Agora, se for n=2, como o nosso caso, ele indicará um polinômio de grau 2.

Exemplo: » n=2; » p=polyfit(x,y,n) p = -9.8108 20.1293 -0.0317

O resultado do nosso ajuste é: 0317.01293.208108.9 2 −+− xx . Vamos agora verificar se o ajuste está certo: » xi=linspace(0,1,100); » z=polyval(p,xi); » plot(x,y,'o',x,y,xi,z,':') » xlabel('x'),ylabel('y'),title('Ajuste para uma cu rva quadrática')

Ajuste de Curvas e Interpolação

Page 74: APOSTILA MATLAB

Introdução ao MATLAB

74

12.2. Interpolação Unidimensional

Para ilustrar uma interpolação unidimensional, vamos considerar o seguinte exemplo: fazendo parte de um projeto científico, foram coletadas informações sobre temperaturas durante um dia, num período de doze horas. Como saber a temperatura em uma hora qualquer?

Vamos plotar esses dados: » horas=1:12; » temps=[5 8 9 15 25 29 31 30 22 25 27 24]; » plot(horas,temps,horas,temps,'+') » title('Temperaturas') » xlabel('Hora'),ylabel('GrausCelcius')

0 2 4 6 8 10 12 5

10

15

20

25

30

35 Temperaturas

Hora

Graus Celcius

Page 75: APOSTILA MATLAB

Introdução ao MATLAB

75

Para estimar a temperatura numa determinada hora, usamos a função interp1.

Exemplo: » t=interp1(horas,temps,9.3) % Estimar a hora 9,3 t = 22.9000 » t=interp1(horas,temps,4.7) % Estimar a hora 4,7 t = 22 » t=interp1(horas,temps,[3.2 6.5 7.1 11.7]) t = 10.2000 30.0000 30.9000 24.9000

Para se ter uma precisão ainda maior, deve-se usar o argumento spline.

Exemplo: » t=interp1(horas,temps,9.3,'spline') t = 21.8577 » t=interp1(horas,temps,4.7,'spline') t = 22.3143 » t=interp1(horas,temps,[3.2 6.5 7.1 11.7],'spline' ) t = 9.6734 30.0427 31.1755 25.3820

A interpolação tipo spline é diferente da linear, pois emprega o conceito

diferencial, daí os resultados serem deferentes. O tipo spline é mais indicado quando se quer utilizar para gráficos.

Exemplo: » h=1:0.1:12; » t=interp1(horas,temps,h,'spline'); » plot(horas,temps,'--',horas,temps,'+',h,t,'r') » title('Temperaturas') » xlabel('Hora'),ylabel('Graus Celcius')

Page 76: APOSTILA MATLAB

Introdução ao MATLAB

76

0 2 4 6 8 10 125

10

15

20

25

30

35Temperaturas

Hora

Graus

Celcius

Aplicação à Solução de Problemas : Braço Robótico

Assim como este sistema de manipulação existem vários outros usados em vários tipos de robôs, que se utilizam de um avançado sistema de controle para guiar um braço robótico para a posição desejada. Um dos anseios de um sistema de controle é que o caminho percorrido pelo braço ao se mover de um local para o outro, ao pegar ou soltar um objeto, seja feito regularmente, evitando assim possíveis ‘trancos’ durante o percurso.

O caminho percorrido pelo braço será definido através de coordenadas

de pontos por onde o braço irá se mover. Então podemos utilizar a interpolação para definir uma curva suave, regida por estas coordenadas, para mostrar o comportamento desse braço ao longo de uma trajetória.

Uma parte importante no desenvolvimento do algoritmo ou da solução

deste problema está na consideração de situações especiais. Neste problema nós assumimos que pontos nos quais o braço irá passar precisarão estar na ordem para mover o braço na trajetória desejada que será: posição inicial, posição intermediária, posição para pegar o objeto, posição para colocar o objeto no local desejado e finalmente posição inicial. E, consideraremos também que cada ponto conterá três coordenadas: x, y(que serão as coordenadas relativas a posição inicial), e uma terceira coordenada dizendo o código da respectiva posição, de acordo com a tabela abaixo:

Page 77: APOSTILA MATLAB

Introdução ao MATLAB

77

Queremos então utilizar uma spline para visualizarmos o comportamento

do braço robótico. Método para a resolução do problema 1. PROBLEMA EM SI Desenhar uma curva suave utilizando a interpolação por spline que pode

ser usada para guiar um braço robótico para uma determinada trajetória. 2. DESCRIÇÃO DA ENTRADA E DA SAÍDA A entrada é constituída de um arquivo contendo as coordenadas x e y

dos pontos pelos quais o braço robótico deverá passar. A saída do programa será a curva correspondente ao comportamento do

robô ao percorrer estes pontos

3. SOLUÇÃO NO MATLAB 4. TESTANDO

Page 78: APOSTILA MATLAB

Introdução ao MATLAB

78

13. Análise Polinomial

Este capítulo traz uma série de comandos no MATLAB para a análise polinomial. Primeiro vamos discutir meios de avaliar os polinômios e como trabalhar o seu comportamento. Uma aplicação deste conceito está na modelagem da altitude e velocidade de um balão. A seguir definiremos as raízes dos polinômios. Polinômios normalmente aparecem em aplicações da Engenharia e na Ciência em geral porque eles constituem ainda bons modelos para representar sistemas físicos. 13.1. Avaliação do polinômio Como exemplo vamos tomar o seguinte polinômio:

( ) 2.55.03 34 −+−= xxxxf Se x assumir valores escalares, podemos escrever: f(x) = 3*x ^4 - 0.5*x ^3 + x - 5.2;

Se x for um vetor ou uma matriz devemos escrever: f(x) = 3* x .^4 - 0.5* x .^3 + x - 5.2;

onde o tamanho da matriz f será o mesmo da matriz x. 13.2. Comando polyval

Este comando possui dois argumentos. O primeiro argumento contém os coeficientes do polinômio em questão e o segundo argumento contém a matriz para a qual desejamos avaliar o polinômio. Exemplo 1 a = [3,-0.5,0,1,-5.2]; f = polyval(a,x);

Esses comandos também podem ser combinados em um só: f = polyval([3,-0.5,0,1,-5.2],x);

O tamanho de f terá que ser igual ao tamanho de x, seja ele um escalar,

vetor ou matriz.

Análise Polinomial

Page 79: APOSTILA MATLAB

Introdução ao MATLAB

79

Supondo que queiramos o valor da função ( ) 5.25.23 235 −−+−= xxxxg , para x no intervalo de[0,5]:

x:0:0.025:5; a = [-1,0,3,-2,5,0,-2.5]; g = polyval(a,x)

Quando x for um escalar ou um vetor, polyval consegue calcular o valor da função operando elemento por elemento. Mas quando x for uma matriz usa-se o comando polyvalm: f = polyvalm(a,x);

sendo a matriz x, uma matriz quadrada. 13.3. Operações Aritméticas

Podemos trabalhar com polinômios armazenando seus coeficientes em vetores, e trabalhar apenas com estes vetores.

13.3.1 Soma e subtração Para somar ou subtrair polinômios basta somar ou subtrair seus respectivos coeficientes. O MATLAB não apresenta um comando específico par somar polinômios. A soma ou subtração padrão funciona se ambos os vetores polinomiais forem do mesmo tamanho. Somemos os polinômios a seguir:

( ) 4.23 24 +−−= xxxxg

( ) 16524 23 −+−= xxxxh

( ) ( ) ( )xhxgxsom +=

( ) ( ) ( )xhxgxsub −= Para multiplicar um polinômio por um escalar (sendo ele positivo ou negativo), basta definir o polinômio pelos seus coeficientes e efetuar a multiplicação. Multipliquemos o polinômio:

( ) ( )xfxg 3= No MATLAB:

Page 80: APOSTILA MATLAB

Introdução ao MATLAB

80

f = [ 3,-6,1];

g = 3 * f

13.3.2. Multiplicação A multiplicação polinomial é efetuada por meio do comando conv (que faz a convolução entre dois conjuntos). A multiplicação de mais de dois polinômios requer o uso repetido de conv. m = conv(g,h)

13.3.3. Divisão No MATLAB a divisão de polinômios é feita através do comando deconv: [q,r] = deconv(g,h)

Esse resultado nos diz que g dividido por h nos dá o polinômio de quociente q e resto r.

Aplicação à Solução de Problemas: Balões Meteorológ icos

Balões são usados para reunir problemas de temperatura e pressão nas diferentes altitudes da atmosfera. O balão consegue ganhar altitude porque nele está presente um gás de menor densidade que o próprio ar ao seu redor. Durante o dia, devido a presença da luz solar, o gás Hélio se expande, se tornando mais denso que o ar e assim fazendo com que o balão suba. Durante a noite, o gás Hélio esfria e fica mais denso, e com isso o balão desce a baixa altitude. No dia seguinte o sol novamente esquenta o gás e o balão sobe. Com o passar dos dias, esse processo gera vários valores de altitude que geralmente podem ser aproximados por uma equação polinomial. Assumindo que o seguinte polinômio represente a altitude em metros, durante as primeiras 48 horas de um balão:

( ) 22041003801212.0 234 ++−+−= ttttxh

onde t é medido em horas. O modelo polinomial para velocidade, obtido através da derivada, em metros por hora do balão é o seguinte: ( ) 41007603648.0 23 +−+−= tttxv Método para a resolução do problema 1. PROBLEMA EM SI:

Page 81: APOSTILA MATLAB

Introdução ao MATLAB

81

Usando o polinômio dado fazer o gráfico da altitude e da velocidade do balão em questão. E achar também a máxima altitude por ele atingida. 2. DIAGRAMA ENTRADA/SAÍDA:

Neste diagrama é mostrado que não existe nenhuma entrada externa ao programa. A saída consiste em dois gráficos e na altitude máxima atingida e o seu tempo correspondente.

3. SOBRE O PROGRAMA:

Queremos que apenas o programa faça o gráfico de acordo com as nossas informações e então calcule o máximo valor atingido no gráfico. Devemos também fazer que nosso programa converta metros por hora em metros por segundo. 4. SOLUÇÃO NO MATLAB:

Vamos usar o comando polyval para gerar os pontos para formar o gráfico. O comando max é usado para determinar o valor máximo da função.

Page 82: APOSTILA MATLAB

Introdução ao MATLAB

82

13.4. Raízes de polinômios

Achar as raízes de um polinômio, isto é, os valores para os quais o polinômio é igual a zero, é um problema comum em muitas áreas do conhecimento, como por exemplo, achar as raízes de equações que regem o desempenho de um sistema de controle de um braço robótico, ou ainda equações que demonstram a arrancada ou freada brusca de um carro, ou analisando a resposta de um motor, e analisando a estabilidade de um filtro digital.

Se assumirmos que os coeficientes (a1, , ...) de um polinômio são valores reais, poderemos encontrar raízes complexas. Se um polinômio é fatorado em termos lineares, fica fácil de identificar suas raízes, igualando cada termo a zero. Um exemplo consiste no polinômio:

( ) 62 −+= xxxf que ao ser fatorado se torna:

( ) )3).(2( +−= xxxf

As raízes da equação são os valores de x para os quais a função f(x) é igual a zero, ou seja, x = 2 e x = -3.

No gráfico, as raízes são valores onde a função corta o eixo x. Um polinômio do terceiro grau tem exatamente três raízes que podem ser: - três raízes reais; - três raízes iguais; - uma raiz real e duas raízes iguais; - uma raiz real e um par conjugado de raízes complexas.

Se a função f(x) for um polinômio de grau n, ela terá exatamente n raízes. Estas n raízes podem conter múltiplas raízes ou raízes complexas. No MATLAB, um polinômio é representado por um vetor linha dos seus coeficientes em ordem decrescente. Observe que os termos com coeficiente zero têm de ser incluídos. Dada esta forma, as raízes do polinômio são encontradas usando-se o comando roots do MATLAB. Já que tanto um polinômio quanto suas raízes são vetores no MATLAB, o MATLAB adota a convenção de colocar os polinômios como vetores linha e as raízes como vetores coluna. Para ilustrar este comando vamos determinar as raízes do seguinte polinômio:

( ) 1032 23 +−−= xxxxf

Page 83: APOSTILA MATLAB

Introdução ao MATLAB

83

No MATLAB: p = [1,-2,-3,10];

r = roots(p)

Lembrando que estes comandos podem ser dados de um só vez: r = roots([1,-2,-3,10]);

Os valores das raízes serão: 2 + i, 2 - i e -2.

Agora, dadas as raízes de um polinômio, também é possível construir o polinômio associado. No MATLAB, o comando poly é encarregado de executar essa tarefa. onde o argumento do comando poly é o vetor contendo as raízes do polinômio que desejamos determinar. Exemplo 2 Sejam as raízes de um polinômio -1, 1 e 3. Determinar este polinômio. No MATLAB: a = poly ([-1,1,3]’);

Exemplo 3 Determine as raízes dos seguintes polinômios e plote seu gráfico, com seu eixo apropriado, com o objetivo de verificar se o polinômio atravessa o eixo x bem nos locais das raízes. a. ( ) 825 23 ++−= xxxxf

b. ( ) 442 ++= xxxg

c. ( ) 241027113 2345 −++−+= xxxxxxh

d. ( ) 143 235 −−= xxxxi

Page 84: APOSTILA MATLAB

Introdução ao MATLAB

84

15. Transformadas

As transformadas são usadas com muita freqüência em Engenharia para mudar o campo de referência entre o domínio do tempo e o domínio s, domínio da freqüência ou domínio Z. Há muitas técnicas para analisar estados de equilíbrio e sistemas que sofrem mudanças muito suaves no domínio do tempo, mas os sistemas complexos quase sempre podem ser analisados mais facilmente em outros domínios. 15.1. Funções Degrau e Impulso

Os problemas de Engenharia freqüentemente fazem uso da função Degrau u(t) e impulso δ(t) na descrição de sistemas. A função Degrau Ku(t - a), onde K é uma constante, é definida como Ku(t - a) = 0 para t < a e Ku(t - a) = K para t >a. Eis um gráfico da função Degrau Ku(t - a):

A função impulso δ(t) é a derivada da função Degrau u(t). A função

Degrau K δ(t-a) é definida como K δ(t-a) = 0 para t<a e ∫−∞

=− KdtatK )(δ para

t= ª. Quando representada em gráfico ela é comumente representada como uma seta de amplitude K em t = a . Eis o gráfico de K δ(t - a):

Exemplo: u = ‘k*Heaviside(t-a)’ d = diff(u) int(d)

Transformadas

Page 85: APOSTILA MATLAB

Introdução ao MATLAB

85

15.2. Transformada de Laplace

A Transformada de Laplace realiza a operação

Para transformar f(t), no domínio do tempo, em F(s), no domínio de s. A Transformada de Laplace da função cosseno amortecido e-at cos(wt) é encontrada usando-se a função Laplace: f=sym(‘exp(-a*t)*cos(w*t)’) F= laplace(f) pretty(F) laplace(‘Dirac(t)’) laplace(‘Heaviside(t)’)

As expressões podem ser transformadas novamente para o domínio do

tempo, usando-se o inverso da transformada de Laplace, invlaplace, que realiza a operação f(t). Usando F do exemplo acima temos:

invlaplace(F)

15.3. Transformada de Fourier

A Transformada de Fourier e sua inversa são muito usadas em análise de circuitos para determinar as características de um sistema em ambos os domínios de tempo e de freqüência. O MATLAB usa as funções fourier e invfourier para transformar expressões entre domínios. A Transformada de Fourier e sua inversa são definidas

O MATLAB usa um w para representar ω em expressões simbólicas. Exemplo: f= ‘t*exp(-t^2)’ F= fourier(f) invfourier(F)

15.4. Transformada Z

Page 86: APOSTILA MATLAB

Introdução ao MATLAB

86

As transformadas de Laplace e Fourier são usadas para analisar

sistemas de tempo contínuos. Transformadas Z, por outro lado, são usadas para analisar sistemas de tempo discreto. A Transformada Z é definida como:

, onde z é um número complexo.

A Transformada z e a Transformada z inversa são obtidas usando-se as funções ztrans e invztrans. O formato é similar ao das funções de transformadas de Laplace e Fourier. Exemplo: f= ‘2 ^ n / 7- (-5) ^ n / 7’ G= ztrans(f) pretty(G) invtrans(G)

Page 87: APOSTILA MATLAB

Introdução ao MATLAB

87

16. SIMULINK O que é SIMULINK?

SIMULINK é um programa utilizado para modelagem, simulação e análise de sistemas dinâmicos. O programa se aplica a sistemas lineares e não lineares, contínuos e/ou discretos no tempo.

Os principais focos de utilização do MATLAB e do Simulink.

Utiliza uma interface gráfica com o usuário para construção dos modelos

a partir de diagramas em blocos, através de operações de clique-e-arraste do mouse. Com esta interface podem-se criar modelos da mesma forma que se faz com papel e caneta. SIMULINK é o resultado de uma longa evolução de pacotes de simulação anteriores que necessitavam a formulação de equações diferenciais ou de equações de diferenças em linguagens de programação. Inclui bibliotecas de blocos contendo fontes, visualizadores, componentes lineares, não lineares e conectores, com a opção de criação ou personalização de blocos.

SIMULINK

Page 88: APOSTILA MATLAB

Introdução ao MATLAB

88

Após a definição do modelo, a simulação pode ser feita com diferentes algoritmos de resolução, escolhidos a partir dos menus do SIMULINK ou da linha de comando do MATLAB. Os menus são particularmente convenientes para o trabalho interativo, enquanto a linha de comando tem sua utilidade na simulação repetitiva a qual se deseja somente mudar parâmetros. Usando osciloscópios (Scopes) ou outros visualizadores, têm-se o resultado gráfico da simulação enquanto esta está sendo executada. Os resultados da simulação podem ser exportados para o MATLAB para futuro processamento ou visualização.

As ferramentas de análise de modelos incluem ferramentas de linearização e ajuste (Trimming) que podem ser acessadas a partir da linha de comando do MATLAB, assim como várias ferramentas do MATLAB e suas TOOLBOXES específicas. Sendo o MATLAB e o SIMULINK integrados, pode-se simular analisar e revisar os modelos em qualquer dos dois ambientes.

Page 89: APOSTILA MATLAB

Introdução ao MATLAB

89

16.1. Introdução 16.1.1. Diagrama de Blocos

A representação dos sistemas físicos por meio de equações nem sempre deixa clara a relação entre as funções de entrada e de saída desses sistemas. É, portanto conveniente e desejável sistematizar a descrição matemática de um sistema, de tal forma que aquela relação seja expressa claramente.

Exemplo de um diagrama de blocos complexo, para análise dos sistemas transmissor, do motor e de freios de um automóvel.

Uma forma de apresentação das equações diferenciais de um sistema

consiste no emprego de Diagramas de Bloco, em que cada bloco representa uma operação matemática, associando pares entrada-saída. Quando o sistema é linear, ou puder ser linearizado, é possível tomar as transformadas de Laplace das equações do sistema, considerando condições iniciais nulas.

A relação entre cada grandeza de saída e a correspondente grandeza de entrada se chama função de transferência.

Introdução

Page 90: APOSTILA MATLAB

Introdução ao MATLAB

90

Usando as transformadas de Laplace, essas funções são em geral, funções de s. Quando essas funções são colocadas em vários blocos, o diagrama é chamado Diagrama de Bloco.

Em geral, os diagramas de bloco são úteis na visualização das funções dos diversos componentes do sistema, bem como permitem estudos de “signal-flow”.

Os diagramas e bloco são mais fáceis de desenhar do que os circuitos que eles representam. Partindo-se de um diagrama de bloco, é possível, mediante a utilização de regras especiais, denominadas “Álgebra dos diagramas de Bloco” reduzir o diagrama a um único bloco e, assim, achar a função global de transferência do problema, sem necessidade de resolver o sistema inicial de equações diferenciais que, algumas vezes, exige muito tempo devido ao elevado número de equações envolvidas. 16.1.2. Símbolos

Os símbolos utilizados na técnica de diagramas de bloco são muito simples, e se encontram representados a seguir:

Variável X(s)

Operador Variável de entrada – X(s) Variável de saída – Y(s) Função de transferência – G(s) Relação representada – Y(s)=G(s) X(s)

Somador Relação representada F(s) = X(s) ± Y(s)

Tomada de Variável Observar que a tomada de uma variável não altera seu valor. A variável X(s) chega ao nó e as variáveis transmitidas são iguais a X(s).

16.2. Conhecendo o SIMULINK 16.2.1. Acessando o SIMULINK

Conhecendo o SIMULINK

Page 91: APOSTILA MATLAB

Introdução ao MATLAB

91

Para acessar o SIMULINK deve-se primeiro abrir o MATLAB, pois apesar de ser uma aplicação específica, este não trabalha independente e utiliza suas ferramentas de cálculo.

A partir do Windows 95/98, deve-se clicar duas vezes no ícone do MATLAB. Aberto o programa deve-se então clicar no ícone “Start Simulink” na barra de ferramentas do MATLAB ou digitar “simulink” na linha de comando e pressionar enter logo em seguida, como mostrado a seguir:

>> simulink <enter> 16.2.2. Construindo um Modelo Simples Exemplificando a utilização do SIMULINK, temos um modelo a criar. Este deve resolver a equação diferencial:

)(tsenx =•

; onde x(0) =0

Sendo o Simulink uma extensão do MATLAB, este deve ser carregado a partir do MATLAB. Inicie o Simulink clicando no seu ícone na barra de ferramentas do MATLAB como mostrado na figura:

Duas janelas se abrirão na tela. A primeira janela é a biblioteca de blocos do SIMULINK mostrado na figura. A segunda é uma janela em branco para construção do modelo, nomeada untitled até que seja nomeada com outro nome.

Page 92: APOSTILA MATLAB

Introdução ao MATLAB

92

Dê um click duplo no ícone Sources na janela de bibliotecas do SIMULINK.

Page 93: APOSTILA MATLAB

Introdução ao MATLAB

93

Arraste o bloco de onda senoidal (Sine Wave) para a janela do modelo.

Uma cópia deste bloco deve ser criada nesta janela.

Abra a biblioteca dispositivos de saída (Sinks) e arraste um SCOPE para a janela do modelo em construção.

Page 94: APOSTILA MATLAB

Introdução ao MATLAB

94

A seguir, conecte os blocos para completar o modelo como na figura a seguir:

Dê um duplo click no bloco SCOPE e na barra de menu do SIMULINK clique SIMULATION:START . A simulação será executada, resultando no gráfico gerado no bloco SCOPE, mostrado a seguir:

Page 95: APOSTILA MATLAB

Introdução ao MATLAB

95

Obs.: A integral é definida entre to e tf. Para to = 0, cos(t)=1.

Para verificar se o gráfico gerado representa a solução da equação diferencial desejada, deve-se resolver a mesma analiticamente, cujo resultado é: x( t) =1- cos(t), que corresponde ao gráfico apresentado. 16.2.3 - Outro Modelo

O modelo anterior serviu como exemplo de implementação no SIMULINK, mas está longe de representar um caso usual de utilização do software devido à pequena quantidade de blocos e ligações. Agora será usado um modelo de um processo biológico para ilustrar vários níveis adicionais de dificuldade na implementação. Scheinerman descreveu um modelo simples do crescimento de bactérias isoladas do ambiente externo num pote. Admite-se que as bactérias nascem numa taxa proporcional ao número de bactérias presentes e que elas morrem a uma taxa proporcional ao quadrado do número de bactérias presentes. Se x representa o número de bactérias presentes, a taxa em que as bactérias nascem é definida por:

Taxa de Natalidade = bx; Taxa de Mortalidade = px2 A taxa total de mudança na população de bactérias é a diferença entre a

natalidade e a mortalidade de bactérias. O sistema pode ser então descrito

pela equação diferencial a seguir: 2pxbxx −=•

Partindo disto será então construído o modelo do sistema dinâmico

supondo que b=1 bactéria/hora e p=0,5 bactéria/hora. Será determinado o números de bactérias contidas no pote após 1 hora, admitindo que inicialmente existiam 100 bactérias presentes. Crie uma nova janela de modelo na barra de menu escolhendo FILE:NEW .

Este é um sistema de primeira ordem, o que quer dizer que requer somente um integrador para resolver a equação diferencial. A entrada do integrador é x& e a saída é x. Abra o biblioteca linear e arraste o integrador para a janela do modelo, seguindo a posição mostrada na figura:

Page 96: APOSTILA MATLAB

Introdução ao MATLAB

96

Ainda na biblioteca Linear arraste dois blocos de ganhos (Gain) para a

janela do modelo e posicione-os como na figura. O SIMULINK exige que cada bloco tenha seu nome único. Devido a isto, o segundo bloco de ganho será nomeado GAIN1. Arraste ainda um bloco de soma (Sum) e a seguir feche a janela da biblioteca linear.

É boa técnica fechar todas as janelas que não estão sendo utilizadas. Isto favorece uma melhor utilização da memória disponível no microcomputador.

Abra agora a biblioteca de blocos não lineares (Nonlinear) e arraste um bloco de produto (product) para a posição mostrada. Este bloco será utilizado para calcular o valor de x2.

Page 97: APOSTILA MATLAB

Introdução ao MATLAB

97

Abra a seguir a biblioteca dispositivos de saída (Sinks) e arraste um bloco SCOPE para a janela do modelo seguindo a posição mostrada.

A orientação padrão do SIMULINK de todos os blocos é posicionar entradas à esquerda e saídas à direita. Porém este modelo será muito mais legível se invertermos os blocos de ganho e produto. Iniciando com o Produto, deve-se primeiro clicar sobre ele de modo a selecioná-lo. Pequenos quadros pretos aparecerão nas quinas do bloco indicando seleção. No menu do SIMULINK, escolha FORMAT: FLIP BLOCK . Agora as entradas estão à direita e as saídas à esquerda. Repita a operação de inversão para cada bloco de Ganho. O modelo agora deve estar semelhante à figura:

Page 98: APOSTILA MATLAB

Introdução ao MATLAB

98

Trace agora uma linha de sinal da saída do bloco de soma para a entrada do integrador e outra da saída do integrador para a entrada do SCOPE.

A seguir é necessário conectar a linha que liga o integrador ao SCOPE ao bloco de ganho situado na parte inferior da janela, pois esta linha contém o valor de x. Para fazê-lo, pressione a tecla CTRL do teclado e clique na linha de sinal. O cursor do mouse irá mudar para uma cruz. Conserve a tecla do mouse pressionada enquanto faz a ligação e solte agora a tecla CTRL. Leve a linha até a entrada do bloco de ganho. O SIMULINK automaticamente ajusta a linha com um ângulo de 90o. Se o mouse possuir três botões as operações de clicar e arrastar podem ser feitas utilizando o botão direito. Repita a operação ligando a linha de sinal Integrador-SCOPE até a entrada superior do bloco de produto. Da linha de sinal que liga a entrada superior do bloco de produto repita a

Page 99: APOSTILA MATLAB

Introdução ao MATLAB

99

operação de ligação para a entrada inferior do mesmo bloco, de modo que o bloco execute a operação 2xxx =⋅ . Conecte agora a saída do bloco de produto à entrada do ganho na parte superior da janela de modelo. Sua janela agora deve estar da seguinte forma:

Conecte agora a saída do ganho superior à entrada superior do bloco de soma e a.saída do ganho inferior à entrada inferior do mesmo bloco de soma.

O modelo agora está completo, mas os blocos devem ser configurados (parametrizados) para que este represente o sistema desejado. O SIMULINK tem.como default para os blocos de ganho o valor de 1.0, para o bloco de soma duas.entradas positivas e para o integrador o valor inicial 0.0. O valor inicial do

Page 100: APOSTILA MATLAB

Introdução ao MATLAB

100

integrador representa o número inicial de bactérias presentes no pote. Será iniciada agora a parametrização com os blocos de ganho. Dê um duplo clique no ganho da parte superior e mude o valor de 1.0 para 0.5 na caixa de diálogo que irá aparecer, a seguir clique em Close . Note que o valor do ganho do bloco muda para 0.5 no diagrama em blocos.

Agora dê um duplo clique no bloco de soma e no campo List of signs mude de ++ para -+ na caixa de diálogo que abrirá. Os sinais representam os próprios sinais de entrada no bloco. A seguir clique em Close . Note agora que no bloco de soma o sinal superior é negativo e o inferior é positivo, sendo então

a saída a diferença das entradas que representa •x de acordo com a equação

diferencial após substituir os valores de p e b.

Para finalizar a configuração, deve-se definir o número inicial de bactérias. Para isto, dê um duplo clique no integrador e no campo Initial condition mude para 100, e após clique Close .

Page 101: APOSTILA MATLAB

Introdução ao MATLAB

101

A duração da simulação é definida no tempo default de 0 a 10. Neste caso, desejase saber o resultado após 1 hora. Para mudar este tempo, seleciona-se na barra de menu a opção Simulation:Parameters e no campo Stop Time digita-se 1, fechando em Close logo a seguir.

Page 102: APOSTILA MATLAB

Introdução ao MATLAB

102

O modelo agora está completo e pronto para ser executado. Para salvar

na barra de menu clique em File:Save e entre com o nome desejado. O modelo será salvo com o nome digitado e a extensão .mdl, e seu nome aparecerá na barra de título da janela de edição.

Abra agora o SCOPE com um duplo clique e a seguir na barra de menu, clique em Simulation:Start para iniciar a execução.

O SCOPE nem sempre mostra a figura numa boa escala para visualização. O botão Autoscale na barra de ferramentas do SCOPE redimensiona a escala para acomodar todos os valores.

16.2.4 - Usando o Help do SIMULINK

O SIMULINK possui um extensivo sistema de help on-line. Os arquivos de help foram desenvolvidos para serem visualizados por navegadores internet como Netscape ou Internet Explorer. Uma detalhada documentação on-line

Page 103: APOSTILA MATLAB

Introdução ao MATLAB

103

para todos os blocos do SIMULINK está disponível no Block-Browser. Um detalhado help também está disponível clicando no botão de help na caixa de diálogo que se abre quando se seleciona Simulantion:Parameters na barra de menu.

Para se consultar o help sobre um bloco qualquer se deve inicialmente dar um clique duplo sobre o bloco desejado. A seguir clica-se no botão de help que aparece na caixa de diálogo que se abre. O seu Navegador Internet irá abrir o Block Browser correspondente.

Page 104: APOSTILA MATLAB

Introdução ao MATLAB

104

Na janela do Block Browser existem 3 quadros. O superior contém um

ícone para cada biblioteca do SIMULINK. O ícone selecionado é destacado com uma sombra.

O quadro inferior esquerdo contém ícones para todos os blocos contidos na biblioteca selecionada no quadro superior. Clicando num bloco nesta janela o help correspondente aparece no quadro inferior direito.

No quadro superior existe ainda um campo de pesquisa denominado Search , no qual pode se localizar rapidamente um bloco, mesmo quando não se sabe a que biblioteca este pertence.

O help do SIMULINK contém informações valiosas. É boa prática utilizá-lo com freqüência. Outra boa prática é o uso do notebook em anotações durante a aula. Isto facilita a execução de certas rotinas, por muitas vezes modificando somente parâmetros de configuração.

16.3. Construindo Modelos no SIMULINK 16.3.1 - Elementos de Modelos

Um modelo SIMULINK consiste de 3 tipos de componentes: Fontes, o sistema a ser modelado e dispositivo de saída.

O elemento central, o sistema, é a representação de um diagrama em blocos de um sistema dinâmico a ser modelado no SIMULINK. As fontes são as entradas aplicadas ao sistema dinâmico. Podem incluir constantes, geradores de funções como senóides ou degrau, ou ainda sinais personalizados pelo usuário criados no MATLAB. São encontrados na biblioteca de fontes (sources). A saída do sistema é entregue aos dispositivos de saída. Freqüentemente, em modelos SIMULINK um ou mais desses 3 elementos pode faltar. Por exemplo, pode-se desejar modelar o

Construindo Modelos SIMULINK

Page 105: APOSTILA MATLAB

Introdução ao MATLAB

105

comportamento na ausência de forças de um sistema inicialmente fora de sua condição de equilíbrio. Tal modelo não deve ter entradas mas deve conter blocos de sistema, tais como ganho, integradores etc, e provavelmente dispositivos de saída. Também é possível construir modelos que possuem fontes e dispositivos de saída, mas nenhum bloco de sistema. Suponha por exemplo que se necessita de um sinal que seja composto da soma de vários outros sinais. Tais sinais podem facilmente gerados usando as fontes do SIMULINK e enviados ao MATLAB ou a um arquivo no disco rígido. 16.3.2. Manipulando Blocos

A tabela a seguir contém as operações básicas de manipulação de blocos como redimensionar, rotacionar, copiar e renomear blocos. Selecionar objeto (blocos ou linhas de sinais) Clique no objeto com o botão

esquerdo do mouse.

Selecionar outro objeto Pressione a tecla SHIFT e clique no outro objeto.

Selecionar com uma caixa de Seleção Clique com o botão esquerdo do mouse no local onde se deseja que seja uma das quinas da caixa de seleção. Continue com a tecla do mouse pressionada e arraste a caixa para encobrir a área desejada.

Copiar um bloco de uma biblioteca ou de outro modelo

Selecione o bloco e arraste para a janela do modelo para o qual se quer copiar.

Inverter blocos Selecione o bloco e no menu Format:Flip Block . Tecla de atalho: CTRL-f.

Rotacionar blocos Selecione o bloco e no menu Format:Rotate Block . Tecla de atalho: CTRL-r.

Redimensionar blocos Selecione o bloco e arraste o canto. Adicionar sombra Selecione o bloco e no menu

Format:Show Drop Shadow . Editar o nome de um bloco Clique no nome. Ocultar o nome de um bloco Selecione o nome, no menu

Format:Hide Name Inverter o nome de um bloco Selecione o nome, no menu

Format:Flip Name

Apagar objetos Selecione o objeto, no menu Edit:Clear . Tecla de atalho: Del.

Copiar objetos para a área de Selecione o objeto, no menu

Page 106: APOSTILA MATLAB

Introdução ao MATLAB

106

transferência Edit:Copy . Tecla de atalho: CTRL-c .

Recortar objetos para a área de transferência

Selecione o objeto, no menu Edit:Cut . Tecla de atalho: CTRL-x.

Colar objetos a partir da área de transferência

No menu Edit:Copy . Tecla de atalho: CTRL-v .

Traçar uma linha de sinal Arrastar com o mouse da saída do bloco para a entrada do outro.

Traçar uma linha de sinal em segmentos

Arraste com o mouse da saída do bloco até o primeiro ponto. Repetir deste ponto até o seguinte e assim por diante.

Traçar uma linha ligada a outra Mantenha a tecla CTRL pressionada e clique sobre a linha de origem. Tecla de atalho: Clicar com o botão direito do mouse a partir da linha de origem.

Separar uma linha Selecione a linha. Mantendo a tecla SHIFT pressionada, clique e arraste o novo vertex para a posição desejada.

Mover um segmento de linha Clique e arraste o segmento desejado. Mover um vertex de um segmento. Clique e arraste o vertex desejado. Nomear uma linha de sinal Duplo clique na linha e digite o nome. Mover o nome de uma linha de sinal Clique e arraste o nome para a

posição desejada. Copiar o nome de uma linha de sinal Mantendo a tecla CTRL pressionada,

arraste o nome para a posição desejada. Tecla de atalho: clique e arraste com o botão direito do mouse para a posição desejada.

Sinais de propagação numa linha de sinal

Dê um nome aos sinais conhecidos (entrada) com um único caracter e nas linhas em que se deseja saber seu conteúdo, deve-se digitar somente o caracter “<”. Após isso, no menu Edit:Update Diagram .

Acrescentar anotação ou observação no modelo

Dê um duplo clique no local em que se deseja e digite o texto.

16.3.3. Fontes

As entradas de um modelo são chamadas fontes (Sources) e podem ser encontradas na biblioteca de fontes. Um bloco de fonte não possui entrada e deve possuir pelo menos uma saída. A documentação detalhada de cada fonte pode ser encontrada no help do SIMULINK. No texto que segue serão mencionadas somente os tipos mais comuns e utilizados de fontes. Serão ainda discutidas as operações de importação do MATLAB e de arquivos que

Page 107: APOSTILA MATLAB

Introdução ao MATLAB

107

contenham dados os quais se deseja inserir no modelo. Tal facilidade permite que se tenha qualquer tipo de sinal de entrada, exista ele no SIMULINK ou não.

16.3.3.1. Fontes Comuns

Muitos tipos de sinais de entrada utilizados em modelos de sistemas dinâmicos estão disponíveis na biblioteca de fontes.

O bloco Constante (Constant) produz um sinal fixo que possui a magnitude escolhida com um duplo clique sobre o bloco.

O bloco Degrau (Step) produz uma função degrau. Pode-se configurar o instante em que se aplica o degrau, assim como sua magnitude antes e depois da transição.

O bloco de Onda Senoidal (Sine Wave) permite que se configure a amplitude, a fase e a freqüência da onda senoidal.

O Gerador de Sinais (Signal Generator) pode produzir ondas senoidais, quadradas, dente de serra ou sinais aleatórios.

Sinais mais complexos podem ser gerados a partir da combinação destes apresentados. Exemplo: Impulso Unitário

Um sinal muito utilizado para determinar o comportamento dinâmico de sistemas é o Impulso Unitário, também conhecido como Função Delta ou Função Delta de Dirac. O Impulso Unitário ))(( at −=δ é definido como um sinal de duração igual a zero, tendo as seguintes propriedades:

0)( =− atδ ; at ≠

∫∞

∞−

=1)( dttδ

Embora o impulso unitário seja um sinal que teoricamente não existe,

existem boas aproximações do caso ideal que são muito comuns. Exemplos físicos são colisões, como uma roda se chocando com o meio-fio ou um bastão rebatendo uma bola ou ainda mudanças instantâneas de velocidade como a de uma bala sendo disparada de um rifle. Outra utilidade da função impulso é a determinação da dinâmica do sistema. O movimento causado em um sistema que sofre uma força impulsional unitária é a própria dinâmica inerente ao sistema. Partindo disto, pode-se utilizar a resposta à um impulso unitário de um sistema complexo para se determinar sua freqüência natural e suas características de vibração.

Pode-se criar uma aproximação de um impulso unitário utilizando duas fontes de função degrau e um bloco de soma. A idéia é produzir num tempo definido “a” um pulso de duração muito curta “d” e de magnitude “M”, tal que M.d=1. A dificuldade consiste em se definir um valor apropriado para d. Deve ser um valor pequeno quando comparado à mais rápida dinâmica do sistema. Porém, se for muito curto, podem ocorrer problemas numéricos como erros de aproximação. Se for muito longo a simulação não será adequada à um impulso

Page 108: APOSTILA MATLAB

Introdução ao MATLAB

108

verdadeiro. Usualmente, valores adequados podem ser determinados experimentalmente.

O modelo na figura acima deve ser ajustado para simular um impulso unitário ocorrido aos 0.5 segundos de simulação com uma duração de 0.01 segundos e a magnitude de 100. A fonte degrau na parte superior deve ter a seguinte configuração: Step time: 0.5, Initial value: 0, Final value: 100. Já a fonte situada na parte inferior deve ser configurada da seguinte forma: Step time: 0.51, Initial value: 0, Final value: 100. A simulação deve ser configurada para terminar em 1 segundo. O gráfico gerado no SCOPE é mostrado na figura abaixo. A saída do integrador contém o valor da integral do impulso no decorrer do tempo e é mostrada no bloco Display. Se a simulação foi correta tal valor deve ser 1, o que condiz com o valor teórico.

16.3.4. Importando do MATLAB (From Workspace Block)

Este bloco permite ao usuário criar seu próprio sinal de entrada. O bloco e sua caixa de diálogo são mostrados em sua figura a seguir.

Page 109: APOSTILA MATLAB

Introdução ao MATLAB

109

Na configuração deste bloco devem-se definir quais serão as matrizes

tabela utilizadas como fonte de sinal. O valor default do SIMULINK são as matrizes [T, U], que devem ser previamente definidas no MATLAB antes da execução da simulação.

A primeira coluna da matriz deve ser a variável independente que corresponde ao tempo na simulação estritamente crescente. As colunas seguintes são os valores das variáveis independentes correspondente à valores das variáveis dependentes da primeira coluna. As saídas serão produzidas por interpolação linear ou extrapolação utilizando as matrizes definidas. Exemplo

Para ilustrar o uso do bloco vamos supor que se deseja gerar um sinal definido por: 2)( ttu =

Inicialmente deve-se gerar a tabela que contenha os valores da função no MATLAB. A seguir temos os comandos necessários que devem ser executados na área de trabalho do MATLAB: >> t=0:0.1:100; % Variável independente >> u=t.^2; % Variável dependente >> A=[t’,u’]; % Formato da tabela

É importante notar que os sinais devem ser carregados em colunas, o que exige que se tenha a matriz A composta das matrizes transpostas de u e t. Criada a tabela, deve-se agora configurar o bloco para que este receba os valores desejados. Com um duplo clique sobre o bloco, deve-se digitar o nome da matriz definida no MATLAB, neste caso “A”, e a seguir clicar no botão Close . O nome da matriz aparecerá sobre o bloco e este está pronto para ser usado como uma fonte no SIMULINK.

Page 110: APOSTILA MATLAB

Introdução ao MATLAB

110

16.3.4.1. Importando Arquivos Gerados no MATLAB (Fr om File Input Block)

Este bloco é muito similar ao anterior. A diferença básica é que a matriz é agora carregada a partir de um arquivo gerado no MATLAB, podendo agora o sinal de entrada ser salvo para diversos usos posteriores. Outra diferença importante é que os sinais devem agora ser carregados em linhas ao invés do caso anterior, em que eram carregados em colunas. Aproveitando o resultado anterior, podemos executar no MATLAB os seguintes comandos:

>> B=A’ % Variável independente >> save exemp B % Variável dependente

Agora se pode configurar o bloco para receber os valores digitando no campo File Name o nome completo do bloco, inclusive sua extensão (.mat), no nosso caso exemp.mat . 16.3.5. Dispositivos de Saída

São as maneiras de se ver ou armazenar os resultados de um modelo. O osciloscópio e o gráfico XY produzem gráficos a partir de dados do modelo. O bloco Display produz uma amostragem digital do valor contido em sua entrada. Pode-se ainda enviar os dados para a área de trabalho do MATLAB utilizando o bloco To Workspace Block ou ainda armazenar os dados em arquivos do MATLAB para usos posteriores. O bloco de parada (Stop block) causa a parada da simulação quando sua entrada for diferente de zero. Uma refêrencia detalhada de cada bloco pode ser encontrada no help do SIMULINK. No texto que segue serão discutidas particularidades do bloco SCOPE e do gráfico XY. 16.3.6. Osciloscópio (Scope)

Page 111: APOSTILA MATLAB

Introdução ao MATLAB

111

Este bloco emula um osciloscópio. Plota um gráfico do sinal de entrada,

podendo este ser um escalar ou um vetor. Ambas as escalas, vertical e horizontal podem ser ajustadas para uma melhor visualização. A escala vertical mostra o valor atual correspondente ao sinal de entrada. A escala horizontal sempre inicia em zero e termina no valor especificado em Time Range . Se por exemplo a faixa de escala horizontal é 10 e o tempo corrente é 100, o sinal de entrada correspondente período de 90 a 100 é que será mostrado, muito embora a escala horizontal esteja continue mostrando de 0 a 10. O osciloscópio simplesmente mostra o sinal durante a simulação, e é desprovido de métodos de salvar a imagem gerada para impressão ou inclusão em outro documento. Mas tem a possibilidade de enviar os dados para a área de trabalho do MATLAB para possível análise ou plotagem, usando exemplo o comando plot do MATLAB.

Pode-se inserir o SCOPE no modelo sem qualquer conexão em sua entrada e deve ser configurado como Bloco SCOPE Flutuante (Floating Scope Block). Este SCOPE flutuante será então usado para se visualizar qualquer sinal do modelo durante execução da simulação com um simples clique sobre a linha em que se deseja conhecer o sinal.

A figura abaixo ilustra o bloco SCOPE. Nota-se que há uma barra de ferramentas que contém seis ícones ao longo do topo da janela. Esses botões permite dar um zoom numa porção da figura, autodimensionar a figura, salvar a configuração para futuro uso e abrir a caixa de diálogo com as propriedades do bloco SCOPE.

Page 112: APOSTILA MATLAB

Introdução ao MATLAB

112

16.3.6.1. Ferramenta Zoom na tela do Osciloscópio

Considere o modelo mostrado na figura. O bloco gerador de onda senoidal situado na parte superior está configurado para produzir o sinal sen(t) e o outro bloco para gerar o sinal 0.4sen(10t).

Abre-se a tela do Osciloscópio com um duplo clique sobre ele. Executa-se então a simulação e o resultado obtido deve ser semelhante ao mostrado na figura. Pode-se redimensionar a figura clicando no botão Autoescale . Suponha que se deseja analisar o intervalo de tempo entre 2 e 4 segundos. Para isto, clica-se no botão Zoom . Após isto se deve com o mouse então envolver a área desejada como mostrado na figura:

A tela agora só mostrará o intervalo envolvido.

Page 113: APOSTILA MATLAB

Introdução ao MATLAB

113

16.3.6.2. Propriedades do Osciloscópio

O botão Open properties window abre a caixa de diálogo com as propriedades do osciloscópio, caixa esta que contém duas páginas. A primeira página (Axes) contém campos para se definir os valores máximos (Ymax ) e mínimos (Ymin ) da variável dependente. A escala de tempo (Time Range ) pode ser configurada para um valor particular ou para seu modo automático. Se o modo automático for escolhido, a escala de tempo terá o mesmo tamanho da duração da simulação especificada na caixa de diálogo Simulation:Parameters .

A segunda página (Settings) contém campos para se controlar o número de pontos mostrados e salvar os dados para a área de trabalho do MATLAB.

A seção General da página consiste numa caixa contendo duas opções: Decimation e Sample time . Se a opção escolhida for Decimation o campo que contém o fator deve ser um número inteiro. Escolhendo-se Decimation e

Page 114: APOSTILA MATLAB

Introdução ao MATLAB

114

definindo-se 1 no campo ao lado da caixa, todos os pontos na entrada do bloco serão plotados. Define-se 2 para o campo, a plotagem é feita com pontos alternados e assim por diante. Se for escolhida a opção Sample time , o espaçamento absoluto entre os pontos a serem plotados deve ser digitado no campo.

O osciloscópio armazena os pontos num buffer. Assinala-se a opção Limits rows to last e digita-se o valor específico para se definir o tamanho do buffer(o default é 5000). As operações de Autoescala, zoom e salvar os dados para a área de trabalho são feitas com este buffer. Se por exemplo ajusta-se o tamanho do buffer para 1000 pontos e a simulação gera 2000 pontos, somente os últimos 1000 estarão disponíveis para estas operações quando a simulação terminar.

Como dito anteriormente, o osciloscópio não possui ferramentas para se imprimir ou enviar sua tela para outros programas diretamente, como um processador de textos por exemplo. Porém, os dados enviados ao osciloscópio podem ser armazenados numa variável do MATLAB e enviados à área de trabalho, podendo então ser utilizadas as muitas capacidades de tratamento destes dados pelo MATLAB. Para isto deve-se primeiro assinalar a opção Save data to workspace e digitar o nome da variável do MATLAB. Depois da simulação terminada, os dados mostrados na tela do osciloscópio serão armazenados na variável definida. A variável será composta de uma coluna contendo os valores de tempo e outra coluna para cada sinal de entrada. Se por exemplo o sinal de entrada for um vetor de sinal com duas componentes, a variável terá 3 colunas e o número de linhas igual ao número de pontos mostrados na tela do osciloscópio.

16.3.7. Gráfico XY

O bloco de gráfico XY produz um gráfico idêntico ao gráfico produzido pelo comando plot do MATLAB. O gráfico XY aceita dois escalares como entrada. Devem-se configurar as faixas horizontais e verticais utilizando a caixa

Page 115: APOSTILA MATLAB

Introdução ao MATLAB

115

de diálogo do bloco. A caixa de diálogo do bloco gráfico XY é mostrada na figura que se segue.

16.3.8. Configurando a Simulação

Um modelo SIMULINK é essencialmente um programa de computador que define um grupo de equações diferenciais e de diferenças. Quando se escolhe Simulation:Start na barra de menu da janela de modelo, o SIMULINK resolve o grupo de equações diferenciais e de diferença numericamente, utilizando um dos seus algoritmos de resolução. Antes de se executar uma simulação, deve-se configurar vários parâmetros, como tempo inicial e final, Step size da simulação e várias tolerâncias. Pode-se escolher vários algoritmos de integração de alta qualidade. Pode-se também configurar o SIMULINK para obter e enviar dados da área de trabalho do MATLAB. Considere-se o modelo mostrado na figura

Este modelo representa a seguinte equação diferencial: 2=•x

Defini-se para condição inicial do integrador valor 1 no campo Initial condition . A seguir, escolhe-se no menu da janela do modelo Simulation:Parameters e configura-se o tempo inicial para 0 e o tempo final

Page 116: APOSTILA MATLAB

Introdução ao MATLAB

116

para 5. A seguir se executa a simulação. O SIMULINK determinará

numericamente os valores da integral para resolver: dtx ∫+=τ

τ0

21)(

e plota os valores de )(τx no intervalo de 0 a 5. Um algoritmo de integração numérica que resolve este tipo de problema (frequentemente chamado de problema de valor inicial) é chamado de algoritmo de resolução de equações diferenciais ordinárias (Ordinary differential equation solver). Para se configurar os parâmetros da simulação escolhe-se Simulation:Parameters na barra de menu da janela do modelo. A caixa de diálogo que se abrirá contém três páginas: Solver, workspace I/O e Diagnostics. Na primeira página (Solver) seleciona-se e configura-se o algoritmo de resolução da equação diferencial. A seguna página (Workspace I/O) contém parâmetros opcionais que permitem obter dados de inicialização da área de trabalho do MATLAB e enviar certos dados da simulação para variáveis previamente definidas da área de trabalho do MATLAB. A terceira página (Diagnostics) é usada para selecionar alguns métodos de diagnósticos muito utilizados para se determinar problemas na simulação. Cada página será discutida mais detalhadamente. 16.3.8.1. Solver Page

Esta página consiste em três seções. A primeira, Simulation time, contém campos para se definir o tempo inicial e final da simulação. Os valores default são 0 e 10.

As opções Solver contém campos para se selecionar os algoritmos numéricos de integração para se resolver as equações diferenciais e configurar parâmetros que controlam o Step Size de integração. Os métodos de solução são agrupados em duas categorias: Passo variável e passo fixo . Diferentes algoritmos estão disponíveis para cada categoria. Se a opção escolhida for a de Passo variável , estão disponíveis campos para se configurar o tamanho do máximo passo de integração, o passo inicial e as tolerâncias absolutas e relativas.

Se a opção escolhida for a de Passo fixo , há um único campo no qual se define o tamanho do passo de integração. A seção Output options controla o espaçamento de tempo nos pontos na trajetória de saída.

Page 117: APOSTILA MATLAB

Introdução ao MATLAB

117

16.3.9. Executando uma Simulação

Pode-se controlar a execução de um modelo no menu Simulation na barra de menus da janela do modelo. Para se iniciar uma execução, clica-se em Simulation:Start . Pode-se parar a simulação permanentemente selecionando-se Simulation:Stop . Para parar a execução temporariamente clica-se em Simulation:Pause , e para continuar a execução do ponto de parada seleciona-se Simulation:Continue .

Enquanto a simulação está sendo executada, pode-se modificar diversos parâmetros. Por exemplo o ganho de um bloco de ganho, modificar o algoritmo utilizado na solução, modificar os parâmetros de integração como o tamanho do passo mínimo. Pode-se ainda selecionar uma linha de sinal que passará então a ser a entrada de um Osciloscópio que esteja sendo configurado como flutuante (Floating Scope Block). Isto permite que se cheque vários sinais durante o progresso da simulação.

Page 118: APOSTILA MATLAB

Introdução ao MATLAB

118

16.4. Exemplos Práticos 16.4.1. Visão geral do Simulink 1. Comecemos abrindo o Simulink. 2. Vamos arrastar alguns blocos para o ambiente de trabalho: sine wave

(biblioteca sources), integrator (commonly used) e um scope (sinks). 3. Conecta-se os blocos, utilizando a tecla control. 4. Em caso de dúvidas, recomenda-se utilizar o help, clicando-se com o botão

direito sobre o bloco. 5. Daremos uma condição inicial para o integrador, no caso -1, que

corresponde à condição inicial da saída (função cosseno). 6. Abrimos o scope, escolhemos um limite de tempo pra simulação (na barra

de tarefas e iniciamos a simulação, pela barra de tarefas ou por simulation -> configuration parameters.

7. Adicionemos agora uma não-linealidade à saída: o bloco se saturação (saturation, biblioteca discontinuities), que limita a saída a um valor específico – por exemplo, +- 3.

Exemplos Práticos

Page 119: APOSTILA MATLAB

Introdução ao MATLAB

119

8. Adicionemos agora um bloco gain (math operations) à saída do sinal senoidal. Podemos criar um vetor de ganhos, e ter então várias saídas a partir deste bloco. Escolheremos um vetor de 8 elementos (3:10). Mudemos então as condições iniciais do bloco integrador para (-(3:10)), e façamos uma nova simulação.

9. Usemos a função +-rand(8,1)*10 pra criar um vetor aleatório de saturações.

Simulemos então novamente algumas vezes. 10. Trabalhemos agora um pouco com discretização. Para discretizarmos a

saída, usaremos um zero order hold (biblioteca discrete) na saída do bloco de saturação.

11. Escolhamos Ts como o tempo de amostragem, e então definamos na linha

de comando do MATLAB Ts=0.1. Observa-se então que o Simulink está completamente integrado ao MATLAB.

12. Podemos agora adicionar uma ou mais entradas ao scope: alteremos o

número de eixos do scope, e adicionemos mais um ou dois blocos zero order hold, com outros tempos de discretização, Ts2 e Ts3.

Page 120: APOSTILA MATLAB

Introdução ao MATLAB

120

13. Podemos alterar as cores de um bloco ou de um conjunto de blocos,

clicando com o borão direito do mouse sobre este(s) e selecionando foreground color e bacjground color.

14. Trabalharemos agora com o conceito de hierarquia, que nos serve para

diminuar a complexidade na visualização de um sistema e para podermos dividir o nosso sistema em blocos chamados subsistemas . Selecionemos os blocos desejados para o nosso subsistema e então cliquemos em em edit->create subsystem, ou podemos usar o atalho ctrl+G.

15. Para acessarmos e visualizarmos a estrutura dos sistemas e dos

subsistemas, cliquemos em view->model browser options->model browser. 16. O nosso subsistema pode ser um bloco para que um usuário utilize, na

forma de uma caixa de diálogo, como todos os blocos padrão do simulink são utilizados. Dessa forma, o usuário não precisará se preocupar com os detalhes internos do bloco, e sim com suas entradas, saídas e com os seus parâmetros. Pra isso se cria uma máscara, clicando com o botão direito do mouse no bloco e depois em mask subsystem....

17. Ícone: para o ícone de nosso subsistema, podemos utilizar comandos do

MATLAB, por exemplo: plot(peaks). Podemos utilizar uma imagem qualquer, carregando-a primeiramente para a pasta work depois usando o comando image(imread(‘nome da imagem'))

Page 121: APOSTILA MATLAB

Introdução ao MATLAB

121

18. Parâmetros: em nosso caso, podemos criar um parâmetro – na aba

parameters – para cada tempo de amostragem. 19. Documentação: é o help do bloco. Pode-se adicionar um arquivo html.

20. Após clicarmos em OK, poderemos usar nosso bloco como os outros blocos

são usados. Para informações adicionais, podemos escrever texto no ambiente de ttrabalho, aimplesmente clicando duas vezes em uma região em branco.

Page 122: APOSTILA MATLAB

Introdução ao MATLAB

122

21. Para adicionarmos documentação, podemos utilizar o bloco docBlock da

biblioteca ssimulink->model-wide utilities.

22. Podemos observar o interior de nosso bloco com look under mask, que

abrirá uma janela detalhando o subsistema. Por fim, poderemos ver os tipos dos dados com os quais estamos lidando, clicando em format->port data types.

Page 123: APOSTILA MATLAB

Introdução ao MATLAB

123

16.4.2. Simulando um salto de bungee jumping

Demonstraremos agora como utilizar o simulink para modelar um simples problema de física. Vamos ilustrá-lo da seguinte forma:

Durante as férias de verão, John quer saltar bungee-jumping. Ele precisa determinar qual elasticidade de corda é a mais apropriada para o seu peso. Há 3 cordas disponíveis: corda A com constante de 5 N/m; corda B, com constante de 40 N/m; corda C, com contante de 500 N/m.

Para resolver este problema, será preciso: 1. Determinar as forças agindo sobre o corpo:

Peso (W): W = m*g m = 90 kg g = 10 m/s^2

Resistência do ar (R):

R = b1*v + b2*|v|*v b1 = 1 b2 = 1 v = dv/dx Força da corda elástica (Fe): Fe = k*x se x > 0

0 se x = 0

2. Aplicar a segunda lei de Newton:

Soma das Forças = m*a W – R – Fe = m*a

2

2

2 21.

−−−=dt

dx

m

b

dt

dx

m

b

m

xkg

dt

xd

3. Resolver o problema:

Este problema pode ser resolvido da seguinte forma: - Resolver a equação diferencial à mão. - Escrever um programa para resolver a equação - Usar o Simulink

Em sistemas dinâmicos contínuos, as representações matemáticas envolvem a derivada da entrada e/ou da saída. Devido ao modo com que as funções solucionadoras lidam com os estados contínuos, é recomendável usar blocos integradores ao invés de derivadores e trabalhar no sentido inverso.

Page 124: APOSTILA MATLAB

Introdução ao MATLAB

124

São então inseridos dois blocos integradores, cujas condições iniciais serão de 0 m/s para a velocidade inicial e de -50 m, indicando que a corda possui 50 m e começará e se expandir apenas após o saltador percorrer esta distância. Note-se que estamos convencionando o sentido para baixo como positivo, sendo a origem então localizada no chão.

Vamos inserir agora as resistências do ar. Para a parte linear, usaremos o bloco gain, disponível na biblioteca math operations. Insiramos então o valor do ganho igual a um. Para a porção não-linear, criaremos uma função, usando o bloco fcn, localizado na biblioteca user defined functions. A função a ser inserida é b2*abs(u)*u, onde u corresponde à velocidade. Para a constante de elasticidade da corda, também usaremos um bloco gain, e chamaremos seu parâmetro de k. Deve-se observar, no entanto, que quando a corda estiver acima de seu ponto de equilíbrio, esta não produz força. Para evitarmos então que seja gerada uma força negativa no bloco de ganho k, usaremos um bloco saturation para forçarmos um limite inferior igual a zero.

Combinaremos agora todas as partes utilizando o bloco sum, da biblioteca math operations. Resta-nos então inserir a força peso, com um bloco constant, da biblioteca commonly used blocks, e multiplicarmos nossos integradores por 1/m. Teremos então a equação diferencial completamente descrita no diagrama:

Page 125: APOSTILA MATLAB

Introdução ao MATLAB

125

Para analisarmos graficamente a saída, utilizaremos o bloco scope. Antes de simularmos, declaremos as variáveis b = 1, k = 20, g = 10 e m = 90 na linha de comando do MATLAB.

Note que a saída é o deslocamento x, e não a distância a partir do chão. Consideremos então 30-x como a distância do chão à plataforma de salto, de modo que o ponto x=80 m seja a plataforma e a corda elástica possua um comprimento de 50 m. Podemos então utilizar um novo bloco de soma para realizar esta operação.

Nosso sistema completo pode ser representado então como na figura abaixo:

Resta-nos então testarmos diferentes constantes de elasticidade, e

determinarmos qual a corda elástica mais apropriada para John.

Page 126: APOSTILA MATLAB

Introdução ao MATLAB

126

Apêndice A. Lista de Exercícios

Nos problemas 1 a 7, dê os comandos MATLAB necessários para executar os passos indicados. Suponha que as variáveis são escalares.

1. Se time é maior que 50, então incremente-a por 1. 2. Quando a raiz quadrada de poly for menor que 0,001, imprima o valor de poly; 3. Se a diferença entre volt_1 e volt_2 for maior que 2, imprimir os valores de volt_1 e volt_2; 4. Se o valor de den for menor que 0, 003; atribua zero a result; caso contrário, atribua a result num dividido por dez; 5. Se o logaritmo natural de x for maior ou igual a 10, atribua zero a time e incremente-o por count; 6. Se dist for maior que 50 e time for maior que 10, incremente time por 2; caso contrário, incremente time por 5. 7. Se dist for maior ou igual a 100, incremente time por 10. Se dist estiver entre 50 e 100, incremente time por 1. Caso contrário incremente time por 0,5.

Determine o número de vezes que o loop fordefinido pelos comandos a seguir são executados. Verifique sua resposta . 1. for k = 3:20 2. for count = -2:14 3. for k = -2:-1:10 4. for time = 10:-1:0 5. for time = 10:5 6. for index = 52 : -12

Resolver os sistemas de equações com os métodos acima e se possível plotar os gráficos.

a) -2x + y = -3 x + y = 3 b) -2x + y = -3 -2x + y = 1

Apêndice A – Lista de Exercícios

Page 127: APOSTILA MATLAB

Introdução ao MATLAB

127

Referências Bibliográficas [1] Curso de MATLAB for Windows, Departamento de Engenharia Mecânica,

UNESP, Campus de Ilha Solteira. [2] Trindade, Marcelo A. e Sampaio, Rubens, Introdução ao MATLAB,

Departamento de Engenharia Mecânica, Laboratório de Dinâmica e Vibrações, PUC-Rio.

[3] Hey, H. L., Caderno didático de Sistemas de Controle I, Departamento de Eletrônica e Computação, UFSM, Santa Maria.

[4] www.mathworks.com

Referências Bibliográficas