Você está na página 1de 15

Lab 1: Introduo ao Scilab

Joo Medeiros e Sharon Dantas Escola de Cincias e Tecnologia - UFRN Disciplina: Modelagem Integrada 11 de maio de 2011

1 Introduo
Neste laboratrio iremos explorar um pouco o Scilab. O objetivo apresentar os principais comandos que iremos necessitar para utilizar o Scilab no nosso curso de modelagem integrada. Para informaes adicionais, consulte os vrios tutoriais sobre o Scilab na internet, a prpria pgina do Scilab em http://www.scilab.org e a pgina de documentao em http://www.scilab.org/support/documentation.

2 O que o Scilab
Retirado de http://pt.wikipedia.org/wiki/Scilab O Scilab um software cientco para computao numrica semelhante ao Matlab que fornece um poderoso ambiente computacional aberto para aplicaes cientcas. Desenvolvido desde 1990 pelos pesquisadores do INRIA (Institut National de Recherche en Informatique et en Automatique) e do ENPC (cole Nationale des Ponts et Chausses), agora mantido e desenvolvido pelo Consorcio Scilab desde sua criao em Maio de 2003 . Distribudo gratuitamente via Internet desde 1994, o Scilab atualmente usado em diversos ambientes industriais e educacionais pelo mundo.

3 O ambiente do Scilab
O Scilab pode ser iniciado pelo menu de aplicativos (nos ambientes Windows e Linux). O menu pode variar um pouco em cada caso. De qualquer maneira, no Linux, o Scilab podemos iniciar a partir do terminal de comandos. V em

Aplicativos / Acessrios / Terminal

. Em seguida,

digite o comando scilab, veja a gura abaixo.

3.1 A console
A tela inicial do Scilab parecida com a mostrada na gura abaixo e corresponde a console.

Os comandos do Scilab so executados aps a digitao de cada comando e a tecla enter. Experimente digitar na tela do Scilab

1+1

<enter>. Deve aparecer o resultado da soma de

1+1

-->1+1 ans = 2.
Uma funcionalidade interessante da console a autocompletao de comandos. Experimente digitar plot <tab>. O comando automaticamente completado para uma das opes mostradas.

3.2 Operaes bsicas


O Scilab utiliza uma linguagem interpretada, o que signica que podemos manipular variveis de uma maneira bastante dinmica. Nesta seo apresentamos as funcionalidades mais bsicas da linguagem do Scilab, ou seja, mostraremos como criar variveis a quais operaes matemticas podem ser aplicadas a essas variveis. escrever:

No Scilab tudo matriz. Para ser mais preciso, podemos Todas as variveis, sejam elas do tipo real, complexas, booleanas, inteiras, caracteres e polinomiais, so matrizes. As matrizes em Scilab so, de fato, uma organizao especial dos tipos
Devemos fazer um comentrio inicial: No Scilab, podemos manusear dados do tipo real e complexos. Em muitas situaes as variveis

bsicos de dados. reais e complexas se comportam da mesma maneira, contudo devemos tomar algumas precaues quando estamos processando variveis complexas. Iniciaremos nossas discusses considerando as variveis reais e tratando os casos com variveis complexas a medida que for necessrio.

3.3 Criando variveis


Como j mencionamos, o Scilab uma linguagem interpretada. As variveis so criadas no momento que so utilizadas pela primeira vez. Para criar a varivel podemos usar

a e atribuir o valor 1 + 1 e ela,

-->a = 1+1 a = 2. -->a=1+1; -->


Observe que no quadro acima, repetimos o comando o valor de

a = 1+1

duas vezes, uma com o comando

terminando em ; e outra sem o ;. Internamente o resultado exatamente o mesmo: atribuimos

1+1

varivel

a.

A diferena que com o ; o resultado mostrado na tela e sem o

; o resultado no ecoado na tela.

Para vericar que a varivel

-->a a =

existe, simplesmente digite o

e d enter

2. -->
Se voc omitir o nome da varivel em uma operao de atribuio, o valor ser armazenado em uma varivel interna chamada

