Вы находитесь на странице: 1из 147

Introduo ao SciLab

Fbio Pires Mouro

UNIFEMM (Centro Universitrio de Sete Lagoas)


2014

Prefcio
O objetivo deste texto o de auxiliar alunos de cursos de Engenharias disciplinas em
que se faz necessrio um estudo numrico de problemas, como Mtodos Numricos, Clculo
Numrico e Computao Numrica, alm de outras disciplinas relacionadas, como Geometria
Analtica e lgebra Linear.
Este texto apresenta oito captulos, sendo que Captulo 1 apresenta uma Introduo
do Scilab. O Captulo 2 apresenta o Ambiente do Scilab e os modos de acesso ao Help, de
modo que o leitor possa se familiarizar com o ambiente. O Captulo 3 apresenta o as
operaes bsicas com nmeros reais e complexos, alm de apresentar uma vasta quantidade
de funes intrnsecas (nativas). O Captulo 4 destinado ao estudo de matrizes e vetores. O
Captulo 5 apresenta as definies e operaes com polinmios. o Captulo 6 tem por objetivo
apresentar as ferramentas grficas do Scilab. O Captulo 7 apresenta alguns modos de
obteno de dados externos ao Scilab. O Capitulo 8 destinado programao, apresentando
conceitos bsicos de estruturas de repetio e condicionais. Em cada captulo so
apresentados exemplos e ao fim de cada um (com exceo do Captulo 7) so propostos
exerccios.
Esta a primeira verso do texto, o qual sofrer modificaes de acordo com revises
do prprio autor e de outros professores convidados a auxiliar o trabalho. Neste texto, foi
utilizada verso 5.4.1 do Scilab.

Sumrio Resumido
Captulo 01 - Introduo ............................................................................................................... 9
Captulo 2 O ambiente Scilab ................................................................................................... 10
Captulo 3 Operaes bsicas................................................................................................... 34
Captulo 4 - Vetores e Matrizes ................................................................................................... 65
Captulo 5 - Polinmios ............................................................................................................. 105
Captulo 6 - Grficos .................................................................................................................. 111
Captulo 7 - Fontes externas de dados ...................................................................................... 127
Captulo 8 - Introduo programao no Scilab ..................................................................... 133
Bibliografia ................................................................................................................................ 147

Sumrio
Captulo 01 - Introduo ............................................................................................................... 9
Captulo 2 O ambiente Scilab ................................................................................................... 10
2.1 Apresentao grfica do ambiente ................................................................................... 10
2.2 Utilizao do Prompt de Comandos .................................................................................. 11
2.2.1 Hierarquia de prompts ............................................................................................... 12
2.3 Variveis especiais (comando Who) ................................................................................. 14
2.3.1 Algumas variveis especiais ....................................................................................... 14
2.4 Arquivos e diretrios ......................................................................................................... 16
2.4.1 Definio do diretrio de trabalho............................................................................. 16
2.4.2 Histrico de comandos (diary) ................................................................................... 17
2.5 Help do Scilab .................................................................................................................... 19
2.5.1 Demonstraes do Scilab ........................................................................................... 21
2.6 O editor Scinotes ............................................................................................................... 29
2.7 Exerccios Propostos.......................................................................................................... 32
Captulo 3 Operaes bsicas................................................................................................... 34
3.1 Operaes bsicas no Scilab.............................................................................................. 34
3.1.1 Operaes Bsicas com variveis reais ...................................................................... 34
3.1.2 Operaes Bsicas com variveis complexas ............................................................. 38
3.2 Algumas funes elementares .......................................................................................... 41
3.2.1 Funes matemticas bsicas .................................................................................... 41
3.2.1.1 Funo abs() ........................................................................................................ 41
3.2.1.2 Funo log() ......................................................................................................... 42
3.2.1.3 Funo log10() ..................................................................................................... 43
3.2.1.4 Funo log2() ....................................................................................................... 44
3.2.1.5 Funo exp() ........................................................................................................ 44
3.2.1.6 Funo sqrt() ....................................................................................................... 45
3.2.1.7 Funo sum() ....................................................................................................... 46
3.2.1.8 Funo prod() ...................................................................................................... 46
3.2.1.9 Funo primes()................................................................................................... 47
3.2.1.10 Funo factor() .................................................................................................. 47
3.2.1.11 Funo modulo() ............................................................................................... 48
3.2.1.12 Funo real() ..................................................................................................... 48

3.2.1.13 Funo imag() .................................................................................................... 49


3.2.2 Funes elementares de converso ........................................................................... 49
3.2.2.1 Funo dec2bin() ................................................................................................. 49
3.2.2.2 Funo bin2dec() ................................................................................................. 50
3.2.3 Funes trigonomtricas ............................................................................................ 51
3.2.4 Funes trigonomtricas inversas.............................................................................. 52
3.2.5 Funes de arredondamento ..................................................................................... 53
3.2.5.1 Funo round() .................................................................................................... 53
3.2.5.2 Funo floor() ...................................................................................................... 54
3.2.5.3 Funo ceil() ........................................................................................................ 54
3.2.5.4 Funo int() ......................................................................................................... 55
3.2.5.5 Funo fix() .......................................................................................................... 56
3.2.6 Funes de manuseamento de strings ...................................................................... 56
3.2.6.1 Funo convstr() .................................................................................................. 56
3.2.6.2 Funo length() ................................................................................................... 57
3.2.6.3 Funo part() ....................................................................................................... 58
3.2.6.4 Funo eval() ....................................................................................................... 58
3.2.7 Algumas funes elementares estatsticas ................................................................ 59
3.2.7.1 Funo mean()..................................................................................................... 59
3.2.7.2 Funo stdev() ..................................................................................................... 59
3.2.7.3 Funo variance() ................................................................................................ 59
3.2.7.4 Funo mad()....................................................................................................... 59
3.2.8 Limpeza de memria - clear ....................................................................................... 60
3.2.9 Limpeza da tela - funo clc() ..................................................................................... 62
3.3 Exerccios Propostos.......................................................................................................... 62
Captulo 4 - Vetores e Matrizes ................................................................................................... 65
4.1 Vetores .............................................................................................................................. 65
4.1.1 Criando um vetor ....................................................................................................... 65
4.1.2 Operaes bsicas com vetores ................................................................................. 66
4.1.2.1 Soma e subtrao entre dois vetores.................................................................. 66
4.1.2.2 Multiplicao de um vetor por um escalar ......................................................... 67
4.1.2.3 Vetor transposto ................................................................................................. 68
4.1.2.4 Funes com vetores .......................................................................................... 68
4.1.2.5 Operaes vetoriais "elemento por elemento" .................................................. 69

4.1.2.6 Produto Escalar ................................................................................................... 70


4.1.2.6 Norma de um vetor ............................................................................................. 70
4.2 Matrizes ............................................................................................................................. 71
4.2.1 Criao de matrizes .................................................................................................... 71
4.2.2 Operaes bsicas matriciais ......................................................................................... 73
4.2.2.1 Soma matricial......................................................................................................... 73
4.2.2.2 Produto de uma matriz por um escalar .................................................................. 73
4.2.2.3 Produto matricial..................................................................................................... 74
4.2.2.4 Operaes matriciais "elemento por elemento" .................................................... 75
4.2.3 Matrizes Especiais ...................................................................................................... 76
4.2.3.1 Matriz Identidade - funo eye()......................................................................... 77
4.2.3.2 Matriz transposta - comando ' ............................................................................ 78
4.2.3.2 Matrizes triangulares e triangulao .................................................................. 78
4.2.3.3 Matriz Inversa - inv(A) ......................................................................................... 80
4.2.4 Soluo de sistemas de equaes lineares utilizando a funo inv()......................... 82
4.2.5 Determinante - funo det() ...................................................................................... 84
4.3 Casos particulares de matrizes e vetores .......................................................................... 87
4.3.1 Matrizes e vetores formados por zeros (funo zeros) ou por uns (funo ones) .... 87
4.3.2 Matrizes e vetores randmicos .................................................................................. 89
4.3.3 Matrizes e vetores simblicos .................................................................................... 92
4.3.4 Matrizes e vetores booleanos .................................................................................... 93
4.3.5 Acesso e atribuio a elementos de vetores e matrizes ............................................ 93
4.3.6 Funes size() e length()........................................................................................... 101
4.4 Exerccios Propostos .................................................................................................... 101
Captulo 5 - Polinmios ............................................................................................................. 105
5.1 Definies ........................................................................................................................ 105
5.2 Criando Polinmios no Scilab - funo poly().................................................................. 106
5.3 Operaes com polinmios no Scilab ............................................................................. 107
5.4 Avaliao de polinmios - funo horner() ..................................................................... 108
5.5 Razes de polinmios - funo roots() ............................................................................. 108
5.6 Exibindo coeficientes - funo coeff() ............................................................................. 109
5.7 Exerccios Propostos........................................................................................................ 110
Captulo 6 - Grficos .................................................................................................................. 111
6.1 A janela grfica ................................................................................................................ 111

6.2 Grficos 2D - plot2d() ...................................................................................................... 112


6.2.1 Os atributos do grfico ............................................................................................. 114
6.2.2 Exemplos .................................................................................................................. 116
6.3 Outros comandos para grficos ...................................................................................... 119
6.3.1 Sub-grficos - funes xsetech() e subplot() ............................................................ 121
6.4 Grficos 3D - plot3d(), fplot3d() ...................................................................................... 123
6.5 Curvas de nvel - contour() .............................................................................................. 125
6.7 Exerccios Propostos........................................................................................................ 126
Captulo 7 - Fontes externas de dados ...................................................................................... 127
7.1 Lendo um arquivo texto .................................................................................................. 127
7.2 Lendo um arquivo Excel .................................................................................................. 129
Captulo 8 - Introduo programao no Scilab ..................................................................... 133
8.1 Definindo Scripts ............................................................................................................. 133
8.2 Comandos de interao com o usurio - input e disp..................................................... 134
8.3 Definindo funes ........................................................................................................... 135
8.3.1 Definindo funes por meio de arquivos de texto ou comandos no prompt .......... 135
8.3.2 Definindo funes por meio do comando deff ........................................................ 136
8.4 Comandos iterativos ....................................................................................................... 138
8.4.1 O Loop for ................................................................................................................. 138
8.4.2 O Loop While ............................................................................................................ 139
8.5 Estruturas condicionais ................................................................................................... 140
8.5.1 Comando condicional if-then-else ........................................................................... 140
8.5.2 Comando condicional select-case ............................................................................ 144
8.6 Exerccios Propostos........................................................................................................ 145
Bibliografia ................................................................................................................................ 147

Captulo 01 - Introduo
O Scilab possui grande aplicao na soluo de problemas numricos, os quais podem
ser resolvidos utilizando as funes do prprio Scilab, pacotes de ferramentas (toolboxes)
especficos e funes ou scripts definidos pelo usurio. Alm disso, os resultados podem ser
representados e analisados utilizando as ferramentas grficas disponveis no software. Alm
da utilizao dos comandos e funes do Scilab e da possibilidade de implementar funes,
possvel, ainda, acessar cdigos escritos em C ou Fortran.
O Scilab foi criado por pesquisadores do I.N.R.I.A. (Institut National de Recherce en
Informatique et en Automatic), na Frana, podendo ser encontrado e descarregado
gratuitamente pelo endereo eletrnico http://www.scilab.org. O software distribudo
gratuitamente desde 1.994 e a partir de 2003 tem sido mantido por um consrcio de empresas
e instituies francesas, denominado Consrcio Scilab, (Motta, 2004). Atualmente o Scilab tem
seu cdigo distribudo na rede mundial de computadores, o que o classifica como open source.

Captulo 2 O ambiente Scilab


Este captulo permite ao leitor uma familiarizao com a ambiente grfico do Scilab,
apresentando conceitos bsicos do ambiente, de edio de comandos, de manuseamento de
diretrios e arquivos e uma apresentao da Ajuda do sistema. Este captulo apresenta, ainda,
exemplos extrados de demonstraes do Scilab verso 5.4.1, alm da execuo de exemplos
encontrados na Ajuda por meio do editor Scinotes.

2.1 Apresentao grfica do ambiente


O Scilab um software voltado ao desenvolvimento de solues aplicadas a problemas
numricos. Desenvolvido em 1990 por um grupo de pesquisadores do INRIA (Institute de
Recherche en Informatique et an Automatique) e do ENPC (cole Nationale des Ponts et
Chausses), o Scilab distribudo gratuitamente pela Internet desde 1994.
A tela inicial da verso 5.4.1 do Scilab apresentada pela Figura 2.1.

Figura 2.1: Tela inicial do Scilab


Menus de controle: apresentam comandos de manuseamento de arquivos (Arquivo), edio
(Editar), controle de processamentos (Controle), gerenciamento de aplicaes e cdigos
(Aplicao) e ajuda (?).
Barra de ferramentas: apresenta os botes de atalho das ferramentas mais utilizadas do Scilab;
Navegao de arquivos: apresenta uma estrutura de diretrios, com a qual possvel alterar
entre os diretrios, com o objetivo de auxiliar na busca e execuo de arquivos de comandos
no Scilab. Arquivos de comandos podem ser funes ou scripts definidos pelo usurio,
armazenados em arquivos de texto. Acima do navegador de arquivos, definida a pasta de

trabalho. Esta pasta de trabalho contm os arquivos de funes definidas pelo usurio, as
quais so executadas no prompt.
Navegao de variveis: exibe as variveis criadas durante uma execuo, bem como os
valores dessas variveis.
Histrico de comandos: armazena o histrico de comandos digitados no prompt.
Prompt de comando, Figura 2.2:

Figura 2.2: Prompt de Comando


O Prompt de comando a principal forma de interao entre o usurio e o Scilab.

2.2 Utilizao do Prompt de Comandos


O prompt de comandos permite a digitao e edio de comandos, alm de chamadas
de funes. O que se digita aps // (duas barras), o Scilab interpreta como comentrio. Abaixo
um exemplo.
-->a=2
a =
2.
-->//Este um comentrio
-->b=5
b =
5.
-->a+b
ans =
7.
Para simplificar a utilizao do Prompt, a Tabela 01, apresenta uma lista de combinaes de
teclas aplicadas edio dos comandos.

Ctrl - p ou
Ctrl - n ou
Ctrl - b ou
Ctrl - f ou
Ctrl - h ou Delete
Backspace
Ctrl - a
Ctrl -e
Ctrl - k
Ctrl - u

Recupera comandos digitados anteriormente


Recupera comandos seguintes (caso existam)
Move o cursor um caracter para a esquerda
Move o cursor um caracter para a frente
Apaga o caracter direita
Apaga o caracter esquerda
Posiciona o cursor no incio da linha
Posiciona o cursor no fim da linha
Apaga todos os caracteres da posio do cursor at o fim da linha
Cancela a linha
Tabela 01: Comandos utilizados no prompt de comandos

2.2.1 Hierarquia de prompts


No Scilab possvel utilizar ambientes distintos. Todas as variveis definidas num
ambiente (prompt de comando), so vlidas para os ambientes posteriores. Porm, a priori,
no se pode utilizar uma varivel de um determinado ambiente em ambientes anteriores a
este. Este fato se justifica pela hierarquia entre os prompts de comandos.
O uso deste recurso justificvel quando se deseja criar um novo ambiente para seja
testado algum resultado do ambiente anterior, sem interferir nos resultados j obtidos, pois as
variveis criadas no ambiente novo no sero mais vlidas ao se retornar.
Para se criar novos ambientes preciso utilizar a combinao de teclas Ctrl - c ou utilizar o
comando pause.
--> //Ambiente principal
-1-> //Novo Ambiente criado (Ctrl - c)
-2-> //Outro ambientee criado (Ctrl - c)
-2->
Para retornar ao ambiente -1->, por exemplo, preciso utilizar o comando resume ou return.
-2->resume //retorna ao ambiente 1
-1->resume //retorna ao ambiente pricipal
-->
Para verificar a relao de variveis, foram criadas as variveis a e b no ambiente principal e as
mesmas foram exibidas no prximo ambiente. Em seguida, foi criada a varivel c no ambiente 1-> e , por meio do comando resume, o ambiente original foi retornado e feita a tentativa de

exibir a varivel c neste ambiente. Para simplificar o entendimento, os comandos foram


comentados.
-->a=2 //cria a variavel a e armazena o valor 2
a =
2.
-->b=3 //cria a variavel b e armazena o valor 3
b =
3.
-->//Ctrl - c para criar novo ambiente
-1->a,b //exibir os valores de a e b no novo ambiente
a =
2.
ans =
3.
-1->c=5 //criar a variavel c no novo ambiente e armazenar o valor 5
c =
5.
-1->resume //retorna ao ambiente original
-->c //tentar exibir c
!--error 4
Varivel indefinida: c

-->a,b //veja que a e b continuam definidas


a =
2.
ans =
3.

Os comandos para manipulao podem ser sintetizados:

Pause (Ctrl - c) - cria novo ambiente;

Resume ou Return - retorna ao ambiente anterior;


Abort - retorna todos os ambientes, voltando ao ambiente original.

2.3 Variveis especiais (comando Who)


Variveis especiais apresentam valores pr-definidos no Scilab, sendo variveis
reservadas pelo sistema e no podem ser redefinidas pelo usurio, tampouco apagadas. Para
visualizar as variveis especiais preciso digitar o comando who, no prompt de comandos,
conforme apresentado pela Figura 2.3. Pode-se observar, ainda, que algumas variveis so
fixadas com o valor % (porcentagem).
-->who
Suas variveis so:
help
makeCommand
editor
home
modules_managerlib
assertlib development_toolslib
scicos_autolib
scicos_utilslib
xcoslib
graphic_exportlib
graphicslib
datatipslib
guilib
uitreelib
scinoteslib
jvmlib
helptoolslib
tclscilib
atomslib
atomsguilib
matiolib
parameterslib simulated_annealinglib
genetic_algorithmslib
umfpacklib
spreadsheetlib
demo_toolslib
external_objectslib
soundlib
m2scilib compatibility_functilib
arnoldilib
statisticslib
windows_toolslib
WSCI
timelib
stringlib special_functionslib
sparselib
signal_processinglib
%z
%s
polynomialslib
overloadinglib
optimsimplexlib
optimbaselib
neldermeadlib
optimizationlib
interpolationlib
linear_algebralib
output_streamlib
iolib
integerlib
dynamic_linklib
data_structureslib
cacsdlib
fileiolib
functionslib elementary_functionslib
differential_equationlib
corelib
PWD
%tk
%F
%T
%nan
%inf
SCI
SCIHOME
TMPDIR
%gui
%fftw
$
%t
%f
%eps
%io
%i
%e
%pi
utilizando
9463 elementos de um total de 10000000.
e
81 variveis de um total de
9231.
Suas variveis globais so:
%modalWarning

%toolboxes

utilizando
27 elementos de um total de
e
4 variveis de um total de
767.

%toolboxes_dir

%helps

999999.

Figura 2.3: Apresentao das variveis especiais aps o comando Who

2.3.1 Algumas variveis especiais


Esta seo apresenta algumas variveis especiais, bem como um exemplo para cada
uma, com o comando digitado para se obter o resultado esperado. Vale ressaltar que o Scilab

case sensitive, ou seja, as letras minsculas e maisculas so diferenciadas na compilao dos


comandos.
Primeiramente vlido definir a varivel ans (que deriva do ingls, answer, que
significa resposta). Esta varivel armazena a resposta de um clculo ou aps uma execuo de
uma funo. Como exemplo, foi realizada a soma de dois nmeros reais, o resultado fica
armazena na varivel ans, que pode inclusive ser reutilizada.
-->2+4 //soma de dois numeros
ans =
6.
-->ans * 2 //multiplicacao da resposta por 2
ans =
12.
%pi: apresenta uma aproximao do nmero (3,1415926...);
-->%pi
%pi =
3.1415927
Para verificar que o Scilab case sensitive, segue exemplo da digitao de %PI, em vez de %pi:
-->%PI
!--error 4
Varivel indefinida: %PI
%e: aproximao da constante de Euller (2,7182818...);
-->%e
%e =
2.7182818
%i: raiz imaginria i = 1;
-->%i
%i =
i

%eps: apresenta o epsilon da mquina em que o Scilab est sendo executado. O epsilon
corresponde ao menor nmero maior do que zero que a mquina pode representar. Este
nmero varia, de acordo com a mquina. Qualquer valor menor ou igual ao epsilon da
mquina arredondado para zero. Para verificar, pode ser digitado no prompt:
-->1+%eps
ans =

1.
Para verificar o valor do epsilon da mquina, basta utilizar o comando:
-->%eps
%eps =
2.220D-16
%inf: representao, no Scilab, de infinito.
-->%inf
%inf =
Inf
%nan: utilizada para representar "Not a Number" (no um nmero).
-->%nan
%nan =
Nan
%T e %F: variveis com valores booleanos, sendo que representam, respectivamente,
"verdadeiro" (true) e "falso" (false).

2.4 Arquivos e diretrios


2.4.1 Definio do diretrio de trabalho
O diretrio de trabalho armazena funes e scripts definidas pelo usurio e o Scilab
compila diretamente os cdigos presentes neste diretrio. Por este motivo se torna
importante definir qual ser o diretrio de trabalho.
O diretrio pode ser visualizado pelo Navegador de arquivos, conforme apresentado
pela Figura 2.4:

Figura 2.4: Navegador de Arquivos

