Você está na página 1de 58

Universidade Federal Fluminense Escola de Engenharia Curso de Engenharia de Telecomunicaes Programa de Educao Tutorial Grupo PET-Tele

Apostila de Introduo ao Octave/Matlab


(Verso: A2011M11D01)

Niteri - RJ Novembro / 2011

Prefcio
Tendo em vista as diretrizes do MEC em pesquisa, ensino e extenso, o Programa de Educao Tutorial (PET) do curso de Engenharia de Telecomunicaes da Universidade Federal Fluminense (UFF) desenvolveu um projeto de elaborao de apostilas e cursos voltados para a graduao. O intuito desse trabalho auxiliar alunos no aprendizado de temas importantes para sua formao, que no esto presentes em nenhuma das disciplinas, e, alm disso, servir de material didtico para cursos de capacitao ministrados pelos bolsistas do Programa aos corpos discente e docente da graduao. Abaixo segue a lista de apostilas preparadas nesse projeto. HTML - linguagem de programao para hipertextos, empregada, principalmente, na construo de pginas da Internet (webpages). LaTeX - sistema de edio de texto largamente utilizado em meios acadmicos e cientcos, bem como por editoras nacionais e internacionais. Linux - introduo ao sistema operacional LINUX. Linguagem C - linguagem de programao amplamente utilizada em problemas de engenharia e computao. MATLAB - ambiente de simulao matemtica, utilizado em diversas reas prossionais. Spice - ambiente de simulao de circuitos eltricos (analgicos e digitais), utilizado em projeto de circuitos discretos e integrados. Este documento destina-se a introduzir o usurio ao ambiente do Matlab . Sabendo-se da imensa quantidade de funes e da existncia de um acervo de documentao prprio includo no programa, esta apostila no pretende esgotar o tema como um manual. Ela destina-se a introduzir, de forma sucinta, o usurio ao ambiente do programa, mostrando e exemplicando as ferramentas bsicas de utilizao do mesmo. Para maiores informaes e um estudo mais aprofundado, consulte as referncias bibliogrcas no m do documento. muito importante, para um melhor aprendizado, que o leitor esteja em frente a um computador com o software instalado. medida que se l a apostila, comandos e operaes devem ser testados no programa. Interessa ainda mencionar que sero destacados, ao longo das pginas, comandos e funes teis s disciplinas do curso de Engenharia de Telecomunicaes, organizadas em sees relativas a suas aplicaes.

Verso atual: ltimas atualizaes:

Carina Ribeiro Barbio Corra Mariana da Costa Santos Isabella Frana e Frana Beatriz Costa Ribeiro Vitor de Souza Lima Alexandre Santos de la Vega

Este documento de distribuio gratuita, sendo proibida a venda de parte ou da ntegra do documento.

Sumrio
Prefcio 1 Introduo 1.1 Informaes iniciais . . . . . . . 1.2 Janelas . . . . . . . . . . . . . . 1.3 Ajuda . . . . . . . . . . . . . . 1.4 Bibliotecas do Matlab . . . i 1 1 1 2 3 5 5 5 6 7 7 7 8 10

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

2 Variveis 2.1 Declarao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Manipulao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Variveis pr-denidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Nmeros e matrizes 3.1 Representao numrica 3.2 Formatos de visualizao 3.3 Denio de matrizes . . 3.4 Indexao . . . . . . . .

. . . . . . . de nmeros . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

4 Operaes com matrizes 13 4.1 Operaes aritmticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2 Operaes lgicas e relacionais . . . . . . . . . . . . . . . . . . . . . . . . . 14 5 Funes matriciais 5.1 Matrizes elementares . . . . . 5.2 lgebra linear . . . . . . . . . 5.3 Informaes matriciais bsicas 5.4 Manipulao de matrizes . . . 5.5 Anlise de dados . . . . . . . 17 17 18 19 19 21 23 23 23 24 24 27

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

6 Funes matemticas elementares 6.1 Funes trigonomtricas . . . . . . 6.2 Funes exponenciais . . . . . . . . 6.3 Funes complexas . . . . . . . . . 6.4 Funes de arredondamento e resto 7 Funes polinomiais

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

iii

iv

Sumrio

8 Grcos 29 8.1 Grcos de duas dimenses . . . . . . . . . . . . . . . . . . . . . . . . . . 29 8.2 Grcos de trs dimenses . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 8.3 Funes auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 9 Funes polinomiais racionais complexas 10 Programao 10.1 Funes e scripts 10.2 Controle de uxo 10.2.1 Estruturas 10.2.2 Estruturas 39 43 43 44 44 46

. . . . . . . . . . . . . . condicionais de repetio

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

A Funes relativas a aproximaes para ltros seletores em A.1 Butterworth . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 Chebyshev . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3 Elptico (Cauer) . . . . . . . . . . . . . . . . . . . . . . . . .

frequncia 49 . . . . . . . . 49 . . . . . . . . 50 . . . . . . . . 51

PET Tele))

UFF

Captulo 1 Introduo
1.1 Informaes iniciais

O Matlab (abreviatura de MATrix LABoratory - Laboratrio de Matrizes) um software de simulao matemtica que realiza operaes matriciais, constri grcos em duas ou trs dimenses, auxilia no processamento de sinais, alm de manipular outras funes especializadas. Ele trabalha com uma linguagem de programao de alto nvel, em um ambiente interativo, para o desenvolvimento de algoritmos, anlise e visualizao de dados e computao numrica. Prprio para as reas tcnica e cientca, o software tem funes de tratamento numrico de alto desempenho, capazes de resolver problemas computacionais tcnicos de forma mais eciente do que as tradicionais linguagens de programao. Alm do ambiente interativo, outra facilidade do Matlab a possibilidade de execuo de arquivos texto, contendo uma sequncia de instrues denidas pelo usurio. Esses arquivos texto, que tm extenso .m, podem ser criados e editados dentro ou fora do seu ambiente.

1.2

Janelas

Atravs de objetos grcos denominados janelas, o usurio opera as funcionalidades do programa de forma interativa. A janela principal do Matlab chama-se Command Window (Janela de Comando), onde os dados e instrues so digitados no prompt >> pelo usurio e, aps a tecla Enter ser pressionada, o programa os processa imediatamente e expe na tela o resultado. Os comandos digitados so armazenados em um buer de comandos, no qual pode-se navegar usando as teclas seta-para-cima e seta-para-baixo . Alm disso, teclando-se o texto str, por exemplo, e usando-se as setas e , navega-se por todos os comandos iniciados com o texto str. A tecla Esc limpa o que estiver escrito na linha do comando. Comandos terminados com ponto-e-vrgula no exibem as variveis de resposta na tela. O uso do ponto-e-vrgula til quando a impresso do resultado na tela no interessa, ou quando a impresso muito extensa como, por exemplo, para uma matriz 1000 1000. Deve-se ressaltar que, apesar da impresso ser suspensa, o comando executado pelo programa. Vrios comandos podem ser digitados na mesma linha, desde que estejam separados

Captulo 1. Introduo

por vrgula ou ponto-e-vrgula. Comandos muito longos para uma linha podem ser interrompidos por trs pontos ... e continuados na linha seguinte. O exemplo a seguir ilustrativo quanto a esses detalhes.

>> a=1, b=... 2; c=a+b a = 1 c = 3 importante apontar que a Janela de Comando normalmente usada para testes de comandos e funes ou simples operaes. Quando se deseja implementar algum programa, projeto ou trabalho, utiliza-se o M-File Editor. Neste editor, cria-se um arquivo texto .m com os comandos desejados. Para abrir um novo arquivo-M, clique em File > New > M-le ou simplesmente digite o comando edit. Aps escrever o programa, pode-se execut-lo pela tecla de atalho F5. Alm da Janela de Comando e do Editor de Arquivo-M, h ainda as janelas Help, Command History, Current Directory e Workspace, que esto respectivamente relacionadas com ajuda, histrico dos ltimos comandos digitados, diretrio corrente do programa e o espao de trabalho onde se visualizam dados e variveis. Essas janelas podem ser mantidas fechadas ou abertas, dependendo da necessidade ou gosto do usurio. Essas outras janelas no so detalhadas nesse documento.

