Sei sulla pagina 1di 48

Curso de

Scilab
Nvel Bsico ao
Intermedirio
Autores: Reviso:
Daniela Josepetti Gabriel Mathews
Mariana Lopes Marco Andres Araujo
Nicole Fernanda Hanna Galassi
Vinicius Michelon
Wellick Almeida
ndice

1. Introduo..............................................................................3
2. Interface Grfica....................................................................4
2.1. Interface inicial................................................................4
2.2. Variveis especiais.........................................................7

3. Operaes bsicas................................................................9

4. Vetores, matrizes e listas.......................................................10


4.1. Vetores......................................................................10
4.2. Matrizes.....................................................................12
4.3. Definio de listas.....................................................19
4.4. Insero de elementos na lista................................19
4.5. Sublistas....................................................................19
4.6. Listas tipadas.............................................................20

5. Grficos.................................................................................21
5.1. Grficos 2d................................................................21
5.2. Grficos 3d................................................................22
5.3. Campo Vetorial..........................................................23
5.4. Mudana de cores, ttulo de eixos e salvar
imagens..24

6. Funes, diferenciao e integrao.................................25


6.1. Funes in-line.........................................................25
6.2. Funes on-line........................................................25
6.3. Tabela de funes.....................................................26
6.4. Diferenciao.............................................................26
6.5. Integrao...................................................................2
7
6.6. Equaes diferencias...............................................27

7. Polinmios e interpolao......................................................29
7.1. Polinmios.................................................................29
7.2. Operaes com polinmios.......................................29
7.3. Derivao de polinmios..........................................30
7.4. Interpolao...............................................................30
7.5. Interpolaes Lineares.............................................30

Curso de Scilab PET Engenharia Qumica Unicamp 1


7.6. Interpolaes por Spline cbica...............................31
7.7. Extrapolao..............................................................31

8. Introduo programao....................................................32
8.1. Introduo..................................................................32
8.2. Funo printf.............................................................32
8.3. Funo input .............................................................34
8.4. Funo if-end.............................................................35
8.5. Funo if-else-end.....................................................36
8.6. Funo for .................................................................37
8.7. Funo while..............................................................37
8.8. Vetor..........................................................................40
8.9. Matriz.........................................................................41

9. Exerccios...............................................................................43

10. Referncias..........................................................................47

Curso de Scilab PET Engenharia Qumica Unicamp 2


1. Introduo
O Scilab foi desenvolvido em 1990 por um grupo de pesquisadores do
INRIA Institut de Recherche em Informatique et en Automatique e do ENPC
cole Nationale des Ponts el Chausses, ele um ambiente utilizado no
desenvolvimento de programas para a resoluo de problemas numricos.

Semelhante ao Matlab, o Scilab possui a vantagem de ser um free


software (gratuito) e tambm open source software (fornecido com o cdigo
fonte), com distribuies pr-compiladas para vrios sistemas operacionais
(Linux/GNU, Windows XP, Vista, 7, 8 e Mac OS X).

As principais ferramentas desse ambiente de programao numrica


so2:
lgebra Linear (inclusive matrizes esparsas);
Polinmios e funes racionais;
Integrao numrica;
Mtodos no lineares Otimizao e integradores de EDOs;
Processamento de Sinais;
Controle;
Estatstica;
Grcos e animao;
Grafos e redes;
Paralelismo PVM;
Interface com o Computer Algebra Maple;
Interface com Fortran, C, C++, Java;
Alm dos toolboxes desenvolvidos pelo grupo Scilab, esto disponveis
outros complementares, igualmente gratuitos, como o ANN (Artificial
Neural Network), o FISLAB (Fuzzy Logic Inference) e o FRACLAB
(Fractal, Multifractal and Wavelet Analisys).

Curso de Scilab PET Engenharia Qumica Unicamp 3


2. Interface grfica
2.1. Interface inicial
Durante a execuo do Scilab, vrias janelas podem ser utilizadas, a janela
de trabalho do Scilab na verso 5.4.1 se apresenta na forma da figura 01:

Figura 2.1.1: Janela de trabalho do Scilab na verso 5.4.1.

Podemos observar o prompt inicial, representado pelo smbolo -->, que faz
a marcao da linha de comando e o cursor, ao lado do prompt. Nesse espao,
podem ser realizados clculos e compilados programas sem salvar alteraes.
Ainda na tela inicial esto presentes os menus drop down com cinco opes:
Arquivo, Editar, Controle, Aplicativos e ?.

Cada menu possui seus sub-menus, valendo ressaltar:


Arquivo:
Executar: executa o contedo de arquivos (roda o programa
implementado);
Abrir um arquivo: abre o arquivo do seu programa no editor de texto do
Scilab;
Carregar ambiente: carrega ambiente Scilab j existente;
Salvar ambiente: arquiva ambiente atual do Scilab;
Alterar o diretrio atual: muda o diretrio em que o Scilab foi aberto para o
diretrio do Arquivo (programa);
Exibir o diretrio atual;
Configurao de pgina;
Imprimir;
Sair.

Editar: Comandos semelhantes ao editor de texto do Microsoft Ofce ou


Open Ofce (Recortar Copiar, Colar, Esvaziar a rea de transferncia, Selecionar

Curso de Scilab PET Engenharia Qumica Unicamp 4


tudo, Mostrar/Esconder barra de ferramentas, Limpar histrico, Limpar o Console,
Preferncias.)

Controle: A utilidade dos dois primeiros itens pode ser observada abaixo:
--> //pressione Ctrl-c e <enter>
-1-> //leva ao prompt de 1o. nivel
-1-> //pressione Crtl-c e <enter>
-2-> //leva ao prompt de 2o. nivel
-2->resume //retorna ao prompt de 1o. nivel
-1-> resume //retorna ao prompt inicial
--> //Ctrl-c e <enter>
-1-> // Ctrl-c e <enter>
-2->abort //retorna ao prompt inicial
-->
Retorna: continua a execuo aps uma pause ter sido dada atravs de
um comando em uma funo ou atravs de Stop ou Ctrl-c;
Abortar: aborta a execuo aps uma ou vrias pause, retornando ao
prompt inicial;
Interromper: interrompe a execuo do Scilab e entra em modo pause.
No prompt, equivale a um Ctrl-c.

Aplicativos:
Scinotes: carrega o editor de textos do Scilab onde podem ser criados scripts de
programas e funes;

Figura 2.1.2: Primeiro passo para a programao.

Este cone abre uma janela onde ser inserida a programao.

Figura 2.1.3: Janela onde ser inserida a programao.

Curso de Scilab PET Engenharia Qumica Unicamp 5


. XCos: abre um ambiente para desenvolvimento de diagramas de blocos e
interfaces grficas segundo a imagem abaixo:

Figura 2.1.2: Interface grfica do aplicativo Xcos.

Tradutor de Matlab para Scilab: converte arquivos e diretrios de Matlab


para Scilab;
Gerenciador de Mdulos ATOMS: ATOMS( de AutomaTic modules
Management for Scilab), permite que o usurio possa baixar, instalar e
atualizar de forma automtica os mdulos externos que o mesmo deseje
utilizar com o programa;
Navegador de variveis: exibe o formato das variveis no Scilab;
Histrico de comandos: grava o histrico de comandos executados no
prompt;
Navegador de arquivos.

?: Navegador de Ajuda: exibe o diretrio-raiz de ajuda do Scilab, com


opo de busca. Pode tambm ser acessado atravs da digitao do comando
help no prompt ou atravs da tecla F1. Na figura abaixo, verifica o navegador de
ajuda.

Figura 2.1.3: Interface do navegador de ajuda.

Curso de Scilab PET Engenharia Qumica Unicamp 6


Demonstraes do Scilab: exibe janela com demonstraes de comandos
do Scilab.
Links da Web: Links de interesse para uso do Scilab.
Scilab Entreprises
Sobre Scilab

