Você está na página 1de 76

Introduo ao Scilab ca Verso 1.

0 a

Prof. Paulo Srgio da Motta Pires e

Departamento de Engenharia de Computaao e Automaao c c Universidade Federal do Rio Grande do Norte Natal-RN, Novembro de 2001

Resumo
O 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, o Scilab a e e gratuito (Free software) e distribu com o cdigo fonte (Open Source software). e do o Este um documento sobre a utilizao e as principais caracter e ca sticas deste ambiente de importante ressaltar que as referncias denitivas permanecem sendo programao numrica. E ca e e os manuais que acompanham o software. Por exemplo, podemos citar Introduction to Scilab [1], documento no qual este texto se baseia. O objetivo principal apresentar um texto introdutrio, em portugus, sobre o Scilab. Nose o e so 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. O objetivo secundrio demonstrar que a utilizao de Free/Open Source software, do ponto a e ca de vista do usurio, traz vantagens. Algumas dessas vantagens, enumeradas em [2], so : a a A ultima verso do software est sempre dispon a a vel, geralmente via Internet; 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 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 valor principal a irrestrita e difuso do conhecimento. a

Este documento pode ser copiado e distribu livremente, mantidos os crditos. do e

A verso mais recente deste texto 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 i

Agradecimentos
A Ao Klaus Steding-Jessen, pelo L TEX demo. A maioria das informaes sobre como se faz co A X podem ser encontradas no documento escrito pelo Klaus1 ; isso em L TE Ao Dr. Jesus Olivan Palacios, pelas conversas sobre o Scilab;

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

ii

