apostila de matlab - inpe(1)

22
Apostila de MATLAB Luis Marcelo de Mattos Zeri INPE dezembro/2001

Upload: miguelrosario26

Post on 18-Oct-2015

53 views

Category:

Documents


1 download

TRANSCRIPT

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    1/22

    Apostila de MATLAB

    Luis Marcelo de Mattos Zeri

    INPE

    dezembro/2001

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    2/22

    2

    Apresentao

    No documento final do I-EPGMET (Encontro dos Alunos de Ps-Graduao em Meteorologia),realizado em 2000, expressa-se claramente que os alunos gostariam de ter cursos introdutrios dos

    principais softwares e linguagens de programao utilizados pela comunidade de Meteorologia doINPE. Desde ento, essa demanda permaneceu presente, mas adormecida. Recentemente, emsetembro, com a retomada das discusses sobre a necessidade de cursos, props-se a elaborao deapostilas simples, bsicas, voltadas para o usurio que nada ou muito pouco conhece do software ouda linguagem de programao. Dessa proposta nasceu o Projeto Apostila.

    O Projeto Apostila composto de 5 grupos. Cada grupo foi responsvel pela elaborao de umaapostila sobre um software ou uma linguagem de programao. Os grupos so: Rosane Chaves eDaniel Andres (Grads); Rita Andreoli e Joo Carlos Carvalho (Fortran); Luis Marcelo de MattosZeri (Matlab); Pablo Fernandez e Emanuel Giarolla (Latex); e Hlio Camargo e Marcos Oyama(Unix). Os grupos, durante 2 meses, trabalharam intensamente (sem se descuidar das suasdissertaes e teses) para produzir as apostilas. A apostila que voc est recebendo fruto doesforo de um dos grupos.

    Gostaramos de agradecer a todos os colegas que revisaram a verso "0" das apostilas: AlexandraAmaro de Lima, Antnio Marcos Mendona, Edna Sousa, Elizabeth Reuters, Everson dal Piva, JosFrancisco de Oliveira Jnior, Marcos Yoshida, Maurcio Bolzan, Patrcia Moreno Simes, PauloMarcelo Tasinaffo, Raimundo Moura, Rodrigo de Souza e Wantuir Aparecido de Freitas. Assugestes, crticas e os comentrios apresentados foram de grande valia. Muito obrigado!

    Gostaramos, tambm, de agradecer a Ansio Moliterno por disponibilizar a rea pblica da fractal

    para os arquivos de exemplos das apostilas.As apostilas no tm o objetivo de competir com os cursos que so oferecidos pelo CPTEC ouINPE, mas complementar. A idia que o usurio, aps estudar a apostila, possa caminharsozinho, consultando manuais ou os colegas; ou seja, torne-se independente.A apostila uma

    ponte, no o fim. Recomenda-se aos leitores da apostila que faam os cursos oferecidos peloCPTEC ou INPE: sempre temos algo a aprender! Alm disso, no futuro, as apostilas podem servirde base para cursos ministrados por alunos-instrutores.

    Espera-se que, no futuro, outros Projetos Apostila sejam realizados, melhorando e atualizando asapostilas existentes. Alm disso, outras apostilas (p.ex. Fortran 90), podero ser elaboradas.

    Boa leitura!

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    3/22

    3

    Instalao dos exemplos

    Pea a algum do Suporte (ou algum colega que conhea um pouco de UNIX) para instalar osexemplos na sua rea. As instrues so as seguintes:

    1. Transfira (via ftp, como usurio annimo) o arquivo instala_apostila da rea pblica dafractal( /pub/software/apostila ) para o homedo usurio.

    (em negrito est o que voc deve digitar; a tecla Enter)

    nevasca:/home/fulano>ftp fractal

    Name (fractal:fulano):anonymous Guest login ok...

    Password:[email protected] #ATENO: no ir aparecer na tela! Guest login ok...

    ftp>cd pub/software/apostila

    ftp>asc

    ftp>get instala_apostila

    ftp>quit nevasca:/home/fulano>

    2. Abra a permisso de execuo de instala. nevasca:/home/fulano>chmod u+x instala_apostila

    3. Execute instala_apostila(e entre com as informaes pedidas durante a instalao). nevasca:/home/fulano>instala_apostila

    ________________________________________________________________________________

    Explicao dos exemplos

    - Usurios do LMO:O MATLAB est instalado na Fenix e roda em diversas mquinas alm dela, como Caos, Neblina,

    Nevasca, Terra, Urano e Vortice.

    - Todos os usuriosDos 3 exemplos que acompanham a apostila apenas o segundo exige interveno do usurio na suaexecuo. Os detalhes para tal procedimento esto no arquivo chamado leiame.txt, na mesma pastadesse exemplo. Abaixo mostrado o contedo do arquivo leiame.txt:

    Esse programa pede que seja entrado com o nome de um arquivocontendo dados. Esse arquivo acompanha o programa e chama-sed25413h.dat. Basta digitar o seu nome quando solicitado pelo

    programa.

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    4/22

    Sumrio

    1. INTRODUO ......................................................................................2

    2. INICIANDO O MATLAB ..........................................................................2

    3. DEFINIO DE VARIVEIS........................................................................2

    4. VETORES E MATRIZES............................................................................4

    4.1 Vetores ......................................................................................4

    4.2 Matrizes .....................................................................................6

    4.3 Importando dados .......................................................................7

    4.4 Operaes matemticas com matrizes ............................................8

    5. GRFICOS .......................................................................................10

    6. ESCREVENDO PROGRAMAS NO MATLAB.....................................................14

    6.1 Controle de Fluxo num Programa ................................................. 18

    6.2 Criao de funes pelo usurio................................................... 18

    7. AJUDA ON LINE NO MATLAB E REFERNCIAS ...............................................19

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    5/22

    2

    1. Introduo

    O MATLAB tanto uma linguagem de programao quanto um ambiente de computao tcnicaque possibilita a anlise e visualizao de dados, clculos matemticos e desenvolvimento dealgoritmos, entre outras aplicaes. Sua primeira verso foi escrita no final da dcada de 70 nas

    Universidades do Novo Mxico e Stanford visando fornecer suporte a cursos de teoria matricial,lgebra linear e anlise numrica.

    2. Iniciando o MATLAB

    O espao de trabalho do MATLAB iniciado ao se digitar no prompt do terminal o comandomatlab. Feito isso iniciado o ambiente de trabalho. Nesse ambiente possvel usar comandos degerenciamento de arquivos, como deletearquivoe editarquivo, e comandos de movimentaoentre diretrios, comuns aos usurios de DOS e shell (UNIX), como dir, lsecddiretrio. Parasair do ambiente basta digitar exitou quit.

    3. Definio de variveisNo MATLAB possvel definir variveis que sero usadas na sesso de trabalho, como no exemploabaixo:

    a=10a= 10

    Pressionando a tecla ENTER, o MATLAB confirma na tela o valor inserido a menos que sejacolocado um sinal de ponto e vrgula (;) aps o fim da linha:

    b=20;

    Essa opo interessante para a definio de variveis extensas, evitando que todos os seus valoressejam exibidos na tela.

    Uma varivel complexa definida especificando-se suas partes real e a imaginria:

    c=1 + 2ic = 1.0000 + 2.0000i

    Definidas as variveis possvel ento efetuar operaes matemticas com elas. As operaesbsicas so listadas abaixo

    Operao Smbolo

    adio, a+b +subtrao, a-b -multiplicao, ab *Diviso, ab /potenciao ^

    e alguns exemplos so dados a seguir:

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    6/22

    3

    a+bans= 30

    onde ans a varivel padro usada para resultados. Pode-se direcionar a sada para outra varivelda seguinte forma:

    d=a+bd= 30

    Algumas regras devem ser obedecidas na definio de variveis: as variveis so sensveis maisculas e minsculas; devem conter no mximo 31 caracteres; os nomes devemcomear com letras e caracteres acentuados no so permitidos.

    Alguns exemplos de nomes para variveis so: total_anual2000, media25, MEDIA25,X1251330. Note que, segundo as regras acima, o segundo e o terceiro exemplo referem-se avariveis diferentes.

    Algumas variveis j so pr-definidas, como pi(), iej( 1 ), realmine realmax(menor emaior nmero real utilizvel pelo MATLAB, respectivamente).

    Pode-se visualizar todas as variveis j definidas atravs do comando whos:

    whos

    Name Size Bytes Class

    a 1x1 8 double arrayans 1x1 8 double arrayb 1x1 8 double arrayc 1x1 16 double array (complex)d 1x1 8 double array

    Grand total is 5 elements using 48 bytes

    Nessa listagem v-se o nome (name), dimenso (size) e tamanho (medido em bytes) de cadavarivel definida anteriormente. A ltima coluna informa o tipo da varivel (class). Para apagaruma varivel usa-se o comando clear nome_da_varivel. O comando clear allremove todas asvariveis do espao de trabalho.

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    7/22

    4

    4. Vetores e Matrizes

    4.1 Vetores

    Um vetor no MATLAB uma matriz linha (vetor linha) ou uma matriz coluna (vetor coluna). Umvetor linha pode ser definido separando os valores entre colchetes por espaos ou vrgulas. Aseparao dos valores por ; produz um vetor coluna.

    pares=[2 4 6 8 10];primos=[2; 3; 5; 7; 11];

    Pode-se ento invocar essas variveis a qualquer momento:

    parespares = 2 4 6 8 10

    Os valores de um vetor linha ou coluna podem ser acessados usando-se ndices que identificam aposio do elemento no vetor, como nos exemplos abaixo:

    pares(3)ans = 6x=pares(4)x= 8ans+xans= 14

    Intervalos de valores podem ser selecionados dentro de um vetor. No exemplo abaixo definido umnovo vetor contendo apenas os elementos da segunda quinta linha do vetor primos:

    impares=primos(2:5)impares= 3 5 7 11

    O comando whosagora produz o seguinte resultado:

    whosName Size Bytes Class

    ans 1x1 8 double arrayimpares 4x1 32 double arraypares 1x5 40 double arrayprimos 5x1 40 double arrayx 1x1 8 double array

    Grand total is 16 elements using 128 bytesclear all

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    8/22

    5

    whos

    Acima vemos as dimenses dos vetores definidos e tambm que o vetor impares tem apenas 4linhas devido ao intervalo especificado na sua definio. Aps a visualizao todas as variveis

    foram apagadas com o comando clear all, o que resultou numa sada vazia para comando whosdigitado em seguida.

    Os vetores definidos acima tiveram seus elementos definidos um-a-um. No entanto vetores podemser construdos especificando-se valores iniciais, finais e incrementos:

    a=1:5, b=1:2:9a= 1 2 3 4 5b= 1 3 5 7 9

    (No exemplo acima a definio dos dois vetores foi encadeada numa nica linha, separando as duasdefinies por vrgula. Diferentes comandos podem ser definidos de uma s vez, desde queseparados por vrgula ou ponto-e-vrgula. O espao entre a vrgula e o prximo comando opcional.) Foi definido um vetor avariando de 1 a 5 (de um em um) e outro indo de 1 a 9, mas dedois em dois.

    O comando linspace(i,f,n)fornece um vetor linha de nelementos entres os valores ief. O vetor ado exemplo anterior pode ser redefinido da seguinte forma:

    a=linspace(1,5,5)a= 1 2 3 4 5

    O comando linspacesem o ltimo argumento fornece um vetor de 100 elementos como padro. Otamanho de um vetor pode ser verificado com o comando length, como no exemplo abaixo:

    b=linspace(1,5);length(b)ans= 100

    De maneira similar o comando logspace(i,j,n)fornece nelementos entre 10ie 10j. A ausncia doterceiro argumento, n, fornece 50 elementos entre 10ie 10j.

    Um vetor pode ser transposto usando-se o operador de transposio ', o apstrofo. Para vetorescomplexos realizada a transposio do complexo conjugado. Para a operao apenas detransposio usa-se a transposio pontuada, ou seja, o operador de transposio 'precedido de um

    ponto. Abaixo mostrada a transposio do vetor adefinido anteriormente:

    a=a.'

    a = 1

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    9/22

    6

    2 3 4 5

    4.2 Matrizes

    O conhecimento das tcnicas de manipulao de matrizes fundamental pois dados importadospara o espao de trabalho do MATLAB so tratados como matrizes. A importao de dados servista adiante.

    Matrizes so definidas no MATLAB de forma anloga definio dos vetores linhas ou colunas:usam-se vrgulas ou espaos para separar os elementos de uma linha e pontos-e-vrgulas paraseparar as linhas:

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

    8 1 6 3 5 7 4 9 2

    Como no caso dos vetores, os elementos, linhas e colunas de uma matriz podem ser acessadasusando-se ndices que definem a posio do elemento dentro da matriz. Assim, o elemento dasegunda linha na terceira coluna pode ser acessado da seguinte maneira:

    m(2,3)ans = 7

    Para a seleo de linhas ou colunas inteiras usa-se o operador dois pontos :. O comando m(:,2)significa todas as linhas da coluna 2; m(3,:)retorna a linha 3, com todos os seus elementos.

    partir da matriz m possvel definir outra:

    n=m(1:2,2:3)n = 1 6 5 7

    O operador dois pontos foi usado duas vezes: uma para delimitar o intervalo de linhas desejado (dalinha 1 a 2) e outra para especificar o intervalo de colunas (da coluna 2 a 3).

    Quando necessrio remover alguma linha ou coluna de uma matriz atribui-se a esta linha oucoluna a matriz nula [ ]. Dessa forma a matriz remanescente ser composta apenas das linhas (oucolunas) remanescentes:

    m(:,3)=[]m = 8 1 3 5 4 9

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    10/22

    7

    No exemplo acima foi atribuda coluna 3 a matriz nula, resultando numa nova matriz m. possvel tambm montar grandes matrizes atravs de outras pequenas, como:

    a=[1 1;1 1];b=[2 2;2 2];c=[a b;b a]c =

    1 1 2 2 1 1 2 2 2 2 1 1 2 2 1 1

    4.3 Importando dados

    Dados importados para o espao de trabalho do MATLAB so tratados como matrizes. O comandousado para carregar um arquivo contendo dados o loadnome_do_arquivo. Esse comando utilizado para dados no formato ASCII. Arquivos contendo dados binrios no sero tratados nessaapostila. Para maiores informaes consulte a ajuda do MATLAB sobre o comando fread (digite

    help fread).Abaixo visto um exemplo.cd \dadosdir. .. temp.datload temp.datwhosName Size Bytes Classtemp 3600x1 28800 double array

    Grand total is 3600 elements using 28800 bytestemp(1:10)

    ans = 29.5346 29.2707 29.2381 29.2211 29.1069 29.1025 29.0861 29.2600 29.2710 29.1076

    No exemplo acima, aps ter entrado e visualizado o contedo da pasta dados, o arquivo temp.datcarregado. O comando whosmostra as dimenses da varivel associada ao arquivo: 3600 linhas e1 coluna. Aps isso as dez primeiras linhas do arquivo carregado so exibidas. Note que a varivelresultante do carregamento do arquivo possui o mesmo nome deste, exceto pela extenso. O grficoda varivel temppode ento ser feito.

    plot(temp(1:1000))

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    11/22

    8

    O comando plotutilizado ser descrito em detalhes em outra seo. Destaca-se aqui que apenas as1000 primeiras linhas da varivel foram impressas no grfico.

    4.4 Operaes matemticas com matrizes1

    Operaes matemticas simples (adio, subtrao, diviso e multiplicao) envolvendo escalares ematrizes seguem a mesma interpretao natural.

    m=[8 1 6;3 5 7;4 9 2]; 3*mans = 24 3 18 9 15 21 12 27 6

    m+100ans = 108 101 106 103 105 107 104 109 102

    Nas operaes entre matrizes devem ser respeitadas as regras usuais da matemtica quanto aonmero de linhas e colunas que duas matrizes devem ter para serem somadas, multiplicadas, etc. Noentanto existem operaes especiais. Sendo A=[a1a2... an] e B=[b1b2... bn] duas matrizes, ento:

    A./B = [a1/b1 a2/b2 ... an/bn]; A.*B = [a1b1 a2b2 ... anbn]; A.^B = [a1^b1 a2^b2 ... an^bn];

    A multiplicao de um vetor de mlinhas e 1coluna (m X 1) por um de 1linha e mcolunas (1 X m)resulta numa matriz de mlinhas e mcolunas. J a operao de multiplicao pontuada entre doisvetores de mesma dimenso, Am X 1X Bm X 1, por exemplo, produz um terceiro vetor de mesmadimenso cujos elementos so resultado da multiplicao elemento-a-elemento entre os dois vetoresiniciais.

    1Para evitar redundncias, vetores (linha ou coluna) sero tratados como matrizes.

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    12/22

    9

    a=1:100;b=2*a;plot(sin(a)*cos(b))

    ??? Error using ==> *Inner matrix dimensions must agree.

    Acima foram definidos dois vetores de mesma dimenso e em seguida um comando de grfico foidado sobre a operao entre esses dois vetores. A mensagem de erro exibida pelo MATLAB refere-se ao fato das dimenses para a multiplicao matricial no coincidirem (1 x 100 X 1 x 100). Para oclculo do vetor de elementos sen(a1)*cos(b1), sen(a2)*cos(b2), ..., sen(a100)*cos(b100) necessrio o uso da multiplicao pontuada. O comando plot(sin(a).*cos(b))produz ento ogrfico desejado (note o ponto antes do sinal de multiplicao). Nas operaes pontuadas asdimenses dos fatores devem ser iguais.

    Abaixo so listadas algumas funes matemticas elementares.

    Funes Elementaresabs(x) Valor absoluto ou mdulo de um nmero complexoacos(x) Arco co-senoacosh(x) Arco co-seno hiperblicoangle(x) ngulo de um nmero complexoasin(x) Arco senoasinh(x) Arco seno hiperblicoatan(x) Arco tangenteatanh(x) Arco tangente hiperblicocos(x) Co-senocosh(x) Co-seno hiperblicocross(a,b) Produto vetorial dos vetores a e b

    exp(x) Exponencialformat format longmostra 15 dgitos significativosinv(x) Matriz inversa da matriz xlog(x) Logaritmo naturallog10(x) Logaritmo na base 10max(x) Maior elemento em xmean(x) Mdia de xmin(x) Menor elemento em xsin(x) Senosinh(x) Seno hiperblicosqrt(x) Raiz quadradastd(x) Desvio padro

    sum(x) Soma dos elementos de xtan(x) Tangentetanh(x) Tangente hiperblica

    Algumas dessas operaes podem ser aplicadas a vetores ou matrizes. Para a funo de desviopadro std(x), por exemplo, se o argumento xfor um vetor o resultado ser o desvio padro dessevetor. Se xfor uma matriz, ser calculado o desvio para cada coluna dessa matriz. O mesmo ocorrecom as funes sum, max e mean, entre outras.

    Utilizando a funo sum possvel, por exemplo, calcular o produto escalar de dois vetores. a=[1 2 3];b=[3 2 4];c=sum(a.*b)

    c=

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    13/22

    10

    19

    5. Grficos

    O comando utilizado para fazer grficos bidimensionais no MATLAB o plot. Esse comando tem

    a seguinte forma: plot(x1, y1, S1, x2, y2, S2, ...), onde (xn,yn)so conjuntos de dados e Snso seqncias de caracteres que especificam cor, smbolos utilizados e estilos de linha.

    x=linspace(0,2*pi,30); y=sin(x); plot(x,y)

    Pode-se traar dois grficos simultaneamente:

    z=cos(x); plot(x,y,x,z)

    Note que o grfico anterior foi apagado e substitudo pelo novo. Abaixo ser mostrado um comandoa respeito disso. A seqncia de caracteres que contm a formatao da linha, dos smbolos e dascores usadas nos grficos pode conter os seguintes smbolos:

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    14/22

    11

    Smbolo Cor Smbolo Marcador Smbolo Tipo de Linhab azul . ponto - linha contnuag verde o crculo : linha pontilhada

    r vermelho x x -. traos e pontosc ciano + + -- linha tracejadam magenta * estrelay amarelo s quadradok black d losangow branco v tringulo p/ baixo

    ^ tringulo p/ cima< tringulo p/ esquerda> tringulo p/ direitap pentagramah hexagrama

    Abaixo v-se um exemplo de utilizao dos caracteres

    plot(x,y,'b:p',x,z,'r+-') , grid on, legend('sen(x)','cos(x)')

    No grfico acima foram utilizadas duas outras opes: grid on e legend. O primeiro adicionalinhas de grade ao grfico e o segundo cria uma caixa de legenda no canto superior direito dogrfico. A legenda pode ser movida com o mouseaps o grfico ser desenhado.

    Os valores mximos e mnimos dos eixos so controlados com o comando axis ([ xmin xmaxymin ymax]).No grfico acima esse comando teria o seguinte efeito:

    axis([1 6.5 -1 -0.5]);

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    15/22

    12

    Os limites normais podem ser restaurados com o comando axis seguido da opo auto (axisauto). Essa opo, que o padro usado nos grficos, adiciona uma "folga" aos limites mximos

    dos eixos x e y. Para que os limites dos eixos sejam os limites mximos dos dados usa-se a opotight:

    axis tight title('Curvas do seno e co-seno'),xlabel('Varivel x'),ylabel('Variveis Y e Z')

    Aps o primeiro comando percebe-se que o limite mximo em xpassou a ser o mximo valor dos

    dados nesse eixo. Outros comandos foram usados nesse grfico:title

    ,xlabel

    eylabel

    paraespecificar ttulos ao grfico, ao eixoxe ao eixoy, respectivamente.

    O MATLAB oferece tambm um comando de zoom. Essa opo ativada digitando-se zoomonna tela de comandos. Feito isso, a ampliao feita ao clique do mouse sobre o grfico (botoesquerdo do mouse). O clique com o boto direito (ou o clique duplo com o esquerdo) faz o grficoretornar ao nvel dezoomanterior. Outra possibilidade "desenhar" a janela na qual se deseja que o

    zoomseja feito. Para isso mantm-se o boto esquerdo do mousepressionado enquanto a setinha domouse arrastada sobre o grfico. Obtendo-se o tamanho de janela desejado o zoom executadoassim que o boto solto. A opo dezoom desligada com o comando zoom off.

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    16/22

    13

    Um novo comando de grfico, por padro, tem a sua sada direcionada para a figura j aberta,limpando-a (apagando os grficos j desenhados) e desenhando o novo. Para que os grficosanteriores sejam mantidos faz-se uso do comando holdon.

    hold on, plot(x,sin(x-pi/2),'kd-'),legend('sen(x)','cos(x)','sen(x-pi/2)')

    ylabel('Variveis Y, Z e sin(x-pi/2)')

    No grfico acima os comandos legende ylabelforam re-aplicados para que fizessem referncia nova curva.

    Para que a figura atual seja mantida e a sada dos comandos grficos seja direcionada para outrajanela, utiliza-se o comando figure. Tendo vrias figuras abertas, a sada dos comandos grficos especificada fazendo-se: figure(n), onde n o nmero da figura para a qual os comandos

    digitados devem ser direcionados. No final desse captulo sero vistos exemplos da utilizao dessecomando.

    possvel que vrios grficos sejam desenhados na mesma janela, mas com conjunto de eixosseparados, atravs do comando subplot(abc). O parmetro a o nmero de linhas desejado; bespecifica o nmero de colunas e c o ndice que indica a posio nessa "matriz" para onde a sadado grfico ser direcionada, a contar da esquerda para a direita e de cima para baixo.

    figure,subplot(311),plot(x,y),grid on,title('Seno') subplot(312),plot(x,z),grid on,title('Co-seno') subplot(313),plot(x,sin(x-pi/2)),grid on,title('sen(x-pi/2)')

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    17/22

    14

    Grficos com outras escalas podem ser criados atravs dos comandos loglog, semilogx,semilogy

    eplotyy

    . Existem tambm outros tipos de grficos no MATLAB. So eles:area

    ,pie

    ,pareto, polar, bar, stairs, hist, stem, errorbar, compass, feather, rose, filleplotmatrix.Para maiores informaes sobre cada um deles e tambm sobre grficos com outras escalas consultea ajuda via comando help: help hist,help pie, helploglog,helpsemilogx, etc. Todos essesgrficos so bidimensionais, mas o MATLAB tambm faz grficos tridimensionais. Para issoconsulte a ajuda referente aos comandos plot3, contour,pcolorecolormapentre outros.

    Feito um grfico pode-se salvar a figura em diversos formatos ou imprimi-la. O comando usadopara essa finalidade o print. Digitando-se help print v-se todos os formatos e opesdisponveis, como eps, epsc, tiff, jpg, etc. Vejamos um exemplo:

    figure(1), print depsc curvas1.epsc figure(2), print dtiff curvas2.tiff

    Na primeira linha de comandos acima o foco dos comandos direcionado para a figura 1 atravs docomando figure(1). Aps isso ela salva no formato epsc(eps Color) e d o operador que deve

    preceder a abreviao para o formato escolhido. Logo aps a opo de formato especificado onome do arquivo a ser criado. Para a segunda figura o formato escolhido foi o tiff.

    6. Escrevendo programas no MATLAB

    Seqncias de comandos podem ser armazenadas em arquivos e executadas no espao de trabalho

    do MATLAB. Para isso basta que o arquivo seja salvo com a extenso "m". Os comandos doexemplo acima poderiam ser guardados num arquivo:

    x=linspace(0,2*pi,30);y=sin(x);z=cos(x);

    plot(x,y,'b:p',x,z,'r+-')

    grid onlegend('sen(x)','cos(x)')axis tight

    title('Curvas do seno e co-seno')

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    18/22

    15

    xlabel('Varivel x')ylabel('Variveis Y e Z')

    Usando-se qualquer editor de texto, esses comandos so guardados num arquivo chamado teste.m,por exemplo, na pasta de trabalho chamada dados.

    cd \dados dir. .. temp.dat teste.m teste

    Programas eventualmente podem necessitar de informaes fornecidas na tela pelo usurio. Da

    mesma forma pode ser interessante que informaes sejam exibidas durante a execuo de umprograma. Para a primeira finalidade destaca-se o comando input. No programa feito acimapoderia ser colocada a seguinte linha:

    npontos=input('Quantos pontos deve ter a varivel x ?')x=linspace(0,2*pi,npontos);y=sin(x);z=cos(x);...

    A varivel que ir receber o valor na tela foi colocada no comando linspace. Durante a execuo o

    usurio seria avisado da seguinte forma: testeQuantos pontos deve ter a varivel x ?50npontos = 50

    Aps a pergunta foi entrado o valor 50e ento esse valor foi exibido na tela e o grfico foi feito.Note que a ausncia do ponto-e-vrgula no final da linha do comando inputfez com que o valor denpontosfosse exibido na tela.

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    19/22

    16

    O comando inputpode ser configurado para receber uma seqncia de caracteres como entrada.Essa seqncia pode ser, por exemplo, o nome do arquivo a ser carregado e processado. Veja aslinhas abaixo que executam essa tarefa:

    arquivo=input('Digite o nome do arquivo: ','s');

    load(arquivo)

    A opo 's'faz com que a entrada seja interpretada como uma seqncia de caracteres. O comandoloaddeve ser usado nessa forma (load(nome_do_arquivo)) quando o seu argumento for umaseqncia de caracteres. Veja no exemplo:

    arquivo=input('Digite o nome do arquivo: ','s');load(arquivo)eval(['T=' arquivo(1:length(arquivo)-4) ';'])

    Para o caso do nome do arquivo ser temp.data varivel arquivoconteria 8 caracteres, incluindo

    a o ponto que separa o nome da extenso. Aps o carregamento do arquivo uma varivel criadapelo comando load com o mesmo nome do arquivo menos a extenso dele. Nesse caso essavarivel seria chamada temp. At esse ponto o programa em questo "no sabe" que existe essavarivel temp, preciso defini-la no programa. A funo eval permite que o nome do arquivocontido na varivel chamada arquivo, menos a sua extenso, seja usado nessa definio.

    Os colchetes foram usados para concatenar horizontalmente vrias seqncias de caracteres. Aprimeira delas T=, a segunda arquivo(1:length(arquivo)-4),que tem como resultado tempe a terceira ;. Com esse comando foi dada a seguinte ordem ao MATLAB: "crie uma varivelchamada T que seja igual a varivel cujo nome se encontra na varivel arquivomenos os quatroltimos caracteres, de maneira a evitar a extenso e o ponto, ou seja, faa isso: T=temp;".

    Verificamos o resultado disso na listagem abaixo:

    whosName Size Bytes Class

    T 3600x1 28800 double arrayarquivo 1x8 16 char arraytemp 3600x1 28800 double array

    Grand total is 7208 elements using 57616 bytes

    Sem o uso da funo eval, ou seja, se fizssemos apenas T= arquivo(1: length(arquivo)-4);criaramos uma nova varivel chamada T, mas que conteria apenas um nome, uma seqncia decaracteres, que no caso seria a palavra temp.

    Como o contedo do arquivo agora foi associado a uma nova varivel, a varivel associada ao nomedo arquivo (temp) pode ser apagada, para liberar espao na memria. Para isso usa-se novamente ocomando eval, adicionando-se uma linha ao programa anterior:

    arquivo=input('Digite o nome do arquivo: ','s');load(arquivo)eval(['T=' arquivo(1: length(arquivo)-4) ';'])

    eval(['clear ' arquivo(1: length(arquivo)-4)])

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    20/22

    17

    whosName Size Bytes Class

    T 3600x1 28800 double arrayarquivo 1x8 16 char array

    Grand total is 3608 elements using 28816 bytes

    Note que a varivel arquivoainda permanece no espao de trabalho. Para apag-la usa-se apenas ocomando clear arquivo.

    O programa acima poderia ento continuar com comandos matemticos e/ou grficos.

    arquivo=input('Digite o nome do arquivo: ','s');load(arquivo)eval(['T=' arquivo(1: length(arquivo)-4) ';'])

    eval(['clear ' arquivo(1: length(arquivo)-4)])media=mean(T);plot(T-media),grid on,zoom on,xlabel('Tempo (s)'),ylabel(['T- ' num2str(media)])title('Desvio da mdia para temperatura')disp(media)

    O ltimo comando do programa acima tem quase o mesmo efeito da ausncia do ponto-e-vrgula nadefinio de uma varivel: ele exibe na tela o valor da varivel mas no exibe o seu nome.

    teste2Digite o nome do arquivo: temp.dat 29.9131

    Na definio do ttulo do eixo yfoi usado um novo comando, o num2str. Esse comando converteum nmero em uma seqncia de caracteres que pode ser usada num comando de ttulo, porexemplo. Os colchetes foram novamente usados para concatenar as seqncias 'T 'e a resultante docomando num2str. Pode-se tambm fazer o contrrio, converter uma seqncia de caracteres emum nmero, usando-se para isso o comando str2num. Abaixo v-se o resultado do comandonum2strno ttulo do eixo y.

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    21/22

    18

    6.1 Controle de Fluxo num Programa

    O controle de fluxo num programa escrito no MATLAB bem similar quele usado em outraslinguagens de programao. Ele faz com que uma srie de comandos seja executada repetidasvezes. Para isso utiliza-se o comando for.

    for n=1:10 x(n)=sin(n*pi/10); end

    Existe tambm outra forma de condicionar a execuo de alguns comandos. Isso pode ser feito como comando while:

    EPS=1; while (1+EPS)>1 EPS=EPS/2;

    end

    Enquanto a soma (1+EPS) for maior do que 1 o comando EPS=EPS/2 executado. Quando issodeixar de ser verdadeiro o ciclo termina. Esse programa s possvel porque quando EPS chega a10-16ele sai do limite de preciso finita do MATLAB e ento considerado zero.

    Por fim, pode-se usar a estrutura if-else-end, que apresenta a seguinte forma:

    if expresso comandos executados se expresso for Verdadeira else comandos executados se Falso end

    6.2 Criao de funes pelo usurio

    A criao de funes pelo usurio tambm pode ser feita no MATLAB. Seja o exemplo de criaode uma funo para o clculo das razes de uma equao de segundo grau. O arquivo que contm oscomandos dessa funo deve ter o mesmo nome da funo e ter extenso ".m". Dessa forma pode-secriar a funo raizessalvando os seguintes comandos num arquivo chamado raizes.m:

    function [x1,x2]=raizes(a,b,c)delta=sqrt(b^2 4*a*c);x1=(-b + delta)/2*a;x2=(-b - delta)/2*a;

    Essa funo usada ento fornecendo-se os parmetros a, b e c:

    a=1;b=1;c=-1;[x1,x2]=raizes(a,b,c)

    x1 = 0.618033988749895

    x2 = -1.61803398874989

  • 5/28/2018 Apostila de Matlab - Inpe(1)

    22/22

    19

    Criada a funo, possvel usar os resultados dela em outros programas criados no MATLAB.

    7. Ajuda on line no MATLAB e referncias

    O MATLAB oferece uma ajuda on-line no ambiente de trabalho. Ao longo do texto dessa apostilaj foi sugerido que essa ajuda fosse consultada para maiores detalhes e opes para algunscomandos usados.

    Pode-se tambm procurar por alguma palavra contida nas descries das diversas funes doMATLAB usando-se o comando lookfor palavra.

    Com o comando helpwin aberta uma janela que possibilita a navegao entre as funes e suasdescries. Outra fonte de informaes e ajuda obtida com comando helpdesk, que abre umarquivo em HTML no navegador da internet, contendo informaes mais detalhadas.

    Na internet o endereo http://www.mathworks.com/products/matlab/ oferece documentao(formato PDF), lista de funes e literatura tcnica a respeito.

    Na preparao dessa apostila foi usado o seguinte livro:

    Hanselman, D; Littlefield, B. MATLAB 5 Verso do Estudante Guia do Usurio, MAKRONBooks, 413 pp, So Paulo, 1999.

    http://www.mathworks.com/products/matlab/http://www.mathworks.com/products/matlab/