Você está na página 1de 129

Introduo ao Scilab ca Verso 3.

0 a

Prof. Paulo Srgio da Motta Pires e

Departamento de Engenharia de Computao e Automao ca ca Universidade Federal do Rio Grande do Norte Natal-RN, Julho de 2004

Resumo
Scilab um ambiente utilizado no desenvolvimento de programas para a resoluo de proe ca blemas numricos. Criado e mantido por pesquisadores pertencentes ao Institut de Recherche en e Informatique et en Automatique, INRIA, atravs do Projeto METALAU (Mthods, algorithmes e e et logiciels pour lautomatique) e ` Ecole Nationale des Ponts et Chausses, ENPC, Scilab a e e gratuito (free software) e distribu com o cdigo fonte (open source software). A partir de e do o maio de 2003, Scilab passou a ser mantido por um consrcio de empresas e instituies francesas o co denominado de Consrcio Scilab. o Embora seja apresentado como um software CASCD, Computer Aided Control System Design - Projeto de Sistemas de Controle Auxiliado por Computador, Scilab pode ser usado para desenvolvimento ou prototipao de software numrico de propsito geral. ca e o Este um documento sobre a utilizao e as principais caracter e ca sticas deste ambiente de programao numrica. E importante ressaltar que as referncias denitivas sobre Scilab so ca e e a os manuais que acompanham o software. Por exemplo, podemos citar Introduction to Scilab Users Guide [1], documento no qual este texto se baseia. O objetivo principal apresentar um texto introdutrio, em portugus, sobre Scilab. Nosso e o e interesse fazer deste documento um complemento aos textos utilizados em disciplinas como e Mtodos Computacionais, Clculo Numrico, Computao Numrica, Algebra Linear Computae a e ca e cional e correlatas. Nos interessa, tambm, mostrar que o Scilab uma excelente ferramenta de e e suporte para linhas de pesquisa onde o uso de computadores na resoluo numrica de problemas ca e intensivo. e A verso mais recente deste trabalho est dispon a a vel, no formato pdf, em http://www.dca. ufrn.br/~pmotta. Comentrios ou sugestes podem ser enviados para pmotta@dca.ufrn.br. a o

Agradecimentos
A Ao Klaus Steding-Jessen, pelo L TEX-demo. A maioria das informaes sobre como se faz co A isso em L TEX ? podem ser encontradas no documento escrito pelo Klaus1 ; Ao Dr. Jesus Olivan Palacios, pelas conversas sobre o Scilab. O Dr. Palacios sintetiza com brilhantismo as vantagens de se utilizar software livre e de cdigo aberto; o Aos colegas, pelas contribuies e sugestes que melhoraram a apresentao deste trabalho. co o ca

Distribuio ca
Este trabalho pode ser copiado e distribu do livremente, mantidos os crditos e ao seu autor.

A A Informaoes sobre o L TEX-demo em particular ou sobre o L TEXem geral podem ser obtidas em http: c //biquinho.furg.br/tex-br/

ii

Histrico deste Documento o


Fevereiro de 1999 - Verso 0.1 - In a cio. Julho de 2001 - Verso 0.2 - Correes e atualizaes. a co co Julho de 2001 - Verso 0.3 - Correes e atualizaes. a co co Julho/Novembro de 2001 - Verso 1.0 - Reorganizao do trabalho e correes. Dispoa ca co nibilizao deste documento no site do Scilab - INRIA (http://scilabsoft.inria.fr/ ca books.html) Maio/Julho de 2004 - Verso 3.0 - Reorganizao do trabalho, correes e atualizaes. O a ca co co Scilab passa a ser mantido pelo Consrcio Scilab a partir de maio de 2003. O nmero da o u verso deste documento passa a ser igual ao nmero da verso do Scilab que ele descreve. a u a

Este trabalho foi totalmente desenvolvido utilizando free ou open source software. O Scilab verso 3.02 foi instalado, a partir do cdigo fonte, no Linux distribuio Slackware 9.13 , kernel a o ca ca A verso 2.4.244 . A digitao L TEX foi feita usando o Xemacs5 . As guras, em jpg foram a capturadas usando o GIMP6 verso 1.2.5. O texto completo foi transformado em pdf atravs a e do pdatex. A mquina utilizada um Pentium MMX 200, 64 MB de RAM com um disco r a e gido de 15 GB.

2 3

Pgina a Pgina a 4 Pgina a 5 Pgina a 6 Pgina a

do do do do do

Scilab : http://scilabsoft.inria.fr Linux distribuio Slackware : http://www.slackware.com ca kernel Linux http://www.kernel.org Xemacs http://www.xemacs.org GIMP http://www.gimp.org

iii

Sumrio a
Scilab - Verso 3.0 . . . . . a Resumo . . . . . . . . . . . Agradecimentos . . . . . . . Distribuio . . . . . . . . . ca Histrico deste Documento o Sumrio . . . . . . . . . . . a Lista de Figuras . . . . . . Lista de Tabelas . . . . . . Lista de Cdigos . . . . . . o 1 Introduo ca 2 O Ambiente Scilab 2.1 Introduo . . . . . . . . . . . . . . . ca 2.2 O Ambiente Grco do Scilab . . . . . a 2.3 Variveis Especiais . . . . . . . . . . . a 2.4 Manipulao de Arquivos e Diretrios ca o 2.5 O help do Scilab . . . . . . . . . . . . 2.6 Arquivos com Comandos Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . i . ii . ii . iii . iv . vi . vii . viii 1 4 4 5 10 11 14 17

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

3 Operaes Bsicas com Scilab co a 19 3.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 ca 3.2 Utilizando as Funes Internas do Scilab . . . . . . . . . . . . . . . . . . . . . . . 23 co 4 Polinmios, Vetores, Matrizes e Listas o 4.1 Polinmios . . . . . . . . . . . . . . . . . . . o 4.2 Vetores . . . . . . . . . . . . . . . . . . . . . 4.3 Matrizes . . . . . . . . . . . . . . . . . . . . . 4.4 Acesso a Elementos de Vetores e de Matrizes 4.5 Matrizes com Polinmios . . . . . . . . . . . o 4.6 Matrizes Simblicas . . . . . . . . . . . . . . o 4.7 Matrizes Booleanas . . . . . . . . . . . . . . . 4.8 Operaes com Vetores e Matrizes . . . . . . co 4.9 Listas . . . . . . . . . . . . . . . . . . . . . . 5 Programao ca 5.1 Comandos para Iteraes . . . co 5.1.1 O Loop for . . . . . . . 5.1.2 O Loop while . . . . . . 5.2 Comandos Condicionais . . . . 5.2.1 Comando if-then-else 5.2.2 Comando select-case 25 25 27 31 35 41 43 45 46 53 56 56 56 58 59 60 61

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

iv

5.3 5.4

Denindo Scripts . . . . . . . . . . . . . . . Denindo Funes . . . . . . . . . . . . . . co 5.4.1 Variveis Globais e Variveis Locais a a 5.4.2 Arquivos com Funes . . . . . . . . co 5.4.3 Comandos Especiais . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

62 65 66 68 74 76 76 77 83 85 86 87

6 Grcos no Scilab a 6.1 A Janela de Grcos do Scilab a 6.2 Grcos Bi-dimensionais . . . . a 6.2.1 Outros Comandos . . . 6.2.2 Grcos 2D Especiais . a 6.3 Grcos Tri-dimensionais . . . a 6.3.1 Grcos 3-D Especiais . a

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

A Instalao do Scilab ca 89 A.1 Instalao no Linux Slackware - Cdigo Fonte . . . . . . . . . . . . . . . . . . . . 89 ca o B Ligao do Scilab com Programas em C ca 92 B.1 A Ligao Dinmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 ca a C Instalao de Toolboxes ca 96 C.1 Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 ca D Funes Pr-denidas - Scilab 3.0 co e D.1 Programming . . . . . . . . . . . . . . . . . . . . . D.2 Graphics Library . . . . . . . . . . . . . . . . . . . D.3 Elementary Functions . . . . . . . . . . . . . . . . D.4 Input/Output Functions . . . . . . . . . . . . . . . D.5 Handling of functions and libraries . . . . . . . . . D.6 Character string manipulations . . . . . . . . . . . D.7 GUI and Dialogs . . . . . . . . . . . . . . . . . . . D.8 Utilities . . . . . . . . . . . . . . . . . . . . . . . . D.9 Linear Algebra . . . . . . . . . . . . . . . . . . . . D.10 Polynomial calculations . . . . . . . . . . . . . . . D.11 General System and Control . . . . . . . . . . . . . D.12 Robust control toolbox . . . . . . . . . . . . . . . . D.13 Optimization and simulation . . . . . . . . . . . . D.14 Signal Processing toolbox . . . . . . . . . . . . . . D.15 Arma modelisation and simulation toolbox . . . . D.16 Metanet: graph and network toolbox . . . . . . . . D.17 Sound le handling . . . . . . . . . . . . . . . . . . D.18 Language or data translations . . . . . . . . . . . . D.19 PVM parallel toolbox . . . . . . . . . . . . . . . . D.20 TdCs . . . . . . . . . . . . . . . . . . . . . . . . . . D.21 TCL/Tk interface . . . . . . . . . . . . . . . . . . D.22 Statistic basics . . . . . . . . . . . . . . . . . . . . D.23 Cumulative Distribution Functions; Inverses, grand D.24 Identication . . . . . . . . . . . . . . . . . . . . . D.25 Matlab to Scilab conversion tips . . . . . . . . . . Referncias Bibliogrcas e a 99 99 101 104 106 107 108 108 108 109 110 111 112 112 113 114 114 115 115 115 116 116 116 117 117 118 120

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

Lista de Figuras
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 3.1 3.2 Tela inicial do Scilab no ambiente grco do Linux. . . . . . . . . . . . . . . a Tela com as opes de operaes sobre arquivos, File Operations. . . . . . co co Programas de demonstrao, opo Demos , do Scilab 3.0. . . . . . . . . . . ca ca Tela da sub-opo Help browser com navegador padro do Scilab. . . . . . . ca a Tela de congurao para a escolha do navegador do Help do Scilab. . . . ca Tela inicial do Scipad, editor incorporado ao Scilab. . . . . . . . . . . . . . Tela de help para a funo det. . . . . . . . . . . . . . . . . . . . . . . . . ca Comando help para a funo det. . . . . . . . . . . . . . . . . . . . . . . . ca Texto do help para a funo besselk. . . . . . . . . . . . . . . . . . . . . . ca Comando diary para gravao de sesses desenvolvidas no ambiente Scilab. ca o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 7 8 8 10 15 15 16 17

Rodando o exemplo de utilizao da funo fft apresentado no help do Scilab. . 23 ca ca A funo K de Bessel, besselk. O exemplo apresentado no help da funo ca ca copiado para o editor SciPad, selecionado e executado atravs da sub-opo e e ca Evaluate Selection Ctrl+y da opo Execute . . . . . . . . . . . . . . . . . . . . 24 ca Escrevendo uma funo usando o editor do Scilab. . . . . . . . . . . . . . . . . . 69 ca Janela grca do Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Sa das para a funo plot2d([x], y). Cada sub-grco refere-se a um dos itens ca a da sesso do Scilab mostrada anteriormente. Observar que os grcos dos Itens a a 4 e 5 possuem valores de abcissas diferentes dos demais. . . . . . . . . . . . . . . Sa das para a funo plot2d([x], y, <opt_args>). . . . . . . . . . . . . . . . . ca Sa das para a funo subplot(). . . . . . . . . . . . . . . . . . . . . . . . . . . . ca A Exportando grcos para o L TEX. . . . . . . . . . . . . . . . . . . . . . . . . . . a Exemplo de sa grca 3-D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . da a Exemplos de grcos 3-D especiais. . . . . . . . . . . . . . . . . . . . . . . . . . . a 76

5.1 6.1 6.2

6.3 6.4 6.5 6.6 6.7

80 83 85 85 87 88

C.1 Procedimentos para a utilizao do toolbox ANN e help com as funes dispon ca co veis no toolbox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

vi

Lista de Tabelas
2.1 4.1 5.1 6.1 Teclas de edio linhas de comando no prompt do Scilab. . . . . . . . . . . . . . 14 ca Sintaxe de alguns operadores usados em operaes vetoriais ou matriciais. . . . . 46 co Operadores condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Variaes do comando plot2d() . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 co

vii

Lista de Cdigos o
1 2 3 4 5 6 7 O script que implementa o mtodo de Newton-Raphson para obter e Programa principal, implementao do mtodo de Runge-Kutta. . ca e A funo f(x,y). . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca A soluo exata da equao diferencial. . . . . . . . . . . . . . . . ca ca Programa para resolver um sistema triangular. . . . . . . . . . . . O script utilizado para gerar o grco da Figura 6.2. . . . . . . . a Funo Runge-Kutta escrita em C. . . . . . . . . . . . . . . . . . . ca . . . . . . 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 70 70 70 74 81 93

viii

Cap tulo 1

Introduo ca
Scilab1 um ambiente voltado para o desenvolvimento de software para resoluo de proe ca blemas numricos. Scilab foi criado em 1990 por um grupo de pesquisadores do INRIA2 -Institut e de Recherche en Informatique et en Automatique e do ENPC3 -Ecole Nationale des Ponts et Chausses. e Desde 1994, quando passou a ser dispon na Internet, Scilab gratuito, free software, e vel e distribu com o cdigo fonte, open source software. Alm da distribuio com o cdigo fonte, do o e ca o existem, tambm, distribuies pr-compiladas do Scilab para vrios sistemas operacionais. Na e co e a verso 3.0, na data em que este documento foi escrito, Scilab est dispon para as seguintes a a vel plataformas: Plataformas UNIX/Linux: Scilab 3.0 - arquivo binrio para Linux (scilab-3.0.bin.linux-i686.tar.gz); a Scilab 3.0 - arquivo com o cdigo fonte do Scilab (scilab-3.0.src.tar.gz). o Plataformas Windows 9X/NT/2000/XP: Scilab 3.0 - instalador da verso binria do Scilab (scilab3.0.exe); a a Scilab 3.0 - cdigo fonte do Scilab (scilab-3.0.src.zip) o A partir de maio de 2003, Scilab passou a ser mantido por um consrcio de empresas e o instituies francesas denominado de Consrcio Scilab. Os principais objetivos deste consrcio co o o so: a Organizar a cooperao e o intercmbio entre os desenvolvedores do Scilab objetivando ca a incorporar ao software os ultimos avanos cient c cos na rea da computao numrica; a ca e Organizar a cooperao e o intercmbio entre os usurios do Scilab objetivando fazer com ca a a que o software possa ser utilizado de maneira mais efetiva na indstria, na educao e na u ca pesquisa, e Angariar recursos para a manuteno da equipe de desenvolvedores e para garantir um ca suporte mais adequado `s necessidades dos usurios. a a Embora seja apresentado pelos seus mantenedores como um software CASCD - Computer Aided Control System Design - Projeto de Sistemas de Controle Auxiliado por Computador,
1 2

Pgina do Scilab: http://scilabsoft.inria.fr a Pgina do INRIA : http://www.inria.fr a 3 Pgina do ENPC : http://www.enpc.fr a

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

Scilab um ambiente para desenvolvimento ou prototipao de software numrico de propsito e ca e o geral. O objetivo principal deste trabalho divulgar o ambiente Scilab atravs de um texto escrito e e em portugus. Com este objetivo em mente, a nfase maior dada na apresentao das carace e e ca ter sticas do prprio ambiente. Assim, apesar do rigorismo, no h preocupaes excessivas em o a a co relao aos tipos de problemas tratados ou em relao aos exemplos apresentados. Partimos ca ca do princ pio que o leitor deste trabalho j possua conhecimentos prticos, mesmo rudimentares, a a sobre programao. ca O objetivo secundrio, tambm relevante, mostrar que a utilizao de software livre e de a e e ca cdigo aberto, free/open source software, do ponto de vista do usurio, traz grandes vantagens. o a Algumas delas, apresentadas em [2], so: a A ultima verso do software est sempre dispon a a vel, geralmente atravs da Internet; e O software pode ser legalmente utilizado, copiado, distribu do, modicado; Os resultados obtidos podem ser divulgados sem nenhuma restrio; ca Os programas desenvolvidos podem ser transferidos para outras pessoas sem imposies co ou constrangimentos de quaisquer natureza; O acesso ao cdigo fonte, evitando surpresas desagradveis; o a O acesso a informao de alta qualidade, e ca A certeza de estar participando de uma comunidade cujo principal valor a irrestrita e difuso do conhecimento. a Existem, ainda, algumas pretenses com a divulgao deste trabalho. Uma delas fao ca e zer deste documento um complemento para os textos utilizados em disciplinas como Mtodos e Computacionais, Clculo Numrico, Computao Numrica, Algebra Linear Computacional e a e ca e correlatas. Uma outra, mostrar que Scilab uma excelente ferramenta de suporte para lie e nhas de pesquisa onde o uso de computadores na resoluo numrica de problemas intensivo. ca e e A ultima verso deste trabalho encontra-se dispon em http://www.dca.ufrn.br/~pmotta. a vel Comentrios ou sugestes sobre esse documento so sempre benvindas e podem ser enviados a o a para pmotta@dca.ufrn.br. E importante ressaltar que as referncias denitivas sobre Scilab permanecem sendo os mae nuais que acompanham o software. Na data em que este trabalho foi escrito, estavam dispon veis na homepage do Scilab os seguintes documentos, [1]: Introduction to Scilab - manual de introduo ao Scilab, documento no qual este texto ca A se baseia, nos formatos HTML, PDF, Postscript, com os arquivos fontes em L TEX; Communication Toolbox Documentation - documentao sobre o toolbox de comunicaca A ca o, nos formatos HTML, PDF, Postscript, com os arquivos fontes em L TEX; Signal Processing - documentao sobre o toolbox de processamento de sinais, nos forca A matos PDF, Postscript, com os arquivos fontes em L TEX; Lmitool: Linear Matrix Inequalities Optimization Toolbox - documentao soca bre o toolbox de otimizao, nos formatos HTML , PDF, Postscript, com os arquivos fontes ca A em L TEX; Metanet Users Guide and Tutorial - tutorial sobre a utilizao do toolbox de grafos ca A Metanet, nos formatos HTML, PDF, Postscript, com os arquivos fontes em L TEX;

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

Scicos, documentao sobre o ambiente de simulao do Scilab nos formatos HTML, ca ca A X; PDF, Postscript, com os arquivos fontes em L TE Scilabs Internals Documentation - documentao sobre as caracter ca sticas internas A do Scilab, nos formatos HTML, PDF, Postscript, com os arquivos fontes em L TEX; HOWTOs Scilab - vrias dicas sobre a utilizao do Scilab, no formato HTML; a ca Scilabs demonstrations - programas de demonstrao de funcionalidades do Scilab, ca no formato HTML; Intersci - documentao sobre a interconexo do Scilab com programas escritos nas ca a linguagens C ou FORTRAN, nos formatos PDF, Postscript, com os arquivos fontes em A L TEX, e Inline help pages - documentao contendo o help de funes do Scilab nos formatos ca co A X. HTML, PDF, Postscript, com os arquivos fonte em L TE Este documento, desenvolvido para satisfazer os objetivos estabelecidos em pargrafos prea cedentes, est dividido em seis Cap a tulos e quatro Apndices. Neste Cap e tulo, mostramos o contexto no qual o ambiente Scilab e este trabalho esto inseridos. a No Cap tulo 2, apresentamos uma viso geral das principais caracter a sticas do ambiente Scilab. Descrevemos as suas diversas opes e apresentamos os comandos bsicos utilizados na co a edio de comandos no ambiente Scilab. ca No Cap tulo 3, apresentamos diversos exemplos de manipulaes numricas bsicas que co e a podem ser realizadas com o software. So enfatizadas operaes com nmeros (reais, complexos) a co u e dados alguns exemplos de utilizao de funes internas do Scilab. ca co O Cap tulo 4 dedicado aos vrios tipos de dados que podem ser manipulados pelo Scilab. e a Apresentamos polinmios, vetores, matrizes e listas. o No Cap tulo 5, so dados exemplos de desenvolvimento de programas no Scilab e, nalizando, a no Cap tulo 6, utilizamos comandos do Scilab voltados para a gerao de grcos bi-dimensionais ca a e tri-dimensionais. No Apndice A, mostramos os procedimentos para a instalao do software, a partir do e ca cdigo fonte, em mquinas com o sistema operacional Linux (a instalao foi realizada em o a ca uma mquina com distribuio Slackware 9.1, kernel verso 2.4.24). Os procedimentos para a a ca a instalao das distribuies binrias do Scilab, por serem espec ca co a cos de cada plataforma, no a so apresentados. O usurio aconselhado a buscar estas informaes na pgina do Scilab. a a e co a Descrevemos, ainda, os principais arquivos e diretrios que compem o ambiente Scilab. o o No Apndice B, apresentamos um procedimento que permite executar cdigos escritos em e o linguagem C dentro do ambiente Scilab. No Apndice C, apresentamos os procedimentos padres para a instalao de toolboxes no e o ca Scilab. No Apndice D, apresentamos uma listagem de todas as funes pr-denidas dispon e co e veis no ambiente Scilab-3.0. Por tratar-se de um texto introdutrio, deixamos de apresentar diversas caracter o sticas do ambiente Scilab que, entretanto, podem ser consultadas nos documentos citados anteriormente. Acreditamos que a maneira mais adequada de ler este documento em frente a um compue tador com Scilab instalado e funcionando. Os exemplos apresentados e a prpria funcionalidade o do software podero, desta forma, ser explorados com maior ecincia. a e Este trabalho pode ser copiado e distribu livremente, dados os devidos crditos ao seu do e autor.

Cap tulo 2

O Ambiente Scilab
Neste Cap tulo, apresentamos algumas caracter sticas do ambiente Scilab em plataforma grca Linux. Em seguida, mostramos exemplos de manipulao de arquivos e de diretrios a a ca o partir desse ambiente. O objetivo a familiarizao com o software. e ca

2.1

Introduo ca

Scilab um ambiente de programao numrica bastante ex e ca e vel. Suas principais caracter sticas so: a 1. E um software de distribuio gratuita, com cdigo fonte dispon ca o vel. Sua linguagem e simples e de fcil aprendizado; a 2. Possui um sistema de aux ao usurio, help; lio a 3. E um ambiente poderoso para gerao de grcos bi-dimensionais e tri-dimensionais, inca a clusive com animao; ca 4. Implementa diversas funes para manipulao de matrizes. As operaes de concatenaco ca co ca o, acesso e extrao de elementos, transposio, adio e multiplicao de matrizes so ca ca ca ca a facilmente realizadas; 5. Permite trabalhar com polinmios, funes de transferncia, sistemas lineares e grafos; o co e 6. Apresenta facilidades para a denio de funes; ca co 7. Permite o acesso a rotinas escritas nas linguagens FORTRAN ou C; 8. Pode ser acessado por programas de computao simblica como o Maple1 , que um ca o e software comercial, ou o MuPAD2 , que livre para uso em instituies de ensino/pesquisa; e co 9. Suporta o desenvolvimento de conjuntos de funes voltadas para aplicaes espec co co cas, os chamados toolboxes. Alm dos toolboxes desenvolvidos pelo Grupo Scilab, outros esto dispon e a veis tambm gratuie tamente. Para exemplicar, destacamos o ANN (Articial Neural Network Toolbox ), para redes neurais, o FISLAB (Fuzzy Logic Inference Toolbox ), para lgica difusa, e o FRACLAB (Fractal, o Multifractal and Wavelet Analysis Toolbox ), para anlise de sinais utilizando fractais e wavea lets. No Apndice C, apresentamos os procedimentos necessrios para a instalao do toolbox e a ca de redes neurais, ANN, no ambiente Scilab.
1 2

Pgina do Maple: http://www.maplesoft.com a Pgina do MuPAD: http://www.mupad.de a

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

Existem trabalhos desenvolvidos tendo Scilab como ferramenta principal como, por exemplo, o apresentado em [2] e em alguns documentos introdutrios, [3, 4, 5, 6, 7]. Tambm, Scilab, o e atravs de uma extenso chamada de Scilab Paralelo [8], Scilab//, pode ser executado em e a mquinas paralelas ou em redes de estaes de trabalho, as NOWs - Network of Workstations, a co usando as funes do toolbox PVM (Parallel Virtual Machine). Com o Scilab//, processos co podem ser ativados, programas podem ser executados em estaes remotas, com comunicao co ca entre eles, e os resultados agregados. Algumas das funes implementadas no Scilab baseiam-se em bibliotecas bem estabelecidas. co Por exemplo3 , Funes de Algebra Linear - baseadas nas bibliotecas LINPACK, EISPACK, LAPACK e BLAS co Funes para Resoluo de Equaes Diferenciais - baseadas nas bibliotecas ODEPACK, co ca co SLATEC; Funes de Otimizao - baseadas na biblioteca MINPACK; co ca entre outras. A adoo de bibliotecas bem estabelecidas contribui para a estabilidade e a ca qualidade dos resultados apresentados pelo Scilab.

2.2

O Ambiente Grco do Scilab a

Aps a realizao dos procedimentos de instalao descritos no Apndice A, podemos comeo ca ca e c ar a trabalhar com Scilab. Assumiremos que o software esteja instalado no sistema operacional Linux. Em uma shell no ambiente grco do Linux4 , basta digitar scilab para comear a a c utilizar o programa. A tela inicial do Scilab apresentada na Figura 2.1. e