Histrico 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. Disponibia ca co lizao deste documento no site do Scilab - INRIA (http://www-rocq.inria.fr/scilab/ ca books.html)

Este trabalho foi totalmente desenvolvido utilizando Free/Open Source software. O Scilab ca ca 2.62 foi instalado no Linux distribuio Slackware 7.13 , kernel 2.2.164 . A digitao foi feita A usando o Xemacs5 . Os textos em L TEX e as guras em extended postscript, eps, foram transformados em pdf atravs de pdatex e epstopdf, respectivamente. e
2 3

Pgina a Pgina a 4 Pgina a 5 Pgina a

do do do do

Scilab : http://www-rocq.inria.fr/scilab/ Linux distribuiao Slackware : http://www.slackware.com c kernel Linux http://www.kernel.org Xemacs http://www.xemacs.org

iii

Sumrio a
Scilab - Verso 1.0 a Resumo . . . . . . Agradecimentos . . Histrico . . . . . . 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 Algumas Funes Primitivas . . . . . . co 2.4 Variveis Especiais . . . . . . . . . . . a 2.5 Manipulao de Arquivos e Diretrios ca o 2.5.1 Comandos de Edio . . . . . . ca 2.5.2 Exemplos de Operaes . . . . co 3 Polinmios, Vetores, Matrizes e Listas o 3.1 Polinmios . . . . . . . . . . . . . . . o 3.2 Vetores . . . . . . . . . . . . . . . . . 3.3 Matrizes . . . . . . . . . . . . . . . . . 3.4 Matrizes com Polinmios . . . . . . . o 3.5 Matrizes Simblicas . . . . . . . . . . o 3.6 Matrizes Booleanas . . . . . . . . . . . 3.7 Operaes com Matrizes . . . . . . . . co 3.8 Acesso a Elementos de Matrizes . . . . 3.9 Listas . . . . . . . . . . . . . . . . . . 4 Programao ca 4.1 Comandos para Iteraes . . . co 4.1.1 O Loop for . . . . . . . 4.1.2 O Loop while . . . . . . 4.2 Comandos Condicionais . . . . 4.2.1 Comando if-then-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . i . ii . iii . iv . vi . vii . viii 1 3 . 3 . 4 . 6 . 7 . 8 . 12 . 12 17 17 19 20 22 23 24 25 26 32 35 35 35 37 39 39

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

iv

4.3

4.2.2 Comando select-case . . . . . . . Denindo Funes . . . . . . . . . . . . . . co 4.3.1 Estrutura das Funes . . . . . . . . co 4.3.2 Variveis Globais e Variveis Locais a a 4.3.3 Comandos Especiais . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

40 41 41 47 49 51 51 56 56 58 58

5 Grcos a 5.1 Grcos Bi-dimensionais . . . a 5.1.1 Outros Comandos . . 5.1.2 Grcos 2D Especiais a 5.2 Grcos Tri-dimensionais . . a 5.2.1 Grcos 3D Especiais a

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

A Instalao do Scilab ca 59 A.1 Instalao no Linux Slackware - Cdigo Fonte . . . . . . . . . . . . . . . . . . . . 59 ca o B Ligao do Scilab com Programas em C ca 62 B.1 A Ligao Dinmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 ca a Referncias Bibliogrcas e a 67

Lista de Figuras
2.1 2.2 5.1 5.2 5.3 5.4 5.5 Tela inicial do Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Tela de help sobre a funo sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 ca Janela grca do Scilab . . . a Grco de sen(2t) . . . . . . a Grcos com plot2di() . . a Curvas identicadas . . . . . Grco de um campo vetorial a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 53 55 56 57

vi

Lista de Tabelas
2.1 3.1 4.1 5.1 Teclas de edio de linha de comando . . . . . . . . . . . . . . . . . . . . . . . . 12 ca Sintaxe de comandos usados em operaes matriciais . . . . . . . . . . . . . . . . 26 co Operadores condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Valores de i para o comando plot2di() . . . . . . . . . . . . . . . . . . . . . . . 53

vii

Lista de Cdigos o
1 2 3 4 5 Programa principal, Runge-Kutta . . . . . . . A funo f(x,y) . . . . . . . . . . . . . . . . ca A soluo exata da equao diferencial . . . . ca ca Programa para resolver um sistema triangular Funo Runge-Kutta escrita em C . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 43 43 46 64

viii

Cap tulo 1

Introduo ca
O Scilab1 um ambiente voltado para o desenvolvimento de software para resoluo de e ca problemas numricos. Foi criado e mantido por um grupo de pesquisadores do INRIA2 e e e do ENPC3 . O Scilab gratuito, Free software, e distribu com o cdigo fonte, Open Source e do o software. O software disponibilizado, tambm, em verses pr-compiladas para vrias platafore e o e a mas. O objetivo principal apresentar um texto introdutrio, em portugus, sobre o Scilab. Nose o e so 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 importante ressaltar que as referncias denitivas permanecem sendo os cional e correlatas. E e manuais que acompanham o software. Por exemplo, podemos citar Introduction to Scilab [1], documento no qual este texto se baseia. O objetivo secundrio mostrar que a utilizao de Free/Open Source software, do ponto a e ca de vista do usurio, sempre traz vantagens. Algumas delas [2], a A ultima verso do software est sempre dispon a a vel, geralmente via Internet; 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 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 valor principal a irrestrita e difuso do conhecimento. a Este documento, desenvolvido dentro das premissas dos pargrafos precedentes, est dividido a a em cinco Cap tulos e dois Apndices. Neste Cap e tulo, mostramos o contexto no qual o programa e este trabalho esto inseridos. a
1 2

Pgina do Scilab: http://www-rocq.inria.fr/scilab a Pgina do INRIA : http://www.inria.fr a 3 Pgina do ENPC : http://www.enpc.fr a

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

No Cap tulo 2, apresentamos uma viso geral das principais caracter a sticas do Scilab. Descrevemos as suas diversas opes e comandos bsicos utilizados na edio de linha de comandos. co a ca Mostramos, tambm, alguns exemplos de operaes que podem ser realizadas com o software. e co O Cap tulo 3 dedicado aos vrios tipos de dados que podem ser manipulados pelo Scilab. e a No Cap tulo 4, apresentamos exemplos de desenvolvimento de programas no Scilab e, nalizando, no Cap tulo 5 utilizamos diversos comandos do Scilab voltados para a gerao de ca grcos. a No Apndice A, apresentamos os procedimentos para a instalao do software a partir do e ca cdigo fonte. Descrevemos os principais arquivos, diretrios e todos os procedimentos para a o o instalao em mquinas com o sistema operacional Linux (a instalao foi realizada em uma ca a ca mquina com distribuio Slackware 7.1, kernel verso 2.2.16). Os procedimentos para a instaa ca a lao das distribuies binrias, por serem espec ca co a cos de cada plataforma, no so apresentados. a a O usurio aconselhado a buscar estas informaes na pgina do Scilab. a e co a No Apndice B, apresentamos um procedimento que permite executar cdigos escritos em e o linguagem C dentro do ambiente do Scilab. Por tratar-se de um texto introdutrio, deixamos de apresentar outras caracter o sticas do ambiente Scilab que, entretanto, podem ser consultadas nas referncias [3, 4, 5, 6, 7, 8]. e Acreditamos que a maneira mais adequada de ler este documento em frente a um computae dor com o Scilab instalado e funcionando. Os exemplos apresentados e a prpria funcionalidade o do software podero, desta forma, ser explorados com mais ecincia. Comentrios ou sugestes a e a o sobre esse documento podem ser enviados para pmotta@dca.ufrn.br. A ultima verso deste a trabalho encontra-se dispon em http://www.dca.ufrn.br/~pmotta. vel

Cap tulo 2

O Ambiente Scilab
A interao do usurio com o Scilab pode ocorrer de duas formas distintas. Na primeira, ca a os comando so digitados diretamente no prompt do Scilab. Neste modo, o programa funciona a como se fosse uma sosticada e poderosa calculadora. Na segunda, um conjunto de comandos digitado em um arquivo texto. Este arquivo, em seguida, levado para o ambiente Scilab e e 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 co o Scilab funcionando como uma sosticada calculadora. O objetivo a familiarizao com o e ca software. O Scilab como ambiente de programao apresentado no Cap ca e tulo 4.

2.1

Introduao c

O 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. E um ambiente poderoso para gerao de grcos; ca a 3. Implementa diversas funes para manipulao de matrizes. As operaes de concateco ca co nao, acesso e extrao de elementos, transposio, adio e multiplicao de matrizes ca ca ca ca ca so facilmente realizadas; a 4. Permite trabalhar com polinmios, funes de transferncia, sistemas lineares e grafos; o co e 5. Apresenta facilidades para a denio de funes. As funes podem ser passadas para ca co co outras funes como argumento de entrada ou de sa co da; 6. Permite interface com rotinas escritas nas linguagens FORTRAN, C ou Maple1 ;
O Maple um ambiente de programaao voltado para processamento simblico. Informaoes sobre este e c o c software podem ser obtidas em http://www.maplesoft.com
1

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

7. Suporta o desenvolvimento de conjuntos de funes voltadas para aplicaes espec co co cas (os chamados toolboxes). Alm dos toolboxes desenvolvidos pelo Grupo Scilab [3, 4, 5, 6, 7], outros esto dispon e a veis tambm gratuitamente. Para exemplicar, destacamos o ANN (Articial Neural Network Toole box), para redes neurais, o FISLAB (Fuzzy Logic Inference Toolbox), para lgica difusa, e o FRAo CLAB (Fractal, Multifractal and Wavelet Analysis Toolbox), para anlise com fractais e wavelets. a Existem, ainda, trabalhos desenvolvidos tendo o Scilab como ferramenta, como o apresentado em [2], e outros documentos introdutrios [9, 10]. Tambm, o Scilab, atravs de uma extenso o e e a chamada de Scilab Paralelo [11], Scilab//, pode ser executado em mquinas paralelas ou a em redes de estaes de trabalho, as NOWs - Network of Workstations. Processos podem ser co ativados, programas podem ser executados em estaes remotas, com comunicao entre eles, e co ca os resultados agregados.

2.2

O Ambiente Grco do Scilab a

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

Figura 2.1: Tela inicial do Scilab Na Figura 2.1, observamos que o prompt do Scilab representado por uma seta, -->. e Este prompt chamado de prompt de primeiro n e vel. Ainda na Figura 2.1, podemos observar a existncia de um menu horizontal com cinco opes: File , Control , Demos , e co
O programa Scilab pode ser executado, tambm, em ambiente texto. 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.
2

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

Graphic Window 0 e Help . Utilizando o mouse, e colocando o cursor em cima de cada uma das opes, vericamos que: co A opo File possui trs sub-opes : ca e co Opo File Operations, que permite carregar arquivos, funes e executar prograca co mas, entre outras aes. co Opo Kill, que permite interromper de maneira abrupta o processamento, saindo ca do ambiente Scilab. Opo Quit, que permite sair do Scilab de forma normal. ca A opo Control possui quatro sub-opes : ca co Resume - continua a execuo aps uma pause ter sido dada atravs de um comando ca o e em uma funao ou atravs de Stop ou Ctrl-c. c e Abort - aborta a execuo aps uma ou vrias pause, retornando ao prompt de ca o a primeiro n vel. Restart - restaura todas as variveis e executa os programas de inicializao. a ca Stop - interrompe a execuo do Scilab e entra em modo pause. ca A opo Demos - permite executar os vrios programas de demonstrao que acompaca a ca interessante, no primeiro contato com o programa, executar nham a distribuio Scilab. E ca algumas das rotinas de demonstrao. ca A opo Graphics Window 0 possui cinco sub-opes para manipulao de janelas grca co ca a cas : Set (Create) Window Raise (Create) Window Delete Graphics Window - permite apagar uma janela grca, a + A opo Help permite obter informaes sobre o Scilab. Na verso 2.6, o Help est ca co a a dispon para : vel Scilab Programming - biblioteca de comandos que podem ser utilizados na programao com o Scilab; ca Graphic Library - biblioteca de comandos grcos; a Elementary Functions - funes elementares; co Input/output Functions - funes para entrada e sa de dados; co da Handling of functions and libraries - funes para manipulao de funes e co ca co bibliotecas; Character string manipulations - funes para manipulao de strings; co ca Dialogs - funes que permitem a criao de dilogos (menus, por exemplo); co ca a

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a Utilities - funes com utilidades diversas; co Linear Algebra - biblioteca de comandos usados em lgebra linear; a

Polynomial calculations - biblioteca de comandos usados em clculos com polinmios; a o Cumulative Distribution Functions, Inverse, grand - funes de distribuio co ca cumulativa, inversa e geradora de nmeros randmicos; u o General System and Control macros - biblioteca de funes de controle; co Robust control toolbox - funes do toolbox de controle robusto; co Non-linear tools (optimization and simulation) - biblioteca de funes noco a lineares para utilizao em otimizao e simulao; ca ca ca Signal Processing toolbox - funes do toolbox de processamento de sinais; co Fractal Signal Analysis - biblioteca de funes para anlise de sinais utilizando co a fractais; Arma modelization and simulation toolbox - funes do toolbox para modelaco mento e simulao ARMAX; ca Metanet : de grafos; graph e network toolbox - funes do toolbox Metanet para anlise co a

Scicos: Block diagram editor and simulator - funes para modelagem e simco ulao de sistemas dinmicos; ca a wav file handling - funes para manipulao de arquivos wav; co ca Language or data translations - funes para converso de dados entre o Scilab co a e alguns aplicativos; PVM parallel toolbox - funes que permitem o gerenciamento da comunicao co ca com outras aplicaes usando mquinas paralelas virtuais; co a GECI Communication toolbox - funes do toolbox de comunicao GECI. Este toolco ca aconselhvel, portanto, utilizar box ser removido nas prximas verses do Scilab. E a o o a o PVM parallel toolbox; TdCs - outro conjunto de funes com utilidades diversas, e. co TCL/Tk Interface - funes que permitem a interface com as linguagens TCL/Tk. co

2.3

Algumas Funoes Primitivas c

O Scilab carregado com algumas funes pr-denidas, chamadas de primitivas. Algumas e co e destas funes : co Funes elementares : sum, prod, sqrt, diag, cos, max, round, sign, fft; co Funes para ordenao : sort, gsort, find; co ca Matrizes espec cas : zeros, eye, ones, matriz, empty; Funes de lgebra linear : det, inv, qr, svd, bdiag, spec, schur; co a Polinmios : poly, roots, coeff, horner, clean, freq; o

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a Sistemas lineares : syslin; Nmeros randmicos : rand u o

Funes de programao : function, deff, argn, for, if, end, while, select, co ca warning, erro, break, return; S mbolos de comparao : ==, >=, = &, |, <=, >, <; ca Execuo de arquivos : exec; ca Depurao : pause, return, abort; ca Splines, interpolao : splin, interp, interpln; ca Manipulao de strings : string, part, evstr, execstr; ca Grcos : plot, xset, driver, plot2d, xgrid, locate, plot3d; a Resoluo de equaes diferenciais : ode, dassl, dassrt, odedc; ca co Otimizao : optim, quapro, linpro, lmitool; ca Sistemas dinmicos : scicos e a Rotinas C ou FORTRAN : link, fort, addinter, intersi.

2.4

Variveis Especiais a

Existem variveis especiais que so pr-denidas no Scilab. Elas so protegidas e no podem a a e a a ser apagadas. Algumas destas variveis so prexadas com o caracter % e podem ser vistas a a atravs do comando who, e -->who your variables are... startup ierr demolist %scicos_display_mode scicos_pal %scicos_menu %scicos_short MSDOS home PWD TMPDIR percentlib xdesslib utillib tdcslib siglib s2flib roblib metalib elemlib commlib polylib autolib armalib intlib mtlblib SCI %F %T %z %nan %inf $ %t %f %eps %i %e using 6036 elements out of 1000000. and 45 variables out of 1791

%helps soundlib optlib alglib %s %io

-->

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

No prompt do Scilab, os comandos s so interpretados aps o usurio pressionar a tecla o a o a Enter. A varivel %i representa ( 1), %pi a varivel que representa = 3, 1415926. . . , e %e a a e a e varivel que representa a constante de Euler e = 2.7182818. . . . Uma outra varivel pr-denida a a e %eps que representa a preciso da mquina na qual o Scilab est instalado (%eps o maior e a a a e nmero para o qual 1+%eps = 1). So pr-denidas, ainda, as variveis %inf que signica u a e a Innito e %nan que signica No um Nmero (NotANumber). A varivel %s denida pela a e u a e funo s = poly(0, s). ca No Scilab so denidas, tambm, variveis com valores booleanos : %T signicando vera e a dadeiro (true) e %F signicando falso (false). Uma ateno especial deve ser dada `s variveis SCI e PWD. Elas representam, respectivaca a a mente, o diretrio no qual o Scilab foi instalado3 e o diretrio no qual o Scilab foi lanado e o o c est rodando. A varivel home possui valor idntico ao da varivel PWD. a a e a -->SCI SCI = // Diretorio no qual o Scilab foi instalado

/usr/local/scilab-2.6 -->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 colocando-as no arquivo home/.scilab. a e o a // Mesmo valor de PWD // Diretorio no qual o Scilab foi lancado

2.5

Manipulaao de Arquivos e Diretrios c o

Como foi mostrado nos exemplos anteriores, uma linha de comentrios sempre comea com a c os caracteres //. E importante salientar que os comentrios (e os nomes das variveis e funes a a co utilizadas no Scilab) NAO devem ter qualquer tipo de acentuao. O Scilab possui funes que ca co podem ser utilizadas para manipular arquivos e diretrios. A funo pwd, no confundir com a o ca a varivel PWD da seo anterior, mostra o diretrio no qual estamos trabalhando. Assim, a ca o -->pwd ans
3

// Mostra o diretorio de trabalho

Ver Apndice A e

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

/home/paulo --> Com a funo chdir, mudamos para o diretrio de trabalhoteste, ca o -->chdir(teste) ans = 0. --> O valor de pwd foi alterado mas o valor da varivel PWD permanece inalterada, como podemos a vericar pela seqncia, ue -->pwd ans = /home/paulo/teste -->PWD PWD = /home/paulo --> As variveis criadas no ambiente Scilab podem ser armazenadas em um arquivo. Vamos a considerar as variveis, a -->a = 1 a = 1. -->b = 2 b = 2. --> Para salvar a e b em um arquivo chamado dados.dat, usamos o 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 1.0/PSMP/DCA-UFRN ca a

10

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

-->b !--error 4 undefined variable : b -->load(dados.dat,a,b) -->a, b a = 1. = 2. --> Outras maneiras de manipular arquivos no Scilab podem ser vericadas em [2]. A funo unix_w permite a comunicao do Scilab com a shell unix. Nesta funo, as ca ca ca respostas so apresentadss na prpria janela do Scilab. 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 1.0/PSMP/DCA-UFRN ca a

11

-->unix_w(ls) Makefile Relatorio.pdf app app.c app.o chromosome.c chromosome.h chromosome.o outro_dir -->chdir(outro_dir) ans = 0. -->pwd ans = /home/paulo/teste/outro_dir --> A qualquer momento, o usurio pode obter informaes sobre funes digitando o comando a co co help <nome-da-funao> no prompt do Scilab ou accessando a funo atravs da opo Help . c~ ca e ca Por exemplo, vamos usar a linha de comando para obter informaes sobre a funo sqrt. co ca Temos, -->help sqrt Surgir uma outra janela, mostrada na Figura 2.2, com todas as informaes sobre a funo a co ca desejada. // Mudando de diretorio

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

12

Figura 2.2: Tela de help sobre a funo sqrt ca A janela fechada usando a opo Close window . e ca

2.5.1

Comandos de Ediao c

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 de linha de comando ca

2.5.2

Exemplos de Operaoes c

No Scilab, o ponto-e-v rgula no nal de um comando inibe a apresentao do resultado. ca

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a -->// O ponto-e-virgula suprime a apresentacao do resultado -->A = 1; -->b = 2; -->A + b ans = 3. --> // Atribuindo a A o valor 1 // Atribuindo a b o valor 2 // Soma de A e b

13

As grandezas no Scilab tambm podem ser complexas. Para atribuir a A o valor complexo e 5 + 2i e a B o valor complexo 2 + i, fazemos -->A = 5 + 2 * %i A = 5. + 2.i -->B = -2 + %i B = - 2. + i --> As variveis A e B podem ser multiplicadas, divididas, somadas e subtra a das, como mostramos a seguir. -->A * B ans = - 12. + i -->A / B ans = - 1.6 - 1.8i -->A + B ans = 3. + 3.i -->A - B // Subtracao // Adicao // Divisao // Multiplicacao // Atribuindo a B o valor -2 + i // Atribuindo a A o valor 5 + 2i

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a ans =

14

7. + i --> E importante observar que a resposta ao uso da funo sqrt() com argumento negativo ca inclui o nmero complexo i = sqrt(-1). u -->sqrt(-2) ans = 1.4142136i --> E poss digitar vrios comandos em uma mesma linha, vel a -->m = 1.5; b = 35; c = 24; --> Tambm poss digitar um unico comando em vrias linhas utilizando ... ao nal do e e vel a comando, -->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 = ! --> O valor do incremento pode ser negativo, 1. 2. 3. ! // Definindo I como um vetor com 3 posicoes // Um comando em varias linhas // Varios comandos em uma unica linha // Funcao raiz quadrada com argumento negativo

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a -->j = 5:-1:1 j = ! --> 5. 4. 3. 2. // Definindo j como um vetor com 5 posicoes

15

1. !

No Scilab existe o conceito de ambientes. Muda-se de ambiente atravs do comando pause. e Todas as variveis denidas no primeiro ambiente so vlidas no novo ambiente. Observar que a a a a mudana de ambiente modica a forma do prompt. Este passa a indicar o ambiente no qual c esto sendo efetuados os comandos. O retorno ao ambiente anterior d-se atravs da utilizao a a e ca dos comandos resume ou return. Com este tipo de retorno, perde-se as variveis denidas no a novo ambiente. A utilizaao de ambientes importante para a realizao de testes. No exemplo c e ca a seguir, atribu mos a a o valor 1.5 e, atravs do comando pause, mudamos de ambiente. e -->// Definindo a e mudando de ambiente -->a = 1.5; pause -1-> // Mudanca no prompt 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->

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

16

O retorno ao ambiente anterior usando o comando resume faz com que a varivel b que a indenida, -1->// Retornando ao ambiente anterior -1->resume // Pode ser usado o comando return

--> Mostrando a e b. Observar que b foi perdido -->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 -->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 --> Neste Cap tulo, apresentamos algumas das caracter sticas do Scilab. Inicialmente, mostramos o ambiente grco com as suas opes. Depois, vimos as variveis pr-denidas, alguns comana co a e dos que permitem a manipulao de arquivos e diretrios e exemplos de atribuio de valores. ca o ca O conceito de ambiente tambm foi apresentado. No Cap e tulo 3, mostramos os tipos de dados que podem ser manipulados pelo Scilab. // Mudando de ambiente // Definindo b no novo ambiente // Definindo a no ambiente ooriginal

Cap tulo 3

Polinmios, Vetores, Matrizes e o Listas


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

3.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 = ! ! --> 17 1. ! 2. !

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

18

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 -->q = poly([1 2], s, coeff) q = 1 + 2s -->roots(q) ans = - 0.5 --> 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 -->p + q ans = 2 3 - s + s -->p - q ans = 2 1 - 5s + s --> // Subtracao // Adicao // Divisao // Multiplicacao // Obtendo as raizes do polinomio q

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

19

3.2

Vetores

As grandezas vetoriais so criadas colocando-se seus componentes entre colchetes, [ ]. Os a componentes de um vetor podem ser separados por espao, v c rgula ou por ponto-e-v rgula. E importante observar que elementos entre [ ], separados por espao ou por v c rgula, do origem a a vetores linha. Quando separados por ponto-e-v rgula do origem a vetores coluna. a -->v = [2, -3+%i, 7] v = ! 2. - 3. + i 7. ! // Vetor transposto // Vetor linha

-->v ans = ! 2. ! - 3. - i ! 7. -->w = [2 w = ! 2. 3 ! ! ! 4]

// Vetor linha : outra forma

3.

4. ! // Vetor coluna

-->z = [ 3; 5; 7] z = ! ! ! --> 3. ! 5. ! 7. !

Lembrar que vetores de mesma dimenso podem ser somados ou subtra a dos. Podemos, tambm, realizar o produto escalar de um vetor linha por um vetor coluna. A multiplicao e a e ca diviso de um vetor (linha ou coluna) por um escalar tambm podem ser facilmente realizadas. a e Nos exemplos a seguir, mostramos outras maneiras de construir vetores, -->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 =

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a ! 1. 1. 1. 1. ! // Vetor constituido de elementos iguais a 0

20

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

0. !

3.3

Matrizes

Vamos considerar as matrizes : A= e b= 1 2 3 4 5 6 1 2 3 5 8 9

Os elementos que constituem as linhas das matrizes so separados por espaos ou por v a c rgulas. A indicao de trmino de cada linha da matriz feita com ponto-e-v ca e e rgula1 . Nos exemplosa 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, -->// Matriz A(2 x 3) - Elementos das linhas separados por espaco -->A = [1 2 3; 5 -8 9] A = ! ! 1. 5. 2. - 8. 3. ! 9. !

-->// Matriz b (2 x 3) - Elementos das linhas separados por virgulas -->b = [1, 2, 3; 4, 5, 6] b = ! ! --> Usamos a funo ones para criar a matriz c2x3 , com todos os elementos iguais a 1, ca
1

1. 4.

2. 5.

3. ! 6. !

Uma matriz pode ser vista como um vetor coluna formado por um ou por vrios vetores linha a

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a -->c = ones(2,3) c = ! ! --> Finalmente, a matriz A multiplicada pela matriz c transposta2 . e -->A * c ans = ! ! --> 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. ! 6. 6. 6. ! 6. ! 1. 1. 1. 1. 1. ! 1. !

21

-->// Definindo uma matriz E a partir dos elementos de D -->E = matrix(D,3,4) E = ! ! ! -->
2 Lembrar que, para que duas matrizes possam ser multiplicadas, o nmero de colunas da primeira matriz deve u ser igual ao nmero de linhas da segunda matriz. u

1. 3. 2.

4. 5. 7.

6. 8. 9.

11. ! 10. ! 12. !

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

22

Observar que a matriz E, com tres linhas e quatro colunas, criada usando a funo matrix. e ca Esta funo gera E a partir da organizao dos elementos da matriz D por colunas. ca ca

3.4

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

-->// Obtendo o determinante de M -->det(M) ans = 2 3 4 1 - 6x - 11x - 6x - x --> 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 = ! 1 1 + s !

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a ! ! ! ! ! ! ! --> 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 s ----2 + s 2 s 1 ! ! ! ! ! ! !

23

s ----3 + s

1 + s 2 s

! ! ! !

2 + s 1

! ! !

3.5

Matrizes Simblicas o

As matrizes simblicas so constitu o a das por elementos compostos por strings de caracteres. Elas so criadas da mesma maneira que as matrizes com elementos numricos. As strings so a e a escritas entre apstrofos ou entre aspas. o -->// Matriz de strings -->A = [x A = !x ! !z y w+v ! ! ! y; z w+v]

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

24

-->// Triangularizacao de A -->At = trianfml(A) At = !z ! !0 w+v z*y-x*(w+v) ! ! !

-->// Atribuindo valores -->x=1;y=2;z=3;w=4;v=5; // Valor das matrizes simbolicas -->evstr(A) ans = ! ! 1. 3. 2. ! 9. !

-->evstr(At) ans = ! ! --> 3. 0. 9. ! - 3. !

3.6

Matrizes Booleanas

Matrizes booleanas so matrizes constru a das com as constantes %t (t true, verdadeiro) e e %f (f e false, falso). Alguns exemplos de construo matrizes booleanas, 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 =

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

25

! 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 ! -->// A e B -->A & B ans = ! T F T F F F ! -->

3.7

Operaoes com Matrizes c

co veis no ambiente Scilab. A Tabela 3.1 apresenta a sintaxe das operaes com matrizes dispon

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a S IMBOLO [ ] ; ( ) ( ) + * \ / ^ .* .\ ./ .^ .*. ./. .\. OPERACAO denio de matriz, concatenao ca ca separador de linhas atribuio do tipo m = a(k) ca atribuio do tipo a(k) = m ca transposta adio ca subtrao ca multiplicao ca diviso ` esquerda a a diviso ` direita 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 diviso de Kronecker ` direita a a diviso de Kronecker ` esquerda a a

26

Tabela 3.1: Sintaxe de comandos usados em operaes matriciais co

3.8

Acesso a Elementos de Matrizes

O acesso a elementos de uma matriz pode ser realizado atravs da indicao expl e ca cita dos ndices do elemento a ser acessado, atravs do s e mbolos : ou $ ou atravs de operaes booleanas. e co Vamos considerar a matriz A com duas linhas e trs colunas, A2x3 , e -->// Definindo uma matriz A -->A = [1 2 3; 4 5 6] A = ! ! --> Observar que a no utilizao do ponto-e-v a ca rgula no nal do comando permite que o resultado do mesmo seja imediatamente apresentado. O acesso a elementos individuais desta matriz e feito da maneira convencional. Por exemplo, para acessar o elemento a12 da matriz A usamos o comando A(2,1), -->// Acessando o elemento A(1,2) 1. 4. 2. 5. 3. ! 6. !

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a -->A(1,2) ans = 2. -->

27

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 = ! ! --> O Scilab implementa formas compactas que permitem acessar elementos de uma matriz. Vamos considerar a matriz A do exemplo anterior. No contexto que se segue, o s mbolo : signica todos os elementos. Assim, o comando A(:,3), faz com que sejam acessados todos os elementos, indicado pelo s mbolo :, da terceira coluna da matriz A, ->// Todos os elementos da terceira coluna -->A(:, 3) 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 a [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 3. ! 6. ! 2. ! 5. !

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

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a ! --> 6. 5. 4. !

28

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($:-1:1, e 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 possui e a duas linhas. Com o comando, A($), acessamos o ultimo elemento de A. -->// 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. Assim, o primeiro elemento da a matriz A pode ser acessado atravs do comando A(1) e o quinto elemento da matriz A pode ser e acessado atravs do comando A(5), e -->// Primeiro -->A(1) ans = 1. elemento de A

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

29

-->// Quinto elemento de A -->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 = ! ! --> 1. ! 5. ! 1. 4. 2. 5. 3. 6. ! ! ! ! ! !

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

30

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]) ans = ! --> 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. ! 2. 3. !

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

31

O Scilab permite a criao e manipulao de matrizes simblicas. Vamos considerar uma ca ca o matriz B1x2 constitu por elementos simblicos, da o -->// Matriz simbolica -->B = [ 1/%s, (%s + 1)/(%s - 1)] B = ! ! ! --> Os elementos de uma matriz simblicas 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 de B, -->// Acessos a elementos de 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) 1 s 1 + s ----- 1 + s ! ! !

-->A($) = %s + 1

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a A ! ! ! --> = s 5 - 1 - 2 3 1 + s ! ! !

32

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

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

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a -->L(2) = list(w, rand(2,2)) L =

33

L(1) 1. L(2)

L(2)(1) w L(2)(2) ! ! 0.2113249 0.7560439 L(3) ! ! --> Mostramos, tambm, o comando necessrio para acessar o elemento (1,2) do segundo elee a mento 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 -->L = tlist([Carro; Cidade; Valores], Natal, [2,3]) L = 1. 1. 1. ! 1. ! 0.0002211 ! 0.3303271 !

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

34

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 exemo plos foram apresentados a partir do prompt do Scilab. No prximo Cap o tulo, vamos mostrar com podemos desenvolver programas na linguagem Scilab.

Cap tulo 4

Programao ca
Uma caracter stica importante do Scilab a possibilidade do usurio criar seus prprios e a o programas. Estes programas so portveis e, portanto, podem ser executados em qualquer a a plataforma que possua o ambiente Scilab. Apesar de simples, a linguagem do Scilab disponibiliza a maioria das estruturas das linguagens convencionais de programao. A diferena principal que, na programao Scilab, no ca c e ca a h a necessidade da declarao prvia do tipo das variveis. a ca e a O Scilab um interpretador. Os programas escritos na linguagem Scilab so, normalmente, e a executados em um tempo maior que os mesmos programas escritos em linguagens compilveis. a Isso acontece, principalmente, com programas utilizados em simulaes e otimizaes. Nesses co co casos, pode ser conveniente escrever o cdigo responsvel pela lentido em uma linguagem o a a convencional (C ou FORTRAN) e rodar esse cdigo dentro do ambiente Scilab. No Apndice o e B, mostramos os procedimentos necessrios ` ligao de cdigos escritos em C com programas a a ca o escritos em Scilab. Deve ser enfatizado, entretanto, que a vantagem na utilizao dos programas ca Scilab advm da facilidade de prototipao e da disponibilidade de uma poderosa biblioteca de e ca funes grcas. Como sempre, cabe ao usurio encontrar a sua soluo de compromisso. co a a ca Os comandos que formam um programa podem ser escritos diretamente no prompt do Scilab. Podem, tambm, ser escritos em um arquivo texto que, posteriormente, carregado no ambiente e e do Scilab.

4.1

Comandos para Iteraoes c

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.

4.1.1

O Loop for

O comando for tem a forma geral : for variavel = vetor_linha instrucao_1 instrucao_2 ... ... instrucao_n end 35

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a A forma acima equivalente ` forma e a --> for variavel=vetor_linha,instrucao_1,instrucao_2, ... ...,instrucao_n,end

36

A primeira forma utilizada quando os programas so escritos em um arquivo (a v e a rgula substitu pela mudana de linha) enquanto a segunda utilizada quando programamos e da c e diretamente no ambiente Scilab. No loop for, o comportamento das iteraes baseado no contedo de um vetor linha. co e u 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 ser igual ao nmero u co a u de componentes do vetor v. Temos, portanto, cinco iteraes. Na primeira iterao, o valor de co ca k ser igual a v(1), que 2, e na ultima iterao o valor de k ser igual a v(5), que vale 6. a e ca a -->v = [2 3 4 5 6] v = ! 2. 3. 4. 5. 6. !

-->y = 0; for k=v, y = y + k, end y = 2. = 5. = 9. = 14. = 20. --> A varivel k do exemplo mostrado pode assumir os valores de um vetor linha escrito de a forma compacta, -->y = 0; for k=2:6, y = y + k, end y = 2. = 5.

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

37

A varivel do comando for tambm pode ser uma lista. Neste caso, a varivel assume os a e a valores dos elementos da lista, -->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 -->

4.1.2

O Loop while

O comando while tem a forma geral,

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

38

Como no caso anterior, a primeira forma utilizada quando os programas so escritos em e a um arquivo (a v rgula substitu pela mudana de linha) enquanto a segunda utilizada e da c e quando programamos diretamente no ambiente Scilab. O loop baseado no while realiza uma seqncia de instrues enquanto uma determinada ue co condio estiver sendo satisfeita. Na Tabela 4.1, apresentamos os operadores que permitem ca fazer comparaes entre valores de objetos no Scilab. co Operadores == ou = < > <= >= <> ou ~= Signicado igual a menor do que maior do que menor ou igual a maior ou igual a diferente

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

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

39

4.2

Comandos Condicionais

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

4.2.1

Comando if-then-else

O comando if-then-else tem a forma geral, 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

A primeira forma utilizada quando os programas so escritos em um arquivo (a v e a rgula substitu pela mudana de linha) enquanto a segunda utilizada quando programamos e da c e diretamente no ambiente Scilab. Observar que a continuao dos comandos foi feita usando ... ca . O if-then-else avalia uma expresso. Se esta expresso for verdadeira, true, executa a a a instruo ou instrues subseqentes. Se for falsa, false, executa a instruo ou instrues aps ca co u ca co o o else ou o elseif, conforme o caso. Alguns exemplos da utilizao do condicional if-thenca else, -->x = 1 x = 1. -->if x > 0 then, y = -x, else, y=x, end y = - 1. -->x = -1 x = // Inicializando

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

40

- 1. -->if x > 0 then, y = -x, else, y=x, end y = - 1. -->

4.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, else, sequencia_de_instrucoes_n+1, end Como citamos anteriormente, a primeira forma utilizada quando os programas so escritos e a em um arquivo (a v rgula substitu pela mudana de linha) enquanto a segunda utilizada e da c e quando programamos diretamente no ambiente Scilab. Como no caso anterior, a continuao ca dos comandos foi feita usando ... . O condicional select-case compara o valor de uma varivel de teste com as vrias exa a presses dos case. Sero executadas as instrues que possuirem o valor da expresso do case o a co a igual ao valor da varivel de teste. Um exemplo do condicional select-case, a -->x = -1 x = - 1. -->select x, case 1, y = x+5, case -1, y = sqrt(x), end y = // Inicializacao

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a i -->

41

4.3

Denindo Funoes c

E poss denir funes dentro do prprio ambiente Scilab. Entretanto, mais conveniente vel co o e utilizar um editor de textos para criar, fora do ambiente Scilab, um arquivo contendo a funo. ca importante observar que o nome desse arquivo no , necessariamente, o nome que deve ser E a e dado ` funo. No Scilab, funes so sinnimos de programas. a ca co a o

4.3.1

Estrutura das Funoes c

Uma funo obedece ao formato, ca function [y1, ..., yn] = foo(x1, ..., xm) instrucao_1 instrucao_2 ... instrucao_p onde foo o nome da funo, xi, i=1,...,m, so os seus argumentos de entrada, yj, j=1,...,n, so e ca a a os seus argumentos de sa e instrucao_i, i=1,...,p, representam a seqncia de instrues da ue co que deve ser executadas pela funo. ca Como primeiro exemplo [12], vamos desenvolver um programa para resolver a equao diferca encial ordinria, a dy = (x y)/2 dx com condio inicial y(0) = 1, utilizando o mtodo de Runge-Kutta de 4a ordem. Vamos ca e considerar o intervalo de integrao igual a [0, 3] e o passo de integrao h = 1/8. A soluo ca ca ca obtida por Runge-Kutta ser comparada com valores da soluo exata que y(x) = 3ex/2 + a ca e x 2. O mtodo Runge-Kutta de 4a ordem representado pelas equaes, e 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 : e h (f1 + 2f2 + 2f3 + f4 ) 6

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

42

Algorithm 1: Mtodo de Runge-Kutta de 4a 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 for Apresentar valores de xk e yk Inicialmente, utilizamos um editor de textos (por exemplo, vi, joe) para, fora do ambiente Scilab, criar o programa. O programa criado mostrado em Cdigo 1. e o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

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]

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