1.3

Ajuda

Atravs do comando help, o usurio pode consultar a ajuda do Matlab . Escrevendose help e o nome da funo, mostrado um pequeno resumo da funo (normalmente de uma linha) seguido de uma descrio mais detalhada da mesma.

>> help ones ONES Ones array. ONES(N) is an N-by-N matrix of ones. ONES(M,N) or ONES([M,N]) is an M-by-N matrix of ones. ONES(M,N,P,...) is an M-by-N-by-P-by-... array of ones. ONES(SIZE(A)) is the same size as A and all ones. See also ZEROS. possvel, ainda, procurar por funes cujos resumos contenham determinada palavrachave. Para isto, basta digitar o comando lookfor seguido da palavra desejada. Caso se queira interromper a busca, deve-se teclar CTRL+C.

PET Tele))

UFF

1.4. Bibliotecas do Matlab

>> lookfor ones ONES Ones array. SPONES Replace nonzero sparse matrix elements with ones. SLUPDATE Replace blocks from a previous release with newer ones. FPUPDATE Replace blocks from a previous release with newer ones. FPUPDT Replace older 1.x blocks with newer 1.1 ones. BUFFERM buffer zones for vector data. ONEM Constructs a regular matrix map of all ones. UPDATEXPCENV Updates the new Environment settings to become the current ones. DRAMADAH Matrix of zeros and ones with large determinant or inverse.

1.4

Bibliotecas do Matlab

O Matlab apresenta uma srie de comandos, operadores e funes primitivas, organizadas por categorias, assim como rotinas especcas de diversas reas da engenharia, organizadas em bibliotecas denominadas Toolboxes. Estas categorias e bibliotecas so designadas por tpicos primrios. Para a visualizao de todos estes tpicos, basta digitar o comando help. Alguns desses tpicos primrios so: general - comandos gerais ops - operadores e caracteres especiais control - biblioteca de sistemas de controles signal - biblioteca de processamento de sinais optim - biblioteca de otimizao Outras bibliotecas abrangem campos variados como aquisio e processamento de imagem, bio-informtica, telecomunicaes, lgica difusa e realidade virtual. Para se aprofundar mais em qualquer biblioteca, basta digitar o comando help tpico.

UFF

PET Tele))

Captulo 1. Introduo

PET Tele))

UFF

Captulo 2 Variveis
2.1 Declarao

Dado que o programa oferece um ambiente de execuo de uma linguagem interpretada, uma caracterstica conveniente do Matlab que as variveis no precisam ser dimensionadas antes do uso, pois so geradas automaticamente ao serem utilizadas. Para criar e/ou armazenar informaes em variveis denidas pelo usurio, basta digitar o nome da varivel seguido do sinal de igual = e da expresso desejada. Na escolha dos nomes das variveis, devem ser obedecidos os seguintes critrios: os caracteres podem ser alfanumricos (letras e nmeros), desde que iniciados por letras; letras maisculas e minsculas denem nomes diferentes (linguagem case sensitive); o caracter (underscore,underline ou sublinhado) pode ser usado no meio do nome; so permitidos nomes com, no mximo, 32 caracteres. Caso seja executada uma expresso que gere um valor como resultado e, nessa expresso no haja uma atribuio do resultado para alguma varivel denida pelo usurio, o resultado ser armazenado na varivel ans, pr-denida pelo ambiente.

2.2

Manipulao

Existem comandos prprios para manipulao de variveis. Abaixo esto listados os mais utilizados. who: Lista os nomes das variveis. whos: Lista o nome e o tipo das variveis. clear: Elimina todas as variveis da rea de trabalho. Para se apagar uma ou mais variveis utiliza-se o comando clear seguido dos nomes das variveis separadas por espao.

Captulo 2. Variveis

save: Salva as variveis em arquivo, podendo utiliz-las novamente na prxima vez que o programa for inicializado ou mesmo quando executado o comando clear. load: Recupera as variveis previamente salvas em arquivo pelo comando save. clc: Limpa a janela de comandos.

2.3

Variveis pr-denidas

No Matlab , existem algumas variveis pr-denidas que podem ser teis ao usurio, as quais so listadas na Tabela 2.1. Varivel ans pi eps inf NaN ou nan i ou j nargin nargout realmin realmax bitmax Representao Varivel padro para armazenar resultados. Razo entre o permetro da circunferncia e o seu dimetro. Preciso de ponto utuante, ou distncia entre o 1 e o prximo nmero real. Innito (por exemplo, resultado da diviso 1/0). Not-a-Number ou valor no-numrico (exemplo: resultado de 0/0). Unidade numrica imaginria, igual a 1. Nmero de argumentos de entrada de uma funo. Nmero de argumentos de sada de uma funo. Menor nmero real positivo utilizvel. Maior nmero real positivo utilizvel. Maior nmero inteiro positivo utilizvel. Tabela 2.1: Variveis pr-denidas. Caso o usurio dena e utilize uma varivel com o mesmo nome de alguma das variveis ou das funes pr-denidas, ela funcionar como uma varivel comum, perdendo seu signicado original. Quando apagada, ela retornar ao seu comportamento pr-denido. >> i=999 i = 999 >> clear i >> i ans = 0 + 1.0000i

PET Tele))

UFF

Captulo 3 Nmeros e matrizes


3.1 Representao numrica

Todas as informaes numricas do Matlab so armazenadas sob a forma de matrizes. Se, por exemplo, for digitado o nmero 5 no ambiente do programa, este valor ser interpretado como uma matriz de dimenso 11. Nmeros negativos, com casas decimais, complexos e sob a forma de notao cientca podem ser representados no Matlab usando-se a seguinte simbologia: nmeros negativos: ; Ex.: 5 nmeros com casas decimais: . ; Ex.: 3.2 nmeros complexos: i ou j (como suxos, direita da parte imaginria, ou como funes, equivalentes raiz quadrada de -1); Ex.: 3 + 5i, 3 + 5j, 3 + 5 i, 3 + 5 j, 3 + i 5, 3 + j 5, 3 + 5 sqrt(1) e 3 + sqrt(1) 5. notao cientca: e ou E. Ex.: 5e3 (equivalente a 5 103 ) e 2e 4 (equivalente a 2 104 )

3.2

Formatos de visualizao de nmeros

Todos os clculos so executados no Matlab com aritmtica de dupla preciso. A visualizao dos nmeros nas janelas Command Window e Workspace, entretanto, pode ser feita em diversos formatos. Por denio, o Matlab exibe os resultados em trs formatos diferentes: inteiro, real com quatro casas decimais ou em notao cientca, adotando aquela que melhor convier. Esse comportamento padro pode ser alterado clicando-se em File > Preferences, ou simplesmente digitando na Janela de Comando a instruo format seguida do formato especco. A Tabela 3.1 ilustra cada um deles, exibindo o nmero 2 como exemplo.

Captulo 3. Nmeros e matrizes

Comando format short format long format short e format long e format short g format long g format hex format + format bank format rat format debug

2 1.4142 1.41421356237310 1.4142e+000 1.414213562373095e+000 1.4142 1.4142135623731 36a09e667f3bcd + 1.41 1393/985 Structure address = 12ac208 m=1 n=1 pr = 12600c0 pi = 0 1.4142

