Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila SCILAB Final - 2 PDF
Apostila SCILAB Final - 2 PDF
1
ALGORITMOS E LÓGICA DE PROGRAMAÇÃO
PRÁTICAS DE LABORATÓRIO
2014/2
1
Rafael Pinheiro Amantéa – Núcleo de Algoritmos e Lógica de Programação.
rafael.amantea@prof.una.br
1
Sumário
LINK
PARA
DOWNLOAD
DO
SOFTWARE
SCILAB
4
INTRODUÇÃO 4
O AMBIENTE SCILAB 4
1. ESTRUTURA SEQUENCIAL 17
2. ESTRUTURA CONDICIONAL 26
2
4.
VETORES
E
GRÁFICOS
51
CONSTRUINDO GRÁFICOS 54
5. MATRIZ 68
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.
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.
4
Figura 1 Janela console 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.
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.
6
Figura 4 Janela do editor SciNotes
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.
7
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
Sequência de chamada
9
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:
Especificador Saída
%d Inteiro
%f Real
%e Exponencial
%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 %
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)
Símbolo Significado
> Maior
< Menor
== Igualdade
~= Diferença
12
Tabela 5 Operadores lógicos
Símbolo Significado
& Operador e
| Operador ou
~ Negação
13
Figura 7 Pacotes de funções específicas do menu ajuda.
14
Figura 8 Conjunto de funções elementares do menu ajuda.
15
Figura 9 Tela de ajuda para a função seno.
y = sin(x);
y = sqrt(x);
16
1. ESTRUTURA
SEQUENCIAL
Chegou a hora de tentarmos apresentar alguns exemplos e desenvolver
pequenos programas aplicando o que vimos anteriormente.
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);
17
Resumo do capítulo
18
Exercícios
–
estrutura
sequencial:
gt 2
h(t) = v0 t −
2
em que:
20
Escreva um programa que calculará a altura de uma bola em um
determinado tempo t. Esteja certo de usar nomes adequados para variáveis e
para todos os símbolos da fórmula.
O que deverá ser feito como processamento? ( O que este programa deve
fazer?)
Suponha que uma bola de massa qualquer seja arremessada para cima
21
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.
corrente total passando pelos três resistores é justamente a soma das três
correntes e a queda da tensão é a mesma para todos os três, assim:
V V V !1 1 1$
I total = + + =V# + + &
R1 R2 R3 " R1 R2 R3 %
1 1 1 1
= + +
Rparalela R1 R2 R3
22
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.
Pc.v
Qmotor = 632τ kcal / dia
ηmotor
em que:
23
em que ;
As pessoas por sua vez liberam pelo seu metabolismo, uma quantidade de
calor que nos é dada por:
em que:
"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.
24
• Uma empilhadeira será utilizada 2 horas por dia. Ela possui um motor
com potência de 10 c.v. e eficiência 0,85.
2
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.
25
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.
26
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 mprintf("\n Umidade relativa dentro dos padrões");
7 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.
28
13 else
14 mprintf("\n Valor inválido !!! ");
15 end
Resumo do capítulo
29
a) Solicite que o usuário digite um número.
b) Inserir um inteiro e atribuir o valor à variável valor.
c) Escreva a mensagem “O número digitado é maior ou igual
a zero” Se a variável valor for maior ou igual a zero.
V) (v4 = 1) OU (v3 = 4)
30
Exercício 4: 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).
⎧ 2 x + 2, x < −2 ⎫
⎪ ⎪
f (x ) = ⎨3, − 2 ≤ x < 3⎬
⎪ − x, 3 ≤ x ⎪⎭
⎩
31
Suponha que uma bola de massa qualquer seja arremessada para cima
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.
Mercúrio 3,7
Vênus 8,8
Terra 9,8
Marte 3,8
Júpter 26,4
Saturno 11,5
Urano 9,3
32
Netuno 12,2
Plutão 0,6
TAREFA
ENTRADA
A entrada é composta por uma linha contendo quatro números reais com
precisão de duas casas decimais A, G, Ra e Rg, representando
respectivamente o preço por litro do álcool, o preço por litro da gasolina, o
rendimento (km/l) do carro utilizando álcool e o rendimento (km/l) do carro
utilizando gasolina. A entrada deve ser lida do dispositivo de entrada padrão
(normalmente o teclado).
SAÍDA
A saída deve ser composta por uma única linha contendo o caractere ‘A’ se é
mais econômico abastecera frota com álcool ou o caractere ‘G’ se é mais
econômico ou indiferente abastecer a frota com gasolina.
RESTRIÇÕES
0.01 ≤ A ≤ 10.00
0.01 ≤ G ≤ 10.00
0.01 ≤ Ra ≤ 20.00
0.01 ≤ Rg ≤ 20.00
34
Algumas relações de conversão de unidades:
Força: 1 N = 0,102 kgf= 0,2249 lbf
1 N = 1 kg m / s2
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
Exemplo:
35
• Após ter selecionado temperatura ele deverá escolher em qual
unidade de temperatura será feita a entrada; Celsius, Kelvin ou
Fahrenheit.
36
3. ESTRUTURAS
DE
REPETIÇÃO
Bloco de comandos
end
Exemplo
v(t) = v0 − gt
h(t) = v0 t − gt 2 / 2
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:
37
Tabela 8 Exemplo de cálculo manual.
0 15 0
1 5,190 10,095
2 -4.620 10,380
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) v(t) (m/s)")
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 %2.2f %2.2f ",t,altura,velocidade);
11 mprintf("\n");
12 end
38
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.
39
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
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
n
S = ∑i for i:1:n
i=0 s = s+i;
end
40
T (t) = 19, 06 + 0, 211cos ( 0, 08721⋅ t ) +[−5.51sen(0, 08721⋅ t)]
em que:
T = Temperatura ambiente ( oC );
t = tempo em horas.
1 clear;
2 clc;
3 mprintf("Cálculo da temperatura média no mês de agosto - 2013 \n\n");
4 soma = 0;
5 for t=0:720
6 temperatura = 19.06 + (0.211*cos(0.08721*t)) + (-5.51*sin(0.08721*t))
7 soma = soma + temperatura;
8 end
9 media = soma/720;
10 mprintf("\n A temperatura média do mês de agosto-2013 em BH foi de
%2.2f (C) ",media);
42
Figura 18 Exemplo de entrada e saída de dados utilizando estrutura de repetição
em que:
T = Temperatura ambiente ( oC );
t = tempo em horas.
while (condição)
Bloco de comandos
end
Exemplo
a) o valor lido;
e) se é par ou ímpar.
44
1 clear;
2 clc;
3 numero=input("Digite um número inteiro");
4 while numero>0
5 quadrado=numero^2;
6 mprintf("\n O Quadrado de %d é = %2.2f",numero,quadrado);
7 cubo=numero^3;
8 mprintf("\n O cubo de %d é = %2.2f",numero,cubo);
9 raiz=sqrt(numero);
10 mprintf("\n A raiz quadrada de %d é = %2.2f",numero,raiz);
11 if modulo(numero,2)==0 then
12 mprintf("\n O numero %d é par ",numero);
13 else
14 mprintf("\n O número %d é ímpar ",numero);
15 end
16 mprintf("\n\n\n");
17 numero=input("Digite um número inteiro");
18 end
Linhas 17 Uma nova leitura para a variável numero deve ser feita. Nesta
linha é que o programa possibilita ao usuário escolher um novo número para
uma nova sequência de processamento ou escolher um valor para terminar
laço de repetição.
45
Veja um exemplo de aplicação.
−kt n
U(t) = e
em que :
1 clear;
2 clc;
3 k=0.365;
4 n=0.663;
5 t=0;
6 teor_umidade=1;
7 mprintf("-------Simulação de secagem--------- \n\n");
8 mprintf("\n\t\t t(h)\t\t U(%%) ");
3
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.
46
9 while(teor_umidade>=0.13)
10 teor_umidade= exp(-k*(t^n));
11 mprintf("\n\t\t %2.3f\t\t %2.2f ",t,teor_umidade*100);
12 t=t+1;
13 end
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.
4
Figura 19 Tela de saída para simulação de secagem.
4
É 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.
47
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 ???
Exercício 1
48
Figura 20 Saída para conversão de potência
Exercício 3
Exercício 4
y(t) = y0 ⋅ 2(
−0,1)t
em que;
49
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%.
Dica: Procure identificar qual laço de repetição utilizar. Existe algum critério
de parada ?
50
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;
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.
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
num = 15 23 40 12 37
1 2 3 4 5
52
Figura 24 Exemplo de saída de valores de um vetor
Inserção
direta
num = [ 5 10 12 32 45 48 23 64 ... ];
Saída
direta
disp(num);
53
Construindo
Gráficos
plot(x,y)
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);
clear;
clc;
x = linspace(-5,4,19);
y = 3*x^2 + 4*x + 1;
54
plot(x,y);
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);
55
Figura 25 Janela de saída gráfica.
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;
56
end
plot(x,y);
title("Gráfico de f(x)= 3*x^2 + 4*x + 1");
xlabel("Eixo x");
ylabel("Eixo y");
57
Figura 27 Opções de configuração de gráfico
58
Dica: para plotar um gráfico com várias curvas, siga o exemplo 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");
59
Figura 29 Exemplo de gráfico com múltiplos comportamentos.
60
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:
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-');
61
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);
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 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.
Saídas
62
Figura 31 Tela de saída em SCILAB para exemplo1 vetor.
63
Figura 33 Variação da temperatura de secagem na câmara de secagem
Resumo do capítulo 4
64
a) Para referir-se a uma localização particular ou elemento dentro de um
vetor, especificamos o nome do vetor e o valor do elemento particular.
b) Um algoritmo que inicializa os elementos de um vetor de 15 elementos
como zero deve conter pelo menos uma instrução for.
a) seno(x); -π ≤ x ≤ π;
b) cosseno(x); -π ≤ x ≤ π;
c) ln(x); 0,001 ≤ x ≤ 10
d) ex; 0 ≤ x ≤ 10
$ t +1 0 ≤ t < 1 (
& &
& 0 1≤ t < 2 &
f) f (t) = % )
& 2−t 2 ≤ t <3 &
& 0 t ≥3 &
' *
65
Exercício 5 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.
66
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.
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.
67
5. MATRIZ
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.
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);
68
Veja a disposição dos valores como ficaria em formato de matriz.
1hora
2horas
3horas
4horas
5horas
69
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.
Inserção
direta
Inicializando de maneira direta uma matriz 3 x 3.
Observe que o “;” foi utilizado para distinguir uma linha de outra da
matriz.
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
Saída
direta
disp(matriz);
70
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
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
13 mprintf("Para a matriz B.");
14 for linha = 1:dimensao
15 for coluna = 1:dimensao
16 mprintf ("Elemento da matriz B posição B(%i,%i): ",linha,coluna);
17 B(linha,coluna) = input (" ");
18 end
19 end
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\n");
28
29 operacao=input("Escolha a operação: ");
30
31 if operacao==1 then
32 for i=1:dimensao
33 for j=1:dimensao
34 C(i,j)=A(i,j)+B(i,j);
35 end
71
36 end
37 mprintf("\n Matriz C ");
38 disp(C);
39 elseif operacao==2 then
40 for i=1:dimensao
41 for j=1:dimensao
42 C(i,j)=A(i,j)-B(i,j);
43 end
44 end
45 mprintf("\n Matriz C ");
46 disp(C);
47 else
48 mprintf("\n Escolha inválida");
49 end
72
Figura 36 Saída exemplo 1 matriz.
Resumo do capítulo 5
Exercícios – Matriz
74
o
incrementos de 50 C. Faça as conversões de Celsius para Kelvin e
Fahrenheit. Veja um modelo de saída esperada.
Exercício 5 Para que duas ou mais matrizes sejam consideradas iguais elas
devem obedecer a algumas regras:
O trecho de código a seguir gera uma matriz com as coordenadas (x,y) para
a posição de 4 aviões no espaço aéreo.
for i=1:4
for j=1:2
coordenadas(i,j)=rand()*10;
end
mprintf("\n Coordenadas do avião %d ( %2.2f , %2.2f )",i,coordenadas(i,1),coordenadas(i,2));
end
76
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.
7
−x+ y
Vamos tomar como exemplo a função u(x, y) = 5e 3 . 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:
77
x y
0 0
0,75 0,75
1,5 1,5
2,25 2,25
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, 0.75) u(0.75, 0.75) u(1.5, 0.75) u(2.25, 0.75) u(3, 0.75)
78
7
−x+ y
Utilizando o SCILAB para gerar o gráfico da função u(x, y) = 5e 3
intervalox=linspace(0,3,5);
intervaloy=linspace(0,3,5);
[x,y]=meshgrid(intervalox,intervaloy);
79
3. A partir das coordenadas geradas x e y podemos então calcular o
7
−x+ y
valor da função u(x, y) = 5e 3 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
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);
80
Figura 38 Exemplo de gráfico 3d utilizando o comando mesh().
PRÁTICA !!!
81
−4 π 2t
a) u(x, t) = 5e sen(2π x) para 0 ≤ x ≤ 1 e t ≥ 0
−32 π t 2t 2
d) u(x, y) = 5e sen(4π x) − 3e−128π sen(8π x) + 2e−200 π t sen(10π x)
10
800 (−1)m −(2m+1)2 π 2α t
T (x, t) = ∑ sen[(2m +1)π x]e
π2 m=0 (2m +1)
2
em que ;
82
REFERÊNCIAS BIBLIOGRÁFICAS
83
APENDICE
1
–
GERAÇÃO
DE
NÚMEROS
ALEATÓRIOS
Em diversas áreas do conhecimento o uso de números aleatórios em
algoritmos é uma prática trivial. Especificamente no aprendizado de
algoritmos a utilização de números aleatórios pode nos ajudar a simular
cenários diversificados e situações inesperadas. A partir de tais situações
podemos criar e avaliar lógicas de programação independente de valores
digitados pelo programador e ou usuário, que muitas vezes podem escolher
valores tendenciosos à lógica implementada.
1. A função rand( )
84
Algumas observações devem ser feitas quanto ao uso do comando rand( ).
Perceba que os cinco números gerados estão entre 0 e 1. Esta é a primeira
característica do comando. Ao gerar os valores o computador sempre vai
trabalhar na faixa de valores entre 0 e 1. Outra característica que devemos
observar é que o SCILAB como já dito anteriormente trabalha com as
variáveis numéricas apenas em formato real, portanto todos os valores
gerados pela função rand( )estarão no formato real.
clear;
clc;
mprintf("\n Gerando 5 números aleatórios inteiros com a função rand() \n");
for i=1:5
mprintf("\n\n %f ",int(rand()));
end
Mas o que aconteceu !? Estão todos os valores zerados ? Vamos ver o por
que disso ?
85
com a parte inteira do número gerado que era zero ! Veja um exemplo; se o
numero gerado para a variável x foi x=0.867 e em seguida aplicamos a
função int(x), consequentemente o resultado será 0.
Veja então como faríamos para gerar 5 números inteiros aleatórios entre 0 e
100.
vetor=rand(7,1);
86
com 7 posições. Experimente gerar uma matriz de valores aleatórios com 3
linhas e 5 colunas !.
2. A função grand( )
Imagine que você criou toda a lógica de funcionamento de um radar que foi
instalado na avenida Cristiano Machado. A lógica é simples, porém você
precisa testar se a lógica do seu radar está funcionando. Em outras palavras
você precisa verificar se os carros que passam com velocidades maiores que
60 km/h são registrados. Para testar a sua lógica você vai precisar de simular
a velocidade dos carros que passam onde foi instalado o seu radar. Sabemos
que a velocidade média dos carros na avenida é de 60 km/h, mas pode
acontecer que automóveis trafeguem acima ou abaixo desta velocidade.
Surge então o seguinte questionamento, como vou simular estes veículos
? Como vou garantir que os valores simulados estejam nesta faixa para
tornar o meu teste o mais próximo possível da realidade ?
Resposta:
87
clear;
clc;
carros=grand(5,1,"nor",60,10);
for i=1:5
mprintf("\n Velocidade do carro %d = %f (km/h)",i,carros(i));
if carros(i)>60 then
mprintf(" Multado !!!");
end
end
Lembre-se que para gerar apenas um valor basta alterar o comando para
grand(1,1,”nor”,60,5), gerando apenas um valor, não mais um vetor.
88
APENDICE
2
–
LISTA
DE
COMANDOS
ÚTEIS
EM
SCILAB
A seguir apresenta-se uma lista com alguns comandos usuais em
programação e engenharia. Maiores detalhes sobre a utilização destes
podem ser facilmente encontrados na seção “Ajuda” do SCILAB.
Esta lista não tem intenção de substituir o menu “Ajuda” do SCILAB. O menu “Ajuda”
deve ser a sua principal fonte de busca durante suas implementações.
acos( ) – Arco-cosseno.
asin( ) – Arco-seno.
atan( ) – Arco-tangente.
cos( ) – Cosseno.
cotg( ) – Cotangente.
89
disp( ) – Exibição de variáveis ou texto.
90
primes( ) – Retorna todos os números primos de 1 ao valor atribuído à
função.
sec( ) – Secante.
tan( ) – Tangente.
91
92