34
5/29/2015 Octave - Documentação http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 1/34 Octave: Guia de Estudo Nuno Cavalheiro Marques e Carmen Morgado 1 Breve Introdução O Octave é uma linguagem de programação de alto nível, destinada ao tratamento de problemas para computação numérica. O interface com o programador é efectuado através de uma linha de comando. O Octave pode efectuar cálculos aritméticos com reais, escalares complexos e matrizes; resolver sistemas de equações algébricas; integrar funções sobre intervalos finitos e infinitos e integrar sistemas de equações diferenciais ordinárias e diferenciais algébricas. Permite gerar para o ecrã e para a impressora gráficos 2D e 3D, utilizando o Gnuplot. O Octave é em grande parte compatível com o MatLab. Este documento constitui um breve resumo do manual do Octave que pode ser consultado em http://www.octave.org/doc/octave_toc.html ou localmente em http://www.di.fct.unl.pt/cursos/icp/downloads/octave.pdf . 2 Utilização do sistema Nesta secção apresentar-se-á o Octave como uma ferramenta de cálculo para problemas de computação numérica. O seu objectivo é descrever o funcionamento geral da aplicação, enquanto linguagem de linha de comando. O Octave (http://www.octave.org ) é uma aplicação desenvolvida utilizando uma filosofia OpenSource. A principal vantagem deste tipo de aplicações relativamente aos seus equivalentes comerciais (nomeadamente do MatLab, http://www.mathworks.com/ ) é o custo: as ferramentas OpenSource são de utilização livre, estando inclusive o seu código fonte disponível para o público em geral. Assim aplicações com este tipo de licença, podem ser livremente distribuídas e instaladas em qualquer computador. O código fonte da aplicação está igualmente disponível, o que fornece uma garantia de qualidade e robustez, sendo ainda possível adaptar ou estender a própria aplicação para a solução de determinados problemas. Podem ser obtidos mais detalhes sobre as ferramentas desenvolvidas com este tipo de licença, consultando http://www.gnu.org/philosophy/free-sw.pt.html . O Octave é uma ferramenta desenvolvida para o Sistema Operativo Linux (http://www.linux.org ), sendo actualmente distribuída com as principais versões deste sistema operativo. A sua utilização no ambiente Windows é igualmente possível através da utilização da ferramenta Cygwin (http://www.cygwin.com ), a qual fornece um ambiente de emulação da plataforma Linux sobre Microsoft Windows. Pode efectuar-se o download do Octave para MS-Windows quer da página da cadeira (http://di.fct.unl.pt/cursos/icp ), quer directamente, do site http://sourceforge.net/projects/matlinks . A instalação do Octave num computador equipado com sistema operativo Windows XP, NT ou 2000, deverá ser relativamente simples. A instalação é igualmente possível nos sistemas MS-Windows 95/98 e Me, no entanto nestes últimos por vezes ocorrem problemas. Após efectuar o Download do programa de instalação, bastará executar este programa e o Octave será instalado no seu computador. Em caso de dificuldades, o site indicado para obter mais informação para resolução de problemas relativamente à instalação do Octave sobre plataformas Windows é http://octave.sourceforge.net/Octave_Windows.htm .

Octave - Documentação

Embed Size (px)

DESCRIPTION

O Octave é uma linguagem de programação de alto nível, destinada ao tratamento de problemas paracomputação numérica. O interface com o programador é efectuado através de uma linha de comando.O Octave pode efectuar cálculos aritméticos com reais, escalares complexos e matrizes; resolversistemas de equações algébricas; integrar funções sobre intervalos finitos e infinitos e integrarsistemas de equações diferenciais ordinárias e diferenciais algébricas.