Comentrio 5 dgitos (ponto xo). 15 dgitos (ponto xo). 5 dgitos e expoente (ponto utuante). 15 dgitos e expoente (ponto utuante). O melhor entre short e short e. O melhor entre long e long e. Hexadecimal em ponto utuante. Positivo +, negativo ou zero . 2 casas decimais representando moeda. Aproximao racional. short g e informaes sobre armazenagem interna.

Tabela 3.1: Formatao da visualizao de resultado numrico.

3.3

Denio de matrizes

Existem diversas formas de se montar uma matriz. A mais simples delas utiliza elementos denominados aglutinadores, representados simbolicamente por colchetes, [ e ] . A funo dos aglutinadores consiste em concatenar (encadear), horizontalmente ou verticalmente, dados de um mesmo tipo, podendo formar matrizes numricas ou vetores de caracteres (strings). O exemplo abaixo mostra a concatenao de duas palavras com um espao no meio, todos denidos entre aspas simples (tipo caracter).

>> a=Duas; >> b= ; >> c=palavras.; >> [a b c] ans = Duas palavras.

Entendido o conceito de aglutinao, que ser muito utilizado daqui em diante, tornase fcil a tarefa de denir uma matriz. Uma matriz montada linha aps linha, onde espao ou vrgula indicam transio de coluna e ponto-e-vrgula indica transio de linha.

PET Tele))

UFF

3.3. Denio de matrizes

>> [1,2;3,4] ans = 1 2 3 4 >> [ans [5;6]] ans = 1 2 3 4

5 6

Outra maneira de denir matrizes consiste em criar vetores-linha com elementos em progresso aritmtica, atravs da simples sintaxe: valor_inicial : incremento : valor_nal onde os valores fornecidos no precisam ser necessariamente inteiros. Basicamente, o primeiro elemento do vetor criado corresponde ao valor inicial e os elementos seguintes so acrescidos do passo (ou incremento), de tal maneira que nunca ultrapasse o valor nal. Caso o incremento seja omitido, ele ser entendido como igual a 1. >> 1:5:20 ans = 1 6

11

16

>> 2.71 : 5.71 ans = 2.7100 3.7100

4.7100

5.7100

Uma terceira forma de criar vetores utiliza a funo linspace, que espaa linearmente um determinado nmero de elementos entre um valor nal e um inicial. Sua sintaxe : linspace(valor_inicial, valor_nal, nmero_de_elementos) >> linspace(0,10,5) ans = 0 2.5000

5.0000

7.5000

10.0000

A funo logspace similar, porm espaa os elementos logaritmicamente na base 10. Uma diferena muito importante em sua sintaxe que os valores iniciais e nais so potncias de 10, devendo ser escritos apenas seus expoentes. >> logspace(0,1,5) ans = 1.0000 1.7783

3.1623

5.6234

10.0000

Existem muitas outras formas de se criar uma matriz. Apenas a ttulo de curiosidade, a funo xlsread l uma matriz a partir de um arquivo XLS gerado pelo programa Microsoft Excel .

UFF

PET Tele))

10

Captulo 3. Nmeros e matrizes

3.4

Indexao

O padro de indexao matricial no Matlab a forma tradicional intuitiva (r, c), onde r representa o nmero da linha e c representa o nmero da coluna. >> m=[.1 .2 .3 .4 .5 ; .6 .7 .8 .9 1 ; 1.1 1.2 1.3 1.4 1.5] m = 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 >> m(2,5) ans = 1 Os elementos da matriz tambm podem ser indexados seqencialmente, conforme ilustrado na Tabela 3.2. 1 1 2 3
(1) (2) (3)

2 0.1 0.6 1.1


(4) (5) (6)

3 0.2 0.7 1.2


(7) (8) (9)

4 0.3 0.8 1.3


(10) (11) (12)

5 0.4 0.9 1.4


(13) (14) (15)

0.5 1.0 1.5

Tabela 3.2: Indexao de elementos de uma matriz. >> m(5) ans = 0.7000 possvel selecionar mais de uma linha ou coluna, usando-se dois-pontos : entre os ndices inicial e nal para indicar o intervalo. Quando os ndices inicial e nal so omitidos, indica-se o intervalo inteiro. A palavra reservada end indica o m da linha ou da coluna. >> m(3,1:4) ans = 1.1000 >> m(:,5) ans = 0.5000 1.0000 1.5000 >> m(1,3:end) ans = 0.3000 0.4000

1.2000

1.3000

1.4000

0.5000

PET Tele))

UFF

3.4. Indexao

11

O conceito de indexao pode ser ampliado quando no lugar dos ndices colocam-se vetores ou matrizes de ndices. >> m([1 3],[2 4]) ans = 0.2000 0.4000 1.2000 1.4000 >> m([1 5 9; 4 8 12]) ans = 0.1000 0.7000 0.2000 0.8000

1.3000 1.4000

Caso se coloque um ndice que exceda as dimenses da matriz, o resultado ser uma mensagem de erro. Por outro lado, se for denido um novo elemento que exceda essas mesmas dimenses, ento a matriz ser redimensionada de forma a incluir esse novo elemento, sendo as novas posies preenchidas com 0. >>m(4,6)=2.1 ans = 0.1000 0.6000 1.1000 0

0.2000 0.7000 1.2000 0

0.3000 0.8000 1.3000 0

0.4000 0.9000 1.4000 0

0.5000 1.0000 1.5000 0

0 0 0 2.1000

UFF

PET Tele))

12

Captulo 3. Nmeros e matrizes

PET Tele))

UFF

Captulo 4 Operaes com matrizes


4.1 Operaes aritmticas

As operaes aritmticas no Matlab podem ser de dois tipos: matricial ou escalar. As operaes do tipo matricial referem-se s operaes matemticas sobre matrizes. As operaes escalares so tambm denominadas de operaes sobre conjuntos. Essas ltimas so realizadas elemento a elemento de cada matriz, aplicando-se o operador em questo apenas entre elementos de mesma posio matricial. Denindo-se x = [2 3; 5 7] e y = [1 6; 2 4], pode-se associ-los pelos seguintes operadores: + : adio (matricial e escalar). Ex.: x + y = [3 9; 7 11] : subtrao (matricial e escalar). Ex.: x y = [1 3; 3 3] : multiplicao matricial. Ex.: x y = [8 24; 19 58] / : diviso matricial direita. Ex.: x/y = (x y 1 ) = x inv(y) = [0.2500 1.1250; 0.7500 2.8750] , onde: inv(m) uma funo que ser explicada na Seo 5.2. \ : diviso matricial esquerda. Ex.: x\y = (x1 y) = inv(x) y = [1.0000 30.0000; 1.0000 22.0000] : potenciao matricial. Ex.: x2 = x2 = (x x) = [19 27; 45 64] : transposio matricial. Ex.: x = xT = [2 5; 3 7] . : multiplicao escalar. Ex.: x. y = [2 18; 10 28]

13

14

Captulo 4. Operaes com matrizes

./ : diviso escalar direita. Ex.: x./y = (x. y.1 ) = [2.0000 0.5000; 2.5000 1.7500] .\ : diviso escalar esquerda. Ex.: x.\y = (x.1 . y) = [0.5000 2.0000; 0.4000 0.5714] . : potenciao escalar. Ex.: x.2 = [4 9; 25 49] Observaes: 1. Para operaes entre matriz e nmero escalar, o programa faz uma expanso escalar do nmero, executando a operao entre o nmero e cada elemento da matriz. Ex.: x + 3 = x + [3 3; 3 3] = [5 6; 8 10] 2. A precedncia de operaes pode ser controlada utilizando-se parnteses. Ex.: ((x + 3) x ) = [28 46; 67 110]

4.2

Operaes lgicas e relacionais

