Escolar Documentos
Profissional Documentos
Cultura Documentos
s, h, r = sympy.symbols('s,h,r')
1
1.3 Adams-Bashforth de segunda ordem
dS(t)
Vamos encontrar uma aproximação g(t) de = F (S(t), t) para calcular o incremento aproxi-
dt
mado do nosso passo, a integral somada à direita em
∫ ti+1
Si+1 ≈ Si + g(t)dt.
ti
2
[12]: g_2P = g_s(r, 2, 1).expand().simplify().collect((f1, f2, f3))
g_2P
[12]: ( r2 3r )
( 2 )
( 2
r r
)
f1 − + 1 + f2 −r + 2r + f3 −
2 2 2 2
[13]: sympy.integrate(h * g_2P, (r, 1, 2)).collect(h)
[13]: ( f1 2f2 5f3
)
h − + +
12 3 12
3
F3 = F(S3, t + dt / 2)
S4 = x[-1] + dt * F3
F4 = F(S4, t + dt)
x.append(x[-1] + dt / 6 * (F1 + 2 * F2 + 2 * F3 + F4))
t += dt
return x
4
1.6.4 Resolvendo o PVI-2 modificado
Solução exata do PVI-2:
( ) ( ( ) − k (t−t ) )
v(t) −g mk + v0 + g k e (
m m 0
) .
S(t) = = ( ) −m
k
y(t) y0 − g m
k (t − t 0 ) − v 0 + g m m
k k e (t−t0 )
− 1
Ou seja, (
m m) m ( − k t )
y(t) = 200 − 9.8 t − 5 + 9.8 e m −1
k k k
Inicializando os parâmetros:
[22]: t0 = 0;
v0, y0 = 5, 200
x0_pvi2M = [ v0, y0 ]
k = 0.25; m = 2
g = 9.8
F_pvi2M = lambda x, t: np.array([ -9.8 - k / m * x[0],
x[0]])
y_exato = y_(10)
y_exato
[23]: -107.95600046511885
5
Encontrando as soluções aproximadas para os diferentes valores de ∆t:
[24]: dt = [1 / 10 ** i for i in range(5)]
solucoes = []
for i in range(1,5):
solucoes.append(adams_bashforth_4th(F_pvi2M, x0_pvi2M, 10, 0, dt[i]))
[28]: [201.22360449690828,
201.22364412331328,
201.22374680088367,
201.22374760424992]
6
[29]: [5, 49, 495, 4946]
[31]: indices_altura_do_mar = []
for y in Y:
for i in range(len(y)):
if y[i] < 0:
indices_altura_do_mar.append(i - 1)
break
indices_altura_do_mar
,→solucoes[i][indices_altura_do_mar[i]][0]))
print(tabulate(linhas, colunas))