34

Ferramentas Matemáticas para Análise de Sinais Discretos ... · Análise de Sinais Discretos versão 1.0.0 Prof. Dr. Marcelo de Oliveira Rosa 29 de setembro de 2011. ... como ferramenta

Embed Size (px)

Citation preview

Ferramentas Matemáticas para

Análise de Sinais Discretos

versão 1.0.0

Prof. Dr. Marcelo de Oliveira Rosa

29 de setembro de 2011

Resumo

Este documento busca auxiliar os alunos de disciplinas que usem os programasMathworks Matlab e GNU Octave como ferramentas de resolução de exercíciosnuméricos como Sinais e Sistemas, Processamento Digital de Sinais, Análise deSinais Aleatórios e Identi�cação de Sistemas, entre outros.

A intenção é apresentar os fundamentos matemáticos que orientam as funci-onalidades desses softwares em conjunto com vários exercícios para que o alunocompreenda qual a melhor forma de resolver seus problemas através dessessoftwares.

Assume-se de antemão que o aluno não tem qualquer conhecimento dessasferramentas, mas tem o segundo grau completo, está fazendo graduação e saberudimentos de programação convencional.

Para este aluno: boa sorte!

Prof. Marcelo de Oliveira Rosa

i

Sumário

1 Introdução 1

1.1 Computação Numérica × Simbólica . . . . . . . . . . . . . . . . 1

2 Linha de Comando 3

2.1 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 HELP, I need somebody 5

4 Representação de Números 6

4.1 Escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64.1.1 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4.2 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.2.1 Acessando elementos . . . . . . . . . . . . . . . . . . . . . 94.2.2 Dimensões . . . . . . . . . . . . . . . . . . . . . . . . . . . 104.2.3 Reorganização . . . . . . . . . . . . . . . . . . . . . . . . 10

4.3 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104.3.1 Acessando elementos . . . . . . . . . . . . . . . . . . . . . 114.3.2 Dimensões . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.3.3 Reorganização . . . . . . . . . . . . . . . . . . . . . . . . 12

5 Números especiais 13

6 Operações Matemáticas 15

6.1 Aritmética e Álgebra Linear . . . . . . . . . . . . . . . . . . . . . 156.2 Operações elemento-a-elemento . . . . . . . . . . . . . . . . . . . 186.3 Números Complexos . . . . . . . . . . . . . . . . . . . . . . . . . 186.4 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

7 Textos e Grá�cos 20

7.1 Textos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207.2 Grá�cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

8 Programas 24

8.1 Novos operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . 248.2 Aplicações Úteis . . . . . . . . . . . . . . . . . . . . . . . . . . . 268.3 Análise de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . 268.4 Raízes de polinômios . . . . . . . . . . . . . . . . . . . . . . . . . 268.5 Operações com sistemas analógicos . . . . . . . . . . . . . . . . . 27

8.5.1 Resposta ao impulso . . . . . . . . . . . . . . . . . . . . . 27

ii

iii

8.5.2 Resposta ao degrau . . . . . . . . . . . . . . . . . . . . . . 288.5.3 Resposta em freqüência . . . . . . . . . . . . . . . . . . . 28

9 Conclusão 29

Capítulo 1

Introdução

Preliminarmente pensamos em desenvolver uma apostila genérica para apresen-tar o programa Mathworks Matlab. Uma rápida busca na internet revelou quevários professores e pesquisadores acabam desenvolvendo uma apostila para seuscursos. Ou seja, seria reescrever a roda mais uma vez.

Adicionalmente a própria fabricante (Mathworks) mantém em seu site o�-cial (www.mathworks.com) um grande número de documentos referentes a cadafunção do programa Matlab.

A justi�cativa para escrever esta apostila é apresentar não apenas o Matlabcomo ferramenta computacional para problemas de matemática numérica (não-simbólica), mas também softwares livres como GNU Octave (e outros a medidaque este projeto evolua).

Assim, este documento contemplará os aspectos matemáticos (ligados fun-damentalmente à algebra linear) das ferramentas, bem como o uso de exercíciospara permitir que alunos de graduação em engenharia (e outros interessados,mas fundamentalmente aqueles que jamais usaram tais ferramentas computaci-onais) possam descrever seus problemas na linguagem dessas ferramentas.

A possibilidade de apresentar tais ferramentas em conjunto se deve a simi-laridade entre suas linguagens matemáticas. Basicamente elas têm a mesmaraiz, que é a linguagem do Mathworks Matlab. As diferenças serão apontadasoportunamente no presente documento.

1.1 Computação Numérica × Simbólica

Os softwares voltados para computação matemática dividem-se em dois gran-des grupos: aqueles que realizam matemática numérica e aqueles que realizammatemática simbólica.

Matemática simbólica refere-se a à manipulação de símbolos, por meio deexpansões e reduções, de tal forma a obter uma expressão fechada, matemática,que represente a solução desejada. Um exemplo simples disso é o processo deintegração de uma função g(x) qualquer como:

f(x) =

ˆg(x)dx =

ˆex sen(x)dx (1.1)

1

2

onde a pode ser um valor ou apenas um símbolo representando um valorqualquer (como a ∈ R).

O processo de cálculo de f(x) é realizado simbolicamente, por regras bemde�nidas de substituição (como por exemplo, regra da cadeia aplicada sobreex sen(x) no integrando). Tais regras são obtidas a partir de conhecimento préviode operações matemáticas possíveis para uma determina situação simbólica.

Ao �nal do cálculo simbólico, teremos um resultado também simbólico

f(x) =ex[− cos(x) + sen(x)]

2(1.2)

Pode-se então aplicar qualquer valor a x para se conhecer a integral de g(x)(ou seja, f(x)) naquele ponto. Note que sempre buscamos uma solução fechadapara um problema quando usamos tais softwares. Pode-se resolver sistemas deequações lineares, equações diferenciais ordinárias, diferenciação, etc.

Wolfram Mathematica, Maplesoft Maple e PTC MathCad são exemplos desoftwares capacitados para computação simbólica; entretanto, eles não serãoobjeto de estudo neste documento.

Já os programas voltados à computação numérica usam uma série de algorit-mos matemáticos e�cientes voltadas à algebra linear sobre os quais se realizamoperações matemáticas. Para o caso de uma integração, não há como obteruma expressão matemática fechada para f(x). Deve-se então calcular, ponto aponto, o valor de f(x), realizando-se assim uma integração numérica através daregra de Simpson, por exemplo.