Para visualizar o diretrio de trabalho pelo prompt, preciso digitar o comando pwd.
-->pwd
ans =
D:\Fbio\Clculo Numrico\Scilab\Arquivos
Existem duas formas de alterar este diretrio:
1) utilizar a navegao de arquivos, Figura 2.4, e selecionar outra pasta;
2) por meio da funo chdir(). A sintaxe deste comando :
chdir('diretrio de trabalho')
Exemplo:
-->chdir('d:\Fbio')
ans =
T
No caso, o retono "T" significa que o comando foi realizado com sucesso e a pasta foi alterada,
conforme Figura 2.5.

Figura 2.5: Novo diretrio definido


Importante: no confundir a varivel pwd e PWD. PWD representa o diretrio no qual o Scilab
est sendo executado, enquanto que pwd armazena o diretrio de trabalho. Os comandos
foram executados, com o objetivo de visualizar que as pastas so distintas:
-->pwd
ans =
d:\Fbio
-->PWD
PWD =
D:\Usurios\Cliente\Documents
importante lembrar que o Scilab case sensitive.

2.4.2 Histrico de comandos (diary)


Uma opo de armazenar o histrico de comandos utilizados no Scilab por meio do
comando diary, com o qual se pode criar um arquivo de texto dentro do diretrio de trabalho.

A utilizao deste comando sintetizada como:


diary('nome do arquivo') //define o arquivo que armazenar os comandos
Sequncia de comandos
diary(0) //finaliza a gravao dos comandos
Como exemplo, foi criado um arquivo com o nome "comandos gravados".
-->diary('comandos gravados')
ans =
1.
-->a=2
a =
2.
-->b=5
b =
5.
-->pwd
ans =
d:\Fbio
-->diary(0)
-->

A Figura 6 apresenta o arquivo gerado pelo comando diary:

Figura 6: Arquivo gerado pela utilizao do comando diary


Importante: vale ressaltar que este arquivo gerado fica armazenado no diretrio de trabalho.

2.5 Help do Scilab


Existem duas formas de acessar o help do Scilab. A primeira digitar o comando help
no prompt de comandos. A segunda clicar no menu ? e em seguida em Ajuda do Scilab (pode
tambm ser pressionada a tecla F1).
A Figura 7 apresenta a janela de ajuda do Scilab. A navegao pode dentro desta janela
por ser feita pela estrutura esquerda da janela ou ento pode ser feita uma busca pelo que
se deseja consultar.

Figura 7: Janela de ajuda do Scilab


Para exemplificar, a Figura 8 apresenta a consulta pela funo fft2, presente na pasta
Processamento de Sinais.

Figura 8: Ajuda para a funo fft2, processamento de sinais

Pode ser visto que, em seus tpicos, a ajuda do Scilab apresenta o modelo da chamada
de funo, lista de parmetros, descrio da funo e at exemplos de utilizao.
A Figura 9 apresenta um exemplo de utilizao da funo fft2:

Figura 9: Exemplo de utilizao da funo fft2


sugerido, ao leitor, uma navegao dentro da janela ajuda e verificao de alguns
contedos.
OBS.: tambm pode ser digitado, no prompt de comandos, o comando help seguido pelo nome
da funo.
Por exemplo,
-->help det
Apresenta a ajuda para a funo det(), a qual se utiliza para determinar determinantes de
matrizes quadradas.
2.5.1 Demonstraes do Scilab
Ainda no menu Ajuda (?), possvel clicar em "Demonstraes do Scilab" e ter acesso a
alguns exemplos do que pode ser feito no sistema. A Figura 2.10 apresenta a janela
"Demonstraes do Scilab"

Figura 2.10 - Demonstraes do Scilab


recomendado, ao usurio, uma verificao nessas categorias de demonstraes. Por
exemplo, dentro de Simulao/Simulao de fluxo/Black hole, pode ser simulado o fluxo de
uma partcula, dados alguns parmetros, como posio e velocidade, definidos pelo usurio. A
Figura 2.11 apresenta essa simulao de fluxo.

Figura 2.11: Simulao de fluxo Black hole


Em "Aleatrio", possvel verificar algumas distribuies de probabilidade para variveis
aleatrias, conceito este da rea de Estatstica.
A Figura 2.12 apresenta a simulao para uma varivel aleatria binomial.

Figura 2.12: Simulao de uma varivel aleatria binomial

Podem ser vistas, ainda, simulaes de algoritmos aplicados a otimizao, como o caso
do Algoritmo Gentico (AG). Este algoritmo trabalha com a ideia da evoluo de Darwin,
partindo de uma populao inicial, em que cada indivduo da populao representa uma
soluo do problema tratado e, por meio de operadores como: cruzamento entre os indivduos
(gerando novos solues que "herdam" caractersticas dos "pais"), seleo entre os indivduos,
gerando novas populaes que contm os filhos gerados e mutao nos novos indivduos, so
geradas novas populaes, com solues teoricamente melhores do que as solues das
populaes anteriores. Este algoritmo leva evoluo dos indivduos, gerando solues cada
vez melhores.
A Figura 2.13 apresenta a execuo e o grfico do algoritmo gentico apresentado pela
Figura 2.14, presente nessas demonstraes do Scilab. Para visualizar essa simulao, basta
acessar, na janela de demonstraes, Otimizao e Simulao/Algoritmos
Genticos/Algoritmos Genticos. Ainda existem outras variaes do Algoritmo Gentico, as
quais no so sero discutidas neste texto por no fazerem parte do escopo tratado.

Figura 2.13: Algoritmo Gentico sendo executado no Scilab

Figura 2.14: Representao das solues


No Figura 2.14, podem ser visualizadas as solues (representadas por nmeros reais e
binrios) e os valores mximos e mnimos da funo considerada no exemplo.
Outro algoritmo que pode ser encontrado nesta lista de demonstraes o Simulated
Annealing (recozimento simulado), que um algoritmo heurstico de otimizao baseado no
processo fsico de recozimento de materiais. No processo de recozimento, a temperatura de
um material reduzida gradativamente, partindo de uma temperatura inicial. O algoritmo
parte da ideia apresentada, partindo de uma soluo inicial que possui um valor na funo
objetivo (temperatura inicial) e so encontradas novas solues que levam a valores funcionais
(temperaturas) menores. Para simular o processo de recozimento aplicado Otimizao,
preciso acessar, na janela de demonstraes, Otimizao e Simulao/Arrefecimento
simulado/Arrefecimento Simulado.
A Figura 2.15 apresenta a execuo do algoritmo descrito anteriormente, em que pode
ser observado, para a funo interna implementada no exemplo, que foi atingido o valor
timo. A Figura 2.16 apresenta o grfico da execuo do algoritmo. No grfico apresentado
pela Figura 2.16, pode ser verificado o decaimento da temperatura, que representa o valor da
funo otimizada.

Figura 2.15: Execuo do Simulated Annealing

Figura 2.16: Grfico da execuo do Simulated Annealing


Outros exemplos de demonstraes do Scilab so encontrados em Xcos, que um
modelador e simulador que possui uma interface por meio de blocos, tendo aplicao em

simulaes em, por exemplo, estudos na rea de Engenharia Eltrica, como Processamento de
Sinais.
A Figura 2.17 apresenta uma modelagem de um circuito eltrico especfico, podendo
ser encontrada em Xcos/Sistemas Eltricos/Circuito RLC.

Figura 2.17: Representao do circuito eltrico


Dentro de Sistemas Eltricos podem ser executadas outras demonstraes, como a da
representao de um Transformador, apresentado pela Figura 2.18.

Figura 2.18: Representao de um transformador

sugerido, ao leitor, que execute outras demonstraes no Scilab, com o objetivo de


se familiarizar com o software e visualizar algumas funcionalidades do sistema, como a
simulao do movimento invertido do pndulo, presente na Figura 2.19, ou do movimento de
uma roda, Figura 2.20. Em particular, sugerido, ao aluno, a visualizao das demonstraes
na Seo Grficos. Como exemplo, a Figura 2.21 apresenta o grfico da funo  =

cos
 . Sugere-se, ainda, que o leitor fique atento aos padres de cores utilizados
nestes grficos.

Figura 2.19: Movimento do pndulo invertido

Figura 2.20: Simulao do movimento de uma roda

Figura 2.21: Grfico da funo  = 


cos
 .

2.6 O editor Scinotes


O Scilab apresenta um editor onde podem ser escritas as funes e scripts definidos
pelo usurio. Neste captulo no sero descritos os cdigos utilizados para implementar estas
funes e scripts, apenas ser conhecido o ambiente do Scinotes.
Para acessar o ambiente Scinotes pode ser utilizado o boto
presente na barra de
ferramentas ou o menu Aplicativos/Scinotes. A tela do ambiente apresentada pela Figura
2.22.

Figura 2.22: ambiente Scinotes


Os exemplos apresentados nos tpicos da Ajuda do Scilab podem ser copiados para o
Scinotes e executados por meio do boto

ou ainda pela tecla F5 (salvar e executar).

possvel, ainda, utilizar o boto Salvar e Executar .


Como exemplo, foi copiado o cdigo do exemplo da funo interpln(), a qual interpola
um conjunto de pontos (x,y) por meio de funes lineares, possibilitando fazer estimativas dos
valores de y para cada x entre um par de pontos.
O primeiro passo buscar, na ajuda, a funo interpln(). Em seguida copiar o cdigo do
exemplo de utilizao da funo. Aps copiar o cdigo, preciso colar este cdigo no Scinotes,
salvar e executar, conforme Figura 2.23 e 2.24. O resultado apresentado pela Figura 2.25.

Figura 2.23: Cpia do cdigo do exemplo da funo encontrado na Ajuda do Scilab

Figura 2.24: Cpia do cdigo para o Scinotes

Figura 2.25: Interpolao linear para cada par de pontos


sugerido, ao leitor, a busca de outros exemplos e a execuo de outros cdigos no
Scinotes.

2.7 Exerccios Propostos


1- Crie duas variveis, a e b, no prompt de comandos e, em seguida, armazene os valores 10 e
3 nestas variveis.
a) Escreva a sequencia de comandos para criar um segundo prompt de comandos e atribua
c=a+b. Em seguida, execute as instrues no Scilab.
b) Escreva a sequencia de comandos para criar um terceiro prompt de comandos e faa
d=a+b+c. Em seguida, execute as instrues no Scilab.
c) Escreva as instrues para retornar ao segundo prompt e tentar exibir a varivel d. O que
ocorreu neste caso? Justifique o ocorrido.
2- Explique a relao entre os prompts de comando no Scilab.
3- Ao ser utilizado o comando Who, no Scilab, apresentada uma lista de variveis ditas
especiais, as quais so variveis reservadas no sistema e no podem ser redefinidas ou
apagadas pelo usurio. Qual a importncia dessas variveis especiais?
4- Escreva a diferena entre os comandos pwd e PWD do Scilab.

5- Descreva as variveis especiais %pi, %e, %i e %eps.


6- Escreva o significado da varivel %eps. O que ocorre ao fazer, no Scilab, 1+%eps? Explique o
motivo do resultado obtido ao se realizar esta operao.
6- Defina o que o diretrio de trabalho no Scilab. Qual o comando para visualiz-lo? Qual
comando se utiliza para alter-lo?
7- Escreva a sequencia de comandos para: a) exibir o diretrio de trabalho, b) alterar o
diretrio de trabalho para uma pasta qualquer, c) exibir novamente o diretrio de trabalho, c)
exibir o diretrio no qual o sistema est sendo executado.
8Execute no Scilab a sequencia de comandos do exerccio 7, gravando todos os comandos
em um arquivo de log, por meio do comando diary.
9- Suponha que, para resolver o exerccio anterior, voc precise consultar a ajuda para o
comando diary. Descreva duas maneiras de consultar a ajuda para o comando.
10No contedo de demonstraes do Scilab, faa a simulao do movimento de uma
partcula (simulao) dentro de uma superfcie cilndrica. Faa diferentes simulaes,
alterando os valores dos parmetros.
11Ainda nas demonstraes do Scilab, faa uma simulao do movimento do pndulo
tendo como suporte uma parbola. Para isto, v na categoria de Simulao, EADs, Sliding
pendulum, parbola.
12Nas demonstraes do Scilab, acesse a categoria Grficos, Mais superfcies e execute
as demonstraes Sphere, Shell, Spiral Rings, Torus, Torus 1, Moebius, Tube e Blach hole.
13Nas demonstraes do Scilab, acesse a categoria XCos, Sistemas eltricos e execute as
demonstraes: Circuito RLC, Retificador em ponte, Transformador, Amplificador diferencial,
Capacitor de integrao trocado, Porta lgica E e Porta Lgica No-Ou.
14Ainda nas demonstraes do Scilab, na categoria Xcos, visualize o modelo de uma
suspenso automotiva na categoria Sistemas mecnicos.
15Faa a simulao, utilizando as demonstraes do Scilab, da execuo de uma
algoritmo gentico, na categoria Algoritmos Genticos, dentro de Otimizao e Simulao.
16- Descreva a funcionalidade do aplicativo Scinotes.
17Pesquise, no Help do Scilab, a funo optim_ga. Em seguida, cole o exemplo da funo
no Scinotes, salve em alguma pasta e o execute. Em seguida, responda: a) verifique qual
funo foi otimizada; b) o algoritmo gentico se aproximou do mnimo da funo otimizada?
18Ainda no Help do Scilab, pesquise pela funo sound(), copie o exemplo, cole no
prompt de comandos do Scilab e pressione enter.

Captulo 3 Operaes bsicas


O objetivo deste captulo o de apresentar as operaes bsicas do Scilab, com o objetivo de
utilizar o sistema como mquina de calcular.

3.1 Operaes bsicas no Scilab


Neste captulo, o modo de interao entre o Scilab e o usurio ser por meio da
digitao no prompt de comando e, em seguida, com a utilizao da tecla enter, fazendo os
comandos digitados serem automaticamente interpretados e executados pelo Scilab.
No Scilab, a digitao do ; (ponto e vrgula) aps um comando no apresenta o
resultado obtido, Figura 3.1.

Figura 3.1: utilizao do ponto e vrgula


3.1.1 Operaes Bsicas com variveis reais
As operaes elementares de soma, diferena, multiplicao e diviso podem ser
executadas por meio dos comandos +, -, * e /.
Para exemplificar, sero criadas as variveis A, B e C e as operaes sero executadas
sobre os valores armazenados nestas variveis.
-->A=5;
-->B=6;
-->C=2;
-->A+B
ans =
11.
-->B+A
ans =

11.
-->(A+B)+C
ans =
13.
-->A+(B+C)
ans =
13.
-->B-C
ans =
4.
-->-C
ans =
- 2.
-->B+(-C)
ans =
4.
-->A-B+C
ans =
1.
-->A*B
ans =
30.
-->B*A
ans =
30.
-->2*A
ans =

10.
-->C*B+C
ans =
14.
-->C*(B+C)
ans =
16.
-->C+B/2
ans =
5.
-->(C+B)/2
ans =
4.
-->A*(B+C)
ans =
40.
-->A*A
ans =
25.
Nos exemplos, importante observar que so executadas, primeiramente, as
operaes de multiplicao e diviso e, em seguida, as operaes de soma e subtrao. Outro
ponto que deve ser observado a utilizada de parnteses, estes funcionam alterando a ordem
na qual os clculos so executados.
A potenciao definida por meio do operador ^ (acento circunflexo). Utilizando o
operador ^, tambm possvel calcular razes de qualquer grau, conforme exemplificado.
-->A=3
A =
3.

-->A^2
ans =
9.
-->B=64
B =
64.
-->B^(1/2) //raiz quadrada de B (64)
ans =
8.
-->A^3
ans =
27.
-->C=27
C =
27.
-->C^(1/3) //raiz cubica de C (27)
ans =
3.
Como verificado no exemplo, razes de qualquer ordem n podem ser obtidas por meio
da operao de potenciao. Porm, para o caso particular da raiz quadrada, existe uma
funo nativa (ou intrnseca) do Scilab, a funo sqrt().
Para exemplificar, ser utilizada a varivel B. Primeiro ser verificado se, de fato, B
armazena o valor 64, para isso preciso digitar B no prompt de comandos. Em seguida, a raiz
quadrada de B ser calculada.
-->B
B =
64.
-->sqrt(B)
ans =

8.
A funo sqrt sintetizada como:
sqrt(arg)
No caso, arg indica o argumento da funo, o qual pode ser um nmero ou uma
varivel. Pode ser visualizada a utilizao da funo mencionada tendo um nmero real como
argumento.
-->sqrt(400)
ans =
20.
Caso se utilize um nmero negativo como argumento dessa funo, o Scilab
automaticamente interpreta como um nmero complexo, como ser visto na Seo seguinte.
Outra funo do Scilab muito conhecida na Matemtica a funo abs(), cuja sntese
:
abs(arg)
Esta funo retorna o mdulo (ou valor absoluto) de um nmero informado como
parmetro. O parmetro (arg) pode ser um nmero real ou complexo ou, ainda, podem ser
informadas variveis que armazenem estes nmeros.

3.1.2 Operaes Bsicas com variveis complexas


Nesta seo, sero relembrados alguns conceitos de nmeros complexos e sero
exemplificados alguns clculos por meio do Scilab.
A raiz imaginria obtida pela varivel %i. As razes de ordem par de nmeros
negativos tambm so interpretadas como nmeros complexos pelo Scilab.
->%i //apresentao da varivel %i
ans =
i
-->sqrt(-1) // raiz quadrada de -1
ans =
i
-->(-16)^(1/4) //raiz quarta de -16

ans =
1.4142136 + 1.4142136i
-->sqrt(-4) //raiz quadrada de -4
ans =
2.i
Com o objetivo de apresentar as operaes bsicas com nmeros complexos, sero
criadas as variveis A e B, de modo que A=6+2i e B=2-i.
Antes de executar operaes com os nmeros complexos, vale lembrar algumas
definies.
O conceito de nmeros complexos se iniciou no sculo XVI, tendo como primeiras
aplicaes os estudos de equaes de terceiro e quarto graus, embora muitos associem,
erroneamente, o incio dos estudos deste conjunto numrico necessidade de se definir razes
quadradas de nmeros negativos.
Seja um nmero complexo x = a + bi, de modo que a dito "parte real" e b parte
imaginria do nmero complexo x. O nmero complexo x tambm pode ser representado pelo
par ordenado (a,b) e ainda associado ao ponto (a,b) do plano cartesiano ortogonal.
Sejam os nmeros x = (a,b) e y = (c,d).
Identidade: x = y se, e somente se, a=c e b=d.
Soma: x+y = y+x = (a+bi) + (c+di) = (a+c) + (b+d)i
Subtrao: y-x = (a+bi) - (c+di) = (a-c) + (b-d)i
Produto: x.y = y.x = (a+bi) . (c+di) = (ac-bd) + (bc+ad)i
Conjugado: seja x=a+bi, o conjugado de x, denotado por definido =a-bi.
Diviso: a diviso feita multiplicando-se o dividendo e o divisor pelo conjugado do divisor.
Exemplo de diviso:

10 + 2i :
2 3i =

Como $  = 1, temos:

 .


 .


 !"
#"

20 + 30i + 4i + 6i 20 + 30i + 4i 6 14 34


=
=
+ i
4 9i
4+9
13 13

Mdulo de um nmero complexo: dado um nmero complexo x = a+bi. O mdulo de x,


denotado por |x| definido como o comprimento do segmente que liga a origem ao ponto
P(a,b) no plano cartesiano ortogonal. Logo,
|x| = *a + b 

Retornando aos exemplos, sero criadas as variveis A e B, de modo que A=6+2i e B=2i.
Antes de criar essas variveis, ser utilizado com mando clear, o qual "limpa" as
variveis ditas "no globais".
-->clear //"limpar" variaveis nao globais
-->A= 6+2*%i; //A recebe 6+2i
-->B= 2-%i; //B recebe 2-i
-->A+B
ans =
8. + i
-->B+A
ans =
8. + i
-->A-B
ans =
4. + 3.i
-->A*B
ans =
14. - 2.i
-->A/B
ans =
2. + 2.i
-->-A
ans =
- 6. - 2.i
-->abs(B)//modulo de B
ans =
2.236068

-->abs(A) //modulo de A
ans =
6.3245553

3.2 Algumas funes elementares


As funes apresentadas nesta Seo so ditas intrnsecas. Funes intrnsecas so aquelas
nativas no sistema, ou seja, no precisam ser implementadas pelo usurio e podem ser
utilizadas informando-se os parmetros necessrios. Todas essas funes podem ser
consultadas no Help do Scilab, de modo que podem ser visualizadas as descries e exemplos
de utilizao. As descries e exemplos destas funes podem ser encontradas no manual do
Scilab, (Scilab Group - Manual Scilab).
3.2.1 Funes matemticas bsicas
3.2.1.1 Funo abs()
Como j mencionado anteriormente, retorna o mdulo de um nmero real ou
complexo.
Sntese da funo: abs(x), em que x pode ser um nmero real, complexo ou uma lista
de nmeros. No caso de uma lista de nmeros (vetor), a funo retorna uma lista com o
mdulo de cada elemento informado como parmetro.
Exemplo:
-->abs(-1)
ans =
1.
-->abs(-3)
ans =
3.
-->abs(-3+4*%i) //informado um numero complexo como parametro
ans =
5.
-->x=[-1, -5, 3, -2] //criacao de uma lista (vetor)
x =
- 1. - 5. 3. - 2.
-->abs(x) //informada uma lista como parametro
ans =