E bvio que nem sempre essa soluao est dispon o c a vel

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

43

1 2 3

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

Cdigo 2: A funo f(x,y) o ca e a soluo exata mostrada em Cdigo 3, ca e o


1 2 3

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

Cdigo 3: A soluo exata da equao diferencial o ca ca Vamos considerar que o programa e as funes estejam em arquivos localizados no diretrio co o onde o Scilab lanado. Assim sendo, o comando e c -->getf(fdexy.sci) --> carrega a funo f(x,y) no ambiente Scilab. Depois, com o comando ca -->getf(fsolucao.sci) --> 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 = ! ! ! ! ! ! ! !
2

// arquivo com a funcao f(x,y) = (x - y)/2

// arquivo com a funcao solucao = 3exp(-x/2)+x-2

// programa 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. 0.9432392 0.8974908 0.8620874 0.8364024 0.8198470 0.8118679 0.8119457

1. 0.9432392 0.8974907 0.8620874 0.8364023 0.8198469 0.8118678 0.8119456

! ! ! ! ! ! ! !

Esta ordem irrelevante. Observe que os nomes das funoes e os nomes dos arquivos que as contm so, e c e a intencionalmente, diferentes.

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! --> 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. 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 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 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

44

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 x/2 + x 2. exata, 3e Como segundo exemplo de programao, [12], 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 peloo algoritmo : ca

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

