Você está na página 1de 187

1

Apostila
Métodos Computacionais Aplicados À
Engenharia De Materiais
(IT732)
Versão: 1.6

Prof. Luiz Antônio Borges Júnior

Seropédica, abril de 2019


1

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

GNU Octave é uma linguagem computacional, desenvolvida para computação


matemática. Possui uma interface em linha de comando para a solução de problemas
numéricos, lineares e não-lineares, também é usada em experimentos numéricos. Faz
parte do projeto GNU, é um software livre sob os termos da licença GPL. Foi escrito por
John W. Eaton. Possui compatibilidade com MATLAB, possuindo um grande número de
funções semelhantes.
Possui ferramentas extensivas para a resolução de problemas lineares numéricos
comuns de álgebra, cálculo aproximado de raízes de equações não-lineares, funções
ordinárias, polinómios, cálculo de integrais, e integração numérica de equações
diferenciais ordinárias e diferenciais-algébricas. Pode ser facilmente expandido e
adaptado através de funções definidas pelo utilizador, escritas na própria linguagem
presente ou usando módulos dinamicamente carregados escritos em outras linguagens
como C++, em C, em Fortran
Faz parte do projeto GNU, é um software livre sob os termos da licença GPL. Foi escrito
por John W. Eaton. Possui compatibilidade com MATLAB, possuindo um grande número
de funções semelhantes.

Link para site: https://www.gnu.org/software/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

Começando Com Octave.

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.

Figura 1: Octave (GUI)

As janelas podem ser redimensionadas, ocultadas ou exibidas, conforme a


necessidade.
6

Caso queira restaurar ao padrão original. Basta ir no menu


principal/janelas/restaurar layout padrão das janelas.

Tabela 1. Janelas do Octave


Janela principal, permite a entrada de
Janela de Comandos
variáveis e roda programas
Cria arquivos contendo programas e
Janela Editor
funções
Janela de Documentação Fornece a informação de ajuda
Janela Diretório Atual Mostra o diretório atual
Janela de Gerenciador de Arquivos Mostra os arquivos no diretório
Janela de Ambiente de Trabalho Mostra as variáveis utilizadas
Janela de Histórico de Comandos Mostra os comandos usados
Janela de Figuras Saída de gráficos

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

As expressões matemáticas podem ser digitadas na janela de comandos.


Quando a tecla enter é pressionada, o octave calcula e exibi o resultado.
Exemplo:
>> 2 + 1.5
O octave executará a soma e mostrará o resultado
ans = 3.5
Observação: o resultado da última operação matemática executada é guardada
automaticamente na variável ans. Também podemos usa-la nas operações,
exemplo: >> ans + 2.
Vale ressaltar que as vírgulas decimais devem ser substituídas por pontos.
A ordem de avaliação é da esquerda para direita e a ordem de precedência é a
tradicional:
Exponenciação > (multiplicação ou divisão) > (adição ou subtração)

Seguem outros exemplos, usando os parênteses para alterar a ordem das


operações de adição e multiplicação.

>> 7+12/3

ans = 11

>> (7+12)/3

ans = 6.3333

>>

Assim, o octave pode ser usado como uma calculadora. As operações


aritméticas são mostradas na tabela 2.

Tabela 2 – Operações aritméticas


Operação Símbolo Exemplo
Adição + 5+3
Subtração - 5–3
Multiplicação * 5*3
Divisão à direita / 5/3
Divisão à esquerda \ 3 \ 5 (obs. 3\5=5/3)
Exponenciação ^ 5^3 (obs. 53)
9

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

>>

As funções mais usadas são apresentadas na tabela 3.


10

Tabela 3 – funções mais usadas


Comando descrição Exemplo
sqrt (x) raiz quadrada >> sqrt (81)
ans = 9
exp (x) Exponencial (ex) >> exp (5)
ans = 148.4132
abs (x) valor absoluto >> abs(-4)
ans = 4
sign função sinal >> sign(23)
-1, x < 0; ans = 1
sign (x) = 0, x = 0; >> sign(-23)
1, x > 0. ans = -1
>>
round (x) arredonda para o inteiro mais >> round(17/5)
próximo ans = 3
ceil (x) arredonda em direção ao infinito >> ceil (11/5)
ans = 3
fix (x) arredonda em direção a zero >> fix (13/5)
ans 2
floor (x) arredonda em direção ao menos >> floor (-9/4)
infinito ans = -3
rats (x) saída no formato recional >> rats(.33)
ans = 33/100
rem(x,y) resto da divisão de x/y >> rem(8,3)
ans =2
gcd (x,y,z) máximo divisor comum >> gcd(75,45,9)
ans = 3
lcm (x,y,z) mínimo múltiplo comum >> lcm(3,2,9)
ans = 18
factorial (x) fatorial de x! >> factorial(3)
ans =6
log (x) logaritmo natural na base e. >> log (1000)
igual ln x ans = 6.9078
log10(x) Logaritmo na base 10 log10 (1000)
ans = 3
log2 (x) Logaritmo na base 2 >> log2(8)
ans = 3
sin (x) seno de um ângulo x sin (pi/6)
(em radianos) ans=0.5
sind(x) seno de um ângulo x (em graus) sind(30)
ans = 0.5
asin(x) arco seno de x asin(0.5)
ans = 0.52360
As demais funções trigonométricas são escritas da mesma maneira
11

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

>>

Ajuda (help ou doc)


help + nome_comando %ajuda ou informações sobre o comando.
Doc + nome_comando ..%ajuda ou informação sobre o comando online
Exemplos:
12

>> help sin


ou
>> doc sin

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

O formato padrão do Octave é o de ponto fixo com quatro algarismo decimais.


Usando o comando format + “tipo de exibição”, o formato de saída é alterado
para novo formato. As opções de formato são mostrados na tabela 4.

Tabela 4 – Formatação de exibição


comando Exemplo
format short 3.1416
5 dígitos
format short e 3.1416e+00
5 dígitos mais expoente
format short g 3.1416
Otimizar entre o ponto fixo e
exponencial
format short eng 3.1416e+000
é idêntico ao 'short e', mas o expoente
apresentado é divisível por 3
format long 3.14159265358979
16 dígitos
format long e 3.14159265358979e+00
16 dígitos mais expoente
format long g 3.14159265358979
Otimizar entre o ponto fixo e
exponencial
format long eng 3.14159265358979e+000
é idêntico ao 'long e', mas o expoente
apresentado é divisível por 3
format free
13

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.

Exemplo: Calcular a área de um quadrado com lado de 4 cm.


No Octave usamos o operador de atribuição “=” para associar o nome de uma
variável ao valor de uma expressão.

>> lado = 4

lado = 4

>>

Criamos e atribuímos o valor 4 a variável de nome “lado”. Podemos usar a


variável “lado”, como se fosse um número. Para obter o valor da variável, basta
entrar com o nome dela no prompt.
Depois de definido as variáveis, elas podem ser usadas em expressões que
definem outras variáveis.
14

>> area_retangulo = lado^2

area_retangulo = 16

>>

A variável “lado” é elevada ao quadrado e armazenada na variável


area_retangulo.

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:

>> carro1= ‘Camaro’

Carro 1=

Camaro

>>length (carro1)

ans = 6

Concatenar Strings
Para juntar strings, usamos [ ]

>> carro1= ‘Camaro ’

carro 1=

Camaro

>>cor1= ’amarelo’

cor1=

amarelo

>>[ carro1 cor1]

ans=

camaroamarelo
15

Outro exemplo:

>>[ carro1 ; cor1]

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

Variables in the current scope:

ans area_retangulo lado

>>

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”.

>> clear lado

>> who

Variables in the current scope:

ans area_retangulo

>>
16

Classes de variáveis no Octave


Cada variável tem uma classe, também chamada de "tipo", que determina o tipo
de dados que está salvo na determinada variável.
Por exemplo,
double: essa é a classe padrão do Octave, usada para representar
números reais. O nome double vem do termo double precision floating
point. Essa classe consome 8 bytes de memória. Esses números reais
podem estar entre -10308 a 10308.
Single é semelhante a double, mas de precisão simples e consome 4
bytes. Esses números reais podem estar entre -1038 a 1038.
logical: valor booleano, que representa 1 ou 0 (verdadeiro ou falso
respectivamente). Essa classe utiliza 1 byte de memória.
char: representa um carácter e utiliza 2 bytes de memória por letra.
uint8: representa os números inteiros sem sinal, inteiros de 8-bit, que
compreende uma faixa de [0, 255]. Ocupam 1 byte de memória.
uint16: representa os números inteiros sem sinal, inteiros de 16-bit, que
compreende uma faixa de [0, 65 535]. Ocupam 2 bytes de memória.
uint32: representa os números inteiros sem sinal, inteiros de 32-bit, que
compreende uma faixa de [0, 4 294 967 295]. Ocupam 4 bytes de
memória.
int8: representa os números inteiros com sinal, inteiros de 8-bit, que
compreende uma faixa de [-128, 127]. Ocupam 1 byte de memória.
int16: representa os números inteiros com sinal, inteiros de 16-bit, que
compreende uma faixa de [-32 768, 32 767]. Ocupam 2 bytes de memória.
int32: representa os números inteiros com sinal, inteiros de 32-bit, que
compreende uma faixa de [-2 147 483 648, 2 147 483 647]. Ocupam 4
bytes de memória.
17

Constantes

São variáveis com valores pré-definidos.


Exemplo:
pi Constate pi = 3,1415...
beep Faz um beep no computador
i ou j Raiz quadrada de -1
inf Infinito
realmin Menor número positivo do programa
realmax Maior número positivo do programa

Arquivos de Programa ou Script files


Os arquivos de programa (script files), normalmente chamados de script, são arquivos
que contêm uma sequência de comandos do Octave. Quando esse script é executado
(rodado), o Octave executa os comandos na ordem em que eles são escritos, como se
eles tivessem sido digitados na janela de comandos.
Os scripts podem ser digitados no editor do Octave e salvos com extensão .m. Por isso,
esses programas são também chamados de arquivos (M-files).

Figura 5
18

Figura 6

Geralmente, o programa pode ser dividido em três parte 1) entrada de dados 2)


execução dos cálculos e 3) saída dos resultados.

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

Na primeira linha do programa, colocamos uma observação ou comentário


dizendo o que este programa faz, para futuras identificações.
Quando digitamos o símbolo “%”, o texto que vem a frente serve somente de
comentário e aparece na tela na cor verde. Esse texto não é usado pelo Octave
durante a execução.
Digite o seguinte script no editor:

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
>>

Parabéns! Você escreveu e executou seu primeiro programa no Octave.

Agora, vamos melhorar o programa.


Vamos colocar um “;” para cada variável, exceto para massa.
20

Rode o programa novamente.


Na janela de comando, temos:

Chegamos ao mesmo resultado, entretanto, com o uso do ponto-vírgula, os


valores intermediários são omitidos na janela de comandos. Em outras palavras,
o uso do ponto-virgula só não apresenta o valor na janela de comando, mas as
variáveis são criadas normalmente.

Alguns comandos úteis:

Normalmente, os scripts M-files são iniciados com os seguintes comandos:

clc; % limpa tela


clear; % apaga todas as variáveis
close; % fecha todas as janelas
more off; % a tela rola livremente

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.

Quando usamos ponto-vírgula para separar os números, chamamos de vetor


coluna.

Tamanho do vetor
Para determinar o tamanho vetor, use o comando length(x)
28

Criando Um Vetor Com Valores Regulares


Usando o operador dois pontos (:), pode criar automaticamente vetores com
valores regulares espaçados dentro de um certo intervalo. A sintaxe do operador
é:
Valor_inicial : incremento : valor_final
Exemplo:
1) Definir um vetor x no intervalo de 0 a 10 com incremento de 2:

2) definir um vetor com nome de “resultado”, começando com 23, e diminuindo


3 unidades até -15.

Como Acessar os Elementos de um Vetor