-->1+1 ans = 2. -->

ans.

O Scilab diferente de

d.

case-sensitive, ou seja, diferencia letras maisculas e minsculas.

Por exemplo, bf D

As variveis do Scilab existem no em

workspace, uma regio de memria utilizada para armazenar

variveis. Voc pode ver o contedo dessa regio com o comando

Aplicativos / Navegador de Variveis

who na console ou ento indo

Note que ao voc sair do Scilab as variveis do variveis em um arquivo com a funo mais a frente.

save.

workspace

so perdidas. Voc pode salvar as

Contudo, se voc quer realmente salvar o contedo

do seu trabalho, recomendamos a utilizao de

scripts juntamente com o editor, que ser mostrado

3.4 Variveis matemticas pr-denidas


O Sclilab tem diversas variveis pr-denidas, algumas delas esto listadas abaixo, todas elas iniciam com o caracter %: %i %e %pi A constante imaginria A constante de Euler

A constante matemtica

3.5 Funes matemticas elementares


O Scilab tem praticamente todas as funes matemticas elementares implementadas. exemplo seguinte, usamos Muitas dessas funes recebem um argumento e retornam o valor da funo para aquele argumento. No

cos

sin

para vericar a validade da equao

cos2 (x) + sin2 (x).

-->x = cos(2) x = - 0.4161468 -->y = sin(2) y = 0.9092974 -->x^2 + y^2 ans = 1.


Essas funes so vetorizadas, de maneira que suas entradas e sadas so matrizes. Isso permite o clculo de dados em alta performance, sem a necessidade de

-->t=[0:10]' t = 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. -->sin(0.1*t) ans = 0. 0.0998334 0.1986693 0.2955202 0.3894183 0.4794255 0.5646425 0.6442177 0.7173561 0.7833269 0.8414710

loops.

Veja o exemplo abaixo

Como voc pode ter percebido, o primeiro comando, t=[0:10]', criou um vetor coluna de 11 elementos, iniciando em 0 e terminando em 10, variando de 1 em um. O segundo comando, fez o clculo do seno de cada um dos elementos e retornou o resultado em outro vetor coluna. Um variao do primeiro comando seria

-->t=[0:.1:10]' t = 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
Apresentamos apenas o 10 primeiros elementos do vetor de sada. Observe que foi criado, desta vez, um vetor com 101 elementos iniciando em 0 e terminando em 10 com incrementos de 0.1. Ou seja, o comando [...], denido como [inicio:incremento:m] vai criar um vetor linha (ou coluna de acrescentarmos o ') com elementos do tipo

inicio inicio + incremento inicio + 2*incremento ...

4 Grcos
O comando bsico para exibio de grcos no Scilab o para isso utilizamos as barras // '. Inicialmente, vamos gerar alguns dados;

plot.

A seguir, mostramos alguns

exemplos demonstrando vrias opes de exibio de grcos. Vrios exemplos esto comentados,

t=[0:0.1:10]'; // t um vetor coluna y=sin(2*t); // y um vetor coluna


A seguir os comandos para exibio do grco de y=sin(t):

scf(1); // abre uma nova figura com identificador 1. (scf = set current figure) plot(y) // exibe o grfico de y contra os ndices do vetor y
Abaixo mostramos uma janela exibida pelo Scilab. No eixo x esto os ndices do vetor y. Os ndices so inteiros de 1 at 101.

A janela do grco tem vrias opes que voc pode usar e explorar para gerar grcos bastante elaborados. Digamos agora, que voc deseja fazer um grco de y contra t na Figura 1, que a mesma gura usada acima. Isso pode ser feito com o comando o mesmo nmero de elementos. Se voc apenas repetir o comando que um novo grco ser exibido por cima do anterior. Veja

plot*t,y), onde os vetores t e y tm que ter plot*t,y) o que ir acontecer

Normalmente no isso que queremos. Para limpar o grco atual antes de desenhar um novo, podemos usar o comando clf. Tente o seguinte