Figura 2.1: Tela inicial do Scilab no ambiente grco do Linux. a Na Figura 2.1, observamos que o prompt do Scilab representado por uma seta, --> e que e o cursor do Scilab representado pelo s e mbolo . Este prompt chamado de prompt inicial e
O cdigo fonte dessas bibliotecas est dispon em http://www.netlib.org o a vel Scilab pode ser executado, tambm, no ambiente texto do Linux. Basta digitar scilab -nw. No ambiente e texto, os grcos que porventura forem gerados, sero apresentados no terminal grco, acess via Ctrl-Alt-F7, a a a vel caso este esteja dispon vel.
4 3

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

ou prompt de n vel zero. Ainda na Figura 2.1, podemos observar a existncia de um menu e horizontal com seis opes: File , Control , Demos , Graphic Window 0 , Help e Editor . co Utilizando o mouse para escolher cada uma das opes, vericamos que: co A opo File possui trs sub-opes: ca e co co u File Operations, que permite carregar arquivos, funes e executar o contedo de arquivos com comandos Scilab, entre outras aes. Na Figura 2.2, apresentamos o co Scilab e a tela correspondente ` essa opo. a ca Kill, que permite interromper de maneira abrupta o processamento, saindo do ambiente Scilab. Quit, que permite sair do ambiente Scilab de forma natural.

Figura 2.2: Tela com as opes de operaes sobre arquivos, File Operations. co co A opo Control , que tambm possui trs sub-opes: ca e e co ca o e Resume - continua a execuo aps uma pause ter sido dada atravs de um comando em uma funo ou atravs de Stop ou Ctrl-c. ca e Abort - aborta a execuo aps uma ou vrias pause, retornando ao prompt inicial. ca o a ca Stop - interrompe a execuo do Scilab e entra em modo pause. No prompt, equivale a um Ctrl-c. Essas operaes so mostradas na sesso Scilab: co a a --> -1-> -1-> -2-> -2->resume // Ctrl-c no prompt inicial // leva ao prompt de primeiro nivel // Ctrl-c no prompt de primeiro nivel // leva ao prompt de segundo nivel // retorna ao prompt de primeiro nivel

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

-1->resume --> -1-> -2-> -3->abort -->

// retorna ao prompt inicial // Ctrl-c // Ctrl-c // Ctrl-c // retorna ao promtp inicial

No Scilab, os comentrios sempre comeam com os caracteres //, como foi mostrado no a c exemplo anterior. A opo Demos - permite executar os vrios programas de demonstrao que acompaca a ca a nham a distribuio Scilab. Na Figura 2.3, so apresentados os programas de demonstraca ca o dispon veis no Scilab verso 3.0. E interessante, e muito importante, em um primeiro a contato com o programa, executar algumas dessas rotinas de demonstrao. ca

Figura 2.3: Programas de demonstrao, opo Demos , do Scilab 3.0. ca ca A opo Graphics Window N permite manipular janelas grcas. Aqui, N representa a ca a janela grca que est sendo utilizada. Ao inicializar, Scilab utiliza N = 0, signicando a a que Graphics Window 0 a primeira janela grca ou a janela grca default. Esta e a a opo possui cinco sub-opes: ca co Set (Create) Window Raise (Create) Window Delete Graphics Window - permite apagar uma janela grca, a + - passa para a prxima janela grca {N+1}. o a - - retorna para a janela grca anterior {N-1}. a A opo Help permite obter informaes sobre as diversas funes e comandos do Scilab. ca co co Essa opo possui trs sub-opes: ca e co Help browser - ativa o navegador default do Scilab. Esse navegador carrega os textos com o help das funes implementadas no Scilab, seus toolboxes e eventuais co toolboxes instalados pelo usurio (ver Apndice C). O navegador de help tambm a e e

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

pode ser ativada diretamente no prompt do Scilab. Usando o mouse na sub-opo ca Help browser temos a tela de help mostrada na Figura 2.4 com o navegador padro a do Scilab.

Figura 2.4: Tela da sub-opo Help browser com navegador padro do Scilab. ca a Apropos - ativa uma janela onde pode ser digitada uma palavra chave do assunto sobre o qual se deseja algum tipo de aux lio. Essa opo tambm pode ser ativada ca e diretamente no prompt do Scilab. ca Configure - permite que seja escolhido um outro navegador em substituio ao navegador default do help do Scilab. A Figura 2.5 mostra as opes de navegadores co para a verso 3.0 do Scilab. a

Figura 2.5: Tela de congurao para a escolha do navegador do Help do Scilab. ca Para Scilab verso 3.0, o help est dispon para os seguintes conjuntos de funes: a a vel co Programming - conjunto de comandos que podem ser utilizados na programao com ca o Scilab; Graphic Library - conjunto de comandos grcos; a Elementary Functions - conjunto de funes elementares; co Input/Output Functions - conjunto de funes para entrada e sa de dados; co da

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

Handling of functions and libraries - conjunto de funes para manipulao co ca de funes e bibliotecas; co Character string manipulations - conjunto de funes para manipulao de strings; co ca GUI and Dialogs - conjunto de funes que permitem a criao de dilogos (menus, co ca a por exemplo); Utilities - conjunto de funes com utilidades diversas; co Linear Algebra - conjunto de funes usadas em lgebra linear; co a Polynomial calculations - conjunto de funes usadas em clculos com polinco a o mios; co a General System and Control - conjunto de funes na rea de controle; Robust control toolbox - conjunto de funes do toolbox de controle robusto; co Optimization and simulation - biblioteca de funes no-lineares para utilizao co a ca em otimizao e simulao; ca ca Signal Processing toolbox - conjunto de funes do toolbox de processamento de co sinais; Arma modelization and simulation toolbox - conjunto de funes do toolbox para co modelamento e simulao ARMA-Autoregressive Moving Average; ca Metanet: graph and network toolbox - conjunto de funes do toolbox Metanet co para anlise de grafos; a Scicos: Bloc diagram editor and simulator - conjunto de funes para modeco lagem e simulao de sistemas dinmicos; ca a Sound file handling - conjunto de funes para manipulao de arquivos de som; co ca Language or data translations - conjunto de funes para converso de dados co a entre o Scilab e alguns aplicativos; PVM parallel toolbox - conjunto de funes que permitem o gerenciamento da co comunicao com outras aplicaes usando mquinas paralelas virtuais; ca co a TdCs - conjunto de funes com utilidades diversas; co TCL/Tk interface - conjunto de funes que permitem a interface com as linguagens co TCL/Tk; Statistic basics - conjunto de funes para clculos estat co a sticos; Cumulative Distribution Functions; Inverse, grand - conjunto de funes de co distribuio cumulativa, inversa e geradora de nmeros randmicos; ca u o Identification - conjunto de funes para tratamento de sistemas discretos; co Matlab to Scilab conversion tips - conjunto de funes para a converso de co a arquivos de programas Matlab em Scilab. A opo Editor permite utilizar o editor incorporado ao Scilab, chamado SciPad, para ca escrever comandos e funes. Na Figura 2.6, apresentamos a tela inicial do editor SciPad. co

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

10

Figura 2.6: Tela inicial do Scipad, editor incorporado ao Scilab. Algumas funes do editor do Scilab sero exploradas em Cap co a tulos subseqentes. u

2.3

Variveis Especiais a

Existem variveis que assumem valores pr-denidos no Scilab. Elas podem ser vistas atravs a e e do comando who. Essas variveis so protegidas e no podem ser apagadas. Algumas destas a a a variveis so pr-xadas com o caracter %. A sa do comando who, logo aps o Scilab 3.0 ter a a e da o sido inicializado, mostrada em seguida. E conveniente lembrar que, no prompt do Scilab, os e comandos so interpretados e executados aps o usurio pressionar a tecla Enter. a o a
-->who your variables are... %scipad_fontsize show_startupinfo LCC %toolboxes_dir %toolboxes scicos_pal %scicos_menu %scicos_short %scicos_help %scicos_display_mode modelica_libs scicos_pal_libs with_gtk with_tk demolist %helps LANGUAGE SCI MSDOS home PWD TMPDIR xdesslib with_texmacs percentlib polylib intlib elemlib utillib statslib alglib siglib optlib autolib roblib soundlib metalib armalib tkscilib tdcslib s2flib mtlblib %F %T %z %s %nan %inf COMPILER %gtk %pvm %tk $ %t %f %eps %io %i %e using 15025 elements out of 1000000. and 60 variables out of 9231 your global variables are... LANGUAGE %helps demolist %browsehelp %scipad_fontsize using 1097 elements out of 11000. and 8 variables out of %toolboxes %toolboxes_dir LCC

767

-->

A varivel %i representa o resultado de a

( 1), %pi a varivel que representa = e a

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

11

3, 1415926. . . , e %e a varivel que representa a constante de Euler e = 2.7182818. . . . Uma e a outra varivel pr-denida %eps que representa a preciso da mquina na qual Scilab est a e e a a a instalado (%eps o maior nmero para o qual 1+%eps = 1). So pr-denidas, ainda, as e u a e variveis %inf que signica Innito e %nan que signica No um Nmero, NotANumber. a a e u A varivel %s denida pelo comando s = poly(0, s). No Scilab so denidas, tambm, a e a e variveis com valores booleanos: %T signicando verdadeiro (true) e %F signicando falso a (false). Scilab tambm carregado com algumas funes pr-denidas, chamadas de funes primie e co e co tivas ou funes intr co nsecas5 . No Cap tulo 3, apresentamos alguns exemplos de utilizao dessas ca funes. co Ateno especial deve ser dada `s variveis SCI e PWD. Elas representam, respectivamente, o ca a a 6 e o diretrio no qual o Scilab foi lanado e est rodando. diretrio no qual o Scilab foi instalado o o c a A varivel home possui valor idntico ao da varivel PWD. a e a -->SCI SCI = // Diretorio onde Scilab foi instalado

/usr/local/scilab-3.0 -->PWD PWD = /home/paulo -->home home = /home/paulo --> As variveis pr-denidas e protegidas esto no arquivo de inicializao SCI/scilab.star. a e a ca Se desejar, o usurio pode pr-denir as suas prprias variveis e, depois, coloc-las no arquivo a e o a a .scilab localizado na sua rea de trabalho. a Como mostrado nos exemplos anteriores, os comentrios sempre comeam com os caracteres a c //. Tambm, importante salientar que os comentrios (e os nomes das variveis e funes e e a a co utilizadas no Scilab) NAO devem ter qualquer tipo de acentuao. ca // Mesmo valor da variavel PWD // Diretorio onde Scilab foi lancado

2.4

Manipulao de Arquivos e Diretrios ca o

Scilab possui funes que podem ser utilizadas para manipular arquivos e diretrios. A co o funo pwd, no confundir com a varivel PWD da seo anterior, mostra o diretrio no qual ca a a ca o estamos trabalhando. Assim, -->pwd ans = // Mostra o diretorio de trabalho

/home/paulo
5 6

Ver Apndice D para a listagem dessas funes. e co Ver Apndice A. e

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

12

--> Usando a funo chdir, mudamos para o diretrio de trabalho teste, ca o -->chdir(teste) ans = 0. --> Uma observao importante: para Scilab, uma resposta igual a 0 (zero) para determinados ca tipos de comandos indica que a ao foi realizada com sucesso. E o caso da resposta 0 obtida ca quando do comando chdir(teste). Por termos mudado de diretrio de trabalho, o valor de retorno da funo pwd foi alterado o ca mas o valor da varivel PWD permanece inalterada, como podemos vericar pela seqncia de a ue comandos, -->pwd ans = /home/paulo/teste -->PWD PWD = /home/paulo --> As variveis criadas durante os trabalhos realizados no ambiente Scilab podem ser armazea nadas em um arquivo. Vamos considerar as variveis, a -->a = 1 a = 1. -->b = 2 b = 2. --> Para salvar as variveis a e b em um arquivo, que chamamos de dados.dat, usamos o a comando save com a sintaxe -->save(dados.dat,a,b) --> // PWD permanece inalterado. // Mostrando o novo diretorio de trabalho // Mudando o diretorio de trabalho

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

13

O comando save cria o arquivo dados.dat no diretrio de trabalho. O arquivo dados.dat o um arquivo binrio. Para recuperar os valores de a e b, usamos o comando load, conforme e a mostrado no exemplo, -->clear -->a !--error 4 undefined variable : a // Eliminando as variaveis nao protegidas

-->b !--error 4 undefined variable : b -->load(dados.dat,a,b) -->a, b a = 1. = 2. --> Neste exemplo, o comando clear elimina todas as variveis no protegidas do ambiente a a Scilab. Por esse motivo, as variveis a e b, denidas anteriormente, quando chamadas aps a o clear, fazem com que Scilab apresente a mensagem de error undefined variable, varivel a indenida. Em seguida, atravs do comando load, as variveis so lidas do arquivo dados.dat e a a e retomam seus valores originais, passando novamente a existirem no ambiente Scilab. A funo unix_w permite a comunicao do Scilab com a shell Linux (Unix). Usando esta ca ca funo, as respostas so apresentadss na prpria janela do Scilab. ca a o -->pwd ans = /home/paulo/teste -->unix_w(ls) Makefile Relatorio.pdf app app.c app.o chromosome.c chromosome.h chromosome.o // Mostrando o conteudo de /home/paulo/teste

-->unix_w(mkdir outro_dir)

// Criando o diretorio outro_dir

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->unix_w(ls) Makefile Relatorio.pdf app app.c app.o chromosome.c chromosome.h chromosome.o outro_dir

14

// outro_dir aparece na listagem // Mudando de diretorio

-->chdir(outro_dir) ans = 0. -->pwd ans = /home/paulo/teste/outro_dir -->

Os comandos digitados a partir do prompt do Scilab podem ser editados. Na Tabela 2.1, mostramos algumas combinaes de teclas que permitem esta edio. co ca Ctrl-p ou Ctrl-n ou Ctrl-b ou Ctrl-f ou Delete ou Ctrl-h Ctrl-d Ctrl-a Ctrl-e Ctrl-k Ctrl-u !prev recupera o comando digitado anteriormente recupera o comando seguinte (se houver) move o cursor um caracter para trs a move o cursor um caracter para a frente apaga o caracter anterior (tecla backspace) mesmo efeito da linha anterior apaga o caracter sob o cursor move o cursor para o in da linha cio move o cursor para o nal da linha apaga da posio do cursor at o nal da linha ca e cancela a linha recupera a linha de comando que comea com prev c

Tabela 2.1: Teclas de edio linhas de comando no prompt do Scilab. ca

2.5

O help do Scilab

A qualquer momento, o usurio pode obter informaes sobre as funes internas do Scilab a co co digitando o comando help diretamente no prompt ou accessando a sub-opo Help browser do ca menu Help , como descrito anteriormente. Por exemplo, vamos usar o comando help na linha de comando do Scilab para obter informaes sobre a funo det, que calcula o determinante co ca de uma matriz. Temos, ento, a -->help

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

15

O comando help ativar o navegador de help com um menu contendo as fam a lias das funes co dispon veis, como foi visto na Figura 2.4 anterior. A funo que calcula o determinante de uma ca matriz pertence ` familia das funes de Algebra Linear, indicada por Linear Algebra na tela a co ca co da Figura 2.4. Escolhendo-se a funo det tem-se as informaes desejadas. Todo esse processo est resumido na tela apresentada na Figura 2.7. a

Figura 2.7: Tela de help para a funo det. ca O mesmo efeito conseguido digitando-se o comando e -->help det diretamente no prompt do Scilab, como podemos vericar na Figura 2.8

Figura 2.8: Comando help para a funo det. ca Outro exemplo, agora com uma funo pertencente ` fam de Funes Elementares, Eleca a lia co mentary Functions, serve para ilustrar a quantidade (e a qualidade) das informaes presentes co no help do Scilab. Escolhemos a funo modicada de Bessel de segunda ordem, K (x), impleca mentada no Scilab atravs da funo besselk, cujo texto de help reproduzimos na Figura 2.9. e ca

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a


Scilab Function besselk - Modified Bessel functions of the second kind (K sub alpha). Calling Sequence y = besselk(alpha,x) y = besselk(alpha,x,ice) Parameters x : real vector with non negative entries alpha : real vector with non negative entries regularly spaced with increment equal to one alpha=alpha0+(n1:n2) ice : integer flag, with default value 1 Description besselk(alpha,x) computes modified Bessel functions of the second kind (K sub alpha), for real, non-negative order alpha and argument x . alpha and x may be vectors. The output is m -by- n with m = size(x,*) , n = size(alpha,*) whose (i,j) entry is besselk(alpha(j),x(i)) .

16

K_alpha and I_alpha (see besseli ) modified Bessel functions are 2 independant solutions of the modified Bessel s differential equation : 2 2 2 x y" + x y - (x + alpha ) y = 0 , If ice

alpha >= 0

is equal to 2 exponentialy scaled Bessel functions is computed (K_alpha_scaled(x) = exp(x) K_alpha(x)).

Examples // example : display some K bessel functions x = linspace(0.01,10,5000); y = besselk(0:4,x); ys = besselk(0:4,x,2); xbasc() subplot(2,1,1) plot2d(x,y, style=2:6, leg="K0@K1@K2@K3@K4", rect=[0,0,6,10]) xtitle("Some modified bessel functions of the second kind") subplot(2,1,2) plot2d(x,ys, style=2:6, leg="K0s@K1s@K2s@K3s@K4s", rect=[0,0,6,10]) xtitle("Some modified scaled bessel functions of the second kind") See Also besselj Author W. J. Cody, L. Stoltz (code from Netlib (specfun)) , besseli , bessely ,

Figura 2.9: Texto do help para a funo besselk. ca Como podemos observar, no texto do help esto especicados: a O nome da funo, como implementado pelo Scilab; ca O(s) comando(s) de chamada da funo, Calling Sequence; ca Os parmetros da funo, Parameters; a ca Uma descrio da funo implementada, Description; ca ca Exemplos de utilizao da funo, Examples; ca ca Funes relacionadas, See Also, e neste caso, co Autor da funo, Author. ca

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

17

2.6

Arquivos com Comandos Scilab

Como vimos, o comando save pode ser utilizado para armazenar variveis em um arquivo a binrio. Essas variveis podem ser recuperadas atravs da utilizao do comando load. a a e ca Alm do armazenamento de variveis, Scilab permite que os comandos digitados em seu e a ambiente durante uma sesso sejam armazenados em um arquivo, construindo uma espcie a e de memria de clculos. O armazenamento dos comandos feito atravs da utilizao do o a e e ca comando diary(nome_do_arquivo). Na Figura 2.10 mostramos um exemplo da utilizao do comando diary para armazenar ca uma sesso de utilizao do ambiente Scilab. Neste exemplo, atravs do comando a ca e -->diary(memoria-09072004) instru mos o Scilab para armazenar todos os comandos subseqentes em um arquivo chamado u memoria-09072004. O armazenamento dos comandos ser realizado at que seja executado o a e comando --diary(0) O comando diary(0) fecha o arquivo memoria-09072004.

Figura 2.10: Comando diary para gravao de sesses desenvolvidas no ambiente Scilab. ca o O arquivo memoria-09072004 um arquivo texto puro, e paulo@none:~$ cat memoria-09072004 -->// Todos os comandos digitados serao armazenados no arquivo -->// memoria-09072004 -->a = 1; b = 2; c = 3; -->a + b ans =

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a 3. -->b * c ans = 6. -->diary(0) paulo@none:~$

18

podendo, portanto, ser editado. No Cap tulo sobre programao, veremos novos tipos de arquivos de comandos do Scilab. ca Neste Cap tulo, apresentamos as principais caracter sticas do ambiente Scilab. No prximo o Cap tulo, exploramos um pouco mais esse ambiente atravs da realizao de algumas operaes e ca co bsicas envolvendo grandezas reais e complexas e da utilizao de funes pr-denidas do a ca co e Scilab.

Cap tulo 3

Operaes Bsicas com Scilab co a


Scilab um ambiente para resoluo de problemas numricos. e ca e A interao do usurio com o Scilab pode ocorrer de duas formas distintas. Na primeira, os ca a comando so digitados diretamente no prompt do Scilab. Ao ser pressionada a tecla enter, os a comandos digitados so interpretados e imediatamente executados. Neste modo de utilizao, a ca Scilab funciona como uma sosticada e poderosa calculadora. Na segunda forma, um conjunto de comandos digitado em um arquivo texto. Este arquivo, em seguida, levado para o ambiente e e Scilab e executado. Neste modo, o Scilab funciona como um ambiente de programao. ca Neste Cap tulo, apresentamos algumas caracter sticas do ambiente grco do Scilab. Atravs a e de alguns exemplos de operaes que podem ser realizadas em linha de comando, mostramos o co Scilab funcionando como uma sosticada calculadora. Scilab como ambiente de programao apresentado no Cap ca e tulo 5.

3.1

Introduo ca

No Scilab, o ponto-e-v rgula no nal de um comando inibe a apresentao de seu resultado. ca Alguns exemplos, -->// O ponto-e-virgula suprime a apresentacao do resultado -->A = 1; -->b = 2; -->A + b ans = 3. --> Uma observao importante: Scilab case sensitive. Assim, por exemplo, a varivel incr ca e a e diferente das variveis INCR, Incr ou INcr. a As grandezas no Scilab tambm podem ser complexas. Para atribuir ` varivel A o valor e a a complexo 5 + 2i e ` varivel B o valor complexo 2 + i, fazemos a a -->A = 5 + 2 * %i A = // Atribuindo a A o valor 5 + 2i // a variavel A assume o valor 1 // atribuindo a variavel b o valor 2 // Adicao de A e b

19

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a 5. + 2.i -->B = -2 + %i B = - 2. + i --> // Atribuindo a B o valor -2 + i

20

Observar que a no utilizao do ponto-e-v a ca rgula no nal dos comandos de atribuio perca mitiu a apresentao do resultado de cada comando. ca As variveis complexas A e B podem ser multiplicadas, divididas, somadas ou subtra a das, como mostramos a seguir. --> // Operacoes com variaveis complexas -->A * B ans = - 12. + i -->A / B ans = - 1.6 - 1.8i -->A + B ans = 3. + 3.i -->A - B ans = 7. + i --> E importante observar que a resposta ao uso da funo interna sqrt() com argumento ca negativo inclui o nmero complexo i = sqrt(-1). Por exemplo, u -->sqrt(-2) ans = 1.4142136i --> E poss digitar vrios comandos em uma mesma linha, vel a -->m = 1.5; b = 35; c = 24; --> // Varios comandos em uma unica linha // Funcao raiz quadrada com argumento negativo // Subtracao // Adicao // Divisao // Multiplicacao

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

21