A posição de cada elemento num vetor é chamado de índice, começando com o
índice 1.
Exemplo:
>> vetor_A = [ 325 245 -0.332 2.3e3]
Índice: (1) (2) (3) (4)

O índice é colocado entre parênteses após o nome do vetor, por exemplo:


O segundo valor do vetor é:
29

Outros exemplos:

Também é possível usar o índice para mudar os valores dos elementos.

O índice de um vetor pode ser armazenado numa variável.

Transpor um vetor
Podemos definir um vetor coluna em vetor linha e vice-versa, usando ‘ ou a
função transpose(x).
30

Vetor Linha Muito Grande


Caso ao digitar muitos valores para um vetor linha e ultrapassa o limite do
monitor, podemos usar o recurso ... (três pontos) e continuar na linha de baixo.
Exemplo:
31

Operações Aritmética com Vetores, Elementos por Elementos.


Soma e Subtração

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

Multiplicação ou Divisão Por Um Número Escalar

Multiplicação ou Divisão Entre Vetores


Quando queremos fazer uma multiplicação ou divisão elemento por elemento
entre dois vetores, deve-se usar um ponto (.) antes do operador * ou /, ou seja,
.* ou ./ Vale ressaltar, que ambos os vetores devem possuir as mesmas
dimensões e ambos vetores devem ser, ao mesmo tempo, vetores linhas ou
vetores coluna.
33

Exponenciação
Na exponenciação de vetores, deve-se usar um ponto (.) antes do operador ^,
ou seja, .^.
Exemplo:

Função Trigonométrica e Função Transcendental


Nas funções trigonométricas ou outras funções transcendentais, a operação é
executada elemento por elemento.
34

Resumo de operações aritmética com vetores, elementos por elementos


Operação Forma Forma
escalar vetorial
(elemento por elemento)
adição + +
subtração - -
multiplicação * .*
divisão / ./
exponenciação ^ .^

Operações com conjuntos


operação descrição Exemplos:
A= [1 2 3 4 5]
B= [4 5 6 7 8]
union (A, B) 𝐴∪𝐵 >> C = union(A,B)
C=
1 2 3 4 5 6 7 8
>>
intersect (A,B) 𝐴∩𝐵 >> C = intersect(A,B)
C=
4 5
>>
setdiff (A,B) 𝐴−𝐵 >> C = setdiff (A,B)
C=
1 2 3
>>
setxor (A,B) (𝐴 ∪ 𝐵) − (𝐴 ∩ 𝐵) >> C = setxor (A,B)
C=
1 2 3 6 7 8
>>
35

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

Resultado na janela de comandos:

Lista de Exercícios

Exercício 1:
Dois vetores do Octave, x e y, são definidos da seguinte forma:

Determine os valores das expressões a seguir, sem usar o Octave/MatLab, e


depois confirme os resultados usando o Ocatave/MatLab. Se uma expressão
não for permitida, explique a razão.
37

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

Título, Rótulos e outros.


Depois do comando plot, para colocar o título do gráfico, pode-se usar o
comando title (‘texto’). E para rotular os eixos, pode-se usar os comandos
xlabel(‘texto’) e label(‘texto’).

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

O comando axis ([x_menor x_maior y_menor ymaior]) especifica o menor e o


maior valor dos eixos x e y, respectivamente. Mais detalhes no uso do help.

Tabela de comandos básico


comando descrição
axis (‘ij’) valores do eixo Y em ordem descrecente
axis (‘xy’) valores do eixo Y em ordem crescente (padrão)
axis (off) elimina os eixos
axis ([ Xmin Xmax Ymin Ymax]) define escalas p/ os eixos X eY
axis (‘auto’) escala automática
xlabel(‘texto’) rótulo do eixo X
ylabel(‘texto’) rótulo do eixo Y
grid on ou off – liga ou desliga grade
title (‘texto’) título do gráfico
legend (‘texto1’, ‘texto2’,...) legenda das curvas no gráfico
text(x,y,’texto’) insere texto na posição X,Y
gtext(‘texto’) insere texto onde o mouse for clicado.
clf apaga a figura atual
close fecha as janelas gráficas
figure (n) ativa a janela da figura (n)
box on ou off – liga ou desliga moldura
hold on mantém o gráfico atual (off – não mantém)
pause (n) pausa n segundos
44

Mais de Uma Curva no Mesmo Gráfico

Toda vez que o comando plot é executado, o gráfico é refeito, substituindo o


anterior. Para acrescentar uma nova curva, mantendo a curva anterior, é
necessário usar o comando hold on, antes do segundo plot, para conservar os
eixos existentes. Já o comando hold off faz com que os eixo não sejam mais
mantidos. Exemplo:

O comando legend (‘texto1’,texto2’,...) produz uma legenda no gráfico e mostra


uma correspondência com estilo linha e o texto da legenda, na ordem de entrada.
45

Mais de Um Gráfico na Mesma Figura


Usando a função subplot, é possível colocar vários gráficos num só janela,
através de três argumentos, formando uma espécie de painel, onde temos o
número de linhas (n_linhas), o número de colunas (n_colunas) e a posição que
determinado gráfico vai ocupar nesse painel.
subplot (n_linhas , n_colunas , posição)

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.

Posição 1 Posição 2 Posição 3


y = 3x y = -3x y = x2
Posição 4 Posição 5 Posição 6
y = 1/x y = -1/x y = -x2
46
47

Vários Gráficos Em Janelas Diferentes

A primeira janela é criada automaticamente com o comando plot, bem como, os


comandos de configurações são aplicados nessa primeira janela.

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.

Caso queira alterar a configuração de uma determinada janela já criada, para


torna-la ativa, pode-se usar o comando figure 1 para primeira janela, figure 2
para segunda janela, figure 3 para terceira janela, e assim por diante.

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

Salvando os gráficos como imagem jpg

Para salvar os gráficos como um arquivo imagem.jpg, use o comando:


saveas(1,'nome.jpg');
onde:
1 ... é o número da janela figure. 1 para primeira janela criada por alguma
função que gera gráfico, 2 para segunda janela criada pela função figure, 3
para terceira janela criada pela função figure, etc.
nome ... é nome do arquivo imagem com extensão jpg.
49

Outros Tipos De Gráficos


50
51

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.

(b) Qual será́ a distância atingida pela


bola se ela for lançada com um
parâmetro horizontal de 1,50 m e um
parâmetro vertical de 1,25 m?

(c) ) Uma turma que está usando a


atiradeira pretende manter o
parâmetro horizontal constante em
1,50 m e ajustar o parâmetro vertical
para que a bola atinja a distância
desejada. Supondo que o valor da constante de lançamento seja k = 45
m-1 ,escreva um script do Octave/MatLab para gerar um gráfico, para uso
da turma, que mostre a distância alcançada pela bola em função do
parâmetro vertical. O gráfico deve ter um título, e os eixos devem estar
corretamente rotulados. Sua resposta deve incluir o script e o gráfico
criado.

(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:

Para as duas atiradeiras, escreva um sript do Octave para calcular a distância


mínima, distância máxima, distância média e um histograma com divisões de 2m
de largura que cubra toda a faixa de valores observados.
Se você tivesse que escolher uma das atiradeiras para um teste, no qual fosse
possível ajustar os parâmetros de lançamento, qual das duas você escolheria?
Use os parâmetros estatísticos para justificar sua escolha.

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.

(b) Use a função fplot para plotar o polinômio no intervalo de 0 a 20.

(c) Amplie em ambos gráficos para observar os pontos em que intercepta o


eixo x, e estimar o valor das raízes, e compare os resultados entre os
gráficos.

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.

(a) Escreva um script para plotar a força em função do alongamento para as


três amostras no mesmo sistema de eixos. Use tipos de linha e símbolos
diferentes para as três amostras, para que as curvas e os pontos
experimentais possam ser distinguidos quando o gráfico for plotado em
preto e branco. O gráfico deve ter título, os eixos devem estar rotulados
com o nome e as unidades das variáveis, e uma legenda identificando
as curvas com suas respectivas amostras.
55

(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

Com base nos resultados das medidas de alongamento em função da


força aplicada, quais você acredita que sejam as dimensões das
amostras A, B e C? Justifique sua resposta.

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)

a) Construa um gráfico 𝑉 𝑣𝑒𝑟𝑠𝑢𝑠 𝑡, onde o tempo é a abscissa, usando uma linha


contínua ligando os pontos para melhor visualização (o ideal seria somente os
pontos experimentais, sem conexão dos pontos). Verifique se a curva é linear ou
não linear.
b) O fenômeno é do tipo: 𝑉 (𝑡) = 𝑏𝑒 𝑎∙𝑡 , onde 𝑎 e 𝑏 são constantes. Linearize a
função dada, aplique nos pontos da tabela e construa o gráfico log(𝑉 ) 𝑣𝑒𝑟𝑠𝑢𝑠 𝑡 .
c) Construa um gráfico usando o comando semilogy.

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)

capacitor.m (... continuação)


...
%b)
figure
Y= log(V);
plot(t,Y, '-bo');
xlabel('tempo, ms');
ylabel('ln (V)');
grid on;
58

c)

3,5 8,0 14,1 31,0 80,0 180,0 270,0


V
ou ou ou ou ou ou ou
(µVolt)
3,5x100 8 x100 1,41 x101 3,1 x101 8 x101 1,8 x102 2,7 x102

X=t
5,0 15,0 20,5 30 41,5 49,5 55,0
(ms)

capacitor.m (... continuação)


...
%c)
figure
semilogy(t,V,'-gp');
xlabel('tempo, ms');
ylabel('volt, microV');
grid on;
59

Observação: Os valores de A e B podem ser obtidos usando a técnica de


Regressão Linear, que será vista mais adiante.

Exemplo 2 (gráfico di-logarítmico ou di-log)


Num experimento, as correntes que passava por um filamento de lâmpada
incandescente foram medidas para diversas tensões aplicadas. Os resultados
são mostrados na tabela abaixo.
I
22 60 90 180 330 520
(mA)
V
0,6 2,5 4,0 11,5 26,5 49,0
(volt)

a) Construa um gráfico 𝐼 𝑣𝑒𝑟𝑠𝑢𝑠 𝑉, onde a tensão (V) é a abscissa, usando uma


linha contínua ligando os pontos para melhor visualização (o ideal seria somente
os pontos experimentais, sem conexão dos pontos). Verifique se a curva é linear
ou não linear.
b) O fenômeno é do tipo: 𝐼 (𝑉 ) = 𝑏𝑉 𝑎 , onde 𝑎 e 𝑏 são constantes. Linearize a
função dada, aplique nos pontos da tabela e construa o gráfico
log(𝐼 ) 𝑣𝑒𝑟𝑠𝑢𝑠 log(𝑉 )
c) Construa um gráfico usando o comando loglog.
60

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

lampada.m (... continuação)


...
%b)
Y=log(I);
X=log(V);
figure
plot(X,Y,'-bo');
xlabel('ln (V)');
ylabel('ln (I)');
grid on;

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

lampada.m (... continuação)


...
%c)
figure
loglog(V,I,'-go');
xlabel('Tensao, V');
ylabel('Corrente I, mA');
grid on;
63

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')

Podemos usar a função da seguinte forma para x=3 e depois x=4:


>> t(3)
ans = 13
>>
>> t(4)
ans = 20

Encontrando Raízes de Uma Função


Uma função de uma única variável pode ser escrita na forma:
f(x)=0
A solução dessa função, também chamada de raiz, é um valor numérico de x
que satisfaz a função igual zero. Graficamente falando, a solução é o ponto onde
a função f(x) cruza ou toca o eixo x. Uma função pode ter uma ou várias raízes,
ou mesmo não ter nenhuma.
65

O processo de solução numérica de uma equação é diferente do procedimento


