Anda di halaman 1dari 28

Universidade Federal de S ao Jo ao Del Rei - UFSJ

Institu da pela Lei 10.425, de 19/04/2002 - D.O.U. de 22/04/2002 Pr o-Reitoria de Ensino de Gradua c ao - PROEN

Apostila de Matlab
Prof. Nat a Goulart da Silva Campus Alto Paraopeba
vers ao 0.91

Sum ario
1 Introdu c ao 2 Tipo de Dados Fundamentais 2.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Comandos de leitura e Escrita 4 Manipula c ao de Arquivos 5 Operadores 5.1 Operadores Aritm eticos . 5.2 Operadores Relacionais . . 5.3 Operadores L ogicos . . . . 5.4 Preced encia de Operadores 3 4 6 7 8 9 9 9 10 11

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

6 Comandos Condicionais 12 6.1 If, If elseif e else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 6.2 Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 7 Comandos for e while 8 Scripts e Fun co es 15 17

9 Estudos de Fun co es e Gr acos 2D 19 9.1 Utilizando ezplot e vari aveis simb olicas . . . . . . . . . . . . . . . . . . . . . . 21 9.2 Avaliando fun c oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 9.3 Obtendo Ra zes de Equa co es e Polin omios . . . . . . . . . . . . . . . . . . . . 22 10 Considera co es sobre performance 11 Alguns Comandos 12 Erros mais comuns 13 Refer encias 23 25 28 28

Introdu c ao

O software Matlab, inicialmente concebido para utiliza ca o em c alculos matriciais, possui tamb em caracter sticas que permitem o desenvolvimento de scripts e de algoritmos como em outras linguagens de programa ca o. Um script e um arquivo que cont em um ou mais comandos. Ap os salvar este arquivo, pode-se execut a-lo digitando seu nome no interpretador de comandos do Matlab. Como propriedade fundamental, o Matlab faz uso das matrizes como estrutura de dados b asica. Atualmente, o Matlab e um produto comercial extremamente completo utilizado por muitas ind ustrias de engenharia e por cientistas1 . Ap os ser iniciado, o Matlab geralmente apresenta uma tela como a da Figura 1. Nesta tela vemos a Janela de Comandos (Command Window) na lateral direita, onde s ao digitados os comandos que o programa ir a interpretar. No canto superior esquerdo, a janela Current Directory apresenta todos os arquivos dispon veis na pasta que o Matlab usa como diret orio de trabalho. Esta pasta de trabalho pode ser alterada acionando a caixa que se encontra no centro superior da interface do Matlab, chamada tamb em de Current Directory. Para que um script seja executado pelo Matlab e necess ario que ele seja salvo na pasta de trabalho atual ou que o caminho onde o script estiver armazenado fa ca parte do path (caminho) do Matlab. Uma janela com o hist orico dos comandos utilizados recentemente e apresentada no canto inferior esquerdo da interface. Pode-se alterar as janelas que s ao exibidas pelo Matlab, acionando o menu Desktop e marcando a janelas que devem aparecer. Na Figura 2 s ao apresentadas as janelas selecionadas. Este documento apresenta informa c oes b asicas para a aplica ca o da ferramenta na disciplina de C alculo Num erico. Outras informa c oes est ao dispon veis atrav es do comando help do Matlab e no site dispon vel na segunda refer encia no nal deste documento.

Figura 1: Janela Principal do Matlab.


1

http://www.mathworks.com/

Figura 2: Alterando congura c oes de exibi ca o de janelas. Depois de se inicializar uma sess ao em Matlab e visualizado o sinal de prompt (>>) que signica que o Matlab est a pronto para receber os comandos. Um aspecto importante na utiliza ca o dos comandos no Matlab e que h a diferencia c ao de letras mai usculas e min usculas nos nomes de vari aveis e comandos. Por exemplo, n ao existe o comando SU M e sim sum e as vari aveis x e X s ao diferentes. Em uma sess ao do Matlab, para salvar todos os comandos digitados na janela de comandos e suas respectivas sa das, podemos usar o comando diary. Antes de iniciar o trabalho no Matlab, digite na janela de comandos: diary arquivosaida.txt. Assim, tudo que for digitado at e que comando diary o seja executado, ou que o Matlab seja encerrado, estar a salvo no arquivo arquivosaida.txt.

Tipo de Dados Fundamentais

O Matlab trabalha fundamentalmente com o tipo de dados matriz de n umeros reais ou complexos. V arios tipos de dados podem ser representados na forma matricial. Um escalar x pode ser considerado uma matriz com uma linha e uma coluna: x = matriz (1x1). Um ponto (x, y ) como uma matriz de uma linha e duas colunas: (x, y ) = matriz (1x2). Uma matriz pode ser inicializada de forma expl cita como resultado de uma opera c ao, como resultado da leitura de um arquivo de dados ou introduzida diretamente pelo utilizador. Para os exemplos que ser ao apresentados, consideram-se as seguintes matrizes:
1 2 3 B= 4 5 6

A=

1 2 3 4 5 6

Denindo uma matriz de forma expl cita:

>> A = [1, 2, 3; 4, 5, 6] , ou, >> A = [1, 2, 3 4, 5, 6] O nome de uma matriz deve ser iniciado por uma letra e pode conter at e 19 caracteres. Quando os elementos de uma matriz s ao digitados, pode-se utilizar v rgulas ou espa cos para separar as colunas e ponto e v rgula ou nova linha para separar as linhas. Para se realizar a soma dos elementos de um vetor ou a soma das colunas de uma matriz, pode-se utilizar a fun c ao sum. Caso deseja-se obter a soma das linhas da matriz, usa-se o operador de matriz transposta e a fun ca o sum. Obt em-se os valores da diagonal de uma matriz com a fun ca o diag . Outras fun c oes que operam sobre matrizes s ao listadas no nal da apostila. Antes de implementar alguma fun ca o para resolver um problema espec co, pode ser interessante vericar se esta fun ca o j a existe na ferramenta, fazendo consultas na documenta ca o. A fun c ao f liplr faz com que a ordem das colunas da matriz seja invertida, ou seja, a primeira coluna passe a ser a u ltima, a segunda a pen ultima e assim sucessivamente. Pode-se acessar aos elementos de uma matriz por um ndice u nico ao inv es de ndices (i, j ). A refer encia aos elementos da matriz acontece de cima para baixo da primeira para a ultima coluna. Assim, em uma matriz 3 x 3, o elemento a13 e referenciado pela ndice 3, o elemento a12 pelo ndice 4. Para a matriz A representada pela gura 3, o elemento A(5) seria igual a 3.

