Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila
Métodos Computacionais Aplicados À
Engenharia De Materiais
(IT732)
Versão: 1.6
Sumário
Capítulo 1
• GNU Octave
• Varáveis
• Classes de variáveis no Octave
• Constantes
• Arquivos de Programa ou Script files
• Exercícios
Capítulo 2
• Vetores
• Exercícios
Capítulo 3
• Gráficos
• Exercícios
• Estudo de Caso
• Linearização de Gráficos
Capítulo 4
• Função inline
• Raízes de Funções
• Exercícios
Capítulo 5
• Matrizes
• Solução de Equações Lineares
• Exercícios
• Estudo de caso:
• imagem no Octave
Capítulo 6
• Importando/exportando dados
• load/save
• dlmread/dlmwrite
• fscanf/fprint
• Estudo de caso
• Análise de Difração de Raios X (DRX)
• Criptografia
2
Capítulo 7
• Estatística
• Números aleatórios: rand
• Exercícios
• Estudo de caso:
• Erro e Reprodutibilidade na medição
Capítulo 8
• Programação
• Exercícios
• Estudo de Caso
• economia
Capítulo 9
• Regressão Linear
• Exercícios
Capítulo 10
• Linearização de Equações NãoLineares
• Exercícios
3
Capítulo 1
GNU Octave
Varáveis
Classes de variáveis no Octave
Constantes
Arquivos de Programa ou Script files
Exercícios
4
GNU Octave
link direto para instalação no Windows (the latest stable version is GNU Octave 4.2.1):
• Windows-64 (recommended)
o octave-4.4.1-w64-installer.exe (~ 238 MB)
https://ftp.gnu.org/gnu/octave/windows/octave-4.4.1-w64-installer.exe
o octave-4.4.1-w64.zip (~ 481 MB)
https://ftp.gnu.org/gnu/octave/windows/octave-4.4.1-w64.zip
• Windows-32 (old computers)
o octave-4.4.1-w32-installer.exe (~ 238 MB)
https://ftp.gnu.org/gnu/octave/windows/octave-4.4.1-w32-installer.exe
o octave-4.4.1-w32.zip (~ 481 MB)
https://ftp.gnu.org/gnu/octave/windows/octave-4.4.1-w32.zip
All Windows binaries with corresponding source code can be downloaded from
https://ftp.gnu.org/gnu/octave/windows/.
Fonte: https://pt.wikipedia.org/wiki/GNU_Octave
5
Janelas
Quando instalamos o GNU Octave no ambiente Windows, dois links aparecem
Octave (CLI) e Octave (GUI).
CLI:( command-line interface) interface em modo texto, que aparece
inicialmente somente a janela de comandos, em que se digita os
comandos;
GUI: (Graphical User Interface ) interface gráfica, no caso do Octave
podemos usar o mouse e várias janelas integradas num mesmo ambiente.
A figura 1 mostra o modo Octave (GUI). Podemos observar várias janelas, que
são detalhadas na tabela 1.
Diretório de Trabalho
A janela Diretório Atual mostra a pasta atual de trabalhos. Clique no ícone no
formato de uma pasta para trocar o diretório, conforme mostrado na figura 2 e
figura 3.
Evite nomes de diretórios (ou pastas) com acentos ou caracteres especiais,
excesso de diretórios dentro de outros e nomes grandes.
Figura 2
7
Figura 3
Janela de Comandos
“>>” é chamado de prompt e está aguardando comandos, conforme mostrado na
figura 4.
Figura 4
8
>> 7+12/3
ans = 11
>> (7+12)/3
ans = 6.3333
>>
Na exponenciação é usado o ^,
Exemplos:
>> 2^3
ans = 8
>>
O sqrt (x) é uma função que calcula a raiz quadrada de um número. O octave
tem uma biblioteca de funções residentes. A função tem um nome e um
argumento escrito entre parênteses.
>> 64^(1/3)
ans = 4.0000
>>
>> 64^(1/2)
ans = 8
>>
>> 64^0.5
ans = 8
>>
>> sqrt(64)
ans = 8
>>
Notação científica
Para usar a notação científica, basta usar e ou E para indicar o expoente de 10.
Exemplo: −1,5 × 102 no Octave podemos escrever -1.5e2.
>> -1.5e2
ans = -150
>>
>> 2.75e-3
ans =
0.0027500
>>
Cuidado!
5e3 é diferente de 5*e^3 (neste caso, e = 2,7...)
>> 5e3
ans = 5000
>>
>> 5*e^3
ans = 100.43
>>
Preenchimento automático
Após digitar parte do nome de um comando ou função, ao teclar TAB, o restante
do nome é preenchido. Caso exista mais de uma opção, uma lista será
apresentada.
Formatos de Exibição
ou sem formatação
format none
format bank 3.14
2 digitos
format rat 355/113
aproximação racional
format hex 400921fb54442d18
hexadecimal com ponto flutuante
Variáveis Numéricas
Os valores podem ser guardados em variáveis, que são identificadas por nomes.
Estes nomes podem ser uma letra ou combinação de várias letras e números.
As regras para os nomes são:
• os nomes das variáveis devem começar com uma letra, que podem pode
ser seguida por outra letra ou número ou “_” (sublinhado ou anderscore),
• os nomes não podem ter caracteres especiais (%, -, #, @, ...),
• diferencia de maiúsculas e minúsculas,
• até 31 caracteres.
>> lado = 4
lado = 4
>>
area_retangulo = 16
>>
Variáveis String
Strings são cadeias de caracteres, um outro tipo de dado do Octave.
Internamente são vetores de caracteres que possuem representação na tabela
ASCCII. Cada caracter usa 2 bytes (diferentemente dos 8 bytes usados para
representar o tipo double).
Para criar uma string delimitamos a sequência de caracteres por apóstrofos:
Carro 1=
Camaro
>>length (carro1)
ans = 6
Concatenar Strings
Para juntar strings, usamos [ ]
carro 1=
Camaro
>>cor1= ’amarelo’
cor1=
amarelo
ans=
camaroamarelo
15
Outro exemplo:
ans=
Camaroamarelo
Obs.: os números na forma de texto não são números, mas podemos usar a
função stg2num(x) para transformar uma string em número; e num2str(x) para
transformar numero em string.
Variáveis ativas
As variáveis criadas são apresentadas na janela de Ambiente de Trabalho. Para
obter uma lista na janela de comando, podemos usar o comando who ou whos.
>> who
>>
A variável ans é uma variável nativa do octave, que contém o valor da última
expressão que foi calculada.
Quando encerramos o Octave, todas as variáveis são apagadas. Também
podemos apagar uma variável especifica usando o comando
“clear + nome_da_variável”, ou apagar todas “clear all” ou “clear”.
>> who
ans area_retangulo
>>
16
Constantes
Figura 5
18
Figura 6
Exemplo:
Vamos fazer um programa ou script em Octave para calcular a massa de água
de um tanque cilíndrico.
A partir do menu principal do Editor, selecione Arquivo > Novo Script. Com isso,
uma nova página vazia será aberta, onde digitaremos os comandos.
Pode-se observar que os comandos não são executados após cada enter (nova
linha). Na verdade, todos eles (comandos) serão executados sequencialmente
mais tarde.
19
Salve o arquivo (menu > arquivo > salvar como...) com nome massa_de_agua.m
Clique na engrenagem com triângulo dentro.
Vá para janela de comando. Se tudo der certo, vai aparecer
>> massa_de_agua
raio = 0.30000
altura = 1.5000
ro = 1000
volume = 0.42412
massa = 424.12
>>
Palavras Reservadas
São palavras reservadas para uso específico e não podem ser usadas para
nomes de variáveis e nomes de arquivos m.
Exemplo:
For, end, while, function, return, try, if, elseif, case, continue, switch, catch, global,
presistent, break, otherwise e outras.
21
Exercícios
22
23
24
25
26
Capítulo 2
Vetores
Exercícios
27
Vetores
Podemos guardar vários números diferentes ao mesmo tempo numa única
variável. Os números são diretamente digitados no interior de colchetes: [ ]
Nome_da_variável = [número1 número2 numero3 ... ]
Os números podem ser separados por espaço ou vírgula, e nesse caso
chamamos de vetor linha.
Tamanho do vetor
Para determinar o tamanho vetor, use o comando length(x)
28
Outros exemplos:
Transpor um vetor
Podemos definir um vetor coluna em vetor linha e vice-versa, usando ‘ ou a
função transpose(x).
30
Os tamanhos dos vetores têm que ser iguais, quando se faz uma soma ou
subtração entre eles. Neste caso, o tamanho do vetor EE é diferente do tamanho
do vetor FF.
32
Exponenciação
Na exponenciação de vetores, deve-se usar um ponto (.) antes do operador ^,
ou seja, .^.
Exemplo:
Exemplo 1:
Exemplo 2:
Exibindo Resultados
Comando disp ( ) é usado para mostrar os elementos de uma variável sem
mostrar o nome dessa variável, e para exibir uma mensagem de texto.
Sempre que o comando disp ( ) é executado, os resultados que ele mostra
aparecem em uma nova linha.
Exemplo:
No editor:
36
Lista de Exercícios
Exercício 1:
Dois vetores do Octave, x e y, são definidos da seguinte forma:
Exercício 2:
Exercício 3:
Exercício 4:
8𝑘 2
𝑦=
𝑥 2 + 4𝑘 2
38
39
Capítulo 3
Gráficos
Exercícios
40
Gráfico
O octave possui comandos que podem criar diferentes tipos de gráficos, que
podem ser de eixos lineares ou eixos logarítmicos, gráficos de barras, gráficos
polares, etc.
O gráfico mais simples é usando o comando plot.
plot (x,y)
Onde x e y são vetores do mesmo tamanho, sendo os valores de x na abscissa
(eixo horizontal) e os valores de y na ordenada (eixo vertical). Quando o
comando plot é executado, uma janela de figuras é aberta, mostrado o gráfico
gerado.
Exemplo 1:
Estilos de Linha
Para definir o estilo, a cor e o símbolo usado na linha do gráfico, a configuração
é dada entre aspas, conforme a tabela abaixo.
plot ( x , y , ‘especificadores_de_linha’)
41
42
O comando grid on ou grid off, ativa e desativa a grade. Usando o help grid,
opções do comando são mostrados. O comando set(gca, ‘ygrid’, ‘on’) ativa os
eixos na horizontal, e o set(gca, ‘xgrid’, ‘on’), ativa os eixos na vertical.
43
Exemplo:
Um painel de de 2 linhas e 3 colunas é igual a 6 posições, que podem ser
ocupados por até seis gráficos. Ou seja, cada gráfico ocupa um posição.
Para criar uma nova janela, pode-se usar o comando figure. Depois deste, os
comandos de configurações passam a ser aplicados nessa nova janela ativa.
Pode-se criar quantas janelas forem necessárias.
Use o comando close para fechar a janela de figura que está ativa. Use close
(n), onde n é a janela de figura que quer fechar. Use close all para fechar todas
as janelas de figuras.
48
Exercícios
Exercício 1:
Usando Octave, gere gráficos das funções seguir, respeitando os intervalos
dados. Use uma quantidade de pontos suficientes para que a curva da função
seja suave.
Exercício 2:
Escreva um script do Octave/MatLab que realiza as seguintes operações:
Exercício 3:
(𝑥 3 +1)2
Na função 𝑦 = , calcule o valor de 𝑦 para os seguintes valores de
𝑥 2 +2
𝑥: − 1,6; −1,2; −0,8; −0,4; 0; 0,4; 0,8 𝑒 1,2. Trace um gráfico usando
marcadores na forma de asterisco para representar os pontos e uma linha preta
para uni-los. Coloque rótulos nos eixos.
52
Exercício 4:
A equação a seguir fornece a
distância aproximada percorrida
por uma bola no vácuo depois de
ser lançada por uma atiradeira em
função dos parâmetros horizontal e
vertical x e y e de uma “constante
de lançamento” k determinada
experimentalmente.
𝑑 = 𝑘𝑥𝑦
(a) Uma bola lançada com um
parâmetro vertical de 1,00 m
e um parâmetro horizontal
de 1,50 m alcança uma distância de
75 m. Qual é o valor da constante de
lançamento? Não se esqueça de
indicar a unidade.
(d) Modifique o script do item (c) para plotar três curvas no mesmo sistema
de eixos, para k = 45, 50 e 55 m-1 . O gráfico deve ter uma legenda
apropriada. Sua resposta deve incluir o script e o gráfico criado.
(e) Suponha que você̂ deve atingir alvos situados a 50, 100 e 150 m da
atiradeira e dispõe de apenas quatro tentativas por alvo. O valor exato da
constante de lançamento é desconhecido, mas está entre k = 45 m-1 e k
= 55 m-1 Formule uma estratégia, baseada no gráfico do item (d), para
atingir os três alvos. Escreva instruções detalhadas, que possam ser
seguidas por qual- quer pessoa que saiba operar a atiradeira.
53
Exercício 5:
Duas atiradeiras do mesmo tipo foram usadas para executar dez lançamentos
cada uma, com o objetivo de atingir um alvo situado a 100 m de distância. Os
resultados foram os seguintes:
Exercício 6:
Uma viga é presa de um lado e suportada por um rolamento em sua outra
extremidade. A deflexão 𝑦 no ponto 𝑥 de uma viga carregada de forma mostrada
é dada pela equação:
−𝑤0 𝑥
𝑦= (3𝑥 4 − 10𝐿2 𝑥 2 + 7𝐿4 )
360𝐸𝐼𝐿
Onde 𝐸 é o módulo elástico, 𝐼 é o momento de inércia e 𝐿 é o comprimento da
viga. Para a viga mostrada na figura, 𝐿 = 6𝑚, 𝐼 = 9,19 × 10−6 𝑚4 e 𝑤0 =
800𝑁/𝑚. Num mesmo gráfico, trace as curvas de deflexão 𝑦 da viga em função
de 𝑥 para o alumínio, cobre e aço. Os módulos elásticos para os metais são 𝐸 =
70 × 109 𝑃𝑎 para alumínio, 𝐸 = 110 × 109 𝑃𝑎 para cobre e 𝐸 = 207 × 109 𝑃𝑎
para o aço. Cada curva deve ter uma cor diferente e um estilo diferente. Os eixos
do gráfico devem ser identificados. Além disso, o gráfico deve ter uma legenda
que indique que curva corresponde a que material constitui a viga.
Exercício 7:
54
O arco Gateway em St. Louis tem sua forma descrita pela seguinte equação.
𝑥
𝑦 = 21,147 − 20,97 cosh ( )𝑚
30,39
Trace um gráfico do arco para −299,25 ≤ 𝑥 ≤ 299,25.
Exercício 8:
O polinômio a seguir tem três raízes:
𝑦 = 𝑥 3 − 15𝑥 2 + 54𝑥 − 43
(a) Use a função plot para plotar o polinômio no intervalo de 0 a 20.
Estudo de Caso
Um engenheiro de materiais está investigando a força necessária para obter
certa deformação de uma corda elástica. Como parte da investigação, o
engenheiro pendura os pesos em amostras da corda e mede o alongamento
resultante, que é definido como o comprimento da amostra depois que a força é
aplicada menos o comprimento inicial da amostra. Tabela a seguir mostra os
resultados do experimento.
(b) Suponha que as três amostras são do mesmo material, mas possuem
dimensões diferentes. As dimensões das amostras (em uma ordem
aleatória) são as seguintes:
5 mm de diâmetro e 1 m de comprimento
5 mm de diâmetro e 2 m de comprimento
7 mm de diâmetro e 1 m de comprimento
Consultar as referências:
Wikipedia:
https://pt.wikipedia.org/wiki/Associa%C3%A7%C3%A3o_de_molas
simulador:
https://phet.colorado.edu/sims/html/hookes-law/latest/hookes-law_pt_BR.html
video 1: https://youtu.be/rj0i_r9q4Ok
video 2: https://youtu.be/5pb08NokxGM
56
Linearização de Gráficos
Exemplo 1 (gráfico mono-logarítmico ou mono-log)
A diferença de potencial de um capacitor foi medida em função do tempo. A
tabela abaixo apresenta os resultados obtidos.
V
3,5 8,0 14,1 31,0 80,0 180,0 270,0
(µVolt)
t
5,0 15,0 20,5 30 41,5 49,5 55,0
(ms)
Respostas:
a) Curva não linear.
capacitor.m
% a)
clc; clear;close all;
V=[3.5 8 14.1 31 80 180 270];
t=[5 15 20.5 30 41.5 49.5 55];
plot(t,V,'-ro');
xlabel('tempo, ms');
ylabel('volt, microV');
grid on;
57
b)
𝑉 = 𝑏𝑒 𝑎∙𝑡
ln(𝑉 ) = ln(𝑏𝑒 𝑎∙𝑡 )
ln(𝑉 ) = ln(𝑒 𝑎∙𝑡 ) + ln(𝑏)
ln(𝑉 ) = a ∙ t ∙ ln(𝑒) + ln(𝑏)
ln(𝑉 ) = a ∙ t + ln(𝑏)
por comparação, 𝑌 = A∙X+𝐵 temos:
𝑌 = ln(𝑉 ) A=a X=t B = ln(𝑏)
V
3,5 8,0 14,1 31,0 80,0 180,0 270,0
(µVolt)
𝑌 = ln(𝑉 ) 1,25 2,08 2,65 3,43 4,38 5,19 5,60
X=t
5,0 15,0 20,5 30 41,5 49,5 55,0
(ms)
c)
X=t
5,0 15,0 20,5 30 41,5 49,5 55,0
(ms)
Resultados:
a) curva não linear
lampada.m
%a)
clc; clear;close all;
I=[22 60 90 180 330 520];
V=[0.6 2.5 4 11.5 26.5 49];
plot(V,I,'-ro');
xlabel('Tensao, V');
ylabel('Corrente I, mA');
grid on;
b)
𝐼 = 𝑏𝑉 𝑎
ln(𝐼 ) = ln(𝑏𝑉 𝑎 )
ln(𝐼 ) = ln(𝑉 𝑎 ) + ln(𝑏)
ln(𝐼 ) = a ∙ ln(𝑉 ) + ln(𝑏)
por comparação, 𝑌 = A∙X+𝐵 temos:
𝑌 = ln(𝐼 ) A=a X = ln(𝑉 ) B = ln(𝑏)
Refazendo a tabela
𝑌 = ln(𝐼)) 3,09 4,09 4,50 5,19 5,80 6,25
X = ln(𝑉) -0,51 0,92 1,39 2,44 3,28 3,89
61
c)
I 22 60 90 180 330 520
(mA) 2,2 x101 6 x101 9 x101 1,8 x102 3,3 x102 5,2 x102
V 0,6 2,5 4,0 11,5 26,5 49,0
(volt) 6 x10-1 2,5 x100 4 x100 1,15 x101 2,65 x101 4,9 x101
62
Capítulo 4
Função inline
Raízes de Funções
Exercícios
64
Função inline
No Octave/Matlab, existem várias formas de como definir uma equação
matemática. Por exemplo: 𝑓(𝑥 ) = 𝑥 2 + 4 , para x= 3, e depois para x=4:
>> x=3;
>> y=x^2+4
y = 13
>>
>> x=4;
>> y=x^2+4
y = 20
>>
Uma outra forma é usando o comando inline, onde a equação é digitada entre ‘
‘(uma aspa, uma aspa), seguido de da variável dependente, também entre ‘ ‘.
nome_da_função=inline(‘equação’,’x’)
>> t=inline('x^2+4','x')
O gráfico gerado é:
66
Visualmente é possível observar duas raízes. Uma raiz entre [0,2] e outra raiz
entre [2,5].
Agora vamos, definir a equação usando o comando inline e depois o fzero para
encontra a raiz.
Para calcular a primeira raiz, vamos usar o número 2 como partida, pois está
próximo de uma das raízes. Poderia ser outro valor diferente de 2, que o
resultado poderá convergir no mesmo valor.
>> fc=inline('x*exp(-x)-0.2','x');
>>
>> x1=fzero(fc,2)
x1 = 2.5426
>>
Portanto, as duas raízes são x1= 2,5426 e x2=0,25917, que podem ser
confirmados fazendo a função zerar nestes valores.
Exercicios
1) Determine a raiz de 𝑓 (𝑥 ) = 𝑥 2 − 𝑒 −𝑥 .
Resp. 1,2757
𝑆 = 𝜋 √𝑟 2 + ℎ 2
Onde 𝑟 é o raio da base e ℎ é a altura. Determine o raio de um
cone que tenha uma área superficial de 1200 𝑚2 e uma altura
de 20 𝑚.
Resp. 15,1
𝑇𝑎𝑥𝑎 ∙ 𝐸𝑚𝑝𝑟
𝑀𝑝𝑎𝑔 =
1
12 (1 − )
𝑡𝑎𝑥𝑎 12∙𝐴𝑛𝑜𝑠
(1 + )
12
Determine a Taxa de um empréstimo de R$ 170.000,00 por 20 anos se o
pagamento mensal for de R$ 1.250,00
Resp. 0,06324792514244 (ou 6,3%)
7)
8)
Resp. 422,9531
9)
12)
13)
14)
72
Capítulo 5
Matrizes
Solução de Equações Lineares
Exercícios
Estudo de caso:
Imagem no Octave
73
Matrizes
Uma matriz é um arranjo retangular de números ou elementos, organizados em
linhas e colunas. Abaixo, a matriz F de 3 linhas por 4 colunas ou com tamanho
4 x 3.
3 2 10 11
𝐹 = [16 8 12 1 ]
4 15 14 5
Quando o número de linhas é igual ao número de colunas, temos uma matriz
quadrada. Abaixo, a matriz G é 3 x 3.
2 9 6
𝐺 = [12 11 1]
15 14 5
A matriz que possui somente uma linha, também, é chamada de vetor linha. E a
matriz que possui somente uma coluna, também, é chamado de vetor coluna.
11
𝐿 = [3 5 6 11] 𝐶=[1]
5
Exemplo:
O operador dois pontos (:) no índice indica todos os elementos de uma linha ou
coluna, ou seja, funciona como um coringa.
Também pode ser usado para indicar várias linhas e colunas consecutivas:
76
Exponenciação
Na exponenciação de matrizes, deve-se usar um ponto (.) antes do operador
^, ou seja, .^.
78
Matriz Transposta
Usar o comando transpose ( ) ou ‘.
80
Matriz Identidade
Uma matriz identidade é definida como uma matriz da forma:
Matriz Inversa
A inversa de uma matriz quadrada A, representada como A-1, de forma que:
Dimensões da Matriz
Usar o comando size (A), para saber as dimensões ou tamanho de uma matriz
m x n (m é o número de linha, e n é o número de colunas).
Determinante
Usa-se o comando det(A) para calcular a determinante da matriz A
4 −2 −3 6 𝑥 12
−6 7 6,5 −6 𝑦 −6,5
[ ]×[ ]= [ ]
1 7,5 6,25 5,5 𝑤 16
−12 22 15,5 −1 𝑧 17
Exemplo:
ou
86
Exercícios
c) d)
e) f)
2)
87
3)
Estudo de caso
Imagem no Octave
Imagem Digital
Observe a imagem da figura 1:
Figura 1
89
Como essa imagem possui duas cores, vamos atribuir ao pixel preto ou pixel
desligado o valor igual a zero, e para o pixel branco ou pixel ligado o valor igual
a 1, conforme mostrado na figura 3.
Figura 3
>> barco1 = [
11101111
11100111
11000011
10000001
11101111
00000000
10000001
1 1 1 1 1 1 1 1];
>> imshow (barco1)
>>
90
Pixel ou Píxel
Pixel ou píxel[1] (sendo o plural pixels ou píxeis) (aglutinação de picture e
element, ou seja, elemento de imagem, sendo pix a abreviatura em inglês para
pictures) é o menor elemento em um dispositivo de exibição (por exemplo, um
monitor), ao qual é possível atribuir-se uma cor. De uma forma mais simples, um
pixel é o menor ponto que forma uma imagem digital, sendo que o conjunto de
pixels formam a imagem inteira. (1)
Imagens Binárias
Uma Imagem binária, também chamada bi-nível, é uma imagem digital na qual
há apenas dois valores possíveis para cada pixel. Os nomes preto-e-branco,
P&B, monocromia e monocromático também são usados para este conceito (2).
As imagens binárias são matrizes bidimensionais (2D). Os valores atribuídos no
Octave são 1 para o branco (pixel ligado) e zero para preto (pixel desligado).
>> barco3_inv=(1-barco3);
>> imshow(barco3_inv);
>>
92
Figura 7
Exemplo:
O script abaixo gera a imagem de um minion, que é mostrado na figura 8.
O arquivo minion.txt contém os valores da matriz minion1.
clc; clear all; close all;
minion1=[
255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 200 200 200 200 200 200 255 255 255
255 255 200 200 200 100 100 200 200 200 255 255
255 200 200 200 100 255 255 100 200 200 200 255
255 0 0 100 255 0 0 255 100 0 0 255
93
Figura 8
A imagem obtida não é igual a Figura 8, pois a matriz minion1 é da classe double.
Precisamos converter para classe inteiro de 8 bits sem sinal.
Observação:
Para classe double, a escala cinza varia de 0 a 1. Assim, uma outra alternativa
seria dividir a matriz por 255
94
minion3= minion1/255;
imshow(minion3);
Brilho
Aumentar o brilho significa deixar a imagem mais clara ou diminuir o brilho
significa deixar a imagem mais escura.
Na prática, somamos uma constante para aumentar o brilho, ou subtraímos para
diminuir.
Exemplo:
IM_1 = imread ('asa.tif');
imshow(IM_1);
IM_2=IM_1+90;
figure;
imshow(IM_2);
Figura 9
original aumento de brilho
IM_3=IM_1 + 200;
figure;
imshow(IM_3);
IM_4=IM_3 - 200;
imshow(IM_4);
Observação:
As mesmas operações podem ser obtidas usando as funções imadd,
imsubtract, immultipli, imdivide e imabsdiff.
Contraste
Contraste é a diferença entre o tom branco e o escuro. Para aumentar o
contraste, deixamos as cores claras mais claras e as cores escuras mais
escuras.
Vamos definir um valor, que chamaremos de limiar (“Thresholding”). Os valores
acima do limiar serão denominados de claros, e abaixo dele serão denominados
de escuros.
Numa imagem, aumentando os valores acima do limiar, eles se tornarão mais
claros. Diminuindo os valores abaixo do limiar, eles se tornarão mais escuros.
Exemplo, vamos usar um limiar de 180. Os valores acima de 180 serão
aumentados, se afastando de 180 (as intensidades serão realçadas). Os valores
abaixo de 180 serão diminuídos, se afastando de 180 no outro sentido (as
intensidades serão atenuadas). Vamos dividimos a imagem pelo limiar, de forma
que, os valores das intensidades maiores que 180, terão valores maiores que 1.
Já os valores menores que 180, terão valores entre 0 e 1. Agora, podemos
aplicar uma função matemática, tipo elevar todos os valores ao quadrado, de
forma que, os valores maiores que um ficarão maiores; e valores menores que
um ficarão menores. Em seguida, multiplicamos pelo valor limiar (180), para
retornar entre 0 e 255.
O contraste pode ser ainda mais realçado ao utilizar potências maiores do que
2. Da mesma forma, podemos reduzir o contraste ao utilizar operações de raiz.
96
Figura 10
original aumento de contraste
Binarização
A binarização é a transformação de uma imagem colorida ou cinza em preto e
branco (0 e 1). Numa imagem cinza, um valor de limiar é escolhido, no qual
valores acima desse limiar são convertidos em 1, e os valores abaixo do limiar
são convertidos em 0. Já imagens em cores são convertidas em escala de cinza,
antes da aplicação do limiar, ou aplica-se um valor de limiar diferente para cada
canal.
No Octave, podemos usar os recursos de operações matriciais para facilitar. Por
exemplo: vamos definir o valor limiar igual a 128, em seguida, usamos
operadores relacionais para obter uma matriz da imagem binarizada.
IM1 = imread ('asa.tif');
limiar=128;
BW= IM1 > limiar;
imshow(IM1);
figure;
imshow(BW);
Também, pode-se usar o comando im2bw, para converter uma imagem em preto
e branco. Exemplo:
IM = imread ('asa.tif');
BW= im2bw(IM,0.5); % o valor de limiar deve estar entre 0 e 1.
imshow(BW);
Figura 11
original: escala cinza preto e branco
Negativo da imagem
Para obter o negativo da imagem, precisamos inverter os valores, os valores
próximos de 0 em valores próximos de 255, e vice-versa. Uma forma de fazer
isso é do valor de 255 subtrair a imagem.
Exemplo:
IM_1 = imread ('ceramica_cinza.jpg');
negativo=(255-IM_1);
imshow(IM_1);
figure;
imshow(negativo);
Figura 12
escala cinza negativo
98
Figura 13
Exemplo 1:
%pixel amarelo
Exemplo 2:
% pixel amarelo e laranja
%pixel verde escuro e cinza
Im_a=uint8(Im_a);
imshow(Im_a);
Figura 14
100
% canal vermelho
Im_a (:,:,1) = [ 255 255
12 150];
% canal verde
Im_a (:,:,2) = [255 128
69 150];
% canal azul
Im_a (:,:,3) = [0 0
1 150];
Im_a=uint8(Im_a);
imshow(Im_a);
Exemplo 4:
clc; clear all; close all;
imagem1=imread('monstro.bmp');
imshow(imagem1);
title('original');
figure
imshow(imagem1(:,:,1));
title('canal vermelho');
figure
imshow(imagem1(:,:,2));
title('canal verde');
figure
imshow(imagem1(:,:,3));
title('canal azul');
101
Script:
clc; clear; close;
imagem1=imread('monstro.bmp');
foto_vm = imagem1;
foto_vm(:,:,2)=0;
foto_vm(:,:,3)=0;
foto_vd = imagem1;
foto_vd(:,:,1)=0;
foto_vd(:,:,3)=0;
102
foto_az = imagem1;
foto_az(:,:,1) =0;
foto_az(:,:,2) =0;
%original
imshow(imagem1);
title('original');
%canal vermelho
figure;
imshow(foto_vm);
title('canal vermelho');
%canal verde
figure;
imshow(foto_vd);
title('canal verde');
%canal azul
figure;
imshow(foto_az);
title('canal azul');
Conversão de imagens
Podemos converter entre diferentes tipos de imagem, como a conversão de RGB
em escala cinza e vice-versa, usando os comandos rgb2gray.
exemplo:
IM_rgb = imread ('ceramica.jpg');
IM_cinza=rgb2gray(IM_rgb);
imshow(IM_rgb);
figure;
imshow(IM_cinza);
Figura 17
colorida escala cinza
imshow (variavel)
Para gravar em disco ou outro dispositivo, usamos o comando imwrite( ):
imwrite (variavel, ‘nome_do_arquivo.ext’,’formato’)
exemplo:
IM = imread ('ceramica.jpg');
imshow(IM);
imwrite(IM, 'ceramica.tif', 'tif');
105
Capítulo 6
Importando/exportando dados
load/save
dlmread/dlmwrite
fscanf/fprint
Estudo de caso
Análise de Difração de Raios X (DRX)
Criptografia
106
• comando load
load arquivo.ext -ascii;
Exemplo:
importar os dados do arquivo dados1.txt para o Octave
No Octave:
• Comando save
Para salvarmos alguma variável em um arquivo, podemos usar o comando:
save -ascii nome_do_arquivo.ext nome_da_variável
ou
save (‘nome_do_arquivo.ext’, ‘nome_da_variável’, ‘-ascii’)
108
• Comando dlmread
Comando usado para importar dados de um arquivo:
mx = dlmread (‘arquivo.ext’ , ‘delimitador’)
onde:
mx ... nome da matriz no octave que receberá os dados;
arquivo.ext ... nome do arquivo com extensão que contém os dados a
serem lidos (importados)
delimitador ... caractere usado para separar os números.
exemplo:
109
• Comando dlmwrite
Para gravar uma matriz em um arquivo, o comando é:
dlmwrite(‘arquivo.txt’ , matriz , ‘delimitador’ )
onde:
matriz ... nome da matriz no octave que contém os dados;
arquivo.ext ... nome do arquivo com extensão onde os dados serão
gravados (exportados)
delimitador ... caractere usado para separar os números gravados no
arquivo.ext. O delimitador pode ser: virgula, espaço, ponto-vírgula,
vírugla, \t (para tabulação), ou outro.
Exemplo:
Comando fprintf
O comando fprintf pode ser usado para mostrar dados na tela, ou exportar
(salvar) dados num arquivo. Já o comando fscanf é usado para importar (ler)
dados num arquivo
exemplos:
Exemplo:
- justificação à esquerda
+ impressão do sina “+” ou “–“
Flags
<espaço> insere espaço em branco
0 enche espaço disponível com zero
tamanho da
quantidade de caracteres (vazios) antes do número
cadeia
i ou d número inteiro
f ponto fixo (n. de casas após a vírgula)
e ou E notação científica
carácter de
g ou G notação científica, mas sem zeros para
controle
complementar
c caractere simples
s quando variável é uma string
112
Exemplos:
exemplo 1:
exemplo 2
114
exemplo1:
O arquivo temperatura.txt tem dados de texto e números:
Resultado:
116
Exemplo 2:
O arquivo idade.txt contém nomes e idades dos membros de um colegiado,
calcular a média de idades do grupo
Os comandos são:
O resultado:
117
Estudo de Caso:
Análise de Difração de Raios X (DRX)
A figura abaixo mostra uma micrografia (MEV – microscópio eletrônico de varredura)
de uma liga fundida com composição de 80% nióbio e 20% de boro. É possível observar
duas fases, uma cinza escuro e outra cinza claro.
Para esta faixa de composição, as possíveis fases reportadas na literatura são Nióbio,
Nb3B2 e NbB, entretanto, somente duas fases foram observadas na micrografia. Para
identifica-las, uma análise de difração de raios -X em pó (DRX) da liga foi feita. O
resultado dessa análise encontra-se no arquivo “amostra.txt”. A primeira coluna do
arquivo é o ângulo dois theta (2), seguida da respectiva intensidade na segunda
coluna. Usando o Octave/Matlab analise os resultados de DRX:
(a) Faça um difratograma (gráfico 2 theta (abcissa) versus intensidade) com a
linha na cor preta.
(b) Num novo gráfico, faça um difratograma (gráfico gráfico 2 theta versus
intensidade) com as intensidades normalizadas entre 0 a 100, o ângulo dois
theta entre 25 e 80 e a linha na cor preta.
(c) Sobreponha os picos da fase nióbio sobre o difratograma da amostra
(normalizado).
(d) Sobreponha os picos da fase Nb 3B2 sobre o difratograma da amostra
(normalizado).
118
Observações:
Solução
drx.m
clc; clear all; close all;
%normalizando
y_nor=100*(y-min(y))/(max(y)-min(y));
% a)
plot(x,y,'k');
title('Difratograma');
xlabel('2 \theta');
ylabel('intensidade');
legend('amostra');
% b)
figure
plot(x,y_nor,'k');
axis([25 80 0 100]);
title('Difratograma');
xlabel('2 \theta');
ylabel('intensidade');
legend('amostra');
% c)
%padrão do Nb
x_nb=[38.469; 55.535; 69.583];
y_nb=[100; 13.7; 23.3];
hold on
bar(x_nb,y_nb,0.03,'facecolor','y','edgecolor','y');
legend('amostra','Niobio');
% d)
% padrao Nb3B2
x_nb3b2=[32.400; 34.183; 40.059; 41.286; 42.760; 46.485; 56.066; ...
61.845; 66.229; 66.926; 67.805; 68.883; 70.724; 71.906; 75.656];
y_nb3b2=[50.0; 40.0; 100.0; 30.0; 70.0; 50.0; 30.0; 40.0; ...
30.0; 30.0; 50.0; 70.0; 100.0; 30.0; 100.0];
bar(x_nb3b2,y_nb3b2,0.03,'facecolor','b','edgecolor','b');
legend('amostra','Niobio','Nb3B2');
%e)
% padrao NbB
120
bar(x_nbb,y_nbb,0.03,'facecolor','g','edgecolor','g');
legend('amostra','Niobio','Nb3B2','NbB');
% f)
% resultado final
figure
plot(x,y_nor,'k');
hold on
bar(x_nb,y_nb,0.03,'facecolor','y','edgecolor','y');
bar(x_nbb,y_nbb,0.03,'facecolor','g','edgecolor','g');
axis([25 80 0 100]);
title('Difratograma');
xlabel('2 \theta');
ylabel('intensidade');
legend('amostra','Nb', 'NbB');
% salvando os graficos
saveas(3,'resultado_rx.jpg');
121
Estudo de Caso:
Criptografia
C E U A Z U L
X B R V W R I
122
- A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12 13
N O P Q R S T U V W X Y Z
14 15 16 17 18 19 20 21 22 23 24 25 26
A partir das propriedades de matrizes, uma matriz qualquer 𝑀 multiplicado pela matriz
identidade 𝐼 é igual a 𝑀. A matriz identidade funciona como elemento neutro na
multiplicação entre matrizes.
𝑀 = 𝐼. 𝑀 (1)
Da definição de matriz identidade, o produto de uma matriz 𝐴 pelo seu inverso 𝐴−1 é
igual a matriz identidade:
𝐼 = 𝐴. 𝐴−1 = 𝐴−1 . 𝐴 (2)
𝑀 = 𝐴−1 . 𝐶 (5)
Se a matriz 𝐴 for uma chave para codificar, 𝐴−1 seria a outra chave a para decodificar, e
se 𝑀 for uma mensagem, então (𝑀. 𝐴) seria uma mensagem codificada.
Por exemplo:
Seja uma matriz qualquer 𝑚 × 𝑚 inversível como chave para codificar, por exemplo:
1 0 1
𝐴 = [−1 3 1]
0 1 1 3×3
2 1 −3
A chave para decodificar será: 𝐴−1 = [ 1 1 −2]
−1 −1 3 3 × 3
Assim a matriz 𝑀 deve ter o número de linhas igual 𝑚, que neste caso será 3.
124
A mensagem usada será: “onde nenhum homem jamais esteve”, que será convertido
em números usando a tabela já mencionada.
o n d e n e n h u m h o m e m j a m a i s e s t e v e
15 14 4 5 0 14 5 14 8 21 13 0 8 15 13 5 13 0 10 1 13 1 9 19 0 5 19 20 5 22 5
24 33 4 10 19 34 10 36 13 21 13
𝐶 = [−6 29 41 39 34 45 0 38 0 18 −10]
9 27 15 18 24 33 5 32 6 13 1
𝑀 = 𝐴−1 . 𝐶
Então, a matriz 𝐶 é transmitido na forma de cadeia de números:
24 33 4 10 19 34 10 36 13 21 13 -6 29 41 39 34 45 0 38 0 18 -10 9 27 15 18 24 33 5 32 6
13 1.
Quem recebe a mensagem decodificada, reconstrói a matriz 𝐶 e multiplica pela matriz
inversa (a chave de decodificação) 𝐴−1.
𝑀 = 𝐴−1 . 𝐶
2 1 −3 24 33 4 10 19 34 10 36 13 21 13
𝐶=[ 1 1 −2 ] ∙ [ −6 29 41 39 34 45 0 38 0 18 −10]
−1 −1 3 9 27 15 18 24 33 5 32 6 13 1
15 14 4 5 0 14 5 14 8 21 13
𝑀=[0 8 15 13 5 13 0 10 1 13 1 ]
9 19 0 5 19 20 5 22 5 0 0
125
Exercício.
1) Escreva um script para codificar uma mensagem usando a matriz,
1 0 1
𝐴 = [−1 3 1] . A mensagem codificada deve apresentar no formato de uma
0 1 1
sequência numérica e ser salva num arquivo chamado de “mensagem.txt”
(Sugestão: use o comando double para converter letras em números da tabela
ASCII).
Solução:
1)
codificar.m
%criptografia
%codificar
clc
clear
%mens_ori=('onde nenhum homem jamais esteve');
mens_ori=input('mensagem = ','s');
mens_num=double(mens_ori);
n_carac=length(mens_num);
colunas =ceil(n_carac/3);
M(1,1:colunas)=mens_num(1:colunas);
M(2,1:colunas)=mens_num(colunas+1:2*colunas);
f=n_carac-2*colunas; %ajuste no final da frase
M(3,1:f)=mens_num(2*colunas+1:end);
A=[1 0 1; -1 3 1; 0 1 1];
A_in=inv(A);
M_c=A*M;
2)
decodificar.m
%criptografia
%decodificar
cod=dlmread ('mensagem.txt');
%ajustar colunas
n_car=length(cod);
col =ceil(n_car/3);
M_c_r(1,1:col)=cod(1:col);
M_c_r(2,1:end)=cod(col+1:2*col);
M_c_r(3,1:end)=cod(2*col+1:end);
M_dec=abs(round(A_inv*M_c_r));
M_dec_1=[M_dec(1,1:end) M_dec(2,1:end) M_dec(3,1:end)];
127
mens=char(M_dec_1);
disp('mensagem decodificada:')
disp(mens)
128
Capítulo 7
Estatística
Números aleatórios: rand
Exercícios
Estudo de caso:
Erro e Reprodutibilidade na medição
129
Estatística
O octave dispões de várias funções para calcular parâmetros estatísticos.
Algumas destas funções são:
min(A) mínimo de um vetor A
max(A) máximo de um vetor A
mean(A) média de um vetor A
median(A) mediana
length(A) número de elementos de um vetor A
sum(A) soma de um vetor A
cumsum(A) soma acumulada
prod(A) produto dos elementos do vetor A
cumprod (A) produto acumulado
sort (A) ordena os valores de um vetor A
var (A) variância de A
desvio padrão de um vetor A
std (A)
m = 0 (quando usamos um conjunto de amostras para
ou representar a população – configuração padrão)
𝑁
std (A, m) 1
𝑆=√ ∑(𝑥𝑖 − 𝑥̅ )2
𝑁−1
𝑖=1
onde:
𝛼 ... incerteza
n ... grau de liberdade
N ... número de amostras
𝛼
𝑛=𝑁−1 𝐹 =1−
2
exemplo:
Para uma confiabilidade de 95%, o nível de incerteza é 5%
(𝛼 = 0,05). Portanto 𝐹 = 0,975.
O valor de t também pode ser obtido em uma tabela:
https://pt.wikipedia.org/wiki/Distribui%C3%A7%C3%A3o_t_de_Student
130
Exemplo:
Uma atiradeira executou 20 lançamentos consecutivos, sem qualquer alteração
na sua configuração. As distâncias que as bolas arremessadas alcançavam
eram: 17,5 - 19,0 - 16,4 - 19,3 - 16,6 - 16 - 17,4 - 16,7 - 18,1 - 17,5 - 15,1 - 14,2
- 17,4 - 15,7 - 17,8 - 19,3 - 18,5 - 15,7 - 17,9 e 17,0 metros. Faça um gráfico, bem
como calcule o menor e maior valor, a média, o desvio padrão e o histograma.
131
Números Aleatórios
Para gerar uma matriz com números reais aleatórios entre 0 e 1, usamos
rand ( L , C )
onde:
L ... é o número de linhas
C ... é o número de colunas
exemplos:
Caso queira gerar números num determinado intervalo [a,b], podemos usar a
seguinte recurso:
r = a + ( b – a ) .* rand ( C , L );
exemplo:
Gerar 7 números aleatórios, que estejam no intervalo de [2,40].
133
Exercícios
1)
2)
Escreva uma expressão do Octave/MatLab que use a função rand para gerar 1
milhão de números reais aleatórios uniformemente distribuídos entre 0 e 10.
Gere um histograma com esses números.
3)
Escreva uma expressão do Octave/MatLab que use a função rand para gerar 1
milhão de números reais aleatórios uniformemente distribuídos entre -100 e
200. Gere um histograma com esses números.
134
4)
Escreva uma expressão do Octave/MatLab que use a função rand para gerar 1
milhão de números inteiros aleatórios uniformemente distribuídos entre 10 e
200. Gere um histograma com esses números.
5)
A tabela a seguir mostra as áreas, em milhões de km2, dos oceanos. Representar
graficamente os dados com a construção de um gráfico de barras (colunas) e um
gráfico de pizza.
Observações:
os comandos dos gráficos no Octave são:
bar ... gráfico de barras verticais
barh ... gráfico de barras horizontais
pie ... gráfico de pizza (use legend para identificar os oceanos).
6)
Considerar os dados obtidos pelas medidas das alturas de 100 indivíduos, dadas
em cm, (arquivo altura.dat).
(a) Qual é a menor altura
(b) Qual é a maior altura?
(c) Qual é a amplitude total?
(d) Qual é a média das alturas?
(e) Qual é o desvio padrão das amostras?
(f) Faça um histograma com 15 escaninhos (ou classes) e salve como imagem
jpg.
135
7)
Os resultados de 20 titulações feitas num lote de vinagre são mostrados na
Tabela abaixo:
Estudo de Caso
Erro e Reprodutibilidade na medição
E ... erro
𝑆
𝐸= 𝑡
√𝑁 S ... desvio padrão
Exemplo:
Uma série de seis amostras de compósito é ensaiada em tração. As resistências
a tração (MPa) para seis réplicas foram 742, 763, 699, 707, 714 e 751. Determine
a resistência à tração média, com as barras de erro adequadas, com 95% de
confiabilidade.
Solução 1:
Desvio Padrão:
𝑁
1
𝑠=√ ∑(𝑥𝑖 − 𝑥̅ )2 = 26,1
𝑁−1
𝑖=1
Número de amostras: N = 6
Grau de liberdade: n = (N-1) = (6-1) = 5
Assim:
𝑥̅ = 729 ± 27,4 𝑀𝑃𝑎
DP=std(resistencia,0)
F=1-0.05/2 % (5% de incerteza ou 95% certeza);
N=length(resistencia)
t=tinv(F,N-1)
erro=DP/sqrt(N)*t
menor=’media-erro=’;
maior=’media+erro=’;
disp([menor num2str(media-erro)])
disp([maior num2str(media+erro)])
Resultado:
media = 729.33
DP = 26.143
F = 0.97500
N= 6
t = 2.5706
erro = 27.436
media-erro=701.8977
media+erro=756.7689
>>
139
fonte: https://pt.wikipedia.org/wiki/Distribui%C3%A7%C3%A3o_t_de_Student
140
onde:
(𝑁1 − 1) × 𝑆12 + (𝑁2 − 1) × 𝑆22
𝑆12 =√
𝑁1 + 𝑁2 − 2 𝑆12 ... raiz quadrada da variância
combinada
𝑆𝐷 ...diferença-padrão entre as
médias
𝑁1 + 𝑁2
𝑆𝐷 = 𝑆12 √ N ... número de amostras
𝑁1 × 𝑁2
𝑁𝑇 = 𝑁1 + 𝑁2
Exemplo:
Suponha que 10 amostras de um liga metálica sejam submetidas a um ensaio
de dureza Brinell e resultam uma dureza Brinell média de 436, com um desvio
padrão de 12,5. Em outro conjunto de 8 amostras de outra liga têm uma dureza
Brinell média de 487, com um desvio padrão de 10,5. Considerando 95% de
confiabilidade, as amostras são significativamente diferentes?
solução 1
(𝑁1 − 1) × 𝑆12 + (𝑁2 − 1) × 𝑆22
𝑆12 =√
𝑁1 + 𝑁2 − 2
𝑁1 + 𝑁2 10 + 8
𝑆𝐷 = 𝑆12 √ = 11,7√ = 5,50
𝑁1 × 𝑁2 10 × 8
Na tabela 5, t = 2,120
com 95% confiabilidade e grau de liberdade = (NT-2)=(18-2)=16
Solução 2 - Octave
% exemplo 2
clc; clear all; close all;
N1=10;
media1=436;
S1=12.5;
N2=8;
media2=487;
S2=10.5;
F=1-0.05/2 % (5% de incerteza ou 95% certeza);
t=tinv(F,N1+N2-2)
S12=sqrt(((N1-1)*S1^2+(N2-1)*S2^2)/(N1+N2-2))
SD=S12*sqrt((N1+N2)/(N1*N2))
A=num2str(abs(media1-media2));
B=num2str(t*SD);
C=[A ‘>’ B];
disp(‘obs.: se a expressao for verdadeira’)
disp(‘a media e significativamente diferente’)
disp(‘|X1-X2|>t*SD’)
disp(C)
resultado
F = 0.97500
t = 2.1199
S12 = 11.667
SD = 5.5343
obs.: se a expressao for verdadeira
a media e significativamente diferente
|X1-X2|>t*SD
51>11.7321
>>
142
Capítulo 8
Programação
Exercícios
143
Programação
Um programa de computador é formado por uma sequência de comandos. Em
determinadas situações, precisamos repetir várias vezes uma sequência de
comandos, bem como, tomar decisões automáticas pré-definidas.
O Octave oferece várias ferramentas de controle de fluxo de programa, por meio
de declarações condicionais e laços de repetição.
>> 3 > 5
ans = 0
>= Maior ou igual a >> 5 >= 4
ans = 1
< Menor que >> 3 < 2
ans = 0
>> 3 < 5
ans = 1
<= Menor ou igual a >> 3 <= 1
ans = 0
== Igual a >> 3 == 5
ans = 0
3
>> 3 == 3
ans = 1
~= Diferente de >> 5 ~= 3
ans = 1
Outros exemplos:
144
>> a= [1 2 3 4 5];
>> b= [0 2 4 8 10];
>> a == b
ans =
0 1 0 0 0
>> a>b
ans =
1 0 0 0 0
>> 2*a==b
ans =
0 0 0 1 1
Operadores Lógicos
Funções lógicas
As funções lógicas são usadas para testar as variáveis e retorna 1 se verdadeiro
e 0 para falsa.
Exemplos:
ischar (A) ...retorna 1, se A contém caracteres, e caso contrário retorna zero (0).
isempty(A) ...retorna 1, se A é vazio, caso contrário retorna zero (0).
isnan (A) ...retorna 1, se A for NaN (não um número), caso contrário retorna zero
(0).
isnumeric (A) ... retorna 1, se A for numérica, caso contrário retorna zero (0).
Declarações Condicionais
Declaração condicional permite comparar uma sentença. Se esta sentença for
verdadeira, um grupo de comandos é executado. Caso a sentença seja falsa, um
outro grupo de comandos é executado.
if-elseif-else-endif
Exemplo:
Escrever um programa em Ocatave/Matlab para indicar se o aluno foi aprovado
ou reprovado, sabendo que a média (de duas provas) para aprovação é igual ou
superior a 5 e presença igual ou superior a 75%.
if-elseif-elseif-...-elseif-else-endif
Segue o mesmo princípio das estruturas anterior, mas é usada quando
queremos testar várias condições.
Exercícios:
Laços for-end
Depois do “for”, temos uma variável “k”, que será usada como uma espécie de
contador. Esse contador inicia com valor de “f”. Os comandos do bloco são
executados até alcançar end, onde automaticamente o valor de “s” (passo) é
somado ao “k”, ou seja, k=k+s. O programa retorna para for e compara o novo
valor de “k” com “t”. Se “k” for menor ou igual a “t”, os comandos são repetidos.
Se “k” for maior que “t”, o programa não repeti os comandos, e continua
normalmente depois do end.
149
Exemplo:
Faça um programa em Octave/Matlab para calcular a média e o desvio padrão
de números fornecido pelo usuário.
Exemplo:
Supondo que a população de um país A seja da ordem de 90.000.000 de
habitantes com uma taxa anual de crescimento de 3%, e que a população de um
150
Exercícios
Estudo de Caso
Financiamento
Exemplo:
Valor de R$ 10 000,00 financiados em 10 parcelas com juros de 1% ao mês.
10 000,00
𝑎𝑚𝑜𝑟𝑡𝑖𝑧𝑎çã𝑜 = = 1 000,00
10
Tabela Price – Os valores das parcelas mensais são iguais e os juros não são
alterados com a inflação. Já os valores das amortizações são crescentes.
Incialmente calcula-se os valores das parcelas que são constantes, e depois
calcula a amortização e o saldo devedor.
𝑗𝑢𝑟𝑜𝑠 × 𝑣𝑎𝑙𝑜𝑟_𝑓𝑖𝑛𝑎𝑛𝑐𝑖𝑎𝑑𝑜
𝑣𝑎𝑙𝑜𝑟_𝑑𝑎_𝑝𝑎𝑟𝑐𝑒𝑙𝑎 =
1
(1 − 𝑛ú𝑚𝑒𝑟𝑜_𝑑𝑒_𝑝𝑎𝑟𝑐𝑒𝑙𝑎𝑠 )
(1 + 𝑗𝑢𝑟𝑜𝑠)
0,01 × 10 000,00
𝑣𝑎𝑙𝑜𝑟_𝑑𝑎_𝑝𝑎𝑟𝑐𝑒𝑙𝑎 = = 1 055,82
1
(1 − ( )
1 + 0,01)10
156
Exemplo:
Valor de R$ 10 000,00 financiados em 10 parcelas com juros de 1% ao mês.
𝑣𝑎𝑙𝑜𝑟_𝑑𝑎_𝑝𝑎𝑟𝑐𝑒𝑙𝑎 = 0,01 × 10 000,00/100 = 100,00
157
Pagamento Único – Os valores das parcelas são zero, com exceção da última
prestação, onde ocorre o pagamento total do saldo devedor, incluindo os juros,
ou seja, é feito pagamento em uma única parcela, correspondente a dívida mais
juros no final do período estipulado.
𝑣𝑎𝑙𝑜𝑟_𝑑𝑎_𝑝𝑎𝑟𝑐𝑒𝑙𝑎 = 0
𝑎𝑚𝑜𝑟𝑡𝑖𝑧𝑎çã𝑜 = 0
𝑗𝑢𝑟𝑜𝑠_$ = 𝑗𝑢𝑟𝑜𝑠 × 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑟𝑑𝑜𝑟/100
𝑛𝑜𝑣𝑜_𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 = 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 + 𝑗𝑢𝑟𝑜𝑠_$
𝑣𝑎𝑙𝑜𝑟_𝑑𝑎_ú𝑙𝑡𝑖𝑚𝑎_𝑝𝑎𝑟𝑐𝑒𝑙𝑎 = 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 + 𝑗𝑢𝑟𝑜𝑠_$
Exemplo:
Valor de R$ 10 000,00 financiados em 10 parcelas com juros de 1% ao mês.
158
Capítulo 9
Regressão Linear
Exercícios
160
Regressão Linear
Num gráfico xy, com dois pontos é possível traçar uma reta que passe por esses
dois pontos.
Ao tentar passar uma reta pelos pontos ou entre eles, percebe-se que os pontos
não seguem rigorosamente a reta, e neste caso, é admitido um erro. Na verdade,
precisa determinar as constantes a1 e a0 de uma reta, de tal forma, que a linha
dessa reta promova o melhor ajuste como um todo.
161
Melhor Reta
Vamos considerar os seguinte pontos 𝑃1 (𝑥1 , 𝑦1 ), 𝑃2 (𝑥2 , 𝑦2 ) , 𝑃3 (𝑥3 , 𝑦3 ) , … ,
𝑃𝑛 (𝑥𝑛 , 𝑦𝑛 ), conforme a figura abaixo.
Como a reta não passa exatamente sobre os pontos, temos um erro ou resíduo
𝑟 . Em outras palavras, a diferente entre o valor de 𝑓(𝑥1 ) e de 𝑦1 é igual a 𝑟1
Mesma coisa ocorrerá com os outros pontos.
𝑟1 = 𝑦1 − 𝑓 (𝑥1 )
𝑟2 = 𝑦2 − 𝑓(𝑥2 )
𝑟3 = 𝑦3 − 𝑓(𝑥3 )
...
𝑟𝑖 = 𝑦𝑖 − 𝑓 (𝑥𝑖 )
...
𝑟𝑛 = 𝑦𝑛 − 𝑓 (𝑥𝑛 )
162
𝐸 = 𝑟1 + 𝑟2 + 𝑟3 + 𝑟4
𝐸 = −2 − 0,5 + 0,5 + 2
𝐸=0
Soma do Módulo dos Resíduos
Usando o módulo, os resíduos serão sempre positivos.
Exemplo: As duas retas, que poderiam ser usadas como ajustes, são mostradas
abaixo.
Reta A Reta B
𝑟1 = 3 𝑟1 = 1,5
𝑟2 = −1 𝑟2 = −0,5
𝑟3 = −0,5 𝑟3 = −1
𝑟4 = 1,5 𝑟4 = 3
O erro total E é mesmo para as duas retas, ou seja, uma reta não é melhor que
a outra.
Por outro lado, o erro global tem que ser o menor possível. Neste caso,
precisamos calcular os valores de 𝑎1 e 𝑎0 que geram o menor erro global. Se
derivamos a função erro global E em relação as variáveis 𝑎1 e 𝑎0 e igualar a
zero, temos:
𝑛
𝜕𝐸
= −2 ∑(𝑦𝑖 − 𝑎1 𝑥𝑖 − 𝑎0 )𝑥𝑖 = 0
𝜕𝑎1
𝑖=1
𝑛
𝜕𝐸
= −2 ∑ 𝑦𝑖 − 𝑎1 𝑥𝑖 − 𝑎0 = 0
{𝜕𝑎0 𝑖=1
Se derivamos novamente, a
segunda derivada será sempre
positiva, indicando ponto de
mínimo (não será demonstrado).
𝑛
− ∑ 𝑦𝑖 − 𝑎1 𝑥𝑖 − 𝑎0 = 0⁄2
{ 𝑖=1
164
∑ −𝑦𝑖 𝑥𝑖 + 𝑎1 𝑥𝑖 2 + 𝑎0 𝑥𝑖 = 0
𝑖=1
𝑛
∑ −𝑦𝑖 + 𝑎1 𝑥𝑖 + 𝑎0 = 0
{ 𝑖=1
𝑛 𝑛 𝑛
∑ −𝑦𝑖 𝑥𝑖 + ∑ 𝑎1 𝑥𝑖 + ∑ 𝑎0 𝑥𝑖 = 0 2
∑ −𝑦𝑖 + ∑ 𝑎1 𝑥𝑖 + ∑ 𝑎0 = 0
{ 𝑖=1 𝑖=1 𝑖=1
𝑛 𝑛 𝑛
2
∑ 𝑎1 𝑥𝑖 + ∑ 𝑎0 𝑥𝑖 = ∑ 𝑦𝑖 𝑥𝑖
𝑖=1 𝑖=1 𝑖=1
𝑛 𝑛 𝑛
∑ 𝑎1 𝑥𝑖 + ∑ 𝑎0 = ∑ 𝑦𝑖
{ 𝑖=1 𝑖=1 𝑖=1
∑ 𝑎0 = 𝑛𝑎0
𝑖=1
temos,
𝑛 𝑛 𝑛
2
∑ 𝑎1 𝑥𝑖 + ∑ 𝑎0 𝑥𝑖 = ∑ 𝑦𝑖 𝑥𝑖
𝑖=1 𝑖=1 𝑖=1
𝑛 𝑛
∑ 𝑎1 𝑥𝑖 + 𝑛𝑎0 = ∑ 𝑦𝑖
{ 𝑖=1 𝑖=1
Reescrevendo,
𝑛 𝑛 𝑛
2
(∑ 𝑥𝑖 ) 𝑎1 + (∑ 𝑥𝑖 ) 𝑎0 = ∑ 𝑦𝑖 𝑥𝑖
𝑖=1 𝑖=1 𝑖=1
𝑛 𝑛
(∑ 𝑥𝑖 ) 𝑎1 + 𝑛𝑎0 = ∑ 𝑦𝑖
{ 𝑖=1 𝑖=1
𝑛 𝑛
𝑆𝑥 = ∑ 𝑥𝑖 𝑆𝑦 = ∑ 𝑦𝑖
𝑖=1 𝑖=1
𝑛 𝑛
𝑆𝑥𝑦 = ∑ 𝑥𝑖 𝑦𝑖 𝑆𝑥 2 = ∑ 𝑥𝑖2
𝑖=1 𝑖=1
temos:
𝑛𝑆𝑥𝑦 − 𝑆𝑥 𝑆𝑦 𝑆𝑥 2 𝑆𝑦 − 𝑆𝑥𝑦 𝑆𝑥
𝑎1 = 𝑎0 =
𝑛𝑆𝑥 2 − (𝑆𝑥 )2 𝑛𝑆𝑥 2 − (𝑆𝑥 )2
ou
𝑎0 = 𝑦 − 𝑎1 𝑥
Solução:
Construir o gráfico para ver a distribuição de pontos.
Montando tabela:
x y xy x2 y2
1 0,5 0,5 1 0,25
2 2,5 5 4 6,25
3 2 6 9 4
4 4 16 16 16
5 3,5 17,5 25 12,25
6 6 36 36 36
7 5,5 38,5 49 30,25
𝑆𝑥 𝑆𝑦 𝑆𝑥𝑦 𝑆𝑥 2 𝑆𝑦2
Total = 28 24 119,5 140 105
onde
−1 ≤ 𝑟 ≤ 1
Interpretação
No nosso exemplo,
𝑛𝑆𝑥𝑦 − 𝑆𝑥 𝑆𝑦 7(119,5) − 28(24)
𝑟= =
√𝑛𝑆𝑥2 − (𝑆𝑥 )2 ∙ √𝑛𝑆𝑦2 − (𝑆𝑦 )2 √7(140) − (28)2 ∙ √7(105) − (24)2
𝑟 = 0,93
indicando um bom ajuste.
Para obter a correlação linear pode usar o comando corr(x,y) para Octave e
corrcoef(x,y) para Matlab, onde r varia de -1 a 1.
r = corr(x,y)
r = corrcoef(x,y)
Para desenhar a reta pode usar as funções plot e fplot já descritas. Também
pode usar a função refline(a1,a0), para desenhar uma reta y=a1x+a0.
Exemplo:
(a) Trace um gráfico (p versus T) e; (b) determine uma função linear na forma
𝑝 = 𝑎1 𝑇 + 𝑎0 que melhor se ajuste aos pontos do conjunto de dados.
170
171
172
Exercícios
a) Construa o gráfico;
b) Ajuste uma reta aos dados e estime as vendas do produto, para um gasto
com propaganda de 12 milhões de reais;
c) Qual o acréscimo nas vendas para cada milhão a mais gasto com
propaganda?
Pede-se:
a) Faça um gráfico dos dados. Quais suas impressões?
b) Ajuste uma reta aos dados e verifique se há uma relação entre níveis de
chumbo no sangue e horas de treinamento. Calcule coeficiente de
correlação.
c) O ciclista 10 tem níveis muito altos. Nossa evidência de uma relação é
proveniente quase que inteiramente desta observação? Repita (b) omitindo
o ciclista 10.
d) O que fizemos em (c) parece razoável?
174
Capítulo 10
𝑦 = 𝑏𝑥 𝑚
ln(𝑦) = ln(𝑏𝑥 𝑚 )
ln(𝑦) = ln(𝑥 𝑚 ) + ln(𝑏)
ln(𝑦) = m ln(𝑥 ) + ln(𝑏)
Essa equação é linear com ln(y) em função de ln(x), e, por analogia, apresenta
semelhança com 𝑌 = 𝑎1 𝑋 + 𝑎0 .
onde:
Sabendo que o crescimento da população possa ser modelado por uma função
exponencial 𝑝 = 𝑏𝑒 𝑚𝑥 , onde 𝑥 é o ano e 𝑝 é a população em bilhões, faça:
a) Construa um gráfico “I” dos pontos 𝑝𝑜𝑝𝑢𝑙𝑎çã𝑜 × 𝑎𝑛𝑜 , identificando os pontos
por “estrela”.
b) linearize a função
c) Construa um gráfico “II” dos pontos log(𝑝𝑜𝑝𝑢𝑙𝑎çã𝑜) × 𝑎𝑛𝑜
d) use a regressão linear para determinar as constantes a0 e a1 para expressão
𝑌 = 𝑎1 𝑋 + 𝑎0 .
177
Solução.
a) Gráfico
Tabela
x p
ano população
1850 1,3x109
1900 1,6 x109
1950 3 x109
1980 4,4 x109
2000 6 x109
b) Linearização
178
𝑋=𝑥
𝑌 = ln 𝑝
{
𝑎1 = 𝑚
𝑎0 = ln 𝑏
c)
Construindo a tabela
x p X= Y=
ano população 𝑥 ln 𝑝
(bilhões)
1850 1,3 1850 ln 1,3 =
1900 1,6 1900 ln 1,6 =
1950 3 1950 ln 3,0 =
1980 4,4 1980 ln 4,4 =
2000 6 2000 ln 6 , 0 =
179
d)
Usando a regressão linear usando os valores da tabela da direita, obtemos os
valores de 𝑎1 = 0,010440 e 𝑎0 = 1,5329 e o 𝑟 = 0,98.
e)
f)
fazendo o processo inverso para achar o b e m, temos:
𝑚 = 𝑎1
portanto,
180
𝑚 = 0,01044
𝑏 = 4,6315
𝑝 = 𝑏𝑒 𝑚𝑥
𝑝 = (4,6315)𝑒 0,01044𝑥
g)
h)
caso 1: usando a expressão: 𝑌 = 𝑎1 𝑋 + 𝑎0 ou 𝑌 = 0,01044𝑋 + 1,5329
Janela de comandos:
>> Y=a1*1970+a0
Y = 22.099
>> P=exp(Y)
P = 3.9583e+009
%b)
%y=b*exp(mx)
X=ano;
Y=log(p);
%d)regressao linear
h=polyfit(X,Y,1);
disp('constante de Y=a1.X+a0')
a1=h(1)
a0=h(2)
%r=corrcoef(x,y) %matlab
r=corr(X,Y) %octave
%g) grafico
figure 1
hold on
ano1=1850:1:2000;
P1=b*exp(m*ano1);
plot(ano1,P1,'b-');
182
Exercícios
F (kN) 24,6 29,3 31,5 33,3 34,8 35,7 36,6 37,5 38,8 39,6 40,4
L (mm) 12,58 12,82 12,91 12,95 13,05 13,21 13,35 13,49 14,08 14,21 14,48