Escolar Documentos
Profissional Documentos
Cultura Documentos
ENGENHARIA QUÍMICA
COMPONENTE CURRICULAR: CÁLCULO NUMÉRICO
BELO JARDIM
2022
SUMÁRIO
1. INTRODÇÃO……………………………………………….………………………. 3
2. MÉTODOS E PROCEDIMENTOS………………………………………………… 4
2.1 FUNÇÃO…………………………………...…………………………………………. 4
3. RESULTADOS E DISCUSSÕES……………………………………………………. 13
4. CONCLUSÃO……………………………………………………………………..…. 14
3
1. INTRODUÇÃO
Neste presente relatório, serão apresentados 5 métodos usados para calcular as raízes de
infinitas funções matemáticas.
Zeros de funções reais, popularmente como as raízes de uma função , são aqueles valores de
“X” que vão zerar a função, ou seja, um número real “X*” é um zero da função f(x) ou uma raíz da
equação f(x) = 0, se f(x*) = 0. Determinar essas raízes em algumas equações pode até ser um
procedimento considerado simples, a depender da função, para a maioria das pessoas. Porém,
existem diversas funções reais nas quais determinar suas raízes é um trabalho totalmente inviável
para uma pessoa desenvolver. Para facilitar o cálculo desses zeros de funções reais, é válido recorrer
a métodos algébricos e computacionais que servirão para facilitar tais procedimentos.
Um procedimento inicial para determinar raízes reais de uma equação consiste em duas fases.
Na fase 1, temos o isolamento das raízes, ou seja, determinar intervalos que contém tais raízes. A
determinação destes intervalos segue procedimentos fixados em teorema: Seja f(x) uma função
contínua em um intervalo genérico “I” da reta real, e sejam “a” e “b”valores que pertencem a este
intervalo tais que f(a)xf(b)<0. Então, existe pelo menos um ponto x=x* entre “a” e “b” que é zero de
f(x). Se a derivada da função f(x) existir e preservar o sinal em todo o intervalo “I”, então, tal
intervalo contém apenas um único zero de f(x).
Seguindo os procedimentos expostos acima, é possível determinar um intervalo válido que
contenha as raízes de determinada função. Na fase 2, temos o refinamento deste intervalo
determinado na fase 1. O refinamento consiste em determinar sucessivas “partições” do intervalo
encontrado na fase 1 , onde cada partição será uma aproximação da raiz dentro de uma precisão pré -
estabelecida.
4
2. MÉTODOS E PROCEDIMENTOS
2.1 FUNÇÃO
SINAL DE F(X) - + + + + +
Observa-se que no intervalo I= (0 , 1) existe a raiz pois houve a mudança de sinal entre um e
outro. De acordo com os valores da tabela, a partir do número 1 o sinal da função permanece
positivo, demonstrando que a função cresce a partir deste, para certificarmos de que não existe
nenhuma outra raiz em intervalos seguintes, segue-se procedimentos descritos no teorema no qual se
analisa o sinal da derivada da função, se este se manter constante ao infinito, é a confirmação de que
a função só apresenta uma raiz real.
Derivando a função, temos:
5
A partir da derivada é possível observar que a função é crescente dentro do intervalo (1 , +∞)
, logo, a função só apresenta uma única raiz e esta se encontra no intervalo I = (0 , 1). A imagem
abaixo confirma as análises expostas acima.
Este método garante a existência de uma solução para f(x) = 0 no intervalo (a, b) desde que f :
[a, b] → R seja contínua e satisfaz f(a).f(b) < 0. o método da bissecção consiste em dividir o
intervalo [a, b] ao meio (média), obtendo os subintervalos [a, m] e [m, b], e considerar como
intervalo de busca o subintervalo em que f tem sinais opostos nos extremos. Em seguida repete-se o
procedimento com o subintervalo de interesse. Após um número finito de subdivisões o método
convergirá para a solução seguindo aproximação de uma precisão pré - estabelecida (e).
import math
def f(x):
return math.sqrt(x) - 1/math.pow(2 , x)
a=int(input("Digite o valor inicial do intervalo: "))
b=int(input("Digite o valor final do intervalo: "))
e=0.00001
k=0
while a==b:
print("Os valores do intervalo são iguais, digite um intervalo válido: ")
a=int(input("Digite o valor inicial do intervalo: "))
b=int(input("Digite o valor final do intervalo: "))
6
if f(a)*f(b)<0:
while (b - a)>e:
k=k + 1
M=(a + b)/2
if f(a)*f(M)<0:
b=M
else:
a=M
print("a solução encontrada foi",M)
print("A quantidade de interações foi",k)
else:
print("Neste intervalo não tem raíz")
Seja f(x) contínua no intervalo [a,b] e tal que f(a)f(b) < 0. Se considerarmos que existe uma
raiz no intervalo (a,b), podemos encontrar o valor aproximado dessa raiz usando os valores da função
obtidos a cada interação, pois, a cada interação aproxima-se mais da raiz, desde que o método seja
convergente. O método da posição falsa consiste em obter dois pontos iniciais (a,f(a)) e (b,f(b)) onde
entre esses dois pontos passará uma reta intersectando o eixo X, neste ponto de intersecção (M)
gera-se um novo ponto (M,f(M)) de modo que a nova interação entre (M,f(M)) com (a,f(a)) ou
(M,f(M)) com (b,f(b)) (o conjunto de interação dependerá de quanto o intervalo esteja próximo a
raiz) gera uma nova reta que intersecta o eixo X gerando um outro ponto de intersecção (M). Nesse
processo, a cada nova interação, a reta se aproxima cada vez mais do valor da raiz. De modo geral, o
valor de M a cada interação será determinado pela média ponderada entre “a” e “b” e com pesos
“f(a)” e “f(b)” visto que tais pontos (a,f(a)), (b,f(b)) e (M,f(M)) são colineares e respeitam o critério:
𝑎𝑓(𝑏) − 𝑏𝑓(𝑎)
M=
𝑓(𝑏) − 𝑓(𝑎)
2.3.1 Código em Python para cálculo da solução utilizando o método da posição falsa.
import math
def f(x):
return math.sqrt(x) - 1/math.pow(2 , x)
a=int(input("Digite o valor inicial do intervalo: "))
b=int(input("Digite o valor final do intervalo: "))
e=0.00001
k=0
M=(a + b)/2
while a==b:
print("Os valores do intervalo são iguais, digite um intervalo válido: ")
a=int(input("Digite o valor inicial do intervalo: "))
b=int(input("Digite o valor final do intervalo: "))
if f(a)*f(b)<0:
while math.fabs(f(M))>e:
k=k + 1
M=(a*f(b) - b*f(a))/(f(b) - f(a))
if f(a)*f(M)<0:
8
b=M
else:
a=M
print("a solução encontrada foi",M)
print("A quantidade de interações foi",k)
else:
print("Neste intervalo não tem raíz")
Seja f(x) uma função contínua e que contenha uma raiz no intervalo [a,b]. O método do ponto
fixo consiste em obter uma função iteração φ(𝑥) tal que f(x) = φ(𝑥) - x e φ(𝑥 *) = x*. A partir
de uma aproximação inicial 𝑥0 da raiz x* deve-se gerar uma sequência {𝑥𝑘} pela relação
𝑥𝑘+1 = φ(𝑥𝑘)
Vale destacar que é possível determinar várias funções de iteração, porém nem todas vão
convergir para o valor da raiz. Sendo assim, é necessário seguir os procedimentos do teorema a
seguir:
Seja x* uma raiz da equação f(x)=0 isolada num intervalo I. Seja φ(𝑥) uma função de
iteração para a equação f(x)=0. Se:
III - 𝑥0 ∈ I
9
Então, a sequência {𝑥𝑘} gerado pelo processo iterativo 𝑥𝑘+1 = φ(𝑥𝑘) converge para a raiz.
2.4.1 Código em Python para cálculo da solução utilizando o método do ponto fixo.
import math
def f(x):
return math.sqrt(x) - 1/math.pow(2 , x)
def phi(x):
return 1/math.pow(4, x)
e=0.00001
k=0
x_0 = 0.3
x= x_0
while math.fabs(f(x))>e:
k=k + 1
x= phi(x)
x_raiz = x
print("a solução encontrada foi",x_raiz)
print("A quantidade de interações foi",k)
O método de newton é uma especificação do método do ponto fixo, tendo este uma função
iteração geral pré-estabelecida que será usada por todo o método. O método de Newton é
considerado um dos métodos mais eficientes pois tem convergência de ordem 2. O primeiro passo é
escolher uma aproximação inicial. Após isso, calcula-se a equação da reta tangente (por meio da
derivada) da função nesse ponto e a interseção dela com o eixo X , a fim de encontrar uma melhor
aproximação para a raiz. Repetindo-se o processo, cria-se um método iterativo para encontrarmos a
raiz da função. A função iteração geral para este método é:
𝑓(𝑥𝑛 )
𝑥𝑛 + 1= 𝑥𝑛 - 𝑓´(𝑥𝑛 )
11
Assim como no método do ponto fixo, a função acima precisa respeitar um critério de convergência
para que o método seja efetivo. Este critério é descrito no teorema a seguir:
Seja f(x), f´(x) e f´´(x) contínuas num intervalo I que contenha a raiz x = x* de f(x) = 0,
supondo que f´(x) ≠ 0. Então existe um intervalo 𝐼 ⊂ I contendo a raiz x* tal que se 𝑥0∈ 𝐼, a
𝑓(𝑥𝑛 )
sequência gerada pela fórmula recursiva 𝑥𝑛 + 1= 𝑥𝑛 - 𝑓´(𝑥𝑛 )
convergirá para x*
import math
E=2.7182
def f(x):
return math.sqrt(x) - 1/math.pow(2 , x)
def f_linha(x):
return (1 / 2*math.sqrt(x)) + (math.log(E,2) / math.pow(2,x))
k=0
x_0 = 0.3
x= x_0
e=0.00001
while math.fabs(f(x)) > e:
k=k + 1
x= x - (f(x) / f_linha(x))
x_raiz = x
print("a solução encontrada foi",x_raiz)
print("A quantidade de interações foi",k)
.
12
import math
def f(x):
return math.sqrt(x) - 1/math.pow(2 , x)
k=0
x_0 = 0
x_1 = 1
x=0.4
e=0.00001
while math.fabs(f(x)) > e:
k=k + 1
x= (x_0*f(x_1) - x_1*f(x_0)) / (f(x_1) - f(x_0))
x_0 = x_1
x_1 = x
x_raiz = x
print("a solução encontrada foi",x_raiz)
print("A quantidade de interações foi",k)
3. RESULTADOS E DISCUSSÕES
Os resultados obtidos a partir dos cálculos utilizando os diferentes métodos numéricos para a
determinação de zeros de funções reais estão agrupados na tabela abaixo.
Quantidade de 17 0 28 5 5
Interações
De acordo com os resultados da tabela acima, é possível perceber que houve uma divergência
considerável em relação à quantidade de interações que cada método obteve para determinar o valor
aproximado ou exato da raiz. O valor exato da raiz da função trabalhada neste relatório é X= 0,5,
logo, para a resolução desta função,o método da posição falsa foi o mais eficiente. O método menos
eficiente em termos de efetividade computacional foi o método do ponto fixo, visto que este teve 28
interações até obter um valor aproximado da raiz dentro de uma precisão pré-estabelecida que foi
comum a todos os métodos. É importante destacar que esses resultados podem variar de função para
função, onde o método mais eficiente neste caso, poderá ser o menos eficiente de acordo com o tipo
de função a ser trabalhada. Podemos considerar então, que existe uma relatividade inerente a tais
métodos à medida que ocorra variações de funções a serem trabalhadas usando estes mesmos
métodos numéricos.
14
4. CONCLUSÃO