Você está na página 1de 55

UNINOV A

Manual de Introduo ao MatLab

Manuel Duarte Ortigueira


Professor Auxiliar do Departamento de Engenharia Electrotcnica da Faculdade de Cincias e Tecnologia da universidade Nova de Lisboa

Investigador do UNINOVA

UNINOVA OUTUBRO DE 2000

1.
1.1. 1.2. 1.3. 1.4. 1.5.

INTRODUO...............................................................................................................4
Sobre o MatLab.......................................................................................................................................................... 4 Obteno de Informaes da rea de Trabalho ............................................................................................... 5 As Facilidades do HELP (Ajuda).......................................................................................................................... 6 Os Ficheiros *.m......................................................................................................................................................... 7 Execuo de Programas Externos ......................................................................................................................... 8

2.
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.

CARACTERSTICAS E OPERAES BSICAS ..................................................9


Declaraes e Variveis............................................................................................................................................ 9 Gerao de Vectores ...............................................................................................................................................10 Gerao e entrada de matrizes.............................................................................................................................11 Elementos das Matrizes .........................................................................................................................................13 Nmeros e Expresses Aritmticas .....................................................................................................................18 Nmeros e Matrizes Complexas ..........................................................................................................................18 Formato de Sada.....................................................................................................................................................19

3.
3.1. 3.2. 3.3. 3.4. 3.5.

OPERAES COM MATRIZES ..............................................................................21


Adio e Subtraco................................................................................................................................................21 Multiplicao............................................................................................................................................................22 Diviso.........................................................................................................................................................................24 Exponenciao..........................................................................................................................................................24 Transposio.............................................................................................................................................................24

4.
4.1. 4.2.

OPERAES ELEMENTO A ELEMENTO............................................................26


Adio e Subtrao..................................................................................................................................................26 Multiplicao e Diviso..........................................................................................................................................26

4.3. 4.4.

Potenciao................................................................................................................................................................27 Operaes Comparativas.......................................................................................................................................27

5. 6.
6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7.

FICHEIROS ".M".........................................................................................................29 GRFICOS...................................................................................................................30


Grficos Bidimensionais ........................................................................................................................................30 Partio da Janela grfica.....................................................................................................................................33 Estilos de linha, smbolos e cores .........................................................................................................................34 Nmeros Complexos ...............................................................................................................................................36 Escala Logartmica, Coordenada Polar e Grfico de Barras ......................................................................37 Traado de Grficos Tridimensionais e Contornos .......................................................................................38 Anotaes no Grfico..............................................................................................................................................40

7.
7.1.

PROGRAMAO .......................................................................................................43
Controlo de Fluxo....................................................................................................................................................43 Ciclo for ...........................................................................................................................................................43 Ciclo while ......................................................................................................................................................44 Comandos if e break .................................................................................................................................44 O comando switch-case....................................................................................................................................46

7.1.1. 7.1.2. 7.1.3. 7.1.4. 7.2.

OPERAES COM O DISCO ...........................................................................................................................47 Manipulao do Disco ......................................................................................................................................47 Importar e Exportar Dados...............................................................................................................................47

7.2.1. 7.2.2.

8. 9.
9.1. 9.2.

VARIVEIS E EXPRESSES SIMBLICAS ........................................................50 APNDICE...................................................................................................................53


Funes elementares ...............................................................................................................................................53 Operadores relationais ...........................................................................................................................................55

1.

INTRODUO 1.1. Sobre o MatLab

O MATLAB um ambiente de computao e desenvolvimento de aplicaes, totalmente integrado e orientado para levar a cabo projectos que impliquem clculos matemticos complexos e a sua visualizao grfica. O MATLAB integra anlise numrica, clculo matricial, processamento de sinais e visualizao grfica, num meio onde os problemas e as suas solues so expressas de modo semelhante quele em que se escreviam tradicionalmente, sem necessidade de fazer uso de tcnicas de programao tradicionais. O nome de MATLAB resultou da contraco das palavras "MATrix LABoratory" e foi inicialmente concebido para proporcionar fcil acesso s bibliotecas LINPACK e EISPACK, que representam hoje em dia duas das mais importantes em computao e clculo matricial. O MATLAB um sistema de trabalho interactivo baseado na representao matricial. O programa permite realizar de um modo rpido a resoluo numrica de problemas, num tempo muito menor do que com linguagens de programao tradicionais como Fortran, Basic ou C. O MATLAB goza na actualidade de um alto grau de implantao em Escolas e Centros Universitrios, assim como em departamentos de I&D de muitas empresas industriais. Em ambientes universitrios, por exemplo, o MATLAB converteu-se numa ferramenta bsica, tanto para os docentes e investigadores, como uma importante ferramenta para a leccionao de cursos universitrios, tais como sistemas e engenharia de controle, lgebra linear, processamento digital de imagens, sinais, etc. No mundo industrial, o MATLAB tem sido utilizado como ferramenta de investigao para a resoluo de problemas complexos como por exemplo a realizao e aplicao de modelos matemticos em engenharia. As utilizaes mais frequentes desta ferramenta encontram-se nas reas de computao e clculo numrico tradicional, prototipagem, algortmia, teoria do controle automtico, estatstica, anlise de sries temporais para o processamento digital de sinais. O MATLAB dispe tambm de um amplo conjunto de programas de apoio especializados, denominados Toolboxes, que estendem significativamente o nmero de funes incorporadas no programa principal. Estas Toolboxes cobrem praticamente todas as reas principais no mundo da engenharia, destacando entre elas a toolbox de processamento de imagens, sinais, controle robusto, estatstica, anlise financeira, clculo matemtico simblico, redes neuronais, lgica difusa, identificao de sistemas, simulao de sistemas dinmicos, etc. Para ter uma ideia mais precisa das capacidades do MatLab, basta escrever demo na janela de trabalho. Alternativamente, pode clicar em help e escolher examples and demos. O MatLab muito fcil de usar, sobretudo se se tiver alguns conhecimentos de Fortran ou C, linguagens que lhe serviram de base. Inicialmente desenvolvido para ser usado em DOS, foi adaptado, a partir das verses 4.x, para trabalhar em ambiente Windows e, logo a seguir, para OS (MacIntosh) e LINUX. A abordagem que propomos neste trabalho, permite um fcil acesso s principais caractersticas do MATLAB. Deve procurar resolver, cuidadosamente e com ateno, todos os exerccios que propomos, de forma a familiarizar-se com os procedimentos do MATLAB. Faa HELP sempre que necessitar. Para interromper use Control-C. Pode usar os cursores do teclado para repetir, eventualmente com alteraes, instrues dadas anteriormente. Deve usar o comando Clear sempre que tenha problemas de memria.

1.2.

Obteno de Informaes da rea de Trabalho

Quando se entra no MATLAB, tem-se disposio uma rea de trabalho que, normalmente, fica referida ao directrio bin do disco onde est instalado o programa. Para evitar encher esta partio com ficheiros que nada tm a ver com o MATLAB original, deve trabalhar-se numa rea prpria. Para o fazer, h dois procedimentos possveis: a) Com o rato, ir a File e fazer Set path. Abre-se a janela Path Browser. Depois s escolher o local de trabalho com o Bowser. Ainda nesta janela, deve fazer File e Save Path. Esta forma de escolha da rea de trabalho vantajosa quando se trabalha sempre no mesmo computador e se tem uma rea reservada ao trabalho com o MATLAB. b) Fazer sucessivamente: cd \ para sair da rea do MATLAB e depois ir, da forma usual, para o local escolhido. Por exemplo, para a disquete: a:. Tendo fixado o local de referncia, estamos em condies de comear a trabalhar. Suponhamos que fazemos as seguintes entradas: a=2; b=[1 -1 0 4]; c=[1 2 3;4 5 6;7 8 9]; 8-3/5+7; Os exemplos de declaraes mostrados acima criaram variveis que so armazenadas na rea de Trabalho do MATLAB. Fazendo >> who obtm-se uma lista das variveis armazenadas num dado instante, na rea de Trabalho: Your variables are: a ans b c % o smbolo ; inibe o ecoar dos resultados