Tambm poss e e vel desdobrar um unico comando em vrias linhas utilizando ... ao nal a do comando. Por exemplo, -->A = 3 * m ^ 2 + ... --> 4 * 5 + ... --> 5 * 3 A = 41.75 --> Um vetor de ndices possui a forma geral Variavel = valor_inicial:incremento:valor_final Por exemplo, atravs do comando I=1:3 atribu e mos os valores 1, 2, e 3 ` varivel I. a a Quando no especicado, incremento igual a 1. Assim, a e -->I = 1:3 I = ! 1. 2. 3. ! // Indice j com incremento igual a 2 // Definindo I como um vetor com 3 posicoes // Um comando em varias linhas

-->j = 1:2:5 j = ! --> 1. 3. 5. !

O valor do incremento pode ser negativo, -->k = 5:-1:1 k = ! --> No Scilab existe o conceito de ambientes denidos via uma hierarquia de prompts. Muda-se de ambiente atravs do comando pause ou atravs de Ctrl-c. Todas as variveis denidas e e a no primeiro ambiente so vlidas no novo ambiente. Observar que a mudana de ambiente a a c modica a forma de apresentao do prompt. Este passa a indicar o ambiente no qual esto ca a sendo efetuados os comandos. O retorno ao ambiente anterior d-se atravs da utilizao dos a e ca comandos resume ou return. Com este tipo de retorno, perde-se as variveis denidas no a ambiente anterior. A utilizao de ambientes importante para a realizao de testes. ca e ca No exemplo a seguir, atribu mos a a o valor 1.5 e, atravs do comando pause, mudamos de e ambiente. -->// Definindo a e mudando de ambiente -->a = 1.5; pause -1-> // Mudanca no prompt 5. 4. 3. 2. // Definindo k como um vetor com 5 posicoes

1. !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

22

Observar que houve uma mudana no formato do prompt. A varivel a, denida no ambiente c a anterior, ainda vlida no novo ambiente, como podemos vericar atravs da seqncia de e a e ue comandos, -1->a a = 1.5 -1-> Vamos denir, no novo ambiente, a varivel b igual a 2.5, a -1->// Definindo b no novo ambiente -1->b = 2.5; -1->// Mostrando a e b no novo ambiente -1->a, b a = 1.5 = 2.5 -1-> O retorno ao ambiente anterior usando o comando resume faz com que a varivel b que a indenida, // Retornando ao ambiente anterior -1->resume // Pode ser usado o comando return

--> // Mostrando a e b. Observar que a variavel b foi perdida -->a, b a = 1.5 !--error 4 undefined variable : b O valor da varivel b pode ser preservado no ambiente original atravs da seqncia de a e ue comandos, -->a = 1.5 a = 1.5 // Definindo a variavel a no ambiente original

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->pause -1->b = 1.5 b = 1.5 -1->b = resume(b) // Enviando b para o ambiente original -->a, b a = 1.5 = 1.5 --> // Mudando de ambiente // Definindo a variavel b no novo ambiente

23

3.2

Utilizando as Funes Internas do Scilab co

O Scilab carregado com algumas funes pr-denidas1 . Como vimos no Cap e co e tulo anterior, e na Figura 2.9, o help do Scilab explica cada uma delas e, tambm, apresenta exemplos de sua utilizao. ca Uma maneira de vericar a forma de utilizao e o comportamento de uma determinada ca funo interna do Scilab usando o exemplo que o prprio help do Scilab apresenta. Neste ca e o caso, basta copiar o exemplo de uso da funo apresentado no help para o ambiente do Scilab2 . ca Na Figure 3.1, mostramos como esse procedimento funciona usando a funo fft do toolbox de ca Processamento de Sinais, Signal Processing toolbox, que acompanha o Scilab.

Figura 3.1: Rodando o exemplo de utilizao da funo fft apresentado no help do Scilab. ca ca
1 2

Ver Apndice D para a listagem dessas funes. e co Especicamente, o processo consiste em copiar do ambiente help e colar no ambiente Scilab.

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

24

Os exemplos apresentados no help tambm podem ser executados atravs de uma facilidade e e implementada no editor SciPad, incorporado ao Scilab. Neste caso, o exemplo deve ser copiado do ambiente help e colado no ambiente do Editor. Depois, no Editor, o exemplo deve ser selecionado, atravs do mouse, para ser executado usando a sub-opo Evaluate Selection Ctrl+y e ca da opo Execute apresentada no menu do Editor. Esses procedimentos, e seus resultados, ca com os exemplos fornecidos pelo help para a funo besselk, apresentados na Figura 2.9, so ca a mostrados na Figura 3.2.

Figura 3.2: A funo K de Bessel, besselk. O exemplo apresentado no help da funo copiado ca ca e para o editor SciPad, selecionado e executado atravs da sub-opo Evaluate Selection Ctrl+y e ca da opo Execute . ca O usurio interessado convidado a repetir os procedimentos apresentados nessa sesso a e a utilizando outras funes do Scilab. co Neste Cap tulo, apresentamos algumas operaes bsicas envolvendo grandezas reais e comco a plexas e exemplos de utilizao de funes pr-denidas no Scilab. No Cap ca co e tulo 4, mostramos os outros tipos de dados que podem ser manipulados pelo Scilab.

Cap tulo 4

Polinmios, Vetores, Matrizes e o Listas


No Scilab, podemos trabalhar com vrios tipos de dados. As constantes, reais ou complexas, a as variveis booleanas, os polinmios, as strings e as fraes envolvendo polinmios so consia o co o a derados dados escalares. Com estes objetos podemos denir vetores e matrizes. Os outros tipos de dados reconhecidos pelo Scilab so as listas e as listas com denio de tipo. O objetivo a ca deste Cap tulo apresentar alguns exemplos de utilizao de cada um desses tipos de dados. e ca

4.1

Polinmios o

Os polinmios so criados no Scilab atravs da utilizao da funo poly. Salientamos que o a e ca ca polinmios de mesma varivel podem ser somados, subtra o a dos, multiplicados e divididos entre si. Por exemplo, o polinmio p = s2 3s + 2, que possui ra o zes 1 e 2, pode ser criado atravs e do comando, -->// Polinomio definido pelas suas raizes -->p = poly([1 2], s) p = 2 2 - 3s + s --> Com a funo roots, comprovamos que as ra ca zes de p so, realmente, 1 e 2, a -->roots(p) ans = ! ! --> Um polinmio tambm pode ser criado a partir da especicao de seus coecientes. Por o e ca exemplo, o polinmio q = 2s + 1 criado atravs do comando, o e e -->// Polinomio definido pelos seus coeficientes 1. ! 2. !

25

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->q = poly([1 2], s, coeff) q = 1 + 2s -->roots(q) ans = - 0.5 --> // Obtendo as raizes do polinomio q

26

Para complementar o exemplo, os dois polinmios podem ser multiplicados, divididos, soo mandos ou subtra dos como mostra a seqncia de comandos, ue -->p * q ans = 2 3 2 + s - 5s + 2s -->p / q ans = 2 2 - 3s + s ---------1 + 2s -->[r, q] = pdiv(p,q) q = - 1.75 + 0.5s r = 3.75 -->p + q ans = 2 3 - s + s -->p - q ans = 2 1 - 5s + s --> Para obter valores de polinmios, usamos a funo horner, o ca // Subtracao // Adicao // Efetuando a divisao: q=quociente, r=resto // Divisao // Multiplicacao

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->x = poly(0, x) x = x -->p = x^2 - 3*x + 5 p = 2 5 - 3x + x -->horner(p, 2) ans = 3. --> // avaliando o polinomio em x = 2 // definindo o polinomio

27

4.2

Vetores

Vamos considerar o conjunto dos nmeros reais1 . Dizemos que x um vetor de dimenso u e a n em , indicado por x n , se, e somente se, x1 x2 x= . . .

xn Nessa denio, cada um dos elementos do vetor x, xi , pertence a ca xi

R,

O elemento xi o i-simo elemento do vetor x. e e O vetor x denido anteriormente um vetor coluna. Para explicitar esta condio, escrevee ca mos x n1

Essa notao indica que o vetor x possui n linhas e apenas uma coluna. ca No Scilab, os vetores so criados colocando-se seus componentes entre colchetes, [ ]. Os a elementos de um vetor coluna so separados por ponto-e-v a rgula. Assim, -->x = [ 1; 2; 3] x = ! ! ! --> 1. ! 2. ! 3. ! // vetor coluna. Elementos separados por ;

C.

Todas as consideraes sobre vetores e matrizes podem ser estendidas para o conjunto dos nmeros complexos, co u

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a Um vetor linha, y, de dimenso n em a

28

R pode ser escrito na forma

y = y1 , y 2 , . . . , y n Para explicitar a condio de vetor linha, escrevemos ca y

R1n

Essa notao indica que o vetor y possui apenas uma linha e n colunas. ca No Scilab, os componentes de um vetor linha so separados por espao ou por v a c rgula. -->y = [ 1 2 3] y = ! 1. 2. 3. ! // vetor linha; Elementos separados por virgula // vetor linha; Elementos separados por espaco

-->z = [ 4, 5, 6] z = ! --> 4. 5. 6. !

Se x um vetor coluna, xT (l-se x transposto) um vetor linha. Essa operao realizada e e e ca e no Scilab atravs da utilizao do s e ca mbolo (apstrofo). o -->x = [1; 2; 3] x = ! ! ! 1. ! 2. ! 3. ! // x transposto = vetor linha // vetor coluna

-->x ans = ! --> 1. 2. 3. !

Vetores podem ser multiplicados ou divididos por quantidades escalares. Tambm, vetoe res de mesma dimenso podem ser somados ou subtra a dos. Para exemplicar algumas dessas operaes, vamos considerar os vetores: co 1 4 x = 2 e y = 5 3 6 Observar que os dois vetores possuem a mesma dimenso, isto , x, y a e -->x = [ 1; 2; 3] x = ! 1. ! // Definindo o vetor x

R31. Temos,

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a ! ! 2. ! 3. ! // Definindo o vetor y

29

-->y = [ 4; 5; 6] y = ! ! ! 4. ! 5. ! 6. !

-->size(x) ans = ! 3. 1. !

// Dimensao do vetor x

-->size(y) ans = ! --> -->3 * x ans = ! ! ! 3. ! 6. ! 9. ! 3. 1. !

// Dimensao do vetor y

// Multiplicando o vetor x por uma constante

-->x / 2 ans = ! ! ! 0.5 ! 1. ! 1.5 !

// Dividindo o vetor x por uma constante

-->x + y ans = ! ! ! --> 5. ! 7. ! 9. !

// Somando os dois vetores

Dados dois vetores de mesma dimenso, x, y a interno entre x e y atravs da expresso vetorial, e a

Rn1, dene-se o produto escalar ou produto

z = xT y Assim, considerando os vetores x e y denidos anteriormente, temos: -->z = x * y z = // Atribuindo a z o produto escalar entre x e y

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

30

32. --> Observar que essa operao, em uma linguagem convencional, teria que ser realizada atravs ca e de uma rotina que implementasse a operao (escalar): ca
n

z=
i=1

xi yi

Se os vetores x e y possuem dimenses diferentes, isto , x m1 e y o e denir o produto vetorial ou produto externo entre eles atravs da expresso, e a C = xyT Vamos considerar 1 2 x= 3 4 5

Rn1, podemos

y=

Observar que os dois vetores possuem dimenses diferentes, isto , x o e Temos, -->x = [1; 2; 3] x = ! ! ! 1. ! 2. ! 3. ! // Definindo o vetor y // Definindo o vetor x

R31 e y R21.

-->y = [4; 5] y = ! ! 4. ! 5. !

-->size(x) ans = ! 3. 1. !

// Dimensao do vetor x

-->size(y) ans = ! 2. 1. !

// Dimensao do vetor y

-->size(y) ans = ! 1. 2. !

// Dimensao do vetor y transposto

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->C = x * y C = ! ! ! --> 4. 8. 12. 5. ! 10. ! 15. ! // Produto vetorial de x por y

31

Nos exemplos a seguir, mostramos outras maneiras de construir vetores, usando ndices e algumas funes internas do Scilab: co -->v = 5: -0.5: 3 v ! = 5. 4.5 4. 3.5 3. ! // Vetor constituido de elementos iguais a 1 // Vetor com elementos decrementados

-->m = ones(1:4) m = ! 1. 1. 1. 1. !

-->z = zeros(1:5) z = ! --> 0. 0. 0. 0.

// Vetor constituido de elementos iguais a 0

0. !

4.3

Matrizes

Seja o conjunto dos nmeros reais. Dizemos u mn , se, e somente se, , indicado por A a1,1 a1,2 a2,1 a2,2 A= . . . . . .

que A uma matriz de dimenso m n em e a a1,n a2,n . . . am,n

.. .

onde cada um dos elementos ai,j . Nessa notao, a varivel m indica o nmero de linhas e ca a u a varivel n indica o nmero de colunas da matriz A. Se A for uma matriz quadrada, o nmero a u u de linhas igual ao nmero de colunas e, ento, m = n. e u a Vamos considerar as matrizes A, B 23 ,

am,1 am,2

A=

1 2 3 5 8 9

B=

1 2 3 4 5 6

No Scilab, as matrizes so representadas entre colchetes, [ ]. Os elementos que constituem a as linhas das matrizes so separados por espaos ou por v a c rgulas. A indicao de trmino de ca e cada linha da matriz feita com ponto-e-v e rgula. Nos exemplos a seguir, para xar conceitos, a matriz A digitada com os elementos de suas e linhas separados por espaos enquanto a matriz B digitada com os elementos de suas linhas c e separados por v rgula. Assim,

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->// Matriz A - Elementos das linhas separados por espaco -->A = [1 2 3; 5 -8 9] A = ! ! 1. 5. 2. - 8. 3. ! 9. !

32

-->// Matriz B - Elementos das linhas separados por virgulas -->B = [1, 2, 3; 4, 5, 6] B = ! ! 1. 4. 2. 5. 3. ! 6. ! // Dimensao da matriz A

-->size(A) ans = ! 2. 3. !

-->size(B) ans = ! --> 2. 3. !

// Dimensao da matriz B

Uma outra forma de digitar matrizes no ambiente Scilab, separando os elementos de uma e linha por espao (ou por v c rgula) e as linhas separadas por enter, -->M = [ 1 2 3 4 -->5 6 7 8 -->9 11 13 15] M = ! ! ! --> Matrizes podem ser multiplicadas ou divididas por quantidades escalares. Tambm, matrizes e de mesma dimenso podem ser somadas ou subtra a das. Considerando as matrizes A e B do exemplo anterior, temos: -->2 * A ans = ! ! 2. 10. 4. - 16. // Multiplicacao por um escalar 1. 5. 9. 2. 6. 11. 3. 7. 13. 4. ! 8. ! 15. !

6. ! 18. !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->A / 2 ans = ! ! 0.5 2.5 1. - 4. // Divisao da matriz A por uma constante

33

1.5 ! 4.5 ! // Somando as duas matrizes

-->A + B ans = ! ! --> 2. 9. 4. - 3.

6. ! 15. !

Se A mn , a transposta da matriz A, indicada por AT , tal que AT e caso dos vetores, a trasposio indicada pelo s ca e mbolo (apstrofo). o Considerando a matriz B do exemplo anterior, temos: -->B = [1, 2, 3; 4, 5, 6] B = ! ! 1. 4. 2. 5. 3. ! 6. ! // Dimensao da matriz B

Rnm. Como no

-->size(B) ans = ! 2. 3. !

-->C = B C = ! ! ! 1. 2. 3. 4. ! 5. ! 6. !

// C = transposta da matriz B

-->size(C) ans = ! --> Se A 3. 2. !

// Dimensao da matriz C

Rmp e B Rpn, podemos denir o produto das matrizes A e B, C = A B Rmn

Observar que, para que possa haver a multiplicao entre duas matrizes, necessrio que o ca e a nmero de colunas da primeira matriz seja igual ao nmero de linhas da segunda matriz. u u Considerando as matrizes A e B, 1 2 3 1 4 A = 4 5 6 e B = 2 5 7 8 9 3 6

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a temos: -->A = [ 1 2 3; 4 5 6; 7 8 9] A = ! ! ! 1. 4. 7. 2. 5. 8. 3. ! 6. ! 9. !

34

-->B = [ 1 4; 2 5; 3 6] B = ! ! ! 1. 2. 3. 4. ! 5. ! 6. !

-->size(A) ans = ! 3. 3. !

-->size(B) ans = ! 3. 2. !

-->A * B ans = ! ! ! --> Podemos usar funes internas do Scilab para gerar matrizes. Por exemplo, usamos a funo co ca ones para criar a matriz D 23 , com todos os elementos iguais a 1, 14. 32. 50. 32. ! 77. ! 122.

-->D = ones(2,3) D = ! ! --> ou a funo zeros para criar a matriz E ca -->E = zeros(3,3) E = ! 0. 0. 0. ! 1. 1. 1. 1. 1. ! 1. !

R33, com todos os elementos iguais a 0,

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a ! ! --> ou, ainda, a criao de uma matriz identidade, I atravs da funo interna eye, ca e ca -->I = eye(4,4) I = ! ! ! ! --> Podemos criar matrizes a partir de elementos de outras matrizes, -->// Definido as matrizes A, B e C -->A = [1 2; 3 4]; -->B = [5 6; 7 8]; -->C = [9 10; 11 12]; -->// Definindo a matriz D -->D = [A B C] D = ! ! 1. 3. 2. 4. 5. 7. 6. 8. 9. 11. 10. ! 12. ! 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. ! ! ! ! 0. 0. 0. 0. 0. ! 0. !

35

-->// Definindo uma matriz E a partir dos elementos de D -->E = matrix(D,3,4) E = ! ! ! --> Observar que a matriz E, com trs linhas e quatro colunas, criada usando a funo matrix. e e ca Esta funo gera a matriz E a partir da organizao dos elementos da matriz D por colunas. ca ca 1. 3. 2. 4. 5. 7. 6. 8. 9. 11. ! 10. ! 12. !

4.4

Acesso a Elementos de Vetores e de Matrizes

O acesso a elementos de um vetor ou de uma matriz pode ser realizado de diversas maneiras. Dentre elas, podemos citar:

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a a utilizao expl ca cita dos ndices do elemento a ser acessado, a utilizao do s ca mbolo : (dois pontos) a utilizao do s ca mbolo $ ou a utilizao de operaes booleanas. ca co

36

Vamos considerar o vetor linha v = [1 2 3 4 5 6 7]. O acesso a um elemento deste vetor feito de forma convencional, o e ndice do vetor indicando qual elemento que est sendo acessado. a Assim, -->v = [1 2 3 4 5 6 7] v = ! 1. 2. 3. 4. // definicao do vetor v

5.

6.

7. !

-->v(1) ans = 1. -->v(5) ans = 5. -->

// acesso ao primeiro elemento de v

// acesso ao quinto elemento de v

O s mbolo : permite denir formas compactas de acesso a elementos de um vetor. Por exemplo, -->v(2:4) ans = ! 2. 3. 4. ! // acesso a todos os elementos de v // acesso aos elementos 2, 3 e 4 de v

-->v(:) ans = ! ! ! ! ! ! ! 1. 2. 3. 4. 5. 6. 7. ! ! ! ! ! ! !

-->v(1:2:7) ans = ! --> 1. 3.

// acesso aos elementos inpares de v

5.

7. !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a enquanto o s mbolo $ permite acessar o ultimo elemento do vetor, -->v($) ans = 7. --> // acesso ao ultimo elemento de v

37

Tambm, podemos utilizar operaes booleanas para acessar elementos de um vetor. Na e co sesso, a -->v([%f %t %f %t %t]) ans = ! --> acessamos o segundo, quarto e quinto elemento do vetor v. Lembrar que %t signica true, verdadeiro, e que %f signica false, falso. Para exemplicar acessos a elementos de matrizes, vamos considerar a matriz A com duas linhas e trs colunas, A 2x3 , e 2. 4. 5. ! // acesso usando %t e %f

-->// Definindo uma matriz A -->A = [1 2 3; 4 5 6] A = ! ! --> O acesso a um elemento dessa matriz feito da maneira convencional: o elemento da linha i e e coluna j, ai,j , acessado atravs do comando A(i,j), com i e j tendo seus valores numricos e e e explicitados. Por exemplo, para acessar o elemento a1,2 da matriz A, usamos o comando A(1,2), -->// Acessando o elemento da primeira linha e segunda coluna de A -->A(1,2) ans = 2. --> O comando M = A([1 2], 2), permite construir uma matriz, M, composta pelo primeiro e segundo elementos, indicados pelo vetor [1 2], da segunda coluna da matriz A, -->M = A([1 2], 2) M = 1. 4. 2. 5. 3. ! 6. !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a ! ! --> 2. ! 5. !

38

Atravs do operador : Scilab implementa formas compactas que permitem acessar elementos e de uma matriz. Considerando A mn , a notao A(k, :) representa a k-sima linha da matriz ca e A, A(k, :) = [ak,1 , ak,2 , . . . , ak,n ]

e a notao A(:, k) representa a k-sima coluna da matriz A, ca e A(:, k) = [a1,k , a2,k , . . . , am,k ] Nesse contexto, e para facilitar a compreenso, o s a mbolo : (dois pontos) assume o signicado de todos os elementos. Assim, A(k, :) pode ser lido como todos os elementos da k-sima linha e da matriz A e A(:, k) pode ser lido como todos os elementos da k-sima coluna da matriz A. e Considerando a matriz A do exemplo anterior, o comando A(:,3), permite acessar todos os elementos da terceira coluna da matriz A, ->// Todos os elementos da terceira coluna da matriz A -->A(:, 3) ans = ! ! --> enquanto o comando A(2,:) permite acessar todos os elementos da segunda linha da matriz A, ->// Todos os elementos da segunda linha da matriz A -->A(2,:) ans = ! --> O comando A(:, 3:-1:1) permite formar uma matriz constitu por todos os elementos da das colunas trs, dois e um da matriz A. Lembrar que 3:-1:2 idntico ao vetor [3 2 1]. e e e -->// Todos os elementos da terceira, segunda e primeira colunas de A -->A(:, 3:-1:1) ans = ! ! 3. 6. 2. 5. 1. ! 4. ! // Forma equivalente 4. 5. 6. ! 3. ! 6. !

-->A(:, [3 2 1]) ans =

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

39

! ! -->

3. 6.

2. 5.

1. ! 4. !

Vamos considerar a utilizao do s ca mbolo $ para acessar elementos da matriz A. Neste contexto, o s mbolo $ signica nmero total de. Usando o comando A(1:2, $-1), acessamos o u primeiro e o segundo elementos, indicados por 1:2, da segunda coluna, indicado por $-1, da matriz A. Lembrar que a matriz A possui duas linhas e trs colunas. Com o comando, A($:e 1:1, 2), estamos acessando o segundo e o primeiro, nessa ordem, elementos da segunda coluna da matriz A. Escrever $:-1:1 equivalente, neste caso, a escrever 2:-1:1 j que a matriz A e a possui duas linhas. -->// Primeiro e segundo elementos da segunda coluna de A -->A(1:2, $-1) ans = ! ! 2. ! 5. !

-->// Segundo e primeiro elementos da segunda coluna de A -->A($:-1:1, 2) ans = ! ! 5. ! 2. !

-->// Acesso ao ultimo elemento de A -->A($) ans = 6. --> Os elementos de uma matriz so armazenados por coluna. Da usando o comando A($) a , na sesso anterior, acessamos o ultimo elemento de A. Assim, o primeiro elemento da matriz A a pode ser acessado atravs do comando A(1) e o quinto elemento da matriz A pode ser acessado e atravs do comando A(5), e -->// Primeiro -->A(1) ans = 1. -->// Quinto elemento de A elemento de A

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

40

-->A(5) ans = 3. -->// Todos os elementos armazenados por coluna -->A(:) ans = ! ! ! ! ! ! 1. 4. 2. 5. 3. 6. ! ! ! ! ! !

--> // Mesmo efeito do comando anterior -->A([1 2 3 4 5 6]) ans = ! ! ! ! ! ! --> Podemos usar variveis booleanas para acessar elementos de uma matriz. Com o comando a A([%t %f %f %t]), acessamos o primeiro e o quarto elementos da matriz A, indicados por %t, no querendo o segundo e terceiro elementos, indicados por %f. a -->// Acesso ao primeiro e quarto elementos -->A([%t %f %f %t]) ans = ! ! --> Com o comando A(%t, [2 3]), acessamos os primeiros elementos das segunda e terceira colunas. -->// Acessando os primeiros elementos da colunas 2 e 3 --> A(%t, [2 3]) 1. ! 5. ! 1. 4. 2. 5. 3. 6. ! ! ! ! ! !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a ans ! --> = 3. !

41

2.

E poss vel, caso seja necessrio, alterar os valores de elementos de uma matriz. Considerando a a matriz A, podemos mudar o valor do seu elemento A(2,1) atravs do comando de atribuio e ca A(1,2) = 10, -->// Atribuir a A(1,2) o valor 10 -->A(1,2) = 10 A = ! ! --> Depois, atribu mos os valores [-1; -2] aos primeiro e segundo elementos da segunda coluna da matriz A, -->// A(1,2) = -1 e A(2,2) = -2 -->A([1 2], 2) = [-1; -2] A = ! ! --> Finalmente, modicamos os elementos A(1,1) e A(1,2) da matriz A. -->// A(1,1) = 8 e A(1,2) = 5 -->A(:,1) = [8;5] A = ! ! --> 8. 5. - 1. - 2. 3. ! 6. ! 1. 4. - 1. - 2. 3. ! 6. ! 1. 4. 10. 5. 3. ! 6. !

4.5

Matrizes com Polinmios o

Os elementos de uma matriz podem ser polinmios, o -->// Definindo um polinomio -->x = poly(0, x); p = 2 + 3 * x + x ^ 2

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a p = 2 2 + 3x + x -->// Definindo uma matriz polinomial, M -->M = [p, p-1; p+1, 2] M = ! ! ! ! ! 2 2 + 3x + x 2 3 + 3x + x 2 ! 1 + 3x + x ! ! ! 2 !

42

-->// Avaliando a matriz M em x = 2 -->horner(M, 2) ans = ! ! 12. 13. 11. ! 2. !

-->// Obtendo a inversa de M -->inv(M) ans = ! ! ! ! ! ! ! ! ! ! ! 2 - 1 - 3x - x -------------------2 3 4 1 - 6x - 11x - 6x - x ! ! ! ! ! ! 2 ! 2 + 3x + x ! -------------------! 2 3 4 ! 1 - 6x - 11x - 6x - x !

2 --------------------2 3 4 1 - 6x - 11x - 6x - x 2 - 3 - 3x - x -------------------2 3 4 1 - 6x - 11x - 6x - x

-->// Obtendo o determinante de M -->det(M) ans = 2 3 4 1 - 6x - 11x - 6x - x -->

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a A partir de uma matriz formada por elementos que so polinmios racionais, a o -->// Definindo uma matriz F de polinomios racionais -->s = poly(0, s); -->F = [ 1/s, (s +1)/(s + 2); ... --> s/(s+3), s^2 ] F = ! ! ! ! ! ! ! ! --> podemos criar outra matriz apenas com o numerador das fraes, co -->F(num) ans = ! ! ! ! --> ou com seus denominadores, -->F(den) ans = ! ! ! --> s 3 + s // Pegando os denominadores 1 // Pegando os numeradores 1 s 1 + s ----2 + s 2 s 1 ! ! ! ! ! ! ! !

43

s ----3 + s

1 + s 2 s

! ! ! !

2 + s 1

! ! !

4.6

Matrizes Simblicas o

O Scilab permite a criao e manipulao de matrizes simblicas. Vamos considerar uma ca ca o 12 , constitu matriz B da por elementos simblicos, o

-->// Matriz simbolica -->B = [ 1/%s, (%s + 1)/(%s - 1)]

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a B ! ! ! --> = 1 s 1 + s ----- 1 + s ! ! !

44

Os elementos de uma matriz simblica so acessados utilizando os mesmos comandos para o a acessar elementos de uma matriz numrica. Nos dois comandos seguintes, apresentamos exeme plos de acesso aos elementos da matriz B, -->// Acessos a elementos da matriz B -->B(1,1) ans = 1 s -->B(1, $) ans = 1 + s ----- 1 + s --> Podemos, tambm, atribuir valores simblicos a elementos de uma matriz, Considerando a e o matriz A = [1 -1 3; 5 -2 6], temos, -->A(1,1) = %s A = ! ! ! s 5 - 1 - 2 3 6 ! ! ! // Atribuindo s + 1 ao ultimo elemento de A // Atribuicao do valor simbolico s ao elemento A(1,1)

-->A($) = %s + 1 A = ! ! ! --> s 5 - 1 - 2 3

1 + s

! ! !

As matrizes simblicas tambm podem ser constitu o e das por elementos compostos por strings de caracteres. Elas so criadas da mesma maneira que as matrizes com elementos numricos. a e As strings so escritas entre apstrofos ou entre aspas. a o

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->// Matriz de strings -->A = [x A = !x ! !z y w+v ! ! ! y; z w+v]

45

-->// Atribuindo valores -->x=1;y=2;z=3;w=4;v=5; // Obtendo o valor numerico dos elementos de A -->evstr(A) ans = ! ! --> 1. 3. 2. ! 9. !

4.7

Matrizes Booleanas

Matrizes booleanas so matrizes constru a das com as constantes %t (t true, verdadeiro) e e %f (f false, falso). Alguns exemplos de construo matrizes booleanas, e ca -->// Matriz booleana A -->A = [%t, %f, %t, %f, %f, %f] A = ! T F T F F F ! -->// Matriz booleana B -->B = [%t, %f, %t, %f, %t, %t] B = ! T F T F T T ! --> Podemos realizar operaes lgicas com as matrizes denidas anteriormente, co o -->// A ou B -->A|B ans = ! T F T F T T !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

46

-->// A e B -->A & B ans = ! T F T F F F ! -->

4.8

Operaes com Vetores e Matrizes co

A Tabela 4.1, apresenta a sintaxe de alguns dos operadores dispon veis no ambiente Scilab que podem ser utilizados em operaes com vetores ou com matrizes. co S IMBOLO + * / \ ^ .* .\ ./ .^ .*. OPERACAO transposta adio ca subtrao ca multiplicao ca diviso ` direita a a diviso ` esquerda a a exponenciao ca multiplicao elemento-a-elemento ca diviso, ` esquerda, elemento-a-elemento a a diviso, ` direita, elemento-a-elemento a a exponenciao elemento-a-elemento ca produto de Konecker

Tabela 4.1: Sintaxe de alguns operadores usados em operaes vetoriais ou matriciais. co As operaes envolvendo os operadores , +, -, * e / j foram apresentadas em pargrafos co a a anteriores. Os outros operadores mostrados na Tabela 4.1 sero apresentados nessa Seo. a ca Vamos analisar a utilizao do operador \. Para isso, denimos um sistema de equaes ca co lineares, a1,1 x1 + a1,2 x2 + + a1,n xn = b1 a2,1 x1 + a2,2 x2 + + a2,n xn = b2 ................................... an,1 x1 + an,2 x2 + + an,n xn = bn que pode ser escrito na forma matricial Ax = b onde a1,1 a2,1 A= . . . a1,2 a2,2 . . . .. . a1,n a2,n . . . an,n

an,1 an,2

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a com x1 x2 x= . . . xn b1 b2 b=. . . bn

47

Nas expresses anteriores, A nn a matriz dos coecientes, x n1 o vetor das o e e incgnitas e b n1 o vetor de termos independentes. o e Resolver um sistema linear obter o valor do vetor x. Na situao mais simples, a matriz e ca A no-singular (admite inversa) e a soluo, unica, dada pela expresso e a ca e a

x = A1 b onde A1 a inversa da matriz A. A expresso anterior pode ser representada no Scilab como e a --> x = inv(A) * b onde inv, com vimos em exemplo anterior, uma funo interna do Scilab que calcula a inversa e ca de uma matriz. Para exemplicar, vamos considerar um sistema linear com A= Temos, --> // Solucao de Ax = b usando a funcao inv -->A = [2 0; 0 4] A = ! ! 2. 0. 0. ! 4. ! // A admite inversa // Matriz A 2 0 0 4 e b= 1 8

-->inv(A) ans = ! ! 0.5 0. 0. ! 0.25 !

-->b = [1; 8] b = ! ! 1. ! 8. !

// Vetor b

-->x = inv(A) * b x = ! ! --> 0.5 ! 2. !

// Solucao do sistema linear

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a O mesmo resultado pode ser encontrado utilizando-se o operador \. Temos, ento, a --> Resolucao de Ax = b usando o operador \ -->x = A \ b x = ! ! --> 0.5 ! 2. !

48

E importante observar que o s mbolo \ no dene uma diviso matricial. Indica, apenas, a a uma outra forma de se obter a soluo de um sistema linear. ca O operador . (ponto), como pode ser visto na Tabela 4.1, utilizado com outros operadores e (*, \, /, ^) para realizar operaes elemento a elemento de vetores ou de matrizes. A sesso co a do Scilab a seguir mostra exemplos dessas operaes utilizando vetores. co --> Definicao do vetor x -->x = [1 3 4 6] x = ! 1. 3. 4. 6. !

--> Definicao do vetor y -->y = [2 4 6 8] y = ! 2. 4. 6. 8. !

-->x .* y ans = ! 2. 12. 24. 48. !

-->x * y !--error 10 inconsistent multiplication

--> A operao .* gera um vetor formado pelo produto dos elementos dos vetores x e y. Apenas ca para xar conceitos, vericamos que a operao x * y no pode ser realizada. ca a Continuando com os exemplos, usamos os operadores ./ para dividir os elementos do vetor x pelos elementos do vetor y, -->x ./ y ans =

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

49

! -->

0.5

0.75

0.6666667

0.75 !

e o operador .\ para dividir os elementos do vetor y pelos elementos do vetor x, -->x .\ y ans = ! --> 2. 1.3333333 1.5 1.3333333 !

Essa operao equivalente ` operao ca e a ca -->y ./ x ans = ! --> 2. 1.3333333 1.5 1.3333333 !

