Escolar Documentos
Profissional Documentos
Cultura Documentos
ca
Verso 3.0
a
Resumo
Scilab um ambiente utilizado no desenvolvimento de programas para a resoluo de proe
ca
blemas numricos. Criado e mantido por pesquisadores pertencentes ao Institut de Recherche en
e
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
Agradecimentos
A
Ao Klaus Steding-Jessen, pelo L TEX-demo. A maioria das informaes sobre como se faz
co
A
isso em L TEX ? podem ser encontradas no documento escrito pelo Klaus1 ;
Ao Dr. Jesus Olivan Palacios, pelas conversas sobre o Scilab. O Dr. Palacios sintetiza
com brilhantismo as vantagens de se utilizar software livre e de cdigo aberto;
o
Aos colegas, pelas contribuies e sugestes que melhoraram a apresentao deste trabalho.
co
o
ca
Distribuio
ca
Este trabalho pode ser copiado e distribu
do livremente, mantidos os crditos
e
ao seu autor.
A
A
Informaoes sobre o L TEX-demo em particular ou sobre o L TEXem geral podem ser obtidas em http:
c
//biquinho.furg.br/tex-br/
ii
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.
Pgina
a
Pgina
a
4
Pgina
a
5
Pgina
a
6
Pgina
a
3
do
do
do
do
do
Scilab : http://scilabsoft.inria.fr
Linux distribuio Slackware : http://www.slackware.com
ca
kernel Linux http://www.kernel.org
Xemacs http://www.xemacs.org
GIMP http://www.gimp.org
iii
Sumrio
a
Scilab - Verso 3.0 . . . . .
a
Resumo . . . . . . . . . . .
Agradecimentos . . . . . . .
Distribuio . . . . . . . . .
ca
Histrico deste Documento
o
Sumrio . . . . . . . . . . .
a
Lista de Figuras . . . . . .
Lista de Tabelas . . . . . .
Lista de Cdigos . . . . . .
o
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 1
.
i
. ii
. ii
. iii
. iv
. vi
. vii
. viii
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 . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
5
10
11
14
17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
27
31
35
41
43
45
46
53
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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 . . . . . . . . .
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
62
65
66
68
74
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
76
76
77
83
85
86
87
A Instalao do Scilab
ca
89
A.1 Instalao no Linux Slackware - Cdigo Fonte . . . . . . . . . . . . . . . . . . . . 89
ca
o
B Ligao do Scilab com Programas em C
ca
92
B.1 A Ligao Dinmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
ca
a
C Instalao de Toolboxes
ca
96
C.1 Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
ca
D Funes Pr-denidas - Scilab 3.0
co
e
D.1 Programming . . . . . . . . . . . . . . . . . . . . .
D.2 Graphics Library . . . . . . . . . . . . . . . . . . .
D.3 Elementary Functions . . . . . . . . . . . . . . . .
D.4 Input/Output Functions . . . . . . . . . . . . . . .
D.5 Handling of functions and libraries . . . . . . . . .
D.6 Character string manipulations . . . . . . . . . . .
D.7 GUI and Dialogs . . . . . . . . . . . . . . . . . . .
D.8 Utilities . . . . . . . . . . . . . . . . . . . . . . . .
D.9 Linear Algebra . . . . . . . . . . . . . . . . . . . .
D.10 Polynomial calculations . . . . . . . . . . . . . . .
D.11 General System and Control . . . . . . . . . . . . .
D.12 Robust control toolbox . . . . . . . . . . . . . . . .
D.13 Optimization and simulation . . . . . . . . . . . .
D.14 Signal Processing toolbox . . . . . . . . . . . . . .
D.15 Arma modelisation and simulation toolbox . . . .
D.16 Metanet: graph and network toolbox . . . . . . . .
D.17 Sound le handling . . . . . . . . . . . . . . . . . .
D.18 Language or data translations . . . . . . . . . . . .
D.19 PVM parallel toolbox . . . . . . . . . . . . . . . .
D.20 TdCs . . . . . . . . . . . . . . . . . . . . . . . . . .
D.21 TCL/Tk interface . . . . . . . . . . . . . . . . . .
D.22 Statistic basics . . . . . . . . . . . . . . . . . . . .
D.23 Cumulative Distribution Functions; Inverses, grand
D.24 Identication . . . . . . . . . . . . . . . . . . . . .
D.25 Matlab to Scilab conversion tips . . . . . . . . . .
Referncias Bibliogrcas
e
a
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
99
99
101
104
106
107
108
108
108
109
110
111
112
112
113
114
114
115
115
115
116
116
116
117
117
118
120
Lista de Figuras
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
3.1
3.2
5.1
6.1
6.2
6.3
6.4
6.5
6.6
6.7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
7
8
8
10
15
15
16
17
76
80
83
85
85
87
88
C.1 Procedimentos para a utilizao do toolbox ANN e help com as funes dispon
ca
co
veis
no toolbox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
vi
Lista de Tabelas
2.1
4.1
5.1
Operadores condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.1
vii
Lista de Cdigos
o
1
2
3
4
5
6
7
viii
.
.
.
.
.
.
2.
. .
. .
. .
. .
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
63
70
70
70
74
81
93
Cap
tulo 1
Introduo
ca
Scilab1 um ambiente voltado para o desenvolvimento de software para resoluo de proe
ca
blemas numricos. Scilab foi criado em 1990 por um grupo de pesquisadores do INRIA2 -Institut
e
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
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
a
vel
Comentrios ou sugestes sobre esse documento so sempre benvindas e podem ser enviados
a
o
a
para pmotta@dca.ufrn.br.
E importante ressaltar que as referncias denitivas sobre Scilab permanecem sendo os mae
nuais que acompanham o software. Na data em que este trabalho foi escrito, estavam dispon
veis
na homepage do Scilab os seguintes documentos, [1]:
Introduction to Scilab - manual de introduo ao Scilab, documento no qual este texto
ca
A
se baseia, nos formatos HTML, PDF, Postscript, com os arquivos fontes em L TEX;
Communication Toolbox Documentation - documentao sobre o toolbox de comunicaca
A
ca
o, nos formatos HTML, PDF, Postscript, com os arquivos fontes em L TEX;
Signal Processing - documentao sobre o toolbox de processamento de sinais, nos forca
A
matos PDF, Postscript, com os arquivos fontes em L TEX;
Lmitool: Linear Matrix Inequalities Optimization Toolbox - documentao soca
bre o toolbox de otimizao, nos formatos HTML , PDF, Postscript, com os arquivos fontes
ca
A
em L TEX;
Metanet Users Guide and Tutorial - tutorial sobre a utilizao do toolbox de grafos
ca
A
Metanet, nos formatos HTML, PDF, Postscript, com os arquivos fontes em L TEX;
Cap
tulo 2
O Ambiente Scilab
Neste Cap
tulo, apresentamos algumas caracter
sticas do ambiente Scilab em plataforma
grca Linux. Em seguida, mostramos exemplos de manipulao de arquivos e de diretrios a
a
ca
o
partir desse ambiente. O objetivo a familiarizao com o software.
e
ca
2.1
Introduo
ca
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
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
-1->resume
-->
// Ctrl-c
-1->
// Ctrl-c
-2->
// Ctrl-c
-3->abort
-->
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.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
10
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
%toolboxes
%toolboxes_dir
LCC
767
-->
11
/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
2.4
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
/home/paulo
5
6
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)
-->
13
-->a
!--error
4
undefined variable : a
-->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
-->unix_w(mkdir outro_dir)
14
-->chdir(outro_dir)
ans =
// Mudando de diretorio
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
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
15
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
16
Scilab Function
besselk - Modified Bessel functions of the second kind (K sub alpha).
Calling Sequence
y = besselk(alpha,x)
y = besselk(alpha,x,ice)
Parameters
x : real vector with non negative entries
alpha : real vector with non negative entries regularly spaced with increment equal to one
alpha=alpha0+(n1:n2)
ice : integer flag, with default value 1
Description
besselk(alpha,x)
computes modified Bessel functions of the second kind (K sub alpha), for real,
non-negative order alpha and argument x . alpha and x may be vectors.
The output is m -by- n with m = size(x,*) ,
n = size(alpha,*) whose (i,j) entry is besselk(alpha(j),x(i)) .
ice
alpha >= 0
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
besseli
bessely
Author
W. J. Cody, L. Stoltz (code from Netlib (specfun))
2.6
17
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 =
18
3.
-->b * c
ans =
6.
-->diary(0)
paulo@none:~$
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
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 =
// Adicao de A e b
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
19
20
5. + 2.i
-->B = -2 + %i
B =
// Atribuindo a B o valor -2 + i
- 2. + i
-->
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 =
// Multiplicacao
- 12. + i
-->A / B
ans =
// Divisao
- 1.6 - 1.8i
-->A + B
ans =
// Adicao
3. + 3.i
-->A - B
ans =
// Subtracao
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
-->
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. !
-->j = 1:2:5
j =
!
1.
3.
5. !
-->
O valor do incremento pode ser negativo,
-->k = 5:-1:1
k =
!
5.
4.
3.
2.
1. !
-->
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
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
// Mudando de ambiente
-1->b = 1.5
b =
23
1.5
-1->b = resume(b) // Enviando b para o ambiente original
-->a, b
a =
1.5
=
1.5
-->
3.2
Figura 3.1: Rodando o exemplo de utilizao da funo fft apresentado no help do Scilab.
ca
ca
1
2
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
4.1
Polinmios
o
1. !
2. !
-->
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
25
26
- 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 =
// Multiplicacao
2
3
2 + s - 5s + 2s
-->p / q
ans =
// Divisao
2
2 - 3s + s
---------1 + 2s
-->[r, q] = pdiv(p,q)
q =
- 1.75 + 0.5s
r =
3.75
-->p + q
ans =
// Adicao
2
3 - s + s
-->p - q
ans =
// Subtracao
2
1 - 5s + s
-->
Para obter valores de polinmios, usamos a funo horner,
o
ca
27
-->x = poly(0, x)
x =
x
-->p = x^2 - 3*x + 5
p =
// definindo o polinomio
2
5 - 3x + x
-->horner(p, 2)
ans =
// avaliando o polinomio em x = 2
3.
-->
4.2
Vetores
Vamos considerar o conjunto dos nmeros reais1 . Dizemos que x um vetor de dimenso
u
e
a
n em , indicado por x n , se, e somente se,
x1
x2
x= .
.
.
xn
Nessa denio, cada um dos elementos do vetor x, xi , pertence a
ca
xi
R,
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. !
-->
C.
Todas as consideraes sobre vetores e matrizes podem ser estendidas para o conjunto dos nmeros complexos,
co
u
28
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. !
-->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 =
!
!
!
// vetor coluna
1. !
2. !
3. !
-->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,
29
2. !
3. !
-->y = [ 4; 5; 6]
y =
!
!
!
// Definindo o vetor y
4. !
5. !
6. !
-->size(x)
ans =
!
3.
1. !
-->size(y)
ans =
!
3.
// Dimensao do vetor x
// Dimensao do vetor y
1. !
-->
-->3 * x
ans =
!
!
!
3. !
6. !
9. !
-->x / 2
ans =
!
!
!
0.5 !
1. !
1.5 !
-->x + y
ans =
!
!
!
5. !
7. !
9. !
-->
Dados dois vetores de mesma dimenso, x, y
a
interno entre x e y atravs da expresso vetorial,
e
a
z = xT y
Assim, considerando os vetores x e y denidos anteriormente, temos:
-->z = x * y
z =
30
32.
-->
Observar que essa operao, em uma linguagem convencional, teria que ser realizada atravs
ca
e
de uma rotina que implementasse a operao (escalar):
ca
n
z=
xi yi
i=1
Rn1, podemos
C = xyT
Vamos considerar
1
2
x=
3
y=
4
5
1. !
2. !
3. !
-->y = [4; 5]
y =
!
!
3.
2.
1.
// Dimensao do vetor y
1. !
-->size(y)
ans =
!
// Dimensao do vetor x
1. !
-->size(y)
ans =
!
// Definindo o vetor y
4. !
5. !
-->size(x)
ans =
!
// Definindo o vetor x
2. !
R31 e y R21.
4.
8.
12.
31
5. !
10. !
15. !
-->
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
-->m = ones(1:4)
m =
!
1.
1.
1.
1. !
-->z = zeros(1:5)
z =
!
0.
0.
3. !
0.
0.
0. !
-->
4.3
Matrizes
a1,1 a1,2
a2,1 a2,2
A= .
.
.
.
.
.
..
.
am,1 am,2
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 ,
A=
1 2 3
5 8 9
B=
1 2 3
4 5 6
32
1.
5.
2.
- 8.
3. !
9. !
1.
4.
2.
5.
3. !
6. !
-->size(A)
ans =
!
2.
// Dimensao da matriz A
3. !
-->size(B)
ans =
!
2.
// Dimensao da matriz B
3. !
-->
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 =
!
!
!
1.
5.
9.
2.
6.
11.
3.
7.
13.
4. !
8. !
15. !
-->
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.
6. !
18. !
0.5
2.5
1.
- 4.
1.5 !
4.5 !
-->A + B
ans =
!
!
2.
9.
33
4.
- 3.
6. !
15. !
-->
Rnm. Como no
-->B = [1, 2, 3; 4, 5, 6]
B =
!
!
1.
4.
2.
5.
-->size(B)
ans =
!
2.
1.
2.
3.
// C = transposta da matriz B
4. !
5. !
6. !
-->size(C)
ans =
!
3.
// Dimensao da matriz B
3. !
-->C = B
C =
!
!
!
3. !
6. !
// Dimensao da matriz C
2. !
-->
Se A
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
34
temos:
-->A = [ 1 2 3; 4 5 6; 7 8 9]
A =
!
!
!
1.
4.
7.
2.
5.
8.
3. !
6. !
9. !
-->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 =
!
!
!
14.
32.
50.
32. !
77. !
122.
-->
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,
-->D = ones(2,3)
D =
!
!
1.
1.
1.
1.
1. !
1. !
-->
ou a funo zeros para criar a matriz E
ca
-->E = zeros(3,3)
E =
!
0.
0.
0. !
0.
0.
0.
0.
35
0. !
0. !
-->
ou, ainda, a criao de uma matriz identidade, I atravs da funo interna eye,
ca
e
ca
-->I = eye(4,4)
I =
!
!
!
!
1.
0.
0.
0.
0.
1.
0.
0.
0.
0.
1.
0.
0.
0.
0.
1.
!
!
!
!
-->
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.
3.
2.
4.
5.
7.
6.
8.
9.
11. !
10. !
12. !
-->
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
4.4
O acesso a elementos de um vetor ou de uma matriz pode ser realizado de diversas maneiras.
Dentre elas, podemos citar:
36
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
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.
-->v(1)
ans =
3.
4.
// definicao do vetor v
5.
6.
7. !
1.
-->v(5)
ans =
5.
-->
O s
mbolo : permite denir formas compactas de acesso a elementos de um vetor. Por
exemplo,
-->v(2:4)
ans =
!
2.
3.
-->v(:)
ans =
!
!
!
!
!
!
!
1.
2.
3.
4.
5.
6.
7.
!
!
!
!
!
!
!
-->v(1:2:7)
ans =
!
-->
1.
4. !
3.
5.
7. !
37
enquanto o s
mbolo $ permite acessar o ultimo elemento do vetor,
-->v($)
ans =
7.
-->
Tambm, podemos utilizar operaes booleanas para acessar elementos de um vetor. Na
e
co
sesso,
a
-->v([%f %t %f %t %t])
ans =
!
2.
4.
// acesso usando %t e %f
5. !
-->
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
1.
4.
2.
5.
3. !
6. !
-->
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 =
38
2. !
5. !
-->
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 ]
3. !
6. !
-->
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 =
!
4.
5.
6. !
-->
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. !
-->A(:, [3 2 1])
ans =
// Forma equivalente
!
!
3.
6.
2.
5.
39
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. !
5. !
2. !
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
elemento de A
-->A(1)
ans =
1.
-->// Quinto elemento de A
40
-->A(5)
ans =
3.
-->// Todos os elementos armazenados por coluna
-->A(:)
ans =
!
!
!
!
!
!
1.
4.
2.
5.
3.
6.
!
!
!
!
!
!
1.
4.
2.
5.
3.
6.
!
!
!
!
!
!
-->
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. !
-->
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])
41
2.
3. !
-->
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 =
!
!
1.
4.
10.
5.
3. !
6. !
-->
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 =
!
!
1.
4.
- 1.
- 2.
3. !
6. !
-->
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. !
-->
4.5
=
2
2 + 3x + x
2
2 + 3x + x
2
3 + 3x + x
2 !
1 + 3x + x !
!
!
2
!
12.
13.
11. !
2. !
2
--------------------2
3
4
1 - 6x - 11x - 6x - x
2
- 3 - 3x - x
-------------------2
3
4
1 - 6x - 11x - 6x - x
2
- 1 - 3x - x
-------------------2
3
4
1 - 6x - 11x - 6x - x
!
!
!
!
!
!
2
!
2 + 3x + x
!
-------------------!
2
3
4 !
1 - 6x - 11x - 6x - x !
42
43
1
s
1 + s
----2 + s
s
----3 + s
2
s
1
!
!
!
!
!
!
!
!
-->
podemos criar outra matriz apenas com o numerador das fraes,
co
-->F(num)
ans =
!
!
!
!
// Pegando os numeradores
1 + s
2
s
!
!
!
!
-->
ou com seus denominadores,
-->F(den)
ans =
!
!
!
// Pegando os denominadores
2 + s
3 + s
!
!
!
-->
4.6
Matrizes Simblicas
o
44
=
1
s
1 + s
----- 1 + s
!
!
!
-->
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 =
!
!
!
- 1
- 2
-->A($) = %s + 1
A =
!
!
!
!
!
!
// Atribuindo s + 1 ao ultimo elemento de A
- 1
- 2
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
45
y
w+v
y; z
w+v]
!
!
!
1.
3.
2. !
9. !
-->
4.7
Matrizes Booleanas
46
-->// A e B
-->A & B
ans =
! T F T F F F !
-->
4.8
+
*
/
\
^
.*
.\
./
.^
.*.
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
a1,1
a2,1
A= .
.
.
a1,2
a2,2
.
.
.
..
.
an,1 an,2
a1,n
a2,n
.
.
.
an,n
47
com
x1
x2
x= .
.
.
b1
b2
b=.
.
.
bn
xn
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=
2 0
0 4
b=
1
8
Temos,
--> // Solucao de Ax = b usando a funcao inv
-->A = [2 0; 0 4]
A =
!
!
2.
0.
0. !
4. !
-->inv(A)
ans =
!
!
0.5
0.
// A admite inversa
0.
!
0.25 !
-->b = [1; 8]
b =
!
!
-->
// Vetor b
1. !
8. !
-->x = inv(A) * b
x =
!
!
// Matriz A
0.5 !
2. !
48
0.5 !
2. !
-->
1.
3.
4.
6. !
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 =
0.5
0.75
0.6666667
49
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 !
-->
2.
1.3333333
1.5
1.3333333 !
-->
1.
81.
4096.
1679616. !
64.
1296.
262144. !
-->y .^ x
ans =
!
2.
-->
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
1.
4.
7.
2.
5.
8.
50
3. !
6. !
9. !
-->A .* A
ans =
!
!
!
1.
16.
49.
4.
25.
64.
9. !
36. !
81. !
-->A ^ 2
ans =
!
!
!
30.
66.
102.
36.
81.
126.
42. !
96. !
150. !
36.
81.
126.
42. !
96. !
150. !
-->A * A
ans =
!
!
!
30.
66.
102.
-->
Aps denir a matriz A no ambiente Scilab, foi feito o produto A .* A. O resultado uma
o
e
matriz com elementos iguais ao produto de cada elemento da matriz A pelo seu correspondente.
Observar que o resultado obtido pela operao .* completamenbte diferente do resultado
ca
e
obtido fazendo-se A ^2. Este ultimo resultado idntico ao resultado obtido fazendo-se A * A.
e e
Continuando com os exemplos, a operao A ./ A,
ca
-->A ./ A
ans =
!
!
!
1.
1.
1.
1.
1.
1.
1. !
1. !
1. !
-->
apresenta uma matriz com todos os elementos iguais a 1, como era de se esperar, j que os
a
elementos da matriz gerada so obtidos dividindo-se cada um dos elementos da matriz A pelos
a
seu correspondente. Para xar conceitos, vamos considerar a matriz quadrada B 33 ,
2 2 2
B = 2 2 2
2 2 2
Temos,
51
2.
2.
2.
2.
2.
2.
2. !
2. !
2. !
-->A ./ B
ans =
!
!
!
0.5
2.
3.5
1.
2.5
4.
1.5 !
3. !
4.5 !
-->
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. !
-->
2.
0.5
0.2857143
1.
0.4
0.25
0.6666667 !
0.3333333 !
0.2222222 !
52
-->
2.
0.5
0.2857143
1.
0.4
0.25
0.6666667 !
0.3333333 !
0.2222222 !
-->
A= .
e
B= .
.
.
.
..
..
.
.
.
.
.
.
.
.
.
.
.
.
am,1 am,2 am,n
bp,1 bp,2
representado por A B
e
b1,q
b2,q
.
.
.
bp,q
a1,1 B
a2,1 B
AB = .
.
.
a1,2 B
a2,2 B
.
.
.
..
.
am,1 B am,2 B
a1,n B
a2,n B
.
.
.
am,n B
1 2
3 4
B=
1 2 3
4 5 6
1.
3.
2. !
4. !
-->B = [1 2 3; 4 5 6]
B =
!
!
1.
4.
2.
5.
-->A .*. B
ans =
3. !
6. !
// Produto de Kronecker via operador .*.
!
!
!
!
1.
4.
3.
12.
2.
5.
6.
15.
3.
6.
9.
18.
2.
8.
4.
16.
4.
10.
8.
20.
6.
12.
12.
24.
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.
!
!
!
!
-->
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. !
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
0.0002211 !
0.3303271 !
L(3)
!
!
1.
1.
1. !
1. !
-->
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
55
L(1)
!Carro
!
!Cidade
!
!Valores
!
!
!
!
!
L(2)
Natal
L(3)
!
2.
3. !
2.
3. !
-->L(1)(3)
ans =
Valores
-->
Observar que os
ndices de uma lista tipada podem ser strings denidas no primeiro argumento da funo tlist().
ca
Neste Cap
tulo, apresentamos os tipos de dados que podem ser manipulados pelo Scilab. Diversos exemplos foram mostrados utilizando polinmios, vetores, matrizes e listas. Os exemplos
o
foram apresentados a partir do prompt do Scilab.
No prximo Cap
o
tulo, vamos mostrar com podemos desenvolver programas na linguagem
Scilab.
Cap
tulo 5
Programao
ca
Uma das caracter
sticas mais importante do Scilab a facilidade com que o usurio pode
e
a
criar seus prprios programas.
o
Apesar de simples, a linguagem Scilab disponibiliza a maioria das estruturas das linguagens
de programao convencionais. A diferena principal que, na programao Scilab, no h
ca
c
e
ca
a a
a necessidade da declarao prvia dos tipos das variveis que sero utilizadas ao longo do
ca
e
a
a
programa.
Um fator a ser levado em considerao que Scilab um interpretador de comandos. Os
ca e
e
programas escritos na linguagem Scilab so, portanto, normalmente executados em um tempo
a
maior que os programas semelhantes escritos em linguagens compilveis. Este fato mais
a
e
relevante quando precisamos desenvolver programas para a realizao de simulaes ou de otica
co
mizaes. Nesses casos, pode ser conveniente escrever o cdigo responsvel pela lentido do
co
o
a
a
processamento em uma linguagem convencional (no caso, C ou FORTRAN) e rodar esse cdigo
o
dentro do ambiente Scilab. No Apndice B, mostramos os procedimentos necessrios ` ligao
e
a
a
ca
de cdigos escritos em C com programas escritos em Scilab. Deve ser enfatizado, entretanto,
o
que a vantagem na utilizao do Scilab advm da facilidade de prototipao de programas e
ca
e
ca
da disponibilidade de uma poderosa biblioteca de funes grcas. Como sempre ocorre nessas
co
a
situaes, cabe ao usurio encontrar a sua soluo de compromisso.
co
a
ca
Nos Cap
tulos anteriores, vimos como escrever e executar comandos a partir do prompt do
Scilab. Neste Cap
tulo, apresentamos as principais estruturas de controle de uxo de programas.
Essas estruturas so utilizadas, depois, para gerar programas, chamados de scripts ou de funes,
a
co
que sero executados no ambiente Scilab.
a
5.1
Existem dois comandos que permitem a realizao de iteraes, loops, no Scilab: o loop
ca
co
implementado com o comando for e o loop implementado com o comando while.
5.1.1
O Loop for
57
-->for variavel=vetor_linha
-->
instrucao_1
-->
instrucao_2
-->
instrucao_n
-->end
como mostrado no exemplo,
--> Loop for em linha de comando
-->for k = 1:3
-->a = k + 1
-->end
a =
2.
=
3.
=
4.
-->
Como vimos no exemplo, no loop for o comportamento das iteraes baseado no contedo
co e
u
do vetor linha.
No exemplo a seguir, vamos considerar que a varivel k do comando for assuma os valores
a
estabelecidos pelo vetor linha v = [2 3 4 5 6]. O nmero de iteraes, portanto, ser igual ao
u
co
a
nmero de componentes do vetor linha v. Teremos, dessa forma, cinco iteraes. Na primeira
u
co
iterao, o valor da varivel k ser igual ao primeiro elemento do vetor v, v(1), que igual a 2,
ca
a
a
e
e na ultima iterao o valor da varivel k ser igual ao ultimo elemento do vetor v, v(5), que
ca
a
a
2.
=
5.
=
9.
=
58
14.
=
20.
-->
L(1)
1.
L(2)
!
!
1.
3.
2. !
4. !
L(3)
teste
-->for k=L
-->disp(k)
-->end
1.
!
!
1.
3.
2. !
4. !
teste
-->
5.1.2
O Loop while
59
Signicado
igual a
menor do que
maior do que
menor ou igual a
maior ou igual a
diferente
2.
=
4.
=
8.
=
16.
-->
5.2
Comandos Condicionais
5.2.1
60
Comando if-then-else
O comando if-then-else tem duas formas. Na forma mais simples, o comando escrito
e
como
if condicao_1 then
sequencia_de_instrucoes_1
else
sequencia_de_instrucoes_2
end
enquanto na sua forma mais geral o comando escrito como,
e
if condicao_1 then
sequencia_de_instrucoes_1
elseif condicao_2
sequencia_de_instrucoes_2
... ... ... ... ... ...
elseif condicao_n
sequencia_de_instrucoes_n
else
sequencia_de_instrucoes_n+1
end
A forma acima equivalente ` forma
e
a
--> if condicao_1 then
-->
sequencia_de_instrucoes_1
-->elseif condicao_2
-->
sequencia_de_instrucoes_2
--> elseif condicao_n
-->
sequencia_de_instrucoes_n
--> else
-->
sequencia_de_instrucoes_n+1
-->end
no ambiente Scilab.
A condicao_1 do comando if-then-else avalia uma expresso. Se esta expresso for
a
a
verdadeira, true, ser executada a instruo ou instrues subseqentes. Se for falsa, false, ser
a
ca
co
u
a
executada a instruo ou instrues aps o else ou o elseif, conforme o caso. Alguns exemplos
ca
co
o
da utilizao do condicional if-then-else,
ca
-->x = -1
x =
- 1.
-->if x < 0 then
-->
y = -x
y =
1.
-->else
// apresenta a resposta
// Inicializando
1.
-->if x > 0 then, y = -x, else, y=x, end
y =
- 1.
-->x = -1
x =
- 1.
-->if x > 0 then, y = -x, else, y=x, end
y =
- 1.
-->
5.2.2
Comando select-case
61
62
-->else
-->
sequencia_de_instrucoes_n+1
-->end
O condicional select-case compara o valor de uma varivel de teste com as vrias expresa
a
ses dos case. Sero executadas as instrues que possuirem o valor da expresso do case igual
o
a
co
a
ao valor da varivel de teste. Um exemplo de utilizao do condicional select-case,
a
ca
-->x = -1
x =
- 1.
-->select x
-->case 1
-->
y = x + 5
-->case -1
-->
y = sqrt(x)
y =
i
-->end
-->x = 1
x =
1.
-->select x, case 1, y = x+5, case -1, y = sqrt(x), end
y =
6
-->
5.3
Denindo Scripts
Vimos, no Cap
tulo 3, que poss
e
vel, atravs dos comandos save e load, armazenar e recue
perar valores de variveis utilizadas no ambiente Scilab. Vimos, tambm, que poss
a
e
e
vel, atravs
e
do comando diary, criar arquivos onde armazenamos a memria das sesses que realizamos no
o
o
Scilab.
Alm desses dois tipos de arquivos, podemos criar arquivos contendo comandos do Scilab
e
que sero executados posteriormente dentro do seu ambiente. Um desses arquivos, chamados
a
de arquivos scripts ou simplesmente scripts, so formados por texto puro, sem acentuao,
a
ca
contendo uma seqncia de comandos que o usurio digitaria em uma sesso interativa no
ue
a
a
prompt do Scilab. Por conveno, os scripts do Scilab possuem extenso sce e so executados
ca
a
a
atravs do comando
e
-->exec(nome_do_arquivo_de_comandos.sce)
So caracter
a
sticas dos arquivos scripts:
63
Para exemplicar, vamos escrever um script na linguagem Scilab para obter a 2 usando
o mtodo iterativo de Newton-Raphson. Segundo esse mtodo [9], a raiz de uma funo, f (x)
e
e
ca
pode ser calculada atravs da expresso,
e
a
xi+1 = xi
f (xi )
f (xi )
2.
Observar o ; aps alguns comandos. Isso evita que a execuo do script seja um processo
o
ca
ruidoso no ambiente Scilab.
A execuo do script, que foi armazenado em um arquivo chamado newton.sce, e o resultado
ca
mostrado na sesso,
e
a
-->exec newton.sce
// executando o script
64
-->// f(x) = x * x - 2
-->N = 10;
-->x0 = 1.0;
// Aproximacao inicial
-->delta = 10^(-5);
// Erro
-->xn = x0;
-->for n=1:N
-->
xn1 = xn - (xn * xn - 2)/(2 * xn);
-->
if abs((xn1-xn)/xn1) < delta then
-->
printf(Valor da raiz = %10.8f,xn1)
-->
return
-->
end
-->
xn = xn1;
-->end
Valor da raiz = 1.41421356
// valor de sqrt(2) !
-->
Como indicado anteriormente, todas as variveis utilizadas no script permanecem ativas
a
aps a sua execuo,
o
ca
Valor da raiz = 1.4142136
// Final da execucao
-->// Variaveis permanecem ativas no ambiente Scilab
-->N
N =
10.
-->x0
x0 =
1.
-->xn1
xn1 =
1.4142136
-->delta
delta =
0.00001
-->
Um outro exemplo de script mostrado em Cdigo 6, Cap
e
o
tulo 6.
5.4
65
Denindo Funes
co
6.
=
5.
-->
Observar que a funo retorna primeiro o ultimo valor calculado.
ca
66
-->Usando deff
-->deff([y1, y2]=exemplo(x1, x2),y1=x1+x2, y2=x1*x2)
-->[a, b] = exemplo(3,4)
b =
12.
=
7.
-->
3. Digitando o texto da funo em um arquivo e, em seguida, carregando esse arquivo no
ca
ambiente Scilab. Por conveno, as funes denidas pelo usurio possuem extenso sci
ca
co
a
a
e so carregadas no ambiente Scilab atravs do comando:
a
e
-->getf(nome_do_arquivo_de_comandos.sci)
Exemplos de funes constru
co
das desta maneira sero apresentados na seo 5.4.2.
a
ca
A escolha de um dos procedimentos anteriores depende da convenincia do usurio.
e
a
5.4.1
- 2.
m1 =
4.
--> // Provocando erro : y1 e y2 nao sao globais
-->y1
!--error
67
undefined variable : y1
-->y2
!--error
4
undefined variable : y2
-->
Continuando com o exemplo, a funo chamada sem a associao expl
ca e
ca
cita de variveis
a
de retorno. Este caso como se a funo f(x1, x2) tivesse sido chamada com a associao de
e
ca
ca
apenas uma varivel de retorno, uma chamada do tipo z = f(1,3) .
a
-->f(1,3)
ans =
4.
-->
O exemplo continua e um erro provocado quando a funo chamada com apenas um
e
ca e
argumento. Logo em seguida, o argumento denido no ambiente (denio global) e a funo
e
ca
ca
, novamente, chamada com apenas um argumento sem que haja a ocorrncia de erro.
e
e
-->f(1)
// Erro por indefinicao de argumento
!--error
4
undefined variable : x2
at line
2 of function f
f(1)
-->x2 = 3
x2 =
called by :
3.
-->f(1)
ans =
4.
-->
Como est claro pela sesso anterior, a chamada de uma funo sem que todos os seus argua
a
ca
mentos de entrada tenham sido previamente denidos ocasiona erro. Os argumentos de entrada
devem ser denidos expl
citamente na chamada ou atravs de denies via variveis globais.
e
co
a
Considerando a funo anterior, teremos, como casos interessante (mas no aconselhveis!), os
ca
a
a
exemplos,
-->x1 = 2; x2 = 3;
// Definindo x1 e x2
-->f()
ans =
68
5.
-->[m1, m2] = f()
m2 =
- 1.
m1 =
5.
-->
5.4.2
h
(f1 + 2f2 + 2f3 + f4 )
6
69
70
Como podemos observar, o programa chama a funo f(x,y), nas linhas 13 a 16, e a funo
ca
ca
com a soluo exata da equao diferencial dada1 , nas linhas 8 e 19 de Cdigo 2. A funo
ca
ca
o
ca
f(x,y) mostrada em Cdigo 3,
e
o
1
2
3
4
Os programas podem ser carregados no Scilab logo aps sua digitao atravs da utilizao
o
ca
e
ca
da sub-opo Load into Scilab Ctrl+I da opo Execute do Editor. Ou podem ser carregados
ca
ca
no ambiente Scilab atravs do comando getf(). Considerando que o programa principal e as
e
funes estejam em arquivos localizados no diretrio onde o Scilab lanado. Assim sendo, o
co
o
e
c
comando
1
71
-->
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 =
// executando o programa
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
0.
0.125
0.25
0.375
0.5
0.625
0.75
0.875
1.
1.125
1.25
1.375
1.5
1.625
1.75
1.875
2.
2.125
2.25
2.375
2.5
2.625
2.75
2.875
3.
1.
0.9432392
0.8974908
0.8620874
0.8364024
0.8198470
0.8118679
0.8119457
0.8195921
0.8343486
0.8557844
0.8834949
0.9170998
0.9562421
1.0005862
1.049817
1.1036385
1.1617724
1.2239575
1.2899485
1.3595145
1.4324392
1.5085189
1.5875626
1.6693906
1.
0.9432392
0.8974907
0.8620874
0.8364023
0.8198469
0.8118678
0.8119456
0.8195920
0.8343485
0.8557843
0.8834947
0.9170997
0.9562419
1.0005861
1.0498169
1.1036383
1.1617723
1.2239574
1.2899483
1.3595144
1.432439
1.5085188
1.5875625
1.6693905
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
-->
Na primeira coluna so mostrados os valores de x, na segunda coluna so mostrados os
a
a
valores da soluo aproximada, y, e na terceira coluna so mostrados os valores da soluo
ca
a
ca
exata, 3ex/2 + x 2.
2
Esta ordem irrelevante. Observe que os nomes das funes e os nomes dos arquivos que as contm so,
e
co
e
a
intencionalmente, diferentes.
72
Como segundo exemplo de programao, [9], vamos resolver um sistema triangular superior
ca
de equaes lineares, Este exemplo requer a leitura de um arquivo externo contendo dados.
co
Vamos considerar o sistema triangular superior,
4x1 x2 + 2x3 + 2x4
2x2 + 6x3 + 2x4
x3 x4
2x4
x5
+ 7x5
2x5
x5
3x5
= 4
= 0
= 3
= 10
= 6
Para resolver estes tipos de sistemas, usamos a matriz dos coecientes aumentada, denida
por
4 1 2
0 2 6 2
7
[A | b] = 0 0 1 1 2
0 0 0 2 1
0 0 0 0
6
10
2 2 -1 4
6 2 7 0
1 -1 -2 3
0 -2 -1 10
0 0 3 6
4.
0.
- 1.
- 2.
2.
6.
2.
2.
- 1.
7.
4.
0.
!
!
0.
0.
0.
0.
0.
0.
1.
0.
0.
- 1.
- 2.
0.
- 2.
- 1.
3.
73
3. !
10. !
6. !
-->
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 =
nl
6.
=
5.
-->A = Ab(:,1:nc-1)
A =
!
!
!
!
!
4.
0.
0.
0.
0.
- 1.
- 2.
0.
0.
0.
-->b = Ab(:,nc)
b =
!
!
!
!
!
4.
0.
3.
10.
6.
2.
6.
1.
0.
0.
2.
2.
- 1.
- 2.
0.
- 1.
7.
- 2.
- 1.
3.
!
!
!
!
!
!
!
!
!
!
-->
O programa para resolver o sistema linear mostrado no Cdigo 5,
e
o
74
function X = subst(Tsup)
// Entrada : matriz triangular superior, Tsup
// Saida : Vetor solucao X
[nl, nc] = size(Tsup);
n = nc-1;
A = Tsup(:,1:n); // Matriz A
b = Tsup(:,nc)
// Vetor b
X = zeros(n,1);
X(n) = b(n)/A(n,n);
for r = n-1:-1:1,
soma = 0,
for j = r+1:n,
soma = soma + A(r,j) * X(j);
end,
X(r) = (b(r) - soma)/A(r,r);
end
endfunction
Usando a matriz aumentada Ab como entrada para este programa, obtemos como vetor
soluo,
ca
-->subst(Ab)
ans =
!
5.
!
4.
!
1.
! - 6.
!
2.
!
!
!
!
!
-->
5.4.3
Comandos Especiais
Scilab possui alguns comandos especiais que so, exclusivamente, utilizados por funces :
a
o
argn - retorna o nmero de argumentos de entrada e de sa de uma funo;
u
da
ca
warning e pause - suspendem, temporariamente, a execuo de uma funo;
ca
ca
break - fora o nal de um loop;
c
return ou resume - utilizado para passar as variveis locais do ambiente da funo para
a
ca
o ambiente que chamou a funo.
ca
Alguns dos comandos especiais apresentados anteriormente so utilizados na funo,
a
ca
function [z] = foo(x, y)
[out, in] = argn(0);
if x == 0 then,
error(Divisao por zero);
end,
75
slope = y/x;
pause,
z = sqrt(slope);
s = resume(slope);
endfunction
Vamos chamar esta funo com argumento x = 0. O valor x = 0 ocasiona um erro, apreca
sentado ao usurio atravs do comando error, com a conseqente interrupo das operaes.
a
e
u
ca
co
H o retorno ao prompt do Scilab. Estas operaes so apresentadas no exemplo,
a
co
a
-->getf(f3.sci)
// Carregando a funcao
-->z = foo(0, 1)
// Provocando um erro
!--error 10000
Divisao por zero
at line
5 of function foo
z = foo(0, 1)
called by :
-->
Na segunda chamada, mostrada a seguir, desta vez com os argumentos corretos, a funo
ca
suspende a operao aps o clculo de slope. Neste ponto, o usurio pode vericar valores
ca
o
a
a
calculados pela funo at o ponto em que houve a interrupo. O prompt -1->, causado pelo
ca
e
ca
pause, indica a mudana de ambiente. O controle pode ser retornado ` funo atravs do
c
a
ca
e
comando return. As operaes da funo podem ser encerradas usando os comandos quit ou
co
ca
abort. Aps digitar resume, a funo calcula o valor de z e disponibiliza a varivel s, local `
o
ca
a
a
funo, para o ambiente que a chamou.
ca
-->// Mudando de ambiente
-->z = foo(2,1)
-1->resume
z =
0.7071068
-->s
s =
0.5
-->
Neste Cap
tulo, apresentamos alguns programas desenvolvidos na linguagem Scilab. No
Cap
tulo 6, vamos mostrar comandos que podem ser utilizados para traar grcos no ambiente
c
a
Scilab.
Cap
tulo 6
Grcos no Scilab
a
Apresentamos alguns comandos que podem ser utilizados para traar grcos bi-dimensionais
c
a
e tri-dimensionais. Informaes mais detalhadas sobre todos os comandos dispon
co
veis na biblioteca grca do Scilab1 podem ser acessadas atravs do navegador de help.
a
e
6.1
Todas as sa
das grcas de comandos do Scilab so apresentadas em uma janela grca.
a
a
a
Essa janela mostrada na Figura 6.1.
e
76
77
A opo Zoom - permite a ampliao de uma parte do grco. Escolhendo esta opo e
ca
ca
a
ca
delimitando uma rea, a parte do grco dentro da rea escolhida ser expandida. Esta
a
a
a
a
opo ainda no est implementada para grcos tri-dimensionais;
ca
a
a
a
A opo UnZoom - desfaz as manipulaes realizadas atravs da opo Zoom ;
ca
co
e
ca
A opo 3D Rot. - permite efetuar rotaes em grcos bi-dimensionais e tri-dimensionais,
ca
co
a
e
A opo Edit - possui sete sub-opes que permitem manipular o grco gerado: Select,
ca
co
a
Redraw, Erase, Figure Properties, Current Axes Properties, Start Entity Picker, Stop
Entity Picker.
Algumas dessas opes sero utilizadas no decorrer deste Cap
co
a
tulo.
No Scilab, grcos sucessivos so sobrepostos em uma mesma janela grca. Para evitar
a
a
a
que isso ocorra, podemos utilizar o comando clf().
As janelas grcas podem ser manipuladas atravs da funo scf(). Por exemplo,
a
e
ca
-->// Manipulacao de janelas graficas
-->scf(0) // Acesso a janela grafica 0 (default)
-->scf(1) // Acesso a janela grafica 1
-->
6.2
Grcos Bi-dimensionais
a
E importante observar que os dois vetores devem ter a mesma dimenso, isto , os dois
a
e
vetores devem ter o mesmo nmero de elementos;
u
2. Se x um vetor e y uma matriz, a funo plot2d() permite traar o grco de cada
e
e
ca
c
a
coluna da matriz y em funo do vetor x. Neste caso, o nmero de elementos das colunas
ca
u
da matriz y deve ser igual ao nmero de elementos do vetor x;
u
3. Se x e y so matrizes, a funo plot2d() permite traar o grco de cada coluna da matriz
a
ca
c
a
y em funo de cada coluna da matriz x. Neste caso, as matrizes devem ter as mesmas
ca
dimenses;
o
4. Se y um vetor, a funo plot2d() permite traar o grco do vetor y em funo do
e
ca
c
a
ca
vetor [1:size(y)], e
2
78
1.
63. !
-->size(y)
ans =
!
1.
63. !
-->plot2d(x,y)
-->clf()
// Definindo a matriz Y
63.
2. !
-->plot2d(x,Y)
-->clf()
-->// Item 3 - x e y sao matrizes
-->// Definindo uma variavel auxiliar
-->t = [0:0.1:2*%pi];
79
63.
2. !
63.
2. !
-->plot2d(X,Y)
-->clf()
-->// Item 4 - y vetor (sem x explicito)
-->plot2d(sin(x))
-->clf()
--> // Item 5 - Y matriz (sem x explicito)
-->plot2d(Y)
-->
Vericar que, aps a apresentao de cada grco, limpamos a tela atravs do comando
o
ca
a
e
clf(), para evitar que o prximo grco no se sobreponha ao anterior.
o
a
a
Os resultados dessa sesso, para cada um de seus itens, podem ser agrupados em uma unica
a
80
Figura 6.2: Sa
das para a funo plot2d([x], y). Cada sub-grco refere-se a um dos itens
ca
a
da sesso do Scilab mostrada anteriormente. Observar que os grcos dos Itens 4 e 5 possuem
a
a
valores de abcissas diferentes dos demais.
Na gerao da Figura 6.2, foram utilizados os comandos
ca
xtitle(titulo)
para colocar o t
tulo em cada um dos grcos apresentados e
a
xsetech([x, y, largura, altura])
para sub-dividir a janela grca do Scilab. O argumento do comando xtitle() uma string
a
e
especicando o t
tulo do grco. O argumento da funo xsetech explicado em seguida.
a
ca
e
A janela grca do Scilab, mostrada na Figura 6.1, denida com largura e altura iguais a
a
e
1 e com o seu sistema de referncias com origem (0,0) no canto superior esquerdo da janela.
e
O eixo x possui valores crescentes para a direita e o eixo y possui valores crescentes para baixo.
Ambos os eixos possuem valores mximos iguais a 1.
a
O comando xsetech() permite criar sub-janelas grcas dentro da janela grca do Scilab.
a
a
Por exemplo, para o grco com t
a
tulo Item 1, foi utilizada a linha de comando
-->xsetech([0, 0, 0.3, 0.5]); xtitle(Item 1); plot2d(x,y)
Os demais grcos foram traados com comandos semelhantes.
a
c
Nesse caso, o argumento utilizado na funo xsetech() permitiu traar um grco de largura
ca
c
a
0.3 e altura 0.5 a partir da origem do sistema de referncias da janela grca. O grco com
e
a
a
t
tulo Item 2, foi traado com o comando
c
-->xsetech([0.35, 0, 0.3, 0.5]); xtitle(Item 2); plot2d(x,Y)
Todos os comandos utilizados na sesso anterior foram gravados em um arquivo atravs do
a
e
comando diary(). Este arquivo, aps ser editado, foi transformado no script apresentado em
o
Cdigo 6,
o
81
// Definindo a matriz Y
plot2d(x,Y)
82
frameflag - E utilizada para controlar a escala dos eixos coordenados. O valor associado
a
` essa opo um nmero inteiro no intervalo 0 e 8, inclusive;
ca e
u
axesflag - especica como os eixos sero traados. O valor associado ` essa opo um
a
c
a
ca e
nmero inteiro variando entre 0 e 5, inclusive;
u
nax - permite denir os nomes e as marcas nos eixos x e y. O valor associado ` essa opo,
a
ca
vlido apenas quando a opo axesflag=1, um vetor com quatro entradas inteiras,
a
ca
e
[nx, Nx, ny, Ny]. O parmetro Nx o nmero de marcaes principais (tics) utilizadas
a
e
u
co
no eixo x; nx o nmero de divises (subtics) entre as marcaes principais do eixo x; Ny
e
u
o
co
e ny tm signicados semelhantes, tratando-se do eixo y, e
e
leg - permite denir as legendas das curvas. O valor associado ` esse parmetro uma
a
a
e
string de caracteres para cada grco traado.
a
c
A sesso Scilab,
a
-->x = [-%pi:0.1:%pi];
-->y = [sin(x) cos(x)];
-->plot2d(x,y, style=[1, -1], rect=[-%pi, -1.5, %pi, 1.5],axesflag=5, ...
-->leg = "sin(x)@cos(x)")
-->
83
Figura 6.3: Sa
das para a funo plot2d([x], y, <opt_args>).
ca
Observar que a primeira curva, sin(x), cont
e
nua j que o valor do parmetro style
a
a
associado a ela positivo enquanto a segunda curva, cos(x), est desenhada com marcas j
e
a
a
que o parmetro style associado a ela negativo. A opo rect estabelece os limites dos eixos
a
e
ca
x e y, enquanto a opo axesflag=5 traa os eixos na forma apresentada. Finalmente, a opo
ca
c
ca
leg associa uma legenda a cada curva desenhada.
O comando plot2d() apresenta algumas variaes3 , como mostrado na Tabela 6.1.
co
Comando
plot2d2()
plot2d3()
plot2d4()
Tipo de Grco
a
grcos 2-D linearizados
a
grcos 2-D com barras verticais
a
grcos 2-D com setas
a
e de suas variaes. E importante lembrar que o demo de uma funo grca tambm pode
co
ca
a
e
ser ativado atravs da chamada da funo. Por exemplo, para ativar o demo da funo grca
e
ca
ca
a
histplot, que plota um histograma, basta fazer:
-->histplot()
6.2.1
Outros Comandos
Existem comandos que podem ser utilizados para melhorar a apresentao de um grco.
ca
a
Dentre eles, destacamos:
xgrid - coloca uma grade em um grco bi-dimensional.
a
3
84
xtitle - coloca t
tulos em grcos 2-D ou 3-D;
a
titlepage - coloca um t
tulo no meio de uma janela grca.
a
Os elementos de um grco so controlados por parmetros globais. Estes parmetros dea
a
a
a
nem um contexto no qual o grco est inserido. Outros parmetros dos grcos so controlados
a
a
a
a
a
atravs de argumentos dos prprios comandos usados para traa-los. O comando xset, usado
e
o
c
sem argumento, xset(), apresenta um conjunto de opes, chamadas de Contexto grco da
co
a
janela grca 0, (Graphic context of graphic window 0 ), que permitem alterar parmetros
a
a
atravs da utilizao do mouse.
e
ca
O comando
subplot(m,n,p)
permite dividir a janela grca do Scilab em uma matriz m n. Em cada um dos elementos
a
da matriz, especicado por p, pode ser colocado um grco. A sesso a seguir ilustra os
a
a
procedimentos para utilizao do comando subplot() usando os prprios demos de funes
ca
o
co
grcas do Scilab.
a
-->// Demonstracao do comando subplot
-->subplot(221)
-->champ
// chamada do demo da funcao champ
Demo of champ
champ(1:10,1:10,rand(10,10),rand(10,10),1.0);
-->subplot(222)
-->histplot // chamada do demo da funcao histplot
histplot([-6:0.2:6],rand(1,2000,n),[1,-1],011, ,[-6,0,6,0.5],[2,12,2,11]);
deff([y]=f(x),y=exp(-x.*x/2)/sqrt(2*%pi););
x=-6:0.1:6;x=x;plot2d(x,f(x),1,"000");
titre= macro histplot : Histogram plot;
xtitle(titre,Classes,N(C)/Nmax);
-->subplot(223)
-->errbar
// chamada do demo da funcao errbar
x=0:0.1:2*%pi;
y=[sin(x);cos(x)];x=[x;x]
plot2d(x,y);
errbar(x,y,0.05*ones(x),0.03*ones(x));
-->subplot(224)
-->grayplot // chamada do demo da funcao grayplot
Demo of grayplot
t=-%pi:0.1:%pi;m=sin(t)*cos(t);grayplot(t,t,m);
-->
85
Figura 6.4: Sa
das para a funo subplot().
ca
Observar que essa a Figura 6.4 no foi capturada pelo GIMP. Ela foi armazenada em um
a
ca
a
a
arquivo atravs da sub-opo Export da opo File da janela grca na qual o grco foi
e
ca
gerado. A sub-opo Export possui as opes mostradas na Figura 6.5.
ca
co
A
Figura 6.5: Exportando grcos para o L TEX.
a
Como o arquivo deste trabalho gerado diretamente em pdf, o arquivo grco foi salvo no
e
a
formato gif e transformado em jpg atravs do GIMP.
e
6.2.2
Grcos 2D Especiais
a
Scilab dispe de alguns comandos que permitem traar grcos bi-dimensionais especiais.
o
c
a
Por exemplo, na rea de controle de processos, temos:
a
bode - permite traar o grco de mdulo e fase da resposta em freqncia de um sistema
c
a
o
ue
linear;
gainplot - permite traar o grco do mdulo da resposta em freqncia de um sistema
c
a
o
ue
linear;
86
nyquist - permite traar o grco da parte imaginria versus parte real da resposta em
c
a
a
freqncia de um sistema linear;
ue
m_cicle - grco M-c
a
rculo usado com o grco de Nyquist;
a
chart - permite traar a diagrama de Nichols;
c
black - permite traar o diagrama de Black para um sistema linear;
c
evans - permite traar o o lugar das ra
c
zes pelo mtodo de Evans;
e
plzr - permite traar o diagrama de polos e zeros.
c
O help do Scilab fornece informaes mais detalhadas sobre a utilizao dessas funes.
co
ca
co
6.3
Grcos Tri-dimensionais
a
z = f (x, y)
Na notao Scilab, as variveis independentes x e y so vetores de dimenses n1 e n2,
ca
a
a
o
respectivamente, e a varivel dependente z uma matriz de dimenso n1 n2. Ento, por essa
a
e
a
a
denio, o elemento z(i,j) o valor da superf no ponto (x(i), y(j)).
ca
e
cie
Para exemplicar o uso de plot3d(), vamos considerar a funo
ca
cos(x) sin(y)
no intervalo [0, 2] com incremento igual a 0.1. A sesso Scilab,
a
-->x = [0:0.1:2*%pi];
-->y = x;
-->z = cos(x) * sin(x);
-->plot3d(x, x, z)
-->
87
6.3.1
88
Apndice A
e
Instalao do Scilab
ca
O objetivo deste Apndice apresentar os procedimentos necessrios ` instalao do Scilab
e
e
a
a
ca
a partir de seu cdigo fonte. A instalao feita no ambiente Linux distribuio Slackware 9.1,
o
ca e
ca
com kernel 2.4.24. Apesar de apresentarmos os procedimentos de instalao em uma plataforma
ca
espec
ca, eles so vlidos para qualquer ambiente operacional que disponha dos requisitos
a
a
m
nimos exigidos, apresentados na seo A.1.
ca
Os procedimentos necessrios ` instalao de outras distribuies, binrias ou pr-compiladas,
a
a
ca
co
a
e
podem ser encontrados na homepage do Scilab1 . Na data em que este documento foi escrito,
esto dispon
a
veis, na homepage do Scilab, arquivos para as seguintes plataformas:
Plataformas UNIX/Linux:
Scilab 3.0 - arquivo binrio para Linux (scilab-3.0.bin.linux-i686.tar.gz);
a
Scilab 3.0 - arquivo com o cdigo fonte do Scilab (scilab-3.0.src.tar.gz).
o
Plataformas Windows 9X/NT/2000/XP
Scilab 3.0 - instalador da verso binria do Scilab (scilab3.0.exe);
a
a
Scilab 3.0 - cdigo fonte do Scilab (scilab-3.0.src.zip)
o
A.1
O cdigo fonte para a verso 3.0 do software Scilab disponibilizado atravs do arquivo
o
a
e
e
scilab-3.0-src.tar.gz na homepage do Scilab. Para instalar o software a partir do cdigo
o
fonte, devemos garantir que:
O X-Window esteja instalado (X11R4, X11R5 ou X11R6), e
O sistema disponha de compiladores C e FORTRAN (cc e g77).
Para que o help do Scilab seja instalado, necessrio que o sistema operacional disponha do
e
a
software Sablotron, dispon em http://www.gingerall.com/charlie/ga/xml/p_sab.xml.
vel
Tendo garantido os requisitos m
nimos, escolhemos o diretrio no qual o software ser instao
a
lado. Geralmente, utilizamos o diretrio /usr/local. Copiamos, ento, a distribuio fonte
o
a
ca
do Scilab para este diretrio. Descompactamos o arquivo atravs do comando tar -zxvf
o
e
scilab-3.0-src.tar.gz. Ser criado um diretrio /usr/local/scilab-3.0 onde estaro coa
o
a
locados todos os arquivos que compem o software. O diretrio /usr/local/scilab-3.0
o
o
e
chamado de diretrio principal do Scilab, referenciado pela varivel de ambiente SCIDIR. Estes
o
a
procedimentos devem ser realizados como root.
1
http://scilabsoft.inria.fr/
89
90
91
maple/ - onde esto localizados arquivos escritos na linguagem Maple que permitem a
a
ligao do software de computao simblica Maple com Scilab;
ca
ca
o
pvm3/ - implementao da verso 3.4 do PVM (Parallel Vitual Machine System) para
ca
a
Scilab;
routines/ - onde esto as rotinas numricas em C e em FORTRAN utilizadas pelo Scilab,
a
e
divididas por sub-diretrios;
o
scripts/ - onde esto localizados os fontes de alguns script utilizados pelo Scilab;
a
tcl/ - implementao TCL/TK para Scilab;
ca
tests/ - onde esto localizados arquivos para a realizao de testes da instalao do
a
ca
ca
Scilab, e
util/ - onde esto localizadas rotinas e arquivos para gerenciamento do Scilab.
a
Apndice B
e
B.1
A Ligao Dinmica
ca
a
O comando
--> link(foo.o,foo,c)
-->
liga o arquivo com o cdigo objeto da funo foo, foo.o, escrita na linguagem C, indicado pelo
o
ca
terceiro argumento, c, ao Scilab. O segundo argumento de link, foo, o nome da funo a
e
ca
ser executada. Um arquivo objeto pode conter vrias funes. O nome de cada uma delas, se
a
co
necessrio, deve ser indicado como segundo argumento de link na forma de um vetor de strings,
a
[prog1, prog2].
Para exemplicar a ligao de uma funo escrita em C com um programa em Scilab, vamos
ca
ca
re-escrever em C o programa Scilab que implementa o mtodo de Runge-Kutta de 4a ordem
e
apresentado no Cap
tulo 5. Algumas observaes devem ser feitas :
co
O programa transforma-se em uma funo;
ca
92
93
/*
Exemplo de utilizacao do comando link.
Resolucao de equacoes diferenciais ordinarias por Runge-Kutta
de 4a. ordem.
2
3
4
5
6
7
8
9
*/
10
11
12
13
14
15
16
17
18
19
x[0] = *a;
y[0] = *y0;
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
Funcao a ser integrada
36
37
*/
38
39
40
41
42
43
double f(x,y)
double x, y;
{
return( (x - y)/2 );
}
94
Usando o compilador gcc, geramos o cdigo objeto runge.o para o programa runge.c
o
atravs da linha de comando:
e
paulo@pmotta:~$ gcc -c runge.c -o runge.o
Em seguida, no ambiente Scilab, o cdigo objeto ligado ao Scilab atravs do comando
o
e
e
link,
-->link(runge.o,rk4,c)
linking files runge.o to create a shared executable
shared archive loaded
Linking rk4
Link done
ans =
0.
-->
Observar que rk4, segundo argumento de link o nome da rotina que resolve o problema.
e
Para acessar a funo rk4, devemos inicializar seus parmetros de entrada. A inicializao
ca
a
ca
desses parmetros feita atravs dos comandos,
a
e
e
->a = 0
0.
-->b = 3
3.
-->h = 1/8
// Passo da integracao
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);
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),
95
vemos que a o terceiro argumento na lista dos parmetros de rk4 e seu tipo de dado double.
e
a
e
Este fato indicado na funo call por a,3,d. Do mesmo modo, b o quarto argumento,
e
ca
e
tipo de dado1 double, indicado em call por b,4,d, e assim por diante.
Os argumentos de sa
da, especicados aps out, so vetores do tipo double, indicado por
o
a
d, com vinte e cinco linhas e uma coluna, indicados por [25,1], ocupando as posies 1 e 2
co
da lista de argumentos da funo rk42 .
ca
Finalmente, os valores de retorno de rk4 so associados `s variveis [X, Y] do ambiente
a
a
a
Scilab. A resposta, ento,
a e
-->[X Y]
ans =
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
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 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.
1
2
Os outros poss
veis tipos de dados so real, r e inteiro, i
a
Observar que, na resposta, so n = (b a)/h iteraes mais o valor da condio inicial, (x0, y0)
a
co
ca
Apndice C
e
Instalao de Toolboxes
ca
O objetivo deste Apndice apresentar os procedimentos necessrios ` instalao de toolboxes
e
e
a
a
ca
no Scilab 3.0. A instalao feita no ambiente Linux distribuio Slackware 9.1, com kernel
ca e
ca
2.4.24. Os toolboxes so conjuntos de funes desenvolvidas com uma nalidade especica.
a
co
Os toolboxes para Scilab esto dispon
a
veis em http://scilabsoft.inria.fr/contributions.
html/.
C.1
Instalao
ca
96
97
Neste diretrio esto localizados os cdigos fontes das funes que compem o toolbox.
o
a
o
co
o
O prximo passo executar o script builder.sce,
o
e
--> exec /usr/local/ANN_Toolbox_0.4.2/builder.sce
para instalar os comandos e funes do tooolbox. Este procedimento pode, por exemplo, ser
co
executado utilizando-se o Scilab em modo texto.
root@none:/usr/local/ANN_Toolbox_0.4.2# scilab -nw
------------------------------------------Scilab-3.0
Copyright (c) 1989-2004
Consortium Scilab (INRIA, ENPC)
-------------------------------------------
Startup execution:
loading initial environment
-->exec /usr/local/ANN_Toolbox_0.4.2/builder.sce
-->mode(-1)
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ANN.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ANN_FF.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ANN_GEN.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_ConjugGrad.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Hess.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_INT.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Jacobian.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Jacobian_BP.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Mom_batch.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Mom_batch_nb.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Mom_online.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Mom_online_nb.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_SSAB_batch.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_SSAB_batch_nb.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_SSAB_online.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_SSAB_online_nb.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Std_batch.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Std_batch_nb.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Std_online.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_Std_online_nb.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_VHess.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_grad.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_grad_BP.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_grad_BP_nb.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_init.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_init_nb.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_run.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_FF_run_nb.man to ascii
Processing /usr/local/ANN_Toolbox_0.4.2/man/ann/ann_d_log_activ.man to ascii
98
/usr/local/ANN_Toolbox_0.4.2/man/ann/ann_d_sum_of_sqr.man to ascii
/usr/local/ANN_Toolbox_0.4.2/man/ann/ann_log_activ.man to ascii
/usr/local/ANN_Toolbox_0.4.2/man/ann/ann_pat_shuffle.man to ascii
/usr/local/ANN_Toolbox_0.4.2/man/ann/ann_sum_of_sqr.man to ascii
-->
Aps ser instalado, os comandos e funes do toolbox podero ser usados por qualquer
o
co
a
usurio bastando que ele execute o script loader.sce,
a
-->exec /usr/local/ANN_Toolbox_0.4.2/loader.sce
para carregar os comandos e funces do toolbox ANN no ambiente do Scilab.
o
Na Figura C.1, mostramos o procedimento para a utilizao do toolbox. Observar que as
ca
funes do toolbox instalado j aparecem no help.
co
a
Figura C.1: Procedimentos para a utilizao do toolbox ANN e help com as funes dispon
ca
co
veis
no toolbox.
A instalao e o acesso a outros toolboxes do Scilab feita a partir de procedimentos semeca
e
lhantes aos apresentados neste Apndice.
e
Apndice D
e
D.1
Programming
ans - answer
99
100
D.2
Graphics Library
101
102
103
D.3
Elementary Functions
104
105
mini - minimum
sp2adj - converts sparse matrix into adjacency form
minus - (-) substraction operator, sign changes
sparse - sparse matrix denition
modulo - symetric arithmetic remainder modulo m
pmodulo - positive arithmetic remainder modulo m
D.4
106
Input/Output Functions
file - le management
ls - show les
manedit - editing a manual item
tan - tangent
mopen - open a le
107
D.5
startup - startup le
D.6
108
D.8
Utilities
D.7
ilib_gen_Make - utility for ilib build: produces a makele for building shared libraries
D.9
109
Linear Algebra
det - determinant
D.10
110
Polynomial calculations
pbig - eigen-projection
colcompr - column compression of polynomial matrix
pencan - canonical form of matrix pencil
degree - degree of polynomial matrix
penlaur - Laurent coecients of matrix pencil
pinv - pseudoinverse
polar - polar form
denom - denominator
derivat - rational matrix derivative
determ - determinant of polynomial matrix
proj - projection
qr - QR decomposition
numer - numerator
pdiv - polynomial division
pol2des - polynomial matrix to descriptor form
pol2str - polynomial to string conversion
polfact - minimal factors
trace - trace
D.11
General
Control
System
and
111
lin - linearization
112
D.12
D.13
NDcost - generic external for optim computing gradient using nite dierences
h2norm - H2 norm
lsqrsolve - minimize the sum of the squares ofnonlinear functions, levenberg-marquardt algorithm
113
D.14
mfft - multi-dimensional t
D.15
114
D.16
Metanet:
graph
network toolbox
and
D.18
115
formatman - translates old NROFF man les in a directory into ascii, tex, html or xml
fun2string - generates ascii denition of a scilab
function
mfile2sci - Matlab M-le to Scilab conversion function
D.19
D.17
Sound le handling
116
D.21
TCL/Tk interface
D.22
Statistic basics
center - center
wcenter - center and weight
cmoment - central moments of all orders
correl - correlation of two variables
D.20
TdCs
117
D.24
Identication
D.23
Cumulative
Distribution Functions; Inverses,
grand
D.25
118
119
Referncias Bibliogrcas
e
a
[1] Scilab Group, Introduction to Scilab - Users Guide. Esta referncia, e outras escritas pelo
e
Scilab Group, podem ser obtidas em http://scilabsoft.inria.fr/doc.html, acessada
em julho de 2004.
[2] Jesus Olivan Palacios, An Introduction to the Treatment of Neurophysiological Signals using
Scilab - version 0.02, Maio de 2001, http://www.neurotraces.com/scilab/scilab2/
node2.html, acessada em julho de 2004.
[3] Bruno Pion, Une introduction ` Scilab, version 0.996, dispon em http://www-rocq.
c
a
vel
inria.fr/scilab/books, acessada em maio de 2004.
[4] L.E. van Dijk, C.L. Spiel, Scilab Bag of Tricks, The Scilab-2.5 IAQ (Infrequently Asked
Questions), dispon
vel em http://kiwi.emse.fr/SCILAB/sci-bot/sci-bot.pdf, acessada em julho de 2004.
[5] Gilberto E. Urroz, Scilab, dispon
vel em http://www.engineering.usu.edu/cee/
faculty/gurro/Scilab.html, acessada em junho de 2004.
[6] Pramode C.E, Mathematical Explorations with Scilab/Linux, Linux Gazette, Issue 98, Janeiro de 2004, dispon
vel em http://linuxgazette.net/issue98/pramode.html, acessada em julho de 2004.
[7] Paulo S. Motta Pires, David A. Rogers, Free/Open Source Software: An Alternative for Engineering Students, 32nd ASEE/IEEE Frontiers in Education Conference, Nov. 6-9, 2002,
Boston, MA, USA, dispon em http://fie.engrng.pitt.edu/fie2002/papers/1355.
vel
pdf. Uma cpia deste trabalho tambm est dispon
o
e
a
vel em http://www.dca.ufrn.br/
~pmotta, acessada em julho de 2004.
[8] Scilab//, http://www,ens-lyon.fr/~desprez/FILES/RESEARCH/SOFT/SCILAB, acessada
em julho de 2004.
[9] Paulo S. Motta Pires, Mtodos Computacionais - Notas de Aula, dispon
e
vel em http:
//www.dca.ufrn.br/~pmotta, acessada em julho de 2004.
120