Você está na página 1de 18

Lista ajuste de curvas calculo numérico

Jonas Costa dos Santos

May 25, 2022

1 Problema 1
A tabela seguinte fornece a população do brasil (em milhões de habitantes) desde 1872;

Ano 1872 1890 1900 1920 1940 1950 1960 1970 1980 1990
pop.(milhes) 9.9 14.3 17.4 30.6 41.2 51.9 70.9 93.1 130 150
Obtenha uma estimativa para a população brasileira no ano de 2000 empregando o método dos
quadrados mínimos

[1]: # bibliotecas
from IPython.core.display import Math
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

[2]: #plotando o grafico do probelema


xdados = np.array([1872, 1890, 1900, 1920, 1940, 1950, 1960, 1970, 1980, 1990])
ydados = np.array([9.9, 14.3, 17.4, 30.6, 41.2, 51.9, 70.9, 93.1, 130, 150])
plt.plot(xdados, ydados, 'r.')
plt.xlabel('Ano')
plt.ylabel("pop.(milhões)")
plt.title('Grafico de dispersão')
plt.grid(True)
plt.show()

1
[3]: #linearição dos dados para pro o ajustes linear
def linearizacao(dados):
return np.log(dados)

zdados = linearizacao(ydados)
print("Dados linearizado da população em milhões de abitantes ", zdados)

Dados linearizado da população em milhões de abitantes [2.29253476 2.66025954


2.85647021 3.42100001 3.71843826 3.94931879
4.26127043 4.53367418 4.86753445 5.01063529]

[4]: #definindo um função para fazer um ajuste linear


def func(x, a, b):
return a*x+b
params, pcov = curve_fit(func, xdados, zdados)
p0, p1 = params
print('a = {:.2f}'.format(p0))
print('b = {:.2f}'.format(p1))
plt.plot(xdados, zdados, 'r.')
plt.xlabel('Ano')
plt.ylabel("pop.(milhões)")
plt.title('Grafico de dispersão')
plt.plot(xdados, func(xdados,*params), 'b')
plt.show()

2
a = 0.02
b = -41.47

[5]: #Ajustando a funçao exponencial


def f(x, a, b):
return b*np.exp(a*x)

a = p0
b = np.exp(p1)

ydados_ajustado = f(xdados, a, b)
plt.xlabel('Ano')
plt.ylabel("pop.(milhões)")
plt.title('Grafico de dispersão')
plt.plot(xdados, ydados, 'r.' )
plt.plot(xdados, f(xdados, a, b), 'b')
plt.show()

3
[6]: #encontrando o numero da população em 2000
def func_dois(d):
return b*np.exp(a*d)
d=2000
print ('A estimativa para a população brasileira (em mihões de habitantes) no␣
,→ano de 2000 é % .1f'%func_dois(d))

A estimativa para a população brasileira (em milhões de habitantes) no ano de


2000 é 185.5

2 Problema 2
Durante a reação de saponificação de quantidades equimolares de hidróxido de sódio e acetato de
etila, a concentração (/) varia com o tempo () de acordo com a equação:

1/ = 1/0 + k

na qual 0 é a concentração inicial e $ (/) $é a constante da reação. Os seguintes resultados foram


obtidos em ensaios de laboratórios, a temperatura de 35°C:

t[min] 1.0 2.0 3.0 4.0 5.0 7.0 10.0 12.0 15.0 20.0 25.0
lC [l/mol ] 24.7 32.4 38.4 45.0 52.3 65.6 87.6 102 135 154 192

Obter a estimativa da constante de reação e da concentração inicial, empregando o método dos


mínimos quadrados.

4
[7]: #plotando o grafico do probelema
t_min = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 10,12.0, 15.0, 20.0, 25.0])
lc_lmol = np.array([24.7, 32.4, 38.4, 45.0, 52.3, 65.6, 87.6, 102, 135, 154,␣
,→192])

plt.plot(t_min, lc_lmol, 'r.')


plt.xlabel('t[min]')
plt.ylabel("lC[l/mol]")
plt.title('Grafico de dispersão')
plt.grid(True)
plt.show()

[8]: #Encontrando os valores de k e c0


def fun(c,k,t):
return c*k + t
param_s, pcov = curve_fit(fun,t_min,lc_lmol)
p0, p1 = param_s
print("RESPOSTA DO PROBLEMA")
print('constante da reação (k) = {:.2f}'.format(p0))
print('Concentração inicial (C0) = {:.2f}'.format(1/p1),"(mol/L)")
plt.plot(t_min, lc_lmol, 'r.')
plt.xlabel('t[min]')
plt.ylabel("lC[l/mol]")
plt.title('Grafico de dispersão')

5
plt.plot(t_min, fun(t_min,*param_s), 'b')
plt.show()

RESPOSTA DO PROBLEMA
constante da reação (k) = 7.04
Concentração inicial (C0) = 0.06 (mol/L)