Figura 3: Acesso a elementos da Matriz Caso tente-se acessar no Matlab elementos fora dos limites da matriz, ir a ocorrer um erro com a mensagem: indexoutof bounds. Por em, caso seja atribu do um valor a uma posi c ao fora dos limites iniciais da matriz, a matriz ser a expandida para receber este valor, e os outros elementos da linha ou coluna da matriz ser ao preenchidos com o valor zero. Pode-se criar uma matriz ou vetor atrav es de tr es par ametros, valorinicial:passo:valornal. O valor que chamamos de passo e um valor de incremento ou decremento do valor inicial at e atingir o valor nal. No comando a seguir, ser a criado um vetor com primeiro valor igual a 70 e ser a subtra do o valor 5 aos pr oximos elementos at e que o limite 0 seja atingido.

a = 70: 5:0 a =

70

65

60

55

50

45

40

35

30

25

20

15

10

Pode-se fazer ltros ou alterar matrizes e vetores trabalhando com os intervalos dos ndices das colunas e/ou linhas. Quando na posi ca o do ndice da linha ou coluna aparece o s mbolo :, signica todas as linhas ou colunas. Dada uma matriz A 5 x 5, se quisermos exibir apenas as tr es primeiras linhas de A, podemos usar o seguinte comando: A(1 : 3, :). Ou se quisermos exibir apenas as linhas mpares de A, digitar A(1:2:end,:). Neste exemplo, temos os valores 1:2:end aplicando ltros a `s linhas da matriz. Estes valores indicam que ser a exibida a linha 1, com incremento de 2, ser a exibida a linha 3 e assim sucessivamente at e a exibi ca o da u ltima linha da matriz (end). Assim, para esta matriz, seriam exibidas as linhas 1 , 3 e 5. Como na posi ca o do ndice das colunas aparece o s mbolo :, todos os elementos das colunas destas linhas ser ao mostrados. Utilizando a l ogica dos ltros anteriores, o comando A(:, 2) = [] pode ser utilizado para apagar a segunda coluna de uma matriz. Esta opera ca o pode ser realizada para qualquer coluna ou linha. Uma matriz ou vetor pode ser criado atrav es de opera co es realizadas sobre dados existentes, conforme o exemplo:

>>n =1:3 n = 1

>> pot = [ n n . 2 n . 3 ] pot = 1 2 3

27

2.1

Strings

Uma string e uma sequ encia ordenada de caracteres representada no Matlab na forma de um vector linha de caracteres. Uma das formas de se manipular strings e atribu -la a uma vari avel. O conte udo precisa estar delimitado por aspas simples. Ap os atribuir a string, podemos acessar cada letra com um ndice do vetor. O primeiro elemento do vetor corresponde a primeira letra da string e assim sucessivamente. O exemplo a seguir apresenta esta atribui ca o:

str = ' I s t o e uma s t r i n g ' ; str ( 1 ) ans = I str ( 3 ) ans=t

Se quisermos armazenar uma lista de strings, como por exemplo, os meses do ano, de maneira que sejam acessados pelos ndices podemos usar a atribui ca o informando os itens escritos com aspas simples, delimitados por ponto e v rgula e utilizando chaves com delimitador do vetor. O exemplo a seguir apresenta a leitura e acesso de um vetor nessa sintaxe.

semana = { ' Domingo ' ; ' Segunda ' ; ' Ter c a ' ; ' Quarta ' ; ' Quinta ' ; ' S e x t a ' ; ' S a bado ' } ;

semana ( 1 ) ans =
'

Domingo '

semana { 1 } ans = Domingo

Para realizar a compara c ao entre duas strings, podemos usar a fun c ao strcmp.

string = ' a ' ; strcmp ( string , ' a ' ) ans = 1 strcmp ( string1 , ' A ' ) ans = 0

Comandos de leitura e Escrita

Uma das formas mais simples de imprimir mensagens no Matlab e atrav es do comando disp. Este comando recebe como par ametro, entre par enteses e aspas simples, o texto que deve ser impresso na tela. Para a leitura de informa co es, pode-se armazenar em vari aveis, valores digitados no teclado atrav es da utiliza ca o da fun c ao input. Os comandos a seguir apresentam exemplos de uso das fun co es disp e input.

d i s p ( ' Imprimi uma mensagem s i m p l e s na t e l a ' ) %Armazena em n1 e n2 o s v a l o r e s d i g i t a d o s p e l o t e c l a d o n1 = i n p u t ( ' D i g i t e um n u mero : ' ) ; n2 = i n p u t ( ' D i g i t e o u t r o n u mero : ' ) ;

O comando disp pode imprimir mensagens que contenham strings delimitadas por aspas e valores de vari aveis. O exemplo a seguir apresenta uma mensagem onde ocorre a transforma ca o de um valor em cm para polegadas. A fun ca o num2str transforma um valor num erico em string.

entrada = 5 ; unidade = ' cm ' ; d i s p ( [ num2str ( entrada ) ' ' unidade % O resultado sera : 5 cm e igual a 1 . 9 6 8 5 polegadas .

'

e igual a

'

num2str ( entrada / 2 . 5 4 )

'

polegadas . ' ] ) ;

O Matlab possui fun c oes mais completas para leitura e escrita de valores que apresentam sintaxe parecidas com as utilizadas na linguagem C. Dentre estas fun co es, e extremamente u til o uso da fun ca o fprintf. Atrav es desta fun ca o podemos imprimir na tela mensagens com v arias formata co es, strings, valores inteiros e em ponto utuante. Para formatar as informa c oes o comando fprintf utiliza-se os seguintes caracteres: %s - utilizado para imprimir uma string %c - utilizado para imprimir uma character 7

%d - utilizado para imprimir um n umero inteiro %f - utilizado para imprimir um n umero ponto utuante \n - Gera uma quebra de linha \t - Gera tabula ca o \\- utilizado para imprimir uma barra \% - utilizado para imprimir por cento Exemplos de utiliza c ao do comando fprintf:

f p r i n t f ( ' Ol a Mundo ! ! ! \ n ' ) ; f p r i n t f ( ' Meu nome e %s \ n ' , ' J o s e '); x = 0:.1:1; A = [ x ; exp ( x ) ] ; f p r i n t f ( ' %6s %12 s \ n ' , ' x ' , ' exp ( x ) ' ) ; f p r i n t f ( ' %6.2 f %12.8 f \ n ' , A ) ; %R e s u l t a d o x exp ( x ) 0.00 1.00000000 0.10 1.10517092 0.20 1.22140276 0.30 1.34985881 0.40 1.49182470 0.50 1.64872127 0.60 1.82211880 0.70 2.01375271 0.80 2.22554093 0.90 2.45960311 1.00 2.71828183 a = [1.02 , 3.04 , 5 . 0 6 ] ; f p r i n t f ( '%d \ n ' , round ( a ) ) ; %R e s u l t a d o : 1 3 5

Manipula c ao de Arquivos

O Matlab possui comandos equivalentes aos da linguagem C para manipular arquivos. Para abrir um arquivo texto para leitura como entrada de dados, utilize o seguinte comando:

fid = f o p e n ( ' a r q u i v o . dat ' , ' r ' )

Onde: d e uma vari avel que cont em o endere co l ogico do arquivo de leitura arquivo.dat. Para ler os dados, utiliza-se o comando fscanf. Supondo que o arquivo de dados contenha uma coluna de valores no formato real, eles ser ao lidos de forma sequencial pelo comando:

x = f s c a n f ( fid ,

'

%f ' ) ;

Terminada a leitura dos dados do arquivo fecha-se o arquivo com o comando: fclose(d). Para gravar um arquivo de dados, emprega-se a seguinte sequ encia de comandos:

fid = f o p e n ( ' a r q u i v o g r a v a c a o . dat ' , ' w ' ) ; f p r i n t f ( fid , '%f ' , x ) ;

Observe que o status do arquivo gravacao.dat e de escrita (w - write). Ao terminar a grava c ao dos dados, fecha-se o arquivo com o mesmo comando visto anteriormente, fclose(d).

5
5.1

Operadores
Operadores Aritm eticos

Os operadores aritm eticos s ao utilizados para realizar opera c oes matem aticas sobre n umeros ou matrizes no Matlab. A seguir s ao listados alguns operadores aritm eticos: Operador + / \ Descri ca o Adi ca o Subtra ca o Multiplica ca o Divis ao a ` Direita Divis ao a ` Esquerda Elevado a ` pot encia Transposta