1. 5. 3. 2.
-->
3.2.1.2 Funo log()
Funo utilizada para retornar o logaritmo natural de um nmero diferente de zero.
Caso seja informado um nmero real menor que zero, o retorno da funo no ser um
nmero real.
Sntese da funo: log(x), em que x pode representar um nmero diferente de zero ou
uma lista de nmeros. Caso o parmetro informado seja uma lista de nmeros, o logaritmo
calculo para cada elemento da lista.
Exemplos:
-->log(1) //observe que log(1) = 0, pois e^0 =1
ans =
0.
-->log(0) //observe que este parametro e invalido
!--error 32
Singularidade da funo logartmica ou tangente.

-->log(2)
ans =
0.6931472
-->log(5)
ans =
1.6094379
-->log(-5) //observe que o retorno nao sera real
ans =
1.6094379 + 3.1415927i
-->x=[1, 4, 5] //criando uma lista de numeros (vetor)
x =
1. 4. 5.
-->log(x)
ans =

0. 1.3862944 1.6094379
-->
3.2.1.3 Funo log10()
A funo log10() pode ser utilizada para calcular um logaritmo cuja base 10.
Sntese da funo: log10(x), em que x pode representar um nmero diferente de zero
ou uma lista de nmeros. Caso o parmetro informado seja uma lista de nmeros, o logaritmo
calculo para cada elemento da lista.
Exemplos:
-->log10(1)
ans =
0.
-->log10(100)
ans =
2.
-->log10(1000)
ans =
3.
-->10^log10(3) //aqui se verifica uma propriedade de logaritmo
ans =
3.
-->log10(20*3)
ans =
1.7781513
-->log10(20)+log10(3)
ans =
1.7781513
-->log10(160/3)
ans =
1.7269987
-->log10(160)-log10(3)

ans =
1.7269987
-->log10(3^2)
ans =
0.9542425
-->2*log10(3)
ans =
0.9542425
3.2.1.4 Funo log2()
Funo utilizada para calcular logaritmos cuja base 2. Sua definio e exemplos so
similares s apresentadas na Seo 3.2.3.
3.2.1.5 Funo exp()
Funo utilizada para calcular o valor exponencial (de base e) em relao ao parmetro
informado.
Sntese da funo: exp(x), em que x pode representar um nmero real ou uma lista de
nmeros reais (tambm podem ser informados nmeros complexos). Caso o parmetro
informado seja uma lista de nmeros, a funo executada para cada elemento desta lista.
Exemplos:
-->exp(1) //valor de e^1
ans =
2.7182818
-->exp(-3)
ans =
0.0497871
-->exp(0)
ans =
1.
-->exp(log(2)) // no caso um logaritmo natural e informado como parametro
ans =
2.

-->x=[-1, log(5), 0]//lista de numeros


x =
- 1. 1.6094379 0.
-->exp(x)
ans =
0.3678794 5. 1.
3.2.1.6 Funo sqrt()
Como j descrito anteriormente, esta funo retorna a raiz quadrada de um nmero
real. Caso seja informado, como parmetro, um nmero negativo, o Scilab interpretar o
resultado como um nmero complexo.
Sntese: sqrt(x), em que x um nmero real ou complexo.
Exemplos:
-->sqrt(9)
ans =
3.
-->sqrt(25)
ans =
5.
-->sqrt(100)
ans =
10.
-->sqrt(9)
ans =
3.
-->sqrt(25)
ans =
5.
-->sqrt(-1) //raiz imaginaria
ans =
i

-->sqrt(2-%i)//numero complexo 2-i informado como parametro


ans =
1.4553467 - 0.3435607i
-->sqrt(-9)
ans =
3.i
-->
3.2.1.7 Funo sum()
Funo utilizada para somar os valores de uma lista numrica (vetor).
Sntese da funo: sum(x), em que x uma lista de nmeros a ser somada.
Exemplo:
-->x=[1.2 -3.4 -5.9 6.8]
x =
1.2 - 3.4 - 5.9 6.8
-->sum(x)
ans =
- 1.3
-->1.2+(-3.4)+(-5.9)+6.8 //verificacao do resultado
ans =
- 1.3
3.2.1.8 Funo prod()
Funo utilizada para retornar o produto dos valores de uma lista numrica (vetor).
Sntese da funo: prod(x), em que x uma lista de nmeros a ser somada.
-->x=[1.2 -3.4 -5.9 6.8] //lista de valores
x =
1.2 - 3.4 - 5.9 6.8
-->prod(x)
ans =
163.6896

-->1.2*(-3.4)*(-5.9)*6.8
ans =
163.6896

3.2.1.9 Funo primes()


A funo primes() retorna a sequencia de nmeros primos at N (parmetro informado
na chamada da funo).
Sntese: primes(N), em que N um nmero real.
Exemplos:
-->primes(35)
ans =
2. 3. 5. 7. 11. 13. 17. 19. 23. 29. 31.
-->primes(-35)
ans =
[]
-->primes(20.5)
ans =
2. 3. 5. 7. 11. 13. 17. 19.
-->
3.2.1.10 Funo factor()
Dado um nmero inteiro e positivo, a funo factor utilizada para decompor o
nmero em um produto de nmeros primos (fatorao). Sabe-se que atualmente no existe
um algoritmo capaz de fatorar um nmero em tempo polinomial, ou seja, um algoritmo cujo
complexidade de tempo pode ser dada por uma funo polinomial.
Sntese da funo: factor(N), em que N um nmero inteiro e positivo.
Exemplos:
-->factor(10)
ans =
2. 5.
-->factor(15)
ans =
3. 5.

-->factor(30)
ans =
2. 3. 5.
-->factor(520)
ans =
2. 2. 2. 5. 13.
-->factor(1012)
ans =
2. 2. 11. 23.
-->
3.2.1.11 Funo modulo()
A funo modulo() retorna o resto da diviso entre dois nmeros inteiros.
Sntese das funes: modulo(m,n), em que m e n so dois nmeros inteiros.
Exemplos:
-->modulo(5,3) //note que 5=3*1+ 2
ans =
2.
-->modulo(-5,3) //note que 5=3*(-1)+ (-2)
ans =
- 2.
-->
3.2.1.12 Funo real()
Retorna a parte real de um nmero complexo.
Sntese: real(x), em que x um nmero complexo.
Exemplo:
-->x=-2+3*%i //criacao do numero complexo
x =
- 2. + 3.i
-->real(x)

ans =
- 2.
3.2.1.13 Funo imag()
Retorna a parte imaginria de um nmero complexo.
Sntese: imag(x), em que x um nmero complexo.
Exemplo:
-->x=-2+3*%i //criacao do numero complexo
x =
- 2. + 3.i
-->imag(x)
ans =
3.
3.2.2 Funes elementares de converso
3.2.2.1 Funo dec2bin()
Funo aplicada converso numrica, de um nmero representado na base 10 para a
base 2 (binrio).
Sntese da funo: dec2bin(x), em que x um nmero inteiro e positivo ou uma lista de
nmeros inteiros e positivos.
Exemplos:
-->dec2bin(2)
ans =
10
-->dec2bin(10)
ans =
1010
-->dec2bin(95)
ans =
1011111
-->
Outra forma de utilizar a funo por meio do comando:
[str]=dec2bin(x[,n])

Neste caso:
x: um escalar, vetor ou matriz de nmeros inteiros e positivos;
str: uma string ou um vetor de strings;
n: nmero inteiro e positivo que representa a quantidade de posies da string ou vetor de
strings;
Exemplos:
-->str=dec2bin(95) //a sequencia binaria sera armazenada em uma string
str =
1011111
-->x=95
x =
95.
-->n=15 //a sequencia binaria sera armazenada em um vetor de strings de 15 digitos
n =
15.
-->str=dec2bin(x,n)
str =
000000001011111
-->
3.2.2.2 Funo bin2dec()
Funo utilizada para converso de nmero binrio para a base 10.
Sntese: bin2dec(str), em que str uma string que armazena uma sequncia binria.
Exemplos:
-->bin2dec('11001')
ans =
25.
-->str='1110010'
str =
1110010

-->bin2dec(str)
ans =
114.
-->
OBS.: sugerido, ao leitor, a visualizao de outras funes de converso encontradas em [1],
como: base2dec, oct2dec, hex2dec, dec2oct e dec2hex.
3.2.3 Funes trigonomtricas
As funes sin(), cos(), tan(), cotg(), sec(), csc() retornam, respectivamente, o seno, coseno, tangente, co-tangente, secante e co-secante de um ngulo informado em radianos.
Exemplos
-->x=%pi/2 //x=90 graus
x =
1.5707963
-->sin(x)
ans =
1.
-->cos(x)
ans =
6.123D-17
-->cotg(x)
ans =
6.123D-17
-->sec(x)
ans =
1.633D+16
-->csc(x)
ans =
1.
-->sin(x)^2+cos(x)^2

ans =
1.
-->y=(2*%pi/3)
y =
2.0943951
-->tan(y)
ans =
- 1.7320508
-->cotg(y)
ans =
- 0.5773503
-->sec(y)
ans =
- 2.
-->csc(y)
ans =
1.1547005
-->sin(y)^2+cos(y)^2
ans =
1.
-->
Vale ressaltar que os valores obtidos por meio de softwares so sempre aproximados,
com uma preciso que depende de alguns fatores como, o software utilizado e a capacidade
da mquina em representar nmeros. Por este motivo, fazendo x=%pi/2 e calculando o coseno deste nmero o resultado foi um nmero muito prximo de zero, com uma preciso tal
que se pode afirmar que o resultado zero.
3.2.4 Funes trigonomtricas inversas
As funes asin(), acos(), atan(), acot(), asec() e acsc() so utilizadas para determinar o
valor do arco, em radianos, associado ao parmetro informado como argumento da funo.

Exemplos:
-->acos(0)
ans =
1.5707963
-->%pi/2
ans =
1.5707963
-->asin(0)
ans =
0.
3.2.5 Funes de arredondamento
3.2.5.1 Funo round()
Funo utilizada para arredondar um nmero real para o nmero inteiro mais prximo.
Sntese da funo: round(n), em que n um nmero real ou uma lista de nmeros
reais.
Exemplos:
-->round(1.23)
ans =
1.
-->round(5.98)
ans =
6.
-->round(20.5)
ans =
21.
-->round(20.4)
ans =
20.
-->round(20.6)
ans =

21.
-->
3.2.5.2 Funo floor()
Retorna o maior inteiro menor do que o nmero informado como parmetro. Em
outras palavras, esta funo arredonda no "sentindo de menos infinito".
Sntese: floor(n), em que n um nmero real ou uma lista de nmeros reais.
Exemplos:
-->floor(20.4)
ans =
20.
-->floor(20.5)
ans =
20.
-->floor(20.9)
ans =
20.
-->
3.2.5.3 Funo ceil()
Retorna o menor inteiro maior do que o nmero informado como parmetro. Em
outras palavras, esta funo arredonda no "sentindo de mais infinito".
Sntese da funo: ceil(n), em que n um nmero real ou uma lista de nmeros reais.
Exemplos:
-->ceil(2.3)
ans =
3.
-->ceil(-2.9)
ans =
- 2.
-->ceil(2.9)
ans =

3.
-->ceil(2.4)
ans =
3.
-->x=[1.2 -3.4 -5.9 6.8] //lista de valores
x =
1.2 - 3.4 - 5.9 6.8
-->ceil(x)
ans =
2. - 3. - 5. 7.
3.2.5.4 Funo int()
Retorna a parte inteira de um nmero real.
Sntese da funo: int(n), em que n um nmero real ou uma lista de nmeros reais.
Exemplos:
-->int(1.2)
ans =
1.
-->int(1.5)
ans =
1.
-->int(1.9)
ans =
1.
-->x=[1.2 4.5 2.9] //criacao de uma lista real (vetor)
x =
1.2 4.5 2.9
-->int(x)
ans =
1. 4. 2.

-->
3.2.5.5 Funo fix()
Arredonda o nmero na "direo do zero". Em linhas gerais, esta funo funciona
como a funo int().
Sntese da funo: fix(n), em que n um nmero real ou uma lista de nmeros reais.
Exemplos:
-->fix(2.3)
ans =
2.
-->fix(2.9)
ans =
2.
-->fix(-2.3)
ans =
- 2.
-->fix(-2.9)
ans =
- 2.
-->x=[1.2 -3.4 -5.9 6.8] //lista de valores
x =
1.2 - 3.4 - 5.9 6.8
-->fix(x)
ans =
1. - 3. - 5. 6.
3.2.6 Funes de manuseamento de strings
3.2.6.1 Funo convstr()
A funo convstr() utilizada para converter textos (strings) em letras maisculas ou
minsculas.
Sntese da funo: convstr(str,[flag]), em que str uma string (texto) e [flag] pode ser
'u', para letras maisculas, ou 'l', para letras minsculas.
Exemplos:

-->str='UniFeMm' //string
str =
UniFeMm
-->convstr(str,'u')
ans =
UNIFEMM
-->convstr(str,'l')
ans =
unifemm
-->
3.2.6.2 Funo length()
Funo utilizada para retornar o nmero de caracteres de uma string.
Sntese da funo: length(str), em que str uma string. Caso seja utilizado, como
parmetro da funo, uma matriz ou vetor, essa funo retorna a quantidade de elementos da
matriz ou vetor.
Exemplos:
-->str = 'Centro Universitrio de Sete Lagoas'
str =
Centro Universitrio de Sete Lagoas
-->length(str)
ans =
35.
-->str = 'Ol mundo!'
str =
Ol mundo!
-->length(str)
ans =
10.
-->

3.2.6.3 Funo part()


A funo part() extrai caracteres de uma string.
Sntese da funo: part(str,v), em que str uma string e v uma lista de posies a
serem extradas.
Exemplos:
-->str = 'Centro Universitrio de Sete Lagoas'
str =
Centro Universitrio de Sete Lagoas
-->length(str)
ans =
35.
-->part(str,3) //extrai a terceira letra da string
ans =
n
-->part(str,5) //extrai a quinta letra da string
ans =
r
-->part(str,5:10) //extrai da quinta decima letra da string
ans =
ro Uni
-->part(str,[1,4,8]) //extrai a primeira, a quarta e a oitava letras da string
ans =
CtU
-->part(str,[1:4,4,8,10]) //extrai da primeira quarta posio, a oitava e a decima posio
ans =
CenttUi
3.2.6.4 Funo eval()
A funo eval() utilizada para avaliar uma string ou uma matriz de strings.
Sntese da funo: eval(z), em que z uma string ou uma matriz de strings.
Exemplos:
-->z='3*a-2*b^2' //criacao da string, observe que foi digitado entre ''

z =
3*a-2*b^2
-->a=2,b=3 //atribuicao dos valores de a e b
a =
2.
b =
3.
-->eval(z) //avaliacao de z, com a=2 e b=3
ans =
- 12.
-->

3.2.7 Algumas funes elementares estatsticas


3.2.7.1 Funo mean()
A funo mean() retorna a mdia aritmtica de uma amostra.
Sntese da funo: mean(amostra), em que amostra uma lista de nmeros (vetor).
3.2.7.2 Funo stdev()
A funo stdev() retorna o desvio padro de uma amostra.
Sntese da funo: stdev(amostra), em que amostra uma lista de nmeros (vetor).
3.2.7.3 Funo variance()
A funo variance() retorna a varincia de uma amostra.
Sntese da funo: variance(amostra), em que amostra uma lista de nmeros (vetor).
3.2.7.4 Funo mad()
A funo mad() retorna o desvio padro absoluto de uma amostra.
Sntese da funo: mad(amostra), em que amostra uma lista de nmeros (vetor).
Exemplos para as Sees 3.2.7.1 a 3.2.7.4:
-->amostra = [2 4 5 10 11 13 20 15] //media aritmetica
amostra =
2. 4. 5. 10. 11. 13. 20. 15.
-->mean(amostra) //media
ans =

10.
-->sum(amostra)/length(amostra) //soma dos elementos dividido pela quantidade de
elementos do vetor amostra
ans =
10.
-->stdev(amostra) //desvio padrao
ans =
6.094494
-->variance(amostra) //variancia
ans =
37.142857
-->mad(amostra) //desvio padrao absoluto
ans =
4.75

IMPORTANTE: nesta Seo foram apresentados apenas alguns exemplos de funes do Scilab.
recomendvel que o leitor procure conhecer outras funes, por meio do help do Scilab ou
pelo manual, (Scilab Group - Manual Scilab).
3.2.8 Limpeza de memria - clear
Conforme visto anteriormente, para limpar as variveis preciso utilizado o comando
clear.
Para que o comando clear seja aplicado a uma ou mais variveis especficas, preciso
indicar o nome da varivel aps o comando clear. Possveis snteses:
clear, limpa todas as variveis
clear variveis, limpa apenas as variveis especificadas
Exemplo:
-->a=2,b=3,c=4, d=5, e=6, f=7 //criacao das variaveis
a =
2.
b =
3.

c =
4.
d =
5.
e =
6.
f =
7.
-->a //visualizacao da variavel a
ans =
2.
-->clear a //limpando a variavel
-->a
!--error 4
Varivel indefinida: a

-->b
b =
3.
-->clear b c //limpando as variaveis b e c
-->a,b,c //tentativa de exibir os valores de a, b e c
!--error 4
Varivel indefinida: a

-->d,e,f
d =
5.
e =
6.
f =

7.
-->clear //limpar todas as variaveis
-->d,e,f
!--error 4
Varivel indefinida: d
3.2.9 Limpeza da tela - funo clc()
O Scilab armazena a sequencia de comandos j digitada. Em alguns casos, o usurio
pode no desejar visualizar estes comandos. Para que os mesmos no sejam visualizados,
preciso utilizar a funo clc().
Sntese da funo clc(n) ou apenas clc. Caso seja informado o parmetro n, o Scilab
elimina as n linhas anteriores. Caso seja digitado apenas clc, este funciona como um comando
que elimina todas as linhas apresentadas no prompt.
Alternativamente, pode ser utilizado o menu Editar/Limpar o console, no Scilab 5.4.1.

3.3 Exerccios Propostos


Para os exerccios de 1 a 25, escreva a sequncia de comandos, digite no Scilab e escreva o
resultado.
1- Limpe todas as variveis locais, faa a=2, b=5 e c=16, em seguida calcule:
a) a/b*c;
b) a/(b+c);
c) b^a;
d) raiz quadrada de c;
e) raiz cbica de c.
2- Limpe todas as variveis locais, faa a=-27, calcule o mdulo da raiz cbica de a.
3- Limpe todas as variveis locais, faa a=e (utilize uma varivel especial), em seguida calcule o
logaritmo natural de a.
4- Repita o exerccio 3, porm em vez de utilizar uma varivel especial, utilize a funo exp()
para calcular o valor de a.
5- Limpe todas as variveis especiais e calcule 10 elevado ao logaritmo de 35 na base 10.
7- Calcule o logaritmo natural de 63/20. Em seguida faa o logaritmo natural de 63 menos o
logaritmo natural de 20.
8- Limpe todas as variveis locais e calcule a raiz quadrada de e0, utilize as funes sqrt() e
exp().
9- Limpe todas as variveis locais e calcule a raiz quadrada da raiz quadrada de 64. Utilize a
funo sqrt().
10- Limpe todas as variveis locais. Crie a seguinte a lista numrica x=[1 -2 4 5 -11] e utilize
uma funo intrnseca para calcular a soma e o produto de todos os valores de x.
11- Utilize o Scilab para obter uma lista de nmeros primos de 1 a 200.
12- Utilize o Scilab para decompor os nmeros 30, 60 e 115 em produto de nmeros primos.

13- Limpe todas as variveis locais, crie as variveis x=1-2i e y=2+5i. Em seguida faa x+y, x-y, yx, x*y, x/y e y/x.
14- Utilizando o valor de x=1-2i, utilize funes intrnsecas do Scilab para extrair a parte real e
a parte imaginria do nmero complexo x.
15- Ainda utilizando x=1-2i, calcule o mdulo de x. O que representa o mdulo deste nmero
complexo?
16- Converta os nmeros:
a) 111011001 (de binrio para decimal);
b) 11001 (de binrio para decimal);
c) 97 (de decimal para binrio);
d) 105 (de decimal para binrio, utilizando uma string de 15 dgitos para armazenar o nmero
binrio);
e) 112 (de decimal para binrio, utilizando uma string de 20 dgitos para armazenar o nmero
binrio);
f) 112 (de decimal para hexdecimal);
g) Converta o nmero 120394 de decimal para hexadecimal;
h) Converta o nmero 21E de hexadecimal para decimal;
i) Converta o nmero 38C de hexadecimal para binrio.
17- Determine o sen(cos(/4)).
18- Limpe todas as variveis locais, faa a=, b=/2 e c=/4. Em seguida determine (sen(b)cos(a)+tan(c))*csc(a+b).
19- Limpe todas as variveis locais, faa a=5/3 e, em seguida faa b=quadrado do seno de a
somado ao quadrado do co-seno de a.
20- Calcule a tangente de /2 no Scilab. O resultado apresentado o mesmo visto em
disciplinas matemticas? Caso o resultado apresentado seja diferente, o que leva o Scilab a
determinar este valor?
21- Limpe todas as variveis locais, faa a=5/3. Em seguida, utilizando as funes
apropriadas:
a) arredonde o valor de a para o nmero inteiro mais prximo;
b) arredonde o valor de a para o maior inteiro menor do que a;
c) arredonde o valor de a para o menor inteiro maior do que a;
d) utilize a funo mais apropriada para representar a parte inteira de a;
e) arredonde o valor de a no "sentido de zero".
f) Em linhas gerais, existe alguma diferena entre as funes int() e fix()? Justifique.
g) Para o exerccio, a utilizao da funo round() e floor() retornaram o mesmo valor. D um
exemplo e visualize no Scilab uma situao em que as duas funes retornam valores distintos.
22- Determine o arco-seno e o arco-tangente de 0.5877853 e 0.7265425, respectivamente.
23- Crie uma string (varivel str1) com o texto: "EsTOU apReNDENdo SCllab".
a) converta todas as letras para maisculas e armazene o resultado em uma varivel chamada
str;
b) utilize a funo apropriada para contar a quantidade de caracteres da varivel str;
c) extraia, por meio de uma funo apropriada, o terceiro caractere de str;
d) extraia, por meio de uma funo apropriada, o terceiro e o sexto caracteres de str;
e) extraia, por meio de uma funo apropriada, do terceiro ao sexto caracteres de str;