45

Algorithm 2: Substituio Reversa ca 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 for b(r) soma xr = ar,r end for A matriz aumentada, neste caso, armazenada em um arquivo ASCII puro, que chamamos e de arquivo1. O contedo de arquivo1, digitado com um editor qualuqer, pode ser visto no u ambiente 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 xn = bn
(n)

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

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

46

nl

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

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 Codigo 4, e


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

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

Cdigo 4: Programa para resolver um sistema triangular o

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

47

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

4.3.2

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 f, ca ca function [y1, y2] = f(x1, x2) y1 = x1 + x2, y2 = x1 - x2 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 f. Vamos considerar alguns exemplos de chamadas desta funo. ca ca Inicialmente, a funo carregada e chamada com argumentos x1 = 1 e x2 = 3 tendo seus ca e parmetros de retorno associados `s vriveis m1 e m2. Observe que o Scilab retorna primeiro a a a a o ultimo valor calculado. Observe que y1 e y2, apesar de terem sido calculados dentro da funo ca (denio local), no so denidas no ambiente do Scilab. ca a a -->getf(f1.sci) -->[m1, m2] = f(1,3) m2 = - 2. m1 = 4. --> // Provocando erro : y1 e y2 nao sao globais -->y1 !--error 4 undefined variable : y1 // Carregando a funcao // Retorno associado as variaveis [m1, m2]

-->y2

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a !--error 4 undefined variable : y2 -->

48

Continuando com o exemplo, a funo chamada sem a associao expl ca e ca cita de variveis de a retorno. Este caso como se a funo f tivesse sido chamada com a associao de apenas uma e ca ca 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 vismos, a chamada de uma funo sem que todos os seus argumentos de entrada ca tenham sido previamente denidos ocasiona erro. Os argumentos de entrada devem ser denidos expl citamente na chamada ou atravs de denies via variveis globais. Considerando a funo e co a ca anterior, teremos, como casos interessante (mas no aconselhveis !), os exemplos, a a -->x1 = 2; x2 = 3; -->f() ans = // Definindo x1 e x2 // Chamando 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 1.0/PSMP/DCA-UFRN ca a 5. -->[m1, m2] = f() m2 = - 1. m1 = 5. --> // Retorno associado as variaveis [m1, m2]

49

4.3.3

Comandos Especiais

O Scilab possui alguns comandos especiais que so, exclusivamente, utilizados por funces : a o argn - retorna o nmero de argumentos de entrada e de sa da funo; u da ca error - usado para suspender a execuo de uma funo, apresentar uma mensagem de ca ca erro e retornar para o ambiente anterior quando um erro for detectado; 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, slope = y/x; pause, z = sqrt(slope); s = resume(slope);

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) -->z = foo(0, 1) // Carregando a funcao // Provocando um erro

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a !--error 10000 Divisao por zero at line 5 of function foo z = foo(0, 1) -->

50

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 5, vamos mostrar comandos que podem ser utilizados para traar grcos no ambiente c a Scilab.

Cap tulo 5

Grcos a
Apresentamos alguns comandos que podem ser utilizados para traar grcos bi-dimensionais c a e tri-dimensionais usando o Scilab. Todos os comandos dispon veis na biblioteca grca do Scilab a podem ser acessados atravs da seqncia Help /Graphic Library. e ue

5.1

Grcos Bi-dimensionais a

Grcos bi-dimensionais simples so conseguidos atravs da utilizao da funo plot(x,y). a a e ca ca Esta funo permite traar o grco da varivel y em funo da varivel x. ca c a a ca a A forma geral do comando : e plot(x, y, [xcap, ycap, caption]) onde xcap, ycap e caption so, respectivamente, os nomes dados aos eixos x, y e ao grco. a a Estes trs parmetros so opcionais (esto entre colchetes [ ]). Um exemplo de utilizao deste e a a a ca comando, -->// Definindo abcissas e ordenadas -->t = (0: 0.05: 1); -->y = sin(2 * %pi * t); -->// Comando para tracar o grafico -->plot(t,y,tempo, f(t)=sin(2*%pi*t), Seno)

Aps a execuo desta seqncia de comandos, o grco da funo sin(2t) apresentado o ca ue a ca e em uma janela grca do Scilab. Esta janela mostrada na Figura 5.1. a e

51

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

52

Figura 5.1: Janela grca do Scilab a Observar a existncia, na Figura 5.1, de um menu horizontal com quatro opes : File , e co 2D Zoom , UnZoom e 3D Rot. . Utilizando o mouse para colocar o cursor sobre cada uma das opes, vericamos que : co A opo File possui sete opes que permitem manipular o grco gerado : Clear, ca co a Select, Print,Export, Save, Load e Close. A opo 2D Zoom - permite a ampliao de uma parte do grco. Escolhendo esta opo ca ca a ca e delimitando uma rea, a parte do grco dentro da rea escolhida ser expandida. Esta a a a a opo no tem efeito em grcos tri-dimensionais. ca a a A opo unZoom - desfaz as manipulaes realizadas atravs da opo 2D Zoom ca co e ca A opo 3D Rot - permite efetuar rotaes em grcos tri-dimensionais. Esta opo no ca co a ca a produz nenhum efeito em grcos bi-dimensionais. a O grco resultante pode, ento, ser armazenado em um arquivo. Neste caso, a aparncia a a e do grco a mostrado na Figura 5.2. a e

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

53

Seno f(t) = sin(2 * %pi * t) 1.0 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1.0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

tempo

Figura 5.2: Grco de sen(2t) a A largura da linha, e outros elementos de um grco, so controlados por parmetros globais. a a a Estes parmetros denem um contexto no qual o grco est inserido. Outros parmetros dos a a a a grcos so controlados atravs de argumentos dos prprios comandos usados para traa-los. O a a e o c comando xset sem nenhum argumento, xset(), apresenta um conjunto de opes, chamadas co de Contexto grco da janela grca 0, (Graphic context of graphic window 0), que permitem a a alterar parmetros atravs da utilizao do mouse. a e ca O comando genrico para traar grcos bi-dimensionais o comando : e c a e plot2di(str, x, y, [style, strf, leg, rect, nax]) Diferentes valores de i, ndice da funo plot2di(), determinam um tipo diferente de grco. ca a Na Tabela 5.1, apresentamos os valores permitidos para i e o correspondente tipo de grco a associado. Valor do Indice sem o ndice i = 1 i = 2 i = 3 i = 4 Tipo de Grco a grco linear por partes a anterior com escala logar tmica constante por partes grco de barras verticais a grco com setas a

Tabela 5.1: Valores de i para o comando plot2di() O parmetro str uma string de formato abc. Nesta string, a pode assumir os valores e, o a e ou g enquanto b e c podem assumir os valores l ou n. Os signicados de cada um destes valores so : a

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a a = e - o valor de x no usado. a e a = o - os valores de x so os mesmos para todas as curvas. a a = g - geral. b = l - uma escala logar tmica deve ser usada no eixo X. c = l - uma escala logar tmica deve ser usada no eixo Y.

54

Os parmetros x, y representam duas matrizes de mesmo tamanho, [nl, nc] onde nc o a e nmero de curvas e nl o nmero de pontos de cada curva. Para uma curva simples, este vetor u e u pode ser um vetor linha ou um vetor coluna. Os comandos plot2d(t, cos(t)) e plot2d(t, cos(t)) produzem o mesmo grco. a Nos exemplos a seguir, mostramos a utilizao do comando plot2di(). ca // Demo dos comandos plot2di() // Funcao plot2d() t = (1: 0.1: 8); xset("font", 2, 3); xsetech([0.,0.,0.5,0.5], [-1,1,-1,1]); plot2d([t t], [1.5+2*sin(t) 2+cos(t)]); xtitle(plot2d); titlepage(Linear por partes); // Funcao plot2d1() xsetech([0.5,0.,0.5,0.5], [-1,1,-1,1]); plot2d1(oll, t, [1.5+2*sin(t) 2+cos(t)]); xtitle(plot2d1); titlepage(Escalas Logaritmica); // Funcao plot2d2() xsetech([0.,0.5,0.5,0.5], [-1,1,-1,1]); plot2d2(onn, t, [1.5+2*sin(t) 2+cos(t)]); xtitle(plot2d2); titlepage(Constante por partes); // Funcao plot2d3() xsetech([0.5,0.5,0.5,0.5], [-1,1,-1,1]); plot2d3(onn, t, [1.5+2*sin(t) 2+cos(t)]); xtitle(plot2d3); titlepage(Barras Verticais); xset(default); Os grcos resultantes so mostrados na Figura 5.3. a a

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

55

10

Linear por partes


0
+ +

Escalas Logaritmica

1 3.0 2.8 2.6 2.4 2.2 2.0 1.8 1.6 1.4 1.2 1.0

4 plot2d2

8
+

10 0 10 3.0 2.8 2.6 2.4 2.2 2.0 1.8 1.6 1.4 1.2 1.0 plot2d3

10
+

Constante por partes


+

Barras Verticais
+

Figura 5.3: Grcos com plot2di() a Constinuando a descrio dos argumentos da funo plot2di(), o parmetro style dene ca ca a o estilo a ser usado pela curva. Este parmetro um vetor real de tamanho (1, nc). a e O parmetro strf um string de comprimento trs, xyz, correspondendo a : a e e x = 1 - mostra rtulos o y = 1 - o argumento rect utilizado para especicar os contornos do grco. E um vetor e a com a especicao : rect = [xmin, xmax, ymin, ymax]. ca y = 2 - os contornos do grco so calculados. a a y = 0 - indica o contorno atual. z = 1 - um eixo traado e o nmero de marcas (tics) neste eixo pode ser especicado e c u pelo argumento nax. z = 2 - o grco circundado por um quadrado. a e O parmetro leg uma string de nomes para diferentes curvas. Esta string composta a e e de campos separados por @. As strings so apresentadas abaixo dos grcos. A seqncia de a a ue comandos mostra um exemplo da utilizao do parmetro leg. ca a // Identificacao de curvas x = -%pi:0.3:%pi; y1 = sin(x); y2 = cos(x); y3 = x; X=[x;x;x]; Y=[y1;y2;y3]; plot2d1("gnn", X, Y, [-1 -2 -3], "111", "nome1@nome2@nome3", ... [-3, -3, 3, 2], [2, 20, 5, 5]);

3.0 2.8 2.6 2.4 2.2 2.0 1.8 1.6 1.4 1.2 1.0

plot2d

plot2d1

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a As curvas identicadas so apresentadas na Figura 5.4. a


56

-1

-2

O parmetro rect um vetor que especica os contornos do grco. O parmetro rect tem a e a a a forma rect = [xmin,xmax,ymin,ymax]. O parmetro nax um vetor [nx,Nx,ny,Ny] onde nx e ny indicam o nmero de sub-grcos a e u a no eixo x ou y e Nx e Ny indicam o nmero de graduaes no eixo x ou y. u co E importante ressaltar que um demo apresentado se usarmos a funo sem nenhum argue ca mento, --> plot2d1() -->

5.1.1

Outros Comandos

Existem alguns comandos que podem ser utilizados para melhorar a apresentao de um ca grco. Dentre eles, ressaltamos : a xgrid - coloca uma grade em um grco bi-dimensional. a xtitle - coloca um nome acima e nos eixos de um grco bi-dimensional. a titlepage - coloca um t tulo no meio de um grco. a

5.1.2

Grcos 2D Especiais a

O Scilab dispe de alguns comandos que permitem traar grcos bi-dimensionais especiais. o c a Por exemplo,

-3

-3.0 -2.7 -2.4 -2.1 -1.8 -1.5 -1.2 -0.9 -0.6 -0.3 0.0 nome1 nome2 nome3

0.3 0.6 0.9 1.2

1.5

1.8 2.1 2.4 2.7 3.0

Figura 5.4: Curvas identicadas

0
+

+ + + +

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a champ - permite traar o grco de um campo vetorial em R2 . c a

57

fchamp - permite traar o grco de um campo vetorial em R2 denido por uma funo. c a ca fplot2d - permite traar o grco de uma curva 2D denida por uma funo. c a ca grayplot - permite traar o grco de uma superf em escala cinza. A superf deve c a cie cie ser denida por uma matriz de valores. fgrayplot - permite traar o grco de uma superf em escala cinza. A superf deve c a cie cie ser denida por uma funo. ca errbar - permite traar um grco com barras de erro. c a A seqncia de comandos a seguir represente um programa que permite traar o grco de ue c a um campo vetorial utilizando o comando champ. // Grafico de um campo vetorial x=[-1:0.1:1];y=x;u=ones(x); fx=x.*.u;fy=u.*.y; champ(x,y,fx,fy); xset("font",2,3); xtitle([Campo Vetorial;(com o comando champ)]); xset(default); O grco correspondente apresentado na Figura 5.5. a e
Campo Vetorial (com o comando champ) 1.0 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1.0 -1.0 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1.0

Figura 5.5: Grco de um campo vetorial a Outros comandos utilizados para traar grcos da rea de controle de processos : c a a

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

58

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. 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 para um sistema linear. c

5.2

Grcos Tri-dimensionais a

Algumas funes permitem traar grcos tri-dimensionais : co c a plot3d - permite traar grcos de uma matriz de pontos. c a plot3d1 - permite traar grcos de uma matriz de pontos em escala cinza. c a fplot3d - permite traar grcos de funes do tipo z = f(x,y). c a co fplot3d1 - permite traar grcos de funes do tipo z = f(x,y) em escala cinza. c a co

5.2.1

Grcos 3D Especiais a

As seguintes funes permitem traar grcos tri-dimensionais especiais : co c a param3d - permite traar curvas paramtricas. c e contour - permite traar curvas de n para uma funo 3D descrita por uma matriz. c vel ca grayplot10 - permite traar grcos com n c a veis de cinza em 2D. fcontour10 - permite traar curvas de n para uma funo 3D descrita por uma funo. c vel ca ca hist3d - permite traar histogramas 3D. c secto3d - converso de uma descrio de superf para dados compat a ca cie veis com a funo ca plot3d. eval3d - avalia uma funo em uma grade regular. ca Ressaltamos que a sintaxe desses 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 (Slackware 7.1, kernel o ca e 2.2.16). Apesar de ser dado um exemplo de instalao em uma plataforma espec ca ca, ele e vlido para qualquer ambiente operacional que disponha dos requisitos m a nimos apresentados a seguir. Os procedimentos necessrios ` instalao de distribuies binrias, pr-compiladas, a a ca co a e 1. podem ser encontrados na homepage do Scilab