2.2. Variveis especiais


Existem variveis que assumem valores j definidos no Scilab. Elas podem
ser vistas atravs do comando who. Essas variveis so protegidas e no podem
ser apagadas. Algumas destas variveis so pr-xadas com o caractere %.
%i representa 1
%e representa a constante de Euler
%pi representa a constante
%s representa o polinmio de 1 grau s
%z representa o polinmio de 1 grau z
%eps uma medida de preciso da mquina
%inf representa
%nan representa o objeto Not a Number
%t (ou %T) representa a varivel booleana verdadeiro
%f (ou %F) representa a varivel boolena falso
Na imagem a seguir, imagem 2.2.1, mostra a rea de trabalho do Scilab
com a execuo do comando who.

Figura 2.2.1: Variveis especiais.

Temos mais duas importantes variveis: as variveis de localizao de


diretrios SCI e PWD.
SCI: diretrio onde o Scilab foi instalado.

Curso de Scilab PET Engenharia Qumica Unicamp 7


PWD: diretrio onde o Scilab foi lanado, isto , de onde seu script est
rodando.

Todas as variveis criadas durante os trabalhos no ambiente podem ser


armazenadas em um arquivo. O comando save usado para tal, com a seguinte
sintaxe:
save(nome_do_arquivo.dat,variveis)

Para recuperar os valores das variveis, usa-se o comando load e o


comando clear usado para limpar variveis no protegidas. O comando clc limpa
toda janela de trabalho.

Curso de Scilab PET Engenharia Qumica Unicamp 8


3. Operaes Bsicas
O Scilab tem como principal utilidade a resoluo de problemas numricos.
A interao do usurio com o Scilab pode ocorrer de duas formas distintas:
Comandos so digitados diretamente no prompt do Scilab. Ao apertar-se a
tecla enter, os comandos digitados so interpretados e imediatamente
executados. Neste modo de utilizao, Scilab funciona como uma
sosticada e poderosa calculadora.
Um conjunto de comandos digitado em um arquivo texto, o SciNotes. Este
arquivo, em seguida, levado para o ambiente Scilab e executado. Neste
modo, o Scilab funciona como um ambiente de programao.

interessante ser citado algumas caractersticas importantes do Scilab,


como:
possvel digitar vrios comandos em uma linha;
Exemplo:
--> a=1; b=4.5; c=73.2;

O ; no nal de um comando inibe a apresentao de seu resultado.


--> A=1
A=
1.

-->A=1; // a varivel A assume o valor de 1

O Scilab case sensitive, sendo a varivel A diferente da varivel a.


Exemplo:
-->a=1;
-->b=1;
-->A+B=
!error 4
Varivel indefinida: B

As operaes aritmticas simples so representadas pela tabela 3.1:


Adio +
Subtrao -
Multiplicao *
Diviso /
Potenciao ^
Tabela 3.1: operaes aritmticas simples.
Exemplo:
-->((2+3)*(4-1)/(6/2))^2
ans =
25.
Se a inteno trabalhar com nmeros complexos, utiliza-se %i :
-->(2*%i-1)*(3*%i+2)
ans =
-8. + i
Assim como se usa %e para nmero de Euler, %pi para , entre outros.

Curso de Scilab PET Engenharia Qumica Unicamp 9


4. Vetores, matrizes e listas
4.1. Vetores
Matrizes unidimensionais so chamadas de vetores. Em um vetor
possvel armazenar vrios itens em uma nica varivel. No exemplo a seguir,
mostrada uma varivel nota contendo as notas de alunos:
-->nota = [8.1 5.2 9.2 7.2 6.5 5.2 8.5 9.5 6.5 10.0];

Vetores podem ser construdos usando os colchetes [ e ]. Os elementos so


envolvidos por colchetes e separados por espaos (ou vrgula). Caso sejam
separados por ponto e vrgula, ir ser alocado um vetor coluna com os elementos
desejados.
Exemplo:
-->x=[ 1; 2; 3] //vetor coluna. Elementos separados por ;
x=
! 1. !
! 2. !
! 3. !

Se x um vetor coluna, x (l-se x transposto) um vetor linha. Essa


T

operao realizada no Scilab atravs da utilizao do smbolo (apstrofo).


Exemplo:
-->x // x transposto = vetor linha
ans =
! 1. 2. 3. !

Os elementos do vetor nota podem ser acessados da seguinte forma:


-->nota(2)
ans =
5.2
-->nota(5)
ans =
6.5
-->nota(8)
ans =
9.5
Vetores podem ser multiplicados ou divididos por quantidades escalares.
Tambm, vetores de mesma dimenso podem ser somados ou subtrados. Para
exemplificar algumas dessas operaes, vamos considerar os vetores:

-->x = [ 1; 2; 3] //Definindo o vetor x


x=
! 1. !
! 2. !
! 3. !

-->y = [ 4; 5; 6] //Definindo o vetor y


y=
! 4. !
! 5. !
! 6. !

Curso de Scilab PET Engenharia Qumica Unicamp 10


-->size(x) //Dimensao do vetor x
ans =
! 3. 1. !

-->size(y) //Dimensao do vetor y


ans =
! 3. 1. !

-->3 * x //Multiplicando o vetor x por uma constante


ans =
! 3. !
! 6. !
! 9. !
-->x / 2 // Dividindo o vetor x por uma constante
ans =
! 0.5 !
! 1. !
! 1.5 !
-->x + y // Somando os dois vetores
ans =
! 5. !
! 7. !
! 9. !
-->z = x * y //Atribuindo a z o produto escalar entre x e y
z=
32.

Nos exemplos a seguir, mostramos outras maneiras de construir vetores,


usando ndices e algumas funes internas do Scilab:

-->v = 5: -0.5: 3 //Vetor com elementos decrementados


v=
! 5. 4.5 4. 3.5 3. !
-->m=ones(1:4) //Vetor constituido de elementos iguais a 1
m=
! 1. 1. 1. 1. !
-->z=zeros(1:5) //Vetor constituido de elementos iguais a 0
z=
! 0. 0. 0. 0. 0. !
-->a=10:2.5:20
a=
! 10. 12.5 15. 17.5 20. !
-->log(a) // a funo aplicada a cada elemento
ans =
! 2.3025851 2.5257286 2.7080502 2.8622009 2.9957323!

Clculo do seno entre 0 e com incremento de /4:


-->sin(0:%pi/4:%pi)
ans =
! 0. 0.7071068 1. 0.7071068 1.225E-16!
A funo linspace gera um vetor com n valores igualmente espaados
comeando em incio e terminando em fim. Exemplo:
-->linspace(1,1.5,5)
ans =

Curso de Scilab PET Engenharia Qumica Unicamp 11


! 1. 1.125 1.25 1.375 1.5!

A funo logspace (inicio, fim, n) gera n elementos logaritmicamente


espaados. O primeiro elemento 10 elevado ao inicio e o ltimo elemento 10
elevado ao fim. Por exemplo:
-->logspace(1,2,4)
ans =
! 10. 21.544347 46.415888 100. !

4.2. Matrizes
Seja R o conjunto dos nmeros reais. Dizemos que A uma matriz de
dimenso m n em R, se:

Cada um dos elementos ai,j R. Nessa notao, a varivel m indica o


nmero de linhas e a varivel n indica o nmero de colunas da matriz A. Se A for
uma matriz quadrada, o nmero de linhas igual ao nmero de colunas e, ento,
m = n.

Vamos considerar as matrizes A e B, conforme descrito abaixo:

No Scilab, as matrizes so representadas entre colchetes, [ ]. Os elementos


que constituem as linhas das matrizes so separados por espaos ou por vrgulas.
A indicao de trmino de cada linha da matriz feita com ponto-e-vrgula.

Nos exemplos a seguir, a matriz A digitada com os elementos de suas