usado na obtenção de uma solução analítica. Uma solução analítica é obtida
com a dedução de uma expressão que levar a um valor numérico exato. Uma
solução numérica é obtida em um processo que começa com a determinação de
uma solução aproximada e é seguido de um procedimento numérico no qual se
determina uma solução mais precisa.
Inicialmente, construímos um gráfico da função, e tomamos, visualmente ou
graficamente, um valor de x próximo a raiz; ou um intervalo [a,b] que contem o
valor da raiz. Esse(s) valor(es) serão usado(s) como ponto de partida (chute) nos
processos numéricos para encontrar a raiz.
No Octave/Matlab podemos usar a função fzero para encontrar o zero de uma
função unidimensional. O algoritmo usado é uma combinação do método da
bissecção e da interpolação quadrática inversa.

onde, x é solução, que é um escalar; ‘function’ é função cuja raiz é desejada; e


x0 é um chute ou intervalo, que são valores de partida.
Exemplo 1.
Encontre a raiz da função 𝑓 (𝑥 ) = 𝑥𝑒 −𝑥 − 0,2 = 0.
Primeiro vamos fazer o gráfico da função.

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
>>

Observa-se que a raiz encontrada foi 2,5426.


A função fzero fornece apenas uma raiz, aquele que é mais próximo da
aproximação inicial. Assim, se houver mais de uma raiz é preciso fazer uma
chamada a fzero para cada um deles, com diferentes aproximações iniciai.
Para encontrar outra raiz, podemos usar um outro valor ou um intervalo que
contém a raiz desejada, como [0,2].
67

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 − 𝑒 −𝑥 .

2) Determine a raiz positiva do polinômio 𝑥 3 + 3,8𝑥 2 − 24,4 .


Resp.:2,7

3) A localização 𝑥̅ do centroide de um setor circular é


dada por:
2𝑟 sin 𝜃
𝑥̅ =
3𝜃
1
Determine o ângulo 𝜃 para o qual 𝑥̅ = 2 e 𝑟 = 1.

Resp. 1,2757

4) A área S da superfície lateral de um cone é dada por:

𝑆 = 𝜋 √𝑟 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

5) Quando se calcula o pagamento de uma hipoteca, a relação entre o montante


do empréstimo 𝐸𝑚𝑝, o pagamento mensal 𝑀𝑝𝑎𝑔, a duração do empréstimo em
anos 𝐴𝑛𝑜𝑠 e a taxa de juros anual 𝑇𝑎𝑥𝑎, é dada pela equação (equação de
anuidade):
68

𝑇𝑎𝑥𝑎 ∙ 𝐸𝑚𝑝𝑟
𝑀𝑝𝑎𝑔 =
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%)

6) A resistência elétrica 𝑅(𝑇) de um termistor varia com a temperatura de acordo


com:
𝑅(𝑇) = 100(1 + 𝐴𝑇 − 𝐵𝑇 2 )
Onde 𝑅 é dada em Ω, 𝐴 = 3,90802 × 10−3, 𝐵 = 0,580195 × 10−6 °𝐶 −2 e 𝑇 é a
temperatura em graus Celsius. Determine a temperatura correspondente a uma
resistência de 200 Ω.
Resp. 266,4220

7)

Resp. 0,463 e 1,124


69

8)

Resp. 422,9531

9)

10) De acordo com o princípio de Arquimedes,


a força de empuxo agindo em um objeto
parcialmente imerso em um fluido é igual ao
peso deslocado pela porção submersa do
objeto.
Um flutuador esférico com massa 𝑚𝑓 = 70 𝑘𝑔 e
diâmetro de 90 𝑐𝑚 é colocado no oceano (a
densidade da água do mar é de
aproximadamente 𝜌 = 1030 𝑘𝑔/𝑚3 ). A altura ℎ
da porção do flutuador acima da água pode ser
70

determinada com a solução de uma equação que


iguala a massa do flutuador à massa da água
deslocada pela porção submersa do flutuador:
𝜌𝑉𝑐𝑎𝑠𝑐𝑎 = 𝑚𝑓

onde, para uma esfera de raio 𝑟, o volume de uma


casca com profundidade 𝑑 é dada por:
1
𝑉𝑐𝑎𝑠𝑐𝑎 = 𝜋𝑑 2 (3𝑟 − 𝑑)
3
Calcule a altura ℎ.
Resp. 0,6580

11) De acordo com o princípio de


Arquimedes, a força de empuxo agindo em
um objeto parcialmente imerso em um fluido
é igual ao peso deslocado pela porção
submersa do objeto.
Uma boia na forma de um cone cortado com
massa 𝑚 = 50 𝑘𝑔 é colocada no oceano (a
densidade da água do mar é de
aproximadamente 𝜌 = 1030 𝑘𝑔/𝑚3 ). Um
equipamento com massa 𝑀 é colocado
sobre a boia, conforme mostrado na figura. A
altura ℎ da porção da boia acima da água
pode ser determinada com a solução de uma equação que iguala a massa total
(𝑚 + 𝑀) à massa de água deslocada pelo volume 𝑉 da boia que se encontra
submerso:
𝑚 + 𝑀 = 𝜌𝑉
O volume de um cone cortado com raios 𝑎 e 𝑏 e
altura 𝐻 é dado por:
1
𝑣= 𝜋𝐻(𝑎2 + 𝑎𝑏 + 𝑏2 )
3
Escreva a equação em termo de h, e
(a) Determine a maior massa 𝑀 que pode ser
colocada sobre a boia sem que 𝑀 toque a água (a
massa para qual ℎ = 0).
(b) Escreva um script em Octave que determine (usando fzero) o valor de ℎ para
diferentes valores de 𝑀, começando com 𝑀 = 0 e usando incrementos de 1 kg
até que se atinja a máxima massa 𝑀 permitida. Em seguida, trace um gráfico de
ℎ 𝑣𝑒𝑟𝑠𝑢𝑠 𝑀.
71

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

Para criar uma matriz no Octave/Matlab, basta digitar os números entre


colchetes. Na mesma linha, os números separados por espaços ou vírgula. Uma
nova linha é acrescentada usando ponto-virgular ou enter. Exemplo:
74

Índices (Como Acessar os Elementos de uma Matriz)


Os índices são usados para acessar os elementos no interior da matriz. Por
exemplo. O elemento situado na linha i e na coluna j de uma matriz A é chamado
de aij. Na notação no Octave/Matlab, A(i,j) significa o elemento situado na linha
i na coluna j da matriz A.
𝑎11 𝑎12 𝑎13 𝑎14
𝑎
𝐴 = [ 21 𝑎22 𝑎23 𝑎24 ]
𝑎31 𝑎32 𝑎33 𝑎34

Exemplo:

Substituir um determinado valor na matriz


75

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

Soma, Subtração, Multiplicação ou Divisão Por Um Número Escalar

Soma E Subtração Entre Matrizes


As matrizes devem possuir o mesmo tamanho.
77

Multiplicação ou Divisão Entre Matrizes


Quando queremos fazer uma multiplicação ou divisão elemento por elemento
entre duas matrizes, deve-se usar um ponto (.) antes do operador * ou /, ou
seja, .* ou ./ Vale ressaltar, que ambas matrizes devem possuir as mesmas
dimensões.

Exponenciação
Na exponenciação de matrizes, deve-se usar um ponto (.) antes do operador
^, ou seja, .^.
78

Função Trigonométrica e Função Transcendental


Nas funções trigonométricas ou outras funções transcendentais, a operação é
executada elemento por elemento.

Resumo de operações aritmética com matrizes, elementos por elementos

Produto entre Matrizes


A operação de multiplicação entre duas matrizes no Octave obedece a regra da
álgebra linear. Se A e B são duas matrizes, A*B pode ser feita se o número de
coluna de A for igual ao número de linha de B. Exemplo: se A é uma matriz 3x2
e B é uma matriz 2x4, então o produto C= A*B tem como resultado uma matriz
3*4.
79

Matriz Transposta
Usar o comando transpose ( ) ou ‘.
80

Matriz Identidade
Uma matriz identidade é definida como uma matriz da forma:

Onde os elementos da diagonal principal são todos 1 e outros elementos são


zero. Numa multiplicação de uma matriz qualquer com uma matriz identidade,
esta funciona como elemento neutro da multiplicação.

Para criar uma matriz identidade no Octave/Matlab use o comando eye ( ):

Matriz Inversa
A inversa de uma matriz quadrada A, representada como A-1, de forma que:

Para determinar a matriz inversa no Ocatave/Matlab use o comando inv( ) ou


elevar a -1
81

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).

Matrizes com elementos iguais a 0


Para criar uma matriz com m linha e n colunas na qual todos os elementos são
o número 0, usa-se o comando zeros(m,n).

Matrizes com elementos iguais a 1


Para criar uma matriz com m linha e n colunas na qual todos os elementos são
o número 1, usa-se o comando ones(m,n).
82

Determinante
Usa-se o comando det(A) para calcular a determinante da matriz A

Solução de Sistemas de Equações Lineares


O Octave/Matlab possuem funções residente que podem ser utilizadas para
solucionar sistemas de equações lineares, semelhante ao exemplo abaixo:
4𝑥 − 2𝑦 − 3𝑤 + 6𝑧 = 12
−6𝑥 + 7𝑦 + 6,5𝑤 − 6𝑧 = −6,5
{
𝑥 + 7,5𝑦 + 6,25𝑤 + 5,5𝑧 = 16
−12𝑥 + 22𝑦 + 15,5𝑤 − 𝑧 = 17
Podemos reescreve o sistema acima na forma matricial [a] [x] = [b], onde [a] é
a matriz de coeficientes (n x n), [x] é um vetor coluna (n x 1) com as incógnitas e
[b] é um vetor coluna (n x 1) de constantes:

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

Método 1: Divisão à Esquerda \


A divisão a esquerda pode ser usada para resolver um sistema de n equações
escrita na forma matricial [a] [x] = [b], onde [a] é a matriz de coeficientes (n x n),
[x] é um vetor coluna (n x 1) com as incógnitas e [b] é um vetor coluna (n x 1) de
constantes, onde a solução é:
x=a\b
83

Exemplo:

Método 2: Divisão à direita/


A divisão a esquerda pode ser usada para resolver um sistema de n equações
escrita na forma matricial [a] [x] = [b], onde [a] é a matriz de coeficientes (n x n),
[x] é um vetor coluna (n x 1) com as incógnitas e [b] é um vetor coluna (n x 1) de
constantes, onde a solução é:
x=b/a
Exemplo:
84

Observação: Note que a matriz [a] usada na divisão à direita é a transposta da


matriz usada nos cálculos com a divisão à esquerda.

Método 3: Usando a Operação Inversa

Fazendo a multiplicação por [a]-1 (inversa de [a]), temos:


[a] [x] = [b]
[a]-1 [a] [x] = [a]-1 [b]
como [a]-1[a]=[I] (matriz identidade),
[I] [x] = [a]-1 [b]
sabendo que a matriz identidade funciona como elemento neutro na
multiplicação de matrizes, [I] [x] = [x], temos:

[x] = [a]-1 [b]

No Octave/Matlab, a inversa da matriz [a] pode ser obtida com elevação da


matriz a -1 ou como comando inv(a), que quando multiplicado pelo vetor [b], gera
a solução do sistema. Exemplo:
85

ou
86

Exercícios

1) Resolva os seguintes sistemas de equações


a) b)

c) d)

e) f)

2)
87

3)

4) Calcule os valores das forças axiais envolvidas,


sabendo que, a força axial 𝐹𝑖 em cada um dos 21
membros da treliça conectada por pinos,
mostrado na figura, pode ser calculada com a
solução do seguinte sistema de 21 equações:
88

Estudo de caso

Imagem no Octave

O Octave possui um pacote de comandos para processamento de imagem. Esse


pacote é chamado de “image” e é necessário carrega-lo com comando:

Imagem Digital
Observe a imagem da figura 1:
Figura 1
89

Vamos dividir essa imagem em 64 partes (8 linhas e 8 colunas), mostrado na


figura 2.
Figura 2

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

Vamos escrever a figura 3 como uma matriz chamada de barco 1. Depois