A.1

Instalaao no Linux Slackware - Cdigo Fonte c o

O cdigo fonte para a verso 2.6 do software Scilab disponibilizado atravs do arquivo o a e e scilab-2.6-src.tar.gz. Para instalar o software a partir do cdigo fonte, devemos garantir o que: O X-Window esteja instalado (X11R4, X11R5 ou X11R6), e O sistema disponha de compiladores C e FORTRAN (cc e g77). 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-2.6-src.tar.gz. Ser criado um diretrio /usr/local/scilab-2.6 onde estaro a o a colocados todos os arquivos que compem o software. O diretrio /usr/local/scilab-2.6 o o chamado de diretrio principal do Scilab, referenciado pela varivel de ambiente SCIDIR. e o a Estes procedimentos devem ser realizados como root. No diretrio SCIDIR=/usr/local/scilab-2.6 esto localizados, entre outros, os seguintes o a arquivos : scilab.star - arquivo de inicializao do Scilab. As instrues deste arquivo so execuca co a tadas quando o Scilab ativado. O usurio pode ter um arquivo de inicializao, .scilab, e a ca no seu prprio diretrio, o o license.txt - arquivo contendo informaes relativas ao uso do software, co
1

http://www-rocq.inria.fr/scilab/

59

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

60

configure - arquivo de preparao para a instalao. Este arquivo modicar outros ca ca a arquivos do Scilab , os Makele, de acordo com a congurao do Sistema Operacional no ca qual o 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 programas para manipulao de arquivos Postscript e L TEX gerados pelo Scilab. ca 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. tests/ - onde esto localizados arquivos para a realizao de testes da instalao do a ca ca Scilab.
A doc/ - onde esto localizados arquivos com a documentaao do Scilab no formato L TEX, a c arquivos .tex. Para gerar documentos em formato adequado para impresso, devemos a processar os arquivos .tex. Por exemplo, para gerar o documento Introduction to Scilab, no diretrio SCIDIR/doc/intro fazer make. Ser gerada a documentao em formato o a ca .dvi. Para gerar a documentao em formato .ps, fazer dvips intro.ps. Para gerar a ca documentao em formato .pdf a partir da .ps gerada no passo anterior, fazer ps2pdf ca intro.ps. A documentao no formato html no faz parte da distribuio. Podemos, ca a ca entretanto, obt-la nas URLs mencionadas anteriormente. e

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 comm esto localizadas as funes que permitem trabalhar com aspectos relacionados com a co a rea de comunicaes . Cada sub-diretrio contm o cdigo fonte das funes (arquivos a co o e o co .sci). man/ - onde esto localizados diversos sub-diretrios contendo arquivos man (help on-line) a o e ASCII sobre o Scilab. pvm3/ - implementao 3.4 do PVM (Parallel Vitual Machine System) para o Scilab. ca geci/ - onde esto localizadas as rotinas que permitem o gerenciamento de execues a co remotas de programas possibilitando a troca de mensagens entre eles. tcl/ - implementao tcl/tk para o Scilab. ca libs/ - onde esto localizados os arquivos objeto que permitem a ligao de Scilab com a ca outros sistemas. routines/ - onde esto localizadas as rotinas numricas em FORTRAN e C, divididas em a e sub-diretrios. o util/ - onde esto localizadas rotinas e arquivos para gerenciamento do Scilab a maple/ - onde esto localizados arquivos que permitem a ligao do Scilab com o Maple. a ca

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