f) extraia, por meio de uma funo apropriada, o terceiro, o quinto e do stimo ao dcimo
caracteres de str.
24- Crie a string pl, que armazenar a seguinte funo: pl=2*a-b^(1/3)+a/b*5. Em seguida,
avalie o resultado de pl para a=6 e b=4.
25- Crie uma lista numrica(vetor) cujo nome seja amostra e que armazene os seguintes
nmeros: 34, 25, 67, 87, 98, 76, 54, 3, 2, 10, 11. Para esta amostra, determine, por meio de
funes nativas:
a) mdia aritmtica;
b) desvio padro;
c) varincia;
d) desvio padro absoluto.

Captulo 4 - Vetores e Matrizes


Esta Seo apresenta os conceitos de criao de vetores e matrizes, bem como os conceitos
para manipulao e operao nestas estruturas algbricas.

4.1 Vetores
4.1.1 Criando um vetor
A criao de um vetor v se d por meio da atribuio de uma lista numrica a v. Cada
elemento dessa lista pode ser um nmero real, complexo, um outro vetor, uma matriz ou at
mesmo polinmios.
Essa criao do vetor se d por meio da digitao da sequncia dos elementos
separadas por vrgula ou espao, dentro de colchetes. Neste caso criado um vetor,
identificado pelo Scilab como uma matriz linha. Em alguns textos o vetor associado a uma
matriz coluna. No entanto, para uma representao matemtica mais prxima da estudada em
lgebra Linear, o vetor ser identificado por uma matriz linha.
Exemplos:
-->v1= [1 -2 3] //separando por espacos
v1 =
1. - 2. 3.
-->v1= [1,-2,3] //separando por vrgulas
v1 =
1. - 2. 3.
Caso os elementos sejam separados por ponto e vrgula, ser criado um vetor
transposto, identificado como uma matriz coluna.
-->v1= [1;-2;3] //separando por ponto e virgula
v1 =
1.
- 2.
3.
Um vetor tambm pode ser criado por meio de uma sequncia, utilizando o mesmo
"passo", ou seja, os elementos da sequncia so igualmente espeados. Como exemplo, pode
ser criado um vetor cujo primeiro nmero 0, o ltimo 10 e o incremento 1. Neste caso, os
colchetes podem ser emitidos. O incremento tambm pode ser negativo, identificando um
decremento. Por exemplo, pode ser criado um vetor de 10 a 0, com decremento de uma
unidade. importante sempre ressaltar que, caso se digite ; (ponto e vrgula) ao final de uma
instruo, o Scilab no exibe o resultado. Para criar um vetor desta forma, preciso digitar o

primeiro elemento da sequncia, dois pontos, o passo (incremento ou decremento), dois


pontos e, por fim, o ltimo valor desta srie.
Exemplos:
-->v=0:1:10 //colchetes omitidos
v =
0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

-->v=1:0.05:2 //neste caso, o 'passo' e 0.05


v =

column 1 to 10
1. 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45
column 11 to 20
1.5 1.55 1.6 1.65 1.7 1.75 1.8 1.85 1.9 1.95
column 21
2.
-->
-->v=[0:-1:-10] //com colchetes e com decremento de 1 unidade
v =
0. - 1. - 2. - 3. - 4. - 5. - 6. - 7. - 8. - 9. - 10.
Para simplificar, a estrutura a ser digitada para este tipo de criao de vetor ,
basicamente:
v = valor inicial:passo:valor final

4.1.2 Operaes bsicas com vetores


4.1.2.1 Soma e subtrao entre dois vetores
Caso sejam criados dois vetores com mesmo tamanho (mesma quantidade de
elementos) possvel som-los ou subtra-los.
Exemplos:
-->v=[1 2 -5], u=[3 4 1] //observe que os dois vetores foram criados numa mesma instruo
v =

1. 2. - 5.
u =
3. 4. 1.
-->
-->u+v
ans =
4. 6. - 4.
-->v+u
ans =
4. 6. - 4.
-->u-v
ans =
2. 2. 6.
-->
4.1.2.2 Multiplicao de um vetor por um escalar
Para multiplicar um vetor v por um escalar , basta fazer *v. A diviso definida por
(1/)*v, o que no Scilab significa fazer v/.
Exemplo:
-->v
v =
1. 2. - 5.
-->3*v
ans =
3. 6. - 15.
-->-5*v
ans =
- 5. - 10. 25.
-->

4.1.2.3 Vetor transposto


Para criar um vetor transposto, preciso utilizar o comando '(apstrofe) em seguida
ao nome do vetor.
Exemplo:
-->v
v =
1. 2. - 5.
-->v'
ans =
1.
2.
- 5.
-->
4.1.2.4 Funes com vetores
Caso seja utilizado um vetor como parmetro das funes apresentadas no Captulo 3,
os clculos sero aplicados a cada posio do vetor. Por exemplo, para um vetor v, ao se
utilizar a funo abs(v), os valores absolutos de cada posio do vetor v ser calculado. Caso se
utilize log(v), o logaritmo natural de cada elemento de v ser calculado.
Exemplos:
-->log(v)
ans =
0 0.6931472 1.6094379 + 3.1415927i
-->exp(v)
ans =
2.7182818 7.3890561 0.0067379
-->sqrt(v)
ans =
1. 1.4142136 2.236068i
-->
Vale ressaltar que existem funes mais especficas para vetores e matrizes. o caso,
por exemplo, da funo size(v), em que v um vetor ou uma matriz, que apresenta a
quantidade de linhas e colunas de uma matriz ou vetor.
Exemplo:

-->v
v =
1. 2. - 5.
-->size(v)
ans =
1. 3.
-->//o resultado apresenta 1 linha e 3 colunas
-->size(v')
ans =
3. 1.
-->//o resultado agora so 3 linhas e 1 coluna, pois trata-se do vetor transposto
-->
4.1.2.5 Operaes vetoriais "elemento por elemento"
Algumas operaes precisam ser efetuadas "elemento por elemento" entre vetores.
Neste caso, preciso utilizar o operador .(ponto) antes do operador da operao desejada.
Por exemplo, caso sejam criados dois vetores, v e u, sendo os dois com mesmo
"tamanho" e representando matrizes linha, a operao de multiplicar indicada por * no
definida diretamente entre eles. No entanto, a operao .* definida multiplicando-se
elemento por elemento. O mesmo vale para o caso da potenciao, porm, no caso da
potenciao os dois casos funcionam, ou seja, pode ser utilizado o operador ^ ou o operador
.^.
Exemplo:
-->v=[-1 2 4]
v =
- 1. 2. 4.
-->u=[-2 1 5]
u =
- 2. 1. 5.
-->v*u //tentando fazer u*v
!--error 10
Multiplicao incoerente.

-->v.*u //neste caso, a operacao e realizada elemento por elemento


ans =
2. 2. 20.

4.1.2.6 Produto Escalar


Dados dois vetores u e v de mesmo "tamanho", ou seja, mesma quantidade de
elementos, o produto escalar pode ser definido, no Scilab, como u*v', ou seja, o vetor u
multiplicado pelo vetor v transposto. Isto se deve ao fato de que o Scilab faz uma multiplicao
entre duas matrizes e, quando se faz o transposto de v, v' ter quantidade de linhas igual
quantidade de colunas de u, o que define o produto matricial, resultando em uma matriz 1 por
1, sendo este o produto escalar entre os dois vetores.
Exemplo:
-->u=[-2 1 5],v=[-1 2 4]
u =
- 2. 1. 5.
v =
- 1. 2. 4.
-->u*v' //produto escalar
ans =
24.
-->
4.1.2.6 Norma de um vetor
A norma de um vetor v, definida como o comprimento do vetor pode ser calculada, no
Scilab, por meio da funo norm().
Exemplo:
-->v=[3 4 0]
v =
3. 4. 0.
-->norm(v) //calculo da norma por meio da funcao norm
ans =
5.
-->sqrt(sum(v^2)) //aplicacao da definicao de norma

ans =
5.
-->

4.2 Matrizes
4.2.1 Criao de matrizes
Para se declarar uma matriz Amxn (l-se A, m por n) com m linhas e n colunas, preciso
digitar m linhas separadas por ; (ponto e vgula) sendo que cada linha deve possuir os
elementos separados por vrgula ou espao.
Exemplo:
-->A=[1 2 4;-3 4 5] //elementos das linhas separados por espacos
A =
1. 2. 4.
- 3. 4. 5.
-->A=[1,2,4;-3,4,5] //elementos das linhas separados por virgulas
A =
1. 2. 4.
- 3. 4. 5.
-->
Outra forma de criar matrizes separando as linhas por meio da tecla enter.
Exemplo:
-->A=[1 2 3
-->3 4 5
-->-1 0 6]
A =
1. 2. 3.
3. 4. 5.
- 1. 0. 6.
-->
O operador : (dois pontos) tambm pode ser utilizado para criar as linhas.
Exemplo:
-->A=[1:1:5;4,5,7,-8,10] //a primeira linha ser criada por meio do incremento de 1 unidade
A =
1. 2. 3. 4. 5.

4. 5. 7. - 8. 10.
-->
Matrizes tambm podem ser criadas concatenando outras matrizes.
Exemplo:
-->A=[-1,3;3,4]
A =
- 1. 3.
3. 4.
-->B=[0,1;-2,4]
B =
0. 1.
- 2. 4.
-->C=[2,1;1,1]
C =
2. 1.
1. 1.
-->D1=[A B C]//cada elemento da linha da matriz D e outra matriz
D1 =
- 1. 3. 0. 1. 2. 1.
3. 4. - 2. 4. 1. 1.
-->D2=[A;B;C] //cada elemento da coluna de D e outra matriz
D2 =
- 1.
3.
0.
- 2.
2.
1.
-->

3.
4.
1.
4.
1.
1.

4.2.2 Operaes bsicas matriciais


4.2.2.1 Soma matricial
A soma matricial definida sobre duas matrizes com mesma dimenso, ou seja,
mesmas quantidades de linhas e colunas.
Exemplo:
-->A=[1 2 -1; -4 5 6]
A =
1. 2. - 1.
- 4. 5. 6.
-->B=[0 -5 6;8 -1 3]
B =
0. - 5. 6.
8. - 1. 3.
-->A+B
ans =
1. - 3. 5.
4. 4. 9.
-->A-B
ans =
1. 7. - 7.
- 12. 6. 3.
-->
4.2.2.2 Produto de uma matriz por um escalar
Seja uma matriz Amxn e um escalar . O produto , ento, definido por *A, em que
cada elemento de A multiplicado por . A diviso definida fazendo-se (1/)*A, o que no
Scilab significa fazer A/.
Exemplo:
-->A=[1 2 -1; -4 5 6]
A =
1. 2. - 1.
- 4. 5. 6.
-->2*A
ans =

2. 4. - 2.
- 8. 10. 12.
-->A/2
ans =
0.5 1. - 0.5
- 2. 2.5 3.
-->

4.2.2.3 Produto matricial


Sejam duas matrizes Amxq e Bqxn (ou seja, a quantidade de colunas de A igual
quantidade de linhas de B), o produto matricial Cmxn = A*B definido como:
5

-.,0 = 1 2.,3 43,0


36

para cada i, j, tal que 1im e 1jn, sendo ci,j, o elemento na i-sima linha e j-sima coluna da
matriz Cm,n.
Exemplo:
-->A=[-1 2 3;2 1 1]
A =
- 1. 2. 3.
2. 1. 1.
-->B=[1 2;-1 0;3 4]
B =
1. 2.
- 1. 0.
3. 4.
-->C=A*B
C =
6. 10.
4. 8.
-->
O produto matricial no comutativo, ou seja, no se pode afirmar que AB=BA.
possvel observar , ainda, que em muitas situaes AB definido, enquanto que BA sequer

definido, por exemplo, no caso de A ser 5x2 e B ser 2x3, neste caso possvel fazer AB, mas
no possvel fazer BA.
4.2.2.4 Operaes matriciais "elemento por elemento"
Suponha que sejam criadas duas matrizes nxn (ou seja, matrizes quadradas). Sabe-se
que, o produto entre essas matrizes no est definido, no entanto possvel multiplicar os
elementos correspondentes utilizando o . (ponto) antes do operador de multiplicao.
Exemplo:
-->A=[1,2,5;3,4,-1;1,0,9] //A uma matriz 3 por 3
A =
1. 2. 5.
3. 4. - 1.
1. 0. 9.
-->B=[-3,4,5;7,8,-9;10,0,1] //B outra matriz 3 por 3
B =
- 3. 4. 5.
7. 8. - 9.
10. 0. 1.
-->A.*B
ans =
- 3. 8. 25.
21. 32. 9.
10. 0. 9.
OBS: o conceito de operaes "elemento por elemento" o mesmo apresentado na Seo
4.1.2.5, sobre vetores. Ou seja, a utilizao do . (ponto) antes de algum operador matemtico
indica que a operao ser realizada para cada elemento.
Exemplos de no-comutatividade:
-->A=[1,2;3,4;5,0;1,2;-1,6]
A =
1.
3.
5.
1.
- 1.

2.
4.
0.
2.
6.

-->B=[2,2,-1;1,-1,7]
B =
2. 2. - 1.

1. - 1. 7.
-->A*B //produto definido
ans =
4. 0.
10. 2.
10. 10.
4. 0.
4. - 8.

13.
25.
- 5.
13.
43.

-->B*A //produto nao definido


!--error 10
Multiplicao incoerente.

-->A=[-1,0;3,4]
A =
- 1. 0.
3. 4.
-->B=[1,2;7,9]
B =
1. 2.
7. 9.
-->A*B //produto definido
ans =
- 1. - 2.
31. 42.
-->B*A //produto definido, diferente de AB
ans =
5. 8.
20. 36.
-->
4.2.3 Matrizes Especiais
Nesta Seo sero apresentadas algumas funes com o objetivo de criar matrizes
especficas, como a identidade, por exemplo.

4.2.3.1 Matriz Identidade - funo eye()


Uma matriz identidade78 , l-se identidade de ordem n, uma matriz quadrada, ou
seja, quantidade de linhas igual quantidade de colunas, de modo que:
97:.,0 = 0, para i j
97:.,0 = 1, para i = j
Sendo 1 $, @ e 9$:.,0 o elemento de 78 na linha $, coluna @.
Simplificando a definio apresentada, os elementos da diagonal principal (i = j) so
iguais a 1 e os elementos fora da diagonal principal so iguais a 0.
As matrizes identidades funcionam como elemento neutro no produto matricial. Ou
seja, A.I=A, desde que o produto A.I esteja definido.
Exemplos:
1 0
7 = A
B
0 1
1 0 0
7 = C0 1 0D
0 0 1
No Scilab, a criao de uma matriz identidade se d por meio da funo eye(n,n), em que n a
ordem da matriz identidade criada.
Exemplos:
-->eye(1,1) //identidade de ordem 1
ans =
1.
-->eye(2,2) //identidade de ordem 2
ans =
1. 0.
0. 1.
-->eye(3,3) //identidade de ordem 3
ans =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->eye(4,4) //identidade de ordem 4
ans =
1.
0.
0.
0.
-->

0.
1.
0.
0.

0.
0.
1.
0.

0.
0.
0.
1.

OBS.: No MatLab, a funo eye() funciona de modo diferente. Enquanto que no Scilab preciso
indicar a quantidade de linhas e colunas, no MatLab basta indicar a ordem da identidade. Por
exemplo, uma identidade de ordem 3 no Scilab criada pelo comando eye(3,3) enquanto que,
no MatLab, basta fazer eye(3).
4.2.3.2 Matriz transposta - comando '
Seja uma matriz EF,8 . A transposta de E, denotada por EG uma matriz H8,F , de
modo que:
4.,0 = 20,.
Para 1 @ I e 1 $ .

Em outras palavras, as linhas da matriz E se tornam colunas na matriz H e as colunas


da matriz E se tornam linhas na matriz H.

1 5 6
E=A
B
3 2 0
1 3
EG = C5 2D
6 0
No Scilab, para fazer a transposta de uma matriz A, j existente no sistema, preciso adicionar
o smbolo '(apstrofe) logo aps o nome da matriz.
Exemplo:
Exemplo:

-->A=[1 -5 6;3 2 0]
A =
1. - 5. 6.
3. 2. 0.
-->AT=A' //transposta da matriz A
AT =
1. 3.
- 5. 2.
6. 0.
-->
OBS.: Se A=AT, a matriz A dita simtrica. Em outras palavras, uma matriz A simtrica
sempre que for igual sua matriz transposta.
4.2.3.2 Matrizes triangulares e triangulao
Matrizes triangulares possuem grande aplicao na soluo de sistemas de equaes
lineares. Num sistema de equaes lineares, aps tornar a matriz dos coeficientes uma matriz
triangular, o sistema pode ser resolvido pelo mtodo das substituies retroativas, o qual

consiste em operaes bsicas para isolar uma varivel em cada equao e substituir as
demais variveis pelos valores j calculados. Em sistemas na forma triangular, ainda mais
simples analisar sobre a classificao do sistema de acordo com o nmero de solues do
mesmo.
Neste processo de triangulao matricial aplicado o mtodo da Eliminao de
GAUSS, o qual o consiste em "zerar" todos os elementos abaixo da diagonal principal para
transformar a matriz em uma matriz triangular superior ou zerar todos os elementos acima da
diagonal principal para a matriz se torne uma matriz triangular inferior.
Logo, uma matriz E8,8 triangular inferior se:
2.,0 = 0, IKL MN $ > @
Caso
2.,0 = 0, IKL MN $ < @
a matriz ser triangular superior.
Exemplos:
Matriz triangular inferior:
1 0 0 0
Q 2 2 0 0S
3 6 0 0
5 0 7 1
Matriz triangular superior:
1 0 5 1
Q0 2 1 6 S
0 0 0 3
0 0 0 1
OBS: as matrizes identidades so triangulas inferior e superior ao mesmo tempo.
Dada uma matriz E8,8 no Scilab, para transform-la em matriz triangular basta utilizar as
funes:
triu(A), para uma matriz triangular superior ou,
tril(A), para uma matriz triangula inferior.
Estes comandos no fazem o processo de triangulao por meio das operaes
elementares estudadas em cursos de Geometria Analtica e lgebra Linear. Portanto, muito
cuidado com essas funes, pois as mesmas apenas transformar em zero os elementos
substituindo os elementos originais da matriz por zeros. Ou seja, a nova matriz no
equivalente primeira.
Exemplos:
-->A=[1,2,-1,4;1,3,-1,7;0,4,5,1;10,1,-1,2] //matriz A
A =
1.
1.
0.
10.

2. - 1.
3. - 1.
4. 5.
1. - 1.

4.
7.
1.
2.

-->triu(A) //matriz triagular superior, no equivalente a A


ans =
1.
0.
0.
0.

2.
3.
0.
0.

- 1.
- 1.
5.
0.

4.
7.
1.
2.

-->tril(A) //matriz triangular inferior, no equivalente a A


ans =
1.
1.
0.
10.

0.
3.
4.
1.

0.
0.
5.
- 1.

0.
0.
0.
2.

-->
4.2.3.3 Matriz Inversa - inv(A)
Uma matriz E8T8 inversvel ou no singular se existir uma matriz H8T8 tal que:
E. H = H. E = 78
Como exemplo, sejam as matrizes:
2 1
0 1
E=A
BeH =A
B
1 0
1 2
As matrizes A e B so inversas, pois,

E. H = H. E = 78

Notao: neste caso, quando B inversa de A, a matriz B denotada como B=A-1.


Propriedades da matriz inversa
i) Se A inversvel, ento A-1 tambm inversvel e a inversa de A-1 a prpria matriz A, ou
seja (A-1)-1=A;
ii) Se Anxn e Bnxn so inversveis, ento A.B tambm inversvel e (AB)-1=A-1.B-1;
iii) Se Anxn inversvel, ento AT tambm inversvel e (AT)-1=(A-1)T.
Obs.: as demonstraes dessas propriedades sero omitidas neste texto. No entanto, tais
demonstraes podem ser encontradas em (Santos, 2010).
No Scilab, existe uma funo intrnseca para se determinar a inversa de uma matriz A,
a funo inv(A), em que A uma matriz quadrada.
Exemplos:
-->A=[2,-1;1,0] //matriz A do exemplo

A =
2. - 1.
1. 0.
-->B=inv(A) //determinacao da inversa de A
B =
0. 1.
- 1. 2.
-->A*B //verificacao
ans =
1. 0.
0. 1.
-->B*A //verificacao
ans =
1. 0.
0. 1.
-->
Outros exemplos:
-->A=[1,2,0;2,2,0] //uma matriz que nao e quadrada
A =
1. 2. 0.
2. 2. 0.
-->B=inv(A)
!--error 20
Tipo errado para o primeiro argumento: Esperava-se uma matriz quadrada.

-->pela mensagem do Scilab: "esperava-se uma matriz quadrada"


-->A=[1,2,-4,1;0,-1,2,4;1,1,2,10;-11,12,3,0] //outro exemplo
A =
1. 2. - 4. 1.
0. - 1. 2. 4.
1. 1. 2. 10.

- 11. 12. 3. 0.
-->B=inv(A)
B =
- 0.4105960
- 0.2649007
- 0.4459161
0.1567329

- 1.2384106 0.5364238
- 0.9602649 0.4105960
- 0.6997792 0.3245033
0.3598234 - 0.0596026

- 0.0794702
0.0132450
- 0.0110375
0.0088300

-->
-->A*B, B*A //verificacao
ans =
1.
1.110D-16 1.180D-16 1.041D-17
- 1.110D-16 1.
2.776D-17 - 1.388D-17
0.
0.
1.
- 2.776D-17
- 8.882D-16 - 2.665D-15 6.661D-16 1.
ans =
1.
- 4.441D-16 - 6.106D-16 - 8.882D-16
0.
1.
- 4.302D-16 - 8.882D-16
2.776D-17 - 1.943D-16 1.
- 8.882D-16
0.
1.388D-17 1.006D-16 1.
-->// podem ser vistos nmeros "muito prximos de zero", isto ocorreu devido a aproximaes
numricas computacionais.
4.2.4 Soluo de sistemas de equaes lineares utilizando a funo inv()
Sistemas de equaes lineares possuem grande aplicao na formulao de problemas
ligados engenharia e seu estudo est aplicado, ainda, em problemas de otimizao de
funes lineares, sujeitos a restries de recursos, normalmente representadas por equaes
ou inequaes lineares. Sendo assim, o estudo de sistemas de equaes lineares apresentam
uma base para o estudo de solues de problemas que apresentam grande importncia de
cunho econmico, como problemas ligados a Otimizao Linear.
Em linhas gerais, uma equao linear com n variveis uma equao do tipo:
2  + 2  + 2  + + 28 8 = 4

Sendo,
2 , 2 , 2, , 28 , so os coeficientes e,
 ,  , , , 8 so as variveis envolvidas.

(Santos, 2010) define um sistema de equaes lineares como um conjunto de equaes


lineares. Ento, um sistema com n variveis e m equaes pode ser representado como em
(Santos, 2010):

O sistema de equaes lineares tambm pode ser escrito o produto matricial:


EW = H
em que:

Outra forma de representar um sistema de equaes lineares se d pela matriz aumentada,


representando a matriz A e a matriz B, conforme (Santos, 2010):

Como exemplo de um sistema de equaes lineares, pode ser citado o descrito em (Santos,
2010):

1
Neste exemplo, E = A
2


2
1
B, W = AB e H = A B
0
1

Ser aplicado, ao exemplo apresentado, um mtodo baseado no produto matricial.


Seja a representao matricial do sistema e supondo que E seja inversvel.
EW = H
Multiplicando-se ambos os lados da equao matricial por E (inv(A)), temos:
E EW = E H
Como E E = 7, temos:
7W = E H
Logo,
W = E H
Logo, se E inversvel, o sistema admite soluo nica, representada por
W = E H
No Scilab, basta fazer X=inv(A)*B.

Exemplo:
-->A=[1,2;2,1]
A =
1. 2.
2. 1.
-->B=[1;0]
B =
1.
0.
-->X=inv(A)*B
X =
- 0.3333333
0.6666667
-->
Portanto, x=-0. 3333333 e y=0. 6666667 formam a soluo aproximada do sistema de
equaes lineares.
Nesta Seo foi apresentado um mtodo para resolver um sistema que admite soluo
nica, ou seja, possvel e determinado. Caso o sistema admita infinitas solues (possvel e
indeterminado) ou caso seja impossvel, o mtodo apresentado no se aplica. Sendo assim,
sugerido que o leitor complemente o conhecimento estudando sobre os mtodos numricos
aplicados soluo de sistemas, como o mtodo da eliminao de GAUSS com pivoteamento.
4.2.5 Determinante - funo det()
O determinante de uma matriz quadrada definido como uma funo que associa, a
cada matriz quadrada, um nmero real.
Notao: para uma matriz A, quadrada, nxn, o determinante denotado como det(a)
ou por |A|.
Para o caso de uma matriz 1x1, o determinante definido como o prprio elemento da
matriz,ou seja:
Se A=[a], ento det(A)=a.
Para o case de uma matriz 2x2, o determinante definido como segue:
2 4
X
X = 2Y 4- Y
Ordens superiores
No caso de matrizes quadradas de ordem superior a 2, se faz necessrio,
primeiramente, definir a Menor e o Cofator da matriz:
Menor: dada uma matriz E8T8 , a menor de ndice i,j, denotada por E.,0 definida como a
submatriz obtida pela remoo da linha i e da coluna j da matriz E8T8 .

Cofator: data uma matriz E8T8 , o cofator i,j, denotado por 2Z.,0 definido como

1 .0 . det
E.,0 .
Exemplo:
Dada a matriz:

1 2 0
E = C 1 5 3D
4 6 1

= A5 3B, submatriz obtida pela remoo da linha 1 e da coluna 1 da matriz A;


E,
6 1
1 2
E, = A
B, submatriz obtida pela remoo da linha 2 e da coluna 3 da matriz A;
4 6
Logo,
_ = 1.
13 = 13
2Z, =
1  . det^E,
2Z, =
1  . det^E, _ = 1.
14 = 14
Deste modo, o determinante para matriz quadradas de ordens superiores a 2 e
definido como: dada uma linha (ou coluna) da matriz, o determinante o somatrio dos
produtos dos elementos desta linha (ou coluna) pelos seus respectivos cofatores.
No exemplo considerado, seja escolhida a linha 1 para o clculo do determinante:
1 2 0
1 3
5 3
1
det
E = ` 1 5 3` = 1.
1  X
X + 2.
1  X
X + 0.
1  X
4 1
6 1
4
4 6 1

5
X = 35
6

interessante observar que, para uma matriz 3x3, preciso calcular 3 determinantes 2x2. Se a
matriz A for 4x4, para cada elemento da primeira linha temos um determinante 3x3 e, para
cada matriz 3x3, preciso realizar 3 clculos de determinantes 2x2, o que implica em 4x3=12
clculos de determinantes 2x2. Se a matriz A for 5x5, para cada elemento da primeira linha,
existem 4 determinantes de matrizes 4x4 e, para cada uma dessas, 12 clculos de
determinantes de matriz 2x2, o que implica em 5x12=60 clculos de determinantes. Para uma
matriz 6x6, seriam 6x60=360 clculos de determinantes de matrizes 2x2. Deste modo, o
clculo de determinantes de matrizes de ordens maiores se tornam inviveis de serem
realizados manualmente e a utilizao de softwares como o Scilab se justifica, se tornando
uma ferramenta necessria aos estudantes e profissionais da rea de exatas.
No Scilab, o clculo do determinante de uma matriz feito pela funo det(), cuja
sntese det(A), em que A uma matriz quadrada.
Exemplos:
-->A=[-3] //matriz quadrada 1x1
A =
- 3.
-->det(A)
ans =

- 3.
-->A=[-1,3;1,2] //matriz quadrada 2x2
A =
- 1. 3.
1. 2.
-->det(A)
ans =
- 5.
-->A=[-1 2 0;1 5 3;4 6 1] //matriz quadrada 3x3
A =
- 1. 2. 0.
1. 5. 3.
4. 6. 1.
-->det(A)
ans =
35.
-->A=[-1 2 3 1 0 2;3 2 -2 6 7 8;10 0 1 3 3 -2;7 8 9 -1 0 2;1 2 -3 5 4 5;2 3 1 4 -6 6]//matriz
quadrada 6x6
A =
- 1.
3.
10.
7.
1.
2.

2. 3. 1. 0.
2. - 2. 6. 7.
0. 1. 3. 3.
8. 9. - 1. 0.
2. - 3. 5. 4.
3. 1. 4. - 6.

2.
8.
- 2.
2.
5.
6.

-->det(A)
ans =
- 44880.
-->
Neste texto, as propriedades do determinante no sero apresentadas, pois o pricipal
objeto o de apresentar o Scilab. No entanto, recomendvel que o leitor aprofunde o

estudo. As propriedades do determinante e suas implicaes podem ser encontradas em


(Santos, 2010).

4.3 Casos particulares de matrizes e vetores


Nesta Seo sero apresentas algumas matrizes e vetores especiais, os quais podem
ser teis em computao numrica para, por exemplo, servirem de solues iniciais em
algoritmos iterativos.
4.3.1 Matrizes e vetores formados por zeros (funo zeros) ou por uns (funo
ones)
A funo zeros() utilizado para criar matrizes ou vetores nulos. De acordo com (Leite,
2009), a sntese do comando :
zeros(m,n,p), em que m o nmero de linhas, n o nmero de colunas e p o nmero de
matrizes nulas que sero criada, sendo que , como default, p=1.
Exemplos:
-->zeros(1,2)//vetor nulo com duas posicoes
ans =
0. 0.
-->zeros(1,3,2)//dois vetores nulos com 3 posicoes
ans =
(:,:,1)
0. 0. 0.
(:,:,2)
0. 0. 0.
-->zeros(3,3)//matriz de zeros 3x3
ans =
0. 0. 0.
0. 0. 0.
0. 0. 0.
-->zeros(3,3,2)//duas matrizes de zeros, 3x3
ans =
(:,:,1)
0. 0. 0.
0. 0. 0.
0. 0. 0.
(:,:,2)

0. 0. 0.
0. 0. 0.
0. 0. 0.
O caso das matrizes formadas apenas pelo nmero 1 (um) anlogo ao descrito
anteriormente. No entanto, em vez de ser utilizada a funo zeros(), preciso utilizar a funo
ones().
Sntese da funo ones():ones(m,n,p), em que m o nmero de linhas, n o nmero de
colunas e p o nmero de matrizes nulas que sero criada, sendo que , como default, p=1.
Exemplos:
-->ones(1,2)//vetor de 1s com duas posicoes
ans =
1. 1.
-->ones(1,3,2)//dois vetores de 1s com 3 posicoes
ans =
(:,:,1)
1. 1. 1.
(:,:,2)
1. 1. 1.
-->ones(3,3)//uma matriz de 1s, 3x3
ans =
1. 1. 1.
1. 1. 1.
1. 1. 1.
-->ones(3,3,2)//duas matrizes de 1s, 3x3
ans =
(:,:,1)
1. 1. 1.
1. 1. 1.
1. 1. 1.
(:,:,2)
1. 1. 1.
1. 1. 1.
1. 1. 1.

-->
4.3.2 Matrizes e vetores randmicos
Matrizes e vetores randmicos tambm se aplicam gerao de solues iniciais para
algoritmos.
importante ressaltar que o computador possui sequncias, as quais armazenam
nmeros. Estes nmeros podem se repetir durante as geraes dos nmeros e, deste modo,
existe uma falsa impresso de aleatoriedade. Ao se gerar nmeros aleatrios importante
saber alterar essa sequencia numrica, de modo que os nmeros escolhidos no se repitam e a
gerao destes nmeros fique, de fato, aleatria. Para se alterar essa sequncia, se torna
necessria a definio da "semente" do gerador randmico. Ao se alterar essa "semente"
possvel ter a garantia de que uma nova sequencia considerada e, deste modo, no existe o
risco do processo de gerao de nmeros se tornar "vicioso". bastante comum considerar a
semente de acordo com o horrio do sistema operacional, isto garante que, a cada gerao,
uma nova sequncia numrica considerada para a escolha do nmero.
A forma mais simples de gerar nmeros aleatrios no Scilab por meio da funo
rand(), a qual gera nmeros aleatrios entre 0 e 1. Sntese da funo: rand(m,n), sendo m e n a
quantidade de linhas e colunas da matriz, respectivamente.
Exemplo:
Para se definir uma nova semente, basta usar rand('seed',k), em que k o nmero que
indica a semente escolhida. tambm possvel escolher uma funo de distribuio de
probabilidade, por exemplo, ao se definir rand('uniform') os nmeros escolhidos tem
probabilidade uniforme. Caso se defina rand('normal'), a escolha do nmero segue a
distribuio normal ou Gaussiana. Ao se utilizar rand('info'), a distribuio escolhida
apresentada. No caso da distribuio normal, como default, so definidas mdia 0 e varincia
1.
Exemplo:
-->rand('info')//para apresentar a funcao de distribuicao de probabilidade
ans =
uniform
-->rand('seed',1)//definicao de uma semente
-->rand(3,2)//criacao de uma matriz aleatoria
ans =
0.6040239 0.9832111
0.0079647 0.5321420
0.6643966 0.4138784
Para gerar nmeros inteiros, ou alterar o intervalo da gerao de nmeros aleatrios, so
necessrias algumas manipulaes.
Exemplo:

-->int((rand(3,2)*(10-5))+5)//gera numeros inteiros aleatorios entre 5 e 10


ans =
6. 6.
6. 5.
5. 7.
-->int((rand(3,2)*(25-7))+7)//gera numeros inteiros aleatorios entre 7 e 25
ans =
15. 10.
23. 11.
9. 18.
-->
O Scilab apresenta, ainda, outra funo para gerao de nmeros aleatrios, a funo
grand(). A funo grand() possui mais atributos do que a funo rand() e, por este motivo, se
torna mais completa.
Para se conhecer a fundo a funo grand() preciso conhecer melhor alguns conceitos
estatsticos, como as diferentes funes de probabilidade e suas aplicaes. Em linhas gerais, a
funo grand() pode ser sintetizada como:
Y=grand(dimenso da matriz, tipo de distribuio, mdia aritmtica, desvio padro)
O exemplo abaixo, encontrado no Help do Scilab, ilustra a criao de uma matriz 400x800 (ou
seja, um conjunto de 320000 nmeros aleatrios) escolhidos com base na distribuio normal
(Gaussiana). Como sada do cdigo, o grfico impresso, sendo representado pela Figua 4.1.
// Retorna uma matriz 400 por 800 de nmeros aleatrios,
// com distribuio normal, mdia 0 e valor padro 1.
R = grand(400,800,"nor",0,1);
scf();
histplot(10,R);
xtitle("Normal random numbers from grand","X","Frequency");

Figura 4.1: Grfico da distribuio normal de probabilidade - exemplo do Scilab


Vale ressaltar que o ; (ponto e vrgula) foi digitado aps a atribuio de R, caso
contrrio a matriz R, 400 por 800, seria exibida na tela.
Os parmetros da funo grand() podem modificar, de acordo com a distribuio
escolhida. recomendvel ao leitor que veja mais exemplos sobre a utilizao da funo
grand() no Help do Scilab.
O prximo exemplo, tambm extrado do Help do Scilab, apresenta uma gerao de
nmeros aleatrios de acordo com uma distribuio exponencial. Neste caso existem outros
parmetros considerados.
Exemplo:
lambda=1.6;
N=100000;
X = grand(1,N,"exp",lambda);
scf();
classes = linspace(0,12,25);
histplot(classes,X)
x=linspace(0,12,25);
y = (1/lambda)*exp(-(1/lambda)*x);
plot(x,y,"ro-");
legend(["Empirical" "Theory"]);
xtitle("Exponential random numbers from grand","X","Frequency");

Figura 4.2: Grfico da distribuio exponencial de probabilidade - exemplo do Scilab


4.3.3 Matrizes e vetores simblicos
O Scilab permite a criao de matrizes e vetores com valores simblicos. A indicao
de uma varivel simblica feita pela varivel especial %s ou pela indicao de strings.
Exemplos:
-->A=[1 %s %s+1;2 %s-1 %s]
A =
1

1+s

2 -1+s

-->B=['x','y';'x+1','y+1'] //variavel simbolica com strings


B =
!x y !
!
!
!x+1 y+1 !
-->x=1;y=2; //atribuicao de valores a x e a y
-->eval(B) //avaliacao de B com os valores propostos de x e y
ans =
1. 2.
2. 3.
Obs.: embora o exemplo considere matrizes, o mesmo conceito pode ser expandido aos
vetores.

4.3.4 Matrizes e vetores booleanos


O Scilab permite a criao de vetores e matrizes com valores lgicos, indicados pelas
variveis especiais %t (verdadeiro) e %f (falso).
Exemplos:
-->A=[%t %t;%f %t]
A =
TT
FT
-->v=[%t %t %f %t %f %t]
v =
TTFTFT
-->
(Motta, 2004) apresenta um exemplo da aplicao de operaes booleanas. Abaixo a
utilizao dos operadores E (indicado por &) e OU (indicado por |).
Exemplo (Motta, 2004):
-->//A ou B
-->A|B
ans =
TFTFTT
-->//A e B
-->A&B
ans =
TFTFFF
4.3.5 Acesso e atribuio a elementos de vetores e matrizes
Nesta Seo sero apresentadas algumas maneiras de acessar elementos de vetores e
matrizes, bem como atribuir novos valores a estes.
O modo mais simples de acessar os elementos feito por meio da indicao da
posio do elemento, conforme exemplo:
Exemplo:
-->v=[1 -2 3 4 5] //vetor v
v =
1. - 2. 3. 4. 5.

-->v(2) //visualizar o elemento da posicao 2 do vetor


ans =
- 2.
-->v(1) //visualizar o elemento da posicao 1 do vetor
ans =
1.
-->v(5) //visualizar o elemento da posicao 5 do vetor
ans =
5.
Para modificar algum elemento do vetor considerado, basta atribuir o novo valor para
a posio desejada.
Exemplo:
-->v
v =
1. - 2. 3. 4. 5.
-->v(2)=0 //substituindo o segundo elemento do vetor por zero
v =
1. 0. 3. 4. 5.
-->v(1)=5 //substituindo o primeiro elemento do vetor por 5
v =
5. 0. 3. 4. 5.
A utilizao do : (dois pontos) permite a visualizar todos os elementos da primeira
posio informada at a segunda posio informada.
Exemplo:
-->v
v =
5. 0. 3. 4. 5.
-->v(2:4)//visualizar da posicao 2 ate a posicao 4
ans =
0. 3. 4.

Tambm podem ser feitas atribuies utilizando : (dois pontos), porm preciso
observar quantos elementos existem na seleo dos elementos.
Exemplo:
-->v
v =
5. 0. 3. 4. 5.
-->v(2:4) = [1,7,6]//substituindo apenas os tres elementos da posicao 2 ate a posicao 4
v =
5. 1. 7. 6. 5.
Caso o smbolo : (dois pontos) seja utilizado sem qualquer indicao, todos os
elementos do vetor so apresentados.
Exemplo:
-->v(:) //todos os elementos de v
ans =
5.
1.
7.
6.
5.
-->
O smbolo $ permite acessar o ltimo elemento do vetor.
Exemplo:
--> v
v =
5. 1. 7. 6. 5.
-->v($)
ans =
5.
As variveis booleanas podem ser usadas para indicar o que ser representado (por
meio da varivel especial %t) e que no sero representado (por meio da varivel especial %f).
Exemplo:
-->v
v =
5. 1. 7. 6. 5.

-->v([%t %t %f %f %t]) //serao apresentados apenas os elementos 1,2 e 5


ans =
5. 1. 5.
No caso das matrizes, os conceitos so os mesmos, porm preciso indicar linhas
colunas. Por exemplo, para visualizar o elemento da linha i, coluna j, da matriz A, basta digitar
A(i,j). Os ndices i e j tambm podem ser vetores, para indicar mais de uma linha ou coluna.
Exemplo:
-->A=[1 -2 3 4;2 -1 3 6;-2 3 4 8]
A =
1. - 2. 3. 4.
2. - 1. 3. 6.
- 2. 3. 4. 8.
-->A(1,2) //apresenta o elemento da linha 1 e coluna 2
ans =
- 2.
-->A(3,2)// apresenta o elemento da linha 3, coluna 2
ans =
3.
-->A([1 2],3)//este comando apresenta os elementos das linhas 1 e 2, que estiverem na coluna
3
ans =
3.
3.
-->A(1,[2 3])//este comando apresenta os elementos da linha 1, ques estiverem nas colunas 2
e3
ans =
- 2. 3.
A atribuio de novos valores a estes elementos podem ser feitos diretamente, porm
preciso ficar atento ao se alterar mais de um valor. Deve ser observado a quantidade de
elementos e como eles esto disposto na matriz (em linha ou coluna) e utilizar corretamente o
operador ; (ponto e vrgula).
Exemplo:
-->A

A =
1. - 2. 3. 4.
2. - 1. 3. 6.
- 2. 3. 4. 8.
-->A(1,2)=-3
A =
1. - 3. 3. 4.
2. - 1. 3. 6.
- 2. 3. 4. 8.
-->A([1 2],3)=[0;0] //no caso foi preciso utilizar ; (ponto e virgula)
A =
1. - 3. 0. 4.
2. - 1. 0. 6.
- 2. 3. 4. 8.
Por meio do operador : (dois pontos) o Scilab permite acessar a vrios elementos da
matriz, indicando linhas ou colunas em sequencia. Este operador pode ser manipulado de
diferentes formas, como apresentado no exemplo.
Exemplo:
-->A
A =
1. - 3. 2. 4.
2. - 1. - 3. 6.
- 2. 3. 4. 8.
-->A(:,2) //exibir a segunda coluna de A
ans =
- 3.
- 1.
3.
-->A(3,:) //exibir a terceira linha de A
ans =
- 2. 3. 4. 8.
-->A(3,2:4) //exibir os elementos das colunas 2, 3 e 4 e que estiverem na linha 3
ans =
3. 4. 8.