usaremos o comando imshow ( ) para mostrar a imagem formada.

>> barco1 = [
11101111
11100111
11000011
10000001
11101111
00000000
10000001
1 1 1 1 1 1 1 1];
>> imshow (barco1)
>>
90

A imagem gerada é mostrada na figura 4.


figura 4

Observamos que há perda de informação entre da figura 1 para figura 4. Essa


perda de informação é devido ao processo de digitalização, onde uma imagem
qualquer analógica é transformada em pixels (digital). Para minimizar esse efeito
de perda de informação, podemos usar um número maior de pixels na
digitalização.
Quanto maior a quantidade de pixels, melhor a qualidade ou detalhe da
informação. A figura 5 mostra a imagem do barco com 2 500 pixels (50x50) ou
2,5 k-pixels; e a figura 6 mostra a mesma imagem com 640 000 pixels (800x800)
ou 640k-pixels.
Figura 5: 50x50 pixels Figura 6: 800x800 pixels

A figura 5 e 6 são os arquivos “barco_50x50.tif” e “barco_800x800.tif”,


respectivamente.
Para carregar um arquivo imagem no Octave usamos o comando:
variavel=imread(‘arquivo.tif’).
Exemplo:
>> barco2=imread('barco_50x50.tif');
>> barco3=imread('barco_800x800.tif');
>>
91

As imagens ficam armazenadas nas variáveis barco2 e barco3, respectivamente.


Como estas variáveis são matrizes, podemos fazer operações matemáticas com
elas. Para mostrar as imagens, usamos o comando imshow(variável).
Exemplo:
>> imshow(barco2)
>>figure
>> imshow(barco3)
>>

Existem outros comandos semelhantes ou alternativas ao imshow, que são:


• imagesc( )
• imtool( )
• image( )

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).

Inversão de imagem (negativo de imagem)


Por exemplo, podemos inverter as cores da imagem do barco3. Basta fazer
“1-matriz_imagem” (uns viram zeros e zeros viram uns).

>> barco3_inv=(1-barco3);
>> imshow(barco3_inv);
>>
92

Figura 7

Imagens de Intensidade ou Escala de Cinza (Nível de Cinza)


São matrizes 2D, onde o valor de cada pixel representa a intensidade daquele
pixel. A escala de cinza de 8 bits ou 2 8 = 256 diferentes tons de cinza ou níveis
de cinza, variando do zero para preto e 255 para branco.

Vamos denominar “L”, o tom de cinza ou nível de cinza da imagem naquele


ponto. O menor valor de é Lmin, e o maior Lmax. O intervalo [Lmin, Lmax] é
denominado de escala de cinza da imagem. Geralmente, Lmin = 0 para preto e
Lmax = n-1 para branco, onde n é um número de níveis baseado na potência de
2b. Exemplos: 24=16 níveis (p/ b=4 bit); 27=128 níveis (p/ b=7bit); 28=256 níveis
(p/ b=8 bit).

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

255 0 0 100 255 0 0 255 100 0 0 255


255 200 200 200 100 255 255 100 200 200 200 255
255 200 200 200 200 100 100 200 200 200 200 255
255 200 200 0 200 200 200 200 0 200 200 255
255 200 200 200 0 0 0 0 200 200 200 255
255 200 200 200 200 200 200 200 200 200 200 255
255 50 200 200 200 200 200 200 200 200 50 255
255 200 50 50 50 50 50 50 50 50 200 255
255 200 200 50 50 50 50 50 50 200 200 255
255 200 200 50 50 50 50 50 50 200 200 255
255 200 50 50 50 50 50 50 50 50 200 255
0 0 50 50 50 50 50 50 50 50 0 0
255 0 50 50 50 50 50 50 50 50 0 255
255 255 255 0 0 255 255 0 0 255 255 255
255 255 0 0 0 255 255 0 0 0 255 255
255 255 255 255 255 255 255 255 255 255 255 255
];
imshow(minion1);

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.

minion2=uint8(minion1); % double para inteiro de 8 btis sem sinal.


imshow(minion2);

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

Entretanto, ao efetuar as operações de adição ou subtração, deve-se estar


atento à possibilidade de overflow ou underflow de inteiro, ou seja, ultrapassa o
limite máximo ou ficar abaixo do limite mínimo. Uma imagem inteira de 8 bits
pode somente conter valores entre 0 e 255.
Exemplo:
A imagem é aumentada em 200 unidades, mas o valor máximo será 255 e a
imagem ficará supersaturada. Subtraindo 200 unidades dessa imagem
supersaturada, não será possível restaurar aos valores originais, e nesse caso,
há perda de informação.
95

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.

IM1 = imread ('asa.tif');


IM1_d = double(IM1); %unit8 não aceita números fracionados.
limiar=180;
IM2=IM1_d/limiar;
IM3=IM2.^2;
IM4=uint8(IM3*limiar);
imshow(IM1);
figure;
imshow(IM4);

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

Existem outras formas de ajuste de intensidade como transformação logarítmica,


exponencial, correção gama, e outras.

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);

Obs. limiar = 0.5 = 128/255.


97

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

Uma outra forma de obter o negativo da imagem, é usar comando


imcomplement( ), que executa as mesmas operações internamente.

IM_1 = imread ('ceramica_cinza.jpg');


negativo= imcomplement(IM_1);
imshow(IM_1);
figure;
imshow(negativo);

Imagens RGB ou de Cores Reais


São matrizes tridimensionais (3D), ou planos sobrepostos, de forma, que a
primeiro plano é atribuída a cor primária vermelha (Reed), segundo a cor primária
verde (Green), e terceiro a cor primária azul (Blue). Esses planos são chamados
de canal vermelho, canal verde e canal azul.
As cores apresentadas em uma imagem são, quase sempre, uma mistura das
componentes de cor dos três canais. Em outras palavras, três valores de
intensidade são atribuídos na mesma posição, cada intensidade é de um canal
diferente. Geralmente, o valor de intensidade varia de 0 a 255 ou 8 bit.
Os pixels são endereçados por 𝑚𝑎𝑡𝑟𝑖𝑧(𝐿, 𝐶, 𝑐𝑎𝑛𝑎𝑙) ou 𝑚𝑎𝑡𝑟𝑖𝑧(𝑥, 𝑦, 𝑐𝑎𝑛𝑎𝑙). Por
exemplo, um pixel na cor amarela na posição (1,1) seria uma mistura dos três
planos.

Figura 13

Exemplo 1:
%pixel amarelo

Im_a (1,1,1) = 255; % canal vermelho


Im_a (1,1,2) = 255; % canal verde
Im_a (1,1,3) = 0; % canal azul
Im_a=uint8(Im_a);
imshow(Im_a);
99

Exemplo 2:
% pixel amarelo e laranja
%pixel verde escuro e cinza

Im_a (1,1,1) = 255; % canal vermelho


Im_a (1,1,2) = 255; % canal verde
Im_a (1,1,3) = 0; % canal azul

Im_a (1,2,1) = 255; % canal vermelho


Im_a (1,2,2) = 128; % canal verde
Im_a (1,2,3) = 0; % canal azul

Im_a (2,1,1) = 12; % canal vermelho


Im_a (2,1,2) = 69; % canal verde
Im_a (2,1,3) = 1; % canal azul

Im_a (2,2,1) = 150; % canal vermelho


Im_a (2,2,2) = 150; % canal verde
Im_a (2,2,3) = 150; % canal azul

Im_a=uint8(Im_a);
imshow(Im_a);

Figura 14
100

Exemplo 3 – outra forma de escrever a matriz é:


% pixel amarelo e laranja
%pixel verde escuro e cinza

% 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

Figura 15 – Imagem colorida em seus canais de cor vermelha(R), Verde (G)


e azul (B).

Cores nos canais modificado


Para dar cor nos canais e deixar um pouco mais visual a figura anterior, vamos
criar 3 matrizes (3D) da classe inteira, inicialmente com zeros. Essas matrizes
serão denominadas verm, verd e azu para cada canal. Depois, a camada 1 da
matriz verm será igual ao canal vermelho da imagem; a camada 2 da matriz
verde será igual ao canal verde da imagem; e a camada 3 da matriz azul será
igual ao canal azul da imagem.

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');

Figura 16 – Imagem colorida em seus canais de cor vermelha(R),


Verde (G) e azul (B).
103

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);

outros comandos de conversão:


• mat2gray
• im2uint8
• im2uint16
• im2double
• im2bw

Figura 17
colorida escala cinza

Carregar e salvar imagens.


Para carregar uma imagem no Octave, podemos usar o comando imread ( ):
variavel = imread (‘nome_da_imagem.ext’);
Para mostrar a imagem após carrega-la, usamos o comando:
104

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

Importar e Exportando Dados Tipo ascii


O Octave possui vários comandos para importar e exportar dados. Os comandos
mais usados são o load e save para dados tipo ascii; os comandos dlmread e
dlmewrite para dados de matrizes; e fprintf para texto e números formatados.

Comandos load e save


São comando usados para exportar e importar dados de um arquivo tipo ascii.

• comando load
load arquivo.ext -ascii;
Exemplo:
importar os dados do arquivo dados1.txt para o Octave

No Octave:

automaticamente é criado uma variável dados1:


107

• 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

Comandos dlmread e dlmwrite


São comando usados para exportar e importar valores numéricos no formato de
matriz.

• 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

Exibindo Resultados na tela


A saída do comando fprintf pode ser formatada contendo texto e números juntos.
fprintf ( ‘ texto ‘ )
110

Para formatar podemos usar os seguintes caracteres:


%% símbolo porcentagem
\\ backslash
\n nova linha
\t tabulação horizontal
\v tabulação vertical
\b backspace
\r retorno na mesma linha
\a alarm

exemplos:

fprintf ( ‘TEXTO1 %y.y TEXTO2’, variável )

Para apresentar o valor de uma variável no texto, usamos o símbolo %.


Onde:
TEXTO1 e TEXTO2 ... são textos
% ... local, onde o valor da variável será mostrado
111

y.y ... formatação do número


variável ... O nome da variável, cujo valor será mostrado no texto.

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

precisão Operador de precisão, que define junto caráter de controle

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:

Podemos usar mais variáveis ao mesmo tempo.

Podemos usar com vetores


113

• Exportando com comando fprintf


Para gravar os dados em um arquivo, precisamos seguir três passos:
1. Criar/abrir o arquivo (comando fopen);
varialvel_temporario = fopen( ‘arquivo.txt’, ‘w’);
ou
varialvel_temporario = fopen( ‘arquivo.txt’, ‘a’);
o A opção ’w’ cria um arquivo novo, vazio, em que serão escritos
os dados; se o arquivo já existir, os dados anteriores são
apagados e os novos dados são escritos dentro do arquivo.
o A opção ’a’ acrescenta texto ao final do arquivo existente.
o A variável_temporaria é uma variável que aponta para
arquivo.txt; uma vez aberto, não precisamos mais nos referir a
esse nome, mas sim ao apontador que associamos a ele.

2. Gravar/acrescentar os dados no arquivo (comando fprintf);


fprintf ( variável_temporario, ‘texto %.1f \n’ , variável)

3. Fechar o arquivo (comando fclose).


fclose ( variável_temporario )
o fclose grava os dados que estão na variável_temporaria
para arquivo.txt, e, em seguida, fecha o arquivo.txt

exemplo 1:

exemplo 2
114

• Importar com fscanf


Para ler os dados de um arquivo, precisamos seguir três passos:

1. Abrir o arquivo (comando fopen);


varialvel_temporario = fopen( ‘arquivo.txt’, ‘r’);
ou
varialvel_temporario = fopen( ‘arquivo.txt’, ‘r’,dim);

o A opção ’r’ abre arquivo.txt para leitura.


o o A variável_temporaria é uma variável que aponta para
arquivo.txt; uma vez aberto, não precisamos mais nos
referir a esse nome, mas sim ao apontador que
associamos a ele.
o dim especifica a dimensão da leitura ou até onde será
feita a leitura no arquivo.txt, conforme a tabela abaixo.