Os operadores relacionais e lgicos so usados em expresses lgicas booleanas para implementar testes de tomadas de deciso, fornecendo respostas do tipo verdadeiro/falso a perguntas. Para o Matlab , qualquer nmero diferente de zero representa o valor lgico verdadeiro, e zero representa o valor lgico falso. Os operadores relacionais e lgicos so apresentados na Tabela 4.1. Operador < <= > >= == ~= & | Descrio Menor que Menor ou igual a Maior que Maior ou igual a Igual a (no confundir com = ) Diferente de E OU NO

Tabela 4.1: Operadores relacionais e lgicos. interessante ressaltar que no Matlab os operadores podem ser usados no somente com escalares, mas tambm com vetores e matrizes, sendo a operao realizada elemento a elemento.

PET Tele))

UFF

4.2. Operaes lgicas e relacionais

15

>> a=-3; b=7; >> a<b ans = 1 >> a<b & a==b ans = 0 >> x=1:10 x = 1 >> y=x>=5 y = 0

10

UFF

PET Tele))

16

Captulo 4. Operaes com matrizes

PET Tele))

UFF

Captulo 5 Funes matriciais


Qualquer funo no Matlab tem como sintaxe geral o seguinte padro: [Sada1, ... , SadaN] = Nome (Entrada1, ... , EntradaN) Os parmetros de entrada devem ser postos na ordem adequada e representam os dados fornecidos pelo usurio. Eles so processados pela funo, que gera os parmetros de sada, os quais so armazenados nas variveis denidas pelo usurio no comando de chamada da funo. Deve-se ressaltar que os parmetros de entrada so escritos dentro de parnteses e os de sada dentro de colchetes, segundo a sintaxe geral de funes e matrizes, respectivamente. Os parmetros de entrada podem ser fornecidos de duas formas: escrevendo-se diretamente o nmero ou matriz, ou escrevendo-se o nome da varivel correspondente. Caso as variveis de sada no sejam fornecidas pelo usurio, o programa retorna apenas a primeira sada (Sada1 ) na varivel padro ans. Abaixo, so apresentadas algumas das funes mais utilizadas para criao e manipulao de matrizes. Matrizes denidas em alguns dos exemplos podero ser utilizadas em exemplos posteriores desse mesmo captulo. A maioria das funes no Matlab apresenta inmeras opes de funcionamento. Para cada funo, ser abordado apenas um exemplo simples. Detalhamento das funes pode ser obtido atravs do comando de ajuda help nome_da_funo.

5.1

Matrizes elementares

ones: cria uma matriz cujos elementos so todos iguais a 1, dados o nmero de linhas e colunas da matriz, respectivamente. >> ones(2,3) ans = 1 1 1 1

1 1

Para se criar uma matriz com todos os elementos iguais a um nmero qualquer N, basta multiplicar a matriz gerada por N ou multiplicar diretamente o comando por N (N*ones).

17

18

Captulo 5. Funes matriciais

zeros: cria uma matriz cujos elementos so todos iguais a 0, dados os nmeros de linhas e colunas. >> zeros(3,2) ans = 0 0 0 0 0 0 eye: cria uma matriz identidade, dada sua ordem. >> eye(3) ans = 1 0 0 1 0 0

0 0 1

rand: cria uma matriz de elementos pseudo-aleatrios com distribuio uniforme entre 0 e 1, dados os nmeros de linhas e colunas. O comando rand(state,n) reinicia o gerador de nmeros pseudo-aleatrios para o n-simo estado. Para reiniciar em um diferente estado a cada horrio, pode-se usar o comando rand(state,sum(100*clock)). Um comando similar, o randn, funciona de forma similar, mas com distribuio normal. >> rand(2,7) ans = 0.9501 0.2311

0.6068 0.4860

0.8913 0.7621

0.4565 0.0185

0.8214 0.4447

0.6154 0.7919

0.9218 0.7382

Esta funo muito til para, por exemplo, se fazer testes em programas que vo trabalhar com dados imprevisveis.

5.2

lgebra linear
>> a=[1 2;1 3] a = 1 2 1 3 >> det(a) ans = 1

det: retorna o determinante da matriz de entrada.

inv: retorna a inversa da matriz de entrada. >> inv(a) ans = 3 -2 -1 1

PET Tele))

UFF

5.3. Informaes matriciais bsicas

19

eig: retorna um vetor de autovalores da matriz de entrada. Para duas variveis de sada, retorna a matriz de autovetores e a matriz diagonal de autovalores. >> v=eig(a) v = 0.2679 3.7321 >> [V D]=eig(a) V = -0.9391 -0.5907 0.3437 -0.8069 D = 0.2679 0 0 3.7321

5.3

Informaes matriciais bsicas

size: retorna um vetor com o nmero de linhas e colunas da matriz de entrada. >> size( [11 12 13 ; 21 22 23] ) ans = 2 3 Este ltimo um exemplo em que se escreve diretamente uma matriz ao invs do nome da varivel. length: retorna o comprimento do vetor ou a maior dimenso de uma matriz de entrada. >> length( [11 12 13 ; 21 22 23] ) ans = 3

5.4

Manipulao de matrizes

reshape: d um novo formato, quando possvel, matriz de entrada, dados a matriz e seus novos nmeros de linhas e colunas. Os elementos da matriz so percorridos sequencialmente, pelo modo de indexao matriz(i), apresentado na Tabela 3.2. >> reshape(1:10,2,5) ans = 1 3 5 2 4 6

7 8

9 10

UFF

PET Tele))

20

Captulo 5. Funes matriciais

rot90: rotaciona a matriz de entrada em 90 graus, no sentido anti-horrio. >> b=[1 2 3 ; 4 5 6 ; 7 8 9] b = 1 2 3 4 5 6 7 8 9 >> rot90(b) ans = 3 6 2 5 1 4

9 8 7

iplr: troca simetricamente de posio as colunas da esquerda com as da direita, de uma matriz de entrada. >> fliplr(b) ans = 3 2 6 5 9 8

1 4 7

ipud: troca simetricamente de posio as linhas de cima com as de baixo, de uma matriz de entrada. >> flipud(b) ans = 7 8 4 5 1 2

9 6 3

diag: cria um vetor a partir da diagonal principal de uma matriz de entrada ou cria uma matriz diagonal a partir de um vetor de entrada. >> diag(b) ans = 1 5 9 >> diag(ans) ans = 1 0 0 5 0 0

0 0 9

PET Tele))

UFF

5.5. Anlise de dados

21

triu: retorna uma matriz triangular superior, a partir da matriz de entrada. >> triu(b) ans = 1 2 0 5 0 0

3 6 9

tril: retorna uma matriz triangular inferior, a partir da matriz de entrada. >> tril(b) ans = 1 0 4 5 7 8

0 0 9

5.5

Anlise de dados

sum: retorna a soma dos elementos de cada coluna de uma matriz de entrada ou a soma dos elementos de um vetor de entrada. >> sum(b) ans = 12 15 >> sum(ans) ans = 45 prod: retorna o produto dos elementos de cada coluna de uma matriz de entrada ou o produto dos elementos de um vetor de entrada. > prod([2 3 1; 2 4 5]) ans = 4 12 5 >> prod(ans) ans = 240 mean: retorna a mdia aritmtica dos elementos de cada coluna de uma matriz de entrada ou a mdia aritmtica dos elementos de um vetor de entrada. >> mean( [1 -2 3 -4; 5 -6 7 -8] ) ans = 3 -4 5 -6

18

UFF

PET Tele))

22

Captulo 5. Funes matriciais