clf; plot(t,y);

Podemos adicionar grades e algumas informaes ao grco.

clf; // abre uma nova janela plot(y,y); // faz o grfico ax1 = gca(); // gca = get current axis - obtem o eixo atual ax1.grid=[0,0]; //adiciona o grid, // [0,0] a cdigo de cores para a grade x y. //[0,0] preto title('Sen (2*t)'); xlabel('t[s]'); // titulo do eixo x. ylabel('y[V]'); // titulo do eixo y.
Veja o resultado

Para desenhar mais de uma curva no mesmo grco, podemos usar

u=-1+0.2*t; // adicionamos mais uma curva plot(t,y,t,u);// grafico de y versus t e u versus t


Observe a ordem dos vetores no comando plot.

Podemos desenhar as curvas com diferentes estilos de linhas e cores

clf; plot(t,y,'r--',t,u,'b');//'r--' vermelho com linhas tracejadas //'b' azul

Para desenhar vrios subgrcos em uma mesma gura, utilize o seguinte:

scf(1); clf; //Abre e limpa a figura 1. subplot(211); //Grafico nmero 1 em uma tabela de 2 linhas e uma coluna plot(t,u); subplot(212); //Grafico nmero 2 em uma tabela de 2 linhas e uma coluna plot(t,y);
O resultado est mostrado abaixo

Existem muito mais opes, consulte o Help com o comando

-->help linespec

5 O Editor
A digitao de comandos pode ser feita na console do Scilab ou podemos usar, a partir da verso 5.2, um editor de comandos que nos permite escrever scripts rapidamente. Para usar o editor, na tela do Scilab v em

Aplicativos / Scinotes

ou digite editor()<enter> na console. O editor

permite a edio de vrios arquivos simultaneamente, veja a gura abaixo.

Existem algumas funcionalidades deste editor que devem ser mencionadas. esto no menu

Executar

As mais usadas

... le with no echo ... le with echo

executa os comandos do arquivo corrente, como se zssemos um

copy/paste, na console do Scilab sem mostrar as sadas dos comandos. faz a mesma coisa do comando anterior, porm exibe Se no houver nenhuma seleo de textos na tela com o

... until caret with echo / selection