2. Gravar/acrescentar os dados no arquivo (comando fprintf);


variável = fscanf ( variável_temporario, formato)
o formato: especifica o formato que os dados serão
colocados na variável, conforme tabela abaixo.

3. Fechar o arquivo (comando fclose).


fclose ( variável_temporario )
o fclose fecha o arquivo.txt

tabela de formatação e dimensão.


%i ou %d número inteiro com sinal
%u número inteiro sem sinal
formatação
%f ponto fixo (n. de casas após a vírgula)
para
%e notação científica
números
notação científica, mas sem zeros para
%g
complementar
%s lê todos os caracteres, menos os espaços
formatação
%c lê todos os caracteres, incluindo os espaços
para textos
lê somente os caracteres entre colchetes
(string) %[...]
ex. %[mus] a palavra ‘summer’ fica ‘summ’
115

não lê os caracteres depois do ^.


%[^...]
ex. %[^gr] a palavra ‘grama’ fica ‘ama’
Observação:
o formato asterisco depois da porcentagem (%*) significa que aquele campo
será igonorado
Dimensão:
Inf lê até o fim do arquivo.
n lê no máximo n valores numéricos ou campos de caracteres.
lê no máximo m x n valores números ou campos de caracteres.
[m,n]
n pode ser Inf.

exemplo1:
O arquivo temperatura.txt tem dados de texto e números:

Os comandos para ler apenas os 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.

Figura: micrografia da liga 80%Nb20%B

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

(e) Sobreponha os picos da fase NbB sobre o difratograma da amostra


(normalizado).
(f) Como resultado final, mantém somente os picos das fases presentes na
amostra sobre o difratograma da amostra (normalizado); sabendo que, a
presença de uma determinada fase na amostra é identificada, quando há
sobreposição dos picos da fase com os picos da amostra.

Observações:

• O gráfico do item (f) deve ser salvo como “resultado_rx.jpg”, usando o


comando saveas no formato “.jpg.

• Não esquecer de nomear os eixos e colocar as legendas nos gráficos.

• Os dados sobre as fases estão no arquivo: JCPDS.pdf.

• A sobreposição dos picos da fase no difratograma pode ser feito usando o


comando:
bar(x,y,0.03,’facecolor’,’g’,’edgecolor’,’g’);
onde x, y são o ângulo e intensidade da fase (JCPDS)
0.03 é a espessura da barra
‘g’ é a cor verde da barra.
Caso queira outra cor: ‘y’ é amarelo, ‘r’ é vermelho, ‘b’ é azul

• Os arquivos JCPDS.pdf e amostra.txt estão agrupados no arquivo


nióbio_boro.zip.
119

Solução
drx.m
clc; clear all; close all;

load amostra.txt -ascii;


x=amostra(:,1);
y=amostra(:,2);

%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

x_nbb=[28.919; 34.992; 40.808; 41.361; 50.790; 67.500; 73.920];


y_nbb=[58.7; 99.9; 100; 91.3; 24.9; 39.5; 21.5];

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

A palavra criptografia vem das palavras gregas “Kriptós” (secreto) +


“gráphein” (escrita) = “escrita secreta”. Em termos práticos, é definida
como a ciência que oculta e ou protege informações, seja na forma de
escrita, eletrônica ou de comunicação. De modo geral, os termos codificar,
criptografar, cifrar e encriptar são usados como o mesmo significado; e a
mesma coisa ocorre com decodificar, descriptografar, decifrar e decripatar.
Um indivíduo (remetente) envia um texto (exemplo carta) para outro
indivíduo (destinatário). Qualquer pessoa, que não seja o remetente ou
destinatário, poderá saber o conteúdo da carta, bastando tê-la em mãos.
Em determinadas situações, a troca de informação entre indivíduos é
sigilosa. Uma forma de impedir o acesso a terceiros de lerem a mensagem
seria o uso de cifragem, a troca de letras por símbolos ou outras letras, e o
inverso a decifragem. Em termos modernos e mais abrangentes, a
encriptação é o processo de converter texto legível em um texto
ininteligível, e decriptação é o processo inverso. Por exemplo, a encriptação
seria o processo de deslocar três posições as letras do alfabeto em uma
direção, e a decriptação seria o inverso, deslocar no sentido oposto. O par
formado do deslocamento de letras seria a cifra. Método semelhante usado
por Júlio César há mais de dois mil anos. Exemplo: “CEU AZUL” ficaria
“XBRVWRI”.

C E U A Z U L
X B R V W R I
122

Outros métodos melhores foram desenvolvidos como cifra de Vigenère,


cifras de transposição, cifras de substituição, cifras de HILL, Método
Permutacional, Métido RSA, SSL, TLS, e outras.
As criptografias podem ser classificadas como criptografia simétrica e
criptografia assimétrica.
A criptografia simétrica o remetente usa uma chave secreta para
criptografar e o destinatário usa a mesma chave para descriptografar.
A criptografia assimétrica usa duas chaves, uma privada e outra pública. A
chave privada é secreta. A chave pública é distribuída para outra pessoa.
Qualquer mensagem que seja criptografada usando a chave pública
somente poderá ser descriptografada usando a chave privada. É possível
fazer o inverso, usar a chave privada para criptografar e a chave pública
para descriptografar.
123

Criptografia por Matrizes

Uma maneira de codificar uma mensagem é através de multiplicação por matrizes.


Vamos associar as letras do alfabeto aos números, segundo a correspondência na tabela
abaixo:

- 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)

(2) em (1), temos:


𝑀 = 𝐴−1 . 𝐴. 𝑀 (3)
𝑀 = 𝐴−1 . (𝐴. 𝑀) (4)

𝑀 = 𝐴−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

A matriz 𝑀 deve ter a dimensão de 3 × 𝑚. Se o valor de 𝑚 = 10, temos 3 × 10 = 30


posições. Mas se o valor de 𝑚 = 11, temos 3 × 11 = 33 posições. Como a mensagem
é formada por 31 caracteres, a dimensão escolhida será 3 × 11.
Então, os valores da tabela são transferidos para matriz 𝑀, e com zero nas posições
vazias.
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 3 × 11
Multiplicando 𝐴 por 𝑀, temos 𝐶
𝐶 = 𝐴. 𝑀
1 0 1 15 14 4 5 0 14 5 14 8 21 13
𝐶 = [−1 3 1] ∙ [ 0 8 15 13 5 13 0 10 1 13 1]
0 1 1 9 19 0 5 19 20 5 22 5 0 0

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

Em seguida faz a conversão de números em letras.


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
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

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).

2) Escreva um scritp para ler o arquivo “mensagem.txt” e decodificar a mensagem do


exercício anterior (Sugestão: use o comando char para converter os números da
tabela ASCII em letras).
126

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;

trans=[M_c(1,1:end) M_c(2,1:end) M_c(3,1:end)];


dlmwrite('mensagem.txt',trans);
disp('mensagem salva no arquivo: mensagem.txt')

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);

A_inv=[2 1 -3; 1 1 -2; -1 -1 3];

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

m = 1 (quando usamos todos os dados da própria população)


𝑁
1
𝜎 = √ ∑(𝑥𝑖 − 𝑥̅ )2
𝑁
𝑖=1

tinv(𝐹,n) valor de t (t-student)

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

factorial (n) fatorial de n ou n!


factor (n) decompões em fatores de números primos.
primes(n) determina os números primos entre 0 e n
perms (A) mostra todas as permutações do elementos contido no vetor.
nchoosek(M,n) número de combinações, onde M é um vetor com elementos
e n o número de elementos usados em cada combinação
hist(A, e) histograma (A=vetor, e=número de escaninhos)
hist (A)

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:

- gerar um vetor linha com sete números aleatórios:

- gerar um vetor coluna com cinco números aleatórios:


132

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

(g) Faça um histograma usando a Fórmula de Sturges abaixo para determinar


o número de escaninhos (ou classes) e salve como imagem jpg.
𝐾 ≅ 1 + (3,32 ∙ log 𝑛) onde: n = número de elementos
(h) Qual é a média das 20 primeiras medidas.
(i) Reorganizando os dados com valores crescentes de altura, quais são os
valores da 50ª posição e 51ª posição.

7)
Os resultados de 20 titulações feitas num lote de vinagre são mostrados na
Tabela abaixo:

a) Faça um gráfico número da titulação x Concentração.


b) calcule o menor e maior valor, a média, e o desvio padrão.
c) Construa um histograma.
136

Estudo de Caso
Erro e Reprodutibilidade na medição

Quando alguma propriedade de um lote de amostras semelhantes é medida, os


resultados obtidos de cada amostra não são iguais, e, sim, são muitos parecidos
ou ligeiramente diferentes entre si. Essas diferenças ou erros nos valores podem
ser reais ou apenas espalhamento nos dados já esperados e previsto pela
estatística.
Em algumas situações, não são possíveis analisar todas amostras, e sim,
somente uma pequena quantidade delas. Uma empresa que fabrica fósforo não
tem como testar, riscando todos os fósforos para ver os quais acedem. E sim,
testa uma pequena quantidade para representar o todo.
Se tivéssemos a oportunidade de riscar todos os fósforos, poderíamos calcular
a média 𝜇̅ dos fósforos que acederam divido por todos os fósforos riscados. A
média 𝜇̅ seria uma média verdadeira.
Como testar todos fósforos não seria viável, então testamos uma pequena
quantidade, e calculamos a média 𝑥̅ dos fósforos que acederam divido pelos
fósforos riscados. A média 𝑥̅ é uma média estimada testando N amostras.
A relação da média 𝜇̅ e a média 𝑥̅ é:
𝜇̅ = 𝑥̅ ± 𝐸
Onde E é uma quantidade estatística denominada barra de erro ou limite de
confiabilidade. O tamanho dessa barra de erro depende do número de amostras
testada, do desvio padrão obtido e do nível de confiabilidade desejado.
Embora não seja possível saber exatamente o valor da média verdadeira 𝜇̅ , mas
é possível saber uma região ou faixa que ele se encontra, ou seja, 𝜇̅ estará entre
(𝑥̅ − 𝐸) e (𝑥̅ + 𝐸) em 95% da vezes, se a confiabilidade for de 95%, valor
normalmente estipulado.
O valor da barra de erro (E) pode ser calculado:

E ... erro
𝑆
𝐸= 𝑡
√𝑁 S ... desvio padrão

N ... número de amostras


𝑁
1 t ... valor de distribuição t de student,
𝑠=√ ∑(𝑥𝑖 − 𝑥̅ )2 com grau de liberdade (n=N-1), que
𝑁−1
𝑖=1 pode ser consultado usando uma
137

tabela 5 ou usando a função tinv( ) do


octave

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:

Média das amostras:


742 + 763 + 699 + 707 + 714 + 751
𝑥̅ = = 729 𝑀𝑃𝑎
6

Desvio Padrão:
𝑁
1
𝑠=√ ∑(𝑥𝑖 − 𝑥̅ )2 = 26,1
𝑁−1
𝑖=1

Número de amostras: N = 6
Grau de liberdade: n = (N-1) = (6-1) = 5

Na tabela 5, t = 2,571 ( 95% confiabilidade e n=5)


𝑆 26,1
𝐸= 𝑡= 2,571 = 27,4
√𝑁 √6

Assim:
𝑥̅ = 729 ± 27,4 𝑀𝑃𝑎

Portanto, existe uma probabilidade de 95% de que a média verdadeira esteja


entre 701,6 e 756,4 MPa.

Solução – usando o Octave:


% exemplo 1
clc; clear all; close all;
resistencia=[742 763 699 707 714 751];
media=mean(resistencia)
138

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

Tabela 5 - Para a distribuição t de Student (bicaudal)

fonte: https://pt.wikipedia.org/wiki/Distribui%C3%A7%C3%A3o_t_de_Student
140

