Escolar Documentos
Profissional Documentos
Cultura Documentos
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
. Em seguida,
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
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.
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.
a = 1+1
terminando em ; e outra sem o ;. Internamente o resultado exatamente o mesmo: atribuimos
1+1
varivel
a.
-->a a =
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
ans.
O Scilab diferente de
d.
Por exemplo, bf D
Note que ao voc sair do Scilab as variveis do variveis em um arquivo com a funo mais a frente.
save.
workspace
A constante matemtica
cos
sin
-->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.
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
4 Grcos
O comando bsico para exibio de grcos no Scilab o para isso utilizamos as barras // '. Inicialmente, vamos gerar alguns dados;
plot.
exemplos demonstrando vrias opes de exibio de grcos. Vrios exemplos esto comentados,
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
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);
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
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
-->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
Existem algumas funcionalidades deste editor que devem ser mencionadas. esto no menu
Executar
As mais usadas
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
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
Aplicativos
Inicialmente, salve o arquivo em algum diretrio de maneira que voc tenha sempre uma cpia.
10
function
endfunction.
No
exemplo seguinte denimos a funo chamada f1, a qual recebe o argumento x, multiplica ele por
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.
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,
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.
ans.
O se-
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
(1)
(2)
Paramtro do sistema:
A. Qe (t)
e
Qs (t).
H(0). H(t).
isto , com nvel constante
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)
Pm = Pext + gH
Subsituindo-se (4) em (3) temos
(4)
Qs = Cv
Pext + gH Pj
(5)
12
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.
t = 100s
de
Qe = 6.0.103m3 /s kg m3
= 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.
(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).
csim
de transferncias que tenhamos calculado. Por exemplo, vamos considerar o problema da caixa d'gua estudado em sala de aula.
13
G(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