min e max: retornam, respectivamente, o valor mnimo e o valor mximo dos elementos de cada coluna de uma matriz de entrada ou o valor mnimo e o valor mximo dos elementos de um vetor de entrada. >> max( [1 -2 3 -4; 5 -6 7 -8] ) ans = 5 -2 7 -4 >> min(ans) ans = -4 sort: retorna a matriz de entrada, com cada coluna ordenada em ordem crescente, ou o vetor de entrada, com seus elementos ordenados em ordem crescente. >> x=sort( [1 -2 3 -4 5 -6 7 -8] ) x = -8 -6 -4 -2 1 3 >> fliplr(x) ans = 7 5

-2

-4

-6

-8

PET Tele))

UFF

Captulo 6 Funes matemticas elementares


O Matlab possui diversas funes matemticas elementares, as quais podem ser listadas pelo comando help elfun. Abaixo, esto listadas as mais comumente utilizadas.

6.1

Funes trigonomtricas

As funes trigonomtricas do Matlab trabalham com valores de ngulos expressos em radianos. sin sinh asin cos cosh acos tan tanh atan >> cos(pi) ans = -1 >> acos(ans) ans = 3.1416 seno seno hiperblico arco seno cosseno cosseno hiperblico arco cosseno tangente tangente hiperblica arco tangente sec sech asec csc csch acsc cot coth acot secante secante hiperblica arco secante cossecante cossecante hiperblica arco cossecante cotangente cotangente hiperblica arco cotangente

6.2

Funes exponenciais
exp log log10 log2 sqrt exponencial (ex ) logaritmo neperiano ou natural (ln x) logaritmo na base 10 (log10 x) logaritmo na base 2 (log2 x) raiz quadrada ( x)

23

24

Captulo 6. Funes matemticas elementares

>> log(exp(10)) ans = 10 >> sqrt(log10(ans)) ans = 1

6.3

Funes complexas
abs angle conj real imag valor absoluto do nmero (mdulo) ngulo de fase do nmero, em radianos conjugado do nmero parte real do nmero parte imaginria do nmero

>> z=4-3*i z = 4.0000 - 3.0000i >> abs(z) ans = 5 >> real(z)+imag(z)*i ans = 4.0000 - 3.0000i >> conj(z) ans = 4.0000 + 3.0000i

6.4

Funes de arredondamento e resto

x: Aproxima para o inteiro de menor valor absoluto, ignorando as casas decimais. oor: Aproxima para o inteiro antecessor. ceil: Aproxima para o inteiro sucessor. round: Arredonda para o inteiro mais prximo. rem (remainder after division): Resto de diviso inteira, dados respectivamente o dividendo e o divisor. Para dividendos negativos, sendo x e y inteiros positivos, rem(-x,y)=-rem(x,y). Mais detalhes em help rem.

PET Tele))

UFF

6.4. Funes de arredondamento e resto

25

mod (modulus after division): Resto de diviso inteira, dados respectivamente dividendo e o divisor. Para dividendos negativos, sendo x e y inteiros positivos, mod(-x,y)=y-mod(x,y) se mod(x,y)=0, ou mod(-x,y)=0 caso contrrio. Mais detalhes em help mod. sign: Retorna +1 para nmeros positivos, 1 para nmeros negativos e 0 para nmeros iguais a zero. >> x=[-4:4] x = -4 -3 >> rem(x,3) ans = -1 0 >> mod(x,3) ans = 2 0 >> sign(x) ans = -1 -1 Observaes: 1. REM(x,y) tem o mesmo sinal de x, enquanto MOD(x,y) tem o mesmo sinal de y. 2. REM(x,y) e MOD(x,y) so iguais se x e y possuem o mesmo sinal, mas diferem de y se x e y possuem sinais opostos.

-2

-1

-2

-1

-1

-1

UFF

PET Tele))

26

Captulo 6. Funes matemticas elementares

PET Tele))

UFF

Captulo 7 Funes polinomiais


No Matlab , um vetor pode ser interpretado como um polinmio quando cada um de seus elementos associado a cada um dos coecientes do polinmio, comeando pelos coecientes dos termos de maior grau. Assim, por exemplo, [2 -7 1] ser interpretado como 2x2 7x + 1. Tendo isso em conta, listam-se abaixo algumas das funes que trabalham com polinmios. Vetores denidos em alguns exemplos podero ser utilizados em exemplos posteriores. roots: Retorna um vetor com as razes de um polinmio de entrada. >> a=[1,5,6] a = 1 5 >> roots(a) ans = -3 -2 polyval: Retorna o valor ou a imagem de um polinmio, dados respectivamente o polinmio e o valor de sua varivel independente. >> polyval(a,2) ans = 20 Isto o mesmo que 1(2)2 + 5(2) + 6 = 20. poly: Cria um polinmio a partir de um vetor de entrada contendo suas razes. >> poly([-3,-2]) ans = 1 5 6

27

28

Captulo 7. Funes polinomiais

conv: Convolui dois polinmios. Na prtica, isso o mesmo que multiplicar de forma distributiva dois polinmios (mas no dois vetores). >> b=[2 4]; >> conv(a,b) ans = 2 14

32

24

Neste exemplo, mostra-se que (x2 + 5x + 6)(2x + 4) = 2x3 + 14x2 + 32x + 24.

PET Tele))

UFF

Captulo 8 Grcos
8.1 Grcos de duas dimenses

O Matlab um software muito eciente na criao e manipulao de grcos, apresentando diversas funes que auxiliam essas operaes. Basicamente, os grcos so construdos conforme os passos abaixo: 1. Cria-se um vetor X com as coordenadas do eixo das abscissas; 2. Escreve-se a funo desejada, a partir do vetor X, a qual criar um novo vetor Y das ordenadas; 3. Desenha-se o grco, o que ser ensinado mais adiante. Os pares ordenados (x,y) assim criados so marcados no grco e ligados por segmentos retas (interpolao linear). Observa-se, portanto, que, quanto menor for o incremento do vetor X, mais pares ordenados sero criados e, conseqentemente, melhor ser a preciso do grco. Em compensao, uma maior quantidade de memria utilizada. Entre as inmeras funes existentes, esto listadas abaixo apenas as mais usadas. plot: Desenha grcos de duas dimenses, dados o vetor de abscissas e o vetor de ordenadas. >> X=[0:0.2:10]; >> Y=X.^2; >> plot(X,Y) A funo plot pode ser tambm usada no desenho de mais de um grco em uma mesma gura. Para isso, usa-se a seguinte notao: plot(X1, Y1, X2, Y2, ... , Xn, Yn) , onde X1 e Y1 correspondem s coordenadas do grco 1, X2 e Y2 correspondem s coordenadas do grco 2, e assim sucessivamente.

29

30

Captulo 8. Grcos

Figura 8.1: Grco do comando plot(X,Y). Cor y amarela m magenta c azul-claro r vermelha g verde b azul w branca k preta Marcador . ponto o crculo x xis + cruz * estrela s quadrado d losango v tringulo p/ baixo ^ tringulo p/ cima < tringulo p/ esquerda > tringulo p/ direita p pentagrama h hexagrama Tipo de linha slida : pontilhada -. trao-ponto -- tracejada

Tabela 8.1: Formatao, em grcos, de cor, marcador e tipo de linha. A formatao de cor, marcador e tipo de linha dos grcos tambm pode ser congurada pelo usurio. Para isso usa-se a seguinte notao: plot(X1, Y1, Conf1, X2, Y2, Conf2, ... , Xn, Yn, Confn) , onde, no lugar de Conf1, Conf2, ... , Confn, usam-se os caracteres especicados pela Tabela 8.1. >> plot(X,Y,ko--,X,10*X,*) Para criar grcos em janelas diferentes, usa-se o comando gure(n) antes do comando plot, onde n o nmero da janela de guras. Caso contrrio, cada novo grco criado ser plotado na ltima janela aberta (grco corrente). Para apagar o grco da janela corrente sem fech-la, escreve-se o comando clf .

PET Tele))

