Escolar Documentos
Profissional Documentos
Cultura Documentos
São Carlos
Agosto de 2007
(Revisado em Setembro de 2012)
2
São Carlos
Agosto de 2007
(Revisado em Setembro de 2012)
3
Índice
PREFÁCIO
Capítulo 1
1. INSTALAÇÃO
1.1 Instalando o programa Scilab em ambiente Windows
Capítulo 2
2. INICIANDO O APLICATIVO SCILAB
2.1 O ambiente de trabalho
2.2 Obtendo ajuda
2.3 Primeiros passos
2.3.1 Inserindo comentários
2.3.2 Constantes
2.3.3 Operações básicas
2.3.4 Apagando variáveis
2.3.5 Limpando o ambiente de trabalho
2.4 Funções trigonométricas
2.5 Constantes especiais
2.6 Trabalhando com vetores e matrizes
2.6.1 Vetores
2.6.2 Matrizes
2.7 Trabalhando com polinômios
2.8 Construindo gráficos
2.8.1 Comandos básicos
2.9 Manipulando funções
2.10 Comandos especiais
Capítulo 3
3. MATEMÁTICA COM SCILAB
3.1 Um pouco mais de vetores
3.1.1 Operações com vetores
3.2 Matrizes
Capítulo 4
4. NOÇÕES DE PROGRAMAÇÃO
4.1 Programando com Scilab
4.2 Comandos para Iterações
4.3 Definindo Scripts
4.4 Definindo Funções
Capítulo 5
5. MÉTODOS NUMÉRICOS EMBUTIDOS
5.1 Sistemas lineares
5.2 Sistemas não-lineares
5.3 Mínimos quadrados
5.4 Derivação e Integração
5.5 Sistemas de EDO
Bibliografia
Apêndice
Licença do Scilab
Licença da logomarca
5
PREFÁCIO
O programa Scilab foi criado por pesquisadores pertencentes ao Institut de
Recherche en Informatique et an Automatique, INRIA, através do projeto
MÉTALAU (Méthods, augorithmes et logiciels pour l’automatique) e à École
Nationale des Ponts et Chaussées, ENPC, no ano de 1990. Atualmente vêm
sendo mantido e desenvolvido por um consórcio de empresas e instituições
francesas, denominado Consórcio Scilab (a criação deste consórcio foi em
maio de 2003). É distribuído livremente e encontra-se disponível para
download no seguinte endereço (http://www.scilab.org/).
Scilab vem sendo utilizado ao redor do mundo tanto em ambientes
educacionais quanto industriais. Foi desenvolvido para ser um sistema
aberto, onde o usuário pode definir novos tipos de dados e operações a
partir destes.
http://www.scilab.org/legal/index_legal.php?page=faq.html
São eles:
Capítulo 1
1. INSTALAÇÃO
____________________________
Capítulo 2
File
Edit
Preferences
Control
Editor
Aplications
? (Help)
13
2.3.2 Constantes
--> x = 5
x =
5.
--> x = 5
x =
5.
--> X = 10
X =
10.
--> x = 5;
--> x
x =
5.
Soma
-->x+X
ans =
15.
Subtração
-->x-X
ans =
-5.
Produto
--> x*X
ans =
50.
Divisão
--> x/X
ans =
0.5
--error 27
division by zero...
Exponenciação
Os símbolos “^” ou “**” são utilizados para se elevar uma variável a
uma potência determinada.
--> x^3
ans =
125.
ou
--> x ** 3
ans =
125.
Raiz quadrada
A raiz quadrada de um número é obtida através do comando sqrt(),
com a variável inserida dentro do parênteses:
--> srqrt(4)
ans =
2.
Função Exponencial, ex
A função exponencial é obtida através do comando exp(),com a
variável inserida dentro do parênteses:
--> exp(x)
16
ans = 148.41316
Logaritmo
O comando log() é empregado para calcular o logaritmo neperiano de
uma variável. O logaritmo na base 10 é calculado com o comando
log10().
--> log(2.7182818)
ans =
1.0000000
--> log10(100)
ans =
2.
-->clear x
-->clear
-->% i
ans =
i
-->%pi
ans =
3.1415927
-->%e
ans =
2.7182818
-->%eps
%eps =
2.220D-16
18
-->%inf
%inf =
Inf
A divisão de um número por %inf resulta sempre em zero.
2.6.1 Vetores
Vetor Linha
Para inserir um vetor linha no programa Scilab a seguinte sintaxe é
utilizada:
--> Vetor1 = [1 2 3]
Vetor1 =
1. 2. 3.
1. 3.1415927 2.220D-16
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
1. 3. 5. 7. 9.
10. 9. 8. 7. 6. 5.
Vetor Coluna
Um vetor coluna é inserido das seguintes formas:
-->Vetor7 =[1
-->2
-->3
-->4
-->5]
Vetor7 =
1.
2.
3.
4.
5.
Ou, alternativamente:
-->Vetor8 =[1;2;3;4;5]
Vetor8 =
1.
2.
3.
4.
5.
-->Vetor_Linha=[1 2 3 4 5]
Vetor_Linha =
1. 2. 3. 4. 5.
Vetor_Coluna = Vetor_Linha’
20
Vetor_Coluna =
1.
2.
3.
4.
5.
2.6.2 Matrizes
A =
2. 3. 1.5
1. 6.5 3.7
--> vetor1=[1 2 3]
vetor1 =
1. 2. 3.
vetor2 =
0.4 4.5 6.
-->matriz1=[vetor1; vetor2]
matriz1 =
1. 2. 3.
0.4 4.5 6.
idolos =
Ayrton Senna da Silva
L(1)
2.
L(2)
1. 2.
3. 4.
L(3)
Strogonoff
L(4)
3.1415927
-->polinomio1=poly([1 2 4],'x','c')
polinomio1 =
2
1 + 2x + 4x
-->roots(polinomio1)
ans =
- 0.25 + 0.4330127i
- 0.25 - 0.4330127i
polinomio2 =
2 3
- 8 + 14x - 7x + x
-->horner(polinomio1,10)
ans =
421.
-->horner(polinomio2,10)
ans =
432.
-->plot(x, y)
-->x=[1:0.01:10];
-->plot(x,sin(x))
-->xlabel("x")
-->ylabel("sen(x)")
-->xgrid();
24
Figura 2.6: Gráfico da função com título, nomes nos eixos e grade.
Exemplo:
-->x=[0:0.1:2*%pi]';
-->plot(x,sin(x));scf(1);plot(x,[sin(x) sin(2*x)]);
Exemplo:
-->x=[0:0.1:2*%pi]';
-->plot(x,sin(x))
-->clf()
-->plot(x,sin(x))
25
-->a.y_location ="right";
-->clf()
-->clf();
-->t=0:%pi/20:2*%pi;
-->plot(t,sin(t),'ro-.',t,cos(t),'cya+',t,abs(sin(t)),'--mo')
//Data specification
t=-%pi:0.1:%pi;
size(t)
plot(t) // simply plots y versus t vector size
clf(); // clear figure
-->subplot(221)
-->subplot(222)
-->plot(t,sin(t)')
-->subplot(223)
-->plot(t',sin(t))
-->a=gca();
27
-->subplot(224)
-->plot(t',sin(t)')
funcao(x,y) = sin(x)+cos(y)-10
Sintaxe no Scilab:
deff('[R]=funcao(x,y)','R=sin(x)+cos(y)-10')
-->funcao(2,4)
ans =
- 9.7443462
Comando diary
O comando diary (‘nome_do_arquivo) permite que o Scilab grave em
um arquivo todos os dados de entrada e da maioria dos dados de
saída digitados no ambiente de trabalho, ou seja, gera umdiário de
uma sessão de trabalho. Este comando é útil quando se trabalha
diretamente na linha de comando. O comando diary(0) encerra este
comando.
Exemplo:
Na linha de comando digite: diary(‘exemplo.txt’). Digite os comandos
abaixo:
-->//Calculo da área de uma circunferência de raio 2 metros
28
-->r=2
r =
2.
-->area=%pi*r^2
area =
12.566371
-->diary(0)
Comando who
Este comando é utilizado para listar os nomes de todas as variáveis
corrrentes utilizadas pelo Scilab.
Exemplo:
-->who
your variables are...
Comando whos
Este comando é utilizado para listar todos os nomes, tipos e memória
utilizada pelas variáveis.
-->whos
Name Type Size Bytes
OBS: Se ao definir uma variável como global ela ainda não possuir
um valor, esta será iniciada como uma matriz vazia.
30
Exemplo:
-->a=10
a =
10.
-->clear a
-->a
--error 4
undefined variable : a
Comando pwd
O programa Scilab possui comandos que podem ser utilizadas para
manipular arquivos e diretórios. O comando pwd mostra o diretório
no qual se está trabalhando.
-->pwd
ans =
Comando dir
O comando dir exibe o conteúdo do diretório corrente.
-->dir
ans =
Comando ls
O comando ls também exibe o conteúdo do diretório corrente (na
forma de um vetor coluna).
31
-->ls
ans =
Apostila_Curso
CD_Curso
teste.txt
Material_diverso
Arquivos_diversos
Divulgacao
Projeto_Extensao
Apostila_Web
ODE_Scilab.pdf
SCILAB_dialogs.pdf
intro.pdf
MoreOnScilabGraphics.pdf
scilab12.pdf
Comando chdir
Utilizando o comando chdir é possível mudar o diretório de trabalho.
-->chdir CD_Curso
ans =
0.
-->dir
ans =
Comando mkdir
Este comando permite a criação de um diretório diretamente da linha
de comando do Scilab. No exemplo cria-se o diretório <teste> e na
seqüência emprega-se o comando dir para confirmação.
-->mkdir('teste')
ans =
1.
-->dir
ans =
32
Comando format
O comando format define o formato de impressão de um número.
Exemplo:
-->x=[100 %eps];
-->format('e',10);x
x =
1.000D+02 2.220D-16
-->format('v',10);x
x =
100. 2.220D-16
33
Capítulo 3
-->x=poly(0,'x');
-->a=[1 6];
-->b=[1/x, a*x, x**2]
b =
2
1 x 6x x
- - --- -
x 1 1 1
-->zeros(1,5)
ans =
0. 0. 0. 0. 0.
-->ones(0:5)
ans =
1. 1. 1. 1. 1. 1.
-->x=[1 3 5];
-->y=[2 3 7];
-->x+y
ans =
3. 6. 12.
ans =
2. 4. 6.
-->5*x
ans =
5. 15. 25.
-->vetor1 = [1 2 3]
vetor1 =
1. 2. 3.
-->vetor2
vetor2 =
0.4 4.5 6.
-->vetor1*vetor2
--error10
Multiplicação incoerente
-->vetor1.*vetor2
ans =
0.4 9. 18.
-->vetor1^2
ans =
1. 4. 9.
-->vetor1 .^ vetor2
ans =
1. 22.627417 729.
35
Norma de um Vetor
No Scilab é possível calcular a norma de um vetor empregando os
comandos:
1
n 2
x 2 = ∑ xi2
i =1
n
x 1 = ∑ xi
i =1
x ∞
= max1≤i≤n xi
Dimensão de um vetor
A dimensão de um vetor é obtida empregando-se o comando size.
Exemplo:
1. 2. 3.5 6.3
-->size(x)
ans =
1. 4.
-->size(x,’r’)
ans =
1.
-->size(x,’c’)
ans =
4.
36
Transpondo um vetor
Um vetor pode ser transposto da seguinte forma:
-->x
x =
1. 2. 3.5 6.3
-->x'
ans =
1.
2.
3.5
6.3
-->x
x =
1. 2. 3.5 6.3
-->x(3)
ans =
3.5
-->x(3)=0.5
x =
1. 2. 0.5 6.3
‐‐>y = 1:10
y =
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
‐‐>y([2:5,8])=0
y =
1. 0. 0. 0. 0. 6. 7. 0. 9. 10.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
-->vetor=[2:5,8]
vetor =
2. 3. 4. 5. 8.
-->y(vetor)=0
y =
1. 0. 0. 0. 0. 6. 7. 0. 9. 10.
10.
-->y($-3:$)=2
y =
1. 0. 0. 0. 0. 6. 2. 2. 2. 2.
3.2 Matrizes
1. 3. 3.5
0.5 1. 2.
2.5 7. 4.
-->A'
ans =
1. 0.5 2.5
3. 1. 7.
3.5 2. 4.
-->A
A =
1. 3. 3.5
0.5 1. 2.
2.5 7. 4.
-->det(A)
ans =
2.5
-->inv(A)
39
ans =
- 4. 5. 1.
1.2 - 1.9 - 0.1
0.4 0.2 - 0.2
Matriz identidade
No Scilab é possível gerar uma matriz identidade utilizando-se o
comando eye().
-->identidade=eye(5,5)
identidade =
1. 0. 0. 0. 0.
0. 1. 0. 0. 0.
0. 0. 1. 0. 0.
0. 0. 0. 1. 0.
0. 0. 0. 0. 1.
-->size(identidade)
ans =
5. 5.
-->size(identidade,'c')
ans =
5.
-->size(identidade,'*')
ans =
25.
-->M = [1 2 3; 4 5 6; 7 8 9]
M =
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->M(3,2)
ans =
8.
-->M(3,2)=0
ans =
1. 2. 3.
4. 5. 6.
7. 0. 9.
-->M([1 2],1)
ans =
1.
4.
-->M(3,$)
ans =
9.
2.
5.
0.
-->M(2,:)
ans =
4. 5. 6.
41
1. 2. 0. - 1.
2. 6. - 3. - 3.
3. 10. - 6. - 5.
-->rank(C)
ans =
2.
Matriz singular
Pode-se determinar se uma matriz é ou não singular avaliando seu
número de condição. Se a resposta for um número muito grande, a
matriz é dita singular. Caso contrário, não.
-->D=[ 1 6 2; -2 3 5; 7 12 -4]
D =
1. 6. 2.
- 2. 3. 5.
7. 12. - 4.
-->det(D)
ans =
6.899D-15
-->cond(D)
ans =
1.345D+16
42
Capítulo 4
4. NOÇÕES DE PROGRAMAÇÃO
Comando For
O comando for tem a forma geral:
-->for i=1:3
-->a=i+1
-->end
a =
2.
a =
3.
a =
4.
43
Comando While
O comando while tem a seguinte forma:
while condição
instrucao_1
instrução_2
...............
instrução_n
end
Comandos condicionais
O Scilab implementa dois tipos de comandos condicionais: if-the-else
e select case.
If-Then-Else
O comando if-then-else tem duas formas. Na forma mais simples, a
sintaxe é:
If condição_1 then
Seqüência_de_instruções_1
Else
Sequencia_de_instruções_2
End
If condição_1 then
Sequencia_de_instruções_1
Elseif condição_2
Sequencia_de_instruções_2
.........................
Elseif condição_n
Sequencia_de_instruções_n
44
End
Exemplo:
-->x=1
x =
1.
- 1.
-->x=-1
x =
- 1.
- 1.
Select case
O comando condicional select case tem a seguinte sintaxe:
Select variável_de_teste
Case expressão_1
Sequencia_de_instrucoes_1
Case expressão_2
Sequencia_de_instrucoes_2
........................
Case expressão_n
Sequencia_de_instrucoes_n
Else
Sequencia_de_instrucoes_n+1
End
Exemplo:
-->x=-1
x =
- 1.
-->select x, case 1, y = x+5, case -1, y=sqrt(x), end
y =
Exemplo:
-->deff('y=umafuncao(x)', 'y=x^2')
-->z=umafuncao(5)
z =
25.
-->[a, b]=outrafuncao(3,4)
b =
12.
a =
46
7.
Exemplo:
No arquivo:
function [y1,y2]=minhafuncao(x1,x2)
y1=x1-x2
y2=x1+x2
endfunction
No ambiente Scilab
-->exec minhafuncao.sci
47
-->[m1, m2]=minhafuncao(1,3)
m2 =
- 2.
m1 =
4.
No arquivo:
function y = minhafuncao(x)
y(1) = x(1)-x(2)
y(2) = x(1)+x(2)
endfunction
ou:
function y = minhafuncao(x)
y = [x(1)-x(2) ; x(1)+x(2)]
endfunction
No ambiente Scilab
-->exec minhafuncao.sci
- 2.
4.
48
Capítulo 5
x=linsolve(A,b)
2 x + y − 2 z = 10
3x + 2 y + 2 z = 1
5 x + 4 y + 3z = 4
2 1 − 2 x 10
A= 3 2 2 x= y b= 1
5 4 3 z 4
No Scilab, tem-se:
-->A
A =
2. 1. - 2.
3. 2. 2.
5. 4. 3.
-->b
b =
10.
1.
4.
-->linsolve(A,-b)
ans =
1.
2.
- 3.
-->inv(A)*b
ans =
1.
2.
- 3.
x = fsolve(x0,funcao)
Exemplo:
--> deff(‘y=f(x)’,’y=x^3-exp(x)’)
ou num arquivo:
function y = f(x)
y = x^3-exp(x)
endfunction
--> x0 = 1.5;
--> x = fsolve(x0,f)
x =
1.8571839
Exemplo:
function y = g(x)
y = [x(1)-x(2)^2 ; x(1)*x(2)+1]
endfunction
1. -1
--> deff('y=h(x,a,b)','y=exp(x)-a*sqrt(x)+b')
--> x = fsolve(1.5,list(h,2,-3)) // a = 2 e b = -3
x =
1.7279352
50
[fopt,aopt]=leastsq(desvio2,a0)
Vamos explicar o que significa cada uma dessas variáveis por meio de
um exemplo, mas antes disso vamos simular a coleta de pontos
experimentais usando a função rand(). Se não receber nenhum
argumento, rand() gera um número pseudoaleatório entre 0 e 1, se
receber dois argumentos rand(m,n) gera uma matriz de dimensão m
por n.
--> x = 1:5;
--> erro = 0.4*(rand(1,10)-0.5)
erro =
function y = func(x,a)
y = a(1)*x^2+a(2)
endfunction
function y = desvio(a,x,y_exp)
y = func(x,a)-y_exp
endfunction
2.9932112 - 0.8860378
51
soma2 =
0.0512337
-->deff('y=f(x)','y=x^3/3');
-->x = 0:2:10
x =
0. 2. 4. 6. 8. 10.
-->f(x)
ans =
-->diff(f(x))./diff(x)
ans =
-->deff('y=f(x)','y=x^3/3');
-->x = 0:2:10
x =
0. 2. 4. 6. 8. 10.
-->f(x)
52
ans =
-->derivative(f,x')
ans =
1.222D-11 0. 0. 0. 0. 0.
0. 4. 0. 0. 0. 0.
0. 0. 16. 0. 0. 0.
0. 0. 0. 36. 0. 0.
0. 0. 0. 0. 64. 0.
0. 0. 0. 0. 0. 100.
-->x=[2,2,3]
-->J=derivative(sisfun,x')
J =
2. 3. - 1.
4. 0. 1.
1. - 2. - 6.
-->a = 2
a =
2.
-->b = 3
b =
3.
-->x = a:.25:b
x =
-->I = integrate('3*x^2','x',a,x)
I =
A função intg() é mais simples e permite que você passe uma função
definida anteriormente:
-->deff('y=f(x)','y=3*x^2')
-->a = 2, b = 3
a =
2.
b =
3.
-->intg(a,b,f)
ans =
19.
y=ode(y0,x0,x,f)
-->y0 = 1;
-->x0 = 0;
-->dx = .1;
54
-->xf = 1;
-->x = x0:dx:xf;
-->y = ode(y0,x0,x,f)
y =
column 1 to 6
column 7 to 11
-->plot(x,y,'o'), plot(x,exp(-x));
-->xlabel('x'),ylabel('y');
-->xgrid();
-->a = -2; b = 1;
-->y = ode(y0,x0,x,list(f,a,b));
-->a
a =
- 1. 0. 1.
1. 3. 1.
2. 0. 0.
-->x0 = 0;
-->x = x0:.1:1;
-->y0 = [1 0 -1];
-->y = ode(y0,x0,x,list(g,a))
y =
column 1 to 7
column 8 to 12
column 13 to 17
column 18 to 22
column 23 to 27
column 28 to 32
column 33
0.4360149
Mas ela pode ser consertada transpondo o vetor das condições iniciais
ou declarando-o diretamente como vetor coluna em vez de vetor
linha:
-->y = ode(y0',x0,x,list(g,a))
y =
column 1 to 6
column 7 to 11
colors = ['r','g','b']
for i = 1:3
plot(x,y(i,:),colors(i))
end
Bibliografia
------------------------------------------------------------------------------
Licença do Scilab
(Disponível no seguinte endereço:
http://www.scilab.org/legal/license.html)
Licença da logomarca
(Disponível no seguinte endereço:
http://www.scilab.org/legal/licensetrademarkscilab.html)