Verificar se as médias são estatisticamente diferentes

Para comparar os resultados de dois conjuntos com quantidades diferentes de


amostras, precisamos da média, o desvio padrão e do número de amostras de
cada conjunto; e verificar se são estatisticamente diferentes.

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

As médias são significamente


diferentes estatisticamente se apenas
a equação for satisfeita.
|𝑋̅1 − 𝑋̅2 | > 𝑡% ,(𝑁𝑇−2) × 𝑆𝐷 𝑡% ,(𝑁−2) = valor da distribuição t de
Student com 95% de
confiança e (N-2) graus de
liberdade.

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

(10 − 1) × 12,52 + (8 − 1) × 10,52


𝑆12 = √ = 11,7
10 + 8 − 2
141

𝑁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

|𝑋̅1 − 𝑋2 | > 𝑡% ,(𝑁𝑇−2) × 𝑆𝐷


|436 − 487| > 2,210 × 5,50
51 > 11,7
A dureza Brinell da segunda liga é significativamente maior do que a da
primeira com 95% de confiabilidade.

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.

Operadores Relacionais e Lógicos


Os operadores podem ser relacionais ou lógicos, e são usados nas tomadas de
decisões e controle de fluxo de um programa. Os resultados desses operadores
são VERDADEIRO ou true (1) e FALSO ou false (0).
Operadores Relacionais
Um operador relacional compara dois números e retorna VERDADEIRO ou
FALSO (conhecido como valor booleano). Se a comparação for verdadeira,
retorna 1 (um), se a comparação for falsa, retorna 0 (zero). Os operadores
relacionais são:
Operador Descrição Exemplos
> Maior que >> 5 > 3
ans = 1

>> 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

Um operador lógico compara declarações booleanas (VERDADEIRO ou FALSO)


entre si e retorna VERDADEIRO (1) ou FALSO (0). Os operadores são: & (e), |
(ou) e ~(não).
Exemplos:

Operador descrição Exemplos

& ou && AND ( E lógico)

VERDADE & VERDADE = VERDADE >> (5<8) && (3>2)


true & true = true ans = 1

VERDADE & FALSO = FALSO >> (5<8) && (3<2)


true & false = false ans = 0

FALSO & VERDADE = FALSO >> (5>8) && (3>2)


false & true = false ans = 0

FALSO & FALSO = FALSO >> (5>8) && (3<2)


false & false = false ans = 0
145

Operador descrição Exemplos

| ou || OR (OU lógico) Exemplos

VERDADE | VERDADE = VERDADE >> (5<8) || (3>2)


true | true = true ans = 1

VERDADE | FALSO = VERDADE >> (5<8) || (3<2)


true | false = true ans = 1

FALSO | VERDADE = VERDADE >> (5>8) || (3>2)


false | true = true ans = 1

FALSO | FALSO = FALSO >> (5>8) || (3<2)


false | false = false ans = 0

Operador descrição Exemplos

~ NOT (NÃO lógico - inversor) Exemplos

~ VERDADE = FALSE >> ~(5<8)


~ true = false ans = 0

~ FALSO = VERDADE >> ~(5>8)


~ false = true ans = 1
Observações:
1) | (a barra vertical é obtida com dois pontos alongados no lado esquerdo do
teclado).
2)Quando usamos as funções if e while devemos usar && e || (duplos).
3)cuidado: ~~ true=true e ~~false=false
146

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

obs. Indentação – espaço entre a margem e o início do texto.


147

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:

1) Escreva um script em Octave/Matlab para ler o ano de nascimento


de uma pessoa, calcular e mostrar sua idade e, também, verificar e
mostrar se ela já tem idade para votar (entre 16 anos e 18 anos o
voto facultativo; igual ou maior 18 anos tem o direito e dever de
votar); e para conseguir a Carteira de Habilitação (18 anos ou mais).
148

2) Escreva um script em Octave/Matlab que lê três valores para os lados


de um triângulo. O algoritmo deve verificar se o triângulo é
equilátero (todos lados iguais), isósceles (dois lados iguais) ou
escaleno (todos lados diferentes).

3) Escreva um script em Octave/Matlab que informe se um dado ano é


ou não bissexto.

4) Escrever um script em Octave para calcular as raízes de uma equação


quadrática, independentemente do tipo. Teste com as seguintes
equações:

5) Escrever um programa em Ocatave/Matlab para indicar se o aluno foi


aprovado ou reprovado, sabendo que a média para aprovação é igual ou
superior a 5 e presença igual ou superior a 75%. A média é obtida sobre
duas provas P1 e P2. Entretanto, o aluno tem o direito de fazer uma
terceira prova (prova optativa), que irá substituir a menor nota da P1 ou
da P2.

Estruturas de laços (ou loops)


Um laço de repetição, ou loop, permite que um comando ou grupo de comandos
sejam repetidos quantas vezes forem necessários.

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.

Laços while -end


O laço será repetido enquanto a expressão for verdadeira. O laço (loop) é
terminado quando a expressão torna-se falsa.
Programa Octave
........
........
........
while expressão condicional
........ grupo de comandos do
........ octave, quando
........ a expressão for
........ verdadeira
end
........
........
........

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

país B seja aproximadamente de 200.000.000 de habitantes com uma taxa anual


de crescimento de 1,5%. Mantendo essas taxas de crescimento, simule o
número de habitantes dos países a cada ano, até que a população do país A
ultrapasse ou iguale a população do país B.

Exercícios

6) Um vetor é dado por 𝑥 = [15 85 72 59 100 80 44 60 91 38].


Usando declarações condicionais e laços de repetição, escreva um
script em Octave/Matlab que determine a média dos elementos do
vetor que são maiores que 59.

7) Escreva um script em Octave/Matlab para verificar se um número


fornecido pelo usuário é primo ou não.

8) Escreva um script em Octave/Matlab que crie um vetor cujos


elementos sejam os números primos entre dois números fornecidos
pelos usuários.
151

9) Um tanque de combustível cilíndrico tem fundo


hemisférico e tampa superior cônica, conforme
mostrado. O raio do cilindro e do fundo hemisférico
é 𝑟 = 60 𝑐𝑚. Escreva um script em Octave/Matlab
que forneça o volume do combustível no tanque
em função da altura h; e trace um gráfico do
volume em função de h, para 0 ≤ ℎ ≤ 2,8 𝑚.

10) Escreva um script em Octave/Matlab para


calcular o índice de massa corporal (IMC) de uma pessoa com idade
entre 20 e 65 anos, e informe em qual faixa que ela se encontra.

Sugestão: Maiores informações, pesquise na Internet ou use a


seguinte fonte para consulta:
https://www.mdsaude.com/2014/10/imc-indice-de-massa-corporal.html

11) Escreva um script em Octave/Matlab para determinar as raízes


de uma equação quadrática, 𝑎𝑥 2 + 𝑏𝑥 + 𝑐, inclusive as complexas.
Testes os seguintes casos:
(I) 𝑎 = 1, 𝑏 = 6, 𝑐 = 2;
(II) 𝑎 = 0, 𝑏 = −4, 𝑐 = 1,6;
(III) 𝑎 = 3, 𝑏 = 2,5, 𝑐 = 7.

12) Escreva um script em Octave/Matlab para implementar o


fluxograma abaixo de um número fornecido pelo usuário.
152

13) O método da “divisão e média”, um método antigo para


calcular a raiz quadrada de um número positivo 𝑎, pode ser
formulado como
𝑥 + 𝑎⁄𝑥
𝑥=
2
Escreva um script em Octave/Matlab usando o método da divisão e
média, conforme o fluxograma abaixo, para obter a raiz quadrada de
um número fornecido pelo usuário.

14) A figura abaixo mostra um tanque cilíndrico de base cônica. Se


o nível de líquido é muito baixo na parte cônica, o volume é
simplesmente o volume cônico de líquido. Se o nível de líquido está
no meio da parte cilíndrica, o volume total de líquido inclui a parte
cônica preenchida e a parte parcialmente ocupada do cilindro.
Escreva um script em Matlab/Octave para calcular o volume do
tanque em função dos valores de 𝑅 e 𝑑. Além disso, retorne uma
mensagem de erro: “transbordo”, se você transbordou o tanque, isto
é, 𝑑 > 3𝑅. Teste a função com os dados seguintes:
153

15) Supondo que a população de um país A seja da ordem de


90.000.000 habitantes com uma taxa anual de crescimento de 3%, e
que a população de um país B seja aproximadamente de 200.000.000
habitantes com uma taxa anual de crescimento de 1,5%. Mantendo
essas taxas de crescimento, simule o número habitantes dos países a
cada ano, até que a população do país A ultrapasse ou iguale a
população do país B.

16) Um determinado material radioativo perde metade de sua


massa a cada 50 segundos. Dada amassa inicial, em gramas, fazer um
programa que determine o tempo necessário para que essa massa se
torne menor que 0,5 grama.

17) Escreva um script em Octave/Matlab para calcular o resultado


da função 𝑓(𝑥, 𝑦) para quaisquer dois valores 𝑥 e 𝑦 especificados
pelo usuário. A função 𝑓(𝑥, 𝑦) é definida assim:

𝑥+𝑦 𝑥 ≥0𝑒 𝑦≥0


𝑥 + 𝑦2 𝑥 ≥0𝑒 𝑦<0
𝑓 (𝑥, 𝑦) = 𝑓(𝑥) =
𝑥2 + 𝑦 𝑥 <0𝑒 𝑦≥0
{𝑥 2 + 𝑦 2 𝑥 <0𝑒 𝑦<0
154

Estudo de Caso

Financiamento

Primeiramente, vamos entender alguns termos usados.

Juros: é a remuneração cobrada pelo empréstimo de dinheiro (ou outro item). É


expresso como um percentual sobre o valor emprestado (taxa de juro) e pode
ser calculado de duas formas: juros simples ou juros compostos.
Amortização: é o mesmo que redução da dívida, ou seja, amortizar é pagar uma
parte da dívida para que ela reduza de tamanho até a sua eliminação. Como em
toda dívida há cobrança de juros, o valor da amortização é o valor do pagamento
menus os juros.
𝑎𝑚𝑜𝑟𝑡𝑖𝑧𝑎çã𝑜 = 𝑝𝑎𝑔𝑎𝑚𝑒𝑡𝑜 − 𝑗𝑢𝑟𝑜𝑠

Ou seja, o valor amortizado é o que sobra do pagamento depois de descontados


os juro. Por exemplo, o pagamento de R$ 120 ,00 referente a uma parcela, sendo
dessa parcela R$ 40,00 são juros, então a amortização será de R$ 80,00
(80=120-40).
Saldo devedor ou saldo da dívida: é o valor que ainda falta a ser pago de uma
determinada dívida. Com o decorrer do tempo, a incidência de juros faz o saldo
devedor crescer, ao passo que as amortizações pagas pelo devedor fazem o
saldo devedor diminuir. O saldo devedor é inicialmente o valor do financiamento
ou empréstimo. A dívida é considerada paga, quando o saldo devedor é igual a
zero.

Normalmente são usados quatro sistemas de amortização: Tabela SAC, Price,


Americano e Pagamento único.

Tabela SAC – Os valores das amortizações são iguais (constantes), e os valores


das parcelas são decrescente. Entretanto, os juros são corrigidos conforme a
inflação. Inicialmente calcula-se os valores da amortização que são constantes,
conforme a equação abaixo, e depois o valor da parcela e o saldo devedor.
𝑣𝑎𝑙𝑜𝑟_𝑓𝑖𝑛𝑎𝑛𝑐𝑖𝑎𝑑𝑜
𝑎𝑚𝑜𝑟𝑡𝑖𝑧𝑎çã𝑜 =
𝑛ú𝑚𝑒𝑟𝑜_𝑑𝑒_𝑝𝑎𝑟𝑐𝑒𝑙𝑎𝑠
𝑗𝑢𝑟𝑜𝑠_$ = 𝑗𝑢𝑟𝑜𝑠 × 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑟𝑑𝑜𝑟/100
𝑝𝑎𝑟𝑐𝑒𝑙𝑎 = 𝑎𝑚𝑜𝑟𝑡𝑖𝑧𝑎çã𝑜 + 𝑗𝑢𝑟𝑜𝑠_$
𝑛𝑜𝑣𝑜_𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 = 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 + 𝑗𝑢𝑟𝑜𝑠_$ − 𝑝𝑎𝑟𝑐𝑒𝑙𝑎
155

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 + 𝑗𝑢𝑟𝑜𝑠)