Enquanto a computação simbólica fornece uma expressão matemática deprecisão in�nita, a computação numérica produz uma aproximação do resultado.Tal aproximação é controlada a partir de parâmetros ligados aos algoritmos deresolução dos problemas (passo de integração na Regra de Simpson, erro deaproximação no método de Newton-Raphson, passo de integração no método deRunge-Kutta, etc).

Note que há um grande número de algoritmos para solução númerica de pro-blemas matemáticos distintos. Na computação simbólica não há tal diversidade,pois as regras de substituição simbólica não são controladas pelo usuário.

Capítulo 2

Linha de Comando

As ferramentas utilizadas são baseadas em comandos. Tais comandos são digita-dos em linhas de comando, que são executadas imediatamente pela ferramenta.Assim, a cada comando digitado, a ferramenta interpreta o que foi escrito eexecuta alguma ação, gerando um resultado (que pode ser apenas um retornopara que o usuário digite novos comandos.

Exemplos de comandos:

� a = 5

a =

5

� b = 4

b =

4

� teste

??? Undefined function or variable teste.

É frisar: as ferramentas fazem distinção entre maiúsculas e minúsculas(ou seja: Sin 6= sin). O mesmo é válido para variáveis (descritas na seqüência).

Note que a cada comando, a ferramenta emite uma resposta. Para os doisprimeiros comandos, a ferramenta indicou que as atribuições a = 5 e b = 4

foram efetivadas. No terceiro comando, a ferramenta não compreendeu o co-mando, indicando assim um erro.

A ferramenta possui um rol de comandos que ela compreende. São comandosinternos ou built-in. Caso digitemos um comando inexistente, a ferramentabusca em uma série de diretórios (con�guráveis) e o executa imediatamente.Caso ainda não o encontre, a ferramenta então emite uma mensagem adequadade erro.

Note que nas atribuições, a ferramenta emite um indicativo de sua ação.É possível impedir tal impressão. Isto é feito colocando-se um ponto-e-

virgula (;) ao �nal do comando, ou seja:

� a = 7;

� b = 9 ;

� teste;

3

4

??? Undefined function or variable teste.

Em caso de erro, mesmo com o ponto-e-vírgula, a ferramenta emite umamensagem condizente com o problema.

2.1 Exercícios

1. Digite os seguintes comandos e pondere os resultados obtidos:

(a) a = 10

(b) sin(a) + 10 * cos(3.1415)

(c) [pi/4 exp(1) abs(3+j)]

(d) exp(exp([0.1 0.01 0.001]))

Capítulo 3

HELP, I need somebody

Talvez o comando mais importante para qualquer usuário das ferramentas (ini-ciantes e experientes) seja o comando help. Digite na linha de comando:

� help

� help sin

� help filter

� help plot

A sintaxe do comando é help <comando desejado>. Geralmente estaremosinteressados em uma função matemática especí�ca (como as funções de Bessel)ou em conhecer como a ferramenta realiza determinada operação (como a re-solução de sistemas de equações lineares), e até em saber quais os parâmetrosnecessários de um procedimento interno (como os parâmetros para plotagemgrá�ca).

5

Capítulo 4

Representação de Números

É importante compreender como as ferramentas representam números, pois aforma que os representamos pode signi�car maior ou menor e�ciência na resolu-ção dos problemas. Lembre-se sempre que tais ferramentas possuem algoritmosespecializados para cálculos de álgebra linear. Assim, naturalmente lidaremoscomo escalares, vetores e matrizes.

Aproveitaremos para falar de variáveis. As ferramentas associam números asímbolos (variáveis) para facilitar a construção de algoritmos matemáticos parasolução de problemas. Tal associação é feita pelo símbolo =. Do lado esquerdoindicamos qual o símbolo (seqüência alfanumérica iniciada por uma letra, nãoconter alguns caracteres especiais em sua constituição, como ponto, vírgula, sím-bolo de igualdade, operadores matemáticos de soma, subtração, multiplicação edivisão, dentre outros).

Mais detalhes sobre a constituição de variáveis pode ser encontrada comhelp.

4.1 Escalares

Os escalares são números, que podem ser reais ou imaginários (formalmentex|x ∈ R ∧ x ∈ C). Na ferramenta, os números reais são simplesmente números,com ou sem o ponto decimal.

São exemplos de números escalares:

� 150

� 150.0001

� 0.0001

Além dos números reais, os números complexos são considerados escalares.Sintaticamente os números complexos são de�nidos por a ± bj ou a ± bi, ondei = j =

√−1 e a, b ∈ R. Em uma operação matemática dentro da ferramenta,

é possível intercambiar i e j sem problemas. De preferência, opte por umanotação, para evitar confusão.

Importante: observe que a parte imaginária é colocada antes de i (ou j).São exemplos de escalares complexos

6

7

� 10 + 5j

� 10 + j5

� - 3j

� 1.5 - 0.001j

Em termos de atribuições, podemos fazer múltiplas atribuições, com dife-rentes representações numéricas, a um mesmo símbolo/variável. A ferramentamanterá a associação da atribuição mais recente. Diferente de linguagens de pro-gramação convencionais (como C ou Pascal), as ferramentas não exigem préviade�nição de tipos para variáveis.

São exemplos de atribuições envolvendo escalares:

� a = 5 j

� a = 7

� b = 0

� b = 1.5 + 0.1j

Para conhecer qual o valor atualmente atribuído à uma variável, basta digitaro nome da variável sem o ponto-e-vírgula. Caso a ferramenta não conheça essavariável, trata-la-á como um comando externo e tentará executá-lo, como vimosanteriormente.

� a

� b

� c

� pi

Note que o valor de pi (π) é uma variável interna mantida pela ferramenta.É possível realizar operações matemáticas sem atribuir o resultado à uma

variável. Quando isso acontece, as ferramentas automaticamente atribuem o re-sultado à uma variável chamada ans (de �answer�). É possível usar o conteúdodessa variável em operações matemáticas, lembrando-se apenas que o seu con-teúdo pode ser sobre-escrito a qualquer momento por uma nova operação sematribuição.

� 7 + 8

� 3 + ans

� 10 * sin(3*pi + pi/5)

� 3 + ans

Note que a medida que criamos variáveis, podemos ter interesse em saberquais são mantidas pela ferramenta em um dado instante. Tal veri�cação éfeita pelos operadores who e whos. O primeiro operador fornece apenas a listade variáveis, enquanto que o segundo fornece, adicionalmente, dados sobre cadavariável.

� a = 7;

� b = pi;

8

� who

� c = 30;

� a = 0.1;

� whos

Adicionalmente, é possível descartar variáveis. A eliminação implica emque a ferramenta não reconhecerá mais aquele símbolo como um repositório denúmeros. Isso é feito pelo operador clear <variavel>, onde variavel indicaqual símbolo será removido do espaço de variáveis da ferramenta.

� a = 7;

� b = pi;

� whos

� clear b

� whos

� b = 2*pi;

� whos

� clear

� whos

Sem qualquer parâmetros, o operador clear elimina todas as variáveis doespaço de variáveis da ferramenta. Já o operador clear all, além de eliminartodas as variáveis, também reinicia de�nições de variáveis internas da ferra-menta (isso signi�ca que você pode rede�nir o valor de π, por exemplo). Cadaferramenta eliminar mais ou menos informações (certamente as variáveis serãoeliminadas); cabe então uma olhada em help clear para maiores detalhes.

4.1.1 Exercícios

1. Digite os seguintes comandos e pondere os resultados obtidos:

(a) 10

(b) 10.0

(c) pi

(d) 0.0001 + 1000j

2. Efetue as seguintes atribuições à variáveis. Tente posteriormente:

(a) a = 10

(b) b = 7.0j

(c) largura_casa = 0.01

4.2 Vetores

Como falamos anteriormente, as ferramentas contem algoritmos especializadospara operações de álgebra linear. Dessa forma, é necessário representar vetores(e, conseqüentemente, matrizes) a partir da linha de comando. Lembrando

9

apenas que um vetor pode ser do tipo linha ou do tipo coluna. Tal diferenciaçãopode ser feita no momento de sua construção.

O vetor é construído usando-se uma seqüência de escalares (reais ou comple-xos) separados por espaço em branco ou por ponto-e-vírgula, e que estão entredois colchetes ([ ]). O uso de espaço em branco ou ponto-e-vírgula de�ne se ovetor será do tipo linha ou do tipo coluna.

São vetores do tipo linha:

� a = [ 10 5 2 3 8]

� b = [ 5 + 12j 3 4j 10 - 7j ]

Note que a ferramenta compreende a diferença entre espaços entre escalares eespaços internos relativos aos escalares complexos. Para facilitar a visualização,podemos escrever valores escalares complexos entre chaves.

São vetores do tipo coluna:

� a = [ 1 ; 3; 2 ;4]

� b = [ +1; -1; +j; -j]

Tanto os espaços, quanto os ponto-e-vírgulas, permitem concatenação devetores, gerando vetores maiores. Com base na orientação dos vetores, podemosestendê-los conforme nossas necessidades. Veja os exemplos abaixo:

� a = [1 2 3 4]

� a = [a a a a]

� b = [1; 2+j]

� b = [b; b; b]

4.2.1 Acessando elementos

Podemos acessar um elemento do vetor pela notação vetor(posição), ondeposição é um valor inteiro entre 1 e o tamanho do vetor, inclusive (veja comoobter o tamanho de um vetor no Capítulo 5). Este é um ponto importantea respeito de vetores (e matrizes): o índice do primeiro elemento de um vetoré sempre �1�. A ferramenta emite mensagem de erro em qualquer tentativa deacesso a um elemento cujo índice extrapole o intervalo fechado [1, N ] onde N éo tamanho do vetor.

� a = [1 2 3 4]

� a = [a a a a]

� a(1)

� a(16)

� a(20)

� a(0)

O parâmetro posição pode ser um vetor de índices (desde que seus elementos∈ [1, N ]). Assim, podemos ter um vetor de índices para acessar elementos deum vetor de interesse. No caso, o retorno será não mais um escalar mas outrovetor, contendo apenas aqueles elementos de interesse.

10

� a = [9 8 7 6 5 4 3 2 1]

� indices = [2 4 9 8]

� a(indices)

� indices = [0 1 10 7]

� a(indices)

4.2.2 Dimensões

As ferramentas possuem dois operadores para determinar as dimensões de umvetor. O operador size() retorna um vetor contendo as dimensões do vetor(um dos valores será sempre 1).

Outro operador (length()) retorna um escalar contendo a quantidade deelementos do vetor.

Ambos os operadores são aplicados sobre números ou sobre variáveis.

� a = [1 2 3 ones(1, 3) zeros(1, 3)]

� size(a)

� length(a)

� a = [1 j 2+j 3 -j]

� size(a)

� length(a)

4.2.3 Reorganização

É possível reorganizar os elementos dentro de um vetor. Uma das reorganizaçõesmais comuns é a operação de transposição de vetores. Isso é feito através dooperador ', que é aplicado após o vetor (ou a variável que o contém).

� a = [1 2 3 4 5 6]

� size(a)

� a'

� size(a')

� a = [1+j; 1-j; 1; -1]

� size(a)

� a'

4.3 Matrizes

Finalmente, temos as de�nições de matrizes. Este arranjo bidimensional devalores escalares (reais ou complexos) é construído expandindo o conceito deseparação de escalares com espaços e ponto-e-vírgula. Basicamente de�niremosum conjunto de linhas separadas por ponto-e-vírgula, e dentro dessas linhassepararemos os escalares com espaços.

São matrizes:

� a = [ 1 2 3; 4 5 6; 7 8 9 ]

� b = [ j 0; 0 -j]

� c = [ 1 2 ; 3 4 5 ; 6 7 8 9 ]

11

Na de�nição de matrizes, é importante que o número de escalares entre osponto-e-vírgula sejam iguais; caso contrário a ferramenta apresentará indicativode erro.

No �nal, percebemos que as ferramentas efetivamente lidam com matrizes deescalares, sendo vetores e escalares variações de matrizes quanto a sua de�nição.

Podemos construir matrizes a partir de vetores, de modo análogo à expansãode vetores feitas na seção anterior.

� a = [ 1 2 3 ]

� a = [a ; a ; a]

� b = [ 1 2 3 ]

� b = [ b b b ]

Analogamente, pode-se concatenar matrizes para aumento do tamanho dasmatrizes. Em álgebra linear as matrizes que compõem a matriz maior sãochamadas de sub-matrizes.

� a = [1 2; 3 4; 5 6]

� a = [a a; a a]

É importante que exista coerência entre as sub-matrizes durante a concate-nação, pois as ferramentas emitem mensagem de erro em caso de discrepânciaentre número de linhas e colunas das sub-matrizes.

4.3.1 Acessando elementos

Podemos acessar um elemento da matriz pela notação matriz(linha, coluna),onde linha é um valor inteiro entre 1 e o número de linhas da matriz, inclusive(veja como obter o tamanho de uma matriz no Capítulo 5) e coluna é um valorinteiro entre 1 e o número de colunas da matriz.

Caso usemos matriz(índice) (onde índice é um valor inteiro entre 1 e onúmero total de elementos da matriz, inclusive), a ferramenta considerará quea matriz como um grande vetor, formado pela �concatenação� de todas as suascolunas, e então fornecerá o elemento desejado.

� a = [1 2 3; 4 5 6; 7 8 9]

� a(1)

� a(10)

� a(1,1)

� a(2,2)

� a(3,5)

O parâmetro índice pode ser uma matriz de índices (desde que seus elemen-tos ∈ [1, N ]). Assim, podemos ter uma matriz de índices para acessar elementosde uma matriz de interesse. No caso, o retorno será não mais um escalar masoutra matriz, contendo apenas aqueles elementos de interesse.

� a = [1 2 3; 4 5 6; 7 8 9]

� indices = [1 2; 3 4]

12

� a(indices)

� linhas = [1 1; 3 2]

� colunas = [1 3; 1 2]

� a(linhas, colunas)

4.3.2 Dimensões

As ferramentas possuem dois operadores para determinar as dimensões de umamatriz. O operador size() retorna um vetor contendo as dimensões da matriz.

Outro operador (length()) retorna um escalar contendo a quantidade deelementos da matriz.

Ambos os operadores são aplicados sobre números ou sobre variáveis.

� a = [1 2 3; ones(1, 3); zeros(1, 3)]

� size(a)

� length(a)

� a = [1 j; 2+j 3-j]

� size(a)

� length(a)

4.3.3 Reorganização

É possível reorganizar os elementos dentro de uma matriz. Uma das reorganiza-ções mais comuns é a operação de transposição de matrizes. Isso é feito atravésdo operador �'�, que é aplicado após a matriz (ou a variável que a contém).

� a = [1 2 3; 4 5 6]

� size(a)

� a'

� size(a')

� a = [1+j 2 3-j; 4 j 6]

� a'

Note que para matrizes contendo escalares complexos, o operador aspas-simples sobre tal matriz produz a matriz conjugada transposta. Para se obterapenas a matriz transposta (mesmo para matrizes escalares complexas), usamoso operador �.'�.

� a = [1+j 2 3-j; 4 j 6]

� a'

� a.'

Capítulo 5

Números especiais

As ferramentas dispõem de um conjunto adicional de variáveis e operações paragerar vetores e matrizes de modo e�ciente. As operações zeros() e ones()

criam vetores/matrizes com escalares zeros e uns, respectivamente.

� a = ones(3)

� b = ones(1, 5)

� c = zeros(7)

� d = zeros(5, 1)

Além de vetores apenas com escalares zeros ou uns, é possível construirvetores seqüenciais (reais) através do operador �:�. Sua sintaxe é �a:b:c� eque representa o vetor [a, a+ b, a+ 2b, a+ 3b, . . . c]. Note que c pode nunca serdescrito caso a+ (n− 1)b < c < a+ nb, mas serve como limite para geração dovetor.

Caso opte-se por �a:c�, as ferramentas implicitamente assumem que b = 1.

� a = 1:1000

� b = 10:10:101

� c = 0:0.01:1

� d = 10:-1:0

� e = 10:1:0

Note que as ferramentas podem retornar vetores nulos, caso as condiçõesiniciais, de passo e �nais na de�nição do operator �:� induzam à não-geraçãode qualquer elemento.

Considerando esses vetores sequenciais, podemos usá-los para acessar umbloco contínuo de vetores ou matrizes (conforme visto nas Seções 4.2.1 e 4.3.1).

� a = [ones(1, 10) zeros(1, 10) ones(1,10)];

� a(12:2:24)

� a(:)

� a = [1 2 3 4; 5 6 7 8; 9 10 11 12]

� a(2, :)

� a(:, 1:2)

13

14

Para o acesso a valores de vetores e matrizes, é possível usar o operadordois-pontos sozinho para indicar todos os elementos do vetor, e de uma linhaou coluna de uma matriz.

Com o emprego do operador �:�, podemos fazer atribuições alterando por-ções internas de um vetor. Exige-se apenas que a dimensão do sub-vetor dolado esquerdo da atribuição seja igual à dimensão do sub-vetor do lado direitoda atribuição.

� a = [ones(1, 10) zeros(1, 10) ones(1,10)]

� b = 1:30;

� a(5:2:15) = b(7:3:22);

� a

Capítulo 6

Operações Matemáticas

Existe um grande número de operações matemáticas que as ferramentas podemdesempenhar. Focaremos nas principais, relacionadas com os tipos de núme-ros disponíveis. Operações especializadas podem ser consultadas através docomando help da ferramenta (veja Capítulo 3.

6.1 Aritmética e Álgebra Linear

As principais operações matemáticas realizadas sobre números (escalares, ve-tores ou matrizes) são �+�, �-�, �*�, �\� e �^�. Além dessas temos as opera-ções elemento-a-elemento, que são �.+�, �.-�, �.*�, �.\� e �.^� (as operaçõeselemento-a-elemento têm função distintiva ligada a vetores e matrizes).

As ferramentas adotam as regras da aritmética e álgebra linear para resolu-ção das operações envolvendo os diferentes tipos de números (incluindo prece-dência de operações).

Quando lidamos com escalares (reais ou complexos), as operações ponto-a-ponto agem do mesmo modo que suas equivalentes (sem o ponto), ou seja:

� a = 0.1

� b = 10 + a * j

� a + b

� (a + pi) ^ 2

A soma (ou subtração) entre escalar e vetor/matriz foge um pouco das re-gras conhecidas, sendo análoga a multiplicação entre escalar e vetor/matriz:adiciona-se (ou subtrai-se) o escalar a todos os elementos do vetor/matriz.

� a = [1 2 3]

� b = [4 5; 6 7; 8 9]

� pi + a

� a + pi

� j + b

� b + (-j)

15

16

Para vetores e matrizes, as regras de álgebra linear são válidas. Para somae subtração de vetores e matrizes, o número de elemento e o números delinhas e colunas, respectivamente, deve ser igual para dois vetores ou matrizesque sejam somados ou subtraídos.

� a = [1 2 3]

� b = [2 3 4]

� a + b

� a - b

� c = [2 4 5 6]

� a + b - c

� a = [1 2; 3 4; 5 6]

� b = ones(2, 3);

� a + b

A multiplicação entre escalares e vetores/matrizes é direta, sem qualquerrestrição de tamanho.

� a = [1 2 3]

� b = [4; 5; 6]

� pi * a

� a * pi

� j * b

� b * (-j)

Para a multiplicação entre matrizes, temos as seguintes regras (paravetores, basta considerar que um dos tamanhos da matriz é unitário):

• Dado duas matrizes a e b, respectivamente de tamanhos a ×m e b × n,então c = a′ ∗ b é uma matriz de tamanho m× n;

• Dado duas matrizes a e b, respectivamente de tamanhos a ×m e b × n,então c = a ∗ b′ produzirá erro nas ferramentas;

• Dado duas matrizes a e b, respectivamente de tamanhos a ×m e b × n,então c = a ∗ b produzirá erro nas ferramentas;

• Dado duas matrizes a e b, respectivamente de tamanhos a ×m e a × n,então c = a′ ∗ b é uma matriz de tamanho m× n;

• Dado duas matrizes a e b, respectivamente de tamanhos a ×m e b ×m,então c = a ∗ b′ é uma matriz de tamanho a× b;

� a = [1 2 3]

� b = [2 3 4]

� c = [4; 5; 6]

� a * b

� a * c

� a * b'

� b * a

� b * c'

� c * b

17

Existem dois operadores para divisão: �\� e �/�. Devemos entender divisãodo ponto de vista da multiplicação entre um número e o inverso de outro número.O cálculo efetivo realizado pela ferramenta é:

• �\�: a\b = inv(a) ∗ b

• �/�: a/b = a ∗ inv(b)

A diferença reside no modo como os resultados de divisão são efetivados.Por exemplo, no caso de a\b, ao invés de calcular a matriz inversa de a, asferramentas calculam ax = b (pois x = b\a) de modo a obter e�ciência viaalgoritmos de resolução de sistemas de equações lineares (métodos diretos ouiterativos, que atingem complexidade O(n2)) ao invés de inversão de matriz(cuja e�ciência é O(n3)).

� a = [1 2 3]

� b = [4; 5; 6]

� (pi) \ a

� (pi) / a

� a / pi

� j \ b

� b / (-j)

Para vetores e matrizes, tais regras são as mesmas. Cabe ressaltar umapeculiaridade: caso o sistema linear que representa a matriz a de um problemado tipo ax = b⇔ x = b\a for superdimensionada, as ferramentas determinarãox através de algoritmos de mínimos quadrados, pois o resultado será aquele queminimiza |Ax− b|.

� a = [1 2 3; 4 5 6; 7 8 9]

� a_falha = [1 2 3; 1 2 3; 7 8 9]

� b = [1 0 1]

� a \ b

� b / a

� a_falha \ b

� b / a_falha

As operações de exponenciação são realizadas normalmente sobre escalares.Para matrizes, deve-se considerar que a exponenciação é um conjunto de pro-dutos envolvendo uma matriz. Logo, as regras de multiplicação de matrizes sãoaplicadas no processo de exponenciação. Conseqüentemente, não há exponen-ciação para vetores.

� a = [1 2 3; 4 5 6; 7 8 9]

� a^2

� a * a

� a^8

� a^(-2)

18

6.2 Operações elemento-a-elemento

As operações elemento-a-elemento (�.+�, �.-�, �.*�, �.\� e �.^�) são realizadassobre qualquer tipo de número dentro das ferramentas; entretanto sua operaçãoé peculiar quando aplicadas sobre vetores e matrizes.

Considerando duas matrizes (pode ser reduzido para vetores) a e b demesma dimensão, podemos realizar operações elemento-a-elemento, ou seja,c = a .op b representa ci,j = ai,j op bi,j .

� a = [1 2 3; 4 5 6; 7 8 9]

� b = [9 8 7; 6 5 4; 3 2 1]

� c = 1:10

� d = j * ones(1, 10)

� a .+ b

� a .+ c

� b .+ a

� a ./ b

� c .* d

� d .^ c

6.3 Números Complexos

Para os números complexos, existem operações que ajudam a determinar aparte real, imaginária, sua magnitude e fase. Isso é feito respectivamente pelasoperações real(), imag(), abs() e angle(). O ângulo obtido é em radianos.

� a = 1 + 2j

� real(a)

� imag(a)

� abs(a)

� angle(a)

Além disso, tais operações podem ser naturalmente aplicadas a vetores ematrizes, retornando respectivamente vetores e matrizes.

6.4 Funções

Além de operações aritméticas e de álgebra linear, as ferramentas possuem umconjunto de funções que podem ser aplicadas aos números. Diferente de lingua-gens de programação, as funções podem ser aplicadas a vetores e matrizes, e emmuitos casos, retornam vetores e matrizes. Citaremos apenas algumas funçõesmatemáticas que podem ser usadas.

As funções sin(), cos() e tan() retornam, respectivamente, o valor do seno,cosseno e tangente de um número (considerando esse número em radianos).Quando aplicado sobre vetores ou matrizes, as ferramentas aplicam a funçãoelemento-a-elemento, produzindo vetores ou matrizes, respectivamente.

19

� a = 0:0.01:2

� sin(2*pi*a)

� (sin(a))^2 + (cos(a))^2

� tan(pi*a/2)

De modo similar às funções senoidais, as ferramentas possuem duas funçõesúteis para lidarmos com sinais periódicos. São elas square() e sawtooth(),respectivamente gerando funções quadradas e triangulares periódicas.

Ambas possuem período igual a 2π (como as trigonométricas). Sua utilidadeé ligada à representação de ondas quadradas e triangulares como excitação desistemas.

� a = 0:0.01:2

� square(2*pi*a)

� sawtooth(2*pi*a)

A exponencial (exp()), logaritmo neperiano (log()) e logaritmo de base 10(log10()) também são aplicados elemento-a-elemento sobre números.

� a = 0:0.01:1

� exp(a)

� log(a)

� exp(j*a)

Lembre-se que existem funções que retornam números de tamanho �xo (comosize() e length()).

Capítulo 7

Textos e Grá�cos

Algumas vezes torna-se interessante produzir textos formatados ou grá�cos paramelhor visualização dos resultados dos cálculos realizados nas ferramentas. Atéagora, os resultados foram apresentados explorando-se diretamente a interfacede linha de comandos com o uso ou supressão de �;� ao �nal dos comandos.

7.1 Textos

As ferramentas possuem um tipo para armazenar textos (�strings�, distinto dosnúmeros. Esse tipo permite armazenar sequências de caracteres para posteriorimpressão, por exemplo. Um texto é de�nido por uma seqüência de caracteresisolada por aspas simples (�'�).

� a = 'texto que defini'

� size(a)

� length(a)

� b = 'outro texto'

� size(b)

� length(b)

� c = [a b]

� d = [a'; b']

� a + b

A grosso modo, um texto é um vetor-linha de caracteres. Assim, a concate-nação de texto segue as regras da concatenação de vetores-linha.

A formatação de texto é feita pelo operador sprintf(). Similar à linguagemC, esse operador usa uma string de texto contendo a formatação desejada, se-guido de valores ou variáveis (de texto ou de números) para montagem do textoformatado; ou seja: sprintf('formato', valor1, valor2, ...). Lembre-se:'formato' é um texto, e pode ser substituído por uma variável de texto.

Devido ao grande número de possibilidades, apenas alguns exemplos serãomostrados a seguir. Sugere-se acessar help sprintf para maiores detalhes.

� sprintf('valor de pi = %d', pi)

� sprintf('seno de %f = %f\n', [0 pi/2 pi], sin([0 pi/2 pi]))

20

21

� formatacao = 'arco-tangente de %f = %f\n';

� sprintf(formatacao, 4*pi, atan(4*pi))

Uma vez que o texto tenha sido formatado (pode até ser armazenado em umavariável), é possível apresentar o texto na linha de comando usando o operadordisp(). A ferramenta não acrescenta espaços ou quebras de linha como quandose deseja ver uma variável (sem o ponto-e-vírgula no �nal da linha). O objetivodesse operador é organizar a saída de resultados.

� disp(sprintf('valor de pi = %d', pi));

� a = [1 2 3; 4 5 6; 7 8 9];

� disp(a);

� formatacao = 'arco-tangente de %f = %f\n';

� resultado = sprintf(formatacao, 4*pi, atan(4*pi));

� disp(resultado);

7.2 Grá�cos

As ferramentas dispõem de alguns comandos para representação grá�ca dosresultados. Geralmente aplicamos esses comandos em vetores ou matrizes (con-siderando as matrizes como um conjunto de vetores).

A operação básica para representar gra�camente um conjunto de dados (umvetor) é plot(). Uma vez executado, mostrará uma janela contendo uma curvarepresentativa dos dados (vetor). Esta curva é otimizada para que toda elaapareça nessa janela criada.

� tempo = 0:0.01:10;

� senoide = sin(2*pi*tempo);

� plot(tempo, senoide, 'r');

Algumas das possíveis sintaxes para esse comando são:

• plot(y)

• plot(x1, y1, ..., xn, yn)

• plot(x1, y1, tipo_linha1, ..., xn, yn, tipo_linhan)

O tipo da linha de�ne qual a cor, o tipo do tracejamento aplicado e quais ossímbolos usados para marcação de pontos especí�cos da curva. Note que pode-mos traçar múltiplas curvas com um mesmo comando. É interessante executarhelp plot para avaliar outras possibilidades com esse operador.

O processo de plotagem das curvas obedece a seqüência de pontos de�nidaspor {x1(i), y1(i)}. Logo, as dimensões de x1 e y1 devem ser iguais, assim comoxn e yn. Entretanto, não há restrições para tamanhos diferentes entre x1 e xn.

� x1 = [0 1 2 3 9 8 7 6];

� y1 = [3 2 1 0 3 2 1 0];

� x2 = [0 0 10 10];

� y2 = [0 10 10 0];

� plot(x1, y1, 'r', x2, y2, 'b');

22

Toda vez que executamos um comando plot(), a janela atual de plotagemé sobre-escrita. Para que possamos incluir mais curvas em uma janela de grá�cosatual, podemos usar o operador hold. Esse operador �xa as curvas atualmenteplotadas, permitindo que novas curvas sejam adicionadas na mesma janela.

• hold on: �xa janela de grá�cos atual;

• hold off: libera janela de grá�cos atual;

• hold: alterna entre �xação e liberação da janela de grá�cos atual;

� tempo = 0:0.01:10;

� senoide = sin(2*pi*tempo);

� cossenoide = cos(2*pi*tempo);

� triangular = sawtooth(2*pi*tempo);

� plot(tempo, senoide, 'r');

� hold on;

� plot(tempo, cossenoide, 'b');

� plot(tempo, triangular, 'k');

� hold off;

O operador clf permite a janela de grá�cos atual seja limpa.Note que temos falado em janela atual nos parágrafos anteriores. Entre-

tanto, todos os operadores plot() sobre-escreve apenas uma única janela. Paracriar outra janela de grá�cos, tornando esta a janela atual, as ferramentas dis-ponibilizam o operador figure. Toda vez que é executado, uma nova janela(vazia) é criada, e todas as operações grá�cas são direcionadas a ela.

� tempo = 0:0.01:10;

� senoide = sin(2*pi*tempo);

� cossenoide = cos(2*pi*tempo);

� triangular = sawtooth(2*pi*tempo);

� plot(tempo, senoide, 'r');

� figure;

� plot(tempo, cossenoide, 'b');

� figure;

� plot(tempo, triangular, 'k');

Os operadores plot() e figure possuem valores de retorno. Recomenda-seuma olhada no help das ferramentas para maiores detalhes sobre o uso do valorde retorno desses operadores.

Alguns operadores permitem a inclusão de textos nas janelas de grá�cos,como título e textos referentes à abscissa e à ordenada. São eles, respectiva-mente, title(), xlabel() e ylabel(). O parâmetros de todos eles é um texto(que pode ser formatado pelo operador sprintf(), se desejado).

� tempo = 0:0.01:10;

� senoide = sin(2*pi*tempo);

� triangular = sawtooth(2*pi*tempo);

� figure;

23

� plot(tempo, senoide, 'r');

� hold on;

� plot(tempo, triangular, 'k');

� hold off;

� title('Gráficos');

� xlabel('tempo (s)');

� ylabel('amplitude');

Um detalhe importante: note que os grá�cos produzidos para funções trigo-nométricas (usadas como exemplo) não é suave, mas quebradiço. Isso porque opasso entre amostras da curva não é contínuo, mas sim, discreto. Isso enfatiza adiferença entre ferramentas de computação numérica (caso presente) das ferra-mentas de computação simbólica. No exemplo anterior, um aumento no passo(de 0,01 para 0,001) melhoraria a resolução das funções senóide e triangular.

Outra opção interessante para apresentação de resultados é o operadorsubplot(). Ele permite que múltiplos grá�cos sejam colocados em uma mesmajanela, além de de�nir qual área da janela será atualizada. Tal área é de�nidapelo parâmetro do operador.

� tempo = 0:0.01:10;

� senoide = sin(2*pi*tempo);

� cossenoide = cos(2*pi*tempo);

� triangular = sawtooth(2*pi*tempo);

� quadrada = square(2*pi*tempo);

� figure;

� subplot(2, 2, 1); plot(tempo, senoide);

� title('Seno'); xlabel('tempo (s)'); ylabel('amplitude');

� subplot(2, 2, 2); plot(tempo, cossenoide);

� title('Cosseno'); xlabel('tempo (s)'); ylabel('amplitude');

� subplot(2, 2, 3); plot(tempo, triangular);

� title('Triangular'); xlabel('tempo (s)'); ylabel('amplitude');

� subplot(2, 2, 4); plot(tempo, quadrada);

� title('Quadrada'); xlabel('tempo (s)'); ylabel('amplitude');

Uma variação do operador plot é o operador stem. Seu uso está ligado aseqüências (ou sinais discretos no tempo). Usa praticamente (ou seja, nãotodos) os mesmo parâmetros de plot. A idéia é caracterizar as seqüências comovalores tomados a instantes (variável independente) inteiros.

� instante = 0:2:40;

� senoide = sin((pi/8)*instante);

� stem(instante, senoide);

Basicamente, cada amostra é caracterizada por uma linha vertical (partindodo eixo das abscissas) com altura igual ao valor da amostra, e um símbolo grá�co(geralmente um círculo) no topo dessa linha vertical.

Capítulo 8

Programas

É possível armazenar todos os operadores digitados na linha de comandos em ar-quivos de texto e solicitar que as ferramentas executem essa lista de operadores,como se fossem digitados na linha de comando, um a um.

Efetivamente tais arquivos funcionam como lista de comandos (popular-mente conhecidos como batch �les), cujas linhas são executadas sequencial-mente.

Esses arquivos geralmente possuem extensão especí�ca e dependente da fer-ramenta. Devido a popularidade da ferramenta Mathworks Matlab, a extensãogeralmente adotada é .m, e deve ser gravado no diretório corrente usado pela fer-ramenta, ou em algum dos diretórios referenciados para busca pela ferramenta(para trocar de diretório corrente, basta usar o operador cd <caminho>).

grafico.minstante = 0:2:40;

senoide = sin((pi/8)*instante);

stem(instante, senoide);

Após salvar o arquivo no diretório corrente (como grafico.m), basta digitargrafico (sem a extensão) que a ferramenta efetuará a busca desse operador eo executará.

� grafico

Em caso de erro, a ferramenta apontará o nome do operador defeituoso, bemcomo a linha onde o problema ocorreu e um explicativo sucinto para facilitarsua correção.

grafico_defeito.minstante = 0:2:40;

senoide = sin((pix/8)*instante);

stemm(instante, senoide);

8.1 Novos operadores

Apesar de existir uma gama enorme de operadores matemáticos, as ferramen-tas nunca serão completas. A expansão da capacidade das ferramentas é feitaatravés do operador function. Especi�camente a de�nição desse operador é:

24

25

function [saida1, ...] = nome_funcao(entrada1, ...)

onde:

• saida1 é o nome do primeiro parâmetro (ou variável) de saída que rece-berá;

• nome_funcao é o nome da função (cujo arquivo onde está gravada tem onome nome_funcao.m;

• entrada1 é o nome do primeiro parâmetro (ou variável) de entrada dafunção.

Naturalmente pode-se ter de zero a N parâmetros de entrada, e de zero aM parâmetros de saída.

funcao_a.m[a, b] = funcao_a

a = 3

b = 4

Note que a função funcao_a não possui parâmetros de entrada, mas possui2 parâmetros de saída. Ao �nal da execução do programa contido na função,o valor mais atual de a e b é repassado para o elemento chamador da função(outra função, um programa, ou linha de comando).

� a = 0

� [a, b] = funcao_a

Note que não é necessário fazer atribuição prévia dos parâmetros de saída(o mesmo vale para os parâmetros de entrada) quando se chama uma função. Aferramenta faz a iniciação (sempre com escalar zero) para as parâmetros usadasnas funções.

stat.mfunction [media, desvio] = stat(x)

n = length(x);

media = sum(x)/n;

desvio = sqrt(sum((x-mean).^2/n));

Como em linguagens de programação convencionais, há o conceito de variávellocal. No caso da função stat, a variável n é local, que signi�ca que ela temseu conteúdo visível apenas pela função que a criou. Não há como acessá-la emoutro nível ou escopo (linha de comando ou programa chamador). A ferramentaproduzirá erro (se não conhecê-la no nível do chamador, ou acessará o conteúdode uma variável que tenha o mesmo nome.

� [mean, stdev] = stat([12.7 45.4 98.9 26.6 53/1])

� [mean] = stat([0 1 2])

� [mean, stdev] = stat

Qual a diferença entre um programa e uma função, do ponto de vista daferramenta? Uma delas seria o isolamento das variáveis locais, reduzindo onúmero de variáveis globais mantidas pela ferramenta (basicamente evita quenós, usuários, façamos confusão... a ferramenta não faz confusão, pois suas açõessão determinísticas).

26

8.2 Aplicações Úteis

Nesta seção, serão apresentados alguns problemas encontrados em disciplinascomo Sinais e Sistemas, Controle e Processamento Digital de Sinais, juntamentecom uma listagem de operações usando as ferramentas de computação numérica.

O objetivo é apresentar tais operações sem um aprofundamento no problemae/ou na teoria adjacente ao mesmo.

8.3 Análise de Fourier

Para analisar um sinal, devemos primeiramente classi�cá-lo em periódico ou não.Sinais periódicos são passíveis de análise espectral através da Série de Fourier.Já sinais não periódicos podem ser analisados, estritamente falando, atravésda Transformada de Fourier (caso seja considerado funções generalizadas a TFtambém se aplica a sinais periódicos).

Existem duas funções para o cálculo da SF ou TF para um sinal: fft efftshift. Em ambos os casos, o cálculo da SF e TF corresponde à divisão doresultado de fft (ou fftshift) pelo tamanho do trecho sinal análisado. Taisoperadores calculam a Transformada Rápida de Fourier, que é apenas um pro-cedimento e�ciente de cálculo da Transformada Discreta de Fourier (ou DFT).

Considere um sinal x[n]. Sendo periódico (T0) e selecionando um trecho decomprimento N , sua SF será:

tempo = 0:0.01:4;

trecho_do_sinal = sin(2*pi*tempo);

tam_do_trecho = length(trecho_do_sinal);

fft_do_sinal = fft(trecho_do_sinal)/tam_do_trecho;

Cabe uma olhada em help para compreensão das nuanças desses operado-res. O operador fftshift é uma versão transladada em freqüência de fft.Enquanto o nível DC é apresentado na amostra zero de fft, o mesmo nível DCé apresentado na amostra N/2 em fftshift.

fftshift é útil pelo seu caráter didático.De modo análogo, fft e fftshift, que calculam a Transformada Inversa

Discreta de Fourier (IDFT), podem ser empregadas para o cálculo da inversada SF e TF.

Devemos nos reportar sempre à teoria para compreender corretamente osefeitos produzidos pela incorporação de zeros na representação de sinais não-periódicos, os efeitos da periodicidade nos coe�cientes obtidos tanto para SFquanto para FT usando a DFT.

8.4 Raízes de polinômios

Em várias ocasiões será necessário calcular as raízes de polinômios, que aparecemna determinação dos autovalores associados a uma equação características deuma EDO, ou na determinação dos pólos e zeros de uma função de transferência.

Para isso podemos usar o operador roots, a partir de um vetor de coe�cientesdo polinômio. Para um polinomio de n-ésima ordem em x, por exemplo, o

27

coe�ciente associado à xN é o primeiro elemento do vetor, seguido dos demaiscoe�cientes, até o coe�ciente associado à x0, que é o último elemento do vetor.

polinomio = [1 2 3];

raizes = roots(polinomio)

polinomio = [2 0 0];

raizes = roots(polinomio)

polinomio = [1 5];

raizes = roots(polinomio)

Pode-se obter o polinômio a partir de suas raízes usando o operador poly. Aferramenta de computação numérica usa os princípios de álgebra para comporo polinômio a partir do produto dos fatores (x− rn) onde rn é a n-ésima raíz.

8.5 Operações com sistemas analógicos

Algumas ferramentas de computação numérica são capazes de representar umsistema a partir de uma estrutura denominada objeto. Para o caso de sistemas,o operador tf constroi um objeto representativo de um sistema a partir da razãode dois polinômios em s (variável da transformada de Laplace).

sistema_1 = tf([1], [1 5 6])

sistema_2 = tf([1], [1 2 3])

Podemos ver (sem o ponto-e-vírgula ao �nal das declarações) que sistema_1e sistema_2 são objetos. A eles podem ser aplicadas operações algébricas sobrerazão de polinômios, produzindos outros racionais polinomiais.

sistema_1 + sistema_2

sistema_1 * sistema_2

sistema_1 ^ 2

8.5.1 Resposta ao impulso

A partir de um objeto sistema, é possível determinar sua resposta ao impulsorapidamente, através do operador impulse.

impulse(sistema_1)

impulse(sistema_2)

[resposta_impulso_1] = impulse(sistema_1);

[resposta_impulso_2, tempo_2] = impulse(sistema_2);

Existem parâmetros adicionais para que se calcule a resposta ao impulso parainstantes de tempo especí�cos. Note que quando não especi�camos uma variávelpara receber o resultado dessa operação, a ferramenta geralmente apresenta uma�gura (figure) contendo a representação grá�ca de tal resposta ao impulso.

28

8.5.2 Resposta ao degrau

A partir de um objeto sistema, é possível determinar sua resposta ao degrau ra-pidamente, através do operador step. O seu uso é similar ao operador impulse.

step(sistema_1)

step(sistema_2)

[resposta_impulso_1] = step(sistema_1);

[resposta_impulso_2, tempo_2] = step(sistema_2);

Existem parâmetros adicionais para que se calcule a resposta ao degrau parainstantes de tempo especí�cos. Note que quando não especi�camos uma variávelpara receber o resultado dessa operação, a ferramenta geralmente apresenta uma�gura (figure) contendo a representação grá�ca de tal resposta ao degrau.

8.5.3 Resposta em freqüência

A resposta em freqüência de um sistema (cujos coe�cientes estão descritos peloseu objeto) pode ser obtida a partir de uma varredura em freqüência. Isso éfeito através do operador bode.

bode(sistema_1)

bode(sistema_2)

[mag_1, fase_1] = bode(sistema_1);

[mag_2, fase_2] = bode(sistema_2);

bode(sistema_1, sistema_2);

Quando não especi�camos uma variável para receber o resultado da opera-ção, o operador apresenta a magnitude (em dB) e a fase (em graus). O últimocaso mostra que as respostas em freqüência de vários sistemas podem ser apre-sentadas em um único grá�co (com parametrização equivalente ao operadorplot)

No caso de haver variável para receber o resultado da operação, a magnitudeé adimensional, exigindo a operação 20 log10() para obter os valores em decibéis).

O operador pzmap mostra a distribuição de pólos e zeros do sistema. Oszeros são marcados com �◦� e os pólos com �×�.

pzmap(sistema_1)

pzmap(sistema_2)

[polos_1, zeros_1] = pzmap(sistema_1);

[polos_2, zeros_2] = pzmap(sistema_2);

pzmap(sistema_1, sistema_2);

Quando não especi�camos uma variável para receber o resultado da opera-ção, o operador apresenta os pólos e zeros no plano s. O último caso mostraos pólos e zeros de vários sistemas podem ser apresentadas em um único grá-�co (com parametrização equivalente ao operador plot (em cores distintivas,escolhidas pela ferramenta).

Capítulo 9

Conclusão

Esta apostila teve como objetivo apresentar as ferramentas de computação nu-mérica usadas tanto em ambiente acadêmico, como em ambiente de pesquisa edesenvolvimento (seja público ou privado).

Espera-se que o aluno possa, sozinho ou sob orientação, conseguir cons-truir programas nessas ferramentas para solucionar seus problemas matemáti-cos. Com essa premissa, procurou-se então assumir que o aluno nunca tevecontato com tais ferramentas, mas têm conhecimento de programação básica.

Existe muito trabalho para ampliação desse manual, focando sempre na ge-neralização das ferramentas de computação numérica para alunos de graduação.Os autores esperam receber críticas e sugestões (quaisquer que sejam elas).

29

Índice Remissivo

stem, 23

acessando elementos de matrizes, 11acessando elementos de vetores, 9atribuições, 7

conjugado transposto, 12

extensão .m, 24

operador [ ], 9operador abs, 18operador angle, 18operador ans, 7operador bode, 28operador cd, 24operador clear, 8operador clf, 22operador cos, 18operador disp, 21operador exp, 19operador fft, 26operador fftshift, 26operador figure, 22operador function, 24operador help, 5operador hold, 22operador ifft, 26operador ifftshift, 26operador imag, 18operador impulse, 27operador length, 10, 12operador log, 19operador ones, 13operador plot, 21operador poly, 27operador pzmap, 28operador real, 18operador roots, 26operador sawtooth, 19operador sin, 18

operador size, 10, 12operador sprintf, 20operador square, 19operador stem, 23operador step, 28operador subplot, 23operador tan, 18operador tf, 27operador title, 22operador who, 7operador whos, 7operador xlabel, 22operador ylabel, 22operador zeros, 13operador de exponenciação, 17operador de multiplicação, 16operador dois-pontos, 13operador ponto-e-vírgula, 3operador transposto, 10, 12operadores aritméticos, 15operadores de divisão, 17operadores de soma e subtração, 15operadores ponto-a-ponto, 18

strings, 20

variáveis, 6

30