A utilizao do operador .^ mostrada nos exemplos apresentados em seguida, ca e -->x .^ y ans = ! 1. 81. 4096. 1679616. !

-->y .^ x ans = ! --> Vamos vericar tambm a utilizao do operador . (ponto) em conjuno com os operadores e ca ca (*, \, /, ^) quando se trata de matrizes. Para isso, vamos considerar a matriz quadrada A 33 , 1 2 3 A = 4 5 6 7 8 9 2. 64. 1296. 262144. !

A sesso do Scilab a seguir mostra exemplos dessas operaes utilizando matrizes. a co -->// Definindo a matriz A -->A = [ 1 2 3; 4 5 6; 7 8 9] A =

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a ! ! ! 1. 4. 7. 2. 5. 8. 3. ! 6. ! 9. !

50

-->A .* A ans = ! ! ! 1. 16. 49. 4. 25. 64. 9. ! 36. ! 81. !

-->A ^ 2 ans = ! ! ! 30. 66. 102. 36. 81. 126. 42. ! 96. ! 150. !

-->A * A ans = ! ! ! --> 30. 66. 102. 36. 81. 126. 42. ! 96. ! 150. !

Aps denir a matriz A no ambiente Scilab, foi feito o produto A .* A. O resultado uma o e matriz com elementos iguais ao produto de cada elemento da matriz A pelo seu correspondente. Observar que o resultado obtido pela operao .* completamenbte diferente do resultado ca e obtido fazendo-se A ^2. Este ultimo resultado idntico ao resultado obtido fazendo-se A * A. e e Continuando com os exemplos, a operao A ./ A, ca -->A ./ A ans = ! ! ! --> 1. 1. 1. 1. 1. 1. 1. ! 1. ! 1. !

apresenta uma matriz com todos os elementos iguais a 1, como era de se esperar, j que os a elementos da matriz gerada so obtidos dividindo-se cada um dos elementos da matriz A pelos a seu correspondente. Para xar conceitos, vamos considerar a matriz quadrada B 33 , 2 2 2 B = 2 2 2 2 2 2

Temos,

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->// Definicao da matriz B -->B = [ 2 2 2; 2 2 2; 2 2 2] B = ! ! ! 2. 2. 2. 2. 2. 2. 2. ! 2. ! 2. !

51

-->A ./ B ans = ! ! ! --> 0.5 2. 3.5 1. 2.5 4. 1.5 ! 3. ! 4.5 !

como era de se esperar. Continuando com os exemplos, temos -->A .^ B ans = ! ! ! --> 1. 16. 49. 4. 25. 64. 9. ! 36. ! 81. !

onde cada elemento da matriz A foi elevado ao elemento correspondente na matriz B, que equivale, no caso a -->A .^ 2 ans = ! ! ! --> 1. 16. 49. 4. 25. 64. 9. ! 36. ! 81. !

Temos, ainda, a operao ca -->A .\ B ans = ! ! ! 2. 0.5 0.2857143 1. 0.4 0.25 0.6666667 ! 0.3333333 ! 0.2222222 !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

52

-->

que equivale ` operao a ca -->B ./ A ans = ! ! ! --> O produto de Kronecker entre duas matrizes, A mn e B pq , a1,1 a1,2 a1,n b1,1 b1,2 a2,1 a2,2 a2,n b2,1 b2,2 A= . e B= . . . . .. .. . . . . . . . . . . . . am,1 am,2 am,n bp,1 bp,2 representado por A B e 2. 0.5 0.2857143 1. 0.4 0.25 0.6666667 ! 0.3333333 ! 0.2222222 !

b1,q b2,q . . . bp,q

R(mp)(nq) e denido por:


a1,2 B a2,2 B . . . .. . a1,n B a2,n B . . . am,n B

a1,1 B a2,1 B AB = . . .

am,1 B am,2 B Para exemplicar, vamos considerar as matrizes A= 1 2 3 4 e B=

1 2 3 4 5 6

No Scilab, o produto de Kronecker implementado atravs do operador .*., como podemos e e ver no exemplo, --> // Definindo as matrizes A e B -->A = [1 2; 3 4] A = ! ! 1. 3. 2. ! 4. !

-->B = [1 2 3; 4 5 6] B = ! ! 1. 4. 2. 5. 3. ! 6. ! // Produto de Kronecker via operador .*.

-->A .*. B ans =

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

53

! ! ! ! -->

1. 4. 3. 12.

2. 5. 6. 15.

3. 6. 9. 18.

2. 8. 4. 16.

4. 10. 8. 20.

6. 12. 12. 24.

! ! ! !

ou atravs da funo interna kron, e ca -->kron(A, B) ans = ! ! ! ! --> 1. 4. 3. 12. 2. 5. 6. 15. // Produto de Kronecker usando funcao interna

3. 6. 9. 18.

2. 8. 4. 16.

4. 10. 8. 20.

6. 12. 12. 24.

! ! ! !

4.9

Listas

Uma lista uma coleo de objetos no necessariamente do mesmo tipo. Uma lista simples e ca a denida pela funo list. Esta funo tem a forma geral e ca ca list(a1 , a2 ,. . . ,an ) onde os ai so os elementos da lista. a Vamos criar uma lista simples, que chamamos de L, composta por trs elementos : o elemento e 1, associado a L(1), o elemento w, associado a L(2) e uma matriz 2x2 composta de elementos iguais a 1, associada a L(3), -->// Uma lista simples com 3 elementos -->L = list(1, w, ones(2,2)) L =

L(1) 1. L(2) w L(3) ! ! 1. 1. 1. ! 1. !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

54

E importante observar que a indexao de elementos de uma lista, no Scilab, inicia-se por ca 1. Vamos transformar o elemento L(2) da lista do exemplo anterior em uma lista cujo primeiro elemento, L(2)(1), w e cujo segundo elemento, L(2)(2), uma matriz 2x2 de nmeros e e u aleatrios, o -->// Transformando o elemento L(2) em uma lista -->L(2) = list(w, rand(2,2)) L =

L(1) 1. L(2)

L(2)(1) w L(2)(2) ! ! 0.2113249 0.7560439 L(3) ! ! --> A seguir, mostramos o comando necessrio para acessar o elemento (1,2) do segundo elemento a de L(2), -->L(2)(2)(2,1) ans = 0.7560439 --> As lista tipadas so um outro tipo de dado aceito pelo Scilab. As listas tipadas so denidas a a atravs da funo tlist. A funo tlist possui, obrigatoriamente, como primeiro argumento e ca ca um string ou um vetor de strings e os demais argumentos so os elementos da lista. A seguir, a alguns exemplos de manipulao de listas tipadas. ca -->// Definicao de uma lista tipada 1. 1. 1. ! 1. ! 0.0002211 ! 0.3303271 !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->L = tlist([Carro; Cidade; Valores], Natal, [2,3]) L =

55

L(1) !Carro ! !Cidade ! !Valores ! ! ! ! !

L(2) Natal L(3) ! 2. 3. !

-->// Acessando elementos -->L(Cidade) ans = Natal -->L(Valores) ans = ! 2. 3. !

-->L(1)(3) ans = Valores --> Observar que os ndices de uma lista tipada podem ser strings denidas no primeiro argumento da funo tlist(). ca Neste Cap tulo, apresentamos os tipos de dados que podem ser manipulados pelo Scilab. Diversos exemplos foram mostrados utilizando polinmios, vetores, matrizes e listas. Os exemplos o foram apresentados a partir do prompt do Scilab. No prximo Cap o tulo, vamos mostrar com podemos desenvolver programas na linguagem Scilab.

Cap tulo 5

Programao ca
Uma das caracter sticas mais importante do Scilab a facilidade com que o usurio pode e a criar seus prprios programas. o Apesar de simples, a linguagem Scilab disponibiliza a maioria das estruturas das linguagens de programao convencionais. A diferena principal que, na programao Scilab, no h ca c e ca a a a necessidade da declarao prvia dos tipos das variveis que sero utilizadas ao longo do ca e a a programa. Um fator a ser levado em considerao que Scilab um interpretador de comandos. Os ca e e programas escritos na linguagem Scilab so, portanto, normalmente executados em um tempo a maior que os programas semelhantes escritos em linguagens compilveis. Este fato mais a e relevante quando precisamos desenvolver programas para a realizao de simulaes ou de otica co mizaes. Nesses casos, pode ser conveniente escrever o cdigo responsvel pela lentido do co o a a processamento em uma linguagem convencional (no caso, C ou FORTRAN) e rodar esse cdigo o dentro do ambiente Scilab. No Apndice B, mostramos os procedimentos necessrios ` ligao e a a ca de cdigos escritos em C com programas escritos em Scilab. Deve ser enfatizado, entretanto, o que a vantagem na utilizao do Scilab advm da facilidade de prototipao de programas e ca e ca da disponibilidade de uma poderosa biblioteca de funes grcas. Como sempre ocorre nessas co a situaes, cabe ao usurio encontrar a sua soluo de compromisso. co a ca Nos Cap tulos anteriores, vimos como escrever e executar comandos a partir do prompt do Scilab. Neste Cap tulo, apresentamos as principais estruturas de controle de uxo de programas. Essas estruturas so utilizadas, depois, para gerar programas, chamados de scripts ou de funes, a co que sero executados no ambiente Scilab. a

5.1

Comandos para Iteraes co

Existem dois comandos que permitem a realizao de iteraes, loops, no Scilab: o loop ca co implementado com o comando for e o loop implementado com o comando while.

5.1.1

O Loop for

O comando for tem a forma geral: for variavel = vetor_linha instrucao_1 instrucao_2 ... ... instrucao_n end No ambiente Scilab, a forma acima equivalente a e 56

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->for variavel=vetor_linha --> instrucao_1 --> instrucao_2 --> instrucao_n -->end como mostrado no exemplo, --> Loop for em linha de comando -->for k = 1:3 -->a = k + 1 -->end a = 2. = 3. = 4. -->

57

Como vimos no exemplo, no loop for o comportamento das iteraes baseado no contedo co e u do vetor linha. No exemplo a seguir, vamos considerar que a varivel k do comando for assuma os valores a estabelecidos pelo vetor linha v = [2 3 4 5 6]. O nmero de iteraes, portanto, ser igual ao u co a nmero de componentes do vetor linha v. Teremos, dessa forma, cinco iteraes. Na primeira u co iterao, o valor da varivel k ser igual ao primeiro elemento do vetor v, v(1), que igual a 2, ca a a e e na ultima iterao o valor da varivel k ser igual ao ultimo elemento do vetor v, v(5), que ca a a vale 6. No ambiente Scilab, temos: -->v = [2 3 4 5 6]; -->y = 0; -->for k = v -->y = y + k -->end y = 2. = 5. = 9. = // v tambem pode ser escrito como v = 2:6

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a 14. = 20. -->

58

O vetor v poderia ter sido descrito na forma v = 2:6. A varivel do comando for tambm pode ser uma lista. Neste caso, a varivel assume os a e a valores dos elementos da lista, como no exemplo: -->L = list(1, [1 2; 3 4], teste) L =

L(1) 1. L(2) ! ! 1. 3. 2. ! 4. ! L(3) teste -->for k=L -->disp(k) -->end 1. ! ! 1. 3. 2. ! 4. !

teste -->

5.1.2

O Loop while

O comando while tem a forma geral, while condicao instrucao_1 instrucao_2 ... ... instrucao_n end

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a A forma acima equivalente ` forma e a -->while condicao --> instrucao_1 --> instrucao_2 --> instrucao_n -->end

59

no ambiente Scilab. O loop baseado no while realiza uma seqncia de instrues enquanto uma determinada ue co condio estiver sendo satisfeita. A condio geralmente inclui comparaes entre objetos. Na ca ca co Tabela 5.1, apresentamos os operadores que permitem fazer comparaes entre valores de objetos co no Scilab. Operadores == ou = < > <= >= <> ou ~= Signicado igual a menor do que maior do que menor ou igual a maior ou igual a diferente

Tabela 5.1: Operadores condicionais A seguir, apresentamos um exemplo da utilizao do loop baseado no comando while, ca -->x = 1; -->while x < 14 -->x = x * 2 -->end x = 2. = 4. = 8. = 16. -->

5.2

Comandos Condicionais

O Scilab implementa dois tipos de comandos condicionais: if-then-else e select-case.

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

60

5.2.1

Comando if-then-else

O comando if-then-else tem duas formas. Na forma mais simples, o comando escrito e como if condicao_1 then sequencia_de_instrucoes_1 else sequencia_de_instrucoes_2 end enquanto na sua forma mais geral o comando escrito como, e if condicao_1 then sequencia_de_instrucoes_1 elseif condicao_2 sequencia_de_instrucoes_2 ... ... ... ... ... ... elseif condicao_n sequencia_de_instrucoes_n else sequencia_de_instrucoes_n+1 end A forma acima equivalente ` forma e a --> if condicao_1 then --> sequencia_de_instrucoes_1 -->elseif condicao_2 --> sequencia_de_instrucoes_2 --> elseif condicao_n --> sequencia_de_instrucoes_n --> else --> sequencia_de_instrucoes_n+1 -->end no ambiente Scilab. A condicao_1 do comando if-then-else avalia uma expresso. Se esta expresso for a a verdadeira, true, ser executada a instruo ou instrues subseqentes. Se for falsa, false, ser a ca co u a executada a instruo ou instrues aps o else ou o elseif, conforme o caso. Alguns exemplos ca co o da utilizao do condicional if-then-else, ca -->x = -1 x = - 1. -->if x < 0 then --> y = -x y = 1. -->else

// apresenta a resposta

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a --> y = x -->end -->// Outra forma -->x = 1 x = 1. -->if x > 0 then, y = -x, else, y=x, end y = - 1. -->x = -1 x = - 1. -->if x > 0 then, y = -x, else, y=x, end y = - 1. --> // Inicializando

61

5.2.2

Comando select-case

O condicional select-case tem a forma geral, select variavel_de_teste case expressao_1 sequencia_de_instrucoes_1 case expressao_2 sequencia_de_instrucoes_2 ... ... ... ... ... ... ... ... case expressao_n sequencia_de_instrucoes_n else sequencia_de_instrucoes_n+1 end A forma acima equivalente ` forma e a -->select variavel_de_teste -->case expressao_1 --> sequencia_de_instrucoes_1 -->case expressao_2 --> sequencia_de_instrucoes_2 -->case expressao_n --> sequencia_de_instrucoes_n

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->else --> sequencia_de_instrucoes_n+1 -->end

62

O condicional select-case compara o valor de uma varivel de teste com as vrias expresa a ses dos case. Sero executadas as instrues que possuirem o valor da expresso do case igual o a co a ao valor da varivel de teste. Um exemplo de utilizao do condicional select-case, a ca -->x = -1 x = - 1. -->select x -->case 1 --> y = x + 5 -->case -1 --> y = sqrt(x) y = i -->end -->x = 1 x = 1. -->select x, case 1, y = x+5, case -1, y = sqrt(x), end y = 6 -->

5.3

Denindo Scripts

Vimos, no Cap tulo 3, que poss e vel, atravs dos comandos save e load, armazenar e recue perar valores de variveis utilizadas no ambiente Scilab. Vimos, tambm, que poss a e e vel, atravs e do comando diary, criar arquivos onde armazenamos a memria das sesses que realizamos no o o Scilab. Alm desses dois tipos de arquivos, podemos criar arquivos contendo comandos do Scilab e que sero executados posteriormente dentro do seu ambiente. Um desses arquivos, chamados a de arquivos scripts ou simplesmente scripts, so formados por texto puro, sem acentuao, a ca contendo uma seqncia de comandos que o usurio digitaria em uma sesso interativa no ue a a prompt do Scilab. Por conveno, os scripts do Scilab possuem extenso sce e so executados ca a a atravs do comando e -->exec(nome_do_arquivo_de_comandos.sce) So caracter a sticas dos arquivos scripts:

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

63

Todas as variveis denidas no arquivo de comandos permanecem vlidas no ambiente a a Scilab aps a execuo dos comandos do arquivo, e o ca No h uma denio clara das entradas e sa a a ca das do script. Esse fato pode dicultar a correo de poss ca veis erros. Para exemplicar, vamos escrever um script na linguagem Scilab para obter a 2 usando o mtodo iterativo de Newton-Raphson. Segundo esse mtodo [9], a raiz de uma funo, f (x) e e ca pode ser calculada atravs da expresso, e a xi+1 = xi f (xi ) f (xi )

onde f (xi ) representa a derivada da funo f (x) no ponto xi e i = 0, 1, . . . , n representa o ca nmero de iteraes. u co A funo f (x) que permite obter a 2 ca e f (x) = x2 2 Assim, usando a frmula de Newton-Raphson, temos o x2 2 2x Usando x0 = 1.0 como aproximao inicial, escrevemos o script mostrado em Cdigo 1, ca o xi+1 = xi
// script: metodo de Newton-Raphson // f(x) = x * x - 2 N = 10; // Numero maximo de iteracoes x0 = 1.0; // Aproximacao inicial delta = 10^(-5); // Erro xn = x0; for n=1:N xn1 = xn - (xn * xn - 2)/(2 * xn); if abs((xn1-xn)/xn1) < delta then printf(Valor da raiz = %10.7f,xn1) return end xn = xn1; end printf(Nao converge em n=%f iteracoes", N)

Cdigo 1: O script que implementa o mtodo de Newton-Raphson para obter o e

2.

Observar o ; aps alguns comandos. Isso evita que a execuo do script seja um processo o ca ruidoso no ambiente Scilab. A execuo do script, que foi armazenado em um arquivo chamado newton.sce, e o resultado ca mostrado na sesso, e a -->exec newton.sce // executando o script

-->// script: metodo de Newton-Raphson

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->// f(x) = x * x - 2

64

-->N = 10; -->x0 = 1.0;

// Numero maximo de iteracoes // Aproximacao inicial // Erro

-->delta = 10^(-5);

-->xn = x0; -->for n=1:N --> xn1 = xn - (xn * xn - 2)/(2 * xn); --> if abs((xn1-xn)/xn1) < delta then --> printf(Valor da raiz = %10.8f,xn1) --> return --> end --> xn = xn1; -->end Valor da raiz = 1.41421356 // valor de sqrt(2) ! --> Como indicado anteriormente, todas as variveis utilizadas no script permanecem ativas a aps a sua execuo, o ca Valor da raiz = 1.4142136 // Final da execucao -->// Variaveis permanecem ativas no ambiente Scilab -->N N = 10. -->x0 x0 = 1. -->xn1 xn1 = 1.4142136 -->delta delta = 0.00001 --> Um outro exemplo de script mostrado em Cdigo 6, Cap e o tulo 6.

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

65

5.4

Denindo Funes co

Uma funo obedece a uma estrutura da forma: ca function [y1, ..., yn] = foo(x1, ..., xm) instrucao_1 instrucao_2 ... instrucao_p endfunction onde foo o nome da funo, xi, i=1,...,m, so os seus argumentos de entrada, yj, j=1,...,n, e ca a so os seus argumentos de sa e instrucao_i, i=1,...,p, representa a seqncia de instrues a da ue co que devem ser executadas pela funo. ca Toda funo no Scilab executada chamado seu nome seguido de seus argumentos.No exemca e plo, a funo foo executada atravs do comando ca e e -->foo(x1, ..., xm) Como pode ser observado, uma funo possui uma estrutura pr-determinada. As principais ca e caracter sticas das funes so: co a As variveis denidas na funo, chamadas de variveis locais, no permanecem no ambia ca a a ente Scilab aps a execuo da funo; o ca ca As entradas e sa das do programa so claramente denidas, e a Uma funo, aps ser denida, pode ser chamada a qualquer tempo. ca o Uma funo pode ser criada usando um dos seguintes procedimentos: ca 1. Digitao no prprio ambiente, ca o -->Digitando uma funcao no ambiente Scilab -->function [y1, y2] = exemplo(x1, x2) -->// Entrada: x1, x2 -->// Saida: y1, y2 -->y1 = x1 + x2 -->y2 = x1 * x2 -->endfunction -->[a,b] = exemplo(2, 3) b = 6. = 5. --> Observar que a funo retorna primeiro o ultimo valor calculado. ca 2. Usando o comando deff,

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->Usando deff -->deff([y1, y2]=exemplo(x1, x2),y1=x1+x2, y2=x1*x2) -->[a, b] = exemplo(3,4) b = 12. = 7. -->

66

3. Digitando o texto da funo em um arquivo e, em seguida, carregando esse arquivo no ca ambiente Scilab. Por conveno, as funes denidas pelo usurio possuem extenso sci ca co a a e so carregadas no ambiente Scilab atravs do comando: a e -->getf(nome_do_arquivo_de_comandos.sci) Exemplos de funes constru co das desta maneira sero apresentados na seo 5.4.2. a ca A escolha de um dos procedimentos anteriores depende da convenincia do usurio. e a

5.4.1

Variveis Globais e Variveis Locais a a

As variveis globais so vlidas no ambiente do Scilab enquanto as variveis locais so vlidas a a a a a a apenas no escopo de uma funo. Para exemplicar os conceitos, vamos considerar a funo ca ca f(x1, x2), -->function [y1, y2] = f(x1, x2) -->y1 = x1 + x2 -->y2 = x1 - x2 -->endfunction Observe que y1 e y2 so as variveis de sa enquanto x1 e x2 so as variveis de entrada a a da a a da funo. Vamos considerar alguns exemplos de chamadas desta funo. ca ca Inicialmente, a funo chamada com argumentos x1 =1 e x2 = 3 tendo seus parmetros ca e a de retorno associados `s vriveis m1 e m2. Observe que y1 e y2, apesar de terem sido calculados a a a dentro da funo (denio local), no so denidas no ambiente do Scilab. ca ca a a -->[m1, m2] = f(1,3) m2 = - 2. m1 = 4. --> // Provocando erro : y1 e y2 nao sao globais -->y1 !--error // Retorno associado as variaveis [m1, m2]

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a undefined variable : y1

