Upload
domien
View
214
Download
0
Embed Size (px)
Citation preview
Curso de
Scilab Nível Básico ao
Intermediário Autores: Revisão:
Daniela Josepetti Gabriel Mathews
Mariana Lopes Marco Andres Araujo
Nicole Fernanda Hanna Galassi
Vinicius Michelon
Wellick Almeida
1 Curso de Scilab – PET Engenharia Química Unicamp
Índice
1. Introdução..............................................................................3
2. Interface Gráfica....................................................................4
2.1. Interface inicial................................................................4 2.2. Variáveis especiais.........................................................7
3. Operações básicas................................................................9
4. Vetores, matrizes e listas.......................................................10 4.1. Vetores......................................................................10 4.2. Matrizes.....................................................................12 4.3. Definição de listas.....................................................19 4.4. Inserção de elementos na lista................................19 4.5. Sublistas....................................................................19 4.6. Listas tipadas.............................................................20
5. Gráficos.................................................................................21
5.1. Gráficos 2d................................................................21 5.2. Gráficos 3d................................................................22 5.3. Campo Vetorial..........................................................23 5.4. Mudança de cores, título de eixos e salvar
imagens..24
6. Funções, diferenciação e integração.................................25 6.1. Funções ‘in-line’.........................................................25 6.2. Funções ‘on-line’........................................................25 6.3. Tabela de funções.....................................................26 6.4. Diferenciação.............................................................26 6.5. Integração...................................................................2
7 6.6. Equações diferencias...............................................27
7. Polinômios e interpolação......................................................29
7.1. Polinômios.................................................................29 7.2. Operações com polinômios.......................................29 7.3. Derivação de polinômios..........................................30 7.4. Interpolação...............................................................30 7.5. Interpolações Lineares.............................................30
2 Curso de Scilab – PET Engenharia Química Unicamp
7.6. Interpolações por Spline cúbica...............................31 7.7. Extrapolação..............................................................31
8. Introdução à programação....................................................32
8.1. Introdução..................................................................32
8.2. Função printf.............................................................32
8.3. Função input .............................................................34 8.4. Função if-end.............................................................35 8.5. Função if-else-end.....................................................36 8.6. Função for .................................................................37 8.7. Função while..............................................................37 8.8. Vetor..........................................................................40 8.9. Matriz.........................................................................41
9. Exercícios...............................................................................43
10. Referências..........................................................................47
3 Curso de Scilab – PET Engenharia Química Unicamp
1. Introdução
O Scilab foi desenvolvido em 1990 por um grupo de pesquisadores do INRIA – Institut de Recherche em Informatique et en Automatique e do ENPC – Ècole Nationale des Ponts el Chaussées, ele é um ambiente utilizado no desenvolvimento de programas para a resolução de problemas numéricos. Semelhante ao Matlab, o Scilab possui a vantagem de ser um free software (gratuito) e também open source software (fornecido com o código fonte), com distribuições pré-compiladas para vários sistemas operacionais (Linux/GNU, Windows XP, Vista, 7, 8 e Mac OS X). As principais ferramentas desse ambiente de programação numérica são2:
Álgebra Linear (inclusive matrizes esparsas); Polinômios e funções racionais; Integração numérica; Métodos não lineares – Otimização e integradores de EDOs; Processamento de Sinais; Controle; Estatística; Gráficos e animação; Grafos e redes; Paralelismo – PVM; Interface com o Computer Algebra Maple; Interface com Fortran, C, C++, Java; Além dos toolboxes desenvolvidos pelo grupo Scilab, estão disponíveis
outros complementares, igualmente gratuitos, como o ANN (Artificial Neural Network), o FISLAB (Fuzzy Logic Inference) e o FRACLAB (Fractal, Multifractal and Wavelet Analisys).
4 Curso de Scilab – PET Engenharia Química Unicamp
2. Interface gráfica
2.1. Interface inicial Durante a execução do Scilab, várias janelas podem ser utilizadas, a janela de trabalho do Scilab na versão 5.4.1 se apresenta na forma da figura 01:
Figura 2.1.1: Janela de trabalho do Scilab na versão 5.4.1.
Podemos observar o prompt inicial, representado pelo símbolo -->, que faz
a marcação da linha de comando e o cursor, ao lado do prompt. Nesse espaço, podem ser realizados cálculos e compilados programas sem salvar alterações. Ainda na tela inicial estão presentes os menus drop down com cinco opções: Arquivo, Editar, Controle, Aplicativos e ?.
Cada menu possui seus sub-menus, valendo ressaltar:
Arquivo: Executar: executa o conteúdo de arquivos (roda o programa
implementado); Abrir um arquivo: abre o arquivo do seu programa no editor de texto do
Scilab; Carregar ambiente: carrega ambiente Scilab já existente; Salvar ambiente: arquiva ambiente atual do Scilab; Alterar o diretório atual: muda o diretório em que o Scilab foi aberto para o
diretório do Arquivo (programa); Exibir o diretório atual; Configuração de página; Imprimir; Sair.
Editar: Comandos semelhantes ao editor de texto do Microsoft Office ou
Open Office (Recortar Copiar, Colar, Esvaziar a área de transferência, Selecionar
5 Curso de Scilab – PET Engenharia Química Unicamp
tudo, Mostrar/Esconder barra de ferramentas, Limpar histórico, Limpar o Console, Preferências.)
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 execução após uma pause ter sido dada através de
um comando em uma função ou através de Stop ou Ctrl-c;
Abortar: aborta a execução após uma ou várias pause, retornando ao
prompt inicial;
Interromper: interrompe a execução 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 funções;
Figura 2.1.2: Primeiro passo para a programação.
Este ícone abre uma janela onde será inserida a programação.
Figura 2.1.3: Janela onde será inserida a programação.
6 Curso de Scilab – PET Engenharia Química Unicamp
. XCos: abre um ambiente para desenvolvimento de diagramas de blocos e interfaces gráficas segundo a imagem abaixo:
Figura 2.1.2: Interface gráfica do aplicativo Xcos.
Tradutor de Matlab para Scilab: converte arquivos e diretórios de Matlab
para Scilab; Gerenciador de Módulos – ATOMS: ATOMS( de AutomaTic modules
Management for Scilab), permite que o usuário possa baixar, instalar e atualizar de forma automática os módulos externos que o mesmo deseje utilizar com o programa;
Navegador de variáveis: exibe o formato das variáveis no Scilab; Histórico de comandos: grava o histórico de comandos executados no
prompt; Navegador de arquivos.
?: Navegador de Ajuda: exibe o diretório-raiz de ajuda do Scilab, com
opção de busca. Pode também ser acessado através da digitação do comando help no prompt ou através da tecla F1. Na figura abaixo, verifica o navegador de ajuda.
Figura 2.1.3: Interface do navegador de ajuda.
7 Curso de Scilab – PET Engenharia Química Unicamp
Demonstrações do Scilab: exibe janela com demonstrações de comandos
do Scilab. Links da Web: Links de interesse para uso do Scilab. Scilab Entreprises Sobre Scilab
2.2. Variáveis especiais Existem variáveis que assumem valores já definidos no Scilab. Elas podem
ser vistas através do comando who. Essas variáveis são protegidas e não podem ser apagadas. Algumas destas variáveis são pré-fixadas com o caractere %. %i representa √−1 %e representa a constante de Euler %pi representa a constante π %s representa o polinômio de 1º grau s %z representa o polinômio de 1º grau z %eps é uma medida de precisão da máquina %inf representa ∞ %nan representa o objeto “Not a Number” %t (ou %T) representa a variável booleana “verdadeiro” %f (ou %F) representa a variável boolena “falso” Na imagem a seguir, imagem 2.2.1, mostra a área de trabalho do Scilab com a execução do comando who.
Figura 2.2.1: Variáveis especiais.
Temos mais duas importantes variáveis: as variáveis de localização de
diretórios SCI e PWD. SCI: diretório onde o Scilab foi instalado.
8 Curso de Scilab – PET Engenharia Química Unicamp
PWD: diretório onde o Scilab foi lançado, isto é, de onde seu script está rodando.
Todas as variáveis criadas durante os trabalhos no ambiente podem ser
armazenadas em um arquivo. O comando save é usado para tal, com a seguinte sintaxe:
save(‘nome_do_arquivo.dat’,variáveis)
Para recuperar os valores das variáveis, usa-se o comando load e o comando clear é usado para limpar variáveis não protegidas. O comando clc limpa toda janela de trabalho.
9 Curso de Scilab – PET Engenharia Química Unicamp
3. Operações Básicas
O Scilab tem como principal utilidade a resolução de problemas numéricos. A interação do usuário com o Scilab pode ocorrer de duas formas distintas:
Comandos são digitados diretamente no prompt do Scilab. Ao apertar-se a tecla enter, os comandos digitados são interpretados e imediatamente executados. Neste modo de utilização, Scilab funciona como uma sofisticada e poderosa calculadora.
Um conjunto de comandos é digitado em um arquivo texto, o SciNotes. Este arquivo, em seguida, é levado para o ambiente Scilab e executado. Neste modo, o Scilab funciona como um ambiente de programação.
É interessante ser citado algumas características importantes do Scilab,
como: É possível digitar vários comandos em uma linha;
Exemplo: --> a=1; b=4.5; c=73.2;
O “ ; ” no final de um comando inibe a apresentação de seu resultado.
--> A=1 A = 1.
-->A=1; // a variável A assume o valor de 1
O Scilab é case sensitive, sendo a variável A diferente da variável a.
Exemplo: -->a=1; -->b=1; -->A+B= !—error 4 Variável indefinida: B
As operações aritméticas simples são representadas pela tabela 3.1:
Adição + Subtração -
Multiplicação * Divisão /
Potenciação ^ Tabela 3.1: operações aritméticas simples.
Exemplo: -->((2+3)*(4-1)/(6/2))^2 ans = 25.
Se a intenção é trabalhar com números complexos, utiliza-se %i : -->(2*%i-1)*(3*%i+2) ans = -8. + i
Assim como se usa %e para número de Euler, %pi para π, entre outros.
10 Curso de Scilab – PET Engenharia Química Unicamp
4. Vetores, matrizes e listas 4.1. Vetores
Matrizes unidimensionais são chamadas de vetores. Em um vetor é possível armazenar vários itens em uma única variável. No exemplo a seguir, é mostrada uma variável nota contendo as notas de alunos:
-->nota = [8.1 5.2 9.2 7.2 6.5 5.2 8.5 9.5 6.5 10.0];
Vetores podem ser construídos usando os colchetes [ e ]. Os elementos são envolvidos por colchetes e separados por espaços (ou vírgula). Caso sejam separados por ponto e vírgula, irá ser alocado um vetor coluna com os elementos desejados.
Exemplo: -->x=[ 1; 2; 3] //vetor coluna. Elementos separados por ; x = ! 1. ! ! 2. ! ! 3. !
Se x é um vetor coluna, xT (lê-se “x transposto”) é um vetor linha. Essa
operação é realizada no Scilab através da utilização do símbolo ’ (apóstrofo). Exemplo:
-->x’ // x transposto = vetor linha ans = ! 1. 2. 3. !
Os elementos do vetor nota podem ser acessados da seguinte forma:
-->nota(2) ans = 5.2 -->nota(5) ans = 6.5 -->nota(8) ans = 9.5
Vetores podem ser multiplicados ou divididos por quantidades escalares. Também, vetores de mesma dimensão podem ser somados ou subtraídos. Para exemplificar algumas dessas operações, vamos considerar os vetores:
-->x = [ 1; 2; 3] //Definindo o vetor x x = ! 1. ! ! 2. ! ! 3. !
-->y = [ 4; 5; 6] //Definindo o vetor y y = ! 4. ! ! 5. ! ! 6. !
11 Curso de Scilab – PET Engenharia Química Unicamp
-->size(x) //Dimensao do vetor x ans = ! 3. 1. !
-->size(y) //Dimensao do vetor y ans = ! 3. 1. !
-->3 * x //Multiplicando o vetor x por uma constante ans = ! 3. ! ! 6. ! ! 9. ! -->x / 2 // Dividindo o vetor x por uma constante ans = ! 0.5 ! ! 1. ! ! 1.5 ! -->x + y // Somando os dois vetores ans = ! 5. ! ! 7. ! ! 9. ! -->z = x’ * y //Atribuindo a z o produto escalar entre x e y z = 32.
Nos exemplos a seguir, mostramos outras maneiras de construir vetores,
usando índices e algumas funções internas do Scilab:
-->v = 5: -0.5: 3 //Vetor com elementos decrementados v = ! 5. 4.5 4. 3.5 3. ! -->m=ones(1:4) //Vetor constituido de elementos iguais a 1 m = ! 1. 1. 1. 1. ! -->z=zeros(1:5) //Vetor constituido de elementos iguais a 0 z = ! 0. 0. 0. 0. 0. ! -->a=10:2.5:20 a = ! 10. 12.5 15. 17.5 20. ! -->log(a) // a função é aplicada a cada elemento ans = ! 2.3025851 2.5257286 2.7080502 2.8622009 2.9957323!
Cálculo do seno entre 0 e π com incremento de π/4:
-->sin(0:%pi/4:%pi) ans = ! 0. 0.7071068 1. 0.7071068 1.225E-16!
A função linspace gera um vetor com n valores igualmente espaçados começando em início e terminando em fim. Exemplo:
-->linspace(1,1.5,5) ans =
12 Curso de Scilab – PET Engenharia Química Unicamp
! 1. 1.125 1.25 1.375 1.5!
A função logspace (inicio, fim, n) gera n elementos logaritmicamente espaçados. O primeiro elemento é 10 elevado ao inicio e o último elemento é 10 elevado ao fim. Por exemplo:
-->logspace(1,2,4) ans = ! 10. 21.544347 46.415888 100. !
4.2. Matrizes Seja R o conjunto dos números reais. Dizemos que A é uma matriz de
dimensão m × n em R, se:
Cada um dos elementos ai,j ∈ R. Nessa notação, a variável m indica o número de linhas e a variável n indica o número de colunas da matriz A. Se A for uma matriz quadrada, o número de linhas é igual ao número de colunas e, então, m = n.
Vamos considerar as matrizes A e B, conforme descrito abaixo:
No Scilab, as matrizes são representadas entre colchetes, [ ]. Os elementos que constituem as linhas das matrizes são separados por espaços ou por vírgulas. A indicação de término de cada linha da matriz é feita com ponto-e-vírgula.
Nos exemplos a seguir, a matriz A é digitada com os elementos de suas linhas separados por espaços enquanto a matriz B é digitada com os elementos de suas linhas separados por vírgula. Assim,
-->//Matriz A - Elementos das linhas separados por espaco -->A = [1 2 3; 5 -8 9] A = ! 1. 2. 3. ! ! 5. - 8. 9. ! -->//Matriz B-Elementos das linhas separados por virgulas -->B = [1, 2, 3; 4, 5, 6] B = ! 1. 2. 3. ! ! 4. 5. 6. ! -->size(A) //Dimensao da matriz A ans = ! 2. 3. ! -->size(B) //Dimensao da matriz B ans = ! 2. 3. !
13 Curso de Scilab – PET Engenharia Química Unicamp
Outra forma de digitar matrizes no ambiente Scilab, é separando os elementos de uma linha por espaço (ou por vírgula) e as linhas separadas por enter,
-->M = [ 1 2 3 4 -->5 6 7 8 -->9 11 13 15]
M = ! 1. 2. 3. 4. ! ! 5. 6. 7. 8. ! ! 9. 11. 13. 15. !
Matrizes podem ser multiplicadas ou divididas por quantidades escalares.
Também, matrizes de mesma dimensão podem ser somadas ou subtraídas. Considerando as matrizes A e B do exemplo anterior, temos:
-->2 * A // Multiplicacao por um escalar ans = ! 2. 4. 6. ! ! 10. - 16. 18. ! -->A / 2 // Divisao da matriz A por uma constante ans = ! 0.5 1. 1.5 ! ! 2.5 - 4. 4.5 ! -->A + B // Somando as duas matrizes ans = ! 2. 4. 6. ! ! 9. - 3. 15. ! -->C = B’ // C = transposta da matriz B C = ! 1. 4. ! ! 2. 5. ! ! 3. 6. ! -->size(C) // Dimensao da matriz C ans = ! 3. 2. !
Para realizar uma multiplicação entre duas matrizes observar que, para que
possa haver a multiplicação, é necessário que o número de colunas da primeira matriz seja igual ao número 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. !
14 Curso de Scilab – PET Engenharia Química Unicamp
! 32. 77. ! ! 50. 122.!
Podemos usar funções internas do Scilab para gerar matrizes. Por exemplo,
usamos a função 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 a função zeros para criar a matriz E, com todos os elementos iguais a 0,
-->E=zeros(3,3) E = !0. 0. 0.! !0. 0. 0.! !0. 0. 0.!
ou, ainda, a criação de uma matriz identidade I, através da função interna eye,
-->I=eye(4,4) I = !1. 0. 0. 0.! !0. 1. 0. 0.! !0. 0. 1. 0.! !0. 0. 0. 1.!
Podemos criar matrizes a partir de elementos de outras matrizes,
-->//Definindo as matrizes A,B e C -->A=[1 2; 3 4]; -->B=[5 6; 7 8]; -->C=[9 10; 11 12]; -->//Definindo a matriz D -->D=[A B C] D = !1. 2. 5. 6. 9. 10.! !3. 4. 7. 8. 11. 12.! -->//Definindo uma matriz E a partir dos elementos de D -->E=matrix(D,3,4) E = !1. 4. 6. 11.! !3. 5. 8. 10.! !2. 7. 9. 12.!
Observar que a matriz E, com três linhas e quatro colunas, é criada usando
a função matriz. Esta função gera a matriz E a partir da organização dos elementos da matriz D por colunas. Para exemplificar acessos a elementos de matrizes, vamos considerar a matriz A com duas linhas e três colunas,
-->//Definindo uma matriz A -->A=[1 2 3; 4 5 6] A = !1. 2. 3.! !4. 5. 6.!
O acesso a um elemento dessa matriz é feito da maneira convencional: o
elemento da linha i e coluna j, ai,j, é acessado através do comando A(i,j), com i e j
15 Curso de Scilab – PET Engenharia Química Unicamp
tendo seus valores numéricos explicitados. Por exemplo, para acessar o elemento a1,2 da matriz A, usamos o comando A(1,2):
-->//Acessando o elemento da primeira linha e segunda coluna de A -->A(1,2) ans = 2.
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.!
Se desejamos obter todos os elementos de uma determinada coluna ou
linha de uma matriz, podemos utilizar o símbolo : (dois pontos) para lê-los. Assim, A(k,:) pode ser lido como “todos os elementos da k-ésima linha da matriz A” e A(:,k) pode ser lido como “todos os elementos da k-ésima coluna da matriz A”. Considerando a matriz A do exemplo anterior, o comando A(:,3), permite acessar todos os elementos da terceira coluna da matriz A:
-->//Todos os elementos da terceira coluna da matriz A -->A(:,3) ans = !3.! !6.!
-->
Enquanto o comando A(2,:) permite acessar todos os elementos da segunda linha da matriz A:
-->//Todos os elementos da segunda linha da matriz A -->A(2,:) ans = !4. 5. 6.!
O comando A(:,3:-1:1) permite formar uma matriz constituída por todos os
elementos das colunas três, dois e um da matriz A. Lembrar que 3:-1:2 é idêntico ao vetor [3 2 1].
-->//Todos os elementos da terceira, segunda e primeira colunas de A -->A(:, 3:-1:1) ans = !3. 2. 1.! !6. 5. 4.! -->A(:, [3 2 1]) //Forma equivalente ans = !3. 2. 1.! !6. 5. 4.!
O primeiro elemento da matriz A pode ser acessado através do comando
A(1) e o quinto elemento da matriz A pode ser acessado através do comando A(5), -->//Primeiro elemento de A -->A(1) ans = 1.
16 Curso de Scilab – PET Engenharia Química Unicamp
-->//Quinto elemento de A -->A(5) ans = 3. -->//Todos os elementos armazenados por coluna -->A(:) ans = !1.! !4.! !2.! !5.! !3.! !6.!
É possível, caso seja necessário, alterar os valores de elementos de uma
matriz. Considerando a matriz A, podemos mudar o valor do seu elemento A(2,1) através do comando de atribuição A(1,2)=10:
-->//Atribuir a A(1,2) o valor 10 -->A(1,2)=10 A = !1. 10. 3.! !4. 5. 6.!
Depois, atribuímos os valores [-1; -2] aos primeiro e segundo elementos da
segunda coluna da matriz A: -->//A(1,2)=-1 e A(2,2)=-2 -->A([1 2], 2)=[-1; -2] A = !1. -1. 3.! !4. -2. 6.!
Finalmente, modificamos os elementos A(1,1) e A(1,2) da matriz A.
-->//A(1,1)=8 e A(1,2)=5 -->A(:, 1)=[8; 5] A = !8. -1. 3.! !5. -2. 6.!
As matrizes simbólicas também podem ser constituídas por elementos
compostos por strings de caracteres. Elas são criadas da mesma maneira que as matrizes com elementos numéricos. As strings são escritas entre apóstrofos ou entre aspas.
--> //Matriz de strings --> A = [‘x’ ‘y’; ‘z’ ‘w+v’] A = ! x y ! ! ! ! z w+y !
--> //Atribuindo valores
--> x=1; y=2; z=3; w=4; v=5; //Obtendo valores numéricos dos elementos de A --> evstr(A) ans =
17 Curso de Scilab – PET Engenharia Química Unicamp
! 1. 2. ! ! 3. 9. !
A Tabela 4.2.1, apresenta a sintaxe de alguns dos operadores disponíveis no ambiente Scilab que podem ser utilizados em operações com vetores ou com matrizes.
SIMBOLO OPERAÇÃO ‘ Transposta + Adição - Subtração * Multiplicação / Divisão à direita \ Divisão à esquerda ^ Exponenciação .* Multiplicação elemento-a-elemento ./ Divisão, à esquerda, elemento –a-elemento .\ Divisão, à direita, elemento –a-elemento .^. Exponenciação elemento –a-elemento .*. Produto Konecker
Tabela 4.2.1: Sintaxe de alguns operadores usados em operações vetoriais ou matriciais.
Vamos analisar a utilização do operador \. Para isso, definimos um sistema
de equações lineares,
que pode ser escrito na forma matricial, Ax = b, onde:
Nas expressões anteriores, A é a matriz dos coeficientes, x é o vetor das incógnitas e b é o vetor de termos independentes.
Resolver um sistema linear é obter o valor do vetor x. Na situação mais simples, a matriz A é não-singular (admite inversa) e a solução, única, é dada pela expressão
x=A−1b onde A−1 é a inversa da matriz A. A expressão anterior pode ser representada no Scilab como
-->x=inv(A)*b na qual inv, é uma função interna do Scilab que calcula a inversa de uma matriz. Para exemplificar , vamos considerar um sistema linear com
Temos, --> //Solucao de Ax = b usando função inv
18 Curso de Scilab – PET Engenharia Química Unicamp
--> A = [2 0; 0 4] //Matriz A A = ! 2. 0. ! ! 0. 4. !
--> inv(A) //A admite inversa ans = ! 0.5 0. ! ! 0. 0.25 !
--> b = [1;8] //Vetor b ! 1. ! ! 8. !
--> x = inv(A) * b //Solucao do sistema linear ! 0.5 ! ! 2. !
O mesmo resultado pode ser encontrado utilizando-se o operador \.
Temos, então, --> Resolução de Ax = b usando operador \ --> x = A\B x = ! 0.5 ! ! 2. !
É importante observar que o sÍmbolo \ não define uma divisão matricial.
Indica, apenas, uma outra forma de se obter a solução de um sistema linear.
O operador . (ponto), como pode ser visto na Tabela X.1, é utilizado com outros operadores (*, \, /, ^) para realizar operações 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. !
19 Curso de Scilab – PET Engenharia Química Unicamp
--> A * A ans = ! 30. 36. 42. ! ! 66. 81. 96. ! ! 102. 126. 150. !
4.3. Definição de listas; Listas é outra classe de variáveis, parecida com a das matrizes, mas que permitem o agrupamento de conteúdo de diferentes tipos. São implementadas através do comando list, seguido dos elementos os quais se desejam agrupar. Essa função tem a seguinte forma geral:
L = list(a1,a2,a3,.....,an), onde a1,a2,a3,...,an são elementos da lista. 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.
4.4. Inserção de Elementos na Lista No Fim da Lista: L(n+1) = b, sendo n o número de elementos da lista. No Início da Lista: L(0) = b (note que após esta operação 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 operação comum quando se trabalha com listas é substituir um determinado elemento da lista por outra lista, criando uma sublista:
20 Curso de Scilab – PET Engenharia Química Unicamp
Exemplo:
-->L = list(1, 'w', ones(2,2)); -->L(2) = list('w', eye(2,2))
L = L(1) 1. L(2) L(2)(1) w L(2)(2) 1. 0. 0. 1. L(3) 1. 1. 1. 1.
4.6. Listas tipadas As listas tipadas são outro tipo de dado aceito pelo Scilab. As listas tipadas são definidas através da função tlist. A função tlist possui, obrigatoriamente, como primeiro argumento uma string ou um vetor de strings e os demais argumentos são os elementos da lista. 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
21 Curso de Scilab – PET Engenharia Química Unicamp
5. Gráficos
5.1 Gráficos 2d Imagem projetada está em duas dimensões, usualmente, utilizam-se eixos ‘x’ e ‘y’. Abaixo estão listados algumas principais funções dos gráficos em duas dimensões (Lembre-se para ver a sintaxe e os argumentos necessários para chamar as funções, basta digitar “help <function>”) Funções gráficas em 2d:
plot2d - esboço 2d. plot2d2 - esboço 2d (funções de degraus). plot2d3 - esboço 2d (barras verticais). plot2d4 - esboço 2d (setas). fplot2d - esboço 2d de uma curva definida por uma função. xgrid - adiciona um grid em um esboço 2d errbar - adiciona barras de erro verticais a um esboço 2d histplot - esboça um histograma Matplot - esboço 2d de uma matriz utilizando-se cores
Funçãos gráficas para superfícies projetadas em 2d:
contour2d - curvas de nível de uma superfície em um esboço 2d. fcontour2d - curvas de nível de uma superfície definida por uma função em
um esboço 2d. grayplot - esboço 2d de uma superfície utilizando-se cores fgrayplot - esboço 2d de uma superfície definida por uma função utilizando
cores Sgrayplot - esboço 2d suave de uma superfície utilizando cores Sfgrayplot - esboço 2d suave de uma superfície definida por uma função
utilizando cores
Exemplo: x=0:.01:2*%pi; y=cos(x.^(2*x)); plot2d1(x,y)
22 Curso de Scilab – PET Engenharia Química Unicamp
Figura 5.1.1: Imagem gráfica 2d
5.2. Gráficos 3d Imagem projetada está em duas dimensões, usualmente, utilizam-se eixos ‘x’, ‘y’ e ‘z’. Lista de funções gráficas em 3d:
plot3d - esboço 3d de uma superfície plot3d1 - esboço 3d em níveis de cinza ou de cores de uma superfície fplot3d - esboço 3d de uma superfície definida por uma função fplot3d1 - esboço 3d em escala de cinza ou colorido de nível de uma
superfície definida por uma função param3d - esboço 3d de uma curva parametrizada param3d1 - esboço 3d de curvas parametrizadas contour - curvas de nível em uma superfície 3d fcontour - curvas de nível sobre uma superfície 3d definida por uma função hist3d - representação 3d de um histograma genfac3d - computa facetas de uma superfície 3d eval3dp - computa facetas 3d de uma superfície parametrizada geom3d - projeção 3d para 2d após um esboço 3d
Exemplo: //Gráfico 3d para uma função z = f(x,y) y=[0:0.1:5]; x=y'; z=sin(x)*cos(y); plot3d(x,y,z)
23 Curso de Scilab – PET Engenharia Química Unicamp
Figura 5.2.1: Imagem gráfica 3d
5.3. Campo Vetorial É empregado para indicar a velocidade e a direção de fluidos se movendo
no espaço, no caso da engenharia química, utiliza-se o campo vetorial em escoamentos em dutos. Lista de funções gráficas em Campo Vetorial:
champ - esboço de campo vetorial 2d. champ1 - campo vetorial 2d com setas coloridas. fchamp - campo direcional de uma EDO 2d de primeira ordem.
champ(x,y,fx,fy)
Charmp é a função 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)
24 Curso de Scilab – PET Engenharia Química Unicamp
Figura 5.3.1: Campo Vetorial 2d. .
5.4. Mudança de cores, título de eixos e salvar imagens. Na janela gráfica, no canto superior, ir em ‘editar’ e depois ‘propriedades da
figura’ e aparecerá a janela abaixo onde é possível mudar a cor do gráfico, dos eixos, editar o título dos eixos, adicionar título ao gráfico, etc.
Figura 5.4.1: Janela gráfica para edição da imagem de gráficos.
É possível salvar o gráfico em formatos como .JPEG, .GIF, .PDF entre
outros. Para isso deve-se na janela do gráfico, ir em ‘Arquivo’, localizado no canto superior esquerdo, e depois em ‘Exportar para...
25 Curso de Scilab – PET Engenharia Química Unicamp
6. Funções, diferenciação e integração.
6.1. Funções ‘in-line’ As funções descrevem relações entre dois ou mais elementos, sendo que
essa relação pode ser feita através de uma equação matemática. É uma ferramenta de programação, potencializando a característica de calculadora do Scilab, mas tornando os cálculos mais rápidos e concisos.
No Scilab declaramos as funções da seguinte maneira, no SciNotes:
Figura 6.1.1: Declaração de Função
Nesse formato, x1,..., xn são parâmetros de entrada, ao passo que y1, ..., yn são parâmetros de saída. O programa pode conter várias funções, mas elas só são rodadas quando são devidamente invocadas.
Exemplo: Faça uma função que retorne os valores para x = ab +7 e y = a/b + π
No SciNotes escreve-se a função:
function [x, y]=copa(a, b)
x=a*b+7 y=a/b + %pi
endfunction
No prompt inicial digita-se:
//Teste das funções ‘x’ e ‘y’ para a=3 e b=2 [x,y]=copa(5,8)
6.2. Funções ‘on-line’
No Scilab também podemos criar funções ‘on-line’, ou seja, fora do ambiente do
Scinotes (‘in-line’). Para isso, utilizamos o comando ‘deff’, que é dado por: deff(‘[variáveis de saída] = nome da função (variáveis de entrada)’, [‘expressões a calcular’]) Exemplo: Fazer função on-line para calcular ex e cos(x): deff('[x1,x2]=fun(a,b)',['x1=%e^a';'x2=cos(b)'])
26 Curso de Scilab – PET Engenharia Química Unicamp
6.3. Tabela de funções Segue abaixo a tabela 6.2.1 com as principais funções matemáticas do Scilab:
abs abs(x) módulo (argumento) de x cos cos(x) cosseno de x, com x em radiano cosh cosh(x) cosseno hiperbólico de x, com x em radiano acos acos(x) arco-cosseno de x, em radianos
acosh acosh(x) arco-cosseno hiperbólico de x, em radianos cotg cotgh(x) cotangente de x, com c em radiano coth coth(x) cotangente hiperbólica de x, com c em radiano
linspace linspace(A,B,N) vetor com N pontos entre A e B inclusos log log(x) logaritmo neperiano de x
log10 log10(x) logaritmo decimal de x log2 log2(x) logaritmo na base 2 de x
logspace logspace(A,B,N) vetor de N pontos com espaço logarítmico entre A e B inclusos
exp exp(x) exponencial euleriana de x int int(N) parte inteira de N
max max(v) máximo valor contido no vetor v min min(v) mínimo valor contido no vetor v
modulo modulo(m,n) resto da divisão de m por n binomial binomial(p,n) binomial normalizado de p classe *n
ceil ceil(x) arredondamento para o maior inteiro posterior cumprod cumprod(v) produto cumulativo do vetor v cumsum cumsum(v) soma cumulativa do vetor v
diff diff(v) diferencial discreta do vetor v eval eval(s) valor numérico de uma expressão de strings fator fator(N) fatores primos de N find find(k’s’V) encontra os índices dos elementos de V que tornam
a comparação verdadeira (‘s’ ==,<,>,~=,...)
fix fix(x) arredondamento para o inteiro mais próximo de zero floor gloor(x) arredondamento para o maior inteiro anterior gsort gsort(V,’r/c’,’i/d’) ordenação dos elementos de v imag imag(z) coeficiente da parte imaginaria de z ndims ndims(M) numero de dimensões de M
pmodulo pmodulo(m,n) resto da divisão de m por n : i = n - m .* floor (n ./ m) nextpow2 nextpow2(x) potência de 2 maior e mais próxima de x
norm norm(A) norma de A perms perms(v) todas as permutações do vetor v
Tabela 5.2.1: Tabela com as principais funções do Scilab
6.4. Diferenciação Utilizamos o comando ‘derivative’ para obtermos a derivada a uma dada ordem, de uma função em um dado ponto. O comando ‘derivative’ é dado por: [Valor da derivada, J] = derivative (função definida, ponto escolhido) Exemplo: Ache a derivada da expressão: 𝑥 𝑠𝑒𝑛(𝑥) + cos (𝑥)𝑒𝑥 , no ponto x0=π/4
27 Curso de Scilab – PET Engenharia Química Unicamp
deff('y=f(x)','y=[x(1)*sin(x(1))+%e^(x(1))*cos(x(1))]') -->x(1)=%pi/4; -->x0=[x(1)]; -->[D]=derivative(f,x0) D = 1.2624671
6.5. Integração
O Scilab disponibiliza algumas diferentes funções para o cálculo da integrada de uma função. O comando mais simples, ‘integrate’ tem a forma:
Integrate(‘função’, ‘variável’, limite inferior, limite superior)
Exemplo: Calcule a integral da função −0.05 cos(𝑥) ∗ 𝑒𝑥 num intervalo de 0 a 50.
integrate('-0.05*cos(x)*exp(x)','x',0,50)
ans =
- 9.107D+19
Utilizando o comando ‘intg’, teremos que declarar a função anteriormente, mas devemos obter o mesmo resultado. A sintaxe é:
Intg(limite inferior, limite superior, nome da função)
Exemplo: Calcule a integral da função −0.05 cos(𝑥) ∗ 𝑒𝑥 num intervalo de 0 a 50.
deff('[y]=f(x)','y=-0.05*cos(x)*exp(x)')
-->intg(0,50,f)
ans =
- 9.107D+19
6.6. Equações diferenciais Uma equação diferencial de primeira ordem pode ser escrita da seguinte maneira:
dx/dt=f(t,x)
Na ferramenta computacional Scilab a função “ode” resolve numericamente uma equação ordinária de primeira ordem. Caso a equação seja de uma ordem maior, ela poderá sempre ser transformada em ordem primária ao se adicionar outras variáveis. Segue abaixo um exemplo.
28 Curso de Scilab – PET Engenharia Química Unicamp
Exemplo: 𝑑𝑥
𝑑𝑡 = cos(2t);
No ambiente do SciNotes, digite:
function dx = f (t,x) dx = cos(2*t);
endfunction
A forma mais simples de se chamar a função “ode” no Scilab é na forma:
x= ode(x0, t0, t, f) Em que x0 é o valor inicial de x no tempo t0 e t contém os pontos no tempo(ou na grandeza escolhida) que será determinada a solução e f é o nome da função feita no SciNotes para calcular a derivada. No prompt inicial digita-se então: x0= 2 t0 = 0 t = 0: 0.1 : 1,5; x = ode(x0, t0, t, f); plot2d( t , x )
Exemplo: 𝑑²𝑥
𝑑𝑡²= sen(2t);
Como não é uma EDO de primeira ordem, manipula-se a equação: z = dx/dt; dz/dt = sin(2t)
Agora se tem a EDO na forma: dx/dt = f(t ,x )
Onde x e dx são vetores: x = [z; sin(2t)] dx = [dx/dt, dz/dt]
Ao digitar essa equação no SciNotes, sabendo que agora x é um vetor, encontra-se:
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 equações diferenciais com mais de uma variável, declararemos a equação da mesma forma que declaramos nos exemplos
29 Curso de Scilab – PET Engenharia Química Unicamp
anteriores e, depois, como no exemplo de EDO de ordem superior, definiremos o vetor x(n), sendo que cada entrada desse vetor será uma das variáveis do problema em questão.
7.Polinômios e interpolações. 7.1. Polinômios Os polinômios são uma classe de variáveis, tal como real ou lógica. Um polinômio é gerado no Scilab através da função poly. Caso sejam definidos dois polinômios sob a mesma variável, estes podem ser somados, subtraídos, multiplicados e divididos entre si e com números complexos. Existem duas formas de se criar um polinômio no Scilab: especificando suas raízes ou seus coeficientes. Para a primeira forma, são permitidas três sintaxes:
P=poly([a b],'s') P=poly([a b], 's', 'r')
P=poly([a b], 's', 'roots') Quando se deseja a segunda alternativa, as opções são apenas duas:
P=poly([c d], 's', 'c') P=poly([c d], 's', 'coeff')
Lembrando que a ordem dos coeficientes é : c0*s0 , c1*s1,...,cn*sn. As raízes de um polinômio podem ser obtidas com o comando roots(P) e valor numérico da função, pelo comando horner(P,N). 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. Operações com Polinômios Abaixo estão alguns exemplos de operações que podem ser realizadas com polinômios:
Soma Para realizar a soma de polinômios, inicialmente definem-se os polinômios:
-->a=poly([5 2 9 8 1],"x","coeff"); //criar o polinómio a -->b=poly([5 -3 8],"x","coeff"); //criar o polinómio b
30 Curso de Scilab – PET Engenharia Química Unicamp
-->soma=a +b //somar os dois polinómios soma = 10 + 2x + 17x² + 8x³ + x4
Subtração -->sub=a-b //subtrair b de a sub = 5x + x² + 8x³ + x4
Multiplicação
-->mult=a*b //multiplicar os polinómios mult= 25 - 5x + 79x² + 29x³ + 53x4 + 61x5 + 8x6
Divisão
Para dividir os polinômios usamos o comando pdiv: -->div=pdiv(a,b) //dividir os dois polinômios div = 1.4394531 + 1.046875x + 0.125x²
Caso haja o interesse de se obter tanto o quociente quanto o resto, pode realizar-se a seguinte operação:
-->[r, q] = pdiv(a,b) //efetuando a divisao: q=quociente, r=resto q = r =
No caso do uso do operador de divisão (/), em vez do comando pdiv, é criado um polinômio racional:
-->div = a/b -->div = 5 + 2x + 9x² + 8x³ + x4 5 - 3x + 8x²
7.3. Derivação de Polinômios Para derivar numericamente um polinômio, utilizamos a função derivat
-->D = derivat (b) D = -3 +16x
7.4. Interpolações Utilizamos a interpolação para encontrar resultados yn para um
determinado problema, dado que temos outros pontos (x1,y1; x2,y2; ...). O Scilab possui algumas funções para interpolação, abordaremos a interp1,
que é utilizada para casos em que y só tem uma variável. Caso queira-se utilizar y dependendo de duas variáveis, basta utilizar interp2 ou até mesmo interp3 para casos com três variáveis.
7.5. Interpolações Lineares Para a interpolação linear é usado uma aproximação de polinômio do primeiro grau para os pontos. Cabe ao usuário definir se tal aproximação é a mais eficiente para o problema que possui.
O formato é definido como:
31 Curso de Scilab – PET Engenharia Química Unicamp
interp1(x, y, a, ‘linear’)
No qual o parâmetro ‘x’ representa um vetor de reais, ‘y’ representa a
imagem desse vetor em f(x), e ‘a’ é o valor para o qual se quer encontrar a imagem. Exemplo:
x=[1, 10, 20, 30, 40]; y=[1,30, -10,20,0]; //Função abaixo encontra o valor de y para x=8 yy=interp1(x,y,8, 'linear')
7.6. Interpolações por Spline Cúbica Dados os pontos (x1,y1; x2,y2; ...), quando a melhor aproximação para essa função são curvas, utilizaremos o ‘spline’ na nossa função interp1.
O formato fica: interp1(x, y, a, ‘spline’), no qual o parâmetro ‘x’ representa um vetor de reais, ‘y’ representa a imagem desse vetor em f(x), e ‘a’ é o valor para o qual se quer encontrar a imagem.
Exemplo:
x=linspace(0,3,20); //Linspace Indica que no intervalo 0≤x≤3 contém 20 números igualmente separados y=x.^2+4*x; //Função abaixo encontra o valor de y para x =4,66 yy=interp1(x,y,4.66,'spline')
7.7. Extrapolação Útil para encontrar um valor fora do meu intervalo ou do meu conjunto de números. Novamente utilizamos a função interp1, adicionando um quarto parâmetro, ‘extrap’. O formato fica: interp1(x, y, a, method, ‘extrap’), no qual o parâmetro ‘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 método utilizado para a extrapolação (por exemplo, ‘linear’ ou ‘spline’). Exemplos:
x=[1, 10, 20, 30, 40]; y=[1,18, 5,0,21]; //Função abaixo encontra o valor de y para x=45 utilizando uma função linear yy=interp1(x,y,45, 'linear', 'extrap' ) x=[1, 10, 20, 30, 40]; y= x.^2+6*x; //Função abaixo encontra o valor de y para x = 52 yy=interp1(x,y,52,’spline’,’extrap’)
32 Curso de Scilab – PET Engenharia Química Unicamp
8. Introdução à Programação
8.1. Introdução
A linguagem do Scilab é simples e disponibiliza a maioria das estruturas de
linguagem de programação, por isso é fácil para o usuário criar programas no Scilab.
A diferença do Scilab para outras linguagens de programação é a não necessidade de
declaração prévia de variáveis que serão utilizadas no programa.
Aprendemos como escrever e executar comandos a partir da tela inicial do
Scilab. Neste capítulo, apresentamos as principais estruturas da linguagem de
programação utilizada no Scilab. Essas estruturas são utilizadas, depois, para gerar
programas que serão executados no ambiente Scilab.
Para iniciar a programação é necessário abrir o editor de texto SciNotes.
8.2. Função Printf
A função printf é responsável por gerar uma saída que será impressa na tela.
Exemplo 1: Imprimir “Olá mundo” na tela.
Na tela do SciNotes, digitar:
printf(‘Olá Mundo\n’);
A função printf tem que ser seguida de colchetes e a mensagem que deverá
ser impressa precisa estar entre aspas simples. O símbolo \n serve para pular linha
após a impressão. O símbolo ‘;’ indica que o comando está encerrado.
Após digitar o comando na tela é necessário salvar o arquivo em um diretório,
como a figura abaixo:
Figura 8.2.1: Tela para salvar em diretório.
33 Curso de Scilab – PET Engenharia Química Unicamp
Assim que o arquivo é salvo, retorna-se a tela do SciNotes e clica no botão
executar:
Figura 8.2.2: Comando para executar a função printf.
A resposta será impressa na tela inicial do Scilab.
Figura 8.2.3: Tela com a resposta da execução do comando da figura 7.2.1.
A função printf também é usada para imprimir um resultado, como segue o
exemplo.
Exemplo 2: Imprima na tela o valor da variável A =20.
Na tela do SciNotes declarar o valor de A e depois utilizar a função printf para
imprimir na tela:
A=20;
printf(‘A variável A contem o valor de %g\n’,A);
Nota-se neste caso o uso do símbolo “%g” que tem a função de armazenar o
valor de uma variável já declarada. Essa variável deve ser colocada após a mensagem
e separa por uma vírgula, como no exemplo acima.
Após inserir o comando no SciNotes é necessário salvar o programa e clicar no
botão executar para que a mensagem seja impressa na página inicial do Scilab.
34 Curso de Scilab – PET Engenharia Química Unicamp
Figura 8.2.4: Tela com exemplo usando printf.
8.3. Função input.
A função input é utilizada para ler um valor de uma variável que será digitada
na tela inicial. Ou seja, não se define a variável no Scinotes, como feito no Exemplo 2,
quem executa o programa é quem define o valor da variável.
Exemplo: Converter graus Fahrenheit em graus Celsius.
Sabe-se que a equação que converte graus °F em °C é a seguinte:
𝐶𝑒𝑙𝑠𝑖𝑢𝑠 = (5
9) ∗ (𝐹𝑎ℎ𝑟𝑒𝑛ℎ𝑒𝑖𝑡 − 32)
Assim, precisa-se do valor da temperatura em graus Fahrenheit para ser
convertida em graus Celsius. Então se utiliza a função 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);
Após digitar o comando no SciNotes, salvar o programa no diretório e clicar em
executar.
Na tela inicial do Scilab aparecerá a mensagem que solicita um número para
fazer a conversão de graus Fahrenheit em graus Celsius. Digitou-se 50 e depois
ENTER:
35 Curso de Scilab – PET Engenharia Química Unicamp
Figura 8.3.1: Tela da programação do exemplo sobre input.
Para inserir comentário dentro do programa basta utilizar duas barras seguidas
“//” e após elas escrever o comentário. O comentário não interfere no seu programa e
serve para deixá-lo mais completo à medida que há a necessidade de explicar alguns
comandos.
Exemplo de comentário:
f = input(‘Digite os graus em Fahrenheit:’); //a função foi utilizada para ler o
valor de uma variável.
8.4. Função if-end
A função if-end é uma condicional, ou seja, para um comando ser executado
precisa de uma condição inicial.
Exemplo: Elaborar um programa para escrever a média de duas notas. Se a
média for maior que sete, o programa deverá também escrever “Parabéns”.
Nota1 = input(‘Digite a primeira nota:’);
Nota2 = input(‘Digite a segunda nota:’);
Media = (Nota1 + Nota2)/2;
printf(‘Sua média é %g\n’,Media);
if Media>7
36 Curso de Scilab – PET Engenharia Química Unicamp
printf(‘Parabéns’);
end
A resposta do programa está impressa na tela inicial para Nota1=10 e Nota2=8,
como a média é maior que sete, foi impresso “Parabéns”.
Figura 8.4.1: Tela da programação do exemplo sobre if-end.
8.5. Função if-else-end
Como dito anteriormente, a função if-end é uma condicional. A função else é
complementar a função if e indica que seu comando não será executado quando ela
for satisfeita.
Neste caso utilizaremos o Exemplo 5, só que acrescentando uma mensagem
para uma média menor que sete imprime “Reprovado” e maior que sete imprime
“Aprovado”.
Nota1 = input(‘Digite a primeira nota:’);
Nota2 = input(‘Digite a segunda nota:’);
Media = (Nota1 + Nota2)/2;
37 Curso de Scilab – PET Engenharia Química Unicamp
printf(‘Sua média é %g\n’,Media);
if Media>7
printf(‘Aprovado’);
else printf(‘Reprovado’);
end
Assim, temos as duas condições para o exemplo acima representado na figura:
Figura 8.5.1. Exemplo de função if-else-end na tela do Scilab.
8.6. Função for
Na forma básica, o laço ‘for’ possui o nome de uma variável (chamada de
variável de controle) e especifica seu valor inicial e final e, opcionalmente, o tamanho
do passo (ou incremento) da variável de controle.
Exemplo: Elabore um programa para escrever todos os números pares inteiros
entre 1 e 50.
for i=2:2:50
38 Curso de Scilab – PET Engenharia Química Unicamp
printf(‘%g’,i);
end
Neste programa temos ‘i’ como a variável de controle, que inicialmente é igual
a 2, e seu valor final é igual a 50. O passou ou incremento está no meio dos valores da
variável e tem o valor 2. Isso significa que a partir do número 2 o programa irá imprimir
o próximo número com incremento 2, que será por consequência o número 4. A figura
abaixo mostra a execução do programa.
Figura 8.6.1: Exemplo de como usar a função for no Scilab.
Exemplo: Elabore um programa para calcular o fatorial para qualquer valor n
fornecido pelo usuário. Sabe-se que o fatorial de um número n é sua sequência
multiplicada n vezes. Por exemplo, fatorial de 3! = 1x2x3=6.
n = input(‘Entre com um número:’);
fat =1;
for cont=2:n
fat=fat*cont;
end
printf(‘O fatorial de %g é igual a %g\n’,n,fat);
A figura mostra como o programa é executado na tela inicial do Scilab.
39 Curso de Scilab – PET Engenharia Química Unicamp
Figura 8.6.2: Execução do exemplo sobre função for no Scilab
8.7. Função while
A função while é um laço controlado logicamente. Ele repete a execução de um
conjunto de comandos, mas verificando antes de executar os comandos se é permitido
repeti-los ou não, ou seja, se o comando for verdadeiro ele executará, se for falso ele
sairá do laço while.
Exemplo: Calcular a média das notas de dois alunos.
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
40 Curso de Scilab – PET Engenharia Química Unicamp
Figura 8.7.1: Execução do exemplo sobre função while no Scilab
8.8 Vetor.
Matrizes unidimensionais são chamadas de vetores. Em um vetor é possível
armazenar vários itens em uma única variável.
Exemplo: Calcular a média dos elementos do vetor nota dado pelo usuário.
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);
41 Curso de Scilab – PET Engenharia Química Unicamp
Figura 8.8.1: Execução do exemplo sobre vetor no Scilab.
8.9 Matriz.
Matrizes usam dois índices para individualizar elementos. Matrizes são
construídas usando colchetes. Cada linha da matriz é separada por um ponto e vírgula
e cada elemento de uma linha é separado por espaço (ou vírgula).
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);
42 Curso de Scilab – PET Engenharia Química Unicamp
Figura 8.9.1: Execução do exemplo sobre matriz no Scilab.
43 Curso de Scilab – PET Engenharia Química Unicamp
9. Exercícios
9.1. Encontre o valor da expressão: [(5e3+72+3) (9 – i)2]/3,5e2 – [ 47 e(3i + 7)3 ]
9.2 Calcular a média dos elementos do vetor nota. nota = [8.1 5.2 9.2 7.2 6.5 5.2 8.5 9.5 6.5 10.0]; soma = 0; for i=1:10 soma = soma + nota(i); end printf("Média das notas =%g\n",soma/10);
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.4 Ler dois vetores A e B de 10 elementos. Construir um vetor C tal que o elemento de índice ímpar de C seja igual ao elemento correspondente de A, caso contrário, seja igual ao elemento correspondente de B. Porexemplo, c[1]==a[1], c[3]==a[3],.... Mas,c[2]==b[2],b[4]==a[4],.... 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 if modulo(i,2)<>0 // Testa se o índice i é ímpar. c(i) = a(i); // Se for ímpar c(i) recebe o valor de a(i) else c(i) = b(i); // Se for par c(i) recebe o valor de b(i) end end for i=1:10 // Escreve o vetor C printf("%g ",c(i)); end
Comentário. A função módulo (resto de uma divisão) verifica se o índice do vetor C é ímpar ou par porque se resto da divisão entre um número qualquer e dois é diferente de zero, então ele é ímpar (não é divisível por dois).
44 Curso de Scilab – PET Engenharia Química Unicamp
9.5 Elaborar um programa que leia o dia, o número de mês e o ano e escreva a data no formato “D de MMM de AAAA”(ou “D de MMM de AA”). Por exemplo, se o dia é 31, o mês é 12 e o ano é 2003, então o programa deverá escrever 1 de dez de 2003.
mes = ["jan" "fev" "mar""abr" "jun" "jul" "ago" "set" "nov" "dez"]; dia = input("Digite o dia"); nunmes = input("Digite onumero do mes"); ano = input("Digite o ano"); printf("%g de %s de %g\n",dia,mes(nunmes),ano);
Comentário. Porque a variável nunmes contém o número do mês, o comando printf é capaz de escrever o nome do mês através do elemento mês (nunmes). 9.6 O que este programa escreve?
poema(1) = ’uma rosa’; poema(2) = ’é’; for a=1:3 for b=1:2 printf("%s ",poema(b)); end end printf(’%s’,poema(1));
9.7 Alguns candidatos prestaram concurso para cinco vagas em uma empresa. Os resultados das provas do concurso estão armazenadas nas seguintes matrizes:
Escreva um programa que: a) Armazene os nomes dos candidatos em um vetor nome e as notas das provas em uma matriz nota 10×3.
nome = ["Ana" "Carlos" "Francisco" ... "José" "Magali" "Marcos" ... "Maria" "Marta" "Paulo""Pedro"]; nota = [6.5 7.1 7.5; ... 8.0 8.3 7.2; ... 7.5 8.1 8.3; ... 6.1 5.2 6.0; ... 5.1 6.1 6.5; ... 4.1 5.5 5.4; ... 9.1 8.9 9.4; ...
45 Curso de Scilab – PET Engenharia Química Unicamp
8.8 8.5 9.0; ... 9.5 9.3 9.1; ... 8.2 8.5 7.8];
b) Calcule a média de cada candidato, armazene em um vetor media e escreva-o.
[m,n]=size(nota); for i=1:m soma = 0; for j=1:n soma = soma+nota(i,j); end media(i)=soma/3;
9.8 Verifique os valores de L(1), L(2), L(3) , L(4) e L(5) do exemplo do tópico 4.4. 9.9 Acessar termo L(2)(2)(1,2) da lista explicitada no exemplo do tópico 4.5. 9.10 Interpolar a seguinte tabela para o valor de x = 2.3 e extrapolar para x=52.5. Encontrar o gráfico dos pontos.
X 1 2 3 4 y 1.73 3.46 5.20 6.92
9.11 Encontrar o gráfico da função abaixo:
y = x3 +2x +3 9.12 Elaborar um programa Scilab para calcular a resistência equivalente entre dois resistores R1 e R2 em paralelo. Lembre-se que a resistência equivalente de dois resistores paralelos é dado por:
1Req= 1R1+ 1R2
Obs.: Lembre-se, esse exercício utilizará as funções printf e input. 9.13 Elaborar um programa Scilab para calcular a resistência equivalente entre dois
resistores R1 e R2 em paralelo. Lembre-se que a resistência equivalente entre dois
resistores em paralelo é dada por:
1
𝑅𝑒𝑞=
1
𝑅1+
1
𝑅2
Obs.: Lembre-se, este exercício utilizará as funções printf e input.
9.14 Elaborar um programa para calcular o valor da função:
𝑓(𝑥) = { 𝑥² + 16 𝑠𝑒 𝑥 ≥ 0 0 𝑠𝑒 𝑥 ˂ 0
, dado um valor x fornecido via
teclado.
Obs.: Lembre-se de utiliza as funções printf, input e if-else-end.
9.15 Elabore um programa que calcule e escreve o valor de S.
𝑆 = 1
1+
3
2+
5
3+ ⋯ +
99
50
46 Curso de Scilab – PET Engenharia Química Unicamp
Obs.: Note que há uma relação entre numerador e denominador da seguinte
forma:
2 x denominador - 1 = numerador
9.16 Elaborar um programa para calcular a soma de todos os inteiros entre 1 e 100.
9.17 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.
9.18 Calcular a soma dos quadrados dos elementos da segunda linha de A e escrever
o resultado.
47 Curso de Scilab – PET Engenharia Química Unicamp
10. Referências
1 http://www.dca.ufrn.br/~pmotta/sciport-3.0.pdf, acessado dia 17/06/2014 às 10h00min.;
2 http://www.mat.ufrgs.br/~guidi/grad/MAT01169/laminas.Intro_Scilab.pdf, acessado dia 17/06/2014 às 10h22min.;
3 http://www.dca.ufrn.br/~estefane/academica/progsci.pdf, acessado dia 17/06/2014 às 10h47min.;
4 http://euler.mat.ufrgs.br/~giacomo/Manuais-softw/SCILAB/Apostila%20de%20Scilab%20-%20atualizada.pdf, acessado dia 17/06/2014 às 11h01min.;
5 http://help.scilab.org/docs/5.3.2/pt_BR/, acessado dia17/06/2014 às 11h59min.
http://edusantos.eti.br/una/docs_algoritmos/scilab_apostila_una.pdf acessado dia 17/05/2015 às 18h23min
6
http://www.scilab.in/files/workshops/15-04-2010-mumbai/sengupta-ode.pdf
acessado dia 17/05/2015 às 18h25min