o que mostra as quatro variveis geradas em nossos exemplos, incluindo ans (usado quando no existe uma declarao de varivel). Uma informao mais pormenorizada mostrando a dimenso de cada uma das variveis correntes obtido com whos que, para nosso exemplo, produz: Name a ans b c Size 1x1 1x1 1x4 3x3 Bytes 8 8 32 72 Class double array double array double array double array

Grand total is 15 elements using 120 bytes 5

Cada elemento de uma matriz real requer 8 bytes de memria, assim a nossa matriz A, de dimenso 3x3 usa 72 bytes e todas variveis utilizadas um total de 120 bytes. Comandos que tenham sido utilizados anteriormente podem ser obtidos novamente usando as teclas e . Por exemplo, pressionando a tecla uma vez, obtm-se o ltimo comando digitado. Pressionando repetidamente a mesma tecla obtm-se os comandos digitados anteriormente, um de cada vez. Analogamente, pressionando-se a tecla , repetem-se os comando para a frente. Mais ainda, digitando no prompt os primeiros caracteres de um comando dado anteriormente e ento pressionando-se a tecla , obtm-se o comando mais recente com aqueles caracteres iniciais. Em qualquer momento, as teclas , podem ser usadas para se mover o cursor dentro de um comando. Desta forma um comando pode ser corrigido, usando as teclas Delete e Backspace.

1.3.

As Facilidades do HELP (Ajuda)

O MATLAB possui um comando de ajuda (help) que fornece informaes sobre a maior parte dos tpicos. Com >> help obtm-se uma lista desses tpicos disponveis. Esta ajuda pouco til, devido ao seu caracter geral. Para obter informaes sobre um tpico especfico, digite help nome do tpico. Por exemplo, com >> help mean obtemos a seguinte resposta, MEAN Average or mean value. For vectors, MEAN(X) is the mean value of the elements in X. For matrices, MEAN(X) is a row vector containing the mean value of each column. For N-D arrays, MEAN(X) is the mean value of the elements along the first non-singleton dimension of X. MEAN(X,DIM) takes the mean along the dimension DIM of X.

Example: If X = [0 1 2 3 4 5] then mean(X,1) is [1.5 2.5 3.5] and mean(X,2) is [1 4] See also MEDIAN, STD, MIN, MAX, COV. 6

A ltima linha muito importante, porque nos d informao sobre outros tpicos relacionados com o actual.

1.4.

Os Ficheiros *.m

Os ficheiros com extenso .m constituem sub-rotinas elaboradas a partir de um conjunto extenso de funes intrnsecas que no podem ser alteradas pelo utilizador. As TOOLBOXES so, efectivamente, ficheiros com a extenso ".m" criados a partir das funes intrnsecas. Estas bibliotecas externas podem ser constantemente actualizadas medida que novas aplicaes vo sendo desenvolvidas. Estas sub-rotinas dividem-se em dois tipos: scripts e funes. As primeiras servem para efectuar um determinado tipo de processamento que no necessita de passar variveis de e para o programa principal. Por exemplo, um ficheiro com uma lista de valores a usar num dado programa, constitui um script desde que o seu nome tenha uma extenso .m. As funes efectuam tal passagem. Por isso, necessitam de uma declarao function. Para criar ficheiros *.m, basta fazer File/new/m-file. Este comando abre um ficheiro com o Editor. No final, guarda-se com um dado nome, no caso da funo convm ser igual ao nome desta, com uma extenso .m. Para exemplificar, consideremos o script inteiros.m for i=10,20 x(i)=i; end x que efectua a listagem dos inteiros de 10 a 20. Para correr o script, basta fazer na rea de trabalho: inteiros Se se tratasse de uma funo, faramos: function inteiros(m,n) for i=m,n x(i)=i; end x Para correr a funo, fr-se-ia inteiros(10,30)

Convm salientar que os ficheiros a usar devem estar na nossa partio de disco, a menos, que definamos um caminho para acesso a eles. As categorias gerais de funes matemticas disponveis no MATLAB incluem: Matemtica elementar; Funes especiais; 7

Matrizes elementares; Matrizes especiais; Decomposio e factorizao de matrizes; Anlise de dados; Polinmios; Soluo de equaes diferenciais; Equaes no-lineares e optimizao; Integrao numrica; Processamento de sinais.

1.5.

Execuo de Programas Externos

O caracter ponto de exclamao !, 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 verses do MATLAB como "prompt" para indicar a execuo de um colando do DOS, sendo muito til nas verses que usavam somente o DOS. No ambiente Windows, entretanto, este comando tem pouca utilidade. Para entrar com o caractere de desvio no "prompt" do MATLAB, deve-se coloc-lo no incio do comando do DOS ou Windows que se deseja executar. Por exemplo, para carregar um programa, p. ex., o Notepad do Windows, sem sair do MATLAB, faa >> ! Notepad Uma nova janela aberta, o Notepad carregado, podendo ser utilizado da maneira usual. Pode-se usar, tambm, qualquer comando implcito do DOS, por exemplo: copy, format, ren, mkdjr, rmdir, ... Nota Importante: para interromper um programa em execuo deve fazer CTRL-C.

2.

CARACTERSTICAS E OPERAES BSICAS 2.1. Declaraes e Variveis

O MATLAB uma linguagem de expresses. As expresses usadas so interpretadas e avaliadas pelo sistema. As declaraes no MATLAB so frequentemente da forma >> varivel = expresso ou, simplesmente >> expresso As expresses so constitudas por operadores e outros caracteres especiais, funes e nomes das variveis. A avaliao das expresses produz matrizes, que so ento mostradas no ecr e atribudas s variveis para uso futuro. Se o nome da varivel e o sinal de igual "=", so omitidos, uma varivel com o nome ans, que representa a palavra answer (resposta), automaticamente criada. Por exemplo, digite a expresso >> 10*33/5 que produz ans = 66 Se o ltimo caractere da declarao for um ponto e vrgula ";", os resultados no ecr so suprimidos, mas a tarefa realizada. Esse procedimento deve ser sempre usado em situaes onde o resultado uma matriz de grandes dimenses que no temos interesse em visualizar. Estas sadas de vectores de grandes dimenses contribuem para retardar a execuo de um dado comando ou programa, pelo que devem ser suprimidas, usando ;. Se uma expresso for to grande que no caiba numa linha, pode-se continu-la na linha seguinte usando um espao em branco e reticncias,"...", no final das linhas incompletas. Por exemplo, no caso seguinte, >> 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; o MATLAB calcula o valor da soma, que atribui varivel s, mas no ecoa esse valor. Note que os espaos em branco entre os sinais "=", "+" e "-" so opcionais, mas o espao em branco entre "1/7" e "..." obrigatrio. As variveis e funes podem ser formadas por um conjunto de letras e/ou algarismos, at um mximo de 19 caracteres (acima de 19 sero ignorados). O MATLAB faz distino entre letras maisculas e minsculas, assim a e A no so as mesmas variveis. Todas as funes devem ser escritas em letras minsculas: inv(A) calcula a inversa de A, mas INV(A) uma funo indefinida. Alguns nomes so usados para variveis predefinidas. Estas so: 9