67

-->y2 !--error 4 undefined variable : y2 --> Continuando com o exemplo, a funo chamada sem a associao expl ca e ca cita de variveis a de retorno. Este caso como se a funo f(x1, x2) tivesse sido chamada com a associao de e ca ca apenas uma varivel de retorno, uma chamada do tipo z = f(1,3) . a -->f(1,3) ans = 4. --> O exemplo continua e um erro provocado quando a funo chamada com apenas um e ca e argumento. Logo em seguida, o argumento denido no ambiente (denio global) e a funo e ca ca , novamente, chamada com apenas um argumento sem que haja a ocorrncia de erro. e e -->f(1) // Erro por indefinicao de argumento !--error 4 undefined variable : x2 at line 2 of function f f(1) -->x2 = 3 x2 = 3. -->f(1) ans = 4. --> Como est claro pela sesso anterior, a chamada de uma funo sem que todos os seus argua a ca mentos de entrada tenham sido previamente denidos ocasiona erro. Os argumentos de entrada devem ser denidos expl citamente na chamada ou atravs de denies via variveis globais. e co a Considerando a funo anterior, teremos, como casos interessante (mas no aconselhveis!), os ca a a exemplos, -->x1 = 2; x2 = 3; -->f() ans = // Definindo x1 e x2 // Chamando a funcao f sem nenhum argumento // Chamando a funcao com apenas um argumento // Definindo x2 no ambiente (global) // Chamada equivalente a z = f(1,3)

called by :

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a 5. -->[m1, m2] = f() m2 = - 1. m1 = 5. --> // Retorno associado as variaveis [m1, m2]

68

5.4.2

Arquivos com Funes co

Como vimos nas sees anteriores, poss co e vel denir funes dentro do prprio ambiente co o Scilab. Entretanto, quando a funo possui muitos comandos, mais conveniente utilizar um ca e editor de textos para criar, fora do ambiente Scilab, um arquivo contendo a funo. E importante ca observar que o nome desse arquivo no , necessariamente, o nome que deve ser dado ` funo. a e a ca Como primeiro exemplo [9], vamos desenvolver um programa para resolver a equao difeca rencial ordinria, a dy = (x y)/2 dx com condio inicial y(0) = 1, utilizando o mtodo de Runge-Kutta de quarta ordem. Vamos ca e considerar o intervalo de integrao [0, 3] e o passo de integrao igual a h = 1/8. A soluo ca ca ca numrica obtida por Runge-Kutta ser comparada com valores da soluo exata que y(x) = e a ca e 3ex/2 + x 2. O mtodo Runge-Kutta de quarta ordem, para resolver uma equao diferencial ordinria e ca a de primeira ordem, dy = f (x, y) dx representado pelas equaes, e co yk+1 = yk + com os coecientes fi denidos por : f1 = f (xk , yk ) h h f2 = f (xk + , yk + f1 ) 2 2 h h f3 = f (xk + , yk + f2 ) 2 2 f4 = f (xk + h, yk + hf3 ) e pode ser implementado atravs do Algoritmo 1: e h (f1 + 2f2 + 2f3 + f4 ) 6

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

69

Algoritmo 1: Mtodo de Runge-Kutta de Quarta Ordem. e Entrada: [a, b], h e y0 Fazer x0 = a Fazer n = (b a)/h for k = 0 to n do Calcular f1 , f2 , f3 e f4 Calcular yk+1 = yk + h (f1 + 2f2 + 2f3 + f4 ) 6 Fazer xk+1 = xk + h end Resultado: Apresentar valores de xk e yk Podemos utilizar um editor de textos, por exemplo, vi, joe, para, fora do ambiente Scilab, criar o programa. No caso, usamos o SciPad, o editor do Scilab, como mostrado na Figura 5.1.

Figura 5.1: Escrevendo uma funo usando o editor do Scilab. ca O programa criado mostrado em Cdigo 2. e o

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

70

function [XY] = rk4(a, b, h, y0) // Resolucao de equacoes diferenciais ordinarias por Runge-Kutta 4a. ordem // Entrada : [a,b] - intervalo de integracao // h - passo da integracao // y0 - condicao inicial em x0 X(1) = a Y(1) = y0 Exato(1) = f2(X(1), Y(1)) n = (b-a)/h for k=1:n xk = X(k) yk = Y(k) hf1 = h * f(xk, yk) hf2 = h * f(xk + h/2, yk + hf1/2) hf3 = h * f(xk + h/2, yk + hf2/2) hf4 = h * f(xk + h, yk + hf3) Y(k+1) = Y(k) + (hf1 + 2*hf2 + 2*hf3 + hf4)/6 X(k+1) = X(k) + h Exato(k+1) = f2(X(k+1), Y(k+1)) end XY = [X Y Exato] endfunction

Cdigo 2: Programa principal, implementao do mtodo de Runge-Kutta. o ca e

Como podemos observar, o programa chama a funo f(x,y), nas linhas 13 a 16, e a funo ca ca com a soluo exata da equao diferencial dada1 , nas linhas 8 e 19 de Cdigo 2. A funo ca ca o ca f(x,y) mostrada em Cdigo 3, e o
1 2 3 4

function [fxy] = f(x,y) // funcao exemplo fxy = (x - y)/2 endfunction

Cdigo 3: A funo f(x,y). o ca

e a soluo exata mostrada em Cdigo 4, ca e o


1 2 3 4

function [fexato] = f2(x,y) // funcao solucao fexato = 3 * exp(-x/2) + x - 2 endfunction

Cdigo 4: A soluo exata da equao diferencial. o ca ca

Os programas podem ser carregados no Scilab logo aps sua digitao atravs da utilizao o ca e ca da sub-opo Load into Scilab Ctrl+I da opo Execute do Editor. Ou podem ser carregados ca ca no ambiente Scilab atravs do comando getf(). Considerando que o programa principal e as e funes estejam em arquivos localizados no diretrio onde o Scilab lanado. Assim sendo, o co o e c comando
1

Devemos salientar que nem sempre a soluo anal ca tica, exata, estar dispon a vel

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->getf(fdexy.sci) --> carrega a funo f(x,y) no ambiente Scilab. Depois, com o comando ca -->getf(fsolucao.sci) --> // arquivo com a funcao solucao = 3exp(-x/2)+x-2 // arquivo com a funcao f(x,y) = (x - y)/2

71

a funo com a soluo exata carregada. Finalmente, o comando getf(rkutta4.sci) carca ca e rega o arquivo que dene a funo rk42 e o comando rk4(0, 3, 1/8, 1) executa o programa. ca Os resultados obtidos so : a -->getf(rkutta4.sci) -->rk4(0, 3, 1/8, 1) ans = ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! --> Na primeira coluna so mostrados os valores de x, na segunda coluna so mostrados os a a valores da soluo aproximada, y, e na terceira coluna so mostrados os valores da soluo ca a ca exata, 3ex/2 + x 2.
Esta ordem irrelevante. Observe que os nomes das funes e os nomes dos arquivos que as contm so, e co e a intencionalmente, diferentes.
2

// arquivo com o metodo de Runge-Kutta 4a. ordem // executando o programa

0. 0.125 0.25 0.375 0.5 0.625 0.75 0.875 1. 1.125 1.25 1.375 1.5 1.625 1.75 1.875 2. 2.125 2.25 2.375 2.5 2.625 2.75 2.875 3.

1. 0.9432392 0.8974908 0.8620874 0.8364024 0.8198470 0.8118679 0.8119457 0.8195921 0.8343486 0.8557844 0.8834949 0.9170998 0.9562421 1.0005862 1.049817 1.1036385 1.1617724 1.2239575 1.2899485 1.3595145 1.4324392 1.5085189 1.5875626 1.6693906

1. 0.9432392 0.8974907 0.8620874 0.8364023 0.8198469 0.8118678 0.8119456 0.8195920 0.8343485 0.8557843 0.8834947 0.9170997 0.9562419 1.0005861 1.0498169 1.1036383 1.1617723 1.2239574 1.2899483 1.3595144 1.432439 1.5085188 1.5875625 1.6693905

! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

72

Como segundo exemplo de programao, [9], vamos resolver um sistema triangular superior ca de equaes lineares, Este exemplo requer a leitura de um arquivo externo contendo dados. co Vamos considerar o sistema triangular superior, 4x1 x2 + 2x3 + 2x4 2x2 + 6x3 + 2x4 x3 x4 2x4 x5 + 7x5 2x5 x5 3x5 = 4 = 0 = 3 = 10 = 6

Para resolver estes tipos de sistemas, usamos a matriz dos coecientes aumentada, denida por 4 1 2 2 1 4

0 2 6 2 7 [A | b] = 0 0 1 1 2 0 0 0 2 1 0 0 0 0 6

0 3 10 6

e o processo de substituio reversa, indicado pelo Algoritmo 2: ca Algoritmo 2: Mtodo da Substituio Reversa. e ca bn xn = an,n for r = n 1 at 1 do e soma = 0 for j = r + 1 at n do e soma = soma + ar,j xj end b(r) soma xr = ar,r end A matriz aumentada, neste caso, armazenada em um arquivo ASCII, que chamamos de e arquivo1. O contedo de arquivo1, digitado com um editor qualquer, pode ser visto no ambiente u Linux usando o comando cat, paulo:~/metodos/funcoes/aula3$ cat arquivo1 4 -1 0 -2 0 0 0 0 0 0 2 2 -1 4 6 2 7 0 1 -1 -2 3 0 -2 -1 10 0 0 3 6

Este arquivo lido pelo Scilab atravs do comando: e e -->Ab = read(arquivo1, 5, 6) Ab = ! ! 4. 0. - 1. - 2. 2. 6. 2. 2. - 1. 7. 4. 0. ! !

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a ! ! ! --> 0. 0. 0. 0. 0. 0. 1. 0. 0. - 1. - 2. 0. - 2. - 1. 3. 3. ! 10. ! 6. !

73

onde Ab a varivel que contm a matriz aumentada. O comando read l as cinco linhas e as e a e e seis colunas de dados do arquivo1 que est armazenado no diretrio de trabalho. a o Caso seja necessrio, a matriz dos coecientes, A, e o vetor dos termos independentes, b, a podem ser recuperados da matriz Ab atravs da seqncia de comandos: e ue -->// Numero de linhas, nl, numero de colunas, nc, de Ab -->[nl nc] = size(Ab) nc = 6. = 5. -->A = Ab(:,1:nc-1) A = ! ! ! ! ! 4. 0. 0. 0. 0. - 1. - 2. 0. 0. 0. 2. 6. 1. 0. 0. // Matriz dos coeficientes

nl

2. 2. - 1. - 2. 0.

- 1. 7. - 2. - 1. 3.

! ! ! ! !

-->b = Ab(:,nc) b = ! ! ! ! ! --> 4. 0. 3. 10. 6. ! ! ! ! !

// Vetor dos termos independentes

O programa para resolver o sistema linear mostrado no Cdigo 5, e o

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a


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

74

function X = subst(Tsup) // Entrada : matriz triangular superior, Tsup // Saida : Vetor solucao X [nl, nc] = size(Tsup); n = nc-1; A = Tsup(:,1:n); // Matriz A b = Tsup(:,nc) // Vetor b X = zeros(n,1); X(n) = b(n)/A(n,n); for r = n-1:-1:1, soma = 0, for j = r+1:n, soma = soma + A(r,j) * X(j); end, X(r) = (b(r) - soma)/A(r,r); end endfunction

Cdigo 5: Programa para resolver um sistema triangular. o

Usando a matriz aumentada Ab como entrada para este programa, obtemos como vetor soluo, ca -->subst(Ab) ans = ! 5. ! 4. ! 1. ! - 6. ! 2. --> ! ! ! ! !

5.4.3

Comandos Especiais

Scilab possui alguns comandos especiais que so, exclusivamente, utilizados por funces : a o argn - retorna o nmero de argumentos de entrada e de sa de uma funo; u da ca warning e pause - suspendem, temporariamente, a execuo de uma funo; ca ca break - fora o nal de um loop; c return ou resume - utilizado para passar as variveis locais do ambiente da funo para a ca o ambiente que chamou a funo. ca Alguns dos comandos especiais apresentados anteriormente so utilizados na funo, a ca function [z] = foo(x, y) [out, in] = argn(0); if x == 0 then, error(Divisao por zero); end,

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a slope = y/x; pause, z = sqrt(slope); s = resume(slope); endfunction

75

Vamos chamar esta funo com argumento x = 0. O valor x = 0 ocasiona um erro, apreca sentado ao usurio atravs do comando error, com a conseqente interrupo das operaes. a e u ca co H o retorno ao prompt do Scilab. Estas operaes so apresentadas no exemplo, a co a -->getf(f3.sci) // Carregando a funcao

-->z = foo(0, 1) // Provocando um erro !--error 10000 Divisao por zero at line 5 of function foo z = foo(0, 1) -->

called by :

Na segunda chamada, mostrada a seguir, desta vez com os argumentos corretos, a funo ca suspende a operao aps o clculo de slope. Neste ponto, o usurio pode vericar valores ca o a a calculados pela funo at o ponto em que houve a interrupo. O prompt -1->, causado pelo ca e ca pause, indica a mudana de ambiente. O controle pode ser retornado ` funo atravs do c a ca e comando return. As operaes da funo podem ser encerradas usando os comandos quit ou co ca abort. Aps digitar resume, a funo calcula o valor de z e disponibiliza a varivel s, local ` o ca a a funo, para o ambiente que a chamou. ca -->// Mudando de ambiente -->z = foo(2,1) -1->resume z = 0.7071068 -->s s = 0.5 --> Neste Cap tulo, apresentamos alguns programas desenvolvidos na linguagem Scilab. No Cap tulo 6, vamos mostrar comandos que podem ser utilizados para traar grcos no ambiente c a Scilab.

Cap tulo 6

Grcos no Scilab a
Apresentamos alguns comandos que podem ser utilizados para traar grcos bi-dimensionais c a e tri-dimensionais. Informaes mais detalhadas sobre todos os comandos dispon co veis na biblioteca grca do Scilab1 podem ser acessadas atravs do navegador de help. a e

6.1

A Janela de Grcos do Scilab a

Todas as sa das grcas de comandos do Scilab so apresentadas em uma janela grca. a a a Essa janela mostrada na Figura 6.1. e

Figura 6.1: Janela grca do Scilab a Na Figura 6.1, observamos a existncia de um menu horizontal com cinco opes: File , e co Zoom , UnZoom , 3D Rot. e Edit . Utilizando o mouse para selecionar cada uma dessas opes, vericamos que: co A opo File - possui sete sub-opes que permitem manipular arquivos relacionados ca co com grcos gerados: Clear, Select, Print, Export, Save, Load e Close; a
1

O Apndice D contm uma listagem de todos os comandos da biblioteca grca do Scilab e e a

76

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

77

A opo Zoom - permite a ampliao de uma parte do grco. Escolhendo esta opo e ca ca a ca delimitando uma rea, a parte do grco dentro da rea escolhida ser expandida. Esta a a a a opo ainda no est implementada para grcos tri-dimensionais; ca a a a A opo UnZoom - desfaz as manipulaes realizadas atravs da opo Zoom ; ca co e ca A opo 3D Rot. - permite efetuar rotaes em grcos bi-dimensionais e tri-dimensionais, ca co a e A opo Edit - possui sete sub-opes que permitem manipular o grco gerado: Select, ca co a Redraw, Erase, Figure Properties, Current Axes Properties, Start Entity Picker, Stop Entity Picker. Algumas dessas opes sero utilizadas no decorrer deste Cap co a tulo. No Scilab, grcos sucessivos so sobrepostos em uma mesma janela grca. Para evitar a a a que isso ocorra, podemos utilizar o comando clf(). As janelas grcas podem ser manipuladas atravs da funo scf(). Por exemplo, a e ca -->// Manipulacao de janelas graficas -->scf(0) // Acesso a janela grafica 0 (default) -->scf(1) // Acesso a janela grafica 1 -->

6.2

Grcos Bi-dimensionais a

Grcos bi-dimensionais podem ser gerados atravs da utilizao da funo plot2d()2 . a e ca ca A forma mais simples da funo plot2d() : ca e plot2d([x],y) onde x e y podem ser matrizes ou vetores reais. Os colchetes, [ e ], envolvendo x indicam que este parmetro opcional. a e Vamos fazer algumas consideraes sobre os parmetros x e y: co a 1. Se x e y so vetores, a funo plot2d() permite traar o grco de y em funo de x. a ca c a ca E importante observar que os dois vetores devem ter a mesma dimenso, isto , os dois a e vetores devem ter o mesmo nmero de elementos; u 2. Se x um vetor e y uma matriz, a funo plot2d() permite traar o grco de cada e e ca c a coluna da matriz y em funo do vetor x. Neste caso, o nmero de elementos das colunas ca u da matriz y deve ser igual ao nmero de elementos do vetor x; u 3. Se x e y so matrizes, a funo plot2d() permite traar o grco de cada coluna da matriz a ca c a y em funo de cada coluna da matriz x. Neste caso, as matrizes devem ter as mesmas ca dimenses; o 4. Se y um vetor, a funo plot2d() permite traar o grco do vetor y em funo do e ca c a ca vetor [1:size(y)], e
2

O comando plot() est obsoleto. a

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

78

5. Se y uma matriz, a funo plot2d() permite traar o grco da matriz y em funo do e ca c a ca vetor [1:size(y)]. Vamos apresentar exemplos de grcos gerados para cada uma das opes de entrada x, y a co apresentadas anteriormente. Os grcos sero gerados no intervalo [0, 2], com incremento 0.1. a a No ambiente Scilab, temos, -->// Definindo o vetor das abcissas, x -->x = [0:0.1:2*%pi]; // Intervalo [0, 2pi], incremento 0.1 -->// Item 1 - x vetor, y vetor -->y = sin(x); --> // Os dois vetores devem ter a mesma dimensao -->size(x) ans = ! 1. 63. ! // Observar que x possui 63 colunas

-->size(y) ans = ! 1. 63. ! // Observar que y possui 63 colunas

-->plot2d(x,y) -->clf() // Limpa a tela grafica - evitar sobreposicao

--> // Item 2 - x vetor, y matriz -->Y = [sin(x) cos(x)]; // Definindo a matriz Y

--> // Observar que a matriz Y possui 63 elementos em cada coluna -->size(Y) ans = ! 63. 2. !

-->plot2d(x,Y) -->clf() -->// Item 3 - x e y sao matrizes -->// Definindo uma variavel auxiliar -->t = [0:0.1:2*%pi];

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a -->// Criando a matriz X -->X = [t t]; --> // A matriz X possui 63 elementos em cada coluna -->size(X) ans = ! 63. 2. !

79

-->// Criando a matriz Y -->Y = [cos(t) sin(t)]; -->// A matriz Y possui 63 elementos em cada coluna -->size(Y) ans = ! 63. 2. !

-->plot2d(X,Y) -->clf() -->// Item 4 - y vetor (sem x explicito) -->plot2d(sin(x)) -->clf() --> // Item 5 - Y matriz (sem x explicito) -->plot2d(Y) -->

Vericar que, aps a apresentao de cada grco, limpamos a tela atravs do comando o ca a e clf(), para evitar que o prximo grco no se sobreponha ao anterior. o a a Os resultados dessa sesso, para cada um de seus itens, podem ser agrupados em uma unica a janela grca, como mostrado na Figura 6.2. a

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

80

Figura 6.2: Sa das para a funo plot2d([x], y). Cada sub-grco refere-se a um dos itens ca a da sesso do Scilab mostrada anteriormente. Observar que os grcos dos Itens 4 e 5 possuem a a valores de abcissas diferentes dos demais. Na gerao da Figura 6.2, foram utilizados os comandos ca xtitle(titulo) para colocar o t tulo em cada um dos grcos apresentados e a xsetech([x, y, largura, altura]) para sub-dividir a janela grca do Scilab. O argumento do comando xtitle() uma string a e especicando o t tulo do grco. O argumento da funo xsetech explicado em seguida. a ca e A janela grca do Scilab, mostrada na Figura 6.1, denida com largura e altura iguais a a e 1 e com o seu sistema de referncias com origem (0,0) no canto superior esquerdo da janela. e O eixo x possui valores crescentes para a direita e o eixo y possui valores crescentes para baixo. Ambos os eixos possuem valores mximos iguais a 1. a O comando xsetech() permite criar sub-janelas grcas dentro da janela grca do Scilab. a a Por exemplo, para o grco com t a tulo Item 1, foi utilizada a linha de comando -->xsetech([0, 0, 0.3, 0.5]); xtitle(Item 1); plot2d(x,y) Os demais grcos foram traados com comandos semelhantes. a c Nesse caso, o argumento utilizado na funo xsetech() permitiu traar um grco de largura ca c a 0.3 e altura 0.5 a partir da origem do sistema de referncias da janela grca. O grco com e a a t tulo Item 2, foi traado com o comando c -->xsetech([0.35, 0, 0.3, 0.5]); xtitle(Item 2); plot2d(x,Y) Todos os comandos utilizados na sesso anterior foram gravados em um arquivo atravs do a e comando diary(). Este arquivo, aps ser editado, foi transformado no script apresentado em o Cdigo 6, o

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a


// Script para gerar a Figura 2 do capitulo 6 // Graficos - Scilab 3.0 // Definindo o vetor das abcissas, x x = [0:0.1:2*%pi]; // Item 1 - y vetor y = sin(x); // xsetech[abcissa, ordenada, largura, altura] do grafico xsetech([0, 0, 0.3, 0.5]); xtitle("Item 1"); plot2d(x,y) // Item 2 - y matriz Y = [sin(x) cos(x)]; // Definindo a matriz Y plot2d(x,Y)

81

xsetech([0.35, 0, 0.3, 0.5]); xtitle("Item2"); // Item 3 - x e y sao matrizes // Definindo uma variavel auxiliar t = [0:0.1:2*%pi]; // Criando a matriz X X = [t t]; // Criando a matriz Y Y = [cos(t) sin(t)];

xsetech([0.70, 0, 0.3, 0.5]); xtitle("Item 3"); plot2d(X,Y) // Item 4 - y vetor xsetech([0, 0.5, 0.5, 0.5]); xtitle("Item 4"); plot2d(sin(x)) // Item 5 - Y matriz xsetech([0.5, 0.5, 0.5, 0.5]); xtitle("Item 5"); plot2d(Y)

Cdigo 6: O script utilizado para gerar o grco da Figura 6.2. o a

Esse script, quando executado, gera o grco apresentado na Figura 6.2. a A forma geral para da funo plot2d() inclui um terceiro argumento, <opt_args>, ca plot2d([x],y,<opt_args>) onde <opt_args> uma seqncia de opes que determinam as caracter e ue co sticas do grco bia dimensional, < opt args >:= opcao 1 = valor 1, opcao 2 = valor 2, . . . , opcao n = valor n

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a As opes podem ser: co

82

style - utilizada para especicar o padro para a curva (ou curvas) que esto sendo e a a traadas. O valor associado ` essa opo deve ser um vetor com valores inteiros positivos c a ca ou negativos. Se o valor associado for positivo, a curva cont e nua. Nesse caso, o valor associado ` opo dene, tambm, a cor da curva que est sendo traada. Se o valor a ca e a c associado ` opo for negativo ou zero, a curva ser desenhada usando marcadores. a ca a logflag - dene a escala, logar tmica ou linear, a ser utilizada nos eixos x e y do grco. a Os valores associados ` essa opo so strings, nn, nl, ln e ll, onde l indica a a ca a escala logar tmica, n indica escala normal e a segunda letra indica o tipo de graduao dos ca eixos (normal ou logar tmica). O valor default desta opo nn, isto , escala normal ca e e com graduao normal dos eixos; ca rect - utilizada para estabelecer os limites do grco. O valor associado ` essa opo e a a ca um vetor real com quatro entradas, [xmin, ymin, xmax, ymax], onde xmin, xmax e e ymin, ymax indicam os valores m nimo e mximo para os eixos x e y, respectivamente; a frameflag - E utilizada para controlar a escala dos eixos coordenados. O valor associado a ` essa opo um nmero inteiro no intervalo 0 e 8, inclusive; ca e u axesflag - especica como os eixos sero traados. O valor associado ` essa opo um a c a ca e nmero inteiro variando entre 0 e 5, inclusive; u nax - permite denir os nomes e as marcas nos eixos x e y. O valor associado ` essa opo, a ca vlido apenas quando a opo axesflag=1, um vetor com quatro entradas inteiras, a ca e [nx, Nx, ny, Ny]. O parmetro Nx o nmero de marcaes principais (tics) utilizadas a e u co no eixo x; nx o nmero de divises (subtics) entre as marcaes principais do eixo x; Ny e u o co e ny tm signicados semelhantes, tratando-se do eixo y, e e leg - permite denir as legendas das curvas. O valor associado ` esse parmetro uma a a e string de caracteres para cada grco traado. a c A sesso Scilab, a -->x = [-%pi:0.1:%pi]; -->y = [sin(x) cos(x)]; -->plot2d(x,y, style=[1, -1], rect=[-%pi, -1.5, %pi, 1.5],axesflag=5, ... -->leg = "sin(x)@cos(x)") -->

