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
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.
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:
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
%toolboxes
utilizando
27 elementos de um total de
e
4 variveis de um total de
767.
%toolboxes_dir
%helps
999999.
%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).
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.
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:
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.
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.
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.
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:
.
.
!"
#"
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
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.
-->1.2*(-3.4)*(-5.9)*6.8
ans =
163.6896
-->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.
-->
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.
-->
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.
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.
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
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
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.
-->
-->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.
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.
2. 4. - 2.
- 8. 10. 12.
-->A/2
ans =
0.5 1. - 0.5
- 2. 2.5 3.
-->
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.
-->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.
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 $ .
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.
2.
3.
0.
0.
- 1.
- 1.
5.
0.
4.
7.
1.
2.
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
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.
- 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.
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
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
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
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:
1+s
2 -1+s
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.
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(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.
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.
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):
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
Captulo 5 - Polinmios
Este Captulo apresenta o estudo prtico sobre polinmios algbricos no Scilab.
5.1 Definies
q
= 3 s 2 + 3 + 1, polinmio de grau 7.
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.
Captulo 6 - Grficos
Esta Seo apresenta os comandos para criar grficos bi e tri-dimensionais no Scilab.
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
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
-->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.
-->xlabel("valores de x")
-->ylabel("valores de y")
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)")
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()
-->x=-2:0.1:2; //delimitacao de x
-->y=x;
-->fplot3d(x,y,f) //plotagem de x, y e f
-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.
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.
-->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
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
-->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.
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.
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)
-->somarvetor(x)
ans =
14.
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.
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.