3 Problema 3
Seja M a massa de um material radioativo. Num laboratório foram feitas as seguintes medições

t[ anos] 1 2 3 4 5
6
M[mg] 8.75 4.5 2.38 1.75 1.34
1.0

Determine o instante em que teremos uma massa de 1 decigrama sabendo-se que $ M(t) = M eˆ{at}
$ onde $ M_0 $ é a massa do material no instante t = 0

[9]: #plotando o grafico do probelema


t_anos = np.array([1, 2, 3, 4, 5, 6])
M_mg = np.array([8.75, 4.5, 2.38, 1.75, 1.34, 1.0])
plt.plot(t_anos, M_mg, 'r.')
plt.xlabel('t[anos]')

6
plt.ylabel("M[mg]")
plt.title('Grafico de dispersão')
plt.grid(True)
plt.show()

[10]: def func2(t, m, a):


return m*np.exp(a*t)
para_m_s, pcov = curve_fit(func2,t_anos,M_mg)
p2, p3 = para_m_s
print('a = {:.2f}'.format(p3))
print('m0 = {:.2f}'.format(p2))
plt.plot(t_anos, M_mg, 'r.')
plt.xlabel('t[anos]]')
plt.ylabel("M[mg]")
plt.title('Grafico de dispersão')
plt.plot(t_anos, func2(t_anos,*para_m_s), 'b')
plt.show()

a = -0.57
m0 = 15.05

7
[11]: # modelando a equação do problema obten-se a e seguinte função par obter o tempo␣
,→t:

d=100
t=(np.log(d)-np.log(p2))/p3
print("O instante em que tem-se 1 decigrama sera no instante t={:.2f}".format(t))

O instante em que tem-se 1 decigrama sera no instante t=-3.34

4 Problema 4
Mr. K. P Lear (1609) teve a ideia de que a terra se move ao redor do sol em órbita elíptica, com o
sol em um dos focos. Depois de muitas observações e cálculos, obteve-se a tabela seguinte, onde r
é a distância da terra ao sol (em milhões de Km) e α é o ângulo (em graus) entre a linha Terra-Sol
e o eixo principal da elipse.

α[ graus] 0 45 90 135 180


6
r [10 km] 147 148 150 151 152

Sabendo que uma elipse pode ser escrita pela fórmula:


ρ
r=
1 + cos

Estime os valores de ρ e ϵ.

8
[12]: #plotando o grafico do probelema
_graus = np.array([0, 45, 90, 135, 180])
r_km = np.array([147, 148, 150, 151, 152])
plt.plot(_graus, r_km, 'r.')
plt.xlabel('$ [graus]$')
plt.ylabel("$r[10^6km]$")
plt.title('Grafico de dispersão')
plt.grid(True)
plt.show()

[24]: # Função para enconvontrar rho e e


def func_tre(aph, ro, e):
return ro/(1+(e*np.cos(aph)))
para_ms, pcov = curve_fit(func_tre,_graus,r_km )
P4,P5=para_ms
beta = "\u03C1"
e="\u0190"
print(beta," rho= {:.2f}".format(P4))
print(e," e = :{:.2f}".format(P5))
plt.plot(_graus,r_km, 'r.')
plt.xlabel('$ [graus]$')
plt.ylabel("$r[10^6km]$")
plt.title('Grafico de dispersão')

9
plt.plot(_graus, func_tre(_graus,*para_ms), 'b')
plt.show()

rho = 149.34
e = 0.02

5 Problema 5
A resistência à compressão do concreto, , decresce com o aumento da razão água/cimento, /c(em
galões de água por saco de cimento). A resistência à compressão de três amostras de cilindros
para várias razões /c está mostrada na figura ao lado e na tabela abaixo:

/c[ gua/cimento ] 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0
[ Resistncia] 7000 6125 5237 4665 4123 3810 3107 3070 2580 2287

Usando o método dos mínimos quadrados, ajuste aos dados, utilizando uma função do tipo:

K1 e − k 2 c

[14]: #Plotando o grafico do problema


agua_cime = np.array([4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0])
Resistencia = np.array([7000, 6125, 5237, 4665, 4123, 3810, 3107, 3070, 2580,␣
,→2287])

10
plt.plot(agua_cime, Resistencia , 'r.')
plt.xlabel('$/c {[}água/cimento{]}$')
plt.ylabel("${[}Resistência{]}$")
plt.title('Grafico de dispersão')
plt.grid(True)
plt.show()

[15]: def func_for(w_c, k1, k2):


return k1 * np.exp(-k2*w_c)
para_msf, pcov = curve_fit(func_for,agua_cime,Resistencia)
P6,P7=para_msf
print("k1 = {:.2f}".format(P6))
print("k2 = {:.2f}".format(P7))
plt.plot(agua_cime,Resistencia, 'r.')
plt.xlabel('$/c {[}água/cimento{]}$')
plt.ylabel("${[}Resistência{]}$")
plt.title('Grafico de dispersão')
plt.plot(agua_cime, func_for(agua_cime,*para_msf), 'b')
plt.show()