exemplica a forma de utilizao de algumas opes do comando plot2d(). A sa mostrada ca co da e na Figura 6.3.

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

83

Figura 6.3: Sa das para a funo plot2d([x], y, <opt_args>). ca Observar que a primeira curva, sin(x), cont e nua j que o valor do parmetro style a a associado a ela positivo enquanto a segunda curva, cos(x), est desenhada com marcas j e a a que o parmetro style associado a ela negativo. A opo rect estabelece os limites dos eixos a e ca x e y, enquanto a opo axesflag=5 traa os eixos na forma apresentada. Finalmente, a opo ca c ca leg associa uma legenda a cada curva desenhada. O comando plot2d() apresenta algumas variaes3 , como mostrado na Tabela 6.1. co Comando plot2d2() plot2d3() plot2d4() Tipo de Grco a grcos 2-D linearizados a grcos 2-D com barras verticais a grcos 2-D com setas a

Tabela 6.1: Variaes do comando plot2d() co A sub-opo Graphics da opo Demos apresenta exemplos de utilizao da funo plot2d() ca ca ca ca e de suas variaes. E importante lembrar que o demo de uma funo grca tambm pode co ca a e ser ativado atravs da chamada da funo. Por exemplo, para ativar o demo da funo grca e ca ca a histplot, que plota um histograma, basta fazer:

-->histplot()

6.2.1

Outros Comandos

Existem comandos que podem ser utilizados para melhorar a apresentao de um grco. ca a Dentre eles, destacamos: xgrid - coloca uma grade em um grco bi-dimensional. a
O comando plot2d1(), para traar grcos bi-dimensionais em escala logar c a tmica est obsoleto. Utilizar a plot2d() com a opo logflag adequada ca
3

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a xtitle - coloca t tulos em grcos 2-D ou 3-D; a titlepage - coloca um t tulo no meio de uma janela grca. a

84

Os elementos de um grco so controlados por parmetros globais. Estes parmetros dea a a a nem um contexto no qual o grco est inserido. Outros parmetros dos grcos so controlados a a a a a atravs de argumentos dos prprios comandos usados para traa-los. O comando xset, usado e o c sem argumento, xset(), apresenta um conjunto de opes, chamadas de Contexto grco da co a janela grca 0, (Graphic context of graphic window 0 ), que permitem alterar parmetros a a atravs da utilizao do mouse. e ca O comando subplot(m,n,p) permite dividir a janela grca do Scilab em uma matriz m n. Em cada um dos elementos a da matriz, especicado por p, pode ser colocado um grco. A sesso a seguir ilustra os a a procedimentos para utilizao do comando subplot() usando os prprios demos de funes ca o co grcas do Scilab. a -->// Demonstracao do comando subplot -->subplot(221) -->champ // chamada do demo da funcao champ Demo of champ champ(1:10,1:10,rand(10,10),rand(10,10),1.0); -->subplot(222) -->histplot // chamada do demo da funcao histplot histplot([-6:0.2:6],rand(1,2000,n),[1,-1],011, ,[-6,0,6,0.5],[2,12,2,11]); deff([y]=f(x),y=exp(-x.*x/2)/sqrt(2*%pi);); x=-6:0.1:6;x=x;plot2d(x,f(x),1,"000"); titre= macro histplot : Histogram plot; xtitle(titre,Classes,N(C)/Nmax); -->subplot(223) -->errbar // chamada do demo da funcao errbar x=0:0.1:2*%pi; y=[sin(x);cos(x)];x=[x;x] plot2d(x,y); errbar(x,y,0.05*ones(x),0.03*ones(x)); -->subplot(224) -->grayplot // chamada do demo da funcao grayplot Demo of grayplot t=-%pi:0.1:%pi;m=sin(t)*cos(t);grayplot(t,t,m); -->

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a A Figura 6.4 o resultado dos comandos da sesso anterior. a

85

Figura 6.4: Sa das para a funo subplot(). ca Observar que essa a Figura 6.4 no foi capturada pelo GIMP. Ela foi armazenada em um a ca a a arquivo atravs da sub-opo Export da opo File da janela grca na qual o grco foi e ca gerado. A sub-opo Export possui as opes mostradas na Figura 6.5. ca co

A Figura 6.5: Exportando grcos para o L TEX. a

Como o arquivo deste trabalho gerado diretamente em pdf, o arquivo grco foi salvo no e a formato gif e transformado em jpg atravs do GIMP. e

6.2.2

Grcos 2D Especiais a

Scilab dispe de alguns comandos que permitem traar grcos bi-dimensionais especiais. o c a Por exemplo, na rea de controle de processos, temos: a bode - permite traar o grco de mdulo e fase da resposta em freqncia de um sistema c a o ue linear; gainplot - permite traar o grco do mdulo da resposta em freqncia de um sistema c a o ue linear;

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

86

nyquist - permite traar o grco da parte imaginria versus parte real da resposta em c a a freqncia de um sistema linear; ue m_cicle - grco M-c a rculo usado com o grco de Nyquist; a chart - permite traar a diagrama de Nichols; c black - permite traar o diagrama de Black para um sistema linear; c evans - permite traar o o lugar das ra c zes pelo mtodo de Evans; e plzr - permite traar o diagrama de polos e zeros. c O help do Scilab fornece informaes mais detalhadas sobre a utilizao dessas funes. co ca co

6.3

Grcos Tri-dimensionais a

O comando plot3d() permite traar grcos de superf c a cies,

z = f (x, y) Na notao Scilab, as variveis independentes x e y so vetores de dimenses n1 e n2, ca a a o respectivamente, e a varivel dependente z uma matriz de dimenso n1 n2. Ento, por essa a e a a denio, o elemento z(i,j) o valor da superf no ponto (x(i), y(j)). ca e cie Para exemplicar o uso de plot3d(), vamos considerar a funo ca

cos(x) sin(y) no intervalo [0, 2] com incremento igual a 0.1. A sesso Scilab, a -->x = [0:0.1:2*%pi]; -->y = x; -->z = cos(x) * sin(x); -->plot3d(x, x, z) -->

gera o grco mostrado na Figura 6.6. a

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

87

Figura 6.6: Exemplo de sa grca 3-D. da a Alm da funo plot3d(), e de suas variaes, Scilab implementa outras funes que pere ca co co mitem traar grcos tri-dimensionais. Dentre elas, destacamos: c a fplot3d - que permite traar grcos de superf c a cies denidas por funes, como no script co mostrado no exemplo: deff(z=f(x,y),z=x^4-y^4) x=-3:0.2:3 ;y=x ; clf() ;fplot3d(x,y,f,alpha=5,theta=31) fplot3d1 - que permite traar grcos de superf c a cies denidas por funes, com o no caso co anterior. As superf cies so apresentadas em escala cinza ou com uma graduao de cores. a ca

6.3.1

Grcos 3-D Especiais a

As seguintes funes permitem traar grcos tri-dimensionais especiais: co c a param3d - permite traar curvas paramtricas; c e hist3d - permite traar histogramas 3-D; c contour - permite traar curvas de n para uma funo 3-D. c vel ca Na Figura 6.7, utilizamos o comando subplot() para dividir a janela grca do Scilab e a mostrar exemplos de utilizao de algumas funes que geram grcos 3-D especiais. ca co a

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

88

Figura 6.7: Exemplos de grcos 3-D especiais. a Para gerar os grcos apresentados na Figura 6.7, utilizamos os comandos: a -->// Exemplos de graficos 3-D especiais -->subplot(121); -->param3d Demo of param3d t=0:0.1:5*%pi;param3d(sin(t),cos(t),t/10,35,45,X@Y@Z,[2,4]); -->subplot(122) -->hist3d hist3d(10*rand(10,10)); --> Ressaltamos que a sintaxe de todos esses comandos pode ser vericada usando o help do Scilab.

Apndice A e

Instalao do Scilab ca
O objetivo deste Apndice apresentar os procedimentos necessrios ` instalao do Scilab e e a a ca a partir de seu cdigo fonte. A instalao feita no ambiente Linux distribuio Slackware 9.1, o ca e ca com kernel 2.4.24. Apesar de apresentarmos os procedimentos de instalao em uma plataforma ca espec ca, eles so vlidos para qualquer ambiente operacional que disponha dos requisitos a a m nimos exigidos, apresentados na seo A.1. ca Os procedimentos necessrios ` instalao de outras distribuies, binrias ou pr-compiladas, a a ca co a e podem ser encontrados na homepage do Scilab1 . Na data em que este documento foi escrito, esto dispon a veis, na homepage do Scilab, arquivos para as seguintes plataformas: Plataformas UNIX/Linux: Scilab 3.0 - arquivo binrio para Linux (scilab-3.0.bin.linux-i686.tar.gz); a Scilab 3.0 - arquivo com o cdigo fonte do Scilab (scilab-3.0.src.tar.gz). o Plataformas Windows 9X/NT/2000/XP Scilab 3.0 - instalador da verso binria do Scilab (scilab3.0.exe); a a Scilab 3.0 - cdigo fonte do Scilab (scilab-3.0.src.zip) o

A.1

Instalao no Linux Slackware - Cdigo Fonte ca o

O cdigo fonte para a verso 3.0 do software Scilab disponibilizado atravs do arquivo o a e e scilab-3.0-src.tar.gz na homepage do Scilab. Para instalar o software a partir do cdigo o fonte, devemos garantir que: O X-Window esteja instalado (X11R4, X11R5 ou X11R6), e O sistema disponha de compiladores C e FORTRAN (cc e g77). Para que o help do Scilab seja instalado, necessrio que o sistema operacional disponha do e a software Sablotron, dispon em http://www.gingerall.com/charlie/ga/xml/p_sab.xml. vel Tendo garantido os requisitos m nimos, escolhemos o diretrio no qual o software ser instao a lado. Geralmente, utilizamos o diretrio /usr/local. Copiamos, ento, a distribuio fonte o a ca do Scilab para este diretrio. Descompactamos o arquivo atravs do comando tar -zxvf o e scilab-3.0-src.tar.gz. Ser criado um diretrio /usr/local/scilab-3.0 onde estaro coa o a locados todos os arquivos que compem o software. O diretrio /usr/local/scilab-3.0 o o e chamado de diretrio principal do Scilab, referenciado pela varivel de ambiente SCIDIR. Estes o a procedimentos devem ser realizados como root.
1

http://scilabsoft.inria.fr/

89

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

90

A instalao do software propriamente dita bastante simples. No diretrio SCIDIR digitaca e o interessante executar, nesse momento, um teste da se .\configure e, depois, make all. E instalao. Isso pode ser feito atravs do comando make tests executando dentro do diretrio ca e o SCIDIR/tests. Para complementar a instalao, o usurio deve, tambm, acrescentar ` varivel ca a e a a PATH o caminho /usr/local/scilab-3.0/bin para que o Scilab possa ser executado de qualquer diretrio2 . Mais detalhes sobre opes de congurao podem ser encontrados no arquivo o co ca /usr/local/scilab-3.0/README_Unix Para executar o programa, basta digitar scilab no ambiente grco ou scilab -nw no a ambiente texto do Linux. No diretrio SCIDIR=/usr/local/scilab-3.0 esto localizados, entre outros, os seguintes o a arquivos : scilab.star - arquivo de inicializao do Scilab. As instrues deste arquivo so execa co a cutadas quando Scilab ativado. O usurio tambm pode ter seu prprio arquivo de e a e o inicializao, .scilab, dentro do seu diretrio; ca o license.txt - arquivo contendo informaes relativas ao uso do software, e co configure - arquivo de preparao para a instalao. Este arquivo modicar outros ca ca a arquivos do Scilab, os Makefile, de acordo com a congurao do Sistema Operacional ca no qual Scilab ser instalado. a Em SCIDIR so criados os seguintes diretrios : a o bin/ - onde esto localizados os arquivos executveis. Nas distribuies Unix/Linux o a a co script scilab aciona o executvel scilex. Neste diretrio esto, tambm, localizados a o a e A X gerados pelo Scilab; programas para manipulao de arquivos Postscript e L TE ca config/ - onde esto localizados os arquivos utilizados pelo arquivo de congurao a ca configure; contrib/ - onde esto colocados os arquivos correspondentes aos toolboxes instalados; a demos/ - onde esto localizados os arquivos de demonstrao; a ca examples/ - onde esto localizados arquivos com exemplos de como ligar o Scilab com a programas externos; imp/ - onde esto localizados os cdigos fontes dos programas que permitem a manipulao a o ca de arquivos Postscript; intersi/ - onde esto localizados os arquivos que permitem a construo das interfaces a ca necessrias para adicionar novas primitivas escritas em FORTRAN ou C ao Scilab; a libs/ - onde esto localizados os cdigos objeto das bibliotecas do Scilab; a o macros/ - onde esto localizadas as funes do Scilab. Este diretrio contm diversos a co o e sub-diretrios correpondendo, cada um, a um tpico espec o o co. Por exemplo, no diretrio o signal esto localizadas as funes que permitem trabalhar com aspectos relacionados a co com a rea de processamento de sinais. Cada sub-diretrio contm o cdigo fonte das a o e o funes (arquivos com extenso .sci); co a man/ - onde esto localizados diversos sub-diretrios contendo arquivos man (help on-line) a o dos comandos e funes que compem o Scilab; co o
2 No Linux distribuio Slackware, editar o arquivo /etc/profile adicionando o caminho /usr/local/scilabca 3.0/bin ` varivel de ambiente PATH a a

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

91

maple/ - onde esto localizados arquivos escritos na linguagem Maple que permitem a a ligao do software de computao simblica Maple com Scilab; ca ca o pvm3/ - implementao da verso 3.4 do PVM (Parallel Vitual Machine System) para ca a Scilab; routines/ - onde esto as rotinas numricas em C e em FORTRAN utilizadas pelo Scilab, a e divididas por sub-diretrios; o scripts/ - onde esto localizados os fontes de alguns script utilizados pelo Scilab; a tcl/ - implementao TCL/TK para Scilab; ca tests/ - onde esto localizados arquivos para a realizao de testes da instalao do a ca ca Scilab, e util/ - onde esto localizadas rotinas e arquivos para gerenciamento do Scilab. a

Apndice B e

Ligao do Scilab com Programas ca em C


Os programas escritos na linguagem Scilab so interpretados. Estes programas, principala mente os que realizam clculos numricos utilizados em simulaes ou otimizaes, podem ser a e co co lentos em comparao com os programas compilados escritos em linguagens convencionais. Uma ca maneira de acelerar a execuo desses programas, sem perder a exibilidade disponibilizada pelo ca Scilab, escrever o cdigo lento em uma linguagem convencional e utilizar este cdigo dentro e o o do ambiente Scilab. O Scilab permite que rotinas ou funes escritos em FORTRAN ou C sejam utilizados co dentro de seu ambiente. Neste Apndice, apresentamos os procedimentos necessrios ` ligao e a a ca de programas Scilab com funes escritas na linguagem C. co Uma funo escrita na linguagem C pode ser ligada ao Scilab de trs maneiras distintas : ca e atravs do comando link, em um processo chamado de ligao dinmica; e ca a atravs de programas de interface, os chamados gateways, escritos pelo usurio ou gerados e a por intersi, ou atravs da adio de uma nova funo ao cdigo do Scilab. e ca ca o Apenas a primeira maneira ser apresentada. Os demais casos podem ser vericados em [1]. a

B.1

A Ligao Dinmica ca a

O comando --> link(foo.o,foo,c) --> liga o arquivo com o cdigo objeto da funo foo, foo.o, escrita na linguagem C, indicado pelo o ca terceiro argumento, c, ao Scilab. O segundo argumento de link, foo, o nome da funo a e ca ser executada. Um arquivo objeto pode conter vrias funes. O nome de cada uma delas, se a co necessrio, deve ser indicado como segundo argumento de link na forma de um vetor de strings, a [prog1, prog2]. Para exemplicar a ligao de uma funo escrita em C com um programa em Scilab, vamos ca ca re-escrever em C o programa Scilab que implementa o mtodo de Runge-Kutta de 4a ordem e apresentado no Cap tulo 5. Algumas observaes devem ser feitas : co O programa transforma-se em uma funo; ca 92

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

93

Alm do intervalo de integrao, [a,b], do passo de integrao, h e da condio inicial e ca ca ca em y, y0, que so os argumentos de entrada da funo, os vetores x e y so explicitados a ca a na chamada da funo e so os seus argumentos de retorno ou de sa ca a da; As variveis de entrada da funo principal, rk4, so passadas como apontadores; a ca a A ordem dos argumentos na chamada da funo relevante; ca e A funo a ser integrada faz parte do arquivo que contm a funo principal; ca e ca O programa, transformado em uma funo C, e a funo com a equao a ser integrada, so ca ca ca a mostrados em Cdigo 7. o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

/* Exemplo de utilizacao do comando link. Resolucao de equacoes diferenciais ordinarias por Runge-Kutta de 4a. ordem. Entrada : [a,b] - intervalo de integracao h - passo da integracao y0 - condicao inicial em x0 */ double rk4(x, y, a, b, h, y0) double x[], y[], *a, *b, *h, *y0; { int n, k; double hf1, hf2, hf3, hf4; double f(); n = (*b - *a) / (*h); x[0] = *a; y[0] = *y0; for (k = 0; k < n; ++k) { hf1 = (*h) * f(x[k], y[k]); hf2 = (*h) * f(x[k] + (*h)/2, y[k] + hf1/2); hf3 = (*h) * f(x[k] + (*h)/2, y[k] + hf2/2); hf4 = (*h) * f(x[k] + (*h), y[k] + hf3); y[k+1] = y[k] + (hf1 + 2*hf2 + 2*hf3 + hf4)/6; x[k+1] = x[k] + (*h); } } /* Funcao a ser integrada */ double f(x,y) double x, y; { return( (x - y)/2 ); }

Cdigo 7: Funo Runge-Kutta escrita em C. o ca

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

94

Usando o compilador gcc, geramos o cdigo objeto runge.o para o programa runge.c o atravs da linha de comando: e paulo@pmotta:~$ gcc -c runge.c -o runge.o Em seguida, no ambiente Scilab, o cdigo objeto ligado ao Scilab atravs do comando o e e link, -->link(runge.o,rk4,c) linking files runge.o to create a shared executable shared archive loaded Linking rk4 Link done ans = 0. --> Observar que rk4, segundo argumento de link o nome da rotina que resolve o problema. e Para acessar a funo rk4, devemos inicializar seus parmetros de entrada. A inicializao ca a ca desses parmetros feita atravs dos comandos, a e e ->a = 0 0. -->b = 3 3. -->h = 1/8 0.125 -->y0 = 1 1. --> Em seguida, usamos a funo call para rodar a funo rk4, ca ca -->[X,Y]=call(rk4,a,3,d,b,4,d,h,5,d,y0,6,d,out, ... -->[25,1],1,d,[25,1],2,d); // Valor da condicao inicial em y // Passo da integracao // Valor final do intervalo // Valor inicial do intervalo

O primeiro argumento da funo call o nome da funo rk4. Cada argumento de entrada ca e ca da funo rk4 deve ser acompanhado da posio em que ele ocupa na lista de argumentos da ca ca funo chamada, rk4, e o seu tipo de dado. Assim, considerando ca double rk4(x, y, a, b, h, y0),

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

95

vemos que a o terceiro argumento na lista dos parmetros de rk4 e seu tipo de dado double. e a e Este fato indicado na funo call por a,3,d. Do mesmo modo, b o quarto argumento, e ca e tipo de dado1 double, indicado em call por b,4,d, e assim por diante. Os argumentos de sa da, especicados aps out, so vetores do tipo double, indicado por o a d, com vinte e cinco linhas e uma coluna, indicados por [25,1], ocupando as posies 1 e 2 co da lista de argumentos da funo rk42 . ca Finalmente, os valores de retorno de rk4 so associados `s variveis [X, Y] do ambiente a a a Scilab. A resposta, ento, a e -->[X Y] ans = ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! --> Observar que a funo call foi chamada com um ponto-e-v ca rgula no nal, suprimindo a apresentao imediata dos resultados. S depois, os vetores X e Y foram mostrados. Neste caso, ca o o ponto-e-v rgula evitou que primeiro fosse mostrado o vetor Y e, depois, o vetor X. 0. 0.125 0.25 0.375 0.5 0.625 0.75 0.875 1. 1.125 1.25 1.375 1.5 1.625 1.75 1.875 2. 2.125 2.25 2.375 2.5 2.625 2.75 2.875 3. 1. 0.9432392 0.8974908 0.8620874 0.8364024 0.8198470 0.8118679 0.8119457 0.8195921 0.8343486 0.8557844 0.8834949 0.9170998 0.9562421 1.0005862 1.049817 1.1036385 1.1617724 1.2239575 1.2899485 1.3595145 1.4324392 1.5085189 1.5875626 1.6693906 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

1 2

Os outros poss veis tipos de dados so real, r e inteiro, i a Observar que, na resposta, so n = (b a)/h iteraes mais o valor da condio inicial, (x0, y0) a co ca

Apndice C e

Instalao de Toolboxes ca
O objetivo deste Apndice apresentar os procedimentos necessrios ` instalao de toolboxes e e a a ca no Scilab 3.0. A instalao feita no ambiente Linux distribuio Slackware 9.1, com kernel ca e ca 2.4.24. Os toolboxes so conjuntos de funes desenvolvidas com uma nalidade especica. a co Os toolboxes para Scilab esto dispon a veis em http://scilabsoft.inria.fr/contributions. html/.

C.1

Instalao ca

Scilab tem toolboxes dispon veis nas seguintes reas: a Interface grca com o usurio; a a Processamento e manipulao de imagens; ca Elementos nitos; Otimizao; ca Programao linear; ca Simulao; ca Modelagem e controle, incluindo redes neurais, wavelets e aprendizagem com reforo; c Estat stica e anlise de dados; a Reconhecimento de padres; o entre outras. Para exemplicar os procedimentos de instalao de um toolbox no Scilab, vamos utilizar o ca toolbox ANN que implementa funes para anlise de sinais utilizando redes neurais. A instalao co a ca ser realizada pelo usurio root. a a O toolbox ANN est dispon no arquivo ANN_Toolbox_0.4.2.tar.gz que pode ser obtido a vel em ftp://ftp.inria.fr/INRIA/Scilab/contrib/ANN/. A primeira providncia, ento, abrir e a e este arquivo em um diretrio adequado. Atravs do comando o e tar -zxvf ANN_Toolbox_0.4.2.tar.gz, executado como root dentro do diretrio /usr/local, criamos o diretrio o o /usr/local/ANN_Toolbox_0.4.2.

96

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a Neste diretrio esto localizados os cdigos fontes das funes que compem o toolbox. o a o co o O prximo passo executar o script builder.sce, o e --> exec /usr/local/ANN_Toolbox_0.4.2/builder.sce

97

para instalar os comandos e funes do tooolbox. Este procedimento pode, por exemplo, ser co executado utilizando-se o Scilab em modo texto. root@none:/usr/local/ANN_Toolbox_0.4.2# scilab -nw ------------------------------------------Scilab-3.0 Copyright (c) 1989-2004 Consortium Scilab (INRIA, ENPC) -------------------------------------------

Startup execution: loading initial environment -->exec /usr/local/ANN_Toolbox_0.4.2/builder.sce -->mode(-1) Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ANN.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ANN_FF.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ANN_GEN.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_ConjugGrad.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Hess.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_INT.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Jacobian.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Jacobian_BP.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Mom_batch.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Mom_batch_nb.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Mom_online.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Mom_online_nb.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_SSAB_batch.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_SSAB_batch_nb.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_SSAB_online.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_SSAB_online_nb.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Std_batch.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Std_batch_nb.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Std_online.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Std_online_nb.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_VHess.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_grad.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_grad_BP.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_grad_BP_nb.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_init.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_init_nb.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_run.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_run_nb.man to ascii Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_d_log_activ.man to ascii

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a Processing Processing Processing Processing --> /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_d_sum_of_sqr.man to ascii /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_log_activ.man to ascii /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_pat_shuffle.man to ascii /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_sum_of_sqr.man to ascii

98

Aps ser instalado, os comandos e funes do toolbox podero ser usados por qualquer o co a usurio bastando que ele execute o script loader.sce, a -->exec /usr/local/ANN_Toolbox_0.4.2/loader.sce para carregar os comandos e funces do toolbox ANN no ambiente do Scilab. o Na Figura C.1, mostramos o procedimento para a utilizao do toolbox. Observar que as ca funes do toolbox instalado j aparecem no help. co a

Figura C.1: Procedimentos para a utilizao do toolbox ANN e help com as funes dispon ca co veis no toolbox. A instalao e o acesso a outros toolboxes do Scilab feita a partir de procedimentos semeca e lhantes aos apresentados neste Apndice. e

Apndice D e

Funes Pr-denidas - Scilab 3.0 co e


Apresentamos a relao de todas as funes dispon ca co veis no Scilab 3.0. Esta relao foi ca obtida a partir de uma busca automtica realizada no diretrio SCI/man/eng/. Entretanto, a o A alguns caracteres foram ajustados (ainda) manualmente ` sintaxe do L TEX. a