5.2

Operadores Relacionais

Estes operadores realizam compara co es quantitativas entre dois valores, como por exemplo, maior que, menor que, etc. A Tabela apresenta os operadores utilizados pelo Matlab. Operador Descri ca o < <= > >= == Menor que Menor ou igual a Maior que Maior que ou igual Igual Diferente Transposta

~=

Caso os operadores relacionais sejam aplicados sobre matrizes de iguais dimens oes, as compara co es ser ao realizadas elemento a elemento e ser a gerada uma matriz resultado com as mesmas dimens oes das matrizes avaliadas. Veja o exemplo da compara c ao entre duas matrizes A e B.

A=

8 7 0 2 7 6 B= 3 2 5 9 0 5 4 1 7 3 0, 5 6

A == B

ans =

0 1 0 0 0 1 0 0 0

Pode ser realizada a compara ca o entre um valor escalar e uma matriz.

5.3

Operadores L ogicos

Os operadores l ogicos s ao utilizados para agrupar dois testes, no caso de operadores bin arios, ou modicar um operador, no caso de operadores un arios. Os principais operadores bin arios s ao: and que retorna o valor verdadeiro se os dois valores agrupados pelo operador s ao verdadeiros e o operador or que retorna verdadeiro se qualquer um dos dois operadores agrupados forem verdadeiros. No Matlab temos v arias maneiras de utilizar operadores l ogicos. Os primeiros operadores l ogicos citados s ao chamados de operadores short-circuiting. O funcionamento destes operadores ocorre da seguinte maneira: Operador && || Descri ca o Retorna um valor l ogico verdadeiro (1) se ambos os valores s ao verdadeiros e o valor l ogico falso (0) caso contr ario. Retorna um valor l ogico verdadeiro (1) se quaisquer valores, ou ambos, s ao verdadeiros e o valor l ogico falso (0) caso contr ario.

Estes operadores avaliam a segunda express ao apenas quando necess ario. Se for avaliado por exemplo, A > 1 && B < 3, o valor de B ser a avaliado somente se o teste para a primeira express ao for verdadeiro. De outra forma, no teste A > 1 ||B < 3, a segunda express ao n ao ser a avaliada se a primeira express ao for verdadeira. No exemplo a seguir, a fun ca o ser a executada apenas se esta estiver no path do Matlab, evitando assim erros como: myfun.m, cannot be found. comp = (exist( myf un.m ) == 2)&&(myf un(x) >= y ) Podemos realizar a avalia ca o de dois vetores atrav es dos operadores l ogicos. Sejam dois vetores A e B descritos a seguir: A= 0 1 1 0 1 B= 1 1 0 0 1

O operador & ir a retornar 1 (true) se ambos os elementos de uma mesma posi c ao forem diferentes de zero em ambos os vetores e zero caso contr ario, no caso do operador | ser a 10

retornado 1 (true) se qualquer elemento de uma posi ca o dos vetores for diferente de zero, e retornar a zero, caso contr ario. O operador ~ retorna o valor sim etrico do elemento. Exemplo: A & B = 01001 A |B = 11101 ~A = 10010 Podemos usar fun c oes equivalentes aos operadores l ogicos A&B and(A, B ) A |B or(A, B ) ~A not(A) A fun c ao nd determina o ndice de um vetor que coincide com uma dada condi ca o l ogica. Esta fun ca o pode ser usada para alterar, por exemplo, elementos de uma matriz ou vetor que satisfa cam algum crit erio de teste. Seja a matriz A criada pela fun c ao magic que gera uma matriz de tamanho n com valores de seus elementos variando em 1 e n2 , e que a soma de cada linha ou coluna tem sempre o mesmo valor. A = magic(4)