linhas separados por espaos enquanto a matriz B digitada com os elementos de
suas linhas separados por vrgula. Assim,
-->//Matriz A - Elementos das linhas separados por espaco
-->A = [1 2 3; 5 -8 9]
A=
! 1. 2. 3. !
! 5. - 8. 9. !
-->//Matriz B-Elementos das linhas separados por virgulas
-->B = [1, 2, 3; 4, 5, 6]
B=
! 1. 2. 3. !
! 4. 5. 6. !
-->size(A) //Dimensao da matriz A
ans =
! 2. 3. !
-->size(B) //Dimensao da matriz B
ans =
! 2. 3. !

Curso de Scilab PET Engenharia Qumica Unicamp 12


Outra forma de digitar matrizes no ambiente Scilab, separando os elementos
de uma linha por espao (ou por vrgula) e as linhas separadas por enter,
-->M = [ 1 2 3 4
-->5 6 7 8
-->9 11 13 15]

M=
! 1. 2. 3. 4. !
! 5. 6. 7. 8. !
! 9. 11. 13. 15. !

Matrizes podem ser multiplicadas ou divididas por quantidades escalares.


Tambm, matrizes de mesma dimenso podem ser somadas ou subtradas.
Considerando as matrizes A e B do exemplo anterior, temos:
-->2 * A // Multiplicacao por um escalar
ans =
! 2. 4. 6. !
! 10. - 16. 18. !
-->A / 2 // Divisao da matriz A por uma constante
ans =
! 0.5 1. 1.5 !
! 2.5 - 4. 4.5 !
-->A + B // Somando as duas matrizes
ans =
! 2. 4. 6. !
! 9. - 3. 15. !
-->C = B // C = transposta da matriz B
C=
! 1. 4. !
! 2. 5. !
! 3. 6. !
-->size(C) // Dimensao da matriz C
ans =
! 3. 2. !

Para realizar uma multiplicao entre duas matrizes observar que, para que
possa haver a multiplicao, necessrio que o nmero de colunas da primeira
matriz seja igual ao nmero de linhas da segunda matriz. Considerando as
matrizes A e B a seguir, temos que:

--> A= [1 2 3; 4 5 6; 7 8 9]
A=
! 1. 2. 3. !
! 4. 5. 6. !
! 7. 8. 9. !
-->B = [ 1 4; 2 5; 3 6]
B=
! 1. 4. !
! 2. 5. !
! 3. 6. !
-->A * B
ans =
! 14. 32. !

Curso de Scilab PET Engenharia Qumica Unicamp 13


! 32. 77. !
! 50. 122.!

Podemos usar funes internas do Scilab para gerar matrizes. Por exemplo,
usamos a funo ones para criar a matriz D, com todos os elementos iguais a 1,
-->D=ones(2,3)
D=
!1. 1. 1.!
!1. 1. 1.!

ou a funo zeros para criar a matriz E, com todos os elementos iguais a 0,


-->E=zeros(3,3)
E=
!0. 0. 0.!
!0. 0. 0.!
!0. 0. 0.!

ou, ainda, a criao de uma matriz identidade I, atravs da funo interna eye,
-->I=eye(4,4)
I=
!1. 0. 0. 0.!
!0. 1. 0. 0.!
!0. 0. 1. 0.!
!0. 0. 0. 1.!

Podemos criar matrizes a partir de elementos de outras matrizes,


-->//Definindo as matrizes A,B e C
-->A=[1 2; 3 4];
-->B=[5 6; 7 8];
-->C=[9 10; 11 12];
-->//Definindo a matriz D
-->D=[A B C]
D=
!1. 2. 5. 6. 9. 10.!
!3. 4. 7. 8. 11. 12.!
-->//Definindo uma matriz E a partir dos elementos de D
-->E=matrix(D,3,4)
E=
!1. 4. 6. 11.!
!3. 5. 8. 10.!
!2. 7. 9. 12.!

Observar que a matriz E, com trs linhas e quatro colunas, criada usando
a funo matriz. Esta funo gera a matriz E a partir da organizao dos
elementos da matriz D por colunas. Para exemplicar acessos a elementos de
matrizes, vamos considerar a matriz A com duas linhas e trs colunas,
-->//Definindo uma matriz A
-->A=[1 2 3; 4 5 6]
A=
!1. 2. 3.!
!4. 5. 6.!

O acesso a um elemento dessa matriz feito da maneira convencional: o


elemento da linha i e coluna j, a , acessado atravs do comando A(i,j), com i e j
i,j

Curso de Scilab PET Engenharia Qumica Unicamp 14


tendo seus valores numricos explicitados. Por exemplo, para acessar o elemento
a da matriz A, usamos o comando A(1,2):
1,2

-->//Acessando o elemento da primeira linha e segunda coluna de A


-->A(1,2)
ans =
2.

O comando M=A([1 2], 2), permite construir uma matriz M, composta pelo
primeiro e segundo elementos, indicados pelo vetor[1 2], da segunda coluna da
matriz A,
-->M=A([1 2], 2)
M=
!2.!
!5.!

Se desejamos obter todos os elementos de uma determinada coluna ou


linha de uma matriz, podemos utilizar o smbolo : (dois pontos) para l-los. Assim,
A(k,:) pode ser lido como todos os elementos da k-sima linha da matriz A e
A(:,k) pode ser lido como todos os elementos da k-sima coluna da matriz A.
Considerando a matriz A do exemplo anterior, o comando A(:,3), permite acessar
todos os elementos da terceira coluna da matriz A:
-->//Todos os elementos da terceira coluna da matriz A
-->A(:,3)
ans =
!3.!
!6.!
-->

Enquanto o comando A(2,:) permite acessar todos os elementos da


segunda linha da matriz A:
-->//Todos os elementos da segunda linha da matriz A
-->A(2,:)
ans =
!4. 5. 6.!

O comando A(:,3:-1:1) permite formar uma matriz constituda por todos os


elementos das colunas trs, dois e um da matriz A. Lembrar que 3:-1:2 idntico
ao vetor [3 2 1].
-->//Todos os elementos da terceira, segunda e primeira colunas de A
-->A(:, 3:-1:1)
ans =
!3. 2. 1.!
!6. 5. 4.!
-->A(:, [3 2 1]) //Forma equivalente
ans =
!3. 2. 1.!
!6. 5. 4.!

O primeiro elemento da matriz A pode ser acessado atravs do comando


A(1) e o quinto elemento da matriz A pode ser acessado atravs do comando A(5),
-->//Primeiro elemento de A
-->A(1)
ans =
1.

Curso de Scilab PET Engenharia Qumica Unicamp 15


-->//Quinto elemento de A
-->A(5)
ans =
3.
-->//Todos os elementos armazenados por coluna
-->A(:)
ans =
!1.!
!4.!
!2.!
!5.!
!3.!
!6.!

possvel, caso seja necessrio, alterar os valores de elementos de uma


matriz. Considerando a matriz A, podemos mudar o valor do seu elemento A(2,1)
atravs do comando de atribuio A(1,2)=10:
-->//Atribuir a A(1,2) o valor 10
-->A(1,2)=10
A=
!1. 10. 3.!
!4. 5. 6.!

Depois, atribumos os valores [-1; -2] aos primeiro e segundo elementos da


segunda coluna da matriz A:
-->//A(1,2)=-1 e A(2,2)=-2
-->A([1 2], 2)=[-1; -2]
A=
!1. -1. 3.!
!4. -2. 6.!

Finalmente, modicamos os elementos A(1,1) e A(1,2) da matriz A.


-->//A(1,1)=8 e A(1,2)=5
-->A(:, 1)=[8; 5]
A=
!8. -1. 3.!
!5. -2. 6.!

As matrizes simblicas tambm podem ser constitudas por elementos


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

--> //Atribuindo valores

--> x=1; y=2; z=3; w=4; v=5;


//Obtendo valores numricos dos elementos de A
--> evstr(A)
ans =

Curso de Scilab PET Engenharia Qumica Unicamp 16


