Sei sulla pagina 1di 108

Utilizando o SCILAB

na Resolucao de Problemas da Engenharia Qumica


o: 0.1
Versa

udio Oliveira Lopes


Lus Cla

Curitiba - Parana - Brasil

Sum
ario
1 Introdu
c
ao

2 Introdu
c
ao a Programa
c
ao Computacional
2.1 Pequena Historia do Hardware . . . . . . . . . . . . . . . . . . .
2.2 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Pequena historia da Linguagem de Programac
ao: u
ltimos 50 anos
2.4 Construcao de um Algoritmo . . . . . . . . . . . . . . . . . . . .
2.5 Propriedades de um Algoritmo . . . . . . . . . . . . . . . . . . .
2.5.1 A Estrutura Geral de um Algoritmo . . . . . . . . . . . .
2.6 Estruturas de Controle de Fluxo para a Programac
ao em Scilab .
2.7 Aspectos Basicos para a Programac
ao em Scilab . . . . . . . . .
2.8 Definicoes Basicas . . . . . . . . . . . . . . . . . . . . . . . . . .
3 O Ambiente do SCILAB
3.1 Interface Grafica do Ambiente Scilab . . . . .
3.2 Iniciando o Uso do Scilab . . . . . . . . . . .
3.3 Aspectos Basicos . . . . . . . . . . . . . . . .
3.3.1 Comentarios e escalares . . . . . . . .
3.3.2 Expressoes e Variaveis . . . . . . . . .
3.3.3 Dados do tipo list . . . . . . . . . . .
3.3.4 Arquivo diary . . . . . . . . . . . . . .
3.3.5 Operadores para Matrizes . . . . . . .
3.3.6 Funcoes . . . . . . . . . . . . . . . . .
3.4 Scilab: Primeiros Passos . . . . . . . . . . . .
3.4.1 Carregando variaveis . . . . . . . . . .
3.4.2 Operacoes de entrada/leitura de dados
3.4.3 Operacoes de sada/escrita de dados .
3.4.4 Operacoes Simbolicas no Scilab . . . .
3.5 Programacao . . . . . . . . . . . . . . . . . .
3.5.1 Funcoes . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

2
. 2
. 3
. 4
. 5
. 5
. 7
. 8
. 12
. 13

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

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

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

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

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

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

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

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

15
15
18
20
20
20
20
22
22
23
24
24
28
30
37
38
39

4 Utilizando o SCILAB na Engenharia Qumica


4.1 Sistemas de Equacoes Algebricas Lineares . . . . . . . . . . . . . . . . .
4.2 Problemas de Valor Caracterstico . . . . . . . . . . . . . . . . . . . . .
4.3 Sistemas de Equacoes Algebricas Nao Lineares . . . . . . . . . . . . . .
4.3.1 Aplicacoes `a Engenharia Qumica . . . . . . . . . . . . . . . . . .
4.3.2 Calculo do Volume pela Equac
ao de Estado de Redlich-Kwong .
4.4 Sistemas de Equacoes Diferenciais Ordinarias(EDO) . . . . . . . . . . .
4.4.1 EDO: Problema de Valor Inicial (PVI) . . . . . . . . . . . . . . .
4.4.2 EDO: Problema de Valor no Contorno (PVC) . . . . . . . . . . .
4.5 Introducao `a Otimizacao . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1 Ajuste de Modelos: Metodo dos Mnimos Quadrados . . . . . . .
4.5.2 Ajuste de Modelos a Dados Experimentais . . . . . . . . . . . . .
4.6 Solucao de equacoes algebrico-diferenciais . . . . . . . . . . . . . . . . .
4.7 Solucao de Equacoes Diferenciais Parciais (EDPs) por diferencas finitas

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

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

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

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

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

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

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

41
42
43
46
48
48
55
55
57
66
66
69
73
74

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5 Aspectos Complementares
78
5.1 Sistemas de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.1.1 Representacao de Modelos Lineares no Scilab . . . . . . . . . . . . . . . . . . 79
6 Conclus
ao

84

Ap
endice A - RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

86

Ap
endice B - Licen
ca do Scilab

100

Refer
encias Bibliogr
aficas

104

ii

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

Estruturacao para a Solucao de Problemas . . . . . . . . . . . . . . . . . . . . . . .


Problema 1: Fluxograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estruturas Condicionais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estruturas de codigos usando func
oes . . . . . . . . . . . . . . . . . . . . . . . . . .
SCILAB: Ambiente de interac
ao com usuario. . . . . . . . . . . . . . . . . . . . . .
SCILAB: Item Filedo Menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCIPAD: Editor para construc
ao de scripts no Scilab. Disponibilidade de convers
ao
de scripts Matlab em Scilab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Janela do conversor de scripts Matlab para Scilab. . . . . . . . . . . . . . . . . . .
Janela do browser de variaveis do Scilab. . . . . . . . . . . . . . . . . . . . . . . . .
Exemplo de comando getvalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Geracao de figura para inclusao em arquivos Latex. . . . . . . . . . . . . . . . . . .
Exemplo de figura usando o estilo grafico novo. . . . . . . . . . . . . . . . . . . . .
Comportamento do fator de compressibilidade (z) com a Pressao reduzida (Pr ) . .
Diagrama de fases: Exemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Campo de Direcao: Exemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Solucao de PVC usando diferencas finitas . . . . . . . . . . . . . . . . . . . . . . .
Solucao de EADs no Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Celula de discretizacao usada para resolver a Eq. de Laplace . . . . . . . . . . . .
Solucao da Eq. de Laplace por diferencas finitas - 3D . . . . . . . . . . . . . . . . .
Solucao da Eq. de Laplace por diferencas finitas - contornos . . . . . . . . . . . . .

.
.
.
.
.
.

6
9
10
15
16
16

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

18
19
19
29
34
36
52
60
61
67
75
76
78
79

.
.
.
.
.
.
.
.

8
13
37
49
57
58
59
60

Lista de Tabelas
1
2
3
4
5
6
7
8

Problema 1: Pseudo-codigo . . . . . . . . . . . . .
Operadores de Uso Comum . . . . . . . . . . . . .
Funcoes graficas basicas do Scilab . . . . . . . . . .
Exemplo de utilizacao da func
ao fsolve . . . . . .
Exemplo de utilizacao da func
ao ode . . . . . . . .
Exemplo 2 de utilizacao da func
ao ode . . . . . . .
Exemplo 3 de utilizacao da func
ao ode: Retrato de
Exemplo 4 de utilizacao da func
ao fchamp . . . .

iii

. . .
. . .
. . .
. . .
. . .
. . .
fase
. . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

1 Introdu
c
ao

Introduc
ao

SCILAB (Scientific Laboratory)1 e um ambiente grafico para calculo cientfico


disponvel gratuitamente2 desde 1994 e desenvolvido desde 1990 por pesquisadores do Institut
Nationale de Recherche en Informatique et en Automatique - (INRIA) e Ecole Nationale des
Ponts et Chaussee (ENPC) na Franca3 . O Scilab foi desenvolvido para ser um sistema aberto onde
o usuario pode definir novos tipos de dados e operacoes; possui centenas de funcoes matematicas
com a possibilidade de interacao com programs em varias linguagens com o C e Fortran; tem uma
sofisticada estrutura de dados que inclui objetos como funcoes racionais, polinomios, listas, sistemas
lineares, etc., possui um interpretador e uma linguagem de programacao (estruturada) propria.
A utilizacao do Scilab da-se internacionalmente nos ambientes academicos e industriais, assim o
Scilab e uma plataforma em constante atualizacao e aperfeicoamento. Ele possui varias bibliotecas
de funcoes, destacando-se:
Biblioteca Grafica 2-D e 3-D e Animacao