D.1

Programming

errcatch - error trapping errclear - error clearing error - error messages etime - Elapsed time evstr - evaluation of expressions exec - script le execution execstr - execute Scilab code in strings

abort - interrupt evaluation. ans - answer backslash - (\) left matrix division. bool2s - convert boolean matrix to a zero one matrix. boolean - Scilab Objects, boolean variables and operators &, |, ~ brackets - ([,]) left and right brackets

exists - checks variable existence break - keyword to interrupt loops exit - Ends the current Scilab session call - Fortran or C user routines call case - keyword used in select clear - kills variables clearglobal - kills global variables colon - (:) colon operator comma - (,) column, instruction, argument separator for - language keyword for loops comments - comments format - number printing and display format continue - keyword to pass control to the next iteration of a loop date - Current date as date string debug - debugging level definedfields - return index of lists dened elds dot - (.) symbol else - keyword in if-then-else elseif - keyword in if-then-else empty - ([]) empty matrix end - end keyword equal - (=) aectation, comparison equal sign fort - Fortran or C user routines call funptr - coding of primitives ( wizard stu ) getdate - get date and time information getenv - get the value of an environment variable getfield - list eld extraction getpid - get Scilab process identicator getversion - get Scilab version name global - Dene global variable gstacksize - set/get scilab global stack size hat - (^) exponentiation external - Scilab Object, external function or routine extraction - matrix and list entry extraction feval - multiple evaluation find - nd indices of boolean vector or matrix true elements

99

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

100

host - Unix or DOS command execution hypermat - initialize an N dimensional matrices hypermatrices - Scilab object, N dimensional matrices in Scilab iconvert - conversion to 1 or 4 byte integer representation ieee - set oating point exception mode if - conditional execution assignation - partial variable assignation insertion - partial variable assignation or modication intppty - set interface argument passing properties inttype - type integers used in integer data types

pwd - print Scilab current directory quit - decrease the pause level or exit quote - () transpose operator, string delimiter rational - Scilab objects, rational in Scilab resume - return or resume execution and copy some local variables return - return or resume execution and copy some local variables rlist - Scilab rational fraction function denition sciargs - scilab command line arguments select - select keyword semi - (;) instruction and row separator