! 1. 2. !
! 3. 9. !
A Tabela 4.2.1, apresenta a sintaxe de alguns dos operadores disponveis no
ambiente Scilab que podem ser utilizados em operaes com vetores ou com
matrizes.
SIMBOLO OPERAO
Transposta
+ Adio
- Subtrao
* Multiplicao
/ Diviso direita
\ Diviso esquerda
^ Exponenciao
.* Multiplicao elemento-a-elemento
./ Diviso, esquerda, elemento a-elemento
.\ Diviso, direita, elemento a-elemento
.^. Exponenciao elemento a-elemento
.*. Produto Konecker
Tabela 4.2.1: Sintaxe de alguns operadores usados em operaes vetoriais ou
matriciais.

Vamos analisar a utilizao do operador \. Para isso, denimos um sistema


de equaes lineares,

que pode ser escrito na forma matricial, Ax = b, onde:

Nas expresses anteriores, A a matriz dos coeficientes, x o vetor das


incgnitas e b o vetor de termos independentes.

Resolver um sistema linear obter o valor do vetor x. Na situao mais


simples, a matriz A no-singular (admite inversa) e a soluo, nica, dada pela
expresso
x=A b 1

onde A a inversa da matriz A. A expresso anterior pode ser representada no


1

Scilab como
-->x=inv(A)*b

na qual inv, uma funo interna do Scilab que calcula a inversa de uma matriz.
Para exemplificar , vamos considerar um sistema linear com
Temos,
--> //Solucao de Ax = b usando funo inv

Curso de Scilab PET Engenharia Qumica Unicamp 17


--> A = [2 0; 0 4] //Matriz A
A=
! 2. 0. !
! 0. 4. !

--> inv(A) //A admite inversa


ans =
! 0.5 0. !
! 0. 0.25 !

--> b = [1;8] //Vetor b


! 1. !
! 8. !

--> x = inv(A) * b //Solucao do sistema linear


! 0.5 !
! 2. !

O mesmo resultado pode ser encontrado utilizando-se o operador \.


Temos, ento,
--> Resoluo de Ax = b usando operador \
--> x = A\B
x=
! 0.5 !
! 2. !

importante observar que o smbolo \ no dene uma diviso matricial.


Indica, apenas, uma outra forma de se obter a soluo de um sistema linear.

O operador . (ponto), como pode ser visto na Tabela X.1, utilizado com
outros operadores (*, \, /, ^) para realizar operaes elemento a elemento de
vetores ou de matrizes. Por exemplo, vamos considerar a matriz quadrada A,

--> A = [1 2 3; 4 5 6; 7 8 9]
A=
! 1. 2. 3. !
! 4. 5. 5. !
! 7. 8. 9. !

--> A .*A
ans =
! 1. 4. 9. !
! 16. 81. 96. !
! 49. 64. 81. !

--> A ^ 2
ans =
! 30. 36. 42. !
! 66. 81. 96. !
! 102. 126. 150. !

Curso de Scilab PET Engenharia Qumica Unicamp 18


--> A * A
ans =
! 30. 36. 42. !
! 66. 81. 96. !
! 102. 126. 150. !

4.3. Definio de listas;


Listas outra classe de variveis, parecida com a das matrizes, mas que
permitem o agrupamento de contedo de diferentes tipos. So implementadas
atravs do comando list, seguido dos elementos os quais se desejam agrupar.
Essa funo tem a seguinte forma geral:
L = list(a1,a2,a3,.....,an),

onde a1,a2,a3,...,an so elementos da lista.

Exemplo:
--> L = list(23,1+2*%i,'palavra',eye(2,2))
L=
L(1)
23.
L(2)
1. + 2.i
L(3)
palavra
L(4)
1. 0.
0. 1.

4.4. Insero de Elementos na Lista


No Fim da Lista: L(n+1) = b, sendo n o nmero de elementos da lista.

No Incio da Lista: L(0) = b (note que aps esta operao e est no ndice 1,
os elementos iniciais foram movidos para a direita).

Exemplo:
--> L = list(23,1+2*%i,'palavra',eye(2,2));
L(5) = 56
L =
L(1)
23.
L(2)
1. + 2.i
L(3)
palavra
L(4)
1. 0.
0. 1.
L(5)
56.

4.5. Sublistas
Uma operao comum quando se trabalha com listas substituir um
determinado elemento da lista por outra lista, criando uma sublista:

Curso de Scilab PET Engenharia Qumica Unicamp 19


Exemplo:
-->L = list(1, 'w', ones(2,2));
-->L(2) = list('w', eye(2,2))
L=
L(1)
1.
L(2)
L(2)(1)
w
L(2)(2)
1. 0.
0. 1.
L(3)
1. 1.
1. 1.

4.6. Listas tipadas


As listas tipadas so outro tipo de dado aceito pelo Scilab. As listas tipadas
so definidas atravs da funo tlist. A funo tlist possui, obrigatoriamente, como
primeiro argumento uma string ou um vetor de strings e os demais argumentos so
os elementos da lista.

Exemplo:
-->L = tlist(['Carro'; 'Cidade'; 'Valores'], 'Natal', [2,3])
L=
L(1)
!Carro !
! !
!Cidade !
! !
!Valores !

L(2)
Natal
L(3)
2. 3.

-->L('Cidade')
ans =
Natal
-->L('Valores')
ans =
! 2. 3. !
-->L(1)(3)
ans =
Valores

Curso de Scilab PET Engenharia Qumica Unicamp 20


5. Grficos
5.1 Grficos 2d
Imagem projetada est em duas dimenses, usualmente, utilizam-se eixos
x e y. Abaixo esto listados algumas principais funes dos grficos em duas
dimenses (Lembre-se para ver a sintaxe e os argumentos necessrios para
chamar as funes, basta digitar help <function>)

Funes grficas em 2d:

plot2d - esboo 2d.


plot2d2 - esboo 2d (funes de degraus).
plot2d3 - esboo 2d (barras verticais).
plot2d4 - esboo 2d (setas).
fplot2d - esboo 2d de uma curva definida por uma funo.
xgrid - adiciona um grid em um esboo 2d
errbar - adiciona barras de erro verticais a um esboo 2d
histplot - esboa um histograma
Matplot - esboo 2d de uma matriz utilizando-se cores

Funos grficas para superfcies projetadas em 2d:

contour2d - curvas de nvel de uma superfcie em um esboo 2d.


fcontour2d - curvas de nvel de uma superfcie definida por uma funo em
um esboo 2d.
grayplot - esboo 2d de uma superfcie utilizando-se cores
fgrayplot - esboo 2d de uma superfcie definida por uma funo utilizando
cores
Sgrayplot - esboo 2d suave de uma superfcie utilizando cores
Sfgrayplot - esboo 2d suave de uma superfcie definida por uma funo
utilizando cores

Exemplo:
x=0:.01:2*%pi;
y=cos(x.^(2*x));
plot2d1(x,y)

Curso de Scilab PET Engenharia Qumica Unicamp 21


Figura 5.1.1: Imagem grfica 2d

5.2. Grficos 3d
Imagem projetada est em duas dimenses, usualmente, utilizam-se eixos
x, y e z.

Lista de funes grficas em 3d:


plot3d - esboo 3d de uma superfcie
plot3d1 - esboo 3d em nveis de cinza ou de cores de uma superfcie
fplot3d - esboo 3d de uma superfcie definida por uma funo
fplot3d1 - esboo 3d em escala de cinza ou colorido de nvel de uma
superfcie definida por uma funo
param3d - esboo 3d de uma curva parametrizada
param3d1 - esboo 3d de curvas parametrizadas
contour - curvas de nvel em uma superfcie 3d
fcontour - curvas de nvel sobre uma superfcie 3d definida por uma funo
hist3d - representao 3d de um histograma
genfac3d - computa facetas de uma superfcie 3d
eval3dp - computa facetas 3d de uma superfcie parametrizada
geom3d - projeo 3d para 2d aps um esboo 3d