ans - varivel usada para os resultados. pi - nmero . eps - menor nmero tal que, quando adicionado a 1, cria um nmero maior que 1 no computador. flops - armazena o nmero de operaes em ponto flutuante realizadas. inf - significa infinito. NaN ou nan - significa no um nmero, por exemplo, 0/0. i e j - unidade imaginria -1 .

nargin - nmero de argumentos de entrada de uma funo. nargout - nmero de argumentos de sada de uma funo. realmin - menor nmero que o computador pode armazenar. realmax - maior nmero que o computador pode armazenar. As variveis podem ser redefinidas a qualquer momento, bastando para isso atribuir-lhes um novo valor; no entanto, tal no aconselhvel.

2.2.

Gerao de Vectores

Os dois pontos ":", um caractere importante no MATLAB. Serve para permitir a gerao de sucesses aritmticas do tipo, >> s=a:i:b onde a o valor inicial e b o final; i o incremento, que pode ser real e negativo. Exs.: >> x=-5:2:15 x= -5 -3 -1 >> y=10:-3:-9 y= 10 7 4 1 -2 -5 -8 1 3 5 7 9 11 13 15

>> -pi:pi/8:pi ans = Columns 1 through 7 -3.1416 -2.7489 -2.3562 -1.9635 -1.5708 -1.1781 -0.7854 Columns 8 through 14

10

-0.3927

0 0.3927 0.7854 1.1781 1.5708 1.9635

Columns 15 through 17 2.3562 2.7489 3.1416 Por omisso, o valor do incremento 1, >> z= -5:4 z= -5 -4 -3 -2 -1 0 1 2 3 4

Pode-se, tambm, gerar vectores usando a funo linspace. Por exemplo, >> k=linspace(0,2,7) k= 0 0.3333 0.6667 1.0000 1.3333 1.6667 2.0000 gera um vector linearmente espaado de 0 a 2, contendo 7 elementos. Os vectores so armazenados de forma a que os seus elementos ficam indexados aos naturais positivos. No exemplo acima, k(2)=0.6667. Notar que no so permitidos ndices negativos ou nulos. Em qualquer altura, podemos obter a dimenso de um vector usando a funo length: >> length(k) ans = 7 H outra funo que pode ser usada em vez de length; a funo size: >> size(k) ans = 1 7

que informa que se trata de um matriz de dimenses 1x7.

2.3.

Gerao e entrada de matrizes

As matrizes podem ser introduzidas no MATLAB por diferentes processos: - digitadas na rea de trabalho (listagem explcita dos seus elementos), - geradas por comandos e funes, - criadas em ficheiros ".m", - carregadas a partir de um ficheiro de dados externo.

11

O mtodo mais fcil de definir pequenas matrizes no MATLAB usando uma listagem explcita. Os elementos de cada linha da matriz so separados por espaos em branco ou vrgulas e as colunas separadas por ponto e vrgula, colocando-se parntesis rectos em volta do conjunto de elementos da matriz. Por exemplo, escrevendo a expresso >> A=[ 1 2 3;4 S 6;7 8 9 ] e pressionando <enter>, o MATLAB mostra o resultado A= 1 4 7 2 5 8 3 6 9

A matriz A guardada na memria RAM do computador, ficando armazenada para uso posterior. As matrizes podem, tambm, ser introduzidas linha a linha, mtodo aconselhado para matrizes de grande dimenso. Por exemplo:

>>A = >> >>

[1 2 3 456 7 8 9]

Outra maneira para introduzir matrizes no MATLAB atravs de um ficheiro em formato texto com extenso ".m". Por exemplo, se o ficheiro "gera.m" contiver estas trs linhas de texto,

A=

[1 2 3 456 7 8 9]

ento a expresso "gera" l o ficheiro e define a matriz A. >>gera O comando load pode ler matrizes geradas pelo MATLAB e armazenadas em ficheiros binrios ou matrizes geradas por outros programas armazenadas em ficheiros ASCII.

12

2.4.

Elementos das Matrizes

Os elementos das matrizes podem ser definidos por qualquer expresso do MATLAB, por exemplo,

>> A=[sqrt(-1) (-2)^3;log(25) sin(2*pi/3)] A= 0 + 1.0000i -8.0000 3.2189 0.8660

Um elemento individual da matriz pode ser referenciado com ndice entre parnteses. Continuando o exemplo,

>> a=A(1,2) a= -8 Matrizes de grandes dimenses podem ser construdas a partir de matrizes de pequena dimenso. Por exemplo, pode-se adicionar outra linha na matriz A usando

>>v=[1 -1]; >> A=[A;v] A= 0 + 1.0000i -8.0000 3.2189 1.0000 0.8660 -1.0000