-->A(3,[2 3 4]) //exibir os elementos das colunas 2, 3 e 4 e que estiverem na linha 3


ans =
3. 4. 8.
-->A(3,4:-1:2) //exibir os elementos das colunas 4, 3 e 2 e que estiverem na linha 3
ans =
8. 4. 3.
-->A(:,[4 3 2]) //exibir os elementos das colunas 4, 3 e 2
ans =
4. 2. - 3.
6. - 3. - 1.
8. 4. 3.
O smbolo $ tambm pode ser utilizado de modo bastante intuitivo, como apresentado
no Exemplo.
Exemplo:
-->A
A =
1. - 3. 2. 4.
2. - 1. - 3. 6.
- 2. 3. 4. 8.
-->A($) //ultimo elemento de A
ans =
8.
-->A(2,$)//elemento da segunda linha e da ultima coluna de A
ans =
6.
-->A([2 3],$-1)//elementos da segunda e da terceira linha, na coluna n-1
ans =
- 3.
4.
-->A($,3) //elemento na ultima linha e terceira coluna
ans =
4.

-->A($-2,3:4) //elemento na linha m-2, na terceira e quarta colunas


ans =
2. 4.
-->A($,:)//elementos da ultima linha de A
ans =
- 2. 3. 4. 8.
-->A(:,$) //elementos da ultima coluna de A
ans =
4.
6.
8.
Os elementos de uma matriz so armazenados sequencialmente por uma coluna, feita
linha por linha, ou seja, os primeiros elementos so os elementos da primeira linha, os
prximos os da segunda e assim por diante. Deste modo, A($) retorna o ltimo elemento da
matriz, A(1) retorna o primeiro elemento da matriz, A(3) retorna o terceiro elemento, A(5)
retorna o quinto elemento, A(:) retorna todos os elementos da matriz, representados em uma
coluna.
Exemplo:
-->A
A =
1. - 3. 2. 4.
2. - 1. - 3. 6.
- 2. 3. 4. 8.
-->A(1)
ans =
1.
-->A(5)
ans =
- 1.
-->A(3)
ans =
- 2.

-->A(5)
ans =
- 1.
-->A(:)
ans =
1.
2.
- 2.
- 3.
- 1.
3.
2.
- 3.
4.
4.
6.
8.
-->
O smbolo $ tambm pode ser utilizado para visualizar os elementos da matriz.
Exemplo:
-->A
A =
1. - 3. 2. 4.
2. - 1. - 3. 6.
- 2. 3. 4. 8.
-->A([%t %f %t %f %f %t]) //para visualizar os elementos na posicao 1, 2 e 5 da matriz A
ans =
1.
- 2.
3.
-->A([%t %t], [3 4]) //acessar os dois primeiros elementos das colunas 3 e 4
ans =
2. 4.
- 3. 6.

4.3.6 Funes size() e length()


A funo length() aplicada para determinar a quantidade de elementos de um vetor.
Sua sntese length(v), em que v um vetor.
A funo size() retorna a quantidade de linhas e colunas de uma matriz ou vetor. A
sntese da funo size(A), em que A uma matriz ou vetor.
Exemplos:
-->A
A =
- 1.
0.
1.
1.

2.
1.
0.
1.

3.
2.
1.
- 3.

-->v
v =
1. 2. - 3. 5. 6. 7.
-->length(v)
ans =
6.
-->size(v)
ans =
1. 6.
-->size(A)
ans =
4. 3.
4.4 Exerccios Propostos
Para os exerccios de 1 a 18, escreva a sequncia de comandos, digite no Scilab e escreva o
resultado, exceto para aqueles que tiverem uma observao.
1- Limpe todas as variveis locais, em seguida limpe todos comandos armazenados no prompt
de comandos.
2- Crie os vetores N
ab =
3,0,1 , cb =
5,1,3 e d
aab =
4,5,6 . Em seguida, faa:
a) N
ab + cb
b) N
ab cb
c) Obtenha um vetor formado pelo produto (elemento por elemento) entre N
ab e cb.
d) Calcule a raiz quadrada de cada elemento de d
aab, por meio da funo sqrt().
e) Faa -5*N
ab e armazene este novo vetor em uma varivel vetorial x;

f) Calcule a norma de N
ab, em seguida calcule a norma de -5*N
ab (armazenado na varivel x), em
seguida faa o mdulo de -5 multiplicado pela norma de -5*N
ab.
aaaaab
g) Calcule os produtos escalares N
ab. cb, cb. d
aab, 2cb. d
aab, cb.
3d .

h) Calcule os ngulos entre N


ab e cb, cb e d
aab e N
ab e d
aab.
3- Limpe todas as variveis locais e crie um vetor N
ab, formado por elementos entre 0 e 20, com
incremento 2.
4- Crie um vetor cb, formado por elementos entre 20 e 0, com decremento 1. Obs.: no
necessrio escrever o resultado, apenas a sequncia de comandos.
5- Crie um vetor d
aab, formado por elementos entre 0 e 1, com incremento 0,01. Obs.: no
necessrio escrever o resultado, apenas a sequncia de comandos.
7- Crie um vetor Laaab,
 randmico, com cinco posies e formado pelos elementos entre 0 e 1,
com distribuio uniforme.
8- Crie um vetor Laaab,
 randmico, com cinco posies, formado pelos elementos entre 3 e 5, com
distribuio uniforme.
9- Crie, por meio da funo grand(), um vetor randmico aaab,
L com 100 posies, utilizando a
distribuio normal, com mdia aritmtica 0 e desvio padro 1. Obs.: no necessrio
escrever o resultado, apenas a sequncia de comandos.
10- Crie um vetor de 100 posies, em que todos os elementos so nulos. Obs.: no
necessrio escrever o resultado, apenas a sequncia de comandos.
11- Utilize o vetor Laaab,
 do exerccio 9, para:
a) apresentar o 1, 5, 10, 90 elemento do vetor;
b) apresentar o ltimo elemento do vetor;
c) apresentar do primeiro ao dcimo elemento do vetor;
d) apresentar do 5 ao 20 e do 50 ao 60 elemento do vetor; Obs.: no necessrio escrever
o resultado, apenas a sequncia de comandos.
e) apresentar todos os elementos do vetor. Obs.: no necessrio escrever o resultado,
apenas a sequncia de comandos.
12- Limpe todas as variveis locais, limpe os comandos armazenados no prompt de comandos
e, em seguida, crie as seguintes matrizes:
1 2 3
E=A
B
0 2 1
4 3 2
H=A
B
2 1 7
1 5
e=C 0 2 D
2 4
3 1 0
f = C1 4
3D
2 1 1
1 3
g=A
B
1 1
72 = I2hL$ $Y h$Y2Y Y iLYI 2
73 = I2hL$ $Y h$Y2Y Y iLYI 3
j1 = I2hL$ Nk2, 5 KiL 5
j2 = I2hL$ liI2Y2 KiL 1m , 5 5
13- Utilizando as matrizes criadas no exerccio 12, faa:

a) E + H
b) E H
c) H e
d) e H
e) multiplique E e H, elemento por elemento.
f) Determine as matrizes EG e HG .
g) f  , g  e E .
h) Faa f f  e g g  .
i) Calcule os determinantes de f e g.
j) Transforme a matriz f em uma matriz triangular superior, atribuindo zero aos elementos
abaixo da diagonal principal de f e armazene essa nova matriz em uma varivel matricial
chamada f.
14- Resolva o sistema de equao lineares, extrado de (Santos, 2010):

15- Um Engenheiro de Produo supervisiona a produo de quatro tipos de computadores.


Existem quatro tipos de recursos necessrios produo: mo de obra, metais, plsticos e
componentes eletrnicos. Para produzir cada tipo de computador, so necessrios:
Computador

Mo de obra
h/comp.

Metais
Kg/comp.

Plsticos
Kg/comp.

Componentes
unidades/comp.

1
2
3
4

3
4
7
20

20
25
40
50

10
15
20
22

10
8
10
15

Para se produzir diariamente estes computadores, os recursos apresentados na Tabela so


limitados, sendo que diariamente existe a disponibilidade de uso de:
504 horas de mo de obra;
1970 Kg de metais;
970 Kg de plsticos;
601 componentes.
Crie um modelo matemtico, por meio de um sistema de equaes lineares, para determinar a
quantidade total de computadores produzidos por dia, utilizando todos os recursos
disponveis. Aps modelar matematicamente a situao, resolva o sistema de equaes
lineares pelo Scilab. Escreva a sequncia de comandos utilizada, os comandos utilizados para
resolver o sistema pelo Scilab e o resultado.
Obs.: questo adaptada de (Ruggiero & Lopes, 2011).
16- Crie uma matriz E, 5 por 5, de modo que a primeira linha seja formada pelos nmeros de 1
a 5 (utilize o operador :) e os demais elementos nmeros aleatrios entre 0 e 1, com
probabilidade uniforme.
17- Crie, por meio da funo grand(),uma matriz randmico o, 5 por 5, utilizando a distribuio
normal, com mdia aritmtica 3 e desvio padro 5.

18- Utilize os comandos apropriados para apresentar os seguintes elementos da matriz R


(exerccio 17):
a) primeiro elemento;
b) todos da primeira linha;
c) ltimo elemento;
d) todos da segunda linha linha;
e) dos os elementos da primeira e segunda linhas, na quarta e quinta colunas;
f) utilize operadores lgicos para apresentar todos os primeiros e segundos elementos, da
quinta coluna.

Captulo 5 - Polinmios
Este Captulo apresenta o estudo prtico sobre polinmios algbricos no Scilab.

5.1 Definies

Sejam 2 , 2 , , 28 7o, uma varivel real e um nmero natural, um polinmio


q
de grau , na varivel definido como:
q
= 28 8 + 28 8 + + 2 + 2
Os termos 2 , 2 , , 28 7o so ditos coeficientes do polinmio e dito grau do polinmio,
por ser o maior expoente com sua potncia de multiplicada por um coeficiente no nulo.
Exemplos:
q
= 6 r + 2  + 1, polinmio de grau 5,

q
= 3 s 2 + 3  + 1, polinmio de grau 7.

Valor numrico de um polinmio


Seja m um nmero real, o valor numrico de P(x) para m valor obtido substituindo-se
x por m.
Exemplo:
Seja o polinmio q
= 6 r + 2  + 1, o valor numrico P(3) calculado por
q
3 = 6. 3r + 2. 3 + 3 1 = 1514
Quando P(m)=0, m dito raiz do polinmio. A quantidade de razes reais de um
polinmio sempre menor ou igual do que seu grau. Assim, um polinmio de grau 2 possui, no
mximo, duas razes reais, um polinmio de grau 3 possui, no mximo, 3 razes reais e assim
por diante.
Soma e subtrao de polinmios
A operao de soma ou subtrao entre dois polinmios q
e t
feita por meio
da soma ou subtrao dos coeficientes correspondentes.
Exemplos:
q
= 3 r 2 +  + 1
t
= r +  + + 3
q
+ t
= 4 r 2 + 2  + 4
q
t
= 2 r 2 2 2

Produto de polinmios
O produto entre dois polinmios feitos aplicando-se a propriedade distributiva do
produto em relao a soma de nmeros reais.
Exemplo:
q
=  + 2 1
t
= 3 4

q
. t
=
+ 2 1 .
3 4 = 3  + 2  11 + 4

Diviso de polinmios
Sejam dois polinmios, p(x) e g(x), sendo o grau de g(x) menor ou igual ao grau do
polinmio p(x), dividir p(x) por g(x) determinar q(x) e r(x), tal que p(x)=q(x).g(x)+r(x), sedo
p(x) o dividendo e g(x) o divisor.
Para dividir os polinmios, basta dividir o "termo lder" do dividendo pelo "termo lder"
do divisor. O resultado obtido multiplicado pelo divisor e o resultado subtrado do dividendo.
O processo termina quando, ao se subtrair o dividendo pelo resultado da multiplicao, seja
encontrado zero (diviso exata) ou outro polinmio com grau menor do que o do dividor.
Como exemplo, o polinmio K
= 3  6 + 3 ser divido pelo polinmio u
= + 3.
3x3+0x2-6x+3 x+3
-3x3-3x2
x2-3x+3
2
-3x -6x+3
+3x2+9x
3x+3
-3x -9
-6
No exemplo, o quociente M
=  3 + 3 e o resto L
= 6.

5.2 Criando Polinmios no Scilab - funo poly()


A criao de um polinmio no Scilab pode se feita de duas maneiras: pela indicao
das razes ou pela indicao dos coeficientes. Em ambos os casos utilizada a funo poly().
Para criar um polinmio a partir de suas razes preciso utilizar a funo com a
seguinte sntese: poly(x,str), em que x o vetor de razes e str a string que guarda a varivel do
polinmio.
Exemplo:
-->poly([1 2],'x')//polinomio cujas raizes sao 1 e 2, com variavel x
ans =
2
2 - 3x + x
Um polinmio tambm pode ser criado ao se informar seus coeficientes. Neste caso, a
sntese da funo passa a ser: poly(x,str,'coeff'), em que x o vetor de coeficientes, str a
varivel do polinmio e coeff um parmetro que indica que os coeficientes do polinmio
foram informados.
Exemplo:
-->poly([5 -4 2],'x','coeff')
ans =
2
5 - 4x + 2x

5.3 Operaes com polinmios no Scilab


Para exemplificar as operaes descritas na Seo 5.1 sero criados dois polinmios e
as operaes sero criadas sobre estes dois vetores. A Figura 5.1 apresenta as operaes de
soma, subtrao e multiplicao.

Figura 5.1: Operaes de soma, subtrao e multiplicao entre dois polinmios


Para efetuar a diviso, preciso utilizar a funo pdiv(), cuja sntese [r,q] = pdiv(p,g), em que
q o quociente, r o resto da diviso, p o dividendo e g o divisor. A Figura 5.2 apresenta a
diviso entre dois polinmios.

Figura 5.2 - Exemplo da diviso de polinmios


OBS.: uma forma interessante de se criar uma funo polinomial criar um polinmio P(x)=x e
utilizar este polinmio genrico para criar novos, como no exemplo:
Exemplo:
-->x = poly(0,'x')//criacao do polinomio
x =
x

-->pol = (x-2)*(x+3) //novo polinomio


pol =
2
-6+x+x
-->

5.4 Avaliao de polinmios - funo horner()


A funo horner() utilizada para avaliar o valor de um polinmio. O mtodo de
Horner conhecido em Clculo Numrico e reduz o tempo computacional para o clculo de
valores numricos de polinmios devido a um rearranjamento nas posies dos parnteses,
alterando a ordem na qual os clculos so feitos. O Mtodo de Horner no ser detalhado
neste texto.
Sntese da funo: horner(p,m), em que p o polinmio e m o valor para o qual se
deseja calcular o valor numrico do polinmio. A Figura 5.3 apresenta o clculo de valores
numricos em polinmios.

Figura 5.3: Exemplo de avaliao de polinmios (valores numricos)

5.5 Razes de polinmios - funo roots()


A determinao de razes de polinmios, ou seja, os valores de m, para os quais
P(m)=0. A funo roots() retorna razes reais ou complexas. Sntese da funo: roots(p) em que
p o polinmio para o qual as razes so procuradas. A Figura 5.4 ilustra um exemplo de
utilizao da funo mencionada para um polinmio p.

Figura 5.4: Exemplo da funo roots()

5.6 Exibindo coeficientes - funo coeff()


Para exibir um coeficiente de um polinmio, basta utilizar a funo coeff(), cuja sntese
coeff(p,n), em que p o polinmio analisado e n o ndice do coeficiente procurado.
Exemplo:
p =
2 3
6 + x - 4x + x
-->coeff(p,0)
ans =
6.
-->coeff(p,1)
ans =
1.
-->coeff(p,2)
ans =
- 4.
-->coeff(p,3)
ans =
1.
-->

5.7 Exerccios Propostos


Para os exerccios de 1 a 18, escreva a sequncia de comandos, digite no Scilab e escreva o
resultado.
1- Limpe todas as variveis locais e elimine os histrico de comandos do prompt. Em seguida
crie um vetor y = [-2 0 1].
2- Crie um polinmio p na varivel x, a partir de suas razes, utilizando os elementos do vetor y
(exerccio 1) como razes de p.
3) Crie um polinmio q, na varivel x, utilizando os elementos de y (exerccio 1) como
coeficientes.
4) Limpe todas as variveis e crie um polinmio p(x), cujo coeficientes so [-1 2 4 -5 3]. Em
seguida, crie outro polinmio, g(x), cujos razes reais so [-2 3 1]. Em seguida faa: p(x)+g(x);
p(x)-g(x); p(x)*g(x) e p(x)/g(x), apresentando o quociente e o resto da diviso entre os
polinmios.
5) Crie um polinmio p(x), cujos coeficientes so [2 -4 5 0]. Em seguida calcule, por meio da
funo intrnseca apropriada, p(0), p(-1), p(2), p(10).
6) Calcule as razes do polinmio criado no Exerccio 5.

Captulo 6 - Grficos
Esta Seo apresenta os comandos para criar grficos bi e tri-dimensionais no Scilab.

6.1 A janela grfica


As sadas grficas so visualizadas por meio da janela grfica. A Figura 6.1 apresenta a
janela grfica do Scilab.

Figura 6.1: Janela grfica do Scilab


Na janela grfica existem os menus Arquivo, Ferramentas, Editar e ? (Ajuda). O menu
arquivo apresenta os comandos:
Nova Figura: permite abrir uma nova figura ou grfico, substituindo o a figura ou
grfico atual;
Carregar: permite abrir uma figura ou grfico que j foi salva;
Salvar;
Exportar para: permite exportar para formatos como bmp, jpg e png;
Vectorial export to: permite exportar uma "imagem vetorial" em formatos como pdf,
ps e eps;
Cpia para a rea de transferncia: permite inserir a figura ou grfico na rea de
transferncia para ser colada posteriormente;
Configurao da pgina: apresenta as opes de configurao de pgina, tais como
orientao da pgina e margens;
Imprimir;
Fechar.

J o menu Ferramentas apresenta os seguintes comandos:


Mostrar/esconder a barra de ferramentas: permite mostrar ou esconder a barra de
ferramentas, localizada abaixo da barra de menus;
Ampliar: permite ampliar uma rea delimitada pela seleo do mouse;
Ver original: retorna a janela grfica visualizao normal de zoom;
Rotao 2D/3D: permite fazer rotao no grfico, auxiliando na visualizao.

No Menu Editar so apresentados os seguintes comandos:


Selecionar como figura atual: permite selecionar a figura;
Limpar figura: elimina a figura da rea grfica;
Propriedades da figura;
Propriedades dos eixos;
Iniciar apanhador de entidades: permite abrir um editor para uma entidade grfica
escolhida. O conceito de entidade no ser discutido neste texto;
Terminar apanhador de entidade;
Iniciar gerenciador datatip: permite inserir anotaes em curvas, ou simplesmente
apresentar as coordenadas do ponto escolhido por meio de seleo com o mouse;
Parar gerenciador datatip.
O Menu de ajuda apresenta os tpicos de ajuda ao Scilab.
A barra de ferramentas da janela grfica apresentada pela Figura 6.2.

Figura 6.2: Barra de ferramentas


Os botes da barra de ferramentas so: Rotao 2D/3D, Ampliar, Ver original,
Iniciar/Parar gerenciador datatip e Ajuda, cujos comandos foram mencionados nesta Seo.
Quando vrios grficos so criados, o Scilab os sobrescreve em uma mesma janela,
para que isto seja evitado e os grficos apaream em janelas distintas, preciso utilizar a
funo scf(), indicando um novo nmero de janela grfica. Por exemplo, ao executar scf(1)
aberta uma nova janela grfica no Scilab. Outra opo para evitar que grficos sejam
sobrescritos a utilizao do comando xdel, porm este elimina as janelas existentes, j a
funo clf() limpa a rea grfica e no a fecha.

6.2 Grficos 2D - plot2d()


Para plotar grficos 2D podem ser utilizadas as funes plot() ou plot2d(). A funo
plot2d() ser melhor detalhada nesta Seo.
Sntese da funo plot2d(): plot2d([x],y,<atributos>)
[x] - um vetor ou matriz real, cujo objetivo , normalmente, o de representar o
domnio da funo associada ao grfico. Este parmetro opcional e quando omitido
traado o grfico do vetor ou matriz indicado apenas por y;
y - vetor ou matriz real (normalmente contradomnio da funo associada ao grfico);
<atributos>: indicao de opes do grfico, como estilo da curva e limites dos eixos.
Alguns exemplos de grficos sero apresentados para o intervalo de 0 a 2.
Exemplo 01 (x e y so vetores, y=cos(x)):
-->x=0:0.01:2*%pi; //definindo x
-->y=cos(x); //fazendo y = cos(x)
-->plot2d(x,y) //plotar o grafico para x e y

Figura 6.3: Grfico do Exemplo 01


Outra forma de apresentar o grfico do Exemplo 01 por meio da omisso do
parmetro x. Neste caso a chamada da funo ficaria como plot2d(y) e o resultado seria o
mesmo apresentado pela Figura 6.3.
Exemplo 02 (x um vetor e y uma matriz, grficos de sen(x) e cos(x)):
-->clf //limpar a area grafica para se evitar sobreposicao
-->x=0:0.01:2*%pi;//definido valores de x
-->Y=[sin(x)' cos(x)']; //definido a matriz Y com duas colunas
-->plot2d(x,Y) //x vetor e Y matriz com duas colunas