UFF

8.1. Grcos de duas dimenses

31

Figura 8.2: Grco de plot(X,Y,ko,X,10*X,*). subplot: Divide a janela de guras em uma matriz m x n de sub-janelas, selecionando uma das sub-janelas pelo seu nmero correspondente. Esses nmeros esto ordenados sucessivamente ao longo das linhas. As entradas dessa funo so respectivamente o nmero de linhas e colunas da janela e a posio do par de eixos corrente. >> >> >> >> >> >> subplot(2,2,1) plot(X,X.^2) subplot(2,2,2) plot(X,10*X) subplot(2,2,3) plot(X,log10(X+1))

Figura 8.3: Par de eixos 1, 2 e 3 da janela de guras. semilogx: Plota grcos com o eixo x em escala logartmica na base 10. semilogy: Plota grcos com o eixo y em escala logartmica na base 10. loglog: Plota grcos com ambos os eixos em escala logartmica na base 10. UFF PET Tele))

32

Captulo 8. Grcos

>> clf >> semilogx(X,10*X)

Figura 8.4: Reta representada com eixo x em escala logartmica. plotyy: Plota duas curvas no mesmo grco com diferentes escalas para o eixo y. A primeira delas tem escala esquerda, e a segunda tem escala direita. >> plotyy(X,Y,X,cos(X))

Figura 8.5: Parbola e cosseno com diferentes escalas para o eixo y. polar: Plota grcos em coordenadas polares segundo a seguinte sintaxe: polar(theta, raio, Conf ) , onde theta o vetor de valores angulares em radianos, raio o vetor de mesma dimenso que theta, contendo os valores radiais correspondentes e Conf segue as mesmas conguraes da funo plot. >> ang=[0:.1:2*pi]; >> raio=10*ang; >> polar(ang,raio);

PET Tele))

UFF

8.2. Grcos de trs dimenses

33

Figura 8.6: Grco da funo polar.

8.2

Grcos de trs dimenses

O Matlab apresenta diversos recursos para apresentao de grcos em 3D. As principais funes so listadas abaixo. plot3: Plota pontos e linhas em 3D, a partir de trs vetores de coordenadas de mesmo tamanho. >> t = 0:0.1:10*pi; >> plot3(t.*sin(t),t.*cos(t),t);

Figura 8.7: Grco do comando plot3. meshgrid: Cria duas matrizes X e Y , a partir de dois vetores x e y, onde as linhas da matriz X so cpias do vetor x, e as colunas da matriz Y so cpias do vetor y, sendo feitas tantas cpias quanto forem necessrias para que ambas as matrizes tenham as mesmas dimenses. Essa funo importante para a criao de malhas e superfcies em trs dimenses.

UFF

PET Tele))

34

Captulo 8. Grcos

>> x=[0 1] x = 0 >> y=[2 3 4] y = 2

>> [X,Y]=meshgrid(x,y) X = 0 1 0 1 0 1 Y = 2 3 4 2 3 4

mesh: Cria uma malha em 3D, a partir de trs matrizes. >> [X,Y] = meshgrid(-2:.2:2, -2:.2:2); >> Z = X .* exp(-X.^2 - Y.^2); >> mesh(X,Y,Z);

Figura 8.8: Grco do comando mesh. surf : Cria uma superfcie em 3D, a partir de trs matrizes. >> surf(X,Y,Z); As cores, tanto da superfcie quanto da malha em 3D, esto codicadas de acordo com a altura relativa dos pontos no eixo z. Quanto maior for z, mais avermelhada ser a cor, e quanto menor for z, mais azulada ela ser.

PET Tele))

UFF

8.3. Funes auxiliares

35

Figura 8.9: Grco do comando surf.

8.3

Funes auxiliares

Existem diversas funes que auxiliam a visualizao e a formatao dos grcos. As mais importantes so apresentadas abaixo. title: Adiciona um ttulo ao grco corrente. Esse ttulo um texto que deve ser escrito entre aspas simples, conforme a sintaxe: title(Ttulo do Grco) xlabel: Adiciona um texto ao eixo das abscissas do grco corrente. ylabel: Adiciona um texto ao eixo das ordenadas do grco corrente. text: Cria um texto posicionado na coordenada fornecida, conforme a sintaxe: text(X, Y, Texto) grid: Mostra linhas de grade no grco corrente. axis: Delimita os intervalos dos eixos de acordo com a sintaxe: axis([Xmin Xmax Ymin Ymax]) Essa funo ajusta o grco para os intervalos delimitados pelo usurio. Outras aplicaes podem ser vistas em help axis. hold on: Permite que novos grcos sejam criados na janela corrente sem que os grcos anteriores sejam apagados. hold o : Desabilita o comando anterior.

UFF

PET Tele))

36

Captulo 8. Grcos

whitebg: Congura a cor de fundo da janela de gura, de acordo com a sintaxe: whitebg(n,[red green blue]) , onde n o nmero da janela desejada e [red green blue] o vetor com as componentes primrias da cor. O vetor [0 0 0] corresponde ao preto e o vetor [1 1 1] ao branco. >> >> >> >> >> >> >> >> >> >> x=[-5*pi:0.1:5*pi]; y=sin(x)./x; plot(x,y); title(\it{Sample}) xlabel(x); ylabel(sin(x)/x); axis([-15 15 -0.3 1.1]); text(-2*pi, 0, -2\pi); text(2*pi, 0, 2\pi); whitebg([0.4057 0.9355 0.9169]);

Figura 8.10: Exemplo de funes auxiliares de plotagem. A cor do plano de fundo volta a ser branca quando a gura exportada do Matlab . Nos textos inseridos nela, possvel mudar o tipo e o tamanho da fonte, escrever em negrito, itlico, subscrito, sobrescrito e ainda representar letras gregas. Isso pode ser compreendido pela Tabela 8.2. clf : Apaga todos os grcos da janela corrente. close: Fecha a janela corrente. Para fechar a n-sima janela, utiliza-se o comando close(n). O comando close all fecha todas as janelas.

PET Tele))

UFF

8.3. Funes auxiliares

37

Propriedade Tipo de fonte Tamanho de fonte Negrito Itlico Subscrito Sobrescrito Letra grega

Sintaxe \fontname{} \fontsize{} \bf{} \it{} _{} ^{} \letra

Exemplo \fontname{Arial} \fontsize{14} \bf{Negrito} \it{Itlico} R_{1} x^{2} \pi

Tabela 8.2: Formatao de fonte de texto inserido em grco.

UFF

PET Tele))

38

Captulo 8. Grcos

PET Tele))

UFF

Captulo 9 Funes polinomiais racionais complexas


Uma funo polinomial racional complexa denida como uma razo de polinmios de variveis complexas, conforme a equao H(s) = bm sm + ... + b1 s + b0 (s + z1 )(s + z2 )...(s + zm ) NH (s) = = (k) , n + ... + a s + a DH (s) an s (s + p1 )(s + p2 )...(s + pn ) 1 0

onde os coecientes a1 , a2 , , an e b1 , b2 , , bm sero considerados reais e constantes, e k = bm . an As razes do numerador e do denominador so chamadas, respectivamente, de zeros e polos da funo H(s). A constante k denominada ganho. tf2zp: Encontra zeros, polos e ganho, dados o numerador e denominador da funo. >> num=[1,1] num = 1

>> den=[1,5,6] den = 1 5

>> [z,p,g]=tf2zp(num,den) z = -1 p = -3 -2 g = 1

39

40

Captulo 9. Funes polinomiais racionais complexas

zp2tf : Encontra o numerador e denominador da funo, dados zeros, polos e ganho. >> [N,D]=zp2tf(z,p,g) N = 0 1 1 D = 1 5 6