mouse, os comandos do arquivo sero executados at o cursor, caso contrrio, ser executada a seleo. o resultado dos comandos que no terminam com ;. Ns podemos tambm selecionar algumas linhas do script com o mouse, clicar com o boto direito e selecionar alguma das opes do menu que aparece. Uma outra opo interessante para que est escrevendo scripts mais longos usar a opo de correo de identao (

recuos .

Editar / corrigir

6 Funes
Agrupar vrios passos em uma funo reusvel uma das tarefas mais comuns de um desenvolvedor em Scilab. Para escrever as funes, mais interessante que utilizemos o editor, ao invs de escrever diretamente na console. Assim, abra uma nova janela do editor (no Scilab, v em

SciNotes) e nessa nova janela digitaremos as nossas funes.


Na janela do SciNotes, v em preferncia e salve o arquivo.

Aplicativos

Inicialmente, salve o arquivo em algum diretrio de maneira que voc tenha sempre uma cpia.

Arquivo / salvar como,

navegue at algum diretrio de sua

10

6.1 Denindo uma funo


Para denir uma funo, utilizamos as palavras reservadas do Scilab 2 e retorna o valor no argumento y.

function

endfunction.

No

exemplo seguinte denimos a funo chamada f1, a qual recebe o argumento x, multiplica ele por

function y = f1(x) y = 2*x endfunction


A instruo pela instruo

function y = f1(x) o cabealho da funo, enquanto o corpo da funo composto y = 2 * x. O corpo da funo pode conter uma, duas ou vrias linhas.

Existem pelo menos trs possibilidades para denirmos a funo acima:

A primeira opo digitar o script diretamente na console do Scilab, no modo interativo. Outra opo disponvel quando o cdigo da funo est contida em um arquivo. Podemos editar o arquivo e simplesmente copiar e colar o contedo da funo na console. Outra opo ainda utilizar o editor para digitar a funo e usar a opo do menu

Executar.
Ao

Iremos utilizar a terceira opo acima. Uma vez que a funo foi digitada no editor, podemos carreg-la para o Scilab a partir da tela do editor,

v em Executar / File with no echo.

fazer isso, observe que deve ter aparecido uma linha do tipo

-->exec('/home/joao/lab1/funcoes.sce', -1)
na console do Scilab. Agora podemos usar a funo como se fosse parte do scilab. Experimente os comandos abaixo na console

-->f1(3) ans = 6.

-->z = f1(8) z = 16.


O primeiro deles, calculou o valor da funo em x=3 e atribuiu o resultado varivel gundo, calculou o valor da funo em x=8 e atribuiu o valor varivel z. Da mesma maneira que podemos fazer grcos com as funes intrnsecas do Scilab, podemos fazer grcos com as nossas funes. Veja abaixo um script completo.

ans.

O se-

function y = f1(x) y = 2*x endfunction t=[0:0.1:10]'; scf(1); clf; plot(t,f1(t));


O script pode ser digitado no editor e executado normalmente.

7 Exemplo de aplicao
Supunha que desejamos modelar e resolver um sistema real consistindo de uma caixa d'gua com um uxo de sada, veja a gura abaixo.

11

Onde:

Qe e

a vazo de entrada; a densidade do udo na entrada; a presso externa, normalmente a presso atmosfrica;

Pext H

o nvel de gua no tanque; a densidade do lquido no tanque; a presso no fundo do tanque; a vazo de sada; uma constante caracterstica da vlvula; a presso jusante da vlvula.

Pm Qs Cv Pj

Para modelar esse sistema, devemos inicialmente determinar qual o modelo matemtico para o sistema. Podemos usar o balano de massas.

Assumindo-se um uido

dm dH = A = e Qe Qs dt dt imcompressvel, temos que = e e A dH = Qe Qs dt

(1)

(2)

A equao (2) indica que:

Paramtro do sistema:

A. Qe (t)
e

Variveis de entrada a serem fornecidas: Condio inicial:

Qs (t).

H(0). H(t).
isto , com nvel constante

Varivel de sada a ser calculada: Caso se tome

dH/dt = 0 tem-se o modelo em regime estacionrio,

e com as vazes de entrada e sada iguais. A vazo de sada dada por uma equao constitutiva, obtida experimentalmente, dada por

Qs = Cv

Pm Pj

(3)

A presso no fundo do tanque obtida pela lei de Stevin

Pm = Pext + gH
Subsituindo-se (4) em (3) temos

(4)

Qs = Cv

Pext + gH Pj

(5)

12

Assim, a equao do movimento (2) pode ser escrita como

Qe Cv dH = dt
de aula ou utilizar a funo

Pext + gH Pj A

(6)

Podemos resolver a equao acima utilizando o mtodo da funo de transferncia, visto em sala

ode do Scilab.

Vamos analisar a resposta do modelo no linear acima a um degrau de

t = 100s

de

Qe = 6.0.103m3 /s kg m3

(suciente para manter o nvel inicial

Qe , que muda no instante H(0) em 1.468 m) para um

valor 10% maior. Assumindo os seguintes valores para os parmetros do sistema:

= 1000

g = 9.8m/s2

m3 /s Cv = 5.0.105 Pa

A = 2m2

Pext = Pj = 1.013.105 P a

Abaixo segue um script que pode ser utilizado no Scilab para resolvermos o problema diretamente atravs da integrao da equao de movimento.

// Definimos a funcao a ser integrada function hdot = f2(t,H) hdot = (Qe - Cv*sqrt(Pext + rho*g*H - Pj))/A; endfunction // faixa de tempo t = 100:3000; // Valores dos parametros A = 2; Qe = 6e-3 + 6e-4 ; rho= 1000; Cv = 5.0e-5; Pext = 1.013e5; Pj = 1.013e5; g = 9.8; hi=1.468 // resolucao da equacao diferencial H = ode(hi,100,t,f2); // tempo antes do degrau t0 = 0:100; clf(); // desenha a condicao inicial plot(t0,hi); // desenha a solucao obtida atraves da resolucao da // equacao diferencial plot(t,H);
Compare o grco da soluo obtida acima com o grco da soluo obtida em sala de aula.

h(t) = 0.2937(1 exp(t/978.7)) + 1.468

(7)

Para fazer essa comparao, adicione no script acima um novo grco para a soluo aproximada (lembre que estamos iniciando em um instante

t = 100s).

8 Funes para simulao de sistemas dinmicos


O Scilab fornece algumas funes para utilizarmos na simulao de sistemas dinmicos. Uma delas a funo

csim

que executa simulaes de sistemas lineares. Podemos, inclusive, utilizar funes

de transferncias que tenhamos calculado. Por exemplo, vamos considerar o problema da caixa d'gua estudado em sala de aula.

13

Determinamos a funo de transferncia como sendo

G(s) =

Pl (s) 4904 = s + 1.0216.103 Qe (s)

(8)

Para simularmos o sistema acima com o Scilab, podemos usar o seguinte script

s = poly(0,'s') // definimos um polinomio // faixa de tempo t = [100:3000]; // Valores dos parametros rho= 1000; g = 9.8; hi=1.468 // altura inicial // funcao de transferencia, escrita em termos de H(s) G = (4904)/(s+1.0216e-3)/(rho*g) // definicao de um sistema linear sys = syslin('c',G); // sinal de entrada Q = 6e-4 + t-t; // simulacao do sistema y = csim(Q, t, sys) + hi; // grafico da solucao clf; plot(t,y);

9 Exerccios
9.1 Precedncia de operadores - Quais so os resultados dos seguintes clculos em Scilab? (tente acertar o resultado antes de usar o Scilab)
2 * 3 + 4 2 + 3 * 4 2 / 3 + 4

9.2 Parenteses - Quais so os resultados dos seguintes clculos em Scilab? (tente acertar o resultado antes de usar o Scilab)
2 * (3 + 4) (2 + 3) * 4 (2 + 3) / 4 3 / (2 + 4)

14

9.3 Funes - Quais so os resultados dos seguintes clculos em Scilab? (tente acertar o resultado antes de usar o Scilab)
sqrt(4) sqrt(9) sqrt(-1) sqrt(-2) exp(1) log(exp(2)) exp(log(2)) 10^2 log10(10^2) 10^log10(2) sign(2) sign(-2) sign(0)

9.4 Trigonometria - Quais so os resultados dos seguintes clculos em Scilab? (tente acertar o resultado antes de usar o Scilab)
cos(0) sin(0) cos(%pi) sin(%pi) cos(%pi/4) - sin(%pi/4)

9.5 Grcos
9.5.1 Dena um vetor x no intervalo -10:10 com incrementos de 0.1. 9.5.2 Faa o grco das funes y = x2 e f = sin(x) sobrepostos na mesma janela. 9.5.3 Faa o grco das funes y = x2 e f = sin(x) em uma mesma janela, mas um embaixo do outro . Utilize o comando subplot. 9.5.4 Faa o grco das funes y = x2 e f = sin(x) em uma mesma janela, mas um ao lado do outro. Utilize o comando subplot.
Em todos os grcos acima, adicione um ttulo geral e os ttulos dos grcos.

9.6 Compare os grcos das solues obtidas pela resoluo da equao diferencial original e a soluo anlitica da equao aproximada da seo 7, explique porque as solues no so exatamente iguais. 9.7 Usando a funo de transferncia dada pela Eq. (8), simule o sistema para os seguintes valores de entrada
Qe = 6.106 Qe = 0 Qe = 6x106 sin(2t)
Nos trs casos acima, faa grcos da funo de entrada e da funo resposta em funo do tempo. Explique os resultados obtidos.

15

Você também pode gostar