Preview only show first 10 pages with watermark. For full document please download

Intro Matlab

Introdução ao MATLAB para uso em Automação e Controle

   EMBED


Share

Transcript

MATLAB para o Laborat´orio de Automac¸a˜ o II Ricardo Cury Ibrahim (vers˜ao preliminar)     1 Introduc¸a˜ o M-3 2 Conceitos Gerais 2.1 Operac¸o˜ es matem´aticas simples . . . . . . . . . 2.2 Armazenando dados em vari´aveis . . . . . . . . 2.3 Formato dos n´umeros . . . . . . . . . . . . . . . 2.4 Utilizando func¸o˜ es matem´aticas elementares . . . 2.5 Listas . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Operac¸o˜ es matem´aticas com listas . . . . 2.6 Matrizes . . . . . . . . . . . . . . . . . . . . . . 2.6.1 Operac¸o˜ es matem´aticas com matrizes . . 2.7 Loops e tomadas de decis˜ao . . . . . . . . . . . 2.7.1 Loops usando for . . . . . . . . . . . . . 2.7.2 Loops usando while . . . . . . . . . . . 2.7.3 Tomadas de decis˜ao usando if-else . . . . 2.8 Plotando gr´aficos . . . . . . . . . . . . . . . . . 2.9 Importando/exportando dados de/para um arquivo 2.10 Utilizando polinˆomios . . . . . . . . . . . . . . M-4    "! "! $#  % '&(& )&* '&* )&+ )&+ )&*! '&+! ,)&+%  -(- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 MATLAB Aplicado a Controle e Processamento de Sinais 3.1 Processamento de sinais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 M´etodo do lugar das ra´ızes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M-25  $-. .    -(# .    /.0 .  4 Criando Func¸o˜ es e Arquivos Script M-30 4.1 Func¸o˜ es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "/(0 4.2 Arquivos script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "/1& ,$-        Esta apostila tem a intenc¸a˜ o de ser um guia r´apido para a utilizac¸a˜ o do MATLAB em atividades das disciplinas PMC503 e PMC526, ou seja, alguns t´opicos de controle e alguns poucos t´opicos de processamento de sinais. Ela n˜ao pretende simplesmente listar os diversos comandos do MATLAB e dar alguns exemplos. O objetivo principal e´ inserir alguns elementos b´asicos a partir dos quais se possa progredir de maneira autˆonoma, fazendo com que o aluno se torne elemento ativo no processo de aprendizagem. No caso do MATLAB, deve-se estudar praticando num micro com o software instalado. Lembre-se sempre que um problema complexo e´ , na verdade, um conjunto de v´arios problemas simples. O esforc¸o empregado na boa assimilac¸a˜ o de conceitos b´asicos sempre e´ recompensado. Apesar disso, e´ fato que uma pessoa s´o pode ter bom aproveitamento no estudo de um determinado assunto se possuir motivac¸a˜ o para tanto. No caso desta disciplina, Laborat´orio de Automac¸a˜ o II, e´ importante considerar as in´umeras aplicac¸o˜ es dos conceitos a serem estudados na vida profissional futura de um estudante de engenharia. Todo equipamento moderno tem algum sistema de controle. Portanto, um engenheiro sempre se defronta com os conceitos de controle, seja para um projeto ou mesmo para simples uso de um equipamento. Tome como exemplo esse grande mercado potencial que e´ o de casas com equipamentos “inteligentes”, que ser´a, provavelmente, a grande sensac¸a˜ o junto com a Internet. Esses equipamentos compreendem desde eletrodom´esticos at´e sistemas de alarme, de iluminac¸a˜ o, de condicionadores de ar, etc. Imagine que apenas uma pessoa esteja numa sala, usando um computador, e ligue o ar condicionado para se aquecer ou refrescar. Um bom sistema de controle, acoplado a sensores, poderia determinar a posic¸a˜ o desta pessoa e planejar o funcionamento do equipamento de forma a que apenas nas proximidades da pessoa o ar tivesse a temperatura desejada. Ou, ao contr´ario, para uma sala com v´arias pessoas se movimentando, o sistema deve se encarregar de manter a temperatura uniforme por toda a sala. Al´em disso, tradicionalmente, autom´oveis, avi˜oes, navios, robˆos, foguetes, sat´elites, equipamentos m´edicos, processos industriais diversos s˜ao grandes mercados para sistemas de controle. A lista de aplicac¸o˜ es e´ longa. Como se n˜ao bastasse, a´ reas que tradicionalmente n˜ao tinham nenhuma relac¸a˜ o com sistemas de controle agora se beneficiam com o seu uso. Diversas instituic¸o˜ es financeiras aplicam t´ecnicas de controle para an´alise de investimentos. A a´ rea de humanidades faz uso frequente de conceitos sofisticados de controle para elaborac¸a˜ o de softwares de traduc¸a˜ o de textos para outros idiomas. Por outro lado, o MATLAB se tornou, provavelmente, a ferramenta mais popular no mundo inteiro para quem trabalha com controle. Existem in´umeros livros publicados sobre o uso do MATLAB. Al´em disso, as novas vers˜oes de livros did´aticos cl´assicos na a´ rea de controle j´a incluem exerc´ıcios para serem resolvidos com o MATLAB. Existem vers˜oes do MATLAB para os mais diversos tipos de sistemas operacionais. Praticamente todos os comandos descritos nesta apostila para serem executados internamente ao ambiente MATLAB devem valer para qualquer plataforma. Entretanto, comandos para ler e salvar arquivos devem ser diferentes. Esta apostila descrever´a comandos v´alidos para o sistema operacional Microsoft Windows, que e´ o mais utilizado atualmente. Por fim, gostaria de lembrar que sempre e´ muito importante consultar livros textos no assunto para referˆencias mais detalhadas. , /                Esta sec¸a˜ o apresenta conceitos b´asicos do MATLAB para aplicac¸a˜ o geral. A assimilac¸a˜ o desses conceitos e´ fundamental para a boa utilizac¸a˜ o do software, constituindo um ferramental b´asico de uso frequente. E´ interessante observar que MATLAB e´ uma abreviac¸a˜ o da junc¸a˜ o das palavras inglesas Matrix e Laboratory. Note, ent˜ao, que o MATLAB existe basicamente para manipular matrizes. Observac¸a˜ o importante: o tipo de fonte exemplificado abaixo ser´a usado sempre que for necess´ario indicar um comando a ser usado no ambiente MATLAB. Entende-se por ambiente MATLAB a janela para se digitar comandos, que e´ aberta ao se iniciar o programa. Ao iniciar o programa MATLAB por meio de seu ´ıcone de atalho ou clicando a sequˆencia INICIAR  PROGRAMAS  MATLAB  MATLAB, abre-se uma janela para entrada de comandos. Todos os comandos para execuc¸a˜ o de alguma atividade devem ser digitados em frente ao prompt  .   "!#"!  !$%&  ')(+*,% O primeiro comando a ser apresentado e´ tamb´em um dos mais importantes, pelo menos dentro daquela perspectiva de que o aluno deve ser o mais autosuficiente poss´ıvel. E´ o comando "! . Basta digitar  "! seguido do nome de algum comando que se deseja obter informac¸o˜ es e apertar a tecla -. / - 0 . Experimente com   "!#!+12% Uma forma mais conveniente de usar o  "! do MATLAB e´ abrindo uma janela pr´opria de 3 "! . Do menu, escolha Help e selecione Help Window. Na nova janela aberta pode-se encontrar diversos t´opicos de ajuda organizados por um determinado tema. Tente abrir a tabela de "! para operac¸o˜ es elementares com matrizes (  "43$% ). Obviamente, uma outra forma de se obter ajuda nesse tema e´ dar o seguinte comando na janela de comandos:   "!5 "43$% Por outro lado, se estiver dispon´ıvel a opc¸a˜ o Help Desk(HTML) no menu Help, ser´a aberto um sistema bem mais complexo de ajuda no formato html no seu browser. Utilizando o comando  2! sem argumentos far´a com que sejam listados todos os t´opicos gerais de ajuda, incluindo o Simulink e o Toolbox. Outra forma bastante pr´atica de se aprimorar no MATLAB e´ executar alguns programas demos j´a inclu´ıdos no pacote. Use o comando  2!#6 74819 para obter uma listagem dos demos com func¸a˜ o geral. Ou use o comando  "!:9*;46 24819 para uma listagem dos demos do Simulink. Experimente tamb´em  "!=<&1"> %?1  , e descubra quais os demos do Control Toolbox. Para rodar um demo basta digitar o seu nome ap´os o prompt, na janela de comando, e seguir as instruc¸o˜ es pr´oprias @BADC EFHGJI3KHMO L P N GRQSTKVUGJS KVW U3X M Y K QZQXDS[F]\^GRQ Operac¸o˜ es matem´aticas simples podem ser realizadas diretamente na janela de comandos com o uso dos seguintes caracteres: soma (+), subtrac¸a˜ o (-), multiplicac¸a˜ o (*), divis˜ao ( _ ou ` ), potˆencia (ˆ). Exemplo: ,"         $7> 9 E´ importante saber qual a ordem de precedˆencia dos operadores mencionados acima. Para tanto, teste vocˆe mesmo com v´arios exemplos para descobrir a ordem. Um dos testes para saber qual a   precedˆencia entre  e poderia ser calcular  enteses pode alterar a  . Note que o uso de parˆ precedˆencia de acordo com a necessidade. A listagem completa dos operadores pode ser obtida consultando o help de “operators and special characters”, ou dando o comando  2!51"! 9 . A esta altura vocˆe j´a deve ter reparado que muitas vezes o help de algum t´opico e´ muito longo e a informac¸a˜ o rola pela tela sem parar. Existe uma maneira de se apresentar a informac¸a˜ o de forma que ao se preencher uma tela o help pare e espere por um novo sinal para apresentar a tela seguinte. Basta usar o comando 481?  . Tente:   4817?  1">   "!:1"! 9 Para retornar ao modo default, de rolagem sem parar, e´ s´o usar o comando   4817?  1 E´ claro que sempre se pode usar o mouse para rolar  @BA @  I+STK GK P ]K P Q GJS YKYI+X KW O  GJXDQ Armazenar dados em vari´aveis e´ uma maneira muito u´ til de tratar com operac¸o˜ es mais complexas. A associac¸a˜ o de um determinado valor a uma vari´avel e´ bem simples:  '$! "$#% $& "'#% que associa o valor - #( a` vari´avel ( . Podemos ter tamb´em:   )* $!+ " %$), #-"$ +% Se vocˆe esquecer e quiser relembrar o valor armazenado numa determinada vari´avel, basta digitar a vari´avel em seguida ao prompt:  '$ $& "'#% ,$        Para saber todas as vari´aveis j´a usadas, basta usar o comando &+1 . Experimente definir diversas  1 e´ uma palavra reservada e vari´aveis com diferentes valores e use o comando &+1 . Desta forma,  + n˜ao deve ser empregada para armazenar suas vari´aveis. Algumas regras devem ser seguidas para definic¸a˜ o de vari´aveis.  o nome da vari´avel deve sempre comec¸ar por uma letra  o nome da vari´avel pode conter letras e n´umeros, mas n˜ao se deve usar os s´ımbolos especiais      " %+< ) (  o MATLAB e´ sens´ıvel ao uso de letras mai´usculas e min´usculas. $  1? +# , $ 17? +# e  0 +# s˜ao trˆes vari´aveis diferentes.  a vari´avel pode conter at´e 19 caracteres. Mas note que esse valor pode variar com as novas vers˜oes do MATLAB. Algumas vari´aveis j´a s˜ao predefinidas e n˜ao podem mais ser utilizadas. E´ o caso, por exemplo, de    que e´ a raz˜ao do per´ımetro de uma circunferˆencia pelo seu diˆametro, de  ou  que representam & . Para deixar de usar uma determinada vari´avel numa sec¸a˜ o do MATLAB, basta usar o comando <&& $)? seguido do nome da vari´avel que se deseja excluir da mem´oria. No MATLAB e´ poss´ıvel salvar em arquivo todas as vari´aveis definidas num determinado trabalho para uso posterior. Para tanto, basta clicar no menu File e selecionar Save Workspace as. . . para salvar sua sec¸a˜ o de trabalho atual. As vari´aveis podem ser recuperadas usando a opc¸a˜ o Load no menu File. @BA  ! P I+STKVU P  P Q '" W STGRI P Q O MATLAB pode utilizar n´umeros em diversos formatos. Uma listagem completa pode ser obtida usando o comando "! 317?43$% . O formato default e´ o 17?4+$%:9,+17?&% , em que n´umeros reais s˜ao mostrados com 4 algarismos ap´os o ponto decimal. Para mudar o formato em uso basta dar o comando 17?43$)% seguido do nome do formato desejado. Para mudar do formato default para o formato real longo, usa-se o comando:   17?4+$%  1"># Como exerc´ıcio, experimente com os diversos formatos dispon´ıveis. @BA%$ & UX \DX   K  P(' "  L P N GRQSTKVUG S MO KVW UX M KYQ GJ\^G STG UKYI3GRQ O MATLAB cont´em diversas func¸o˜ es matem´aticas elementares (trigonom´etricas, para n´umeros complexos, logar´ıtmicas, e num´ericas) que s˜ao muito u´ teis em v´arios tipos de aplicac¸o˜ es. Consulte o help para func¸o˜ es matem´aticas elementares (uma maneira e´ usar o comando "! *) > ) para uma listagem completa. Para o nosso curso, algumas func¸o˜ es podem ser destacadas. Pratique com elas + Experimente com as seguintes func¸o˜ es: $) 9-,D(/.-0 <&12>213,D(/.40 ? $ 4,D(5.-0 *;43$*#6, (/.-0 $7>#3)3,D(/.40 &()!7,D(/.40  18#6,D(5.-0  18#  9:,D(/.-0 98; ?&% ,D(/.40 ?24<,D( >= .-0 ?1)> 66,D(/.40 <)*)4,D(5.-0   1 1?6,D(/.-0 9*,>7,D(/.-0 $9 *>7,D(/.40 %+< , ! "  Entre um n´umero complexo qualquer, como no exemplo abaixo, e experimente com as diversas func¸o˜ es pertinentes ( $)89-, (/. , $7> #)3,D(5. , <&1">13,D(/. , ?  $  ,D(/. , *;4+$*#6,D(/. )  >8<* >8<  !   * "   9999 -"  9999* Descubra se os argumentos das func¸o˜ es trigonom´etricas como 9*><,D(/. , <&19-,D(5. , %$7>7,D(/. devem ser em radiano ou em grau. @BA X^QUKYQ  Uma lista ou um vetor e´ uma colec¸a˜ o de dados de um mesmo tipo e unidimensional, ou seja, a cada elemento se pode associar um ´ındice u´ nico. A lista e´ um dos elementos mais u´ teis no MATLAB. A maneira mais simples de se criar uma lista no MATLAB e´ escrevendo seus elementos um a um separados por v´ırgula ou por espac¸o dentro de colchetes.      :     )()!<, *  . ! *  * "  "'# 9999   "   "     9      9   " 9999* " 9999* ou ent˜ao,      )(&!7, *  .    ! *'* "  "'# 9999  Note que esta e´ uma lista (ou vetor) horizontal. Para criar uma lista vertical (coluna), basta separar seus elementos por ponto e v´ırgula.      0 )()!<, * .-0 ! *-0*    "  "'# -" 9999      9&  " 9999* Ou ent˜ao, use o sinal de ap´ostrofo para representar a transposta do vetor linha em seguida ao sinal de ponto:         )(&!7, *  . ! *'* "*  " 9999 ,$#  "'#  -"     9&  " 9999* E´ importante observar que se n˜ao fosse usado o sinal de ponto antes do ap´ostrofo o resultado seria o conjugado da transposta, no caso de listas com n´umeros complexos. Verifique vocˆe mesmo + Utilizaremos, em seguida, um exemplo muito comum nos livros sobre MATLAB. Imagine que se queira plotar uma determinada func¸a˜ o, co-seno por exemplo. Escolhe-se um determinado intervalo de interesse. Diversos elementos compreendidos no intervalo constituem uma lista, no eixo horizontal do gr´afico a ser plotado. Ent˜ao, para cada elemento, calcula-se o valor correspondente da func¸a˜ o desejada. Essa operac¸a˜ o formar´a uma outra lista (com mesmo n´umero de elementos) de valores a serem plotados segundo o eixo vertical. a func¸a˜ o co-seno para valores compreendidos no intervalo de  Digamos que se queira plotar   _(- rad (aproximadamente &  .#.0 ) a 20 rad. Uma maneira de se criar uma lista com, por exemplo,  6 50 elementos e´ usando a func¸a˜ o  *>89"!$<3  ,(  ( > . :  Z(  *,>89,!$<)3, 7! * : 9  % 92.-0   Note o sinal de ponto e v´ırgula no final da linha de comando. Ele foi usado para evitar que os 50 elementos fossem mostrados na tela. Tente usar o mesmo comando sem o sinal de ponto e v´ırgula e veja o que acontece. Em seguida, veja como e´ pr´atico o uso de listas em MATLAB: para calcular o valor da func¸a˜ o co-seno para cada elemento da lista basta usar o comando =   9-,D(/.-0 <&1 Desta maneira, foi criada uma nova lista  tamb´em com 50 elementos. A cada elemento de uma lista correspondeum ´ındice. O ´ındice do primeiro elemento sempre e´ & (e n˜ao zero). O primeiro elemento da lista  ( _(- ) pode ser mostrado com o comando:  Z(6, *  . $7> 9 "$%+#  9 Analogamente, o quinto elemento da lista  e´ :   = % , . $7> 9 9 " 9 Tamb´em e´ poss´ıvel utilizar a notac¸a˜ o de matrizes para se referir a uma lista. O quinto elemento % de uma lista horizontal  seria 7,  . ; enquanto que o quinto elemento de uma lista vertical seria %:  , *. . Uma outra maneira de se criar uma lista, em que se tem o primeiro e o u´ ltimo elemento e o intervalo constante de variac¸a˜ o entre elementos subsequentes, ser´a mostrada em seguida. Vamos criar 0  & . Isto e´ feito da seguinte forma: uma lista - de n´umeros reais entre & e 0 com espac¸amento * ,       "  9 >9  1 )&4 >89 "  "$ 9999  9 Z%&?1)#) "$ 9 999 " 999 1 )&4 >89 9 # %&?1)#)  "$ "'# 9  999 9 " 999 " %$9  999 9 " 999 9  999 + " 999 9  999 9          !#" $   %  & $ '( A grosso modo, as operac¸o˜ es podem ser divididas em operac¸o˜ es com escalares (um valor num´erico simples) e operac¸o˜ es entre listas. Uma lista pode ser multiplicada, dividida, adicionada ou subtra´ıda por/de um escalar de uma maneira bem simples. Tomemos a lista - definida anteriormente. 9)     $7> 9  1 )&4 >89 "  9999 " " #-" 9999 1 )&4 >89 # %&?1)#)  Z%&?1)#) 9999  " " 9999 %" 9999  9999 "   " 9999 9999 + 9999 9 "  9999   Por outro lado, as operac¸o˜ es matem´aticas entre listas s˜ao realizadas elemento a elemento. Por exemplo,  *+*  "    9, 9     1 )&4 >89 " 9  1 )&4 >89 "$# 999 *+*  *   9 # %&?1)#)  9 " 999 9 " 999 9  999 Z%&?1)#) + " 9  999 "' 9 " " 999 9  999 9 " %$" 999 9  999 9999  $7> 9   1 )&4 >89 "   %&?1)#) " 9999 Z%&?1)#) " 9  999 " 9  999 1 )&4 >89 9 # " 999 9  999 " 9  999 + 9 " 999  " 9999 , % 9 " 999 9 9 " 999  *+* "     $&?)> *># = * 8*"6  ) " )?31 $7> 9  1 )&4 >89 >  "  9999 1 )&4 >89 Z%&?1)#) " 9 9     *>#  *+* "$ +%   " $&?)> # %&?1)#)  * 8*"6  ) " "'++ 9999  " %  999 " 9999 " 9999  " 9    # + 9 " 9 " +% 99 = )?31 9 +++ " $7> 9  1 )&4 >89 " 9  # %&?1)#)  9 ++ 9  1 )&4 >89 *+* Z%&?1)#) + "$+++ "  9999 " 99 "  " 9999 "  99 9 " 9 "  >    #   " %$999 "$ 99   )8 $7> 9   1 )&4 >89  %&?1)#) " 9 1 )&4 >89 " 9 # 9 9 99 9 Z%&?1)#) 99 9 " "$ 9  99 99 "$ +% 9 99 9 + "  99 9 9 99 9 Repare, entretanto, nas seguintes operac¸o˜ es: *+*   )     - ??17? )89*>#, +   >>)?Z43$%?+*2( 68*;437>89 *+* -"*  )  ) *)1">89 4) 9"% $ # ?   " $7> 9  "  % 99 Note a maneira de se executar um multiplicac¸a˜ o ou uma divis˜ao entre listas. Deve-se usar o sinal " de ponto ( ) antes do s´ımbolo da operac¸a˜ o de multiplicac¸a˜ o ou divis˜ao. Operac¸o˜ es entre listas s´o podem ser executadas se as listas forem de mesma dimens˜ao (mesmo n´umero de elementos). Repare a diferenc¸a entre a divis˜ao direita (  ) e a divis˜ao esquerda ( ). Note tamb´em os resultados e os avisos de divis˜ao por zero.  '&+0  @BA KVUI+X   GRQ  A maneira mais simples de se criar uma matriz em MATLAB e´ inserindo seus elementos um a um, como uma lista, mas separando cada linha da matriz por ponto e v´ırgula: *+* 17?4+$%&)3$7> * *      ! *-0 +    %6 " 9 #  "$ 9 9)*-0 99 99 99 -" 99  " 99 " 99 99 " 99 " #  9 -" 9 " 99 99  "$ 9 " 99 99 Repare que o formato dos n´umeros (ver sec¸a˜ o 2.3) foi modificado para bank. O que aconteceria se a mesma matriz fosse definida com o formato default do MATLAB (short)? Um elemento de uma matriz bidimensional pode ser referenciado atrav´es de seus dois ´ındices: *+*   , 6  . $7> 9 "$ 9 9 As listas (vetores) vistas anteriormente podem ser consideradas um caso particular de matriz unidimensional. Em geral, as matrizes bidimensionais em MATLAB podem ser consideradas como sendo formadas por linhas (ou colunas) de listas. Por exemplo, sejam dadas duas listas definidas abaixo: *+* * * + 17?4+$%   +*&9*   *>89"!$<3, 9  92. +* 9*  *+*  +* 9    #  " 9 1 )&4 >89 Z%&?1)#) "$ " 92. "$ 9 999 "$ 9 999 " 9  999 9 999  " 9999 Pode-se facilmente criar matrizes com estas listas: *+*  $)%  9 # %&?1)#)  9  999 9  999  1 )&4 >89    " +*&9   *>89"!$<3, 9 %   $%  +*&9  0 +*&9 1 )&4 >89  %&?1)#) # '&(& 9 " % 999 " 9  999 9 "'# 999  " " 9999  " 9 "$ 1 )&4 >89 Z%&?1)#) 9  999  " " 9  999 *+*   999 "* +*&9  $% $)% 9 "$ 9 " 9999 " 9999 +*&9 999 " %" 9999  " 9999 9 " % 9  999 999 " 9999  " 9  999 # " 9999 "'# 9 999 9 9999 "$ 9999 9 999 " 9999 -" 9999  "*  " 9999 9  999 " 9999 9 "$ 999 "' 999  " -" 9999 9 " 9999 9  999 %" 9999 9  "  # " - " " %$999 " 9999 9  999 9999 9 "'# 999 " 9999 9  999 " 9999 9 " 9 " 9999 "$  " 999 9999 E´ poss´ıvel referenciar todos os elementos de uma linha ou coluna utilizando-se o sinal de dois pontos ( ), *+*  : , $%  . $7> 9   1 )&4 >89 %&?1)#)  " 9 "$ 1 )&4 >89 Z%&?1)#) "$ 9  999 " 9  999 9 *+*  $% , %: . # 999 999 "$ 9 999 " 9  999 9  " 9999 $7> 9 %" *+*  9999 $%  ,  9 # " %$999 . $7> 9 #-" *+*  9 9999 "$# $% 999  , *. '& - 9 " % 999 " 9  999 9 "'# 999   $7> 9    %  # 9 Extendendo ainda mais o conceito de criac¸a˜ o de matrizes, uma matriz tamb´em pode ser formada de outra matriz, *+*    $)%   $%   $% 0 +*&9  1 )&4 >89 " %&?1)#)  " 9999  9 " " "$ 9999  1 )&4 >89 " 9999 " "$ 9 " 9999 "$ -" 999 9999 " 9 " %" 9  999  %" 9999  9999 " 9999 " % " 9999 " 9999 " 9999 9  9 999 9999     9*  :, $% . $7> 9 9 ou seja, a matriz Mat2 tem dimens˜ao &+0  - . = A matriz identidade pode ser criada com a func¸a˜ o   *+*  67>% 6 7> %   =   3, .  9 9 '&+/ # " 9 " # " 9999 " 9  999 A dimens˜ao de uma matriz pode ser obtida com a func¸a˜ o 9* :, . . *+* 9999  9 999 9999 " 9999 9 9999 9999 " -" 999 Z%&?1)#) " 9  999 # 9999 " 9  999   9999 "'# 999 9999  9 9           (  " ($   %    9  9    $   As operac¸o˜ es com matrizes s˜ao bem convenientes com o MATLAB. Uma lista de todas as operac¸o˜ es pode ser obtida com o comando  2! 43$)%*) > . Veja alguns exemplos: *+*  6 % , *  . $7> 9 -"$ + !  *+* % !99 "'   999 !99!+*  *> , *  . $7> 9 " 9 99 9 9 " " 9 *+*  9  +  %) $% " " 9 99  *  "  9 999 *  9 99 ) * "  # 9 9 9  " 9 99 %  " 9 " 99 9  9 999)* 9 " 9  9 99 ) *  " " 9 999 * " 9  999 " %+ 9 99 " 9 99 *  "  9 999)*  9 999 3 * " $% $7> 9  %"  *+*      " %$999 $%  -  9999 " -"  ) $% *+*  999 % 6+*;43>89*)1"> 9 $% "  99 " )89*>#, +  ??17? $)%?+*"( " %$ )  $% "* 4)89"% ) " $*# ?  $7> 9  1 )&4 >89 "  9999  %&?1)#) "  "   9 @BA " 9 999 1 )&4 >89 "  " 9999  " # " 9 9  99 Z%&?1)#) 9999   99 9 P P FQ " 9999 " 99 9999 "   9 9 99 9 " 9999 +%"  99 9 9999 " +% 99  " 9  9999 "' 99  " 9 " 9999  99 9 " 99  " 9999 9999 G#U P STK]KYQ ]G ]G M XDQ K N P O que veremos nesta sec¸a˜ o pode ser bastante u´ til em diversas situac¸o˜ es. Loops podem ser usados para criar listas, executar diversas operac¸o˜ es de forma repetitiva, etc. Tomadas de decis˜ao podem ser '&*     utilizadas na criac¸a˜ o de suas pr´oprias func¸o˜ es, conforme ser´a visto mais adiante. A utilizac¸a˜ o dessas ferramentas no MATLAB e´ bastante semelhante ao uso em linguagens de programac¸a˜ o populares.            O 17? pode ser usado quando se quer repetir certas operac¸o˜ es um n´umero bem definido de vezes, atribuindo os valores de uma lista a uma vari´avel. Isto pode ser entendido mais facilmente atrav´es de um exemplo. Para se criar uma lista que tenha ordem de formac¸a˜ o mais complexa do que o visto na sec¸a˜ o 2.5, podemos usar o comando 317? *+* * * + * * + 0 % 0 ( =   17? 317?    ( , =       . 9*><,D(/.-0 &( 0 = =  7 0 > 6 7>6 *+*     " 9 ! 9 "  9 " 9 "$ 9 9 " %!# 99 "$ 9 %!#  9 " %! 9 " %+ 9   % 9 " + +    Note que as operac¸o˜ es compreendidas entre um par for end s˜ao executadas em cada iterac¸a˜ o. Descubra o por quˆe do uso do sinal de ponto e v´ırgula no final das express˜oes. O que aconteceria se n˜ao fosse usado o ponto e v´ırgula?          $ &  O comando & *)) e´ usado de forma an´aloga ao comando 17? . A diferenc¸a fundamental e´ que com o uso do & *)& os comandos s˜ao repetidos at´e que se satisfac¸a uma determinada condic¸a˜ o. Veja no exemplo a seguir. *+* * * + * * +   % 0 >*  0 & *)&  2 9 6,^>. > )   " %$0 '&     >* )>* 0   *     0  7>6 *+*   %" %"   9999 -"$#% 9999        $      " %$99 '  999  $ &  E´ usado de forma an´aloga a outras linguagens de programac¸a˜ o. N˜ao h´a muito o que explicar j´a que deve ser do conhecimento de todos. Repare que deve terminar com o comando 7>6 . Exemplo: *+* 17?Z4    317?Z>  *  4 + >  ,4  > .  0    9*    9   4 7>  ,4  > . 0  ,4  > . 960 7>6 7> 6 7>6 *+*    9  9 9  Note que se houver apenas duas possibilidades a verificar deve-se usar if-else-end, enquanto que se houver trˆes ou mais possibilidades a verificar deve-se usar if-elseif-...-elseif-else-end. @BA  \ P UK P I KW  M P Q O MATLAB e´ bastante vers´atil para criac¸a˜ o de gr´aficos em diversos estilos (bidimensional, tridimensional, barras, polar, etc.). Vamos plotar a func¸a˜ o co-seno com as listas  e  criadas na sec¸a˜ o 2.5. Para gr´aficos simples bidimensionais deve-se usar a func¸a˜ o !+ 12% . '&+!   !+ 12%7,D(  =   .   Logo em seguida a esse comando, deve ser aberta uma nova janela gr´afica com o gr´afico da func¸a˜ o desejada. Para se obter o gr´afico com grades para facilitar a leitura, use a func¸a˜ o # ?+*"6 1"> . Note que o MATLAB ajusta os eixos automaticamente. 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −5 0 5 10 15 20 Como salvar o gr´afico num formato que possa ser inserido por um editor de textos? Na janela do gr´afico, e´ s´o clicar no menu File  Export. . . e escolher o formato desejado. Ou, se preferir trabalhar na janela de comandos, use a func¸a˜ o ! ?8*>% adequadamente. Dˆe um  "! ! ?+*> % . Para adicionar t´ıtulos aos eixos e ao gr´afico, siga o modelo abaixo: -  Z()$)3 4,     = )$)3 4, %8*,%3&3, *"(1'(  *"(1 = . . ?$  +  *&<&15<&19-,D(5. . Para plotar mais de uma curva ao mesmo tempo:  !+ 12%7,D(  =   ( 9*><,D(/.. '& #    cos(x) sen(x) Gráfico cos(x) e sen(x) 1 0.8 0.6 0.4 Eixo y 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −5 0 5 10 15 20 Eixo x Outras opc¸o˜ es da func¸a˜ o !+ 12% , tais como cor ou tipo da linha do gr´afico, s´ımbolos dos pontos plotados, podem ser vistas no  "! correspondente. Procure tamb´em alguma informac¸a˜ o sobre legendas ( "!:)  # 7> 6 ). Em seguida, veremos um exerc´ıcio muito importante. Modifique o n´umero de elementos da lista  para um valor bem menor que 50 e, depois, para um valor bem maior que 50. Note bem o que 9 ,D/ ( . plotada. acontece com a curva <&1  Z(  *,>89,!$<)3, 7! * =   <&1 :  9 92.-0 9-,D(/.-0  !+ 12%7,D(  = .40 # ?+*"651"> 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −5  Z(  *,>89,!$<)3, 7! *   = <&1 : 0 5 10  9 999/.-0 9-,D(/.-0  !+ 12%7,D(  = .40 # ?+*"651"> '&  15 20   15 20     1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −5 0 5 10 Note como a curva com poucos pontos ficou bem distorcida. Isso e´ bastante importante em aquisic¸a˜ o de sinais: o n´umero de dados amostrados deve ser suficiente para revelar a informac¸a˜ o correta do sinal. Este t´opico dever´a ser visto em detalhe no decorrer das atividades do laborat´orio. @BA S[F P IUK P G F P IUK P ]K P Q ]G FKYI3K " S KYI " X' P Entre as diversas atividades do curso, estaremos aquisitando dados experimentais atrav´es de uma placa de aquisic¸a˜ o conectada ao computador e controlada por func¸o˜ es programadas usando o software LABVIEW . Desta forma, ser´a gerado um arquivo em formato ASCII com a tabela dos dados num´ericos aquisitados. Ap´os esse processo, vocˆe dever´a realizar diversas an´alises com os dados utilizando o MATLAB. Existem diversas maneiras de se importar os dados de um arquivo usando o MATLAB. Analogamente, vocˆe pode querer salvar (exportar) um conjunto de dados obtidos no MATLAB para uso posterior. Existem v´arias maneiras de importar ou exportar dados no Matlab. J´a vimos anteriormente o uso das func¸o˜ es 9$  e  1)$)6 para salvar e carregar todas as vari´aveis de uma sec¸a˜ o de trabalho. Verifique agora  2! 9*$  e 3 "!  1)$)6 . Com uma pequena variac¸a˜ o, e´ poss´ıvel selecionar as vari´aveis a salvar ou carregar. Para salvar somente os dados  e  em arquivos com formato bin´ario que s´o o Matlab entende: *+* * * + * * + (  *,>89,!$<)3, 7! * = :  9 992.40 9*,>7,D(/.-0 9$  = " 6 $)6319* 4+$% ( Para recuperar esses dados, basta usar o comando  1&$)6 : *+* * * + <&) $&?  1)$)6 " 6 $)6319* 4+$% ( = Para salvar ou recuperar dados em formato texto (ascii), o procedimento e´ um pouco mais complicado. Se vocˆe j´a verificou "! 9)$  , ent˜ao entender´a o procedimento seguinte: '&+%  *+* 9$  " 6 $)6319* % (&% = (  $9 < * *      %$)89 Abra os arquivos ‘dados1.mat’ e ‘dados1.txt’ com um editor de textos qualquer e observe a diferenc¸a. A recuperac¸a˜ o dos dados e´ feita da seguinte forma com a func¸a˜ o  1)$&6 : *+* * * + * * + <&) $&? "  1)$)6 6 $)6319* % (&%  $9 < * * &+1 $)?+*7$)8)9'$)? , 1 ) ? 6 $&619* *+* * * + ( &6 $&619* , = &6 $&619* ,  .-0 : .-0 Repare que os dados s˜ao inicialmente guardados na vari´avel com o mesmo nome do arquivo mas sem a extens˜ao (dados1). Existe uma outra maneira de se exportar/importar dados em que se pode ter um controle melhor do formato do n´umero a ser salvo/importado em/de um arquivo. Veja em seguida. A primeira operac¸a˜ o a ser realizada e´ usar o comando 1"!> para criar um arquivo e/ou para disponibilizar um arquivo j´a criado para um dos seguintes modos: para escrever ou para ler ou para incluir dados. Aproveite e dˆe um  "! 12!7> . Por outro lado, a u´ ltima operac¸a˜ o com um arquivo dever´a ser seu fechamento com o comando 3<  19 . O comando 1"!37> , se usado corretamente, dever´a retornar um n´umero inteiro maior ou igual a 3, n´umero esse que representar´a a identificac¸a˜ o do arquivo aberto. Tomemos como tarefa armazenar os elementos de duas listas  e  de mesma ordem num arquivo a ser denominado, por exemplo, “dado1.d”. Obviamente, deveremos primeiro criar as listas e o arquivo: *+* * * + * * + * * + <&) $&? (  *,>89,!$<)3, 7! * = 9*,>7,D(/.-0 1"!>7, 6 $&61  " 6 :  9 992.40   . $7> 9  O arquivo denominado “dado1.d” foi criado no diret´orio atual (verifique a criac¸a˜ o do arquivo), e foi atribuido o valor 3 como identificac¸a˜ o deste arquivo. Com isso, sempre que se desejar fazer referˆencia ao arquivo basta referenci´a-lo com o valor 3. Se for criado mais um arquivo antes do fechamento do ‘3’, ele receber´a a identificac¸a˜ o ‘4’, e assim por diante. Em seguida, deveremos exportar os dados para o arquivo ‘3’. Existem diversos comandos para se executar essa tarefa, todos muito semelhantes aos comandos da linguagem C. Uma listagem completa das func¸o˜ es de entrada/sa´ıda do MATLAB pode ser obtida com 3 "!T*)1 *)> . Neste texto vou mencionar apenas a func¸a˜ o )! ?+*>  %  , que penso ser a mais adequada para nossas necessidades. Vejamos como utiliz´a-la:  -.0  *+* >*  )7>#&% 7,D(/. 17? &! ?+*>% 6  , 6 >   >  (6,^>.  =      ,^>..-0 7>6 *+* 3<& 1  93, . $7> 9 9 E´ muito semelhante a` linguagem C.  significa formato de n´umero real (ponto flutuante), enquanto que > significa nova linha. Outros formatos e comandos poss´ıveis podem ser encontrados no  "! correspondente. Informe-se tamb´em sobre a func¸a˜ o &7 > #&%& . Outra maneira seria utilizar uma matriz formada das listas  e  :  *+* * * + * * +   = (70 0 ?+*,>%6, )! 3<& 1      >   .-0  93, . $7> 9 9 Veja que foi criada uma matriz com as lista  e  e essa matriz foi armazenada no arquivo. Observe tamb´em, no exemplo seguinte, o controle do formato de sa´ıda dos n´umeros reais (elementos das listas): *+* * * + * * + *"6 7> %8*    $&?; ) * +1 )! !1"!37>7, 6$)61  ?+*,>%6, *26 7>%8*  $)?;*) * 31 3<& 1  -" %-"  6 %% $ .40 "   >   .-0 93, *"67>%8*    $)?; ) * 31.-0 Para importar dados de um arquivo em formato ascii, basta usar a func¸a˜ o +9 <$7>  . Por exemplo, para importar os dados do u´ ltimo arquivo “dado2.d” para plotar, pode-se proceder da seguinte forma: *+* <&) $&? * * *"6 !31"!7>7, 6 $)61 " 6  ? .-0 + * *  !39<$7> 6, *"6      *>  /.40 + *+* 3<& 1 93, *"65.-0 *+ *   0 *+* (  ,  *.-0 *+* =  ,  .-0 *+* !+ 12%7,D(  = .40 #?+*"651"> Note que apesar de o arquivo “dado2.d” conter 100 linhas e 2 colunas, n˜ao e´ poss´ıvel armazenar esses  dados nessa forma numa matriz de ordem &+0(0  - . A melhor opc¸a˜ o e´ proceder como no exemplo  - &    -  &+0(0 . Isso e´ devido a` ordem de leitura dos dados pela func¸a˜ o acima e armazenar numa matriz 39<$7>  . O u´ ltimo parˆametro (terceiro) usado na func¸a˜ o 39<$7>  (  *>  ) cont´em duass vari´aveis que indicam o n´umero de elementos a serem lidos no arquivo em quest˜ao. Apenas a vari´avel da direita pode receber o valor *,>  , que significa ‘infinito’ e foi utilizado para que a importac¸a˜ o de dados fosse at´e o fim do arquivo.  Se n˜ao for utilizado esse terceiro parˆametro, a matriz ser´a um vetor coluna contendo todos os dados do arquivo. Teste vocˆe mesmo. &ZU3XD\ X$ K P @BADC F P \DX P  S[X P Q Nesta sec¸a˜ o veremos como trabalhar com func¸o˜ es polinomiais. A manipulac¸a˜ o de polinˆomios e´ feita, basicamente, com seus coeficientes formando uma lista (vetor) horizontal. Por outro lado, as ra´ızes de um polinˆomio formam uma lista vertical.     ! , o qual tem como ra´ızes os valores - e / . Vejamos um exemplo simples, o polinˆomio  Sua representac¸a˜ o pode ser feita com a lista !  . Repare a ordem de disposic¸a˜ o dos coeficientes: *+* ! !     %   %    Suas ra´ızes podem ser encontradas com a func¸a˜ o ?31 12%+9 : *+* ?  &?31 12%+9-,^! *. ?   = =  Descubra o que faz a func¸a˜ o !+1  . Qual seria o resultado de !+1 ,  0 /. ? Em seguida, veremos como determinar o valor de uma func¸a˜ o polinomial para um determinado valor da vari´avel de entrada. Para o mesmo polinˆomio  & definido acima, qual seria o resultado se  .*%  - ? Basta usar a func¸a˜ o !81  = $ . *+*   = $4, !   !81  %+ "$  . -"$   !99  Mais interessante do  que isso, a vari´avel  pode ser uma lista ou matriz. Veja como plotar a func¸a˜ o  & para valores entre -.0 e -.0 : *+* * * + * * + * * + * * + ( =  *>89,!$<3,  =  9  9   992.-0 $4, !  ( *.-0  =  !+ 12%7,D(   # . 0 # ?+*26 1"> ()$)3 4, ( . =  % )$)3 4, (  (   .  !81   -(-   600 500 x2 −5x +6 400 300 200 100 0 −100 −20 −15 −10 −5 0 x 5 10 15 20 Diversas operac¸o˜ es podem ser efetuadas entre dois polinˆomios: soma, subtrac¸a˜ o, multiplicac¸a˜ o, divis˜ao. Para soma e subtrac¸a˜ o deve-se considerar as listas dos coeficientes dos polinˆomios e efetuar a operac¸a˜ o conforme visto na sec¸a˜ o 2.5.1. Para multiplicac¸a˜ o deve-se usar a func¸a˜ o <&1" >  , enquanto que para divis˜ao a func¸a˜ o 6 <&1" >  . Em todas as operac¸o˜ es mencionadas acima, as listas devem ter n´umero de elementos compat´ıvel com a ordem do polinˆomio. Deve-se completar com zeros at´e que essa condic¸a˜ o seja satisfeita. Al´em disso, no caso de soma e subtrac¸a˜ o, as listas devem ser de mesma ordem.     ! usado acima com o Por exemplo, para efetuar a multiplicac¸a˜ o do polinˆomio  &   polinˆomio  -   #   & :  *+* ! ! # 9 9 9  # 9  *+*  !  !    < 1"> , !   ! 9 9  . %      %    %  Mas, para executar a soma dos dois polinˆomios devem ser utilizadas listas de mesma dimens˜ao: *+*      9 !     !    %  *&9"%$Z! 48176+* +*&<$)6$  9 *+* ! 9 9 ! 9  !     9 !    %    9 # % # Por fim, veremos como determinar os res´ıduos, polos e termos diretos de uma frac¸a˜ o de dois polinˆomios no m´etodo da expans˜ao em frac¸o˜ es parciais.  -./    e     , podemos decompˆo-la numa soma de frac¸o˜ es    & -            &       -          Dada uma frac¸a˜ o de dois polinˆomios parciais, Para isso, usa-se a func¸a˜ o ? 9 *"6*) , que retorna como resposta trˆes listas: res´ıduos, polos e termos livres. Por exemplo, para a frac¸a˜ o de polinˆomios         %         &    -   # ter´ıamos a seguinte operac¸a˜ o no MATLAB: *+* > )&4 >) 4 %   # % *+*  6 7>* )!+1  = ,   0 #  /. 6 >,   *+* ?   ?  !   &?9*"6*)33,  >)&4 6 7>.  !,         Ou seja,   -    &   -  & Note que neste caso o numerador e´ um polinˆomio de ordem maior que o denominador, resultando, portanto, num termo livre n˜ao nulo. A func¸a˜ o ? 9*26*) do MATLAB tamb´em serve para executar a operac¸a˜ o inversa, ou seja, dadas as listas verticais dos res´ıduos e dos polos e a lista horizontal dos termos livres, ela determina as listas horizontais dos polinˆomios do numerador e do denominador: *+*   > 6  &? 9 *"6*)3, ?   ! . >, % 6  #    -                               ,     O MATLAB e´ uma ferramenta poderosa em controle e processamento de sinais, com v´arias func¸o˜ es espec´ıficas. Entretanto, a maioria dessas func¸o˜ es s´o est´a dispon´ıvel com a compra de pacotes adicionais, chamados de “Toolbox”. Portanto, deve-se instalar o Control System Toolbox e o Signal Processing Toolbox. Cada um desses pacotes cont´em um n´umero muito grande de func¸o˜ es, incluindo t´opicos bem avanc¸ados. Nesta apostila trataremos apenas das func¸o˜ es a serem utilizadas em nosso curso. Para uma abordagem mais detalhada, o estudante deve consultar a documentac¸a˜ o de ajuda que vem com a pr´opria distribuic¸a˜ o ou os in´umeros livros publicados. Deve-se levar em conta que houve v´arias modificac¸o˜ es entre as vers˜oes antigas do MATLAB e as mais recentes. Diversas func¸o˜ es e uma o´ tima interface gr´afica para o usu´ario foram acrescentadas. Em particular, a interface gr´afica agiliza bastante o trabalho no projeto de elementos de controle.  ADC  I P M GRQQ K S G U P ]G QX   K XDQ Nesta sec¸a˜ o, descreveremos algumas poucas func¸o˜ es para tratamento de sinais aquisitados. Basicamente, utilizaremos a transformada simples de Fourier para analisar o espectro de um sinal (conte´udo de frequˆencia) amostrado. No exemplo seguinte, com fins did´aticos, faremos o caminho inverso: criaremos um sinal j´a sabendo de antem˜ao as suas componentes em frequˆencia. Seja um sinal no intervalo de tempo de & a &+0 dado pela equac¸a˜ o:   -      #  &*0              Esse sinal pode ser plotado como na figura abaixo. Pratique: como foi plotado o sinal em MATLAB? Defina um vetor de tempo variando de 0 a &+0 e contendo  & - elementos e determine  . Note que escolhemos um valor (512) que e´ potˆencia de 2 como n´umero de elementos porque o algoritmo interno do MATLAB para a func¸a˜ o +&% (a ser utilizada mais tarde) e´ mais r´apido nesse caso. 15 10 5 0 −5 −10 0 1 2 3 4 5 6 7 8 9 10 Para encontrar seu espectro de frequˆencias (o qual j´a se pode determinar da equac¸a˜ o acima), utiliza-se a transformada r´apida de Fourier, dada pela func¸a˜ o +&% ,  -(  == *+* !&% , = .40     Ao sinal, corresponde um tempo (per´ıodo) de amostragem dado pelo intervalo entre dois instantes de tempo sucessivos em que e´ feita a medida do sinal. No nosso caso, pode ser determinado de duas maneiras, pelo menos: *+* / / 9 )%7, . %7, *  . 9 " 9 9  ou, ent˜ao, considerando que tomamos 512 elementos no intervalo de tempo entre 0 e 10: *+* / / 9 :,9 92.4, %  *. 9 " 9 9  Ao per´ıodo de amostragem *+* 9 ),! *  /  corresponde a frequˆencia de amostragem  : 9 9  "  # 9 9 Lembrando dos conceitos do Teorema da Amostragem, a frequˆencia de amostragem deve ser maior que o dobro da maior frequˆencia do sinal sendo amostrado. Caso contr´ario, ocorre “aliasing”. Portanto, s´o devemos considerar o espectro de frequˆencia at´e _(- . S´o iremos plotar o espectro at´e a frequˆencia m´axima dada por:    *+* >* 9 >,  9 "$%+%  Com isso, note, tamb´em, que limitamos os pontos a` metade. Definiremos o intervalo de frequˆencia para o gr´afico como: *+*    *,>89,!$<)3, 9  >  )7> #&%&7,^%.  4. 0 Por fim, devemos lembrar que a transformada de Fourier resulta em valores complexos. S´o nos interessa o m´odulo desses valores. Ent˜ao: *+* * * + == == ,  & 7>#&%&<,^%5.  ==  !+ 12%7,  ! ) . !* $)89-,  . .-0  -.! 1400 1200 1000 800 600 400 200 0 0 20 40 60 80 100 120 140 160 180 Para analisarmos mais detalhadamente a regi˜ao do espectro at´e 15 rad/s (equivalente a dar um zoom), utilizaremos a func¸a˜ o +*> 6 , *+* * * + * * +  !+*,> 66,  +  !+ 12%7,  , 5  . ()$)3 4,   == % .-0 !7, 5  .  )  ?  ; ) >8<*7$  .-0 # ?+*"6 "1 > ? $)6  9 . 1400 1200 1000 800 600 400 200 0 0 5 10 15 Frequência, rad/s As novas vers˜oes do MATLAB contˆem uma interface gr´afica especial para an´alise de sinais, que pode ser aberta com o comando   . Experimente com a nova janela aberta.   Com o pacote Control System Toolbox e´ poss´ıvel resolver facilmente diversos problemas de controle. Nesta apostila s´o iremos tratar dos conceitos a serem usados no curso, e veremos somente sistemas de uma entrada e uma sa´ıda (SISO), lineares e invariantes no tempo (LTI). Uma listagem completa das func¸o˜ es desse pacote pode ser obtida com o comando   !"$# . %'&)(+* No MATLAB, a representac¸a˜ o de um sistema pode ser feita de trˆes modos: com func¸a˜ o de transferˆencia; func¸a˜ o zero-polo-ganho; espac¸o de estados. S´o utilizaremos as duas primeiras representac¸o˜ es. Dado um sistema LTI, com condic¸o˜ es iniciais nulas, representado por uma equac¸a˜ o diferencial no dom´ınio do tempo,                (           (   (  &   (   &     sua func¸a˜ o de transferˆencia  e´ obtida tomando a Transformada de Laplace:     & )    (  +("!  (       $#  ' +   (  (%+  (! (  (*    (                Mostraremos duas maneiras de definir uma func¸a˜ o de transferˆencia nas vers˜oes mais recentes do MATLAB, fazendo uso da func¸a˜ o % . Na primeira maneira, deve-se explicitar uma vari´avel ( por exemplo) e, ent˜ao, entra-se com a func¸a˜ o: *+* / 9 )% , 9  ) >8<"%8*&1"> ?$7>89  &? 9 / *+* . 4,9 9   ) 9 992.  ) >8<"%8*&1"> ?$7>89  &? 9                  9   9   99 Outra maneira e´ entrar em forma de dois polinˆomios, um para o numerador e outro para o denominador da func¸a˜ o de transferˆencia: *+* >)&4  9 0 * * 6 7>*    99 0 + * * )% , >)&4  6 7>+ . 0 Ou ent˜ao, *+* )% ,  9   , 99 5.-0 Para representar um sistema LTI com forma zero-polo-ganho, usa-se a func¸a˜ o representar um sistema     & , +        ' -              procede-se da seguinte maneira: *+* !  ,    "+"+" 4   !  ! "+"+" ! > /.  -  .-0        ! . Para ! %  6 $)%$ ou Por outro lado, uma vez definido um sistema, pode-se obter seus dados utilizando  6 $%$ . A func¸a ˜ o % 6$%$ retorna os vetores dos coeficientes dos polinˆomios formadores da func¸a˜ o #   de transferˆencia ( e ). Enquato que !6 $)%$ retorna os vetores dos zeros e dos polos e o valor do ganho . *+*  >) 4  >)&4  6  . 6 7> ) % 6 $)%$3, 9 9 9 99 6 >,   Uma vez representada a func¸a˜ o do sistema, pode-se determinar sua reposta no tempo a v´arios tipos de entrada utilizando a func¸a˜ o correspondente. Verifique vocˆe mesmo para que servem as func¸o˜ es: 9"%7! , *;4!)89 , *> *,%8*$  , 9 *;4 , # >89*# , 92%7! *)> . A resposta em frequˆencia de um sistema pode ser obtida com as func¸o˜ es )+176  e 43$)?#+*> . Para   explicitar as frequˆencias m´ınima (  ) e m´axima ( ( ), dar o comando na seguinte forma:   )+16 3  ,># )4 *> )43$)( 2. . As novas vers˜oes do MATLAB tˆem uma interface gr´afica para controle. Para utiliz´a-la, primeiro representa-se o sistema como visto acima. Ent˜ao, d´a-se o comando 2%8* 8*  . Deve-se abrir uma janela pedindo para selecionar um sistema a analisar. Ap´os a selec¸a˜ o, abre-se uma nova janela em que se pode escolher interativamente as respostas obtidas para v´arios tipos de sinais de entrada. Esta e´ uma maneira bastante pr´atica de trabalhar. Al´em das func¸o˜ es cont´ınuas vistas at´e agora, o MATLAB trabalha muito bem com func¸o˜ es discretas. Uma vez definido um sistema cont´ınuo, ele pode ser discretizado usando-se a func¸a˜ o < 6 , a qual pode realizar a discretizac¸a˜ o por v´arios m´etodos. Em vers˜oes antigas do MATLAB, usar a func¸a˜ o < 64 ao inv´es. Para utilizar a func¸a˜ o < 6 , deve-se entrar como parˆametros a func¸a˜ o do sistema, o per´ıodo de amostragem, e o m´etodo de discretizac¸a˜ o desejado. Dˆe um  2! < 6 . Por exemplo, para discretizar a func¸a˜ o cont´ınua  , definida acima, pelo m´etodo zero order hold,  *+* < 66, 6 /  9  1" .-0  Analogamente, emprega-se a func¸a˜ o 6 < para converter um sistema de discreto para cont´ınuo. Note que e´ poss´ıvel criar diretamente uma func¸a˜ o discreta usando % ou ! bastando inserir mais um parˆametro que represente o per´ıodo de amostragem . Veja nos exemplos abaixo:   *+* * * +  &%6, >) 4   ! , 7 !  6 7>  /  / 9.-0 9.-0 Uma outra maneira poss´ıvel para inserir uma func¸a˜ o discreta e´ explicitar a vari´avel ( por exemplo) e o per´ıodo de amostragem e definir a func¸a˜ o na vari´avel, *+* * * +   )% ,  6,   / 9.-0   .4,   9 "  )   9 "$ .-0 Ainda com relac¸a˜ o a func¸o˜ es discretas, descubra o que faz a func¸a˜ o +*)2% .  -.%    "        &        " !  A func¸a˜ o de transferˆencia de malha fechada de um sistema e´ dada por: &   '  &               onde H(s) representa um compensador e G(s) a planta. A equac¸a˜ o caracter´ıstica correspondente e´ : &        que pode ser representada em func¸a˜ o do ganho &  , , 0 como:  # 0    Para obter o gr´afico do lugar das ra´ızes usa-se a func¸a˜ o ? 1 < )89-, >)&4 6 >. . Existe uma interface gr´afica especial contida neste Toolbox para controle. Ela pode ser aberta com o comando ?32%31 1  .                          E´ conveniente criar suas pr´oprias func¸o˜ es em situac¸o˜ es em que se necessite executar certas operac¸o˜ es repetidamente. E, tamb´em, a criac¸a˜ o de arquivos script pode ser muito u´ til para evitar ter que digitar grande quantidade de func¸o˜ es na tela de comando. Portanto, a criac¸a˜ o de func¸o˜ es e de arquivos script s˜ao recursos que devem ser utilizados para agilizar o trabalho. A grande diferenc¸a e´ que ao invocar uma func¸a˜ o ela trabalhar´a em background sem interferir nos comandos ou nas vari´aveis da janela de comando, enquanto que invocar um script e´ o mesmo que digitar linha por linha seu conte´udo na janela de comando. As func¸o˜ es e arquivos script podem ser criadas em qualquer editor de texto, desde que ao salvar se use o formato text, ou no editor pr´oprio do MATLAB. Para abrir o editor do MATLAB, clique no menu File e escolha a opc¸a˜ o New  M-file. O arquivo de func¸a˜ o ou script deve receber a extens˜ao ‘.m’ e deve ser salvo no diret´orio atual de trabalho ou num diret´orio que fac¸a parte do caminho (path) do MATLAB. $ ADC ! " M L P N GRQ O  A criac¸a˜ o e a utilizac¸a˜ o de func¸o˜ es em MATLAB e´ muito similar ao procedimento usado em linguagens de programac¸a˜ o. Imagine que vocˆe necessite criar uma onda quadrada. Abra o editor de texto e digite a func¸a˜ o como abaixo e salve em formato texto com o nome ‘quadrada.m’: *)>8<"%8*)12>     0   %  =  ; )$&6 ? $)6 $:, &!   % 9  %  >. )&43$&17?)43$Z6#1">6 $ ;*)$)6 ? $&6 $    =  7   9&1 % ; )$)6? $)6 $3,>&  ! % 9 %  > . )? $ 9 $ 17? 9 6  9$   6 $Z6$ * )>< $ 1 9$ 1 "/(0 "  % =  *&9"%$ < 1,4 $  17? 96 %74!+1  *&9"%$ < 1,4 $  17? 96 %>89$ 1 <&17?? 9,!+12> 6 7>%9  9 !$&? $243% ?19Z6 '7>%? $&6 $'6 $  ) >< $ 1 9$ 1  ! %>89$ 1 6  ! *&<&1 %29  !&? 1761Z6 $  *> 9"%$7>% 1"> 6$ *,> *&<*7$ % 5  *> 9"%$7>%&8*>$  > )  43)?1 > >#6   6  !+1">%31 96$ 2%$ %* :,^% 9)? )% 43$*&17? *)><  $ 1#1"> 6$ 1 ):*# )$  ; )3$)6 ? $)6$ 691 $&619 $ 92. 4  ,^> *.-0 % ,*. )% 960 ! !  0 1?  43*)1!)?  1761 >  % , 5  . )% ,    *.  2%$ %<0 * ? 24<,<)*)4,,D% , 5  . )% 92. "  !!.  =  ., + 9  9 , 5 .  & !<0 = , 5 . &!<0 7> 6 7>6  Note que a func¸a˜ o tem duas sa´ıdas ( e  ) e quatro parˆametros de entrada (Vp, P, t0, tf, n). Todas as linha que comec¸am com o s´ımbolo % s˜ao utilizadas para "! . Assim, se vocˆe estiver na janela de comandos e digitar  "! ; )$)6? $)6 $ as mensagens de ajuda contidas nas linhas % aparecer˜ao. Note que se uma func¸a˜ o tem apenas uma sa´ıda ent˜ao ela pode ser definida na primeira linha do arquivo ‘.m’ correspondente como, por exemplo: *)>8<"%8*)12> $%317?+*$ 4  , > . . Ou seja, sem os colchetes. $ A@ I " X' P Q  Q M I+X F U Se vocˆe desejar usar a func¸a˜ o ‘quadrada’ definida anteriormente para plotar v´arios tipos de onda quadrada, ent˜ao ser´a conveniente criar um arquivo script para tornar o processo menos trabalhoso. Abra o editor de textos e crie o arquivo com nome ‘script1.m’ como abaixo: 9<2?+*!% *>!)% ,  !$&? $!8 12%$)?51">6 $9 1,43 <  1 6 $ ; )$)6 ?$)6 $9Z6+*)?39$9 *"%)? $ < $  1!$)? $Z!+ 17%$)?51"> 6 $9 "/1&  ; )3$)6 ? $)6$9 >&!)?&% -.&/ -0 !3$)? $  <&12>%8*>)3$)? (  3*> !) % , 3*> !) % , 3*> !) % , (  ( - (+ 3 *> !) % , % ( =  3*> !)  =  = - % , ; . > %? 51 > %? 51 > %? 51 > %? 51 > %? 51 )$)6? $)6 $3,  = $  17?#61 !)?  1761Z6 $&17?4+$Z6  "1 > 6$ $  17?#61 *>892%$7>%5*> *&<*7$  . $  17?#61 *>892%$7>% +*,>$  . $  17?#6 $Z%7> 9$ 1Z6  ! *&<&1 . > & )  43)?31 6!+12>%319 6 9) 1 $)61 .   : 6 % (+ (  ( ( ( .-0 !+12% ,  . 0># ?+*"6:12><0  0 +*>  ! )%7, ) 9 1 $ 4816+* +*&<)$)?  $ 9 9 <$ )  $9 : 0 0 *  +  9 = 9 <$)! $ 3*> ! ) % , >%?   (4 * >#()43$)( 4 *>     1) = .   . . 9 > 43$&( #74:<&1<,%9 . $)(+*&94, 9 <$)$2.-0 0 7>6 +*> !)%7, *  0 + 9)1 $#?16 :  0 ?*) >:9 <2?+*,!%  $)? 1 >+1 $2437>% 9 <7?+*!%  1) .   9 . 9  7>6 Diversas func¸o˜ es utilizadas no arquivo acima merecem algumas considerac¸o˜ es. A func¸a˜ o *,> !)% e´ utilizada para imprimir uma mensagem na tela e pode ou n˜ao esperar pela entrada de algum dado (exemplo, (  3*> ! ) % , >%?  (  . . No caso de se querer utilizar uma vari´avel do tipo string,  0 . coloc´a-la entre aspas: 9,!819"%! $ +*>  ! )7 % , 9)  1 $T<&1">%8*, > )$)? 1 ) 9 . . Note tamb´em que > e´ utilizado (como na linguagem C) para fazer o cursor ir para a pr´oxima linha. Dentro do script foi feito uso da func¸a˜ o ‘quadrada’ definida anteriormente. Os s´ımbolos ‘ + ’ e ‘ ’ s˜ao operadores l´ogicos.      Operador Descric¸a˜ o + identidade OR  AND  NOT  Por fim, note que e´ poss´ıvel reinicializar o trabalho do script bastando invoc´a-lo de dentro do script (?*) >:9 <2?+*! %  ). "/ -