Exemplo:
//Grfico 3d para uma funo z = f(x,y)
y=[0:0.1:5];
x=y';
z=sin(x)*cos(y);
plot3d(x,y,z)

Curso de Scilab PET Engenharia Qumica Unicamp 22


Figura 5.2.1: Imagem grfica 3d
5.3. Campo Vetorial
empregado para indicar a velocidade e a direo de fluidos se movendo
no espao, no caso da engenharia qumica, utiliza-se o campo vetorial em
escoamentos em dutos.
Lista de funes grficas em Campo Vetorial:

champ - esboo de campo vetorial 2d.


champ1 - campo vetorial 2d com setas coloridas.
fchamp - campo direcional de uma EDO 2d de primeira ordem.

champ(x,y,fx,fy)
Charmp a funo para descrever um campo vetorial 2d, sendo x e y
vetores e xx e yy matrizes que descrevem o componente x e y do campo
vetorial, respectivamente.

Exemplo:
x=-2:.4:2;
y=-2:.4:2;
xx=-cos(x.^2)'*(y.^(2/3));
yy=(sin(x).^2)'*y;
champ (x,y,xx,yy)

Curso de Scilab PET Engenharia Qumica Unicamp 23


Figura 5.3.1: Campo Vetorial 2d.
.
5.4. Mudana de cores, ttulo de eixos e salvar imagens.
Na janela grfica, no canto superior, ir em editar e depois propriedades da
figura e aparecer a janela abaixo onde possvel mudar a cor do grfico, dos
eixos, editar o ttulo dos eixos, adicionar ttulo ao grfico, etc.

Figura 5.4.1: Janela grfica para edio da imagem de grficos.

possvel salvar o grfico em formatos como .JPEG, .GIF, .PDF entre


outros. Para isso deve-se na janela do grfico, ir em Arquivo, localizado no canto
superior esquerdo, e depois em Exportar para...

Curso de Scilab PET Engenharia Qumica Unicamp 24


6. Funes, diferenciao e integrao.
6.1. Funes in-line
As funes descrevem relaes entre dois ou mais elementos, sendo que
essa relao pode ser feita atravs de uma equao matemtica. uma
ferramenta de programao, potencializando a caracterstica de calculadora do
Scilab, mas tornando os clculos mais rpidos e concisos.

No Scilab declaramos as funes da seguinte maneira, no SciNotes:

Figura 6.1.1: Declarao de Funo


Nesse formato, x1,..., xn so parmetros de entrada, ao passo que y1, ..., yn so
parmetros de sada. O programa pode conter vrias funes, mas elas s so
rodadas quando so devidamente invocadas.

Exemplo: Faa uma funo que retorne os valores para x = ab +7 e y = a/b +

No SciNotes escreve-se a funo:

function [x, y]=copa(a, b)


x=a*b+7
y=a/b + %pi
endfunction

No prompt inicial digita-se:

//Teste das funes x e y para a=3 e b=2


[x,y]=copa(5,8)

6.2. Funes on-line


No Scilab tambm podemos criar funes on-line, ou seja, fora do ambiente do
Scinotes (in-line). Para isso, utilizamos o comando deff, que dado por:

deff([variveis de sada] = nome da funo (variveis de entrada), [expresses a


calcular])

Exemplo: Fazer funo on-line para calcular ex e cos(x):

deff('[x1,x2]=fun(a,b)',['x1=%e^a';'x2=cos(b)'])

Curso de Scilab PET Engenharia Qumica Unicamp 25


6.3. Tabela de funes
Segue abaixo a tabela 6.2.1 com as principais funes matemticas do
Scilab:
abs abs(x) mdulo (argumento) de x
cos cos(x) cosseno de x, com x em radiano
cosh cosh(x) cosseno hiperblico de x, com x em radiano
acos acos(x) arco-cosseno de x, em radianos
acosh acosh(x) arco-cosseno hiperblico de x, em radianos
cotg cotgh(x) cotangente de x, com c em radiano
coth coth(x) cotangente hiperblica de x, com c em radiano
linspace linspace(A,B,N) vetor com N pontos entre A e B inclusos
log log(x) logaritmo neperiano de x
log10 log10(x) logaritmo decimal de x
log2 log2(x) logaritmo na base 2 de x
logspace logspace(A,B,N) vetor de N pontos com espao logartmico entre A e
B inclusos
exp exp(x) exponencial euleriana de x
int int(N) parte inteira de N
max max(v) mximo valor contido no vetor v
min min(v) mnimo valor contido no vetor v
modulo modulo(m,n) resto da diviso de m por n
binomial binomial(p,n) binomial normalizado de p classe *n
ceil ceil(x) arredondamento para o maior inteiro posterior
cumprod cumprod(v) produto cumulativo do vetor v
cumsum cumsum(v) soma cumulativa do vetor v
diff diff(v) diferencial discreta do vetor v
eval eval(s) valor numrico de uma expresso de strings
fator fator(N) fatores primos de N
find find(ksV) encontra os ndices dos elementos de V que tornam
a
comparao verdadeira (s ==,<,>,~=,...)
fix fix(x) arredondamento para o inteiro mais prximo de zero
floor gloor(x) arredondamento para o maior inteiro anterior
gsort gsort(V,r/c,i/d) ordenao dos elementos de v
imag imag(z) coeficiente da parte imaginaria de z
ndims ndims(M) numero de dimenses de M
pmodulo pmodulo(m,n) resto da diviso de m por n : i = n - m .* floor (n ./ m)
nextpow2 nextpow2(x) potncia de 2 maior e mais prxima de x
norm norm(A) norma de A
perms perms(v) todas as permutaes do vetor v
Tabela 5.2.1: Tabela com as principais funes do Scilab
6.4. Diferenciao
Utilizamos o comando derivative para obtermos a derivada a uma dada ordem, de
uma funo em um dado ponto. O comando derivative dado por:

[Valor da derivada, J] = derivative (funo definida, ponto escolhido)

Exemplo: Ache a derivada da expresso: () + cos() , no ponto x0=/4

Curso de Scilab PET Engenharia Qumica Unicamp 26


deff('y=f(x)','y=[x(1)*sin(x(1))+%e^(x(1))*cos(x(1))]')

-->x(1)=%pi/4;

-->x0=[x(1)];

-->[D]=derivative(f,x0)
D =

1.2624671

6.5. Integrao
O Scilab disponibiliza algumas diferentes funes para o clculo da integrada de
uma funo. O comando mais simples, integrate tem a forma:

Integrate(funo, varivel, limite inferior, limite superior)

Exemplo: Calcule a integral da funo 0.05 cos() num intervalo de 0 a 50.

integrate('-0.05*cos(x)*exp(x)','x',0,50)

ans =

- 9.107D+19

Utilizando o comando intg, teremos que declarar a funo anteriormente, mas


devemos obter o mesmo resultado. A sintaxe :

Intg(limite inferior, limite superior, nome da funo)

Exemplo: Calcule a integral da funo 0.05 cos() num intervalo de 0 a 50.

deff('[y]=f(x)','y=-0.05*cos(x)*exp(x)')

-->intg(0,50,f)

ans =

- 9.107D+19

6.6. Equaes diferenciais


Uma equao diferencial de primeira ordem pode ser escrita da seguinte
maneira:
dx/dt=f(t,x)
Na ferramenta computacional Scilab a funo ode resolve numericamente
uma equao ordinria de primeira ordem. Caso a equao seja de uma ordem
maior, ela poder sempre ser transformada em ordem primria ao se adicionar
outras variveis. Segue abaixo um exemplo.

Curso de Scilab PET Engenharia Qumica Unicamp 27



Exemplo:
= cos(2t);

No ambiente do SciNotes, digite:

function dx = f (t,x)
dx = cos(2*t);
endfunction

A forma mais simples de se chamar a funo ode no Scilab na forma:

