import math, numpy as np                         # para usar expressões matemáticas

from matplotlib import pyplot as plt # para fazer gráficos 

# Resolução da equação u''(t)=-u(t), u(0)=0 e u'(0)=1. escrira como u'=v e v'=-u, u(0)=0 e v(0)=1.

L=1                                 # Dados de inicilização.
n=4                                 # número de iterações do método de Taylor de ordem 2.
h=L/n                                # passo para o método 
u=[]                                 # Vetor para guardar coordenadas discretas u
v=[]                                     # Vetor para guardar coordenadas discretas v.
t=[]
t.append(0)                         
u.append(0)
v.append(1)

def F(s,u,v):                        # Equação (u',v')=F(x,u,v)=(v,-u).
  du=v
  dv=-u
  return [du,dv]

def G(s,u,v):                        # Equação (u'',v'')=G(x,u,v)=(-u,-v).
  du=-u
  dv=-v
  return [du,dv]
  
for i in range(1,n+1):                 # Método de taylor de ordem 2 u_(n+1)=u_n+hF(s_n,u_n)+h^2G(s_n,u_n)/2  
    Fp=F(t[i-1],u[i-1],v[i-1]) 
    Gp=G(t[i-1],u[i-1],v[i-1]) 
    u.append(u[i-1]+h*Fp[0]+(h**2)*Gp[0]/2)  
    v.append(v[i-1]+h*Fp[1]+(h**2)*Gp[1]/2)
    t.append(t[i-1]+h)

print('t', t)
print('u', u)

# Solução exata u(t)=sen(t)

def f(s):
    return np.sin(s)
    
s=np.linspace(0,1,100)
plt.plot(s,f(s),label='u(t)=sen(t)')
plt.plot(t,u,'*',label='u_n')
plt.ylabel('u')
plt.xlabel('t')
plt.legend()
plt.title('Aproximação pelo método de Taylor de ordem 2')
plt.show()

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: