APOSTILA MATLAB
-
Upload
marcello-megiolaro -
Category
Documents
-
view
44 -
download
2
Transcript of 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
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
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
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
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
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
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
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).
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
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
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).
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
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
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
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:
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.
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 =
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
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 .
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
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
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
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.
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
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.
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
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
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
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:
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.
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
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
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
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;
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
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.
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);
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);
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.
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]);
Introdução ao MATLAB
42
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
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
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
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
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
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 =
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
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.
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
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
+++=
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
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
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
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
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;
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
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:
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
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
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
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
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
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.
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
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.
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.
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
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
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
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
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
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
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')
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:
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
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
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:
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:
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.
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
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
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
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
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)
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
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.
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
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
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.
Introdução ao MATLAB
92
Dê um click duplo no ícone Sources na janela de bibliotecas do SIMULINK.
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.
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:
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:
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.
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:
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
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
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 .
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.
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
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.
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
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
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
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
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.
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.
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)
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.
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.
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
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
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
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.
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.
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
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.
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'))
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.
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.
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.
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:
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.
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
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