x= ode(x0, t0, t, f)
Em que x0 o valor inicial de x no tempo t0 e t contm os pontos no tempo(ou na
grandeza escolhida) que ser determinada a soluo e f o nome da funo feita
no SciNotes para calcular a derivada.

No prompt inicial digita-se ento:


x0= 2
t0 = 0
t = 0: 0.1 : 1,5;
x = ode(x0, t0, t, f);
plot2d( t , x )


Exemplo:
= sen(2t);

Como no uma EDO de primeira ordem, manipula-se a equao:

z = dx/dt;
dz/dt = sin(2t)

Agora se tem a EDO na forma:

dx/dt = f(t ,x )

Onde x e dx so vetores:

x = [z; sin(2t)]
dx = [dx/dt, dz/dt]

Ao digitar essa equao no SciNotes, sabendo que agora x um vetor, encontra-


se:

function dx = f( t, x);
dx(1) = x(2);
dx(2) = sin(2*t);
endfunction

No prompt inicial:

t = 0: 0.01: 4*%pi;
y = ode ([0; -1/2], 0, t, f);
plot2d( t , y(1,:) )
Quando estamos lidando com equaes diferenciais com mais de uma varivel,
declararemos a equao da mesma forma que declaramos nos exemplos

Curso de Scilab PET Engenharia Qumica Unicamp 28


anteriores e, depois, como no exemplo de EDO de ordem superior, definiremos o
vetor x(n), sendo que cada entrada desse vetor ser uma das variveis do
problema em questo.

7.Polinmios e interpolaes.

7.1. Polinmios
Os polinmios so uma classe de variveis, tal como real ou lgica. Um
polinmio gerado no Scilab atravs da funo poly. Caso sejam definidos dois
polinmios sob a mesma varivel, estes podem ser somados, subtrados,
multiplicados e divididos entre si e com nmeros complexos.

Existem duas formas de se criar um polinmio no Scilab: especificando


suas razes ou seus coeficientes. Para a primeira forma, so permitidas trs
sintaxes:
P=poly([a b],'s')
P=poly([a b], 's', 'r')
P=poly([a b], 's', 'roots')

Quando se deseja a segunda alternativa, as opes so apenas duas:


P=poly([c d], 's', 'c')
P=poly([c d], 's', 'coeff')

Lembrando que a ordem dos coeficientes : c0*s , c1*s ,...,cn*s .


0 1 n

As razes de um polinmio podem ser obtidas com o comando roots(P) e


valor numrico da funo, pelo comando horner(P,N).

Exemplo:
-->p = poly([1 2], 's')
p=
2
2 - 3s + s
--> z = roots (p)
z =
2.
1.

Exemplo:
valor = horner(p,-5)
valor =
42.
7.2. Operaes com Polinmios
Abaixo esto alguns exemplos de operaes que podem ser realizadas com
polinmios:

Soma
Para realizar a soma de polinmios, inicialmente definem-se os polinmios:
-->a=poly([5 2 9 8 1],"x","coeff"); //criar o polinmio a
-->b=poly([5 -3 8],"x","coeff"); //criar o polinmio b

Curso de Scilab PET Engenharia Qumica Unicamp 29


-->soma=a +b //somar os dois polinmios
soma =
10 + 2x + 17x + 8x + x 4

Subtrao
-->sub=a-b //subtrair b de a
sub =
5x + x + 8x + x 4

Multiplicao
-->mult=a*b //multiplicar os polinmios
mult=
25 - 5x + 79x + 29x + 53x + 61x + 8x
4 5 6

Diviso
Para dividir os polinmios usamos o comando pdiv:
-->div=pdiv(a,b) //dividir os dois polinmios
div =
1.4394531 + 1.046875x + 0.125x

Caso haja o interesse de se obter tanto o quociente quanto o resto, pode


realizar-se a seguinte operao:
-->[r, q] = pdiv(a,b) //efetuando a divisao: q=quociente, r=resto
q=
r=
No caso do uso do operador de diviso (/), em vez do comando pdiv,
criado um polinmio racional:
-->div = a/b
-->div = 5 + 2x + 9x + 8x + x 4

5 - 3x + 8x

7.3. Derivao de Polinmios


Para derivar numericamente um polinmio, utilizamos a funo derivat
-->D = derivat (b)
D=
-3 +16x

7.4. Interpolaes
Utilizamos a interpolao para encontrar resultados yn para um
determinado problema, dado que temos outros pontos (x1,y1; x2,y2; ...).
O Scilab possui algumas funes para interpolao, abordaremos a interp1,
que utilizada para casos em que y s tem uma varivel. Caso queira-se utilizar y
dependendo de duas variveis, basta utilizar interp2 ou at mesmo interp3 para
casos com trs variveis.

7.5. Interpolaes Lineares

Para a interpolao linear usado uma aproximao de polinmio do primeiro grau


para os pontos. Cabe ao usurio definir se tal aproximao a mais eficiente para
o problema que possui.

O formato definido como:

Curso de Scilab PET Engenharia Qumica Unicamp 30


interp1(x, y, a, linear)

No qual o parmetro x representa um vetor de reais, y representa a


imagem desse vetor em f(x), e a o valor para o qual se quer encontrar a
imagem.
Exemplo:
x=[1, 10, 20, 30, 40];
y=[1,30, -10,20,0];
//Funo abaixo encontra o valor de y para x=8
yy=interp1(x,y,8, 'linear')

7.6. Interpolaes por Spline Cbica


Dados os pontos (x1,y1; x2,y2; ...), quando a melhor aproximao para
essa funo so curvas, utilizaremos o spline na nossa funo interp1.
O formato fica: interp1(x, y, a, spline), no qual o parmetro x representa
um vetor de reais, y representa a imagem desse vetor em f(x), e a o valor para
o qual se quer encontrar a imagem.

Exemplo:
x=linspace(0,3,20);
//Linspace Indica que no intervalo 0x3 contm 20 nmeros igualmente
separados
y=x.^2+4*x;
//Funo abaixo encontra o valor de y para x =4,66
yy=interp1(x,y,4.66,'spline')

7.7. Extrapolao
til para encontrar um valor fora do meu intervalo ou do meu conjunto de
nmeros. Novamente utilizamos a funo interp1, adicionando um quarto
parmetro, extrap. O formato fica: interp1(x, y, a, method, extrap), no qual o
parmetro x representa um vetor de reais, y representa a imagem desse vetor
em f(x), a o valor para o qual se quer encontrar a imagem e method o
mtodo utilizado para a extrapolao (por exemplo, linear ou spline).

Exemplos:
x=[1, 10, 20, 30, 40];
y=[1,18, 5,0,21];
//Funo abaixo encontra o valor de y para x=45 utilizando uma funo linear

yy=interp1(x,y,45, 'linear', 'extrap' )

x=[1, 10, 20, 30, 40];


y= x.^2+6*x;
//Funo abaixo encontra o valor de y para x = 52
yy=interp1(x,y,52,spline,extrap)

Curso de Scilab PET Engenharia Qumica Unicamp 31


8. Introduo Programao
8.1. Introduo

A linguagem do Scilab simples e disponibiliza a maioria das estruturas de


linguagem de programao, por isso fcil para o usurio criar programas no Scilab.
A diferena do Scilab para outras linguagens de programao a no necessidade de
declarao prvia de variveis que sero utilizadas no programa.

Aprendemos como escrever e executar comandos a partir da tela inicial do


Scilab. Neste captulo, apresentamos as principais estruturas da linguagem de
programao utilizada no Scilab. Essas estruturas so utilizadas, depois, para gerar
programas que sero executados no ambiente Scilab.

Para iniciar a programao necessrio abrir o editor de texto SciNotes.

8.2. Funo Printf

A funo printf responsvel por gerar uma sada que ser impressa na tela.

Exemplo 1: Imprimir Ol mundo na tela.


