Apostila Scilab

Embed Size (px)

Citation preview

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

ResumoScilab 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 [email protected]. a o

i

AgradecimentosA 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 caEste 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/

1

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 aScilab - 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

v

Lista de Figuras2.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, ). . . . . . . . . . . . . . . . . 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 Tabelas2.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 o1 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 caScilab1 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

1

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

2

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 [email protected]. 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

3

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 ScilabNeste 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

4

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

5

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 eO 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

6

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

7

-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

8

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

9

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/paulo5 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

b

-->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 aScilab 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 aScilab 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

b

--> // 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

b

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 ca1 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 ListasNo 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= . . .

R

R

R

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

R,

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

R

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.

1

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): can

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

R

Rn1, podemos

e

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

R

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= . . . . . .

R

R

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 ,

R

am,1 am,2

R

A=

1 2 3 5 8 9

e

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

R

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.

R

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

R

-->// 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 ]

R

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

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

R

-->// 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

e

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

R

R

R

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. !

R

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

R

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 !

R

R

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 caUma 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 whi