𝑗𝑢𝑟𝑜𝑠_$ = 𝑗𝑢𝑟𝑜𝑠 × 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑟𝑑𝑜𝑟/100


𝑎𝑚𝑜𝑟𝑡𝑖𝑧𝑎çã𝑜 = 𝑝𝑎𝑟𝑐𝑒𝑙𝑎 − 𝑗𝑢𝑟𝑜𝑠_$
𝑛𝑜𝑣𝑜_𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 = 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 + 𝑗𝑢𝑟𝑜𝑠_$ − 𝑝𝑎𝑟𝑐𝑒𝑙𝑎
Exemplo:
Valor de R$ 10 000,00 financiados em 10 parcelas com juros de 1% ao mês.

0,01 × 10 000,00
𝑣𝑎𝑙𝑜𝑟_𝑑𝑎_𝑝𝑎𝑟𝑐𝑒𝑙𝑎 = = 1 055,82
1
(1 − ( )
1 + 0,01)10
156

Sistema Americano – paga-se somente os juros nas parcelas (sem amortização


da dívida), com exceção da última prestação. Nessa, é pago toda dívida do saldo
devedor, incluindo os juros (amortização total).

𝑣𝑎𝑙𝑜𝑟_𝑑𝑎_𝑝𝑎𝑟𝑐𝑒𝑙𝑎 = 𝑗𝑢𝑟𝑜𝑠 × 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑟𝑑𝑜𝑟/100


𝑎𝑚𝑜𝑟𝑡𝑖𝑧𝑎çã𝑜 = 0
𝑛𝑜𝑣𝑜_𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 = 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 + 𝑗𝑢𝑟𝑜𝑠_$ − 𝑝𝑎𝑟𝑐𝑒𝑙𝑎
𝑣𝑎𝑙𝑜𝑟_𝑑𝑎_ú𝑙𝑡𝑖𝑚𝑎_𝑝𝑎𝑟𝑐𝑒𝑙𝑎 = 𝑠𝑎𝑙𝑑𝑜_𝑑𝑒𝑣𝑒𝑑𝑜𝑟 + 𝑗𝑢𝑟𝑜𝑠_$

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

1) Simule um financiamento em várias parcelas mensais, a uma taxa de juros


constante ao mês. Os resultados deverão ser apresentados numa tabela,
contendo o número da parcela, valor da amortização, valor dos juros, valor da
parcela a ser paga e o saldo devedor. Depois de construir a tabela, um resumo
será apresentado mostrando o valor inicial financiado, a soma total dos juros, a
soma total das parcelas, e relação do total de juros pelo valor inicial. Usando
scripts em octave, calcule pelo (a) sistema SAC, (b) sistema Price, (c) sistema
Americano, e (d) sistema Único.
2) Simule um financiamento da compra de um objeto de R$ 500,00, com juros
de 6,85 % ao mês, em 24 parcelas nos Sistemas (a) SAC, (b) Price, (c)
Americano e (d) Pagamento único.
3) Simule um financiamento da compra de um veículo de R$ 40 000,00, com
juros de 1,7 % ao mês, em 60 parcelas nos Sistemas (a) SAC, (b) Price, (c)
Americano e (d) Pagamento único.
4) Simule um financiamento da compra de uma casa de R$ 350 000,00, com
juros de 0,7 % ao mês, em 240 parcelas (20 anos) nos Sistemas (a) SAC, (b)
Price.

5) Assistir o vídeo EDUCAÇÃO FINANCEIRA | GUETONOMIA


https://youtu.be/IUL-yASGlU8
159

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.

Na prática, não é costume usar dois pontos para descrever os resultados


experimentais, e sim, vários pontos formando um gráfico semelhante ao
apresentado na figura abaixo:

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.

Admitindo uma reta qualquer para representar os pontos.

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

Soma dos resíduos


O erro global pode ser calculado de diferentes maneiras. Uma maneira simples
é somar os resíduos 𝑟 de todos os pontos.
𝐸 = 𝑟1 + 𝑟2 + 𝑟3 + ⋯ + 𝑟𝑛
Uma desvantagem dessa técnica, é que a soma dos erros pode ser nula, mesmo
não havendo um bom ajuste.
Exemplo:

𝐸 = 𝑟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

Erro global da reta A Erro global da reta B

𝐸 = |𝑟1 | + |𝑟2 | + |𝑟3 | + |𝑟4 | 𝐸 = |𝑟1 | + |𝑟2 | + |𝑟3 | + |𝑟4 |


𝐸 = |3| + |−1| + |−0,5| + |1,5| 𝐸 = |1,5| + |−0,5| + |−1| + |3|
𝐸 = 3 + 1 + 0,5 + 1,5 𝐸 = 1,5 + 0,5 + 1 + 3
𝐸=6 𝐸=6
163

O erro total E é mesmo para as duas retas, ou seja, uma reta não é melhor que
a outra.

Regressão Linear por Mínimos Quadrados


Uma outra alternativa é a soma dos quadrados dos resíduos.
𝐸 = (𝑟1 )2 + (𝑟2 )2 + (𝑟3 )2 + ⋯ + (𝑟𝑛 )2

lembrando que: 𝑟𝑖 = 𝑦𝑖 − 𝑓(𝑥𝑖 ) , temos:


2 2 2 2
𝐸 = (𝑦1 − 𝑓(𝑥1 )) + (𝑦2 − 𝑓 (𝑥2 )) + (𝑦3 − 𝑓 (𝑥3 )) + ⋯ + (𝑦𝑛 − 𝑓(𝑥𝑛 ))

Reescrevendo na forma de somatório:


𝑛

𝐸 = ∑[𝑦𝑖 − 𝑓 (𝑥𝑖 )]2


𝑖=1

lembrando, que a reta é dada por 𝑓 (𝑥 ) = 𝑎1 𝑥 + 𝑎0


𝑛

𝐸 = ∑[𝑦𝑖 − (𝑎1 𝑥𝑖 + 𝑎0 )]2


𝑖=1

Numa regressão linear, temos vários pontos 𝑃1 (𝑥1 , 𝑦1 ), 𝑃2(𝑥2 , 𝑦2 ) , … , 𝑃𝑖 (𝑥𝑖 ,


𝑦𝑖 ) , … , 𝑃𝑛 (𝑥𝑛 , 𝑦𝑛 ). Para calcular o erro global E, faltam os valores de 𝑎1 e 𝑎0 .

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
𝑛

− ∑ 𝑦𝑖 − 𝑎1 𝑥𝑖 − 𝑎0 = 0⁄2
{ 𝑖=1
164

∑ −𝑦𝑖 𝑥𝑖 + 𝑎1 𝑥𝑖 2 + 𝑎0 𝑥𝑖 = 0
𝑖=1
𝑛

∑ −𝑦𝑖 + 𝑎1 𝑥𝑖 + 𝑎0 = 0
{ 𝑖=1

𝑛 𝑛 𝑛

∑ −𝑦𝑖 𝑥𝑖 + ∑ 𝑎1 𝑥𝑖 + ∑ 𝑎0 𝑥𝑖 = 0 2

𝑖=1 𝑖=1 𝑖=1


𝑛 𝑛 𝑛

∑ −𝑦𝑖 + ∑ 𝑎1 𝑥𝑖 + ∑ 𝑎0 = 0
{ 𝑖=1 𝑖=1 𝑖=1

𝑛 𝑛 𝑛
2
∑ 𝑎1 𝑥𝑖 + ∑ 𝑎0 𝑥𝑖 = ∑ 𝑦𝑖 𝑥𝑖
𝑖=1 𝑖=1 𝑖=1
𝑛 𝑛 𝑛

∑ 𝑎1 𝑥𝑖 + ∑ 𝑎0 = ∑ 𝑦𝑖
{ 𝑖=1 𝑖=1 𝑖=1

O somatório abaixo pode ser expresso como:


𝑛

∑ 𝑎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

Temos duas equações lineares e duas variáveis (𝑎0 𝑒 𝑎1 ).


Para melhor visualização, podemos fazer:
165

𝑛 𝑛

𝑆𝑥 = ∑ 𝑥𝑖 𝑆𝑦 = ∑ 𝑦𝑖
𝑖=1 𝑖=1

𝑛 𝑛

𝑆𝑥𝑦 = ∑ 𝑥𝑖 𝑦𝑖 𝑆𝑥 2 = ∑ 𝑥𝑖2
𝑖=1 𝑖=1
temos:

(𝑆𝑥 2 )𝑎1 + (𝑆𝑥 )𝑎0 = 𝑆𝑥𝑦


{
(𝑆𝑥 )𝑎1 + 𝑛𝑎0 = 𝑆𝑦

Podemos resolver isolando 𝑎1 de uma equação e substituindo em outra.

𝑛𝑆𝑥𝑦 − 𝑆𝑥 𝑆𝑦 𝑆𝑥 2 𝑆𝑦 − 𝑆𝑥𝑦 𝑆𝑥
𝑎1 = 𝑎0 =
𝑛𝑆𝑥 2 − (𝑆𝑥 )2 𝑛𝑆𝑥 2 − (𝑆𝑥 )2

ou

𝑎0 = 𝑦 − 𝑎1 𝑥

onde 𝑦 e 𝑥 são as médias


de 𝑦 e 𝑥, respectivamente
Exemplo:
Ajuste uma reta aos valores de x e y da Tabela:
x 1 2 3 4 5 6 7
y 0,5 2,5 2,0 4,0 3,5 6,0 5,5
166

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

𝑛𝑆𝑥𝑦 − 𝑆𝑥 𝑆𝑦 7(119,5) − 28(24)


𝑎1 = = = 0,8393
𝑛𝑆𝑥2 − (𝑆𝑥 )2 7(140) − (28)2

𝑆𝑥2 𝑆𝑦 − 𝑆𝑥𝑦 𝑆𝑥 140(24) − 119,5(28)


𝑎0 = = = 0,07143
𝑛𝑆𝑥2 − (𝑆𝑥 )2 7(140) − (28)2
167

Portanto, o ajuste por mínimos quadrados é:


𝑦 = 0,8393𝑥 + 0,07143
Refazendo o gráfico, temos:

Coeficiente de correlação de Pearson


Conhecido também como coeficiente de correlação linear, que mede o grau de
relacionamento linear dos pontos.
𝑛𝑆𝑥𝑦 − 𝑆𝑥 𝑆𝑦
𝑟=
√𝑛𝑆𝑥 2 − (𝑆𝑥 )2 ∙ √𝑛𝑆𝑦 2 − (𝑆𝑦 )2

onde
−1 ≤ 𝑟 ≤ 1

Interpretação

• 0.9 a 1 (positivo ou negativo) indica uma correlação muito forte.


• 0.7 a 0.9 (positivo ou negativo) indica uma correlação forte.
• 0.5 a 0.7 (positivo ou negativo) indica uma correlação moderada.
• 0.3 a 0.5 (positivo ou negativo) indica uma correlação fraca.
• 0 a 0.3 (positivo ou negativo) indica uma correlação desprezível.
168

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.

Exemplos de valores de r e o gráfico


169

Regressão Linear no Octave/Matlab


O comando polyfit pode ser usado para fazer o ajuste de curvas em um conjunto
de pontos.
h = polyfit (x, y, 1)
onde,
h é um vetor com dois valores. h(1) é o coeficiente angular da
reta, e h(2) é o coeficiente linear, ou seja, a1=h(1) e a0=h(2).
x e y são vetores com pontos respectivamente.

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

(Questão 1) Com base no seguinte conjunto de dados:


x -7 -5 -1 0 2 5 6
y 15 12 5 2 0 -5 -9

Trace o gráfico e use a regressão linear para determinar os coeficientes


da função 𝑦 = 𝑎1 . 𝑥 + 𝑎0 e o coeficiente de correlação linear r.

(Questão 2 ) Com base no seguinte conjunto de dados:


x 2 5 6 8 9 13 15
y 7 8 10 11 12 14 15

Trace o gráfico e use a regressão linear para determinar os coeficientes


da função 𝑦 = 𝑎1 . 𝑥 + 𝑎0 e o coeficiente de correlação linear r.

(Questão 3 ) Um composto X deve ser determinado por espectrofotometria


UV/visível. Uma curva de calibração é construída a partir de soluções
padrão de X com os seguintes resultados: 0,50 ppm, A = 0,24 ; 1,5 ppm, A
= 0,36 ; 2,5 ppm, A = 0,44 ; 3,5 ppm, A = 0,59 ; 4,5 ppm, A = 0,70. Uma
amostra de X forneceu uma absorbância igual a 0,50 nas mesmas condições
de medida dos padrões. (a) Trace o gráfico absorbância versus
concentração; (b) obtenha a equação da curva; (c) o coeficiente de
correlação; (d) determine a concentração da amostra.

(Questão 4 ) Utilizando os dados abaixo:

(a) construa um gráfico de custos x quantidade.


(b) obtenha a equação da reta e o coeficiente de correlação.
(c) Qual é o custo para 16 unidades do artigo?
173

(Questão 5) Suponha os seguintes dados na tabela

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?

(Questão 6) Atkinson et al. (1994) investigaram em que medida


partículas de chumbo potencialmente tóxica emitidas por veículos
automotores são absorvidas por ciclistas que participam de competições. A
tabela abaixo, construída a partir de um gráfico apresentado em seu artigo,
fornece níveis de chumbo no sangue e horas de treinamento de 10 ciclistas.

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

Linearização de Equações Não-Lineares


Exercícios
175

Linearização de Equações Não-Lineares


Há muitos tipos de funções não-lineares, e para que a regressão linear possa
ser usada, a equação não-linear de duas variáveis deve ser modificada de tal
forma, que a nova equação seja linear com termos contendo as variáveis
originais. Por exemplo, a função de potência 𝑦 = 𝑏𝑥 𝑚 pode ser linearizada com
uso do logaritmo, da seguinte forma:

𝑦 = 𝑏𝑥 𝑚
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:

Os pontos (x,y) são substituídos por pontos (ln(𝑥 ) , ln(𝑦)), e aplicado a


regressão linear, onde se obtém as constantes 𝑎1 e 𝑎0 .

Uma vez conhecidos 𝑎1 e 𝑎0 , as constantes 𝑏 e 𝑚 na equação são calculadas


fazendo:

A tabela abaixo mostra linearização de algumas equações não-lineares.


176

Exemplo 1: Ajuste a uma exponencial


Os dados a seguir fornecem a população aproximada do mundo em anos
selecionados de 1850 até 2000
ano 1850 1900 1950 1980 2000
População 1,3 1,6 3 4,4 6
(bilhões)

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

e) Construa um gráfico para função Y=a1.X+a0 no gráfico “II”


f) calcule as constantes 𝑏 e 𝑚.
g) trace a curva da função 𝑝 = 𝑏𝑒 𝑚𝑥 no “I”,
h) Use a equação para estima a população em 1970.

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

caso 2: usando a expressão: 𝑝 = 𝑏𝑒 𝑚𝑥 ou 𝑝 = (4,6315)𝑒 0,01044𝑥


janela de comandos
>> P=b*exp(m*1970)
P = 3.9583e+009

A população em 1970 é de 3,9583 bilhões.


181

Script do Octave/Matlab para solução do problema:


clear all; clc; close all;
%tabela de dados
ano=[1850 1900 1950 1980 2000];
p=[1.3 1.6 3 4.4 6]*1e9;

%a) grafico populacao x ano