61

imp/ - onde esto localizados programas que permitem a manipulao de arquivos Postscript. a ca 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 scripts/ - onde esto localizados os fontes dos arquivos script. a xmetanet - onde esto localizados os arquivos para apresentao de grafos. a ca A instalao do software propriamente dita bastante simples. No diretrio SCIDIR digita-se ca e o .\configure -with-tk e, depois, make all. O usurio deve, tambm, acrescentar ` varivel a e a a PATH o caminho /usr/local/scilab-2.6/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-2.6/README Para executar o programa, basta digitar scilab no ambiente grco ou scilab -nw no a ambiente texto.

2 No Linux-Slackware, editar o arquivo /etc/profile adicionando o caminho necessrio ` varivel de ambiente a a a PATH

Apndice B e

Ligao do Scilab com Programas ca em C


Como colocamos no Cap tulo 4, os programas escritos na linguagem Scilab so interpretados. a Estes programas, principalmente os que realizam clculos numricos utilizados em simulaes a e co ou otimizaes, podem ser lentos em comparao com os programas compilados escritos em co ca linguagens convencionais. Uma maneira de acelerar a execuo desses programas, sem perder ca a exibilidade disponibilizada pelo Scilab, escrever o cdigo lento em uma linguagem convene o cional e utilizar este cdigo dentro do ambiente Scilab. o O Scilab permite que rotinas ou funes escritos em FORTRAN, Maple 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. Os procedimentos para as outras co linguagens podem ser encontrados em [1] 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 analisada. Os demais casos podem ser vericados em [1]. a

