CENTRO UNIVERSITÁRIO UNA INSTITUTO POLITÉCNICO
ALGORITMOS E LÓGICA DE PROGRAMAÇÃO
PRÁTICAS DE LABORATÓRIO
2014/1
1
Sumário LINK PARA DOWNLOAD DO SOFTWARE SCILAB 4 INTRODUÇÃO 4 O AMBIENTE SCILAB 4 A JANELA CONSOLE SCILAB 4 JANELA DE COMANDO 5 A JANELA HISTÓRICO DE COMANDOS 6 SCINOTES 6 NAVEGADOR DE VARIÁVEIS 7 NAVEGADOR AJUDA 7 DESENVOLVENDO ARQUIVOS .SCE 8 DECLARAÇÃO DE VARIÁVEIS E CONSTANTES 9 COMANDOS BÁSICOS DE ENTRADA E SAÍDA 9 COMANDO DE SAÍDA 9 COMANDOS DE ENTRADA 11 OPERADORES 11 1. ESTRUTURA SEQUENCIAL 17 EXERCÍCIOS – ESTRUTURA SEQUENCIAL: 18 PROJETO FINAL 1 : CÁLCULO DE CARGA TÉRMICA PARA UMA CÂMARA DE RESFRIAMENTO. 21 2. ESTRUTURA CONDICIONAL 24 O COMANDO IF – ELSE. 24 ESTRUTURA CONDICIONAL -­‐ IF-­‐ELSEIF-­‐ELSE 25 EXERCÍCIOS – ESTRUTURA CONDICIONAL: 27 PROJETO FINAL 2 : DESENVOLVIMENTO DE UM CONVERSOR DE UNIDADES. 30 3. ESTRUTURAS DE REPETIÇÃO 33 O COMANDO “FOR” 33 O COMANDO “WHILE” 38 2
EXERCÍCIOS – LAÇOS DE REPETIÇÃO 41 4. VETORES E GRÁFICOS 44 INSERINDO VALORES EM UM VETOR 46 INSERÇÃO DIRETA 46 INSERÇÃO POR MEIO DE UM USUÁRIO 46 MOSTRANDO OS VALORES DE UM VETOR (SAÍDA DE DADOS) 46 SAÍDA DIRETA 46 SAÍDA POR LAÇO DE REPETIÇÃO 46 CONSTRUINDO GRÁFICOS 47 CONSTRUINDO GRÁFICOS 2D 47 AJUSTANDO TÍTULOS E EIXOS 49 EXERCÍCIOS -­‐ VETOR 57 PROJETO FINAL 3 : SIMULAÇÃO ! 58 5. MATRIZES 60 INSERINDO VALORES EM UMA MATRIZ 61 INSERÇÃO DIRETA 62 INSERÇÃO POR MEIO DE UM USUÁRIO 62 MOSTRANDO OS VALORES DE UMA MATRIZ (SAÍDA DE DADOS) 62 SAÍDA DIRETA 62 SAÍDA POR LAÇO DE REPETIÇÃO 62 PROJETO FINAL 4 : COMPREENDENDO MATRIZES PARA A GERAÇÃO DE GRÁFICOS TRIDIMENSIONAIS 67 3
Link para download do software SCILAB http://www.scilab.org
Introdução Existem várias abordagens para se ensinar os fundamentos do SCILAB. Este
material tem como objetivo fazer uma introdução ao SCILAB do ponto de
vista de um usuário da linguagem C.
Como C/C++ e outras linguagens de programação, o SCILAB, possui
operadores: aritméticos, lógicos, condicionais, repetição e outros mais.
Este capítulo vai introduzir a ferramenta SCILAB e explorar os seguintes
conceitos:
O ambiente SCILAB Com o passar dos anos o SCILAB vêm se popularizando não apenas pela
versatilidade, mas também pela sua interface, que permite um ambiente
amigável e interativo em que algoritmos básicos e avançados, envolvendo
cálculos e simulações podem ser facilmente executados.
O SCILAB apresenta várias janelas que ajudam e permitem que todas as
atividades sejam realizadas pelo usuário. As janelas possuem funções
distintas e serão exemplificadas e explicadas nas seções a seguir.
A janela console SCILAB A janela principal é chamada de console. Esta é a janela inicial onde as
principais interações no SCILAB acontecem. A janela console gerencia as
sub-janelas associadas a ela. Estas sub-janelas estão localizadas e visíveis
junto da janela console.
4
Figura 1 Janela console SCILAB
Janela de comando A janela de comando é uma sub-janela em que o usuário pode digitar
comandos ou instruções a serem processadas no SCILAB. A janela de
comando vai mostrar o prompt --> , sinal que simboliza que o SCILAB está
pronto para receber instruções. Uma vez digitada a instrução e a tecla enter
for digitada, a instrução é imediatamente executada.
Figura 2 Janela de comando SCILAB.
5
A janela Histórico de Comandos A janela de histórico contém todos os comandos ou estruturas anteriormente
executadas na janela de comando.
Figura 3 Janela histórico de comandos
SciNotes A janela SciNotes (editor) disponibiliza um espaço onde os arquivos .sci
poderão ser criados e editados para a execução. Arquivos .sci também
podem ser abertos ou re-editados e executados. Para ter acesso ao SciNotes
basta clicar na opção aplicativos da janela (principal) console SCILAB.
Figura 4 Janela do editor SciNotes
6
Navegador de variáveis É a sub-janela onde são carregadas, consultadas e salvas as variáveis.
Figura 5 Janela navegador de variáveis
Perceba na figura acima que todas as variáveis que foram criadas, foram
listadas e classificadas quanto ao seu tipo, dimensão e visibilidade. Um duplo
clique em cada uma destas variáveis, na janela navegador de variáveis,
permitirá que você acesse o conteúdo da variável selecionada.
Navegador Ajuda A janela ajuda permite acesso a todo o conteúdo de ajuda do SCILAB. Você
pode fazer a busca por informação de ajuda por diretórios organizados por
pacotes de aplicação, ou fazer uma busca por nome de comando, função ou
até mesmo aplicação desejada. Para acessar o conteúdo ajuda, basta clicar
no ícone
da janela principal (console SCILAB). É importante salientar
que o help possui a descrição de todos os comandos e trechos práticos de
implementação, que podem ser copiados e colados no SciNotes e em
seguida executados.
7
Figura 6 Janela Ajuda.
Desenvolvendo arquivos .sce Digitar um pequeno número de instruções na janela de comando pode ser
fácil e conveniente. Porém o aumento do número de instruções, ou o uso
aplicações mais complexas comprometem toda a praticidade e facilidade da
abordagem utilizando o prompt de comando ( --> ). Uma maneira mais
adequada é descrever estas instruções em um “arquivo texto”, onde a edição
é mais simples e depois solicitar ao SCILAB para carregar este arquivo e
executar estas instruções como se estivessem sido digitadas na janela de
comando. Desta maneira fica mais fácil para o usuário editar e modificar os
programas e identificar possíveis erros na execução. Este tipo de arquivo
texto contendo as instruções ao ( SCILAB ) é chamado de arquivo .sci. O
arquivo ganha este nome devido a extensão
do nome do arquivo a ser
reconhecido pelo SCILAB ser “ .sci ”. Todo o nosso conteúdo será trabalhado
utilizando os arquivos “.sci”.
8
Declaração de variáveis e constantes Assim como C/C++, o SCILAB possui algumas regras para a escolha dos
nomes na declaração de variáveis e constantes. Estas limitações devem ser
consideradas e estão descritas a seguir:
•
Os nomes de variáveis e constantes devem ser compostos por letras,
números e / ou “underscores”. Os nomes também devem sempre
iniciar com letras.
•
As variáveis ou constantes que por ventura vierem a ter palavras
compostas não podem ter espaços entre as palavras. Neste caso
aconselha-se fazer uso do “underscore” entre as palavras.
•
O SCILAB é “case sensitive” (difere letras maiúsculas de letras
minúsculas), portanto a variável de nome “numero” é distinta da
variável “Numero”.
Comandos básicos de entrada e saída Comando de saída O comando de saída utilizado será o mprintf(). Ele permite mostrar
mensagens, valores de variáveis e/ou a combinação de ambos no prompt de
comando.
Sequência de chamada
mfprintf(< texto >,< variável >)
O campo texto pode ser qualquer caracter, texto, equação ou uma
informação qualquer. A impressão do valor de uma variável pode ser feita por
meio da escolha do formato do tipo de dado seguido pelo nome da variável.
Veja o exemplo:
mprintf(“O valor da pressão calculada é %5.3f. \n”,pressao)
9
O formato de uso deste comando é semelhante ao formato utilizado para o
comando printf em C. No exemplo acima, o especificador de formato é
%5.3f. Podemos interpretar este especificador como sendo:
•
% ! Deve ser incluído toda vez que se deseja especificar o formato
de uma variável.
•
Tamanho (5 ou qualquer número) ! Esta parte do comando é
opcional e indica o tamanho total do valor mostrado, incluindo o ponto
decimal.
•
Precisão (3 ou qualquer número) ! Define a quantidade de casas
decimais que serão mostradas na saída.
•
Tipo de dado (d,f,e,g,c,s) ! Este tipo de informação é
necessária e as letras indicam o tipo de dado da variável como
indicado na tabela a seguir:
Tabela 1 Tipos de especificadores
Especificador
Saída
%d
Inteiro
%f
Real
%e
Exponencial
%g
Menor formato possível
%c
Caractere
%s
String
10
Tabela 2 Caracteres de controle
Caracteres
Significado
\b
backspace
\n
Nova linha
\t
Tab
\\
Mostrar o caractere \
%%
Mostrar o caractere %
Uma alternativa para mostrar mensagens no prompt de comando é o
comando disp(),ao contrário do comando mprintf() ele não permite
que valores de variáveis sejam mostrados conjugados com mensagens na
tela. Ao optar pelo comando disp(),você deverá optar por mostrar a
mensagem ou o valor da variável, apenas um por comando. Veja no exemplo
a seguir:
disp(“ A temperatura medida no motor é de 25 graus “)
Comandos de entrada O comando de entrada de dados utilizado no SCILAB é o comando
input(). Este comando permite que mensagens de texto sejam utilizadas
para indicar a entrada de valores para uma variável indicada. Veja um
exemplo:
temperatura=input(“Digite a temperatura de ajuste do forno: ”)
Após digitado um valor pelo usuário, este valor será atribuído à variável
temperatura.
Operadores Após atribuir valores por meio do comando input() , o próximo passo é
então processar os valores por meio das seguintes opções de operadores.
11
Tabela 3 Operadores Aritméticos
Símbolo
Significado
+
Adição
-
Subtração
*
Multiplicação
/
Divisão
^
Potência
=
Atribuição
()
Parênteses ( utilize-o
para impor regras)
Tabela 4 Operadores relacionais
Símbolo
Significado
>
maior
>=
Maior ou igual
<
Menor
<=
Menor ou igual
==
Igualdade
~=
Diferença
12
Tabela 5 Operadores lógicos
Símbolo
Significado
&
Operador e
|
Operador ou
~
Negação
Para saber mais sobre a implementação de funções complexas (números
complexos), exponenciais (raiz quadrada e logaritmos), trigonométricas
(seno, cosseno, tangente), etc; vá até o menu ajuda e consulte como é feito o
uso da função de sua necessidade. Veja como é fácil:
Exemplo de como utilizar o ajuda em busca de uma função
desconhecida
“ Eu gostaria de saber como eu faço para implementar o seno de um número
e a raiz quadrada de um número”
Passo 1: Vá até a janela principal do SCILAB e clique no botão ajuda
Passo 2: Na janela que se abrir você visualizará à esquerda da janela de
ajuda o seguinte menu de opções.
13
Figura 7 Pacotes de funções específicas do menu ajuda.
Passo 3: Escolha a pasta Funções Elementares. Você deverá visualizar as
novas opções de funções como na figura a seguir. Observe que você terá um
conjunto de funções relacionadas para diversos conteúdos como: números
complexos, funções exponenciais, operações com matrizes, ordenação e
procura de valores, trigonometria, etc.
14
Figura 8 Conjunto de funções elementares do menu ajuda.
Passo 4: Para visualizar como implementar o seno de um número vamos
abrir a pasta trigonometria e selecionar a função sin. Ao escolher a função
seno você deverá visualizar a seguinte janela;
Figura 9 Tela de ajuda para a função seno.
15
A janela apresentada na figura 9, possui informações do tipo nome,
sequência de chamamento, parâmetros, descrição e exemplos que podem
ser copiados, colados e executados no scinote.
Passo 5: Para calcular o seno de um número ou uma variável a partir das
informações encontradas no menu ajuda, devemos então executar o seguinte
comando:
y = sin(x);
Passo 6: Se executarmos os passos de 1 a 3 e selecionarmos a pasta
exponencial vamos chegar a seguinte informação para calcular a raiz
quadrada de um número.
y = sqrt(x);
16
1. ESTRUTURA SEQUENCIAL Chegou a hora de tentarmos apresentar alguns exemplos e desenvolver
pequenos programas aplicando o que vimos anteriormente.
Veja o exemplo 1.1:
Desenvolva um programa que realize a soma entre dois números
1
clear;
2
clc;
3
mprintf("Entre com dois numeros. \n");
4
num1 = input(" Primeiro numero: ");
5
num2 = input(" Segundo numero: ");
6
soma = num1 + num2;
7
mprintf("\n O resultado da soma é %f ",soma);
Linha 1: O comando clear limpa a memória do sistema.
Linha 2: O comando clc limpa a janela de saída do SCILAB.
Linhas 3 Mensagem para digitar 2 números
Linhas 4 e 5 : A função input() solicita dois valores ao usuário e armazena
os valores nas variáveis num1 e num2.
Linha 6: As duas variáveis são processadas utilizando o sinal + para realizar
a soma gerando um resultado, o qual é armazenado na variável soma.
Linha 7: O comando mprintf() mostra a mensagem de saída e o valor da
variável soma.
Comentários:
Uma prática comum na programação em softwares de
computação científica é a utilização dos comandos clear e clc. Aconselhamos
a você a sempre utilizar esses dois comandos ao iniciar um novo programa!
17
Exercícios – estrutura sequencial: Exercício 1. Faça um programa que solicite como entrada um valor de
temperatura em graus Celsius (oC). Após realizada a entrada faça a
conversão da temperatura para Kelvin (K). Após realizada a
conversão
mostre na saída do seu programa a temperatura em Kelvin e a temperatura
em graus Celsius. Para realizar a conversão utilize a relação: K = °C +
273,15;
Veja um exemplo de como pode ser feita a saída do seu programa !
Figura 10 Solução exercício 1
Exercício 2: É hora de dar mais um passo a frente. Com base no seu
programa anterior, acrescente a ele a conversão da temperatura em graus
Celsius para Kelvin e graus Celsius para grau Fahrenheit. Mantenha o
mesmo padrão de saída sugerido, acrescentando a conversão para graus
Fahrenheit. Para realizar a conversão utilize a relação: K = °C + 273,15; °F =
°C × 1,8 + 32
Exercício 3: Suponha que a altura h(t) de uma bola seja dada pela seguinte
função;
gt 2
h(t) = v0 t −
2
18
em que:
V0 é a velocidade inicial da bola em metros por segundo (m/s);
t
é o tempo em segundos (s);
g é a gravidade da terra = 9,81 m/s2
Escreva um programa que calculará a altura de uma bola em um
determinado tempo t. Esteja certo de usar bons nomes de variáveis para
todos os símbolos da fórmula.
Dica: Quais são as entradas deste problema? ( Que tipo de informação eu
preciso do usuário para que eu possa calcular a altura da bola?)
O que deverá ser feito como processamento? ( O que este programa deve
fazer?)
O que você espera como saída deste programa? Veja um exemplo !
Exercício 3: Uma aproximação ainda mais real pode ser feita
para o
problema apresentado no exercício número 2. Desta vez temos uma equação
que descreve a altura e outra equação que descreve a velocidade após o
lançamento.
Suponha que uma bola de massa qualquer seja arremessada para cima
numa velocidade
v0
. Qual é a velocidade v(t) e sua altura acima do
19
lançamento h(t) no instante t? A resposta, se desprezamos a resistência do
ar e um conjunto de outras pequenas influências, é
v(t) = v0 − gt
gt 2
h(t) = v0 t −
2
Onde
= 9,81 m/s2 é a aceleração da gravidade na superfície da terra.
Escrevamos um código em SCILAB que solicita
e t e então informa as
particularidades da bola (velocidade e altura).
Exercício 5. Consideremos um problema da eletrônica. Suponha que nós
tenhamos três resistores elétricos montados em paralelos, como mostrado na
figura abaixo, e gostaríamos de tratá-lo como um simples resistor. Criemos
um algoritmo para calcular a resistência equivalente dos três resistores
paralelos, mas tratado como um.
A lei de Ohm diz que a corrente I i através do i-ésimo resistor é proporcional
à queda da tensão V sobre o resistor, assim estas quantidades são
associadas por V = Ri I i onde Ri é chamada a resistência do resistor. A
corrente total passando pelos três resistores é justamente a soma das três
correntes e a queda da tensão
I total =
é a mesma para todos os três, assim:
!1 1 1$
V V V
+ + =V# + + &
R1 R2 R3
" R1 R2 R3 %
Consequentemente, a lei de Ohm se aplica ao grupo completo de três
resistores, com a resistência Rparalela dada por:
20
1
Rparalela
=
1 1 1
+ +
R1 R2 R3
Observe que tivemos que analisar o problema antes que pudéssemos
escrever qualquer código; frequentemente este é o caso, e a análise do
problema e a confecção da solução são usualmente mais difíceis do que a
implementação.
Escrevamos um código em SCILAB que solicita ao usuário os valores das
três resistências (R1 , R2 , R3) e retorna a resistência dos três em paralelo
(Rparalela).
PROJETO FINAL 1 : CÁLCULO DE CARGA TÉRMICA PARA UMA CÂMARA DE RESFRIAMENTO. A parcela de carga térmica englobada sob o título de diversos, é devida aos
equipamentos mecânicos, iluminação, pessoas e, demais elementos que
constituem fonte de calor no interior das câmaras.
Os equipamentos mecânicos são normalmente, os ventiladores dos UNIT
COOLERS cuja potência é da ordem de 0,5 a 1 c.v. por cada T.R bombas,
empilhadeiras, etc.
O calor dissipado pelos mesmos pode ser calculado como segue,
dependendo da situação:
Motor e carga no interior da câmara;
Qmotor =
Pc.v
632τ
ηmotor
kcal / dia
em que:
“ τ ” é o número de horas de funcionamento por dia de equipamento;
“ ηmotor ” é o rendimento do motor elétrico de acionamento.
A dissipação provocada pela iluminação é dada por;
21
Qilu min ação = 0,86w τ A
kcal / dia
em que ;
“ W “ é a potencia da lâmpada (W/m2)
“ τ ” é o número de horas de funcionamento por dia de equipamento;
“A” é a área da câmara.
As pessoas por sua vez liberam pelo seu metabolismo, uma quantidade de
calor que nos é dada por:
Qpessoas = n ⋅ q ⋅ τ
kcal / dia
em que:
"n" é o número de pessoas;
"q" o calor liberado por pessoa e por hora, o qual cresce com o
abaixamento de temperatura.
Prática !
Você deve ter percebido que as informações necessárias para o cálculo de
carga térmica devido a fatores diversos leva em consideração a quantidade
de pessoas, máquinas e lâmpadas no interior da câmara. Que tal
construirmos um programa em SCILAB para realizar estes cálculos? Para
isto leia com atenção o enunciado a seguir.
Elabore um programa para calcular a carga térmica de uma câmara frigorifica
com as seguintes características:
•
Área da câmara 200 m2.
•
Para realizar o transporte de carga dentro da câmara serão
necessários 10 homens/hora por 24 horas. (Utilize como 300 kcal/hora
o calor liberado por pessoa)
22
•
Uma empilhadeira será utilizada 2 horas por dia. Ela possui um motor
com potência de 10 c.v. e eficiência 0,85.
•
No interior da câmara teremos lâmpadas fluorescente especial para
baixas temperaturas na proporção de 10 W/m2 (acendimento 4
horas/dia).
•
Serão previstas também lâmpadas germicidas na proporção de 2
W/m2 (acendimento 24 horas).
Utilize a saída a seguir como forma de conferir os seus resultados!
Após desenvolver o seu programa e verificar o funcionamento, realize
pequenas simulações variando a quantidade de pessoas, empilhadeiras ou
lâmpadas. Veja dentre estes três fatores qual é o responsável por dissipar
maior quantidade de calor dentro da câmara1.
Figura 11 Solução, projeto câmara de resfriamento.
1
Toda a formulação para o cálculo de carga térmica foi adaptada de COSTA,
ENNIO CRUZ da. Refrigeração. Editora Edgard Blucher, 3 edição, 2011.
23
2. ESTRUTURA CONDICIONAL A estrutura condicional permite que o programa usufrua de um mecanismo de
seleção e um conjunto de instruções em um processo qualquer.
O comando if – else. Na indústria de um modo geral, ambientes com temperatura e umidade
relativa controlados são necessários para a manutenção da qualidade de
processos de fabricação e armazenamento.
Na indústria de refratários especificamente, a manutenção da umidade
relativa em baixos teores faz-se necessária no processo de composição de
moldes, tendo em vista que altas umidades relativas no ambiente podem
ocasionar danos significativos no processo de produção (lembre-se do saleiro
na sua casa em semanas chuvosas). Portanto, a direção da fábrica solicitou
ao engenheiro responsável que desenvolvesse uma lógica de controle de
umidade relativa no ambiente de composição de moldes da fábrica. Para que
os moldes atendessem aos padrões de qualidade da fábrica era necessário
que a umidade relativa ambiente fosse mantida abaixo de 40%. Caso
contrário uma mensagem de alerta deveria ser exibida.
O engenheiro responsável desenvolveu um programa em SCILAB que
recebia como entrada o valor da umidade relativa no ambiente e exibia uma
mensagem de alerta caso ela estivesse fora dos padrões de qualidade da
fábrica.
Veja o código no exemplo 2.1 a seguir:
24
1
clear;
2
clc;
3
mprintf("------------Software para controle de umidade relativa---- ");
4
umidade=input(" Digite a umidade relativa atual em decimal : ");
5
if (umidade<=0.4) then
6
7
mprintf("\n Umidade relativa dentro dos padrões");
else
8
mprintf("\n -----ALERTA !!! ------ALERTA !!!! -------");
9
mprintf("\n UMIDADE RELATIVA FORA DOS PADRÕES !!!");
10
end
11
mprintf("\n Fim de programa");
Linha 1: O comando clear limpa a memória do sistema.
Linha 2: O comando clc limpa a janela de saída do SCILAB.
Linha 3: Mostra mensagem na tela por meio do comando mprintf().
Linha 4: A função input() solicita o valor da umidade relativa e armazena o
valor na variável umidade .
Linhas 5 e 6: Verifica se a variável umidade possui um valor armazenado
menor ou igual a 0.4. Quando esta condição for verdadeira a mensagem é
mostrada.
Linhas 7 a 10: Caso a condição imposta na linha 5 seja falsa as mensagens
de alerta são mostradas na tela.
Estrutura condicional -­‐ if-­‐elseif-­‐else Um exemplo prático da utilização deste comando pode ser encontrado no
menu ajuda do SCILAB. Veja um trecho de código disponibilizado:
Imagine um copo de isopor com um buraco no fundo. Se você, em seguida,
derramar mel no copo você vai achar que o copo drena muito lentamente.
Isso é porque a viscosidade do mel é grande em comparação com
viscosidades de outros líquidos. Se eu encher o mesmo copo com água, por
exemplo, o copo irá drenar mais rapidamente.
25
A viscosidade descreve a fricção interna de um fluido em movimento. Um
fluido com grande viscosidade resiste ao movimento. Um fluido com baixa
viscosidade flui facilmente.
A viscosidade é uma propriedade dos fluidos que também varia em função da
temperatura com ilustra a tabela a seguir:
Tabela 6 Variação da viscosidade com a temperatura.
Temperatura (oF)
Viscosidade (lb/ft/hr)
0 ≤ Temperatura ≤ 49
242
50 ≤ Temperatura ≤ 99
82,1
100 ≤ Temperatura ≤149
30,5
150 ≤ Temperatura ≤ 199
12,6
Temperatura ≥ 200
5,7
Diante das informações sobre a viscosidade dos fluidos, desenvolva um
programa em SCILAB que receba como entrada a temperatura do fluido e
mostre na saída a sua viscosidade. Veja o exemplo 2.2 a seguir.
1
clear;
2
clc;
3
mprintf("------------Cálculo da viscosidade de um fluido----------------");
4 temperatura=input(" Digite a temperatura do fluido em graus fahrenheit (F) 5: ");
5
if (temperatura<=49) then
6
7
mprintf("\n Viscosidade do fluido = 242 (lb/ft/hr) ");
elseif(temperatura>=50 & temperatura<100) then
8
9
mprintf("\n Viscosidade do fluido = 82.1 (lb/ft/hr) ");
elseif(temperatura>=100 & temperatura<150) then
10
11
mprintf("\n Viscosidade do fluido = 30.5 (lb/ft/hr) ");
elseif(temperatura>=150 & temperatura<200) then
12
13
mprintf("\n Viscosidade do fluido = 12.6 (lb/ft/hr) ");
else
14
15
mprintf("\n Viscosidade do fluido = 5.7 (lb/ft/hr) ");
end
26
linhas 7, 9, 11: Por meio do comando elseif() as condições de temperatura
do fluido são verificadas. Repare que o operador lógico & foi necessário para
esta verificação.
Figura 12 Tela de saída para exemplo de cálculo de viscosidade
Exercícios – estrutura condicional: Exercício 1: Desenvolva um programa em SCILAB que receba como entrada
a temperatura do fluido e mostre na saída a viscosidade do fluido. Utilize a
tabela mostrada no exemplo 2 desta unidade. Você deverá fazer a leitura da
temperatura do fluido em graus Celsius na entrada (oC ).
Dica: Tenha cuidado com as unidades. Observe que a tabela que você vai
utilizar está em graus Fahrenheit (oF) mas você deverá fazer a entrada em
graus Celsius (oC).
Exercício 2: Desenvolva um programa em SCILAB que recebe como entrada
um valor de temperatura em graus Celsius (oC) e retorne como saída a fase
que se encontraria a água nesta temperatura (sólido, líquido ou gasoso).
Exercício 4: O número de Reynolds pode ser utilizado para caracterizar
diferentes regimes de escoamento, tais como laminar, transição ou
turbulento. O escoamento laminar ocorre para baixos números de Reynolds
( Re ≤ 2100 ), onde as forças viscosas são dominantes, e é caracterizado por
suave movimento do fluido. O fluxo turbulento ocorre em um elevado número
de Reynolds ( Re > 4000 ) e é dominado por forças de inércia, que tendem a
produzir redemoinhos aleatórios, vórtices e instabilidades. Para valores entre
2100 e 4000, classificamos o escoamento como escoamento em transição.
27
Diante das informações sobre o número de Reynolds desenvolva um
programa em SCILAB que classifique um escoamento dado o número de
Reynolds.
Exercício 5: Implemente um algoritmo em SCILAB que retorne o valor da
função abaixo após receber um valor qualquer de entrada.
x < −2 ⎫
⎧ 2 x + 2,
⎪
⎪
f (x ) = ⎨3,
− 2 ≤ x < 3⎬
⎪ − x,
3 ≤ x ⎪⎭
⎩
Exercício 6: Vamos recordar o problema proposto no exercício 3 da
unidade1.
Suponha que uma bola de massa qualquer seja arremessada para cima
numa velocidade
v0 .
Qual é a velocidade
v(t) e sua altura acima do
lançamento h(t) no instante t? A resposta, se desprezamos a resistência do
ar e um conjunto de outras pequenas influências, é
v(t) = v0 − gt
gt 2
h(t) = v0 t −
2
Onde
= 9,81 m/s2 é a aceleração da gravidade na superfície da terra.
O que aconteceria se jogássemos esta bola em outro planeta? Como
poderíamos fazer este tipo de estudo?
Que tal implementarmos um menu de opções e deixarmos que o usuário
escolha o planeta em que esta bola será jogada!?
Escrevamos um código em SCILAB que permita que o usuário escolha um
planeta em que quer jogar a bola e solicita v0 e t e então informa as
particularidades da bola (velocidade e altura). Aproveite o seu programa para
verificar qual a relação existente entre a gravidade, altura da bola e
velocidade da bola. Utilize a tabela a seguir para a sua implementação.
28
Tabela 7 Gravidade dos planetas do sistema solar.
Planeta
Gravidade (m/s2)
Mercúrio
3,7
Vênus
8,8
Terra
9,8
Marte
3,8
Júpter
26,4
Saturno
11,5
Urano
9,3
Netuno
12,2
Plutão
0,6
Veja um exemplo do menu de opções !
Figura 13 Exemplo menu de opções.
Exercício 7: Dado o gráfico abaixo, testar se um valor T qualquer fornecido
pelo usuário, pertence ao intervalo T0 ≤ T ≤ T1. Dados T0 = 5, T1 = 10, V0 = 1,
V1 = 2. Interprete os pontos preenchidos no gráfico como ponto válido e os
pontos vazios como pontos inválidos.
29
PROJETO FINAL 2 : DESENVOLVIMENTO DE UM CONVERSOR DE UNIDADES. Caro aluno a seguir apresentaremos algumas informações importantes
para o desenvolvimento do seu conversor de unidades.
Algumas relações de conversão de unidades:
Força:
1 N = 0,102 kgf= 0,2249 lbf
1 N = 1 kg m / s2
Pressão:
1Pa = 1 N / m2 = 0,102 kgf / m2 = 0,000145 lbf / pol2
1 atm = 101.325 Pa
1 bar = 105 Pa
1 lbf / pol2 = 1 psi (pounds per square inch)
Energia:
1 J = 0,0009478 BTU = 0,00023884 kcal
1 BTU = 252 cal
Potência:
HP
1 W = 3,412 BTU / h = 0,85984 kcal / h = 0,001359 CV = 0,001341
30
Prática!
É hora de desenvolver o seu próprio conversor de unidades. Você deverá
utilizar as informações fornecidas no texto sobre conversão de unidades. O
seu conversor deverá ter um menu inicial com as seguintes opções
• Temperatura
• Força
• Pressão
• Energia
• Potência
O usuário deverá escolher qual o tipo de unidade ele quer realizar a
conversão. Após o usuário realizar a escolha, ele deverá escolher em
qual unidade o valor a ser convertido vai ser digitado.
Exemplo:
•
Caso o usuário escolha converter temperaturas ele vai selecionar a
opção referente à temperatura no menu;
•
Após ter selecionado temperatura ele deverá escolher em qual
unidade de temperatura será feita a entrada; Celsius, Kelvin ou
Fahrenheit.
•
Como saída o programa deverá então mostrar a temperatura digitada
pelo usuário em todas as três unidades de temperatura.
31
Veja como exemplo a tela de saída após utilizar o conversor
Figura 14 Exemplo de saída para o programa conversor de unidades
32
3. ESTRUTURAS DE REPETIÇÃO O comando “for” O comando “for” repete um conjunto de instruções a partir de um número
conhecido de repetições. Este comando segue o seguinte formato:
for variável = início : incremento : fim
Bloco de comandos
end
Exemplo
Em um exercício do roteiro anterior analisamos a importância do termo
“gravidade” (g), no modelo proposto;
v(t) = v0 − gt
h(t) = v0 t − gt 2 / 2
Analisaremos agora, qual o comportamento da velocidade e da altura diante
da variação do tempo. Perceba que tanto a velocidade v(t) , quanto a altura
h(t) , são em função do tempo. Este tipo de análise é semelhante a
questionarmos; o que acontecerá com a velocidade e altura da bola no
intervalo de tempo de 0 a 2 segundos? Mostre o comportamento a cada 0,5
segundos. Utilize como v0 = 15 (m/s).
Se você fosse fazer esta análise no seu caderno você seria orientado pelo
seu professor de cálculo a desenvolver o seguinte raciocínio:
33
Tabela 8 Exemplo de cálculo manual.
T (s)
v(t) - (m/s)
h(t) (m)
0
15
0
0.5
10,095
6,274
1
5,190
10,095
1.5
0,285
11,464
2
-4.620
10,380
Este tipo de tratamento (manual), só é viável quando o número de repetições
é pequeno. Imagine se precisarmos de observar o comportamento das
variáveis diante de um número grande de repetições ? Veja o exemplo a
seguir !
O que acontecerá com a velocidade e altura da bola no intervalo de tempo de
0 a 2 segundos? Mostre o comportamento a cada 0,1 segundos. Utilize como
v0 = 15 (m/s). Desenvolva um programa em SCILAB que mostre o resultado
da velocidade e da altura da bola para cada iteração. (exemplo 3.1)
1
clear;
2
clc;
3
g=9.81;
4
mprintf("Simulação do arremeço de uma bola no planeta terra \n\n");
5
v0 = input(" Digite a velocidade inicial do arremeço (m/s) : ");
6
mprintf("\n t (s) h(t) (m)
7
for t=0:0.1:2
8
altura= v0*t - (g*(t^2))/2;
9
velocidade = v0 - g*t;
10
mprintf("\n %2.2f
11
mprintf("\n");
12
v(t) (m/s)")
%2.2f
%2.2f ",t,altura,velocidade);
end
34
linha 7 Observe a estrutura do comando for. A variável t é a variável de
controle. Ela foi inicializada com o valor 0, será incrementada a cada 0,1
segundos até que t alcance o valor de 2 segundos.
linhas 8 a 11 Estas linhas constituem o bloco de comandos que será
executado a cada iteração. Portanto a cada iteração os cálculos são
efetuados nas linhas 8 e 9 e mostrados nas linhas 10 e 11.
Veja a saída dos resultados a seguir:
Figura 15 Tabela de solução utilizando comando for
Como você pode perceber, de maneira rápida e segura os cálculos foram
efetuados e a simulação nos permite visualizar alguns resultados
interessantes.
A primeira observação que os resultados acima nos permitem fazer é que as
equações conseguem descrever o movimento de subida e decida da bola.
Veja os valores de altura durante a simulação. Do tempo 0 ao tempo 1,5 a
bola vai ganhando altura, até que no tempo = 1,5 segundos ela atinge a sua
altura máxima ! Após 1,5 segundos a bola então começa a perder altura.
De maneira semelhante a mesma análise pode ser feita quanto a velocidade
da bola. Veja que no tempo 0 a bola sai com a velocidade máxima, a
35
velocidade v0 (15 m/s). A partir do tempo zero a velocidade vai diminuindo
até chegar ao tempo 1,5 segundos em que a sua velocidade é igual a 0,29
(m/s) . A partir do tempo igual a 1,5 segundos a bola volta a ganhar
velocidade, desta vez com sinal negativo, ela está agora em uma trajetória
descendente, caindo !
Exemplo 2 : Somatórios
O uso de somatórios abrange diversas áreas do conhecimento. Possui
aplicações variadas em estatística, ciência da computação, engenharias,
matemática, física, química, etc.
Observe a tabela a seguir.
Tabela 9 Representação matemática e em SCILAB para um somatório
n
S = ∑i
for i:1:n
i=0
s = s+i;
end
A tabela acima apresenta um paralelo entre a representação matemática de
um somatório e a sua implementação em SCILAB. Veja a seguir um exemplo
da implementação desta estrutura.
A temperatura ambiente de uma região pode ser obtida a partir de um ajuste
de dados experimentais por uma série de Fourier. A equação a seguir foi
obtida a partir dos dados experimentais de temperatura da cidade de Belo
Horizonte no mês de agosto de 2013.
T (t) = 19, 06 + 0, 211cos ( 0, 08721⋅ t ) +[−5.51sen(0, 08721⋅ t)]
em que:
36
T = Temperatura ambiente ( oC );
t = tempo em horas.
Utilizando o modelo proposto para estimar a temperatura a partir da hora
fornecida desenvolva um programa em SCILAB que calcule a temperatura
média do mês de agosto. (Exemplo 3.2)
1
2
3
4
5
6
7
8
9
10
clear;
clc;
mprintf("Cálculo da temperatura média no mês de agosto - 2013 \n\n");
soma = 0;
for t=0:720
temperatura = 19.06 + (0.211*cos(0.08721*t)) + (-5.51*sin(0.08721*t))
soma = soma + temperatura;
end
media = soma/720;
mprintf("\n A temperatura média do mês de agosto-2013 em BH foi de
%2.2f (C) ",media);
linha 4 Inicializa a variável soma.
linha 5 A variável t é a variável de controle. Ela foi inicializada com o valor 0,
será incrementada a cada 1 hora até que t alcance o valor de 720 horas.
Perceba que quando o incremento for feito de “1 em 1” não é necessário
ajustar o incremento. Lembre-se t final foi ajustado como 720 horas, afinal em
um mês temos 30 dias de 24 horas.
linha 6 A variável temperatura guarda o resultado da temperatura calculada
para a hora t.
linha 7 Nesta linha temos a implementação do somatório. Em diversos livros
de algoritmos você irá encontrar esta estrutura também chamada de
acumulador.
linha 9 A média é calculada por meio da divisão do somatório das
temperaturas pela quantidade de amostras.
linha 10 Mostra a média calculada.
37
Figura 16 Tela de saída após processamento da média.
O Comando “While” O comando while ou (enquanto em pseudocódigo) é um comando de
repetição indicado para situações em que não se conhece o número de
repetições a serem realizadas. Sua sintaxe em SCILAB é a seguinte:
while (condição)
Bloco de comandos
end
Veja um exemplo de aplicação.
Nas indústrias química, agrícola e de alimentos é muito comum o uso de
equações empíricas para estimar a secagem de diversos produtos. Estas
equações são válidas para determinadas faixas de temperaturas e umidades
relativas. O objetivo destas equações é estimar após um determinado tempo
de secagem qual o teor de umidade do produto. Estas equações possuem
formas diversificadas, uma das formas mais utilizadas é conhecida pelo
seguinte formato:
U(t) = e−kt
n
em que :
U(t) é o teor de água do produto,
t é o tempo de secagem em horas,
k e n são parâmetros que dependem do produto;
38
2
Um engenheiro químico gostaria de conhecer o comportamento da secagem
de um determinado produto e decidiu elaborar um programa em SCILAB que
faça a simulação da secagem de um produto enquanto o teor de água do
mesmo seja maior ou igual a 0,13. Mostre na tela a cada hora o valor do teor
de água do produto. Utilize para a implementação os valores de 0,365 para k
e 0,663 para n. (Exemplo 3.3)
1
2
3
4
5
6
7
8
clear;
clc;
k=0.365;
n=0.663;
t=0;
teor_umidade=1;
mprintf("-------Simulação de secagem--------- \n\n");
mprintf("\n\t\t t(h)\t\t U(%%) ");
9
10
11
12
while(teor_umidade>=0.13)
teor_umidade= exp(-k*(t^n));
mprintf("\n\t\t %2.3f\t\t %2.2f ",t,teor_umidade*100);
t=t+1;
13
end
linhas 3 a 5 Inicialização das variáveis.
linha 6 A variável teor de umidade foi inicializada em 1 (equivalente a 100%).
Basta você ver que para o tempo igual a zero a equação vale 1. Perceba a
importância desta inicialização, é esta inicialização que permite o programa
executar as instruções no bloco de comandos do comando while. Em outras
palavras esta inicialização torna a condição no comando while verdadeira e
assim permite a repetição do bloco de comandos.
Linhas 9 a 12 Bloco de comandos pertencente ao comando while. O teor de
umidade é calculado, mostrado na tela e o tempo incrementado. Na linha 12
surge uma estrutura conhecida por muitos autores como contador. O
2
Informação o estudo da cinética de secagem de grãos e alimentos é de
extrema importância para a manutenção da qualidade do produto e para o
projeto de secadores.
39
contador é incrementado em 1 toda vez que um cálculo é efetuado e logo
após mostrado na tela.
Veja a saída da simulação feita em SCILAB
Figura 17 Tela de saída para simulação de secagem.
3
Observe que a tabela de resultados mostrada na saída indica que, para o
produto simulado secar até 13% de umidade, precisaríamos de 15 horas de
secagem.
Será que você saberia explicar, por que o último resultado t = 15 horas
e U = 12,25% apareceu na lista de resultados ??? Este resultado deveria
ter aparecido ???
3
É importante lembrar que o modelo proposto para a simulação da secagem
neste material está em uma forma extremamente simplificada. A simulação
de secagem em modelos complexos pode envolver programas com diversas
variáveis e funções, podendo levar até dias para se obter os resultados
simulados.
40
Exercícios – Laços de Repetição Exercício 1
Desenvolva um programa em SCILAB que calcule a exponenciação entre
dois números x e y escolhidos pelo usuário (xy). Para realizar os cálculos
você não poderá utilizar o comando (^).
Dica: A operação 53 deve ser feita da seguinte maneira: 5 x 5 x 5 = 125. A
operação de multiplicação foi repetida 3 vezes. Quais serão as entradas
deste programa ? Qual comando de repetição utilizar ?
Exercício 2
Desenvolva um programa em SCILAB que receba como entrada o valor de
potência em Watt (W) e converta este valor para BTU/h. Mostre na tela o
resultado da conversão e em seguida pergunte ao usuário se ele deseja
realizar uma nova conversão. O usuário deverá digitar 0 (zero) para terminar
o programa. Veja na figura a seguir um exemplo de saída para este
programa.
Figura 18 Saída para conversão de potência
Exercício 3
Devido ao uso frequente, a descarga da bateria de equipamentos eletrônicos
pode se comportar de acordo com a função proposta a seguir;
y(t) = y0 ⋅ 2(
−0,1)t
em que;
y0 é a carga inicial da bateria;
y(t) é a quantidade de carga após t horas de uso.
41
a) Desenvolva um programa em SCILAB, que tenha como entrada a
carga inicial da bateria e mostre como saída a carga da bateria a cada
hora enquanto a carga fique maior ou igual a 1%.
b) Acrescente ao programa feito na letra a) um sistema de aviso que
obedeça a seguinte tabela:
Carga (%)
Aviso
10% < carga ≤ 20%
Bateria fraca !
1% ≤ carga ≤ 10%
Conecte ao carregador
Dica: Procure identificar qual laço de repetição utilizar. Existe algum critério
de parada ?
Veja um exemplo de saída para o exemplo 1
Figura 19 Exemplo de saída para o exercício 1 - descarga de bateria
42
Exercício 4 Vimos no exemplo que ilustra a utilização de somatórios que a
temperatura ambiente de uma região pode ser obtida a partir de um ajuste de
dados experimentais por uma série de Fourier. A função a seguir foi obtida a
partir dos dados experimentais de temperatura da cidade de Belo Horizonte
no mês de agosto de 2013.
T (t) = 19, 06 + 0, 211cos ( 0, 08721⋅ t ) +[−5.51sen(0, 08721⋅ t)]
em que:
T = Temperatura ambiente ( oC );
t = tempo em horas.
Utilizando o modelo proposto para estimar a temperatura a partir da hora
fornecida desenvolva um programa em SCILAB que calcule e mostre as
seguintes informações sobre a temperatura em Belo Horizonte nas primeiras
48 horas de agosto:
a) A temperatura média do dia
b) A maior temperatura registrada no dia
c) A menor temperatura registrada no dia
d) Quantas horas a temperatura ficou acima de 19 oC.
e) Quantas horas a temperatura ficou abaixo de 16 oC.
43
4. Vetores e gráficos Um vetor é um tipo de variável que pode armazenar um ou mais valores do
mesmo tipo de dado.
Vejamos como isto funciona na prática. Imagine que você precisa armazenar
os valores 15, 23, 40, 12, 37. Até então você faria o seguinte raciocínio para
armazenar estes valores:
clear;
clc;
num1=15;
num2=23;
num3=40;
num4=12;
num5=37;
mprintf("\n Valor armazenado na variável num1 = %i",num1);
mprintf("\n Valor armazenado na variável num2 = %i",num2);
mprintf("\n Valor armazenado na variável num3 = %i",num3);
mprintf("\n Valor armazenado na variável num4 = %i",num4);
mprintf("\n Valor armazenado na variável num5 = %i",num5);
Perceba que até então não havia outra alternativa para você armazenar estes
5 valores a não ser criando 5 variáveis distintas para guardar o mesmo tipo
de valor. Perceba também que para mostrar os 5 valores na saída você
precisaria de novas 5 linhas de comando para mostrar os 5 valores distintos
na saída do programa. Veja a saída após a execução do código acima.
Figura 20 Exemplo de saída para diferentes variáveis.
Este tipo de abordagem torna-se inviável na medida em que a quantidade de
dados a serem armazenados aumenta. Imagine se você precisar armazenar
centenas ou milhões de dados do mesmo tipo ? (Isto ocorre com frequência
na engenharia) O que você faria ? Criar centenas ou milhões de variáveis
44
para armazenar cada valor será inviável. Nesta situação, a utilização de um
vetor é a saída mais indicada.
Que tal então tentarmos armazenar os nossos 5 valores do exemplo
apresentado anteriormente em um vetor ? Deixe-me te mostrar como isto
será feito. Observe o exemplo a seguir: (Exemplo 4.1)
1 clear;
2 clc;
3 num=[15 23 40 12 37];
4 for i=1:5
5
mprintf("\n O valor %i esta armazenado na posição %i do vetor num",num(i),i);
6 end
Vamos começar pela linha 3 do código acima. Na linha 3 os nossos 5 valores
foram guardados em uma única variável chamada num. Isto é um vetor ! Veja
a ilustração abaixo:
num
=
15
23
40
12
37
1
2
3
4
5
A variável num comporta-se como a ilustração acima. Cada um dos 5 valores
ganhou um espaço na variável num e cada espaço possui um índice
responsável por identificar em qual posição do vetor o valor foi armazenado.
Portanto o valor 15 está armazenado na posição 1; o valor 23 está
armazenado na posição 2; o valor 40 está armazenado na posição 3 ; o valor
12 está armazenado na posição 4 e o valor 37 está armazenado na posição
5.
Para compreender melhor esta associação entre posições e valores observe
as linhas 4 a 6 do código acima. Para fazer a saída dos valores do vetor
num, utilizamos uma estrutura de repetição. A estrutura definida na linha 4
utiliza a variável i como controle. Aproveitaremos então a variável i para
percorrer todo o vetor, executando o comando de saída, mostrando na tela o
valor armazenado ! num(i) para cada posição ! i como mostra a figura a
seguir.
45
Figura 21 Exemplo de saída de valores de um vetor
Inserindo valores em um vetor A inserção de valores em um vetor pode ser feita de diferentes maneiras. A
seguir apresentaremos as mais usuais.
Inserção direta num = [ 5 10 12 32 45 48 23 64 ... ];
Inserção por meio de um usuário for i=1:5
mprintf("Digite um valor para a posição %i do vetor",i);
num(i)=input("");
end
Mostrando os valores de um vetor (Saída de dados) Saída direta disp(num);
Saída por laço de repetição for i=1:5
mprintf("\n O valor %i esta armazenado na posição %i ",vetor(i),i);
end
46
Construindo Gráficos Construindo gráficos 2D A construção de um gráfico 2D em SCILAB pode ser feita por meio da função
plot( ) . O forma básica para o comando é;
plot(x,y)
em que x é um vetor que contém os valores para a coordenada-x do gráfico e
y é o vetor que contém os valores para a coordenada-y do gráfico.
Exemplo: Plote o gráfico da função
f (x) = 3x 2 + 4x +1 . Faça x variar no
intervalo de -5 a 4 com incrementos de 0,5. Veja o código em SCILAB a
seguir;
Opção 1: Na opção 1 o vetor x é declarado de maneira direta. Repare que o
vetor y é automaticamente criado pelo SCILAB.
Basta atribuir a y a
expressão da função desejada e o SCILAB realiza o cálculo de y para cada
posição do vetor x. Em seguida a função plot ( ) e os vetores x e y foram
utilizados para fazer o gráfico da função.
clear;
clc;
x = [-5 -4.5 -4 -3.5 -3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 4];
y = 3*x^2 + 4*x + 1;
plot(x,y);
Opção 2: A opção 2 apenas se difere da opção 1 quanto a criação do vetor x.
O vetor x foi criado a partir da função linspace(valor 1, valor2 ,
valor 3 ). A função linspace() funciona da seguinte maneira: o
primeiro valor dentro do parênteses representa o valor inicial do vetor a ser
criado, o segundo valor representa o fim do intervalo a ser criado e o último
valor dentro do parênteses representa o número de elementos que serão
criados para este vetor.
clear;
clc;
x = linspace(-5,4,19);
y = 3*x^2 + 4*x + 1;
plot(x,y);
47
Opção 3. A opção 3 apresenta uma estrutura de criação dos vetores por
meio de laços de repetição. Os vetores x e y vão sendo criados na medida
em que as iterações, ou repetições, vão acontecendo. Perceba que o
contador i a cada iteração é utilizado para calcular um novo valor de x e um
novo valor de y para a posição i.
clear;
clc;
i=1;
x(1)=-5;
y(1)=3*x(1)^2 + 4*x(1) + 1;
while x(i)<4
i=i+1;
x(i)=x(i-1)+0.5;
y(i)= 3*x(i)^2 + 4*x(i) + 1;
end
plot(x,y);
O gráfico a seguir
foi gerado para a função proposta no exemplo.
Independente da opção escolhida pelo usuário para criar gráfico da função
proposta o resultado esperado é o apresentado a seguir.
Figura 22 Janela de saída gráfica.
48
Ajustando Títulos e eixos O SCILAB permite que façamos ajustes nos títulos e eixos dos gráficos. Veja
as opções disponíveis:
title() Ajusta o título na parte superior do gráfico.
xlabel() Ajusta o título para o eixo x.
ylabel() Ajusta o título do eixo y.
Veja o código e a nova figura após a inclusão dos comandos de formatação
de eixos e títulos.
clear;
clc;
i=1;
x(1)=-5;
y(1)=3*x(1)^2 + 4*x(1) + 1;
while x(i)<=4
i=i+1;
x(i)=x(i-1)+0.5;
y(i)= 3*x(i)^2 + 4*x(i) + 1;
end
plot(x,y);
title("Gráfico de f(x)= 3*x^2 + 4*x + 1");
xlabel("Eixo x");
ylabel("Eixo y");
49
Figura 23 Novo gráfico após formatação de título e eixos.
DICA: Ajuda sobre diferentes estilos de linhas, cores e formatações
podem ser encontrados no menu ajuda ou clicando no menu editar após
aparecer a janela do gráfico. A figura a seguir ilustra o menu editar.
50
Figura 24 Opções de configuração de gráfico
Figura 25 Editor de gráfico.
51
Dica: para plotar um gráfico com várias curvas, siga o exemplo a
seguir:
Como plotar um gráfico da função f (x) = ax + b para diferentes
valores de a = ( 1, 3, 5, 7) e b = 1, no intervalo 0 ≤ x ≤ 10? Estude o
código a seguir !
clear;
clc;
i=1;
b=1;
x(1)=0;
y1(1)=1*x + b;
y2(1)=3*x + b;
y3(1)=5*x + b;
y4(1)=7*x + b;
incremento=0.1;
while x(i)<10
i=i+1;
x(i)=x(i-1)+incremento;
y1(i)=1*x(i) + b;
y2(i)=3*x(i) + b;
y3(i)=5*x(i) + b;
y4(i)=7*x(i) + b;
end
plot(x,[y1 y2 y3]);
title("Gráfico de f(x)= a*x^2 + b");
xlabel("X");
ylabel("Y");
Figura 26 Exemplo de gráfico com múltiplos comportamentos.
52
Exemplo de aplicação: (exemplo 4.2)
Um engenheiro decidiu acompanhar o funcionamento do secador de grãos
representado pela figura abaixo.
Figura 27 Secador de grãos.
Para realizar esta inspeção, o engenheiro instalou um sensor de temperatura
na câmara de aquecimento de ar e um tubo de pitot para medir a velocidade
do ar na entrada da câmara de aquecimento. Para coletar as informações de
temperatura e velocidade do ar durante às dez horas de funcionamento o
engenheiro desenvolveu um programa em SCILAB que fosse capaz de
coletar estas informações a cada 0,5horas (meia hora) e mostrar:
• a temperatura média na câmara de secagem;
• a velocidade média do ar de secagem;
• A maior temperatura e velocidade registradas durante as 10 horas;
• A menor temperatura e velocidade do ar registradas durante as 10
horas;
• Os gráficos mostrando o comportamento da temperatura e velocidade
do ar durante as 10 horas.
Veja o código fonte comentado e os resultados a seguir.
53
1 clear;
2 clc;
3 tempo(1)=0;
4 temperatura(1)=grand(1,"nor",70,5);
5 velocidade(1)=grand(1,"nor",1.5,0.1);
6 i=1;
7 while tempo(i)<10
8
i=i+1;
9
tempo(i)=tempo(i-1)+0.5;
10 temperatura(i)=grand(1,"nor",70,2.5);
11 velocidade(i)=grand(1,"nor",1.5,0.05);
12 end
13 scf(1);
14 title("Variação da velocidade durante 10 horas");
15 xlabel("Tempo (h)");
16 ylabel("Velocidade (m/s)");
17 plot(tempo,velocidade,'bo-');
18 scf(2);
19 title("Variação da Temperatura durante 10 horas");
20 xlabel("Tempo (h)");
21 ylabel("Temperatura (Celsius)");
22 plot(tempo,temperatura,'r-');
23 temperatura_media=mean(temperatura);
24 velocidade_media=mean(velocidade);
25 maior_temperatura=max(temperatura);
26 menor_temperatura=min(temperatura);
27 maior_velocidade=max(velocidade);
28 menor_velocidade=min(velocidade);
29 mprintf("\n ------Relatorio de experimento------------");
30 mprintf("\n A temperatura media durante as dez horas foi de %2.2f
31Celsius",temperatura_media);
32 mprintf("\n A velocidade media durante as dez horas foi de %2.2f
m/s",velocidade_media);
33 mprintf("\n A maior temperatura atingida durante as dez horas foi de %2.2f
Celsius", maior_temperatura);
34 mprintf("\n A menor temperatura atingida durante as dez horas foi de %2.2f
Celsius",menor_temperatura);
35 mprintf("\n A maior velocidade atingida durante as dez horas foi de %2.2f m/s",
maior_velocidade);
36 mprintf("\n A menor velocidade atingida durante as dez horas foi de %2.2f
m/s",menor_velocidade);
54
linhas 3 a 6 Observe que nestas linhas os vetores temperatura, tempo e velocidade são
inicializados na sua primeira posição (posição 1) com os valores de tempo inicial.
linhas 7 a 12 Nesta parte do código é feita a simulação da aquisição de dados a cada
tempo. Para isto foi utilizado o comando grand(1, distribuição normal, media, desvio
padrão) , este comando gera números aleatórios obedecendo uma distribuição normal,
uma média e um desvio padrão pré definidos. Para cada tempo simulado valores de
temperatura e velocidade são gerados e armazenados em seus respectivos vetores. A
variável i é incrementada a cada iteração até que o critério de parada (tempo<10) for
alcançado.
linhas 13 a 22. Nesta parte do código são executados os comandos para a geração dos
gráficos (plot), títulos das figuras (title) e título das eixos (xlabel e ylabel). Os
comandos scf( ) dão nome às janelas de gráficos, identificando-os e permitindo criar
figuras distintas uma das outras.
linhas 23 a 28 Neste trecho foram calculadas as médias através do comando mean( ),
os maiores e menores valores dos vetores, por meio dos comandos max( ) para o
maior valor e min( ) para o menor valor.
Saídas
Figura 28 Tela de saída em SCILAB para exemplo1 vetor.
55
Figura 29 Variação da velocidade do ar de secagem.
Figura 30 Variação da temperatura de secagem na câmara de secagem
56
Exercícios -­‐ Vetor Exercício 1 Faça um programa em SCILAB que solicite ao usuário a
digitação de 10 números distintos. Armazene estes valores em um vetor. A
saída do seu programa deverá mostrar ao usuário o valor digitado e as
posições em que estes valores foram armazenados no vetor.
Exercício 2
Faça um programa em SCILAB para gerar o gráfico das
seguintes funções, obedecendo os intervalos propostos. Você saberia
interpretá-los ?
a) seno(x); -π ≤ x ≤ π;
b) cosseno(x); -π ≤ x ≤ π;
c) ln(x); 0,001 ≤ x ≤ 10
d) ex; 0 ≤ x ≤ 10
e) f (x) = 1x 2 + 2x +1 ; qual intervalo utilizar ? Existe algum critério para
escolher o intervalo ?
f)
$ t +1 0 ≤ t < 1
&
& 0 1≤ t < 2
f (t) = %
& 2−t 2 ≤ t <3
&
0 t ≥3
'
(
&
&
)
&
&
*
Exercício 3 Utilize o código do programa em SCILAB desenvolvido no
exemplo de aplicação (secador de grãos) e calcule novamente a temperatura
média, a velocidade média, a maior temperatura, a menor temperatura, e
maior velocidade e a menor velocidade. Desta vez você não poderá utilizar
as funções mean( ), max( ) e min( ). Você deverá desenvolver toda a lógica
para efetuar os cálculos. Você poderá utilizar as funções mean( ), max( ) e
min( ) apenas para comparar os seus resultados obtidos com os resultados
obtidos pelas funções.
57
PROJETO FINAL 3 : Simulação ! No instante t=0 (min) um tanque contém Q0 (lb) de sal dissolvido em 100 (gal)
(cerca de 455 litros). Suponha que água contendo 1/4 (lb) (cerca de 113g de
sal por galão) está entrando no tanque a uma taxa de r galões por minuto, e
que o líquido, bem misturado, está saindo do tanque à mesma taxa. O
fenômeno é ilustrado pela figura abaixo.
Figura 31 Tanque de água com misturador.
A função a seguir expressa a quantidade de sal Q(t) no tanque em qualquer
estante t.
Q(t) = 25 + (Q0 − 25)e−r t/100
Desenvolva um programa em SCILAB que simule a quantidade de sal
presente no tanque durante 100 minutos.
a) Como saída você deverá mostrar a quantidade de sal presente no
tanque e o tempo de simulação a cada 10 minutos. Utilize Q0 = 50 lb e
r = 3.
b) Faça um gráfico mostrando o comportamento da quantidade de sal no
tanque durante os 100 minutos. Utilize Q0 = 50 lb e r = 3.
c) Faça um único gráfico contendo 4 curvas com as seguintes condições:
•
Curva 1: Deverá representar a quantidade de sal em 100 minutos
com r = 3 e Q0 = 50 lb.
58
•
Curva 2: Deverá representar a quantidade de sal em 100 minutos
com r = 3 e Q0 = 40 lb.
•
Curva 3: Deverá representar a quantidade de sal em 100 minutos
com r = 3 e Q0 = 25 lb.
•
Curva 4: Deverá representar a quantidade de sal em 100 minutos
com r = 3 e Q0 = 10 lb.
•
Interprete o fenômeno ilustrado pelo gráfico !
d) O que aconteceria se o valor da taxa de fluxo aumentasse para 5 após
20 minutos de simulação ? Utilize como condição de simulação Q0 =
50 lb. Mostre o gráfico da simulação e interprete-o.
e) Qual seria a taxa de fluxo necessária (r) para que o valor de t não
exceda 45 minutos para alcançar o equilíbrio ? Utilize Q0 = 50 lb.
Dica: O sistema entra em equilíbrio quando Q(t) = 25.
59
5. Matrizes Uma matriz é um tipo de variável que pode armazenar um ou mais valores do
mesmo tipo de dado, porém este armazenamento pode estar associado a
duas propriedades distintas. Esta associação para muitos é chamada de
dimensão. Em vetores, associávamos o armazenamento de informação a
apenas uma propriedade, “uma dimensão”. Por exemplo, associa-se que o
vetor idade armazena diferentes idades; o vetor temperatura armazena
diferentes temperaturas, o vetor velocidade diferentes valores de velocidade,
etc. Quando tratamos de matrizes associamos os valores da matriz a duas ou
mais propriedades ou duas ou mais dimensões.
Veja um exemplo: (Exemplo 5.1)
Um engenheiro resolveu montar um sistema de aquisição de dados para
coletar os dados de pressão do gás refrigerante e temperatura do gás
refrigerante em um sistema de refrigeração. Para isto o engenheiro instalou
em diferentes pontos do sistema três sensores de pressão e temperatura. O
engenheiro desenvolveu um programa em SCILAB que durante cinco horas
coletava as informações dos sensores e armazenava as informações a cada
hora. Veja o código desenvolvido pelo engenheiro;
clear;
clc;
for tempo=1:5
for sensor=1:3
temperatura(tempo,sensor)=grand(1,"nor",70,2.5); //simula os sensores de
temperatura
pressao(tempo,sensor)=grand(1,"nor",250000,10000); //simula os sensores de
velocidade
end
end
disp("Matriz Temperatura (C)");
disp(temperatura);
disp("Matriz Pressao (Pa)");
disp(pressao);
A lógica utilizada pelo engenheiro foi de armazenar em uma matriz chamada
temperatura os dados dos três sensores a cada hora durante 5 horas.
Veja a disposição dos valores como ficaria em formato de matriz.
60
Tabela 10 Matriz Temperatura
Tempo (h)
Sensor de
Sensor de
Sensor de
Temperatura (1)
Temperatura (2)
Temperatura (3)
1hora
2horas
3horas
4horas
5horas
A matriz temperatura foi organizada da seguinte maneira: para cada hora
foram registradas três temperaturas distintas, uma para cada sensor.
Portanto a nossa matriz de duas dimensões (tempo,sensor) é uma matriz
5x3 (5 linhas e 3 colunas). O mesmo raciocínio foi aplicado ao sensor de
pressão.
Veja a saída após executarmos o programa em SCILAB;
Figura 32 Saída das matrizes temperatura e pressão
Inserindo valores em uma matriz A inserção de valores em uma matriz pode ser feita de diferentes maneiras. A
seguir apresentaremos as mais usuais.
61
Inserção direta Inicializando de maneira direta uma matriz 3 x 3.
matriz = [ 5 2 7; 1 0 -3; 3 10 -9];
Observe que o “;” foi utilizado para distinguir uma linha de outra da
matriz.
Inserção por meio de um usuário Inicializando por meio de um usuário uma matriz 3 x 3.
for i=1:3
for j=1:3
mprintf("\n Digite um valor para a matriz na posicao linha %i coluna %i ",i,j);
matriz(i,j)=input(" ");
end
end
Mostrando os valores de uma matriz (Saída de dados) Saída direta disp(matriz);
Saída por laço de repetição for i=1:3
for j=1:3
mprintf("\n Valor digitado para a matriz na posicao linha %i coluna %i =
%i",i,j,matriz(i,j));
end
end
62
Exemplo 5.2 Desenvolva em SCILAB um programa que permita ao usuário
preencher 2 matrizes quadradas A e B. Após preencher as matrizes A e B o
usuário deverá escolher de acordo com as opções abaixo, qual tipo de
operação irá realizar com as matrizes A e B para gerar uma matriz C com a
resposta da operação selecionada. Veja as opções:
1) Adição
2) Subtração
3) Multiplicação elemento por elemento
4) Multiplicação de matrizes
5) Divisão elemento por elemento
Solução
1 clc
2 clear
3 dimensao = input ('Informe a dimensão das duas matrizes quadradas: ');
4 mprintf("Para a matriz A ");
5 mprintf("\n\n");
6 for linha = 1:dimensao
7 for coluna = 1:dimensao
8
mprintf ("Elemento da matriz A posição A(%i,%i): ",linha,coluna);
9
A(linha,coluna) = input ("");
10 end
11 end
12 mprintf("Para a matriz B.");
13 for linha = 1:dimensao
14 for coluna = 1:dimensao
15
mprintf ("Elemento da matriz B posição B(%i,%i): ",linha,coluna);
16
B(linha,coluna) = input (" ");
17 end
18 end
19
20 mprintf("\n Matriz A ");
21 disp(A);
22 mprintf("\n Matriz B ");
23 disp(B);
24 mprintf("\n ______________________________________");
25 mprintf("\n 1) Adição ");
26 mprintf("\n 2) Subtração ");
27 mprintf("\n 3) Multiplicação Elemento por Elemento");
28 mprintf("\n 4) Multiplicação de Matrizes ");
29 mprintf("\n 5) Divisão elemento por elemento ");
30 mprintf("\n\n");
63
31 operacao=input("Escolha a operação: ");
32 if operacao==1 then
33
C = A + B;
34
mprintf("\n Matriz C ");
35
disp(C);
36 elseif operacao==2 then
37
C = A - B;
38
mprintf("\n Matriz C ");
39
disp(C);
40 elseif operacao==3 then
41
C = A.*B;
42
mprintf("\n Matriz C ");
43
disp(C);
44 elseif operacao==4 then
45
C = A*B;
46
mprintf("\n Matriz C ");
47
disp(C);
48 elseif operacao==5 then
49
C = A./B;
50
mprintf("\n Matriz C ");
51
disp(C);
52 else
53
mprintf("\n Escolha inválida");
54 end
linha 3 A variável dimensão armazena a dimensão das matrizes A e B. Este
valor é escolhido pelo usuário.
linhas 6 a 18 Neste bloco de comandos do programa são feitas as leituras de
valores para as matrizes A e B. Observe que para realizar a operação de
leitura elemento por elemento é necessário o uso de dois laços de repetição.
O primeiro laço varia da posição 1 ao número de linhas. O segundo laço varia
da posição 1 ao número de colunas. Os índices linha e coluna são
controlados pelos laços de repetição.
linhas 20 a 23 Nesta parte do programa são mostradas as matrizes A e B.
Observe que o comando disp( ) foi utilizado para realizar esta tarefa. Este
comando permite que as matrizes e vetores sejam mostrados na tela sem o
uso de laços de repetição.
linhas 24 a 30 Menu de opções para que o usuário escolha qual operação
deseja realizar com as matrizes A e B.
64
Linhas 31 a 54 Bloco de comandos responsáveis por realizar as operações
com as matrizes de acordo com a opção escolhida pelo usuário. Perceba que
o SCILAB é uma linguagem prepara para trabalhar com matrizes e vetores,
portanto veja que;
• para somar duas matrizes foi utilizado o comando (+);
• para subtrair duas matrizes foi utilizado o comando ( - );
• para multiplicar elemento por elemento foi utilizado o comando ( .* )
• para multiplicar duas matrizes foi utilizado o comando (*);
• para dividir duas matrizes elemento por elemento foi utilizado o
comando ( . / );
Veja um exemplo de solução a seguir:
Figura 33 Saída exemplo 1 matriz.
65
Exercício 1 Desenvolva em SCILAB um algoritmo que faça a leitura de
valores para uma matriz 4 x 4. Após a inserção dos valores mostre a matriz
digitada pelo usuário, o maior valor da matriz e o menor valor da matriz.
Exercício 2 Escreva um programa em SCILAB que mostre na tela uma
tabela de conversão de temperaturas. Esta tabela deve mostrar a conversão
de temperaturas em graus Celsius na faixa de 150 oC a 350
incrementos de 50
o
o
C com
C. Faça as conversões de Celsius para Kelvin e
Fahrenheit. Veja um modelo de saída esperada.
Figura 34 Exemplo de saída exercício 2 matriz.
Exercício 3 Desenvolva um programa em SCILAB que a partir das matrizes
A, B e C realize as seguintes operações :
! 5 0 $
! 4 2 $
! −1 1 $
A =#
& B =#
& C =#
&
" −2 6 %
" 0 2 %
" 3 2 %
a) A + B – C’ ( O apóstrofe simboliza a matriz transposta)
b) 2A-3B-(-C);
c) (A-4) + C;
d) (A-C)’;
66
PROJETO FINAL 4 : Compreendendo matrizes para a geração de gráficos tridimensionais A geração de gráficos tridimensionais não é uma tarefa trivial. Apesar do
SCILAB conseguir simplificar de maneira considerável a criação destes
gráficos precisamos entender o conceito de matriz que está por trás dos
comandos em SCILAB que facilitam a criação destes gráficos.
Vamos tomar como exemplo a função
7
−x+ y
3
u(x, y) = 5e
. Para plotarmos o
gráfico desta função a primeira coisa a fazer é conhecer para quais valores
de x e y desejamos calcular u(x, y) . Vamos supor que desejamos saber o
valor de u(x, y) para 0 ≤ x ≤ 3 e 0 ≤ y ≤ 3 . Ótimo, agora temos a função que
queremos plotar o gráfico e o intervalo definido para x e y. O passo seguinte
é decidir em quais coordenadas (x,y) eu quero calcular o valor de u(x, y) .
Vamos supor que eu queira calcular o valor de u(x, y) em 5 pontos
igualmente espaçados entre 0 ≤ x ≤ 3 e 0 ≤ y ≤ 3 , portanto os pontos que
queremos calcular o valor da função são:
x
y
0
0
0,75
0,75
1,5
1,5
2,25
2,25
3
3
É importante lembrar que a nossa função, é uma função em duas dimensões,
portanto para cada coordenada x temos os pares com as coordenadas y
gerando assim o conjunto de pontos (malha) ilustrado a seguir (uma matriz !)
:
67
Tabela 11 Exemplo de uma subdivisão de pontos para uma função bidimensional.
u(0, 3)
u(0.75, 3)
u(1.5, 3)
u(2.25, 3)
u(3, 3)
u(0, 2.25)
u(0.75, 2.25)
u(1.5, 2.25)
u(2.25, 2.25)
u(3, 2.25)
u(0,1.5)
u(0.75,1.5)
u(1.5,1.5)
u(2.25,1.5)
u(3,1.5)
u(0, 0.75)
u(0.75, 0.75)
u(1.5, 0.75)
u(2.25, 0.75)
u(3, 0.75)
u(0, 0)
u(0.75, 0)
u(1.5, 0)
u(2.25, 0)
u(3, 0)
Finalmente após a subdivisão dos pontos podemos então calcular o valor da
função nas coordenadas, conforme ilustrado a seguir.
Tabela 12 Matriz de solução para a função u(x,y).
5.0
2.36
1.11
0.52
0.2489
28.77
13.59
6.42
3.03
1.43
165.57
78.21
36.94
17.45
8.24
952.83
450.08
212.60
100.42
47.43
5483.16
2590.06
1223.45
577.92
272.99
Utilizando o SCILAB para gerar o gráfico da função
7
−x+ y
u(x, y) = 5e 3
Vamos agora aprender então como executar todos os passos descritos
acima utilizando o SCILAB.
1. Para gerar os intervalos das funções ; 0 ≤ x ≤ 3 e 0 ≤ y ≤ 3 faremos uso
da função linspace( ). Conforme explicado no capítulo de vetores a
função linspace(valor1, valor2, valor3 ) funciona da seguinte
maneira; o primeiro valor dentro do parênteses representa o valor
inicial do vetor a ser criado, o segundo valor representa o fim do
intervalo a ser criado e o último valor dentro do parênteses representa
68
o número de elementos que serão criados para este vetor. Portanto se
quisermos 5 pontos dentro do intervalo 0 ≤ x ≤ 3 e 5 pontos dentro do
intervalo 0 ≤ y ≤ 3 utilizaremos o comando da seguinte forma;
intervalox=linspace(0,3,5);
intervaloy=linspace(0,3,5);
2. Para gerar a matriz ilustrada pela tabela 11 utilizaremos o comando
meshgrid(). O comando meshgrid() recebe os pontos gerados pelo
comando linspace( ) e gera as coordenadas x e y, conforme a tabela
11.
[x,y]=meshgrid(intervalox,intervaloy);
69
3. A partir das coordenadas geradas x e y podemos então calcular o
valor da função
7
−x+ y
3
u(x, y) = 5e
para cada ponto gerado.
for i=1:5
for j=1:5
u(i,j)= 5*exp(-x(i)+((7/3)*y(i)));
end
end
4. Finalmente por meio das matrizes x, y e u podemos gerar o gráfico
para a função proposta. Veja um exemplo utilizando o comando
mesh().
intervalox=linspace(0,3,5);
intervaloy=linspace(0,3,5);
[x,y]=meshgrid(intervalox,intervaloy);
for i=1:5
for j=1:5
u(i,j)= 5*exp(-x(i,j)+((7/3)*y(i,j)));
end
end
mesh(x,y,u);
Figura 35 Exemplo de gráfico 3d utilizando o comando mesh().
5. Que tal aumentarmos o número de pontos para 100 ao invés de 5 ?
Veja o resultado desta modificação !
70
Figura 36 Exemplo de gráfico 3d com 100 pontos
PRÁTICA !!!
Exercício 1. Utilize a metodologia descrita acima para plotar o gráfico das
seguintes funções.
a) u(x, t) = 5e
−4 π 2t
sen(2π x) para 0 ≤ x ≤ 1 e t ≥ 0
b) u(x, t) = sen(π x)cos(π t) para 0 ≤ x ≤ 1 e t ≥ 0
c)
u(x, t) = 1+ x − e−t para 0 ≤ x ≤ 1 e t ≥ 0
2t
2
−32 π t
sen(4π x) − 3e−128π sen(8π x) + 2e−200 π t sen(10π x)
d) u(x, y) = 5e
Exercício 2 A função a seguir representa a distribuição de temperatura em
uma placa de 1cm de espessura durante o tempo.
T (x, t) =
800
π2
10
∑
(−1)m
2
m=0 (2m +1)
sen[(2m +1)π x]e
−(2m+1)2 π 2α t
em que ;
71
T (x, t) é a temperatura na posição x da placa no tempo t.
α é a condutividade térmica da placa.
Construa um gráfico tridimensional com a distribuição de temperatura da
placa. Lembre-se a espessura é de 1cm portanto seu intervalo para x será
0 ≤ x ≤ 1 e 0 ≤ t ≤ 10
72
REFERÊNCIAS BIBLIOGRÁFICAS
ASCENCIO, A. F. G; CAMPOS, E. A. V. Fundamentos da Programação de
Computadores Algoritmos, Pascal, C/C++ e Java. 3ª edição, Pearson,
2012.
BOYCE,W. E.; DIPRIMA, R. C. Elementary Differential Equations and
Boundary Value Problems. Wiley, 10th Edition, 2012.
BROOKER, D.B.; BAKKER-ARKEMA, F.W.; HALL, C.W. Drying and storage
of oilseeds, The AVI Publishing Company, New York, 1992. 450p
COSTA, E. Da Cruz . Refrigeração. Editora Edgard Blucher, 3 edição, 2011.
DUCHON, C.; HALE, R. Time series analysis in meteorology and
climatology. An introduction. Wiley, 2012.
HOFFMAN, J. D; FRANKEL, S. Numerical Methods for Engineers and
Scientists. CRC Press; 2 edition, 2001.
HOLLOWAY, J. P.; HOLLOWAY, J. P. Introdução À Programação para
Engenharia - Resolvendo Problemas com Algoritmos. Editora Ltc, 2006.
KUO, B.C; GOLNARAGHI, F. Automatic Control Systems. Wiley; 8 edition
2002.
RAYMOND, KAPUNO JR. R. Programming for Chemical Engineers Using
C, C++, and MATLAB. Jones & Bartlett Learning, 2008.
73
Download

Prática - edusantos.eti.br