72
APOSTILA MATLAB

apostila_matlab

  • Upload
    anclje

  • View
    24

  • Download
    3

Embed Size (px)

Citation preview

Page 1: apostila_matlab

APOSTILA

MATLAB

Page 2: apostila_matlab

2

O que é o MATLAB? MATLAB é um “software” interativo de alta performance voltado para o cálculo numérico. O MATLAB integra análise numérica, cálculo com matrizes, processamento de sinais e construção de gráficos em ambiente fácil de usar onde problemas e soluções são expressos somente como eles são escritos matematicamente, ao contrário da programação tradicional. O MATLAB é um sistema interativo cujo elemento básico de informação é uma matriz que não requer dimensionamento. Esse sistema permite a resolução de muitos problemas numéricos em apenas uma fração do tempo que se gastaria para escrever um programa semelhante em linguagem Fortran, Basic ou C. Além disso, as soluções dos problemas são expressas no MATLAB quase exatamente como elas são escritas matematicamente. Carregando o MATLAB No Gerenciador de Programas do Microsoft Windows deve-se abrir o grupo de programas do MATLAB for Windows, que contém o ícone do aplicativo MATLAB. Um duplo clique no ícone MATLAB carrega o aplicativo MATLAB. Quando o MATLAB é carregado, duas janelas são exibidas: a Janela de Comando (Command Windows) e Janela Gráfica (Graphic Windows). A Janela de Comando é ativada quando se inicializa o MATLAB, e o “prompt” padrão (>>) é exibido na tela. A partir desse ponto, o MATLAB espera as instruções do usuário. Para entrar com uma matriz pequena, por exemplo usa-se >> A = [1 2 3; 4 5 6; 7 8 9] colocando colchetes em volta dos dados e separando as linhas por ponto e vírgula.. Quando se pressiona a tecla <enter> o MATLAB responde com A = 1 2 3 4 5 6 7 8 9 Para inverter esta matriz usa-se >> B = inv(A) e o MATLAB responde com o resultado. Editor de Linhas de Comando As teclas com setas podem ser usadas para se encontrar comandos dados anteriormente, para execução novamente ou sua reedição. Por exemplo, suponha que você entre com >> log (sqt(tan(pi/5))) Como para calcular a raiz quadrada o comando certo é sqrt, o MATLAB responde com uma mensagem de erro: ??? Undefined funcion or variable sqt.

Page 3: apostila_matlab

3

Ao invés de reescrever a linha inteira, simplesmente pressione a tecla “seta para cima”. O comando errado retorna, e você pode, então, mover o cursor para trás usando a tecla “seta para esquerda” ou o ponto de inserção com o “mouse” ao lugar apropriado para inserir a letra “r”. Então, o comando retorna a resposta apropriada: >> log (sqrt(tan(pi/5))) ans = -0.1597 Além das teclas com setas, pode-se usar outras teclas para reeditar a linha de comando. A seguir é dada uma breve descrição destas teclas:

Ctrl-P Chama uma linha de comando anterior. Ctrl-N Chama uma linha de comando posterior. Ctrl-B Move o cursor um caractere à esquerda. Ctrl-F Move o cursor um caractere à direita. Delete Move o cursor à esquerda, apagando um caractere. Ctrl-L Move o cursor uma palavra à esquerda. Ctrl-R Move o cursor uma palavra à direita. Ctrl-A Move o cursor para o começo da linha. Ctrl-E Move o cursor para o final da linha. Ctrl-U Cancela a linha. Ctrl-D Apaga o caractere que está sobre o cursor. Ctrl-K Apaga até o final da linha. ↑↑↑↑ Retorna a linha anterior ↓↓↓↓ Retorna a linha posterior ←←←← Move um espaço para a esquerda →→→→ Move um espaço para a direita

Ctrl ←←←← Move uma palavra para a esquerda Ctrl →→→→ Move uma palavra para a direita Home Move para o começo da linha End Move para o final da linha Del Apaga um caracter à direita

Backspace Apaga um caracter a esquerda

Page 4: apostila_matlab

4

1 INTRODUÇÃO

O MATLAB trabalha essencialmente com um tipo de objeto, uma matriz numérica retangular

podendo conter elementos complexos (deve-se lembrar que um escalar é uma matriz de dimensão l x l e que um vetor é uma matriz que possui somente uma linha ou uma coluna). 1.1 Entrando com Matrizes Simples

As matrizes podem ser introduzidas no MATLAB por diferentes caminhos: - digitadas na Janela de Comando (lista explícita de elementos), - geradas por comandos e funções, - criadas em arquivos ".m", - carregadas a partir de um arquivo de dados externo. O método mais fácil de entrar com pequenas matrizes no MATLAB é usando uma lista

explícita. Os elementos de cada linha da matriz são separados por espaços em branco ou vírgulas e as colunas separadas por ponto e vírgula, colocando-se colchetes em volta do grupo de elementos que formam a matriz. Por exemplo, entre com a expressão >> A=[ 1 2 3;4 S 6;7 8 9 ]

Pressionando <enter> o MATLAB mostra o resultado A= l 2 3 4 5 6 7 8 9

A matriz A é salva na memória RAM do computador, ficando armazenada para uso posterior. As matrizes podem, também, ser introduzidas linha a linha, o que é indicado para matrizes de

grande dimensão. Por exemplo: >>A = [1 2 3 >> 4 5 6 >> 7 8 9]

Outra maneira para entrar com matrizes no MATLAB é através de um arquivo no formato texto com extensão ".m". Por exemplo, se um arquivo chamado "gera.m" contém estas três linhas de texto,

A= [1 2 3 4 S 6 7 8 9]

então a expressão "gera" lê o arquivo e introduz a matriz A. >>gera

O comando load pode ler matrizes geradas pelo MATLAB e armazenadas em arquivos binários ou matrizes geradas por outros programas armazenadas em arquivos ASCII.

Page 5: apostila_matlab

5

1.2 Elementos das Matrizes

Os elementos das matrizes podem ser qualquer expressão do MATLAB, por exemplo.

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

resulta em x = -l.3000 1.4142 23.0400

Um elemento individual da matriz pode ser reverenciado com índice entre parênteses. Continuando o exemplo, >> x(6) = abs(x(l)) produz: x = -1.3000 1.4142 23.0400 0 0 1.3000

Note que a dimensão do vetor x é aumentada automaticamente para acomodar o novo elemento e que os elementos do intervalo indefinido são estabelecidos como zero.

Grandes matrizes podem ser construídas a partir de pequenas matrizes. Por exemplo, pode-se anexar outra linha na matriz A usando >> r= [ l0 11 12]; >> A= [A;r]

que resulta em

A= 1 2 3 4 5 6 7 8 9 10 11 12

Note que o vetor r não foi listado porque ao seu final foi acrescentado “;”. Pequenas, matrizes podem ser extraídas de grandes matrizes usando “;”. Por exemplo,

>> A = A(1:3,:);

seleciona as três primeiras linhas e todas as colunas da matriz A atual, modificando-a para sua forma original.

1.3 Declarações e Variáveis

O MATLAB é uma linguagem de expressões. As expressões usadas são interpretadas e

avaliadas pelo sistema. As declarações no MATLAB são freqüentemente da forma

>> variável = expressão

Page 6: apostila_matlab

6

ou simplesmente

>> expressão

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

>> 1900/81

que produz

ans= 23.4568

Se o último caractere da declaração é um ponto e vírgula, “;”, a impressão na tela é suprimida, mas a tarefa é realizada. Esse procedimento é usado em arquivos com extensão ".m" e em situações onde o resultado é uma matriz de grandes dimensões e temos interesse em apenas alguns dos seus elementos.

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

calcula o resultado da série, atribuindo a somatória à variável s, mas não imprime o resultado na tela. Note que os espaços em branco entre os sinais “=”, “+” e “-“ são opcionais, mas o espaço em branco entre “1/7” e “...” é obrigatório.

As variáveis e funções podem ser formadas por um conjunto de letras, ou por um conjunto de letras e números, onde somente os primeiros 19 caracteres do conjunto são identificados. O MATLAB faz distinção entre letras maiúsculas e minúsculas, assim a e A não são as mesmas variáveis. Todas as funções devem ser escritas em letras minúsculas: inv(A) calcula a inversa de A, mas INV(A) é uma função indefinida. Os nomes das variáveis devem consistir de uma única palavra, conforme as três regras abaixo Tabela : Regras de Construção de Variáveis

Regras de Construção das Variáveis Comentários/Exemplos Variáveis em letras minúsculas e maísculas são diferentes mesmo que consistam das mesmas letras

Items, items, itEms e ITEMS são variáveis diferentes entre si no MATLAB

As variáveis podem consistir de até 19 letras

holnmbjkitkklwenohu

As variáveis devem começar com alguma letra, podendo ser seguido por quaisquer letras, dígitos ou subescrito. Caracteres de pontuação não podem ser utilizados.

how_about x512

a_b_c_d

Page 7: apostila_matlab

7

Em adição às regras acima para formação das variáveis, as seguintes variáveis são especiais no MATLAB : ans, pi, eps, flops, inf, NaN, i, j, nargin, nargout, realmin e realmax Tabela : Variáveis Especiais Variáveis Especiais Significado

ans Nome “default” da variável usado para resultados

pi Constante igual à razão da circunferência de um círculo para o seu diâmetro

eps O menor número tal que quando adicionado com um outro resulta em um número diferente

flops Conta o número de operações em ponto- flutuante

inf Indica um número infinito, p.e., 1/0

NaN Indica que não é um número, p. e., 0/0

i (e) j i=j= -1

nargin Número de argumentos de entrada usados em uma função

nargout Número de argumentos de saída usados em uma função

realmin O menor número real positivo utilizável

realmax O maior número real positivo utilizável

1.4 Obtendo Informações da Área de Trabalho

Os exemplos de declarações mostrados nos itens acima criaram variáveis que são armazenadas na Área de Trabalho do MATLAB. Executando >> who obtêm-se uma lista das variáveis armazenadas na Área de Trabalho: Your variables are: A ans rs x Que mostra as cinco variáveis geradas em nossos exemplos, incluindo ans. Uma informação mais detalhada mostrando a dimensão de cada uma das variáveis correntes é obtido com whos que para nosso exemplo produz:

Page 8: apostila_matlab

8

Name Size Efements Bytes Density Complex A 3 by 3 9 72 Full No ans 1 by 1 1 8 Full No r 1 by 3 3 24 Full No s 1 by 1 1 8 Full No x 1 by 6 6 48 Full No

Grand total is 20 elements using 160 bytes Cada elemento de uma matriz real requer 8 bytes de memória, assim nossa matriz A de dimensão 3x3 usa 72 bytes e todas variáveis utilizadas um total de 160 bytes. 1.5 Números e Expressões Aritméticas A notação decimal convencional, com ponto decimal opcional e o sinal de menos, é usada para números. A potência de dez pode ser incluída como um sufixo. A seguir são mostrados alguns exemplos de números aceitos: 3 -99 0.00001 9.637458638 1.602E-20 6.06375e23 As expressões podem ser construídas usando os operadores aritméticos usuais e as regras de precedência:

1 ^ exponenciação 2 / divisão a direita 2 \ divisão a esquerda 3 * multiplicação 4 + adição 4 - subtração

Deve-se notar que existem dois símbolos para divisão: as expressões 1/4 e 4\1 possuem o

mesmo valor numérico, isto é, 0,25. Parênteses são usados em sua forma padrão para alterar o mesmo a precedência usual dos operadores aritméticos. 1.6 Números e Matrizes Complexas Números complexos são permitidos em todas operações e funções no MATLAB. Os números complexos são introduzidos usando-se as funções especiais i e j. Por exemplo >> z= 3 + 4*i ou >> z= 3 +4*j Outro exemplo é >> w= r * exp(i*theta) As seguintes declarações mostram dois caminhos convenientes para se introduzir matrizes complexas no MATLAB:

Page 9: apostila_matlab

9

>> A= [1 2; 3 4]+i*[5 6;7 8] e >> A= [1+5*i 2+6*i; 3+7*i 4+8*i] que produzem o mesmo resultado. Se i ou j forem usados como variáveis, de forma que tenham seus valores originais modificados, uma nova unidade complexa deverá ser criada e utilizada de maneira usual: >> ii = sqrt(-1); >> z = 3 + 4*ii 1.7 Formato de Saída O formato numérico exibido na tela pode ser modificado utilizando-se o comando format, que afeta somente o modo como as matrizes são mostradas, e não como elas são computadas ou salvas (o MATLAB efetua todas operações em dupla precisão). Se todos os elementos das matrizes são inteiros exatos, a matrizes é mostrada em um formato sem qualquer ponto decimal. Por exemplo,

>> x = [-1 0 1]

sempre resulta em x =

-1 0 1 Se pelo menos um dos elementos da matriz não é inteiro exato, existem várias possibilidades de formatar a saída. O formato “default”, chamado de formato short, mostra aproximadamente 5 dígitos significativos ou usam notação científica. Por exemplo a expressão >> x = [4/3 1.2345e-6] é mostrada , para cada formato usado, da seguinte maneira:

format short 1.3333 0.0000 format short e 1.3333e+000 1.2345e-006 format long 1.33333333333333 0.000000123450000 format long e 1.333333333333333e+000 1.234500000000000e-006 format hex 3ff5555555555555 3eb4b6231abfd271 format rat 4/3 1/810045 format bank 1.33 0.00 format + ++

Com o formato short e long, se o maior elemento da matriz é maior que 1000 ou menor que 0.001, um fator de escala comum é aplicado para que a matriz completa seja mostrada. Por exemplo,

Page 10: apostila_matlab

10

>> x = 1.e20*x resultado da multiplicação será mostrado na tela.

X = l.0e+20 *

1.3333 0.0000 O formato + é uma maneira compacta de mostrar matrizes de grandes dimensões. Os símbolos "+", "-", e "espaço em branco" são mostrados, respectivamente para elementos positivos, elementos negativos e zeros. 1.8 As Facilidades do HELP (Ajuda) O MATLAB possui um comando de ajuda (help) que fornece informações sobre a maior parte dos tópicos. Digitando

>> help obtêm-se uma lista desses tópicos disponíveis:

HELP topics: c:\matlab -Establish MATLAB session parameters. matlab\general -General purpose commands. matlab\ops -Operators and special characters. matlab\lang -Language constructs and debugging. matlab\elmat -Elementary matrices and matrix manipulation. matlab\specmat -Specialized matrices. matlab\elfun -Elementary math functions. matlab\specfun -Specialized math functions. matlab\matfun -Matrix functions - numerical linear algebra. matlab\datafun -Data analysis and Fourier transform functions. matlab\polyfun -Polynomial and interpolation functions. matlab\funfun -Function functions: nonlinear numerical methods. matlab\sparfun -Sparse matrix functions. matlab\plotxy -Two dimensional graphics. matlab\piotxyz -Three dimensional graphics. matlab\graphics -General purpose graphics functions. matlab\color -Color control and lighting model functions. matlab\sounds -Sound processing functions. matlab\strfun -Character string functions. matlab\iofun -Low-level file I/0 functions. matlab\demos -Demonstrations and samples. simulink\simulink -SIMULINK model analysis. simulink\blocks -SIMULINK block library. simulink\simdemos -SIMULINK demonstrations and samples. nnet\exampies - Neural Network Toolbox examples. nnet\nnet - Neural Network Toolbox.

For more help on directory/topic, type 'help topic".

Page 11: apostila_matlab

11

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

>> help plot

PLOT Linear plot. PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then the vector is plotted versus the rows or columns of the matrix, whichever line up. If X is a scalar and Y is a vector, length(Y) disconnected points are plotted. PLOT(Y) plots the columns of Y versus their index. If Y is complex, PLOT(Y) is equivalent to PLOT(real(Y),imag(Y)). In all other uses of PLOT, the imaginary part is ignored. Various line types, plot symbols and colors may be obtained with PLOT(X,Y,S) where S is a character string made from one element from any or all the following 3 columns: b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star y yellow s square k black d diamond v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram For example, PLOT(X,Y,'c+:') plots a cyan dotted line with a plus at each data point; PLOT(X,Y,'bd') plots blue diamond at each data point but does not draw any line. PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) combines the plots defined by the (X,Y,S) triples, where the X's and Y's are vectors or matrices and the S's are strings. For example, PLOT(X,Y,'y-',X,Y,'go') plots the data twice, with a solid yellow line interpolating green circles at the data points. The PLOT command, if no color is specified, makes automatic use of the colors specified by the axes ColorOrder property. The default ColorOrder is listed in the table above for color systems where the default is blue for one line, and for multiple lines, to cycle through the first six colors in the table. For monochrome systems, PLOT cycles over the axes LineStyleOrder property. PLOT returns a column vector of handles to LINE objects, one handle per line.

Page 12: apostila_matlab

12

The X,Y pairs, or X,Y,S triples, can be followed by parameter/value pairs to specify additional properties of the lines. See also SEMILOGX, SEMILOGY, LOGLOG, PLOTYY, GRID, CLF, CLC, TITLE, XLABEL, YLABEL, AXIS, AXES, HOLD, COLORDEF, LEGEND, SUBPLOT, STEM. Overloaded methods help cfit/plot.m help fints/plot.m help idmodel/plot.m help iddata/plot.m help cgrules/Plot.m help xregtwostage/plot.m help xregtransient/plot.m help xregmodel/plot.m help localmod/plot.m help sweepset/plot.m help mdevtestplan/plot.m help cgdatasetnode/plot.m help cgdatadisplay/plot.m help ntree/plot.m help dtree/plot.m help wvtree/plot.m help rwvtree/plot.m help edwttree/plot.m Finalmente, para obter informações sobre um comando específico, por exemplo title, digite: >> help title e as informações mais detalhadas sobre este comando serão exibidas: TITLE Graph title. TITLE('text') adds text at the top of the current axis. TITLE('text','Property1',PropertyValue1,'Property2',PropertyValue2,...) sets the values of the specified properties of the title. H = TITLE(...) returns the handle to the text object used as the title. See also XLABEL, YLABEL, ZLABEL, TEXT. Note que no exemplo mostrado para adicionar o título em um gráfico, TITLE (‘TEXT’) está escrito em letras maiúsculas somente para destacar. Deve-se lembrar que todos os comandos do MATLAB devem ser escritas em letras minúsculas, portanto, para adicionar o texto “Título do Gráfico” em um gráfico, digite: >> title (‘Título do Gráfico’) 1.9 Funções

Page 13: apostila_matlab

13

A “força” do MATLAB vem de um conjunto extenso de funções. O MATLAB possui um grande número de funções intrínsecas que não podem ser alteradas pelo usuário. Outras funções estão disponíveis em uma biblioteca externa distribuídas com o programa original (MATLAB TOOLBOX), que são na realidade arquivos com a extensão “.m” criados a partir das funções intrínsecas. A biblioteca externa (MATLAB TOOLBOX) pode ser constantemente atualizada à medida que novas aplicações são desenvolvidas. As funções do MATLAB, intrínsecas ou arquivos ".m", podem ser utilizadas apenas no ambiente MATLAB.

As categorias gerais de funções matemáticas disponíveis no MATLAB incluem:

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

As seções subseqüentes mostram mais detalhes dessas diferentes categorias de funções. 2 OPERAÇÕES COM MATRIZES

As operações com matrizes no MATLAB são as seguintes:

· Adição;

· Subtração; · Multiplicação; · Divisão a direita; · Divisão a esquerda; · Exponenciação; · Transposta;

A seguir cada uma dessas operações é mostrada com mais detalhe. 2.1 Transposta O caracter apóstrofo, " ` " , indica a transposta de uma matriz. A declaração >> A = [1 2 3; 4 5 6; 7 8 0] >> B = A' que resulta em A = 1 2 3 4 5 6 7 8 0 B =

Page 14: apostila_matlab

14