k1 = 21112.41
k2 = 0.25

11
Com os valores obtidos para K1 e K2 tem-se a seguinte função:
σ = 21112, 4e−0.25 c

[ ]:

6 Problema 6
A tabela abaixo relaciona a quantidade ideal de calorias, em função da idade e do peso, para
homens que possuem atividade física moderada e vivem a uma temperatura ambiente de 20C,
para as idades de 25,45 e 60 anos.

p 25 45 65
50 2500 2350 1950
60 2850 2700 2250
70 3200 3000 2550
80 3550 3350 2800
A) Usando o método dos mínimos quadrados, encontre uma expressão da forma:
Cal = bp + ci
que ajuste os dados para homens de 45 anos.
B) Refaça o exercício anterior considerando homens de 70 quilos

12
[16]: #Plotando o grafico do problema
p = np.array([50, 60, 70, 80])
cal = np.array([2350, 2700, 3000, 3350])
plt.plot(p, cal , 'r.')
plt.xlabel('Peso (Kg)')
plt.ylabel('Calorias')
plt.title('Grafico de dispersão')
plt.grid(True)
plt.show()

[17]: #Ajustando a função


def fu2(y,b,c ):
return b*y + 45*c
param, pcov = curve_fit(fu2, p, cal)
p5, p6 = param
print('b = {:.2f}'.format(p5))
print('c = {:.2f}'.format(p6))
plt.plot(p, cal, 'r.')
plt.xlabel('Peso (Kg)')
plt.ylabel('Calorias')
plt.plot(p, fu2(p, *param), 'b')
plt.show()

b = 33.00

13
c = 15.67

Função para homens de 45 anos:

Cal = 33p + (15, 67 ∗ 45)

Resolução B)
[18]: #Plotando o grafico do problema
p2 = np.array([25, 45, 65])
cal2 = np.array([3200, 3000, 2550])
plt.plot(p2, cal2, 'r.')
plt.xlabel('Peso (Kg)')
plt.ylabel('Calorias')
plt.title('Grafico de dispersão')
plt.grid(True)
plt.show()

14
[19]: #Ajustando a função
def fu_2(e,b, c ):
return (b*70) + (c*e)
para, pcov = curve_fit(fu_2, p2, cal2)
p6, p7 = para
print('b = {:.2f}'.format(p6))
print('c = {:.2f}'.format(p7))
plt.plot(p2, cal2, 'r.')
plt.xlabel('Peso (Kg)')
plt.ylabel('Calorias')
plt.plot(p2, fu_2(p2, *para), 'b')
plt.show()

b = 52.11
c = -16.25

15
Função para homens com 70 quilos:

Cal = (52, 11 ∗ 70) − 16.25i

7 Problema 7
Após serem efetuadas medições num gerador de corrente contínua, foram obtidos os seguintes
valores, indicados por um voltímetro e um amperímetro.

I [ A] 1.58 1.80 2.15 2.5 3.01 3.5 4 4.5 4.8


V [volts] 210 195 160 120 90 60 80 120 150
A) Ajuste os dados por um polinômio de grau adequado.
B) Estime o valor a ser obtido no voltímetro quando o amperímetro estiver marcando 3.05A

Resolução A)
[20]: #plotando o grafico do probelema
i_a = np.array([1.58, 1.80, 2.15, 2.5, 3.01, 3.5, 4, 4.5, 4.8])
V_volt = np.array([210, 195, 160, 120, 90, 60, 80, 120, 150])
plt.plot(i_a, V_volt, 'r.')
plt.xlabel('$I{[}A{]}$')
plt.ylabel("V{[}volts{]}")
plt.title('Grafico de dispersão')
plt.grid(True)

16
plt.show()

[21]: #definindo um função para fazer um ajuste linear


def f_unc(x, a, b, c):
return a*x**2 + b*x + c
p_aram, pcov = curve_fit(f_unc, i_a, V_volt)
p_7, p7, c= p_aram
print('a = {:.2f}'.format(p_7))
print('b = {:.2f}'.format(p7))
print('c = {:.2f}'.format(c))
plt.plot(i_a, V_volt, 'r.')
plt.plot(i_a, f_unc(i_a, *p_aram), 'b')
plt.show()

a = 40.81
b = -284.51
c = 570.93

17
Temos o seguinte polinomio de grau dois :

V = 40, 81i2 − 284, 51i + 570, 93

Resolução B)
[22]: i=3.05
a= 40.81*i**2 - 284.51*i + 570.93
print('o valor obtido no voltímetro quando o amperímetro estiver marcando 3.05␣
,→sera de: {:.2f}'.format(a),"Volts")

o valor obtido no voltímetro quando o amperímetro estiver marcando 3.05 sera


de: 82.81 Volts

[ ]:

18

Você também pode gostar