B.1

A Ligaao Dinmica c a

O comando --> link(foo.o,foo,c) --> liga o arquivo objeto foo.o, escrito na linguagem C, indicado pelo terceiro argumento, c, ao Scilab. O segundo argumento de link, foo, o nome da funo a ser executada. Um arquivo e ca objeto pode conter vrias funes. O nome de cada uma delas, se necessrio, deve ser indicado a co a como segundo argumento de link na forma de um vetor de strings, [prog1, prog2]. 62

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

63

Como exemplo, vamos re-escrever em C o programa Scilab que implementa o mtodo de e a ordem apresentado no Cap Runge-Kutta de 4 tulo 4. Algumas observaes devem ser feitas : co O programa transforma-se em uma funo; ca 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 Codigo 5.

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

64

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 de integracao */ double f(x,y) double x, y; { return( (x - y)/2 ); }

Cdigo 5: Funo Runge-Kutta escrita em C o ca Usando o compilador gcc, geramos o cdigo objeto runge.o para o programa runge.c o usando paulo@pmotta:~$ gcc -c runge.c -o runge.o Em seguida, o cdigo objeto ligado ao Scilab atravs do comando link, o e e

Introduo ao Scilab-Verso 1.0/PSMP/DCA-UFRN ca a -->link(runge.o,rk4,c) linking files runge.o to create a shared executable shared archive loaded Linking rk4 Link done ans = 0. -->