Figura 6.4: Grfico do Exemplo 02


Outra forma de plotar o grfico apresentado pela Figura 6.4 omitindo o parmetro x.
Exemplo 03 (omitindo x)
-->clf //limpar a area grafica para se evitar sobreposicao
-->x=0:0.01:2*%pi;//definido valores de x

-->Y=[sin(x)' cos(x)']; //definido a matriz Y com duas colunas


-->plot2d(Y) //omitindo x

Figura 6.5: Grfico do Exemplo 03


Exemplo 04 (x e y so matrizes)
-->t=0:0.01:2*%pi; //t uma variavel auxiliar
-->X=[t' t'];//criando uma matriz X
-->Y=[cos(t)' sin(t)']; //criando uma matriz Y
-->plot2d(X,Y)
Pode ser observado, no Exemplo 4, que duas curvas so traadas, para cada coluna da matriz
Y, conforme Figura 6.6.

Figura 6.5: Grfico do Exemplo 04


6.2.1 Os atributos do grfico
Ainda seguindo a sntese da funo apresentada na Seo 6.2, plot2d():
plot2d([x],y,<atributos>), nesta Seo sero apresentados alguns atributos (opes) do grfico.

style: especifica o padro (estilo) para cada curva, de acordo com um vetor inteiro positivo ou
negativo, se o valor for positivo, ento a curva ser contnua e o valor tambm ser associado
cor da curva, se negativo, a curva ser traada com marcadores.
A Tabela 02, extrada de (Leite, 2009), apresenta alguns valores para a opo style.
Valor de style
Como a curva traada
1
Cor preta
2
Cor azul marinho
3
Cor verde claro
4
Cor azul claro
5
Cor vermelha
6
Cor fucsia
7
Cor amarela
8
Cor branca
9
Cor azul
0
Marcada com .
-1
Marcada com +
-2
Marcada com x
-3
Marcada com
-4
Marcada com 
-5
Marcada com 
-6
Marcada com
-7
Marcada com
-8
Marcada com
-9
Marcada com
-10
Marcada com *
-11
Marcada com
Tabela 02: Alguns valores para a opo Style
rect: esta opo recebe um vetor que limita os eixos ordenados, recebendo os valores mnimos
e mximos para x e y: [xmin, ymin, xmax, ymax].
logflag: opo utilizada para configurar a escala (linear ou logartmica) dos eixos. Os possveis
valores desta opo so: 'nn' (escala normal e graduao normal), 'nl' (escala normal e
graduao logartmica), 'ln' (escala logartmica e graduao normal) e 'll' (escala logartmica e
graduao logartmica).
frameflag: utilizada para controlar a escala dos eixos ordenados, podendo assumir valores
inteiros de 0 a 8.
axesflag: define como os eixos sero traados. O valor associado a esta opo pode ser de 0 a
5. A Tabela 03 apresenta os possveis valores para axesflag, com suas respectivas descries:
Valor de axesflag
0
1

Forma dos eixos


No so apresentados eixos
So apresentados os eixos e o grfico apresentado dentro de um

2
3
4
5

retngulo
No so apresentados os eixos e o grfico apresentado dentro de
um retngulo
Eixo y representado direita
Intercesso dos eixos centralizada
Intercesso dos eixos centralizada e grfico representado dentro de
um retngulo
Tabela 03: Possveis valores para axesflag

nax: opo utilizada para configurar os nomes e marcas nos eixos ordenados. O valor
associado a esta opo um vetor com quatro inteiros: [nx, Nx, ny, Ny] e deve ser definido
apenas quando axesflag=1. Nx e Ny correspondem ao nmero de marcaes principais (tics)
nos eixos x e y, respectivamente, enquanto que nx e ny correspondem ao nmero de
marcaes secundrias (subtics) nos eixos x e y, respectivamente.
leg: opo que permite definir a legenda do grfico, recebendo, para isso, uma string.
6.2.2 Exemplos
Exemplo 05: traando o grfico da funo f(x)=3x2-5 na cor vermelha:
-->x=-3:0.01:3; //definindo os valores de x
-->y=3*x.^2-5;//atribuindo os valores de y
-->plot2d(x,y,style=5)//cor vermelha style = 5

Figura 6.6: Grfico do Exemplo 05


O Exemplo 05 pode ser modificado utilizando-se a seguinte instruo:
plot2d(x,y,style=[5,-2],rect=[-2 -5 2 10], axesflag=5, leg="y = 3x^2-5")
Os atributos indicam que sero plotados os vetores x e y, curva vermelha e marcada com x
(style=[5,-2]), eixo x limitado de -2 a 2, eixo y limitado de -5 a 10, intercesso dos eixos no
centro do grfico (axesflag=5) e legenda y = 3x^2-5 (leg="y = 3x^2-5"). O resultado
apresentado pela Figura 6.7.

Figura 6.7: Grfico do Exemplo 05 modificado


Exemplo 06: traando as curvas sen(x) e cos(x) em um mesmo grfico.
-->x=-2*%pi:0.1:2*%pi;
-->y=[sin(x)' cos(x)'];
-->clf()
-->plot2d(x,y, style=[1 -1], rect=[-2*%pi -1.5 2*%pi 1.5],axesflag=5, leg = "sen(x)@cos(x)")
-->

Figura 6.8: Grfico do Exemplo 06


Exemplo 07: outro modo para traar as curvas sen(x) e cos(x) em um mesmo grfico
-->x=-2*%pi:0.1:2*%pi;

-->y1= sin(x);
-->y2=cos(x);
-->plot2d(x,y1,-9)
-->plot2d(x,y2,-2)
-->legends(['sen(x)';'cos(x)'],[-9,-2], opt=3)
Neste exemplo foi utilizada a funo legends(), aps a criao do grfico.
legends(['sen(x)';'cos(x)'],[-9,-2], opt=3), em que so apresentadas as legendas para os styles -9
e -2, o parmetro opt=3 indica a posio da legenda. Caso o parmetro opt seja omitido
necessrio clicar na posio da legenda. O resultado deste exemplo apresentado pela Figura
6.9.

Figura 6.9: Grfico do Exemplo 07


Exemplo 08: parametrizao da circunferncia, com grid
-->t=-2*%pi:0.01:2*%pi;
-->plot(cos(t), sin(t), style=5)
-->xgrid

Figura 6.10: Grfico do Exemplo 08

6.3 Outros comandos para grficos


Outros comandos podem ser utilizados para melhor apresentao dos grficos criados
no Scilab. Dentre estes comandos, podem ser citados:
legends: utilizado para definir a legenda do grfico;
xgrid: insere linhas de grade no grfico;
xtitle: utilizado para inserir ttulo no grfico;
titlepage: insere o ttulo na janela grfica;
xlabel, ylabel, zlabel: insere ttulos no respectivos eixos ordenados.
Exemplo 09: funes sen(x) e cos(x).
-->clf
-->x=-2*%pi:0.1:2*%pi;
-->y1= sin(x);
-->y2=cos(x);
-->plot2d(x,y1,-1)
-->plot2d(x,y2,-5)
-->legends(['sen(x)';'cos(x)'],[-1,-5], opt=3)
-->xgrid
-->xtitle("Grafico de sen(x) e cos(x)")

-->xlabel("valores de x")
-->ylabel("valores de y")

Figura 6.11: Grfico do Exemplo 09


Outra funo para criar um esboo de grfico bi-dimensional a funo plot(), com a
qual tambm se pode especificar o tipo de linha e o tipo de marcador.
A Tabela 04 apresenta tipos de linhas que podem ser utilizadas com a funo plot(), enquanto
que a Tabela 05 apresenta os tipos de marcadores de pontos.
Especificador
Estilo de linha
Linha slida (padro)
-Linha tracejada
:
Linha pontilhada
-.
Linha tracejada-pontilhada
None
Nenhuma linha
Tabela 04: Tipos de linhas - funo plot(), (Scilab Group - Manual Scilab)
Especificador
+
o
*
.
x
'square' ou 's'
'diamond' ou 'd'

Tipo de Marca
Sinal de mais
Crculo
Asterisco
Ponto
Cruz
Quadrado
Rombo (diamante)

^
Tringulo para cima
v
Tringulo para baixo
>
Tringulo para direita
<
Tringulo para esquerda
'pentagram'
Estrela de cinco pontas (pentagrama)
'none'
Sem marca padro
Tabela 04: Tipos de marcadores - funo plot(), (Scilab Group - Manual Scilab)
Na funo plot() tambm pode ser inserida uma cor, como por exemplo vermelho (r),
verde (g) e azul (b).
Exemplo 10: grfico com funo plot()
-->x=-2*%pi:0.1:2*%pi;//criacao de x
-->y=sin(x);//fazendo y=x
-->plot(x,y,"ro")//inserido a cor vermelha e o marcador o
-->xlabel("valores de x")
-->ylabel("valores de y")
-->xtitle("sen(x)")

Figura 6.12: Grfico do Exemplo 10


6.3.1 Sub-grficos - funes xsetech() e subplot()
As funes xsetech() e subplot() permitem apresentar mais de um grfico dentro de
uma mesma janela grfica.
Sntese da funo xsetech(): xsetech(wrect,[frect,logflag]), de modo que wrect um
vetor de tamanho 4 que define as coordenadas x e y da subjanela grfica, alm da largura e

altura; frect um vetor de tamanho 4 cuja sntese a mesma da opo do grfico rect,
apresentado na Seo 6.2.1 e logflag uma string de dois caracteres, a qual define a escala
(linear ou logartmica) da escala e dos eixos, podendo receber os mesmos valores indicados na
Seo 6.2.1. Na funo, os parmetros indicados por [] (colchetes) so opcionais e tratam-se
de opes dos sub-grficos, como os apresentados na Seo 6.2.1.
Exemplo 11: sub-grficos com
xsetech([0,0,0.5,0.5]); plot3d() //plotagem de um exemplo de grfico 3D no Scilab
xsetech([0.5,0,0.5,0.5]); plot2d() //plotagem de um exemplo de grfico 2D no Scilab
xsetech([0.5,0.5,0.5,0.5]); grayplot() // plotagem um exemplo da funo grayplot ()
xsetech([0,0.5,0.5,0.5]); histplot()// plotagem de um exemplo da funo histplot()

Figura 6.13: Grfico do Exemplo 11


J a funo subplot() sintetizada como: subplot(m,n,p), em que m, n e p so nmeros
inteiros. Essa funo permite subdividir a janela grfica em uma matriz "m por n", em que p
indica a posio onde ser inserido o sub-grfico, isto , p indica o elemento dessa matriz.
Exemplo 12:
subplot(221); plot3d() //plotagem de um exemplo de grfico 3D no Scilab
subplot(222); plot2d() //plotagem de um exemplo de grfico 2D no Scilab
subplot(223); errbar() // plotagem um exemplo da funo errbar()
subplot(224); grayplot()// plotagem de um exemplo da funo grayplot()

Figura 6.14: Grfico do Exemplo 12

6.4 Grficos 3D - plot3d(), fplot3d()