tf : Cria uma funo de transferncia e a armazena em um objeto apropriado, dados o numerador e denominador. >> H=tf(N,D) Transfer function: s + 1 ------------s^2 + 5 s + 6 pzmap: Apresenta o diagrama de polos e zeros, dado o objeto da funo de transferncia. Cada raiz do numerador (zero) representada no plano complexo por um crculo (), enquanto cada raiz do denominador (polo) representada por um xis (). >> pzmap(H)

Figura 9.1: Diagrama de polos e zeros.

PET Tele))

UFF

41

bode: Desenha os grcos de mdulo |H(j)|dB e ngulo de fase H(j) da resposta em frequncia H(j) = H(s)|s=j , dado o objeto relativo funo de transferncia H(s). >> bode(H) O comando bode(H,) desenha o grco para um dado vetor de frequncias , enquanto o comando bode(H,{min ,max }) desenha-o para a faixa de frequncias [min ; max ]. >> bode(H,{1e-1,1e2})

Figura 9.2: Grcos de mdulo e ngulo de fase da resposta em freqncia. freqs: Retorna um vetor complexo com a resposta em frequncia H(j) = H(s)|s=j , dados o seu numerador, o seu denominador e um vetor de frequncias . Caso seja omitida a varivel de retorno, esta funo simplesmente exibe os grcos de mdulo e de ngulo de fase. >> >> >> >> >> >> >> >> >> clf; w=logspace(-1,2,101); Hjw=freqs(num,den,w); moddb=20*log10(abs(Hjw)); fase=180*angle(Hjw)/pi; subplot(2,1,1), semilogx(w,moddb); title(Resposta em freqncia), ylabel(|H(j\omega)|_{dB}); subplot(2,1,2), semilogx(w,fase); ylabel(\angle H(j\omega) (graus)), xlabel(\omega (rad/s));

UFF

PET Tele))

42

Captulo 9. Funes polinomiais racionais complexas

Figura 9.3: Grco de mdulo e fase.

PET Tele))

UFF

Captulo 10 Programao
10.1 Funes e scripts

Funes e scripts so sequncias de comandos do Matlab armazenadas em arquivos do tipo texto com extenso .m (m-les), que tm por nalidade automatizar processos repetitivos e implementar clculos e comandos lgicos. A diferena bsica entre ambos que as funes aceitam parmetros de entrada e retornam parmetros de sada, enquanto os scripts unicamente executam a sequncia de comandos. As funes e os scripts podem ser criados escrevendo edit na linha de comando ou clicando na barra de ferramentas em File > New > M-le. Por carem armazenados em arquivos texto, eles podem ser editados em qualquer editor de textos. Os mesmos comandos que o usurio escreveria no prompt da Janela de Comando so usados para a implementao do script. Para que o m-le seja interpretado como funo, deve ser escrita a seguinte expresso no cabealho do arquivo: function [Sada1, ... , SadaN ] = Nome(Entrada1, ... ,EntradaM) onde Sada1, ... , SadaN so os parmetros de sada, Entrada1, ... , EntradaM so os parmetros de entrada e Nome o prprio nome da funo. Depois dessa expresso, seguem-se os comandos usados para estruturar a funo. Tanto na funo quanto no script, os comentrios so escritos nas linhas iniciais. No caso da funo, a primeira sequncia de comentrios aparecer quando for digitado help nome_da_funo na linha de comandos. Abaixo segue um exemplo de funo. function[a,b,c,d,e] = complexo(x) % COMPLEXO % [r,i,m,a,c] = COMPLEXO(x) retorna em cinco % variveis as partes real e imaginria, % o mdulo, o argumento e o conjugado de % um nmero complexo. a=real(x); b=imag(x); c=abs(x); d=angle(x); e=conj(x);

43

44

Captulo 10. Programao

Aps escrito o cdigo, o arquivo dever ser salvo com o mesmo nome da funo e com a extenso .m (no exemplo, complexo.m). Uma condio necessria para a execuo de arquivos M que eles estejam no diretrio corrente do Matlab . Para execuo de um script, feita na barra de ferramentas da janela de edio pela opo Debug>Run ou File>Run Script (dependendo da verso do Matlab ), a mudana de diretrio corrente automtica, sendo desnecessria a interveno do usurio. A mudana de diretrio corrente pode ser feita clicando-se no boto da janela principal do programa contendo ..., ao lado de Current Directory, ou por um dos seguintes comandos.

dir - lista diretrios e arquivos do diretrio corrente; cd nome_diretrio - muda diretrio corrente para nome_diretrio; cd .. - retorna ao diretrio pai, um nvel acima; edit nome - edita uma funo ou um script no diretrio corrente; nome_script - executa um script, caso esteja no diretrio corrente; [s1,s2]=nome_funo(e1,e2) - chama uma funo, caso esteja no diretrio corrente ou na biblioteca do Matlab . cd - muda para o diretrio raiz (root)

10.2

Controle de uxo

As linguagens imperativas de programao de computadores caracterizam-se pela execuo sequencial de comandos. Elas possuem ainda recursos que permitem o controle de uxo de execuo de comandos com base em estruturas de tomada de deciso. Nesta seo, sero vistas as estruturas mais comuns.

10.2.1

Estruturas condicionais

Uma estrutura condicional permite a seleo de um conjunto de comandos a serem executados quando uma dada condio for ou no satisfeita, podendo assim modicar o uxo natural de comandos. As trs estruturas condicionais bsicas do Matlab esto listadas a seguir.

PET Tele))

UFF

10.2. Controle de uxo

45

Estrutura if 1 if condio comandos end

Estrutura if 2 if condio1 comandos1 else comandos2 end

Estrutura if 3 if condio1 comandos1 elseif condio2 comandos2 elseif condio3 comandos3 ... else comandosN end

As estruturas 1 e 2 so casos particulares da estrutura 3. As condies so formadas pelos operadores lgicos e relacionais. Abaixo mostrado um exemplo de um script com uma estrutura if.

A=2; B=3; if A==B display(A e B iguais.) % Exibe texto na Janela de Comando. else display(A e B diferentes.) end

Quando se faz uso repetido de testes de igualdade com apenas um argumento comum, costuma-se usar a estrutura switch-case. Essa estrutura tem a seguinte forma:

switch var_teste case expresso_teste1 comandos1 case {expresso_teste2, expresso_teste3, expresso_teste4 } comandos2 otherwise comandos3 end

Se os testes de igualdade resultarem em falso para todos os casos, os comandos de otherwise (que opcional) sero executados. O exemplo abaixo demonstra uma aplicao da estrutura switch-case. UFF PET Tele))

46

Captulo 10. Programao

clear all num=input(Escreva um inteiro: ); % Exibe texto e l valor para a varivel. switch num case 1 y=1 case {2, 2.5} y=2 case tres y=3 case {quatro, Quatro, QUATRO } y=4 otherwise y=0 end

10.2.2

Estruturas de repetio

Uma estrutura de repetio faz com que uma sequncia de comandos seja executada repetidamente enquanto se satisfaa uma dada condio. O Matlab possui duas estruturas de repetio: for e while.

Estrutura for for varivel =inic:incr:m comandos end

Estrutura while while condio comandos end

A condio da estrutura for que varivel seja menor ou igual a m. Enquanto satisfeita essa condio, ao trmino de cada loop de comandos, varivel incrementada de incr. O incremento incr considerado unitrio caso seja omitido. Abaixo, segue um exemplo de clculo de mdia, usando-se, de forma comparativa, as duas estruturas. PET Tele)) UFF

10.2. Controle de uxo

47

clear all x=input(Vetor de amostras: ); compr=length(x); % retorna o comprimento do vetor soma_f=0; for k=1:compr soma_f=soma_f+x(k); end media_f=soma_f./compr; soma_w=0; k=1; while k<=compr soma_w=soma_w+x(k); k=k+1; end media_w=soma_w./compr; disp(Media do for: ); % Exibe string disp(media_f); % Exibe valor da varivel disp(Media do while: ); disp(media_w);