A=

16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

i = nd(A > 8); A(i) = 100

A=

100 2 3 100 5 100 100 8 100 7 6 100 4 100 100 1

O mesmo resultado pode ser obtido pelo seguinte comando: A(A > 8) = 100;

5.4

Preced encia de Operadores

Em uma express ao, deve-se avaliar a preced encia de cada um operadores: aritm eticos, relacionais e l ogicos. A preced encia determina qual opera c ao ou operador ser a avaliado primeiro. Operadores com mesma proced encia s ao avaliados da esquerda para a direita na ordem em que aparecem. A lista a seguir informa o operadores com sua ordem de preced encia. 1. Parenteses (); 2. transposta de uma matriz e potencia ca o; 11

3. nega c ao e operadores un arios (+,-); 4. Multiplica c ao e divis ao 5. soma e subtra ca o 6. operador separa ca o : 7. menor que (<), menor igual(<=), maior que (>), maior igual (>=), igual (==), diferente (~=) 8. Operador and de elementos (&) 9. Operador or de elementos (|) 10. Operador and (&&) 11. Operador or (||) A ordem de avalia c ao dos operadores pode ser alterada fazendo uso de parenteses para aumentar a preced encia de determinadas parcelas de uma express ao. O Matlab sempre d a ao operador & preced encia sobre o operador |, mesmo que o operador |esteja posicionado mais a esquerda. A express ao a |b & c e avaliada como se fosse escrita a |( b & c). Ent ao, deve-se usar parenteses para explicitar a preced encia entre estes operadores. O mesmo vale para os operadores && e ||.

6
6.1

Comandos Condicionais
If, If elseif e else

No Matlab o comando if pode apresentar as seguintes sintaxes:

i f express~ ao Instru co ~ es . . . end i f express~ ao Instru co ~ es . . . else Instru co ~ es . . . end i f express~ a o1 Instru co ~ es . . . e l s e i f express~ a o2 Instru co ~ es . . . else Instru co ~ es . . . end

12

O comando if avalia uma ou um conjunto de express oes e caso o resultado seja verdadeiro, as instru c oes contidas dentro do if s ao executadas. Exemplo:

n =5; if n > 0 d i s p ( 'O n u mero l i d o e maior que z e r o ' ) ; end

No trecho de c odigo descrito anteriormente, verica-se que a vari avel n tem armazenado um valor maior que zero. A mensagem contida no comando disp apenas ser a impressa se a condi ca o for verdadeira, o que ir a ocorrer neste exemplo. Todos os comandos que estiverem entre o if e o respectivo end ser ao executados caso o teste seja verdadeiro. Um comando if termina com um comando end. Neste exemplo, utiliza-se um teste que verica apenas uma condi ca o. Caso existam apenas dois estados poss veis para um teste, pode-se utilizar o comando condicional if juntamente com o else. A seguir e apresentado um trecho de c odigo que verica se um n umero e par ou mpar. Para vericar se um n umero e par, avaliamos se o resto da divis ao inteira do n umero por dois e igual a zero. Se isso ocorrer o n umero e par, caso contr ario, o n umero e impar e n ao precisamos fazer um segundo teste para chegar a essa conclus ao, por isso usamos o else. Para calcular o resto da divis ao inteira, podemos usar a fun ca o mod ou a fun c ao rem :

n = 5; i f mod ( n , 2 ) = = 0 d i s p ( 'O n u mero l i d o e par ' ) ; else d i s p ( 'O n u mero l i d o e impar ' ) ; end

mod(x,y) e obtido pela express ao: x f loor(x./y ). y para y diferente de zero. Onde a fun ca o oor arredonda o resultado para o menor n umero inteiro, se aproximando de zero. rem(x,y) e obtido pela express ao; x f ix(x./y ). y , se y e diferente de zero. Onde a fun ca o x arredonda o resultado para o menor n umero inteiro, se aproximando de menos innito. Por conven c ao: mod(x,0) == x. mod(x,x) == 0. mod(x,y), para x =y e y =0, tem o mesmo sinal de y. rem(x,0) == NaN. rem(x,x), para x =0 == 0. rem(x,y), para x =y e y =0, tem o mesmo sinal de x. mod(x,y) e rem(x,y) s ao iguais se x e y t em o mesmo sinal. Se houver v arios poss veis estados para um teste, podemos utilizar v arios comandos if independentes ou utilizar comandos elseif juntamente com comandos if. Os comandos elseif

13

e else s ao opcionais e s ao executados apenas quando o teste realizado anteriormente apresenta resultado igual a falso. V arios comandos elseif podem estar inclu dos ap os um comando if. Em uma estrutura de testes, o comando else eu nico e suas instru c oes ser ao executadas se todos os testes anteriores falharem. Exemplo:

n =5; if n > 0 d i s p ( 'O n u mero l i d o e maior que z e r o ' ) ; elseif n < 0 d i s p ( 'O n u mero l i d o e menor que z e r o ' ) ; else d i s p ( 'O n u mero e igual zero ' ) ; end

O resultado da avalia ca o de uma express ao e verdade ou true se o resultado e diferente de zero ou de vazio, falso caso contr ario. Pode-se utilizar operadores relacionais e l ogicos nos testes realizados. Podemos inserir mais de um comando dentro de um comando if inclusive outros comandos if. Um comando if pode avaliar v arias testes separados por operadores relacionais. O exemplo a seguir verica e imprimi o resultado se for digitada uma nota v alida.

n = i n p u t ( ' Entre com uma nota ' ) ; i f n > 100 | | n < 0 d i s p ( ' Nota i n v alida ' ) ; else i f n >= 60 d i s p ( ' Aprovado ' ) ; else d i s p ( ' Aprovado ' ) ; end end

6.2

Switch

A sintaxe do comando switch deve seguir as seguintes regras:

vari avel_tes te = 1 ; switch varia vel_tes te case expressao1 % Se a e x p r e s s a o 1 f o r i g u a l ao v a l o r c o n t i d o na v a r i avel varivel teste , a Instru c ao1 ser a executada Instru c~ o es1 case expressao2 % Se a e x p r e s s a o 2 f o r i g u a l ao v a l o r c o n t i d o na v a r i avel varivel teste , a Instru c ao1 ser a executada Instru c~ o es2 : otherwise % A instru c aon ser a e x e c u t a d a s e nenhuma o u t r a a n t e r i o r f o r . Instru c~ o esn end

14

O comando Switch avalia v arias op c oes e executa as instru co es inclu das dentro da op ca o na qual o teste e verdadeiro. Cada teste e avaliado pela palavra reservada case. Exemplo:

numero = i n p u t ( ' Entre com um n u mero : ' ) ; switch numero case 1 disp ( case 0 disp ( case 1 disp ( otherwise disp ( end

'

N umero N e g a t i v o . ' ) ; Zero ' ) ; N umero P o s i t i v o ' ) ; Outro V a l o r ' ) ;

'

'

'

Ap os executar as instru co es compreendidas dentro de um case, o Matlab continua processando os comandos ap os o bloco switch. As instru co es contidas dentro da se c ao otherwise s ao executas apenas se nenhum teste anterior for verdadeiro. No Matlab, apenas o primeiro case que apresenta resultado true e executado. Os valores testados pelo comando case podem ser uma lista de valores contidos em um vetor conforme exemplo({52,78}).

n= 5 2 ; switch ( n ) case 52 d i s p ( ' N umero 52 ' ) case { 5 2 , 78 } d i s p ( ' N umero 52 ou 78 ' ) end

Resultado: N umero 52

Comandos for e while

Os comandos for e while s ao utilizados para executar uma ou mais a c oes por um n umero repetido de vezes at e que uma determinada condi c ao seja satisfeita. Ambos os comandos utilizam uma vari avel, chamada vari avel de controle, que e respons avel pela interrup ca o da execu ca o. Estes comandos, for e while, s ao geralmente chamados de la cos. A vari avel de controle e iniciada, a cada execu c ao do la co e vericada se a condi ca o de teste que envolve a vari avel de controle e verdadeiro e ent ao os comandos dentro do la co s ao executados. A cada vez que os comandos do la co s ao executados, geralmente, a vari avel de controle e alterada, tendo seu valor se aproximando gradativamente da condi c ao de parada. O comando for e geralmente executado por um n umero determinado de vezes, mas e poss vel interromper sua execu c ao atrav es do comando break ou alterando internamente o valor da vari avel de controle. A sintaxe do comando for e mostrada no exemplo a seguir:

15

f o r i =1:1:10 i end

No exemplo anterior, a vari avel i e a vari avel de controle. O la co ser a executado com o i tendo como valor inicial igual a 1 e sendo incrementado a cada execu ca o em uma unidade. O la co ser a interrompido quando i for igual a 11, pois 10 e o limite da vari avel de controle. O comando for i=1:10 tem o mesmo efeito. O valor utilizado como incremento pode ser qualquer importante inteiro positivo ou negativo, caso seja igual a 1, n ao precisa ser apresentado. E vericar que o la co deve ser executado um n umero nito de vezes. Assim, especial aten c ao deve ser dada aos poss veis valores da vari avel de controle. A seguir s ao apresentados exemplos do uso do for:

% I m p r i m i r o s v a l o r 1 . 0 a t e 0 . 0 em ordem d e c r e s c e n t e , com decremento i g u a l a 0.1 for s = 1.0: 0.1:0.0 disp (s) end % Imprimi a cada e x e c u ca o do l a c o , um e l e m e n t o do v e t o r for s = [1 ,5 ,8 ,17] disp (s) end %Imprimi a cada e x e c u c a o do l a c o um v e t o r c o l u n a da m a t r i z i d e n t i d a d e 5 x 5 . S e r a o impressos 5 vetores coluna . f o r e = eye ( 5 ) disp (e) end %Outra forma de a l t e r a r v a l o r e s de um v e t o r . Somando 4 a cada e l e m e n t o do v e t o r . a = [ 3 4 6 2 5] for i = 1: length (a) a(i) = a(i) + 4; end %Somando 5 a o s e l e m e n t o s p a r e s da m a t r i z A A = [ 3 4 6; 2 5 4; 6 3 2] for i = 1: length (A) f o r j =1: l e n g t h ( A ) i f rem ( A ( i , j ) , 2 )==0 A(i , j) = A(i , j) + 5; end end end

O comando while tem funcionamento semelhante ao comando for. No comando for, a vari avel de controle e normalmente declarada, iniciada e alterada no princ pio do la co. No caso do comando while, a vari avel de controle e iniciada antes da execu c ao do la co. A cada execu ca o do la co, a condi ca o de teste e vericada e caso o resultado seja verdadeiro, as instru co es internas do la co s ao executadas. Para que a condi c ao de parada seja alcan cada, a vari avel de controle deve ser alterada dentro das instru co es do la co. Exemplos de uso do while :

16

%I m p r i m i r o s v a l o r e s de n = 0 , 2 , 4 , 6 , 8 , 10 n = 0 w h i l e n <= 10 disp (n) ; n = n + 2; end

%E s t e exemplo v e r i f i c a o n u mero de l i n h a s do a r q u i v o magic .m, d e s p r e s a n d o l i n h a s em bra nco e coment arios . % Abre o a r q u i v o magic .m para l e i t u r a fid = f o p e n ( ' magic .m ' , ' r ' ) ; %i n i c i a uma v a r i a v e l como c o n t a d o r de l i n h a s count = 0 ; %Enquanto n a o c h e g a r ao f i n a l do a r q u i v o a b e r t o e c u j o i d e n t i f i c a d o r e s t a armazenado na varia vel fid w h i l e f e o f ( fid ) % A vari a v e l l i n e r e c e b e o conteu d o de uma l i n h a do a r q u i v o l i n e = f g e t l ( fid ) ; % O comando i f v e r i f i c a s e a l i n h a e v a z i a , s e tem c o m e n t a r i o s ou s e e l a e d i f e r e n t e de string i f i s e m p t y ( l i n e ) | | strncmp ( l i n e , '% ' , 1 ) | | ischar ( l i n e ) %Se o t e s t e do i f f o r v e r d a d e i r o , a l i n h a n ao e uma l i n h a v a l i d a na c o n t a b i l i d a d e do a r q u i v o e o comando c o n t i n u e % f a z com que a e x e c u c a o do l a c o s e j a e n t e r r o m p i d a n e s t e ponto e v o l t e ao i n i c i o , na l i n h a do comando w h i l e . continue end % Se a l i n h a n ao e v a z i a , o c o n t a d o r de l i n h a s e incrementado count = count + 1 ; end %Imprime o t o t a l de l i n h a s f p r i n t f ( '%d L i n h a s \ n ' , count ) ; %Fecha o a r q u i v o a b e r t o f c l o s e ( fid ) ;

No exemplo a seguir, a fun c ao myfunction apenas ser a executada se existir o arquivo no path do Matlab que a implementa, verica ca o feita pelo comando exist. Se a fun c ao existir e recebendo um par ametro x retornar um valor maior ou igual a pi, a mensagem Funcionou!!! e apresentada e o la co e interrompido pelo comando break.

w h i l e e x i s t ( ' m y f u n c t i o n .m ' ) && ( myfunction ( x ) >= p i ) d i s p ( ' Funcionou ! ! ! ' ) break end

Scripts e Fun c oes

Um script e um arquivo com comandos interpret aveis pelo Matlab cujo nome termina com a extens ao .m. Digitando-se o nome deste arquivo sem a extens ao na janela de comandos do Matlab, os comandos contidos no script s ao executados sequencialmente. Para isso, e necess ario que o arquivo m esteja em um diret orio listado no caminho path do Matlab. Um script e criado atrav es da op ca o criar novo arquivo m no menu arquivo ou na barra de tarefas 17

do Matlab. Por exemplo, suponha que o arquivo plotseno.m contenha as seguintes linhas:

x = 0:2* pi /N : 2 * pi ; y = s i n ( h*x ) ; plot (x , y)

Ao ser executado, a sequ encia de comandos contida no arquivo plotseno.m ir a gerar um gr aco com a fun ca o denida em y. Os comandos no script podem se referir a vari aveis j a denidas no Matlab, neste exemplo, vari aveis N e h utilizadas em plotseno.m. Al em dos scripts, as fun co es s ao um tipo de arquivo m que permitem ao usu ario criar novos comandos no Matlab. Uma fun ca o e denida como um arquivo m que come ca com um cabe calho na seguinte forma: f unction[saida1, saida2, ...] = nome f uncao(var1, var2, ...) Ap os a cria c ao do cabe calho da fun ca o, o restante do arquivo m consiste de comandos do Matlab que utilizam os valores das vari aveis var1, var2, ..., para calcular o valor das vari aveis saida1, saida2, etc. E importante observar que quando uma fun ca o e chamada, o Matlab cria um espa co de trabalho separado. Dessa forma, os comandos na fun c ao n ao podem se referir a `s vari aveis da a rea de trabalho, a menos que elas sejam passadas como argumentos da fun c ao (no lugar das vari aveis var1, var2, etc.). Inversamente, as vari aveis criadas dentro da fun c ao s ao apagadas quando a sua execu ca o termina, exceto se elas forem passadas como argumentos de sa da da fun c ao (vari aveis saida1, saida2, etc.). A seguir e apresentado um exemplo de uma fun c ao, chamada fcn, que calcula f(x) = 2 sin(x ).

f u n c t i o n y = fcn ( x ) y = sin (x .2) ; % U t i l i z a s e o o p e r a d o r e s c a l a r . para que a f u n c a o f c n r e t o r n e um v e t o r de mesma dimens ao da v a r i avel x .

Com esta fun c ao denida, podemos usar fcn como se fosse uma fun ca o padr ao do Matlab :

x = ( p i : 2 * p i / 1 0 0 : p i ) ' ; y = sin (x) ; z = fcn ( x ) ; plot (x , y , x , z) grid

Que gera um gr aco do c alculo da fun ca o sin(x) e outro com a fun ca o personalizada fcn(x). A seguir outro exemplo de uma fun ca o que recebe tr es n umeros (x,y,z) e retorna os valores da soma e do produto destes n umeros.

f u n c t i o n [ soma , produto ] = soma_produto ( x , y , z ) soma = x + y + z ; produto = x * y * z ;

18

end

Para usar esta fun ca o em Matlab executa-se: [s, p] = somaprod(2, 2, 3) que tem como resultado s= 7 e p= 12. O Matlab identica a fun ca o pelo nome do arquivo, neste caso somaprod, e n ao pelo nome que lhe atribui dentro do arquivo. poss E vel codicar v arias fun c oes em um arquivo e denir fun co es dentro de outras fun co es. Deve-se salvar os arquivos com o nome da primeira e principal fun c ao codicada. Quando existe mais de uma fun c ao em um arquivo e obrigat orio o uso do comando end para encerrar cada fun c ao.

Estudos de Fun c oes e Gr acos 2D

Uma das formas de se construir gr acos em duas dimens oes consiste em utilizar um conjunto de pares ordenados de pontos. Para esta abordagem, inicializamos dois vetores, com o mesmo n umero de elementos. Ap os armazenar valores nestes vetores, podemos criar o gr aco com o comando plot. Sejam os vetores x e y inseridos no Matlab pelo seguintes comandos: x =[ 0: 2: 22] y =[ 9 8 6 5 8 10 14 17 15 13 11 10 ] Pode-se criar um gr aco x,y com o comando plot que na sua forma mais b asica e assim utilizado: plot(x,y) Este gr aco est a representado na Figura 4

Figura 4: Gr aco do comando plot Para o comando plot, e ainda poss vel introduzir facilmente t tulos, identica ca o nos eixos e linhas de grade com os seguintes comandos: xlabel(Horas do dia) ylabel(Valores da Temperatura) title(Valores da Temperatura do Ar) grid 19

Atrav es do comando plot, pode-se criar tamb em gr acos de fun c oes f (x) utilizando um vetor x com pontos extremos denidos pelo intervalo que a fun ca o ser a avaliada. O vetor x e criado com valores intermedi arios variando por um passo pequeno, algo como 0, 1. Vejamos os comandos que criam o gr aco da fun ca o f (x) = x2 + x 9 no intervalo [4, 4], apresentada na Figura 5. x = 4 : 0.1 : 4; y = x.2 + x 6; plot(x,y); ylabel(f(x)) ylabel(Valores de x) title(Gera c ao de Gr acos) grid

Figura 5: Gr aco f (x) = x2 + x 9 Para a gera c ao de duas curvas de fun co es no mesmo gr aco, podemos usar o comando plot, passando como par ametro v arios vetores. Exemplo: O comando a seguir gera dois gr acos na mesma janela, y em fun ca o de x e z em fun c ao de x. plot(x,y,x,z); Outra forma e utilizar o comando hold ap os a gera c ao do primeiro gr aco.

hold congela a tela do gr aco atual de forma que gr acos subsequentes s ao sobrepostos
sobre o atual

hold novamente desabilita-se a op ca o. hold on habilita superposi c ao de gr acos hold o desabilita superposi c ao de gr acos
Outro comando que pode ser utilizado para plotar gr acos e o comando fplot. O comando fplot recebe como par ametros a fun c ao e o intervalo a ser avaliado e tem sintaxe semelhante a fplot( f , [a, b]). Exemplo: Gerar o gr aco de f (x) = 3 x2 ex . Utiliza-se a fun ca o fplot como a seguir: 20

fplot(3 x2 exp(x),[0 4 0 8]) Este gr aco est a representado pela Figura 6

Figura 6: Gr aco com o comando fplot

9.1

Utilizando ezplot e vari aveis simb olicas

O Matlab possui um pacote adicional que permite opera co es e gera ca o de gr acos com vari aveis simb olicas. Vari aveis simb olicas s ao vari aveis que n ao possuem valores num ericos. Com este tipo de vari avel e poss vel realizar c alculos como deriva ca o e integra c ao de fun co es. O emprego de vari aveis simb olicas na gera ca o de gr acos evita que se tenha que denir um vetor x com os seus limites e intervalos previamente a gera c ao do gr aco. Assim, e poss vel gerar um gr aco sem determinar o intervalo de estudo. Ap os a gera ca o do gr aco e uma an alise inicial do comportamento da fun ca o, podemos passar o intervalo que se deseja analisar como par ametro para as fun co es do Matlab que geram os gr acos. Para a gera ca o de gr acos em duas dimens oes que utilizam vari aveis simb olicas, utilizaremos o comando ezplot. O comando ezplot recebe como par ametro obrigat orio a fun ca o que se deseja plotar entre aspas simples. Outros par ametros podem ser passados para a fun ca o como o intervalo da vari avel independente. Assim como no comando plot, podem ser denidas caracter sticas adicionais do gr aco como r otulos de eixos. Para declarar uma vari avel simb olica utilizamos o comando do Matlab syms. Assim, o comando syms x y cria duas vari aveis simb olicas. O exemplo a seguir cria uma vari avel simb olica x e gera o gr aco 2 de fun ca o f(x) = exp(x ) cos(x) no intervalo [-6,6] representado pela Figura 7.

syms x ezplot ( ' exp( x 2 ) c o s ( x )

'

,[ 6 ,6])

21

Figura 7: Gr aco com o comando ezplot

9.2

Avaliando fun co es

Dado qualquer x, podemos encontrar o valor da fun ca o f (x) executando o comando de atribui ca o da fun ca o em uma vari avel qualquer ap os o valor de x ser denido. Exemplo: Se quisermos calcular o valor da fun ca o f (x) = 3 x2 exp(x) para x = 1, 5, devemos executar os seguintes comandos no Matlab : x = 1.5; f = 3 x2 exp(x) Ser a armazenado em f o valor da fun c ao no ponto x = 1,5 que, para o exemplo, ser a f = 2, 2683. Utilizando esta forma de calcular o valor da fun ca o em um ponto, a cada altera ca o do valor de x, o comando de avalia c ao da fun c ao deve ser executado novamente. Uma outra forma de avaliar uma fun c ao em um determinado ponto e utilizar o comando feval. A fun ca o feval recebe como par ametros o nome da vari avel que corresponde a fun c ao e o ponto onde a fun ca o ser a avaliada. Uma das formas de passar a fun c ao como par ametro para a feval e mostrado a seguir. Veja que e necess ario colocar antes da fun ca o os s mbolos @(x). O resultado dos comandos digitados ser a 7.1250 x = 1.5; f = @(x)x.3 9 x + 3 f eval(f, x) Com o uso dos dois comandos citados anteriormente, podemos calcular o valor de uma fun ca o qualquer em um ponto fornecido.

9.3

Obtendo Ra zes de Equa co es e Polin omios

Uma das formas de se armazenar um polin omio de grau n e colocar os coecientes do polin omio em um vetor com tamanho n+1. Como exemplo, seja o polin omio x4 +4x2 5x+6. Podemos armazenar este polin omio em um vetor v com a seguinte representa ca o v = [ 1 0 22

4 -5 6]. Vemos que os coecientes que n ao aparecem na forma tradicional do polin omio s ao armazenados no vetor como zero. Assim, dado um polin omio armazenado na forma de um vetor, podemos encontrar suas ra zes no Matlab com o comando roots. Vejamos o exemplo: v = [ 1 0 4 -5 6]; roots(v ) ans = 0.7119 + 2.0646i 0.7119 2.0646i 0.7119 + 0.8667i 0.7119 0.8667i Vemos que para o exemplo foram encontradas quatro ra zes imagin arias. Outra forma de encontrar uma raiz para uma dada fun ca o, visto que e conhecido um valor aproximado para esta raiz, e utilizar o comando fzero. A partir do ponto informado como aproxima c ao, o comando fzero encontra um intervalo onde a fun c ao tem varia ca o de sinal e ent ao procura pela raiz. Se o ponto informado como aproxima ca o n ao pertencer a vizinhan ca de uma raiz, a fun ca o n ao convergir a para a solu c ao. Sabendo que a fun c ao f = 3 x2 exp(x) tem um zero pr oximo a x =1, podemos executar o comando: fzero(3 x2 exp(x),1) ans = 0.9100

10

Considera co es sobre performance

Uma das formas de se vericar o tempo gasto para execu ca o de um script ou fun c ao no Matlab e utilizar os comandos tic e toc. Use o comando tic no in cio do c odigo que deve ser contabilizado e o comando toc logo ap os o encerramento do c odigo. Ser a informado o tempo gasto na execu c ao. Se o trecho de c odigo for pequeno ou se desejar vericar a m edia de n execu co es, pode-se usar um la co para o c alculo.

tic for k = 1:100 executar o c o digo end toc

Conforme citado no in cio deste material, o Matlab e otimizado para trabalhar com matrizes e vetores. Assim, em algumas implementa co es, e mais eciente utilizar estas estruturas do que por exemplo, usar la cos. Vejamos o exemplo de dois c odigos que calculam o valor de uma fun c ao em v arios pontos. O primeiro utiliza um la co e o segundo vetores. Estes c odigos calculam o valor de seno de 1001 valores variando entre 0 e 10.

23

i = 0; for t = 0:.01:10 i = i + 1; y(i) = sin (t) ; end

Utilizando apenas vetores o c odigo ca mais simples e eciente.

t = 0:.01:10; y = sin (t) ;

mais eciente pr E e-alocar vari aveis matrizes ou vetores, principalmente com dimens oes signicativamente grandes para evitar que a cada incremento do tamanho da vari avel, seja necess ario que o Matlab procure novas posi c oes cont nuas de mem oria para armazenar a estrutura de dados. A seguir s ao apresentados dois trechos de c odigo que incrementam o tamanho do vetor x com os respectivos tempos de execu c ao que exemplicam este problema. Verica-se que a segunda codica ca o e mais eciente com rela c ao ao tempo computacional necess ario para a execu ca o.

tic x = 0; f o r k = 2:1000000 x ( k ) = x ( k 1) + 5 ; end toc

Tempo de execu ca o = 0,301528 segundos.

tic x = z e r o s (1 , 1000000) ; f o r k = 2:1000000 x ( k ) = x ( k 1) + 5 ; end toc

Tempo de execu ca o = 0.011938 segundos. Para pr e-alocar matrizes podemos usar fun co es como: ones que gera uma matriz com todos os elementos iguais ao n umero 1, zeros que gera uma matriz preenchida com zeros, eye para criar uma matriz identidade, magic e rand para criar matrizes com n umeros pseudoaleat orios. Quando usamos os operadores l ogicos and e or, deve-se escolher entre os operadores & e |que realizam compara co es entre elementos de vetores ou os operadores && e ||que operam sobre valores escalares. Outras considera co es sobre performance: Dividir scripts grandes em v arios scripts pequenos; Codique fun c oes mais simples que podem ser reutilizadas; Use fun c oes ao inv es de scripts ; Se poss vel, use vetores em substitui ca o a la cos; Pr e-alocar vari aveis; 24

11

Alguns Comandos

Dado A = [1 2 3;4 5 6;7 8 0] Calcular: poly - polin omio caracter stico det(A) - determinante trace(A) - tra co rank(A) - rank roots(p) - ra zes do polin omio caracter stico inv(A) - inversa da matriz eig(A) - auto-valores e auto-vetores

who Lista as vari aveis denidas at e ao momento whos Id entico ao who s o que e dada informa ca o adicional (tamanho, ?) what Lista dos cheiros *.m, *.mat e*.mex exit,quit Abandonar o Matlab ! Executar comando do sistema operacional computer Tipo de computador sobre o qual o Matlab est a executando clear Eliminar vari aveis do espa co de trabalho control + c Abortar uma a ca o executada pelo Matlab ans Vari avel usada para armazenar o resultado da u ltima opera c ao help Para acessar ajuda % Para inserir uma linha de coment arios pause Espera por uma a c ao do utilizador
Fun c oes Matem aticas

abs valor absoluto sqrt raiz quadrada real parte real de um n umero complexo imag parte imagin aria de um n umero complexo conj conjugado de um n umero complexo round converte para o inteiro mais pr oximo sign sinal de n umero
25

fmin m nimo de uma fun ca o de uma vari avel fzero zeros de uma fun ca o de uma vari avel fmins m nimo de uma fun ca o de v arias vari aveis fzeros zeros de uma fun ca o de v arias vari aveis sin seno cos coseno tan tangente asin arco seno acos arco coseno atan arco tangente sinh seno hiperb olico cosh coseno hiperb olico tanh tangente hiperb olica log logaritmo natural (base e) log10 logaritmo (base 10) rem(x,y) Resto da divis ao de x/y exp(x) Exponencial de x ex log(x) Logaritmo natural de x na base e: ln x log10(x) Logaritmo de x na base 10: log10 x
Manipula ca o de Matrizes

diag matriz diagonal eye matriz identidade ones matriz de uns zeros matriz de zeros rand matriz aleat oria magic matriz m agica tril matriz triangular inferior
26

triu matriz triangular superior det determinante de uma matriz rank caracter stica de uma matriz
Opera co es por colunas/linhas (vetores)

max m aximo min m nimo mean valor m edio std desvio padr ao median mediana sort ordena ca o sum soma dos elementos prod produto dos elementos di diferen cas (aproxima c ao da derivada) hist histograma table1 interpola ca o linear corr matriz de correla c ao cov matriz de covari an
Valores Especiais

ans resposta de uma express ao n ao atribu da a uma vari avel eps precis ao pi = 3, 14159... inf Nan indica que n ao e um n umero clock rel ogio nargin n umero de argumentos de entrada numa fun c ao nargout n umero de argumentos de sa da numa fun ca o
27

12

Erros mais comuns

1. index out of bounds : Prov avel acesso aos elementos fora dos limites de uma matriz no Matlab . Exemplo: Acesso ao elemento A(1,4) em uma matriz 3 x 3.

13

Refer encias

* 1 - Comando help do Matlab 2 - http://www.mathworks.com/help/matlab/index.html. Acessado em fevereiro 2013.

28

Anda mungkin juga menyukai