inv_coeff - build a polynomial matrix from its coefcients iserror - error occurence test isglobal - check if a variable is global lasterror - get last recorded error message left - ([) left bracket

semicolon - (;) ending expression and row separator setfield - list eld insertion slash - (/) right division and feed back stacksize - set scilab stack size star - (*) multiplication operator

less - (<) lower than comparison symbols - scilab operator names list - Scilab object and list function denition lsslist - Scilab linear state space function denition lstcat - list concatenation matrices - Scilab object, matrices in Scilab matrix - reshape a vector or a matrix to a dierent size matrix mlist - Scilab object, matrix oriented typed list denition. mode - select a mode in exec le mtlb_mode - switch Matlab like operations names - scilab names syntax user - interfacing a Fortran or C routine null - delete an element in a list overloading - display, functions and operators overloading capabilities parents - ( ) left and right parenthesis pause - pause mode, invoke keyboard percent - (%) special character whereis - name of library containing a function plus - (+) addition operator poly - polynomial denition power - power operation (^,.^) predef - variable protection getcwd - get Scilab current directory while - while keyword who - listing of variables who_user - listing of users variables whos - listing of variables in long form varn - symbolic variable of a polynomial what - list the Scilab primitives where - get current instruction calling tree whereami - display current instruction calling tree testmatrix - generate some particular matrices then - keyword in if-then-else tic - start a stopwatch timer tilda - (~) logical not tlist - Scilab object and typed list denition. toc - Read the stopwatch timer type - variable type typename - associates a name to variable type

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

101

D.2

Graphics Library

drawnow - draw hidden graphics entities. driver - select a graphics driver edit_curv - interactive graphic curve editor errbar - add vertical error bars on a 2D plot eval3d - values of a function on a grid eval3dp - compute facets of a 3D parametric surface

Graphics - graphics library overview Matplot - 2D plot of a matrix using colors Matplot1 - 2D plot of a matrix using colors Sfgrayplot - smooth 2D plot of a surface dened by a function using colors Sgrayplot - smooth 2D plot of a surface using colors

evans - Evans root locus addcolor - add new colors to the current colormap fac3d - 3D plot of a surface (obsolete) agregation_properties - description of the Agregation entity properties alufunctions - pixel drawing functions arc_properties - description of the Arc entity properties axes_properties - description of the axes entity properties axis_properties - description of the axis entity properties black - Blacks diagram (Nichols chart) bode - Bode plot champ - 2D vector eld plot champ1 - 2D vector eld plot with colored arrows champ_properties - description of the 2D vector eld entity properties chart - Nichols chart clear_pixmap - erase the pixmap buer clf - clear or reset the current graphic gure (window) to default values color - returns the color id of a color color_list - list of named colors colorbar - draw a colorbar colormap - using colormaps contour - level curves on a 3D surface contour2d - level curves of a surface on a 2D plot contour2di - compute level curves of a surface on a 2D plot contourf - lled level curves of a surface on a 2D plot copy - copy a graphics entity. getfont - dialog to select font delete - delete a graphic entity and its children. getlinestyle - dialog to select linestyle dragrect - Drag rectangle(s) with mouse getmark - dialog to select mark (symbol) draw - draw an entity. getsymbol - dialog to select a symbol and its size drawaxis - draw an axis drawlater - makes axes children invisible. glue - glue a set of graphics entities into an agregation. fchamp - direction eld of a 2D rst order ODE fcontour - level curves on a 3D surface dened by a function fcontour2d - level curves of a surface dened by a function on a 2D plot fec - pseudo-color plot of a function dened on a triangular mesh fec_properties - description of the fec entities properties fgrayplot - 2D plot of a surface dened by a function using colors figure_properties - description of the graphics gure entity properties fplot2d - 2D plot of a curve dened by a function fplot3d - 3D plot of a surface dened by a function fplot3d1 - 3D gray or color level plot of a surface dened by a function gainplot - magnitude plot gca - Return handle of current axes. gce - Get current entity handle. gcf - Return handle of current graphic or GUI window. gda - Return handle of default axes. gdf - Return handle of default gure. genfac3d - compute facets of a 3D surface geom3d - projection from 3D on 2D after a 3D plot get - Retrieve a property value from a graphics entity or an User Interface object. getcolor - opens a dialog to show colors in the current colormap

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

102

gr_menu - simple interactive graphic editor graduate - pretty axis graduations graphics_entities - description of the graphics entities data structures graycolormap - linear gray colormap grayplot - 2D plot of a surface using colors grayplot_properties - description of the grayplot entities properties graypolarplot - Polar 2D plot of a surface using colors hist3d - 3D representation of a histogram histplot - plot a histogram hotcolormap - red to yellow colormap isoview - set scales for isometric plot (do not change the size of the window) jetcolormap - blue to red colormap label_properties - description of the Label entity properties legend - draw graph legend legend_properties - description of the Legend entity properties legends - draw graph legend loadplots - loads and formats saved plots locate - mouse selection of a set of points m_circle - M-circle plot milk_drop - milk drop 3D function move - move, translate, a graphic entity and its children. name2rgb - returns the RGB values of a named color nf3d - rectangular facets to plot3d parameters nyquist - nyquist plot param3d - 3D plot of a parametric curve param3d1 - 3D plot of parametric curves param3d_properties - description of the 3D curves entities properties paramfplot2d - animated 2D plot, curve dened by a function plot - simple plot plot2d - 2D plot plot2d1 - 2D plot (logarithmic axes) (obsolete) plot2d2 - 2D plot (step function) plot2d3 - 2D plot (vertical bars) plot2d4 - 2D plot (arrows style)

plot2d_old_version - 2D plot reference plot3d - 3D plot of a surface plot3d1 - 3D gray or color level plot of a surface plot3d2 - plot surface dened by rectangular facets plot3d3 - mesh plot surface dened by rectangular facets plot3d_old_version - 3D plot of a surface plotframe - plot a frame with scaling and grids plzr - pole-zero plot polarplot - Plot polar coordinates polyline_properties - description of the Polyline entity properties printing - printing scilab graphics rectangle_properties - description of the Rectangle entity properties replot - redraw the current graphics window with new boundaries rgb2name - returns the name of a color rotate - rotation of a set of points rubberbox - Rubberband box for rectangle selection scaling - ane transformation of a set of points scf - set the current graphic gure (window) sd2sci - gr menu structure to scilab instruction convertor sda - Set default axes. sdf - Set default gure. secto3d - 3D surfaces conversion segs_properties - description of the Segments entity properties set - set a property value of a graphic entity object or of a User Interface object. sgrid - s-plane grid lines. show_pixmap - send the pixmap buer to the screen square - set scales for isometric plot (change the size of the window) subplot - divide a graphics window into a matrix of sub-windows surface_properties - description of the 3D entities properties text_properties - description of the Text entity properties title_properties - description of the Title entity properties

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

103

titlepage - add a title in the middle of a graphics window twinkle - is used to have a graphics entity twinkle unglue - unglue an agragation and replace it by individual children. winsid - return the list of graphics windows xarc - draw a part of an ellipse

xpoly - draw a polyline or a polygon

xpolys - draw a set of polylines or polygons

xrect - draw a rectangle

xrects - draw or ll a set of rectangles xarcs - draw parts of a set of ellipses xarrows - draw a set of arrows xaxis - draw an axis xbasc - clear a graphics window and erase the associated recorded graphics xbasimp - send graphics to a Postscript printer or in a le xbasr - redraw a graphics window xchange - transform real to pixel coordinates xclea - erase a rectangle xclear - clear a graphics window xclick - wait for a mouse click xclip - set a clipping zone xdel - delete a graphics window xsegs - draw unconnected segments xend - close a graphics session xfarc - ll a part of an ellipse xfarcs - ll parts of a set of ellipses xfpoly - ll a polygon xfpolys - ll a set of polygons xfrect - ll a rectangle xget - get current values of the graphics context xgetech - get the current graphics scale xgetmouse - get the mouse events and current position xgraduate - axis graduation xgrid - add a grid on a 2D plot xstringb - draw strings into a box xinfo - draw an info string in the message subwindow xinit - initialisation of a graphics driver xlfont - load a font in the graphic context or query loaded font xload - load a saved graphics xname - change the name of the current graphics window xnumb - draw numbers xpause - suspend Scilab zgrid - zgrid plot xtape - set up the record process of graphics xstringl - compute a box which surrounds strings xstring - draw strings xsetm - dialog to set values of the graphics context xsetech - set the sub-window of a graphics window for plotting xset - set values of the graphics context xselect - raise the current graphics window xsave - save graphics into a le xs2ps - send graphics to a le in PS syntax xs2ppm - send graphics to a le in PPM syntax xs2fig - send graphics to a le in Xg syntax xrpoly - draw a regular polygon

xs2gif - send graphics to a le in GIF syntax

xtitle - add titles on a graphics window

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

104

D.3

Elementary Functions

coth - hyperbolic cotangent cothm - matrix hyperbolic cotangent cshep2d - bidimensional cubic shepard (scattered) interpolation cumprod - cumulative product

abs - absolute value, magnitude acos - element wise cosine inverse acosh - hyperbolic cosine inverse acoshm - matrix hyperbolic inverse cosine

cumsum - cumulative sum acosm - matrix wise cosine inverse delip - elliptic integral addf - symbolic addition diag - diagonal including or extracting adj2sp - converts adjacency form into sparse matrix. diff - Dierence and discrete derivative amell - Jacobis am function and - (&) logical and asin - sine inverse asinh - hyperbolic sine inverse asinhm - matrix hyperbolic inverse sine asinm - matrix wise sine inverse atan - 2-quadrant and 4-quadrant inverse tangent atanh - hyperbolic tangent inverse atanhm - matrix hyperbolic tangent inverse atanm - square matrix tangent inverse besseli - Modied Bessel functions of the rst kind (I sub alpha). besselj - Bessel functions of the rst kind (J sub alpha). besselk - Modied Bessel functions of the second kind (K sub alpha). bessely - Bessel functions of the second kind (Y sub alpha). beta - beta function binomial - binomial distribution probabilities bloc2exp - block-diagram to symbolic expression bloc2ss - block-diagram to state-space conversion bsplin3val - 3d spline arbitrary derivative evaluation function calerf - computes error functions. int - integer part ceil - rounding up int16 - conversion to 2 bytes integer representation cmb_lin - symbolic linear combination int32 - conversion to 4 bytes integer representation conj - conjugate int8 - conversion to one byte integer representation cos - cosine function cosh - hyperbolic cosine coshm - matrix hyperbolic cosine cosm - matrix cosine function cotg - cotangent uint8 - conversion to one byte unsigned integer representation uint16 - conversion to 2 bytes unsigned integer representation uint32 - conversion to 4 bytes unsigned integer representation dsearch - binary search (aka dichotomous search in french) erf - The error function. erfc - The complementary error function. erfcx - scaled complementary error function. eval - evaluation of a matrix of strings eval_cshep2d - bidimensional cubic shepard interpolation evaluation eye - identity matrix fix - rounding towards zero floor - rounding down frexp - dissect oating-point numbers into base 2 exponent and mantissa full - sparse to full matrix conversion gamma - The gamma function. gammaln - The logarithm of gamma function. gsort - decreasing order sorting imag - imaginary part imult - multiplication by i the imaginary unitary ind2sub - linear index to matrix subscript values dlgamma - derivative of gammaln function, psi function double - conversion from integer to double precision representation

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

105

integrate - integration by quadrature interp - cubic spline evaluation function

mps2linpro - convert lp problem given in MPS format to linpro format mtlb_sparse - convert sparse matrix

interp2d - bicubic spline (2d) evaluation function mulf - symbolic multiplication interp3d - 3d spline evaluation function interpln - linear interpolation intersect - returns the vector of common values of two vectors intsplin - integration of experimental data by spline interpolation inttrap - integration of experimental data by trapezoidal interpolation isdef - check variable existence isempty - check if a variable is an empty matrix or an empty list isequal - objects comparison isinf - check for innite entries isnan - check for Not a Numberentries isreal - check if a variable as real or complex entries kron - Kronecker product (.*.) ldivf - left symbolic division rand - random number generator legendre - associated Legendre functions rat - Floating point rational approximation lex_sort - lexicographic matrix rows sorting rdivf - right symbolic division linear_interpn - n dimensional linear interpolation real - real part linspace - linearly spaced vector round - rounding log - natural logarithm log10 - logarithm log1p - computes with accuracy the natural logarithm of its argument added by one log2 - base 2 logarithm logm - square matrix logarithm logspace - logarithmically spaced vector lsq_splin - weighted least squares cubic spline tting lstsize - list, tlist, mlist numbers of entries max - maximum maxi - maximum min - minimum mini - minimum sp2adj - converts sparse matrix into adjacency form minus - (-) substraction operator, sign changes sparse - sparse matrix denition modulo - symetric arithmetic remainder modulo m pmodulo - positive arithmetic remainder modulo m spcompack - converts a compressed adjacency representation setdiff - returns components of a vector which do not belong to another one sign - sign function signm - matrix sign function sin - sine function sinc - sinc function sinh - hyperbolic sine sinhm - matrix hyperbolic sine sinm - matrix sine function size - size of objects smooth - smoothing by spline functions solve - symbolic linear system solver sort - decreasing order sorting ndgrid - arrays for multidimensional function evaluation on grid ndims - number of dimensions of an array nearfloat - get previous or next oating-point number nextpow2 - next higher power of 2. nnz - number of non zero entries in a matrix norm - matrix norms not - (~) logical not number_properties - determine oating-point parameters ones - matrix made of ones or - (|) logical or pen2ea - pencil to E,A conversion pertrans - pertranspose prod - product

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

106

speye - sparse identity matrix spget - retrieves entries of sparse matrix splin - cubic spline interpolation splin2d - bicubic spline gridded 2d interpolation splin3d - spline gridded 3d interpolation spones - sparse matrix sprand - sparse random matrix spzeros - sparse zero matrix sqrt - square root sqrtm - matrix square root squarewave - generates a square wave with period 2*

D.4

Input/Output Functions

diary - diary of session dir - get le list disp - displays variables dispfiles - display opened les properties file - le management fileinfo - Provides information about a le fileparts - returns the path, lename and extension for a le path fprintf - Emulator of C language fprintf function fprintfMat - print a matrix in a le. fscanf - Converts formatted input read on a le fscanfMat - Reads a Matrix from a text le. getio - get Scilab input/output logical units

ssprint - pretty print for linear system ssrand - random system generator sub2ind - matrix subscript values to linear index subf - symbolic subtraction sum - sum (row sum, column sum) of vector/matrix entries sysconv - system conversion sysdiag - block diagonal system connection syslin - linear system denition tan - tangent tanh - hyperbolic tangent tanhm - matrix hyperbolic tangent tanm - matrix tangent toeplitz - toeplitz matrix trfmod - poles and zeros display trianfml - symbolic triangularization tril - lower triangular part of matrix trisolve - symbolic linear system solver triu - upper triangle typeof - object type union - extract union components of a vector unique - extract unique components of a vector vectorfind - nds in a matrix rows or columns matching a vector zeros - matrix made of zeros

input - prompt for user input isdir - checks if argument is a directory path lines - rows and columns used for display load - load saved variable loadmatfile - loads a Matlab MAT-le into Scilab ls - show les manedit - editing a manual item matfile2sci - converts a Matlab 5 MAT-le into a Scilab binary le mclearerr - reset binary le access errors mclose - close an opened le mdelete - Delete le(s) meof - check if end of le has been reached merror - tests the le access errors indicator mfscanf - interface to the C fscanf function mscanf - interface to the C scanf function msscanf - interface to the C sscanf function mget - reads byte or word in a given binary format and convert to double mgeti - reads byte or word in a given binary format return an int type mgetl - read lines from an ascii le mgetstr - read a character string mopen - open a le mfprintf - converts, formats, and writes data to a le mprintf - converts, formats, and writes data to the main scilab window msprintf - converts, formats, and writes data in a string mput - writes byte or word in a given binary format

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

107

mputl - writes strings in an ascii le mputstr - write a character string in a le mseek - set current position in binary le. mtell - binary le management newest - returns newest le of a set of les oldload - load saved variable in 2.4.1 and previous formats oldsave - saving variables in 2.4.1 and previous format print - prints variables in a le

D.5

Handling of functions and libraries

addinter - new functions interface incremental linking at run time argn - number of arguments in a function call clearfun - remove primitive. comp - scilab function compilation deff - on-line denition of function delbpt - delete breakpoint dispbpt - display breakpoints edit - function editing

printf - Emulator of C language printf function printf_conversion - printf, sprintf, fprintf conversion specications read - matrices read

funcprot - switch scilab functions protection mode endfunction - closes a function denition function - opens a function denition functions - Scilab procedures and Scilab objects

read4b - fortran le binary read readb - fortran le binary read readc_ - read a character string readmps - reads a le in MPS format save - saving variables in binary les scanf - Converts formatted input on standard input scanf_conversion - scanf, sscanf, fscanf conversion specications sprintf - Emulator of C language sprintf function sscanf - Converts formatted input given by a string startup - startup le tk_getdir - dialog to get a directory path tk_getfile - dialog to get a le path tk_savefile - dialog to get a le path for writing warning - warning messages writb - fortran le binary write write - write in a formatted le write4b - fortran le binary write xgetfile - dialog to get a le path plotprofile - extracts and displays execution proles of a Scilab function profile - extract execution proles of a Scilab function setbpt - setting breakpoints showprofile - extracts and displays execution proles of a Scilab function varargin - variable numbers of arguments in an input argument list varargout - variable numbers of arguments in an output argument list genlib - build library from all functions in given directory get_function_path - get source le path of a library function getd - getting all functions dened in a directory getf - dening a function from a le lib - library denition library - library datatype description macr2lst - function to list conversion macr2tree - function to tree conversion macro - Scilab procedure and Scilab object macrovar - variables of function newfun - add a name in the table of functions

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

108

D.6

Character string manipulations

waitbar - Draw a waitbar winclose - close windows created by sciGUI winlist - Return the winId of current window created by sciGUI x_choices - interactive Xwindow choices through toggle buttons x_choose - interactive Xwindow choice x_dialog - Xwindow dialog x_matrix - Xwindow editing of matrix x_mdialog - Xwindow dialog x_message - X window message x_message_modeless - X window modeless message

code2str - returns character string associated with Scilab integer codes. convstr - case conversion emptystr - zero length string grep - nd matches of a string in a vector of strings justify - Justify character array. length - length of object part - extraction of strings str2code - return scilab integer codes associated with a character string strcat - catenate character strings strindex - search position of a character string in an other string. string - conversion to string strings - Scilab Object, character strings stripblanks - strips leading and trailing blanks of strings strsubst - substitute a character string by another in a character string. tokenpos - returns the tokens positions in a character string. tokens - returns the tokens of a character string.

D.8

Utilities

G_make - call make or nmake add_demo - Add an entry in the demos list add_help_chapter - Add an entry in the helps list add_palette - Add an entry in the Scicos palettes list apropos - searches keywords in Scilab help basename - strip directory and sux from lenames c_link - check dynamic link cd - changes Scilab current directory

D.7

GUI and Dialogs

chdir - changes Scilab current directory clc - Clear Command Window dec2hex - hexadecimal representation of integers

addmenu - interactive button or menu denition browsevar - Scilab variable browser buttondialog - Create a simple button dialog

dirname - get directory from lenames config - Scilab general conguration. foo - foo short description delmenu - interactive button or menu deletion demoplay - interactive demo player. editvar - Scilab variable editor getvalue - xwindow dialog for data acquisition halt - stop execution havewindow - return scilab window mode keyboard - keyboard commands progressionbar - Draw a progression bar seteventhandler - set an event handler for the current graphic window setmenu - interactive button or menu activation unsetmenu - interactive button or menu or submenu de-activation head_comments - display scilab function header comments help - on-line help command help_skeleton - build the skeleton of the xml help le associated to a Scilab function hex2dec - conversion from hexadecimal representation to integers ilib_build - utility for shared library management ilib_compile - ilib build utility: executes the makele produced by ilib gen Make ilib_for_link - utility for shared library management with link ilib_gen_Make - utility for ilib build: produces a makele for building shared libraries

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

109

ilib_gen_gateway - utility for ilib build, generates a gateway le. ilib_gen_loader - utility for ilib build: generates a loader le intersci - scilab tool to interface C of Fortran functions with scilab LANGUAGE - Variable dening the language link - dynamic link

D.9

Linear Algebra

aff2ab - linear (ane) function to A,b conversion balanc - matrix or pencil balancing bdiag - block diagonalization, generalized eigenvectors chfact - sparse Cholesky factorization chol - Cholesky factorization chsolve - sparse Cholesky solver listfiles - list les make_index - creates a new index le for on-line help man - on line help XML le description format pathconvert - pathnames convertion between posix and windows. %helps - Variable dening the path of help directories realtime - set dates origin or waits until date realtimeinit - set time unit sci2exp - converts an expression to a string sci2map - Scilab to Maple variable conversion scilab - Major unix script to execute Scilab and miscellaneous tools scilink - Unix script to relink Scilab scipad - Embedded Scilab text editor fullrf - full rank factorization timer - cpu time tohome - Move the cursor to the upper left corner of the Command Window ulink - unlink a dynamically linked shared object unix - shell (sh) command execution unix_g - shell (sh) command execution, output redirected to a variable unix_s - shell (sh) command execution, no output unix_w - shell (sh) command execution, output redirected to scilab window unix_x - shell (sh) command execution, output redirected to a window with_gtk - Checks if Scilab has been built with the GIMP Toolkitlibrary with_pvm - Checks if Scilab has been built with the Parallel Virtual Machineinterface with_texmacs - Checks if Scilab has been called by texmacs with_tk - Checks if Scilab has been built with TCL/TK xmltohtml - converts xml Scilab help les to html fullrfk - full rank factorization of A^k genmarkov - generates random markov matrix with recurrent and transient classes givens - Givens transformation glever - inverse of matrix pencil gschur - generalized Schur form (obsolete). gspec - eigenvalues of matrix pencil (obsolete) hess - Hessenberg form householder - Householder orthogonal reexion matrix im_inv - inverse image inv - matrix inverse kernel - kernel, nullspace kroneck - Kronecker form of matrix pencil linsolve - linear equation solver lsq - linear least square problems. lu - LU factors of Gaussian elimination ludel - utility function used with lufact lufact - sparse lu factorization classmarkov - recurrent and transient classes of Markov matrix coff - resolvent (cofactor method) colcomp - column compression, kernel, nullspace companion - companion matrix cond - condition number det - determinant eigenmarkov - normalized left and right Markov eigenvectors ereduc - computes matrix column echelon form by qz transformations exp - element-wise exponential expm - square matrix exponential fstair - computes pencil column echelon form by qz transformations

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

110

luget - extraction of sparse LU factors lusolve - sparse linear system solver lyap - Lyapunov equation nlev - Leverriers algorithm orth - orthogonal basis pbig - eigen-projection

D.10

Polynomial calculations

bezout - Bezout equation for polynomials or integers clean - cleans matrices (round to zero small entries) cmndred - common denominator form coeff - coecients of matrix polynomial coffg - inverse of polynomial matrix colcompr - column compression of polynomial matrix

pencan - canonical form of matrix pencil degree - degree of polynomial matrix penlaur - Laurent coecients of matrix pencil pinv - pseudoinverse polar - polar form proj - projection projspec - spectral operators psmall - spectral projection qr - QR decomposition quaskro - quasi-Kronecker form randpencil - random pencil range - range (span) of A^k rank - rank rankqr - rank revealing QR factorization lcm - least common multiple rcond - inverse condition number rowcomp - row compression, range rowshuff - shue algorithm rref - computes matrix row echelon form by lu transformations schur - [ordered] Schur decomposition of matrix and pencils spaninter - subspace intersection spanplus - sum of subspaces residu - residue spantwo - sum and intersection of subspaces roots - roots of polynomials spchol - sparse cholesky factorization spec - eigenvalues of matrices and pencils sqroot - W*W hermitian factorization sva - singular value approximation svd - singular value decomposition sylv - Sylvester equation. trace - trace routh_t - Rouths table rowcompr - row compression of polynomial matrix sfact - discrete time spectral factorization simp - rational simplication simp_mode - toggle rational simplication sylm - Sylvester matrix systmat - system matrix lcmdiag - least common multiple diagonal factorization ldiv - polynomial matrix long division numer - numerator pdiv - polynomial division pol2des - polynomial matrix to descriptor form pol2str - polynomial to string conversion polfact - minimal factors denom - denominator derivat - rational matrix derivative determ - determinant of polynomial matrix detr - polynomial determinant diophant - diophantine (Bezout) equation factors - numeric real factorization gcd - gcd calculation hermit - Hermite form horner - polynomial/rational evaluation hrmt - gcd of polynomials htrianr - triangularization of polynomial matrix invr - inversion of (rational) matrix

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

111

D.11

General Control

System

and

kpure - continuous SISO system limit feedback gain krac2 - continuous SISO system limit feedback gain lin - linearization linmeq - Sylvester and Lyapunov equations solver lqe - linear quadratic estimator (Kalman Filter) lqg - LQG compensator lqg2stan - LQG to standard problem lqr - LQ compensator (full state) ltitr - discrete time response (state space) markp2ss - Markov parameters to state-space minreal - minimal balanced realization minss - minimal realization obs_gram - observability gramian obscont - observer based controller observer - observer design obsv_mat - observability matrix obsvss - observable part p_margin - phase margin pfss - partial fraction decomposition phasemag - phase and magnitude computation ppol - pole placement projsl - linear system projection repfreq - frequency response ricc - Riccati equation riccsl - Riccati equation solver rowregul - removing poles and zeros at innity rtitr - discrete time response (transfer matrix) sm2des - system matrix to descriptor sm2ss - system matrix to state-space specfact - spectral factor ss2des - (polynomial) state-space to descriptor form ss2ss - state-space to state-space conversion, feedback, injection ss2tf - conversion from state-space to transfer function st_ility - stabilizability test

abcd - state-space matrices abinv - AB invariant subspace arhnk - Hankel norm approximant arl2 - SISO model realization by L2 transfer approximation balreal - balanced realization bilin - general bilinear transform cainv - Dual of abinv calfrq - frequency response discretization canon - canonical controllable form cls2dls - bilinear transform colregul - removing poles and zeros at innity cont_frm - transfer to controllable state-space cont_mat - controllability matrix contr - controllability, controllable subspace, staircase contrss - controllable part csim - simulation (time response) of linear system ctr_gram - controllability gramian dbphi - frequency response to phase and magnitude representation ddp - disturbance decoupling des2tf - descriptor to transfer function conversion dscr - discretization of linear system dsimul - state space discrete time simulation dt_ility - detectability test equil - balancing of pair of symmetric matrices equil1 - balancing (nonnegative) pair of matrices feedback - feedback operation flts - time response (discrete time, sampled system) frep2tf - transfer function realization from frequency response freq - frequency response freson - peak frequencies g_margin - gain margin gfrancis - Francis equations for tracking

stabil - stabilization imrep2ss - state-space realization of an impulse response invsyslin - system inversion svplot - singular-value sigma-plot sysfact - system factorization

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

112

syssize - size of state-space system tf2ss - transfer to state-space time_id - SISO least square identication trzeros - transmission zeros and normal rank ui_observer - unknown input observer unobs - unobservable subspace zeropen - zero pencil

macglov - Mac Farlane Glover problem mucomp - mu (structured singular value) calculation nehari - Nehari approximant parrot - Parrots problem ric_desc - Riccati equation riccati - Riccati equation rowinout - inner-outer factorization sensi - sensitivity functions

D.12

Robust control toolbox

tf2des - transfer function to descriptor

augment - augmented plant bstap - hankel approximant ccontrg - central H-innity controller colinout - inner-outer factorization copfac - right coprime factorization bvode - boundary value problems for ODE dcf - double coprime factorization dasrt - DAE solver with zero crossing des2ss - descriptor to state-space dassl - dierential algebraic equation dhinf - H innity design of discrete-time systems dhnorm - discrete H-innity norm dtsi - stable anti-stable decomposition fourplan - augmented plant to four plants fspecg - stable factorization fstabst - Youlas parametrization gamitg - H-innity gamma iterations gcare - control Riccati equation gfare - lter Riccati equation gtild - tilde operation h2norm - H2 norm h_cl - closed loop matrix h_inf - H-innity (central) controller h_inf_st - static H innity problem h_norm - H-innity norm hankelsv - Hankel singular values hinf - H innity design of continuous-time systems lcf - normalized coprime factorization leqr - H-innity LQ gain (full state) lft - linear fractional transformation numdiff - numerical gradient estimation linf - innity norm ode - ordinary dierential equation solver linfn - innity norm lqg_ltr - LQG with loop transform recovery ode_discrete - ordinary dierential equation solver, discrete time simulation int3d - denite 3D integral by quadrature and cubature method intc - Cauchy integral intg - denite integral intl - Cauchy integral karmarkar - karmarkar algorithm leastsq - Solves non-linear least squaresproblems linpro - linear programming solver lmisolver - linear matrix inequation solver lmitool - tool for solving linear matrix inequations lsqrsolve - minimize the sum of the squares ofnonlinear functions, levenberg-marquardt algorithm fsolve - nd a zero of a system of n nonlinear functions impl - dierential algebraic equation int2d - denite 2D integral by quadrature and cubature method datafit - Parameter identication based on measured data derivative - approximate derivatives of a function fit_dat - Parameter identication based on measured data

D.13

Optimization and simulation

NDcost - generic external for optim computing gradient using nite dierences

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

113

ode_root - ordinary dierential equation solver with root nding odedc - discrete/continuous ode solver odeoptions - set options for ode solvers optim - non-linear optimization routine quapro - linear quadratic programming solver semidef - semidenite programming

hank - covariance to hankel matrix hilb - Hilbert transform iir - iir digital lter iirgroup - group delay Lp IIR lter optimization iirlp - Lp IIR lter optimization intdec - Changes sampling rate of a signal jmat - row or column block permutation kalm - Kalman update

D.14

Signal Processing toolbox

lattn - recursive solution of normal equations lattp - lattp lev - Yule-Walker equations (Levinsons algorithm) levin - Toeplitz system solver by Levinson algorithm (multidimensional) lgfft - utility for t lindquist - Lindquists algorithm mese - maximum entropy spectral estimation mfft - multi-dimensional t mrfit - frequency response t %asn - elliptic integral %k - Jacobis complete elliptic integral %sn - Jacobi s elliptic function

Signal - Signal manual description analpf - create analog low-pass lter buttmag - response of Butterworth lter casc - cascade realization of lter from coecients cepstrum - cepstrum calculation cheb1mag - response of Chebyshev type 1 lter cheb2mag - response of type 2 Chebyshev lter chepol - Chebychev polynomial convol - convolution corr - correlation, covariance

phc - Markovian representation cspect - spectral estimation (correlation method) czt - chirp z-transform algorithm dft - discrete Fourier transform ell1mag - magnitude of elliptic lter eqfir - minimax approximation of FIR lter sinc - samples of sinc function eqiir - Design of iir lters faurre - lter computation by simple Faurre algorithm ffilt - coecients of FIR low-pass fft - fast Fourier transform. system - observation update fftshift - rearranges the t output, moving the zero frequency to the center of the spectrum filter - modelling lter find_freq - parameter compatibility for elliptic lter design findm - for elliptic lter design frfit - frequency response t frmag - magnitude of FIR and IIR lters fsfirlin - design of FIR, linear phase lters, frequency sampling technique group - group delay for digital lter trans - low-pass to other lter transform wfir - linear-phase FIR lters wiener - Wiener estimate wigner - time-frequency wigner spectrum window - symmetric window yulewalk - least-square lter design zpbutt - Butterworth analog lter zpch1 - Chebyshev analog lter zpch2 - Chebyshev analog lter zpell - lowpass elliptic lter sincd - digital sinc function or Direchlet kernel srfaur - square-root algorithm srkf - square root Kalman lter sskf - steady-state Kalman lter pspect - cross-spectral estimate between 2 series remez - Remezs algorithm remezb - Minimax approximation of magnitude response rpem - RPEM estimation

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

114

D.15

Arma modelisation and simulation toolbox

edit_graph_menus - edit graph menus description find_path - nds a path between two nodes gen_net - interactive or random generation of a network girth - girth of a directed graph glist - graph list creation graph-list - description of graph list graph_2_mat - node-arc or node-node incidence matrix of a graph graph_center - center of a graph graph_complement - complement of a graph graph_diameter - diameter of a graph graph_power - kth power of a directed 1-graph graph_simp - converts a graph to a simple undirected graph

arma - Scilab arma library arma2p - extract polynomial matrices from ar representation armac - Scilab description of an armax process armax - armax identication armax1 - armax identication arsimul - armax simulation narsimul - armax simulation ( using rtitr) noisegen - noise generation odedi - test of ode prbs_a - pseudo random binary sequences generation reglin - Linear regression

D.16

Metanet: graph network toolbox

and

graph_sum - sum of two graphs graph_union - union of two graphs hamilton - hamiltonian circuit of a graph is_connex - connectivity test knapsack - solves a 0-1 multiple knapsack problem line_graph - graph with nodes corresponding to edges load_graph - loads a graph make_graph - makes a graph list mat_2_graph - graph from node-arc or node-node incidence matrix max_cap_path - maximum capacity path max_clique - maximum clique of a graph max_flow - maximum ow between two nodes mesh2d - triangulation of n points in the plane min_lcost_cflow - minimum linear cost constrained ow min_lcost_flow1 - minimum linear cost ow

add_edge - adds an edge or an arc between two nodes add_node - adds a disconnected node to a graph adj_lists - computes adjacency lists arc_graph - graph with nodes corresponding to arcs arc_number - number of arcs of a graph articul - nds one or more articulation points bandwr - bandwidth reduction for a sparse matrix best_match - best matching of a graph chain_struct - chained structure from adjacency lists of a graph check_graph - checks a Scilab graph list circuit - nds a circuit or the rank function in a directed graph con_nodes - set of nodes of a connected component connex - connected components contract_edge - contracts edges between two nodes

min_lcost_flow2 - minimum linear cost ow convex_hull - convex hull of a set of points in the plane cycle_basis - basis of cycle of a simple undirected graph delete_arcs - deletes all the arcs or edges between a set of nodes delete_nodes - deletes nodes edge_number - number of edges of a graph edit_graph - graph and network graphical editor min_qcost_flow - minimum quadratic cost ow min_weight_tree - minimum weight spanning tree neighbors - nodes connected to a node netclose - closes an edit graph window netwindow - selects the current edit graph window netwindows - gets the numbers of edit graph windows node_number - number of nodes of a graph

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

115

nodes_2_path - path from a set of nodes nodes_degrees - degrees of the nodes of a graph path_2_nodes - set of nodes from a path perfect_match - min-cost perfect matching pipe_network - solves the pipe network problem plot_graph - general plot of a graph predecessors - tail nodes of incoming arcs of a node qassign - solves a quadratic assignment problem salesman - solves the travelling salesman problem save_graph - saves a graph shortest_path - shortest path show_arcs - highlights a set of arcs show_graph - displays a graph show_nodes - highlights a set of nodes split_edge - splits an edge by inserting a node strong_con_nodes - set of nodes of a strong connected component strong_connex - strong connected components subgraph - subgraph of a graph successors - head nodes of outgoing arcs of a node supernode - replaces a group of nodes with a single node trans_closure - transitive closure

D.18

Language or data translations

ascii - string ascii conversions excel2sci - reads ascii Excel les formatman - translates old NROFF man les in a directory into ascii, tex, html or xml fun2string - generates ascii denition of a scilab function mfile2sci - Matlab M-le to Scilab conversion function mtlb_load - load variables from le with Matlab4 format. mtlb_save - save variables on le with matlab4 format. pol2tex - convert polynomial to TeX format sci2for - scilab function to Fortran routine conversion texprint - TeX output of Scilab object translatepaths - convert a set of Matlab M-les directories to Scilab tree2code - generates ascii denition of a Scilab function

D.19

PVM parallel toolbox

AdCommunications - advanced communication toolbox for parallel programming Example - just to test the environment pvm - communications with other applications using Parallel Virutal Machine pvm_addhosts - add hosts to the virtual machine. pvm_barrier - blocks the calling process until all processes in a group have called it.

D.17

Sound le handling

analyze - frequency plot of a sound signal auread - load .au sound le auwrite - writes .au sound le lin2mu - linear signal to mu-law encoding loadwave - load a sound <<wav>> le into scilab mapsound - Plots a sound map mu2lin - mu-law encoding to linear signal playsnd - sound player facility savewave - save data into a sound <<wav>> le. sound - sound player facility wavread - load .wav sound le wavwrite - writes .wav sound le

pvm_bcast - broacasts a message to all members of a group pvm_bufinfo - Returns information about a message buer. pvm_config - sends a message pvm_delhosts - deletes hosts from the virtual machine. pvm_error - Prints message describing an error returned by a PVM call pvm_exit - tells the local pvmd that this process is leaving PVM. pvm_f772sci - Convert a F77 complex into a complex scalar pvm_get_timer - Gets the systems notion of the current time. pvm_getinst - returns the instance number in a group of a PVM process. pvm_gettid - returns the tid of the process identied by a group name and instance number

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

116

pvm_gsize - returns the number of members presently in the named group. pvm_halt - stops the PVM daemon pvm_joingroup - enrolls the calling process in a named group. pvm_kill - Terminates a specied PVM process. pvm_lvgroup - Unenrolls the calling process from a named group. pvm_mytid - returns the tid of the calling process. pvm_parent - tid of the process that spawned the calling process. pvm_probe - Check if message has arrived. pvm_recv - receive a message. pvm_reduce - Performs a reduce operation over members of the specied group pvm_sci2f77 - Convert complex scalar into F77

systems - a collection of dynamical system tangent - linearization of a dynamical system at an equilibrium point tdinit - interactive initialisation of the tdcs dynamical systems

D.21

TCL/Tk interface

ScilabEval - tcl instruction : Evaluate a string with scilab interpreter TK_EvalFile - Reads and evaluate a tcl/tk le TK_EvalStr - Evaluate a string whithin the tcl/tk interpreter TK_GetVar - Get a tcl/tk variable value TK_SetVar - Set a tcl/tk variable value close - close a gure figure - create a gure

pvm_send - immediately sends (or multicast) data. pvm_set_timer - Sets the systems notion of the current time. pvm_spawn - Starts new Scilab processes. pvm_spawn_independent - Starts new PVM processes. pvm_start - Start the PVM daemon pvm_tasks - information about the tasks running on the virtual machine. pvm_tidtohost - returns the host of the specied PVM process. pvmd3 - PVM daemon covar - covariance of two variables findobj - nd an object with specied property uicontrol - create a Graphic User Interface object uimenu - Create a menu or a submenu in a gure

D.22

Statistic basics

center - center wcenter - center and weight cmoment - central moments of all orders correl - correlation of two variables

D.20

TdCs

ftest - Fischer ratio ftuneq - Fischer ratio for samples of unequal size. geomean - geometric mean harmean - harmonic mean

artest - arnold dynamical system bifish - shows a bifurcation diagram in a sh population discrete time model boucle - phase portrait of a dynamical system with observer chaintest - a three-species food chain model gpeche - a shing program fusee - a set of Scilab macro for a landing rocket problem lotest - demo of the Lorenz attractor mine - a mining problem obscont1 - a controlled-observed system portr3d - 3 dimensional phase portrait. portrait - 2 dimensional phase portrait. recur - a bilinear recurrent equation

iqr - interquartile range labostat - Statistical toolbox for Scilab mad - mean absolute deviation mean - mean (row mean, column mean) of vector/matrix entries meanf - weighted mean of a vector or a matrix median - median (row median, column median) of vector/matrix entries moment - non central moments of all orders msd - mean squared deviation mvvacov - computes variance-covariance matrix

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

117

nancumsum - Thos function returns the cumulative sum of the values of a matrix nand2mean - dierence of the means of two independent samples nanmax - max (ignoring Nans) nanmean - mean (ignoring Nans) nanmeanf - mean (ignoring Nans) with a given frequency. nanmedian - median of the values of a numerical vector or matrix nanmin - min (ignoring Nans) nanstdev - standard deviation (ignoring the NANs). nansum - Sum of values ignoring NANs nfreq - frequence of the values in a vector or matrix pca - Principal components analysis perctl - computation of percentils quart - computation of quartiles regress - regression coecients of two variables sample - Sampling with replacement samplef - sample with replacement from a population and frequences of his values. samwr - Sampling without replacement st_deviation - standard deviation (row or columnwise) of vector/matrix entries stdev - standard deviation (row or column-wise) of vector/matrix entries stdevf - standard deviation strange - range tabul - frequency of values of a matrix or vector thrownan - eliminates nan values trimmean - trimmed mean of a vector or a matrix variance - variance of the values of a vector or matrix variancef - standard deviation of the values of a vector or matrix

cdfchn - cumulative distribution function non-central chi-square distribution

cdff - cumulative distribution function F distribution

cdffnc - cumulative distribution function non-central f-distribution

cdfgam - cumulative distribution function gamma distribution

cdfnbn - cumulative distribution function negative binomial distribution

cdfnor - cumulative distribution function normal distribution

cdfpoi - cumulative distribution function poisson distribution

cdft - cumulative distribution function Students T distribution

grand - Random number generator(s)

D.24

Identication

findABCD - discrete-time system subspace identication

findAC - discrete-time system subspace identication

findBD - initial state and system matrices B and D of a discrete-time system

findBDK - Kalman gain and B D system matrices of a discrete-time system

findR - Preprocessor for estimating the matrices of a linear time-invariant dynamical system

D.23

Cumulative Distribution Functions; Inverses, grand

findx0BD - Estimates state and B and D matrices of a discrete-time linear system

inistate - Estimates the initial state of a discretetime system

cdfbet - cumulative distribution function Beta distribution cdfbin - cumulative distribution function Binomial distribution cdfchi - cumulative distribution function chi-square distribution sident - discrete-time state-space realization and Kalman gain

sorder - computing the order of a discrete-time system

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

118

D.25

Matlab to Scilab conversion tips

mtlb_eye - Matlab eye emulation function mtlb_false - Matlab false emulation function mtlb_fft - Matlab t emulation function mtlb_find - Matlab nd emulation function

About_M2SCI_tools - Generally speaking about tools to convert Matlab les to Scilab... Cste - Create a tree representing a constant

mtlb_full - Matlab full emulation function Equal - Create a tree representing an instruction mtlb_hold - Matlab hold emulation function Funcall - Create a tree representing a function call mtlb_i - Matlab insertion emulation function Infer - Create a tree containing inference data mtlb_imp - Matlab colon emulation function Matlab-Scilab_character_strings - Generally speaking about... Operation - Create a tree representing an operation Type - Create a tree containing type inference data Variable - Create a tree representing a variable asciimat - string matrix to ASCII conversion firstnonsingleton - Finds rst dimension which is not 1 m2scideclare - Giving tips to help M2SCI... mstr2sci - character string matrix to character matrix conversion mtlb_0 - Matlab non-conjugate transposition emulation function mtlb_a - Matlab addition emulation function mtlb_all - Matlab all emulation function mtlb_any - Matlab any emulation function mtlb_beta - Matlab beta emulation function mtlb_box - Matlab box emulation function mtlb_close - Matlab close emulation function mtlb_colordef - Matlab colordef emulation function mtlb_conv - Matlab conv emulation function mtlb_cumprod - Matlab cumprod emulation function mtlb_cumsum - Matlab cumsum emulation function mtlb_dec2hex - Matlab dec2hex emulation function mtlb_delete - Matlab delete emulation function mtlb_diag - Matlab diag emulation function mtlb_diff - Matlab di emulation function mtlb_dir - Matlab dir emulation function mtlb_double - Matlab double emulation function mtlb_e - Matlab extraction emulation function mtlb_eig - Matlab eig emulation function mtlb_eval - Matlab eval emulation function mtlb_exist - Matlab exist emulation function mtlb_logic - Matlab logical operators emulation function mtlb_logical - Matlab logical emulation function mtlb_lower - Matlab lower emulation function mtlb_max - Matlab max emulation function mtlb_min - Matlab min emulation function mtlb_more - Matlab more emulation function mtlb_norm - Matlab norm emulation function mtlb_num2str - Matlab num2str emulation function mtlb_ones - Matlab ones emulation function mtlb_plot - Matlab plot emulation function mtlb_prod - Matlab prod emulation function mtlb_rand - Matlab rand emulation function mtlb_randn - Matlab randn emulation function mtlb_rcond - Matlab rcond emulation function mtlb_s - Matlab substraction emulation function mtlb_setstr - Matlab setstr emulation function mtlb_size - Matlab size emulation function mtlb_strcmp - Matlab strcmp emulation function mtlb_strcmpi - Matlab strcmpi emulation function mtlb_strfind - Matlab strnd emulation function mtlb_strrep - Matlab strrep emulation function mtlb_sum - Matlab sum emulation function mtlb_t - Matlab transposition emulation function mtlb_int16 - Matlab int16 emulation function mtlb_int32 - Matlab int32 emulation function mtlb_int8 - Matlab int8 emulation function mtlb_is - Matlab string insertion emulation function mtlb_isa - Matlab isa emulation function mtlb_isspace - Matlab isspace emulation function mtlb_l - Matlab left division emulation function

Introduo ao Scilab-Verso 3.0/PSMP/DCA-UFRN ca a

119

mtlb_toeplitz - Matlab toeplitz emulation function mtlb_tril - Matlab tril emulation function mtlb_triu - Matlab triu emulation function mtlb_true - Matlab true emulation function mtlb_uint16 - Matlab uint16 emulation function

mtlb_uint32 - Matlab uint32 emulation function mtlb_uint8 - Matlab uint8 emulation function mtlb_upper - Matlab upper emulation function mtlb_zeros - Matlab zeros emulation function sci_files - How to write conversion functions

Referncias Bibliogrcas e a
[1] Scilab Group, Introduction to Scilab - Users Guide. Esta referncia, e outras escritas pelo e Scilab Group, podem ser obtidas em http://scilabsoft.inria.fr/doc.html, acessada em julho de 2004. [2] Jesus Olivan Palacios, An Introduction to the Treatment of Neurophysiological Signals using Scilab - version 0.02, Maio de 2001, http://www.neurotraces.com/scilab/scilab2/ node2.html, acessada em julho de 2004. [3] Bruno Pion, Une introduction ` Scilab, version 0.996, dispon em http://www-rocq. c a vel inria.fr/scilab/books, acessada em maio de 2004. [4] L.E. van Dijk, C.L. Spiel, Scilab Bag of Tricks, The Scilab-2.5 IAQ (Infrequently Asked Questions), dispon vel em http://kiwi.emse.fr/SCILAB/sci-bot/sci-bot.pdf, acessada em julho de 2004. [5] Gilberto E. Urroz, Scilab, dispon vel em http://www.engineering.usu.edu/cee/ faculty/gurro/Scilab.html, acessada em junho de 2004. [6] Pramode C.E, Mathematical Explorations with Scilab/Linux, Linux Gazette, Issue 98, Janeiro de 2004, dispon vel em http://linuxgazette.net/issue98/pramode.html, acessada em julho de 2004. [7] Paulo S. Motta Pires, David A. Rogers, Free/Open Source Software: An Alternative for Engineering Students, 32nd ASEE/IEEE Frontiers in Education Conference, Nov. 6-9, 2002, Boston, MA, USA, dispon em http://fie.engrng.pitt.edu/fie2002/papers/1355. vel pdf. Uma cpia deste trabalho tambm est dispon o e a vel em http://www.dca.ufrn.br/ ~pmotta, acessada em julho de 2004. [8] Scilab//, http://www,ens-lyon.fr/~desprez/FILES/RESEARCH/SOFT/SCILAB, acessada em julho de 2004. [9] Paulo S. Motta Pires, Mtodos Computacionais - Notas de Aula, dispon e vel em http: //www.dca.ufrn.br/~pmotta, acessada em julho de 2004.

120

Você também pode gostar