ou, >> w=[1 -1 0]; >> A=[A w'] A= 0 + 1.0000i 3.2189 1.0000 -8.0000 0.8660 -1.0000 1.0000 -1.0000 0 13

Matrizes de pequena dimenso podem ser extradas de matrizes de grande dimenso, usando ":". Por exemplo, >> B=A(1:2,:) B= 0 + 1.0000i -8.0000 3.2189 0.8660 1.0000 -1.0000

selecciona as duas primeiras linhas e todas as colunas da matriz A actual. Um elemento individual da matriz pode ser indicado incluindo os seus ndices entre parnteses. Por exemplo, para a matriz A,

A=
1 4 7 a declarao >> A(3,3) = A(1,3) + A(3,l) produz o resultado 2 5 8 3 6 9

A= 1 4 7 2 5 8 3 6 10

Um ndice pode ser um vector. Se X e V so vectores, ento X(V) [X(V(1)), X(V(2)), .... X(V(n))]. Para as matrizes, os ndices vectores permitem o acesso a submatrizes. Por exemplo, suponha que A uma matriz 10x10.

A= 92 98 14 85 86 17 99 80 81 87 93 24 11 17 88 19 25 76 18 14 20 21 12 83 15 16 22 13 19 90 67 73 54 60 61 42 14 74 55 56 62 68 49 51 57 63 69 75 26 58 64 70 71 52 33 40 41 47 28 34 65

23 79 10 11 ento

15 16 12 18

82 13 94 100

89 95 96 77

91 97 78 84

48 29 35 36

30 31 37 43

32 38 44 50

39 45 46 27

66 72 53 59

>> A(1:5,3)

ans = 11 17 88 19 25

especifica uma submatriz 5x1, ou vector coluna, que consiste dos cinco primeiros elementos da terceira coluna da matriz A. Analogamente, >> A(1:5,7:10)

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

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

ans = 92 99 11 18 15 67 74 51 58 40

15

14 86

81 93

88 25

2 12

22 19

54 61

56 68

63 75

70 52

47 34

uma submatriz 3x10 que consiste na primeira, terceira e quinta linhas e todas as colunas da matriz A. Podem ser obtidos muitos efeitos sofisticados usando submatrizes em ambos os lados das declaraes. Por exemplo, sendo B uma matriz 10x10 unitria, >> B = ones (10)

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 declarao, >> B(1:2:7,6:l0) = A(5:-1:2,1:5) produz

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

86 1 85 1 14

93 1 87 1 81

25 1 19 1 88

12 1 21 1 20

19 1 13 1 22

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 98 1 1 1

1 80 1 1 1

1 17 1 1 1

1 14 1 1 1

1 16 1 1 1

O interesse prtico motivou a incluso de algumas funes teis. Por exemplo a funo eye gera a matriz identidade, >> I=eye(5) I= 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1

>> I=eye(5,3) I= 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0

17

2.5.

Nmeros e Expresses Aritmticas

A notao decimal convencional, com ponto decimal opcional, usada para nmeros. A notao cientfica usada frequentemente, sobretudo, para representar nmeros muito grandes ou muito pequenos.

3 9.637458638

-99 1.602E-20

0.00001 6.06375e23

As expresses podem ser construdas usando os operadores aritmticos usuais e as regras de precedncia: 1 2 2 3 4 4 ^ / \ * + -

potenciao diviso direita diviso esquerda multiplicao adio subtraco

Deve notar-se que existem dois smbolos para diviso: as expresses 1/4 e 4 possuem o mesmo valor \1 numrico, isto , 0,25. Os parnteses so usados na forma habitual para alterar a precedncia usual dos operadores aritmticos.

2.6.

Nmeros e Matrizes Complexas

Nmeros complexos so permitidos em todas operaes e funes no MATLAB. Os nmeros complexos so definidos usando-se as funes especiais i e j. Por exemplo, >> z= 3 + 4*i ou >> z= 3 +4*j Outro exemplo >> w=0.9 * exp(i*pi)

18

As seguintes declaraes mostram dois caminhos convenientes para se definir matrizes complexas no MATLAB: >> 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 se trabalhar com nmeros complexos, conveniente no usar i ou j para designar outra varivel que no seja a unidade imaginria. Porm, se i ou j forem usados como variveis, de forma que tenham os seus valores originais modificados, uma nova unidade complexa dever ser criada e utilizada da maneira usual, >> ii = sqrt(-1); >> z = 3 + 4*ii

2.7.

Formato de Sada

O formato numrico exibido no ecr pode ser modificado com o comando format, que afecta somente o modo como as matrizes so mostradas e no a forma como elas so calculadas ou guardadas (o MATLAB efetua todas as operaes em dupla preciso). Se todos os elementos das matrizes forem inteiros, a matriz mostrada num formato sem qualquer separador decimal. Por exemplo, >> x = [-1 0 1] resulta sempre em

x= -1 0 1

Se pelo menos um dos elementos da matriz no inteiro, existem vrias possibilidades de formatar a sada. O formato utilizado por omisso chamado de formato short, que mostra 5 dgitos significativos ou usa notao cientfica. >> x=[2/7 pi log(10)] x= 0.2857 3.1416 2.3026

19

Por exemplo, a expresso >> x = [4/3 1.2345e-6] mostrada , para cada formato usado, da seguinte maneira:

format short format short e format long format long e format hex format rat format bank format +

1.3333 0.0000 1.3333e+000 1.2345e-006 1.33333333333333 0.000000123450000 1.333333333333333e+000 1.234500000000000e-006 3ff5555555555555 3eb4b6231abfd271 4/3 1/810045 1.33 0.00 ++

Com os formatos short e long, se o maior elemento da matriz maior que 1000 ou menor que 0.001, um factor de escala comum aplicado para que a matriz completa seja mostrada. Por exemplo, >> x=[2/7 pi 1000*log(10)] x= 1.0e+003 * 0.0003 0.0031 2.3026 O formato + uma maneira compacta de mostrar matrizes de grandes dimenses. Os smbolos "+", "-", e "espao em branco" so mostrados, respectivamente para elementos positivos, elementos negativos e zeros.

20

3.

OPERAES COM MATRIZES

As operaes com matrizes no MATLAB so as seguintes: Adio Subtrao Multiplicao Diviso direita Diviso esquerda Exponenciao Transposio A seguir so descritas estas operaes em pormenor.

3.1.

Adio e Subtraco

A adio e subtraco de matrizes so indicadas, respectivamente, por "+" e "-". As operaes so definidas somente se as matrizes forem da mesma dimenso. Por exemplo, >> A =

1.1069 -0.1069 -0.7628 -0.1069 1.1069 -0.2372 -0.2516 -0.7484 3.6607

>> B

B=

1.0000 8.0000 1.0000 3.2189 0.8660 1.0000 1.0000 1.0000 0

>> C=A+B

C=

2.1069 7.8931 0.2372 3.1120 1.9729 0.7628 0.7484 0.2516 3.6607 >> D=A-B 21

D=

0.1069 -8.1069 -1.7628 -3.3258 0.2409 -1.2372 -1.2516 -1.7484 3.6607 A adio e subtraco tambm so definidas se um dos operadores for um escalar, ou seja, uma matriz l x l. Neste caso, o escalar adicionado ou subtrado de todos os elementos do outro operador. Por exemplo se y = [10 7 4 1 -2 -5 -8],

>> z=y-3 z= 7 4 1 -2 -5 -8 -11

3.2.

Multiplicao

A multiplicao de matrizes indicada por "*". A multiplicao x*y, definida somente se o nmero de linhas de x for igual ao nmero de colunas de y. Por exemplo, o produto interno de dois vectores uma multiplicao de uma matriz 1xN por outra Nx1, >> y*z aceitvel, e resulta em ans = 238 evidente que o resultado da multiplicao y'*z ser o mesmo, visto que se trata de vectores reais. Se fossem vectores complexos resultaria no conjugado. Existem dois outros produtos que so transpostos um do outro, >> z*y ans = 70 49 28 40 28 16 10 7 4 7 -14 -35 -56 4 -8 -20 -32 1 -2 -5 -8 4 10 16

-20 -14 -8 -2

-50 -35 -20 -5 10 25 40 -80 -56 -32 -8 16 40 64 22

-110 -77 -44 -11 22 55 88 >> y*z ans =

70 40 10 -20 -50 -80 -110 49 28 28 16 7 4 7 -14 -35 -56 -77 4 -8 -20 -32 -44 1 -2 -5 -8 -11 16 22

-14 -8 -2

4 10

-35 -20 -5 10 25 40 55 -56 -32 -8 16 40 64 88

s matrizes resultantes do produto de 2 vectores d-se o nome de dadas. O produto de uma matriz por um vector um caso especial do produto entre matrizes. Por exemplo, se A for a matriz definida acima, >> b = A*y que resulta em b= 2380 1666 952 238 -476 -1190 -1904 e >> b=y*A resulta em b= 2380 1666 952 238 -476 -1190 -1904

Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz.

23

3.3.

Diviso

Existem dois smbolos para diviso de m atrizes no MATLAB "\" e "/". Se A for uma matriz quadrada no singular, ento A\B e B/A correspondem respectivamente multiplicao esquerda e direita da matriz B pela inversa da matriz A, ou inv(A)*B e B*inv(A). Em geral, X = A\B a soluo de A*X = B X = B/A a soluo de X*A = B

Por exemplo, sendo o vector b definido como A*x, a declarao, x=A\b a soluo de A*x = b.

3.4.

Exponenciao

A expresso A^p eleva A p-sima potncia e definida se A for uma matriz quadrada e p um escalar. Se p um inteiro maior do que um, a potenciao calculada efectuando mltiplas multiplicaes. Por exemplo, >> A = 1 -1 0 0 2 2 1

1 -1

>> A^2 ans = 1 -3 -1 2 0

5 -1 1 2

3.5.

Transposio

O caractere plica, " ' " , indica a transposta de uma matriz, mas, apenas, se ela for real. A declarao >> A = [1 2 3; 4 5 6; 7 8 9] >> B = A' que resulta em

A=

1 4 7

2 5 8

3 6 9 24

B=

1 2 3

4 5 6

7 8 0

e >> x = [-1 O 2]' produz

x= -1 0 2 Se Z for uma matriz complexa, Z ser a matriz transposta hermiteana (trans-conjugada). 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 6.0000 + 7.0000i Z1 = 1.0000 - 5.0000i 2.0000 - 6.0000i 3.0000 - 7.0000i 4.0000 - 8.0000i 2.0000 + 6.0000i 4.0000 + 8.0000i

Z2 =

1.0000 + 5.0000i 2.0000 + 6.0000i

3.0000 + 7.0000i 4.0000 + 8.0000i

Tambm se pode usar conj(Z).

25

4.

OPERAES ELEMENTO A ELEMENTO

O termo operaes entre conjuntos usado quando as operaes aritmticas so realizadas entre os elementos que ocupam as mesmas posies em cada matriz (elemento por elemento). As operaes com conjuntos so feitas como as operaes usuais, utilizando-se os mesmos caracteres ("*", "/", "\", "^" e " ") precedidos por um ponto " ." (".*", "./", ".\", ".^" e " . ").

4.1.

Adio e Subtrao

Para a adio e a subtraco, a operao com conjuntos e as operaes com matrizes so as mesmas. Deste mo do os caracteres "+" e "-" podem ser utilizados tanto para operaes com matrizes como para operaes com conjuntos.

4.2.

Multiplicao e Diviso

A multiplicao de conjuntos indicada por ".*". Se A e B forem duas matrizes com as mesmas dimenses, ento A.*B indica um conjunto (matriz) cujos elementos so simplesmente o produto dos elementos individuais de A e B. Por exemplo, se >> x = [1 2 3]; y = [4 5 6]; ento, >> z = x .* y resulta em

z= 4 individuais de A e B. Assim, >> z = x .\ y resulta em 10 18

As expresses A./B e A.\B formam um conjunto cujos elementos so simplesmente os quocientes dos elementos

z= 4.0000 2.5000 2.0000

26

4.3.

Potenciao

A potenciao de conjuntos indicada por ".^". A seguir so mostrados alguns exemplos usando os vectores x e y definidos anteriormente. A expresso >> z = x .^ y resulta em

z= l 32 729

A potenciao pode usar um escalar. >> z = x.^2 z= l Ou a base pode ser um escalar. >> z = 2.^[x y] z= 2 4 8 16 32 64 4 9

4.4.

Operaes Comparativas

Estes so os seis operadores usados para comparao de duas matrizes com as mesmas dimenses: < menor <= menor ou igual > maior >= maior ou igual == igual ~= diferente

A comparao feita entre os pares de elementos correspondentes e o resultado uma matriz composta pelos

27

nmeros um e zero, representando VERDADEIRO e FALSO, respectivamente. Por exemplo, >> 2 + 2 ~= 4

ans = 0 Pode-se usar, tambm os operadores lgicos & (e) e | (ou). Por exemplo, >> 1= = 1 & 4 = = 3

ans = 0 >> 1 = = 1 | 4 = = 3

ans = 1 Como veremo s adiante, estas operaes so extremamente importantes quando se trabalha com ciclos.

28

5.

FICHEIROS ".m"

Os comandos do MATLAB so normalmente digitados na rea de trabalho, em que uma nica linha de comando escrita e processada imediatamente. Como vimos atrs, o MATLAB tambm capaz de executar sequncias de comandos armazenadas em ficheiros. J anteriormente dissemos que os ficheiros .m se chamavam scripts e funes. Para editar um ficheiro texto do MATLAB seleccione New M-File para criar um novo ficheiro ou Open M-File para editar um ficheiro j existente, a partir do menu File. Os ficheiros podem, tambm, ser editados fora do MATLAB, utilizando qualquer editor de texto. Existem alguns comandos e declaraes especiais para serem usados nos ficheiros; por exemplo % Traa uma funo 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(Traar outro ? (s/n) = => ,s); end O caracter % usado para inserir um comentrio no texto, o comando clear apaga todos os dados da memria. O comando input usado quando se deseja entrar com um dado a partir da rea de trabalho. O comando pause provoca uma pausa na execuo do programa at que qualquer tecla seja digitada; clc limpa a rea de trabalho, figure(1) mostra a Janela Grfica nmero 1 e close fecha todas as Janelas Grficas. O MATLAB tem uma srie de funes cientficas pr-definidas. A maioria pode ser usada da mesma forma que seria escrita matematicamente. Em apndice apresentam-se algumas dessas funes. Todas as Toolboxes do MATLAB so constitudas por ficheiros .m inalterveis pelo utilizador. No entanto, o utilizador pode acrescentar programas seus em ficheiros .m a qualquer Toolbox.

29

6.

GRFICOS

A construo de grficos no MATLAB mais uma das facilidades do sistema. Atravs de comandos simples podem obter-se grficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada. Existe no MATLAB uma vasta biblioteca de comandos grficos.

6.1.

Grficos Bidimensionais

Estes so os comandos para traar grficos bidimensionais: plot grfico linear. loglog grfico em escala loglog. semilogx grfico em semilog. semilogy grfico em semilog. fill desenhar polgono 2D. polar grfico em coordenadas polares. bar grfico de barras. stem sequncia discreta. stairs grfico em escada hist traar histograma. fplot traar funo.

Se y for um vector, plot(y) produz um grfico linear dos elementos de Y versus o ndice dos elementos de Y. Por exemplo, >> y=[0 0.2 0.4 .5 .7 .9 1 1.2 .8 .7 .3 .2 0] >> plot(y) e o resultado mostrado na Janela Grfica:

30

1.4

1.2

0.8

0.6

0.4

0.2

0 0 2 4 6 8 10 12 14

fig.1 exemplo de uma representao obtida com plot Suponhamos que transformamos os valores de y por meio de f=tan(y); Obtemos f= Columns 1 through 7 0 0.2027 0.4228 0.5463 0.8423 1.2602 1.5574 Columns 8 through 13 2.5722 1.0296 0.8423 0.3093 0.2027 0

Pretendendo agora desenhar o grfico de f, temos duas hipteses: >> plot(f) que produz

2.5

1.5

0.5

0 0 2 4 6 8 10 12 14

fig.2 representao de f em funo do ndice de memria

31

ou >> plot(y,f) que resulta em

2.5

1.5

0.5

10

12

14

fig.3 representao de f em funo de y. O MATLAB pode tambm traar mltiplas linhas e apenas um grfico. Existem dois mtodos, o primeiro usando apenas dois argumentos, como em plot(X,Y), onde X e/ou Y so matrizes. Ento: Se Y uma matriz e X um vector, plot(X,Y) traa sucessivamente as linhas ou colunas de Y versus o vetor X. Se X uma matriz e Y um vector, plot(X,Y) traa sucessivamente as linhas ou colunas de X versus o vetor Y. Se X e Y so matrizes com mesma dimenso, plot(X,Y) traa sucessivamente as colunas de X versus as colunas de Y. Se Y uma matriz, plot(Y) traa sucessivamente as colunas de Y versus o ndice de cada elemento da linha de Y. O segunda, e mais fcil, mtodo de traar grficos com mltiplas linhas usando o comando plot com mltiplos argumentos. Por exemplo, >> plot(t, sin(t), t, cos(t), t, sin(t + pi), t, cos(t + pi))

32

fig.4 representao de sinusides em funo de t.

6.2.

Partio da Janela grfica

A janela grfica pode ser divida em vrias sub-janelas. Em cada uma destas podem-se traar vrios grficos. Por exemplo:

0.5

-0.5

-1

-1 0 50 100

-2 0 50 100

60

2 40 0 20 -2

0 0 200 400 600

-4 0 200 400 600

fig.5 partio da janela grfica em 2x2 partes

33

que foi obtido com a seguinte sequncia de comandos, t=1:100; x=sin(2*pi/27*t); y=cos(2*pi/18*t); z=x.^2; w=x+y; W=fft(w,1024); subplot(221);plot(t,x,t,y) subplot(222);plot(t,z,t,w) subplot(223);plot(abs(W(1: 512))) subplot(224);plot(angle(W(1:512))) A partio feita com o comando subplot que tem o formato, subplot(IJK) onde I o nmero de linhas e J o nmero de colunas da partio. K o nmero de ordem do grfico e que se obtm numerando os grficos de cima para baixo e da esquerda para a direita, comeando em 1.

6.3.

Estilos de linha, smbolos e cores

Os tipos de linhas, smbolos e cores usados para traar grficos podem ser controlados se os padres no forem satisfatrios. Por exemplo, >> X = 0:0.05:1; >> subplot(l2l), plot(X,X.^2,k*) >> subplot(l22), plot(X,X.^2,k --)

34

fig.6 representao de X usando dois tipos diferentes de linha Outros tipos de linhas, pontos e cores podem tambm ser usados: CORES y m c r g b w k amarelo lils azul claro vermelho verde azul escuro branco preto

TIPO DE LINHA _ --. . _______________ --------------------.-.-.-.-.-.-.-.-.-.-.-. ..............................

TIPO DE PONTO . * + x ....................... ******** ++++++++++ xx x x x x x x

35

6.4.

Nmeros Complexos

Quando os argumentos do comando plot so complexos, a parte imaginria ignorada, excepto quando dado simplesmente um argumento complexo. Para este caso especial traada a parte real versus a parte imaginria. Por exemplo, quando Z um vector complexo, plot(Z), equivalente a plot(real(Z),imag(Z)). No entanto, normalmente necessitamos de ambas as partes, pelo que devemos tra-las. Para isso, ou fazemos dois grficos separados >> subplot(211); plot(real(Z));subplot(212); plot(imag(Z)) que resulta em
60 40 20 0 -20 -40 0 200 400 600 800 1000 1200

50

-50 0 200 400 600 800 1000 1200

fig.7 representao das partes real e imaginria de uma funo complexa ou teremos que usar uma varivel independente que pode ser, por exemplo, a sequncia dos ndices de memria: >> n=1:length(W); >> plot(n,real(W),n,imag(W),'r')
60

40

20

-20

-40

-60 0 200 400 600 800 1000 1200

fig.8 representao das partes real e imaginria de uma funo complexa na mesma janela 36

Porm, em muitas situaes prticas, necessitamos do mdulo e argumento das variveis complexas, pelo que devemos represent-los separadamente como fizemos com as partes real e imaginria. Para isso, usam-se as funes abs e angle.

6.5.

Escala Logartmica, Coordenada Polar e Grfico de Barras

O uso de loglog, semilogx, semilogy e polar idntico ao uso de plot. Estes comandos so usados para traar grficos em diferentes coordenadas e escalas: polar(teta,r) - traa em coordenadas polares o ngulo teta, em radianos, versus o raio r; loglog - traa um grfico usando escalas logartmicas para as ordenadas e abcissas; semilogx - traa um grfico em que a escala do eixo x logartmica e a do eixo y linear; semilogy - traa um grfico em que a escala do eixo x linear e a do eixo y logartmica;

O comando bar(X) mostra um grfico de barras dos elementos do vector X e no aceita argumentos mltiplos. Na figura seguinte, apresenta-se em escala logartmica o grfico 3 da figura apresentada na seco 6.2.

60

50

40

30

20

10

0 0 10

10

10

10

fig.9 representao usando uma escala logartmica Na figura seguinte, mostra-se a representao das razes do polinmio p(x) = 2x5 + 2x4 - 4x3 +3x2 x + 1, obtido com a funo polar.

37

fig.10 representao num diagrama polar

6.6.

Traado de Grficos Tridimensionais e Contornos

Para traar grficos tridimensionais e contornos necessrio avaliar a funo numa grelha rectangular. Isto pode fazer-se com o comando meshgrid. Em primeiro lugar, devem criar-se 2 vectores descrevendo as grelhas segundo os eixos xx e yy >> x=-pi:pi/25:pi; >> y=-2*pi:pi/40:2*pi; Seguidamente, cria-se uma grelha do tipo 2-D a partir das duas grelhas do tipo 1-D: >> [X Y] = meshgrid(x,y); Com esta grelha assim definida, vamos calcular os valores da funo para todos os pares (x,y) obtidos: >> z=sin(X+Y).*cos(X-Y); Para efectuar o traado grfico usa-se um dos comandos seguintes: >> mesh(x,y,z) que resulta em

38

fig.11 representao tridimensional

ou >> surf(x,y,z);

fig.11 representao tridimensional sombreada que cria uma verso sombreada da superfcie. O comando contour(x,y,z) mostra a projeco da superfcie no plano xy

39

-2

-4

-6 -3 -2 -1 0 1 2 3

fig.12 representao da projeco horizontal

6.7.

Anotaes no Grfico

O MATLAB possui comandos de fcil utilizao que permitem adicionar informaes num grfico: title Ttulo do grfico. xlabel Ttulo do eixo -X. ylabel Ttulo do eixo -Y. zlabel Ttulo do eixo -Z. text Inserir anotao no grfico. gtext Inserir anotao com o rato grid Traado de uma grelha.

Por exemplo: >> fplot(sin, [-pi pi]) >> title(Grfico da funo f(x)=seno(x), -pi<x<pi) >> xlabel(x) >> ylabel(f(x)) 40

>> grid

fig.13 grfico com anotaes Alm destas possibilidades, obtidas escrevendo os comandos na rea de trabalho, podemos alterar um grfico, actuando na janela grfica. Por exemplo, conforme se pode observar na figura seguinte, fazendo zoom.

3.5

2.5

1.5

-3

-2.8

-2.6

-2.4

-2.2

-2

-1.8

-1.6

fig.14 Zoom da figura 12 Para finalizar esta seco, convm acrescentar que podemos dimensionar os eixos de uma representao grfica usando a funo axis. Para exemplificar, retomemos o grfico da funo seno acima apresentado e faamos: >> v=[ -pi pi 1.2 1.2]; >> axis(v); Obtemos:

41

Grfico da funo f(x)=seno(x), -pi<x<pi

1 0.8 0.6 0.4 0.2 f(x) 0 -0.2 -0.4 -0.6 -0.8 -1

-3

-2

-1

0 x

fig.15 redimensionamento dos eixos Podemos fazer representaes paramtricas de forma semelhante usada atrs. Suponhamos que queremos representar parametricamente uma elipse. Podemos fazer: t=-pi:pi/25:pi; x=sin(t); y=4*cos(t); plot(x,y)
4 3 2 1 0 -1 -2 -3 -4 -1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

fig.16 grfico de elipse A cpia dos grficos da janela grfica para outro tipo de ficheiros, por exemplo Word, Powerpoint, etc., imediata, fazendo copy figure. No entanto, convm efectuar a cpia no formato windows metafile, porque a cpia no formato bitmap origina ficheiros que ocupam demasiado espao em memria.

42

7.

PROGRAMAO 7.1. Controlo de Fluxo

Os comandos que controlam o fluxo, especificam a ordem em que a computao feita. No MATLAB estes comandos so semelhantes aos usados na linguagem C, mas com uma estrutura diferente.

7.1.1.

Ciclo for

O ciclo for o controlador de fluxo mais simples usado na programao MATLAB. Atente-se no ciclo seguinte:

>> for i=1:2:5, X(i)=i^2; end onde se pode notar que o ciclo for dividido em quatro partes: A primeira parte (i=1) realizada uma vez, antes do ciclo se iniciar. A segunda parte consiste num teste ou condio que controla o ciclo, (i<=5). Esta condio avaliada. Se verdadeira, o corpo do ciclo (X(i)=i^2) executado. Na terceira parte a varivel i incrementada de acordo com o incremento especificado (2 neste caso). A quarta parte acontece quando a condio se torna falsa e ento o ciclo termina.

O comando end usado como limite inferior do corpo do ciclo. Por omisso o incremento 1. vulgar encontrar ciclos for na manipulao de matrizes: for i=

1:8 for j= 1:8, A(i,j)= i+j; B(i,j)= i-j; end

end

43

7.1.2.

Ciclo while

O ciclo while semelhante ao ciclo for, mas apenas a condio testada. Por exemplo, na expresso a = l; b = 15; while a<b, clc a = a+l b = b-l pause(l) end disp(fim do loop) a condio a<b testada. Se ela for verdadeira, o corpo do ciclo ser executado. Seguidamente, a condio testada novamente; se verdadeira o corpo ser executado. Quando o teste concluir que a condio falsa, o ciclo terminar a execuo e continuar no comando que se segue ao ciclo while, aps o comando end.

7.1.3.

Comandos if e break

A seguir, apresentado um exemplo do uso da declarao 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 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, se nenhuma das condies anteriores forem satisfeitas, (else) A(i,j)=0. O comando elseif permite efectuar bifurcaes, pelo que bastante til. Porm pode ser omitido. Em geral, as construes com if tm a forma seguinte: if expr1 aces elseif expr2 aces . . . else 44

aces end conveniente, s vezes, controlarmos a sada de um ciclo, de outro modo que no o mtodo do teste, no incio ou no fim do mesmo. O comando break permite uma sada antecipada de um ciclo for ou while. Um comando break faz com que o ciclo 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-no, p-prxima 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

45

7.1.4.

O comando switch-case

Este comando actua de forma semelhante ao if e pode ser usado em situaes em que h vrias alternativas de sada dependentes de um ou mais parmetros de entrada. Tem a forma:

SWITCH switch_expr CASE {case_expr,} aco CASE {case_expr1, case_expr2, case_expr3,...} aco, ...., aco ... OTHERWISE, aco, ...., aco END

Vejamos um exemplo. Suponhamos que temos um conjunto de 8 sinais cujos grficos queremos traar em diferentes parties da rea grfica. Podemos fazer: for i=1:8 s=X(i,:); switch i case {1,2} subplot(311); case {4,5,6} subplot(312); otherwise subplot(313); end plot(s); end

46

7.2.

OPERAES COM O DISCO

Os comandos load e save so usados, respectivamente, para importar dados do disco (rgido ou flexvel) para a rea de trabalho do MATLAB e exportar dados da rea de trabalho para o disco. Podem ser efectuadas outras operaes com o disco, como executar programas externos, alterar o directrio de trabalho, listar o directrio, etc.

7.2.1.

Manipulao do Disco

Os comandos cd, dir, delete, type e what do MATLAB so usados da mesma maneira que os comandos similares do sistema operacional. cd muda de directrio de trabalho dir lista o contedo do directrio actual delete apaga ficheiro type mostra o contedo do ficheiro texto what lista ficheiros ".m", ".mat" e ".mex".

Para maiores detalhes sobre estes comandos utilize o help.

7.2.2.

Importar e Exportar Dados

Os dados contidos na rea de Trabalho do MATLAB podem ser armazenados em ficheiros, no formatos texto ou binrio, utilizando o comando save. Existem diversas maneiras de utilizar este comando. Por exemplo, para armazenar as variveis X, Y e Z pode-se fazer: save guarda os dados no ficheiros binrio "matlab.mat". save X guarda a matriz X no ficheiro o binrio "x.mat". save arql X Y Z guarda as matrizes X, Y e Z no ficheiro binrio "arq1.mat". Guarda as matrizes X., Y e Z no ficheiro texto "arq2.sai" com 8 dgitos. guarda as matrizes X., Y e Z no ficheiro texto "arq3.sai" com 16 dgitos. importados pelo MATLAB desde que estes sejam 47

save arq2.sai X Y Z -ascii

Save arq3.sai X Y Z -ascii -double

Os dados obtidos por outros programas podem ser

guardados em disco num formato apropriado. O comando load pode ser usado se os dados forem armazenados no formato ASCII, e no caso de matrizes, com colunas separadas por espaos e cada linha da matriz a ocupar uma linha de texto. Por exemplo, suponha que um programa em linguagem C, depois de executado, gera o ficheiro "teste.sai" que contm a matriz 1.0000 4.0000 7.0000 Executando o comando: >> load teste.sai o MATLAB importa a matriz, que passa a chamar-se teste: >> teste 2.0000 5.0000 8.0000 3.0000 6.0000 9.0000

teste = 1 4 7 2 5 8 3 6 9

Obviamente, o MATLAB pode tambm importar (atravs do comando load) os dados que foram anteriormente exportados por ele. Por exemplo, para importar as variveis X, Y e Z, anteriormente exportadas usando o comando save, pode-se fazer: save save X save arq1 X Y Z save arq2.sai X Y Z -ascii save arq3.sai X Y Z -ascii -double load load x load arq1 load arq2.sai load arq3.sai

Deve salientar-se que o comando save, quando usado para exportar os dados do MATLAB em formato texto, exporta apenas um bloco contendo todas as variveis. Quando importamos estes comandos atravs do comando load, importada apenas uma varivel com nome do ficheiro. Por exemplo >> X=rand(3,3)

X= 0.2190 0.6793 48 0.5194

0.0470 0.6789 >> Y = rand(3,3)

0.9347 0.3835

0.8310 0.0346

Y= 0.0535 0.5297 0.6711 >> save arq2.sai X Y -ascii >> clear >> load arq2.sai >> arq2 0.0077 0.3835 0.0668 0.4175 0.6868 0.5890

arq2 = 0.2190 0.0470 0.6789 0.0535 0.5297 0.6711 0.6793 0.9347 0.3835 0.0077 0.3834 0.0668 0.5194 0.8310 0.0346 0.4175 0.6868 0.5890

Estas formas de acesso ao disco so de utilizao simples. No entanto, h outras que tm relao ntima com a linguagem C e que permitem o acesso e transferncia de dados obtidos por outros sistemas de aquisio. So de referir, p.ex.: fread, fwrite, fseek, fscanf, fgetl, fgets, load, fopen, etc.

49

8.

VARIVEIS E EXPRESSES SIMBLICAS

Uma das toolboxes mais interessantes (e das mais recentes) a toolbox symbolic que permite manipular expresses que alm de grandezas e variveis numricas, contm tambm variveis simblicas. Por exemplo: >> syms x >> simplify((sin(x))^2+(cos(x))^2) ans =1 Com estes comandos consegue-se simplificar a expresso sen2 x+cos2 x. Mesmo usando apenas a rea de trabalho podemos tirar partido das possibilidades do clculo simblico. Por exemplo o comando inline permite definir uma funo e us-la sempre que queira, sem necessidade de a redefinir. Vejamos: f=inline(log(x^2+abs(y)),x,y) d: f= Inline function: f(x,y) = log(x^2+abs(y)) f(-2,3)

ans =

1.9459 Tambm pode ser considerado nesta seco o comando str que serve para introduzir um texto como se se tratasse de um nmero: str='estou farto do MatLab'

str =

estou farto do MatLab Um outro comando interessante feval que permite correr uma funo definida pelo seu nome com determinados parmetros: feval=(inteiros,10,30)

Vamos agora regressar ao objectivo inicial desta seco: usar a toolbox symbolic. Primeiro temos de informar o MATLAB que x uma varivel simblica, usando sym; depois pedimos para simplificar a expresso que a envolve. Neste caso, usamos uma funo chamada simplify. Como vimos anteriormente, a funo um comando que pode ter alguns argumentos de entrada e alguns de sada. Neste caso, a funo simplify tem como argumento de entrada e de sada uma expresso simblica. Uma vez assente que x uma varivel simblica, podemos definir expresses que envolvem esta varivel. Por exemplo, dadas duas funes f(x) = 2x2 +3x-5 e g(x) = x2 -x+7, 50

podemos efectuar uma srie de operaes algbricas envolvendo estas funes. >> f=2*x^2+3*x-5; g=x^2-x+7; >> f+g ans = 3*x^2+2*x+2 >> f-g ans = x^2+4*x-12 >> f*g ans = (2*x^2+3*x-5)*(x^2-x+7) >> expand(ans) ans = 2*x^4+x^3+6*x^2+26*x-35 >> f/g ans = (2*x^2+3*x-5)/(x^2-x+7) >> expand(ans) ans = 2/(x^2-x+7)*x^2+3/(x^2-x+7)*x-5/(x^2-x+7) >> pretty(ans) 2 x x 5 2 ---------- + 3 ---------- - ---------2 2 2 x - x + 7 x - x + 7 x - x + 7 >> f^3 ans = (2*x^2+3*x-5)^3 >> expand(ans) ans = 8*x^6+36*x^5-6*x^4-153*x^3+15*x^2+225*x-125 Observe que o MATLAB no faz as simplificaes ou expanses automaticamente. Para isso, usamos comandos como por exemplo: simplify simplifica; expand - faz a expanso; pretty - mostra a expresso de uma forma mais fcil de visualizar; simple - tenta encontrar a forma mais simples de escrever uma expresso.

O MATLAB pode realizar operaes mais avanadas sobre expresses simblicas, usando comandos como:

compose - calcula a composio das funes f(x) e g(x) em f(g(x)); finverse - encontra a inversa funcional de uma expresso; subs - substitui uma varivel por um nmero (ou por outra varivel) numa expresso; diff - calcula a derivada de f.

Por exemplo: 51

>> f=1/(1-x^2); g=sin(x); >> compose(f,g) ans = 1/(1-sin(x)^2) >> compose(g,f) ans = sin(1/(1-x^2)) >> finverse(g) ans = asin(x) >> subs(f,x,2) ans = -1/3

O MATLAB pode tambm resolver equaes. Por exemplo, para resolver a equao ax2 +bx+c = 0, algebricamente, podemos usar os comandos:

>> syms a b c x >> solve(a*x^2+b*x+c) ans = [1/2/a*(-b+(b^2-4*a*c)^(1/2))] [1/2/a*(-b-(b^2-4*a*c)^(1/2))]

O MATLAB pode exibir este resultado de uma forma mais fcil de visualizar usando, como vimos a funo pretty. >> pretty(ans) [ [ [1/2 [ [ [ [ [1/2 [ 2 1/2] -b + (b - 4 a c) ] --------------------] a ] ] 2 1/2] -b - (b - 4 a c) ] --------------------] a ]

52

9.

APNDICE

9.1.

Funes elementares

Trigonomtricas sin sinh asin cos acos tan tanh atan atan2 cot - Seno. - Seno Hiperblico - arco do seno - Co-seno - arco do co-seno - Tangente - Tangente Hiperblica - arco de tangente - arco de tangente para os 4 quadrantes - Cotangente

Exponencial exp log log10 log2 pow2 sqrt - Exponential. - Logaritmo Natural - Logaritmo decimal - Logaritmo de Base 2 - potncia de base 2 - raz quadrada

53

Complexos abs angle complex conj imag real unwrap - Valor absoluto = mdulo - Fase = argumento - Constroi complexos a partir das partes real e imaginria. - Complexo conjugado - Parte imaginria - Parte real - desenbrulha a fase = soma mltiplos de 2 para tornar a fase contnua cplxpair - Faz sair nmeros aos pares complexos conjugados

arredondamento e resto fix floor ceil round mod rem sign - Arredonda em direco a zero - Arredonda para baixo (esquerda no eixo real) - Arredonda para cima (direita no eixo real) - Arredonda para o inteiro mais prximo - Mdulo = resto depois de diviso (com sinal) - resto depois de diviso - Sinal

54

9.2.

Operadores relacionais

The six relational operators are <, <=, >, >=, ==, and ~=. A < B efectua comparaes elemento a elemento entre A e B e retorna uma matrix com as mesmas dimenses e cujos elementos so um ou zero consoante a relao ou no verdadeira. Obviamente, A e B devem ter as mesmas dimenses (ou uma pode ser um escalar).

& E Lgico A & B uma matriz cujos elementos so 1's onde ambas A e B tm elementos no-nulos e 0's onde, pelo menos, uma tem um zero. A e B devem ter as mesmas dimenses (ou uma pode ser um escalar).

| OU Lgico A | B uma matriz cujos elementos so 1's onde A ou B tm elementos no-nulos e 0's onde ambas tm um zero. A e B devem ter as mesmas dimenses (ou uma pode ser um escalar).

~ NO Lgico ~A uma matriz cujos elementos so 1's onde A tem zeros e 0's onde A tem elementos no-nulos.

xor OU Exclusivo xor(A,B) 1 onde ou A, ou B, mas no ambas, no-nula.

--------------------------------------------------------------------------------------------------------------NOTA FINAL A elaborao deste manual introdutrio ao MATLAB, foi feita com base na experincia pessoal do autor, com o auxlio do Manual do MATLAB 5 e de alguma pesquisa na Internet. Como texto introdutrio no pretende mais do que dar o pontap de sada, ou seja, indicar um caminho atravs de um dos mais poderosos meios postos ao dispor de um Engenheiro ou Cientista. Existe uma grande quantidade de livros sobre ou com aplicaes do MatLab, facilmente encontrveis em livrarias tcnicas ou na Internet. H alguns temas no tratados que escapam ao objectivo deste texto, como sejam: agregados de clulas e estruturas, teis em programao avanada, e o simulink, ferramenta extremamente til na simulao de sistemas contnuos e, em particular, de sistemas de Telecomunicaes. Todas as sugestes que permitam aumentar a eficcia deste manual so bem vindas

mdo@uninova.pt e mdo@inesc.pt

55

Você também pode gostar