Na tela do SciNotes, digitar:
printf(Ol Mundo\n);
A funo printf tem que ser seguida de colchetes e a mensagem que dever
ser impressa precisa estar entre aspas simples. O smbolo \n serve para pular linha
aps a impresso. O smbolo ; indica que o comando est encerrado.
Aps digitar o comando na tela necessrio salvar o arquivo em um diretrio,
como a figura abaixo:

Figura 8.2.1: Tela para salvar em diretrio.

Curso de Scilab PET Engenharia Qumica Unicamp 32


Assim que o arquivo salvo, retorna-se a tela do SciNotes e clica no boto
executar:

Figura 8.2.2: Comando para executar a funo printf.

A resposta ser impressa na tela inicial do Scilab.

Figura 8.2.3: Tela com a resposta da execuo do comando da figura 7.2.1.

A funo printf tambm usada para imprimir um resultado, como segue o


exemplo.

Exemplo 2: Imprima na tela o valor da varivel A =20.

Na tela do SciNotes declarar o valor de A e depois utilizar a funo printf para


imprimir na tela:

A=20;
printf(A varivel A contem o valor de %g\n,A);

Nota-se neste caso o uso do smbolo %g que tem a funo de armazenar o


valor de uma varivel j declarada. Essa varivel deve ser colocada aps a mensagem
e separa por uma vrgula, como no exemplo acima.

Aps inserir o comando no SciNotes necessrio salvar o programa e clicar no


boto executar para que a mensagem seja impressa na pgina inicial do Scilab.

Curso de Scilab PET Engenharia Qumica Unicamp 33


Figura 8.2.4: Tela com exemplo usando printf.

8.3. Funo input.

A funo input utilizada para ler um valor de uma varivel que ser digitada
na tela inicial. Ou seja, no se define a varivel no Scinotes, como feito no Exemplo 2,
quem executa o programa quem define o valor da varivel.
Exemplo: Converter graus Fahrenheit em graus Celsius.
Sabe-se que a equao que converte graus F em C a seguinte:
5
= ( ) ( 32)
9
Assim, precisa-se do valor da temperatura em graus Fahrenheit para ser
convertida em graus Celsius. Ento se utiliza a funo input para receber o valor de f .
f = input(Digite os graus em Fahrenheit:);
c = (5/9)*(f-32);
printf(Equivale a %g graus Celsius.\n,c);

Aps digitar o comando no SciNotes, salvar o programa no diretrio e clicar em


executar.
Na tela inicial do Scilab aparecer a mensagem que solicita um nmero para
fazer a converso de graus Fahrenheit em graus Celsius. Digitou-se 50 e depois
ENTER:

Curso de Scilab PET Engenharia Qumica Unicamp 34


Figura 8.3.1: Tela da programao do exemplo sobre input.

Para inserir comentrio dentro do programa basta utilizar duas barras seguidas
// e aps elas escrever o comentrio. O comentrio no interfere no seu programa e
serve para deix-lo mais completo medida que h a necessidade de explicar alguns
comandos.

Exemplo de comentrio:
f = input(Digite os graus em Fahrenheit:); //a funo foi utilizada para ler o
valor de uma varivel.

8.4. Funo if-end

A funo if-end uma condicional, ou seja, para um comando ser executado


precisa de uma condio inicial.

Exemplo: Elaborar um programa para escrever a mdia de duas notas. Se a


mdia for maior que sete, o programa dever tambm escrever Parabns.

Nota1 = input(Digite a primeira nota:);


Nota2 = input(Digite a segunda nota:);
Media = (Nota1 + Nota2)/2;
printf(Sua mdia %g\n,Media);
if Media>7

Curso de Scilab PET Engenharia Qumica Unicamp 35


printf(Parabns);
end

A resposta do programa est impressa na tela inicial para Nota1=10 e Nota2=8,


como a mdia maior que sete, foi impresso Parabns.

Figura 8.4.1: Tela da programao do exemplo sobre if-end.

8.5. Funo if-else-end

Como dito anteriormente, a funo if-end uma condicional. A funo else


complementar a funo if e indica que seu comando no ser executado quando ela
for satisfeita.
Neste caso utilizaremos o Exemplo 5, s que acrescentando uma mensagem
para uma mdia menor que sete imprime Reprovado e maior que sete imprime
Aprovado.

Nota1 = input(Digite a primeira nota:);


Nota2 = input(Digite a segunda nota:);
Media = (Nota1 + Nota2)/2;

Curso de Scilab PET Engenharia Qumica Unicamp 36


printf(Sua mdia %g\n,Media);
if Media>7
printf(Aprovado);
else printf(Reprovado);
end

Assim, temos as duas condies para o exemplo acima representado na figura:

Figura 8.5.1. Exemplo de funo if-else-end na tela do Scilab.

8.6. Funo for

Na forma bsica, o lao for possui o nome de uma varivel (chamada de


varivel de controle) e especifica seu valor inicial e final e, opcionalmente, o tamanho
do passo (ou incremento) da varivel de controle.
Exemplo: Elabore um programa para escrever todos os nmeros pares inteiros
entre 1 e 50.

for i=2:2:50

Curso de Scilab PET Engenharia Qumica Unicamp 37


printf(%g,i);
end
Neste programa temos i como a varivel de controle, que inicialmente igual
a 2, e seu valor final igual a 50. O passou ou incremento est no meio dos valores da
varivel e tem o valor 2. Isso significa que a partir do nmero 2 o programa ir imprimir
o prximo nmero com incremento 2, que ser por consequncia o nmero 4. A figura
abaixo mostra a execuo do programa.

Figura 8.6.1: Exemplo de como usar a funo for no Scilab.


Exemplo: Elabore um programa para calcular o fatorial para qualquer valor n
fornecido pelo usurio. Sabe-se que o fatorial de um nmero n sua sequncia
multiplicada n vezes. Por exemplo, fatorial de 3! = 1x2x3=6.

n = input(Entre com um nmero:);


fat =1;
for cont=2:n
fat=fat*cont;
end
printf(O fatorial de %g igual a %g\n,n,fat);
A figura mostra como o programa executado na tela inicial do Scilab.

Curso de Scilab PET Engenharia Qumica Unicamp 38


Figura 8.6.2: Execuo do exemplo sobre funo for no Scilab

8.7. Funo while

A funo while um lao controlado logicamente. Ele repete a execuo de um


conjunto de comandos, mas verificando antes de executar os comandos se permitido
repeti-los ou no, ou seja, se o comando for verdadeiro ele executar, se for falso ele
sair do lao while.
Exemplo: Calcular a mdia das notas de dois alunos.

i =1;
while i<=2
nota1 = input(Digite a 1 nota bimestral);
nota2 = input(Digite a 2 nota bimestral);
nota3 = input(Digite a 3 nota bimestral);
nota4 = input(Digite a 4 nota bimestral);
media = (nota1+nota2+nota3+nota4)/4;
printf(Media = %g\n,media);
i=i+1;
end

Curso de Scilab PET Engenharia Qumica Unicamp 39


Figura 8.7.1: Execuo do exemplo sobre funo while no Scilab

8.8 Vetor.
Matrizes unidimensionais so chamadas de vetores. Em um vetor possvel
armazenar vrios itens em uma nica varivel.
Exemplo: Calcular a mdia dos elementos do vetor nota dado pelo usurio.

for i=1:10
nota(i)=input(Digite um valor:);
end
soma=0;
for i=1:10
soma=soma+nota(i);
end
printf(Media das notas = %g\n,soma/10);

Curso de Scilab PET Engenharia Qumica Unicamp 40


Figura 8.8.1: Execuo do exemplo sobre vetor no Scilab.

8.9 Matriz.
Matrizes usam dois ndices para individualizar elementos. Matrizes so
construdas usando colchetes. Cada linha da matriz separada por um ponto e vrgula
e cada elemento de uma linha separado por espao (ou vrgula).
Exemplo 10: Calcular a soma dos elementos da diagonal principal da matriz A
e escrever o resultado.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
soma=0;
for i=1:4
soma = soma + a(i,i);
end
printf(soma=%g\n,soma);