plot(ano,p,'r*')
axis([1800 2050 1e9 7e9])
grid on
xlabel('ano')
ylabel('populacao')
title('Populacao Mundial por ano')

%b)
%y=b*exp(mx)
X=ano;
Y=log(p);

%c) grafico log(populcao x ano)


figure
plot(X,Y,'r+')
axis([1800 2050 log(1e9) log(7e9)])
grid on
xlabel('ano')
ylabel('log(populacao)')
title('Populacao Mundial por ano')

%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

%e) grafico log(populcao x ano)


hold on
X1=1850:1:2000;
Y1=a1*X1+a0;
plot(X1,Y1)

%f)calculo das constantes b e m


disp('constante de p=be^(mx)')
m=a1
b=exp(a0)

%g) grafico
figure 1
hold on
ano1=1850:1:2000;
P1=b*exp(m*ano1);
plot(ano1,P1,'b-');
182

Exercícios

(Questão 1) Os dados a seguir fornecem a população aproximada


do mundo em anos selecionados de 1850 até 2000.

Assuma que o crescimento da população possa ser modelado por


uma função exponencial 𝑝 = 𝑏𝑒 −𝑚𝑥 , onde 𝑥 é o ano e 𝑝 é a
população em bilhões. Linearize essa função e use regressão linear
para determinar as constantes 𝑏 e 𝑚 para as quais a função fornece
o melhor ajuste para os dados. Use essa equação para estimar a
população em 1970.

(Questão 2) A pressão atmosférica 𝑝 em função da altura ℎ pode


ser modelada por uma função exponencial na forma 𝑝 = 𝑏𝑒 −𝑚ℎ .
Os valores a seguir correspondem à pressão medida em diferentes
alturas. Usando a regressão linear, determine as constantes 𝑚 e 𝑏
que fazem o melhor ajuste dos dados. Use a equação para estimar
a pressão atmosférica em altura de 7000 𝑚 .

h (m) 0 5 000 10 000 15 000 20 000


p (Pa) 100 000 47 500 22 600 10 800 5 100
183

(Questão 3) No processo de fabricação de fibras eletroforéticas, o


diâmetro da fibra 𝑑 está relacionado à corrente 𝐼 .Os seguintes
dados são medidos durante a produção:
I (nA) 300 300 350 400 400 500 500 650 650
d (μm) 22 26 27 30 34 33 33,5 37 42

A relação entre a corrente e o diâmetro pode ser modelada com uma


equação na forma 𝑑 = 𝑎 + 𝑏√𝐼 . Use os dados para determinar as
constantes 𝑎 e 𝑏 que fazem o melhor ajuste dos dados.

(Questão 4) Os seguintes dados mostram a relação entre a


viscosidade do óleo SAE70 e a temperatura. Depois de tomar o log
dos dados, use uma regressão linear para encontrar uma equação
da reta que melhor ajusta os dados e o valor de r.
Temperatura(°C) 26,67 93,33 148,89 315,56
Viscosidade(𝜇) 1,35 0,085 0,012 0,00075

(Questão 5) Um material é testado para falha por fadiga cíclica


enquanto uma tensão, em Mpa, é aplicada ao material e o número
de ciclos necessários para causar falha é medido. Os resultados
estão na tabela a seguir. Quando um gráfico log-log da tensão em
função dos ciclos é gerado, a tendência dos dados mostra uma
relação linear. Use uma regressão linear para determinar uma
equação que melhor ajusta os dados.
Nº de ciclos 1 10 100 1 000 10 000 100 000 1 000 000
Tensão (MPa) 1 100 1 000 925 800 625 550 420
184

(Questão 6) O fator concentração de tensão 𝑘 é a relação entre a


tensão máxima 𝜎𝑚á𝑥 e a tensão média 𝜎𝑚é𝑑 , ou seja: 𝑘 =
𝜎𝑚á𝑥
⁄𝜎𝑚é𝑑 .
Para uma placa com espessura 𝐷
possuindo um furo central de
diâmetro 𝑑 carregada com fuma força
axial 𝐹, a tensão máxima ocorre na borda do buraco, e a tensão
média é dada por 𝜎𝑚é𝑑 = 𝐹⁄𝑡 (𝐷 − 𝑑 ), onde 𝑡 é a dureza da placa.
O fator concentração de tensão medido em cinco testes com placas
possuindo diferentes relações 𝑑⁄𝐷 é mostrado na tabela.

d/D 0,05 0,25 0,45 0,65 0,85


k 2,91 2,40 2,17 2,11 2,03

(a) Use uma função exponencial 𝑘 = 𝑏𝑒 𝑚(𝑑⁄𝐷) para modelar a


relação entre 𝑘 e 𝑑⁄𝐷 . Determine os valores de 𝑏 e 𝑚 que fazem
o melhor ajuste de dados.

(b) Trace um gráfico com os pontos do conjunto de dados e o


modelo de ajuste.

(c) Use o modelo para predizer o fator de concentração de tensão


para 𝑑⁄𝐷 = 0,15.
185

(Questão 7) A tensão limite de escoamento 𝜎𝑦 de vários metais


varia com o tamanho dos grãos. Muitas vezes, a relação entre o
tamanho do grão e a tensão limite de escoamento é modelada com
a equação de Hall-Petch:
1
(− )
𝜎𝑦 = 𝜎0 + 𝑘𝑑 2
Os dados a seguir resultam da medição do tamanho médio dos
grãos e da tensão limite de escoamento de uma amostra.

d (mm) 0,006 0,011 0,017 0,025 0,039 0,060 0,081 0,105


𝜎𝑦 (MPa) 334 276 249 235 216 197 194 182

Determine as constantes 𝜎0 e 𝑘 tais que a equação de Hall-Petch


faça o melhor ajuste dos dados. Trace um gráfico representando os
pontos com marcadores circulares e a equação de Hall-Petch como
uma linha contínua. Use a equação de Hall-Petch para estimar a
tensão de escoamento de um espécime com grãos de 0,05 𝑚𝑚 .

(Questão 8) Para medir g (a aceleração da


gravidade), realiza-se o experimento a seguir.
Uma bola é solta do topo de um edifício de 30 m
de altura. À medida que o objeto vai caindo, sua
velocidade 𝑣 vai sendo medida em várias alturas
por sensores presos ao edifício. Os dados
medidos no experimento são fornecidos na
tabela.
x(m) 0 5 10 15 20 25
v(m/s) 0 9,85 14,32 17,63 19,34 22,41
Em termos das coordenadas mostradas na figura (positivo para
baixo), a velocidade da bola em função da distância 𝑥 é dada por
𝑣 2 = 2𝑔𝑥. Usando a regressão linear, determine o valor
experimental de g.
186

(Questão 9) Em teste de tensão uniaxial, estica-se e um uma


máquina um corpo de prova no formato de um osso canino.
Durante o teste, a força 𝐹 é aplicada no corpo de prova e o
comprimento 𝐿 da deformação é medido. A tensão real, 𝜎𝑡 , e a
deformação real, 𝜀𝑡 , são definidas por:
𝐹 𝐿 e 𝐿
𝜎𝑡 = 𝜀𝑡 = ln
𝐴0 𝐿 0 𝐿0
Onde 𝐴0 e 𝐿0 são a área inicial da seção reta e a deformação inicial,
respectivamente. A curva tensão-deformação real é
frequentemente modelado por:
𝜎𝑡 = 𝑘𝜀𝑡𝑚
A tabela a seguir apresenta os valores de 𝐹 e 𝐿 medidos em um
experimento. Determine o valor dos coeficientes 𝐾 e 𝑚 que
fazem o melhor ajuste dos dados. A área inicial da seção reta e a
deformação inicial são 𝐴0 = 1,25 × 10−4 𝑚2 e 𝐿0 = 0,0125 𝑚 .
Trace um gráfico representando os pontos com marcadores
circulares e a equação da curva tensão-deformação real como uma
linha contínua.

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

Você também pode gostar