l 4 7 2 5 8 3 6 0 e >> x = [-1 O 2]` produz x = -1 0 2

Se Z é uma matriz complexa, Z’ será o conjugado complexo composto. Para obter simplesmente a transposta de Z deve-se usar Z.’, como mostra o exemplo >> Z = [1 2; 3 4] + [5 6; 7 8]*i >> Z1 = Z’ >> Z2 = Z.’ que resulta em Z = 1.0000 + 5.0000i 2.0000 + 6.0000i 6.0000 + 7.0000i 4.0000 + 8.0000i Z1 = 1.0000 - 5.0000i 3.0000 - 7.0000i 2.0000 - 6.0000i 4.0000 - 8.0000i Z2 = 1.0000 + 5.0000i 3.0000 + 7.0000i 2.0000 + 6.0000i 4.0000 + 8.0000i 2.2 Adição e Subtração A adição e subtração de matrizes são indicadas, respectivamente, por “+” e “-“. As operações são definidas somente se as matrizes as mesmas dimensões. Por exemplo, a soma com as matrizes mostradas acima, A + x, não é correta porque A é 3x3 e x é 3x1. Porém, >> C = A + B é aceitável, e o resultado da soma é C = 2 6 10

6 10 14 10 14 0

A adição e subtração também são definidas se um dos operadores é um

Page 15: apostila_matlab

15

escalar, ou seja, uma matriz l x l. Neste caso, o escalar é adicionado ou subtraído de todos os elementos do outro operador. Por exemplo: >> y = x - 1 resulta em y = -2 -1 1

2.3 Multiplicação A multiplicação de matrizes é indicada por “*”. A multiplicação x*y é definida somente se a segunda dimensão de x for igual à primeira dimensão de y. A multiplicação >> x'* y é aceitável, e resulta em ans = 4

É evidente que o resultado da multiplicação y'*x será o mesmo. Existem dois outros produtos que são transpostos um do outro. >> x*y’ ans = 2 l -l 0 0 0 -4 -2 2 >> y*x’ ans = 2 0 -4 1 0 -2 -1 0 2 O produto de uma matriz por um vetor é um caso especial do produto entre matrizes. Por exemplo A e X, >> b = A'x que resulta em

b = 5 8 -7

Page 16: apostila_matlab

16

Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz. >> pi*x ans = -3.1416 0 6.2832

2.4 Divisão Existem dois símbolos para divisão de matrizes no MATLAB "\" e "/". Se A é uma matriz quadrada não singular, então A\B e B/A correspondem respectivamente à multiplicação à esquerda e à direita da matriz B pela inversa da matriz A, ou inv(A)*B e B*inv(A)N, mas o resultado é obtido diretamente. Em geral,

• X = A\B é a solução de A*X = B • X = B/A é a solução de X*A = B

Por exemplo, como o vetor b foi definido como A*x, a declaração >> z = A\b resulta em z = -1 0 2

2.5 Exponenciação

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

>> A^3 ans = 279 360 306 684 873 684 738 900 441

MATLAB trata expressões como exp(A) e sqrt(A) como operações de vetores, definidas em cada elemento de A. As funções elementares de matrizes incluem poly - polinômio característico det - determinante trace - traço da matriz exp - exponencial de cada elemento da matriz

Page 17: apostila_matlab

17

log - logaritmo de cada elemento da matriz sqrt - raiz quadrada de cada elemento da matriz

MATLAB também calcula funções transcendentais, tais como exponencial e logaritmo da matriz. Estas funções especiais são definidas somente para matrizes quadradas. Uma função matemática transcendental é interpretada como uma função da matriz se um m é acrescentado ao nome da função. As três funções abaixo são distribuídas juntamente com o MATLAB expm - matriz exponencial logm - matriz logarítmica sqrtm - matriz raiz quadrada

3 OPERAÇÕES COM CONJUNTOS O termo operações com conjuntos é usado quando as operações aritméticas são realizadas entre os elementos que ocupam as mesmas posições em cada matriz (elemento por elemento). As operações com conjuntos são feitas como as operações usuais, utilizando-se dos mesmos caracteres (“*”, ”/”, “\”, “^” e “ ‘ “) precedidos por um ponto “.” (“.*”, ”./”, “.\”, “.^” e “ .‘ “).

3.1 Adição e Subtração

Para a adição e a subtração, a operação com conjuntos e as operações com matrizes são as mesmas. Deste modo os caracteres "+" e "-" podem ser utilizados tanto para operações com matrizes como para operações com conjuntos. 3.2 Multiplicação e Divisão

A multiplicação de conjuntos é indicada por “.*”. Se A e B são matrizes com as mesmas dimensões, então A.*B indica um conjunto cujos elementos são simplesmente o produto dos elementos individuais de A e B. Por exemplo, se >> x = [1 2 3]; y = [4 5 6]; então, >> z = x .* y resulta em z= 4 10 18

Page 18: apostila_matlab

18

As expressões A./B e A.\B formam um conjunto cujos elementos são simplesmente os

quocientes dos elementos individuais de A e B. Assim,

>> z = x .\ y resulta em z = 4.0000 2.5000 2.0000 3.3 Exponenciação A exponenciação de conjuntos é indicada por “.^”. A seguir são mostrados alguns exemplos usando os vetores x e y. A expressão >> z = x .^ y resulta em z = l 32 729 A exponenciação pode usar um escalar. >> z = x..^2 z = l 4 9 Ou, a base pode ser um escalar. >> z = 2.^[x y] z = 2 4 8 16 32 64 3.4 Operações Comparativas

Estes são os seis operadores usados para comparação de duas matrizes com as mesmas

dimensões:

< menor <= menor ou igual > maior

>= maior ou igual == igual ~= diferente

A comparação é feita entre os pares de elementos correspondentes e o resultado é uma matriz

composta dos números um e zero, com um representando VERDADEIRO e zero, FALSO. Por exemplo,

Page 19: apostila_matlab

19

>> 2 + 2 ~= 4 ans = 0 Pode-se usar, também os operadores lógicos & (e) e I (ou). Por exemplo, >> 1= = 1 & 4 = = 3 ans = 0 >> 1 = = 1 | 4 = = 3 ans = 1

3.5 Operações Lógicas

Os operadores &, | e ~ correspondem aos operadores lógicos “e”, “ou” e “não”. C = A & B é uma matriz cujo os elementos são 1s onde ambas as matrizes A e B são elementos não-nulos, e 0s onde uma das matrizes ou ambas são elementos nulos. C = A | B é uma matriz cujo os elementos são 1s onde tanto A ou B possuem elementos não-nulos, e 0s onde ambas posssuem elementos nulos. B = ~A é uma matriz cujo os elementos são 1s onde a matriz A é um elemento nulo, e 0s quando A é um elemento não-nulo. Todas as operações acima são válidas apenas para quando A e B possuem mesma dimensão, ou quando uma das duas matrizes é um escalar. As funções lógicas e relacionais do MATLAB são: any - condições lógicas all - condições lógicas find - encontra os índices da matriz de valores lógicos exist - verifica a existência de variáveis isnan - detecta se algum elemento da matriz é NaN isinf - detecta se algum elemento da matriz é infinito finite - verifica os valores finitos da matriz isempty - detecta matrizes vazias isstr - detecta variáveis string isglobal - detecta variáveis globais issparse - detecta matrizes esparsas 3.6 Funções Matemáticas A funções trigonométricas incluídas no MATLAB são sin - seno cos - cosseno tan - tangente asin - arco-seno acos - arco-cosseno atan - arco-tangente atan2 - arco-tangente para os quatro quadrantes

Page 20: apostila_matlab

20

sinh - seno hiperbólico cosh - cosseno hiperbólico tanh - tangente hiperbólica asinh - arco-seno hiperbólico acosh - arco-cosseno hiperbólico atanh - arco-tangente hiperbólico MATLAB inclui como funções elementares abs - valor absoluto ou módulo de um número complexo angle - ângulo de fase sqrt - raiz quadrada real - parte real imag - parte imaginária conj - complexo conjugado round - arredondamento para o inteiro mais próximo fix - arredondamento para o inteiro mais próximo de zero floor - arredondamento para o inteiro mais próximo de - ceil - arredondamento para o inteiro mais próximo de + sign - função sinal rem - remanescente ou módulo gcd - máximo divisor comum lcm - mínimo múltiplo comum exp - exponencial de base e log - logaritmo natural log10 - logaritmo de base 10 4 MANIPULAÇÃO DE VETORES E MATRIZES

O MATLAB permite a manipulação de linhas, colunas, elementos individuais e partes de

matrizes.

4.1 Gerando Vetores

Os dois pontos, “ : ”, é um caracter importante no MATLAB. A declaração >> x = 1 : 5

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

Outros incrementos, diferentes de um, podem ser usados.

>> y = 0 : pi/4 : pi

que resulta em y = 0.0000 0.7854 1.5708 2.3562 3.1416

Incrementos negativos também são possíveis.

Page 21: apostila_matlab

21

>> z = 6 : -l : l z = 6 5 4 3 2 1 Pode-se, também, gerar vetores usando a função linspace. Por exemplo, >> k = linspace (0, l, 6) k = 0 0.2000 0.4000 0.6000 0.8000 1.0000

gera um vetor linearmente espaçado de 0 a 1, contendo 6 elementos. 4.2 Elementos das Matrizes

Um elemento individual da matriz pode ser indicado incluindo os seus subscritos entre

parênteses. Por exemplo, dada a matriz A: A =

l 2 3 4 5 6 7 8 9

a declaração

>> A(3,3) = A(1,3) + A(3,l) resulta em A =

l 2 3 4 5 6 7 8 10

Um subscrito pode ser um vetor. Se X e V são vetores, então X(V) é [X(V(1)), X(V(2)), ....

X(V(n))]. Para as matrizes, os subscritos vetores permitem o acesso à submatrizes contínuas e descontínuas. Por exemplo, suponha que A é uma matriz 10x10.

A =

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

Page 22: apostila_matlab

22

então

>> A(1:5,3) ans = 11 17 88 19 25 especifica uma submatriz 5x1, ou vetor coluna, que consiste dos cinco primeiros elementos da terceira coluna da matriz A. Analogamente, >> A(1:5,7:10) ans =

74 51 58 40 55 57 64 41 56 63 70 47 62 69 71 28 68 75 52 34

é uma submatriz 5x4, consiste das primeiras cinco linhas e as últimas quatro colunas. Utilizando os dois pontos no lugar de um subscrito denota-se todos elementos da linha ou coluna. Por exemplo, >> A(1:2:5,:) ans =

92 99 11 18 15 67 74 51 58 40 14 81 88 20 22 54 56 63 70 47 86 93 25 12 19 61 68 75 52 34

é uma submatriz 3x10 que consiste da primeira, terceira e quinta linhas e todas colunas da matriz A. Muitos efeitos sofisticados são obtidos usando submatrizes em ambos os lados das declarações. Por exemplo, sendo B uma matriz 10x10 unitária, >> B = ones (10)

Page 23: apostila_matlab

23

B =

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

a declaração,

>> B(1:2:7,6:l0) = A(S:-1:2,1:5)

produz

1 1 1 1 1 86 93 25 12 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 85 87 19 21 13 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 14 81 88 20 22 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 98 80 17 14 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

4.3 Matrizes Especiais

MATLAB apresenta algumas funções úteis para gerar matrizes: • zeros - zeros • ones - constante • rand - elementos randômicos uniformemente distribuídos • randn - elementos randômicos normalmente distribuídos • eye - identidade • linspace - vetores espaçados linearmente • logspace - vetores espaçados logaritmicamente • meshgrid - utilizada com funções de duas variáveis

4.4 Manipulação de Matrizes

• rot90 - rotação • fliplr - inverte a matriz da esquerda para a direita • flipud - inverte a matriz de cima para baixo • diag - extrai ou cria diagonal • tril - triângulo inferior

Page 24: apostila_matlab

24

• triu - triângulo superior • reshape - altera o formato • ‘ - transposição • : - rearranjamento geral

5 FUNÇÕES

Uma classe de comandos do MATLAB não trabalha com matrizes numéricas, mas com funções matemáticas. Esses comandos incluem:

· Integração numérica; · Equações não-lineares e otimização; · Solução de equações diferenciais.

As funções matemáticas são representadas no MATLAB por arquivos ".m". Por exemplo, a função

está disponível no MATLAB como um arquivo ".m" chamado humps.m:

function y = humps(x) y = l ./ ((x-.3).^2 + .0l) + 1./((x-.9).^2 + .04) - 6;

O gráfico da função é: >> x = -l:0.0l:2; >> plot(x,humps(x))

-1 -0.5 0 0.5 1 1.5 2

-20

0

20

40

60

80

100

Page 25: apostila_matlab

25

5.1 Integração Numérica

A área abaixo da curva pode ser determinada através da integração numérica da função humps(x), usando o processo chamado quadratura. Integrando a função humps(x) de -1 a 2:

>> q = quad (‘humps’,-1,2) q = 26.3450 Os dois comandos do MATLAB para integração usando quadratura são: quad Calcular integral numericamente, método para baixa ordem. quad8 Calcular integral numericamente, método para alta ordem.

5.2 Equações Não-Lineares e Otimização Os dois comandos para equações não-lineares e otimização incluem:

fmin Minimizar função de uma variável. fmins Minimizar função de várias variáveis fzero Encontrar zero de função de uma variável.

Continuando o exemplo, a localização do mínimo da função humps(x) no intervalo de 0.5 a 1 é

obtido da seguinte maneira, >> xm = fmin(‘humps’,0.5,1) xm = 0.6370 >> ym = humps(xm) ym = 11.2528 E o gráfico deste intervalo com o ponto de mínimo pode ser construído: >> x = 0.5:0.01:1 >> plot(x, humps(x), xm, ym, ‘o’)

Page 26: apostila_matlab

26

Pode-se ver que a função humps(x) apresenta dois “zeros” no intercalo de -1 a 2. A localização

do primeiro “zero” é próxima do ponto x = 0, xzl = fzero('humps',0) xzl = -0.1316 e a localização do segundo “zero” é próxima do ponto x= 1, >> xz2=fzero('humps',1) xz2 = 1.2995 O gráfico da função com os dois “zeros” é obtido através da expressão: >> x = -1:0.01:2 >> plot(x, humps(x), xzl, humps(xzl),'*', xz2, humps(xz2), '+'), grid

Page 27: apostila_matlab

27

5.3 Equações Diferenciais Os comandos do MATLAB para resolver equações diferenciais ordinárias são:

ode23 Resolver equação diferencial. método baixa ordem. ode23p Resolver e plotar soluções. ode45 Resolver equação diferencial. Método para alta ordem

Considere a equação diferencial de segunda ordem chamada de Equação de Van der Pol

x + (x2 - 1) . x + x = 0

Pode-se rescrever esta equação como um sistema acoplado de equações diferenciais de primeira ordem x1 = x1 . (1-x2

2) - x2

x2 = x1 O primeiro passo para simular esse sistema é criar um arquivo “.m” contendo essas equações diferenciais. Por exemplo, o arquivo volpol.m:

function xdot=volpol(t,x) xdot=[0 0] xdot(l)=x(l).*(1- x(2).^2) - x(2); xdot(2)=x(l);

Page 28: apostila_matlab

28

Para simular a equação diferencial no intervalo 0 ≤ t ≤ 20, utiliza-se o comando ode23 >> t0 = 0; tf = 20; >> x0 = [0 0.25];

>> [t,x] = ode23('volpol', t0, tf, x0);

>> plot(t,x)

Page 29: apostila_matlab

29

6 GRÁFICOS

A construção de gráficos no MATLAB é mais uma das facilidades do sistema. Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada. Existe no MATLAB uma vasta biblioteca de comandos gráficos. 6.1 Gráficos Bidimensionais Estes são os comandos para plotar gráficos bidimensionais:

plot Plotar linear. loglog Plotar em escala loglog. semilogx Plotar em semilog. semilogy Plotar em semilog. fill Desenhar polígono 2D. polar Plotar em coordenada polar. bar Gráfico de barras. stem Seqüência discreta. stairs Plotar em degrau. errorbar Plotar erro. hist Plotar histograma. rose Plotar histograma em ângulo. compass Plotar em forma de bússola. feather Plotar em forma de pena. fplot Plotar função. comet Plotar com trajetória de cometa.

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

elementos de Y. Por exemplo, para plotar os números [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14], entre com o vetor e execute o comando plot:

>> Y = [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14]; >> plot(Y) e o resultado é mostrado na Janela Gráfica:

Page 30: apostila_matlab

30

Se X e Y são vetores com dimensões iguais, o comando plot(X,Y) produz um gráfico bidimensional dos elementos de X versos os elementos de Y, por exemplo >> t = 0:0.05:4*pi; >> y = sin(t); >> plot(t,y) resulta em

Page 31: apostila_matlab

31

O MATLAB pode também plotar múltiplas linhas e apenas um gráfico. Existem duas maneiras, a primeira é usado apenas dois argumentos, como em plot(X,Y), onde X e/ou Y são matrizes. Então:

• Se Y é uma matriz e X um vetor, plot(X,Y) plota sucessivamente as linhas ou

colunas de Y versos o vetor X.

• Se X é uma matriz e Y é um vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de X versos o vetor Y.

• Se X e Y são matrizes com mesma dimensão, plot(X,Y) plota sucessivamente as

colunas de X versos as colunas de Y.

• Se Y é uma matriz, plot(Y) plota sucessivamente as colunas de Y versos o índice de cada elemento da linha de Y.

A segunda, e mais fácil, maneira de plotar gráficos com múltiplas linhas é usando o

comando plot com múltiplos argumentos. Por exemplo:

>> plot(t, sin(t), t, cos(t), t, sin(t + pi), t, cos(t + pi))

Page 32: apostila_matlab

32

6.2 Estilos de Linha e Símbolo

Os tipos de linhas, símbolos e cores usados para plotar gráficos podem ser controlados se os padrões não são satisfatórios. Por exemplo,

>> X = 0:0.05:1; >> subplot(l2l), plot(X,X.^2,’k*’) >> subplot(l22), plot(X,X.^2,’k --‘)

Outros tipos de linhas, pontos e cores também podem ser usados:

TIPO DE LINHA - - - - -

- - ----------------- -. -⋅-⋅-⋅-⋅-⋅-⋅-⋅-⋅-⋅ : ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅

TIPO DE PONTO ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ∗ ∗∗∗∗∗∗∗∗∗∗∗ ° °°°°°°°°°°°°° + +++++++++ x x x x x x x x

Page 33: apostila_matlab

33

CORES y amarelo m lilás c azul claro r vermelho g verde b azul escuro w branco k preto

6.3 Números Complexos Quando os argumentos para plotar são complexos, a parte imaginária é ignorada, exceto quando é dado simplesmente um argumento complexo. Para este caso especial é plotada a parte real versos a parte imaginária. Então, plot(Z), quando Z é um vetor complexo, é equivalente a plot(real(Z),imag(Z)). 6.4 Escala Logarítmica, Coordenada Polar e Gráfico de Barras O uso de loglog, semilogx, semilogy e polar é idêntico ao uso de plot. Estes comandos são usados para plotar gráficos em diferentes coordenadas e escalas:

• polar(Theta,R) plota em coordenadas polares o ângulo THETA, em radianos, versos o raio R;

• loglog plota usando a escala log10xlog10; • semilogx plota usando a escala semi-logarítmica. O eixo x é log10 e o eixo y é

linear; • semilogy plota usando a escala semi-logarítmica. O eixo x é linear e o eixo y é

log10; O comando bar(X) mostra um gráfico de barras dos elementos do vetor X, e não aceita múltiplos argumentos. 6.5 Plotando Gráficos Tridimensionais e Contornos Estes são alguns comandos para plotar gráficos tridimensionais e contornos.

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

Page 34: apostila_matlab

34

O comando mesh(X,Y,Z) cria uma perspectiva tridimensional plotando os elementos da

matriz Z em relação ao plano definindo pelas matrizes X e Y. Por exemplo, >> [X,Y] = meshgrid(-2:.2:2, -2:.2:2); >> Z = X.* exp(-X..^2 - Y.^2); >> mesh(X,Y,Z)

e o comando contour(Z,10) mostra a projeção da superfície acima no plano xy com 10 iso-linhas:

Page 35: apostila_matlab

35

6.6 Anotações no Gráfico

O MATLAB possui comandos de fácil utilização para adicionar informações em um gráfico:

title Título do gráfico. xlabel Título do eixo-X. ylabel Título do eixo-Y. zlabel Título do eixo-Z. text Inserir anotação no gráfico. gtext Inserir anotação com o “mouse”. grid Linhas de grade. legend Inserir legenda dos gráficos traçados.

Por exemplo: >> fplot(‘sin’, [-pi pi]) >> title(‘Gráfico da função f(x)=seno(x), -pi<x<pi’) >> xlabel(‘x’) >> ylabel(‘f(x)’) >> grid

Page 36: apostila_matlab

36

7. Análise de Dados Este capítulo apresenta um grupo de funções que possuem a capacidade de análise de dados. Um grupo de funções que possui a capacidade de análise de dados é mostrado abaixo: max - valor máximo min - valor mínimo mean - valor médio std - desvio médio sort - ordenar sum - soma dos elementos prod - produto dos elementos cumsum - soma acumulativa dos elementos cumprod - produto acumulativo dos elementos hist - histograma Quando os argumentos forem vetores, não irá importar se o vetor é orientado por linha ou por coluna. Se o argumento for uma matriz, as funções operarão orientadas por coluna. Desta forma, se você aplicar a função max a uma matriz, o resultado é um vetor linha contendo o valor máximo de cada coluna. 8. FUNÇÕES DE MATRIZ Neste capítulo são descritas algumas funções especiais para aplicações em matrizes, tais como fatoração e decomposição. 8.1 Fatoração Triangular

O método de fatoração mais básico expressa uma matriz qualquer como o produto de duas matrizes essencialmente triangulares, sendo uma delas a permutação de uma matriz triangular inferior e a outra uma matriz triangular superior. Esta fatoração é frequentemente chamada de LU, ou, em algumas vezes, de LR. A linha de comando é descrita como >> [L,U] = lu(A) onde L é a permutação da matriz triangular inferior e U é a matriz triangular superior. 8.2 Fatoração Ortogonal

A fatoração QR é utilizada tanto para matrizes quadradas como retangulares. Esta fatoração expressa a matriz como o produto de uma matriz ortonormal e uma matriz triangular superior. A linha de comando para esta fatoração é descrita como >> [Q,R] = qr(A) onde Q é a matriz ortonormal e R é a matriz triangular superior. 8.3 Decomposição dos Autovalores

Se A é uma matriz n-por-n, os n números que satisfazem Ax = x são os autovalores de A. Eles são encontrados utilizando >> eig(A) que retorna os autovalores em uma vetor coluna. Se A é real e simétrica, os autovalores são reais. Mas se A não é simétrica, os autovalores frequentemente são números complexos. Para se obter os autovalores e os autovetores de uma vez basta utilizar a seguinte linha de comando:

Page 37: apostila_matlab

37

>> [X,D] = eig(A) onde os elementos da diagonal de D são os autovalores e as colunas de X são os autovetores correspondentes tais que AX = XD. 9. POLINÔMIOS E PROCESSAMENTO DE SINAIS A representação polinomial e o tratamento dois polinômios são tratados neste capítulo. 9.1 Representação Polinomial

MATLAB representa polinômios como vetores linha contendo os coeficientes na ordem decrescente de potência. Por exemplo, a equação característica da matriz A = 1 2 3 4 5 6 7 8 0 é computada através de >> p = poly(A) p = 1 -6 -72 -27 Esta é a representação do MATLAB para o polinômio s3 – 6s2 – 72s -27. As raízes desta equação são dadas por >> r = roots(p) r = 12.1229 -5.7345 -0.3884 As raízes da equação característica são os autovalores da matriz A. Pode-se obter o polinômio original através das raízes encontradas acima >> p2 = poly® p2 = 1 -6 -72 -27 Considere os polinômios a(s) = s2 + 2s + 3 e b(s) = 4s2 + 5s + 6. O produto dos polinômios é feito através da convolução dos coeficientes >> a = [1 2 3]; b = [4 5 6]; >> c = conv(a,b) c = 4 13 28 27 18 Uma lista completa das funções polinomiais inclui poly - polinômio característico roots - raízes do polinômio polyval - avalia o polinômio com o argumento substituindo a variável polyvalm - avalia o polinômio com o argumento sendo uma matriz conv - multiplicação deconv - divisão residue - expansão em frações parciais polyder - derivada do polinômio polyfit - ajuste do polinômio

Page 38: apostila_matlab

38

9.2 Processamento de Sinais

Vetores são utilizados para guardar sinais amostrados ou seqüências em processamento de sinais. Para sistemas de várias entradas, cada linha de uma matriz corresponde a um ponto de amostra onde as colunas representam os diversos canais. MATLAB possui algumas funções de processamento de sinais: abs - módulo de um número complexo angle - ângulo de fase de um número complexo conv - convolução deconv - desconvolução fft - transformada de Fourier ifft - transformada de Fourier inversa fftshift - troca os quadrantes da matriz Para argumentos bidimensionais, como matrizes, usam-se as funções modificadas: fft2 - fft bidimensional ifft2 - ifft bidimensional conv2 - convolução bidimensional 9.3 Filtro de Dados A função >> y = filter(b, a, x) filtra os dados contidos no vetor x com o filtro descrito pelos vetores a e b, criando os dados filtrados y. A estrutura do filtro pode ser descrita pela equação diferencial y(n) = b(1)x(n) + b(2)x(n – 1) + ... + b(nb)x(n – nb + 1) – a(2)y(n – 1) – ... – a(na)y(n – na + 1) ou de modo equivalente, pela transformada Z H(z) = Y(z) = b(1) + b(2)z – 1 +...+b(nb)z – (na – 1) X(z) 1 + a(2)z – 1 +...+a(na)z – (na – 1) A função freqz retorna a resposta complexa em freqüência de filtros digitais. 10. CONTROLE DE FLUXO Os comandos que controlam o fluxo especificam a ordem em que a computação é feita. No MATLAB estes comandos são semelhantes aos usados na linguagem C, mas com uma estrutura diferente. 10.1 Laço for O laço for é o controlador de fluxo mais simples e usado na progração MATLAB. Analisando a expressão >>for i=1:5, X(i)=i^2; end pode-se notar que o laço for é dividido em três partes:

• A primeira parte (i=1) é realizada uma vez, antes do laço ser inicializado.

Page 39: apostila_matlab

39

• A segunda parte é o teste ou condição que controla o laço, (i<=5). Esta condição é avaliada; se verdadeira, o corpo do laço (X(i)=i^2) é executado.

• A terceira parte acontece quando a condição se torna falsa e o laço termina. O comando end é usado como limite inferior do corpo do laço. É comum construções em que conjuntos de laços for são usados principalmente com matrizes: for i=1:8 for j=1:8, A(i,j)=i+j; B(i,j)=i-j; end end C=A+B; 10.2 Laço while No laço while apenas a condição é testada. Por exemplo na expressão

a = l; b = 15; while a<b, clc a = a+l b = b-l pause(l)

end disp(‘fim do loop’)

a condição a<b é testada. Se ela for verdadeira o corpo do laço, será executado. Então a condição é retestada, e se verdadeira o corpo será executado novamente. Quando o teste se tornar falso o laço terminará, e a execução continuará no comando que segue o laço após o end.

10.3 Declarações if e break A seguir, é apresentado um exemplo do uso da declaração if no MATLAB.

for i = l:5, for j = l:5, if i = = j A(i,j) = 2; elseif abs(i-j) = = 1 A(i,j) = -1; else A(i,j) = 0; end end end A

Page 40: apostila_matlab

40

Os valores de i e j variam de 1 a 5, varrendo toda a matriz A. Se (if) i for igual a j, A(i,j)=2, ou se (elseif) o valor absoluto de i-j for igual a 1, A(i,j)=-1, ou (else) A(i,j)=0, se nenhuma das condições anteriores forem satisfeitas.

É conveniente, às vezes, controlarmos a saída deu m laço de outro modo além do teste, no início ou no fim do mesmo. O comando break permite uma saída antecipada de um for ou while. Um comando break faz com que o laço mais interno seja terminado imediatamente. Por exemplo,

%modifica a matriz A clc x = ’s’; for i = l:5, if x = = ‘q’, break end

j = l; while j<=5, [‘A(‘num2str(i) ‘,’ num2str(j)’) = ‘num2str(A(i,j))] x = input(‘Modifica? (s-sim, n-não, p-próxima linha, q-sair) =>’); if x = = ’s’, A(i,j) = input(‘Entre com o novo valor de A(i,j) = = >’); j=j+l; clc end if x = = ‘n’, j=j+l; clc

end if x = = ‘p’, clc break end if x = = ‘q’, clc break end end end

11. ARQUIVOS “.m” Os comandos do MATLAB são normalmente digitados na Janela de Comando, onde uma única linha de comando é introduzida e processada imediatamente. O MATLAB é também capaz de executar seqüências de comandos armazenadas em arquivos. Os arquivos que contêm as declarações do MATLAB são chamadas arquivos “.m”, e consistem de uma seqüência de comandos normais do MATLAB, possibilitando incluir outros arquivos “.m” escritos no formato texto (ASCII). Para editar um arquivo texto na Janela de Comando do MATLAB selecione New M-File para criar um novo arquivo ou Open M-File para editar um arquivo já existente, a partir do menu File. Os arquivos podem, também, ser editados fora do MATLAB utilizando qualquer editor de texto.

Page 41: apostila_matlab

41

Existem alguns comandos e declarações especiais para serem usados nos arquivos, por exemplo %Plota uma função y=ax^2 + bx + c no intervalo -5<x<5 clear aux=’s’; while aux= = ‘s’, clc a=input(‘a =’); b=input(‘b =’); c=input(‘c =’); x=-5:0.1:5; y=a*x.^2+b*x+c; plot(y) figure(1) pause clc close aux=input(‘Plotar outro ? (s/n) = => ‘,’s’); end O caracter % é usado para inserir um comentário no texto, o comando clear apaga todos os dados da memória, o comando input é usado quando se deseja entrar com um dado a partir da Janela de Comando, pause provoca uma pausa na execução do arquivo até que qualquer tecla seja digitada, clc limpa a Janela de Comando, figure(1) mostra a Janela Gráfica número 1 e close fecha todas as Janelas Gráficas.

11.1 Arquivos-M: Scripts e Funções

Um dos assuntos mais importantes, a criação de arquivos-M é descrita neste capítulo. MATLAB é usualmente acionado por um comando; quando se entra com uma simples linha de comando, MATLAB a processa imediatamente e mostra o resultado. MATLAB também pode executar uma sequência de comandos que está armazenada em um arquivo.

Arquivos de disco que possuem linhas de comando para MATLAB são chamados arquivos-M em virtude de sua extensão ser do tipo .m. Por exemplo, o arquivo bessel.m contém linhas de comando do MATLAB para avaliar funções Bessel. Um arquivo-M consiste de uma seqüência normal de linhas de comando do MATLAB, a qual pode fazer uma chamada a outros arquivos-M. Um arquivo-M pode chamar a si mesmo de modo recursivo. Pode-se criar estes arquivos com um editor de textos como o Notepad ou o Word.

Dois tipos de arquivos-M podem ser usados: scripts e funções. Scripts, ou arquivos script, realizam longas seqüências de comandos. Funções, ou arquivos função, permitem adicionar novas funções à funções já existentes. A maior parte do poder do MATLAB se deve ao fato de se poder criar novas funções que resolvam problemas específicos. 11.2 Arquivos Script

Quando um script é chamado, MATLAB simplesmente executa os comandos encontrados no arquivo. As linhas de comando de um arquivo script operam globalmente com os dados que estão no espaço de trabalho. Scripts são úteis na realização de análise, solução de problemas, ou no projeto de longas seqüências de comando, o que se torna cansativo para ser feito interativamente. Como um exemplo, suponha um arquivo chamado fibno.m que possui os comandos: f = [1 1]; i = 1; while f(i) + f(i+1) < 1000

Page 42: apostila_matlab

42

f(i+2) = f(i) + f(i+1); i = i + 1; end plot(f)

Digitando a linha de comando fibno faz com que MATLAB execute os comandos, calculando os 16 primeiros números da série de Fibonacci, e crie um gráfico. Após a execução do arquivo estar completa, as variáveis f e i ficam mantidas no espaço de trabalho. Os demos fornecidos pelo MATLAB são bons exemplos de como se utilizar scripts para realizar tarefas mais complicadas. Para usá-los, basta digitar demos no prompt do MATLAB. 11.3 Arquivos Função

Um arquivo-M que contém a palavra function no ínicio da primeira linha é um arquivo função. Uma função difere de um script pelos argumentos que devem ser passados e pelas variáveis que são definidas e manipuladas, que são locais à função e não podem ser operadas globalmente no espaço de trabalho. O arquivo mean.m é um exemplo de um arquivo função que possui as linhas de comando: function y = mean(x) % MEAN Average or mean value % For vectors, Mean(x) returns the mean value % For matrices, MEAN(x) is a row vector % containing the mean value of each column. [m,n] = size(x); if m == 1 m = n; end y = sum(x)/m;

A existência deste arquivo define uma nova função chamada mean. A nova função mean é usada como qualquer outra função do MATLAB. Por exemplo, se z é um vetor de inteiros de 1 a 99, >> z = 1:99; o valor médio deste é encontrado através do comando >> mean(z) que resulta em ans = 50

As informações abaixo são para o arquivo mean.m, mas o princípio é válido para todos os arquivos função:

A primeira linha declara o nome da função e os argumentos de entrada e saída. Sem esta linha, o arquivo é um arquivo script, e não um arquivo função.

O símbolo % indica que o restante da linha é um comentário e deve ser ignorado. As primeiras linhas descrevem o arquivo-M e são mostradas quando você digita help mean. As variáveis m, n e y são locais a mean e não aparecem no espaço de trabalho após mean ter

terminado. (Ou, se elas existem, permanecem inalteradas.) Não é necessário definir os inteiros de 1 a 99 em uma variável de nome x. No exemplo, a

função mean foi usada com uma variável z. O vetor z que contém os inteiros de 1 a 99 foi passado ou copiado para mean onde ele se tornou uma variável local de nome x.

Pode-se criar uma ajuda online para os arquivos-M entrando com um texto de uma ou mais linhas de comentários, começando pela segunda linha do arquivo. Por exemplo, o arquivo-M angle.m contém function p = angle(h) %ANGLE Phase angle. ANGLE(H) returns the phase angles, in radians, of a matrix with complex elements.

Page 43: apostila_matlab

43

See also ABS, UNWRAP.

Quando se entra com help angle, as linhas 2, 3 e 4 são mostradas. Baseado nisto, a primeira linha de comentários em qualquer arquivo-M deve conter o maior número de informações possíveis. 11.4 Variáveis Globais

Cada função do MATLAB definida por um arquivo-M possui suas próprias variáveis locais, as quais não tem relação com as de outras funções e com as do espaço de trabalho. Entretanto, se várias funções e também o plano de trabalho declararem uma variável particular como global, então todos eles dividem a mesma variável. Qualquer atribuição a esta variável, em qualquer função, fica disponível a todas as outras funções que a declaram como global.

Para fazer com que uma variável seja global, basta escrever global X Y Z onde as variáveis X, Y e Z irão trabalhar como sendo globais. 11.5 Strings de Texto Strings de texto são entradas no MATLAB entre aspas simples ( ‘ ). Por exemplo, >> s = ‘Hello’ resulta em s = Hello O texto é armazenado em um vetor, sendo um caractere por elemento. Neste caso, >> size(s) ans = 1 5 indica que s possui cinco elementos. Os caracteres são armazenados com seus valores ASCII, e a função abs mostra estes valores: >> abs(s) ans = 72 101 108 108 111 Utiliza-se colchetes para juntar variáveis de texto em strings maiores: >> s = [s, ‘ World ‘] s = Hello World

11.6 A Função eval

A função eval trabalha com variáveis do tipo texto e implementa uma poderosa facilidade de macro. eval(t) faz com que o texto contido em t seja avaliado. Por exemplo, t = ‘1/(i+j-1)’; for i = 1:n for j = 1:n a(i,j) = eval(t); end end

Cria uma matriz a de dimensão n por n, onde cada elemento é avaliado pela função que está descrita por t.

Page 44: apostila_matlab

44

12. OPERAÇÕES COM O DISCO

Os comandos load e save são usados, respectivamente, para importar dados do disco (rígido ou flexível) para a área de trabalho do MATLAB e exportar dados da área de trabalho para o disco. Outras operações com o disco podem ser efetuadas, como executar programas externos, trocar o diretório de trabalho, listagem do diretório, e serão detalhadas a seguir.

12.1 Manipulação do Disco

Os comandos cd, dir, delete, type e what do MATLAB são usados da mesma maneira que os comandos similares do sistema operacional.

cd troca o diretório de trabalho atual dir lista o conteúdo do diretório atual delete exclui arquivo type mostra o conteúdo do arquivo texto what lista arquivos “.m”, “.mat” e “.mex”.

Para maiores detalhes sobre estes comandos utilize o help.

12.2 Executando Programas Externos

O caracter ponto de exclamação, !, é um desvio e indica que o restante da linha será um

comando a ser executado pelo sistema operacional. Este procedimento vem sendo historicamente utilizado em todos as versões do MATLAB como “prompt” para indicar a execução de um colando do DOS, sendo muito útil nas versões que usavam somente o DOS. No ambiente Windows, entretanto, este comando é desnecessário, mas foi mantido nas versões do MATLAB para Windows.

Para entrar com o caracter de desvio no “prompt” do MATLAB, deve-se coloca-lo no Início do comando do DOS ou Windows que se deseja executar. Por exemplo, para carregar um aplicativo como o programa Notepad do Windows (Bloco de Notas), sem sair do MATLAB, entre com

>> ! Notepad Uma nova janela é aberta, o Notepad é carregado, podendo ser utilizado da maneira usual. Pode-se usar, também, qualquer comando implícito do DOS, por exemplo:

copy, fomat, ren, mkdjr, rmdir, ...

12.3 Importando e Exportando Dados

Os dados contidos na Área de Trabalho do MATLAB podem ser armazenados em arquivos, no formato texto ou binário, utilizando o comando save. Existem diversas

maneiras de utilizar este comando. Por exemplo. para armazenar as variáveis X, Y e Z pode-se fazer:

save salva os dados no arquivos binário “matlab.mat”. save X salva a matriz X no arquivo o binário “x.mat”. save arql X Y Z salva as matrizes X, Y e Z no arquivo binário “arq1.mat”. save arq2.sai X Y Z -ascii salva as matrizes X., Y e Z no arquivo texto “arq2.sai” com 8 dígitos. Save arq3.sai X Y Z -ascii -double

salva as matrizes X., Y e Z no arquivo texto “arq3.sai” com 16 dígitos.

Page 45: apostila_matlab

45

Os dados obtidos por outros programas podem ser importados pelo MATLAB, desde que

estes dados sejam gravados em disco no formato apropriado. Se os dados são armazenados no formato ASCII, e no caso de matrizes, com colunas separadas

por espaços e cada linha da matriz em uma linha do texto, o comando load pode ser usado. Por exemplo suponha que um programa em linguagem C, depois de

executado, monta o arquivo “teste.sai” (mostrado abaixo) que contém uma matriz.

1.0000 2.0000 3.0000

4.0000 5.0000 6.0000

7.0000 8.0000 9.0000

Executando o comando:

>> load teste.sai o MATLAB importa a matriz, que passa a se chamar teste: >> teste

teste =

1 2 3 4 5 6 7 8 9

Obviamente, o MATLAB pode também importar (através do comando load) os dados que foram anteriormente exportados por ele. Por exemplo, para importar as variáveis X, Y e Z, anteriormente exportadas usando o comando save, pode-se fazer:

save load save X load x save arq1 X Y Z load arq1 save arq2.sai X Y Z -ascii load arq2.sai save arq3.sai X Y Z -ascii -double load arq3.sai

Deve-se ressaltar que o comando save, quando usado para exportar os dados do MATLAB em formato texto, exporta apenas um bloco contendo todas as variáveis. E quando importamos estes comandos através do comando load, apenas uma variável com nome do arquivo é importada. Por exemplo >> X=rand(3,3) X =

0.2190 0.6793 0.5194 0.0470 0.9347 0.8310 0.6789 0.3835 0.0346

>> Y = rand(3,3)

Page 46: apostila_matlab

46

Y = 0.0535 0.0077 0.4175 0.5297 0.3835 0.6868 0.6711 0.0668 0.5890

>> save arq2.sai X Y -ascii >> clear >> load arq2.sai >> arq2 arq2 = 0.2190 0.6793 0.5194 0.0470 0.9347 0.8310 0.6789 0.3835 0.0346 0.0535 0.0077 0.4175 0.5297 0.3834 0.6868

0.6711 0.0668 0.5890 13. O Debugger do MATLAB

Este capítulo descreve comando que auxiliam na descoberta de erros que ocorrem durante o tempo de execução. Apesar da linguagem que MATLAB utiliza ser menos complexa que as outras linguagens de programação, ele possui sua própria sintaxe, e talvez seja necessário reparar alguns erros que venham a acontecer. MATLAB encontra erros de sintaxe durante a compilação. Estes erros usualmente são fáceis de consertar. MATLAB também pode encontrar erros durante o tempo de execução; estes erros tendem a ser mais difíceis de serem repararados, pois o espaço de trabalho local à função é perdido quando um erro força o retorno ao prompt do MATLAB e ao espaço de trabalho principal. Se utiliza-se o ponto-e-vírgula para que os resultados imediatos das linhas de comando não sejam mostrados, não se saberá onde ocorreu o erro. Para se mostrar os resultados intermediários, pode-se utilizar qualquer um dos métodos abaixo:

Remover os ponto-e-vírgulas de forma que se possa visualizar os resultados imediatos. Adicionar o comando keyboard para que se possa examinar a situação do espaço de trabalho

no ponto onde keyboard foi inserido. Retirar a declaração de function para que os arquivos-M possam ser executados como script,

tornando os resultados intermediários disponíveis no espaço de trabalho principal. Utilizar o debugger do MATLAB. Os três primeiros métodos requerem a edição do arquivo-M. O último método foi introduzido

a partir da versão 4.0 do MATLAB, e os seus comandos são:

dbstop Introduz uma interrupção dbclear Remove a interrupção dbcont Continua a execução dbdown Muda o contexto do espaço de trabalho local dbstatus Lista todas as interrupções dbstep Executa uma ou mais linhas dbtype Lista os arquivos-M com o número das linhas dbup Muda o contexto do espaço de trabalho local dbquit Finaliza o modo debug

Page 47: apostila_matlab

47

14. Arquivos E/S

As funções de E/S de arquivo do MATLAB que permitem a leitura e a escrita em formato diferente ao gerados pelo mesmo são descritas neste capítulo. As funções de E/S (Entrada/Saída) de arquivo do MATLAB permitem a leitura de dados coletados em outro formato diretamente pelo MATLAB, ou a escrita de dados gerados pelo MATLAB no formato requerido por outro programa ou dispositivo. As funções lêem e gravam arquivos de texto formatados e arquivos binários de dados. 14.1 Abrindo e Fechando Arquivos

Antes de se ler ou escrever em um arquivo, deve-se abri-lo com o comando fopen, especificando o arquivo a ser aberto e a string de permissão. Por exemplo, >> fid = fopen(‘pen.dat’,’r’) abre para leitura o arquivo pen.dat. As strings de permissão disponíveis são: ’r’ para leitura ‘w’ para gravação ‘a’ para atribuição ‘r+’ tanto para leitura como para gravação

Outras strings de permissão podem ser obtidas com o comando help fopen. A função fopen retorna um identificador de arquivo, que é um inteiro positivo atribuído ao

arquivo pelo sistema operacional. Este identificador de arquivo é basicamente um atalho para se referenciar o arquivo. As funções de E/S de arquivo do MATLAB utilizam o identificador como argumento para identificar o arquivo aberto para leitura, escrita ou encerramento. Se o arquivo não pode ser aberto, fopen retorna -1 como identificador. É aconselhável testar o identificador cada vez que um arquivo é aberto. Um segundo valor que é retornado pode fornecer informação adicional sobre erros. Por exemplo, se MATLAB não encontra o arquivo pen.dat, o comando >> [fid, message] = fopen(‘pen.dat’,’r’) atribui -1 para fid, e message recebe uma string com a forma abaixo No such file or directory.

Uma vez aberto, o arquivo fica disponível para leitura e gravação. Quando se termina a leitura ou a gravação, usa-se fclose para fechar o arquivo. Por exemplo, >> status = fclose(fid) fecha o arquivo associado com o identificador fid, e >> status = fclose(‘all’) fecha todos os arquivos abertos. Ambas as formas retornam 0 se esta operação for realizada com sucesso, ou -1 se algo de errado acontecer. 14.2 Leitura de Arquivos com Dados em Binário

A função fread lê arquivos de dados binários. Na sua forma mais simples, ele lê um arquivo inteiro em uma matriz. Por exemplo, >> fid = fopen(‘pen.dat’,’r’); >> A = fread(fid); >> status = fclose(fid);

Lê todos os dados do demo penny como caractere, e os escreve em uma matriz A. Dois argumentos opcionais a fread fazem o controle do número de valores lidos e a precisão de cada valor. >> fid = fopen(‘pen.dat’,’r’); >> A = fread(fid,100); >> status = fclose(fid);

Page 48: apostila_matlab

48

Lê os 100 primeiros valores de dados em um vetor coluna A. Substituindo o número 100 pelas dimensões de uma matriz [10,10], faz com que sejam lidos os mesmos 100 elementos, armazenando-os em uma matriz 10x10. E >> A = fread(fid,Inf)

Lê até o final do arquivo, preenchendo a matriz A como um vetor coluna. Omitir o tamanho do argumento produz o mesmo efeito. O argumento de precisão numérica controla o número de bits lidos em cada valor e a interpretação destes bits como valores caractere, inteiro ou ponto flutuante. Algumas precisões comuns incluem ‘char’ e ‘uchar’ para caracteres com sinal e sem sinal (tipicamente 8 bits) ‘short’ e ‘long’ para inteiros curtos e longos (tipicamente 16 e 32 bits, respectivamente) ‘float’ e ‘double’ para valores em ponto flutuante de precisão simples e dupla (tipicamente 32 e 64 bits, respectivamente)

Se fid se referir a um arquivo aberto contendo valores em ponto flutuante, então >> A = fread(fid,10,’float’)

Lê 10 valores em ponto flutuante preenchendo um vetor coluna A. 14.3 Escrevendo em Arquivos com Dados em Binário

A função fwrite escreve os elementos de uma matriz em um arquivo com uma precisão numérica específica, retornando o número de valores escritos. Por exemplo, >> fwriteid = fopen(‘magic5.bin’,’w’); >> count = fwrite(fwriteid,magic(5),’integer*4’); >> status = fclose(fwriteid);

Cria um arquivo binário de 100 bytes contendo os 25 elementos da matriz quadrada 5x5, armazenados em inteiros de 4 bytes. Isto atribui 25 à variável count. 14.4 Escrevendo Arquivos de Texto Formatados e Strings

A função fprintf converte dados em strings de caractere e os mostra na tela ou em um arquivo. O formato de saída é definido por um especificador de conversão e por um texto. Os especificadores de conversão controlam a saída dos elementos de uma matriz. Os textos são copiados diretamente. Os especificadores são precedidos pelo caractere %; conversões comuns incluem %e para notação exponencial %f para notação de ponto fixo %g que seleciona automaticamente o menor entre %e e %f

Campos opcionais no especificador de formato controlam o tamanho e a precisão do campo. Por exemplo, >> x = 0: .1: 1; >> y = [x; exp(x)]; >> fid = fopen(‘exptable.txt’,’w’); >> fprintf(fid,’Exponential Function\n\n’); >> fprintf(fid,’%6.2f %12.8f\n’,y); >> status = fclose(fid);

Cria um arquivo de texto contendo uma pequena tabela para a função exponencial. A primeira chamada a fprintf escreve o título, seguido por dois comandos ENTER, o qual é definido por \n. A segunda chamada escreve a tabela propriamente dita. As strings de controle de formato definem o formato de cada linha da tabela como: - um valor de ponto fixo de seis caracteres com duas casas decimais - dois espaços - um valor de ponto fixo de doze caracteres com oito casas decimais

Page 49: apostila_matlab

49

14.5 Lendo Arquivos de Texto Formatados e Strings

A função de entrada de texto do MATLAB, fscanf, é similar à função fprintf. fscanf possui como argumento o identificador para o arquivo de texto aberto, e uma string de controle do formato contendo caracteres e especificadores de conversão, nesta ordem. Os especificadores para fscanf são precedidos pelo caractere %; conversões comuns incluem %s para converter uma string %d para converter um número decimal %f para converter um valor em ponto flutuante O exemplo a seguir faz a leitura do arquivo com os dados exponenciais escrito anteriormente: >> fid = fopen(‘exptable.txt’,’r’); >> title = fscanf(fid,’%s’); >> [table,count] = fscanf(fid,’ %d %f ‘); >> status = fclose(fid);

A linha do título combina com o especificador %s na primeira chamada à fscanf. A segunda chamada entra com a tabela de valores, combinando alternadamente um valor decimal e um valor em ponto flutuante, como é lido em cada linha da tabela, até que o fim do arquivo seja atingido. count retorna o número de valores combinados.

Um argumento opcional controla o número de elementos lidos da matriz. Por exemplo, se fid faz referência a um arquivo aberto contendo os strings de decimal então >> A = fscanf(fid,’%5d’,100); faz a leitura de 100 valores decimais para um vetor coluna A, e >> A = fscanf(fid,’%5d’,[10,10]);

Faz a leitura de 100 valores decimais para uma matriz A 10x10.

15. Gráficos Avançados

O sistema gráfico do MATLAB incorpora uma variedade de técnicas sofisticadas para apresentação e visualização de dados. Este sistema é construído através de um conjunto de objetos gráficos, tais como linhas e superfícies, cuja presença pode ser controlada pelo ajuste dos valores das propriedades de cada objeto. Entretanto, em virtude do MATLAB possibilitar um rico ajuste nas funções gráficas 2-D e 3-D, na maior parte do tempo não é necessário acessar estes objetos gráficos, os quais são considerados objetos de baixo nível. 15.1 Gráficos 2-D 15.1.1 Importando Dados

MATLAB permite que sejam importados e plotados dados gerados fora dele. Suponhando um arquivo, weather.dat, contendo a média de temperatura e precipitação dos meses, armazenadas em doze linhas de um texto em ASCII: 30 4.0 31 3.7 38 4.1 49 3.7 59 3.5 68 2.9 74 2.7 72 3.7 65 3.4

Page 50: apostila_matlab

50

55 3.4 45 4.2 34 4.9 O comando, >> load weather.dat Produz uma matriz 12 por 2. A linha de comando >> temp = weather(:,1); >> precip = weather(:,2); Armazena as colunas de temperatura e precipitação em vetores individuais.

Pode-se plotar tanto a temperatura como a precipitação em função do mês correspondente, em uma mesma figura, fazendo-se uso dos comandos plot e subplot: >> subplot(2,11) >> plot(temp) >> subplot(2,1,2) >> plot(precip)

Um gráfico scatter também é um modo útil de se apresentar os dados. As linhas de comando a seguir produzem um gráfico scatter mostrando a relação entre a temperatura e a precipitação em cada mês: >> month = [‘Jan’; ‘Feb’; ‘Mar’; ‘Apr’; ... ‘May’; ‘Jun’; ‘Jul’; ‘Aug’; ... ‘Sep’; ‘Oct’; ‘Nov’; ‘Dec’]; >> plot(temp,precip,’o’) >> axis([28 80 2.5 5.2]) >> xlabel(‘temp’) >> ylabel(‘precip’) >> title(‘Boston’)

A linha de comando axis, do exemplo, acima introduz espaço extra ao gráfico através do ajuste da escala dos eixos a valores maiores que a faixa de dados. Isto permite que o texto fique dentro do gráfico. 15.1.2 Funções Especiais para Gráficos 2-D

MATLAB inclui uma variedade de funções especiais para gráficos, necessárias em muitas aplicações. A lista a seguir descreve algumas delas. bar - cria um gráfico do tipo barra compass - cria um gráfico de ângulos e módulos de números complexos onde a representação dos pontos é feita por setas com início na origem errorbar - cria um gráfico com barras de erro feather - cria um gráfico de ângulos e módulos de números complexos onde a representação dos pontos é feita por setas com começo em pontos igualmente espaçados ao longo do eixo horizontal fplot - avalia uma função e plota os resultados hist - cria um histograma polar - cria um gráfico em coordenadas polares dos ângulos em função dos raios quiver - cria um gráfico do gradiente ou de outro campo do vetor rose - cria um histograma de ângulo stairs - cria um gráfico similar a um gráfico de barra, mas sem as linhas internas fill - desenha um polígono e o preenche com cores sólidas ou interpoladas

Page 51: apostila_matlab

51

15.1.3 Polígonos Preenchidos

A função fill define uma área polinomial cujo interior é preenchido com uma cor especificada. Se é especificada uma cor para cada ponto, MATLAB utiliza interpolação bilinear para determinar a cor da parte interna. Por exemplo, >> t = 0:.05:2*pi; >> x = sin(t); >> fill(x,t,’b’)

Produz um polígono preenchido pela cor azul. Para criar uma área preenchida com uma interpolação de cores, utiliza-se o comando colormap

da forma descrita abaixo: >> colormap(hot) >> fill(x,t,x)

A sombra varia do escuro para o claro à medida que o valor de sin(t) varia de um mínimo até um máximo (o que corresponde da esquerda para a direita no gráfico). 15.1.4 Plotando Funções Matemáticas

Existem várias maneiras diferentes de se plotar os gráficos de funções, y = f(x). Uma aproximação que simplesmente avalia a função em alguns pontos no intervalo de interesse é descrita pelas linhas de comando abaixo. No caso, a função oscila infinitamente no intervalo . >> x = (0:1/2000:1)’; >> plot(x,cos(tan(pi*x)))

Essas linhas de comandos produzem o gráfico da função na faixa de 0 a 1. função fplot é uma aproximação mais elegante, visto que ela amostra a função com um

número suficiente de pontos que forneça uma representação gráfica decente. Enquanto que a representação anterior avaliava a função em intervalos espaçados constantemente, fplot concentra a sua avaliação sobre regiões onde a taxa de variação da função é maior. Para avaliar uma função, deve-se criar um arquivo função e passar o nome do arquivo para fplot. Por exemplo, o arquivo função a seguir define uma função, chamada fofx, do exemplo anterior: function y = fofx(x) y = cos(tan(pi*x));

Passa-se o nome desta função para fplot para que seja avaliada e plotada. Em virtude da função oscilar infinitamente na faixa de avaliação, o número de interações usadas para preencher a região onde ocorrem as rápidas variações é reduzido com relação ao ajuste padrão para prevenir de um tempo de computação excessivamente longo. >> fplot(‘fofx’, [0 1], 25, 20, 10)

Neste exemplo, fplot utiliza menos pontos para avaliar a mesma função, mas agora amostra a função em intervalos menores em uma região onde a taxa de variação é a maior, gerando uma figura mais precisa nas proximidades de x = 0.5. 15.2 Gráficos 3-D

MATLAB possui uma variedade de funções para exibir dados em 3-D. Algumas plotam linhas em três dimensões, enquanto outras desenham superfícies e figuras utilizando “pseudocores” para representar uma quarta dimensão. A lista a seguir mostra essas funções: plot3 - plota linhas e pontos em 3-D contour, contour3 - cria gráficos de contorno pcolor - desenha uma matriz retangular de células cujas cores são determinadas pelos elementos da matriz image - mostra uma matriz como uma imagem através do mapeamento dos elementos da matriz pelo mapa de cores ativo

Page 52: apostila_matlab

52

mesh, meshc, meshz - cria gráficos 3-D em perspectiva dos elementos da matriz, mostrados como alturas acima de um plano delimitado surf, surfc, surfl - cria gráficos 3-D em perspectiva dos elementos da matriz, mostrados como alturas acima de um plano delimitado. O gráfico é formado pela geração de uma superfície colorida utilizando os pontos como vértices de um quadrilátero. fill3 - cria um polígono 3-D a o preenche com cores sólidas ou interpoladas Obs.: Será utilizado o termo “superfície mesh” para indicar os gráficos criados através do comando mesh. Além das funções de inserção de comentários e notas mostradas para os gráficos 2-D, MATLAB possui as seguintes funções para os gráficos 3-D: zlabel - define um nome para a variável do eixo z clabel - define identificações para os contornos em gráficos de contorno

MATLAB permite a especificação do ponto de visualização do gráfico. Em geral, as vistas são definidas por uma matriz de transformação 4 por 4 que o MATLAB utiliza para transformar um gráfico 3-D em uma tela 2-D. Entretanto, a função abaixo permite a especificação do ponto de visão de uma maneira simplificada: view - ajusta o ponto de visão atual onde os parâmetros de entrada podem ser o azimute (rotação horizontal) e a elevação vertical, ambos em grau, ou as coordenadas cartesianas. 15.2.1 Gráficos de Linhas

O análogo tridimensional da função plot é a função plot3. Se x, y e z são vetores de mesmo tamanho, >> plot3(x,y,z)

Gera uma linha no espaço tridimensional que passa pelos pontos de coordenadas dadas pelos elementos dos vetores x, y e z, e depois produz uma projeção bidimensional desta linha na tela.. Por exemplo >> t = 0:pi/50:10*pi; >> plot3(sin(t),cos(t),t); Produz um helicóide. Se X, Y e Z são três matrizes de mesma dimensão, >> plot3(X,Y,Z)

Traça as linhas obtidas pelas colunas de X, Y e Z. Para especificar vários tipos de linhas, símbolos gráficos e cores, usa-se a linha de comando plot3(X,Y,Z,s), onde s é uma string de 1, 2 ou 3 caracteres formada pelos caracteres listados com a função plot. >> plot3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3.s3,...)

Combina os gráficos definidos por cada grupo de elementos (x, y, z, s), onde x, y e z são vetores ou matrizes e s são as strings. 15.2.2 Meshgrid

MATLAB define uma superfície mesh pelas coordenadas z dos pontos, situando-a acima de uma área retangular no plano x-y. Desta forma, um gráfico é formado pela ligação dos pontos adjacentes com linhas retas. Superfícies mesh são úteis para visualização de matrizes que são muito grandes para serem mostradas na forma numérica, e funções gráficas de duas variáveis.

O primeiro passo para que seja mostrada uma função de duas variáveis, z = f(x,y), é gerar as matrizes X e Y consistindo de linhas e colunas repetidas, respectivamente, sobre o domínio da função. Depois utiliza-se estas matrizes para avaliar e plotar a função.

A função meshgrid transforma o domínio especificado por dois vetores, x e y, em matrizes, X e Y. Utiliza-se estas matrizes para avaliar funções de duas variáveis. As linhas de X são cópias do vetor x e as colunas de Y são cópias do vetor y. Para ilustrar o uso da função meshgrid, considere a

Page 53: apostila_matlab

53

função sin(r)/r, também chamada função sinc. Para avaliar esta função entre -8 e 8, tanto em x como em y, passa-se como argumento dois vetores para a função meshgrid criando as matrizes necessárias: >> x = -8:.5:8; >> y = x; >> [X,Y] = meshgrid(x,y); >> R = sqrt(X.^2 + Y.^2) +eps; >> Z = sinc(R); >> mesh(Z)

A matriz R contém a distância dos pontos ao centro da matriz, o qual é a origem. Adiconando eps evita a divisão por zero, o que produz NaNs no dados. 15.2.3 Gráficos de Contorno MATLAB possui funções para gerar gráficos de contorno tanto para 2-D como para 3-D. As funções contour e contour3 geram gráficos compostos de linhas obtidas da matriz entrada como argumento. Existe a opção de se especificar o número de linhas de contorno, a escala dos eixos e o valor dos dados com os quais se desenhará as linhas de contorno. Por exemplo, a linha de comando abaixo cria um gráfico de contorno contendo 20 linhas de contorno e usando o arquivo-M peaks para gerar os dados de entrada. >> contour(peaks,20)

Os círculos de contorno agem da mesma forma que a função plot com relação a estilos de linha, marcadores e cores. Para criar um gráfico de contorno 3-D com os mesmo dados, utiliza-se a função contour3: >> contour3(peaks,20) 15.2.4 Gráficos de Pseudocores As linhas de comando, >> z = peaks; >> pcolor (z) >> colormap(hot)

Criam uma figura com a matriz peaks definida por um mapa de cores. O nome pcolor significa pseudocolor. Para cada ponto, z(i,j), um valor em escala do elemento da matriz, z(i,j), é usado como índice no mapa de cores para determinar a cor a ser mostrada naquele ponto.

O mapa de cores é uma matriz com três colunas que especificam a intensidade das três componentes de vídeo: vermelho, verde e azul. Neste caso, o mapa de cores especificado mapeia o menor dado como preto e o maior dado como branco. Os valores entre estes dois valores são mapeados com sombras de vermelho, laranja e amarelo. Isto é útil pois a escala contínua de cores do preto ao branco faz representar o contorno da função peaks. Os possíveis mapas de cores podem ser obtidos através da linha de comando help color.

15.2.5 Gráficos de Superfícies e Mesh

As funções mesh e surf mostram superfícies em três dimensões. Se Z é uma matriz cujo os elementos Z(i,j) definem a altura da superfície com relação a uma área delimitada (i,j), então >> mesh(Z)

Gera uma figura da superfície, colorida e definida por linhas, e a mostra em uma projeção em perspectiva. Da mesma forma >> surf(Z)

Gera uma figura da superfície, colorida e definida por faces, e a mostra em uma projeção em perspectiva. Ordinariamente, as faces são quadriláteros com cores constantes, delineadas por linhas mesh pretas, mas a função shading permite que sejam eliminadas estas linhas.

Page 54: apostila_matlab

54

Quando mesh(Z) e surf(Z) são usados com simples matrizes como argumentos, este argumento especifica tanto a altura quanto as cores da superfície. Para a matriz peaks utilizada anteriormente >> mesh(peaks) produz uma superfície mesh para a função peaks Matrizes de Cores Utilizando duas matrizes como argumentos, as linhas de comando, >> mesh(Z,C) ou >> surf(Z,C)

Especifica independentemente através do segundo argumento, as cores a serem mostradas na superfície. Com pcolor©, os valores de C são postos em escala e usados como índices no mapa de cores selecionado. No caso, C é chamada matriz de cores. Quando a superfície de dados contém NaNs, estes elementos não são plotados. Isto cria um falha na superfície no lugar correspondente. Definindo alguns elementos na matriz de cores como NaNs, é uma maneira útil de tornar regiões da superfície invisíveis. Por exemplo, a linha de comando abaixo produz uma falha na superfície definida pela matriz peaks: >> p = peaks; >> p(30:40,20:30) = nan*p(30:40,20:30); >> mesh(peaks,p) Superfícies Paramétricas

As funções mesh, surf e pcolor podem ter dois vetores ou matrizes adicionais como argumento, com a função de descrever a superfície com os dados x e y. Se Z é uma matriz m por n, e x e y são vetores de dimensões n e m respectivamente, então >> mesh(x, y, Z, C)

Descreve uma superfície mesh cujo os vértices possuem cores C(i,j) e estão localizados nos pontos (x(j), y(i), Z(i, j)) Perceba que x corresponde à coluna e y à linha da matriz Z.. De maneira mais geral, se X, Y, Z e C são matrizes de mesmas dimensões, então >> mesh(X, Y, Z, C)

Descreve uma superfície mesh cujo os vértices possuem cores C(i,j) e estão localizados no pontos (X(i,j), Y(i,j), Z(i,j))

As mesmas considerações podem ser aplicadas para a função surf(X, Y, Z, C), etc. Variações de surf e mesh

MATLAB possui funções que produzem combinações nos gráficos baseados nas funções surf e mesh. Por exemplo, surfc desenha uma superfície com contorno bidimensional no plano z = 0. Da mesma forma, existem as funções surfl, meshc e meshz. 15.3 Funções Gráficas de Propósito Geral

Serão descritas abaixo funções para controle de aparência dos gráficos criados com as funções descritas anteriormente.

Page 55: apostila_matlab

55

15.4.1 Ponto de Vista

MATLAB permite que seja especificado o ângulo do qual visualiza-se um gráfico 3-D. A função view define o ângulo de visão em coordenadas esféricas através da especificação do azimute (rotação horizontal) e da elevação vertical do ponto de vista, com relação a origem dos eixos. O azimute é um ângulo polar no plano x-y, sendo positivo quando a rotação for no sentido horário com relação ao ponto de vista. A elevação vertical é o ângulo acima (ângulo positivo) ou abaixo (ângulo negativo) do plano x-y. Por exemplo, as quatro linhas de comando abaixo proporcionam quatro maneiras diferentes de se visualizar a função peaks. >> view(-37.5,30) >> view(-7,80) >> view(-90,0) >> view(-7,-10) 15.4.2 Controlando os Eixos com a função axis

A função axis possui várias opções que permitem que sejam personalizados escala e orientação. Ordinariamente, MATLAB encontra os valores de máximo e mínimo da função a ser plotada e escolhe uma área de plotagem apropriada. Pode-se redefinir os limites pelo ajuste dos limites do eixos: >> axis([xmin xmax ymin ymax]) Ou para um gráfico 3-D: >> axis([xmin xmax ymin ymax zmin zmax])

• axis(‘auto’) retorna a escala do eixo para seu valor padrão, o modo automático. v = axis salva a escala dos eixos do gráfico que está ativo no vetor v. Para que gráficos subsequentes possuam os mesmos limites, basta entrar com o comando axis(v).

• axis(axis) congela a escala nos valores que estão sendo usados. • axis(‘ij’) define MATLAB no seu modo de eixo matriz. A origem do sistema de coordenadas

se encontra no canto superior esquerdo. O eixo i é vertical e é numerado de cima para baixo. o eixo j é horizontal e é numerado da esquerda para a direita.

• axis(‘xy’) define MATLAB com os eixos cartesianos. A origem do sistema de coordenadas se encontra no canto inferior esquerdo. O eixo x é horizontal e é numerado da esquerda para a direita. O eixo y é vertical e é numerado de baixo para cima.

• axis(‘on’) e axis(‘off’) fazem com que o nome do eixo e os marcadores apareçam ou não, respectivamente, junto com o gráfico.

15.3.3 Tornando Visível Linhas e Superfícies Escondidas

O comando hidden permite que se enxergue através de uma superfície de modo a se poder visualizar possíveis figuras que estejam atrás desta superfície. Este comando se faz útil quando estão sendo plotadas várias figuras em um único gráfico. Por exemplo, as linhas de comando a seguir fazem com que os dados gerados por pcolor possam ser visualizados através do gráfico de peaks. >> mesh(peaks(20)+7) >> hold >> pcolor(peaks(20)) >> hidden off

Page 56: apostila_matlab

56

15.3.4 Subgráficos

Podem ser mostrados vários gráficos em uma mesma janela ou imprimi-los em uma mesma folha de papel com a função subplot.

• subplot(m,n,p) divide a janela em uma matriz m por n de subregiões e seleciona a p-ésima subregião para o gráfico que está sendo plotado no momento.

Os gráficos são numerados começando pela primeira linha na parte superior da janela; em seguida, a segunda linha, e assim segue. Por exemplo, >> t = 0:pi/10:2*pi; >> [X,Y,Z] = cylynder(4*cos(t)); >> subplot(2,2,1) >> mesh(X) >> subplot(2,2,2) >> mesh(Y) >> subpoot(2,2,2) >>mesh(Y) >> subplot(2,2,3) >> mesh(Z) >> subplot(2,2,4) >> mesh(X,Y,Z) Traça dados em quatro diferentes subregiões na janela de gráficos. 15.3.5 Figura

Chamando a função figure sem argumentos faz com que seja aberto uma nova janela gráfica. • figure(N) faz com que a N-ésima figura se torne a figura atual; o resultado dos comandos

gráficos subsequentes são mostrados nesta janela. Se a figura N não existe, MATLAB cria uma usando o próximo número disponível (não necessariamente N).

A função ginput permite que sejam utilizados o mouse ou as teclas de seta para selecionar pontos no gráfico. Isto fornece as coordenadas da posição do ponteiro. 15.4 Mapas de Cores e Controle de Cores

MATLAB define o mapa de cores como sendo uma matriz de três colunas. Cada linha da matriz define uma cor particular através de três valores dados na escala de 0 a 1. Estes valores especificam a intensidade das componentes de vídeo azul, verde e vermelho. Algumas cores estão listadas na tabela abaixo:

Vermelho Verde Azul Cor 0 0 0 preto 1 1 1 branco 1 0 0 vermelho 0 1 0 verde 0 0 1 azul 1 1 0 amarelo 1 0 1 magenta 0 1 1 ciano .5 .5 .5 cinza .5 0 0 vermelho escuro

Page 57: apostila_matlab

57

Os mapas de cores podem ser fornecidos por tabelas, ou gerados em operações de matrizes. O diretório color do toolbox do MATLAB possui várias funções que geram mapas úteis, incluindo hsv, hot, cool, pink, copper e flag. Cada função possui um parâmetro opcional, m, o qual especifica o número de linhas no mapa resultante. Por exemplo >> hot(m)

É uma matriz m por 3, cuja as linhas especificam a intensidade das cores padrões de um mapa que varia de preto, passando por sombras de vermelho, laranja e amarelo, até o branco. Se o tamanho do mapa de cores não é especificado, MATLAB utiliza m = 64 como valor padrão. Isto permite três ou quatro figuras, onde cada uma possui sua tabela de 256 cores. A linha de comando, >> colormap(M)

Faz com que a matriz de mapa de cores M seja usada pela figura ativa. Por exemplo, >> colormap(hot)

Torna ativo o mapa de cores hot de tamanho 64. Desde que as funções mesh, surf, pcolor e image utilizam mapas de cores, todas as outras funções que são derivadas destas quatro também o fazem. As funções plot, plot3, contour e contour3 não fazem uso dos mapas de cores. 15.4.1 Mostrando Mapas de Cores

As funções pcolor são úteis para mostrar mapas de cores. Por exemplo, para visualizar um mapa de cores em tons de cinza tendo oito entradas, utiliza-se as seguintes linhas de comando: >> colormap(gray(8)) >> pcolor([1:9;1:9]’) 15.4.2 Alterando os Mapas de Cores

O fato de os mapas de cores serem matrizes, permite que sejam manipulados como qualquer outra matriz. A função brighten utiliza esta vantagem para ajustar um dado mapa de cores de forma que a intensidade das cores escuras aumente ou diminua.

Pode-se combinar mapas de cores aritmeticamente, embora os resultados sejam inesperados em algumas vezes. 15.5 Manuseamento de Gráficos

As características gráficas apresentadas até aqui fazem parte da interface de alto-nível do sistema gráfico do MATLAB. Entretanto, este sistema também fornece um ajuste das funções de baixo-nível que permitem que sejam criadas e manipuladas linhas, superfícies e outros objetos gráficos que MATLAB utiliza para produzir gráficos sofisticados. Este sistema é denominado Handle Graphics. 15.5.1 Objetos Gráficos

MATLAB define os objetos gráficos como sendo os desenhos mais primitivos de seu sistema gráfico, e os organiza em uma hierarquia estruturada em árvore. Este objetos incluem a tela raiz (root screen), figuras (figures), eixos (axes), linhas (lines), patches (patches), superfícies (surfaces), imagens (images), texto (text), e interface de controle (uicontrol) e menus (uimenu) para o usuário.

O objeto root é a raiz da hierarquia. Ele corresponde a tela do computador. Existe somente um objeto raiz, sendo todos os outros objetos seus descendentes.

Objetos figure correspondem às janelas individuais na tela raiz. Pode existir qualquer número de objetos figura, onde cada qual é descendente do objeto raiz. Os demais objetos gráficos são descendentes das janelas de figura. Todos as funções de criação de objetos e todas as funções de alto-

Page 58: apostila_matlab

58

nível criam uma figura se ela não existe. Pode-se também criar uma figura utilizando-se a função figure.

Objetos axes definem uma região na janela de figura e orienta os seus descendentes nesta região. Eixos são descendentes de figuras e são superiores a linhas, superfícies, texto, imagens e patches. Todos as funções de criação de objetos e todas as funções de alto-nível criam objetos eixo se eles não existem. Pode-se criar eixos diretamente utilizando-se a função axes.

Objetos line são usados para criar a maioria dos gráficos 2-D e alguns 3-D. Eles são descendentes dos eixos e suas posições são definidas pelo sistema de coordenadas estabelecido pelo seus superiores (eixos). Objetos linha são criados por plot, plot3, contour e contour3.

Objetos patch são definidos pelos polígonos preenchidos. Eles são descendentes dos eixos e suas posições são definidas pelo sistema de coordenadas estabelecido pelo seus superiores (eixos). Este objetos podem ser preenchidos com cores sólidas ou interpoladas. fill e fill3 cria objetos patch.

Objetos surface são representações 3-D dos dados de uma matriz. Eles são compostos de quadriláteros cujo os vértices são especificados pelos dados definidos. Superfícies podem ser preenchidas com cores sólidas ou interpoladas ou somente com uma rede de linhas ligando os pontos. Eles são descendentes dos eixos e suas posições são definidas pelo sistema de coordenadas estabelecido pelo seus superiores (eixos). pcolor e o grupo de funções de mesh e surf criam os objetos superfície.

Objetos image é dado pelo resultado do mapeamento dos elementos de uma matriz com o mapa de cores se encontra ativo. Imagens, geralmente, possuem seu próprio mapa de cores que definem somente as cores usadas naquela imagem. Imagens são 2-D e, portanto, não podem ser vistas por nenhum ângulo diferente do padrão. Eles são descendentes dos eixos e suas posições são definidas pelo sistema de coordenadas estabelecido pelo seus superiores (eixos). Objetos imagem são criados através da função image.

Objetos text são as strings de caracteres. Eles são descendentes dos eixos e suas posições são definidas pelo sistema de coordenadas estabelecido pelo seus superiores (eixos).

Objetos uicontrol são interfaces de controle que permitem ao usuário executar funções quando é selecionado um objeto com o mouse. Eles são descendentes das figuras e, portanto, são independentes dos eixos.

Objetos uimenu são interfaces de menu que permitem o usuário criar menus na parte superior da janela de figura. Eles são descendentes das figuras e, portanto, independentes dos eixos. Handle de Objetos

Cada objeto gráfico individual possui um único identificador (chamado handle) que é atribuído ao objeto quando ele é criado. Alguns gráficos tais como contour plot, são compostos de múltiplos objetos, cada qual com seu próprio handle. O handle do objeto raiz é sempre zero enquanto que o de uma figura é um inteiro. O handle de outros objetos são números decimais que contém informações utilizadas pelo MATLAB. MATLAB define as seguintes funções para simplificar o acesso aos handles dos objetos:

• gcf - informa o handle da figura ativa • gca - informa o handle do sistema de eixos ativo Pode-se utilizar estas funções como argumentos de entrada de outras funções que requeiram os

handles de gráficos e eixos. Pode-se, também, remover qualquer objeto utilizando a função delete, descrevendo como argumento o handle do objeto. Por exemplo, os eixos atuais podem ser apagados através da linha de comando: >> delete(gca)

Todas as funções do MATLAB que criam objetos, criam handles para estes objetos. Isto inclui funções de alto-nível, tais como surfc, a qual cria tanto objeto linha como objeto superfície.

Page 59: apostila_matlab

59

Funções de Criação de Objetos

Todos os objetos são criados por funções de mesmo nome (a função text cria um objeto texto, a função figure cria um objeto figura, etc.). As funções gráficas de alto-nível do MATLAB chamam a função de baixo-nível apropriada para desenhar seus respectivos gráficos.

Muitas funções de alto-nível ajustam as propriedades do objeto com a finalidade de produzirem um resultado particular. As funções de baixo-nível simplesmente criam um dos nove objetos gráficos definidos pelo MATLAB (não se pode criar um novo objeto raiz) e os coloca no objeto-mãe apropriado. Por exemplo, chamando a função line, >> line

MATLAB desenha a linha no eixo que está ativo usando os valores de dado padrão. Se não houver eixo, MATLAB cria um. Se não houver uma janela de figura onde possam ser criados os eixos, MATLAB também cria uma janela. Se é chamada a função line pela segunda vez, uma linha é desenhada nos eixos existentes (diferentemente com relação a função plot, por exemplo, a qual substitui os eixos em cada chamada). Esta característica é útil quando se quer adicionar um objeto a uma figura existente. Pode-se obter o mesmo resultado utilizando o comando hold. 15.5.2 Propriedades dos Objetos

Todos os objetos possuem propriedades que definem como eles são mostrados. Estas propriedades incluem informações gerais tais como o tipo do objeto, seus descendentes (children) e superiores (parent), o que está ou não visível, bem como informações únicas de um determinado objeto tais como os dados utilizados para se determinar um objeto superfície.

Quando se cria um objeto, ele é inicializado com os valores padrões; destes, alguns podem ser alterados (outros são definidos pelo MATLAB como sendo somente para leitura).

Especificando e Alterando as Propriedades dos Objetos

MATLAB possui dois modos de ajuste dos valores das propriedades. Pode-se especificar as propriedades do objeto quando se chama a função de criação do objeto, ou depois que o objeto foi criado fazendo uso da função set. Por exemplo, a linha de comando, >> figh = figure(‘Color’,’white’) >> axh = axes(‘View’,[37.530],’XColor’,’k’,’YColor’,’k’,’ZColor’,’k’) >> surfh = surface(peaks,,’FaceColor’,’none’,’LineStyle’,’.’)

Cria três objetos e atribui valores às propriedades onde os valores padrões não são desejados.

Para o caso acima, a janela de figura criada possui fundo branco e as linhas dos eixos são definidas como sendo pretas (‘k’). O ângulo de visão é definido como tendo um azimute de -37.5&deg; e uma elevação de 30&deg;. Os dados para que a superfície seja gerada são fornecidos pela função peaks, e esta superfície é definida por pontos, não possuindo nenhuma cor dentro dos quadriláteros formados por estes pontos.

Page 60: apostila_matlab

60

Utilizando as Funções set e get

Uma outra forma de se especificar as propriedades dos objetos é referenciando este objeto depois de sua criação. Pode-se fazer isto utilizando o handle que é retornando pela função de criação.

A função set permite que seja ajustada qualquer propriedade do objeto pela especificação do handle do mesmo e pelo par propriedade/valor. Por exemplo, o exemplo anterior define uma superfície e salva seu handle em surfh. Pode-se alterar a propriedade do objeto referente ao estilo de linha (LineStyle), de uma linha pontilhado para uma linha sólida, através da linha de comando: >> set(surfh,’LineStyle’,’-‘)

Para se ter uma lista das propriedades que podem ser alteradas de um objeto particular, chama-

se a função set com o handle do objeto: >> set(surfh)

Para se fazer a alteração do valor de uma propriedade, utiliza-se a função get. Chamando-se a função get com o handle do objeto, obtêm-se a lista de todas as propriedades

para aquele objeto com o valores atuais: >> get(surfh)

Page 61: apostila_matlab

61

ANEXO – Analisando os Polinômios Interpoladores e os Comandos de Bibliotecas do Software Matlab (CESARE ALEXANDRE BORTOLETO) FORMAS INTERPOLADORAS

Consideremos (n+1) pontos distintos: , chamados de nós da interpolação, e os valores

de y=f(x) nesses pontos: . Através da função g(x) que interpola f(x)

podemos obter o valor de aproximadamente a partir dos pontos tabelados, tal que:

e (1)

, onde . Apresentaremos neste trabalho, a implementação de alguns métodos computacionais para a estimava desse valor que são: o Interpolador de Lagrange, Newton e Spline linear. Utilizamos como ferramenta computacional o software MATLAB. INTERPOLADOR DE LAGRANGE O polinômio interpolador de Lagrange é dado por:

. A forma mais simples para satisfazer (1) é impor que

e, para isso teremos:

onde . IMPLEMENTAÇÃO Para implementar o polinômio interpolador devemos usar notação vetorial dos dados tabelados, ou

seja, vetores x e y, onde o valor a ser interpolado c, pertence ao vetor x. Isto é:

e . A formatação dos números utilizada foi a científica com seis algarismos significativos. No entanto, testamos a execução dos programas em precisão dupla, isto é: a declaração dos dados e dos resultados foram do tipo long. x=input('Entre com o vetor x:'); b=input('Entre com o vetor F(x):'); c=input('Entre com o(s) valor(es) da interpolação:'); [l,n]=size(x); % Dimensão do Vetor x. [l1,n1]=size(b); % Dimensão do Vetor F(x). if (l==l1) if (n==n1) % Verifica as dimensões dos vetores. Result=0; i=1; y=1;

Page 62: apostila_matlab

62

for (Cont=1:n) % Faz a interpolação de 1 até n-> Nº de colunas do vetor. l=1; for(j=1:n) % Calcula todos os polinômios. if (y~=j) l=l*[(c-x(i,j))/(x(i,y)-x(i,j))]; end end Result=Result+l*b(1,Cont); %Armazena o Valor da Interpolação. y=y+1; j=1; end disp (' ') disp ('O resultado da interpolação é:') disp (' ') disp (Result) else disp ('OBS: O Número de Abscissa deve conter o mesmo número de Ordenada e vice-versa') disp ('Favor entrar com outros Valores') end end end INTERPOLADOR DE NEWTON O método de Newton é dado por:

onde é denominado de operador diferenças divididas de ordem k entre os pontos , j = 0, 1, 2, ...., k. Definimos o operador diferenças divididas por:

Portanto para obtermos os operadores de diferenças divididas devemos construir a tabela:

Page 63: apostila_matlab

63

IMPLEMENTAÇÃO a=input('Entre com o vetor x:'); b=input('Entre com o vetor F(x):'); x=input('Entre com o(s) valor(es) da interpolação:'); a=a'; % Faz a transposta do vetor b=b'; % Faz a transposta do vetor [l,n]=size(a); % Dimensão do Vetor x. [l1,n1]=size(b); % Dimensão do Vetor F(x). if (l==l1) if (n==n1) % Verifica as dimensões dos vetores. e(1,1)=b(1,1); q=1; A=2; C=2; for (T=1:l) % Faz a interpolação de 1 até l-> Nº de linhas do vetor. i=1; j=1; d=0; q=q+1; for (z=2:l) % Calcula todos os polinômios. r=(b(z,j)-b(i,j))/(a(A,j)-a(i,j)); d(i,j)=r; if (i==1) e(q,1)=r; end A=A+1; i=i+1; end A=C+1; C=A; l=l-1; b=d;

Page 64: apostila_matlab

64

end end end [l,n]=size(e); i=1; for (N=1:l) p(i,1)=(x-a(i,1)); i=i+1; end i=2; I=1; J=l; X=1; H(1,1)=p(1,1); for(L=2:J) H(i,1)=H(I,1)*p(i,1); i=i+1; I=I+1; end i=1; I=1; P=e(i,1); l=l-1; for(l=1:l) i=i+1; P=P+e(i,1)*H(I,1); I=I+1; end disp (' ') disp ('O resultado da interpolação por Newton é:') disp (' ') disp (P) end SPLINE LINEAR Consideremos uma partição p do intervalo [a,b] tal que

(2)

A função spline linear interpolante de f(x), , nos nós dados em (2), pode ser escrita em cada

subintervalo como

(3)

Os splines de grau um associados à partição definida por , podem ser dados por:

Page 65: apostila_matlab

65

onde IMPLEMENTAÇÃO x=input('Entr e com o vetor x:'); b=input('Entre com o vetor F(x):'); c=input('Entre com o(s) valor(es) da interpolação:'); [l,n]=size(x); % Dimensão do Vetor x. [l1,n1]=size(b); % Dimensão do Vetor F(x). if (l==l1) if (n==n1) % Verifica as dimensões dos vetores. i=1; j=1; for(L=1:n) if x(1,j)>c B=x(1,j); B1=b(1,j); j=j-1; A=x(1,j); A1=b(1,j); end j=j+1; end R=A1*(B-c)/(B-A)+B1*(c-A)/(B-A); disp ('O resultado da Splaine é:') disp (' ') disp (R) else disp ('OBS: O Número de Abscissa deve conter o mesmo número de Ordenada e vice-versa') disp ('Favor entrar com outros Valores') end end end COMPARANDO OS POLINÔMIOS INTERPOLADORES COM OS COMANDOS DO MATLAB

Os comandos do software MATLAB que nos fornece o valor aproximado de são: polyfit que determina os coeficientes do polinômio interpolador p dado por p=polyfit(x,y,n) onde n é o grau do polinômio; polyval(p, ), interp1(x,y, ) e interp1(x,y, ,’spline’). Observe que a função polyval estima a imagem de através do polinômio p, no entanto a função interp1 utiliza a função spline linear ou a spline cúbica.

Exemplo:

Page 66: apostila_matlab

66

Um veiculo de fabricação nacional, após vários testes, apresentou os resultados abaixo, quando se analisou o consumo de combustível de acordo com a velocidade média imposta ao veiculo. Os teste foram realizados em rodovias em operação normal de trafego, numa distancia de 72 Km.

Velocidade Km/h Consumo Km/l

55 14,08

70 13,56

85 13,28

100 12,27

120 11,3

140 10,4

Verificar o consumo aproximado para o caso de ser desenvolvida as velocidades de: 80 Km/h., 105 Km/h, 134 Km/h 151 Km/h

RESULTADOS:

Programas Bibliotecas Matlab

Velocidade Lagrange Newton Spline Linear

Interp1 Interp1 Spline

Polyval

80 Km/h 13.466713 13.466713 13.373333 13.373333 13.442552 13.466713

105 Km/h 11.914708 11.914708 12.027500 12.027500 11.963185 11.914708

134 Km/h 11.013867 11.013867 10.670000 10.670000 10.725484 11.013867

151 Km/h 6.6132999 6.6132999 10.325000 10.325000 9.5522218 6.6132999

Os métodos Lagrange, Newton e polyval nos garante resultados mais precisos conforme tabela acima.

Para resolver a velocidade 151 Km/h, deve ser realizada uma extrapolação, pois o mesmo não se encontra nos valores tabelados, portanto os valores obtidos não são confiáveis. CONCLUSÕES FINAIS

Observando o exemplo verificamos os resultados para a estimativa de calculado através da implementação dos polinômios interpoladores (1.1), (1.2) são satisfatórios e idênticos. Quando comparamos os programas com os resultados obtidos através dos comandos de biblioteca do software MATLAB, concluímos que: as funções spline linear e interp1 nos fornece uma aproximação não satisfatória em quase todos os resultados

Page 67: apostila_matlab

67

os resultados obtidos através dos interpoladores de Lagrange, Newton e polyval são idênticos, garantindo-mos assim, boas aproximações os resultados obtido da função Interp1 ‘spline’ são aproximados dos métodos de lagrange, Newton e polyval. 16. REFERÊNCIAS [1] MATLAB for Windows User’s Guide, The Math Works Inc., 1991. [2] Dongarra J.J., Moler C.B., Bunch, J.R, Stewart, G.W., LINPACK User's Guide, Society for Industrial and Applied Mathematics, Philadelphia, 1979. [3] Smith, B.T., Boyle, J.M., Dongarra, J.J., Garbow, B.S., Ikebe, Y., Klema, V.C., Moler, C.B., Matriz Eigensystem Routines - EISPACK Guide, Lecture Notes in Computer Science, volume 6, second edition, Springer-Verlag, 1976. [4] Garbow, B.S., Boyle, J.M., Dongarra, J.J., Moler, C.B., Matriz Eigensystem Roulines EISPACK Gide Extension, Lecture Notes in Computer Science, volume 51, Springer-Verlag, 1977. [5] Golub, G.H., Van Loan, C.F., Matriz Computations, Johns Hopkins University Press, 1983. [6] Ruggiero, M.A.G., Lopes, V.L.R., Cálculo Numéricos - Aspectos Teóricos e Computacionais, Ed. MacGraw-HiII, São Paulo, 1988. [7] Kreith, F., Princípios da Transmissão de Calor, Ed. Edgard Blücher Ltda., São Paulo,1977. [8] Curso de MATLAB for Windows, Departamento de Engenharia Mecânica, UNESP, Campus de Ilha Solteira.

% LISTA DE EXERCÍCIOS - COMANDOS BÁSICOS DO MATLAB

% EXECUTE OS SEGUINTES COMANDOS E INTERPRETE OS RESULTADOS

a = 2500/20 a = 2500/20; b = [1 2 3 4 5 6 7 8 9] c = [1 2 3 ; 4 5 6 ; 7 8 9] c = [c ; [10 11 12] c(2,2) = 0 l = length(b) [m,n] = size(b) [m,n] = size(c)

who whos clear who b = l + 2 + 3 + 4 + ... 5 + 6 - 7

Page 68: apostila_matlab

68

x = 1 : 2 : 9 x = (0.8 : 0.2 : 1.4); y = sin(x) help sin dir a = 2^3 a = 4/3 format long a = 4/3 format short clear a=[1 2 3 ; 4 5 6 ; 7 8 9]; b = a’ c = a + b c = a - b a(l,:) = [-1 -2 -3] c = a(:,2) c = a(2:3, 2:3) x = [- 1 0 2]; y = [-2 -1 1]’; x*y c = x + 2 a = [1 0 2; 0 3 4 ; 5 6 0]; size(a) b = inv(a); c = b*a c = b/a c = b\a clear a b x y whos % A instrução seguinte abre o arquivo notas.dry e grava todas as instruções % digitadas na seqüência diary notas.dry x = [1 -2 3] y = [4 3 2] z = x.*y z = x.^y y.^2 diary off % Encerra a gravação da instrução diary em notas.dry dir type notas.dry clear help diary help sqrt % Trabalhando com números complexos i = sqrt(-1) a = [1 2;3 4] + i*[5 6;7 8] realz = real(z) imagz = imag(z) modz = abs(z) fasez = angle (z)

Page 69: apostila_matlab

69

% Multiplicação de polinômios % x3 = (x^2 + 3x + 2).(x^2 - 2x + 1) x3 = conv([1 2 3],[1 -2 1]) % Como ele faz isto? % Determinação das raízes de um polinômio roots([1 3 2]) roots([1 -2 1]) roots(x3) % Utilitários para matrizes a = eye(4) a = rand(5) help rand b = [2 0 0;0 3 0;0 0 -1]; d = det(b) l = eig(b) help det help eig clear

% RECURSOS DE GRAVAÇÃO (ARMAZENAGEM) DE DADOS

help save help load a = [1 2 3 4 5 6 7 8]; b = a*2; c = a - 1; save arquivo 1 a b c dir clear whos load arquivo 1 whos % Em que arquivo estão gravados os vetores a, b e c? clear

% RECURSOS GRÁFICOS

y = [0 2 5 4 1 0]; plot(y) help pi t = 0:.4:4*pi y = sin(t) z = cos(t); plot(t, y, ‘.’, t, z “-.“) title(‘Funções’) xlabel(“t”) ylabel(“Seno e Cosseno”) text(3, 0.5, ‘Seno’) % Após o próximo comando, selecione a posição que deseja colocar o texto ‘Cosseno’ com

Page 70: apostila_matlab

70

% o mouse gtext(‘Cosseno’)

% AJUSTE DE CURVAS DE DADOS EXPERIMENTAIS

t = (-1:.1:1); x = t.^2; xr = x+0.2(rand(size(x))-.5); figure(1); plot(t, xr, ‘g*’) p = polyfit(t, xr, 2) xa = po1yval(p, t); figure(l); plot(t, xr, ‘g*’, t, xa) % Após a próxima instrução, clique em dois pontos do gráfico, e os valores % das coordenadas serão retornados em [x,y] [x, y] = ginput(2)

% PROGRAMANDO COM O MATLAB

% Abra um arquivo a partir do Matlab (File, New, M-File) % e você estará trabalhando no Bloco de Notas (Notepad) do Windows. % Digite os seguintes comandos e grave o arquivo com o nome % testel.m, no diretório de usuários (alunos).

n = 3 ; m = 3; for i = 1: m for j= 1 : n

a(i, j) = i + j; end; end

disp(‘Matriz A’) disp(a) %final do programa testel.m % CRIANDO UMA SUBROTINA % Abra outro arquivo, salvando-o com nome de teste2.m % Digite os seguintes comandos neste arquivo v = 1:1:10; m = media(v); s = sprintf(‘\n A média é: %4.2f’, m); disp(s); % final do programa teste2.m Agora crie o seguinte arquivo, com o nome de media.m function x = media(u)

Page 71: apostila_matlab

71

% function x = media(u) calcula a média do vetor u, colocando o resultado em x x = sum(u)/length(u); % final da subrotina media.m % Na linha de comando do Matlab, digite: teste2 echo on teste2 echo off % CRIANDO UM PROGRAMA EXEMPLO DE GRÁFICO 3D % Abra outro arquivo, salvando-o com nome de teste3.m % Digite os seguintes comandos neste arquivo clear n = 30; m = 30; for i = 1:m for j = 1:n a(i,j) = sqrt(i+j); end end b = [a+0.5 a’-0.5; (a.^2)/5 ((a’-0.1).^2)/2]; mesh(b) %EXERCÍCIOS COM O MATLAB

Exercício 1 - Faça um programa que desenhe unia pirâmide 3D. Utilize o mesh().

Exercício 2 - Copie o gráfico de uma senóide para um arquivo texto do “WORD”. Siga os seguintes passos: 1º após ter gerado o gráfico, faça print -dmeta (no MATLAB); 2º Pressione ALT-TAB até entrar no “WORD” ou então abra o '”WORD”; 3º Posicione o cursor no local do texto onde o gráfico deva entrar; 4º Digite Ctrl-V; 5º Ajuste a escala vertical do gráfico com o editor de gráficos do “WORD”. Exercício 3 - Repita o exercício 2 com -dbitmap no lugar de -dmeta e compare o tamanho (em Kb) dos dois arquivos texto. Exercício 4 - Resolva o circuito dado na figura abaixo (encontre i1 e i2 ) utilizando a inversão de matrizes do MATLAB. Faça um programa para isto. Adote R1 = 5Ω, R2 = 10Ω, R3 = 5Ω, R4 = l5Ω, R5 = 20Ω, V1 = 10,0 V, V2 = 20,0 V.

Page 72: apostila_matlab

72

Resp.: i1 = 0,01026 A e i2 = 0,4615 A.

Exercício 5 - Supondo que a fonte V2 esteja em curto, ou seja, V2 = 0,0 V, quais os valores de i1 e i2 ?

Resp.: i1 = 0,4103 A e i2 = -0,1538 A. Exercício 6 - Gere um vetor com N elementos aleatórios. Escreva uma função que tenha como entrada o vetor, e retome o índice e o valor do maior elemento do vetor, utilizando o comando if.

Exercício 7 - Escreva um programa (utilizando o comando while) que aceite entradas numéricas pelo teclado. Os valores devem ser números entre 0 e 5, e caso o usuário digite algum valor fora deste intervalo, o programa é encerrado.

Exercício 8 - Em uma sala estão 8 pessoas, reunidas em uma mesa circular. Cada uma escolhe um número aleatoriamente e pega o seu número e soma com os números das pessoas ao lado, a sua esquerda e direita. Passa-se as 8 somas para você, que estava fora da reunião. Como você descobre o número que cada pessoa escolheu ? Utilize o MATLAB.