Citation preview

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 1/34

    Octave: Guia de EstudoNuno Cavalheiro Marques e Carmen Morgado

    1 Breve Introduo

    O Octave uma linguagem de programao de alto nvel, destinada ao tratamento de problemas paracomputao numrica. O interface com o programador efectuado atravs de uma linha de comando. O Octave pode efectuar clculos aritmticos com reais, escalares complexos e matrizes; resolversistemas de equaes algbricas; integrar funes sobre intervalos finitos e infinitos e integrarsistemas de equaes diferenciais ordinrias e diferenciais algbricas.Permite gerar para o ecr e para a impressora grficos 2D e 3D, utilizando o Gnuplot.O Octave em grande parte compatvel com o MatLab.Este documento constitui um breve resumo do manual do Octave que pode ser consultado emhttp://www.octave.org/doc/octave_toc.html ou localmente emhttp://www.di.fct.unl.pt/cursos/icp/downloads/octave.pdf.

    2 Utilizao do sistema

    Nesta seco apresentar-se- o Octave como uma ferramenta de clculo para problemas decomputao numrica. O seu objectivo descrever o funcionamento geral da aplicao, enquantolinguagem de linha de comando.

    O Octave (http://www.octave.org) uma aplicao desenvolvida utilizando uma filosofiaOpenSource. A principal vantagem deste tipo de aplicaes relativamente aos seus equivalentescomerciais (nomeadamente do MatLab, http://www.mathworks.com/) o custo: as ferramentasOpenSource so de utilizao livre, estando inclusive o seu cdigo fonte disponvel para o pblico emgeral. Assim aplicaes com este tipo de licena, podem ser livremente distribudas e instaladas emqualquer computador. O cdigo fonte da aplicao est igualmente disponvel, o que fornece umagarantia de qualidade e robustez, sendo ainda possvel adaptar ou estender a prpria aplicao para asoluo de determinados problemas. Podem ser obtidos mais detalhes sobre as ferramentasdesenvolvidas com este tipo de licena, consultando http://www.gnu.org/philosophy/free-sw.pt.html.

    O Octave uma ferramenta desenvolvida para o Sistema Operativo Linux (http://www.linux.org),sendo actualmente distribuda com as principais verses deste sistema operativo. A sua utilizao noambiente Windows igualmente possvel atravs da utilizao da ferramenta Cygwin(http://www.cygwin.com), a qual fornece um ambiente de emulao da plataforma Linux sobreMicrosoft Windows.

    Pode efectuar-se o download do Octave para MS-Windows quer da pgina da cadeira(http://di.fct.unl.pt/cursos/icp), quer directamente, do site http://sourceforge.net/projects/matlinks. Ainstalao do Octave num computador equipado com sistema operativo Windows XP, NT ou 2000,dever ser relativamente simples. A instalao igualmente possvel nos sistemas MS-Windows95/98 e Me, no entanto nestes ltimos por vezes ocorrem problemas.

    Aps efectuar o Download do programa de instalao, bastar executar este programa e o Octave serinstalado no seu computador. Em caso de dificuldades, o site indicado para obter mais informaopara resoluo de problemas relativamente instalao do Octave sobre plataformas Windows http://octave.sourceforge.net/Octave_Windows.htm.

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 2/34

    2.1 Linha de Comandos

    O primeiro passo para trabalhar com o Octave obviamente o inicio desta aplicao. Para tal bastarseleccionar o programa no menu iniciar, conforme a figura abaixo.

    De seguida dever ser apresentada a linha de comandos do Octave com uma aparncia semelhante seguinte figura:

    Contrariamente aos ambientes grficos normalmente disponveis no Windows, o Octave caracteriza-se por receber os seus comandos directamente da linha de comandos (ou Prompt). Na linha decomando, o sistema indica que aguarda um comando apresentando (por omisso) o texto "octave:1>"seguido de um cursor a piscar.

    Aps este prompt possvel escrever os comandos que controlam a aplicao. Dever introduzir cadacomando separadamente e seguido pela tecla [Return]. Num ambiente grfico os comandos soespecificados ao computador atravs de aces do rato sobre smbolos (ou cones) visuais. Numalinha de comandos os comandos devem ser especificados atravs do teclado.

    No exemplo anterior foi introduzido (pelo utilizador) um comando simples: 5+5

    Tendo o computador dado a resposta (resultado): ans = 10

    Seguida do prompt pedindo novo comando: octave:2>

    fcil utilizar o Octave como calculadora. Eis alguns exemplos auto-explicativos:

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 3/34

    octave:9> 2+3ans = 5

    octave:10> 2-2ans = 0

    octave:11> 2*2ans = 4

    octave:12> 2/3ans = 0.66667

    octave:13> 5*5*5ans = 125

    octave:14> 5^3ans = 125

    octave:15> 5^2.5ans = 55.902

    octave:16> 8\3ans = 0.37500

    octave:17> 2\4ans = 2

    octave:18> 3*(23+14.7-4/6)/3.5ans = 31.743

    octave:19> 5^-3ans = 0.0080000

    O nico comando menos usual a diviso esquerda, a qual pode ser facilmente compreendida com aigualdade x/y y\x.

    De igual forma podem ser utilizados comandos um pouco mais complexos, envolvendo funes. Asseguintes funes elementares de clculo podero ser utilizadas:

    octave:20> sqrt(5)ans = 2.2361 raz quadrada

    octave:21> log10(1000)ans = 3 logaritmo base 10

    octave:22> log(e^10) ans = 10 logaritmo neperiano

    octave:23> pi pi = 3.1416 constante pi

    octave:24> sin(pi/6) ans = 0.50000 seno

    octave:25> cos(0) ans = 1 coseno

    octave:26> tan(pi/4) ans = 1.0000 tangente

    octave:27> sin(pi)ans = 1.2246e-16

    seno de pi no 0, por causade erros de aproximano

    octave:28> 30*pi/180 ans = 0.52360octave:29>

    utilizao de valor anteriorem clculo

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 4/34

    sin(ans)^2+cos(ans)^2ans = 1

    Repare-se que sin(pi) no calculado como zero! Tal deve-se a um erro de clculo do prpriocomputador. O nmero apresentado no entanto muito prximo de zero: 1.224510-16. Trata-se de umerro de aproximao do algoritmo de clculo do seno. Normalmente este nmero varia de computadorpara computador, mas est sempre presente quando se efectuam clculos reais. Note-se alis que possvel calcular a preciso de um resultado, para tal utiliza-se o comando format:

    octave:61> pipi = 3.1416 contante pi

    octave:62> format longoctave:63> pipi = 3.14159265358979

    formatao long, a partir deste pontoa preciso dos resultados passa a serde 15 algarismos significativos (mxde 24 caracteres)

    octave:64> format shortoctave:65> pipi = 3.14octave:66> sin(pi)ans = 1.22e-16

    formatao short, preciso passa aser de 3 algarismos significativos

    octave:67> format bankoctave:68> sin(pi)ans = 0.00

    formatao bank, preciso passa a serde 2 casas decimais

    octave:69> formatoctave:70> pipi = 3.1416

    formatao standard, preciso de 5algarismos significativos ( o default)

    Em geral os interfaces por linha de comandos so menos intuitivos que os interfaces grficos, poisexigem do seu utilizador a memorizao de um conjunto de palavras chave. No entanto, aps operodo inicial de adaptao os interfaces de linha de comandos revelam-se bastante mais fiveis efceis de descrever: o nmero de formas distintas de entrar um mesmo comando muito menor, sendoo nmero de aces de gesto de interface reduzidas ao mnimo. Compreende-se pois que seja muitomais fcil descrever a interaco com uma ferramenta deste tipo que a interaco com uma ferramentavisual. Por ser igualmente mais difcil entrar comandos no intencionais, igualmente muito maisclaro qual foi a aco que deu origem a um determinado erro.

    A maior vantagem desta forma de interaco no entanto a de permitir ao utilizador especificarsequncias no elementares de comandos simples. assim possvel a definio de comandosextremamente complexos. Este tipo de utilizao ser descrito no prximo captulo.

    Neste captulo vamos centrar-nos na aprendizagem dos comandos elementares. Durante o estudo destetexto, muito importante testar cada um dos comandos isoladamente, para melhor se compreender aque se deve cada erro. Basta escrever mal uma letra, ou esquecer um dos espaos necessrios numcomando para que este no seja entendido pelo computador e d origem a um erro.

    Tal como na generalidade dos interfaces com prompt de comando, possvel navegar pelo histricode comandos, bem como pesquisar comandos antigos. De seguida so apresentadas algumas das teclasutilizadas no Octave para facilitar (e tornar mais rpida) a entrada e alterao de comandos:

    Teclas cursoras (cima e baixo): comando anterior/seguinte no histricode comandos.Teclas cursoras (esquerda e direita): letra anterior/seguinte no comandocorrente. Em alguns terminais onde as teclas cursoras no funcionem,

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 5/34

    pode ser necessrio utilizar as teclas CTRL-b (de backward) e CTRL-f(de forward).CTRL-a : o cursor desloca-se para o inicio do texto.CTRL-e : o cursor desloca-se para o fim do texto.CTRL-r/CTRL-s : pesquisa incremental de um comandoanterior/seguinte no histrico de comandos.CTRL-_ : desfazer o ltimo comando.TAB : Terminar o comando.CTRL-k : Mover todo o texto at ao fim da linha na rea detransferncia do Octave.CTRL-y : Mover o texto na rea de transferencia do Octave para alinha de comandos.

    Convm igualmente referir a possibilidade de o computador comear a executar clculos muito longosou mesmo que no terminem. Nesse caso h um conjunto de teclas destinado a indicar ao computadorque deve interromper os seus clculos e voltar a apresentar a linha de entrada de comandos. Parainterromper qualquer calculo no Octave, bastar manter pressionadas em simultneo a tecla Ctrl e atecla c (i.e. CTRL-c).

    H igualmente alguns comandos de controle do prprio Octave que pode ser til conhecer: o comandohelp, o comando history, o comando run_history e o comando exit.

    O comando help, apresenta um manual on-line referindo todos os possveis comandos do Octave.Pode ser seguido do texto de outro comando, como por exemplo: octave:1> help exit

    O comando history possibilita ao utilizador visualizar os comandos que entrou at ao momento.

    O comando run_history possibilita ao utilizador repetir comandosanteriores. Veja-se o exemplo:

    octave:100> history

    ...

    22 5*523 3+2;24 5+5

    ...

    octave:101> run_history 22 24ans = 10ans = 5ans = 25

    O comando exit termina a execuo do Octave e retorna ao MS-Windows.

    ResumoComo iniciar o Octave.Linha de comandos.Operaes bsicas de clculo.

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 6/34

    Formatao.Vantagens da linha de comando face aos interfaces grficos.Teclas de edio.Comandos de controlo do Octave.

    2.2 Variveis e Matrizes

    A principal vocao do Octave , como tem sido referido, o calculo numrico e matricial. Comecemospois por definir a matriz a:

    octave:3> a=[ 1,1,2 ; 3,5,8 ; 13,21,34 ] a = 1 1 2 3 5 8 13 21 34

    varivel a passa arepresentar a matriz:

    Como se pode observar , representando novas colunas e os ; representando novas linhas. Podemosigualmente definir uma matriz como o retorno de uma funo, neste caso uma funo que retorna umamatriz com 3 linhas e 2 colunas com valores aleatrios entre 0 e 1: octave:4> b=rand(3,2) ;

    Desta vez, no entanto, o Octave no imprime o resultado aps o comando. Tal deve-se ao Ponto eVrgula no final da linha de comando. Este ponto e vrgula indica que no estamos para jinteressados na avaliao do valor definido (que pode ser bastante pesada). Assim que pretendermosver um valor anteriormente definido, bastar pedir o seu valor, p.ex:

    octave:4> bb = 0.88406 0.90013 0.73682 0.15829 0.68952 0.74250

    octave:5> a*bans = 2.9999 2.5434 11.8525 9.4318 50.4098 40.2707

    o valor de a e b utilizado no produtode matrizes, o da matriz a e b jdefinidas

    Os exemplos anteriores introduzem igualmente o conceito de varivel no Octave.

    Em Octave uma varivel um nome que se atribui (atravs da utilizao do operador =) a um valor(seja ele escalar ou matriz), por forma a que este valor possa ser repetidamente consultado mais tarde.Os nomes das variveis podem conter qualquer sequncia de letras, nmeros ou underscore (i.e. ocarcter _ ) que no seja iniciada por nmero. No aconselhvel utilizar nomes de variveis commais de 30 caracteres.

    A utilizao de letras minsculas ou maisculas relevante e tem significados distintos. Assim avarivel a pode conter um valor e a varivel A outro, i.e. a e A so distintos.

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 7/34

    H dois comandos essenciais para gerir as variveis definidas at determinado momento: who e clear.who lista as variveis j definidas e clear remove variveis.

    octave:41> i = 10;octave:42> id = [1,0;0,1]id= 1 0 0 1octave:43> who *** local user variables: i id octave:44>clear ioctave:45>who

    *** local user variables: id

    As variveis iniciadas por dois sinais de underscore seguidos esto reservadas para utilizao dosistema. No devem pois ser utilizadas, excepto se se souber exactamente o que se quer fazer.

    H igualmente um conjunto de variveis de sistema que disponibilizam informaes relevantes sobreo sistema. Por agora apenas necessitaremos de utilizar a varivel ans - ltimo valor calculado.

    2.3 Matrizes e Sries

    A principal vantagem do Octave a sua capacidade para tratamento de Matrizes.

    Vamos utilizar a matriz a da seco anterior:

    octave:3> a = [ 1,1,2; 3,5,8; 13,21,34 ]

    Podemos igualmente criar novas matrizes contendo esta. O nico cuidado a ter manter o nmero delinhas e colunas constante. Ser fcil definir as matrizes:

    Correcto Erradooctave:4> [ a, a ]ans= 1 1 2 1 1 2 3 5 8 3 5 8 13 21 34 13 21 34octave:5> [ a; a ]ans= 1 1 2 3 5 8 13 21 34 1 1 2 3 5 8 13 21 34

    octave:4> [ a, a; a]error: number of columns must match (3 != 6)

    Podemos consultar uma dada posio ou submatriz numa matriz especificando os ndices dasrespectivas dimenses num tuplo. Como pode observar nos seguintes exemplos (assumindo a matriz aanteriormente definida)

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 8/34

    octave:14> a(1,2)ans = 1 octave:15> a(1,[1,2,3])ans = 1 1 2

    octave:16> a([1,2,3],2)ans = 1 5 21

    Repare-se, nos 2 e 3 exemplos, na utilizao dum vector para indicar, respectivamente, as colunas elinhas a seleccionar.

    A necessidade de especificar sries enquanto vectores to grande, que existe um operador especificopara o fazer:

    octave:1> 1:5ans = 1 2 3 4 5

    octave:2> 1:3:11ans = 1 4 7 10

    A sintaxe geral de uma srie pois: LIMITE_INFERIOR:PASSO:LIMITE_SUPERIOR

    O valor de PASSO pode ser omitido (ser considerado a 1 por omisso). H ainda outra simplificaos sries, quando utilizados como ndices de matrizes. Neste caso, como sabemos o limite inferior esuperior podemos utilizar apenas o sinal : para especificar toda uma linha ou toda uma coluna damatriz original:

    octave:23> [a(1:2,2:3); a(:,2:3)]ans = 1 2 5 8 1 2 5 8 21 34

    O tamanho da matriz pode igualmente ser obtido com a funo size (retorna o nmero de linhas ecolunas):

    octave:24> size(a)ans = 3 3

    octave:25> size(ans)ans = 1 2

    octave:26> ans(1)ans = 1

    Por fim resta referir que o operador de atribuio permite alterar posies numa matriz, podendo serutilizada a matriz vazia ([]) para apagar linhas ou colunas:

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 9/34

    octave:51> a(:,1) = [ 1; 2; 0 ]a = 1 1 2 2 5 8 0 21 34octave:52> a(1,:) = 1:10:30a = 1 11 21 2 5 8 0 21 34octave:53> size(a)ans = 3 3octave:54> a(1,:) = []a = 2 5 8 0 21 34octave:55> size(a)ans = 2 3octave:56> a(:,1)= []a = 5 8 21 34octave:57> size(a)ans = 2 2

    Com pares de valores, podemos igualmente atribuir variveis dentro de uma matriz:

    octave:58> [la,ca] = size(a)la = 2ca = 2

    ResumoDefinio de matrizes.Variveis.Comandos who e clear sobre variveis.Construo de matrizes compostas.Seleco de submatrizes.Tamanho de uma matriz.Sries.Atribuio de submatrizesRemoo de linhas e colunas

    2.4 Strings

    Uma constante do tipo String uma sequncia de caracteres entre " ou '. Em Octave uma string podeter qualquer tamanho. Eis um exemplo:

    octave:1> a= "uma cadeia de caracteres"a = uma cadeia de caracteres

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 10/34

    Se tentarmos definir uma matriz com vrias strings numa mesma linha acabamos por obter umastring com a juno das vrias strings base:

    octave:2> ["Uma string e",a]ans = Uma string euma cadeia de caracteres

    De facto as strings so vistas internamente como vectores linha contendo caracteres. As linhas deuma matriz de strings tm forosamente a mesma dimenso. assim possvel utilizar os operadores:

    octave:3> ["123";"3"] ans = 123 3

    octave:4> a(1:7)ans = uma cad

    Vejamos algumas funes pr-definidas para o tratamento de strings:

    Descrio Exemplo

    findstr(s,t) : Encontra todas asposies de t em s

    octave:5> findstr("abcabcabdad","ab")ans = 1 4 7

    split(s,t) : Divide uma string numvector (coluna) de strings separados por t

    octave:6> split("abcabcabdad","ab")ans = c c dad

    strrep(s, x, y) : substitui todas asocorrncias de x por y na string s

    octave:6> strrep("abcabcabdad","ab","AB")ans = ABcABcABdad

    str2num(s) : converte um nmerorepresentado numa string para umnmero

    octave:7> str2num("555") + 5ans = 560

    tolower(s) / toupper(s) : converte umastring para minsculas/maisculas

    octave:8> toupper("Atencao - aviso")ans = ATENCAO - AVISO

    strcmp(s1,s2) : compara as strings s1com s2, se forem iguais retorna 1, sediferentes retorna 0

    octave:9> strcmp("teste 1", "teste 1")ans = 1octave:10> strcmp("teste 1", " test")ans = 0

    Na pgina 40 (captulo 5) do manual de Octave poder obter mais informao sobre outras funespara a manipulao de Strings.

    2.5 Principais Operadores e Funes

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 11/34

    At agora vimos as principais caractersticas essenciais ao funcionamento do Octave. Resta no entantoenumerar as principais funes e operadores. A lista que se segue complementada com exemplosilustrativos do tipo de clculos que podem ser obtidos com os diversos operadores.

    Eye, Ones e Zeros

    As matrizes Identidade, ou contendo apenas zeros ou uns so to frequentes que foram criados trsoperadores especficos para as gerar:

    octave:37> eye(3)ans = 1 0 0 0 1 0 0 0 1

    octave:38> eye(3,2)ans = 1 0 0 1 0 0

    octave:39> ones(3,2)ans = 1 1 1 1 1 1

    octave:40> zeros(2,4)ans = 0 0 0 0 0 0 0 0

    Matriz transposta

    Para converter linhas em colunas bastar aplicar o operador ' a uma matriz:

    octave:41> ones(3,2)'ans = 1 1 1 1 1 1

    Operadores Soma e subtraco

    Para alm de efectuarem a adio bsica, efectuam tambm a adio e subtraco de matrizes. Onmero de linhas/colunas tem de ser igual.

    octave:1> analitico = [0.0314, 0.1257, 0.9998];octave:2> numerico = [0.0389, 0.1530, 1.0082];octave:3> erro = analitico - numericoerro = -0.0075000 -0.0273000 -0.0084000

    Operadores para Produto e Potenciao em Matrizes

    O operador produto dos mais poderosos no Octave/Matlab. De facto pode ser aplicado a pares de

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 12/34

    nmeros, a um nmero e matriz ou a duas matrizes n-por-m e m-por-p, em todos os casos osignificado o usual da lgebra. Considere-se o exemplo:

    octave:4> tudo = [1,0,0;0,1,0;-1,1,0]*[analitico;numerico;zeros(1,3)]tudo = 0.0314000 0.1257000 0.9998000 0.0389000 0.1530000 1.0082000 0.0075000 0.0273000 0.0084000octave:5> erroTotal=(([0,0,0; 0,0,0; 0,0,1]* tudo)'*ones(3,1))'*ones(3,1)erroTotal = 0.043200octave:6> [1,0,0;0,1,0;0,0,1/erroTotal*100]*tudoans = 0.031400 0.125700 0.999800 0.038900 0.153000 1.008200 17.361111 63.194444 19.444444

    Neste exemplo, na linha 4 (2 termo), construmos uma matriz contendo na primeira linha umconjunto de resultados analticos, na segunda dados observados (numricos) e na terceira zeros.Devido primeira matriz, construiu-se uma matriz tudo, contendo as primeiras 2 linhas da matriz do2 termo e no fim a subtraco da 1 linha pela 2 linha.

    A linha 5 um pouco mais sofisticada. A ideia base obter apenas a ltima linha da varivel tudonum vector linha. Para tal, primeiro anulam-se todos os elementos das duas primeiras linhas, e depoiscom uma matriz de uns, retira-se apenas a ltima linha. Depois multiplica-se o resultado por umvector linha contendo uns, para obter o somatrio de todos os elementos. Obviamente trata-se de umsimples exerccio para ilustrar as potencialidades do produto de matrizes. A soluo Octave seria bemmais simples: tudo(3,:)

    A linha 6 limita-se a transformar a ltima linha da matriz tudo num valor percentual.

    Tal como o produto, a potenciao de matrizes (que s pode ser aplicada a matrizes quadradas),limita-se a efectuar o produto de uma matriz por ela prpria n vezes.

    Extenso das funes simples a matrizes: produto e potenciao pontual

    Podemos aplicar qualquer das funes elementares a uma matriz: a funo simplesmente aplicadaelemento a elemento. Veja-se o seguinte exemplo:

    octave:60> A=[1,2,3;4,5,6;7,8,9]A = 1 2 3 4 5 6 7 8 9octave:61> L=log10(A)L = 0.00000 0.30103 0.47712 0.60206 0.69897 0.77815 0.84510 0.90309 0.95424

    octave:62> (10*ones(size(A))).^L-Aans = 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 8.8818e-16 0.0000e+00 0.0000e+00 -8.8818e-16 0.0000e+00

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 13/34

    Note-se o operador .^ que eleva todos os elementos da matriz (individualmente) a L. Comandossemelhantes so o produto pontual e a diviso pontual:

    octave:66> A.*[zeros(1,3) ; ones(2,3)]ans = 0 0 0 4 5 6 7 8 9

    octave:67> A./(ones(size(A))/2)ans = 2 4 6 8 10 12 14 16 18

    Soluo de sistemas de equaes lineares e determinantes

    O clculo de um determinante em Octave realizado com o auxlio da funo det(A). Vejamos umexemplo para soluo de um sistema de equaes:

    Pode ser representado por duas matrizes A e B, se considerarmos AX=B:

    octave:71> A=[1, 2, 3; 2, 3, 4; 4, 2, 5]A = 1 2 3 2 3 4 4 2 5octave:72> B=[4;5;1]B = 4 5 1

    A aplicao da regra de Cramer (onde se substitui as colunas de A, correspondentes a cada xi, por Bde modo a obter 3 matrizes, dividindo-se o determinante de cada matriz obtida pelo determinante deA), pode ser feita da seguinte forma:

    octave:84> D1=A; D1(:,1) = BD1 = 4 2 3 5 3 4 1 2 5octave:85> D2=A; D2(:,2) = BD2 = 1 4 3 2 5 4 4 1 5

    octave:86> D3=A; D3(:,3) = BD3 =

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 14/34

    1 2 4 2 3 5 4 2 1octave:87> X=[det(D1); det(D2); det(D3)] / det(A) X = -1.40000 1.80000 0.60000 octave:88> A*X-Bans = 0.0000e+00 0.0000e+00 -9.9920e-16

    Eliminao Gaussiana: Podemos obter o mesmo resultado utilizando o operador \ (eliminaoGaussiana):

    octave:89> X =A \ B X = -1.40000 1.80000 0.60000

    Inverso de Matrizes

    A inverso de uma matriz feita com o comando inv(M).

    octave:90> inv( A ) ans = -1.40000 0.80000 0.20000 -1.20000 1.40000 -0.40000 1.60000 -1.20000 0.20000 octave:90> A * inv( A )ans = 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -0.00000 1.00000

    2.5 Grficos

    Os grficos em Octave utilizam uma ferramenta OpenSource especialmente dedicada gerao degrficos: o GnuPlot. O Octave comunica com o gnuplot com duas funes base (sobre as quais asrestantes so implementadas), estas funes so descritas nas pginas 125 (gplot) e 131 (gsplot). Naprtica iremos apenas utilizar funes de mais alto nvel (desenvolvidas com recurso s funeselementares apresentadas).

    Grficos simples

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 15/34

    Na sua forma mais simples, a funo plot apresenta um grfico dos valores de dois vectores linha,correspondendo ao eixo dos X e Y:

    octave:19> x = 0:pi/90:4*pi;octave:20> y = sin(x);octave:21> plot(x,y)

    Neste momento dever ser aberta uma nova janela contendo o grfico. Poder ter que utilizar osistema operativo para ver esta janela (bastar carregar conjuntamente em ALT-TAB). Poder alteraros parmetros do grfico com funes adicionais. Para visualizar as alteraes ter que executar ocomando replot:

    octave:29> xlabel('x,radianos');octave:30> ylabel('sin(x)');octave:31> grid;octave:32> replot

    De facto, a funo plot pode ter diversos comportamentos distintos, consoante o tipo de argumentosutilizados. Para mais detalhes consultar o manual do Octave pgina 127.

    Duas funes grficas tambm bastante utilizadas so: bar e hist :

    octave:34> clearplot;octave:35> bar([20,10,30,15,30,30,40])

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 16/34

    octave:36> clearplotoctave:37> a = [10,10,10,20,20,30];octave:38> hist(a,[1,10,20,30])

    O primeiroargumentoda funocontm aamostra devalores.O segundo,o centro dedistribuio.

    Pode igualmente utilizar grficos em coordenadas polares:

    octave:61> clearplotoctave:62> m = 0.1;octave:63> phi = 0:pi/60:4*pi;octave:64> r = exp(m*phi)

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 17/34

    octave:65> polar(phi,r)

    Grficos Sobrepostos

    Antes de cada comando, o Octave, por omisso, limpa a janela de grfico. Caso se pretendamcomparar diversos grficos pode ser utilizado o comando hold on para sobrepor grficos:

    octave:71> clearplotoctave:72> hold onoctave:73> x = -5*pi:pi/90:5*pi;octave:74> y1 = sin(x);octave:75> y2 = cos(x);octave:76> y3 = sin(x)+2*cos(x);octave:77> plot(x,y1)octave:78> plot(x,y2)octave:79> plot(x,y3)

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 18/34

    Note igualmente que pode utilizar directamente os menus na janela do GnuPlot para alterar o seugrfico.

    Se quiser apresentar vrios grficos numa mesma janela poder utilizar as funes multiplot esubwindow:

    octave:93> multiplot(2,2)octave:94> subwindow(1,1)octave:95> xlabel("x, radianos")octave:96> ylabel("sin(x)")octave:97> title("G1")octave:98> plot(x,y1)octave:99> subwindow(2,2)octave:100> ylabel("cos(x)")octave:101> title("G2")octave:102> plot(x,y2)octave:103> subwindow(1,2)octave:104> plot(x,x.*x)octave:105> subwindow(2,1)octave:106> plot(x,sqrt(x))

    Para voltar ao modo normal:

    octave:108> oneplotoctave:109> clearplot

    Grficos 3D

    A criao de um grfico 3D necessita da definio de uma matriz de valores sobre os quais a funovai ser avaliada. Tal pode ser conseguido com a funo meshdom:

    octave:30> clearplotoctave:31> x = -10:0.5:10;octave:32> [X,Y]=meshdom(x,x);

    Resta apresentar o grfico:

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 19/34

    octave:33> hold onoctave:34> gridoctave:35> mesh(X,Y,-sqrt(X.^2+Y.^2)*5+40)octave:36> mesh(X,Y,X.^2+Y.^2)

    2.6 Exerccios I

    1- Escrever numa matriz de 15 colunas e 1 linha, os quadrados dos primeiros 15 naturais (1, 4, 9 ...).

    octave:1> (1:15).^2

    2- Escrever numa matriz de 15 linhas e 1 coluna, os cubos dos primeiros 15 naturais (1, 8, 27 ...)

    octave:2> [(1:15).^3]'

    3- Escrever numa tabela de 15 linhas por 3 colunas, os primeiros 15 naturais na 1 coluna; osquadrados dos primeiros 15 naturais na 2 e os cubos dos primeiros 15 naturais na 3 coluna.

    octave:3> seq=(1:15)octave:4> [seq; seq.^2; seq. ^3]'

    4- Dado que a converso de graus Fahrenheit para graus Clcios se faz com a seguinte frmula C=(5/9) . (F - 32). Coloque em tabela as converses para as temperaturas de 0F, 25F,..., 250F.

    octave:5> faixa = 0:25:250octave:6> [faixa;(5/9)*(faixa-32)]'

    5- Faa uma tabela que traduza graus Clcios em graus Fahrenheit. Coloque em tabela as conversespara as temperaturas de -200C, -175C,..., 200C.

    octave:7> faixa= -200:25:200octave:8> [faixa; faixa * (9/5) + 32]'

    6- Considere o problema "Quem quer ser milionrio ?" j conhecido. Resolva o seguinte utilizandoOctave:

    6.1- Qual o valor do saldo ao longo dos anos?

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 20/34

    octave:9> limite=10 octave:10> cap_inicial=5000000 octave:11> periodo=0:10 octave:12> taxa=1.05 octave:13> [periodo; cap_inicial * (taxa.^periodo)]'

    6.2- Junte uma coluna que indique o ganho (relativo ao ano aterior) ao longo dos anos.

    octave:14>acumulado = cap_inicial * taxa .^ periodooctave:15>ant_acumulado = [cap_inicial,acumulado(1:limite)]octave:16>evoluo=[periodo; acumulado; acumulado - ant_acumulado]'

    6.3- Indique o ganho mdio e ao longo dos anos.

    octave:17>ganho_mdio= sum(evoluo(3,1:11))/limite

    6.4- Indique o ganho total

    octave:18>ganho_total=sum(evoluo(3,:))

    Ou

    octave:18>ganho_total = evoluo(2,limite+1) - cap_inicial

    3 Programao

    Como j foi visto anteriormente, o Octave permite ao utilizador especificar instrues atravs de umalinha de comando. Nesta seco vamos elaborar um pouco mais o tipo de instrues que podem serexecutadas e introduzir algumas noes bsicas de programao. Assim, os objectivos desta secoso os seguintes:

    1. Compreender os conceitos bsicos de programao, e saber quais os comandos Matlab/Octaveque os implementam;

    2. Dado um problema de engenharia concreto, conseguir determinar qual a sequncia decomandos da linguagem MatLab/Octave a utilizar;

    3. Implementar essa sequncia de comandos sobre a forma de um Script;4. Conseguir depurar os erros desse Script, e adaptar o cdigo desenvolvido a novos problemas

    de Engenharia.

    3.1 Alguns conceitos bsicos

    Ao programar est-se de um modo geral a expressar aces ou comportamentos que simulem umadeterminada actividade do mundo real. Assim, ser primeiro necessrio compreender a actividade quese quer simular. Depois, saber quais so os dados ou parmetros que condicionam a actividade nomundo real (i.e. quais os elementos que contm a informao necessria para o problema). Por fim necessrio identificar quais as aces e comportamentos que permitem simular esse processo. Nofundo necessrio modelar o problema ou, se tal j tiver sido feito, utilizar um modelo (normalmentematemtico) que j algum elaborou.

    Como j foi estudado nas aulas tericas, um computador uma mquina que funciona com base num

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 21/34

    conjunto de aces elementares bastante simples e pode ser descrito matematicamente por ummquina de Turing Universal. Tal como na mquina de Turing, as aces e comportamentos estoassociados ao controlo da sequncia de instrues que constituem o programa. Normalmente esteprocesso designado como controlo de fluxo de execuo do programa.

    No desenvolvimento de um programa igualmente usual especificar primeiro aces mais complexas.Cada aco complexa dever ser decomposta em aces mais simples, as quais por sua vez sero maisuma vez decompostas, at termos por fim todas as aces expressas atravs de pequenas aceselementares. No caso de comandos matlab este paradigma pode ser chamado de programao de Cimapara Baixo. Alguns autores prope tambm a abordagem inversa: comear por conjugar aceselementares at se resolver o problema final (esta abordagem pode tambm ser designada por daprogramao de Baixo para Cima). Na prtica usual conjugar ambos os mtodos: constroem-se debaixo para cima aces relativamente simples que sabemos serem necessrias e depois tenta-sedecompor o problema de acordo com essas e outras instrues. No meio de tudo o que necessrioreter que qualquer sequncia de aces, por mais complexa que seja, pode ser expressa numalinguagem de programao desde que essa linguagem possua: um mecanismo sequencial; ummecanismo condicional; e um mecanismo de repetio. Fica como exerccio compreender de queforma estes mecanismos so implementados e implementam a mquina de Turing (i.e. na prtica soigualmente expressivos!).

    Mecanismo sequencial

    Entende-se como mecanismo sequencial, uma forma de expressar atravs de uma linguagem que aaco 1 deve ser executada antes da aco 2. Na maior parte das linguagens de programao omecanismo sequencial surge como uma simples enumerao das aces a executar, da esquerda para adireita, de cima para baixo.

    Mecanismo condicional

    O mecanismo condicional permite expressar uma situao em que se pretende que: caso uma condiose verifique, seja executada uma aco (aco 1), caso essa mesma condio no se verifique sejaexecutada uma outra aco (aco2). S uma das aces executada!

    Mecanismo de repetio

    O mecanismo de repetio da linguagem permite expressar a necessidade de uma determinada aco,ou conjunto (bloco) de aces ser repetida um certo nmero de vezes. Tipicamente essa aco (ouconjunto de aces) repetida at que uma condio de paragem se verifique.

    A maior parte das linguagens de programao, so linguagens que possuem os mecanismosanteriormente referidos, e que permitem que as sequncias de aces expressas atravs da linguagempossam ser transformadas em sequncias de comandos passveis de serem executadas por umcomputador. No entanto, h linguagens adaptadas s mais diversas funes: um Professor pode gostarde ensinar futuros programadores a programar utilizando a linguagem Pascal, pois esta umalinguagem desenhada explicitamente para ensinar a programar. De igual forma, um tcnico de basesde dados pode gostar de especificar o seu problema utilizando SQL, uma linguagem explicitamentevirada para pesquisas em grandes volumes de informao (e que correntemente utilizada nas

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 22/34

    principais bases de dados como por exemplo ORACLE, DB2 da IBM ou o SQL Server da Microsoft).

    O Octave permite a elaborao de programas, expressos na linguagem matlab. Linguagem essa quepossui os mecanismos de programao anteriormente expressos.

    3.2 Instrues

    Em Octave, instrues (ou comandos) podem ser uma simples expresso constante (x= 2;) ou umalista de comandos que por sua vez podem conter outros comandos. Nesta seco so descritos oscomandos que iro permitir a elaborao de programas em Octave, em particular os mecanismos decontrolo de fluxo (mecanismos de condio e de repetio). Os mecanismos de controlo de fluxopermitem controlar o fluxo de execuo de um programa. Todos eles comeam e terminam com umapalavra chave.

    Condio

    Uma condio uma expresso Booleana - pode por isso tomar um de dois valores Verdade (true) ouFalso (false). Essa expresso pode ser uma expresso simples ou agregar outras expresses atravs deoperadores Booleanos.

    Operadores de comparao

    Como exemplo de expresses simples tem-se as operaes envolvendo os operadores de comparao:

    x < y verdade se x menor que y

    x = y verdade se x maior ou igual a y

    x > y verdade se x maior que y

    x != yx ~= yx y

    verdade se x diferente de y

    Os operadores de comparao comparam dois valores numricos - se a relao for verdadeira oresultado 1 caso contrrio 0.

    Alguns exemplos:

    octave:1> x=2

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 23/34

    x = 2 octave:2> x > 4 ans = 0

    comparao de dois valores numricos

    octave:3> [1, 2; 3,4] == [1, 2; 2, 4]ans = 1 1 0 1

    comparao de matrizes efectuadaelemento a elemento

    octave:10> [1, 2; 2,4] == 2ans = 0 1 1 0

    neste caso o valor escalar comparadocom cada um dos elementos da matriz

    octave:7> index("file.txt",".")!=5ans = 0

    comparao em que um dos valores retornado por uma funo

    Operadores Booleanos

    Uma expresso Booleana uma combinao de expresses de comparao utilizando os operadoresBooleanos "ou" ('||'), "e" ('&&') e a "negao" ('!'). Descrio sumria dos operadores:

    Booleano1 ||Booleano2

    operador ou (or): o resultado verdade se pelomenos uma das expresses for verdade (true)

    Booleano1 &&Booleano2

    operador e (and): o resultado verdade se e sse todas as expresses forem verdade

    ! Booleano1 ~ Booleano1

    operador negao (not): o resultado verdadese a expresso for falsa (false)

    A instruo if

    O comando if um comando de condio. Em Octave a sintaxe deste comando a seguinte:

    Sintaxe Exemplo Descrio

    if (condio) blocoendif

    if ( x > y) y = y+1 x = 1endif

    o bloco de instrues (y=y+1 e x=1)s cumprido se a condio (x>y) forverdadeira (=1)

    Em que o bloco pode ser um comando ou uma lista de comandos (inclusive outro if).

    Na condio (x>y) feita uma comparao entre o valor de x e de y, pelo que se pressupe que estasvariveis foram previamente definidas, ou seja que lhes foi anteriormente atribudo um valor. Omesmo se passa com instrues do bloco, por exemplo em y=y+1.

    Outra forma do comando if:

    Sintaxe Exemplo Descrioif (condio) bloco1else bloco2

    if ( x > y) maior =xelse maior =y

    se a condio for verdadeira, obloco1 executado; seno, cumprido o bloco2

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 24/34

    endif endif

    A instruo while

    O comando while um comando de repetio (loop), ou seja, leva a que uma determinada zona decdigo seja executada enquanto determinada condio se verificar.

    Em Octave a sintaxe deste comando a seguinte:

    Sintaxe Exemplo Descriowhile (condio) bloco1endwhile

    while ( x > y) y = y+1endwhile

    enquanto a condio for verdadeira obloco de instrues vai ser executado,at que a condio se torne falsa.

    A condio vai controlar o nmero de vezes que o ciclo vai ser executado. Se a condio forinicialmente falsa, o bloco de instrues nunca ser executado. Tenha em ateno que se a condiono convergir para falso o ciclo nunca terminar.

    Analise o seguinte exemplo, que cria uma varivel fib que contm os elementos da sequncia deFibonacci.

    Exemplo Descrio

    fib = ones(1,10);i = 3;while ( i y=[2,4;10,12] y =

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 25/34

    octave:1> x=[2,4,10,14];octave:2> for i=x > v = i> endforv = 2v = 4v = 10v = 14octave:3>

    2 4 10 12octave:4> for i=y > m = i> endform = 2 10m = 4 12octave:5>

    Analise o exemplo da gerao da srie de Fibonacci, mas recorrendo agora utilizao do comandofor.

    Exemplo Descrio

    fib = ones(1,10);for i = 3:10 fib(i)=fib(i-1)+fib(i-2)endfor

    Inicialmente avaliada a expresso '3:10', para gerar umintervalo de valores de 3 a 10 inclusive. Seguidamente, avarivel i toma o valor inicial do intervalo (3) e o bloco deinstrues executado a primeira vez. No final da execuodo bloco, a varivel i toma o prximo valor do intervalo e obloco ser novamente executado. Este processo repete-seat que no existam mais valores no intervalo.

    A instruo break

    O comando break permite parar uma instruo de repetio (while ou for) e saltar para aprxima linha de cdigo do programa. Este comando s pode ser utilizado dentro de um ciclo.

    Exemplo Descriofor i=1:10 y = y + i if ( y == 6 ) break endifendforx = y

    Neste exemplo, temos um ciclo que ir ser executado 10vezes, se a condio y==6 no ocorrer. Se durante aexecuo do ciclo essa condio se verificar, a instruobreak ser executada e o ciclo de for quebrado, passando aexecuo directamente para a instruo seguinte ao ciclo(x=y).

    3.3 Leitura/Escrita de valores

    Para alm dos comandos de controlo de fluxo de dados existe a necessidade de em algum ponto doprograma ler valores e fazer sair para o exterior (quer seja para o ecr ou para um ficheiro) os dadosresultantes do processo de execuo do programa.

    O Octave tem disponveis vrias instrues que permitem efectuar a entrada de dados para o programa(ler do exterior, ficheiro ou utilizador na linha de comando) e fazer sair resultados (escrita paraficheiro ou para o ecr).

    De seguida so descritas algumas dessas instrues, existem no entanto mais e para tomarconhecimento pode consultar o manual no captulo "13. Input and Output".

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 26/34

    Sada para o Terminal (instruo disp)

    Normalmente o Octave faz sair para o terminal (ecr) o valor da expresso que acabou de avaliar (tals no acontece se colocar no final do comando o carcter ;).

    No entanto, existe muitas vezes a necessidade de visualizar o resultado de um clculo no quando este avaliado mas, por exemplo, no final de uma determinada sequncia de aces.

    O comando disp(x), escreve no terminal o valor de x.

    Compare os dois exemplos a seguir apresentados:

    Exemplo1 Exemplo2

    octave:1> y=0;octave:2> for i=1:4> y=y+10> endfory = 10y = 20y = 30y = 40octave:3>

    octave:3> y=0;octave:4> for i=1:4> y = y+10;> endforoctave:5> disp("O valor de y:"), disp(y)O valor de y:40octave:6> disp("O valor de y:"), yO valor de y:y = 40octave:7>

    Como se pode verificar no exemplo1, em cada iterao do ciclo enviado para o terminal o valor davarivel, enquanto que no exemplo 2, o valor da varivel visualizado aps o final do ciclo utilizandoo comando disp. Compare a diferena entre a utilizao do comando disp(y) e a chamada y.

    Entrada a partir do terminal (instruo input)

    O Octave tem disponveis trs funes que possibilitam a interaco com o utilizador ao nvel daentrada de dados, vamos aqui referir somente uma delas (input), poder obter informao sobre asrestantes consultando o manual.

    A instruo input(prompt)emite para o terminal o prompt e aguarda que o utilizador introduzaum valor. Analise o seu comportamento atravs do seguinte exemplo:

    octave:1> input("Qual o valor de x? ")Qual o valor de x? 10ans = 10octave:2> x=ans;octave:3> y = x^2; octave:4> disp("quadrado de x :"), disp(y) quadrado de x :100octave:5>

    Para que no seja visvel no terminal ans=10 dever colocar ; no final do comando de input.

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 27/34

    Ficheiros de entrada/sada

    Para alm da interaco directa com o utilizador atravs do terminal, existe muitas vezes necessidadede ler dados do exterior e armazenar os resultados que esto a ser produzidos pelo nosso programa.Este problema surge normalmente quando o volume de informao envolvida possui uma dimensoconsidervel. O mais apropriado nestas situaes armazenar a informao em ficheiros, para queesta possa ser facilmente manipulada.

    Abertura e fecho de ficheiros (fopen e fclose)

    Antes de poder efectuar qualquer aco de leitura ou escrita sobre um ficheiro deve proceder suaabertura. No final da manipulao dever sempre fech-lo.

    Assim duas funes essenciais na manipulao de ficheiros so; fopen e fclose.

    Sintaxe Descrio

    fid = fopen(nome_fich,modo)

    Possveis valores para modo:

    'r' abre ficheiro existente paraleitura

    'w'abre ficheiro para escrita, oanterior contedo do ficheiro eliminado

    'a' abre ficheiro para escrita nofinal do ficheiro (append)

    'r+' abre existente para leitura eescrita

    'w+'abre ficheiro para leitura eescrita, o anterior contedo doficheiro eliminado

    'a+'abre ou cria ficheiro paraleitura e escrita no final doficheiro

    abre o ficheiro com o nome nome_fich, nomodo especificado no parmetro modo, edevolve uma varivel fid, com o seguinteformato:

    fid ={ id = name = mode = arch = status = }

    Em que: id um valor inteiro que, a partir domomento da abertura, vai identificar oficheiro;name o nome do ficheiro, deve ser igual aoparmetro nome_fich;mode o modo como o ficheiro foi aberto;arch o tipo de interpretao pelaarquitectura;status indica o estado em que se encontrao ficheiro;

    No caso de problemas na abertura, fidtoma o valor -1

    fclose(fid) fecha o ficheiro com o identificador fid.

    A partir do momento da abertura, o ficheiro passa a ser reconhecido no nosso programa pelo seu fid.

    Exemplo de utilizao:

    Exemplo Descriooctave:4> f1=fopen("dados.txt","r")

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 28/34

    f1 ={ id = 3 name = dados.txt mode = r arch = native status = open}

    Abertura do ficheiro j existentepara leitura, com o nome"dados.txt", que se encontra nadirectoria corrente.

    octave:10> f2=fopen("tmp/dados2.txt","r")f2 ={ id = 4 name = tmp/dados2.txt mode = r arch = native status = open}

    Abertura de um ficheiro jexistente para leitura, com o nome"dados2.txt", que se encontra nasubdirectoria tmp da directoriacorrente.

    octave:7> f3=fopen("teste.txt","r") f3 = -1

    Tentativa de abertura de umficheiro para leitura, mas em queocorreu um problema (porexemplo, ficheiro no existente).

    octave:8> f4=fopen("teste.txt","w")f3 ={ id = 5 name = teste.txt mode = w arch = native status = open}

    Abertura do ficheiro "teste.txt"para escrita. Neste caso o ficheiro ainda noexistia, mas como foi aberto paraescrita, vai ser automaticamentecriado na directoria corrente.

    Mais uma vez no se esquea que antes de poder escrever ou ler de um ficheiro h que garantir queeste est aberto. Quando terminar a manipulao de um ficheiro dever sempre fech-lo.

    Leitura e escrita simples de ficheiro

    So de seguida apresentadas algumas das funes disponveis em Octave para efectuar a leitura eescrita simples de ficheiros.

    Para escrever uma string num ficheiro pode utilizar a funo fputs, que tem como argumentos aidentificao do ficheiro e a string que se pretende escrever. Existe uma funo semelhante (puts),mas que em vez de escrever para o ecr escreve para o terminal, e que tem como nico argumento astring.

    Para efectuar a leitura de dados de um ficheiro de texto, podem ser utilizadas duas funes, a fgetlou a fgets, tendo ambas dois argumentos: o identificador de ficheiro e a dimenso mxima dosdados a ler. Ambas lem caracteres de um ficheiro at encontrar o carcter de fim de linha ou at teratingido a mxima dimenso (o que ocorrer primeiro). A nica diferena que a funo fgetl nocoloca no valor devolvido o carcter fim de linha.

    Exemplo Descrio

    octave:1> fid=fopen("teste.txt","w");octave:2> str="Para teste a escrita em ficheiros\n";octave:3> fputs(fid,str)

    Este exemplo abre ficheiro para escrita(se ainda no existia, cria-o) e escreveem "teste.txt", aps o que fecha o

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 29/34

    ans = 0octave:4> fputs(fid,"segunda linha")ans = 0octave:5> fputs(fid,"\n")ans = 0octave:6> fputs(fid,"outra linha")ans = 0octave:7> fclose(fid)ans = 0

    ficheiro.O carcter '\n' sinaliza o fim de linha.

    Analise o resultado desta aco, abrindoo ficheiro "teste.txt" com um editor detexto (por exemplo o Notepad) eobserve o contedo do ficheiro.

    octave:14> fid=fopen("teste.txt","r");octave:15> str1=fgetl(fid,100);octave:16> str2=fgets(fid,100);octave:17> str3=fgets(fid,4);octave:18> fclose(fid);octave:19> str1str1 = Para teste a escrita em ficheirosoctave:20> str2str2 = segunda linha

    octave:21> str3str3 = outroctave:22>

    Exemplo de leitura de ficheiros de textoutilizando as funes fgetl e fgets.

    Escrita e leitura formatada

    As funes aqui apresentadas permitem a escrita e leitura, em ficheiro e no terminal, de qualquer tipode elementos e no s de strings. Este tipo de funes de leitura e escrita so algo semelhantes sexistentes na linguagem de programao C.

    Para Escrita

    printf(template, ...)escreve para o terminal de acordo com aformatao especificada em template

    fprintf(fid, template, ...)

    escreve para o ficheiro fid, de acordocom a formatao especificada emtemplate

    Para a leitura de ficheiros pode ser utilizada a funo fscanf. Tenha em ateno que a leitura emOctave est pensada para a manipulao de matrizes de valores e no para a manipulao de ficheirosde texto.

    Para Leitura

    [val,count] = fscanf(fid, template, size)

    l do ficheiro fid, de acordo com aformatao especificada em template.size indica o nmero de elementos aler.

    Tem disponveis vrias converses de variveis, as mais usuais so: %d, inteiro com sinal; %f, realcom sinal; %s, string; %c, carcter.

    Observe os seguintes exemplos de utilizao destas funes:

    octave:1> nome="Antonio Silva";octave:2> num=12753;

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 30/34

    octave:3> nota=15.5;octave:4> printf("Aluno %s num: %d nota %f \n",nome,num,nota);Aluno Antonio Silva num: 12753 nota 15.500000octave:5> m=[1 2 3; 4 5 6; 7 8 9];octave:6> printf("%d ",m);1 4 7 2 5 8 3 6 9

    Escrita formatada paraecr

    octave:7> fid=fopen("teste.dat","w");octave:8> fprintf(fid,"%d ",m);octave:9> fprintf(fid,"%d ",m*2);octave:10> fclose(fid)ans = 0 octave:11> fid2=fopen("teste.dat","r");octave:12> x1=fscanf(fid2,"%d ",[3,3]) x1 = 1 2 3 4 5 6 7 8 9octave:13> [x2,dim]=fscanf(fid2,"%d ",[3,3])x2 = 2 4 6 8 10 12 14 16 18dim = 9octave:14> fclose(fid2);

    Escrita de duas matrizesde valores num ficheiroe respectiva leitura. O terceiro argumento dafuno indica adimenso da matriz.Como pode observar,no segundo exemplo deleitura, a funotambm retorna onmero de elementoslidos.

    octave:15> fid=fopen("teste.txt","r");octave:16> x3=fscanf(fid,"%d ",10)'x3 =

    1 4 7 2 5 8 3 6 9 2

    octave:17> x4=fscanf(fid,"%d ",10)'x4 =

    8 14 4 10 16 6 12 18

    octave:18> x5=fscanf(fid,"%d ",10)'x5 = []octave:19> fclose(fid);

    Outro exemplo deleitura do mesmoficheiro "teste.dat",mas agora lendo osvalores para umavarivel vector.Agora o terceiroargumento indica onumero de elementos aler. Ao chegar ao fim doficheiro (no tendo maiselementos para ler)afecta a varivel com ovector vazio [].Se no colocar nenhumvalor no terceiroparmetro da funo,esta vai ler para umvector todos oselementos do ficheiro.

    octave:21> m2=log(m) m2 =

    0.00000 0.69315 1.09861 1.38629 1.60944 1.79176 1.94591 2.07944 2.19722

    octave:22> printf("%.5f %.4f %.6f \n",m2);0.00000 1.3863 1.945910 0.69315 1.6094 2.079442 1.09861 1.7918 2.197225octave:23>printf("%f %d %.2f \n",[1,2],[3,4]); 1.000000 2 3.00 4.000000

    Escreve no ecr osvalores formatadoscomo reais.O printf efectua umciclo sobre o templatede formatao, o quepode levar a algumaconfuso (linha 23)(O valor antes de findica o nmero decasas decimais).

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 31/34

    3.4 Funes

    A organizao do cdigo de modo a torn-lo mais verstil e estruturado deve ser um dos objectivos ater em mente aquando da elaborao de um programa.

    Em Octave possvel ao utilizador/programador definir as suas prprias funes. Uma funo umaparte de um programa identificada por um nome, possivelmente parametrizada, que corresponde auma aco (ou conjunto de aces) que pode ser executada mediante a sua chamada.

    Na sua forma mais simples, uma funo pode ser:

    Exemplo Descriofunction msg_entrada printf("Hoje est um lindo dia\n");endfunction

    A partir do momento da sua declarao possvelutilizar a funo. Para tal, basta executar o seunome (msg_entrada) na linha de comando.

    O exemplo anterior um exemplo muito simples, no possui parmetros de entrada nem retornanenhum valor de sada.

    Exemplo Descrio

    function ret_val = area_circ(raio) ret_val = pi*raio^2;endfunction

    Esta funo calcula a rea de um crculo,tem um parmetro de entrada (raio) eretorna um valor.

    Exemplo de utilizao (chamada):

    octave:10> a = area_circ(5)a = 78.540

    Tenha em ateno que no caso da funo retornar um valor (caso tpico), este deve ser sempre (emqualquer situao) afectado.

    Errado Correcto

    function retval = avg(v) if (is_vector(v)) retval = sum(v)/length(v); endifendfunction

    function retval = avg(v) retval = 0 if (is_vector(v)) retval = sum(v)/length(v); else printf("erro, o argumento deve ser um vector\n") endifendfunction

    O exemplo da esquerda no correcto porque no caso da condio (if) no se verificar, o valor deretorno no afectado.

    Uma funo pode retornar um ou mais valores. No caso de retornar mltiplos valores estes soespecificados segundo um vector, como pode ver no exemplo:

    Exemplo Descrio

    function [max,idx] = vmax(v)Esta funo devolve o valor mximo de um vector e a posio

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 32/34

    idx = 1; max = v(idx); for i=2:length(v) if ( v(i)> max ) max = v(i); idx = i; endif endforendfunction

    que ocupa.

    Exemplo de utilizao (chamada):

    octave:30> [valor,pos] = vmax([2 5 3 7 8 1 4])valor = 8pos = 5octave:31> maximo = vmax([2 4 6 7 3 6]) maximo = 7

    Repare que na segunda chamada, como no foi especificadoum vector vai devolver somente o primeiro valor (max)

    3.5 Ficheiros de script e de funes

    Um ficheiro de script pode conter qualquer sequncia de comandos Octave. Os comandos descritos noficheiro so executados um a um e em sequncia, como se estivessem a ser introduzidos na linha decomando.

    O Octave (no seu ambiente de linha de comando) executa os ficheiros script que possuam a extenso".m". Por exemplo: "octave: 2 > teste" ir executar os comandos que se encontram escritos noficheiro teste.m, ficheiro esse que dever estar na directoria corrente, ou ento a directoria, onde seencontra o ficheiro, dever estar definida na varivel LOADPATH do Octave (para mais informaesdeve consultar o manual).

    Para determinar qual a directoria corrente pode executar o comando pwd, se obtiver como resposta"/cygdrive/c", quer dizer que est na directoria raiz de execuo. Se pretender mudar de directoriapode utilizar o comando cd seguido do caminho para onde pretende ir. Por exemplo se pretenderdeslocar-se para a directoria tmp/test_files (que uma subdirectoria da directoria raiz), deve escreverna linha de comando "octave: 3 > cd tmp/test_files". Para listar os ficheiros que se encontram nadirectoria corrente execute o comando ls.

    Pode atribuir outra extenso ao ficheiro, no entanto para que este seja interpretado como um ficheirode script dever escrever na linha de comando: source nome_do_ficheiro.

    Para alm de comandos pode escrever comentrios nos ficheiros. Um comentrio um troo de textoque incluido num programa e que tem como objectivo facilitar a compreenso durante a leitura, docdigo do programa. Um comentrio serve por exemplo, para explicar o que uma determinada funofaz, como funciona, quais os parmetros de entrada e o que retorna.

    Uma linha de comentrio dever ser iniciada por '#' ou '%' (s vlido linha a linha). O Octave aodetectar um destes smbolos ignora toda a linha.

    Ficheiros de funes

    Na maior parte das vezes no prtico ter que definir todas as funes de cada vez que sonecessrias. O que deve fazer guard-las num ficheiro de forma a que possam ser facilmenteconsultadas e alteradas, caso seja necessrio.

    Para que o Octave reconhea um ficheiro como sendo um ficheiro de funo, dever logo no incio doficheiro definir a funo. Ou seja, o primeiro comando a ser executado deve ser a declarao de

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 33/34

    funo. Apresenta-se de seguida um ficheiro exemplo:

    # funo que calcula a area de uma circunferencia # dado o valor do seu raio. function ret_val = area_circ(raio) ret_val = pi*raio^2 endfunction

    O Octave no necessita que o ficheiro de funo seja "chamado" antes de poder utilizar a funo, noentanto h que garantir que o ficheiro colocado numa directoria onde o Octave o consiga encontrar.Porqu? O Octave ao encontrar um identificador como sendo um nome de funo (e se no for umaque j se encontre "carregada"), vai efectuar uma busca na lista de directorias especificadas navarivel LOADPATH de ficheiros com extenso '.m' que possuam o mesmo nome da funo quepretende.

    Dever portanto ter cuidado na atribuio do nome a um ficheiro de funo (i.e. se definir a funoarea_circ o ficheiro dever chamar-se 'area_circ.m').

    Muitas das funes standard do Octave, como por exemplo funes estatsticas, de manipulao depolinmios, de tratamento de sinais, etc..., esto definidas em ficheiros '.m'. Esses ficheirosencontram-se numa subdirectoria do Octave \usr\local\share\octave\2.1.31\m.

    Exemplo da utilizao de funes de polinmios definidas no Octave

    octave:1> mypoly=[1,3,2,-1]mypoly = 1 3 2 -1

    polinnio deve serdefinido como umvector

    octave:2> polyderiv(mypoly)ans = 3 6 2

    clculo da derivada

    octave:3> polyinteg(mypoly)ans = 0.25000 1.00000 1.00000 -1.00000 0.00000

    clculo do integral

    octave:4> polyval(mypoly,2)ans = 23

    clculo do valor dopolinmio (para x=2)

    octave:5> roots(mypoly)ans = -1.66236 + 0.56228i -1.66236 - 0.56228i 0.32472 + 0.00000i

    determinao das razesdo polinmio (nestecaso so razesimaginrias)

    Exemplo da utilizao de funes estatsticas definidas no Octaveoctave:6> a=[1,1,2 ; 3,5,8 ; 13,21,34 ]a = 1 1 2 3 5 8 13 21 34

    utilizando como exemplo a matriza.

    octave:7> mean(a)ans = 5.6667 9.0000 14.6667

    calcula a mdia dos valores. Nocaso de uma matriz calcula a mdiade cada coluna.

    octave:8> median(a) calcula a mediana. No caso de uma

  • 5/29/2015 Octave - Documentao

    http://ssdi.di.fct.unl.pt/~nmm/ICP/material/aulas_praticas/octave/guia/guia_octave.html 34/34

    ans = 3 5 8

    matriz calcula a mediana de cadacoluna

    octave:9> std(a) ans = 6.4291 10.5830 17.0098

    calcula o desvio padro dos valoresde a

    octave:10> cov(a,a)ans = 41.333 68.000 109.333 68.000 112.000 180.000 109.333 180.000 289.333

    calcula a covarincia dos valoresentre x e y (cov(x,y)), neste casoentre a e a.

    Para mais informao sobre funes oferecidas pelo Octave deve consultar o manual e/ou analisar a(s)directoria(s) de ficheiros '.m'

    3.6 Exemplos de funes

    function hello disp("Hello world!")endfunction

    # funo que grava uma matriz num ficheiro (ler com load_mat)

    function ret_mat=save_mat(file_n, mat)

    fid=fopen(file_n, "w"); sz=size(mat); fprintf(fid, "%d %d\n", sz(1), sz(2));

    for i=1:sz(1) fprintf(fid, "%f ", mat(i,:)); fprintf(fid, "\n"); endfor

    ret_v=fclose(fid);

    endfunction

    # funo que le uma matriz gravada com o comando save_mat

    function ret_mat=load_mat(file_n)

    fid=fopen(file_n, "r"); size_m=fscanf(fid, "%d ", [1,2]); ret_mat=fscanf(fid, "%f ", size_m); fclose(fid);

    endfunction