Uma das funes utilizadas para a criao de grficos tri-dimensionais a funo
plot3d(), o qual permite representar graficamente funes do tipo z=f(x,y). A funo plot3d()
pode ser sintetizada como plot3d(x,y,z,[argumentos]), em que x e y so vetores de dimenso m
e n, respectivamente e z uma matriz de tamanho m por n, sendo que x e y representam os
eixos x e y e z identifica a superfcie. A lista de argumentos da funo plot3d() mais complexa
e no ser detalhada neste texto.
Exemplo 13: grfico da funo z=cos(x)*sen(y), (Motta, 2004)
x = [0:0.1:2*%pi]';
y = x;
z = cos(x) * sin(x');
plot3d(x, x, z)

Figura 6.15: Grfico do Exemplo 13


Outra forma de criar grficos tri-dimensionais definindo-se, primeiramente, a funo
que ser plotada, neste caso aplica-se a funo fplot3d(), a qual permite traar grficos de
superfcies definidas por funes. Para a definio da funo deve ser utilizada a funo deff().
Exemplo 14: grfico da funo f(x,y) = cos(x)*sen(y)
-->deff('z=f(x,y)','z=cos(x)*sin(y)') //funcao definda com strings
-->x=0:0.1:2*%pi; //delimitacao de x
-->y=x;
-->fplot3d(x,y,f) //plotagem de x, y e f
Exemplo 15: grfico do parabolide l
,  = *  +  

-->deff('z=f(x,y)','z=sqrt(x.^2+y.^2)') //funcao definida com strings

-->x=-2:0.1:2; //delimitacao de x
-->y=x;
-->fplot3d(x,y,f) //plotagem de x, y e f

Figura 6.16: Grfico do Exemplo 15

6.5 Curvas de nvel - contour()


A funo contour() utilizada para representar curvas de nvel obtidas por uma curva
3d. Esta funo sintetizada como: contour(x,y,z,nz), em que todos x e y definem os eixos
associados, z define a superfcie e nz define a quantidade de curvas representadas. Como
exemplo, sero representadas curvas de nvel para a funo z=cos(x)*sen(y).
Exemplo 16: curvas de nvel
-->deff('z=f(x,y)','z=cos(x)*sin(y)')//definicao da funcao
-->
-->x=-5:0.1:5;
-->y=x;
-->contour(x,y,f,20) //representado x,y, f(x,y) e 20 curvas de nivel

Figura 6.17: Grfico do Exemplo 16

6.7 Exerccios Propostos


Para os exerccios de 1 a , apresentar o cdigo utilizado e os grficos plotados pelo Scilab.
1- Esboce o grfico para a funo l
= 2   T , limitando o eixo x de -3 a 3.
2- Plote o grfico da funo l
=  3, representando a origem no centro da janela
grfica, no intervalo de -3 a 3. Faa, ainda, uma legenda por meio da opo leg.
3- Plote os grficos das funes l
=  ln
e l
=  , ambos no intervalo de -3 a 3
sendo que, a curva do segundo grfico seja representado na cor vermelha e a origem fique no
centro da janela grfica.
4- No intervalo de -2 a 2, plote as curvas l
= 
e l
= cos
, representando a
origem no centro da janela grfica, limitando o eixo x entre -2 a 2, o eixo y em -1.5 e 1.5,
plote cada curva com um estilo a sua escolha e crie uma legenda.
5- Represente a curva = 5 cos
h ,  = 3sin
h , para t entre -2 e 2. Utilize o comando
xgrid para representar as linhas de grade.
6- Faa o grfico do exerccio 2, utilizando a funo plot(), representando a curva na cor
vermelha e utilizando x para representar os pontos. Utilize o intervalo de -3 a 3, alm de passo
igual a 0,2.
7- Utilize a funo xsetech() para representar os grficos dos exerccios 1, 2, 3 e 5 numa
mesma janela grfica.
8- Represente os grficos dos exerccios 1,2, 3 e 5 numa mesma janela grfica, por meio da
funo subplot().
9- Faa o grfico da funo l
=  , limitando x e y entre -3 e 3.
10- Limite x e y entre -3 e 3 e represente o grfico da funo l
,  = *  +   .

11- Limite o grfico entre -3 e 3 e represente o grfico da funo l


,  = *    .
12- Represente 20 curvas de nvel para a funo l
,  = sen
x cos
y .

Captulo 7 - Fontes externas de


dados
Neste capitulo sero apresentadas algumas formas de obter dados externos no Scilab. Este
captulo til, visto que em muitas situaes dados so coletados e armazenados em arquivos
texto ou em arquivos Excel e, deste modo, os dados no precisam ser redigitados no Scilab.

7.1 Lendo um arquivo texto


Um das funes relacionadas a arquivos de texto a mgetl(), a qual permite ler as
linhas de um arquivo ASCII. A sntese desta funo descrita por mgetl('arquivo'[,m]). Mais
uma vez vale destacar que o parmetro entre colchetes opcional. Nesta sntese, 'arquivo'
armazena a string com o nome do arquivo a ser lido, caso o arquivo no esteja no diretrio de
trabalho, se faz necessrio a digitao de todo o caminho onde o arquivo est armazenado, m
indica o nmero de linhas a serem lidas, tendo como default -1 e, no caso de omisso, este
valor faz que todas as linhas sejam lidas.
Como exemplo, considere os dados apresentados na Figura 7.1, separados por
tabulao e armazenados na pasta de trabalho como "dadosnum.txt".

Figura 7.1: Arquivo de dados


Exemplo da leitura do arquivo:
-->D=mgetl("dadosnum.txt")
D =
!1
!
!3
!
!-2
!
!-4
!
!10
-->

-1
!
4
!
2
!
1
!
20

3 !

10

-2 !

1 !

-6

-3 !

-2 !

Desde modo, foi criada a matriz de strings D. No se pode realizar clculos diretamente
com os valores da matriz criada, visto que os valores armazenados so strings. Uma forma de
importar os dados como nmeros por meio da combinao das funes mgetl() e evstr().
Exemplo: transformando os dados do txt em nmeros no Scilab
-->D=evstr(mgetl("dadosnum.txt"))
D =
1. - 1. 2.
3. 4. 5.
- 2. 2. 1.
- 4. 1. - 6.
10. 20. 1.

2. 3.
10. - 2.
1. 1.
3. - 3.
2. - 2.

-->
Deste modo, podem ser realizados clculos, como a determinao do determinante da matriz
D. Pode-se observar, ainda a ausncia do smbolo ! (ponto de exclamao).
-->D=evstr(mgetl("dadosnum.txt"))
D =
1. - 1. 2.
3. 4. 5.
- 2. 2. 1.
- 4. 1. - 6.
10. 20. 1.

2. 3.
10. - 2.
1. 1.
3. - 3.
2. - 2.

-->
-->det(D)
ans =
15431.
-->inv(D)
ans =
0.1093902
- 0.0270883
- 0.1723803
0.1277299
0.3176074

- 0.0000648 - 0.2732163
- 0.0177565 0.1387467
0.0688225 0.1556607
0.0550191 - 0.0394012
- 0.0884583 0.0598147

-->D'
ans =
1. 3. - 2. - 4. 10.

- 0.0036291 0.0329855
0.0056380 0.0380403
- 0.1459400 - 0.0306526
0.0810706 - 0.0047307
0.0463353 0.0252738

- 1.
2.
2.
3.

4.
5.
10.
- 2.

2. 1.
1. - 6.
1. 3.
1. - 3.

20.
1.
2.
- 2.

7.2 Lendo um arquivo Excel


Arquivos do Microsoft Excel podem ser acessados e lidos por meio do Scilab. Para
acessar os dados de um arquivo Excel, utilizada a funo xls_open() enquanto que, para ler
os dados gravados em Excel, utilizada a funo xls_read().
A funo xls_open() sintetizada como:
[fd,SST,Sheetnames,Sheetpos] = xls_open(file_path)
em que, de acordo com (Scilab Group - Manual Scilab):
file_path : string que armazena o endereo do arquivo Excel;
fd: nmero que representa a unidade lgica do fluxo de dados do Excel;
SST: vetor de todos os strings que aparece na planilha do Excel;
Sheetnames: vetor de strings, os nomes das planilhas;
Sheetpos: vetor de nmeros que apresenta as posies dos incios das planilhas no fluxo de
dados do Excel.
J a funo xls_read() sintetizada como:
[Value,TextInd] = xls_read(fd,Sheetpos)
em que, de acordo com (Scilab Group - Manual Scilab):
fd: um nmero que representa a unidade lgica do fluxo de dados do Excel retornado por
xls_open();
Sheetpos: nmero que representa a posio do incio da folha no fluxo de dados Excel. Esta
posio uma daquelas retornadas por xls_open();
Value: matriz numrica que representa os dados numricos encontrados na planilha. A clula
sem valores numricos representada por valores NaN;
TextInd: uma matriz de ndices com o mesmo tamanho que Value. Os ndices zeros indicam
que no existem strings na clula do arquivo Excel correspondente. Um ndice positivo i
aponta para a string SST(i) onde SST dado por xls_open().
As descries acima foram extradas de (Scilab Group - Manual Scilab) e ser
apresentado um exemplo com o objetivo de simplificar a leitura de dados de planilhas Excel.
Primeiramente ser criada uma planilha, salva com extenso .xls e armazenada na
pasta de trabalho do Scilab.Esta planilha ter o nome de dados.xls, a qual contm alguns
valores numricos.

Figura 7.2: Arquivos de dados em formato Excel


O prximo passo utilizar a sequncia de comandos:
-->[fd,SST,Sheetnames,Sheetpos]=xls_open('dados.xls')
Sheetpos =
12034. 12854. 13244.
Sheetnames =
!Plan1 Plan2 Plan3 !
SST =
!X Y !
fd =
1.
Aps abrir a planilha, preciso ler os dados da mesma. Para tal, aplica-se a sequncia
de comandos:
-->[Value,TextInd]=xls_read(fd, Sheetpos)
TextInd =
1. 2.
0. 0.
0. 0.
0. 0.
0. 0.
0. 0.
0. 0.
0. 0.
0. 0.
Value =

Nan Nan
0. 0.
1. 3.
2. 5.
3. 9.
4. 12.
5. 15.
6. 19.
7. 20.
Pode ser observado que os valores armazenados na planilha como textos ficam
representados como Nan (Not a number).
Os dados da planilha foram armazenados na varivel Value:
-->Value
Value =

Nan Nan
0.

0.

1.

3.

2.

5.

3.

9.

4.

12.

5.

15.

6.

19.

7.

20.

-->A=Value
A =

Nan Nan
0.

0.

1.

3.

2.

5.

3.

9.

4.

12.

5.

15.

6.

19.

7.

20.

-->A(2:5,:)
ans =

0. 0.
1. 3.
2. 5.
3. 9.

Captulo 8 - Introduo
programao no Scilab
A implementao no Scilab apresenta maior simplicidade em relao aos compiladores
convencionais de linguagens de programao como C e Java, por exemplo. No entanto, o
Scilab um interpretador de comandos e os programas escritos no Scilab so executados mais
lentamente quando comparados aos programas escritos nestes compiladores convencionais
para outras linguagens. Um fato que torna o Scilab mais simples no haver necessidade de
declarar variveis, alm disso escrever cdigos no Scilab bastante intuitivo. Nesta Seo
sero apresentados alguns comandos bsicos para programao no Scilab.

8.1 Definindo Scripts


Na Seo 2.4.2 foi apresentado o comando diary, o qual pode ser utilizado para
armazenar uma sequncia de comandos digitados no prompt de comandos. Nesta Seo ser
apresentado um modo de gravar um arquivo de scripts, o qual consiste numa sequncia de
comandos que o usurio digitaria no prompt de comandos.
Arquivos de Scripts so arquivos de texto, armazenados em disco com extenso .sce.
Para simplificar a execuo destes arquivos, recomendvel que os mesmos sejam
armazenados no diretrio de trabalho.
Para criar o arquivo de scripts necessrio utilizar a funo exec(), a qual sintetizada
como: exec("nome do arquivo de scripts.sce") ou ento possvel abrir o editor SciNotes,
digitar a sequncia de comandos e o gravar com o nome desejado.
Para exemplificar ser escrito um arquivo de script para calcular a derivada da funo
l
=  2 em um ponto a, por meio da definio:
l
2 + l
2
l m
=

No caso, como no possvel implementar h tendendo a zero, ser atribudo um valor


de h "prximo" de zero.
Para abrir o editor SciNotes preciso clicar em Aplicativos e depois em SciNotes, o prximo
passo digitar os comandos, em um novo documento do editor SciNotes:
//calculo da derivada em um ponto
//funcao f(x)=x^3-2x
a=2;
h=10^(-6);
fd=((a+h)^3-2*(a+h)-a^3+2*a)/h
Novamente as duas barras (//) indicam comentrios, os quais so ignorados pelo
interpretador de comandos e o ponto e vrgula (;) indica que o resultado ser omitido. O
arquivo escrito no exemplo acima foi salvo com o nome "ex_derivada.sce".
Para executar o script, basta utilizar o comando exec "nome do arquivo de scripts.sce".
O exemplo anterior ser executado como:

-->exec ex_derivada.sce
-->//calculo da derivada em um ponto
-->//funcao f(x)=x^3-2x
-->a=2;
-->h=10^(-6);
-->fd=((a+h)^3-2*(a+h)-a^3+2*a)/h
fd =
10.000006

8.2 Comandos de interao com o usurio - input e disp


Nesta Seo sero apresentados comandos para leitura de dados informados pelo
usurio e sada de dados.
O comando input aplicado entrada de dados pelo usurios e sua sntese dada por
<varive> = input("texto"). No exemplo apresentado na Seo 8.1, em vez de fixar o valor da
varivel a, a mesma pode ser inserida pelo usurio durante a execuo do script, por meio do
comando:
a=input("Digite o valor de a:")
No Exemplo, o valor de a numrico. Para o caso da entrada ser um texto, preciso
identificar que o tipo da varivel a ser recebida um string, por meio do comando:
<varivel>=input("texto","string").
Para sada de dados, sabe-se que, quando no se utiliza ; (ponto e vrgula) ao final de
uma instruo, o resultado apresentado. Porm o comando disp especfico para sada de
dados e permite uma melhor interao com o usurio. A sntese do comando disp dada por
disp("texto"+string(varivel)) ou simplesmente disp(varivel) para apresentar somente o valor
armazenado na varivel. Para apresentar apenas o valor de fd do exemplo apresentado na
Seo 8.1, basta utilizar:
disp(fd)
para concatenar um texto ao valor da varivel fd, preciso utilizar:
disp("A derivade de f(x) e x=a : "+string(a))
O script da Seo 8.1 ser reescrito, utilizando as funes input() e disp().
//calculo da derivada em um ponto a
//funcao f(x)=x^3-2x
a=input("Digite o valor de a: ")
h=10^(-6);
fd=((a+h)^3-2*(a+h)-a^3+2*a)/h;

disp("O valor da derivada de f(x) em x=a : "+string(a))

Aps a chamada deste scritp, a execuo far uma pausa antes de receber o valor da varivel
a:
-->exec ex_derivada.sce
-->//calculo da derivada em um ponto a
-->//funcao f(x)=x^3-2x
-->a=input("Digite o valor de a: ")
Digite o valor de a: 5
a =
5.
-->h=10^(-6);
-->fd=((a+h)^3-2*(a+h)-a^3+2*a)/h;
-->disp("O valor da derivada de f(x) em x=a : "+string(a))
O valor da derivada de f(x) em x=a : 5

8.3 Definindo funes


8.3.1 Definindo funes por meio de arquivos de texto ou comandos no prompt
A criao de um funo no Scilab se d por meio de um arquivo de texto, com
extenso .sci, o qual obedece seguinte estrutura:
function [y1, y2, ..., yn]=func(x1, x2, ..., xn)
instrues
endfunction
Em que func o nome da funo, x1, x2, ..., xn so os parmetros inseridos pelo usurio durante
a chamada da funo e y1, y2, ..., yn so as variveis de sada. Como primeiro exemplo de uma
funo, ser criada a funo de nome fquad, a qual recebe um nmero real x como parmetro
e retorna o valor f(x) para l
=  2 . O primeiro passo abrir o editor SciNotes e inserir
os seguintes comandos:
//Primeira funcao no Scilab
function y=fquad(x);
y=x^3-2*x
endfunction
Em seguida, o arquivo de textos salvo com extenso .sci (e no .sce, como os arquivos de
scripts). recomendvel salvar a funo no diretrio de trabalho e, para a mesma possa ser
utilizada, necessrio carreg-la no ambiente Scilab por meio do comando exec, o qual segue
a mesma estrutura apresentada na Seo 8.1.

-->exec('fquad.sci')
-->//Primeira funcao no Scilab
-->function y=fquad(x);
--> y=x^3-2*x
-->endfunction

-->fquad(2)
ans =
4.
-->fquad(5)
ans =
115.
-->fquad(2)
ans =
4.
-->fquad(0)
ans =
0.
-->fquad(-1)
ans =
1.
-->
Outra forma de definir uma funo pelo prprio prompt de comandos, digitando a
mesma sequncia de cdigos. No entanto, criando o arquivo de funes, a mesma fica
armazenada e pode ser alterada, bem como ser utilizada com maior facilidade dentro de
outras funes.
8.3.2 Definindo funes por meio do comando deff
Outra forma de definir uma funo por meio do comando deff. A sntese da definio
de funo pelo comando deff a seguinte:
deff([y1, y2, ..., yn]=func(x1, x2, ..., xn),'instruo1, ..., instruon')
A mesma funo da Seo 8.2 pode ser definida, por meio do comando deff, da
seguinte maneira:
deff('y=fquad(x)',' y=x^3-2*x')

Aps definir a funo, basta fazer a chamada da mesma para que possa ser utilizada
normalmente, passando um valor de x como parmetro.
-->fquad(0)
ans =
0.
-->fquad(2)
ans =
4.
-->fquad(3)
ans =
21.

O exemplo do clculo da derivada num ponto, realizado para a funo l


=  2
nas Sees 8.1 e 8.2 ser agora apresentando por meio de uma funo, a qual receber o
valor de a como um parmetro e ter a funo fquad(x) (apresentada na Seo 8.3.1) sendo
chamada internamente.

function fd=derivadaa(a) //funcao para calculada a derivada em a de fquad


h=10^(-6); //definicao de um valor 'pequeno' para h
exec 'fquad.sci';//instrucao para carregar fquad.sci
fd=(fquad(a+h)-fquad(a))/h
endfunction
Em seguida, basta carregar a funo derivadaa(a) por meio do comando exec, no prompt de
comandos.
-->exec 'derivadaa.sci'

-->function fd = derivadaa(a) //funcao para calculada a derivada em a de fquad


--> h=10^(-6); //definicao de um valor 'pequeno' para h
--> exec 'fquad.sci';//instrucao para carregar fquad.sci
--> fd=(fquad(a+h)-fquad(a))/h
-->endfunction
Aviso: redefinindo a funo: derivadaa
-->derivadaa(5) //chamada da funcao para a=5
-->//Primeira funcao no Scilab
-->function y=fquad(x);
--> y=x^3-2*x
-->endfunction
ans =

. Utilize funcprot(0) para evitar esta mensagem

73.000015
-->derivadaa(2) //chamada da funcao para a=2
-->//Primeira funcao no Scilab
-->function y=fquad(x);
--> y=x^3-2*x
-->endfunction
ans =
10.000006
OBS: As funes criadas esto sendo carregadas no prompt por meio do comando exec. No
entanto, muito comum encontrar, principalmente em textos anteriores verso 5.3 do
Scilab, o comando getf em vez do comando exec para carregar funes. O comando getf
deixou de existir no Scilab a partir da verso 5.3.

8.4 Comandos iterativos


Nesta Seo sero apresentadas as estruturas bsicas de repetio, for e while.
8.4.1 O Loop for
O comando for apresenta a seguinte estrutura bsica:
for varivel = expreso
instrues
end
Em que expresso representa uma matriz ou um vetor linha e varivel assume os
valores contidos neste vetor ou de cada coluna da matriz, no caso de expresso ser uma
matriz. Normalmente, expresso representa um vetor linha. Para exemplificar, ser
implementada uma funo que soma todas as entradas de um vetor x. Essa funo ser
armazenada em um arquivo texto com o nome de somarvetor.sci.
function y=somarvetor(x)
//vetor x e o parametro dessa funcao
n=length(x); //tamanho do vetor x
y=0; //zerar variavel y
for i = 1:5 //para i = 1 ate 5
y=x(i)+y;
end
endfunction
Os prximos comandos so digitados no prompt, a fim de criar o vetor x, parmetro da
funo, carregar a funo no ambiente e testar a funo implementada.
-->x= [1 5 -5 6 7]
x =

1. 5. - 5. 6. 7.
-->exec 'somarvetor.sci'
-->function y = somarvetor(x)
--> //vetor x e o parametro dessa funcao
--> n=length(x); //tamanho do vetor x
--> y=0; //zerar variavel y
--> for i = 1:5 //para i = 1 ate 5
-->
y=x(i)+y;
--> end
-->endfunction

-->somarvetor(x)
ans =
14.
O Loop for pode ser alterado, de modo que o incremento seja diferente de 1 ou at
mesmo negativo.
Por exemplo, caso seja digitado for i = 0:2:10, o for ser incremente "de 2 em 2" de 0
at 10. Caso seja digitado for i=10:-1:1, o Loop comear do ndice 10 e ser finalizado em 1 e,
a cada iterao, ser decrementado uma unidade.
8.4.2 O Loop While
O Loop condicional While apresenta a seguinte forma geral:
while condio
instrues
end
Este loop realiza uma sequncia de instrues enquanto a condio estiver sendo
satisfeita. As condies geralmente incluem comparaes, os quais so feitos por meio dos
operadores apresentados na Tabela 5.
Operador
Significado
==
Igual a
<
Menor que
>
Maior que
<=
Menor ou igual a
>=
Maior ou igual a
<> ou ~=
Diferente de
Tabela 5: Operadores condicionais
Para exemplificar, o exemplo apresentado na Seo 8.4.1 (somar os elementos de um vetor),
utilizando o Loop While em vez do Loop for. importante ressaltar que isto apenas um
exemplo, visto que na situao (somar os elementos de um vetor) o Loop for mais
recomendvel que o Loop While, pois a cada iterao o Loop While faz uma comparao,
efetuando assim uma instruo a mais a cada iterao em relao ao Loop for.
function y=somarvetor(x)

//Funcao somar vetor modificada


//vetor x e o parametro dessa funcao
n=length(x); //tamanho do vetor x
y=0; //zerar variavel y
i=1; //iniciando a variavel i (contador)
while i < 6
y=x(i)+y;
i=i+1;
end
endfunction
Pode ser observado que obtido o mesmo resultado esperado.
-->x= [1 5 -5 6 7]
x =
1. 5. - 5. 6. 7.
-->exec somarvetor.sci
-->function y = somarvetor(x)
--> //vetor x e o parametro dessa funcao
--> n=length(x); //tamanho do vetor x
--> y=0; //zerar variavel y
--> i=1; //iniciando a variavel i (contador)
--> while i < 6
-->
y=x(i)+y;
-->
i=i+1;
--> end
-->endfunction
Aviso: redefinindo a funo: somarvetor

. Utilize funcprot(0) para evitar esta mensagem

-->somarvetor(x)
ans =
14.

8.5 Estruturas condicionais


Nesta Seo sero apresentados os comandos if-then-else e o comando select-case.
8.5.1 Comando condicional if-then-else
O comando if-then-else pode ser utilizado em duas formas, de acordo com o nmero
de condies. Quando apenas uma condio for testada, a estrutura bsica a seguinte:
if condio then
instrues se condio for verdadeira (true)

else
instrues se condio for falsa (false)
end
Duas ou mais condies podem ser testadas por meio da instrues elseif, de acordo
com a estrutura:
if condio_1 then
instrues se condio_1 for verdadeira
elseif condio_2
instrues se condio_2 for verdadeira
elseif condio_3
instrues se condio_3 for verdadeira
...
elseif condio_n
instrues se condio_n for verdadeira
else
instrues se nenhuma das condies for verdadeira
end
Os operadores condicionais so os mesmos apresentados na Tabela 5.
O exemplo abaixo testa se um nmero par e retorna 0, se no o nmero for mpar, ou 1 se o
nmero for par.
function y=epar(x)
r=modulo(x,2); //r e o resto da diviso de x por 2
if r==0 then
y=1
else
y=0
end
endfunction
Abaixo a execuo no prompt de comandos:
-->exec 'epar.sci'

-->function y = epar(x)
--> r=modulo(x,2);
--> if r==0 then
-->

y=1

--> else
-->

y=0

--> end
-->endfunction

-->epar(5)
ans =
0.
-->epar(2)
ans =
1.
-->epar(106)
ans =
1.
-->epar(205)
ans =
0.
Quando existirem mais de uma condio, a instruo elseif dever ser utilizada,
conforme o exemplo (multiiplode2ou3()), que verifica se um nmero mltiplo de 2 ou de 3.
function y=multiplode2ou3(n)
if modulo(n,2)==0 then
y ='O numero '+string(n)+' e multiplo de 2'
elseif modulo(n,3)==0
y = 'O numero '+string(n)+' e multiplo de 3'
else
y = 'O numero '+string(n)+' nao e multiplo de 2 ou 3'
end
endfunction
Executando a funo multiplode2ou3() no prompt de comandos:
-->exec 'multiplode2ou3.sci'
-->function y = multiplode2ou3(n)
--> if modulo(n,2)==0 then
-->
y ='O numero '+string(n)+' e multiplo de 2'
--> elseif modulo(n,3)==0
-->
y = 'O numero '+string(n)+' e multiplo de 3'
--> else
-->
y = 'O numero '+string(n)+' nao e multiplo de 2 ou 3'
--> end
-->endfunction

-->multiplode2ou3(10)
ans =
O numero 10 e multiplo de 2
-->multiplode2ou3(6)
ans =
O numero 6 e multiplo de 2
-->multiplode2ou3(15)
ans =
O numero 15 e multiplo de 3
Pode ser observado, no exemplo, que ao utilizar a funo multiplode2ou3() com parmetro 6,
o resultado apresentado identificou apenas a mensagem dizendo que o nmero mltiplo de
2. Isto ocorreu porque a condio que verifica se o nmero mltiplo de 2 executada antes
da condio que verifica se o nmero mltiplo de 2. Para melhor definio das condies, os
operadores lgicos E e OU podem ser utilizados. No exemplo apresentado em seguida, a
funo verifica se o nmero mltiplo apenas de 2, apenas de 3 ou se mltiplo de 2 e 3 ao
mesmo tempo. Os operadores lgicos utilizados so & (E) e | (OU), no exemplo foi utilizado
apenas o operador &
function y=multiplode2ou3(n)
if (modulo(n,2)==0) & (modulo(n,3)<>0) then
y ='O numero '+string(n)+' e multiplo de 2'
elseif (modulo(n,3)==0) & (modulo(n,2)<>0)
y = 'O numero '+string(n)+' e multiplo de 3'
elseif (modulo(n,3)==0) & (modulo(n,2)<>0)
y = 'O numero '+string(n)+' e multiplo de 2 e 3'
else
y = 'O numero '+string(n)+' nao e multiplo de 2 ou 3'
end
endfunction
Executando a funo no prompt com de comandos:
-->exec 'multiplode2ou3.sci'
-->function y = multiplode2ou3(n)
--> if (modulo(n,2)==0) & (modulo(n,3)<>0) then
-->
y ='O numero '+string(n)+' e multiplo de 2'
--> elseif (modulo(n,3)==0) & (modulo(n,2)<>0)
-->
y = 'O numero '+string(n)+' e multiplo de 3'
--> elseif (modulo(n,3)==0) & (modulo(n,2)<>0)
-->
y = 'O numero '+string(n)+' e multiplo de 2 e 3'
--> else
-->
y = 'O numero '+string(n)+' nao e multiplo de 2 ou 3'

--> end
-->endfunction

-->multiplode2ou3(6)
ans =
O numero 6 nao e multiplo de 2 ou 3
-->multiplode2ou3(4)
ans =
O numero 4 e multiplo de 2
-->multiplode2ou3(21)
ans =
O numero 21 e multiplo de 3
Caso seja utilizada a instruo condicional:
if (modulo(n,2)==0) | (modulo(n,3)==0)
O resultado seria verdadeiro apenas se o nmero n fosse nmero de 2 e 3 ao mesmo tempo.
8.5.2 Comando condicional select-case
O comando select-case utilizado para tesar um condio e retornar resultados de
acordo com o valor armazenado (um resultado diferente para cada caso esperado).
A estrutura bsica do selec-case apresentada a seguir:
Select varivel
case expresso_1
instrues
case expreso_2
instrues
...
case expresso_n
instrues
else
instrues para o caso da nenhuma das expresses anteriores for verdadeira
end
Foi implementado um exemplo que recebe um nmero e o multiplica por 20 (se
parmetro for igual a 2) 10 (se o parmetro for igual a 1), em caso contrrio o resultado ser
0.
function y=exselectcase(n)
select n
case 2
y = 20*n

case 1
y = 10*n
else
y=0
end
endfunction
Executando a funo de exemplo no prompt de comandos:
-->exec 'exselectcase.sci'
-->function y = exselectcase(n)
--> select n
--> case 2
-->
y = 20*n
--> case 1
-->
y = 10*n
--> else
-->
y=0
--> end
-->endfunction

-->exselectcase(1)
ans =
10.
-->exselectcase(2)
ans =
40.
-->exselectcase(3)
ans =
0.

8.6 Exerccios Propostos


1- Escreva um script que retorne a mensagem "Oi mundo!".
2- Escreva um script que receba, por meio do comando input, um nmero real x e calcule o
valor de f(x) para f(x)=5x2-3x+1. Obs.: utilize o comando deff para definir internamente a
funo e exiba a sada por meio do comando disp.
3- Refaa o exerccio 2, porm defina uma funo que recebe um parmetro x e calcula f(x).
1- Dado uma lista de nmeros inteiros n, implemente uma funo para cada caso:
a) determinar o maior valor da lista;
b) determinar o menor valor da lista;
c) determinar a mdia aritmtica da lista;

d) ordene, por meio de comparaes, a lista n.


4- Implemente uma funo que recebe um valor matricial como parmetro e retorna se essa
matriz quadrada.
5- Implemente uma funo que recebe uma matriz quadrada (crie um controle no algoritmo
para testar se a matriz quadrada) e retorne 1, se no existir elemento nulo na diagonal
principal ou 0 (se existir algum elemento nulo na diagonal principal).
6) Implemente um algoritmo que recebe uma matriz quadrada (crie um controle no algoritmo
para testa se a mesma quadrada) e que transforme a matriz em uma matriz diagonal
superior utilizando as operaes bsicas do mtodo de pivoteamento de GAUSS, que so:
trocar duas linhas, multiplicar uma linha por um escalar no nulo e trocar uma linha pela soma
desta com outra multiplicada por um escalar no nulo.

Bibliografia
Leite, M. (2009). SciLab: Uma Abordagem Prtica e Didtica. Rio de Janeiro: Cincia Moderna.
Motta, P. S. (2004). Introduo ao Scilab Verso 3.0. Natal, RN: Universidade Federal do Rio
Grande do Norte.
Ruggiero, M., & Lopes, V. (2011). Clculo Numrico: aspectos tericos e computacionais. So
Paulo: Pearson.
Santos, R. J. (2010). Um Curso de Geometria Analtica e lgebra Linear. Belo Horizonte: UFMG.
Scilab Group - Manual Scilab. (s.d.). Acesso em 28/12/2013 de dezembro de 2013, disponvel
em www.scilab.org/download/5.2.0/manual_scilab-5.2.0_pt_BR.pdf.

Вам также может понравиться