Algebra
Linear
Polinomios e Funcoes Racionais
Integracao: Equacoes Diferencias Ordinarias (ODEPACK) e Equacoes Algebrico-Diferenciais
(DASSL)
Modelagem e Simulacao (Scicos)
Controle Classico e Robusto
Otimizacao (Inequacoes Matriciais Lineares -LMI, Otimizacao Diferenciavel e Nao Diferenciavel
Processamento de Sinais
Processamento de Imagens
Grafos e Redes (Metanet)
Scilab para Arquitetura Paralela
Estatstica
Rede Neuronal
Logica Nebulosa (Fuzzy Logic)

Controle Otimo
Discreto
Interfaces com Softwares de Computacao Simb
olica (Mapler , MuPAD)
1

Pron
uncia em sintaxe fonetica internacional e sailb.
Veja detalhes da licenca no Apendice I.
3
Desde 16 de maio 2003, com um time de especialistas dedicados pertencentes a um cons
orcio de instituico
es e
empresas que ser
a respons
avel pelo desenvolvimento, evoluca
o e promoca
o do Scilab. Informaco
es adicionais est
ao
disponveis em http://www-rocq.inria.fr/scilab/.
2

2 Introdu
c
ao a Programa
c
ao Computacional

Interface com Tck/Tk


E muitas outras contribuicoes.
Existem distribuicoes Scilab com codigo fonte disponvel para a maioria das plataformas computacionais. O Scilab possui recursos similares `aqueles existentes no MATLABr e outros ambientes
para calculo cientfico. Esse texto se refere a vers
ao 3.0 do Scilab. A base eletronica do projeto Scilab encontra-se em http://www.scilab.org, nesse endereco pode-se encontrar atualizac
oes relativas
ao Scilab, informacoes, documentacao e um conjunto de enderecos relativos `a utilizac
ao do Scilab
em varias areas de conhecimento. Esse documento nao tem a ambic
ao de ser um documento completo sobre a utilizacao do Scilab na resoluc
ao de problemas da Engenharia Qumica, seu objetivo
principal e apresentar o potencial dessa plataforma como alternativa ao Matlabr nas avaliac
oes
numericas usuais nas atividades relacionadas `a Engenharia Qumica.
Essa apostila e a primeira parte de material mais amplo que tenho em desenvolvimento sobre
o Scilab. Existem outros materiais disponveis sobre o assunto e podem ser encontrados no site do
Scilab. O Introduction to Scilab: Users Guide (Scilab.Group, 1998) e uma fonte para o primeiro
contato com esse ambiente, esse material assim, procurara ser uma vers
ao pessoal dos conhecimentos
basicos do Scilab. Acredito no princpio de que ha grandes campos para aperfeicoamento quando se
compartilha informacoes, assim, forneco meu endereco eletronico (lcol@ufu.br) para que voce possa
me ajudar, enviando crticas, elogios ou sugestoes que servirao para o aprimoramento de vers
oes
posteriores desse material.

Introduc
ao a Programac
ao Computacional

A automatizacao de tarefas, procedimentos e processos e um aspecto importante da sociedade


moderna. Na Engenharia Qumica, o aperfeicoamento tecnologico alcancado tem em alguma parte
do seu processo de desenvolvimento elementos fundamentais de analise e da obtenc
ao de descric
oes
e execucao de tarefas feitas seja com extrema rapidez, complexidade, repetic
ao eficiente ou precisao.
Situacoes propcias para a sua automatizac
ao, ou seja, realizadas por uma maquina especialmente
desenvolvida para este fim e conhecida como computador (Guimaraes & Lages, 1994).
As u
ltima decadas presenciou um processo de desenvolvimento simult
aneo e interativo de
maquinas (hardware) e dos elementos que gerenciam a sua execuc
ao automatica (software). A
parcela embrionaria mais elementar de execuc
ao de tarefas e o que se chama de algoritmo. Antes
de se iniciar o estudo e interessante se avaliar a trajetoria de desenvolvimento das ferramentas de
mesma natureza que aquela que compoe o objetivo desse mini-curso.

2.1

Pequena Hist
oria do Hardware

A lista a seguir apresenta uma relac


ao dos acontecimentos principais que resultaram no desenvolvimento das plataformas de analise que conhecemos hoje.
1700 ac Povos Mesopotamicos (primeiras tabuadas, base 60)

1200 dc Abaco
chines 1614 Bastoes de Napier (logaritmos)
1633 Regua de Calculo (Oughtred )

2.2

Algoritmos

1642 Maquina de Calcular Mecanica (Blaise Pascal)


1822 Maquina de Diferencas (Charles Babbage)
1833 Maquina Analtica (programavel)
1880 Perfuradora de Cartoes (Herman Hollerith)
Criou a Tabulating Machine Company (futura IBM)
1939 Computadores Bell `a rele (encomenda do exercito americano)
1941 Z3 (maquina que usa sistema binario) construda por Konrad Zuse
1944 Calculadora Automatica de Seq
uencia Controlada (MARK I)
1946 ENIAC (Electronic Numerical Integrator and Calculator )
1949 EDSAC (Electronic Delay Storage Automatic Calculator )
1951 UNIVAC I (Computador Automatico Universal)
1953 1o IBM (IBM 701)
1955 IBM 705 (memoria de n
ucleos de ferrite)
1958 IBM 709 (entrada e sada de dados paralelamente aos calculos)
1959 IBM 7090 (transistorizado compatvel com o IBM 709)
1961 IBM 360 (modular)
1971 Intel lanca primeiro microprocessador
anos 80 - computador pessoal - ate 1 milhao de transistores

Para se entrar nos aspectos centrais da utilizac


ao do Scilab na resoluc
ao de problemas, apresenta-se
nas proxima secoes uma base para que se possa desenvolver tarefas automatizadas utilizando a
plataforma de avaliacoes do Scilab ou de uma linguagem de programac
ao.

2.2

Algoritmos

O computador e capaz de coletar informac


oes, processa-las e fornecer um resultado com extrema
rapidez e eficiencia, mas nao passam de maquinas de processamento, assim, para que seja capaz
de realizar essas tarefas e necessario que desenvolvamos programas, softwares capazes de utilizar
os recursos da maquina para a computac
ao e fornecimento destes resultados. Uma das etapas
fundamentais para o desenvolvimento dos softwares e a construc
ao de uma representac
ao logica
a ser instruda ao computador. Essa representac
ao logica e conhecida como algoritmo. Assim,
programar e basicamente o ato de construir algoritmos. Existem varias definic
oes sobre o tema,
para o nosso interesse, algoritmo e: a descric
ao, de forma logica, dos passos a serem executados
no cumprimento de determinada tarefa, assim, o algoritmo constitui-se numa ferramenta generica
para representar a solucao de tarefas, ou seja e uma receita para um processo computacional e

2.3

Pequena hist
oria da Linguagem de Programa
c
ao: u
ltimos 50 anos

consiste de uma serie de operacoes primitivas, convenientemente interconectadas, sobre um conjunto


de objetos. Como o algoritmo pode ter varios nveis de abstrac
oes de acordo com a necessidade
de representar detalhes inerentes `as linguagens de programac
ao, ent
ao eles devem seguir as regras
basicas de programacao para que sejam compatveis com as linguagens de programac
ao. A sec
ao a
seguir apresenta um pequeno esboco do historico de desenvolvimento das linguagens de programac
ao
nos u
ltimos 50 anos.

2.3

Pequena hist
oria da Linguagem de Programac
ao: u
ltimos 50 anos

ENIAC - programado em linguagem de maquina!


1957 - FORTRAN - (FORmula TRANslator ) (desenvolvido por pesquisadores da IBM) potencial para problemas numericos
1958 - ALGOL - (ALGOrithmic Language) potencial para processamento cientfico
1959 - COBOL - (COmmon Business Oriented Language) potencial para aplicac
oes comerciais
1963 - BASIC (Beginners All-purpose Symbolic Instruction Code)- Desenvolvido por Thomas
Kurtz e John Kemeny - recursos basicos e facilidade para aprendizado
1970
PASCAL - (Niklaus Wirth) programac
ao estruturada
Linguagem B, desenvolvida por Ken Thompson, nos Laboratorios Bell
1973 - Linguagem C, incio de desenvolvimento por Denis Ritchie
1977
FORTRAN 77 - incorporacao de conceitos de programac
ao estruturada
MODULA 2 - Linguagem tambem introduzida por Niklaus Wirth
Surgimento do Apple II (Basic), TRS-80 (Radio Shack)
1981
Primeiro PC, lancado pela Acorn (na verdade, a IBM parecia ter cautela de colocar a
marca IBM nos computadores pessoais)
SMALLTALK
1983
ADA, Surgimento de Lisa - Apple (primeira maquina com mouse e interface grafica para
usuario)
C++, desenvolvido por Bjarne Sroustrup nos Laboratorios Bell
1984 - IBM PC (286-AT) e Macintosh. Varios Aplicativos disponveis- Ex: Lotus 1-2-3,
Microsoft Word e Matlab
...

2.4

Constru
c
ao de um Algoritmo

1989 - Scilab4 - Biblioteca de Ferramentas para Aplicac


ao em Engenharia.
1993 - GNU Octave - potencial para calculo numerico5 .
O leitor e encorajado a ler varias obras sobre a historia do desenvolvimento das linguagens e
maquinas. Existe vasto material disponvel livremente na WEB (hitmill.com, 2004).

2.4

Constru
c
ao de um Algoritmo

Quando tem-se um problema e se deseja utilizar um computador para resolve-lo inevitavelmente


tem-se que passar pelas seguintes etapas:
1. Definicao do problema e objetivos.
2. Compreensao do problema e objetivos e realizac
ao de um estudo da situac
ao atual com verificacao de qua(l,is) a(s) forma(s) de resolver o problema.
3. Construcao de um algoritmo para a resoluc
ao do problema
4. Verificacao do algoritmo
5. Utilizacao de uma linguagem de programac
ao para escrever o programa que dever
a resolver
o problema.
6. Analisar junto aos usuarios se o problema foi resolvido e os objetivos atingidos. Se a soluc
ao
nao foi encontrada, devera ser retornado para a fase de estudo para descobrir onde esta a
falha.
As etapas acima sao, de forma bem geral, as etapas que um especialista passa, desde a apresentac
ao
do problema ate a sua efetiva solucao (Guimaraes & Lages, 1994). Essa apostila tem como objetivo a aplicacao do Scilab na etapa de programac
ao. Mas antes de introduzir os aspectos de
programacao em Scilab e importante introduzir o seguinte conceito: Programar um computador
consiste em elaborar um conjunto finito de instruc
oes, reconhecidas pela maquina, de forma que
o computador execute estas instrucoes. Estas instruc
oes possuem regras e uma sintaxe propria,
como uma linguagem tipo portugues ou ingles, sendo isto chamadas de linguagem de computador
ou linguagem de programacao (Forbellone, 2000).
Na estruturacao de um algoritmo, a etapa de sistematizac
ao da soluc
ao do problema pode
ser feita utilizando a filosofia descrita na Figura 1. No mundo computacional existe uma grande
variedade de linguagens Pascal, C, C++, Cobol, Fortran, etc. Existe tambem um conjunto de ambientes desenvolvidos para a facilitacao de implementac
ao de algoritmos de determinadas areas de
interesse. Nesse curso enfoca-se o Scilab, que tem como objetivo a simplificac
ao da implementac
ao
de algoritmos para a area de analise e controle de sistemas.

2.5

Propriedades de um Algoritmo

Cada operacao deve ser bem definida. Deve ser perfeitamente claro o que deve ser feito.
4
5

Criaca
o de Cons
orcio para Desenvolvimento em 2003.
http://www.octave.org

2.5

Propriedades de um Algoritmo

Problema
Muito
Simples

Problema
Simples

Problema
Muito
Simples
Problema
Muito
Simples

Problema
Complexo
Problema
Simples

Soluo

Soluo

Soluo

Problema
Muito
Simples

Soluo

Problema
Muito
Simples

Soluo

Soluo
Completa

Figura 1: Estruturacao para a Solucao de Problemas


ao deve ser efetiva.
Cada operac
Cada etapa deve ser tal que, pelo menos em princpio, uma pessoa munida apenas de papel
e lapis possa executa-la em um tempo finito.
O algoritmo deve terminar apos um n
umero finito de passos.
Um algoritmo que apresenta todas as propriedades anteriores, salvo a de terminacao e chamado de
procedimento computacional. Ex.: Sistema operacional. Para que um algoritmo seja implementado
num computador ele deve ser codificado numa linguagem de programacao.
Dado um algoritmo suficientemente preciso, a codificacao como um programa de computador
e direta. Entre as tecnicas atuais de programacao, encontram-se:
Programac
ao Seq
uencial
Programac
ao Estruturada
Facilita a escrita de programas
Facilita a leitura e o entendimento
ao
Antecipa a correc
Facilita a manutenc
ao e modificacao

2.5

Propriedades de um Algoritmo

Possibilita o desenvolvimento em equipe


Reduz complexidade
Programacao Orientada a Eventos e Objetos
Existem duas formas principais de representac
ao das tarefas de um algoritmo: o fluxograma
6
simbolico e a apresentacao em pseudo-linguagem
2.5.1

A Estrutura Geral de um Algoritmo

A estrutura geral de um algoritmo pode ser representada por:


Algoritmo Nome do Algoritmo
Vari
aveis
Declarac
ao das vari
aveis
Procedimentos
Declarac
ao dos procedimentos
Fun
c
oes
Declarac
ao das func
oes
Incio
Corpo do algoritmo
Fim
Nesse curso, quando se fizer necessario, a representac
ao de um algoritmo, sera feita utilizando-se
de pseudo-linguagem, no caso utiliza-se aquela conhecida como PORTUGOL. O Portugol ou
Portugues Estruturado e derivado da aglutinac
ao de Portugues + Algol.
O Scilab e uma linguagem interpretada que pode interagir com modulos compilados e devido
a sua natureza, e porque reside num ambiente previamente construdo para a sua interpretac
ao,
alguns aspectos regulares dos algoritmos nao sao utilizados. Entre eles destacam-se: (a) Nao ha
denominacao interna de nomes para codigos de processamento global, ou seja, apenas os procedimentos em forma de funcoes recebem nomes, aqueles globais serao referenciados pelo nome do
arquivo em disco; (b) Seguindo a estrutura das linguagens interpretadas com base em scripts 7 ,
nao existe declaracao de variaveis no codigo. Essas determinac
oes sao feitas automaticamente ao
tempo de interpretacao;(c) Os u
nicos procedimentos de avaliac
ao sao as func
oes e para que estejam
disponveis ao codigo devem ser carregadas previamente na memoria.
A estrutura de um codigo implementado no Scilab possui ent
ao a seguinte forma.
6

A linguagem natural e prolixa, imprecisa, e pode ser interpretada incorretamente.


Um script em Scilab e simplesmente uma serie de comandos Scilab em um arquivo. A execuca
o do arquivo faz
com que os comandos sejam executados na sua ordem seq
uencial como se eles fossem individualmente digitados na
linha de comandos do Scilab.
7

2.6

Estruturas de Controle de Fluxo para a Programa


c
ao em Scilab

[// Apresentac
ao do Algoritmo]
[// informac
oes sobre o codigo e sua utilizac
ao]
[// Detalhes do seu desenvolvimento]
[//Pr
e-processamento]
Especificac
ao de vari
aveis internas do Scilab
Carregamento de bibliotecas para a memoria
[//Fun
c
oes]
Declarac
ao das func
oes
[ // Incio]
Corpo do algoritmo
[//Fim]
importante salientar que as instruc
E
oes apresentadas entre [] sao opcionais. A nomenclatura
adotada e consistente com `aquela do proprio Scilab que usa (//) para denominac
ao de coment
arios.
Veja como ficaria por exemplo um algoritmo para a avaliac
ao da media final e do resultado para um
aluno em uma disciplina com duas avaliac
oes de igual peso. Considere como resultado aprovado se
a media for maior ou igual a 6, 0.
Etapa
1
2
3

Comentario
Definicao do problema e dos objetivos
Compreensao do Problema
Construcao do Algoritmo

Status
OK!
Media = (Nota1+Nota2)/2
Media 6, 0 7 Aprovado!
Veja Figura 2 e Tabela 1

A Figura 2 apresenta o fluxograma para o problema acima e a Tabela 1 apresenta o pseudocodigo para o mesmo problema.
Incio
Ler Nota1,Nota2
Media (Nota1+Nota2)/2
Se (Media < 6) Ent
ao
Imprime Nao Passou
Senao
Imprime Passou
Fim Se
Fim.
Tabela 1: Problema 1: Pseudo-codigo

2.6

Estruturas de Controle de Fluxo para a Programac


ao em Scilab
As estruturas de processamento logico de interesse sao:

Estruturas Condicionais: As estruturas condicionais, com a sua representac


ao no Scilab
tem a seguinte forma:

2.6

Estruturas de Controle de Fluxo para a Programa


c
ao em Scilab

Incio

Nota1
Nota2
Mdia=(Nota1+Nota2)/2

Mdia<6?
No
Passou

Passou

Fim
Figura 2: Problema 1: Fluxograma
Estrutura logica
Se (Condicao) Ent
ao
Executar comandos
da alternativa verdadeira
Senao
Executar comandos
da alternativa falsa
Fim Se

Comando Scilab
if (Condic
ao) then
Executar comandos
da alternativa verdadeira
else
Executar comandos
da alternativa falsa
end

No esquema acima, a condicao representa a expressao logica (booleana) e alternativa representa a seq
uencia de comandos (varios comandos sao possveis).
Alem disso, as estruturas condicionais podem ocorrer em ninhos (nest). Observe a Figura 3
para a verificacao das estruturas validas e inv
alidas: A representac
ao de estruturas condicionais encadeadas e dada por:

2.6

Estruturas de Controle de Fluxo para a Programa


c
ao em Scilab

Vlido

Vlido

10

Invlido

Figura 3: Estruturas Condicionais.


Estrutura logica
Se (Condic
ao 1) Entao

Se (Condicao 2) Entao

Senao

Fim Se

Senao

Se (Condicao 3) Entao

Senao

Fim Se

Fim Se

Comando Scilab
if (Condicao 1) then

if (Condicao 2) then

else

end

else

if (Condicao 3) then

else

end

end

Ou podem-se ter estruturas dadas por:


Estrutura logica
Se (Condic
ao 1) Entao

Senao Se (Condicao 2) Entao

Senao

Fim Se

Comando Scilab
if (Condicao 1) then

elseif (Condicao 2) then

else

end

Estruturas Repetitivas
As estruturas repetitivas, lacos ou loops podem ser de varios tipos:
Controlados por contador: Uma variavel e fornecida com o no. de vezes que sera repetido
o laco.

2.6

Estruturas de Controle de Fluxo para a Programa


c
ao em Scilab

11

Controlados por sentinela: Ao final da entrada de dados e fornecido um dado especial


que sinaliza o fim do processamento.
Lacos contados: O laco e executado um no. fixo de vezes, utilizando uma vari
avel para
controle do laco.
Lacos com condicao no final: Faz o teste no final da estrutura.
Para propositos do Scilab, as estruturas de repetic
ao podem ser representadas por:
1. O laco enquanto: A estrutura do laco enquanto e dada por8 :
Estrutura logica
Enquanto (Condic
ao) Ent
ao

(Comandos)

[Senao]
[(Comandos)]
[ ]
Fim Enquanto

Comando Scilab
while (Condic
ao) then

(Comandos)

[else]
[(Comandos)]
[ ]
end

O comando while no Scilab possui as seguintes variac


oes9 :
while condicao , instruc
oes,...[,else instructions], end
while condicao do instruc
oes,...[,else instructions], end
while condicao then instruc
oes,...[,else instructions], end
2. O laco for: A estrutura de repetic
ao for pode ser utilizada no Scilab com a seguinte
sintaxe:
for variavel=express
ao do instruc
ao1,...,instruc
aoN,end
for variavel=express
ao, instruc
ao1,...,instruc
aoN,end
Se express
ao e uma matriz ou um vetor linha, a vari
avel recebe os valores de cada coluna
10
da matriz . Se a express
ao e uma lista a vari
avel recebe os valores das sucessivas
entradas da lista. Exemplos de utilizac
ao
Exemplo 1
for i=1:2:10,

(Comandos)

end

Exemplo 2
for a=[7, 9, -1, 8, 12] do

(Comandos)

end

Exemplo 3
for k=list(1,2,exemplo) do

(Comandos)

end

Estrutura de Condi
c
ao
A estrutura de condicao e equivalente a um ninho de estruturas condicionais (Se-Ent
aoSenao), a sua sintaxe e dada por:
8

Os parte indicadas entre colchetes [ ] s


ao opcionais.
Nota-se que o comando possui tres diferentes sintaxes: usa-se then ou do ou (,). Alem disso, independentemente
da estrutura opcional else, sempre finaliza-se o comando while com end.
10
Um express
ao muito usual e a dada por [n1:incremento:n2], onde a vari
avel receber
a todos os valores de n1
ate n2 de incremento a incremento. Ex.: [3:-0.1:2.5]=[3, 2.9, 2.8, 2.7, 2.6, 2.5]. Quando n
ao indicado o valor do
incremento e dado por 1.
9

2.7

Aspectos B
asicos para a Programa
c
ao em Scilab

12

select express
ao,
case expressao1 then instruc
oes1,
case expressao2 then instruc
oes2,

case expressaoN then instrucoesN,


[else instruc
oes],
end

2.7

Aspectos B
asicos para a Programac
ao em Scilab

Operadores L
ogicos para Condi
c
oes Compostas

As condicoes compostas utilizam os conectivos E(&), OU(|) e NAO().


Conjuncao E: (condicao 1 & condic
ao 2): retorna verdade (V) quando as duas condic
oes
sao verdadeiras.
Disjuncao OU :(condicao 1 | condic
ao 2): Basta que uma condic
ao seja verdadeira para
a expressao ser verdadeira.

Negacao NAO:
((condic
ao)): nega a condic
ao, de verdadeiro passa para falso (F) e
vice-versa.
Para ilustrar a utilizacao dos operadores logicos acima, apresenta-se a tabela verdade das
suas operacoes. Sejam as proposic
oes logicas p e q, ent
ao sabe-se que:
p
V
V
F
F

q
V
F
V
F

p&q
V
F
F
F

p|q
V
V
V
F

p
F
F
V
V

As expressoes logicas podem ainda utilizar os seguintes operadores relacionais:


Operadores relacionais
>
Maior que
<
Menor que
>=
Maior ou igual
<=
Menor ou igual
==
Igual
= ou <> Diferente
Coment
arios
A utilizacao de comentarios faz parte do conjunto de boas praticas na programac
ao computacional. Os comentarios devem ser descritivos e no Scilab devem ser colocados apos o sinal
de barras duplas (//), objetivando ajudar o leitor a entender melhor um trecho de algoritmo,
considerado boa pratica a utilizac
e nao para indicar qualquer acao a ser executada. E
ao de
comentarios no incio de cada script, para:
Uma descricao, sucinta, do que faz o algoritmo

2.8

Defini
c
oes B
asicas

13

Se necessario, como utilizar o algoritmo


Explicacao do significado das vari
aveis mais importantes
A estrutura de dados utilizada
Autor e datas de escrita e u
ltima revisao.

2.8

Defini
c
oes B
asicas

1. Dados: Um algoritmo manipula dados. Os dados podem ser de varios tipos:


(a) Numericos
inteiros: 1; 13; -45
reais: 34.7; -8.76; 0.23
ponto flutuante: 0.456xE9
(b) Nao numericos
caracteres: L; S
cadeia de caracteres (strings):SCILAB; 1990
(c) Logicos
VERDADEIRO (TRUE ): (6 > 3)
FALSO (FALSE ): (4 < 8)
(d) Objetos: Existem varios tipos de objetos, um exemplo importante sao as LISTAS:
(dias.da.semana = [segunda, quarta, sexta, ...]).
No Scilab o usuario podera definir outras outras estruturas de dados. Existem dois tipos de
estruturas de dados:
Estruturas primitivas: inteiro, caracter, real etc. A maioria dos computadores tem
instrucoes para manipula-las.
um conjunto que contem um
Estruturas nao-primitivas: vetores, matrizes etc. Vetor - E
n
umero fixo de elementos de um mesmo tipo. Cada elemento do vetor esta associado a
um ndice u
nico.
A operacao dos dados no Scilab da-se atraves de operadores:
operador
Soma
Subtracao
Multiplicac
ao
Divisao
Potencia
Conjugado transposto

sinal
+

exemplo
2+3
34
25
5/2
2 3
2 3
a0

Tabela 2: Operadores de Uso Comum

2.8

Defini
c
oes B
asicas

14

2. Constantes: Entidades que nao mudam de valor durante a execuc


ao do algoritmo. O SCILAB possui um n
umero de constantes especiais, tais como:
Constante
%i
%pi
%e
%eps
%nan
%inf
%s
%t
%f

representa

1
= 3.1415927.....
constante e = 2, 7182818, base dos logaritmos naturais
constante representando a precisao da maquina, 1 + %eps = 1
nao e um n
umero (not a number )
infinito
e o polinomio y(s) = s, s=poly(0,s).
constante logica para VERDADEIRO (true), ex. 1 == 1
constante logica para FALSO (false), ex. %t.

3. Vari
avel: Entidade que armazena dados e pode mudar de valor durante a execuc
ao de um
algoritmo. Possui apenas um valor num determinado instante. Possui um nome e um tipo.
Constitui boa pratica a escolha de nomes que indicam a func
ao da vari
avel no algoritmo11 .
Ao inves de S = (a b)/2.0 recomenda-se: Area = (Base Altura)/2.0, pois e bem mais
compreensvel.
A escolha dos nomes de variaveis deve utilizar dos seguintes criterios:
Deve comecar com uma letra.
O restante pode ser letra ou dgito ou algum caracter especial permitido.
Vari
avel Global e Local: Vari
aveis locais sao conhecidas apenas no subalgoritmo que as
define, portanto desconhecidas para o algoritmo principal. As vari
aveis globais sao conhecidas
por todos as funcoes do algoritmo12 .
oes: Forma de manipular vari
aveis, definindo operac
oes sobre elas.
4. Express
5. Opera
c
ao de Atribui
c
ao: Especifica que uma vari
avel recebe determinado valor. Em
pseudo-linguagem e usualmente indicada pelos smbolos: ou =.
Observacao 1: Uma variavel so pode receber valores do tipo em que ela foi definida. Exemplo:
Variaveis reais so recebem valores reais: X 5.6;
Variaveis Tipo Caracter: N ome 0 M aria0 ;
Tipo Booleano: Condicao F also
Forma geral:
variavel expressao
ou
variavel = expressao.
Observacao 2: Variaveis do lado direito nao sofrem alterac
ao. Toda vari
avel usada no lado
direito deve possuir um valor antes da expressao ser avaliada.
11

Embora algumas linguagens aceitem nomes de vari


aveis com acentos, constitui pr
atica comum n
ao se acentuar
as palavras que nomeiam as vari
aveis nos c
odigos em linguagem de programaca
o. No caso do Scilab, a acentuaca
o
n
ao e reconhecida e n
ao deve ser usada na definica
o de vari
aveis ou nomes de funco
es.
12
E considerada boa pr
atica na programaca
o computacional a utilizaca
o de vari
aveis globais apenas quando extremamente necess
aria.

3 O Ambiente do SCILAB

15

6. Subalgoritmos: Como apresentado na Figura 1 ve-se que a construc


ao de um algoritmo pode
ser dividida em varios subalgoritmos (subproblemas), esses subproblemas13 podem ser utilizados modularmente em varias partes do problema principal. A Figura 4 ilustra esse fato. A

Instrues
................
Usa funo
. ..............
Instrues

ta
cu

Ex

Funo
Instrues
................
Fim

Retorna

Figura 4: Estruturas de codigos usando funcoes


passagem de argumentos para uma funcao pode ser de varios tipos:
Por referencia (Pascal, Algol): O endereco do argumento e passado para o algoritmo
chamado. Tudo que e feito com a variavel que recebeu o argumento tambem tem efeito
na vari
avel de origem. Tambem chamada por variavel ou por endereco.
Por valor (C, PLM, ADA): O valor, e apenas o valor, do argumento e copiado para o
par
ametro da chamada. Qualquer acao sobre esta variavel no procedimento chamado
n
ao tem efeito na vari
avel ou expressao de origem.
Por resultado (ADA): Nada e passado na chamada ao procedimento. Somente quando
a execuc
ao do procedimento termina e que o valor da variavel usada como parametro e
que e copiado para a vari
avel do procedimento principal.
Por valor-resultado (ADA): Combina os dois tipos anteriores.
Por nome (Algol): O parametro recebe o NOME da variavel do argumento da chamada.
7. Recursividade: Um subalgoritmo pode chamar a si proprio.

O Ambiente do SCILAB

3.1

Interface Gr
afica do Ambiente Scilab

O Scilab possui uma interface grafica facilmente personalizada. A Figura 5 apresenta o janela
de interface do Scilab com o usuario.
O menu File: As seguintes opc
oes estao disponveis:
New Scilab: use-o para abrir outro ambiente do Scilab.
Exec ...: use-o para executar um arquivo (script) do Scilab.
13

No Scilab os subalgoritmos s
ao chamados de funco
es.

3.1

Interface Gr
afica do Ambiente Scilab

16

Figura 5: SCILAB: Ambiente de interacao com usuario.

Figura 6: SCILAB: Item Filedo Menu.


Open ...: use-o para carregar um script no editor padrao do Scilab (Scipad).
Load ...: use-o para carregar para a memoria vari
aveis que tenham sido anteriormente salvas
atraves de Save.
Save ...: use-o para salvar variaveis.
Change Directory: Mudar diretorio de trabalho.
Get Current Directory: Verificar diretorio de trabalho.
Print ...: use-o para imprimir relatorio de comandos executados e ainda disponveis no
ambiente Scilab.
Exit: use-o para sair so Scilab
O menu Edit: As seguintes opcoes estao disponveis:
Select All: Seleciona texto.

3.1

Interface Gr
afica do Ambiente Scilab

17

Copy: copia texto selecionado para clipboard.


Paste: cola texto em clipboard para posic
ao atual do cursor no Scilab.
Empty Clipboard: Esvazia clipboard de textos anteriormente copiado para o mesmo.
History: acessa um menu de comandos para edic
ao de comandos do Scilab.
O menu Preferences: As seguintes opc
oes estao disponveis:
Language: seleciona opcao de lngua para interface do Scilab. Opc
oes: Frances e Ingles.
Toolbar (F3): ativa/Desativa barra de ferramentas do Scilab.
Choose Font. . .: permite escolha de fontes para janela principal do Scilab.
ao em andamento no Scilab.
Clear History: limpa historico de comandos da sec
Clear Command Window (F2): limpa comandos processados. Equivalente ao comando
clc.
Console (F12): Apresenta/Oculta o console de sada do Scilab.
O menu Control: As seguintes opc
oes estao disponveis:
Resume: retorna ao modo de execuc
ao apos modo de pausa14 .
Abort: finaliza execucao do programa corrente.
Interrupt: interrompe a execuc
ao do programa corrente. Essa opc
ao permite entrar no modo
de pausa, contudo ela interrompera qualquer operac
ao sendo executada por Scilab.
O menu Editor: Abre editor SciPad para desenvolvimentos de scripts, vide Figura 7.
O menu Applications: As seguintes opc
oes estao disponveis:
Scicos: abre ambiente do Scicos.
EditGraph: abre janela de editor grafico.
m2sci: conversor de scripts de Matlab para Scilab (vide Figura (8)).
Browser Variables: Sistema que apresenta vari
aveis correntes na memoria do Scilab (vide
Figura (9)).
O menu ?: As seguintes opcoes estao disponveis:
Scilab Help (F1): disponibiliza janela com telas de ajuda de comandos e func
oes do Scilab.
Pode ser acessado diretamante digitando-se help <comando> ou simplesmente help.
14

No modo de pausa o Scilab cria um novo prompt, nesse modo pode-se entrar comandos do Scilab sem afetar os
c
alculos do modo principal do Scilab, indicado pelo prompt -n->. Pode-se ter v
arios nveis do modo de pausa, para
sair de um modo de pausa e retornar para o superior, entre <resume>, para subir dois nveis use o comando <abort>
ou <quit>, esse u
ltimo comando quando executado fora do modo de pausa forcar
a a finalizaca
o da seca
o do Scilab.

3.2

Iniciando o Uso do Scilab

18

Figura 7: SCIPAD: Editor para construc


ao de scripts no Scilab. Disponibilidade
de convers
ao de scripts Matlab em Scilab.
Configure: selec
ao de browser a ser utilizado pelo Scilab.
Scilab Demos: apresenta uma tela com um conjunto de programas demonstrativos de varias
areas de conhecimento.
Report a bug or a request: interage com time de desenvolvimento do Scilab atraves do
Scilab tracking system.
Scilab Web Site: visita a pagina do Scilab.
Scilab Newsgroup: visita a pagina de discussoes dos usuarios do Scilab.
About: Informac
oes sobre o Scilab, incluindo a licenca.

3.2

Iniciando o Uso do Scilab

Existem duas maneiras de se utilizar o Scilab. na forma de calculadora (ambiente de linhas de


comandos) e na execuc
ao de scripts.
Para se carregar na memoria o valor de uma vari
avel usa-se uma atribuic
ao (com o sinal de =),
por exemplo:
> a = 4.5; <return>
A finalizac
ao do lado direito da atribuic
ao pode conter o ; (ponto e vrgula) ou nao , caso a
atribuicao nao tenha o ; o Scilab reportara o valor da vari
avel fornecida15 .
> a = 4.5 <return>
15

Essa declaraca
o sup
oe que o ambiente Scilab esteja funcionando com mode(0), caso esteja em mode(-1) o Scilab
omitir
a o eco dos comandos. Para detalhes veja a funca
o mode.

3.2

Iniciando o Uso do Scilab

19

Figura 8: Janela do conversor de scripts Matlab para Scilab.

Figura 9: Janela do browser de vari


aveis do Scilab.
a= 4.5
Assim, apos proceder as seguintes operac
oes:
a=4.6;<return>
b=2.3;<return>
c=a/b;<return>
d=c c <return>
O Scilab reportara, d = 4., pois e o u
nico comando que nao apresentou a finalizac
ao de atribuicao
com o ;.

3.3

Aspectos B
asicos

3.3

Aspectos B
asicos

3.3.1

20

Coment
arios e escalares

Como anteriormente apresentado, os coment


arios para o Scilab sao representados por duas barras, //. Para os Scilab, qualquer objeto (incluindo, n
umero real, string, vari
avel logica, polinomio,
funcao racional) que nao estiver entre colchetes, sera considerada um objeto escalar.
Exemplos :
a = 1 // constante real <return>
2>1 // constante logica <return>
minha casa // string de caracter <return>
r = poly(1.,x) // polinomio com vari
avel x e raiz em 1,0 <return>
3.3.2

Express
oes e Vari
aveis

Analogamente a grande maioria das linguagens de programac


ao, o Scilab possui expressoes
matematicas como atribuicao, mas diferentemente da maioria das linguagens, o Scilab trabalha
com objetos de varias formas, inclusive matrizes.
Um aspecto importante para se lembrar na preparac
ao do codigo em Scilab e que o mesmo
nao necessita de qualquer tipo de declarac
ao ou definic
ao de dimensao para as vari
aveis usadas
no codigo. Quando Scilab encontra um novo nome de uma vari
avel, ele automaticamente cria a
variavel e aloca o tamanho apropriado para o seu armazenamento na memoria. Se a vari
avel ja
existe, Scilab muda o seu conte
udo e se necessario, aloca novo espaco para o seu armazenamento
na memoria.
Scilab e sensvel ao caso, ou seja, uma vari
avel, A e diferente da vari
avel a. O nome da vari
avel
em Scilab e dado por uma letra seguida de um n
umero de letras, dgitos ou sublinhado. Para se
ter acesso ao valor contido em uma vari
avel basta fornecer o seu nome.
3.3.3

Dados do tipo list

A lista (list) e uma colecao de objetos nao necessariamente do mesmo tipo, podendo conter
outros objetos (inclusive funcoes e outras listas). As listas sao muito u
teis para a definic
ao de
outros estruturas de dados. Existem dois tipos de listas: (a) listas ordinarias e (b) listas com tipo
definido (typed-list).

1. A lista list: lista ordinaria e definida no Scilab atraves do comando list, com sintaxe:
list(a1,....an)
que cria uma lista com elementos arbitrarios. list() define uma lista vazia. As operac
oes mais
comuns com as listas sao:
extracao [x, y, z...] = L(v), onde v e o vetor de ndices; [x, y, z] = L(:) extrai todos os
elementos.

3.3

Aspectos B
asicos

21

insercao: L(i) = a
remocao: L(i) = null() remove o e-esimo elemento da lista L.
Exemplos para listas ordinarias (list) :
>L=list(1,w,ones(2,2));<return>
A lista acima possui tres elementos: L(1) = 1, L(2) =0 w0 e L(3) = ones(2, 2), sendo que
cada elemento da lista pode ser acessado diretamente atraves da invocac
ao da sua posic
ao na
lista, exemplo:
>L(1)<return>
ans =
1.
>L(3)<return>
ans =
! 1. 1. !
! 1. 1. !
Pode-se ter acesso direto aos componentes de um elemento de uma lista, exemplo:
>L(3)(2,2)<return>
ans =
1.
2. A lista tlist: As listas tlist possuem um primeiro elemento especfico. Esse primeiro elemento
deve ser uma string de caracter (o tipo) ou um vetor de caracteres (com o primeiro elemento
definindo o tipo e os elementos seguintes os nomes dados `as entradas da lista). A lista tlist
e definida no Scilab atraves do comando tlist, com sintaxe:
tlist(tipo,a1,....an)
que cria uma lista com elementos arbitrarios apos o primeiro elemento, tipo, que e uma string
de caracter ou vetor de string de caracter. As operac
oes de extrac
ao, inserc
ao e remoc
ao de
list tambem sao validas para tlist, alem disso se o tipo especificar os nomes dos campos,
entao pode-se referir diretamente aos mesmos. Um importante aspecto de listas tlist e que
pode-se definir operadores que agem nos mesmos (overloading), assim pode-se definir por
exemplo a multiplicacao L1 L2 de duas listas tlist L1 e L2.
Exemplos para listas (typed-list) :
>L=tlist([Nome;Professor;Vetor],Lus Claudio,[2 3]);<return>
L=
L(1)
! N ome
!
!
!
! P rof essor !
!
!
! V etor
!
L(2)
Lu
s Cl
audio
L(3)

3.3

Aspectos B
asicos

22

! 2. 3. !
>L.Professor
ans =
Lus Claudio
>L(2)
ans =
Lus Claudio
>L.Vetor(2) // Equivalente a L(3)(1,2)
ans =
3.

3.3.4

Arquivo diary

Um arquivo diary e simplesmente um arquivo texto que contem os comandos do Scilab bem
como as suas respostas de uma secao do Scilab. Para se ativar o arquivo diary utiliza-se o comando
diary. Conforme indicado abaixo:
comando
diary(c:\arquivo.txt)
diary(0)

resultado
inicia arquivo diary para arquivo c:\arquivo.txt
finaliza arquivo diary

Apos a execucao do comando diary com uma especificac


ao de arquivo, todo o comando do usuario
e os resultados do Scilab na janela do Scilab serao arquivados em arquivo texto ate que o comando
diary(0) seja executado.
3.3.5

Operadores para Matrizes

Alem dos operadores ja definidos na Tabela (2), o Scilab possui os seguintes operadores para
matrizes:

3.3

Aspectos B
asicos

Operador
[]
;
()
()
0

\
/

.
.\
./
.
..
./.
.\.
3.3.6

23

Funcao
definicao de matriz e concatenac
ao
separador de linhas
extracao de elemento
insercao de elemento
transposta
adicao
subtracao
multiplicac
ao
divisao a esquerda
divisao a direita
potenciac
ao
multiplicac
ao elemento a elemento
divisao `a esquerda elemento a elemento
divisao `a direita elemento a elemento
potencia elemento a elemento
produto de kronecker
divisao de kronecker a direita
divisao de kronecker a esquerda

m = a(k)
a(k) = m

Fun
c
oes

Scilab proporciona um n
umero bastante grande de func
oes elementares. Algumas func
oes, para
aumentar eficiencia, sao construdas internamente (built-in) ao Scilab. Mas, func
oes inexistente
podem ser adicionadas atraves de programac
ao da mesma como scripts, que quando carregados na
memoria podem ser diretamente executados. A Tabela abaixo apresenta as func
oes basicas mais
simples disponveis no Scilab.
Fun
c
oes B
asicas do SCILAB
clc - limpa tela de comandos
chdir - muda diretorio padrao
exec - executa funcao
getf - carrega funcoes na memoria
help - ajuda
spec - calcula valores caractersticos
rank - calcula posto de matriz
trace - calcula traco de matriz
abs - valor absoluto
conj - conjugado
diag - matriz diagonal
eye - matriz identidade
floor - arredondamento para baixo
imag - parte imaginaria
integrate - integracao por quadratura
interp - interpolacao
interpln - interpolacao linear
intersect - retorna um vetor com valores comuns entre dois vetores
linspace - vetor linearmente espacado

3.4

Scilab: Primeiros Passos

24

log - logaritmo natural


log10 - logaritmo em base 10
max - maximo
min - mnimo
modulo - calcula o resto de uma divisao
ndims - n
umero de dimensoes de uma matriz
norm - norma de matriz
ones - matriz de 1s
rand - gerador de n
umeros randomicos
real - parte real
solve - resolve sistema linear simbolico
sort - ordenamento decrescente
sqrt - raiz quadrada
sum - soma elementos de matrizes
syslin - definicao de sistema linear
trisolve - resolve simbolicamente sistema linear
diary - diario da secao
disp - mostra variaveis
fprintf - emula a funcao fprintf da linguagem C
fscanf - leitura formatada de um arquivo
fscanfMat - ler uma matriz de um arquivo texto
getio - unidade logica de entrada/sada para Scilab
input - solicita entrada de dados para o usuario
load - carrega variaveis salvas na memoria
printf - Emula a funcao printf do C
scanf - entrada formatada de dados plot - faz grafico
plot2d - faz grafico 2D
xsave - salva grafico em arquivo
xtitle - adiciona ttulo em janela grafica
det - determinante
inv - matriz inversa
linsolve - resolve sistema linear
lsq - problema de mnimos quadrados
clear - limpa variaveis da memoria
file - funcao para manipulacao de arquivos. Ex.: u = file(open,c:\dados.txt,new)
who - apresenta variaveis carregadas na memoria do Scilab

3.4

Scilab: Primeiros Passos

Nessa secao apresentam-se algumas atividades no ambiente calculadora, na proxima secao aspectos de programacao serao introduzidos.
3.4.1

Carregando vari
aveis

Faca o seguinte exerccio no Scilab:

3.4

Scilab: Primeiros Passos

25

>a = 1.4 <return>


>b = 1.6; <return>
>a+b <return>
>a-b <return>
>a*b <return>
>a/b <return>
>a b <return>
>who <return>
>save a <return>
>clear a <return>
>a <return>
>b <return>
>load a <return>
>a <return>
>sin(a*%pi/b) <return>
>c = 3.2; <return>
>v=[a, b, c] <return>
>w=[a; b; c] <return>
>A = [1. 2. 3.; 4. 5. -6.; 1. -1. 0.] <return>
>B = [ 1. 1. 1. <return>
>2. 3. -1. <return>
>5. 7. -2. ] <return>
Para se acessar os elementos de uma matriz pode-se usar o comando (i, j), assim para se acessar
ao elemento na segunda linha e 3 coluna da matriz B acima, faz-se:
> B(2,3)<return>
que fornecera o valor 1. Este elemento tambem pode ser acessado atraves do comando B(8), pois
ocupa a posicao 8 da matriz B que e 3 3, com armazenamento por coluna16 .
> B(2,1)<return>
ans =
2.
Pode-se apagar linhas ou colunas de uma matriz utilizando-se colchetes vazios. Por exemplo:
> S = [ 1 2 3 4; 5 6 7 8; 9 10 11 12 ];<return>
> S(:,2) =[] <return>
S=
! 1. 3.
4. !
! 5. 7.
8. !
! 9. 11. 12. !
Existem varias funcoes basicas para a manipulac
ao e operac
ao de matrizes17 .
16
Se o usu
ario tenta usar um n
umero em uma posica
o fora da matriz, o Scilab fornecer
a um erro. Se ao contr
ario
deseja-se especificar um n
umero para uma posica
o fora da matriz o Scilab automaticamente aumentar
a a dimens
ao
da mesma para acomod
a-lo. Ex:
> B(4,1)<return> fornecer
a um erro (erro 21), por outro lado,
> B(4,1)=2<return> aumentar
a a matriz B com esse valor e os outros elementos para completar a dimens
ao da
matriz ser
ao nulos.
17
Pode-se definir na Scilab uma matriz multidimensional. Seja o exemplo de acesso ao elemento da matriz multidimensional i j k l m n, e A(i, j, k, l, m, n). Pode-se tambem utilizar o comando com sintaxe:

M=hypermat(dims [,v])
com dims sendo o vetor of dimens
oes e v (opcional) o vector elementos (valor default e dado por zeros(prod(dims),1))

3.4

Scilab: Primeiros Passos

26

Exemplos:
A funcao zeros cria matriz de elementos nulos,
>A = zeros(3,2)<return>
A=
! 0. 0. !
! 0. 0. !
! 0. 0. !
A funcao ones cria matriz com todos elementos iguais a 1,
>B = ones(3,2) <return>
B=
! 1. 1. !
! 1. 1. !
! 1. 1. !
A funcao eye cria matriz identidade. A func
ao eye utiliza as seguintes sintaxes:
X=eye(m,n)
X=eye(A)
X=eye( )

retorna matriz identidade de dimensao? m n


retorna matriz identidade com mesma dimensao que A
produz uma matriz identidade com dimensoes indefinidas

? O comando
e aplic
avel mesmo quando a matriz desejada n
ao e uma matriz quadrada.
Aten
ca
o: eye(10) e interpretado como eye(A) e A=10, ou seja, retorna uma matriz identidade de dimens
ao 1.
As dimens
oes ser
ao definidas quando a matriz for adicionada a uma matriz com dimens
oes fixas.

A funcao ceil produz um valor inteiro imediatamente superior ao argumento fornecido, por exemplo,
>ceil(4.35) <return>
ans =
5.
Por outro lado a funcao floor fornece o inteiro imediatamente menor que o argumento fornecido,
>floor(3.15)<return>
ans =
3.
A funcao round e uma funcao que arredonda os n
umeros do argumento para o seu inteiro mais
proximo, assim, round(3.15) fornecera a resposta igual a 3. e round(3.65) fornecera a resposta igual
a 4.
Para arredondar para baixo pequenos n
umeros, por exemplo o caso da matriz A abaixo utiliza-se
a funcao clean,
>A=[1 1e-15; 1e-10 2];<return>
>B=clean(A)<return>
B=
! 1. 0. !
! 0. 2. !
A funcao rand e usada para gerar vetores de n
umeros randomicos igualmente espacados na faixa
de [0, 1]. Para exemplificar, a geracao de um vetor linha com 5 n
umeros randomicos e dada por,
>rand(1,5)<return>
ans =
! .2113249 .7560439 .0002211 .3303271 .6653811 !
O Scilab possui uma biblioteca significativa para o calculo polinomial. Veja por exemplo como se
define um polinomio usando a funcao poly,

3.4

Scilab: Primeiros Passos

27

>p=poly([1 2 3],z,c) <return>


p = 1 + 2z + 3z2
Esse polinomio pode ser definido tambem, por exemplo na vari
avel s, fazendo-se:
>s=poly(0,s);<return>
>p=1+2*s+3*s 2
p = 1 + 2s + 3s2
E suas razes extradas atraves do comando roots:
>r=roots(p)<return>
r=
! .3333333 + .4714045i!
! .3333333 .4714045i!
A funcao poly com dois argumentos e interpretada como se o primeiro argumento seja dado pelas
razes do polinomio,
>q=poly(r,x)<return>
q=
.3333333 + .6666667x + x2
>3*q <return>
ans =
1 + 2x + 3x2
Operadores u
teis para manipula
c
ao de matrizes:
Operador
a : b : c ou a : c
:
$

C D
C. D
C\D

funcao
gera faixa de n
umeros de a ate c de b em b
refere-se a toda linha ou toda coluna
u
ltimo ndice de matriz ou vetor
operador transposto conjugado
operador para multiplicac
ao de matrizes C e D
operador para multiplicac
ao de matrizes C e D, elemento a elemento.
divisao `a esquerda. Equivale a inv(C) D

Exemplos:
> [1:2:6]<return>
ans =
!1 3 5!
> A(:,$) <return>
ans =
! 3. !
! 6. !
! 0. !
>D=B <return>
D=
! 1.
2.
5. 2. !
! 1.
3.
7. 0. !
! 1. 1. 2. 0. !
>A*D<return>
ans =

3.4

Scilab: Primeiros Passos

28

! 6.
5. 13. 2. !
! 15. 17. 43. 8. !
! 0. 1. 2. 2. !
>D.*D <return>
ans =
! 1. 4. 25. 4. !
! 1. 9. 49. 0. !
! 1. 1. 4.
0. !
importante ressaltar que o operador () refere-se a operac
E
ao transposta conjugada,
>A=[1+2*%i 2; 0 3+4*%i] <return>
A=
! 1. + 2.i 2. !
! 0 3. + 4.i !
>A <return>
ans =
! 1. 2.i 0 !
! 2. 3. 4.i !
3.4.2

Opera
c
oes de entrada/leitura de dados

Os comandos abaixo sao muito u


teis para a leitura de dados, principalmente em modo de
programacao:
Leitura via teclado
Funcao
input
scanf (formato);
read(%io(1),...)
x dialog
getvalue
x mdialog
x message
x choose
x choices
x matrix

Sintaxe
[x]=input(mensagem,[string])
ler dados formatados via teclado
leitura de dados formatados via teclado
r=x dialog(labels,valor inicial)
[ok,x1,..,x14]=getvalue(Ttulo,labels,tipos,inicial)
r=x mdialog(titulo,labels,valor default inicial)
[n]=x message(strings [,botoes])
[n]=x choose(items,titulo [,botao])
r=x choices(titulo,items)
[r]=x matrix(label,matriz-inicial)

Exemplo:
>x=input(Forneca n
umero de elementos?)<return>
Forneca n
umero de elementos? >2
x=
2.
No exemplo anterior ao se fornecer o valor 2, ele e atribudo a vari
avel x18 .
Exemplo:
>x=input(Forneca seu nome?,s)<return>
18

Para a vers
ao 2.7 do Scilab, a funca
o input apresenta uma mensagem de warning, para se retirar a mesma deve-se
executar o comando funcprot(0) na seca
o do Scilab ou acrescentar o comando funcprot(0) no arquivo .scilab para
processamento autom
atico do comando. Esse problema j
a foi resolvido na vers
ao Scilab 3.0.

3.4

Scilab: Primeiros Passos

29

Forneca seu nome? >Maria


x=
Maria
Atraves da funcao: [H,ierr]=evstr(Z), que transforma string em valores numericos, podem-se utilizar
as funcoes x dialog para a leitura de valores numericos de programas. Assim,
Exemplo x dialog/evstr:
>v=evstr(x dialog(Valor ?,0.2)) <return>
que gera uma figura contendo o valor 0.2 e com as opc
oes de entrada de OK ou Cancel. A vari
avel
v recebera o valor contido na janela se o botao selecionado for o OK, se outra forma a variavel v
sera igual a [ ];
Exemplo de getvalue:
> labels=[magnitude;frequencia;fase ]; <return>
> [ok,mag,freq,ph]=getvalue(Defina sinal senoidal,labels,. . . <return>
> list(vec,1,vec,1,vec,1),[0.85;10 2;%pi/3]) <return>
ph =
1.0471976
freq =
100.
mag =
.85
ok =
T
O exemplo acima gera a janela conforme a Figura 10:

Figura 10: Exemplo de comando getvalue

3.4

Scilab: Primeiros Passos

30

Exemplo de x mdialog/evstr:
>txt=[magnitude;frequencia;fase ];<return>
>s=x mdialog(Forneca sinal senoidal,txt,[1;10;0]) <return>
>mag=evstr(s(1));<return>
>freq=evstr(s(2));<return>
>fase=evstr(s(3));<return>
Exemplo de x message:
>r=x message([Sistema Quadratico; <return>
> Continua?],[Sim,Nao])<return>
Exemplo de x choose:
>n=x choose([item1;item2;item3],[that is a comment],Return) <return>
Exemplo de x choices:
>l1=list(Opcao 1,1,[c1,c2,c3]);<return>
>l2=list(Opcao 2,2,[d1,d2,d3]); <return>
>l3=list(Opcao 3,3,[e1,e2]); <return>
>r=x choices(Menu de Escolha,list(l1,l2,l3)); <return>
Que retornara o vetor r com o item de escolha das opc
oes, Ex:
r=
! 1. 2. 2.!
Exemplo de x matrix/evstr:
>m=evstr(x matrix(Forneca matriz 3x3,zeros(3,3))) <return>
No exemplo acima a matriz e inicializada com valores zeros atraves da func
ao zeros(3,3).
Leitura de arquivo
A tabela a seguir apresenta um conjunto de func
oes essenciais para a leitura de dados de arquivos:
Sintaxe
Func
ao
[fd,err]=mopen(file [, mode, swap ]) abre arquivo, compatvel com fopen da linguagem C
err=mclose([fd]) ou mclose(all)
fecha arquivo aberto com mopen
read(arquivo,m,n,[formato])
leitura de matriz de dados linha apos linha
fscanf (arquivo,formato)
leitura de dados de arquivo

3.4.3

Opera
c
oes de sada/escrita de dados

O Scilab possui varias formas de apresentar resultados na janela de comandos. O forma mais
simples e a execucao de comando sem o ponto-e-vrgula (;). Alem dessas formas pode-se apresentar
resultados com as funcoes:
Comando
;
disp
file
write(%io(2),....)
print(%io(2),....)
printf (formato,valor1,..,valorn)
mprintf (formato,a1,...,an);
mfprintf (fd,formato,a1,...,an);
str=msprintf (formato,a1,...,an);

finalidade
inibe apresentac
ao de resultado apos execuc
ao de instruc
ao
mostra objeto na tela do Scilab
seleciona unidade logica e gerencia arquivo
escreve resultados formatados na janela do Scilab
escreve resultados formatados na janela do Scilab
emula a func
ao printf da linguagem C
converte, formata e escreve dados na janela do Scilab
converte, formata e escreve dados para arquivo
converte, formata e escreve dados em uma string

3.4

Scilab: Primeiros Passos

31

As funcoes mprintf e msprintf sao interfaces para as func


oes printf e sprintf da linguagem C.
Escrita em arquivo
Comando
file
write(fd,....)
print(fd,....)
fprintf (fd,formato,a1,...,an);
mfprintf (fd,formato,a1,...,an);

finalidade
seleciona unidade logica e gerencia arquivo
escreve resultados formatados na janela do Scilab
escreve resultados formatados na janela do Scilab
converte, formata e escreve dados para arquivo
converte, formata e escreve dados para arquivo

A funcao mfprintf e uma interface para a func


ao fprintf da linguagem C. A string de status do
comando file possui as seguintes opcoes:
string
new
old
unknown
scratch

significado
arquivo nao pode existir (default)
arquivo deve existir
status desconhecido
arquivo a ser apagado no final da sec
ao

As acoes possveis seguem as atribuicoes da string correspondente:


string
close
rewind
backspace
last

significado
fecha o(s) arquivo(s) representado(s) pela unidade logica associada
coloca o ponteiro para o incio do arquivo
coloca o ponteiro para o incio do u
ltimo registro
coloca o ponteiro apos o u
ltimo registro

O Scilab possui dois tipos de acesso a um arquivo:


acesso
sequential
direct

significado
acesso seq
uencial (default)
acesso direto

Sada em forma gr
afica
O Scilab possibilita apresentar resultados em varios formatos de graficos, imprimir, formatar, salvar
figuras em varios formatos graficos (Xfig, GIF, PS, EPS). As func
oes graficas basicas na Scilab19
estao apresentadas na Tabela 3.
Exemplos 1
>x=0:0.1:2*%pi; <return>
>plot(x,sin(x),seno,tempo,faz grafico de seno)<return>
>xbasc()<return>
>plot([sin(x);cos(x)]) <return>
>// Faz campo de direcoes de ODE
19

Existe uma biblioteca de func


oes gr
aficas, PLOTLIB, disponivel em:
http://www.engineering.usu.edu/cee/faculty/gurro/plotlib.html, com v
arias funco
es similares as funco
es do
MATLABr . Entre elas, destacam-se:

3.4

Scilab: Primeiros Passos

32

>deff([xdot] = derpol(t,x),..
>[xd1 =x(2);..
> xd2 = -x(1) + (1 - x(1)**2)*x(2);..
>xdot = [ xd1 ; xd2 ]])
>xf= -1:0.1:1;
>yf= -1:0.1:1;
>fchamp(derpol,0,xf,yf)
Exemplos 2
>deff([y]=f(x),y=sin(x)+cos(x))
>x=[0:0.1:10]*%pi/10;
>fplot2d(x,f)
Exemplos 3
>// cria figura n
umero 3
>h=figure(3);
>// cria figura n
umero 1 e coloca texto
>uicontrol( h, style,text, ...
> string,Isto e uma figura, ...
> position,[50 70 100 100], ...
> fontsize,15);
>// Cria figura 1 e coloca texto
>figure();
>uicontrol( style,text, ...
> string,Outra figura, ...
plot(y)
plot(x,y)
plot(x,y,+)
plot(x,y,o)
plot(x,y,-)
plot(x,y,)
plot(x,y,-.)
hold()
semilogx(x,y)
semilogy(x,y)
loglog(x,y)
plot(x1,y1,x2,y2,x3,y3)
semilogx(x1,y1,x2,y2,x3,y3)
semilogy(x1,y1,x2,y2,x3,y3)
loglog(x1,y1,x2,y2,x3,y3)
legend(leg1,leg2,leg3)
subplot(m,n,k)
plot3(x,y,z)
z=feval(x,y)
mesh(x,y,z)
mesh(x,y,f)
surf(x,y,z)
surf(x,y,f)
surfl(x,y,z)
surfl(x,y,f)

Apresenta gr
afico do vetor y contra seus ndices
Apresenta gr
afico de valores do vetor x e y, ambos do mesmo comprimento
Apresenta gr
afico de x contra y usando + como smbolo
Apresenta gr
afico de x contra y usando o como smbolo
Apresenta gr
afico de x contra y usando linha contnua
Apresenta gr
afico de x contra y usando linha tracejada (dashed )
Apresenta gr
afico de x contra y usando linha tracejada-ponto (dash-dot)
Mantem ou libera janela gr
afica ativa para gr
aficos adicionais
Gr
afico com escala logartmica no eixo-x
Gr
afico com escala logartmica no eixo-y
Gr
afico com escala logartmica em ambos eixos
Gr
afico de conjunto de dados (x1,y1), (x2,y2) etc.
Gr
afico de conjunto de dados com escala logartmica no eixo-x
Gr
afico de conjunto de dados com escala logartmica no eixo-y
Gr
afico de conjunto de dados com escala logartmica em ambos eixos
Apresenta caixa de legendas
Define janela matricial e seleciona gr
afico n
umero k na janela de m linhas e n colunas
Apresenta gr
afico 3D dos vetores x,y,z com coordenadas de pontos
Gera matriz de z(i,j) = f(x(i),y(j)), x,y s
ao vetores
Superfcie (mesh) definida pelos vetores x,y e matriz z
Superfcie (mesh) definida pelos vetores x,y e funca
o f [f(x,y)]
Superfcie s
olida definida pelos vetores x,y e matriz z
Superfcie s
olida definida pelos vetores x,y e funca
o f [f(x,y)]
Superfcie com sombra (lightened ) definida pelos vetores x,y e matriz z
Superfcie com sombra (lightened ) definida pelos vetores x,y e funca
o f [f(x,y)]

3.4

Scilab: Primeiros Passos

33

> position,[50 70 100 100], ...


> fontsize,15);
>// fecha janela grafica corrente (fig. 1)
>close();
>// fecha figura 3
>close(h);
Exemplos 4
>// cria figura
>f=figure(position, [10 10 300 200]);
>// cria item na barra de menu
>m=uimenu(f,label, Janela);
>//cria dois tens no menu janela
>m1=uimenu(m,label, Operacoes);
>m2=uimenu(m,label, Sai Scilab, callback, exit);
>// cria submenu para o item operac
oes
>m11=uimenu(m1,label, Nova janela, callback,xselect());
>m12=uimenu(m1,label, Limpa janela, callback,xbasc());
>// fecha figura
>close(f);
Os comandos de graficos possuem um argumento que classifica o estilo das curvas quanto a forma
(contnua ou discreta) e cor da curva. Para se ter acesso `a janela de configurac
ao basta usar as
funcoes: > xset()
Que apresenta janela para configuracao de aspectos graficos, ou,
> getcolor()
O argumento de estilo pode ser fornecido diretamente na chamada da func
ao. Para exemplificar:
>plot2d(x,y,arg)
onde arg e um vetor real de tamanho igual a n
umero de curvas, com default dado por [1:ncurvas],
(1 para primeira curva, 2 para a segunda e assim sucessivamente). Se arg e negativo ou zero a
curva usa forma discreta e se positivo e a curva continua conforme mapa de cores.
argumento
-9
-8
-7
-6
-5
-4
-3
-2
-1
0

atributo
crculo vazio,
sinal,
triangulo, 5
sinal,
losango vazio,
losango preenchido,
asterisco, *
sinal, x
sinal, +
pontilhado, .

argumento
1
2
3
4
5
6
7
8
9
..
.
32

atributo
curva preta
curva azul
curva verde claro
curva azul claro
curva vermelha tonalidade 1
curva magenta
curva amarela tonalidade 2
curva branca
curva azul escuro
..
.
curva dourada

A vers
ao do Scilab para Linux apresenta essa cor como vermelha.

Observacoes:

3.4

Scilab: Primeiros Passos

34

1. Para se fazer uma curva com uma cor diferente da cor preta, deve-se mudar a cor padrao
da paleta de cores do Scilab usando o comando xset(color,valor), porem, para se mudar
apenas a cor dos pontos pode ser usar as func
oes get() e set().
Exemplo: Deseja-se fazer uma curva com os losangos preenchidos na cor magenta (cor=6).
> clf()// limpa janela grafica
> x=[-.2:0.1:2*%pi]; // cria vetor x
> plot2d(x-.3,sin(x-1),[6] ); // Faz grafico
> a=get(current_axes); // Ler dados do eixo
> p1=a.children.children(1);
> set(p1,mark_style,4);
2. Para se exportar uma figura em formato para inclusao em Latex, basta proceder conforme
indicado na Figura (11).

Figura 11: Gerac


ao de figura para inclusao em arquivos Latex.
3. A configurac
ao padrao do modo grafico no Scilab nao encontra-se com limpeza automatica.
Assim, caso nao queira fazer graficos superpostos deve-se abrir outra janela grafica com o
comando xset, (xset(window,numerojanela)), ou proceder a limpeza da janela ativa
com os comandos xbasc() ou clf ().
4. A utilizac
ao das func
oes do novo estilo grafico flexibilizam e facilitam a especificac
ao dos
gr
aficos necessarios. As func
oes get, gda() e set possuem muitos recursos. O script a seguir
apresenta aa demonstrac
ao de alguns recursos para as func
oes graficas (vide Figura (12)).

3.4

Scilab: Primeiros Passos

35

clf()
set(figure_style,new) //cria uma figura
a=get(current_axes)//recebe manipulador (handler) do novo eixo criado
a.axes_visible=on; // torna os eixos vis
veis
a.font_size=3; //configura o tamanho da fonte para os labels dos tics
a.x_location=top; //configura a posi
c~
ao do eixo x
a.data_bounds=[-7,-2;7,2]; //configura os tamanhos limites dos eixos x, y
a.sub_tics=[5,0];
a.labels_font_color=5;
a.grid=[2,2];
a.box=off;
x=-2*%pi:0.1:2*%pi;
plot2d(x-.3,sin(x)*7+.2,16);
da=gda(); // recebe manipulador do modelo do eixo
da.thickness = 2; // Espessura da linha dos eixos
da.foreground = 6; // cor das linhas dos eixos
// t
tulo
da.title.text=Meu Titulo@Principal // T
tulo em m
ultiplas linhas
da.title.foreground = 12;
da.title.font_size = 4;
// x labels default
da.x_label.text=x;
da.x_label.font_style = 8;
da.x_label.font_size = 2;
da.x_label.foreground = 5;
da.x_location = middle;
// y labels default
da.y_label.text=y;
da.y_label.font_style = 3;
da.y_label.font_size = 5;
da.y_label.foreground = 3;
da.y_location = right;
Para que se entenda o potencial dessas func
oes apresenta-se a seguir as propriedades padroes
de um eixo. E que sao portanto factveis a configurac
ao.
-->set(figure_style,new)
-->a=get(current_axes)
a=
Handle of type Axes with properties:
======================================
parent: Figure
children: []
visible = on
axes_visible = off
grid = [-1,-1]
x_location = bottom
y_location = left
title: Label

3.4

Scilab: Primeiros Passos

-7

-5

36

-3

Meu Titulo
Principal
-1
1

y7
9
7
5
3
1
-1
-3
-5
-7

Figura 12: Exemplo de figura usando o estilo grafico novo.


x_label: Label
y_label: Label
z_label: Label
box = on
sub_tics = [1,1]
tics_color = -1
font_style = 6
font_size = 1
font_color = -1
isoview = off
cube_scaling = off
view = 2d
rotation_angles = [0,270]
log_flags = nn
tight_limits = off
data_bounds = [0,0;1,1]
margins = [0.125,0.125,0.125,0.125]
axes_bounds = [0,0,1,1]
auto_clear = off
auto_scale = on
hiddencolor = 4
line_style = 0
thickness = 1
mark_mode = off
mark_style = 0
mark_size = 1

3.4

Scilab: Primeiros Passos

background
foreground
clip_state
clip_box =

37

= -2
= -1
= off
[]

Comando utilizacao
driver
seleciona driver grafico
xclear
limpa janela grafica
xpause
pausa em milisegundos
xbasc
limpa janela grafica
clf
limpa janela grafica
xclick
aguarda click de mouse
xbasr
refaz grafico de janela grafica
xinit
inicializa device gr
afico (arquivo)
xend
encerra sec
ao grafica
xset
define propriedades de grafico
xget
recebe propriedades do grafico corrente
plot2d
faz grafico linear por partes(*)
plot2d2
faz grafico constante por parte (degrau)(*)
plot2d3
faz grafico de barras verticais(*)
plot2d4
faz grafico com setas (flechas)(*)
subplot
divide janela grafica em matriz de sub-janelas
xtitle
adiciona ttulo `a janela grafica e eixos X e Y
xgrid
adiciona grid em grafico 2D
champ
faz grafico de campo vetorial 2D
fchamp
faz campo de direc
oes de uma ODE 2D de 1a. ordem
xsave
salva grafico para arquivo
xload
leitura de grafico salvo com xsave
figure
cria pagina grafica tksci
close
fecha janela grafica tksci
uicontrol cria objeto GUI
uimenu
cria menu ou submenu em figura
xselect
seleciona (se existente) ou cria janela grafica
(*)Para verificar demonstrativo execute a func
ao sem argumentos, Ex.: plot2d3().
Tabela 3: Func
oes graficas basicas do Scilab

3.4.4

Opera
c
oes Simb
olicas no Scilab

O Scilab nao e um ambiente simb


olico, porem possui algumas func
oes para manipulac
ao de
expressoes simbolicas. Entre as funcoes mais usuais destacam-se:

3.5

Programa
c
ao

addf
subf
mulf
ldivf
rdivf
cmb lin
eval
evstr
trianfml
solve

38

adicao simbolica
subtracao simbolica
multiplicacao simbolica
divisao simbolica `a esquerda
divisao simbolica `a direita
com 4 argumentos, a, x, b e y, cria combinac
ao linear a x + b y
avalia expressao simb
olica
avalia expressao simb
olica
produz matriz triangular superior de uma matriz simb
olica
obtem solucao de sistema simb
olico Ax = b, A e matriz triangular superior

Para resolver simbolicamente o sistema linear Ax = b em que a matriz A nao e uma matriz
triangular superior pode-se seguir o seguinte procedimento:
1. Cria-se uma matriz aumentada Aaum = [A|b]
2. Usa-se a funcao trainfml na matriz aumentada para se produzir uma matriz triangular
superior, Aaum2
3. Extrai-se uma matriz triangular superior com as mesmas dimensoes de A de Aaum2, A1
4. Faca a u
ltima coluna em Aaum2 igual a um vetor b1
5. A solucao do sistema Ax = b e obtida utilizando-se a func
ao solve com argumentos A1 e
b1
Alem dessas funcoes o Scilab possui um conjunto de func
oes para manipulac
ao simb
olica de
expressoes polinomiais, conforme apresentado no Apendice.
clean
coeff
coffg
degree
denom
derivat
determ
detr
factors
horner
invr
numer
pdiv
residu
roots

3.5

limpa matrizes (arredonda para zero valores muito pequenos)


coeficientes de matriz polinomial
inversa de matriz polinomial
grau de matriz polinomial
denominador
derivada de matriz racional
determinante de matriz polinomial
determinante polinomial
fatoracao numerica real
avaliacao de polinomio ou matriz racional
inversao de matriz (racional)
numerador
divisao polinomial
resduo
razes de polinomios

Programa
c
ao

O Scilab possui uma serie de ferramentas para desenvolvimento de programas incluindo operadores de comparacao, repeticoes condicionais, func
oes e criac
ao de novos ambientes.

3.5

3.5.1

Programa
c
ao

39

Fun
c
oes

Funcoes sao colecoes de comandos que podem ser criadas e executadas de varias formas no
Scilab. Elas podem passar argumentos e podem ser elementos em listas. O formato geral de uma
funcao e:
function [y1 ,y2 ,. . .,yn ]=nome func(x1 ,x2 ,. . . ,xm )

endfunction
onde xi sao os m argumentos de entrada para a func
ao nome func e yj sao os argumentos de
sada. Os parametros de entrada e sada podem ser qualquer objeto Scilab, inclusive func
oes.
Cada funcao deve ser finalizada com o comando endfunction. Quando as func
oes sao definidas
em arquivo como scripts, elas devem ser carregadas no Scilab atraves dos comandos getf (carrega
funcao na memoria) e exec (carrega para a memoria e executa). A boa pratica de programac
ao
em Scilab e usar as extensoes:
extensao
.sce
.sci

uso
arquivo para execuc
ao direta
arquivo de func
oes para carregar em memoria

No caso de arquivos, cada um pode conter mais de um func


ao. A forma mais u
til de se criar func
oes
e atraves de um editor, porem elas podem ser criadas diretamente no ambiente do Scilab conforme
indicado a seguir:
Exemplo
> function [x]=teste(y) <return>
>
if y>0 then, <return>
>
x=1; <return>
>
else, <return>
>
x=-1; <return>
>
end <return>
> endfunction <return>
ou, pode-se utilizar a definicao em linha
> deff([x]=teste(y),if y>0 then, x=1; else, x=-1; end) <return>
A execucao em ambos os casos da-se conforme o exemplo abaixo:
> a=teste(5) <return>
a=
1.
A tabela abaixo apresenta alguns comandos u
teis para o desenvolvimento de func
oes:
Comando
global
argn
error
warning
pause
break
return ou resume

utilidade para programac


ao
definicao de vari
avel global
n
umero de argumentos de uma func
ao
imprime string em uma mensagem de erro e para a instruc
ao corrente
imprime string em uma mensagem de atenc
ao
para depurac
muda para o modo pause. Util
ao de programa
interrompe instruc
ao de repetic
ao
retorna ou resume execuc
ao

3.5

Programa
c
ao

40

Exemplo de leitura de matriz de arquivo texto:


Esse exemplo usa o comando file para abrir um arquivo para leitura, e a func
ao read para a leitura
de uma matriz de um arquivo texto. Essa e uma forma adequada de fornecer uma tabela ao Scilab.
Para efeito de exemplificacao, suponha que a tabela encontra-se no arquivo c:\tabela1.dat e
possui os seguintes dados:
1.21
2.13
10.0
2.98

3.14
3.56
0.23
8.41

4.56
7.89
5.43
6.23

O comando file usa tres argumentos: o primeiro e a opc


ao open para indicar que o arquivo
esta sendo aberto, o segundo argumento e o nome do arquivo e o terceiro e um qualificado que
indica que o arquivo ja existe (necessario para arquivos com dados para leitura). Do lado esquerdo
da funcao tem-se a variavel u que recebera um valor inteiro representando a unidade logica de
entrada-sada atribuda para o arquivo nome. O comando read possui um segundo argumento,
-1, que permite nao se conhecer o n
umero de linhas a ser lida e o Scilab lera todas as linhas da
matriz. O n
umero de colunas devera ser conhecido, no exemplo e dado por 3. A func
ao a seguir le
a tabela do arquivo c:\tabela1.dat e separa as 3 colunas em um n
umero de vari
aveis x1, x2, x3:
function [x1,x2,x3] = le_tabela()
printf( Lendo tabela de arquivo texto \n)
printf(===============================\n)
printf( )
nome = input(Entre nome do arquivo entre aspas:\n)
u = file(open,nome,old)
Table = read(u,-1,3)
[n m] = size(Table)
printf( )
printf(Existem %d colunas na tabela,m)
for j = 1:m
execstr(x+string(j)+ = Table(:,j) )
end
close(u)
endfunction
Existem varias formas alternativas de se processar a leitura acima, por. ex.:

4 Utilizando o SCILAB na Engenharia Qumica

41

function [x1,x2,x3] = le_tabela2()


printf( Lendo tabela de arquivo texto \n)
printf(===============================\n)
printf( )
nome = xgetfile()
u = file(open,nome,old)
x1=[]; x2=[]; x3=[];
for j = 1:4
[x y z] = fscanf(u,%f %f %f);
x1 = [x1;x];
x2 = [x2;y];
x3 = [x3;z];
end
close(u)
endfunction
Observe que nesse caso precisa-se saber tambem quantas linhas devem ser lidas do arquivo. Ou,
simplesmente, pode-se utilizar o comando fscanfMat para a leitura da matriz, ou seja:
> X = fscanfMat(c:\tabela1.dat)
O comando correspondente para a escrita de uma matriz e dado pelo comando fprintfMat:
Exemplo de escrita de matriz em arquivo texto:
>A = [ 1 2 3; 4 5 6];
>arq = c:\matriz.txt;
>u = file(open,arq,new);
>fprintfMat(arq,A,%10.6f)
>file(close,u)

Utilizando o SCILAB na Engenharia Qumica

Nessa secao apresenta-se a utilizac


ao o Scilab para o estudo de problemas da Engenharia
Qumica dentro das seguintes categorias:
1. Sistemas de Equacoes Algebricas Lineares
2. Problemas de Valor Caracterstico
3. Sistemas de Equacoes Algebricas Nao Lineares
4. Sistemas de Equacoes Diferencias Ordinarias: PVI e PVC
5. Otimizacao
6. Soluc
ao de equacoes algebrico-diferenciais
7. Solucao de Equacoes Diferenciais Parciais (EDPs) por diferencas finitas

4.1

Sistemas de Equa
c
oes Alg
ebricas Lineares

4.1

Sistemas de Equa
c
oes Alg
ebricas Lineares

42

Como ilustracao, seja um sistema de equac


oes algebricas lineares dado por:

2x + 3y 5z = 7
6x 2y + z = 5

x + 3y z = 4
Esse sistema pode ser escrito na forma matricial como A w = b, com a matriz A definida por:
>A=[2 3 -5; 6 -2 1; 1 3 -1]
A=
! 2. 3. 5. !
! 6. 2. 1. !
! 1. 3. 1. !
e o vetor b dado por:
>b=[-7;5;4]
b=
! 7. !
! 5. !
! 4. !
A solucao do sistema e o vetor coluna w = [x; y; z], que pode ser calculado nas formas abaixo:
1. Atrav
es de w = A1 b, fun
c
ao inv
>w=inv(A)*b
w=
! 1. !
! 2. !
! 3. !
Para se verificar a solucao pode-se usar:
>A*w
ans =
! 7.!
! 5.!
! 4.!
que e igual ao vetor b. Assim a solucao esta correta.
2. Atrav
es do operador de divis
ao `
a esquerda (\)
>w = A\b
w=
! 1. !
! 2. !
! 3. !
3. Utilizando-se a fun
c
ao linsolve
A funcao linsolve calcula todas as soluc
oes do problema A x + c = 0. Observe que o vetor c e
igual ao vetor b. Assim, pode-se resolver o problema acima fazendo-se,
>w=linsolve(A,-b)
w=

4.2

Problemas de Valor Caracterstico

43

! 1. !
! 2. !
! 3. !
A funcao linsolve possui outros argumentos, a sintaxe completa da func
ao e dada por:
[x0,kerA]=linsolve(A,c [,x0])
Nesse caso:
x0
kerA

solucao particular do sistema (se existir)


nullspace de A.

Qualquer x = x0 + kerA q com q arbitr


ario satisfaz A x + c = 0. Se x0 compatvel e fornecido
na entrada, x0 e retornado, senao um x0 compatvel, se existir, sera retornado.
4. Utilizando-se da Elimina
c
ao de Gauss-Jordan, row-reduced echelon form
A determinacao da solucao do sistema atraves da Eliminac
ao de Gauss-Jordan utiliza a func
ao rref
que aplica a decomposicao LU `a esquerda. A func
ao rref possui sintaxe: R = rref (A). Assim,
para se resolver o sistema deve-se gerar a matriz aumentada Aum = [A|b] e aplicar-se a func
ao
rref,
>Aum = [A b]
Aum =
! 2.
3. 5. 7. !
! 6. 2.
1.
5. !
! 1.
3. 1.
4. !
>rref(Aum)
ans =
! 1. 0. 0. 1. !
! 0. 1. 0. 2. !
! 0. 0. 1. 3. !
Essa matriz fornece a solucao de x,y e z na quarta coluna.

4.2

Problemas de Valor Caracterstico

O estudo do problema de valor caracterstico, e conseq


uentemente, dos valores caractersticos
(autovalores) e vetores caractersticos (autovetores), e de grande aplicabilidade na analise de sistemas da Engenharia Qumica. O Scilab baseia-se nas rotinas do Lapack para essas determinac
oes.
Sejam os exemplos ilustrativos abaixo em que deseja-se estudar as caractersticas de estabilidade
do sistema representado pelas equacoes:

dx
1 2
=
x
2 1
dt
com as condicoes iniciais: x(0) = xo . Esse estudo pode ser feito analise do problema de valor
caracterstico associado, assim determinando-se os valores caractersticos do problema associado
e pode-se, pela Teoria de Lyapunov, avaliar a estabilidade do sistema linear conforme o sinal da
parte real dos mesmos:
<() < 0 sistema estavel

4.2

Problemas de Valor Caracterstico

44

<() > 0 sistema instavel


Esse estudo pode ser feito de varias formas:
1. Utilizando-se a fun
c
ao spec
A funcao spec possui as seguintes sintaxes:
evals=spec(A)
[X,diagevals]=spec(A)
evals=spec(A,E)
[al,be]=spec(A,E)
[al,be,Z]=spec(A,E)
[al,be]=spec(A,E)
[al,be,Q,Z]=spec(A,E)
Com os parametros:
A
E
evals
diagevals
al
be
X
Q
Z

matriz quadrada real ou complexa


matriz quadrada real ou complexa com mesma dimensao de A
vetor de valores caractersticos (autovalores)
matriz diagonal com valores caractersticos na diagonal
vetor, al./be fornece os valores caractersticos
vetor, al./be fornece os valores caractersticos
matriz quadrada inversvel, matriz dos vetores caractersticos
matriz quadrada inversvel, pencil left eigenvectors
matriz quadrada inversvel, pencil right eigenvectors

Utilizacao:
evals=spec(A)
[evals,X] =spec(A)
evals=spec(A,E)
[al,be] = spec(A,E)
[al,be,Z] = spec(A,E)
[al,be,Q,Z] = spec(A,E)
(*)Os valores caractersticos sao

retorna em vetor evals os valores caractersticos de A


retorna os valores (evals) e vetores (X) caractersticos de A
retorna espectro de sE A, razes de sE A
retorna espectro de sE A(*)
retorna al, be e a matriz Z
retorna al, be, Q e a matriz Z
dados por al./be. Para E = eye(A), tem-se que al./be e spec(A)

2. Utilizando-se as fun
c
oes para c
alculo simb
olico
A determinacao dos valores caractersticos do problema de valor caracterstico: Ax = x, exige-se
que se encontre as razes da equacao caracterstica: det(A I) = det(I A) = 0.
3. Utilizando-se a fun
c
ao bdiag
A funcao bdiag implementa uma diagonalizac
ao em bloco da matriz A, a sua sintaxe e dada por:
[Ab [,X [,bs]]]=bdiag(A [,rmax])
Com os parametros:

4.2

Problemas de Valor Caracterstico

45

A
matriz quadrada
rmax controla o condicionamento de X, default e norma l1 de A(*)
Ab
matriz quadrada
bs
fornece a estrutura de blocos (dimensao dos blocos)
X
e a mudanca de base, matriz nao singular
(*) Para se obter uma forma diagonal (se existente) escolhe-se elevados
valores para rmax, ex. rmax=1/%eps.
A funcao bdiag pode ser utilizada diretamente para a determinac
ao dos valores caractersticos de
sistemas que possuem valores caractersticos reais.
Exemplo: Usando spec
>A=[1,2;-2,1]; <return>
>spec(A) <return>
ans =
! 1. + 2.i !
! 1. 2.i !
Assim, como <() > 0 o sistema e instavel.
Exemplo: Usando fun
c
oes simb
olicas
>x=poly(0,x); <return>
>pol=det(x*eye()-A); <return>
>roots(pol) <return>
ans =
! 1. + 2.i !
! 1. 2.i !
o que conforma que o sistema e instavel.
Exemplo: Usando a fun
c
ao bdiag
>A=[1 2 3; 3 2 1; 2 1 3];
>spec(A)
ans =
!
6.
!
! 1.4142136 !
!
1.4142136 !
>[S,X]=bdiag(A);
>clean(inv(X)*A*X)
ans =
! 1.4142136 0.
0.
!
!
0.
6.
0.
!
!
0.
0. 1.4142136 !
Com os valores caractersticos da matriz A na diagonal.

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

46

A resolucao de sistemas de equacoes algebrica nao lineares pode ser feita atraves da utilizac
ao
da funcao fsolve. A funcao fsolve utiliza uma modificac
ao do metodo hbrido de powell e a
fornecimento do jacobiano e opcional. A sintaxe da func
ao fsolve e dada por:
[x [,v [,info]]]=fsolve(x0,fct [,fjac] [,tol])
Os termos entre colchetes sao opcionais. A tabela abaixo descreve os parametros sa func
ao fsolve.

parametros
x0
fct
fjac
tol
x
v
info
0
1
2
3
4

descricao
vetor de estimativa inicial
funcao ou lista de string (external)
funcao da matriz jacobiana ou lista de string (external)
tolerancia, default: tol=1.e-10
vetor com valor final estimado
vetor com valor da func
ao em x
indicador de termino
parametros de entrada inadequados
erro relativo e no maximo igual a tol
n
umero de chamadas a func
ao excedido
tol e muito pequeno. Nao se pode melhorar soluc
ao
interacao nao leva a convergencia

Exemplo 1
>a=[1,7;2,8];b=[10;11];
>deff([y]=fsol1(x),y=a*x+b);
>deff([y]=fsolj1(x),y=a);
>[xres]=fsolve([100;100],fsol1,fsolj1,1.e-7);
>//verificacao da solucao
>xres
>a*xres+b
Exemplo 2
Para a solucao do sistema:

x2
f1 (x1 , x2 ) = 12 sin(x1 x2 ) 4
x21 = 0
1
f2 (x1 , x2 ) = (1 4
)(e2x1 e) + sx2 2ex1 = 0
Para a solucao do sistema pode-se preparar o script abaixo e salva-lo no arquivo nssim.sci:
function [f]=fun(x)
f(1)=1/2*sin(x(1)*x(2))-x(2)/4/%pi-x(1)/2;
f(2)=(1-1/4/%pi)*(exp(2*x(1))-%e)+%e*x(2)/%pi-2*%e*x(1);
endfunction
Para a execucao da funcao fsolve pode-se fazer:
>[xres,v,info]=fsolve([0.4;3],fun)

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

47

info =
1.
v=
1.0E-15 *
! .6383782!
! .4440892!
xres =
!.2994487!
!2.8369278!
ou,
>[xres]=fsolve([-0.2;0.6],fun)
xres =
! .2605993!
!.6225309!
mudando a estimativa inicial para a soluc
ao:
>[xres]=fsolve([0.6;3],fun)
xres =
!.5!
!3.1415927!
Observa-se que o problema possui varias soluc
oes (multiplicidade de soluc
oes).
Exemplo 3
Solucao do sistema de reacao na forma adimensionalizada:

(
)
=0
f1 (x1 , x2 ) = 1 x1 1 + exp( E
x2

f2 (x1 , x2 ) = (1 x2 ) + (c x2 ) + hx1 exp( E


x2 ) = 0

com = 1; c = 1, = 50, E = 10, h = 10. Para a soluc


ao do sistema pode-se preparar o script
abaixo e salva-lo no arquivo nssim2.sci:
function [f]=fun(x)
B=1; g=1; t=50; de=10; dh=10;
f(1)=1-x(1)*(1+t*exp(-de/x(2)));
f(2)=(1-x(2))+B*(g-x(2))+dh*x(1)*t*exp(-de/x(2));
endfunction
Assim, executando-se:
> [xres]=fsolve([0.;6],fun)
xres =
!.1116045!
!5.4419775!
> [xres]=fsolve([1;1],fun)
xres =
!.9974295!
!1.0128525!
Execute a funcao para uma estimativa inicial de [0.5; 2]. Que conclusao pode tirar desse problema?
Observa
c
ao: O comando exec pode ser usado tambem para carregar func
oes para a memoria do
Scilab, neste caso pode ser necessario a utilizac
ao do comando com a sua formatac
ao geral, que

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

48

inclui opcoes:
ierr=exec(path,errcatch [,mode])
ou
ierr=exec(fun,errcatch[,mode])
com os parametros:
path
mode
0
-1
1
2
3
4
7
fun
ierr

o caminho de um arquivo script.


escalar que indica modo de execuc
ao.
valor default.
nada e impresso.
apresenta cada linha de comando.
o prompt > e impresso.
apresenta cada linha de comando e o prompt.
para antes de cada prompt. A execuc
ao continua apos <return>.
u
til para demonstrac
ao contempla as opc
oes 3 e 4, simultaneamente.
uma funcao Scilab
inteiro, 0 ou n
umero do erro.

A forma adequada de utilizacao da func


ao fsolve e apresentada no exemplo da Tabela 4:
Quando a funcao a ser resolvida necessitar de parametros pode-se passar esses parametros para
a funcao fsolve atraves da definicao de uma lista, ou seja:
function [f]=funcao(x,a,b,c)
.......
endfunction
...............................
// Programa
.......
flist=list(funcao,a,b,c);
[x,fv,iflag]=fsolve(x0,flist);
4.3.1

Aplica
c
oes `
a Engenharia Qumica

4.3.2

C
alculo do Volume pela Equa
c
ao de Estado de Redlich-Kwong

A equacao de Redlich-Kwong e dada por:


P =

RT
a

V b V (V + b) T

com:
Variavel
P
V
T
R
Tc
Pc

Significado
pressao
volume molar
temperatura
Constante Universal dos gases
temperatura crtica
pressao crtica

Unidade
atm
L/g-mol
K
R=0.08206 atm L/(g-mol K)
K
atm

(4.1)

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

49

mode(-1);
// Template para resolu
c~
ao de Fun
c~
oes no SCILAB
// Exemplo de solu
c~
ao de sistema n~
ao linear
// Formato de utiliza
c~
ao da fun
c~
ao fsolve:
// [x [,v [,info]]]=fsolve(x0,fct [,fjac] [,tol])
// info : indicador de final de execu
c~
ao
//
=
0 : par^
ametros de entrada n~
ao adequados
//
=
1 : erro relativo entre x e a solu
c~
ao
e no m
aximo igual a tol
//
=
2 : n
umero de chamadas da fun
c~
ao foi atingido
//
=
3 : toler^
ancia, tol,
e muito pequena
//
=
4 : N~
ao converge
// Valor default para tol
e tol=1.e-10
//
// Defini
c~
oes das fun
c~
oes
function [f]=fun(x)
f(1)=1/2*sin(x(1)*x(2))-x(2)/4/%pi-x(1)/2;
f(2)=(1-1/4/%pi)*(exp(2*x(1))-%e)+%e*x(2)/%pi-2*%e*x(1);
endfunction
// Programa principal
txt=[x(1);x(2)];
valor=x_mdialog(Forne
ca estimativa inicial,txt,[ ; ])
x0(1)=evstr(valor(1));
x0(2)=evstr(valor(2));
[x,fv, iflag]=fsolve(x0,fun);
if iflag==1 then
printf(Solu
c~
ao:\n);
disp(x);
end
Tabela 4: Exemplo de utilizac
ao da func
ao fsolve

e,

5/2

R2 Tc
a = 0.42747
Pc

RTc
b = 0.08664
Pc

!
(4.2)
(4.3)

1. Calcule o volume molar e fator de compressibilidade para amonia gasosa `a uma pressao de
P = 56atm e temperatura T = 450K
2. Como o fator de compressibilidade varia com a Pr = P/Pc na faixa de 0, 1 ate 10.
Sabe-se que z = PRTV , Tc = 405, 5K e pc = 111.3atm. Soluc
ao: A equac
ao (4.1) pode ser resolvida
como uma equacao nao linear no volume. A utilizac
ao da func
ao fsolve pode ser aplicada definindo-

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

se:
f=

RT
a
P

V b V (V + b) T

50

(4.4)

O codigo abaixo apresenta a funcao que faz o grafico dessa func


ao indicando a soluc
ao do problema:
// Equa
c~
ao de Estado de RK
mode(-1);
// Defini
c~
ao da fun
c~
ao
function [f]=fun(V,P,T,Tc,Pc)
R=0.08206;
a=0.42747*R^2*Tc^(5/2)/Pc;
b=0.08664*R*Tc/Pc;
f=R*T/(V-b)-a/V/(V+b)/sqrt(T)-P;
endfunction
//---------------------------------//
Programa principal
//---------------------------------// Dados
Tc=405.5; Pc=111.3; P=56; T=450;
// Estimativa para a solu
c~
ao
x0=1; flist=list(fun,P,T,Tc,Pc);
[x,fv,iflag]=fsolve(x0,flist);
select iflag,
case 0 then
printf(Par^
ametros de entrada n~
ao adequados!\n), abort
case 1 then
printf(Solu
c~
ao:\n);
printf( V = %f\n,x);
case 2 then
printf(N
umero m
aximo de chamadas da fun
c~
ao atingido!\n), abort
case 3 then
printf(Valor da vari
avel tol
e muito pequeno!\n), abort
case 4 then
printf(N~
ao converge!\n),abort
end
Salvando o codigo no arquivo EQ RK.sce na unidade C: pode-se executa-lo conforme indicado:
> exec(C:/EQ_RK.sce);
Solucao:
V = 0.569804
A comparacao desse valor com aquele usado como estimativa da soluc
ao (x0=RT/P), o volume
molar considerando gas ideal, indica as caractersticas do problema estudado. A resposta da segunda
parte do problema exige a determinac
ao do fator de compressibilidade para varias condic
oes de
pressao reduzida, Pr . A tabela a seguir apresenta a modificac
ao do codigo acima para esse estudo.

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

// Equa
c~
ao de Estado de RK
clear
clc
mode(-1);
// Defini
c~
ao da fun
c~
ao
function [f]=fun(V,P,T,Tc,Pc)
R=0.08206;
a=0.42747*R^2*Tc^(5/2)/Pc;
b=0.08664*R*Tc/Pc;
f=R*T/(V-b)-a/V/(V+b)/sqrt(T)-P;
endfunction
//---------------------------------// Programa principal
//---------------------------------// Dados
Tc=405.5; Pc=111.3; T=450;Pr=0.1:0.1:10;Pt=Pr.*Pc;sol=[];
h=figure(1);
uicontrol( h, style,text,...
string,Favor aguardar. Calculando..., ...
position,[1 180 200 20], ...
fontsize,15);
x0=0.08206*T/Pt(1);
for i=1:length(Pt)
//Estimativa para a solu
c~
ao
flist=list(fun,Pt(i),T,Tc,Pc);
[x,fv,iflag]=fsolve(x0,flist);
select iflag,
case 0 then
printf(Par^
ametros de entrada n~
ao adequados!\n), abort
case 1 then
z=Pt(i)*x/0.08206/T;
sol=[sol;x z Pr(i)];
x0=x;
case 2 then
printf(N
umero m
aximo de chamadas da fun
c~
ao atingido!\n),abort
case 3 then
printf(Valor da vari
avel tol
e muito pequeno!\n), abort
case 4 then
printf(N~
ao converge para P=%f!\n,Pt(i)), abort
end
end
close(h);
// Gr
afico com algumas fun
c~
oes do novo estilo
xset(window,0);
clf() // limpa janela gr
afica
xset(font size,12);xset(thickness,2);
xset(mark size,1);
plot2d(sol(:,3),sol(:,2),5);
a=get(current_axes); // Ler dados do eixo
p=a.children.children;
set(p,mark_style,5);
xtitle(z x Pr, Pr, z); xselect();

51

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

52

A Figura apresenta o comportamento alcancado para o fator de compressibilidade variando-se a


pressao relativa para a amonia20 :
A estrutura do Scilab e tambem um conveniente meio para o estudo e desenvolvimento de scripts

Figura 13: Comportamento do fator de compressibilidade (z) com a Pressao reduzida (Pr )
para as varias areas dos metodo numericos. Para exemplificar, apresenta-se a seguir alguns scripts
simples para a solucao de equacoes nao lineares:
// C
odigo que implementa o m
etodo da bissec
c~
ao
// LCOL, Ag/2004
// UFU/FEQUI/NUCOP
// Pr
e-processamento
clear
clc
mode(-1)
//
function [sol,erro,fc,kit]=bisseccao(fun,a,b,delta)
//
ya=feval(a,fun);
yb=feval(b,fun);
20

Para pessoas utilizando o estilo antigo para as funco


es gr
aficas, ter-se-ia:
// Estilo antigo para fun
c~
oes gr
aficas
xset(font size,12);xset(thickness,2);
xset(color,5); xset(mark size,1); xbasc();
plot2d(sol(:,3),sol(:,2),-5); xset(color,1);
xtitle(z x Pr, Pr, z); xselect();

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

if ya*yb > 0, break, end


max1=1+round((log(b-a)-log(delta))/log(2));
kit=0;
for k=1:max1
kit=kit+1;
c=(b+a)/2;
yc=feval(c,fun);
if yc==0
a=c;
b=c;
elseif yb*yc>0
b=c;
yb=yc;
else
a=c;
ya=yc;
end
if b-a < delta, break, end
end
sol=(a+b)/2;
erro=abs(b-a);
fc=feval(c,fun);
endfunction
// C
odigo que implementa o m
etodo de regula-falsi
// LCOL, Ag/2004
// UFU/FEQUI/NUCOP
function [sol,erro,fc,kit]=regula(fun,a,b,delta,epsilon,itmax)
//---------------------------------------------------------------// sol
= solu
c~
ao encontrada
// erro
= estimativa de erro para a solu
c~
ao sol
// fc
= valor da fun
c~
ao na solu
c~
ao encontrada
// a
= ponto esquerdo no intervalo onde situa-se a solu
c~
ao
// b
= ponto direito no intervalo onde situa-se a solu
c~
ao
// fun
= nome da fun
c~
ao a ser resolvida
// delta = toler^
ancia para a solu
c~
ao
// epsilon= toler^
ancia para valor da fun
c~
ao no ponto da solu
c~
ao
// itmax = n
umero m
aximo de itera
c~
oes
//----------------------------------------------------------------ya=feval(a,fun);
yb=feval(b,fun);
if ya*yb > 0,
disp( Intevalo [a,b] fornecido e inadequado para o metodo ),
break,
end
kit=0;
for k=1:itmax
kit=kit+1;
dx=yb*(b-a)/(yb-ya);

53

4.3

Sistemas de Equa
c
oes Alg
ebricas N
ao Lineares

c=b-dx;
ac=c-a;
yc=feval(c,fun);
if yc==0, break;
elseif yb*yc>0
b=c;
yb=yc;
else
a=c;
ya=yc;
end
dx=min(abs(dx),ac);
if abs(dx) < delta,
break, end
if abs(yc) < epsilon, break, end
end
sol=c;
erro=abs(b-a)/2;
fc=feval(c,fun);
endfunction
// M
etodo de Newton --------------------------------------function [x,erro,kit,fc]=newton(fun,dfun,x0,delta,epsilon,itmax)
kit=0;
for k=1:itmax
kit=kit+1;
x=x0-feval(x0,fun)/feval(x0,dfun);
erro=abs(x-x0);
erro_rel=2*erro/(abs(x)+delta);
x0=x;
fc=feval(x0,fun);
if (erro <delta) | (erro_rel < delta) | (abs(fc)<epsilon), break,end
end
endfunction
//---------------------------------------------------------// Programa Principal
// Uso da fun
c~
ao bissec
c~
ao
deff([f]=funcao(x),f=x*sin(x)-1);
[sol,erro,fc,it]=bisseccao(funcao,0,2,1e-7);
printf(
Solu
c~
ao pelo M
etodo da bissec
c~
ao de Bolzano:\n);
printf( x = %f\n,sol);
printf( Erro = %e\n,erro);
printf( Fun
c~
ao = %e\n,fc);
printf( Itera
c~
oes = %d\n,it);
// Uso da fun
c~
ao regula
[sol,erro,fc,it]=regula(funcao,0,2,1e-7,1e-8,100);
printf(
Solu
c~
ao pelo M
etodo Regula-Falsi: \n);
printf( x = %f\n,sol);
printf( Erro = %e\n,erro);
printf( Fun
c~
ao = %e\n,fc);

54

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

55

printf( Itera
c~
oes = %d\n,it);
// Uso da fun
c~
ao newton
deff([f]=funcao2(x),f=x^3-3*x+2);
deff([df]=deriva(x),df=3*x^2-3);
x0=1.2;
delta=1e-8;
epsilon=1e-10;
itmax=40;
[x,erro,it,fc]=newton(funcao2,deriva,x0,delta,epsilon,itmax)
printf(
Solu
c~
ao pelo M
etodo de Newton: \n);
printf( x = %f\n,x);
printf( Erro = %e\n,erro);
printf( Fun
c~
ao = %e\n,fc);
printf( Itera
c~
oes = %d\n,it);

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

Uma grande variedade de problemas da Engenharia Qumica pode ser formulada em termos de
equacoes diferencias ordinarias (EDOs). A equac
ao diferencial ordinarias e a equac
ao envolvendo
uma relacao entre uma funcao desconhecida e e uma ou mais de suas derivadas. Equac
oes envolvendo derivadas com somente uma vari
aveis independente sao chamadas de equac
oes diferencias
ordinarias. As EDOs podem ser classificadas como problema de valor inicial (PVI) e problema de
valor no contorno (PVC). A diferenciac
ao do PVI e do PVC deve-se a localizac
ao das condic
oes
extras na formulacao do problema e seguem a seguinte especificac
ao:
avel independente.
PVI: as condicoes sao dadas para o mesmo valor da vari
PVC: as condicoes sao dadas para valores distintos da vari
avel independente.
A forma generica de expressar um sistema de EDOs PVI e:
dy
= f (x, y),
dx
4.4.1

y(xo ) = yo

(4.5)

EDO: Problema de Valor Inicial (PVI)

A resolucao de EDOs, PVI no Scilab e feita atraves da func


ao ode que e uma interface para
varias func
oes de integracao de EDOs pertencentes `a biblioteca numerica ODEPACK.
A estrutura completa do comando ode e dada por:
[y,rd,w,iw]=ode(tipo,y0,t0,t [,rtol [,atol]],f [,jac],ng,g [,w,iw])
Com os parametros:

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

y0
t0
t
f
tipo
rtol,atol

jac
w,iw
ng
g
k0
kvect

56

vetor ou matriz real com condic


oes iniciais
valor do tempo inicial
vetor real com os instantes em que a soluc
ao e calculada
funcao, list ou string de caracteres
uma das seguintes opcoes: adams, stiff, rk,rkf,fix,discrete,roots
Obs: lsoda e o pacote de integrac
ao default
constantes ou vetor com tolerancia relativa e absoluta de mesma dimensao de y.
valores default: rtol=1.e-5 e atol=1.e-7
valores default para rfke fix: rtol=1.e-3 e atol=1.e-4
funcao, list ou string de caracteres
vetores.
inteiro.
funcao, list ou string de caracteres
inteiro, tempo inicial
inteiro (vetor)

A funcao ode usa a funcao interativa odeoptions para especificac


ao de opc
oes, ou pode-se usar a
variavel %ODEOPTIONS como um vetor conforme abaixo:
[itask,tcrit,h0,hmax,hmin,jactyp,mxstep,maxordn,maxords,ixpr,ml,mu]
valor default,
[1,0,0,%inf,0,2,500,12,5,0,-1,-1]
Exemplo 1: Simples EDO.

dy
= 21.6y, y(0) = 1;
(4.6)
dx
A equacao acima e bem simples e possui soluc
ao analtica dada por: y = exp(21.6x). A implementacao com a funcao ode pode ser feita conforme a Tabela 5.
Exemplo 2: Seja o sistema reacional.
k

A 1 B
k

B + C 2 A + C

(4.7)

k3

2B C + B
que resulta no sistema de EDOs,

dCA
dt
dCB
dt
dCC
dt

k1 CA + k2 CB CC
= k1 C A k2 C B C C k3 C 2
B
2
k3 C B

com as condicoes iniciais: CA (0) = 1, CB (0) = 0, CC (0) = 0 e os parametros k1 = 0.08; k2 =


2 104 ; e k3 = 6 107
Um script que implementa a integracao desse sistema encontra-se na Tabela 6.
Com o Scilab pode-se tambem estudar o retrato de fase de sistemas bidimensionais de duas
maneiras. Seja o sistema de EDOs formado pelas equac
oes:

dx
1 2
=
x
2 1
dt
com as condicoes iniciais: x(0) = xo .

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

57

mode(-1);
// Template para resolu
c~
ao de EDOs PVI no SCILAB
// Formato de utiliza
c~
ao da fun
c~
ao ode:
// [y,rd,w,iw]=ode(root,y0,t0,t [,rtol [,atol]],f [,jac],ng,g [,w,iw])
//
Valor default:rtol=1.e-5 e atol=1.e-7
//
Valor default para rfk e fix: rtol=1.e-3 e atol=1.e-4
// Defini
c~
oes das fun
c~
oes
// dy/dt=-21.6*y, y(0)=1
//
function [f]=fun1(x,y)
f=-21.6*y;
endfunction
function [f]=fun2(x)
f=exp(-21.6*x);
endfunction
// Programa principal
txt=[xo=;yo=;x=];
valor=x_mdialog(Forne
ca informa
c~
oes,txt,[0;1;0:0.01:1])
x0=evstr(valor(1)); y0=evstr(valor(2)); x=evstr(valor(3));
y=ode(y0,x0,x,fun1);
xbasc();
subplot(211),plot2d(x,y), xtitle(Solu
c~
ao Num
erica);
subplot(212),fplot2d(x,fun2), xtitle(Solu
c~
ao Anal
tica);
xselect()
Tabela 5: Exemplo de utilizac
ao da func
ao ode

1. Integrando o sistema com a func


ao ode. Analogamente ao apresentado no exemplo anterior,
pode-se integrar esse sistema de equac
oes diferencias ordinarias utilizando a func
ao ode com
varias condicoes iniciais, e se observar as trajetorias no plano de fases x1 x2 . A Tabela 7
apresenta o script em Scilab e a Figura 14 representa o resultado do codigo.
2. Integrando o sistema com a func
ao fchamp. A implementac
ao em Scilab utilizando a func
ao
fchamp e dado pela Tabela 8.
4.4.2

EDO: Problema de Valor no Contorno (PVC)

Uma possibilidade para resolver problemas do tipo (de Assis, 2003):


dy
= f (x, y)
dx
y(xc ) = yc com xc 6= 0
e considerar um valor para y em x = 0 e aplicar os metodos de integrac
ao para encontrar y em
x = xc , o local conhecido. Se y calculado for igual ao conhecido, ou seja, se y = yc em x = xc o

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

58

mode(-1);
// Template para resolu
c~
ao de EDOs PVI no SCILAB
// Formato de utiliza
ca
~o da fun
c~
ao ode:
// [y,rd,w,iw]=ode(root,y0,t0,t [,rtol [,atol]],f [,jac],ng,g [,w,iw])
//
Valor default:rtol=1.e-5 e atol=1.e-7
//
Valor default para rfk e fix: rtol=1.e-3 e atol=1.e-4
// Defini
c~
oes das fun
co
~es
//
function [f]=fun(t,y)
k=[0.08;2e4; 6e7];
f(1)=-k(1)*y(1)+k(2)*y(2)*y(3);
f(2)=k(1)*y(1)-k(2)*y(2)*y(3)-k(3)*y(2)^2;
f(3)=k(3)*y(2)^2;
endfunction
// Programa principal
txt=[to=;yo=;t=];
valor=x_mdialog(Forne
ca informa
c~
oes,txt,[0;[1;0;0];[0:0.1:10]])
t0=evstr(valor(1));
y0=evstr(valor(2)); t=evstr(valor(3));
//%ODEOPTIONS=[itask,tcrit,h0,hmax,hmin,jactyp,mxstep,maxordn,maxords,ixpr,ml,mu]
%ODEOPTIONS=[1,0,0,%inf,0,2,500,12,5,1,-1,-1]; // printevel=1;
y=ode(y0,t0,t,fun);
xbasc();
subplot(311),plot2d(t,y(1,:));
subplot(312),plot2d(t,y(2,:));
subplot(313),plot2d(t,y(3,:));
xselect()
Tabela 6: Exemplo 2 de utilizac
ao da func
ao ode

problema foi resolvido com sucesso. Caso contr


ario, necessita-se realizar uma nova estimativa para
y(0) e repetir o procecimento. Este metodo de tentativa e erro, pouco eficiente e consumidor de
tempo consideravel pode ser melhorado se aplicarmos o metodo da bissec
ao do seguinte modo:
Escolhe-se y1 (0) de tal modo que ao integrar f(x,y), o valor de y1 em x = xc seja maior que
yc ;
Escolhe-se y2 (0) de tal modo que ao integrar f(x,y), o valor de y2 em x = xc seja menor que
yc ;
Escolhe-se o novo y3 (0) como a media aritmetica entre y1 (0) e y2 (0) e realiza-se a integrac
ao
ate x = xc , encontrando y3 ;
Se y3 for maior que yc , o novo intervalo sera entre y3 (0) e y2 (0), desprezando-se y1 (0); caso
contrario, despreza-se y2 (0) e o novo intervalo sera entre y1 (0) e y3 (0);

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

59

mode(-1);
// An
alise de diagrama de fase
function fun=funcao(t,x)
fun(1)=x(1)+2*x(2);
fun(2)=-2*x(1)+x(2);
endfunction
// Programa Principal
t=[0:0.01:20]; t0=0;
x0=[-3;3];[x1] = ode(x0,t0,t,funcao);
x0=[-2;3];[x2] = ode(x0,t0,t,funcao);
x0=[-1; 3];[x3] = ode(x0,t0,t,funcao);
x0=[1; 3];[x4] = ode(x0,t0,t,funcao);
x0=[2; 3];[x5] = ode(x0,t0,t,funcao);
x0=[3; 3];[x6] = ode(x0,t0,t,funcao);
x0=[-3; -3];[x7] = ode(x0,t0,t,funcao);
x0=[-2; -3];[x8] = ode(x0,t0,t,funcao);
x0=[-1; -3];[x9] = ode(x0,t0,t,funcao);
x0=[1; -3];[x10] = ode(x0,t0,t,funcao);
x0=[2; -3];[x11] = ode(x0,t0,t,funcao);
x0=[3; -3];[x12]=ode(x0,t0,t,funcao);
xbasc();xset(font size,12)
plot2d(x1(1,:),x1(2,:));plot2d(x2(1,:),x2(2,:));
plot2d(x3(1,:),x3(2,:));plot2d(x4(1,:),x4(2,:));
plot2d(x5(1,:),x5(2,:));plot2d(x6(1,:),x6(2,:));
plot2d(x7(1,:),x7(2,:));plot2d(x8(1,:),x8(2,:));
plot2d(x9(1,:),x9(2,:));plot2d(x10(1,:),x10(2,:));
plot2d(x11(1,:),x11(2,:));plot2d(x12(1,:),x12(2,:));
xtitle(Plano de Fase);xselect();
Tabela 7: Exemplo 3 de utilizac
ao da func
ao ode: Retrato de fase

O Scilab possui rotinas especializadas para essa func


ao. A func
ao bvode() implementa codigo com
esse objetivo.
[z]=bvode(points,ncomp,m,aleft,aright,zeta,ipar,ltol,tol,fixpnt,fsub1,dfsub1,gsub1,
dgsub1,guess1)
z
: A solu
c~
ao da ODE determinada sobre a malha fornecida por points
points: Vetor que fornece os pontos onde se deseja a solu
c~
ao
ncomp : N
umero de EDOs (ncomp <= 20)
m
: Um vetor de dimens~
ao ncomp. m(j) fornece a ordem da j-
esima EDO
aleft : Lado esquerdo do intervalo
aright: Lado direito do intervalo
zeta : zeta(j) fornece j-
esimo ponto do contorno (boundary point). Deve ter
zeta(j) <= zeta(j+1)
Obs:

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

60

Figura 14: Diagrama de fases: Exemplo 3


mode(-1);
// Uso de fchamp
function fun=funcao(t,x)
fun(1)=x(1)+2*x(2);
fun(2)=-2*x(1)+x(2);
endfunction
// Programa Principal
xbasc();xset(font size,12)
xf= -20:1:20; yf= -20:1:20; t=0;
fchamp(funcao,t,xf,yf)
xtitle(Dire
c~
ao do campo vetorial);
xselect();
Tabela 8: Exemplo 4 de utilizac
ao da func
ao fchamp
.

ipar

todos pontos no contorno devem ser pontos na malha em todas malhas usadas,
veja descri
c~
ao de ipar(11) e fixpnt abaixo.
: Um vetor de inteiros com dimens~
ao de no m
nimo 11. A lista de par^
ametros
em ipar e seus significados s~
ao renomeados em bvode; seus novos nome s~
ao
dados em par^
enteses.
ipar(1)
= 0 se o problema
e linear, 1 se o problema
e n~
ao linear

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

61

Figura 15: Campo de Direc


ao: Exemplo 4
ipar(2)

= n
umero de pontos de coloca
c~
ao por subintervalo (= k) onde
max m(i) <= k <= 7 .
Se ipar(2)=0 ent~
ao bvode faz
k = max ( max m(i)+1, 5-max m(i) )
ipar(3)
= n
umero de subintervalos na malha inicial (= n).
Se ipar(3) = 0 ent~
ao bvode arbitrariamente faz n = 5.
ipar(4)
= n
umero de toler^
ancias para solu
c~
oes e derivadas.
(= ntol) exige-se 0 < ntol <= mstar.
ipar(5)
= dimens~
ao de fspace (= ndimf) um vetor real de trabalho.
Sua dimens~
ao representa uma restri
c~
ao sobre nmax.
escolha ipar(5) de acordo com a f
ormula: ipar(5)>=nmax*nsizef
onde:
nsizef=4+3*mstar+(5+kd)*kdm+(2*mstar-nrec)*2*mstar .
ipar(6)
= dimens~
ao de ispace (= ndimi) um vetor inteiro de trabalho.
Sua dimens~
ao representa restri
c~
ao sobre nmax, o n
umero m
aximo de
subintervalos. Escolha ipar(6) de acordo coma formula:
ipar(6)>=nmax*nsizei
onde:
nsizei=3+kdm com kdm=kd+mstar; kd=k*ncomp;
nrec=n
umero de condi
c~
oes de contorno a direita.
ipar(7) controle de sa
da de resultados (= iprint)
= -1 para impress~
ao completa de diagn
ostico
= 0 para impress~
ao restrita
= 1 para nenhuma impress~
ao

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

ipar(8)

62

(= iread)
= 0 faz bvode gerar malha inicial uniforme.
= xx Outros valores ainda n~
ao implementados no Scilab
= 1 Se a malha inicial
e fornecida pelo usu
ario. Ela
e definida em
fspace como segue: a malha ocupar
a fspace(1), ..., fspace(n+1).
O usu
ario necessitar
a suprir apenas os pontos interiores
fspace(j) = x(j), j = 2, ..., n.
= 2 se a malha inicial
e fornecida pelo usu
ario com ipar(8)=1, e nenhuma
sele
c~
ao de malha adaptativa
e feita.
ipar(9)
(= iguess )
= 0 se nenhuma estimativa para a solu
c~
ao
e fornecida.
= 1 se estimativa inicial
e fornecida pelo usu
ario na subrotina guess.
= 2 se uma malha inicial e coeficientes de solu
c~
ao aproximados s~
ao
fornecidos pelo usu
ario em fspace. (o primeiro e novo mesh s~
ao
os mesmos).
= 3 se a malha inicial e os coeficientes de solu
c~
ao aproximada s~
ao
fornecidos pelo usu
ario em fspace, e a nova malha
e para ser
tomada duas vezes mais robusta; i.e., a cada segunda ponto da
malha inicial.
= 4 se al
em da malha inicial e dos coeficientes de solu
c~
ao aproximada,
uma nova malha
e fornecida em fspace. (veja descri
c~
ao de sa
da
para outros detalhes sobre iguess = 2, 3, e 4.)
ipar(10)
= 0 se o problema
e regular
= 1 se o primeiro fator de relaxamento
e =rstart, e a intera
c~
ao n~
ao
linear n~
ao se baseia em converg^
encia passada (use somente para
problemas n~
ao lineares extra sens
veis).
= 2 se deseja-se retornar imediatamente ap
os (a) duas situa
c~
oes de
n~
ao converg^
encia sucessivas, ou (b) ap
os obter estimativa de erro
pela primeira vez.
ipar(11) = n
umero de pontos fixos na malha al
em de aleft e aright.
(= nfxpnt, a dimens~
ao de fixpnt)
o c
odigo requer que todas as outras condi
c~
oes de contorno, al
em de
aleft e aright,
(veja descri
c~
ao de zeta) sejam inclu
das como pontos fixos em fixpnt.
ltol um vetor de dimens~
ao ipar(4). ltol(j)=l especifica que a j-
esima toler^
ancia
em tol controla o erro no l-
esimo componente de z(u). Tamb
em requer que:
1 <= ltol(1) < ltol(2) < ... < ltol(ntol) <= mstar
tol um vetor de dimens~
ao ipar(4). tol(j)
e a toler^
ancia do erro no ltol(j)-
esimo
componente de z(u).
Assim, o c
odigo tenta satisfazer y para j=1:ntol em cada subintervalo
abs(z(v)-z(u))
<=
tol(j)*abs(z(u))
+tol(j)
ltol(j)
ltol(j)
se v(x)
e o vetor de solu
c~
ao aproximada.
fixpnt um vetor de dimens~
ao ipar(11). Ele cont
em os outros pontos al
em de aleft e
aright, que devem ser inclu
dos em cada mesh.
externals as fun
c~
oes fsub,dfsub,gsub,dgsub,guess s~
ao externos ao Scilab
(veja sintaxe abaixo) ou o nome de uma subrotina Fortran

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

63

A interface da fun
c~
ao em Fortran com bvode s~
ao especificadas no
arquivo fcol.f, dispon
vel na distribui
c~
ao Scilab.
fsub
nome de uma subrotina para avalia
c~
ao. [f]=fsub(x,z) onde f
e o vetor
contendo o valor de fi(x,z(u)) no i-
esimo componente
dfsub nome da subrotina para avalia
c~
ao do Jacobiano de f(x,z(u)) no ponto x.
[df]=dfsub (x, z) onde z(u(x))
e definida analogamente aquele para
fsub e a matriz df com dimens~
ao (ncomp ) por (mstar) deve conter as
derivadas parciais de f, para uma chamada calcula-se
df(i,j) = dfi / dzj, i=1,...,ncomp
j=1,...,mstar.
gsub nome de subrotina para avalia
c~
ao do i-
esimo componente de
g(x,z(u(x)))=g(zeta(i),z(u(zeta(i)))) no ponto x=zeta(i) onde 1<=i<=mstar.
[g]=gsub(i,z) onde z(u)
e id^
entico aquele de fsub, e i e g=gi s~
ao como acima.
Note que diferentemente de f em fsub, aqui somente um valor por chamada
retorna em g.
dgsub nome da subrotina para avalia
c~
ao da i-
esima linha do Jacobiano de g(x,u(x)).
[dg]=dgsub (i, z) onde z(u)
e o memso de fsub, i
e id^
entico a gsub e o vetor
dg de dimens~
ao mstar possui derivadas parciais de g.
guess nome de subrotina para avaliar aproxima
c~
ao inicial para z(u(x)) e para
dmval(u(x))= vetor de mj-
esima derivadas de u(x). [z,dmval]= guess(x).
Note que essa subrotina
e usada somente se ipar(9) = 1 ent~
ao todos os mstar
componentes de z e ncomp componentes de dmval devem ser especificados para
qualquer x, aleft <= x <= aright.
O script a seguir aplica esse codigo para a resoluc
ao do problema:

deff(df=dfsub(x,z),df=[0,0,-6/x**2,-6/x])
deff(f=fsub(x,z),f=(1 -6*x**2*z(4)-6*x*z(3))/x**3)
deff(g=gsub(i,z),g=[z(1),z(3),z(1),z(3)];g=g(i))
deff(dg=dgsub(i,z),[dg=[1,0,0,0;0,0,1,0;1,0,0,0;0,0,1,0];
dg=dg(i,:)])
deff([z,mpar]=guess(x),z=0;mpar=0)
deff(u=trusol(x),[
u=0*ones(4,1);
u(1) = 0.25*(10*log(2)-3)*(1-x) + 0.5 *( 1/x
+ (3+x)*log(x) - x)
u(2) = -0.25*(10*log(2)-3)+ 0.5 *(-1/x^2 + (3+x)/x
+ log(x) - 1)
u(3) = 0.5*( 2/x^3 + 1/x
- 3/x^2)
u(4) = 0.5*(-6/x^4 - 1/x/x + 6/x^3)])
fixpnt=0;m=4;
ncomp=1;aleft=1;aright=2;
zeta=[1,1,2,2];
ipar=zeros(1,11);
ipar(3)=1;ipar(4)=2;ipar(5)=2000;ipar(6)=200;ipar(7)=1;
ltol=[1,3];tol=[1.e-11,1.e-11];
res=aleft:0.1:aright;

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

64

z=bvode(res,ncomp,m,aleft,aright,zeta,ipar,ltol,tol,fixpnt,...
fsub,dfsub,gsub,dgsub,guess)
z1=[];for x=res,z1=[z1,trusol(x)]; end;
z-z1

Pode-se verificar que o codigo bvode(), embora poderoso, possui complexidade de parametros
para a sua utilizacao mais abrangente. Uma outra possibilidade para a soluc
ao de PVC e aplicar
o metodo das diferencas finitas, como exposto a seguir.
Considere a EDO de 2a ordem mostrada na Equac
ao 4.8 que descreve a variac
ao da temperatura ao
longo de um trocador de calor tubular, com o fluido escoando da direita para a esquerda, entrando
no trocador a uma temperatura conhecida e saindo na mesma temperatura da parede do tubo:
Pe

d d2
+
2N u = 0
dx dx2
x = 0; = 0
x = X; = 1

(4.8)

Aplicando diferencas finitas centrais:


y j

yj

yj+1 yj1
2h
yj+1 2yj + yj1
h2

(4.9)
(4.10)

Tem-se:
(2 P eh)j1 4(N uh2 + 1)j + (2 + P eh)j+1 = 0, j = 1, . . . , J 1

(4.11)

onde N e o n
umero de subintervalos criados na discretizac
ao, cada qual com comprimento h dado
por h = X/N , neste caso. A Equacao 4.11 e aplicada para j=1,...,N-1 pois conhece-se o valor
da variavel dependente para o primeiro (x=0) e para o u
ltimo ponto (x=1). Obtem-se, deste
processo, um sistema de equacoes algebricas lineares neste caso, podendo aplicar-se os metodos ja
estudados anteriormente na sua soluc
ao. Empregaremos o m
etodo de Gauss-Seidel na soluc
ao
deste problema, cujo script de implementac
ao no Scilab e mostrado a seguir:

clear;
//
// Implementado por Adilson J. de Assis
//
function [fi,kk]=pvc(xrange,fi0bound,fiLbound,epsilon,nmax)
n = length(xrange);
h = (xrange(n)-xrange(1))/(n-1);
//estimativa inicial de fi e fik (var. auxiliar)
fi =ones(n);
fik=ones(n)
//condi
c~
oes de contorno

4.4

Sistemas de Equa
c
oes Diferenciais Ordin
arias(EDO)

fi(1) = fi0bound;
fi(n) = fiLbound;
printf(itera
c~
oes iniciadas...aguarde!\n\n);
for k=1:nmax
ke = 0; kk = k;
//imprime a itera
c~
ao se for m
ultipla de 10, inclusive.
if modulo(kk,10) == 0 then
printf(A itera
c~
ao atual
e %g.\n,k);
end;
for j = 2:n-1
fik(j) = ((2-Pe*h)*fi(j-1)+(2+Pe*h)*fi(j+1))/(4*(Nu*h^2+1));
if abs(fik(j)-fi(j)) > epsilon then
ke = ke + 1;
end
fi(j)=fik(j);
end;
if ke == 0 then
break
end
end
if kk == nmax then
printf(O n
umero m
aximo de itera
c~
oes %g foi alcan
cado \n\n,kk);
end
endfunction
Pe = 1;
Nu = 1;
u0 = 0;
uL = 1;
nmax = 10000;
epsilon = 1e-6;
J = 4;
X = 4;
h = X/J;
x1 = [0:h:X];
x2 = [0:h/2:X];
x3 = [0:h/4:X];
x4 = [0:h/8:X];
x5 = [0:h/16:X];
x6 = [0:h/32:X];
[u1,k1] = pvc(x1,u0,uL,epsilon,nmax);
[u2,k2] = pvc(x2,u0,uL,epsilon,nmax);
[u3,k3] = pvc(x3,u0,uL,epsilon,nmax);
[u4,k4] = pvc(x4,u0,uL,epsilon,nmax);
[u5,k5] = pvc(x5,u0,uL,epsilon,nmax);

65

4.5

Introdu
c
ao `
a Otimiza
c
ao

66

[u6,k6] = pvc(x6,u0,uL,epsilon,nmax);
ktot = [k1 k2 k3 k4 k5 k6];
xbasc();
plot2d(x1,u1,-1);
plot2d(x2,u2,-1);
plot2d(x3,u3,1);
plot2d(x4,u4,1);
plot2d(x5,u5,1);
plot2d(x6,u6,1);
xtitle(Solu
c~
ao Num
erica da Eq. do calor);

Na Figura 16 mostra-se o perfil de temperatura para N=4,8,16,32,64,128, sendo que para os


dois primeiros valores, sao os pontos + e os demais estao na forma de linha contnua. Visualmente
quase nao ha diferenca21 para N > 16.

4.5

Introduc
ao `
a Otimizac
ao

As tecnicas de otimizacao constituem uma das mais importantes ferramentas no processo de


tomada de decisoes. Essas tecnicas tem como finalidade a busca de uma melhor soluc
ao para
um determinado problema (maximos ou mnimos), e fazem-se necessarias em muitas areas da
engenharia, tais como:
omicos, controle de estoques, pla pesquisa operacional: otimizacao de sistemas tecnico-econ
nejamento de producao etc.;
ao de processos, estimac
ao de parametros,
projeto de processo: dimensionamento e otimizac
reconciliacao de dados, analise de flexibilidade etc.;
controle de processo: identificac
ao de sistemas, controle otimo, controle adaptativo, controle
preditivo etc.;
analise numerica: aproximacoes, regressao, soluc
ao de sistemas lineares e nao-lineares etc.
4.5.1

Ajuste de Modelos: M
etodo dos Mnimos Quadrados

Um modelo relaciona as sadas (vari


aveis dependentes) como as entradas (vari
aveis independentes). As equacoes de um modelo em geral inclui tambem coeficientes que sao presumidos constantes. Nesse livro, esses coeficientes serao referidos como parametros. Com a informac
ao de dados
experimentais pode-se determinar nao apenas a forma matematica do modelo, mas tambem esses
coeficientes. A determinacao dos parametros se da atraves de procedimentos conhecidos como determinacao de parametros, regressao ou identificac
ao de modelos. O ajuste de uma modelo (emprico
ou teorico) necessita de pelo menos tantos dados experimentais quantos sejam os parametros a
21

deve-se dedicar especial atenca


o para a toler
ancia adotada (neste caso: 1 106 ), pois h
a que se considerar
cuidadosamente este valor juntamente com o valor de . Para este problema uma toler
ancia menor pode levar a
conclus
oes err
oneas acerca do comportamento da temperatura.

4.5

Introdu
c
ao `
a Otimiza
c
ao

67

Soluo Numrica da Eq. do calor


+

1.0
0.9
0.8
0.7
+

0.6
0.5
+
+

0.4
0.3
+

0.2

+
+

0.1
0

0.4

+
+

0.8

1.2

1.6

2.0

2.4

2.8

3.2

3.6

4.0

Figura 16: Soluc


ao de PVC usando diferencas finitas

serem determinados. Ou seja, com tres pontos experimentais para y e x pode-se estimar um modelo que tenha no maximo tres parametros. Existem varios criterios que podem ser usados para a
estimativa dos parametros de um modelo com a utilizac
ao de dados experimentais, eles baseiam-se
na definicao de um erro, j , para cada ponto experimental. Assim, em um conjunto de p pontos experimentais pode-se definir o erro j , j = 1, . . . p. como sendo a diferenca entre os dados
experimentais Yj e os valores preditos pelo modelo, yj (x),
j = Yj yj , j = 1 . . . p
Dentre os varios criterios de ajuste, o problema de minimizac
ao do somatorio do quadrado dos
erros, e um dos mais utilizados pois amplifica erros grandes muito mais do que os erros pequenos.
Esse criterio baseia-se na funcao objetivo,
f=

p
X

j 2

(4.12)

j=1

Considerando um modelo que e linear nos parametros e tem a forma:


y=

n
X
i=0

i xi , xo = 1

(4.13)

4.5

Introdu
c
ao `
a Otimiza
c
ao

68

No modelo acima existem n variaveis independentes xi , i = 1, . . . n. A equac


ao 4.13 e linear nos
parametros i , mas xi pode ser nao linear de forma que uma equac
ao quadratica em x pode ser
escrita nessa forma. Assim, Assim,
y = o + 1 x + 2 x2

(4.14)

y = o xo + 1 x1 + 2 x2 , com xo = 1, x1 = x, x2 = x2

(4.15)

pode ser representada por

A solucao do problema de minimizacao da func


ao 4.12 pode ser escrito na forma:
b = (XT X)1 XT Y
com:

b=

o
1
..
.

Y=

Y1
Y2
..
.

X=

Yp

1 x11 x12 . . . x1n


1 x21 x22 . . . x2n
..
..
..
..
.
.
.
.
1 xp1 xp2 . . . xpn

(4.16)

Exemplo : Aplica
c
ao do M
etodo dos Mnimos quadrados
Deseja-se ajustar um modelo quadratico y = 0 + 1 x + 2 x2 utilizando-se o conjunto de dados
experimentais abaixo:
x
Y

20
73

20
78

30
85

40
90

40
91

50
87

50
86

50
91

60
75

70
65

O script a seguir implementa o metodo apresentado na equac


ao 4.16 para esse exemplo. Nesse caso
precisa-se montar a matriz X,

X=

e determinar-se o vetor b.

xo x x2
1
1
1
1
1
1
1
1
1
1

20
20
30
40
40
50
50
50
60
70

202

202
302
402
402
502
502
502
602
702

(4.17)

(4.18)

4.5

Introdu
c
ao `
a Otimiza
c
ao

69

//Exemplo de ajuste de Dados


x = [20 ; 20 ; 30 ; 40 ; 40 ; 50 ; 50 ; 50 ; 60 ; 70 ];
Y = [73 ; 78 ; 85 ; 90 ; 91 ; 87 ; 86 ; 91 ; 75 ; 65 ];
// Modelo y=bo+b1*x+b2*x^2 -> 3 par^
ametros
n=3;
// Dados experimentais
p=length(Y);
// Montagem de X
X=[ones(p,1) x x.^2];
if p >= n then
if p==n then
b=inv(X)*Y;
else
b=inv(X*X)*X*Y;
end
else
printf( Conjunto de Dados Insuficiente para Modelo \n);
end
disp(b);
que fornece o resultado22 para b:
! 35.657437 !
! 2.6314478 !
! .0319185 !

4.5.2

Ajuste de Modelos a Dados Experimentais

O ajuste de modelos a dados experimentais, ou identificac


ao pode ser usado atraves da func
ao
23
datafit . Para uma dada funcao G(p,z), datafit determina o melhor vetor de parametros p que
aproximando G(p, zi ) = 0 para um conjunto de dados experimentais zi . O vetor p e calculado
atraves da resolucao do problema:
min G(p, z1 )0 W G(p, z1 ) + G(p, z2 )0 W G(p, z2 ) + ... + G(p, zn )0 W G(p, zn )
p

(4.19)

A sintaxe de datafit e dada por:


[p,err]=datafit([imp,] G [,DG],Z [,W],[contr],p0,[algo],[df0,[mem]],[work],[stop],[in])
Com os parametros:
22
O Scilab apresenta um alerta warning de matriz pr
oximo a condica
o de matriz singular e calcula a soluca
o
pelo metodos dos mnimos quadrados.
23
datafit e uma vers
ao aperfeicoada de fit dat.

4.5

Introdu
c
ao `
a Otimiza
c
ao

70

[p,err]=datafit([imp,] G [,DG],Z [,W],[contr],p0,[algo],[df0,[mem]],[work],[stop],[in])


imp
argumento escalar usado para definir modo de relatorio:
imp=0 nada e reportado (exceto erros)
imp=1 relatorio inicial e final
imp=2 um relatorio por interac
ao
imp>2 adiciona relatorio na busca linear
Aten
c
ao: A maioria desses relatorios e escrita na unidade padrao de sada do Scilab
G
funcao erro (e=G(p,z), e: ne x 1, p: np x 1, z: nz x 1)
DG
matriz das derivadas parciais de G em relac
ao a p, (opcional), S=DG(p,z), S: ne x np)
Z
matriz [z1 , z2 , ...zn ], onde zi (nz x 1) e o i-esimo dado experimental
W
matriz ne x ne de pesos (opcional), o default e nenhuma ponderac
ao
contr b,binf,bsup com binf e bsup vetores com mesma dimensao que p0.
binf e bsup sao limites (bounds) inferiores e superiores para p.
p0
Estimativa inicial para p (dimensao np x 1)
algo
Algoritmo a ser usado:
qn e o quasi-Newton (default)
gc e o algoritmo de gradiente conjugado e
nd e o nao diferenciavel (nao aceita limites para x)
df0
n
umero escalar representando o decrescimo de f na primeira interac
ao
(df0=1 e o valor default)
mem n
umero de variaveis usado para aproximar a Hessian nos algoritmos (algo=gc ou nd)
valor default e 6
stop
seq
uencia de parametros opcionais que controlam a convergencia do algoritmo
stop= ar,nap, [iter [,epsg [,epsf [,epsx]]]]
ar: palavra reservada para criterio de parada definida conforme:
nap: n
umero maximo de chamadas a func
ao permitido
iter: n
umero maximo de iterac
oes permitido
epsg: threshold da norma do gradiente
epsf: threshold controlando decrescimento de f
epsx: threshold controlando variac
ao de x. Esse vetor (possivelmente matriz)
de mesma dimensao de x0 pode ser usado para colocar x em escala.
in
palavra reservada para inicializac
ao de parametros usados quando func
ao e dada
como uma rotina Fortran
p
vetor coluna, solucao encontrada
err
escalar, mnimo erro quadrado
Nas proximas tabelas, varios exemplos de ajustes sao feitos. Os exemplos foram preparados para
execucao de script. O leitor pode entao transcrever os exemplos para um u
nico arquivo ajuste.sce
e executa-lo para analise dos resultados.
Exemplo: Gerando dado para ajuste:
//Exemplos de Aplica
c~
ao para a fun
c~
ao datafit
X = [0:0.1:10]; Y = 20+30*X+50*X^2;
E = 1000*(rand(1,length(X))-0.5);Y1 = Y + E; Z = [X;Y1];
xset(window,0); xset(font size,14);xset(thickness,2);
plot2d(X,Y,5);plot2d(X,Y1,-1);
xtitle(Fun
c~
ao Quadr
atica com Erro Rand^
omico,x,y);
x_message(Pressione OK para continuar...); xselect();

4.5

Introdu
c
ao `
a Otimiza
c
ao

Exemplo 1: Ajuste Quadr


atico:
//Ajuste quadr
atico com datafit
deff([e]=G(a,z),e=z(2)-a(1)-a(2)*z(1)-a(3)*z(1)^2)
a0 = [1;1;1];
h=figure(1);
uicontrol( h, style,text,...
string,Favor aguardar. Calculando..., ...
position,[1 180 200 20], ...
fontsize,15);
[aa,er] = datafit(G,Z,a0)
close(h);
deff([y]=f(x),y=aa(1)+aa(2)*x+aa(3)*x^2)
YY = f(X);
xset(window,1);xbasc(); xset(font size,14);xset(thickness,2);
plot2d(X,YY,5);plot2d(X,Y1,-1);
xtitle(Ajuste Quadr
atico e Dados,x,y)
x_message(Pressione OK para continuar); xselect();
Exemplo 2: Ajuste C
ubico:
//Ajuste C
ubico com datafit
deff([e]=G1(a,z),e=z(2)-a(1)-a(2)*z(1)-a(3)*z(1)^2-a(4)*z(1)^3)
a0 = [15;25;49;10];
h=figure(1);
uicontrol( h,style,text, ...
string,Favor aguardar. Calculando..., ...
position,[1 180 200 20], ...
fontsize,15);
[aa,er] = datafit(G1,Z,a0)
close(h);
deff([y]=f1(x),y=aa(1)+aa(2)*x+aa(3)*x^2+aa(4)*x^3)
YYY = f1(X);
xset(window,2);xbasc();
xset(font size,14);xset(thickness,2);
plot2d(X,YYY,5);plot2d(X,Y1,-1);
xtitle(Ajuste C
ubico e Dados,x,y)
x_message(Pressone OK para continuar...); xselect();
Exemplo 3: Ajuste Exponencial:

71

4.5

Introdu
c
ao `
a Otimiza
c
ao

//Ajuste Exponencial com datafit


deff([e]=G2(a,z),e=z(2)-a(1)-a(2)*exp(a(3)*z(1)))
a0 = [5;1;2];
h=figure(1);
uicontrol( h, style,text, ...
string,Favor aguardar. Calculando..., ...
position,[1 180 200 20], ...
fontsize,15);
[aa,er] = datafit(G2,Z,a0)
close(h);
deff([y]=f2(x),y=aa(1)+aa(2)*exp(aa(3)*x))
YYYY = f2(X);
xset(window,3);xbasc();
xset(font size,14);xset(thickness,2);
plot2d(X,YYYY,5);plot2d(X,Y1,-1);
xtitle(Ajuste Exponencial e Dados,x,y)
x_message(Pressione OK para continuar...); xselect();
Exemplo: Compara
c
ao Gr
afica dos Ajustes:
xset(window,4);xbasc();
xset(font size,14);xset(thickness,2);
plot2d(X,YYY,5);plot2d(X,Y1,-1);plot2d(X,YY,2);plot2d(X,YYYY,6);
xtitle(Ajuste Quadr
atico, C
ubico, Exponencial e Dados,x,y)
x_message(Pressione OK para finalizar.); xselect();
A execucao fornece os seguintes resultados:
Ajuste quadratico (y = a1 + a2 x + a3 x2 ):
erro = 8024369.8 e parametros a=[-74.616712, 101.18464, 41.974133 ].
Ajuste c
ubico (y = a1 + a2 x + a3 x2 + a4 x3 ):
erro =7802128.6 e parametros a =[ -191.566, 245.115, 5.8119456, 2.4108133 ].
Ajuste exponencial (y = a1 + a2 exp(a3 x)):
erro =13002784 e parametros: a=[6.7950864, 331.63134, .2834938 ].
Dentre as funcoes mais importantes para a otimizac
ao de problemas, destacam-se:

72

4.6

Solu
c
ao de equa
c
oes alg
ebrico-diferenciais

73

Funcao datafit: Determinac


ao de parametros
[p,err]=datafit([imp,] G [,DG],Z [,W],[contr],p0,[algo],[df0,[mem]],[work],[stop],[in])
Funcao linpro: Resoluc
ao de Problemas LP
[x,lagr,f]=linpro(p,C,b,ci,cs,me,x0 [,imp])
Funcao quapro: Resoluc
ao de Problemas QP
[x,lagr,f]=quapro(Q,p,C,b,ci,cs,me,x0 [,imp])
Funcao leastsq: Resolucao de Problemas de Mnimos Quadrados nao lineares
[f,xopt]=leastsq([imp,] fun [,Dfun],x0)
[f,[xopt,[gradopt]]]=leastsq(fun[,Dfun],[contr],x0,[algo],[df0,[mem]],[stop],[in])
Funcao optim: Resoluc
ao de Problemas NLP
[f,xopt]=optim(costf,x0)
[f,[xopt,[gradopt,[work]]]]=optim(costf,[contr],x0,[algo],[df0,[mem]],[work],[stop],[in],[imp=iflag])
Funcao semidef : Resoluc
ao de Problemas de Prohramac
ao Semidefinida
[x,Z,ul,info]=semidef(x0,Z0,F,blck szs,c,options)

4.6

Solu
c
ao de equac
oes alg
ebrico-diferenciais
Seja o sistema descrito pela seguintes equac
oes algebrico-diferenciais(de Assis, 2003):
dy1
= 0
dt
dy2
0, 04y1 1 104 y2 y3 3 107 y22
= 0
dt
y1 + y2 + y3 1 = 0
0, 04y1 + 1 104 y2 y3

(4.20)

que esta na forma (metodo BDF):


F (t, y, y)
=0
e cuja matriz de iteracao

e dada por:

F
F
+ cj
y
y

0, 04 cj
1 104 y3
1 104 y2
0, 04
1 104 y3 2 3 107 y2 cj 1 104 y2
1
1
1

As condicoes inicias sao:


y(0) = [1
y(0)

= [0, 04

0]T

0, 04 0]T

O script que resolve este sistema de EADs atraves da func


ao dassl() no Scilab e:

clc
clf()
function [r,ires]=chemres(t,y,yd)
r(1)=-0.04*y(1)+1d4*y(2)*y(3)-yd(1);

(4.21)

4.7

Solu
c
ao de Equa
co
es Diferenciais Parciais (EDPs) por diferen
cas finitas

74

r(2)=0.04*y(1)-1d4*y(2)*y(3)-3d7*y(2)*y(2)-yd(2);
r(3)=y(1)+y(2)+y(3)-1;
ires=0;
endfunction
y0=[1;0;0];
yd0=[-0.04;0.04;0];
t=[1.d-5:0.02:.4,0.41:.1:4,4.1:1:15];
y=dassl([y0,yd0],0,t,chemres);
xbasc();
subplot(131),
plot2d(y(1,:),y(2,:),16,021);
xtitle(Comportamento - y(1),
,
subplot(132),
plot2d(y(1,:),y(3,:),-6,021);
xtitle(Comportamento - y(2),
,
subplot(133),
plot2d(y(1,:),y(4,:),9,021);
xtitle(Comportamento - y(3),
,

);

);

);

A funcao dassl() tambem poderia ser chamada com a opc


ao de chamada `a func
ao externa que
calcula o jacobiano, neste caso chamada de chemjac:

function [pd]=chemjac(x,y,yd,cj)
pd=[-0.04-cj , 1d4*y(3)
, 1d4*y(2);
0.04
,-1d4*y(3)-2*3d7*y(2)-cj ,-1d4*y(2);
1
, 1
, 1
];
endfunction

sendo o integrador chamado atraves do comando:


y=dassl([y0,yd0],0,t,chemres,chemjac);

4.7

Solu
c
ao de Equac
oes Diferenciais Parciais (EDPs) por diferencas finitas

Exemplo: Equa
c
oes Elpticas: Equa
c
ao de Laplace Consideremos a soluc
ao de uma
EDP elptica, a Equacao de Laplace, mostrada a seguir juntamente com as condic
oes de contorno

4.7

Solu
c
ao de Equa
co
es Diferenciais Parciais (EDPs) por diferen
cas finitas

Comportamento - y(1)

Comportamento - y(2)

3.600e-005

3.162e-005

2.725e-005

2.288e-005

0.9900

0.9688

0.9475

0.9263

1.850e-005

0.9050

0.8838

1.412e-005

0.8625

9.750e-006

0.8413

5.375e-006

0.8200

1.000e-006
1.00 3.17 5.33 7.50 9.6711.8314.00

75

Comportamento - y(3)

0.1800

0.1588

0.1375

0.1163

0.0950

0.0737

0.0525

0.0313

0.0100

1.00 3.17 5.33 7.50 9.6711.8314.00

1.00 3.17 5.33 7.50 9.6711.8314.00

Figura 17: Soluc


ao de EADs no Scilab

consideradas (de Assis, 2003):

2u 2u
+ 2 =0
x2
y
u(0, y) = 0
u(1, y) = 1
u(x, 0) = 1 x2
u(x, 1) = 0

(4.22)

A celula de discretizacao para o domnio considerado esta mostrada na Figura 18, onde se consideraram divisoes iguais para o domnio em x (I=5) e em y (J=5). Lembrar que conforme nossa
nomenclatura, a variacao na direcao x e representada pelo ndice i e a variac
ao em y pelo ndice j.
Os pontos marcados com sao aqueles cuja soluc
ao e conhecida dada pelas condic
oes de contorno.

4.7

Solu
c
ao de Equa
co
es Diferenciais Parciais (EDPs) por diferen
cas finitas

76

u=1

u=0

y=
u=0

y
x

0,8

0,6

0,4

0,2

0
0

u=1x2
x= 0

0,2 0,4 0,6 0,8

ui,j+1

ui1,j

ui+1,j
ui,j1

Figura 18: Celula de discretizac


ao usada para resolver a Eq. de Laplace

Aplicando diferencas finitas centrais nas duas direc


oes, temos:
ui,j+1 2ui,j + ui,j1
ui+1,j 2ui,j + ui1,j
+
=0
2
hx
h2y
i = 1, ..., I 1 e j = 1, ..., J 1

(4.23)

Neste exemplo u e conhecido em todos os pontos de fronteira, nao aparecendo u fictcio. O script
(de Assis, 2003) a seguir implementa no Scilab a solucao deste problema, mostrada na forma grafica
3D na Figura 19 e as linhas de contorno na Figura 2024 .
24

Como o Scilab n
ao permite indexar vetores e matrizes a partir do zero, ou seja, fazer u(0,j), que aparecer
a na
Equaca
o 4.23 quando se aplicar i=1, deve-se incrementar tais ndices, iniciando os lacos a partir de i=2 e j=2 e
terminando em i=I e j=J. Do mesmo modo, como o I e o J est
ao sendo definidos a partir dos intervalos de x e y,
sendo calculados a partir do comando length(), que fornece a quantidade de elementos em um vetor, ou a dimens
ao
do vetor (ou matriz). Como I = n-1 e J = m -1, o fim dos lacos est
ao definidos por estes valores.

4.7

Solu
c
ao de Equa
co
es Diferenciais Parciais (EDPs) por diferen
cas finitas

clear;
function [u,kk]=laplacepde(xrange,yrange,ux1,uxn,uy1,uym,epsilon,nmax)
n = length(xrange); m = length(yrange);
Dx = (xrange(n)-xrange(1))/(n-1);
Dy = (yrange(m)-yrange(1))/(m-1);
//estimativa inicial de u e uk (var. auxiliar)
u = ones(n,m); uk = ones(n,m);
//condi
c~
oes de contorno
u(:,1) = uy1; u(:,m) = uym;
u(1,:) = ux1; u(n,:) = uxn;
printf(itera
c~
oes iniciadas...aguarde!\n\n);
for k=1:nmax
ke = 0; kk = k;
//imprime a itera
c~
ao se for m
ultipla de 10, inclusive.
if modulo(kk,10) == 0 then
printf(A itera
c~
ao atual
e %g.\n,k);
end;
for i = 2:n-1
for j = 2:m-1
uk(i,j) = ...
(Dx^2*(u(i,j-1)+u(i,j+1))+Dy^2*(u(i-1,j)+u(i+1,j)))/(2*(Dx^2+Dy^2));
if abs(uk(i,j)-u(i,j)) > epsilon then
ke = ke + 1;
end
u(i,j)=uk(i,j);
end;
end;
if ke == 0 then
break
end
end
if kk == nmax then
printf(O n
umero m
aximo de itera
c~
oes %g foi alcan
cado \n\n,kk);
end
endfunction
x = [0:0.05:1]; y = [0:0.05:1];
ux1 = zeros(y); uxn = ones(y); uy1 = 1-x^2; uym = zeros(x);
nmax = 1000;
epsilon = 1e-4;
[u,k] = laplacepde(x,y,ux1,uxn,uy1,uym,epsilon,nmax);
k

77

5 Aspectos Complementares

78

plot3d(x,y,u,45,45,x@y@u(x,y))
xtitle(Solu
c~
ao Num
erica da Eq. de Laplace);
pause
contour(x,y,u,10);
xtitle(Solu
c~
ao num
erica para a Eq. de Laplace,x,y);

Soluo Numrica da Eq. de Laplace

u(x,y)
1.0

0.5

0.0
0.0

0.0

0.5

0.5

x
1.0

1.0

Figura 19: Solucao da Eq. de Laplace por diferencas finitas - 3D

Aspectos Complementares

Nessa secao apresenta-se a utilizac


ao o Scilab para o estudo de inicial de problemas de Controle
na Engenharia Qumica.

5.1

Sistemas de Controle

79

Soluo numrica para a Eq. de Laplace


y
1.0
0.9
0.8

0.091

0.7

0.182
0.273

0.6

0.364
0.727 0.818 0.909

0.5
0.455

0.636
0.545

0.4
0.3
0.2
0.636
0.1

0.545

0.727

0.455
0.3640.273
0.182

0.818
0.909
0.0
0.0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1.0

Figura 20: Solucao da Eq. de Laplace por diferencas finitas - contornos

5.1

Sistemas de Controle

5.1.1

Representa
c
ao de Modelos Lineares no Scilab

Em geral o especialista em controle de processos necessita desenvolver uma representac


ao
dinamica do processo que se deseja controlar. Esses modelos representam a planta a ser controlada em uma ambiente de simulacao de estrategias de controle. Por outro lado, uma grande
categoria de algoritmos de controle tambem se baseiam em modelos do processo a ser controlado,
sao os controladores com modelo interno. Para a especificac
ao de um problema mais realista o
modelo utilizado no controle possui algumas diferencas em relac
ao `aquele que representa a planta
real. Assim, faz parte do estudo de sistemas controlados a sua representac
ao na forma de modelos.
Esta secao apresenta o conjunto de func
oes disponveis no Scilab para representar modelos lineares
SISO (single-input single-output) e MIMO ( multiple-input multiple-output) nas suas varias formas
de representacao.
O Scilab suporta as seguintes representac
oes de modelos:

5.1

Sistemas de Controle

80

1. Espaco de Estados
Sistemas contnuos no tempo
Sistemas discretos no tempo
2. Funcoes de Transferencias
Domnio de Laplace
Domnio da Transformada Z
3. Polos.
4. freq
uencia.
A definicao de um sistema linear no Scilab e feita com a func
ao syslin, que define um sistema
linear como uma lista (list) e verifica a consistencia de dados. Sistemas lineares definidos como
syslin podem ser manipulados com as operac
oes usuais existentes para as matrizes (concatenac
ao,
extracao, transposta, multiplicacao etc) sejam nas representac
oes no espaco de estado, sejam na
representacao de funcoes de transferencia. A maioria das func
oes no espaco de estado recebem uma
lista syslin como entrada ao inves das matrizes A, B, C e D que definem o sistema.
dx
= Ax + Bu
dt
y = Cx + Du
x(0) = x0

(5.1)
(5.2)
(5.3)

A sintaxe da funcao syslin e dada por:


chamada da funcao
[sl]=syslin(dom,A,B,C [,D [,x0]])
[sl]=syslin(dom,N,D)
[sl]=syslin(dom,H)

forma da lista de sada


sl=tlist([lss,A,B,C,D,X0,dt],A,
B,C,D,x0,dom)
sl=tlist([r,num,den,dt],N,D,dom)
sl=tlist([r,num,den,dt],H(2),H(3),dom)

Com os parametros:
dom

A,B,C,D

x0
N, D
H
sl

string de caracter (c, d), [] or ainda um escalar


dom=c representa sistemas contnuos no tempo
dom=d representa sistemas discretos no tempo
dom=n para sistema em tempo amostrado, perodo de amostragem igual a n
dom=[ ] se o domnio do tempo e indefinido
matrizes da representacao no espaco de estados
D e opcional tendo como valor default a matriz nula
D para sistemas improprios e uma matriz polinomial
vetor de estado inicial (default tem valor 0)
matrizes polinomiais
matriz racional ou representac
ao linear no espaco de estados
tlist (syslin list) representando o sistema linear

5.1

Sistemas de Controle

Exemplos
>A=[0,1;0,0];
>B=[1;1];
>C=[1,1];
>S1=syslin(c,A,B,C)
S1 =
S1(1) (state-space system:)
!lss A B C D X0 dt !
S1(2) = A matrix =
! 0. 1. !
! 0. 0. !
S1(3) = B matrix =
! 1. !
! 1. !
S1(4) = C matrix =
! 1. 1. !
S1(5) = D matrix =
0.
S1(6) = X0 (initial state) =
! 0. !
! 0. !
S1(7) = Time domain =
c
>S1(A)
ans =
! 0. 1. !
! 0. 0. !
>S1(X0), S1(dt)
ans =
! 0. !
! 0. !
ans =
c
>s=poly(0,s);
>D=s;
>S2=syslin(c,A,B,C,D)
S1 =
S1(1) (state-space system:)
!lss A B C D X0 dt !
S1(2) = A matrix =
! 0. 1. !
! 0. 0. !
S1(3) = B matrix =
! 1. !
! 1. !

81

5.1

Sistemas de Controle

82

S1(4) = C matrix =
! 1. 1. !
S1(5) = D matrix =
s
S1(6) = X0 (initial state) =
! 0. !
! 0. !
S1(7) = Time domain =
c
>H1=(1+2*s)/s^2,
H1 =
1 + 2s
-----2
s
>S1bis=syslin(c,H1)
S1bis =
1 + 2s
-----2
s
>H2=(1+2*s+s^3)/s^2,
H2 =
3
1 + 2s + s
---------2
s
>S2bis=syslin(c,H2);
>S1+S2; // Soma os sistemas S1 e S2
>[S1,S2]; // Concatenacao
>ss2tf(S1)-S1bis; // Transforma S1 e subtrai S1bis
>S1bis+S2bis;
>S1*S2bis;
>size(S1)
ans =
! 1. 1. !
Conforme visto no exemplo acima, a convers
ao de um sistema com representac
ao no espaco de
estado para funcao de transferencia foi feita com a func
ao ss2tf. O Scilab possui um conjunto de
funcoes para conversao entre modelos na forma syslin(SS), func
ao de transferencia (TF), Matriz
25
de FT (POL), matriz de sistema (SM) e forma descriptor (DES) entre outros.
As principais sao:
25

A Matriz de Sistema (SM) e definida por:

Sm =

sE + A
C

B
D

5.1

Sistemas de Controle

83

ss2tf
tf2ss
tf2des
pol2des
ss2des
des2tf
frep2tf
imrep2ss
markp2ss
sm2des
sm2ss
ss2ss

SS para TF
TF para SS
TF para DES
POL para DES
SS para DES
DES para TF
Resposta frequencial para TF
Resposta impulso para SS
Par
ametros de Markov para SS
SM para DES
SM para SS
SS para SS, feedback, injec
ao

A tabela abaixo apresenta um conjunto de func


oes de convers
ao para manuseio de modelos de
sistemas no Scilab que possuem uso freq
uente,
[A,B,C,D]=abcd(sl)
[Ds,NUM,chi]=ss2tf(sl)
h=ss2tf(sl)
sl=tf2ss(h [,tol])

retorna matrizes no espaco de estado para syslin sl


retorna matriz polinomial do Numerador,
polinomio caracterstico chi e a parte polinomial Ds;
neste caso h=NUM/chi + Ds
convers
ao de func
ao de transferencia para syslin
h=C*(s*eye()-A)^-1*B+D(s)

So como ilustracao, a discretizacao de sistemas contnuos para gerar os sistemas discretos no tempo
pode ser implementada atraves das func
oes:
dscr
bilin

discretizac
ao de sistema linear
transformac
ao bilinear

Mais detalhes sobre outras funcoes do Scilab e aspectos avancados da sua utilizac
ao em Controle
de Processos, favor contactar o autor desse material para solicitar os proximos captulos e as atualizacoes desse texto. Analogamente ao apresentado para as outras areas de aplicac
ao do Scilab,
para os sistemas de controle existem uma grande variedade de pacotes ja desenvolvidos e de func
oes.
Entretanto, sempre sera possvel, o desenvolvimento de func
oes de uso pessoal para a criac
ao de
pacotes personalidades de funcoes (sejam pacotes de scripts, ou de codigos ja compilados em C ou
Fortran). O script a seguir e uma demonstrac
ao de como se pode avaliar a matriz de ganho de um
sistema linear26 .
//------------------------------------------------// Compute low frequency (DC) gain of LTI systems
//------------------------------------------------// Luis Cl
audio Oliveira Lopes,
// Uberl^
andia, UFU, Abril 2004
// version 0
function [K]=dcgain(varargin)
// K=dcgain(dom,G)
// K=dcgain(dom,A,B,C,D)
26

Esses scripts apresentados aqui visam mais o fornecimento de um padr


ao de desenvolvimento dos scripts para o
iniciante em Scilab que o desenvolvimento do assunto tecnico a que se refere.

6 Conclus
ao

84

// Testar dom=d com G, LCOL 20/04/2004 coment


arios para posterior estudo
dom=varargin(1);
tm=length(varargin);
if tm == 2 then
sys=tf2ss(varargin(2));
[A,B,C,D]=abcd(sys);
end
select dom
case c then
K=D-C*inv(A)*B;
case d then
K=D+C*inv(eye()-A)*B;
else
printf( Error: domain must be c (continuous) or d (discrete).\n)
abort
end
endfunction

Conclus
ao

Espero que o leitor tenha aproveitado esse material para a formac


ao dos aspectos basicos de
programacao em Scilab. Essa primeira parte abordou a criac
ao de scripts utilizando um elenco
basico de funcoes. A segunda parte desse material, ainda em desenvolvimento, conter
a:
c
ao ao uso do Scicos
Introdu
Otimiza
c
ao Utilizando o Scilab
Controle de Processos Utilizando o Scilab
Utilizando C e Fortran no Scilab
O Scilab em Ambiente Linux
Criando Bibliotecas no Scilab
Pacotes Especficos no Scilab
1. Controle Robusto
2. Controle Nebuloso
3. Controle Preditivo
4. Identificacao de Processos
5. Redes Neuronais no Scilab
6. Inequacoes de Matrizes Lineares (LMIs)
7. Processamento de Sinais
8. Introducao ao uso de Metanet

6 Conclus
ao

9. Arma e Simulacao de Processos


Trabalhando com Sons no Scilab
Tradu
c
oes de linguagem e de Dados para e do Scilab
Desenvolvendo GUI no Scilab: TCL/Tk
An
alise Estatstica no Scilab
Ate a proxima!

85


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

86

RESUMO INCOMPLETO DAS FUNC


OES
DO
SCILAB
Resumo Incompleto das Categorias de Func
oes disponveis na distribuic
ao padrao do Scilab 3.0.
Programacao
Biblioteca Grafica
Funcoes Elementares
Funcoes de Entrada/Sada
Manuseio de Func
oes e Bibliotecas
Manipulacao de cadeias de Caracteres (string)
Menus
Utilidades

Algebra
Linear
Calculo Polinomial
Sistemas e Controle
Controle Robusto
Otimizacao e simulac
ao
Processamento de Sinal
Modelagem Arma e simulac
ao
Metanet: Grafos e Redes
Scicos: Diagrama de Blocos e simulador
Manuseio de arquivos de Som
Linguagem ou traduc
ao de dados
PVM paralelo
Interface TdCs TCL/Tk
Estatstica
Funcoes de Distribuic
ao Cumulativa
Identificacao

1. Funco
es Elementares
abs - valor absoluto
addf - adicao simbolica
acos - arco cosseno
acosm - matriz do arco cosseno
acosh - arco cosseno hiperbolico
acoshm - matriz do arco cosseno hiperbolico
asin - arco seno
asinh - arco seno hiperbolico
asinhm - matriz do arco seno hiperbolico
asinm - matriz do arco seno
atan - arco tangente no 2o. e 4o quadrantes
atanh - arco tangente hiperbolico
atanhm - matriz do arco tangente hiperbolico
atanm - matriz quadrada do arco tangente
besseli - funcao de Bessel Modificada do Primeiro Tipo e ordem , I


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

besselj - funcao de Bessel Modificada do Primeiro Tipo e ordem , J


besselk - funcao de Bessel Modificada do Segundo Tipo e ordem , K
bessely - funcao de Bessel Modificada do Primeiro Tipo e ordem , Y
binomial - probabilidades de distribuic
ao binomial
bloc2exp - conversao de diagrama de bloco para expressao simb
olica
bloc2ss - conversao de diagrama de bloco para espaco de estados
calerf - calcula funcao erro
ceil - arredondamento para cima
cmb lin - combinacao linear simbolica
cos - cosseno
cosh - cosseno hiperbolico
coshm - cosseno hiperbolico de matriz
cosm - cosseno de matriz
cotg - cotangente
coth - cotangente hiperbolico
cothm - cotangente hiperbolico de matriz
conj - conjugado
cumprod - produto acumulativo
cumsum - soma acumulativa
delip - integral elptica
diag - matriz diagonal
diff - diferenca e derivada discreta
dlgamma - derivada da funcao gammaln, func
ao
double - conversao de inteiro para representac
ao em dupla precisao
dsearch - busca dicotomica (binario)
erf - a funcao erro
erfc - a funcao erro complementar
erfcx - a funcao erro complementar escalonada
eval - avaliacao de uma matriz de strings
eye - matriz identidade
fix - arredondamento para inteiro imediatamente menor
floor - arredondamento para baixo
frexp - separa n
umeros em ponto flutuante em expoente na base 2 e mantissa
full - conversao de matriz esparsa para matriz cheia
gamma - a funcao
gammaln - o logaritmo da funcao
gsort - ordenamento em ordem decrescente
imag - parte imaginaria

imult - multiplicacao de um n
umero por i, i = 1
int - parte inteira
integrate - integracao por quadratura
interp - interpolacao
interpln - interpolacao linear
intersect - retorna um vetor com valores comuns entre dois vetores
intsplin - integracao de dados experimentais por interpolac
ao spline
inttrap - integracao de dados experimentais por interpolac
ao trapezoidal
isdef - verifica a existencia de uma vari
avel
isequal - comparacao de objetos

87


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

isinf - verifica se possui valor infinito


isnan - verifica se existe valor Not a Number
isreal - verifica se uma variavel e real ou complexa
kron - produto de Kronecker, (.*.)
ldivf - divisao simbolica a esquerda
lex sort - ordenamento de linha de matriz lexicografica
linspace - vetor linearmente espacado
log - logaritmo natural
log10 - logaritmo em base 10
log2 - logaritmo em base 2
logm - logaritmo de matriz quadrada
logspace - vetor logaritimicamente espacado
lstsize - retorna o n
umero de elementos para list, tlist e mlist
max - maximo
maxi - maximo
min - mnimo
mini - mnimo
modulo - calcula o resto de uma divisao
pmodulo - calcula o resto positivo de uma divisao
mps2linpro - converte problema lp dado em formato MPS para o formato linpro
mtlb sparse - converte matriz esparsa
mulf - multiplicacao simbolica
ndims - n
umero de dimensoes de uma matriz
nearfloat - calcula o mais proximo sucessor ou antecessor de um n
umero em ponto flutuante
nextpow2 - proxima maior potencia de 2
nnz - n
umero de elementos nao nulos em uma matriz
norm - norma de matriz
number properties - determina parametros de ponto flutuante
ones - matriz de 1s
pen2ea - conversao de pencil para E, A
pertrans - pertransposta
prod - produto
rand - gerador de n
umeros randomicos
rat - aproximacao racional de ponto flutuante
rdivf - divisao simbolica a direita
real - parte real
round - arrendondamento
sign - funcao sinal
signm - funcao sinal de matriz
sin - seno
sinc - func
ao seno complexa (sinc)
sinh - seno hiperbolico
sinhm - seno hiperbolico de matriz
sinm - seno de matriz
size - tamanho de objetos
smooth - suavizacao (smoothing) por func
oes spline
solve - resolve sistema linear simbolico
sort - ordenamento decrescente

88


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

sp2adj - converte matriz esparsa


sparse - definicao de matriz esparsa
spcompack - converte um representac
ao compressed adjacency para uma standard adjacency
speye - matriz identidade esparsa
spget - recebe elementos de matriz esparsa
splin - funcao spline
spones - matriz esparsa com 1 nas posic
oes nao nulas
sprand - matriz esparsa randomica
spzeros - matriz esparsa
sqrt - raiz quadrada
sqrtm - raiz quadrada de matriz
squarewave - gera uma onda quadrada com perodo 2
ssprint - impressao elegante para sistemas lineares
ssrand - gerador randomico de sistemas
subf - subtracao simbolica
sum - soma elementos de matrizes
sysconv - conversao de sistemas
sysdiag - conexao de sistema bloco-diagonal
syslin - definicao de sistema linear
tan - tangente
tanh - tangente hiperbolico
tanhm - tangente hiperbolico de matriz
tanm - tangente de matriz
toeplitz - matriz toeplitz
trfmod - mostra polos and zeros
trianfml - triangularizacao simbolica
tril - parte triangular inferior de matriz
trisolve - resolve simbolicamente sistema linear
triu - triangular superior
typeof - tipo do objeto
union - extrai uniao dos componentes de um vetor
unique - extrai componentes u
nicos de um vetor

2. Funco
es de Entrada-Sada
diary - diario da secao
disp - mostra variaveis
dispfiles - mostra propriedades de arquivos abertos
file - gerenciamento de arquivo
fileinfo - fornece informacoes sobre um arquivo
fprintf - emula a funcao fprintf da linguagem C
fprintfMat - imprime uma matriz em um arquivo
fscanf - leitura formatada de um arquivo
fscanfMat - ler uma matriz de um arquivo texto
getio - unidade logica de entrada/sada para Scilab
input - pede entrada de informacoes via teclado
isdir - verifica se o argumento e e um diretorio existente

89


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

90

lines - linhas e colunas usadas para apresentar na tela


load - carregar variaveis na memoria
loadmatfile - carrega arquivo MAT do Matlabr 5 no Scilab
manedit - edita um item do manual
matfile2sci - converte um arquivo MAT do Matlabr 5 em um arquivo binario do Scilab
mclearerr - reinicializa erro de acesso em arquivo binario
mclose - fecha um arquivo aberto
meof - verifica se o final de um arquivo foi atingido
mfscanf - interface para a funcao fscanf do C
mscanf - interface para a funcao scanf do C
msscanf - interface para a funcao sscanf do C
mget - leitura de byte ou palavra em um dado formato binario e convers
ao para double
mgeti - leitura de byte ou palavra em um dado formato binario e convers
ao para int
mgetl - leitura de linhas de um arquivo ascii
mgetstr - leitura de uma string de caracteres
mopen - abre um arquivo
mfprintf - converte, formata e escreve dados em um arquivo
mprintf - converte, formata e escreve dados para a janela principal do Scilab
msprintf - converte, formata e escreve dados em uma string
mput - escreve byte ou palavra em um dado formato binario
mputl - escreve strings em um arquivo ascii
mputstr - escreve uma string de caracteres em um arquivo
mseek - fixa posicao corrente em arquivo binario
mtell - gerenciamento de arquivo binario
newest - retorna mais recente arquivo de um conjunto de arquivos
oldload - carrega variaveis salvas na vers
ao 2.4.1 ou vers
oes anteriores do Scilab
oldsave - salva variaveis em formato da vers
ao 2.4.1 ou vers
oes anteriores do Scilab
print - imprime variaveis em um arquivo
printf - emula a funcao printf da linguagem C
oes das func
oes printf, sprintf e fprintf
printf conversion - conversoes de especificac
read - leitura de matrices
read4b - leitura de arquivos binarios do fortran
readb - leitura de arquivos binarios do fortran
readc - leitura de uma string de caracteres
readmps - leitura de um arquivo em formato MPS
save - salva variaveis em arquivo binario
scanf - converte entrada formatada na entrada padrao
scanf conversion - conversoes de especificac
oes das func
oes scanf, sscanf e fscanf
sprintf - emulador da funcao sprintf da linguagem C
sscanf - converte entrada formatada dado por uma string
startup - arquivo de inicializacao. O arquivo scilab.star e arquivo padrao do Scilab e nao deve ser
modificado, para personalizar o Scilab pode-se criar um arquivo suplementar .scilab no diretorio
padrao. Esse arquivo (se existente) e automaticamente executado.
tk getdir - janela para leitura de caminho de diretorio
tk getfile - janela para leitura de caminho de arquivo
warning - mensagens de aviso de atenc
ao (warning messages)
writb - escreve arquivo binario do fortran
write - escreve em um arquivo formatado


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

91

write4b - escreve arquivo binario do fortran

3. Funco
es Gr
aficas

Graphics - apresentacao da biblioteca grafico; uso: help Graphics


Matplot - apresenta grafico de uma matriz 2D usando cores
Matplot1 - apresenta grafico de uma matriz 2D usando cores
Sfgrayplot - apresenta grafico 2D suave de superfcie definida por func
ao usando cores
Sgrayplot - apresenta grafico 2D suave de superfcie definida por func
ao usando cores
addcolor - adiciona novas cores ao mapa de cores corrente
agregation properties - descricao de propriedades de entidade de agregac
ao (Agregation entity)
alufunctions - descricao e n
umero de pixels (modos graficos)
arc properties - descricao das propriedades da entidade Arc
axes properties - descricao das propriedades dos eixos
axis properties - descricao das propriedades dos eixos
black - Diagrama de Nichols
bode - Diagrama de Bode
champ - grafico de campo vetorial 2D
champ1 - grafico de campo vetorial 2D com vetores coloridos
champ properties - descricao das propriedades de campo vetorial 2D
chart - Diagrama de Nichols
colormap - usando mapa de cores
contour - curvas de nvel de uma superfcie em um grafico 3D
contour2d - curvas de nvel de uma superfcie em um grafico 2D
contour2di - calcula as curvas de nvel de uma superfcie em um grafico 2D
contourf - curvas de nvel preenchidas de uma superfcie em um grafico 2D
copy - copia um grafico
delete - apaga um grafico e seus filhos
dragrect - arraste retangulo(s) com mouse
draw - faca um grafico
drawaxis - trace um eixo
drawlater - faca eixos dos filhos invisveis
drawnow - faca grafico de entidades escondidas
driver - selecione um driver grafico
edit curv- editor interativo de curvas em graficos
errbar - adicione barras de erros verticais em grafico 2D
eval3d - valores de uma funcao em uma malha
eval3dp - calcula facetas de uma superfcie parametrica 3D
evans - Lugar das razes (Evans root locus)
fac3d - grafico 3D de uma superfcie (obsoleto)
fchamp - campo de direcao de uma Equac
ao Diferencial Ordinaria (EDO) 2D de primeira ordem
fcontour - curvas de nvel de uma superfcie 3D definida por uma func
ao
fcontour2d - curvas de nvel de uma superfcie 2D definida por uma func
ao
fec - grafico pseudo-cor de uma funcao definida em uma malha triangular
fec properties - descricao das propriedades da entidade fec
fgrayplot - grafico 2D de uma superfcie definida por uma func
ao usando cores
figure properties - descricao das propriedades da entidade grafica figure
fplot2d - grafico 2D de uma curva definida por uma func
ao


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

fplot3d - grafico 3D de uma superfcie definida por uma func


ao
fplot3d1 - curva de nvel 3D cinza ou colorida de uma superfcie
gainplot - grafico de magnitude
genfac3d - calcula facetas de uma superfcie 3D
geom3d - projecao de 3D em 2D apos existencia de grafico 3D
get - recebe um valor da propriedade de um grafico ou um objeto de interface com o usuario
getcolor - janela para selecionar cores no mapa de cors corrente
getfont - janela para selecionar fonte
getlinestyle - janela para selecionar estilo de linha
getmark - janela para selecionar smbolo
getsymbol - janela para selecionar um smbolo e seu tamanho
glue - junte um conjunto de graficos em uma agregac
ao
gr menu - simples editor grafico interativo
graduate - graduacoes de eixo (pretty)
graphics entities - descricao das estruturas de dados de entidades graficas
graycolormap - mapa de cores cinza linear
grayplot - grafico 2D de uma superfcie usando cores
grayplot properties - descricao das propriedades da entidade grayplot
graypolarplot - grafico polar 2D de uma superfcie usando cores
hist3d - representacao 3D de um histograma
histplot - construcao de um histograma
hotcolormap - mapa de cores vermelho a amarelo
soview - fixa escala para grafico isometrico (nao muda o tamanho da janela)
legend properties - descricao das propriedades de legendas
legends - construcao de legendas para graficos
loadplots - carrega e formata graficos salvos
locate - selecao pelo mouse de um conjunto de pontos
m circle - grafico circular para ser usado em diagrama de Nyquist
milk drop - funcao 3D (milk drop)
move - move, translaciona um grafico e seus filhos
nf3d - facetas retangulares para parametros de plot3d
nyquist - diagrama de Nyquist
param3d - grafico 3D de uma curva parametrica
param3d1 - grafico 3D de curvas parametricas
param3d properties - descricao das propriedades de curvas 3D
paramfplot2d - grafico 2D animados, curva definida por uma func
ao
patch properties - descricao das propriedades do Patch
plot - faz grafico
plot2d - faz grafico 2D
plot2d1 - grafico 2D (escala logartmica) (obsoleto)
plot2d2 - grafico 2D (funcao degrau)
plot2d3 - grafico 2D (varras verticais)
plot2d4 - grafico 2D (com estilo de setas)
plot3d - grafico 3D de uma superfcie
plot3d1 - grafico 3D cinza ou colorido de curvas de nvel de uma superfcie
plot3d2 - grafico de superfcie definido por facetas retangulares
plot3d3 - grafico com malhas (mesh) de superfcies definidas por facetas retangulares
plotframe - faz grafico de frame com escala e grids

92


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

plzr - grafico de pole-zero de sistema linear


polarplot - grafico em coordenadas polares
polylin properties - descricao de propriedades de Polyline
printing - imprime graficos do Scilab
rectangle properties - descricao das propriedades do Rectangle
replot - refaca grafico da janela grafica corrente com novas fronteiras
rotate - rotacao de um conjunto de pontos
rubberbox - caixa Rubberband para selec
ao de retangulos
scaling - transformacao affine de um conjunto de pontos
oes do Scilab
sd2sci - conversor de estrutura gr menu para instruc
secto3d - conversao de superfcies 3D
segs properties - descricao das propriedades dos Segments
set - define um valor de propriedades de um objeto grafico ou de interface
sgrid - linhas (grid) no plano-s
square - define escalas para graficos isometricos (muda o tamanho da janela )
subplot - divide uma janela grafica em uma matriz de sub-janelas
surface properties - descricao das propriedades de entidades 3D
text properties - descricao das propriedades de Text
title properties - descricao das propriedades de Title
titlepage - adiciona uma ttulo no meio da janela grafica
unglue - desfaz uma agregacao e as substitui por filhos individuais
winsid - retorna a lista de janelas graficas
xarc - faca o grafico de uma parte de uma elipse
xarcs - faca o grafico de uma parte de um conjunto de elipses
xarrows - faca o grafico de um conjunto de setas
xaxis - faca um eixo
xbasc - limpe uma janela grafica e apague os graficos associados gravados
xbasimp - mande graficos para uma impressora Postscript ou para um arquivo
xbasr - refaca o grafico de uma janela grafica
xchange - transforme n
umero real para coordenadas de pixel
xclea - apague um retangulo
xclear - limpe uma janela grafica
xclick - aguarde por um click de mouse
xclip - defina uma zona de clipping
xdel - apague uma janela grafica
xend - feche uma sessao grafica
xfarc - preencha uma parte de uma elipse
xfarcs - preencha partes de um conjunto de elipses
xfpoly - preencha um polgono
xfpolys - preencha um conjunto de polgonos
xfrect - preencha um retangulo
xget - recebe valores correntes do contexto grafico
xgetech - recebe a escala grafica corrente
xgetmouse - recebe os eventos do mouse e posic
ao corrente
xgraduate - graduacao dos eixos
xgrid - adiciona um grid em um grafico 2D
xinfo - faz uma string de informacao na sub-janela de mensagem
xinit - inicializacao de driver graficos

93


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

xlfont - carrega uma fonte no contexto grafico e coloca na fila a fonte carregada
xload - carrega uma grafico salvo
xname - muda o nome da janela grafica corrente
xnumb - traca n
umeros
xpause - suspende Scilab
xpoly - faz o grafico de um polinomio (polyline) ou de um polgono
xpolys - faz o grafico de um conjunto de polinomios (polylines) ou de polgonos
xrect - faz um retangulo
xrects - faz ou preenche um conjunto de retangulos
xrpoly - traca um polgono regular
xs2fig - manda grafico para arquivo em formato do Xfig
xs2gif - manda grafico para arquivo em formato GIF
xs2ppm - manda grafico para arquivo em formato PPM
xs2ps - manda grafico para arquivo em formato PS
xsave - salva grafico para um arquivo
xsegs - traca segmentos desconectados
xselect - seleciona janela grafica corrente
xset - define valores do contexto grafico
xsetech - define a sub-janela de uma janela para fazer o grafico
xsetm - janela para definir valores do contexto grafico
xstring - apresenta strings em janela grafica
xstringb - apresenta strings em uma caixa
xstringl - calcula caixa que englobe strings
xtape - fixa o processo de gravacao para graficos
xtitle - adiciona ttulos em uma janela grafica a e aos eixos X e Y
zgrid - linhas (grid) no plano-z

4. Funco
es da Algebra
Linear
aff2ab - funcao linear (affine) para convers
ao para A, b
balanc - balanceie (melhora condicionamento) de matriz ou pencil
bdiag - diagonalizacao em bloco, vetor caracterstico (autovetor) generalizado
chfact - fatoracao esparsa de Cholesky
chol - fatoracao de Cholesky
chsolve - solver esparso de Cholesky
classmarkov - classes recorrente e transiente de matriz de Markov
coff - resolvente (metodo do cofator)
colcomp - compressao de coluna, n
ucleo (kernel ) e nullspace
companion - matriz companion
cond - n
umero de condicionamento
det - determinante
eigenmarkov - vetor caracterstico (autovetor) normalizado de Markov a esquerda e direita
ereduc - calcula a forma de matriz column echelon por transformac
oes QZ
exp - calcula exponencial de elemento
expm - calcula exponencial de matriz quadrada
fstair - calcula a forma de pencil column echelon por transformac
oes QZ
fullrf - fatoracao de posto completo (full rank factorization)

94


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

95

fullrfk - fatoracao de posto completo de A k


genmarkov - gera matriz randomica de Markov com classes recorrente e transiente
givens - retorna matriz unitaria 22 que segue a transformac
ao U xy = [r; 0] = c, com xy = [x; y]
glever - inversa da matriz pencil
gschur - forma generalizada de Schur (obsoleto).
gspec - valor caracterstico (autovalor) de matriz pencil (obsoleto)
hess - forma de Hessenberg
householder - matriz ortogonal de Householder
im inv - inversa de imagem
inv - matriz inversa
kernel - kernel ou nullspace
kroneck - forma de matriz pencil de Kronecker
linsolve - resolve sistema de equacoes lineares
lsq - problemas de mnimos quadrados lineares
lu - fator LU da eliminacao gaussiana
ludel - funcao de utilidade usada com lufact
lufact - fatoracao esparsa LU
luget - extracao de fatores LU esparsos
lusolve - resolve sistemas lineares esparsos
lyap - resolve equacao de Lyapunov
nlev - algoritmo de Leverrier
orth - base ortogonal
pbig - projecao de subespaco associado com os valores caractersticos (eigen-projection)
pencan - forma canonica de matriz pencil
penlaur - coeficientes de Laurent de matriz pencil
pinv - calcula pseudo-inversa
polar - forma polar
proj - projecao
projspec - operadores espectrais
psmall - projecao espectral
qr - decomposicao QR
quaskro - forma quasi-Kronecker
randpencil - pencil randomico
range - range (span) de A k
rank - posto de matriz (rank )
rankqr - calcula fatoracao QR que revela posto (rank revealing QR factorization)
rcond - n
umero de condicionamento inverso (inverse condition number )
rowcomp - compressao de linha, range
rowshuff - algoritmo shuffle
rref - calcula a forma de matriz row echelon por transformac
ao LU
schur - decomposicao Schur (ordered ) de matrizes e pencils
spaninter - interseccao de subespacos
spanplus - soma de subespacos
spantwo - soma e interseccao de subespacos
spchol - fatoracao esparsa de Cholesky
spec - valores caractersticos (autovalores) de matrizes e pencils
sqroot - fatoracao hermitiana W*W
sva - aproximacao de valor singular (singular value approximation)


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

svd - decomposicao de valor singular (singular value decomposition)


sylv - equacao de Sylvester

5. Funco
es para Desenvolvimento de Programas
abort - interrompe avaliacao
ans - answer
\ - divisao de matriz `a esquerda
bool2s - converte matriz booleana para matriz de zeros (false) e uns (true)
boolean - objetos do Scilab Objects, vari
aveis booleanas e operadores: &, |,
break - palavra para interromper loops
call - chamadas de rotinas em Fortran ou C
case - palavra usada em select
clear - apaga variavel da memoria
clearglobal - apaga variaveis globais da memoria
// - comentarios no Scilab, nao sao executados
date - data corrente em formato de string
debug - nvel de debugging
definedfields - retorna ndice campos definidos em list
else - palavra reservada em if-then-else
elseif - palavra reservada em if-then-else
[] - matriz vazia
end - palavra chave da linguagem do Scilab
errcatch - trapping erro
errclear - limpando erro
error - mensagens de erro
evstr - avaliacao de expressoes
exec - executa arquivo com script do Scilab
execstr - executa codigo Scilab em strings
exists - verifica a existencia de variaveis
exit - finaliza a sessao corrente do Scilab
feval - avaliacao m
ultipla
find - ache indices de matrizes ou vetores booleanos para elementos verdadeiros (true)
for - palavra reservada na linguagem para loops
format - formato de n
umero para impressao e apresentac
ao na tela
fort - chama rotinas de Fortran ou C
funptr - codificacao de primitivos (wizard )
getdate - fornece informacoes de data e hora
getenv - fornece o valor de uma variavel de ambiente
getfield - extracao de campo de list
getpid - fornece identificador de processo do Scilab
getversion - fornece versao do Scilab
global - define variavel global
gstacksize - fixa/recebe tamanho do stack global do Scilab
- exponencia
cao, tambem
host - execucao de comandos do Sistema Operacional
hypermat - inicializa uma matriz de dimensao N, ex. a(1,1,1,1:2)=[1 2]

96


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

97

iconvert - conversao para representacao de inteiro de 1 a 4 bytes


ieee - define modo de excecao de ponto flutuante
intppty - define propriedades de argumentos de interface
inttype - retorna o tipo de representac
ao de inteiro utilizada
inv coeff - construa uma matriz polinomial como os seus coeficientes
iserror - testa ocorrencia de erros
isglobal - verifica se uma variavel e global
lasterror - fornece u
ltima mensagem de erro registrada
list - definicao de objeto Scilab list
lsslist - definicao de funcao Scilab linear no espaco de estados Scilab
lstcat - concatenacao de lista
matrix - reforma um vetor ou matriz para uma dimensao diferente
mlist - objeto Scilab, definicao de lista orientada para matriz
mode - seleciona um modo em arquivo de execuc
ao
mtlb mode - troca para operadores analogos `aqueles do Matlabr
null - apaga um elemento de uma lista
overloading - apresenta funcoes e operadores sobrecarregando capacidades
pause - modo de pausa, invoca teclado
poly - definicao de polinomio
predef - protecao de variavel
getcwd - recebe diretorio corrente do Scilab
pwd - imprime diretorio corrente do Scilab
quit - diminui um nvel de pausa ou sai
0 - operador conjugado transposto, delimitador de string
resume - retorna ou volta a execucao e copia algumas vari
aveis locais
return - retorna ou volta a execucao e copia algumas vari
aveis locais
rlist - definicao de fracao de funcao racional no Scilab
sciargs - argumento de comando de linha do scilab
select - funcao para m
ultiplas opcoes de selec
ao, select-case, que e equivalente ao switch-case da
linguagem C
setfield - insercao de campo em list
/ - divisao a direita e feed back
stacksize - define tamanho de pilha (stack size)para o Scilab
testmatrix - gera alguma matriz particular
then - palavra chave no comando if-then-else
tlist - definicao de objeto typed list no Scilab
type - vari
avel type
typename - associa um nome a variavel type
user - faz interface com rotinas em Fortran ou C, verifique intersci para complementac
ao
varn - vari
avel simbolica de um polinomio
what - lista os primitivos no Scilab, ex. while, if, clear etc.
where - recebe instrucoes correntes da posic
ao de execuc
ao
whereami - apresenta instrucoes correntes da posic
ao de execuc
ao
whereis - nome de biblioteca contendo uma func
ao
while - palavra chave de comando Scilab, para loop logico
who - lista as variaveis na memoria do Scilab
who user - lista as variaveis do usuario


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

98

6. Funco
es para Otimizac
ao e Simulac
ao
NDcost - funcao externa generica para determinac
ao do gradiente da func
ao optim usando diferencas finitas
bvode - problema de valor no contorno para equac
oes diferenciais ordinarias
dasrt - resolucao de equacoes algebrico-diferenciais com determinac
ao de superfcie de cruzamento
(zero crossing)
dassl - resolucao de equacoes algebrico-diferenciais
datafit - identificacao de parametros baseados em dados medidos
derivative - aproxima derivadas de uma func
ao
fit dat - identificacao de parametros baseados em dados medidos
fsolve - determinacao de solucao de sistema de equac
oes algebricas nao lineares
impl - resolucao de equacoes diferenciais lineares implcitas
int2d - integral definida 2D pelo metodo de quadratura e cubature
int3d - integral definida 3D pelo metodo de quadratura e cubature
intc - integral de Cauchy
intg - integral definida
intl - integral de Cauchy
karmarkar - algoritmo de Karmarkar
leastsq - resolucao de problemas de mnimos quadrados nao lineares
linpro - resolucao de problemas de programac
ao linear (LP)
lmisolver - resolucao de LMI (linear matrix inequality)
lmitool - ferramentas para resolucao de LMIs
numdiff - estimacao numerica de gradiente
ode - resolucao de equacoes diferenciais ordinarias (EDOs), problema de valor inicial (PVI)
ao no domnio do tempo discreto
ode discrete - resolucao de EDOs, simulac
ode root - resolucao de EDOs com soluc
ao de razes
odedc - resolucao de EDOs discretas/contnuas
odeoptions - define opcoes para integradores de EDOs
optim - resolucao do problema de otimizac
ao nao linear
quapro - resolucao do problema de programac
ao linear quadratico
semidef - resolucao do problema de programac
ao semi-definida

7. Funco
es para C
alculo Polinomial
bezout - equacao de Bezout para polinomios
clean - limpa matrizes (arredonda para zero valores muito pequenos)
cmndred - forma de denominador comum
coeff - coeficientes de matriz polinomial
coffg - inversa de matriz polinomial
colcompr - compressao de coluna de matriz polinomial
degree - grau de matriz polinomial
denom - denominador
derivat - derivada de matriz racional
determ - determinante de matriz polinomial
detr - determinante polinomial


RESUMO INCOMPLETO DAS FUNC
OES
DO SCILAB

99

diophant - equacao de Diophantine (Bezout)


factors - fatoracao numerica real
gcd - calculo de gcd
hermit - forma de Hermite
horner - avaliacao de polinomio ou matriz racional
hrmt - gcd de polinomios
htrianr - triangularizacao de matriz polinomial
invr - inversao de matriz (racional)
lcm - mnimo m
ultiplo comum (lcm, least common multiple)
lcmdiag - fatoracao diagonal de lcm (least common multiple)
ldiv - long division para matriz polinomial
numer - numerador
pdiv - divisao polinomial
pol2des - matriz polinomial para forma descriptor
pol2str - conversao polinomial para string
polfact - fatores mnimos
residu - resduo
roots - razes de polinomios
routh t - Tabela de Routh
rowcompr - compressao de linha de matriz polinomial
sfact - fatoracao espectral no domnio do tempo discreto
simp - simplificacao racional
simp mode - modo de simplificacao racional
sylm - matriz de Sylvester

8. Funco
es de Menus
addmenu - definicao de botao interativo ou menu
delmenu - apaga botao interativo ou menu
getvalue - janela para aquisicao de dados
halt - interrompe execucao
havewindow - retorna ao modo de janela do Scilab
keyboard - comandos do teclado
seteventhandler - define um manipulador de evento (event handler ) para a janela grafica corrente
setmenu - ativacao de botao interativo ou menu
unsetmenu - desativacao de botao interativo ou menu/submenu
x choices - janela de escolha interativa atraves de botoes
x choose - janela de escolha interativa
x dialog - janela de menu
x matrix - janela de menu de matrizes
x mdialog - janela de menu com varias linhas
x message - janela grafica com mensagem
x message modeless - apresenta janela de mensagem

Licen
ca do Scilab

100

C
opia da Licenca do Scilab
SCILAB License
**************
1- Preface
**********
The aim of this license is to lay down the conditions enabling you to
use, modify and circulate the SOFTWARE. However, INRIA and ENPC remain
the authors of the SOFTWARE and so retain property rights and the use
of all ancillary rights.
2- Definitions
**************
The SOFTWARE is defined as all successive versions of SCILAB software
and their documentation that have been developed by INRIA and ENPC.
SCILAB DERIVED SOFTWARE is defined as all or part of the SOFTWARE that
you have modified and/or translated and/or adapted.
SCILAB COMPOSITE SOFTWARE is defined as all or a part of the SOFTWARE
that you have interfaced with a software, an application package or a
toolbox of which you are owner or entitled beneficiary.
3- Object and conditions of the SOFTWARE license
************************************************
a) INRIA and ENPC authorize you free of charge, to reproduce the
SOFTWARE source and/or object code on any present and future support,
without restriction, providing the following reference appears in all
the copies: Scilab (c)INRIA-ENPC.
b) INRIA and ENPC authorize you free of charge to correct any bugs,
carry out any modifications required for the porting of the SOFTWARE
and to carry out any usual functional modification or correction,
providing you insert a patch file or you indicate by any other
equivalent means the nature and date of the modification or the
correction, on the corresponding file(s) of the SOFTWARE.
c) INRIA and ENPC authorize you free of charge to use the SOFTWARE
source and/or object code, without restriction, providing the
following reference appears in all the copies: Scilab (c)INRIA-ENPC.
d) INRIA and ENPC authorize you free of charge to circulate and
distribute, free of charge or for a fee, the SOFTWARE source and/or
object code, including the SOFTWARE modified in accordance with

Licen
ca do Scilab

101

above-mentioned article 3 b), on any present and future support,


providing:
- the following reference appears in all the copies: Scilab
(c)INRIA-ENPC.
- the SOFTWARE is circulated or distributed under the present license.
- patch files or files containing equivalent means indicating the
nature and the date of the modification or the correction to the
SOFTWARE file(s) concerned are freely circulated.
4- Object and conditions of the DERIVED SOFTWARE license
********************************************************
a) INRIA and ENPC authorize you free of charge to reproduce and modify
and/or translate and/or adapt all or part of the source and/or the
object code of the SOFTWARE, providing a patch file indicating the
date and the nature of the modification and/or the translation and/or
the adaptation and the name of their author in the SOFTWARE file(s)
concerned is inserted. The SOFTWARE thus modified is defined as
DERIVED SOFTWARE. The INRIA authorizes you free of charge to use the
source and/or object code of the SOFTWARE, without restriction,
providing the following reference appears in all the copies: Scilab
(c)INRIA-ENPC.
b) INRIA and ENPC authorize you free of charge to use the SOFTWARE
source and/or object code modified according to article 4-a) above,
without restriction, providing the following reference appears in all
the copies: "Scilab inside (c)INRIA-ENPC".
c) The INRIA and the ENPC authorize you free of charge to circulate
and distribute for no charge, for non-commercial purposes the source
and/or object code of DERIVED SOFTWARE on any present and future
support, providing:
- the reference " Scilab inside (c)INRIA-ENPC
mentioned;

" is prominently

- the DERIVED SOFTWARE is distributed under the present license;


- the recipients of the distribution can access the SOFTWARE
source;

code

- the DERIVED SOFTWARE is distributed under a name other than SCILAB.


d) Any commercial use or circulation of the DERIVED SOFTWARE shall
have been previously authorized by INRIA and ENPC.

Licen
ca do Scilab

102

5- Object and conditions of the license concerning COMPOSITE SOFTWARE


*********************************************************************
a) INRIA and ENPC authorize you to reproduce and interface all or part
of the SOFTWARE with all or part of other software, application
packages or toolboxes of which you are owner or entitled beneficiary
in order to obtain COMPOSITE SOFTWARE.
b) INRIA and ENPC authorize you free, of charge, to use the SOFTWARE
source and/or object code included in the COMPOSITE SOFTWARE, without
restriction, providing the following statement appears in all the
copies: "composite software using Scilab (c)INRIA-ENPC functionality".
c) INRIA and ENPC authorize you, free of charge, to circulate and
distribute for no charge, for purposes other than commercial, the
source and/or object code of COMPOSITE SOFTWARE on any present and
future support, providing:
- the following reference is prominently mentioned: "composite
software using Scilab (c)INRIA-ENPC functionality ";
- the SOFTWARE included in COMPOSITE SOFTWARE is distributed under the
present license ;
- recipients of the distribution have access to the SOFTWARE
code;

source

- the COMPOSITE SOFTWARE is distributed under a name other than


SCILAB.
e) Any commercial use or distribution of COMPOSITE SOFTWARE shall have
been previously authorized by INRIA and ENPC.
6- Limitation of the warranty
*****************************
Except when mentioned otherwise in writing, the SOFTWARE is supplied
as is, with no explicit or implicit warranty, including warranties of
commercialization or adaptation. You assume all risks concerning the
quality or the effects of the SOFTWARE and its use. If the SOFTWARE is
defective, you will bear the costs of all required services,
corrections or repairs.
7- Consent
**********
When you access and use the SOFTWARE, you are presumed to be aware of

Licen
ca do Scilab

and to have accepted all the rights and obligations of the present
license.
8- Binding effect
*****************
This license has the binding value of a contract.
You are not responsible for respect of the license by a third party.
9- Applicable law
*****************
The present license and its effects are subject to French law and the
competent French courts.

103

Bibliogr
aficas

104

Refer
encias
de Assis, A. J. (2003). Metodos numericos em engenharia qumica. Apostila de Curso de Metodos
Numericos. UFU/FEQUI/NUCOP.
Forbellone, A. L. V. (2000). L
ogica de programac
ao : a construc
ao de algoritmos e estruturas de
dados. Makron.
Guimaraes, A. M. & Lages, N. A. C. (1994). Algoritmos e Estruturas de Dados. Livros Tecnicos e
Cientficos Editora.
hitmill.com (2004). History of computers. http://www.hitmill.com/computers/computerhx1.html,
visitado em 25 de setembro de 2004.
Scilab.Group (1998).
Introduction to scilab:
Users guide.
Disponvel
http://scilabsoft.inria.fr/product/index product.php?page=old documentation.html.

em

Potrebbero piacerti anche