Apostila Curso de Scilab Nível Básico Ao Intermediário
Apostila Curso de Scilab Nível Básico Ao Intermediário
Apostila Curso de Scilab Nível Básico Ao Intermediário
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
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
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
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
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 ?.
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;
4.2. Matrizes
Seja R o conjunto dos nmeros reais. Dizemos que A uma matriz de
dimenso m n em R, se:
M=
! 1. 2. 3. 4. !
! 5. 6. 7. 8. !
! 9. 11. 13. 15. !
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. !
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, 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.!
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 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.!
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
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. !
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.
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:
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
Exemplo:
x=0:.01:2*%pi;
y=cos(x.^(2*x));
plot2d1(x,y)
5.2. Grficos 3d
Imagem projetada est em duas dimenses, usualmente, utilizam-se eixos
x, y e z.
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)
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)
deff('[x1,x2]=fun(a,b)',['x1=%e^a';'x2=cos(b)'])
-->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('-0.05*cos(x)*exp(x)','x',0,50)
ans =
- 9.107D+19
deff('[y]=f(x)','y=-0.05*cos(x)*exp(x)')
-->intg(0,50,f)
ans =
- 9.107D+19
function dx = f (t,x)
dx = cos(2*t);
endfunction
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.
Exemplo:
= sen(2t);
z = dx/dt;
dz/dt = sin(2t)
dx/dt = f(t ,x )
Onde x e dx so vetores:
x = [z; sin(2t)]
dx = [dx/dt, dz/dt]
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
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.
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
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
5 - 3x + 8x
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.
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
A funo printf responsvel por gerar uma sada que ser impressa na tela.
A=20;
printf(A varivel A contem o valor de %g\n,A);
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);
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.
for i=2:2:50
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
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);
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);
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.7 Alguns candidatos prestaram concurso para cinco vagas em uma empresa. Os
resultados das provas do concurso esto armazenadas nas seguintes matrizes:
9.8 Verifique os valores de L(1), L(2), L(3) , L(4) e L(5) do exemplo do tpico 4.4.
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.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.