Introduo ao Scilab
O que o Scilab?
Softwarelivreparaclculonumricoesimulaodesistemasfsicos
comoumalinguagemdealtonvel(maisfcildecompreender)
Interpretado
Matrizesevetoressodadospadres
um software livre
Objetivos do consrcio:
Linux
Windows
Solaris
Unix
Mac OS
Executando o Scilab?
Help
Prompt de comando
Editor
Variveis especiais
Comando who
Constantes especiais
%e:constanteneperiana
%i:raizquadradade-1,nmeroimaginrio
%pi:constante
%eps:mximovalortalque1+%eps=1
%inf:infinito
%nan:noumnmero
%t:verdadeiro
%f:falso
Operadores de comparao
<
<=
>
>=
==
~=
<>
&
|
~
menor
menorouigual
maior
maiorouigual
igual
diferente
diferente
e
ou
no
Comandos bsicos
pwd: Mostraodiretrioatual.
SCI: MostraodiretrioondeoScilabfoiinstalado.
ls: Listaosarquivosdodiretrio.
chdir(dir) oucd(dir): Mudadediretrio.
mkdir(dir): Criaumdiretrio.
rmdir(dir, s): Removeumdiretrioetodooseucontedo.
Comandos bsicos
exec(arquivo.sci): ExecutaumscriptScilab.
help(): MostraohelpdoScilab.
disp(var):Mostraocontedodevariveis.
save(file, var): Salvavariveisespecficasemumarquivo
binrio.
load(file, var): recuperaosvaloressalvosemarquivo.
clear: Apagaasvariveisnoprotegidasdoambiente.
Comandos bsicos
Exerccio 1:
CrieumdiretriochamadoFile.
Entrenessediretrio.
Executeoscomandos:
A=ones(2,2);
disp(A);
SalveavarivelAnoarquivoteste.dat
ApagueavarivelA
Carregueovalordeteste.datnavarivelAnovamente;
VerifiqueovalordeA;
RemovaodiretrioFile.
Exerccio 2
Verificarsepossveldeclararasseguintesvariveis:
a=1;
Var_1=2;
2var=3;
estavarivel=3;
tens=2;
b=2;B=3;verifiquesebeBtmomesmovalor.
Calculadora
Oscomandossodigitadosdiretamentedoprompt.
Ambiente de programao
Oscomandossodigitadosemumarquivotexto.
Nmeros complexos
Z = a + %i*b
Exerccio 3:
1. Dadososseguintesnmeroscomplexos,
Z1=3+5i;Z2=7+3i
executeasseguintesoperaes:
a) Z1+Z2;
b) Z1*Z2;
c) Z1+sqrt(-20);
d) CalculeosmdulosdeZ1eZ2ecomparecomabs(z);
Lembre-se
2
2
z= a b
Vetores
Declarao de vetores:
X=[x1x2x3...]vetorlinha
X=[x1;x2;x3;...]vetorcoluna
Transposio de vetores:X
Exerccio 4:
1. Verifiqueadiferenaentre:x=[123]ex=[1;2;3]
2. Dadososvetores:
x=[1,2,3,4,5]ey=[2,4,6,8,10]
Calcule:
a)z=x+y;
b)z=x*y;
c)Formastranspostasdexey;
d)Dadosz1=x*y;ez2=x*y;
Verifiquesez1=z2.
Vetores
A = Valor_inicial:incremento:Valor_final
Exemplos:
A = 1:10;
B = 1:2:10;
C = 1:0.2:10;
D = 10:-1:1;
E = 1:%pi:20;
F = 0:log(%e):20;
G = 20:-2*%pi:-10
Dimenso: length(x)
Exerccio 5:
Crie:
Umvetorunitriocom10elementos
Umvetornulocom5elementos
Umvetorcom10elementosaleatrios
Verifiquesuasdimenses
Exerccios 6:
1-DadoovetorX=[12345];
Insiraovalor10nofinal
Apagueoquintoelementodovetor
Atribuavalorzeroaoselementosentre2e4
2-Dadososvetores
X = [ e sin() log(10)]
Y = [10,3 1,1 -2,2]
crieumvetorZquesejadadopelauniodeXeY.
Matrizes
Umamatrizgeralconsisteemm*nnmerosdispostosemm
linhasencolunas:
Matrizes
Exemplo
No Scilab:
M = [1 2 3; 4 5 6; 7 8 9]
Exerccio 7:
Dadasasmatrizes
A=[123;456];eB=[7;8;9]
Determine:
A*B
B*A
A*identidade(A)
A*ones(A)
A*ones(A)+identidade(A)
Exerccio 8:
1. DadaamatrizA=[246;81012;123]
Atribuavalorzerolinha3;
Multipliquealinha2por10;
Removaaltimalinha
InsiraovetorB=[123]naltimalinhadeA
Exerccio 9:
1. Crieumamatriz5X5denmerosaleatrios.
Atribuavalor0coluna2.
Multipliqueoselementosde2a4dacoluna3por10.
Dividaoselementosde1a3dacoluna5por5.
Removaacoluna3.
Removaalinha2.
Soma: C = A + B
Multiplicao: C = A*B
Multiplicao por um escalar: B = A
Matriz complexa: C = A + B*%i (A e B reais)
Matriz transposta: C = A
Determinante: d = det(A)
Diagonal: d = diag(A).
A =
1
2
3
8
9
1
3
3
3
8
8
1
4
4
3
7
2
3
6
9
6
9
3
8
8
1
5
9
4
7
9
3
3
2
1
9
B =
2
9
0
1
8
4
2
0
1
9
9
2
2
0
2
2
0
3
3
1
3
3
1
4
4
2
7
5
2
5
5
3
8
6
3
5
Exerccios 10:
Dadasasmatrizesaolado,
Calcule:
1. C=A+B
2. C=A*B
3. C=10*A+5*B
4. C=A+B*%i
5. C=A+rand(B)
6. DeterminantedeA
7. DeterminantedeB
8. DiagonaldeA
Polinmios
Polinmios
Definindo polinmios:
y = poly([1 2 3], x, coeff); y = 1 + 2x + 3x2
ou: x = poly(0,x); y = 1+2*x + 3*x^2;
Exerccio 11:
Dadososseguintespolinmios:
y=1+4x+5x2+6x3
z=3x+5x3+7x4
Calcule:
a) y+z
e)z*y/(z3)
b) y*z
c) y2+3z
d) z/y
Polinmios
roots(z): calcula as razes de um polinmio
[r,q] = pdiv(y,z): efetua a diviso e calcula quociente e resto
coeff(y): retorna os coeficientes do polinmio.
Exerccio 12:
Dadososseguintespolinmios:
y=5+3x+10x2+8x3+10x4+6x5
z=2x+3x3+4x4+5x5
Calcule:
a) suasrazes
b) oscoeficientes
c) orestoeoquocientedasdivises:
y/zez/y
Matrizes de polinmios
Exerccio 13:
Dadasasmatrizesdepolinmios:
A=[2*x^2+3*xx;1x^3+2];
B=[3*x^4+x^2x^5;8*x+15];
Calcule:
A*B
A/B
DeterminantesdeAeB
Matrizes de polinmios
Se A uma matriz de polinmios:
A = A(num): retorna apenas os numeradores
A=A(den): retorna apenas os denominadores
Exemplo:
s = poly(0, s);
A = [(1+2*s+3*s^3)/(s+2) 3*s+1/(2*s+1);s^4/(s^2+2)
3*s^2+4*s^3]
N = A(num);
D = A(den);
Matrizes simblicas
Uma matriz simblica pode ser construda com elementos do
tipo string:
M =['a' 'b';'c' 'd'] ;
Se atribuirmos valores s variveis podemos visualizar a
forma numrica da matriz com a funo evstr():
Exemplo:
a = 1;
b = 4;
c = 3;
d = 5;
evstr(M);
Exerccio 14:
1. Resolvaosistemalinear.Substituaassoluesnaequaopara
confirmarasoluo.
2X + 3y + 3z = 2
4x + 3y+ 2z = 1
3x + 7y + 9z = 5
-->A./B
ans =
0.5
0.5 0.5
0.375 0.4 0.5
0.5
0.5 0.5
Matrizes esparsas
Umamatrizditaesparsaquandopossuiumagrandequantidade
deelementosiguaisazero.
Amatrizesparsaimplementadaatravsdeumconjuntodelistas
ligadasqueapontamparaelementosnozero.Deformaqueos
elementosquepossuemvalorzeronosoarmazenados.
Em Scilab:
A = [0 0 1; 2 0 0; 0 3 0]
-->sparse(A)
ans =
( 3, 3) sparse matrix
( 1, 3)
1.
( 2, 1)
2.
( 3, 2)
3.
Matrizes esparsas
Exemplo:
A=[001;200;030];
A=sparse(A);
B=[010;202;300];
B=sparse(B);
C=A*B;
ParaobteramatrizCnaformacompleta:
B = full(B);
Matrizes esparsas
Funes que criam matrizes esparsas:
sprand(n,m,fill): Matriz esparsa aleatria com n*m*fill elementos no
nulos.
speye(n,n): Matriz identidade esparsa
spzeros(n,m): Matriz esparsa nula de dimenses nXm
spones(A): Coloca valor 1 onde Aij diferente de zero
Exerccio 15:
Verifiqueasformascompletasdasmatrizesabaixocomcomando
full.
A=sprand(2,2,0.1);
B=speye(2,2);
C=spzeros(2,2);
D=spones(A);
Listas
Uma lista um agrupamento de objetos no necessariamente do
mesmo tipo.
Uma lista simples definida no Scilab pelo comando list, que possui
esta forma geral:
L = list(a1,a2,a3 aN)
ondea1,a2,a3aNsooselementosdalista
Exemplo:
L=list(23,1+2*%i,'palavra',eye(2,2))
-->L
L=
L(1)
23.
L(2)
1.+2.i
L(3)
palavra
L(4)
1.0.
0.1.
L = [2 3 , 1 + 2 i, p a la v r a , 1 0 ]
0 1
Exerccio 16:
Verifiqueosvaloresde:
L(1),L(2),L(4)eL(4)
Listas
Podemoscriarsublistas,ouseja,listasdentrodelistas.
Exemplo:
L=list(23,1+2*%i,'palavra',eye(2,2))
L(4)=list('outrapalavra',ones(2,2))
Acessandoelementosdentrodalistadalista:
L(4)(1)
L(4)(2)
Agrupandoduaslistas:
L1=list(5,%pi,velocidade,rand(2,2));
L2=list(1+2*%i,ones(3,3),acelerao);
L=list(L1,L2);
Funes elementares
imag(x): Mostra a parte imaginria de um complexo
real(x): Mostra a parte real de um complexo
log(x), log10(x), log2(x): Logaritmos natural, base 10 e base 2
modulo(x,y): Mostra o resto da diviso de x por y
abs(x): Retorna o valor absoluto (se x real) e o mdulo
(se x complexo)
Funes elementares
round(x): Arredonda o valor de x para o inteiro mais prximo
floor(x): Arredonda para o menor inteiro
ceil(x): Arredonda para o maior inteiro
sqrt(x): Calcula a raiz quadrada de x
Funes trigonomtricas
cos(x), sin(x), tan(x), cotg(x): Retorna cosseno, seno,
tangente ou cotangente de x (x deve estar em radianos)
acos(x), asin(x), atan(x): Retorna o ngulo (em radianos)
Exerccio 17:
Calcule:
a=sin(%pi/2);
b=tan(%pi);
c=cotg(%pi/3);
d=cos(%pi/4)+sin(%pi/4);
Funes elementares
Exerccios 18:
Dados:
x=[0.53.442.81.5];
y=[0.92.251.11.7];
Calcule:
a)seno(x),cosseno(x*.y),tangente(y)
b)log(x),log10(x*y),log2(x*y)
c)ceil(x)
d)floor(y)
e)round(x.*y)
f)sqrt(x)+floor(y.*y)
g)Verifiqueseabs(2+2*%i)=sqrt(8)
O lao for
for variavel = inicio:incremento:fim
instrucao_1
Instrucao_2
...
instrucao_n
end
Exemplo:
a=0;
fori=1:1:3
a=a+1;
end
L=list(2,[12;34],'elemento');
fork=L
disp(k);
end
O lao while
while condicao
instrucao_1
instrucao_2
... ...
instrucao_n
end
Olaowhile repeteumaseqnciadeinstruesenquanto
umacondioforsatisfeita.
tilquandonosesabeonmerodeiteraes.
O lao while
Operadorespermitidos:
= =ou=(iguala)
<(menorque)
>(maiorque)
<=(menorouigual)
>=(maiorouigual)
< >ou~=(diferente)
Exemplo:
x=1;v=[];
whilex<=16;
v=[vx];x=x*2;
end
if then else
if condicao_1 then
sequencia_1
else
sequencia_2
end
x = 10;
if x < 0 then
y = -x;
elseif x == 1
y = x;
elseif x == 2
y = 2*x;
else
y = 5*x;
end
disp(y);
Scripts
Scripts
Exerccio 20:
Dadoovetorposiodeumobjetoqueestsedeslocandoa
umaaceleraoconstantea=10m/s2,comvelocidadeinicial
v=5m/seposioS0=1m,calculeasuaposioe
velocidadeentret=1e10s.Armazeneosdadosemvetores.
Funes
Devem ser usadas para operar sobre um conjunto de dados,
realizar algumas instrues e retornar o resultado. Ex.:
encontrarovalormximodeumvetor
Melhor estratgia em programao quebrar um programa
em vrias partes menores (funes)
Regra de escopo: variveis definidas dentro de um funo
(conhecidas como variveis locais) no permanecem no
ambiente aps a execuo da funo.
Funes
Por converso, arquivos de funes recebem extenso .sci.
Por exemplo: funcao.sci
Uma funo pode ser carregada de trs formas:
Funes
Definio:
function [y1,...,yn]= nome_da_funcao(x1,...,xm)
instrucao_1
instrucao_2
...
instrucao_p
endfunction
onde:
x1,...,xm so os argumentos de entrada;
Funes
Exemplo:
1. Definirumafunoqueconverteumnmerocomplexoda
formacartesianaparaapolar.
Noarquivo:cart_to_polar.sci,digite:
function [mod,ang] = cart_to_polar(re,im)
mod = sqrt(re^2 + im^2);
ang = atan(im/re) * 180/%pi;
endfunction
Noarquivoprogram.sce(arquivodeexecuo)digite:
exec(' cart_to_polar.sci');
z = 2 + 2*%i;
[mod,ang] = cart_to_polar(real(z),imag(z));
disp(mod);
disp(ang);
Funes
Exerccio 21:
1Denvolvaumafunoquecalculeasrazesdeumaequao
dosegundograuusandoafrmuladeBskara.Afuno
devereceberumpolinmioeretornarumvetorcomas
solues.Deve-secriarumarquivotextoparaafunoeum
paraaexecuodoprograma.
2Crieumafunoquecalculeofatorialdeumnmero
usandoocomandodeiteraofor.Faaomesmousandoo
comandowhile.
Grficos no Scilab
Grficos no Scilab
Para gerar grficos bidimensionais:
plot2d(x,y,style)
Ondexeysovetores.
Exemplo:
x=[-2*%pi:0.1:2*%pi];
y=sin(x);
plot2d(x,y);
Syle: tipo de linha do grfico. Valores inteiros positivos definem linhas
contnuas, valores negativos definem pontos.
plot2d(x,y,-1);
plot2d(x,y,2);
Grficos no Scilab
y pode ser uma matriz, sendo que o nmero de linhas de
y deve ser igual ao nmero de elementos de x
Exemplo:
x=[0:0.1:2*%pi];
y=[sin(x)cos(x)];
plot2d(x,y);
Grficos no Scilab
x e y podem ser matrizes de mesma dimenso
Exemplo:
t=[-5:0.1:5];
x=[tt];
y=[(t^2)(t^3)];
plot2d(x,y);
Grficos no Scilab
Comandos bsicos:
clf: limpa a tela, evitando que o prximo grfico se
sobreponha ao anterior:
Exemplo:
y=sin(x);
plot2d(x,y);
z=cos(x);
plot2d(x,z);
Mas:
clf;plot2d(x,y);
Grficos no Scilab
Comandos bsicos:
xtitle ('titulo'): apresenta o ttulo do grfico
legend('legenda1', 'legenda2',)
Exemplo:
t=0:0.1:10;
S=5+10*t+0.5*2*t.*t;
V=10+2*t;
plot2d(t,S,-2);
plot2d(t,V,-4);
xtitle(Cinematica);
legend(Posio,Velocidade);
Grficos no Scilab
Comandos bsicos:
subplot: divide um janela de um grfico em sub-graficos
Exemplo:
subplot(221)
plot2d(x,sin(x))
subplot(222)
plot2d(x,cos(x))
subplot(223)
plot2d(x,tan(x))
subplot(224)
plot2d(x,sin(x).*cos(x))
Grficos no Scilab
Comandos bsicos:
logflag: define escala linear ou logartmica
nnlinearxlinear
nllinearxlogartmica
lllogartmicaxlogartmica
Exemplo:
x=1:100;
subplot(1,2,1);
plot2d(x,y,logflag='nn');
xtitle(Escalalinear);
subplot(1,2,2);
plot2d(x,y,logflag='ll');
xtitle(Escalalog-log);
Grficos no Scilab
Grficos tridimensionais
meshgrid: cria matrizes ou vetores 3D
Exemplo:
-->[xy]=meshgrid(-1:0.5:4,-1:0.5:5)
y=
-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.
-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5
0.0.0.0.0.0.0.0.0.0.0.
0.50.50.50.50.50.50.50.50.50.50.5
1.1.1.1.1.1.1.1.1.1.1.
1.51.51.51.51.51.51.51.51.51.51.5
2.2.2.2.2.2.2.2.2.2.2.
2.52.52.52.52.52.52.52.52.52.52.5
3.3.3.3.3.3.3.3.3.3.3.
3.53.53.53.53.53.53.53.53.53.53.5
4.4.4.4.4.4.4.4.4.4.4.
4.54.54.54.54.54.54.54.54.54.54.5
5.5.5.5.5.5.5.5.5.5.5.
x=
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
-1.-0.50.0.51.1.52.2.53.3.54.
Grficos no Scilab
Grficos tridimensionais
mesh: gera grficos em 3D
Exemplo:
[X,Y]=meshgrid(-5:0.1:5,-4:0.1:4);
Z=X.^2-Y.^2;
xtitle('z=x2-y^2');
mesh(X,Y,Z);
Grficos no Scilab
Campo vetorial
Exemplo:
Velocidadedaguaemmovimentocircular
[x,y]=meshgrid(1:0.5:10,1:0.5:10);
vx=y./(x.*x+y.*y);
vy=-x./(x.*x+y.*y);
champ(x(1,:),y(:,1),vx,vy);
Grficos no Scilab
Curvas paramtricas
param3d: Gera uma curva paramtrica em 3D
Exemplo:
t=0:0.1:5*%pi;
param3d(sin(t),cos(t),t/10,35,45,"X@Y@Z",[2,3])
Grficos no Scilab
Matplot: Mostra matrizes em 2D usando cores.
Exemplo:
-->Matplot([123;456])
-->A=round(rand(5,5)*10)
A=
4.7.4.10.5.
3.5.7.5.8.
1.3.9.5.8.
6.7.2.6.10.
3.1.4.6.8.
-->Matplot(A)
Grficos no Scilab
Colormap: Define o mapa de cores
Exemplo:
-->xset("colormap",graycolormap(32))
-->Matplot(A)
-->xset("colormap",hotcolormap(32))
--> Matplot(A)
Grficos no Scilab
Bar: mostragraficamenteumhistograma
Exemplo
h=[1451087431];
bar(h);
f=[0.30.10.0050.010.20.120.430.50.320.120.15];
x=0:0.1:1;
scf();
bar(x,f,r);
err=meof(fd): Verificaseofinaldoarquivofoiencontrado.
fd=mopen(novo_teste.txt,'w');
a=A;b=B;c=C;
fprintf(fd,A:%t%t%t',a,b,c);
mclose(fd);
//Abrindocomappend
fd=mopen(novo_teste.txt,'a');
a=V,b=X,c=Z;
fprintf(fd,B:%t%t%t,a,b,c);
mclose(fd);
//Leoarquivo
fd=mopen(novo_teste.txt,r');
frase=[];
while(meof(fd)==0)
str=mgetstr(1,fd);
frase=[frasestr];
end
Funes importantes
find: Achaosndicesdoselementosdeumvetorquecontmoselementos
procurados:
Exemplo:
A=[123456];B=find(A<3);disp(A(B));
C=['r','s','r','t','a'];find(C=='r');
sort: organizaemordemdecrescente
Exemplo:A=[123;567;231];v=sort(A,r);s=sort(A,c);
unique: extraioscomponentesdeumnicovetor.
Exemplo:A=[1342224566633];B=unique(A);
union: extraoselementosdauniode2vetores:
Exemplo:A=[111222344];B=[12567];C=union(A,B);
Funes importantes
Vectorfind: Achaemumamatrizumdadovetor(linhasoucolunasdamatriz).
Exemplo:
A=[123;234;456]
B=[123]
vectorfind(A,B,'r')
Exerccio 22:
GereumamatrizaleatriaA(5X5)comvaloresentre0e10.
Arredondeseusvalores.
AcheosdiferentesvaloresdamatrizecoloquenovetorB.
Ordeneaslinhasdamatrizemordemdecrescente.
ColoqueaunioentreAeBemC.
AcheasposiesdosvaloresdeA<5namatriz
EscrevaessamatriznoarquivoMat.txt
Histograma
Histogramaumaformadevisualizarasfreqnciasdosdadosdeumvetorem
formadebarra.Paraencontrarasfreqnciasnecessrioconheceroslimitesxmine
xmaxdovetorveonmerodecaixasNemquesequeiradistribuirosdados.Aidia
colocarnamesmacaixaonmerodeelementosqueestentreovalormnimoeo
valormximodacaixa.
Exerccio 23:
Crieumvetoraleatriode10000posiescomocomandorand(1,10000,'norm'),
encontreohistogramadessevetorefaaogrficocorrespondente.Qualaformada
curvaencontrada?
Dicas:
1.Crieumarquivoparaseroprogramaprincipal:programa.sce.Crieovetor
nessearquivo,chameafunoabaixoefaoogrficodohistogramausandoplot2d
2.Crieumafunocomonomehistograma.sciquerecebaosparametros:veN,
ondevovetoreNonmerodecaixas,eretorne[x,hx],ondexovalorda
coordenadaxehxafreqncia.
FIM