Documente Academic
Documente Profesional
Documente Cultură
UNIVERSITRIO
UNA
INSTITUTO POLITCNICO
rafael.amantea@prof.una.br
1
Sumrio
LINK
PARA
DOWNLOAD
DO
SOFTWARE
SCILAB
INTRODUO
O AMBIENTE SCILAB
JANELA DE COMANDO
SCINOTES
NAVEGADOR DE VARIVEIS
NAVEGADOR AJUDA
COMANDO DE SADA
COMANDOS DE ENTRADA
11
OPERADORES
11
1. ESTRUTURA SEQUENCIAL
17
19
23
2. ESTRUTURA CONDICIONAL
26
O COMANDO IF ELSE.
26
27
29
34
3. ESTRUTURAS DE REPETIO
37
37
44
48
4. VETORES E GRFICOS
51
53
INSERO DIRETA
53
53
53
SADA DIRETA
53
53
CONSTRUINDO GRFICOS
54
CONSTRUINDO GRFICOS 2D
54
56
EXERCCIOS - VETOR
64
66
5. MATRIZ
68
70
INSERO DIRETA
70
70
71
SADA DIRETA
71
71
77
84
89
Introduo
Existem vrias abordagens para se ensinar os fundamentos do SCILAB. Este
material tem como objetivo fazer uma introduo ao SCILAB do ponto de
vista de um usurio da linguagem C.
Como C/C++ e outras linguagens de programao, o SCILAB, possui
operadores: aritmticos, lgicos, condicionais, repetio e outros mais.
Este captulo vai introduzir a ferramenta SCILAB e explorar os seguintes
conceitos:
O
ambiente
SCILAB
Com o passar dos anos o SCILAB vm se popularizando no apenas pela
versatilidade, mas tambm pela sua interface, que permite um ambiente
amigvel e interativo em que algoritmos bsicos e avanados, envolvendo
clculos e simulaes podem ser facilmente executados.
O SCILAB apresenta vrias janelas que ajudam e permitem que todas as
atividades sejam realizadas pelo usurio. As janelas possuem funes
distintas e sero exemplificadas e explicadas nas sees a seguir.
Janela
de
comando
A janela de comando uma sub-janela em que o usurio pode digitar
comandos ou instrues a serem processadas no SCILAB. A janela de
comando vai mostrar o prompt --> , sinal que simboliza que o SCILAB est
pronto para receber instrues. Uma vez digitada a instruo e a tecla enter
for digitada, a instruo imediatamente executada.
SciNotes
A janela SciNotes (editor) disponibiliza um espao onde os arquivos .sci
podero ser criados e editados para a execuo. Arquivos .sci tambm
podem ser abertos ou re-editados e executados. Para ter acesso ao SciNotes
basta clicar na opo aplicativos da janela (principal) console SCILAB.
Navegador
de
variveis
a sub-janela onde so carregadas, consultadas e salvas as variveis.
Perceba na figura acima que todas as variveis que foram criadas, foram
listadas e classificadas quanto ao seu tipo, dimenso e visibilidade. Um duplo
clique em cada uma destas variveis, na janela navegador de variveis,
permitir que voc acesse o contedo da varivel selecionada.
Navegador
Ajuda
A janela ajuda permite acesso a todo o contedo de ajuda do SCILAB. Voc
pode fazer a busca por informao de ajuda por diretrios organizados por
pacotes de aplicao, ou fazer uma busca por nome de comando, funo ou
at mesmo aplicao desejada. Para acessar o contedo ajuda, basta clicar
no cone
comando. Desta maneira fica mais fcil para o usurio editar e modificar os
programas e identificar possveis erros na execuo. Este tipo de arquivo
texto contendo as instrues ao ( SCILAB ) chamado de arquivo .sce. O
arquivo ganha este nome devido a extenso
Especificador
Sada
%d
Inteiro
%f
Real
%e
Exponencial
%g
%c
Caractere
%s
String
10
Caracteres
Significado
\b
backspace
\n
Nova linha
\t
Tab
\\
Mostrar o caractere \
%%
Mostrar o caractere %
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 varivel indicada. Veja um
exemplo:
temperatura=input(Digite a temperatura de ajuste do forno: )
Aps digitado um valor pelo usurio, este valor ser atribudo varivel
temperatura.
Operadores
Aps atribuir valores por meio do comando input() , o prximo passo
ento processar os valores por meio das seguintes opes de operadores.
11
Smbolo
Significado
Adio
Subtrao
Multiplicao
Diviso
Potncia
Atribuio
()
Parnteses ( utilize-o
para impor regras)
Smbolo
Significado
>
Maior
>=
Maior ou igual
<
Menor
<=
Menor ou igual
==
Igualdade
~=
Diferena
12
Smbolo
Significado
&
Operador e
Operador ou
Negao
13
14
15
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 nmeros
clear;
clc;
Comentrios:
17
Resumo do captulo
Voc aprendeu diversos recursos importantes do SCILAB neste captulo,
incluindo a exibio de informaes na tela do console, entrada de dados
pelo teclado e realizao de clculos. Aps a leitura deste captulo voc
dever ser capaz de:
18
converso
Exerccio 6: Suponha que a altura h(t) de uma bola seja dada pela seguinte
funo;
gt 2
h(t) = v0 t
2
em que:
V0 a velocidade inicial da bola em metros por segundo (m/s);
t
para o
Suponha que uma bola de massa qualquer seja arremessada para cima
numa velocidade
v0
21
v(t) = v0 gt
gt 2
h(t) = v0 t
2
Onde
e t e ento informa as
I total =
!1 1 1$
V V V
+ + =V# + + &
R1 R2 R3
" R1 R2 R3 %
1
Rparalela
1 1 1
+ +
R1 R2 R3
22
Qmotor =
Pc.v
632
motor
kcal / dia
em que:
o nmero de horas de funcionamento por dia de equipamento;
motor o rendimento do motor eltrico de acionamento.
kcal / dia
23
em que ;
W a potencia da lmpada (W/m2)
o nmero de horas de funcionamento por dia de equipamento;
A a rea da cmara.
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 nmero de pessoas;
"q" o calor liberado por pessoa e por hora, o qual cresce com o
abaixamento de temperatura.
Prtica !
Voc deve ter percebido que as informaes necessrias para o clculo de
carga trmica devido a fatores diversos leva em considerao a quantidade
de pessoas, mquinas e lmpadas no interior da cmara. Que tal
construirmos um programa em SCILAB para realizar estes clculos? Para
isto leia com ateno o enunciado a seguir.
Elabore um programa para calcular a carga trmica de uma cmara frigorifica
com as seguintes caractersticas:
24
Uma empilhadeira ser utilizada 2 horas por dia. Ela possui um motor
com potncia de 10 c.v. e eficincia 0,85.
2. ESTRUTURA
CONDICIONAL
A estrutura condicional permite que o programa usufrua de um mecanismo de
seleo e um conjunto de instrues em um processo qualquer.
O
comando
if
else.
Na indstria de um modo geral, ambientes com temperatura e umidade
relativa controlados so necessrios para a manuteno da qualidade de
processos de fabricao e armazenamento.
Na indstria de refratrios especificamente, a manuteno da umidade
relativa em baixos teores faz-se necessria no processo de composio de
moldes, tendo em vista que altas umidades relativas no ambiente podem
ocasionar danos significativos no processo de produo (lembre-se do saleiro
na sua casa em semanas chuvosas). Portanto, a direo da fbrica solicitou
ao engenheiro responsvel que desenvolvesse uma lgica de controle de
umidade relativa no ambiente de composio de moldes da fbrica. Para que
os moldes atendessem aos padres de qualidade da fbrica era necessrio
que a umidade relativa ambiente fosse mantida abaixo de 40%. Caso
contrrio uma mensagem de alerta deveria ser exibida.
O engenheiro responsvel 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 padres de qualidade da
fbrica.
Veja o cdigo no exemplo 2.1 a seguir:
26
clear;
clc;
if (umidade<=0.4) then
6
7
10
end
11
Temperatura (oF)
Viscosidade (lb/ft/hr)
0 Temperatura < 50
242
82,1
30,5
12,6
Temperatura 200
5,7
13
else
14
15
end
Resumo do captulo
Neste captulo mostramos as estruturas de condio nica if e instruo de
condio composta if - else. Aps a leitura deste captulo voc dever
ser capaz de:
II)
III)
IV)
V)
(v4 = 1) OU (v3 = 4)
VI)
VII)
VIII)
30
x < 2
2 x + 2,
f (x ) = 3,
2 x < 3
x,
3 x
v0 .
Qual a velocidade
v(t) = v0 gt
gt 2
h(t) = v0 t
2
Onde
Planeta
Gravidade (m/s2)
Mercrio
3,7
Vnus
8,8
Terra
9,8
Marte
3,8
Jpter
26,4
Saturno
11,5
Urano
9,3
Netuno
12,2
Pluto
0,6
32
ENTRADA
A entrada composta por uma linha contendo quatro nmeros reais com
preciso de duas casas decimais A, G, Ra e Rg, representando
respectivamente o preo por litro do lcool, o preo 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 padro
(normalmente o teclado).
SADA
A sada deve ser composta por uma nica linha contendo o caractere A se
mais econmico abastecera frota com lcool ou o caractere G se mais
econmico ou indiferente abastecer a frota com gasolina.
A sada deve ser escrita no dispositivo de sada padro (normalmente a tela).
RESTRIES
0.01 A 10.00
0.01 G 10.00
0.01 Ra 20.00
0.01 Rg 20.00
34
Presso:
Energia:
Potncia:
HP
Prtica!
hora de desenvolver o seu prprio conversor de unidades. Voc dever
utilizar as informaes fornecidas no texto sobre converso de unidades. O
seu conversor dever ter um menu inicial com as seguintes opes
Temperatura
Fora
Presso
Energia
Potncia
Exemplo:
35
36
3. ESTRUTURAS
DE
REPETIO
3.1
O
comando
for
O comando for repete um conjunto de instrues a partir de um nmero
conhecido de repeties. Este comando segue o seguinte formato:
Exemplo
Em um exerccio do roteiro anterior analisamos a importncia 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 variao do tempo. Perceba que tanto a velocidade v(t) , quanto a altura
37
T (s)
v(t) - (m/s)
h(t) (m)
15
0.5
10,095
6,274
5,190
10,095
1.5
0,285
11,464
-4.620
10,380
clear;
clc;
g=9.81;
for t=0:0.1:2
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
38
39
Exemplo 2 : Somatrios
O uso de somatrios abrange diversas reas do conhecimento. Possui
aplicaes variadas em estatstica, cincia da computao, engenharias,
matemtica, fsica, qumica, etc.
Observe a tabela a seguir.
Tabela 9 Representao matemtica e em SCILAB para um somatrio
S = i
for i:1:n
i=0
s = s+i;
end
40
clear;
clc;
mprintf("Clculo da temperatura mdia no ms 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 mdia do ms de agosto-2013 em BH foi de
%2.2f (C) ",media);
42
b)
c)
d)
e)
44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear;
clc;
numero=input("Digite um nmero inteiro");
while numero>0
quadrado=numero^2;
mprintf("\n O Quadrado de %d = %2.2f",numero,quadrado);
cubo=numero^3;
mprintf("\n O cubo de %d
= %2.2f",numero,cubo);
raiz=sqrt(numero);
mprintf("\n A raiz quadrada de %d = %2.2f",numero,raiz);
if modulo(numero,2)==0 then
mprintf("\n O numero %d par ",numero);
else
mprintf("\n O nmero %d mpar ",numero);
end
mprintf("\n\n\n");
numero=input("Digite um nmero inteiro");
end
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 so parmetros que dependem do produto;
3
clear;
clc;
k=0.365;
n=0.663;
t=0;
teor_umidade=1;
mprintf("-------Simulao de secagem--------- \n\n");
mprintf("\n\t\t t(h)\t\t U(%%) ");
46
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
importante lembrar que o modelo proposto para a simulao da secagem neste material est em
uma forma extremamente simplificada. A simulao de secagem em modelos complexos pode envolver
programas com diversas variveis e funes, podendo levar at dias para se obter os resultados
simulados.
47
Exerccio 1
Faa um programa em SCILAB que faa a leitura de 5 valores e mostre os
valores digitados pelo usurio. Voc dever utilizar o comando while.
Exerccio 2
Desenvolva um programa em SCILAB que receba como entrada o valor de
potncia em Watt (W) e converta este valor para BTU/h. Mostre na tela o
resultado da converso e em seguida pergunte ao usurio se ele deseja
realizar uma nova converso. O usurio dever digitar 0 (zero) para terminar
o programa. Veja na figura a seguir um exemplo de sada para este
programa.
48
Exerccio 3
Escreva um programa que mostre todos os nmeros divisveis por um
nmero indicado pelo usurio dentro de um intervalo tambm indicado pelo
usurio. O usurio deve entrar com um valor correspondente ao divisor e em
seguida ele ir fornecer o valor inicial e final do intervalo. Veja a tela de sada
a seguir.
Exerccio 4
Devido ao uso frequente, a descarga da bateria de equipamentos eletrnicos
pode se comportar de acordo com a funo proposta a seguir;
y(t) = y0 2(
0,1)t
em que;
y0 a carga inicial da bateria;
y(t) a quantidade de carga aps t horas de uso.
49
Aviso
Bateria fraca !
1% carga 10%
Conecte ao carregador
Dica: Procure identificar qual lao de repetio utilizar. Existe algum critrio
de parada ?
Veja um exemplo de sada para o exemplo 1
50
4. VETORES
E
GRFICOS
Um vetor um tipo de varivel que pode armazenar um ou mais valores do
mesmo tipo de dado.
Vejamos como isto funciona na prtica. Imagine que voc precisa armazenar
os valores 15, 23, 40, 12, 37. At ento voc faria o seguinte raciocnio para
armazenar estes valores:
clear;
clc;
num1=15;
num2=23;
num3=40;
num4=12;
num5=37;
mprintf("\n Valor armazenado na varivel num1 = %i",num1);
mprintf("\n Valor armazenado na varivel num2 = %i",num2);
mprintf("\n Valor armazenado na varivel num3 = %i",num3);
mprintf("\n Valor armazenado na varivel num4 = %i",num4);
mprintf("\n Valor armazenado na varivel num5 = %i",num5);
Perceba que at ento no havia outra alternativa para voc armazenar estes
5 valores a no ser criando 5 variveis distintas para guardar o mesmo tipo
de valor. Perceba tambm que para mostrar os 5 valores na sada voc
precisaria de novas 5 linhas de comando para mostrar os 5 valores distintos
na sada do programa. Veja a sada aps a execuo do cdigo acima.
1 clear;
2 clc;
3 num=[15 23 40 12 37];
4 for i=1:5
5
6 end
Vamos comear pela linha 3 do cdigo acima. Na linha 3 os nossos 5 valores
foram guardados em uma nica varivel chamada num. Isto um vetor ! Veja
a ilustrao abaixo:
num
15
23
40
12
37
Insero
direta
num = [ 5 10 12 32 45 48 23 64 ... ];
53
Construindo
Grficos
Construindo
grficos
2D
A construo de um grfico 2D em SCILAB pode ser feita por meio da funo
plot( ) . O forma bsica para o comando ;
plot(x,y)
em que x um vetor que contm os valores para a coordenada-x do grfico e
y o vetor que contm os valores para a coordenada-y do grfico.
Exemplo: Plote o grfico da funo
Basta atribuir a y a
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);
Opo 2: A opo 2 apenas se difere da opo 1 quanto a criao do vetor x.
O vetor x foi criado a partir da funo linspace(valor 1, valor2 ,
clear;
clc;
x = linspace(-5,4,19);
y = 3*x^2 + 4*x + 1;
54
plot(x,y);
Opo 3. A opo 3 apresenta uma estrutura de criao dos vetores por
meio de laos de repetio. Os vetores x e y vo sendo criados na medida
em que as iteraes, ou repeties, vo acontecendo. Perceba que o
contador i a cada iterao utilizado para calcular um novo valor de x e um
novo valor de y para a posio 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 grfico a seguir
55
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("Grfico de f(x)= 3*x^2 + 4*x + 1");
xlabel("Eixo x");
ylabel("Eixo y");
57
58
59
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("Variao da velocidade durante 10 horas");
15 xlabel("Tempo (h)");
16 ylabel("Velocidade (m/s)");
17 plot(tempo,velocidade,'bo-');
18 scf(2);
19 title("Variao 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 so
inicializados na sua primeira posio (posio 1) com os valores de tempo inicial.
linhas 7 a 12 Nesta parte do cdigo feita a simulao da aquisio de dados a cada
tempo. Para isto foi utilizado o comando grand(1, distribuio normal, media, desvio
padro) , este comando gera nmeros aleatrios obedecendo uma distribuio normal,
uma mdia e um desvio padro pr definidos. Para cada tempo simulado valores de
temperatura e velocidade so gerados e armazenados em seus respectivos vetores. A
varivel i incrementada a cada iterao at que o critrio de parada (tempo<10) for
alcanado.
linhas 13 a 22. Nesta parte do cdigo so executados os comandos para a gerao dos
grficos (plot), ttulos das figuras (title) e ttulo das eixos (xlabel e ylabel). Os
comandos scf( ) do nome s janelas de grficos, identificando-os e permitindo criar
figuras distintas uma das outras.
linhas 23 a 28 Neste trecho foram calculadas as mdias atravs 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.
Sadas
62
63
Resumo do captulo 4
Neste captulo mostramos o uso de vetores. Aps a leitura deste captulo
voc dever ser capaz de:
Exerccios
-
Vetor
Exerccio 1 Determine se cada um dos seguintes verdadeiro ou falso. Se
falso justifique.
64
seguintes tarefas:
a) Exiba o valor do stimo elemento de um vetor.
b) Inicialize cada um dos cinco elementos de um vetor como 8.
c) Copie o vetor A de 11 elementos para as primeiras 11 posies de um
vetor B que contm 34 elementos.
Exerccio 3 Faa um programa em SCILAB que solicite ao usurio a
digitao de 10 nmeros distintos. Armazene estes valores em um vetor. A
sada do seu programa dever mostrar ao usurio o valor digitado e as
posies em que estes valores foram armazenados no vetor.
Exerccio 4
f)
$ t +1 0 t < 1
&
& 0 1 t < 2
f (t) = %
& 2t 2 t <3
&
0 t 3
'
(
&
&
)
&
&
*
65
66
67
5. MATRIZ
Uma matriz um tipo de varivel que pode armazenar um ou mais valores do
mesmo tipo de dado, porm este armazenamento pode estar associado a
duas propriedades distintas. Esta associao para muitos chamada de
dimenso. Em vetores, associvamos o armazenamento de informao a
apenas uma propriedade, uma dimenso. 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 dimenses.
Veja um exemplo: (Exemplo 5.1)
Um engenheiro resolveu montar um sistema de aquisio de dados para
coletar os dados de presso do gs refrigerante e temperatura do gs
refrigerante em um sistema de refrigerao. Para isto o engenheiro instalou
em diferentes pontos do sistema trs sensores de presso e temperatura. O
engenheiro desenvolveu um programa em SCILAB que durante cinco horas
coletava as informaes dos sensores e armazenava as informaes a cada
hora. Veja o cdigo 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);
68
Tempo (h)
Sensor de
Sensor de
Sensor de
Temperatura (1)
Temperatura (2)
Temperatura (3)
1hora
2horas
3horas
4horas
5horas
69
Insero
direta
Inicializando de maneira direta uma matriz 3 x 3.
70
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) Adio ");
26 mprintf("\n 2) Subtrao ");
27 mprintf("\n\n");
28
29 operacao=input("Escolha a operao: ");
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
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 invlida");
49 end
Resumo do captulo 5
Neste captulo mostramos o uso de matrizes. Aps a leitura deste captulo
voc dever ser capaz de:
Exerccios Matriz
Exerccio 1 Determine se cada um dos seguintes verdadeiro ou falso. Se
falso justifique.
a) Para referir-se a uma localizao particular ou elemento dentro de uma
matriz, especificamos o nome do vetor e o valor do elemento
particular.
b) Um algoritmo que inicializa os elementos de uma matriz de dimenses
3x3 como zero deve conter pelo menos uma instruo for.
c) Um algoritmo que soma os elementos de uma matriz deve conter
instrues for aninhadas.
Exerccio 2 Considere uma matriz de dimenses 2 x 3;
a) Escreva uma instruo para criar esta matriz 2 x 3.
b) Quantas linhas possui esta matriz ?
c) Quantas colunas possui esta matriz ?
d) Quantos elementos possui esta matriz ?
e) Escreva todos os elementos da segunda linha desta matriz.
f) Escreva todos os elementos da terceira coluna desta matriz.
g) Escreva uma nica instruo que configura o elemento desta matriz na
linha 1 e coluna 2 como zero.
h) Escreva uma instruo for aninhada que inicializa cada elemento da
matriz como 0.
i) Escreva uma instruo for aninhada que insere os valores da matriz
a partir do usurio.
74
C com
Exerccio 5 Para que duas ou mais matrizes sejam consideradas iguais elas
devem obedecer a algumas regras:
Gerir todo este trfego areo no nada fcil. A misso dos controladores de
trfego areo precisamente garantir um fluxo de avies seguro. So eles
que, a partir da torre de controle, fornecem indicaes e autorizaes de vo,
de acordo com as caractersticas da aeronave e do contexto do momento.
Podem pedir aos pilotos para alterar fatores como a rota, a altitude ou a
velocidade. Programas de computador muito elaborados auxiliam os
controladores e garantem a eficcia do sistema.
Uma empresa que faz software de controle areo te contratou. Um dos
muitos sistemas instalados avisa do perigo de coliso entre dois avies. Se
dois avies estiverem prximos, um alarme dispara imediatamente.
Basicamente, a empresa quer que voc programe uma maneira eficiente de
detectar isto, descobrindo no meio de todo o trfego areo quais so os dois
avies mais prximos um do outro. Como simplificao, as posies dos
avies so dadas como em coordenadas (X,Y), em relao a uma
determinada origem. A altitude, direo e velocidade do avio podem ser
ignoradas. Se dois avies tiverem posies (X1,Y1) e (X2,Y2), a distncia entre
2
2
eles dada pela frmula ( X1 X2 ) + (Y1 Y2 ) .
O trecho de cdigo a seguir gera uma matriz com as coordenadas (x,y) para
a posio de 4 avies no espao areo.
for i=1:4
for j=1:2
coordenadas(i,j)=rand()*10;
end
mprintf("\n Coordenadas do avio %d ( %2.2f , %2.2f )",i,coordenadas(i,1),coordenadas(i,2));
end
A matriz foi organizada de modo que a linhas se referem ao avio e as
colunas se referem s suas coordenadas x e y.
Escreva um programa em SCILAB que dadas as localizaes (X,Y) de um
conjunto de avies, calcula qual o par de avies que est mais perto um do
outro. Utilize o trecho de cdigo disponibilizado acima para gerar a matriz que
contm as coordenadas dos quatro avies. Veja a seguir uma sugesto para
a tela de sada.
76
7
x+ y
3
u(x, y) = 5e
. Para plotarmos o
grfico desta funo 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 funo que
queremos plotar o grfico 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 espaados entre 0 x 3 e 0 y 3 , portanto os pontos que
queremos calcular o valor da funo so:
77
0,75
0,75
1,5
1,5
2,25
2,25
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)
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
78
7
x+ y
3
u(x, y) = 5e
79
7
x+ y
3
u(x, y) = 5e
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 grfico
para a funo 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);
80
PRTICA !!!
Exerccio 1. Utilize a metodologia descrita acima para plotar o grfico das
seguintes funes.
81
a) u(x, t) = 5e
4 2t
sen(2 x) para 0 x 1 e t 0
u(x, t) = 1+ x et para 0 x 1 e t 0
2t
32 t
sen(4 x) 3e128 sen(8 x) + 2e200 t sen(10 x)
d) u(x, y) = 5e
T (x, t) =
800
10
(1)m
(2m+1)2 2 t
sen[(2m
+1)
x]e
2
em que ;
82
REFERNCIAS BIBLIOGRFICAS
ASCENCIO, A. F. G; CAMPOS, E. A. V. Fundamentos da Programao de
Computadores Algoritmos, Pascal, C/C++ e Java. 3 edio, 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 . Refrigerao. Editora Edgard Blucher, 3 edio, 2011.
DEITEL, H. M.; DEITEL, P. J. JAVA Como programar 6a edio. Pearson,
2005.
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. Introduo Programao 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.
83
84
Mas o que aconteceu !? Esto todos os valores zerados ? Vamos ver o por
que disso ?
Os nmeros gerados aleatoriamente pela funo rand( ) esto no intervalo
entre 0 e 1. Portanto quando utilizamos a funo int( ) ficamos apenas
85
com a parte inteira do nmero gerado que era zero ! Veja um exemplo; se o
numero gerado para a varivel x foi x=0.867 e em seguida aplicamos a
funo int(x), consequentemente o resultado ser 0.
Veja ento como faramos para gerar 5 nmeros inteiros aleatrios entre 0 e
100.
mprintf("\n Gerando 5 nmeros inteiros aleatrios com a funo rand() \n");
for i=1:5
mprintf("\n\n %f ",int(100*rand()));
end
Observe que a nica modificao feita foi multiplicar os nmeros gerados
aleatoriamente por 100. Veja a sada a seguir;
2. A funo grand( )
Existem situaes em que necessitamos de gerar valores aleatrios,
entretanto estes valores devem respeitar uma faixa de valores desejados.
Imagine que voc criou toda a lgica de funcionamento de um radar que foi
instalado na avenida Cristiano Machado. A lgica simples, porm voc
precisa testar se a lgica do seu radar est funcionando. Em outras palavras
voc precisa verificar se os carros que passam com velocidades maiores que
60 km/h so registrados. Para testar a sua lgica voc vai precisar de simular
a velocidade dos carros que passam onde foi instalado o seu radar. Sabemos
que a velocidade mdia dos carros na avenida de 60 km/h, mas pode
acontecer que automveis trafeguem acima ou abaixo desta velocidade.
Surge ento o seguinte questionamento, como vou simular estes veculos
? Como vou garantir que os valores simulados estejam nesta faixa para
tornar o meu teste o mais prximo possvel da realidade ?
Resposta:
Utilizaremos ento a funo grand( ), como um gerador de nmeros
aleatrios.
Para garantir que os valores estejam na faixa usual de trfego na avenida, a
funo grand( ) nos permite escolher o valor mdio dos nmeros gerados e
seu desvio padro, todos estes obedecendo a uma distribuio de
probabilidade. Enfim a gerao dos nmeros aleatrios ser feita a partir da
seguinte configurao grand(5,1,nor,60,5). Tal configurao pode
ser interpretada como a funo grand vai gerar uma matriz de 5 linhas e uma
coluna (vetor de 5 posies) com valores aleatrios, obedecendo a
distribuio normal, de mdia 60 e desvio padro 5.
Veja a seguir o cdigo e a tela de sada a ps a sua execuo.
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, no mais um vetor.
Todas as configuraes feitas para o comando rand( ) so vlidas para o
comando grand( )
88
90
91
92