65

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 , a 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), a o terceiro argumento na lista dos parmetros de rk4 e seu tipo de dado double, indicado e a e por d. Do mesmo modo, b o quarto argumento, tipo de dado1 double, e assim por diante. e
1

Os outros poss veis tipos de dados so real, r e inteiro, i a

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

66

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 = ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! --> Observe 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 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

Observar que so n = (b a)/h iteraoes mais o valor da condiao inicial, (x0, y0) a c c

Referncias Bibliogrcas e a
[1] Scilab Group, Introduction to Scilab - Users Guide. Esta referncia, e as outras escritas e pelo Scilab Group, podem ser obtidas em http://www-rocq.inria.fr/scilab [2] Jesus Olivan Palacios, An Introduction to the Treatment of Neurophysiological Signals using Scilab, dispon em http://www.neurotraces.com em julho de 2001. vel [3] Scilab Group, Scicos: a Dynamic System Builder and Simulator [4] Scilab Group, LMITOOL: Linear Matrix Inequalities Optimization Toolbox [5] Scilab Group, Intersi: Automatically Interfacing C and FORTRAN Subroutines [6] Scilab Group, Signal Processing Toolbox [7] Scilab Group, Communication Toolbox [8] Scilab Group, Scilab Internal Structure [9] Bruno Pion, Une introduction ` Scilab, version 0.996, obtida em http://www-rocq. c a inria.fr/scilab/books em maio de 2001. [10] L.E. van Dijk, C.L. Spiel, Scilab Bag of Tricks, sci-BOT, obtida em http://www. hammersmith-consulting.com/scilab/sci-bot/ em maio de 2001. [11] Scilab//, http://www,ens-lyon.fr/~desprez/FILES/RESEARCH/SOFT/SCILAB em junho de 2001. [12] Paulo S. Motta Pires, Mtodos Computacionais - Notas de Aula, Verso 0.2, obtida em e a http://www.dca.ufrn.br/~pmotta em junho de 2001

67

Você também pode gostar