Curso de Scilab PET Engenharia Qumica Unicamp 41


Figura 8.9.1: Execuo do exemplo sobre matriz no Scilab.

Curso de Scilab PET Engenharia Qumica Unicamp 42


9. Exerccios
9.1. Encontre o valor da expresso:
[(5e3+72+3) (9 i) ]/3,5e2 [ 47 e(3i + 7) ]
2 3

9.2 Calcular a mdia dos elementos do vetor nota.


nota = [8.1 5.2 9.2 7.2 6.5 5.2 8.5 9.5 6.5 10.0];
soma = 0;
for i=1:10
soma = soma + nota(i);
end
printf("Mdia das notas =%g\n",soma/10);

9.3 Ler dois vetores A e B de 10 elementos. Construir um vetor C tal que cada
elemento de C seja o dobro da soma entre os elementos correspondentes de A
com B. Escrever o vetor C.
for i=1:10 // Leitura de A e B
a(i) = input("Digite um valor");
end
for i=1:10
b(i) = input("Digite um valor");
end
for i=1:10
c(i) = 2*(a(i)+b(i)); // Calculo de C
end
for i=1:10 // Escreve de C
printf("%g ",c(i));
end

9.4 Ler dois vetores A e B de 10 elementos. Construir um vetor C tal que o


elemento de ndice mpar de C seja igual ao elemento correspondente de A, caso
contrrio, seja igual ao elemento correspondente de B. Porexemplo, c[1]==a[1],
c[3]==a[3],.... Mas,c[2]==b[2],b[4]==a[4],.... Escrever o vetor C.
for i=1:10 // Leitura de A e B
a(i) = input("Digite um valor");
end
for i=1:10
b(i) = input("Digite um valor");
end
for i=1:10
if modulo(i,2)<>0 // Testa se o ndice i mpar.
c(i) = a(i); // Se for mpar c(i) recebe o valor de a(i)
else
c(i) = b(i); // Se for par c(i) recebe o valor de b(i)
end
end
for i=1:10 // Escreve o vetor C
printf("%g ",c(i));
end
Comentrio. A funo mdulo (resto de uma diviso) verica se o ndice do
vetor C mpar ou par porque se resto da diviso entre um nmero qualquer e
dois diferente de zero, ento ele mpar (no divisvel por dois).

Curso de Scilab PET Engenharia Qumica Unicamp 43


9.5 Elaborar um programa que leia o dia, o nmero de ms e o ano e escreva a
data no formato D de MMM de AAAA(ou D de MMM de AA). Por exemplo, se o
dia 31, o ms 12 e o ano 2003, ento o programa dever escrever 1 de dez
de 2003.
mes = ["jan" "fev" "mar""abr" "jun" "jul" "ago" "set" "nov" "dez"];
dia = input("Digite o dia");
nunmes = input("Digite onumero do mes");
ano = input("Digite o ano");
printf("%g de %s de %g\n",dia,mes(nunmes),ano);

Comentrio. Porque a varivel nunmes contm o nmero do ms, o comando


printf capaz de escrever o nome do ms atravs do elemento ms (nunmes).

9.6 O que este programa escreve?


poema(1) = uma rosa;
poema(2) = ;
for a=1:3
for b=1:2
printf("%s ",poema(b));
end
end
printf(%s,poema(1));

9.7 Alguns candidatos prestaram concurso para cinco vagas em uma empresa. Os
resultados das provas do concurso esto armazenadas nas seguintes matrizes:

Escreva um programa que:


a) Armazene os nomes dos candidatos em um vetor nome e as notas das provas
em uma matriz nota 103.

nome = ["Ana" "Carlos" "Francisco" ...


"Jos" "Magali" "Marcos" ...
"Maria" "Marta" "Paulo""Pedro"];
nota = [6.5 7.1 7.5; ...
8.0 8.3 7.2; ...
7.5 8.1 8.3; ...
6.1 5.2 6.0; ...
5.1 6.1 6.5; ...
4.1 5.5 5.4; ...
9.1 8.9 9.4; ...

Curso de Scilab PET Engenharia Qumica Unicamp 44


8.8 8.5 9.0; ...
9.5 9.3 9.1; ...
8.2 8.5 7.8];

b) Calcule a mdia de cada candidato, armazene em um vetor media e escreva-o.


[m,n]=size(nota);
for i=1:m
soma = 0;
for j=1:n
soma = soma+nota(i,j);
end
media(i)=soma/3;

9.8 Verifique os valores de L(1), L(2), L(3) , L(4) e L(5) do exemplo do tpico 4.4.

9.9 Acessar termo L(2)(2)(1,2) da lista explicitada no exemplo do tpico 4.5.

9.10 Interpolar a seguinte tabela para o valor de x = 2.3 e extrapolar para x=52.5.
Encontrar o grfico dos pontos.
X 1 2 3 4
y 1.73 3.46 5.20 6.92

9.11 Encontrar o grfico da funo abaixo:


y = x +2x +3
3

9.12 Elaborar um programa Scilab para calcular a resistncia equivalente entre


dois resistores R1 e R2 em paralelo. Lembre-se que a resistncia equivalente de
dois resistores paralelos dado por:
1Req= 1R1+ 1R2
Obs.: Lembre-se, esse exerccio utilizar as funes printf e input.

9.13 Elaborar um programa Scilab para calcular a resistncia equivalente entre dois
resistores R1 e R2 em paralelo. Lembre-se que a resistncia equivalente entre dois
resistores em paralelo dada por:
1 1 1
= +
1 2
Obs.: Lembre-se, este exerccio utilizar as funes printf e input.

9.14 Elaborar um programa para calcular o valor da funo:

() = { + 16 0, dado um valor x fornecido via


0 0
teclado.
Obs.: Lembre-se de utiliza as funes printf, input e if-else-end.
9.15 Elabore um programa que calcule e escreve o valor de S.
1 3 5 99
= + + ++
1 2 3 50

Curso de Scilab PET Engenharia Qumica Unicamp 45


Obs.: Note que h uma relao entre numerador e denominador da seguinte
forma:
2 x denominador - 1 = numerador
9.16 Elaborar um programa para calcular a soma de todos os inteiros entre 1 e 100.
9.17 Ler dois vetores A e B de 10 elementos. Construir um vetor C tal que cada
elemento de C seja o dobro da soma entre os elementos correspondentes de A com B.
Escrever o vetor C.
9.18 Calcular a soma dos quadrados dos elementos da segunda linha de A e escrever
o resultado.

Curso de Scilab PET Engenharia Qumica Unicamp 46


10. Referncias
1 http://www.dca.ufrn.br/~pmotta/sciport-3.0.pdf, acessado dia 17/06/2014 s
10h00min.;
2 http://www.mat.ufrgs.br/~guidi/grad/MAT01169/laminas.Intro_Scilab.pdf,
acessado dia 17/06/2014 s 10h22min.;
3 http://www.dca.ufrn.br/~estefane/academica/progsci.pdf, acessado dia
17/06/2014 s 10h47min.;
4 http://euler.mat.ufrgs.br/~giacomo/Manuais-
softw/SCILAB/Apostila%20de%20Scilab%20-%20atualizada.pdf, acessado
dia 17/06/2014 s 11h01min.;
5 http://help.scilab.org/docs/5.3.2/pt_BR/, acessado dia17/06/2014 s
11h59min.
http://edusantos.eti.br/una/docs_algoritmos/scilab_apostila_una.pdf acessado dia
17/05/2015 s 18h23min
6
http://www.scilab.in/files/workshops/15-04-2010-mumbai/sengupta-ode.pdf
acessado dia 17/05/2015 s 18h25min

Curso de Scilab PET Engenharia Qumica Unicamp 47