UFF

PET Tele))

48

Captulo 10. Programao

PET Tele))

UFF

Apndice A Funes relativas a aproximaes para ltros seletores em frequncia


Este captulo contm os principais comandos do Matlab , para o projeto de ltros analgicos e digitais. Existem vrias tcnicas de aproximao para a construo de ltros. Cada tcnica usada de acordo com as especicaes do sistema a ser projetado. A seguir, so apresentados os comandos com as opes utilizadas no projeto de ltros analgicos. Para os ltros digitais, consulte o manual, atravs do comando help comando.

A.1

Butterworth

BUTTORD calcula a ordem de um ltro Butterworth. [N, Wn] = buttord(Wp, Ws, Rp, Rs,s) Este comando retorna a ordem do ltro Butterworth que tenha, no mximo, Rp dB de atenuao na banda de passagem e, no mnimo, Rs dB na banda de rejeio. W p and W s so as frequncias da banda de passagem e rejeio, respectivamente. W deve ser dado em rad/sec. Exemplo: passa-baixa: passa-alta: banda de passagem: banda de rejeio: Wp Wp Wp Wp = = = = x y [x1 x2] [y1 y2] Ws Ws Ws Ws = = = = y x [y1 y2] [x1 x2]

A frequncia retornada Wn a frequncia onde ocorre uma atenuao de 3 dB. BUTTER calcula os coecientes de um ltro Butterworth. [num,dem] = butter(N,Wn,s) Este comando retorna os coecientes do numerador (num) e denominador (dem) da funo de transferncia do ltro Butterworth passa-baixa. N a ordem do ltro e Wn a frequncia de corte. Se Wn for um vetor contendo duas frequncias W n = [W1 W2 ] este comando retorna a funo de transferncia do ltro passa-banda Butterworth de ordem 2N tendo Banda de passagem com W 1 < W < W 2.

49

50

Apndice A. Funes relativas a aproximaes para ltros seletores em frequncia

[num,dem] = butter(N,Wn,high,s) Calcula um ltro passa-alta. [num,dem] = butter(N,Wn,stop,s) Calcula um ltro rejeita-banda, se W n = [W 1 W 2]. [Z,P,K] = butter(...) Retorna zeros, polos e ganho escalar K.

A.2

Chebyshev

CHEB1ORD calcula a ordem de um ltro Chebyshev Tipo I . [N, Wn] = cheb1ord(Wp, Ws, Rp, Rs,s) Este comando retorna a ordem do ltro Chebyshev que tenha, no mximo, Rp dB de atenuao na banda de passagem e, no mnimo, Rs dB na banda de rejeio. W p and W s so as frequncias da banda de passagem e rejeio, respectivamente. W deve ser dado em rad/sec. Exemplo: passa-baixa: passa-alta: banda de passagem: banda de rejeio: Wp Wp Wp Wp = = = = x y [x1 x2] [y1 y2] Ws Ws Ws Ws = = = = y x [y1 y2] [x1 x2]

A frequncia retornada Wn a frequncia onde ocorre uma atenuao de 3 dB. CHEBY1 calcula os coecientes de um ltro Chebyshev Tipo I. [num,dem] = cheby1(N,R,s) Este comando retorna os coecientes do numerador (num) e denominador (dem) da funo de transferncia do ltro chebyshev passa-baixa. N a ordem do ltro , R a atenuao mxima na banda de passagem e Wn a frequncia de corte. Se Wn for um vetor contendo duas frequncias W n = [W1 W2 ] este comando retorna a funo de transferncia do ltro passa-banda Chebyshev de ordem 2N tendo banda de passagem com W 1 < W < W 2. [num,dem] = cheby1(N,R,Wn,high,s) Calcula um ltro passa-alta. [num,dem] = cheby1(N,R,Wn,stop,s) Calcula um ltro rejeita-banda, se W n = [W 1 W 2]. [Z,P,K] = cheby1(...) Retorna zeros, polos e ganho escalar K. CHEB2ORD calcula a ordem de um ltro Chebyshev Tipo II . [N, Wn] = cheb2ord(Wp, Ws, Rp, Rs,s) Este comando retorna a ordem do ltro Chebyshev que tenha, no mximo, Rp dB de atenuao na banda de passagem e, no mnimo, Rs dB na banda de rejeio. W p and W s so as frequncias da banda de passagem e rejeio respectivamente. W deve ser dado em rad/sec. Exemplo: passa-baixa: Wp = x Ws = y

PET Tele))

UFF

A.3. Elptico (Cauer)

51

passa-alta: banda de passagem: banda de rejeio:

Wp = y Wp = [x1 x2] Wp = [y1 y2]

Ws = x Ws = [y1 y2] Ws = [x1 x2]

A frequncia retornada Wn a frequncia onde ocorre uma atenuao de 3 dB. CHEBY2 calcula os coecientes de um ltro Chebyshev Tipo II. [num,dem] = cheby2(N,R,s) Este comando retorna os coecientes do numerador (num) e denominador (dem) da funo de transferncia do ltro Chebyshev passa-baixa. N a ordem do ltro , R a atenuao mnima na banda de rejeio e Wn a freqncia de corte da banda de rejeio. Se Wn for um vetor contendo duas frequncias W n = [W1 W2 ] este comando retorna a funo de transferncia do ltro passa-banda Chebyshev de ordem 2N tendo banda de passagem com W 1 < W < W 2. [num,dem] = cheby2(N,R,Wn,high,s) calcula um ltro passa-alta. [num,dem] = cheby2(N,R,Wn,stop,s) calcula um ltro rejeita-banda, se W n = [W 1 W 2]. [Z,P,K] = cheby2(...) Retorna zeros, polos e ganho escalar K.

A.3

Elptico (Cauer)

ELLIPORD calcula a ordem de um ltro Elptico . [N, Wn] = buttord(Wp, Ws, Rp, Rs,s) Este comando retorna a ordem do ltro Elliptic que tenha, no mximo, Rp dB de atenuao na banda de passagem e, no mnimo, Rs dB na banda de rejeio. W p and W s so as frequncias da banda de passagem e rejeio respectivamente. W deve ser dado em rad/sec. Exemplo: passa-baixa: passa-alta: banda de passagem: banda de rejeio: Wp Wp Wp Wp = = = = x y [x1 x2] [y1 y2] Ws Ws Ws Ws = = = = y x [y1 y2] [x1 x2]

A frequncia retornada Wn a frequncia onde ocorre uma atenuao de 3 dB. ELLIP calcula os coecientes de um ltro Elptico. [num,dem] = ellip(N,Rp,Rs,Wn,s) Este comando retorna os coecientes do numerador (num) e denominador (dem) da funo de transferncia do ltro Elliptic passa-baixa. N a ordem do ltro, Wn a frequncia de corte, Rp dB de atenuao na banda de passagem e Rs dB na banda de rejeio. Se Wn for um vetor contendo duas frequncias W n = [W1 W2 ] este comando retorna a funo de transferncia do ltro passa-banda Elliptic de ordem 2N tendo Banda de passagem com W 1 < W < W 2.

UFF

PET Tele))

52

Apndice A. Funes relativas a aproximaes para ltros seletores em frequncia

[num,dem] = ellip(N,Rp,Rs,Wn,high,s) Calcula um ltro passa-alta. [num,dem] = ellip(N,Rp,Rs,Wn,stop,s) Calcula um ltro rejeita-banda, se W n = [W 1 W 2]. [Z,P,K] = ellip(...) Retorna zeros, polos e ganho escalar K.

PET Tele))

UFF